From dbcb9aed37571e4ff2de53b4bdf6efde43c00945 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 13 Aug 2013 01:56:10 -0500 Subject: [PATCH 001/386] Moved es_systems.cfg to use XML. Updated README.md to reflect new format. "descname" has been renamed to "fullname". --- README.md | 38 +++++-- src/SystemData.cpp | 197 ++++++++++++++------------------- src/SystemData.h | 6 +- src/components/GuiGameList.cpp | 2 +- src/main.cpp | 2 +- 5 files changed, 118 insertions(+), 127 deletions(-) diff --git a/README.md b/README.md index 290fd013a..ad225c953 100644 --- a/README.md +++ b/README.md @@ -110,21 +110,42 @@ You can use `--help` to view a list of command-line options. Briefly outlined he Writing an es_systems.cfg ========================= -The file `~/.emulationstation/es_systems.cfg` contains the system configuration data for EmulationStation. A system is a NAME, DESCNAME, PATH, EXTENSION, and COMMAND. You can define any number of systems, just use every required variable again. You can switch between systems by pressing left and right. They will cycle in the order they are defined. +The file `~/.emulationstation/es_systems.cfg` contains the system configuration data for EmulationStation, written in XML. -The NAME is what ES will use to internally identify the system. Theme.xml and gamelist.xml files will also be searched for in `~/.emulationstation/NAME/` if not found at the root of PATH. It is recommended that you abbreviate here if necessary, e.g. "nes". +The order EmulationStation displays systems reflects the order you define them in. -The DESCNAME is a "pretty" name for the system - it show up in a header if one is displayed. It is optional; if not supplied, it will copy NAME (note: DESCNAME must also *not* be the last tag you define for a system! This is due to the nature of how optional tags are implemented.). +**NOTE:** A system *must* have at least one game present in its "path" directory, or ES will ignore it! If no systems are found, ES won't even start! -The PATH is where ES will start the search for ROMs. All subdirectories (and links!) will be included. +Here's an example es_systems.cfg: -**NOTE:** A system *must* have at least one game present in its PATH directory, or ES will ignore it. +``` + -The EXTENSION is a list of extensions ES will consider valid and add to the list when searching. Each extension *must* start with a period. The list is delimited by a space. + + + + + SNES -The COMMAND is the shell command ES will execute to start your emulator. As it is evaluated by the shell (i.e. bash), you can do some clever tricks if need be. + + Super Nintendo Entertainment System -The following "tags" are replaced by ES in COMMANDs: + + ~/roms/snes + + + .smc .sfc .SMC .SFC + + + snesemulator %ROM% + + + +``` + +The following "tags" are replaced by ES in launch commands: `%ROM%` - Replaced with absolute path to the selected ROM, with most Bash special characters escaped with a backslash. @@ -132,6 +153,7 @@ The following "tags" are replaced by ES in COMMANDs: `%ROM_RAW%` - Replaced with the unescaped absolute path to the selected ROM. If your emulator is picky about paths, you might want to use this instead of %ROM%, but enclosed in quotes. + gamelist.xml ============ diff --git a/src/SystemData.cpp b/src/SystemData.cpp index e891197ba..1a498f82f 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -20,20 +20,19 @@ namespace fs = boost::filesystem; std::string SystemData::getStartPath() { return mStartPath; } std::string SystemData::getExtension() { return mSearchExtension; } -SystemData::SystemData(std::string name, std::string descName, std::string startPath, std::string extension, std::string command) +SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, const std::string& command) { mName = name; - mDescName = descName; + mFullName = fullName; + mStartPath = startPath; //expand home symbol if the startpath contains ~ - if(startPath[0] == '~') + if(mStartPath[0] == '~') { - startPath.erase(0, 1); - std::string home = getHomePath(); - startPath.insert(0, home); - } + mStartPath.erase(0, 1); + mStartPath.insert(0, getHomePath()); + } - mStartPath = startPath; mSearchExtension = extension; mLaunchCommand = command; @@ -177,9 +176,12 @@ std::string SystemData::getName() return mName; } -std::string SystemData::getDescName() +std::string SystemData::getFullName() { - return mDescName; + if(mFullName.empty()) + return mName; + else + return mFullName; } //creates systems from information located in a config file @@ -187,132 +189,99 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) { deleteSystems(); - LOG(LogInfo) << "Loading system config file..."; + LOG(LogInfo) << "Loading system config file " << path << "..."; if(!fs::exists(path)) { - LOG(LogInfo) << "System config file \"" << path << "\" doesn't exist!"; + LOG(LogError) << "File does not exist!"; + if(writeExample) writeExampleConfig(path); return false; } - std::ifstream file(path.c_str()); - if(file.is_open()) + pugi::xml_document doc; + pugi::xml_parse_result res = doc.load_file(path.c_str()); + + if(!res) { - size_t lineNr = 0; - std::string line; - std::string sysName, sysDescName, sysPath, sysExtension, sysCommand; - while(file.good()) - { - lineNr++; - std::getline(file, line); - - //remove whitespace from line through STL and lambda magic - line.erase(std::remove_if(line.begin(), line.end(), [&](char c){ return std::string("\t\r\n\v\f").find(c) != std::string::npos; }), line.end()); - - //skip blank lines and comments - if(line.empty() || line.at(0) == '#') - continue; - - //find the name (left of the equals sign) and the value (right of the equals sign) - bool lineValid = false; - std::string varName; - std::string varValue; - const std::string::size_type equalsPos = line.find('=', 1); - if(equalsPos != std::string::npos) - { - lineValid = true; - varName = line.substr(0, equalsPos); - varValue = line.substr(equalsPos + 1, line.length() - 1); - } - - if(lineValid) - { - //map the value to the appropriate variable - if(varName == "NAME") - sysName = varValue; - else if(varName == "DESCNAME") - sysDescName = varValue; - else if(varName == "PATH") - { - if(varValue[varValue.length() - 1] == '/') - sysPath = varValue.substr(0, varValue.length() - 1); - else - sysPath = varValue; - //convert path to generic directory seperators - boost::filesystem::path genericPath(sysPath); - sysPath = genericPath.generic_string(); - } - else if(varName == "EXTENSION") - sysExtension = varValue; - else if(varName == "COMMAND") - sysCommand = varValue; - - //we have all our variables - create the system object - if(!sysName.empty() && !sysPath.empty() &&!sysExtension.empty() && !sysCommand.empty()) - { - if(sysDescName.empty()) - sysDescName = sysName; - - SystemData* newSystem = new SystemData(sysName, sysDescName, sysPath, sysExtension, sysCommand); - if(newSystem->getRootFolder()->getFileCount() == 0) - { - LOG(LogWarning) << "System \"" << sysName << "\" has no games! Ignoring it."; - delete newSystem; - }else{ - sSystemVector.push_back(newSystem); - } - - //reset the variables for the next block (should there be one) - sysName = ""; sysDescName = ""; sysPath = ""; sysExtension = ""; sysCommand = "" ; - } - }else{ - LOG(LogError) << "Error reading config file \"" << path << "\" - no equals sign found on line " << lineNr << ": \"" << line << "\"!"; - return false; - } - } - }else{ - LOG(LogError) << "Error - could not load config file \"" << path << "\"!"; + LOG(LogError) << "Could not parse config file!"; + LOG(LogError) << res.description(); return false; } - LOG(LogInfo) << "Finished loading config file - created " << sSystemVector.size() << " systems."; + //actually read the file + pugi::xml_node systemList = doc.child("systemList"); + + for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) + { + std::string name, fullname, path, ext, cmd; + name = system.child("name").text().get(); + fullname = system.child("fullname").text().get(); + path = system.child("path").text().get(); + ext = system.child("extension").text().get(); + cmd = system.child("command").text().get(); + + //validate + if(name.empty() || path.empty() || ext.empty() || cmd.empty()) + { + LOG(LogError) << "System \"" << name << "\" is missing name, path, extension, or command!"; + continue; + } + + //convert path to generic directory seperators + boost::filesystem::path genericPath(path); + path = genericPath.generic_string(); + + SystemData* newSys = new SystemData(name, fullname, path, ext, cmd); + if(newSys->getRootFolder()->getFileCount() == 0) + { + LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; + delete newSys; + }else{ + sSystemVector.push_back(newSys); + } + } + return true; } void SystemData::writeExampleConfig(const std::string& path) { - std::cerr << "Writing example config to \"" << path << "\"..."; - std::ofstream file(path.c_str()); - file << "# This is the EmulationStation Systems configuration file." << std::endl; - file << "# Lines that begin with a hash (#) are ignored, as are empty lines." << std::endl; - file << "# A sample system might look like this:" << std::endl; - file << "#NAME=nes" << std::endl; - file << "#DESCNAME=Nintendo Entertainment System" << std::endl; - file << "#PATH=~/ROMs/nes/" << std::endl; - file << "#EXTENSION=.nes .NES" << std::endl; - file << "#COMMAND=retroarch -L ~/cores/libretro-fceumm.so %ROM%" << std::endl << std::endl; - - file << "#NAME is a short name used internally (and in alternative paths)." << std::endl; - file << "#DESCNAME is a descriptive name to identify the system. It may be displayed in a header." << std::endl; - file << "#PATH is the path to start the recursive search for ROMs in. ~ will be expanded into the $HOME variable." << std::endl; - file << "#EXTENSION is a list of extensions to search for, separated by spaces. You MUST include the period, and it must be exact - it's case sensitive, and no wildcards." << std::endl; - file << "#COMMAND is the shell command to execute when a game is selected. %ROM% will be replaced with the (bash special-character escaped) path to the ROM." << std::endl << std::endl; - - file << "#Now try your own!" << std::endl; - file << "NAME=" << std::endl; - file << "DESCNAME=" << std::endl; - file << "PATH=" << std::endl; - file << "EXTENSION=" << std::endl; - file << "COMMAND=" << std::endl; + file << "\n" + "\n" + "\n" + " \n" + " \n" + "\n" + " \n" + " NES\n" + "\n" + " \n" + " Nintendo Entertainment System\n" + "\n" + " \n" + " ~/roms/nes\n" + "\n" + " \n" + " .nes .NES\n" + "\n" + " \n" + " retroarch -L ~/cores/libretro-fceumm.so %ROM%\n" + "\n" + " \n" + "\n"; file.close(); - std::cerr << "done. Go read it!\n"; + LOG(LogError) << "Example config written! Go read it at \"" << path << "\"!"; } void SystemData::deleteSystems() @@ -329,7 +298,7 @@ std::string SystemData::getConfigPath() std::string home = getHomePath(); if(home.empty()) { - LOG(LogError) << "$HOME environment variable empty or nonexistant!"; + LOG(LogError) << "Home path environment variable empty or nonexistant!"; exit(1); return ""; } diff --git a/src/SystemData.h b/src/SystemData.h index eaa31e4d0..b9be59079 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -11,12 +11,12 @@ class GameData; class SystemData { public: - SystemData(std::string name, std::string descName, std::string startPath, std::string extension, std::string command); + SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, const std::string& command); ~SystemData(); FolderData* getRootFolder(); std::string getName(); - std::string getDescName(); + std::string getFullName(); std::string getStartPath(); std::string getExtension(); std::string getGamelistPath(); @@ -32,7 +32,7 @@ public: static std::vector sSystemVector; private: std::string mName; - std::string mDescName; + std::string mFullName; std::string mStartPath; std::string mSearchExtension; std::string mLaunchCommand; diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index acd647f27..0e1dfaaf8 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -316,7 +316,7 @@ void GuiGameList::updateTheme() if(!mTheme->getBool("hideHeader")) { - mHeaderText.setText(mSystem->getDescName()); + mHeaderText.setText(mSystem->getFullName()); }else{ mHeaderText.setText(""); } diff --git a/src/main.cpp b/src/main.cpp index 67a9779c4..72c87aed3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -160,7 +160,7 @@ int main(int argc, char* argv[]) //make sure it wasn't empty if(SystemData::sSystemVector.size() == 0) { - LOG(LogError) << "No systems found! Does at least one system have a game present? (check that extensions match!)"; + LOG(LogError) << "No systems found! Does at least one system have a game present? (check that extensions match!)\n(Also, make sure you've updated your es_systems.cfg for XML!)"; return 1; } From 421797929d74f74409edac9271c2f283cb012c04 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 Aug 2013 07:16:49 -0500 Subject: [PATCH 002/386] New generic metadata backend. --- CMakeLists.txt | 2 + src/FileData.h | 4 +- src/FolderData.cpp | 10 +- src/GameData.cpp | 123 ++++++---------------- src/GameData.h | 60 +++-------- src/GuiComponent.cpp | 9 ++ src/GuiComponent.h | 7 +- src/MetaData.cpp | 126 ++++++++++++++++++++++ src/MetaData.h | 73 +++++++++++++ src/SystemData.cpp | 6 +- src/XMLReader.cpp | 175 +++++++++++-------------------- src/components/GuiGameList.cpp | 7 +- src/components/TextComponent.cpp | 10 ++ src/components/TextComponent.h | 3 + 14 files changed, 350 insertions(+), 265 deletions(-) create mode 100644 src/MetaData.cpp create mode 100644 src/MetaData.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e9aad13c..9d15d8510 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,6 +127,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h @@ -169,6 +170,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init.cpp diff --git a/src/FileData.h b/src/FileData.h index ebb44b9b9..de927a081 100644 --- a/src/FileData.h +++ b/src/FileData.h @@ -10,8 +10,8 @@ class FileData public: virtual ~FileData() { }; virtual bool isFolder() const = 0; - virtual const std::string & getName() const = 0; - virtual const std::string & getPath() const = 0; + virtual const std::string& getName() const = 0; + virtual const std::string& getPath() const = 0; }; #endif diff --git a/src/FolderData.cpp b/src/FolderData.cpp index ac9e08477..451ffbc33 100644 --- a/src/FolderData.cpp +++ b/src/FolderData.cpp @@ -82,7 +82,7 @@ bool FolderData::compareRating(const FileData* file1, const FileData* file2) const GameData * game1 = dynamic_cast(file1); const GameData * game2 = dynamic_cast(file2); if (game1 != nullptr && game2 != nullptr) { - return game1->getRating() < game2->getRating(); + return const_cast(game1)->metadata()->getFloat("rating") < const_cast(game2)->metadata()->getFloat("rating"); } return false; } @@ -93,7 +93,7 @@ bool FolderData::compareUserRating(const FileData* file1, const FileData* file2) const GameData * game1 = dynamic_cast(file1); const GameData * game2 = dynamic_cast(file2); if (game1 != nullptr && game2 != nullptr) { - return game1->getUserRating() < game2->getUserRating(); + return const_cast(game1)->metadata()->getFloat("userrating") < const_cast(game2)->metadata()->getFloat("userrating"); } return false; } @@ -104,7 +104,7 @@ bool FolderData::compareTimesPlayed(const FileData* file1, const FileData* file2 const GameData * game1 = dynamic_cast(file1); const GameData * game2 = dynamic_cast(file2); if (game1 != nullptr && game2 != nullptr) { - return game1->getTimesPlayed() < game2->getTimesPlayed(); + return const_cast(game1)->metadata()->getInt("playcount") < const_cast(game2)->metadata()->getInt("playcount"); } return false; } @@ -115,7 +115,7 @@ bool FolderData::compareLastPlayed(const FileData* file1, const FileData* file2) const GameData * game1 = dynamic_cast(file1); const GameData * game2 = dynamic_cast(file2); if (game1 != nullptr && game2 != nullptr) { - return game1->getLastPlayed() < game2->getLastPlayed(); + return const_cast(game1)->metadata()->getTime("lastplayed") < const_cast(game2)->metadata()->getTime("lastplayed"); } return false; } @@ -183,4 +183,4 @@ std::vector FolderData::getFilesRecursive(bool onlyFiles) const ++fdit; } return temp; -} \ No newline at end of file +} diff --git a/src/GameData.cpp b/src/GameData.cpp index ef8384dfd..590fedd89 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -1,23 +1,14 @@ #include "GameData.h" #include #include +#include +#include - -const std::string GameData::xmlTagGameList = "gameList"; -const std::string GameData::xmlTagGame = "game"; -const std::string GameData::xmlTagName = "name"; -const std::string GameData::xmlTagPath = "path"; -const std::string GameData::xmlTagDescription = "desc"; -const std::string GameData::xmlTagImagePath = "image"; -const std::string GameData::xmlTagRating = "rating"; -const std::string GameData::xmlTagUserRating = "userrating"; -const std::string GameData::xmlTagTimesPlayed = "timesplayed"; -const std::string GameData::xmlTagLastPlayed = "lastplayed"; - - -GameData::GameData(SystemData* system, std::string path, std::string name) - : mSystem(system), mPath(path), mName(name), mRating(0.0f), mUserRating(0.0f), mTimesPlayed(0), mLastPlayed(0) +GameData::GameData(SystemData* system, std::string path) + : mSystem(system), mPath(path), mBaseName(boost::filesystem::path(path).stem().string()), mMetaData(MetaDataList::getDefaultGameMDD()) { + if(mMetaData.get("name").empty()) + mMetaData.set("name", mBaseName); } bool GameData::isFolder() const @@ -25,90 +16,20 @@ bool GameData::isFolder() const return false; } -const std::string & GameData::getName() const +const std::string& GameData::getName() const { - return mName; + return mMetaData.get("name"); } -void GameData::setName(const std::string & name) -{ - mName = name; -} - -const std::string & GameData::getPath() const +const std::string& GameData::getPath() const { return mPath; } -void GameData::setPath(const std::string & path) -{ - mPath = path; -} - -const std::string & GameData::getDescription() const -{ - return mDescription; -} - -void GameData::setDescription(const std::string & description) -{ - mDescription = description; -} - -const std::string & GameData::getImagePath() const -{ - return mImagePath; -} - -void GameData::setImagePath(const std::string & imagePath) -{ - mImagePath = imagePath; -} - -float GameData::getRating() const -{ - return mRating; -} - -void GameData::setRating(float rating) -{ - mRating = rating; -} - -float GameData::getUserRating() const -{ - return mUserRating; -} - -void GameData::setUserRating(float rating) -{ - mUserRating = rating; -} - -size_t GameData::getTimesPlayed() const -{ - return mTimesPlayed; -} - -void GameData::setTimesPlayed(size_t timesPlayed) -{ - mTimesPlayed = timesPlayed; -} - -std::time_t GameData::getLastPlayed() const -{ - return mLastPlayed; -} - -void GameData::setLastPlayed(std::time_t lastPlayed) -{ - mLastPlayed = lastPlayed; -} - std::string GameData::getBashPath() const { //a quick and dirty way to insert a backslash before most characters that would mess up a bash path - std::string path = mPath; + std::string path = getPath(); const char* invalidChars = " '\"\\!$^&*(){}[]?;<>"; for(unsigned int i = 0; i < path.length(); i++) @@ -133,6 +54,26 @@ std::string GameData::getBashPath() const //returns the boost::filesystem stem of our path - e.g. for "/foo/bar.rom" returns "bar" std::string GameData::getBaseName() const { - boost::filesystem::path path(mPath); - return path.stem().string(); + return mBaseName; +} + +void GameData::incTimesPlayed() +{ + int timesPlayed = metadata()->getInt("playcount"); + timesPlayed++; + + std::stringstream ss(); + metadata()->set("playcount", std::to_string(static_cast(timesPlayed))); +} + +void GameData::lastPlayedNow() +{ + std::stringstream ss; + ss << std::time(nullptr); + metadata()->set("lastplayed", ss.str()); +} + +MetaDataList* GameData::metadata() +{ + return &mMetaData; } diff --git a/src/GameData.h b/src/GameData.h index ebfca5e69..e67ec2e1d 100644 --- a/src/GameData.h +++ b/src/GameData.h @@ -2,70 +2,44 @@ #define _GAMEDATA_H_ #include -#include #include "FileData.h" #include "SystemData.h" +#include "MetaData.h" //This class holds information about a game: at the least, its name, system, and path. Additional information is optional and read by other classes. class GameData : public FileData { public: - //static tag names for reading/writing XML documents. This might fail in PUGIXML_WCHAR_MODE - //TODO: The class should have member to read fromXML() and write toXML() probably... - static const std::string xmlTagGameList; - static const std::string xmlTagGame; - static const std::string xmlTagName; - static const std::string xmlTagPath; - static const std::string xmlTagDescription; - static const std::string xmlTagImagePath; - static const std::string xmlTagRating; - static const std::string xmlTagUserRating; - static const std::string xmlTagTimesPlayed; - static const std::string xmlTagLastPlayed; + GameData(SystemData* system, std::string path); - GameData(SystemData* system, std::string path, std::string name); - - const std::string & getName() const; - void setName(const std::string & name); - - const std::string & getPath() const; - void setPath(const std::string & path); - - const std::string & getDescription() const; - void setDescription(const std::string & description); - - const std::string & getImagePath() const; - void setImagePath(const std::string & imagePath); - - float getRating() const; - void setRating(float rating); - - float getUserRating() const; - void setUserRating(float rating); - - size_t getTimesPlayed() const; - void setTimesPlayed(size_t timesPlayed); - - std::time_t getLastPlayed() const; - void setLastPlayed(std::time_t lastPlayed); + const std::string& getName() const override; + const std::string& getPath() const override; + + void incTimesPlayed(); + void lastPlayedNow(); std::string getBashPath() const; std::string getBaseName() const; - bool isFolder() const; + bool isFolder() const override; + + MetaDataList* metadata(); + private: SystemData* mSystem; - std::string mPath; - std::string mName; + const std::string mPath; + const std::string mBaseName; //extra data - std::string mDescription; + /*std::string mDescription; std::string mImagePath; float mRating; float mUserRating; size_t mTimesPlayed; - std::time_t mLastPlayed; + std::time_t mLastPlayed;*/ + + MetaDataList mMetaData; }; #endif diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 4eb5d69f5..06f55d287 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -157,3 +157,12 @@ const Eigen::Affine3f GuiComponent::getTransform() mTransform.translate(mPosition); return mTransform; } + +void GuiComponent::setValue(const std::string& value) +{ +} + +std::string GuiComponent::getValue() const +{ + return ""; +} diff --git a/src/GuiComponent.h b/src/GuiComponent.h index 23c371ac8..bda2406f1 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -19,10 +19,10 @@ public: //Called when time passes. Default implementation also calls update(deltaTime) on children - so you should probably call GuiComponent::update(deltaTime) at some point. virtual void update(int deltaTime); - //Called when it's time to render. By default, just calls renderChildren(transform). + //Called when it's time to render. By default, just calls renderChildren(parentTrans * getTransform()). //You probably want to override this like so: //1. Calculate the new transform that your control will draw at with Eigen::Affine3f t = parentTrans * getTransform(). - //2. Set the renderer to use that new transform as the model matrix - Renderer::setModelMatrix(t.data()); + //2. Set the renderer to use that new transform as the model matrix - Renderer::setMatrix(t); //3. Draw your component. //4. Tell your children to render, based on your component's transform - renderChildren(t). virtual void render(const Eigen::Affine3f& parentTrans); @@ -51,6 +51,9 @@ public: const Eigen::Affine3f getTransform(); + virtual std::string getValue() const; + virtual void setValue(const std::string& value); + protected: void renderChildren(const Eigen::Affine3f& transform) const; diff --git a/src/MetaData.cpp b/src/MetaData.cpp new file mode 100644 index 000000000..3f88f83ca --- /dev/null +++ b/src/MetaData.cpp @@ -0,0 +1,126 @@ +#include "MetaData.h" +#include "components/TextComponent.h" +#include "Log.h" + +MetaDataList::MetaDataList() +{ +} + +MetaDataList::MetaDataList(const std::vector& mdd) +{ + for(auto iter = mdd.begin(); iter != mdd.end(); iter++) + set(iter->key, iter->defaultValue); +} + +std::vector MetaDataList::getDefaultGameMDD() +{ + MetaDataDecl decls[] = { + {"name", MD_STRING, ""}, + {"desc", MD_STRING, ""}, + {"image", MD_IMAGE_PATH, ""}, + {"rating", MD_RATING, "0"}, + {"timesplayed", MD_INT, "0"}, + {"playcount", MD_TIME, "0"} + }; + + std::vector mdd(decls, decls + sizeof(decls) / sizeof(decls[0])); + return mdd; +} + +MetaDataList MetaDataList::createFromXML(const std::vector& mdd, pugi::xml_node node) +{ + MetaDataList mdl; + + for(auto iter = mdd.begin(); iter != mdd.end(); iter++) + { + pugi::xml_node md = node.child(iter->key.c_str()); + if(md) + { + mdl.set(iter->key, md.text().get()); + }else{ + mdl.set(iter->key, iter->defaultValue); + } + } + + return mdl; +} + +void MetaDataList::appendToXML(pugi::xml_node parent, const std::vector& ignoreDefaults) const +{ + for(auto iter = mMap.begin(); iter != mMap.end(); iter++) + { + bool write = true; + for(auto mddIter = ignoreDefaults.begin(); mddIter != ignoreDefaults.end(); mddIter++) + { + if(mddIter->key == iter->first) + { + if(iter->second == mddIter->defaultValue) + write = false; + + break; + } + } + + if(write) + parent.append_child(iter->first.c_str()).text().set(iter->second.c_str()); + } +} + +void MetaDataList::set(const std::string& key, const std::string& value) +{ + mMap[key] = value; +} + +const std::string& MetaDataList::get(const std::string& key) const +{ + return mMap.at(key); +} + +int MetaDataList::getInt(const std::string& key) const +{ + return atoi(get(key).c_str()); +} + +float MetaDataList::getFloat(const std::string& key) const +{ + return (float)atof(get(key).c_str()); +} + +std::time_t MetaDataList::getTime(const std::string& key) const +{ + return (std::time_t) atoi(get(key).c_str()); +} + +GuiComponent* MetaDataList::makeDisplay(Window* window, MetaDataType as) +{ + switch(as) + { + default: + TextComponent* comp = new TextComponent(window); + return comp; + } +} + +GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) +{ + switch(as) + { + default: + TextComponent* comp = new TextComponent(window); + return comp; + } +} + +GuiComponent* MetaDataList::makeDisplay(Window* window, MetaDataDecl from) +{ + GuiComponent* comp = makeDisplay(window, from.type); + comp->setValue(get(from.key)); + return comp; +} + +GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataDecl from) +{ + GuiComponent* comp = makeEditor(window, from.type); + comp->setValue(get(from.key)); + return comp; +} diff --git a/src/MetaData.h b/src/MetaData.h new file mode 100644 index 000000000..ccc0218c6 --- /dev/null +++ b/src/MetaData.h @@ -0,0 +1,73 @@ +#pragma once + +#include "pugiXML/pugixml.hpp" +#include +#include +#include "GuiComponent.h" +#include + +enum MetaDataType +{ + //generic types + MD_STRING, + MD_INT, + MD_FLOAT, + + //specialized types + MD_IMAGE_PATH, + MD_RATING, + MD_TIME +}; + +struct MetaDataDecl +{ + std::string key; + MetaDataType type; + std::string defaultValue; +}; + +class MetaDataList +{ +public: + static std::vector getDefaultGameMDD(); + + static MetaDataList createFromXML(const std::vector& mdd, pugi::xml_node node); + + //MetaDataDecl required to set our defaults. + MetaDataList(const std::vector& mdd); + + void set(const std::string& key, const std::string& value); + const std::string& get(const std::string& key) const; + int getInt(const std::string& key) const; + float getFloat(const std::string& key) const; + std::time_t getTime(const std::string& key) const; + + GuiComponent* makeDisplay(Window* window, MetaDataType as); + GuiComponent* makeDisplay(Window* window, MetaDataDecl from); + + GuiComponent* makeEditor(Window* window, MetaDataType as); + GuiComponent* makeEditor(Window* window, MetaDataDecl from); + + void appendToXML(pugi::xml_node parent, const std::vector& ignoreDefaults = std::vector()) const; + +private: + MetaDataList(); + + std::map mMap; +}; + + + +//options for storing metadata... +//store internally everything as a string - this is all going to be read to/from XML anyway, after all +//store using individual get/set functions ala Settings - this is a fair amount of work but the most explicit, for better or worse + +//let's think about some of the special types we would like to support... +//image paths, sound paths, ratings, play counts +//these get represented behind-the-scenes as strings, floats, and integers, and are eventually saved as strings +//the only specialty is how they're edited and viewed, really + +//so we need... +//to be able to iterate through the available metadata +//create components designed to either DISPLAY or EDIT a given piece of metadata +//save and load metadata diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 1a498f82f..ab99eafae 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -96,8 +96,8 @@ void SystemData::launchGame(Window* window, GameData* game) window->normalizeNextUpdate(); //update number of times the game has been launched and the time - game->setTimesPlayed(game->getTimesPlayed() + 1); - game->setLastPlayed(std::time(nullptr)); + game->incTimesPlayed(); + game->lastPlayedNow(); } void SystemData::populateFolder(FolderData* folder) @@ -145,7 +145,7 @@ void SystemData::populateFolder(FolderData* folder) //if it matches, add it if(chkExt == extension) { - GameData* newGame = new GameData(this, filePath.generic_string(), filePath.stem().string()); + GameData* newGame = new GameData(this, filePath.generic_string()); folder->pushFileData(newGame); isGame = true; break; diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 517ae8509..22c9ed282 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -90,11 +90,7 @@ GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) loops++; } - - //find gameName - std::string gameName = gamePath.substr(separator + 1, gamePath.find(".", separator) - separator - 1); - - GameData* game = new GameData(system, gameAbsPath, gameName); + GameData* game = new GameData(system, gameAbsPath); folder->pushFileData(game); return game; } @@ -117,19 +113,19 @@ void parseGamelist(SystemData* system) return; } - pugi::xml_node root = doc.child(GameData::xmlTagGameList.c_str()); + pugi::xml_node root = doc.child("gameList"); if(!root) { - LOG(LogError) << "Could not find <" << GameData::xmlTagGameList << "> node in gamelist \"" << xmlpath << "\"!"; + LOG(LogError) << "Could not find node in gamelist \"" << xmlpath << "\"!"; return; } - for(pugi::xml_node gameNode = root.child(GameData::xmlTagGame.c_str()); gameNode; gameNode = gameNode.next_sibling(GameData::xmlTagGame.c_str())) + for(pugi::xml_node gameNode = root.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) { - pugi::xml_node pathNode = gameNode.child(GameData::xmlTagPath.c_str()); + pugi::xml_node pathNode = gameNode.child("path"); if(!pathNode) { - LOG(LogError) << "<" << GameData::xmlTagGame << "> node contains no <" << GameData::xmlTagPath << "> child!"; + LOG(LogError) << " node contains no child!"; continue; } @@ -137,11 +133,18 @@ void parseGamelist(SystemData* system) boost::filesystem::path gamePath(pathNode.text().get()); std::string path = gamePath.generic_string(); - //expand "." + //expand '.' if(path[0] == '.') { path.erase(0, 1); - path.insert(0, system->getRootFolder()->getPath()); + path.insert(0, boost::filesystem::path(xmlpath).parent_path().generic_string()); + } + + //expand '~' + if(path[0] == '~') + { + path.erase(0, 1); + path.insert(0, getHomePath()); } if(boost::filesystem::exists(path)) @@ -151,103 +154,36 @@ void parseGamelist(SystemData* system) if(game == NULL) game = createGameFromPath(path, system); - //actually gather the information in the XML doc, then pass it to the game's set method - std::string newName, newDesc, newImage; + //load the metadata + *(game->metadata()) = MetaDataList::createFromXML(MetaDataList::getDefaultGameMDD(), gameNode); - if(gameNode.child(GameData::xmlTagName.c_str())) - { - game->setName(gameNode.child(GameData::xmlTagName.c_str()).text().get()); - } - if(gameNode.child(GameData::xmlTagDescription.c_str())) - { - game->setDescription(gameNode.child(GameData::xmlTagDescription.c_str()).text().get()); - } - if(gameNode.child(GameData::xmlTagImagePath.c_str())) - { - newImage = gameNode.child(GameData::xmlTagImagePath.c_str()).text().get(); - - //expand "." - if(newImage[0] == '.') - { - newImage.erase(0, 1); - boost::filesystem::path pathname(xmlpath); - newImage.insert(0, pathname.parent_path().generic_string() ); - } - - //if the image exist, set it - if(boost::filesystem::exists(newImage)) - { - game->setImagePath(newImage); - } - } - - //get rating and the times played from the XML doc - if(gameNode.child(GameData::xmlTagRating.c_str())) - { - float rating; - std::istringstream(gameNode.child(GameData::xmlTagRating.c_str()).text().get()) >> rating; - game->setRating(rating); - } - if(gameNode.child(GameData::xmlTagUserRating.c_str())) - { - float userRating; - std::istringstream(gameNode.child(GameData::xmlTagUserRating.c_str()).text().get()) >> userRating; - game->setUserRating(userRating); - } - if(gameNode.child(GameData::xmlTagTimesPlayed.c_str())) - { - size_t timesPlayed; - std::istringstream(gameNode.child(GameData::xmlTagTimesPlayed.c_str()).text().get()) >> timesPlayed; - game->setTimesPlayed(timesPlayed); - } - if(gameNode.child(GameData::xmlTagLastPlayed.c_str())) - { - std::time_t lastPlayed; - std::istringstream(gameNode.child(GameData::xmlTagLastPlayed.c_str()).text().get()) >> lastPlayed; - game->setLastPlayed(lastPlayed); - } - } - else{ + //make sure name gets set if one didn't exist + if(game->metadata()->get("name").empty()) + game->metadata()->set("name", game->getBaseName()); + }else{ LOG(LogWarning) << "Game at \"" << path << "\" does not exist!"; } } } -void addGameDataNode(pugi::xml_node & parent, const GameData * game) +void addGameDataNode(pugi::xml_node& parent, const GameData* game) { //create game and add to parent node - pugi::xml_node newGame = parent.append_child(GameData::xmlTagGame.c_str()); - //add values - if (!game->getPath().empty()) { - pugi::xml_node pathNode = newGame.append_child(GameData::xmlTagPath.c_str()); - //store path with generic directory seperators - boost::filesystem::path gamePath(game->getPath()); - pathNode.text().set(gamePath.generic_string().c_str()); - } - if (!game->getName().empty()) { - pugi::xml_node nameNode = newGame.append_child(GameData::xmlTagName.c_str()); - nameNode.text().set(game->getName().c_str()); - } - if (!game->getDescription().empty()) { - pugi::xml_node descriptionNode = newGame.append_child(GameData::xmlTagDescription.c_str()); - descriptionNode.text().set(game->getDescription().c_str()); - } - if (!game->getImagePath().empty()) { - pugi::xml_node imagePathNode = newGame.append_child(GameData::xmlTagImagePath.c_str()); - imagePathNode.text().set(game->getImagePath().c_str()); - } - //all other values are added regardless of their value - pugi::xml_node ratingNode = newGame.append_child(GameData::xmlTagRating.c_str()); - ratingNode.text().set(std::to_string((long double)game->getRating()).c_str()); + pugi::xml_node newGame = parent.append_child("game"); - pugi::xml_node userRatingNode = newGame.append_child(GameData::xmlTagUserRating.c_str()); - userRatingNode.text().set(std::to_string((long double)game->getUserRating()).c_str()); - - pugi::xml_node timesPlayedNode = newGame.append_child(GameData::xmlTagTimesPlayed.c_str()); - timesPlayedNode.text().set(std::to_string((unsigned long long)game->getTimesPlayed()).c_str()); - - pugi::xml_node lastPlayedNode = newGame.append_child(GameData::xmlTagLastPlayed.c_str()); - lastPlayedNode.text().set(std::to_string((unsigned long long)game->getLastPlayed()).c_str()); + //write metadata + const_cast(game)->metadata()->appendToXML(newGame, MetaDataList::getDefaultGameMDD()); + + if(newGame.children().begin() == newGame.child("name") //first element is name + && ++newGame.children().begin() == newGame.children().end() //theres only one element + && newGame.child("name").text().get() == game->getBaseName()) //the name is the default + { + //if the only info is the default name, don't bother with this node + parent.remove_child(newGame); + }else{ + //there's something useful in there so we'll keep the node, add the path + newGame.prepend_child("path").text().set(game->getPath().c_str()); + } } void updateGamelist(SystemData* system) @@ -258,56 +194,64 @@ void updateGamelist(SystemData* system) //we already have in the system from the XML, and then add it back from its GameData information... std::string xmlpath = system->getGamelistPath(); - if(xmlpath.empty()) { + if(xmlpath.empty()) return; - } LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\" before writing..."; pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(xmlpath.c_str()); - if(!result) { + if(!result) + { LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); return; } - pugi::xml_node root = doc.child(GameData::xmlTagGameList.c_str()); - if(!root) { - LOG(LogError) << "Could not find <" << GameData::xmlTagGameList << "> node in gamelist \"" << xmlpath << "\"!"; + pugi::xml_node root = doc.child("gameList"); + if(!root) + { + LOG(LogError) << "Could not find node in gamelist \"" << xmlpath << "\"!"; return; } //now we have all the information from the XML. now iterate through all our games and add information from there FolderData * rootFolder = system->getRootFolder(); - if (rootFolder != nullptr) { + if (rootFolder != nullptr) + { //get only files, no folders std::vector files = rootFolder->getFilesRecursive(true); //iterate through all files, checking if they're already in the XML std::vector::const_iterator fit = files.cbegin(); - while(fit != files.cend()) { + while(fit != files.cend()) + { //try to cast to gamedata const GameData * game = dynamic_cast(*fit); - if (game != nullptr) { + if (game != nullptr) + { //worked. check if this games' path can be found somewhere in the XML - for(pugi::xml_node gameNode = root.child(GameData::xmlTagGame.c_str()); gameNode; gameNode = gameNode.next_sibling(GameData::xmlTagGame.c_str())) { + for(pugi::xml_node gameNode = root.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) + { //get path from game node - pugi::xml_node pathNode = gameNode.child(GameData::xmlTagPath.c_str()); + pugi::xml_node pathNode = gameNode.child("path"); if(!pathNode) { - LOG(LogError) << "<" << GameData::xmlTagGame << "> node contains no <" << GameData::xmlTagPath << "> child!"; + LOG(LogError) << " node contains no child!"; continue; } + //check paths. use the same directory separators boost::filesystem::path nodePath(pathNode.text().get()); boost::filesystem::path gamePath(game->getPath()); - if (nodePath.generic_string() == gamePath.generic_string()) { + if (nodePath.generic_string() == gamePath.generic_string()) + { //found the game. remove it. it will be added again later with updated values root.remove_child(gameNode); //break node search loop break; } } + //either the game content was removed, because it needs to be updated, //or didn't exist in the first place, so just add it addGameDataNode(root, game); @@ -316,10 +260,9 @@ void updateGamelist(SystemData* system) } //now write the file if (!doc.save_file(xmlpath.c_str())) { - LOG(LogError) << "Error saving XML file \"" << xmlpath << "\"!"; + LOG(LogError) << "Error saving gamelist.xml file \"" << xmlpath << "\"!"; } - } - else { + }else{ LOG(LogError) << "Found no root folder for system \"" << system->getName() << "\"!"; } } diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 0e1dfaaf8..7f05eb609 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -353,11 +353,12 @@ void GuiGameList::updateDetailData() //if we've selected a game if(mList.getSelectedObject() && !mList.getSelectedObject()->isFolder()) { + GameData* game = (GameData*)mList.getSelectedObject(); //set image to either "not found" image or metadata image - if(((GameData*)mList.getSelectedObject())->getImagePath().empty()) + if(game->metadata()->get("image").empty()) mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); else - mScreenshot.setImage(((GameData*)mList.getSelectedObject())->getImagePath()); + mScreenshot.setImage(game->metadata()->get("image")); Eigen::Vector3f imgOffset = Eigen::Vector3f(Renderer::getScreenWidth() * 0.10f, 0, 0); mScreenshot.setPosition(getImagePos() - imgOffset); @@ -372,7 +373,7 @@ void GuiGameList::updateDetailData() mDescription.setPosition(0, 0); mDescription.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), 0)); - mDescription.setText(((GameData*)mList.getSelectedObject())->getDescription()); + mDescription.setText(game->metadata()->get("desc")); }else{ mScreenshot.setImage(""); mDescription.setText(""); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 8219caab6..a36203c84 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -93,3 +93,13 @@ void TextComponent::calculateExtent() } } } + +void TextComponent::setValue(const std::string& value) +{ + setText(value); +} + +std::string TextComponent::getValue() const +{ + return mText; +} diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 8df7749b1..0cba0cacb 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -18,6 +18,9 @@ public: void render(const Eigen::Affine3f& parentTrans) override; + std::string getValue() const override; + void setValue(const std::string& value) override; + private: std::shared_ptr getFont() const; From b5fe2cc8fc82add80fc5841db86fe94287398c03 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 18 Aug 2013 09:16:11 -0500 Subject: [PATCH 003/386] Began work on the metadata editor. --- CMakeLists.txt | 8 + data/ResourceUtil.cpp | 14 +- data/Resources.h | 12 + data/converted/glow_hor_png.cpp | 296 ++++++++++++++++++++++ data/converted/glow_off_hor_png.cpp | 290 +++++++++++++++++++++ data/converted/glow_off_vert_png.cpp | 290 +++++++++++++++++++++ data/converted/glow_vert_png.cpp | 296 ++++++++++++++++++++++ data/resources/glow_hor.png | Bin 0 -> 2884 bytes data/resources/glow_off_hor.png | Bin 0 -> 2823 bytes data/resources/glow_off_vert.png | Bin 0 -> 2821 bytes data/resources/glow_vert.png | Bin 0 -> 2889 bytes src/GameData.cpp | 2 +- src/GuiComponent.h | 3 + src/MetaData.cpp | 30 +-- src/MetaData.h | 8 +- src/components/ComponentListComponent.cpp | 39 ++- src/components/ComponentListComponent.h | 4 +- src/components/GuiBox.cpp | 6 + src/components/GuiBox.h | 1 + src/components/GuiGameEd.cpp | 97 +++++++ src/components/GuiGameEd.h | 28 ++ src/components/GuiGameList.cpp | 8 +- src/components/GuiSettingsMenu.cpp | 3 +- src/components/TextEditComponent.cpp | 46 ++++ src/components/TextEditComponent.h | 25 ++ 25 files changed, 1470 insertions(+), 36 deletions(-) create mode 100644 data/converted/glow_hor_png.cpp create mode 100644 data/converted/glow_off_hor_png.cpp create mode 100644 data/converted/glow_off_vert_png.cpp create mode 100644 data/converted/glow_vert_png.cpp create mode 100644 data/resources/glow_hor.png create mode 100644 data/resources/glow_off_hor.png create mode 100644 data/resources/glow_off_vert.png create mode 100644 data/resources/glow_vert.png create mode 100644 src/components/GuiGameEd.cpp create mode 100644 src/components/GuiGameEd.h create mode 100644 src/components/TextEditComponent.cpp create mode 100644 src/components/TextEditComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d15d8510..f73a555a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,11 +143,13 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ThemeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiBox.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h @@ -187,10 +189,12 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ThemeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp @@ -204,6 +208,10 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/bar_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/corner_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_hor_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_vert_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_off_hor_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_off_vert_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index d0b5b21ce..f2cd6a3df 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,19 +2,27 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 4; +const size_t res2hNrOfFiles = 8; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/bar.png", bar_png_size, bar_png_data}, {":/corner.png", corner_png_size, corner_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, - {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data} + {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, + {":/glow_hor.png", glow_hor_png_size, glow_hor_png_data}, + {":/glow_off_hor.png", glow_off_hor_png_size, glow_off_hor_png_data}, + {":/glow_off_vert.png", glow_off_vert_png_size, glow_off_vert_png_data}, + {":/glow_vert.png", glow_vert_png_size, glow_vert_png_data} }; res2hMapType::value_type mapTemp[] = { std::make_pair(":/bar.png", res2hFiles[0]), std::make_pair(":/corner.png", res2hFiles[1]), std::make_pair(":/ES_logo_16.png", res2hFiles[2]), - std::make_pair(":/ES_logo_32.png", res2hFiles[3]) + std::make_pair(":/ES_logo_32.png", res2hFiles[3]), + std::make_pair(":/glow_hor.png", res2hFiles[4]), + std::make_pair(":/glow_off_hor.png", res2hFiles[5]), + std::make_pair(":/glow_off_vert.png", res2hFiles[6]), + std::make_pair(":/glow_vert.png", res2hFiles[7]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index adb81fca4..3d2986ae6 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -17,6 +17,18 @@ extern const unsigned char ES_logo_16_png_data[]; extern const size_t ES_logo_32_png_size; extern const unsigned char ES_logo_32_png_data[]; +extern const size_t glow_hor_png_size; +extern const unsigned char glow_hor_png_data[]; + +extern const size_t glow_off_hor_png_size; +extern const unsigned char glow_off_hor_png_data[]; + +extern const size_t glow_off_vert_png_size; +extern const unsigned char glow_off_vert_png_data[]; + +extern const size_t glow_vert_png_size; +extern const unsigned char glow_vert_png_data[]; + struct Res2hEntry { const std::string relativeFileName; const size_t size; diff --git a/data/converted/glow_hor_png.cpp b/data/converted/glow_hor_png.cpp new file mode 100644 index 000000000..56adce6fb --- /dev/null +++ b/data/converted/glow_hor_png.cpp @@ -0,0 +1,296 @@ +//this file was auto-generated from "glow_hor.png" by res2h + +#include "../Resources.h" + +const size_t glow_hor_png_size = 2884; +const unsigned char glow_hor_png_data[2884] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, + 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x5f,0x49, + 0x44,0x41,0x54,0x78,0xda,0x84,0xcf,0xb1,0x0a,0xc2, + 0x40,0x00,0x03,0xd0,0x77,0x72,0x08,0x5a,0x1c,0x5c, + 0xec,0xe8,0x39,0xfa,0xff,0x5f,0xe4,0xd8,0x2e,0x0e, + 0xd2,0x16,0x4a,0xe1,0xba,0x5c,0xc1,0xe9,0x2e,0x10, + 0x12,0x48,0x32,0x24,0xe4,0x9c,0xd5,0x70,0xd2,0x40, + 0xb3,0x10,0xff,0xf4,0x86,0x6b,0xf1,0x1b,0x66,0xfc, + 0x22,0x2e,0x78,0x14,0xde,0x71,0xc6,0x8a,0x2f,0xc6, + 0x58,0x82,0x17,0x12,0xfa,0x32,0x58,0x30,0xa0,0x3b, + 0x0a,0x09,0x6f,0x3c,0xd1,0x61,0xc2,0x07,0x02,0xaa, + 0x3f,0xf7,0x01,0x00,0x3d,0x79,0x0e,0xf7,0x63,0xad, + 0x98,0x43,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/glow_off_hor_png.cpp b/data/converted/glow_off_hor_png.cpp new file mode 100644 index 000000000..a849daff9 --- /dev/null +++ b/data/converted/glow_off_hor_png.cpp @@ -0,0 +1,290 @@ +//this file was auto-generated from "glow_off_hor.png" by res2h + +#include "../Resources.h" + +const size_t glow_off_hor_png_size = 2823; +const unsigned char glow_off_hor_png_data[2823] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, + 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x22,0x49, + 0x44,0x41,0x54,0x78,0xda,0x62,0xfc,0xff,0xff,0x3f, + 0x03,0x3e,0xc0,0xc4,0x40,0x00,0x0c,0x09,0x05,0x8c, + 0x0c,0x0c,0x0c,0x78,0xfd,0x09,0x00,0x00,0x00,0xff, + 0xff,0x03,0x00,0x35,0x25,0x04,0x0b,0x6a,0x13,0x74, + 0xa7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae, + 0x42,0x60,0x82 +}; diff --git a/data/converted/glow_off_vert_png.cpp b/data/converted/glow_off_vert_png.cpp new file mode 100644 index 000000000..33668446e --- /dev/null +++ b/data/converted/glow_off_vert_png.cpp @@ -0,0 +1,290 @@ +//this file was auto-generated from "glow_off_vert.png" by res2h + +#include "../Resources.h" + +const size_t glow_off_vert_png_size = 2821; +const unsigned char glow_off_vert_png_data[2821] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, + 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x20,0x49, + 0x44,0x41,0x54,0x78,0xda,0x62,0xfc,0xff,0xff,0x3f, + 0x03,0x2e,0xc0,0xc8,0xc8,0xf8,0x9f,0x89,0x81,0x00, + 0x18,0x1e,0x0a,0x00,0x00,0x00,0x00,0xff,0xff,0x03, + 0x00,0x02,0x48,0x04,0x0f,0x3d,0x1a,0xc2,0xf4,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82 +}; diff --git a/data/converted/glow_vert_png.cpp b/data/converted/glow_vert_png.cpp new file mode 100644 index 000000000..7eaf7d714 --- /dev/null +++ b/data/converted/glow_vert_png.cpp @@ -0,0 +1,296 @@ +//this file was auto-generated from "glow_vert.png" by res2h + +#include "../Resources.h" + +const size_t glow_vert_png_size = 2889; +const unsigned char glow_vert_png_data[2889] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, + 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x64,0x49, + 0x44,0x41,0x54,0x78,0xda,0x6c,0xce,0xb1,0x0a,0xc2, + 0x30,0x00,0x04,0xd0,0x17,0x09,0x42,0x95,0x0e,0x2e, + 0x75,0x6c,0x3b,0xfa,0xff,0x7f,0xe1,0x5f,0x38,0xd6, + 0xc5,0x41,0x6c,0x41,0x0a,0xe9,0x92,0x42,0x09,0xb9, + 0xf5,0x1e,0xc7,0x85,0x94,0x92,0x22,0x0d,0x3a,0x74, + 0x21,0x84,0x67,0x2c,0xca,0x98,0xcb,0x11,0x03,0x9c, + 0x0a,0xd0,0x66,0x30,0xe0,0x51,0x03,0x17,0xdc,0x70, + 0x47,0x5f,0x03,0x11,0xe7,0xfc,0xe3,0x5a,0x03,0x2b, + 0xfe,0x58,0xf0,0xab,0x81,0x19,0x1f,0x4c,0x78,0xed, + 0x93,0xc7,0x7c,0xf1,0xde,0xe7,0x61,0x1b,0x00,0xbc, + 0x94,0x0e,0xc2,0x22,0xe1,0x7c,0x16,0x00,0x00,0x00, + 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/glow_hor.png b/data/resources/glow_hor.png new file mode 100644 index 0000000000000000000000000000000000000000..ff99786b22a3e420f5d55b6a8c39a3d45cb89a41 GIT binary patch literal 2884 zcmV-K3%m4*P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0001ANklatK-+TPJ iJkepo2Lh@;_W=Msc@Fnut(Zdq0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0000YNklM_g00960 Z0{}H81Pf{tbf*9S002ovPDHLkV1h1#HJbnc literal 0 HcmV?d00001 diff --git a/data/resources/glow_off_vert.png b/data/resources/glow_off_vert.png new file mode 100644 index 0000000000000000000000000000000000000000..c21e801e6adee4cbef591e17bd0ffa991efb0d4d GIT binary patch literal 2821 zcmV+g3;OhlP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0000WNklKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0001FNkl`u~67UpUsq zL2N+^>5@VTx%D2$g_M#a4LWoogl8getInt("playcount"); timesPlayed++; - std::stringstream ss(); + std::stringstream ss; metadata()->set("playcount", std::to_string(static_cast(timesPlayed))); } diff --git a/src/GuiComponent.h b/src/GuiComponent.h index bda2406f1..a9ca6eb7a 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -54,6 +54,9 @@ public: virtual std::string getValue() const; virtual void setValue(const std::string& value); + virtual void onFocusGained() {}; + virtual void onFocusLost() {}; + protected: void renderChildren(const Eigen::Affine3f& transform) const; diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 3f88f83ca..8fe267d7d 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -1,6 +1,7 @@ #include "MetaData.h" #include "components/TextComponent.h" #include "Log.h" +#include "components/TextEditComponent.h" MetaDataList::MetaDataList() { @@ -15,12 +16,13 @@ MetaDataList::MetaDataList(const std::vector& mdd) std::vector MetaDataList::getDefaultGameMDD() { MetaDataDecl decls[] = { - {"name", MD_STRING, ""}, - {"desc", MD_STRING, ""}, - {"image", MD_IMAGE_PATH, ""}, - {"rating", MD_RATING, "0"}, - {"timesplayed", MD_INT, "0"}, - {"playcount", MD_TIME, "0"} + {"name", MD_STRING, ""}, + {"desc", MD_MULTILINE_STRING, ""}, + {"image", MD_IMAGE_PATH, ""}, + {"rating", MD_RATING, "0"}, + {"userrating", MD_RATING, "0"}, + {"playcount", MD_INT, "0"}, + {"lastplayed", MD_TIME, "0"} }; std::vector mdd(decls, decls + sizeof(decls) / sizeof(decls[0])); @@ -106,21 +108,7 @@ GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) switch(as) { default: - TextComponent* comp = new TextComponent(window); + TextEditComponent* comp = new TextEditComponent(window); return comp; } } - -GuiComponent* MetaDataList::makeDisplay(Window* window, MetaDataDecl from) -{ - GuiComponent* comp = makeDisplay(window, from.type); - comp->setValue(get(from.key)); - return comp; -} - -GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataDecl from) -{ - GuiComponent* comp = makeEditor(window, from.type); - comp->setValue(get(from.key)); - return comp; -} diff --git a/src/MetaData.h b/src/MetaData.h index ccc0218c6..38e5393f9 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -14,6 +14,7 @@ enum MetaDataType MD_FLOAT, //specialized types + MD_MULTILINE_STRING, MD_IMAGE_PATH, MD_RATING, MD_TIME @@ -42,11 +43,8 @@ public: float getFloat(const std::string& key) const; std::time_t getTime(const std::string& key) const; - GuiComponent* makeDisplay(Window* window, MetaDataType as); - GuiComponent* makeDisplay(Window* window, MetaDataDecl from); - - GuiComponent* makeEditor(Window* window, MetaDataType as); - GuiComponent* makeEditor(Window* window, MetaDataDecl from); + static GuiComponent* makeDisplay(Window* window, MetaDataType as); + static GuiComponent* makeEditor(Window* window, MetaDataType as); void appendToXML(pugi::xml_node parent, const std::vector& ignoreDefaults = std::vector()) const; diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 6afc01209..31134db64 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -4,7 +4,7 @@ #define INITIAL_CELL_SIZE 12 -ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), mGrid(NULL), mColumnWidths(NULL), mRowHeights(NULL) +ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), mGrid(NULL), mColumnWidths(NULL), mRowHeights(NULL), mCursor(-1, -1) { mEntries.reserve(gridDimensions.x() * gridDimensions.y()); makeCells(gridDimensions); @@ -180,6 +180,16 @@ bool ComponentListComponent::input(InputConfig* config, Input input) moveCursor(Eigen::Vector2i(0, -1)); return true; } + if(config->isMappedTo("left", input)) + { + moveCursor(Eigen::Vector2i(-1, 0)); + return true; + } + if(config->isMappedTo("right", input)) + { + moveCursor(Eigen::Vector2i(1, 0)); + return true; + } return false; } @@ -192,7 +202,9 @@ void ComponentListComponent::resetCursor() return; } + const Eigen::Vector2i origCursor = mCursor; mCursor << mEntries.at(0).pos[0], mEntries.at(0).pos[1]; + onCursorMoved(origCursor, mCursor); } void ComponentListComponent::moveCursor(Eigen::Vector2i dir) @@ -203,15 +215,21 @@ void ComponentListComponent::moveCursor(Eigen::Vector2i dir) return; } + Eigen::Vector2i origCursor = mCursor; + if(!cursorValid()) { resetCursor(); + if(!cursorValid()) + { + if(mCursor != origCursor) + onCursorMoved(origCursor, mCursor); + return; + } } - Eigen::Vector2i origCursor = mCursor; - Eigen::Vector2i searchAxis(dir.x() == 0, dir.y() == 0); while(mCursor.x() >= 0 && mCursor.y() >= 0 && mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y()) @@ -224,7 +242,10 @@ void ComponentListComponent::moveCursor(Eigen::Vector2i dir) while(mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y()) { if(cursorValid() && getCell(mCursor.x(), mCursor.y())->canFocus) + { + onCursorMoved(origCursor, mCursor); return; + } mCursor += searchAxis; } @@ -234,7 +255,10 @@ void ComponentListComponent::moveCursor(Eigen::Vector2i dir) while(mCursor.x() >= 0 && mCursor.y() >= 0) { if(cursorValid() && getCell(mCursor.x(), mCursor.y())->canFocus) + { + onCursorMoved(origCursor, mCursor); return; + } mCursor -= searchAxis; } @@ -327,3 +351,12 @@ GuiComponent* ComponentListComponent::getSelectedComponent() return NULL; return getCell(mCursor.x(), mCursor.y())->component; } + +void ComponentListComponent::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to) +{ + if(from != Eigen::Vector2i(-1, -1)) + getCell(from.x(), from.y())->component->onFocusLost(); + + if(to != Eigen::Vector2i(-1, -1)) + getCell(to.x(), to.y())->component->onFocusGained(); +} diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentListComponent.h index 3cb05139e..047ace574 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentListComponent.h @@ -18,7 +18,8 @@ public: }; //DO NOT USE NEGATIVE NUMBERS FOR POSITION OR SIZE. - void setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, Eigen::Matrix autoFit, UpdateBehavior updateType = UpdateAlways); + void setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, + Eigen::Matrix autoFit = Eigen::Matrix(true, true), UpdateBehavior updateType = UpdateAlways); void onPositionChanged() override; @@ -76,6 +77,7 @@ private: void updateSize(); void moveCursor(Eigen::Vector2i dir); + void onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to); Eigen::Vector2i mCursor; void updateComponentOffsets(); diff --git a/src/components/GuiBox.cpp b/src/components/GuiBox.cpp index 1d9dd5165..010d204a6 100644 --- a/src/components/GuiBox.cpp +++ b/src/components/GuiBox.cpp @@ -128,3 +128,9 @@ bool GuiBox::hasBackground() { return mBackgroundImage.hasImage(); } + +void GuiBox::onSizeChanged() +{ + mHorizontalImage.setResize(mSize.x(), getHorizontalBorderWidth(), true); + mVerticalImage.setResize(getVerticalBorderWidth(), mSize.y(), true); +} \ No newline at end of file diff --git a/src/components/GuiBox.h b/src/components/GuiBox.h index d0b31334b..bd5c4b187 100644 --- a/src/components/GuiBox.h +++ b/src/components/GuiBox.h @@ -35,6 +35,7 @@ public: void render(const Eigen::Affine3f& parentTrans) override; + void onSizeChanged() override; private: ImageComponent mBackgroundImage, mHorizontalImage, mVerticalImage, mCornerImage; diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp new file mode 100644 index 000000000..223402e0c --- /dev/null +++ b/src/components/GuiGameEd.cpp @@ -0,0 +1,97 @@ +#include "GuiGameEd.h" +#include "../Renderer.h" +#include "../Log.h" + +#define MDED_RESERVED_ROWS 2 + +GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd) : GuiComponent(window), + mBox(mWindow, 0, 0, 0, 0), + mList(window, Eigen::Vector2i(2, mdd.size() + MDED_RESERVED_ROWS)), + mPathDisp(window), + mGame(game) +{ + LOG(LogInfo) << "Creating GuiGameEd"; + + //set size to 80% by 80% of the window + mSize << Renderer::getScreenWidth() * 0.8f, Renderer::getScreenHeight() * 0.8f; + + //center us + mPosition << (Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2, 0.0f; + + addChild(&mBox); + mBox.setVerticalImage(":/bar.png"); + mBox.setHorizontalImage(":/bar.png"); + mBox.setCornerImage(":/corner.png"); + mBox.setBorderColor(0x666666FF); + mBox.setPosition(0, 0); + mBox.setSize(mSize); + mBox.setBackgroundImage(":/bar.png"); + mBox.setBackgroundColor(0xAAAAAAAA); + + //initialize path display + addChild(&mPathDisp); + mPathDisp.setPosition(0, 0); + mPathDisp.setSize(mSize.x(), 0); + mPathDisp.setCentered(true); + mPathDisp.setText(mGame->getBaseName()); + + //initialize metadata list + addChild(&mList); + mList.setPosition(0, mPathDisp.getSize().y() + 4); + mList.setSize(mSize.x(), mSize.y() - mList.getPosition().y()); + populateList(mdd); +} + +GuiGameEd::~GuiGameEd() +{ + LOG(LogInfo) << "Deleted GuiGameEd"; +} + +void GuiGameEd::populateList(const std::vector& mdd) +{ + // PATH //(centered, not part of componentlist) + + //---GAME NAME--- //(at 1,1; size 3,1) (TextEditComponent) + //DEL SCRP --- //(buttons) + //Fav: Y/N --- //metadata start + //Desc: ... --- //multiline texteditcomponent + //Img: ... --- + //--- SAVE --- + + using namespace Eigen; + + int y = 0; + + TextComponent* del = new TextComponent(mWindow); + del->setText("DELETE"); + del->setColor(0xFF0000FF); + mList.setEntry(Vector2i(0, y), Vector2i(1, 1), del, true, ComponentListComponent::AlignCenter); + mGeneratedComponents.push_back(del); + + TextComponent* fetch = new TextComponent(mWindow); + fetch->setText("FETCH"); + mList.setEntry(Vector2i(1, y), Vector2i(1, 1), fetch, true, ComponentListComponent::AlignCenter); + mGeneratedComponents.push_back(fetch); + + y++; + + for(auto iter = mdd.begin(); iter != mdd.end(); iter++) + { + TextComponent* label = new TextComponent(mWindow); + label->setText(iter->key); + mList.setEntry(Vector2i(0, y), Vector2i(1, 1), label, false, ComponentListComponent::AlignLeft); + mGeneratedComponents.push_back(label); + + GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); + ed->setValue(mGame->metadata()->get(iter->key)); + mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); + mGeneratedComponents.push_back(ed); + + y++; + } + + + + //force list reflow + mList.onPositionChanged(); +} diff --git a/src/components/GuiGameEd.h b/src/components/GuiGameEd.h new file mode 100644 index 000000000..a0e8cccc6 --- /dev/null +++ b/src/components/GuiGameEd.h @@ -0,0 +1,28 @@ +#pragma once + +#include "../GuiComponent.h" +#include "ComponentListComponent.h" +#include "../MetaData.h" +#include "TextComponent.h" +#include "../GameData.h" +#include "GuiBox.h" + +class GuiGameEd : public GuiComponent +{ +public: + GuiGameEd(Window* window, GameData* game, const std::vector& mdd); + virtual ~GuiGameEd(); + +private: + void populateList(const std::vector& mdd); + + GuiBox mBox; + + ComponentListComponent mList; + + TextComponent mPathDisp; + + std::vector mGeneratedComponents; + + GameData* mGame; +}; diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 7f05eb609..718484c74 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -6,7 +6,7 @@ #include #include "../Log.h" #include "../Settings.h" - +#include "GuiGameEd.h" std::vector GuiGameList::sortStates; @@ -123,6 +123,12 @@ bool GuiGameList::input(InputConfig* config, Input input) mList.input(config, input); + if(input.id == SDLK_F3) + { + mWindow->pushGui(new GuiGameEd(mWindow, (GameData*)mSystem->getRootFolder()->getFile(0), MetaDataList::getDefaultGameMDD())); + return true; + } + if(config->isMappedTo("a", input) && mFolder->getFileCount() > 0 && input.value != 0) { //play select sound diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index 6766bfb7a..7e1102f65 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -56,9 +56,10 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), //center list mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); + + //set up borders/background mBox.setPosition(mList.getPosition()); mBox.setSize(mList.getSize()); - mBox.setCornerImage(":/corner.png"); mBox.setVerticalImage(":/bar.png"); mBox.setHorizontalImage(":/bar.png"); diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp new file mode 100644 index 000000000..01ae19be6 --- /dev/null +++ b/src/components/TextEditComponent.cpp @@ -0,0 +1,46 @@ +#include "TextEditComponent.h" +#include "../Log.h" + +TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), + mBox(window, 0, 0, 0, 0) +{ + addChild(&mBox); + + onFocusLost(); + + setSize(48, 22); +} + +void TextEditComponent::onFocusGained() +{ + mBox.setHorizontalImage(":/glow_hor.png"); + mBox.setVerticalImage(":/glow_vert.png"); + mBox.setBorderColor(0x51CCFFFF); +} + +void TextEditComponent::onFocusLost() +{ + mBox.setHorizontalImage(":/glow_off_hor.png"); + mBox.setVerticalImage(":/glow_off_vert.png"); + mBox.setBorderColor(0xFFFFFFFF); +} + +void TextEditComponent::onSizeChanged() +{ + mBox.setSize(mSize); +} + +void TextEditComponent::setValue(const std::string& val) +{ + mText = val; +} + +std::string TextEditComponent::getValue() const +{ + return mText; +} + +bool TextEditComponent::input(InputConfig* config, Input input) +{ + return GuiComponent::input(config, input); +} diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h new file mode 100644 index 000000000..8a2ec59fb --- /dev/null +++ b/src/components/TextEditComponent.h @@ -0,0 +1,25 @@ +#pragma once + +#include "../GuiComponent.h" +#include "GuiBox.h" + +class TextEditComponent : public GuiComponent +{ +public: + TextEditComponent(Window* window); + + bool input(InputConfig* config, Input input) override; + + void onFocusGained() override; + void onFocusLost() override; + + void onSizeChanged() override; + + void setValue(const std::string& val) override; + std::string getValue() const override; +private: + std::string mText; + bool mAllowNewlines; + + GuiBox mBox; +}; From 09726348b35a315a9ba1ea24a17c859de37ced80 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 18 Aug 2013 12:17:24 -0500 Subject: [PATCH 004/386] Moved to SDL2. Renderer on the Pi doesn't work at the moment. --- CMake/Packages/FindSDL2.cmake | 163 ++++++++++++++++++++++++++++++++++ CMakeLists.txt | 8 +- src/AudioManager.cpp | 4 + src/InputConfig.cpp | 5 +- src/InputConfig.h | 5 +- src/InputManager.cpp | 8 +- src/Renderer.h | 3 +- src/Renderer_init_sdlgl.cpp | 92 ++++++++++--------- 8 files changed, 228 insertions(+), 60 deletions(-) create mode 100644 CMake/Packages/FindSDL2.cmake diff --git a/CMake/Packages/FindSDL2.cmake b/CMake/Packages/FindSDL2.cmake new file mode 100644 index 000000000..236d6b4b9 --- /dev/null +++ b/CMake/Packages/FindSDL2.cmake @@ -0,0 +1,163 @@ +# Locate SDL2 library +# This module defines +# SDL2_LIBRARY, the name of the library to link against +# SDL2_FOUND, if false, do not try to link to SDL2 +# SDL2_INCLUDE_DIR, where to find SDL.h +# +# This module responds to the the flag: +# SDL2_BUILDING_LIBRARY +# If this is defined, then no SDL2main will be linked in because +# only applications need main(). +# Otherwise, it is assumed you are building an application and this +# module will attempt to locate and set the the proper link flags +# as part of the returned SDL2_LIBRARY variable. +# +# Don't forget to include SDLmain.h and SDLmain.m your project for the +# OS X framework based version. (Other versions link to -lSDL2main which +# this module will try to find on your behalf.) Also for OS X, this +# module will automatically add the -framework Cocoa on your behalf. +# +# +# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration +# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library +# (SDL2.dll, libsdl2.so, SDL2.framework, etc). +# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. +# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value +# as appropriate. These values are used to generate the final SDL2_LIBRARY +# variable, but when these values are unset, SDL2_LIBRARY does not get created. +# +# +# $SDL2DIR is an environment variable that would +# correspond to the ./configure --prefix=$SDL2DIR +# used in building SDL2. +# l.e.galup 9-20-02 +# +# Modified by Eric Wing. +# Added code to assist with automated building by using environmental variables +# and providing a more controlled/consistent search behavior. +# Added new modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL guidelines. +# Added a search for SDL2main which is needed by some platforms. +# Added a search for threads which is needed by some platforms. +# Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL2_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# +# Note that the header path has changed from SDL2/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention +# is #include "SDL.h", not . This is done for portability +# reasons because not all systems place things in SDL2/ (see FreeBSD). + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(SDL2_SEARCH_PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +FIND_PATH(SDL2_INCLUDE_DIR SDL.h + HINTS + $ENV{SDL2DIR} + PATH_SUFFIXES include/SDL2 include + PATHS ${SDL2_SEARCH_PATHS} +) + +FIND_LIBRARY(SDL2_LIBRARY_TEMP + NAMES SDL2 + HINTS + $ENV{SDL2DIR} + PATH_SUFFIXES lib64 lib + PATHS ${SDL2_SEARCH_PATHS} +) + +IF(NOT SDL2_BUILDING_LIBRARY) + IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDL2main for compatibility even though they don't + # necessarily need it. + FIND_LIBRARY(SDL2MAIN_LIBRARY + NAMES SDL2main + HINTS + $ENV{SDL2DIR} + PATH_SUFFIXES lib64 lib + PATHS ${SDL2_SEARCH_PATHS} + ) + ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") +ENDIF(NOT SDL2_BUILDING_LIBRARY) + +# SDL2 may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +IF(NOT APPLE) + FIND_PACKAGE(Threads) +ENDIF(NOT APPLE) + +# MinGW needs an additional library, mwindows +# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows +# (Actually on second look, I think it only needs one of the m* libraries.) +IF(MINGW) + SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") +ENDIF(MINGW) + +IF(SDL2_LIBRARY_TEMP) + # For SDL2main + IF(NOT SDL2_BUILDING_LIBRARY) + IF(SDL2MAIN_LIBRARY) + SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) + ENDIF(SDL2MAIN_LIBRARY) + ENDIF(NOT SDL2_BUILDING_LIBRARY) + + # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + IF(APPLE) + SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") + ENDIF(APPLE) + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + IF(NOT APPLE) + SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) + ENDIF(MINGW) + + # Set the final string here so the GUI reflects the final state. + SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") + # Set the temp variable to INTERNAL so it is not seen in the CMake GUI + SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") +ENDIF(SDL2_LIBRARY_TEMP) + +INCLUDE(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) diff --git a/CMakeLists.txt b/CMakeLists.txt index f73a555a7..597e3b670 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ else() endif() find_package(FreeType REQUIRED) find_package(FreeImage REQUIRED) -find_package(SDL REQUIRED) +find_package(SDL2 REQUIRED) find_package(Boost REQUIRED COMPONENTS system filesystem) find_package(Eigen3 REQUIRED) @@ -81,7 +81,7 @@ add_definitions(-DEIGEN_DONT_ALIGN) set(ES_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS} ${FreeImage_INCLUDE_DIRS} - ${SDL_INCLUDE_DIR} + ${SDL2_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ) @@ -252,8 +252,8 @@ set(ES_LIBRARIES ${Boost_LIBRARIES} ${FREETYPE_LIBRARIES} ${FreeImage_LIBRARIES} - ${SDL_LIBRARY} - ${SDLMAIN_LIBRARY} + ${SDL2_LIBRARY} + ${SDL2MAIN_LIBRARY} ) #add ALSA for Linux diff --git a/src/AudioManager.cpp b/src/AudioManager.cpp index 47887ede7..2c6af704b 100644 --- a/src/AudioManager.cpp +++ b/src/AudioManager.cpp @@ -14,6 +14,9 @@ void AudioManager::mixAudio(void *unused, Uint8 *stream, int len) { bool stillPlaying = false; + //initialize the buffer to "silence" + SDL_memset(stream, 0, len); + //iterate through all our samples std::vector>::const_iterator soundIt = sSoundVector.cbegin(); while (soundIt != sSoundVector.cend()) @@ -40,6 +43,7 @@ void AudioManager::mixAudio(void *unused, Uint8 *stream, int len) //advance to next sound ++soundIt; } + //we have processed all samples. check if some will still be playing if (!stillPlaying) { //no. pause audio till a Sound::play() wakes us up diff --git a/src/InputConfig.cpp b/src/InputConfig.cpp index 0036e3d11..e7c4add6e 100644 --- a/src/InputConfig.cpp +++ b/src/InputConfig.cpp @@ -4,6 +4,7 @@ #include #include #include "Log.h" +#include "InputManager.h" //some util functions std::string inputTypeToString(InputType type) @@ -48,7 +49,7 @@ std::string toLower(std::string str) } //end util functions -InputConfig::InputConfig(int deviceId) : mDeviceId(deviceId) +InputConfig::InputConfig(int deviceId, const std::string& deviceName) : mDeviceId(deviceId), mDeviceName(deviceName) { mPlayerNum = -1; } @@ -162,7 +163,7 @@ void InputConfig::writeToXML(pugi::xml_node parent) cfg.append_attribute("type") = "keyboard"; }else{ cfg.append_attribute("type") = "joystick"; - cfg.append_attribute("deviceName") = SDL_JoystickName(mDeviceId); + cfg.append_attribute("deviceName") = mDeviceName.c_str(); } typedef std::map::iterator it_type; diff --git a/src/InputConfig.h b/src/InputConfig.h index 99d13e84b..01957d3cd 100644 --- a/src/InputConfig.h +++ b/src/InputConfig.h @@ -72,7 +72,7 @@ public: stream << "Hat " << id << " " << getHatDir(value); break; case TYPE_KEY: - stream << "Key " << SDL_GetKeyName((SDLKey)id); + stream << "Key " << SDL_GetKeyName((SDL_Keycode)id); break; default: stream << "Input to string error"; @@ -86,7 +86,7 @@ public: class InputConfig { public: - InputConfig(int deviceId); + InputConfig(int deviceId, const std::string& deviceName); void clear(); void mapInput(const std::string& name, Input input); @@ -109,6 +109,7 @@ public: private: std::map mNameMap; const int mDeviceId; + const std::string mDeviceName; int mPlayerNum; }; diff --git a/src/InputManager.cpp b/src/InputManager.cpp index fb76e48b1..2b13fc992 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -126,7 +126,7 @@ Uint32 InputManager::devicePollingCallback(Uint32 interval, void* param) event.user.code = SDL_USEREVENT_POLLDEVICES; event.user.data1 = nullptr; event.user.data2 = nullptr; - if (SDL_PushEvent(&event) != 0) { + if (!SDL_PushEvent(&event)) { LOG(LogError) << "InputManager::devicePollingCallback - SDL event queue is full!"; } @@ -151,7 +151,7 @@ void InputManager::init() for(int i = 0; i < mNumJoysticks; i++) { mJoysticks[i] = SDL_JoystickOpen(i); - mInputConfigs[i] = new InputConfig(i); + mInputConfigs[i] = new InputConfig(i, SDL_JoystickName(mJoysticks[i])); for(int k = 0; k < SDL_JoystickNumAxes(mJoysticks[i]); k++) { @@ -159,7 +159,7 @@ void InputManager::init() } } - mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD); + mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard"); SDL_JoystickEventState(SDL_ENABLE); @@ -370,7 +370,7 @@ void InputManager::loadConfig() std::string devName = node.attribute("deviceName").as_string(); for(int i = 0; i < mNumJoysticks; i++) { - if(!configuredDevice[i] && SDL_JoystickName(i) == devName) + if(!configuredDevice[i] && SDL_JoystickName(mJoysticks[i]) == devName) { mInputConfigs[i]->loadFromXML(node, mNumPlayers); mNumPlayers++; diff --git a/src/Renderer.h b/src/Renderer.h index fc5b64dd6..ed7134a3e 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -12,7 +12,8 @@ class GuiComponent; class Font; //The Renderer provides several higher-level functions for drawing (rectangles, text, etc.). -//Defined in multiple files - Renderer.cpp has the GuiComponent stuff, Renderer_draw_* includes renderer-specific drawing implementations, and Renderer_init_* includes renderer-specific init/deinit. +//Renderer_draw_gl.cpp has most of the higher-level functions and wrappers. +//Renderer_init_*.cpp has platform-specific renderer initialziation/deinitialziation code. (e.g. the Raspberry Pi sets up dispmanx/OpenGL ES) namespace Renderer { bool init(int w, int h); diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index 254d890c0..6a362c7ac 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -1,16 +1,9 @@ #include "Renderer.h" #include #include "platform.h" - -#ifdef _WINDOWS_ - #include -#endif - #include GLHEADER - #include "Font.h" #include -#include "InputManager.h" #include "Log.h" #include "ImageIO.h" #include "../data/Resources.h" @@ -27,9 +20,10 @@ namespace Renderer unsigned int getScreenWidth() { return display_width; } unsigned int getScreenHeight() { return display_height; } - SDL_Surface* sdlScreen = NULL; + SDL_Window* sdlWindow = NULL; + SDL_GLContext sdlContext = NULL; - bool createSurface() //unsigned int display_width, unsigned int display_height) + bool createSurface() { LOG(LogInfo) << "Creating surface..."; @@ -39,53 +33,54 @@ namespace Renderer return false; } - //ATM it is best to just leave the window icon alone on windows. - //When compiled as a Windows application, ES at least has an icon in the taskbar - //The method below looks pretty shite as alpha isn't taken into account... -#ifndef WIN32 - //try loading PNG from memory - size_t width = 0; - size_t height = 0; - std::vector rawData = ImageIO::loadFromMemoryRGBA32(ES_logo_32_png_data, ES_logo_32_png_size, width, height); - if (!rawData.empty()) { - //SDL interprets each pixel as a 32-bit number, so our masks must depend on the endianness (byte order) of the machine -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - Uint32 rmask = 0xff000000; Uint32 gmask = 0x0000ff00; Uint32 bmask = 0x00ff0000; Uint32 amask = 0x000000ff; -#else - Uint32 rmask = 0x000000ff; Uint32 gmask = 0x00ff0000; Uint32 bmask = 0x0000ff00; Uint32 amask = 0xff000000; -#endif - //try creating SDL surface from logo data - SDL_Surface * logoSurface = SDL_CreateRGBSurfaceFrom((void *)rawData.data(), width, height, 32, width*4, rmask, gmask, bmask, amask); - if (logoSurface != nullptr) { - //change window icon. this sucks atm, but there's nothing better we can do. SDL 1.3 or 2.0 should sort this out... - SDL_WM_SetIcon(logoSurface, nullptr); - } - } -#endif - - SDL_WM_SetCaption("EmulationStation", "EmulationStation"); - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - //SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); //vsync - sdlScreen = SDL_SetVideoMode(display_width, display_height, 16, SDL_OPENGL | (Settings::getInstance()->getBool("WINDOWED") ? 0 : SDL_FULLSCREEN)); + //SDL_GL_SetSwapInterval(1); //0 for immediate updates, 1 for updates synchronized with the vertical retrace, -1 for late swap tearing - if(sdlScreen == NULL) + sdlWindow = SDL_CreateWindow("EmulationStation", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + display_width, display_height, + SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("WINDOWED") ? 0 : SDL_WINDOW_FULLSCREEN)); + + if(sdlWindow == NULL) { - LOG(LogError) << "Error creating SDL video surface!"; + LOG(LogError) << "Error creating SDL window!"; return false; } + LOG(LogInfo) << "Created window successfully."; + + //set an icon for the window + size_t width = 0; + size_t height = 0; + std::vector rawData = ImageIO::loadFromMemoryRGBA32(ES_logo_32_png_data, ES_logo_32_png_size, width, height); + if (!rawData.empty()) + { + //SDL interprets each pixel as a 32-bit number, so our masks must depend on the endianness (byte order) of the machine + #if SDL_BYTEORDER == SDL_BIG_ENDIAN + Uint32 rmask = 0xff000000; Uint32 gmask = 0x00ff0000; Uint32 bmask = 0x0000ff00; Uint32 amask = 0x000000ff; + #else + Uint32 rmask = 0x000000ff; Uint32 gmask = 0x0000ff00; Uint32 bmask = 0x00ff0000; Uint32 amask = 0xff000000; + #endif + //try creating SDL surface from logo data + SDL_Surface * logoSurface = SDL_CreateRGBSurfaceFrom((void *)rawData.data(), width, height, 32, width * 4, rmask, gmask, bmask, amask); + if (logoSurface != NULL) + { + SDL_SetWindowIcon(sdlWindow, logoSurface); + SDL_FreeSurface(logoSurface); + } + } + + sdlContext = SDL_GL_CreateContext(sdlWindow); + //usually display width/height are not specified, i.e. zero, which SDL automatically takes as "native resolution" //so, since other things rely on the size of the screen (damn currently unnormalized coordinate system), we set it here - //even though the system was already initialized - display_width = sdlScreen->w; - display_height = sdlScreen->h; - - LOG(LogInfo) << "Created surface successfully."; + //even though the system was already initialized - this makes sure it gets reinitialized to the original resolution when we return from a game + //display_width = sdlWindow->w; + //display_height = sdlWindow->h; //hide mouse cursor initialCursorState = SDL_ShowCursor(0) == 1; @@ -95,14 +90,17 @@ namespace Renderer void swapBuffers() { - SDL_GL_SwapBuffers(); + SDL_GL_SwapWindow(sdlWindow); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } void destroySurface() { - SDL_FreeSurface(sdlScreen); - sdlScreen = NULL; + SDL_GL_DeleteContext(sdlContext); + sdlContext = NULL; + + SDL_DestroyWindow(sdlWindow); + sdlWindow = NULL; //show mouse cursor SDL_ShowCursor(initialCursorState); From 5b1cd8fbf8afa7398ca3dd11195688cdae26062d Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 18 Aug 2013 19:31:35 +0000 Subject: [PATCH 005/386] Renderer compiles on the Pi again. For some reason SDL2 won't initialize on the terminal though. Works fine under X, though that isn't an acceptable solution. --- src/Renderer_init_rpi.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/Renderer_init_rpi.cpp b/src/Renderer_init_rpi.cpp index 97462a44b..e4f814aae 100644 --- a/src/Renderer_init_rpi.cpp +++ b/src/Renderer_init_rpi.cpp @@ -4,9 +4,7 @@ #include #include #include -#include "Font.h" -#include -#include "InputManager.h" +#include #include "Log.h" #ifdef _RPI_ @@ -15,7 +13,7 @@ namespace Renderer { - SDL_Surface* sdlScreen; + SDL_Window* sdlWindow; EGLDisplay display; EGLSurface surface; @@ -44,15 +42,18 @@ namespace Renderer return false; } - sdlScreen = SDL_SetVideoMode(1, 1, 0, SDL_SWSURFACE); - if(sdlScreen == NULL) + sdlWindow = SDL_CreateWindow("EmulationStation", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + display_width, display_height, + 0); + + if(sdlWindow == NULL) { - LOG(LogError) << "Error creating SDL window for input!"; + LOG(LogError) << "Error creating SDL window!" << SDL_GetError(); return false; } - - LOG(LogInfo) << "Creating surface..."; + LOG(LogInfo) << "SDL Window created, creating EGL context..."; #ifdef _RPI_ DISPMANX_ELEMENT_HANDLE_T dispman_element; @@ -198,8 +199,8 @@ namespace Renderer surface = EGL_NO_SURFACE; context = EGL_NO_CONTEXT; - SDL_FreeSurface(sdlScreen); - sdlScreen = NULL; + SDL_DestroyWindow(sdlWindow); + sdlWindow = NULL; SDL_Quit(); } From 1418f85ba7de635f76de0b52d5e216ab97fa8da3 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 19 Aug 2013 09:05:30 -0500 Subject: [PATCH 006/386] Fixed some subtle bugs with SDL2 joystick changes. Removed platform-specific input device list polling. Now we use SDL2's handy SDL_JOYDEVICEADDED event. --- src/InputManager.cpp | 263 +++++++-------------------- src/InputManager.h | 42 +---- src/components/GuiDetectDevice.cpp | 4 - src/components/GuiInputConfig.cpp | 1 - src/components/TextEditComponent.cpp | 4 + src/main.cpp | 10 +- 6 files changed, 77 insertions(+), 247 deletions(-) diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 2b13fc992..74ca08efa 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -6,29 +6,11 @@ #include #include "platform.h" -#if defined(WIN32) || defined(_WIN32) - #include -#endif - namespace fs = boost::filesystem; -//----- InputDevice ---------------------------------------------------------------------------- - -InputDevice::InputDevice(const std::string & deviceName, unsigned long vendorId, unsigned long productId) - : name(deviceName), vendor(vendorId), product(productId) -{ -} - -bool InputDevice::operator==(const InputDevice & b) const -{ - return (name == b.name && vendor == b.vendor && product == b.product); -} - -//----- InputManager --------------------------------------------------------------------------- - InputManager::InputManager(Window* window) : mWindow(window), - mJoysticks(NULL), mInputConfigs(NULL), mKeyboardInputConfig(NULL), mPrevAxisValues(NULL), - mNumJoysticks(0), mNumPlayers(0), devicePollingTimer(NULL) + mKeyboardInputConfig(NULL), + mNumJoysticks(0), mNumPlayers(0) { } @@ -37,188 +19,69 @@ InputManager::~InputManager() deinit(); } -std::vector InputManager::getInputDevices() const -{ - std::vector currentDevices; - - //retrieve all input devices from system -#if defined (__APPLE__) - #error TODO: Not implemented for MacOS yet!!! -#elif defined(__linux__) - //open linux input devices file system - const std::string inputPath("/dev/input"); - fs::directory_iterator dirIt(inputPath); - while (dirIt != fs::directory_iterator()) { - //get directory entry - std::string deviceName = (*dirIt).path().string(); - //remove parent path - deviceName.erase(0, inputPath.length() + 1); - //check if it start with "js" - if (deviceName.length() >= 3 && deviceName.find("js") == 0) { - //looks like a joystick. add to devices. - currentDevices.push_back(InputDevice(deviceName, 0, 0)); - } - ++dirIt; - } - //or dump /proc/bus/input/devices anbd search for a Handler=..."js"... entry -#elif defined(WIN32) || defined(_WIN32) - RAWINPUTDEVICELIST * deviceList = nullptr; - UINT nrOfDevices = 0; - //get number of input devices - if (GetRawInputDeviceList(deviceList, &nrOfDevices, sizeof(RAWINPUTDEVICELIST)) != -1 && nrOfDevices > 0) - { - //get list of input devices - deviceList = new RAWINPUTDEVICELIST[nrOfDevices]; - if (GetRawInputDeviceList(deviceList, &nrOfDevices, sizeof(RAWINPUTDEVICELIST)) != -1) - { - //loop through input devices - for (unsigned int i = 0; i < nrOfDevices; i++) - { - //get device name - char * rawName = new char[2048]; - UINT rawNameSize = 2047; - GetRawInputDeviceInfo(deviceList[i].hDevice, RIDI_DEVICENAME, (void *)rawName, &rawNameSize); - //null-terminate string - rawName[rawNameSize] = '\0'; - //convert to string - std::string deviceName = rawName; - delete [] rawName; - //get deviceType - RID_DEVICE_INFO deviceInfo; - UINT deviceInfoSize = sizeof(RID_DEVICE_INFO); - GetRawInputDeviceInfo(deviceList[i].hDevice, RIDI_DEVICEINFO, (void *)&deviceInfo, &deviceInfoSize); - //check if it is a HID. we ignore keyboards and mice... - if (deviceInfo.dwType == RIM_TYPEHID) - { - //check if the vendor/product already exists in list. yes. could be more elegant... - std::vector::const_iterator cdIt = currentDevices.cbegin(); - while (cdIt != currentDevices.cend()) - { - if (cdIt->name == deviceName && cdIt->product == deviceInfo.hid.dwProductId && cdIt->vendor == deviceInfo.hid.dwVendorId) - { - //device already there - break; - } - ++cdIt; - } - //was the device found? - if (cdIt == currentDevices.cend()) - { - //no. add it. - currentDevices.push_back(InputDevice(deviceName, deviceInfo.hid.dwProductId, deviceInfo.hid.dwVendorId)); - } - } - } - } - delete [] deviceList; - } -#endif - - return currentDevices; -} - -Uint32 InputManager::devicePollingCallback(Uint32 interval, void* param) -{ - //this thing my be running in a different thread, so we're not allowed to call - //any functions or change/allocate/delete stuff, but can send a user event - SDL_Event event; - event.user.type = SDL_USEREVENT; - event.user.code = SDL_USEREVENT_POLLDEVICES; - event.user.data1 = nullptr; - event.user.data2 = nullptr; - if (!SDL_PushEvent(&event)) { - LOG(LogError) << "InputManager::devicePollingCallback - SDL event queue is full!"; - } - - return interval; -} - void InputManager::init() { - if(mJoysticks != NULL) + if(initialized()) deinit(); - //get current input devices from system - inputDevices = getInputDevices(); - - SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_TIMER); + SDL_InitSubSystem(SDL_INIT_JOYSTICK); mNumJoysticks = SDL_NumJoysticks(); - mJoysticks = new SDL_Joystick*[mNumJoysticks]; - mInputConfigs = new InputConfig*[mNumJoysticks]; - mPrevAxisValues = new std::map[mNumJoysticks]; for(int i = 0; i < mNumJoysticks; i++) { - mJoysticks[i] = SDL_JoystickOpen(i); - mInputConfigs[i] = new InputConfig(i, SDL_JoystickName(mJoysticks[i])); - - for(int k = 0; k < SDL_JoystickNumAxes(mJoysticks[i]); k++) - { - mPrevAxisValues[i][k] = 0; - } + SDL_Joystick* joy = SDL_JoystickOpen(i); + SDL_JoystickID joyId = SDL_JoystickInstanceID(joy); + mJoysticks.push_back(joy); + mInputConfigs[joyId] = new InputConfig(i, SDL_JoystickName(joy)); + + int numAxes = SDL_JoystickNumAxes(joy); + mPrevAxisValues[joyId] = new int[numAxes]; + std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 } mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard"); - SDL_JoystickEventState(SDL_ENABLE); - - //start timer for input device polling - startPolling(); - loadConfig(); -} -void InputManager::startPolling() -{ - if(devicePollingTimer != NULL) - return; - - devicePollingTimer = SDL_AddTimer(POLLING_INTERVAL, devicePollingCallback, (void *)this); -} - -void InputManager::stopPolling() -{ - if(devicePollingTimer == NULL) - return; - - SDL_RemoveTimer(devicePollingTimer); - devicePollingTimer = NULL; + SDL_JoystickEventState(SDL_ENABLE); } void InputManager::deinit() { - stopPolling(); - SDL_JoystickEventState(SDL_DISABLE); - if(!SDL_WasInit(SDL_INIT_JOYSTICK)) + if(!initialized()) return; - if(mJoysticks != NULL) + for(auto iter = mJoysticks.begin(); iter != mJoysticks.end(); iter++) { - for(int i = 0; i < mNumJoysticks; i++) - { - SDL_JoystickClose(mJoysticks[i]); - delete mInputConfigs[i]; - } - - delete[] mInputConfigs; - mInputConfigs = NULL; - - delete[] mJoysticks; - mJoysticks = NULL; - - delete mKeyboardInputConfig; - mKeyboardInputConfig = NULL; - - delete[] mPrevAxisValues; - mPrevAxisValues = NULL; + SDL_JoystickClose(*iter); } - SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_TIMER); + mJoysticks.clear(); - inputDevices.clear(); + for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) + { + delete iter->second; + } + + mInputConfigs.clear(); + + for(auto iter = mPrevAxisValues.begin(); iter != mPrevAxisValues.end(); iter++) + { + delete[] iter->second; + } + + mPrevAxisValues.clear(); + + if(mKeyboardInputConfig != NULL) + { + delete mKeyboardInputConfig; + mKeyboardInputConfig = NULL; + } + + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } int InputManager::getNumJoysticks() { return mNumJoysticks; } @@ -233,7 +96,7 @@ int InputManager::getButtonCountByDevice(int id) int InputManager::getNumPlayers() { return mNumPlayers; } void InputManager::setNumPlayers(int num) { mNumPlayers = num; } -InputConfig* InputManager::getInputConfigByDevice(int device) +InputConfig* InputManager::getInputConfigByDevice(SDL_JoystickID device) { if(device == DEVICE_KEYBOARD) return mKeyboardInputConfig; @@ -246,10 +109,12 @@ InputConfig* InputManager::getInputConfigByPlayer(int player) if(mKeyboardInputConfig->getPlayerNum() == player) return mKeyboardInputConfig; - for(int i = 0; i < mNumJoysticks; i++) + for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) { - if(mInputConfigs[i]->getPlayerNum() == player) - return mInputConfigs[i]; + if(iter->second->getPlayerNum() == player) + { + return iter->second; + } } LOG(LogError) << "Could not find input config for player number " << player << "!"; @@ -306,20 +171,10 @@ bool InputManager::parseEvent(const SDL_Event& ev) mWindow->input(getInputConfigByDevice(DEVICE_KEYBOARD), Input(DEVICE_KEYBOARD, TYPE_KEY, ev.key.keysym.sym, 0, false)); return true; - case SDL_USEREVENT: - if (ev.user.code == SDL_USEREVENT_POLLDEVICES) { - //poll joystick / HID again - std::vector currentDevices = getInputDevices(); - //compare device lists to see if devices were added/deleted - if (currentDevices != inputDevices) { - LOG(LogInfo) << "Device configuration changed!"; - inputDevices = currentDevices; - //deinit and reinit InputManager - deinit(); - init(); - } - return true; - } + case SDL_JOYDEVICEADDED: + deinit(); + init(); + return true; } return false; @@ -327,7 +182,7 @@ bool InputManager::parseEvent(const SDL_Event& ev) void InputManager::loadConfig() { - if(!mJoysticks) + if(!initialized()) { LOG(LogError) << "ERROR - cannot load InputManager config without being initialized!"; } @@ -348,10 +203,11 @@ void InputManager::loadConfig() mNumPlayers = 0; bool* configuredDevice = new bool[mNumJoysticks]; - for(int i = 0; i < mNumJoysticks; i++) + std::fill(configuredDevice, configuredDevice + mNumJoysticks, false); + + for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) { - mInputConfigs[i]->setPlayerNum(-1); - configuredDevice[i] = false; + iter->second->setPlayerNum(-1); } pugi::xml_node root = doc.child("inputList"); @@ -372,7 +228,8 @@ void InputManager::loadConfig() { if(!configuredDevice[i] && SDL_JoystickName(mJoysticks[i]) == devName) { - mInputConfigs[i]->loadFromXML(node, mNumPlayers); + SDL_JoystickID joyId = SDL_JoystickInstanceID(mJoysticks[i]); + mInputConfigs[joyId]->loadFromXML(node, mNumPlayers); mNumPlayers++; found = true; configuredDevice[i] = true; @@ -423,14 +280,11 @@ void InputManager::loadDefaultConfig() cfg->mapInput("mastervolup", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_PLUS, 1, true)); cfg->mapInput("mastervoldown", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_MINUS, 1, true)); - - cfg->mapInput("sortordernext", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F7, 1, true)); - cfg->mapInput("sortorderprevious", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F8, 1, true)); } void InputManager::writeConfig() { - if(!mJoysticks) + if(!initialized()) { LOG(LogError) << "ERROR - cannot write config without being initialized!"; return; @@ -457,3 +311,8 @@ std::string InputManager::getConfigPath() path += "/.emulationstation/es_input.cfg"; return path; } + +bool InputManager::initialized() const +{ + return mKeyboardInputConfig != NULL; +} diff --git a/src/InputManager.h b/src/InputManager.h index e0cef8b61..9c7ff22a3 100644 --- a/src/InputManager.h +++ b/src/InputManager.h @@ -9,16 +9,6 @@ class InputConfig; class Window; -struct InputDevice -{ - std::string name; - unsigned long vendor; - unsigned long product; - - InputDevice(const std::string & deviceName, unsigned long vendorId, unsigned long productId); - bool operator==(const InputDevice & b) const; -}; - //you should only ever instantiate one of these, by the way class InputManager { @@ -26,38 +16,23 @@ class InputManager Window* mWindow; - //non-InputManager classes shouldn't use this, as you can easily miss the keyboard - InputConfig* getInputConfigByDevice(int device); + //non-InputManager classes shouldn't use this, as you can easily miss the keyboard and don't have SDL_JoystickIDs + InputConfig* getInputConfigByDevice(SDL_JoystickID device); void loadDefaultConfig(); int mNumJoysticks; int mNumPlayers; - SDL_Joystick** mJoysticks; - InputConfig** mInputConfigs; + + std::vector mJoysticks; + std::map mInputConfigs; InputConfig* mKeyboardInputConfig; - std::map* mPrevAxisValues; - std::vector inputDevices; + std::map mPrevAxisValues; - /*! - Retrieve joysticks/ HID devices from system. - \return Returns a list of InputDevices that can be compared to the current /inputDevices to check if the configuration has changed. - \note This currently reads the content of the /dev/input on linux, searches for "js**" names and stores those. On Windows it uses GetRawInputDeviceInfo to find devices of type RIM_TYPEHID and stores those. - */ - std::vector getInputDevices() const; - - static const int POLLING_INTERVAL = 5000; - SDL_TimerID devicePollingTimer; - - /*! - Called when devicePollingTimer runs out. Sends a SDL_UserEvent with type SDL_USEREVENT_POLLDEVICES to the event queue. - */ - static Uint32 devicePollingCallback(Uint32 interval, void * param); + bool initialized() const; public: - static const int SDL_USEREVENT_POLLDEVICES = SDL_USEREVENT + 100; //This event is issued when the input devices should be rescanned. - InputManager(Window* window); ~InputManager(); @@ -77,9 +52,6 @@ public: bool parseEvent(const SDL_Event& ev); InputConfig* getInputConfigByPlayer(int player); - - void startPolling(); - void stopPolling(); }; #endif diff --git a/src/components/GuiDetectDevice.cpp b/src/components/GuiDetectDevice.cpp index f31beca8d..2777ae26d 100644 --- a/src/components/GuiDetectDevice.cpp +++ b/src/components/GuiDetectDevice.cpp @@ -44,10 +44,6 @@ bool GuiDetectDevice::input(InputConfig* config, Input input) if(!input.value) return false; - //don't allow device list to change once the first player has registered - if(mCurrentPlayer == 0) - mWindow->getInputManager()->stopPolling(); - config->setPlayerNum(mCurrentPlayer); mWindow->getInputManager()->setNumPlayers(mWindow->getInputManager()->getNumPlayers() + 1); //inc total number of players mCurrentPlayer++; diff --git a/src/components/GuiInputConfig.cpp b/src/components/GuiInputConfig.cpp index 202238fbc..15fa2f21b 100644 --- a/src/components/GuiInputConfig.cpp +++ b/src/components/GuiInputConfig.cpp @@ -38,7 +38,6 @@ bool GuiInputConfig::input(InputConfig* config, Input input) mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(mTargetConfig->getPlayerNum() + 1))); }else{ mWindow->getInputManager()->writeConfig(); - mWindow->getInputManager()->startPolling(); //enable polling again since we're done GuiGameList::create(mWindow); } delete this; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 01ae19be6..a1bb42444 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -16,6 +16,8 @@ void TextEditComponent::onFocusGained() mBox.setHorizontalImage(":/glow_hor.png"); mBox.setVerticalImage(":/glow_vert.png"); mBox.setBorderColor(0x51CCFFFF); + + SDL_StartTextInput(); } void TextEditComponent::onFocusLost() @@ -23,6 +25,8 @@ void TextEditComponent::onFocusLost() mBox.setHorizontalImage(":/glow_off_hor.png"); mBox.setVerticalImage(":/glow_off_vert.png"); mBox.setBorderColor(0xFFFFFFFF); + + SDL_StopTextInput(); } void TextEditComponent::onSizeChanged() diff --git a/src/main.cpp b/src/main.cpp index 72c87aed3..04e0e877d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -193,16 +193,16 @@ int main(int argc, char* argv[]) case SDL_KEYDOWN: case SDL_KEYUP: case SDL_JOYAXISMOTION: + case SDL_TEXTINPUT: + case SDL_TEXTEDITING: + case SDL_JOYDEVICEADDED: + case SDL_JOYDEVICEREMOVED: if(window.getInputManager()->parseEvent(event)) { sleeping = false; timeSinceLastEvent = 0; } break; - case SDL_USEREVENT: - //try to poll input devices, but do not necessarily wake up... - window.getInputManager()->parseEvent(event); - break; case SDL_QUIT: running = false; break; @@ -243,7 +243,7 @@ int main(int argc, char* argv[]) Log::flush(); } - Renderer::deinit(); + window.deinit(); SystemData::deleteSystems(); std::cout << "EmulationStation cleanly shutting down...\n"; From 7c2e7f9069f0e5a462f1bf6a44ed39737d3f9b8e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 19 Aug 2013 10:36:48 -0500 Subject: [PATCH 007/386] Basic text editing support. --- src/GuiComponent.cpp | 8 +++++ src/GuiComponent.h | 2 ++ src/InputManager.cpp | 16 +++++++++ src/components/ComponentListComponent.cpp | 6 ++++ src/components/ComponentListComponent.h | 1 + src/components/GuiGameEd.cpp | 2 +- src/components/TextEditComponent.cpp | 41 ++++++++++++++++++++--- src/components/TextEditComponent.h | 10 ++++-- 8 files changed, 78 insertions(+), 8 deletions(-) diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 06f55d287..501e5dd8b 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -166,3 +166,11 @@ std::string GuiComponent::getValue() const { return ""; } + +void GuiComponent::textInput(const char* text) +{ + for(auto iter = mChildren.begin(); iter != mChildren.end(); iter++) + { + (*iter)->textInput(text); + } +} diff --git a/src/GuiComponent.h b/src/GuiComponent.h index a9ca6eb7a..aad06ffa3 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -12,6 +12,8 @@ public: GuiComponent(Window* window); virtual ~GuiComponent(); + virtual void textInput(const char* text); + //Called when input is received. //Return true if the input is consumed, false if it should continue to be passed to other children. virtual bool input(InputConfig* config, Input input); diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 74ca08efa..6ab7e4e58 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -156,6 +156,17 @@ bool InputManager::parseEvent(const SDL_Event& ev) return true; case SDL_KEYDOWN: + if(ev.key.keysym.sym == SDLK_BACKSPACE && SDL_IsTextInputActive()) + { + if(mWindow->peekGui() != NULL) + mWindow->peekGui()->textInput("\b"); + + return true; + } + + if(ev.key.repeat) + return false; + if(ev.key.keysym.sym == SDLK_F4) { SDL_Event* quit = new SDL_Event(); @@ -171,6 +182,11 @@ bool InputManager::parseEvent(const SDL_Event& ev) mWindow->input(getInputConfigByDevice(DEVICE_KEYBOARD), Input(DEVICE_KEYBOARD, TYPE_KEY, ev.key.keysym.sym, 0, false)); return true; + case SDL_TEXTINPUT: + if(mWindow->peekGui() != NULL) + mWindow->peekGui()->textInput(ev.text.text); + break; + case SDL_JOYDEVICEADDED: deinit(); init(); diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 31134db64..f371ea5fc 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -340,6 +340,12 @@ void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) } } +void ComponentListComponent::textInput(const char* text) +{ + if(getSelectedComponent() != NULL) + getSelectedComponent()->textInput(text); +} + void ComponentListComponent::onPositionChanged() { updateComponentOffsets(); diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentListComponent.h index 047ace574..295f3c9a4 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentListComponent.h @@ -23,6 +23,7 @@ public: void onPositionChanged() override; + void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp index 223402e0c..ee4d25dda 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiGameEd.cpp @@ -88,10 +88,10 @@ void GuiGameEd::populateList(const std::vector& mdd) mGeneratedComponents.push_back(ed); y++; + break; } - //force list reflow mList.onPositionChanged(); } diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index a1bb42444..576a94c4d 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -1,5 +1,8 @@ #include "TextEditComponent.h" #include "../Log.h" +#include "../Font.h" +#include "../Window.h" +#include "../Renderer.h" TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), mBox(window, 0, 0, 0, 0) @@ -8,25 +11,28 @@ TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), onFocusLost(); - setSize(48, 22); + LOG(LogInfo) << getFont()->getHeight(); + setSize(256, /*(float)getFont()->getHeight()*/ 41); } void TextEditComponent::onFocusGained() { mBox.setHorizontalImage(":/glow_hor.png"); mBox.setVerticalImage(":/glow_vert.png"); - mBox.setBorderColor(0x51CCFFFF); + mBox.setBorderColor(0x51CCFF00 | getOpacity()); SDL_StartTextInput(); + mFocused = true; } void TextEditComponent::onFocusLost() { mBox.setHorizontalImage(":/glow_off_hor.png"); mBox.setVerticalImage(":/glow_off_vert.png"); - mBox.setBorderColor(0xFFFFFFFF); + mBox.setBorderColor(0xFFFFFF00 | getOpacity()); SDL_StopTextInput(); + mFocused = false; } void TextEditComponent::onSizeChanged() @@ -44,7 +50,32 @@ std::string TextEditComponent::getValue() const return mText; } -bool TextEditComponent::input(InputConfig* config, Input input) +void TextEditComponent::textInput(const char* text) { - return GuiComponent::input(config, input); + if(mFocused) + { + if(text[0] == '\b') + { + if(mText.length() > 0) + mText.erase(mText.end() - 1, mText.end()); + }else{ + mText += text; + } + } +} + +void TextEditComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = getTransform() * parentTrans; + renderChildren(trans); + + Renderer::setMatrix(trans); + + std::shared_ptr f = getFont(); + f->drawText(mText, Eigen::Vector2f::Zero(), 0x00000000 | getOpacity()); +} + +std::shared_ptr TextEditComponent::getFont() +{ + return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); } diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 8a2ec59fb..98316a823 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -3,12 +3,15 @@ #include "../GuiComponent.h" #include "GuiBox.h" +class Font; + class TextEditComponent : public GuiComponent { public: TextEditComponent(Window* window); - bool input(InputConfig* config, Input input) override; + void textInput(const char* text) override; + void render(const Eigen::Affine3f& parentTrans) override; void onFocusGained() override; void onFocusLost() override; @@ -17,9 +20,12 @@ public: void setValue(const std::string& val) override; std::string getValue() const override; + private: std::string mText; - bool mAllowNewlines; + bool mFocused; + + std::shared_ptr getFont(); GuiBox mBox; }; From 7cb3cc09eea928f046c576a12887e735529d3425 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 Aug 2013 12:40:39 -0500 Subject: [PATCH 008/386] Fixed a long-standing invalid OpenGL disable in drawRect. Fixed a really strange bug in ComponentList vertical centering that was causing TextEditComponent to render the top GuiBox border incorrectly with odd sizes. --- src/Renderer_draw_gl.cpp | 4 ++-- src/components/ComponentListComponent.cpp | 2 +- src/components/TextEditComponent.cpp | 7 +++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Renderer_draw_gl.cpp b/src/Renderer_draw_gl.cpp index c12a4a82c..d851129b2 100644 --- a/src/Renderer_draw_gl.cpp +++ b/src/Renderer_draw_gl.cpp @@ -103,9 +103,9 @@ namespace Renderer { glDrawArrays(GL_TRIANGLES, 0, 6); - glDisableClientState(GL_BLEND); + glDisable(GL_BLEND); glDisableClientState(GL_VERTEX_ARRAY); - glDisable(GL_COLOR_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); } void setMatrix(float* matrix) diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index f371ea5fc..7ced286db 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -118,7 +118,7 @@ Eigen::Vector3f ComponentListComponent::getCellOffset(Eigen::Vector2i pos) offset[0] += gridSize.x() - entry->component->getSize().x(); //always center on the Y axis - offset[1] += gridSize.y() / 2 - entry->component->getSize().y() / 2; + offset[1] += gridSize.y() / 2.0f - entry->component->getSize().y() / 2.0f; return offset; } diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 576a94c4d..9aea4b242 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -5,14 +5,13 @@ #include "../Renderer.h" TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, 0, 0, 0, 0) + mBox(window, 0, 0, 0, 0), mFocused(false) { addChild(&mBox); onFocusLost(); - LOG(LogInfo) << getFont()->getHeight(); - setSize(256, /*(float)getFont()->getHeight()*/ 41); + setSize(256, (float)getFont()->getHeight()); } void TextEditComponent::onFocusGained() @@ -72,7 +71,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); std::shared_ptr f = getFont(); - f->drawText(mText, Eigen::Vector2f::Zero(), 0x00000000 | getOpacity()); + //f->drawText(mText, Eigen::Vector2f::Zero(), 0x00000000 | getOpacity()); } std::shared_ptr TextEditComponent::getFont() From bed9c1fbb578c5ea10ce12ca710abe907657f8d6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 Aug 2013 14:49:33 -0500 Subject: [PATCH 009/386] TextEditComponents now resize vertically as needed. --- src/components/ComponentListComponent.cpp | 83 +++++++++++++++++++++-- src/components/ComponentListComponent.h | 9 ++- src/components/GuiGameEd.cpp | 14 ++-- src/components/TextEditComponent.cpp | 30 +++++++- src/components/TextEditComponent.h | 5 ++ 5 files changed, 124 insertions(+), 17 deletions(-) diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 7ced286db..e2f706428 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -4,7 +4,10 @@ #define INITIAL_CELL_SIZE 12 -ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), mGrid(NULL), mColumnWidths(NULL), mRowHeights(NULL), mCursor(-1, -1) +ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), + mGrid(NULL), mColumnWidths(NULL), mRowHeights(NULL), + mColumnWidthForced(NULL), mRowHeightForced(NULL), + mCursor(-1, -1) { mEntries.reserve(gridDimensions.x() * gridDimensions.y()); makeCells(gridDimensions); @@ -29,6 +32,12 @@ void ComponentListComponent::makeCells(Eigen::Vector2i size) mRowHeights = new unsigned int[size.y()]; std::fill(mRowHeights, mRowHeights + size.y(), INITIAL_CELL_SIZE); + mColumnWidthForced = new bool[size.x()]; + std::fill(mColumnWidthForced, mColumnWidthForced + size.x(), false); + + mRowHeightForced = new bool[size.y()]; + std::fill(mRowHeightForced, mRowHeightForced + size.y(), false); + updateSize(); resetCursor(); } @@ -68,23 +77,26 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, mCursor = pos; //update the column width and row height - if(autoFit.x() && (int)getColumnWidth(pos.x()) < component->getSize().x()) - setColumnWidth(pos.x(), (unsigned int)component->getSize().x()); - if(autoFit.y() && (int)getRowHeight(pos.y()) < component->getSize().y()) - setRowHeight(pos.y(), (unsigned int)component->getSize().y()); + //if(autoFit.x() && (int)getColumnWidth(pos.x()) < component->getSize().x()) + // setColumnWidth(pos.x(), (unsigned int)component->getSize().x()); + //if(autoFit.y() && (int)getRowHeight(pos.y()) < component->getSize().y()) + // setRowHeight(pos.y(), (unsigned int)component->getSize().y()); + updateCellSize(&mEntries.back(), autoFit.x(), autoFit.y()); component->setPosition(getCellOffset(pos)); } -void ComponentListComponent::setRowHeight(int row, unsigned int size) +void ComponentListComponent::forceRowHeight(int row, unsigned int size) { mRowHeights[row] = size; + mRowHeightForced[row] = true; updateSize(); } -void ComponentListComponent::setColumnWidth(int col, unsigned int size) +void ComponentListComponent::forceColumnWidth(int col, unsigned int size) { mColumnWidths[col] = size; + mRowHeightForced[col] = true; updateSize(); } @@ -162,6 +174,63 @@ void ComponentListComponent::updateComponentOffsets() } } +void ComponentListComponent::updateCellSize(ComponentEntry* e, bool updWidth, bool updHeight) +{ + if(!e) + { + LOG(LogError) << "Tried to updateCellSize NULL ComponentEntry!"; + return; + } + + unsigned int x = e->pos.x(); + unsigned int y = e->pos.y(); + + if(!mColumnWidthForced[x] && updWidth) + { + //recalc width to widest in column + float widest = 0; + for(int row = 0; row < mGridSize.y(); row++) + { + ComponentEntry* check = getCell(x, row); + if(check) + { + if(check->component->getSize().x() > widest) + widest = check->component->getSize().x(); + } + } + + mColumnWidths[x] = (unsigned int)widest; + } + if(!mRowHeightForced[y] && updHeight) + { + float tallest = 0; + for(int col = 0; col < mGridSize.x(); col++) + { + ComponentEntry* check = getCell(col, y); + if(check) + { + if(check->component->getSize().y() > tallest) + tallest = check->component->getSize().y(); + } + } + + mRowHeights[y] = (unsigned int)tallest; + } + + updateComponentOffsets(); +} + +void ComponentListComponent::updateComponent(GuiComponent* cmp) +{ + for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) + { + if(iter->component == cmp) + { + updateCellSize(&(*iter)); + } + } +} + bool ComponentListComponent::input(InputConfig* config, Input input) { if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component->input(config, input)) diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentListComponent.h index 295f3c9a4..1f79d20bb 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentListComponent.h @@ -28,8 +28,10 @@ public: void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; - void setColumnWidth(int col, unsigned int size); - void setRowHeight(int row, unsigned int size); + void forceColumnWidth(int col, unsigned int size); + void forceRowHeight(int row, unsigned int size); + + void updateComponent(GuiComponent* cmp); void resetCursor(); bool cursorValid(); @@ -73,6 +75,8 @@ private: unsigned int* mColumnWidths; unsigned int* mRowHeights; + bool* mColumnWidthForced; + bool* mRowHeightForced; Eigen::Vector3f getCellOffset(Eigen::Vector2i gridPos); void updateSize(); @@ -82,6 +86,7 @@ private: Eigen::Vector2i mCursor; void updateComponentOffsets(); + void updateCellSize(ComponentEntry* e, bool updWidth = true, bool updHeight = true); }; //ability to define a list of components in terms of a grid diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp index ee4d25dda..0d0c73099 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiGameEd.cpp @@ -2,11 +2,11 @@ #include "../Renderer.h" #include "../Log.h" -#define MDED_RESERVED_ROWS 2 +#define MDED_RESERVED_ROWS 3 GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd) : GuiComponent(window), mBox(mWindow, 0, 0, 0, 0), - mList(window, Eigen::Vector2i(2, mdd.size() + MDED_RESERVED_ROWS)), + mList(window, Eigen::Vector2i(3, mdd.size() + MDED_RESERVED_ROWS)), mPathDisp(window), mGame(game) { @@ -83,15 +83,17 @@ void GuiGameEd::populateList(const std::vector& mdd) mGeneratedComponents.push_back(label); GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); + ed->setSize(ed->getSize().x(), 256); ed->setValue(mGame->metadata()->get(iter->key)); mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); mGeneratedComponents.push_back(ed); y++; - break; } - - //force list reflow - mList.onPositionChanged(); + TextComponent* save = new TextComponent(mWindow); + save->setText("SAVE"); + save->setColor(0x0000FFFF); + mList.setEntry(Vector2i(0, y), Vector2i(2, 1), save, true, ComponentListComponent::AlignCenter); + mGeneratedComponents.push_back(save); } diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 9aea4b242..945ba4b10 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -3,9 +3,10 @@ #include "../Font.h" #include "../Window.h" #include "../Renderer.h" +#include "ComponentListComponent.h" TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, 0, 0, 0, 0), mFocused(false) + mBox(window, 0, 0, 0, 0), mFocused(false), mAllowResize(true) { addChild(&mBox); @@ -42,6 +43,7 @@ void TextEditComponent::onSizeChanged() void TextEditComponent::setValue(const std::string& val) { mText = val; + onTextChanged(); } std::string TextEditComponent::getValue() const @@ -61,6 +63,30 @@ void TextEditComponent::textInput(const char* text) mText += text; } } + + onTextChanged(); +} + +void TextEditComponent::onTextChanged() +{ + if(mAllowResize) + { + float y = getFont()->sizeWrappedText(mText, mSize.x()).y(); + if(y == 0) + y = getFont()->getHeight(); + + setSize(mSize.x(), y); + } + + ComponentListComponent* cmp = dynamic_cast(getParent()); + if(cmp) + cmp->updateComponent(this); +} + +void TextEditComponent::setAllowResize(bool allow) +{ + mAllowResize = allow; + onTextChanged(); } void TextEditComponent::render(const Eigen::Affine3f& parentTrans) @@ -71,7 +97,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); std::shared_ptr f = getFont(); - //f->drawText(mText, Eigen::Vector2f::Zero(), 0x00000000 | getOpacity()); + f->drawWrappedText(mText, Eigen::Vector2f(0, 0), mSize.x(), 0x000000 | getOpacity()); } std::shared_ptr TextEditComponent::getFont() diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 98316a823..e5eb2055f 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -21,9 +21,14 @@ public: void setValue(const std::string& val) override; std::string getValue() const override; + void setAllowResize(bool allow); //Allow automatic resizing of height to accomodate more text. + private: + void onTextChanged(); + std::string mText; bool mFocused; + bool mAllowResize; std::shared_ptr getFont(); From bde5b6888f30253a71048f2a837a2ad3668f40f8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 Aug 2013 15:59:11 -0500 Subject: [PATCH 010/386] Properly fill in display_width and display_height for 0 now. --- src/Renderer_init_sdlgl.cpp | 7 +++++++ src/components/ComponentListComponent.cpp | 7 ++++++- src/components/GuiGameEd.cpp | 5 ++--- src/components/TextEditComponent.cpp | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index 6a362c7ac..6065eb392 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -40,6 +40,13 @@ namespace Renderer SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); //SDL_GL_SetSwapInterval(1); //0 for immediate updates, 1 for updates synchronized with the vertical retrace, -1 for late swap tearing + SDL_DisplayMode dispMode; + SDL_GetDisplayMode(0, 0, &dispMode); + if(display_width == 0) + display_width = dispMode.w; + if(display_height == 0) + display_height = dispMode.h; + sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, display_width, display_height, diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index e2f706428..225525225 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -84,6 +84,8 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, updateCellSize(&mEntries.back(), autoFit.x(), autoFit.y()); component->setPosition(getCellOffset(pos)); + + updateSize(); } void ComponentListComponent::forceRowHeight(int row, unsigned int size) @@ -91,6 +93,7 @@ void ComponentListComponent::forceRowHeight(int row, unsigned int size) mRowHeights[row] = size; mRowHeightForced[row] = true; updateSize(); + updateComponentOffsets(); } void ComponentListComponent::forceColumnWidth(int col, unsigned int size) @@ -98,6 +101,7 @@ void ComponentListComponent::forceColumnWidth(int col, unsigned int size) mColumnWidths[col] = size; mRowHeightForced[col] = true; updateSize(); + updateComponentOffsets(); } unsigned int ComponentListComponent::getRowHeight(int row) { return mRowHeights[row]; } @@ -218,6 +222,7 @@ void ComponentListComponent::updateCellSize(ComponentEntry* e, bool updWidth, bo } updateComponentOffsets(); + updateSize(); } void ComponentListComponent::updateComponent(GuiComponent* cmp) @@ -405,7 +410,7 @@ void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(entryTrans); Renderer::drawRect(0, 0, 4, 4, 0xFF0000FF); - Renderer::drawRect(0, 0, (int)entry->component->getSize().x(), (int)entry->component->getSize().y(), 0x0000AA88); + Renderer::drawRect(0, 0, (int)entry->component->getSize().x(), (int)entry->component->getSize().y(), 0x0000AA22); } } diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp index 0d0c73099..f420d741f 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiGameEd.cpp @@ -37,9 +37,8 @@ GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd) mGeneratedComponents.push_back(label); GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); - ed->setSize(ed->getSize().x(), 256); + ed->setSize(mSize.x() / 2, ed->getSize().y()); ed->setValue(mGame->metadata()->get(iter->key)); mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); mGeneratedComponents.push_back(ed); diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 945ba4b10..f8c5e4475 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -73,7 +73,7 @@ void TextEditComponent::onTextChanged() { float y = getFont()->sizeWrappedText(mText, mSize.x()).y(); if(y == 0) - y = getFont()->getHeight(); + y = (float)getFont()->getHeight(); setSize(mSize.x(), y); } From 11f774e019aa8fc8e6131eb25e0280afb621b962 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 Aug 2013 16:18:20 -0500 Subject: [PATCH 011/386] Cache the result of Font::getDefaultPath(). (According to Very Sleepy, this was taking up 39% of render time :)) --- src/Font.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Font.cpp b/src/Font.cpp index a8d6c7dd7..d7b29bdf2 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -16,8 +16,13 @@ int Font::getSize() const { return mSize; } std::map< std::pair, std::weak_ptr > Font::sFontMap; +static std::string default_font_path = ""; + std::string Font::getDefaultPath() { + if(!default_font_path.empty()) + return default_font_path; + const int fontCount = 4; #ifdef WIN32 @@ -53,10 +58,13 @@ std::string Font::getDefaultPath() for(int i = 0; i < fontCount; i++) { if(boost::filesystem::exists(fonts[i])) + { + default_font_path = fonts[i]; return fonts[i]; + } } - LOG(LogError) << "Error - could not find a font!"; + LOG(LogError) << "Error - could not find the default font!"; return ""; } From df897c0b5a5f586c3ce39702a97c9b09d239f32a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 Aug 2013 20:08:36 -0500 Subject: [PATCH 012/386] Finally implemented TextCaches for TextComponent and TextEditComponent. Huge boost in performance with rendering game descriptions. (It's About Damn Time (TM)) --- src/Font.cpp | 130 ++++++++++----------------- src/Font.h | 11 +-- src/components/TextComponent.cpp | 25 ++++-- src/components/TextComponent.h | 3 + src/components/TextEditComponent.cpp | 16 +++- src/components/TextEditComponent.h | 5 +- 6 files changed, 90 insertions(+), 100 deletions(-) diff --git a/src/Font.cpp b/src/Font.cpp index d7b29bdf2..2147d7327 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -283,12 +283,6 @@ void Font::renderTextCache(TextCache* cache) return; } - if(cache->sourceFont != this) - { - LOG(LogError) << "Attempted to draw TextCache with font other than its source!"; - return; - } - glBindTexture(GL_TEXTURE_2D, textureID); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); @@ -314,17 +308,34 @@ void Font::renderTextCache(TextCache* cache) Eigen::Vector2f Font::sizeText(std::string text) const { - float cwidth = 0.0f; + float lineWidth = 0.0f; + float highestWidth = 0.0f; + + float y = (float)getHeight(); + for(unsigned int i = 0; i < text.length(); i++) { unsigned char letter = text[i]; + + if(letter == '\n') + { + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + lineWidth = 0.0f; + y += getHeight(); + } + if(letter < 32 || letter >= 128) letter = 127; - cwidth += charData[letter].advX * fontScale; + lineWidth += charData[letter].advX * fontScale; } - return Eigen::Vector2f(cwidth, getHeight()); + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + return Eigen::Vector2f(highestWidth, y); } int Font::getHeight() const @@ -333,8 +344,6 @@ int Font::getHeight() const } - - void Font::drawCenteredText(std::string text, float xOffset, float y, unsigned int color) { Eigen::Vector2f pos = sizeText(text); @@ -350,73 +359,21 @@ void Font::drawCenteredText(std::string text, float xOffset, float y, unsigned i //draws text and ensures it's never longer than xLen void Font::drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color) { - float y = offset.y(); - - std::string line, word, temp; - Eigen::Vector2f textSize; - size_t space, newline; - - while(text.length() > 0 || !line.empty()) //while there's text or we still have text to render - { - space = text.find(' ', 0); - if(space == std::string::npos) - space = text.length() - 1; - - - word = text.substr(0, space + 1); - - //check if the next word contains a newline - newline = word.find('\n', 0); - if(newline != std::string::npos) - { - word = word.substr(0, newline); - text.erase(0, newline + 1); - }else{ - text.erase(0, space + 1); - } - - temp = line + word; - - textSize = sizeText(temp); - - //if we're on the last word and it'll fit on the line, just add it to the line - if((textSize.x() <= xLen && text.length() == 0) || newline != std::string::npos) - { - line = temp; - word = ""; - } - - - //if the next line will be too long or we're on the last of the text, render it - if(textSize.x() > xLen || text.length() == 0 || newline != std::string::npos) - { - //render line now - if(textSize.x() > 0) //make sure it's not blank - drawText(line, Eigen::Vector2f(offset.x(), y), color); - - //increment y by height and some extra padding for the next line - y += textSize.y() + 4; - - //move the word we skipped to the next line - line = word; - }else{ - //there's still space, continue building the line - line = temp; - } - - } + text = wrapText(text, xLen); + drawText(text, offset, color); } -Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const +//the worst algorithm ever written +//breaks up a normal string with newlines to make it fit xLen +std::string Font::wrapText(std::string text, float xLen) const { - Eigen::Vector2f out(0, 0); - - float y = 0; + std::string out; std::string line, word, temp; - Eigen::Vector2f textSize; size_t space, newline; + Eigen::Vector2f textSize; + while(text.length() > 0 || !line.empty()) //while there's text or we still have text to render { space = text.find(' ', 0); @@ -449,29 +406,29 @@ Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const //if the next line will be too long or we're on the last of the text, render it if(textSize.x() > xLen || text.length() == 0 || newline != std::string::npos) { - //increment y by height and some extra padding for the next line - y += textSize.y() + 4; + //output line now + if(textSize.x() > 0) //make sure it's not blank + out += line + '\n'; //move the word we skipped to the next line line = word; - - //update our maximum known line width - if(textSize.x() > out.x()) - out[0] = textSize.x(); }else{ //there's still space, continue building the line line = temp; } - } - out[1] = y; + if(!out.empty()) //chop off the last newline + out.erase(out.length() - 1, 1); return out; } - - +Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const +{ + text = wrapText(text, xLen); + return sizeText(text); +} //============================================================================================================= //TextCache @@ -502,6 +459,13 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of { unsigned char letter = text[charNum]; + if(letter == '\n') + { + y += (float)getHeight(); + x = offsetX; + continue; + } + if(letter < 32 || letter >= 128) letter = 127; //print [X] if character is not standard ASCII @@ -533,14 +497,14 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of x += charData[letter].advX * fontScale; } - TextCache* cache = new TextCache(vertCount, vert, colors, this); + TextCache* cache = new TextCache(vertCount, vert, colors); if(color != 0x00000000) cache->setColor(color); return cache; } -TextCache::TextCache(int verts, Vertex* v, GLubyte* c, Font* f) : vertCount(verts), verts(v), colors(c), sourceFont(f) +TextCache::TextCache(int verts, Vertex* v, GLubyte* c) : vertCount(verts), verts(v), colors(c) { } diff --git a/src/Font.h b/src/Font.h index fedc4e9e3..6456804d9 100644 --- a/src/Font.h +++ b/src/Font.h @@ -53,6 +53,8 @@ public: void drawText(std::string text, const Eigen::Vector2f& offset, unsigned int color); Eigen::Vector2f sizeText(std::string text) const; //Sets the width and height of a given string to supplied pointers. A dimension is skipped if its pointer is NULL. + std::string wrapText(std::string text, float xLen) const; + void drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color); Eigen::Vector2f sizeWrappedText(std::string text, float xLen) const; @@ -102,13 +104,12 @@ public: void setColor(unsigned int color); - TextCache(int verts, Vertex* v, GLubyte* c, Font* f); + TextCache(int verts, Vertex* v, GLubyte* c); ~TextCache(); - const int vertCount; - const Vertex* verts; - const GLubyte* colors; - const Font* sourceFont; + int vertCount; + Vertex* verts; + GLubyte* colors; }; #endif diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index a36203c84..f3daa5ae2 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -20,27 +20,26 @@ TextComponent::TextComponent(Window* window, const std::string& text, std::share void TextComponent::onSizeChanged() { mAutoCalcExtent << (getSize().x() == 0), (getSize().y() == 0); - calculateExtent(); + onTextChanged(); } void TextComponent::setFont(std::shared_ptr font) { mFont = font; - - calculateExtent(); + onTextChanged(); } void TextComponent::setColor(unsigned int color) { mColor = color; mOpacity = mColor & 0x000000FF; + onTextChanged(); } void TextComponent::setText(const std::string& text) { mText = text; - - calculateExtent(); + onTextChanged(); } void TextComponent::setCentered(bool center) @@ -70,9 +69,13 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Vector2f textSize = font->sizeWrappedText(mText, getSize().x()); Eigen::Vector2f pos((getSize().x() - textSize.x()) / 2, 0); - font->drawWrappedText(mText, pos, getSize().x(), (mColor >> 8 << 8) | getOpacity()); + + Eigen::Affine3f centeredTrans = trans; + centeredTrans = centeredTrans.translate(Eigen::Vector3f(pos.x(), pos.y(), 0)); + Renderer::setMatrix(centeredTrans); + font->renderTextCache(mTextCache.get()); }else{ - font->drawWrappedText(mText, Eigen::Vector2f(0, 0), getSize().x(), mColor >> 8 << 8 | getOpacity()); + font->renderTextCache(mTextCache.get()); } } @@ -94,6 +97,14 @@ void TextComponent::calculateExtent() } } +void TextComponent::onTextChanged() +{ + calculateExtent(); + + std::shared_ptr f = getFont(); + mTextCache = std::unique_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); +} + void TextComponent::setValue(const std::string& value) { setText(value); diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 0cba0cacb..99892488f 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -26,10 +26,13 @@ private: void calculateExtent(); + void onTextChanged(); + unsigned int mColor; std::shared_ptr mFont; Eigen::Matrix mAutoCalcExtent; std::string mText; + std::unique_ptr mTextCache; bool mCentered; }; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index f8c5e4475..1efed94cd 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -69,11 +69,16 @@ void TextEditComponent::textInput(const char* text) void TextEditComponent::onTextChanged() { + std::shared_ptr f = getFont(); + + std::string wrappedText = f->wrapText(mText, mSize.x()); + mTextCache = std::unique_ptr(f->buildTextCache(wrappedText, 0, 0, 0x00000000 | getOpacity())); + if(mAllowResize) { - float y = getFont()->sizeWrappedText(mText, mSize.x()).y(); + float y = f->sizeText(wrappedText).y(); if(y == 0) - y = (float)getFont()->getHeight(); + y = (float)f->getHeight(); setSize(mSize.x(), y); } @@ -96,8 +101,11 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); - std::shared_ptr f = getFont(); - f->drawWrappedText(mText, Eigen::Vector2f(0, 0), mSize.x(), 0x000000 | getOpacity()); + if(mTextCache != NULL) + { + std::shared_ptr f = getFont(); + f->renderTextCache(mTextCache.get()); + } } std::shared_ptr TextEditComponent::getFont() diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index e5eb2055f..dd35f4cd2 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -4,12 +4,13 @@ #include "GuiBox.h" class Font; +class TextCache; class TextEditComponent : public GuiComponent { public: TextEditComponent(Window* window); - + void textInput(const char* text) override; void render(const Eigen::Affine3f& parentTrans) override; @@ -33,4 +34,6 @@ private: std::shared_ptr getFont(); GuiBox mBox; + + std::unique_ptr mTextCache; }; From 77fb840a4bbc5152ad1f997c819885453074a321 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 22 Aug 2013 15:29:50 -0500 Subject: [PATCH 013/386] Added a basic ButtonComponent class. --- CMakeLists.txt | 2 + src/Font.cpp | 8 ++-- src/Font.h | 7 ++- src/components/ButtonComponent.cpp | 57 +++++++++++++++++++++++ src/components/ButtonComponent.h | 24 ++++++++++ src/components/ComponentListComponent.cpp | 14 +++--- src/components/GuiGameEd.cpp | 44 ++++++++++------- src/components/GuiGameEd.h | 10 +++- src/components/TextComponent.cpp | 5 +- 9 files changed, 136 insertions(+), 35 deletions(-) create mode 100644 src/components/ButtonComponent.cpp create mode 100644 src/components/ButtonComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 597e3b670..b599f9f67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,6 +137,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimationComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h @@ -183,6 +184,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimationComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp diff --git a/src/Font.cpp b/src/Font.cpp index 2147d7327..ed972e99e 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -86,7 +86,6 @@ Font::Font(const ResourceManager& rm, const std::string& path, int size) : fontS Font::~Font() { - LOG(LogInfo) << "Destroying font \"" << mPath << "\" with size " << mSize << "."; deinit(); } @@ -256,8 +255,6 @@ void Font::buildAtlas(ResourceData data) mSize = (int)(mSize * (1.0f / fontScale)); deinit(); init(data); - }else{ - LOG(LogInfo) << "Created font \"" << mPath << "\" with size " << mSize << ". textureID: " << textureID; } } @@ -497,14 +494,15 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of x += charData[letter].advX * fontScale; } - TextCache* cache = new TextCache(vertCount, vert, colors); + TextCache::CacheMetrics metrics = { sizeText(text) }; + TextCache* cache = new TextCache(vertCount, vert, colors, metrics); if(color != 0x00000000) cache->setColor(color); return cache; } -TextCache::TextCache(int verts, Vertex* v, GLubyte* c) : vertCount(verts), verts(v), colors(c) +TextCache::TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m) : vertCount(verts), verts(v), colors(c), metrics(m) { } diff --git a/src/Font.h b/src/Font.h index 6456804d9..90002aa3d 100644 --- a/src/Font.h +++ b/src/Font.h @@ -102,9 +102,14 @@ public: Eigen::Vector2f tex; }; + struct CacheMetrics + { + Eigen::Vector2f size; + } metrics; + void setColor(unsigned int color); - TextCache(int verts, Vertex* v, GLubyte* c); + TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m); ~TextCache(); int vertCount; diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp new file mode 100644 index 000000000..0edb2e552 --- /dev/null +++ b/src/components/ButtonComponent.cpp @@ -0,0 +1,57 @@ +#include "ButtonComponent.h" +#include "../Renderer.h" +#include "../Window.h" + +ButtonComponent::ButtonComponent(Window* window) : GuiComponent(window) +{ + setSize(64, 48); +} + +void ButtonComponent::setPressedFunc(std::function f) +{ + mPressedFunc = f; +} + +bool ButtonComponent::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("a", input)) + { + mPressedFunc(); + return true; + } + + return GuiComponent::input(config, input); +} + +void ButtonComponent::setText(const std::string& text, unsigned int color) +{ + mText = text; + + std::shared_ptr f = getFont(); + mTextCache = std::unique_ptr(f->buildTextCache(mText, 0, 0, color)); + mOpacity = color & 0x000000FF; + + setSize(mTextCache->metrics.size + Eigen::Vector2f(12, 12)); +} + +void ButtonComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + + if(mTextCache) + { + Eigen::Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); + trans = trans.translate(centerOffset); + + Renderer::setMatrix(trans); + getFont()->renderTextCache(mTextCache.get()); + trans = trans.translate(-centerOffset); + } + + renderChildren(trans); +} + +std::shared_ptr ButtonComponent::getFont() +{ + return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); +} diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h new file mode 100644 index 000000000..190332141 --- /dev/null +++ b/src/components/ButtonComponent.h @@ -0,0 +1,24 @@ +#pragma once + +#include "../GuiComponent.h" +#include +#include "../Font.h" + +class ButtonComponent : public GuiComponent +{ +public: + ButtonComponent(Window* window); + + void setPressedFunc(std::function f); + + bool input(InputConfig* config, Input input) override; + void render(const Eigen::Affine3f& parentTrans) override; + + void setText(const std::string& text, unsigned int color); +private: + std::shared_ptr getFont(); + std::function mPressedFunc; + + std::string mText; + std::unique_ptr mTextCache; +}; diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 225525225..6504e7b7f 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -356,16 +356,16 @@ void ComponentListComponent::update(int deltaTime) { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { - if(iter->updateType == UpdateAlways) + switch(iter->updateType) { + case UpdateAlways: iter->component->update(deltaTime); - continue; - } + break; - if(iter->updateType == UpdateFocused && cursorValid() && getCell(mCursor.x(), mCursor.y())->component == iter->component) - { - iter->component->update(deltaTime); - continue; + case UpdateFocused: + if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component == iter->component) + iter->component->update(deltaTime); + break; } } } diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp index f420d741f..3085cab0d 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiGameEd.cpp @@ -8,7 +8,8 @@ GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vectorgetBaseName()); + //initialize buttons + mDeleteButton.setText("DELETE", 0x555555FF); + mFetchButton.setText("FETCH", 0x555555FF); + + mSaveButton.setText("SAVE", 0x0000FFFF); + mSaveButton.setPressedFunc([&] { save(); delete this; }); + //initialize metadata list addChild(&mList); populateList(mdd); @@ -61,17 +69,12 @@ void GuiGameEd::populateList(const std::vector& mdd) int y = 0; - TextComponent* del = new TextComponent(mWindow); - del->setText("DELETE"); - del->setColor(0xFF0000FF); - mList.setEntry(Vector2i(0, y), Vector2i(1, 1), del, true, ComponentListComponent::AlignCenter); - mGeneratedComponents.push_back(del); - - TextComponent* fetch = new TextComponent(mWindow); - fetch->setText("FETCH"); - mList.setEntry(Vector2i(1, y), Vector2i(1, 1), fetch, true, ComponentListComponent::AlignCenter); - mGeneratedComponents.push_back(fetch); + //delete button + mList.setEntry(Vector2i(0, y), Vector2i(1, 1), &mDeleteButton, true, ComponentListComponent::AlignCenter); + //fetch button + mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mFetchButton, true, ComponentListComponent::AlignCenter); + y++; for(auto iter = mdd.begin(); iter != mdd.end(); iter++) @@ -79,20 +82,25 @@ void GuiGameEd::populateList(const std::vector& mdd) TextComponent* label = new TextComponent(mWindow); label->setText(iter->key); mList.setEntry(Vector2i(0, y), Vector2i(1, 1), label, false, ComponentListComponent::AlignLeft); - mGeneratedComponents.push_back(label); + mLabels.push_back(label); GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); ed->setSize(mSize.x() / 2, ed->getSize().y()); ed->setValue(mGame->metadata()->get(iter->key)); mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); - mGeneratedComponents.push_back(ed); + mEditors.push_back(ed); y++; } - TextComponent* save = new TextComponent(mWindow); - save->setText("SAVE"); - save->setColor(0x0000FFFF); - mList.setEntry(Vector2i(0, y), Vector2i(2, 1), save, true, ComponentListComponent::AlignCenter); - mGeneratedComponents.push_back(save); + //save button + mList.setEntry(Vector2i(0, y), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter); +} + +void GuiGameEd::save() +{ + for(unsigned int i = 0; i < mLabels.size(); i++) + { + mGame->metadata()->set(mLabels.at(i)->getValue(), mEditors.at(i)->getValue()); + } } diff --git a/src/components/GuiGameEd.h b/src/components/GuiGameEd.h index a0e8cccc6..32ed6b4bb 100644 --- a/src/components/GuiGameEd.h +++ b/src/components/GuiGameEd.h @@ -6,6 +6,7 @@ #include "TextComponent.h" #include "../GameData.h" #include "GuiBox.h" +#include "ButtonComponent.h" class GuiGameEd : public GuiComponent { @@ -14,6 +15,8 @@ public: virtual ~GuiGameEd(); private: + void save(); + void populateList(const std::vector& mdd); GuiBox mBox; @@ -22,7 +25,12 @@ private: TextComponent mPathDisp; - std::vector mGeneratedComponents; + std::vector mLabels; + std::vector mEditors; GameData* mGame; + + ButtonComponent mDeleteButton; + ButtonComponent mFetchButton; + ButtonComponent mSaveButton; }; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index f3daa5ae2..188ef5803 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -73,10 +73,9 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f centeredTrans = trans; centeredTrans = centeredTrans.translate(Eigen::Vector3f(pos.x(), pos.y(), 0)); Renderer::setMatrix(centeredTrans); - font->renderTextCache(mTextCache.get()); - }else{ - font->renderTextCache(mTextCache.get()); } + + font->renderTextCache(mTextCache.get()); } GuiComponent::renderChildren(trans); From f89a418b5c96ba5ea8d9b366b839adbafdb84cfb Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 22 Aug 2013 21:41:40 -0500 Subject: [PATCH 014/386] Moving from GuiBox to simple mobile-style Nine Patches. --- CMakeLists.txt | 4 + data/ResourceUtil.cpp | 20 +- data/Resources.h | 6 + data/converted/button_png.cpp | 406 ++++++++++++++++++++++++++ data/converted/frame_png.cpp | 300 +++++++++++++++++++ data/resources/button.png | Bin 0 -> 3981 bytes data/resources/frame.png | Bin 0 -> 2921 bytes src/components/ButtonComponent.cpp | 10 +- src/components/ButtonComponent.h | 5 + src/components/GuiGameEd.cpp | 11 +- src/components/GuiGameEd.h | 4 +- src/components/NinePatchComponent.cpp | 165 +++++++++++ src/components/NinePatchComponent.h | 34 +++ 13 files changed, 945 insertions(+), 20 deletions(-) create mode 100644 data/converted/button_png.cpp create mode 100644 data/converted/frame_png.cpp create mode 100644 data/resources/button.png create mode 100644 data/resources/frame.png create mode 100644 src/components/NinePatchComponent.cpp create mode 100644 src/components/NinePatchComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b599f9f67..86370a5b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,6 +140,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h @@ -187,6 +188,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp @@ -214,6 +216,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_vert_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_off_hor_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_off_vert_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index f2cd6a3df..1fb69cbe3 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,12 +2,14 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 8; +const size_t res2hNrOfFiles = 10; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/bar.png", bar_png_size, bar_png_data}, + {":/button.png", button_png_size, button_png_data}, {":/corner.png", corner_png_size, corner_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, + {":/frame.png", frame_png_size, frame_png_data}, {":/glow_hor.png", glow_hor_png_size, glow_hor_png_data}, {":/glow_off_hor.png", glow_off_hor_png_size, glow_off_hor_png_data}, {":/glow_off_vert.png", glow_off_vert_png_size, glow_off_vert_png_data}, @@ -16,13 +18,15 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { res2hMapType::value_type mapTemp[] = { std::make_pair(":/bar.png", res2hFiles[0]), - std::make_pair(":/corner.png", res2hFiles[1]), - std::make_pair(":/ES_logo_16.png", res2hFiles[2]), - std::make_pair(":/ES_logo_32.png", res2hFiles[3]), - std::make_pair(":/glow_hor.png", res2hFiles[4]), - std::make_pair(":/glow_off_hor.png", res2hFiles[5]), - std::make_pair(":/glow_off_vert.png", res2hFiles[6]), - std::make_pair(":/glow_vert.png", res2hFiles[7]) + std::make_pair(":/button.png", res2hFiles[1]), + std::make_pair(":/corner.png", res2hFiles[2]), + std::make_pair(":/ES_logo_16.png", res2hFiles[3]), + std::make_pair(":/ES_logo_32.png", res2hFiles[4]), + std::make_pair(":/frame.png", res2hFiles[5]), + std::make_pair(":/glow_hor.png", res2hFiles[6]), + std::make_pair(":/glow_off_hor.png", res2hFiles[7]), + std::make_pair(":/glow_off_vert.png", res2hFiles[8]), + std::make_pair(":/glow_vert.png", res2hFiles[9]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 3d2986ae6..eaf81da7b 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -8,6 +8,9 @@ extern const size_t bar_png_size; extern const unsigned char bar_png_data[]; +extern const size_t button_png_size; +extern const unsigned char button_png_data[]; + extern const size_t corner_png_size; extern const unsigned char corner_png_data[]; @@ -17,6 +20,9 @@ extern const unsigned char ES_logo_16_png_data[]; extern const size_t ES_logo_32_png_size; extern const unsigned char ES_logo_32_png_data[]; +extern const size_t frame_png_size; +extern const unsigned char frame_png_data[]; + extern const size_t glow_hor_png_size; extern const unsigned char glow_hor_png_data[]; diff --git a/data/converted/button_png.cpp b/data/converted/button_png.cpp new file mode 100644 index 000000000..f120fa94c --- /dev/null +++ b/data/converted/button_png.cpp @@ -0,0 +1,406 @@ +//this file was auto-generated from "button.png" by res2h + +#include "../Resources.h" + +const size_t button_png_size = 3981; +const unsigned char button_png_data[3981] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x04,0xa8,0x49, + 0x44,0x41,0x54,0x78,0xda,0xcc,0x5a,0xbb,0x72,0xe3, + 0x48,0x0c,0xec,0x56,0xf9,0x0b,0xac,0x2a,0xff,0x98, + 0xd3,0xdb,0x74,0x2f,0xb8,0x4d,0xf6,0x4b,0x9c,0xec, + 0x25,0x4e,0x1d,0xfb,0xc3,0x4e,0x55,0xd2,0x07,0xac, + 0x48,0xf6,0x06,0x1c,0xcc,0x60,0x1e,0xa4,0x48,0x8a, + 0xf6,0x99,0x81,0x6d,0x49,0x1c,0x0c,0x80,0x6e,0x34, + 0x30,0x94,0x89,0xe9,0x4b,0xf8,0x5a,0x17,0x27,0xdf, + 0x94,0x92,0xaf,0x24,0xe3,0x8b,0xcb,0xe5,0xf2,0x25, + 0x3c,0x7f,0x7c,0x7c,0x4c,0x59,0x95,0xe8,0x7c,0x4d, + 0x01,0x4c,0x39,0xfe,0xf3,0xe7,0xcf,0x80,0x85,0x00, + 0x10,0xa2,0x40,0x10,0x10,0x20,0x02,0xb4,0xdf,0x19, + 0x64,0xe3,0xbd,0x8c,0xb6,0x43,0xae,0x54,0xe6,0x32, + 0x2d,0x96,0x00,0xd2,0x19,0x0d,0x37,0xbd,0xbc,0xbc, + 0x4c,0x06,0x52,0x05,0xe0,0x1d,0xff,0xf1,0xcf,0x0f, + 0x08,0x02,0xc8,0xd1,0x49,0xfb,0xdb,0x36,0x85,0xed, + 0xa5,0xc4,0x37,0x8e,0x6f,0x32,0x44,0x63,0xef,0x51, + 0x82,0xc8,0x70,0xef,0xe8,0xe0,0x98,0x48,0x65,0x54, + 0x10,0x19,0x93,0x45,0xfb,0x49,0x80,0x10,0x7e,0xfd, + 0xfa,0x37,0x0b,0x24,0x0b,0xc0,0x2c,0x5d,0x2e,0x17, + 0x7c,0xff,0xfb,0x7b,0x83,0xfd,0xc5,0x66,0x0c,0xc6, + 0xa5,0x79,0xc6,0x6a,0x8e,0xca,0x09,0x0e,0x8e,0xe9, + 0x69,0xac,0x67,0x55,0x8e,0xaf,0xaf,0xaf,0x1e,0x09, + 0x3e,0x94,0xb4,0xb9,0xfe,0xfe,0x9d,0xd7,0x8b,0xda, + 0x25,0xa4,0xa9,0xaa,0x9a,0x91,0x03,0xa3,0x5a,0xb9, + 0x78,0x99,0xad,0x40,0xe1,0xe0,0xab,0x05,0x11,0xf3, + 0x74,0x3e,0x9f,0xf1,0xd7,0xb7,0x6f,0x55,0x8e,0x18, + 0x7e,0xc8,0xa8,0x51,0x6c,0x28,0x67,0x84,0xd9,0x8b, + 0xf4,0x3b,0x77,0xd0,0x1c,0x51,0xa2,0x5b,0x51,0x3f, + 0x46,0x8c,0xb8,0xce,0x8c,0x87,0x0c,0xbc,0xbd,0xbd, + 0xe1,0x78,0x3c,0x02,0x00,0x1e,0xcc,0x79,0x00,0xe8, + 0xae,0xd7,0x68,0x44,0x32,0xfe,0x95,0x86,0x02,0x73, + 0x18,0x78,0x1a,0x60,0x66,0x4c,0x87,0x8c,0x63,0x79, + 0x44,0x1a,0xb3,0xc7,0x2a,0x4a,0xef,0x5f,0xb2,0x49, + 0xca,0xdd,0xc1,0xe8,0x93,0x25,0xe2,0x7c,0x3e,0xe3, + 0x78,0x3c,0x8e,0x9f,0x9c,0xcf,0x67,0x3c,0x3f,0x3f, + 0x57,0x91,0xb6,0x58,0x94,0x80,0xa4,0x17,0x91,0xe8, + 0x78,0x52,0x93,0x50,0x94,0x66,0x32,0xd4,0xce,0x28, + 0x07,0x8c,0xb1,0xa9,0x2d,0x4a,0x15,0xd4,0xd9,0xbe, + 0x00,0xde,0xdf,0xdf,0x71,0x3c,0x1e,0x11,0x6b,0xe0, + 0x7a,0xbd,0x36,0x21,0x57,0x56,0x8f,0x09,0xde,0x26, + 0x7f,0xeb,0xd8,0x6b,0xf4,0x4a,0xbe,0x37,0x0a,0x40, + 0x72,0x88,0x7a,0xd7,0x1b,0xf7,0x66,0x01,0x30,0x93, + 0x43,0xe4,0xaa,0xa3,0x05,0x02,0xb3,0xba,0xb5,0x86, + 0x5a,0xc8,0x0c,0xb2,0x81,0xf9,0xf4,0xf5,0x60,0x7d, + 0xa0,0xeb,0xae,0x49,0x1a,0xe9,0x98,0x17,0x3c,0x27, + 0x39,0xfe,0x1d,0x6c,0x5a,0x73,0x8a,0xc8,0x04,0x5d, + 0xb7,0x16,0x26,0x2a,0x52,0x27,0x66,0xc1,0x9a,0x43, + 0x2a,0x98,0x10,0x44,0x64,0xb9,0x6b,0x92,0xae,0xe0, + 0xac,0x16,0xe5,0x48,0x1c,0xfc,0x72,0x08,0x74,0x6d, + 0xee,0xcc,0x88,0xdc,0xac,0xfc,0x95,0xd2,0xd9,0x58, + 0x25,0x4f,0xc9,0x8c,0x62,0x13,0x96,0xe7,0x28,0xd4, + 0x75,0xd7,0xa8,0x3c,0x63,0x46,0x43,0x1f,0x09,0xad, + 0xdd,0x06,0x0d,0x65,0xd0,0x5b,0x91,0x2a,0xf4,0xce, + 0xb2,0x5d,0x29,0xeb,0xa6,0x10,0x93,0xd2,0x80,0x6e, + 0x9d,0x52,0xe3,0xb2,0xbd,0xc2,0xeb,0xb8,0x8f,0xe4, + 0x28,0xce,0x56,0x0d,0x74,0x70,0x58,0x39,0x24,0xfc, + 0x06,0x73,0x9d,0x36,0x2c,0xc8,0x79,0x93,0xd9,0xa3, + 0x90,0x7a,0x40,0xe9,0x54,0xa3,0xf4,0xf3,0x0e,0xdd, + 0xee,0xd8,0x0e,0x81,0xee,0x8e,0x29,0x57,0x3b,0x96, + 0xf6,0xd2,0xfd,0x26,0x03,0x98,0x72,0x64,0xc6,0x41, + 0xce,0xcc,0x45,0x99,0xa8,0xb4,0xef,0x9b,0x5e,0x7e, + 0x13,0xf6,0xa4,0x42,0x7d,0xdf,0x87,0xf6,0x7e,0x63, + 0x0e,0x2b,0x1b,0x2d,0x1c,0x2d,0xd2,0x0c,0x59,0xcb, + 0xb1,0x13,0x07,0xc2,0x2b,0x56,0xc9,0x44,0xab,0x8d, + 0x96,0x1f,0x33,0x2a,0xd4,0x75,0x5d,0x1c,0xfb,0x19, + 0x78,0x1b,0xcb,0x8d,0xcc,0x14,0x23,0xc9,0x9d,0x20, + 0xe7,0x2d,0xd9,0x18,0xbd,0x14,0x0a,0x96,0x48,0x09, + 0xa2,0x0f,0xd8,0x07,0xe9,0x86,0x87,0x10,0x84,0x8d, + 0xf3,0x60,0x94,0x84,0x4c,0x30,0x76,0xa8,0x01,0xac, + 0xa3,0xdb,0xce,0x57,0x0c,0xa0,0xef,0xfb,0x5a,0x67, + 0xe3,0xd9,0x45,0xc5,0x4c,0xc3,0x4c,0xe7,0x11,0xe6, + 0x1f,0xb9,0xd1,0x2b,0x22,0xc8,0x7c,0xc6,0x43,0x36, + 0x17,0xd5,0xba,0x2f,0x29,0x1b,0xe0,0xac,0xe9,0x65, + 0x33,0x62,0x33,0x80,0xae,0x8f,0xbc,0x1c,0x37,0x65, + 0x2a,0x2c,0xe6,0x43,0x0a,0xc5,0x74,0x9c,0x8c,0x07, + 0x1c,0xeb,0x1d,0xac,0x68,0x48,0xa4,0x82,0xb1,0xde, + 0x9b,0x9a,0x3a,0xb3,0xa9,0x95,0x91,0x72,0x81,0x64, + 0x4a,0xb4,0x8d,0x27,0xc2,0x26,0x85,0x86,0xbe,0x3e, + 0xf2,0xd9,0x91,0x91,0x04,0x90,0x4d,0x19,0x2e,0x1e, + 0xb7,0x26,0xcf,0x9d,0x1b,0xfe,0x04,0x15,0xa9,0xf3, + 0x87,0x41,0xb9,0xf3,0x73,0x1c,0x5b,0xc2,0x78,0xa2, + 0x02,0x8c,0x71,0x44,0x69,0x04,0x30,0xf4,0x7d,0xf3, + 0x00,0x51,0x8f,0x02,0x1e,0xf6,0x1c,0xde,0xf6,0x3d, + 0xc5,0xa8,0x20,0xd4,0x07,0xa3,0x7a,0x5e,0xcf,0xc5, + 0x2b,0xa8,0x8b,0xdc,0x8c,0x56,0x53,0x68,0xe8,0x5d, + 0x94,0xf1,0xd4,0x02,0x0c,0xb9,0x6e,0x32,0xd9,0x8b, + 0xfa,0x4d,0x02,0xc3,0x90,0xba,0x25,0x98,0x86,0xbc, + 0x74,0xa0,0xf1,0x3e,0xd2,0xa9,0xd7,0x54,0xd7,0x45, + 0x7a,0x87,0x46,0xa5,0x61,0x4c,0x36,0x1b,0x7d,0x60, + 0xe8,0x87,0x86,0x92,0x0c,0x9f,0xff,0xe8,0x4a,0xcb, + 0xf6,0x35,0xba,0x1d,0x16,0x3f,0x98,0xe3,0x1a,0x2f, + 0xb8,0x61,0x9d,0x93,0xb4,0x15,0xcf,0xe7,0x0e,0xcb, + 0x8d,0xcf,0x78,0x54,0x1e,0xb1,0xa8,0x9d,0x1e,0x50, + 0xf2,0x66,0x5e,0x0f,0xab,0x0c,0x70,0xc2,0x23,0x6d, + 0x7d,0xaa,0xca,0x1b,0xb6,0x75,0x2f,0x02,0x45,0x23, + 0xd0,0xf6,0xc4,0xdd,0xa4,0xa9,0x16,0x2e,0xd6,0x26, + 0x0a,0xad,0xe4,0x81,0x78,0x07,0x6d,0xd6,0xed,0x75, + 0xb8,0x9f,0x9f,0xdc,0x79,0x0e,0xe2,0x67,0x05,0xa0, + 0x7b,0x0b,0xe0,0x7f,0x40,0x80,0xf8,0xe0,0x8b,0xab, + 0x3f,0x3b,0x2c,0xa3,0xc5,0x54,0x72,0x96,0x6e,0xc8, + 0x1d,0xb2,0xaf,0x25,0x01,0xb4,0x68,0xc1,0x1d,0x36, + 0xd4,0x87,0x21,0x79,0xb8,0x0d,0x95,0xf6,0xe7,0x98, + 0xb6,0xda,0xe3,0x92,0x00,0x74,0x07,0x2d,0xb4,0x3e, + 0xc5,0x9c,0xbb,0xff,0xb6,0x40,0x1c,0xd6,0x25,0x53, + 0x77,0xf1,0x35,0xce,0x49,0x2c,0x9b,0xa3,0x36,0xa3, + 0xfb,0xb0,0x57,0xef,0x5a,0xcf,0x1d,0x6d,0x58,0x5b, + 0x7f,0xe5,0x14,0x11,0x38,0x9d,0x4e,0x9f,0xa7,0x9f, + 0xe2,0x46,0xdb,0xaa,0x02,0x3f,0x00,0xc0,0xd3,0xd3, + 0xd3,0xbe,0xa3,0xc4,0x94,0x53,0xdc,0x82,0x44,0x6d, + 0xcb,0x27,0xfb,0xe0,0xef,0xd8,0x86,0xc2,0x8a,0x62, + 0xd6,0x56,0xda,0xb1,0x72,0xde,0x92,0x1e,0x29,0x94, + 0x50,0xe0,0x76,0xfa,0x70,0x0b,0x72,0x5c,0x59,0x3b, + 0x19,0x63,0x68,0x47,0x4a,0xda,0x37,0xf5,0xa7,0xd3, + 0x7f,0x68,0xd3,0x6a,0xea,0xd9,0xa7,0x8a,0xfe,0x37, + 0xf7,0x0c,0xb5,0xf5,0xd1,0x32,0x58,0x4a,0x76,0x34, + 0xbf,0xa9,0x9f,0x82,0x69,0xd3,0x93,0xb7,0xc9,0xaf, + 0x8d,0xd6,0x3f,0xd5,0x6b,0xf9,0x53,0x05,0x90,0x9e, + 0xad,0x1a,0x12,0x27,0x7c,0xa5,0xcb,0x9c,0x6f,0xfe, + 0xb3,0xc7,0x67,0x75,0x81,0x8f,0x18,0x57,0xff,0x0c, + 0x00,0xd6,0x5e,0xf1,0xee,0x67,0xbc,0x3b,0xd3,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82 +}; diff --git a/data/converted/frame_png.cpp b/data/converted/frame_png.cpp new file mode 100644 index 000000000..c23db3442 --- /dev/null +++ b/data/converted/frame_png.cpp @@ -0,0 +1,300 @@ +//this file was auto-generated from "frame.png" by res2h + +#include "../Resources.h" + +const size_t frame_png_size = 2921; +const unsigned char frame_png_data[2921] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x84,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0xd3,0x39,0x0e,0x80, + 0x30,0x10,0x43,0xd1,0x71,0xc4,0xfd,0xaf,0x6c,0x2a, + 0x24,0xc8,0xd2,0xd0,0x10,0xa3,0xef,0x32,0x69,0xfc, + 0x32,0x19,0xd9,0xae,0x45,0x96,0x17,0x1f,0x45,0xb3, + 0xc3,0x63,0xf3,0xd2,0xb3,0x6e,0x0f,0x48,0x0b,0x29, + 0xdf,0x43,0xdc,0x03,0x52,0xca,0x0f,0x69,0x95,0x1b, + 0x5f,0x00,0x07,0x23,0xa2,0x27,0x50,0x55,0xe5,0x74, + 0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf0,0x02,0xa0,0xe0,0xfe,0x4a,0x9e,0x80,0xee,0x5f, + 0x48,0x7f,0xd8,0x01,0x05,0xbd,0xbc,0x56,0x4b,0xac, + 0xcd,0x21,0x43,0xb7,0x13,0x00,0x00,0xff,0xff,0x03, + 0x00,0xdd,0x97,0x0d,0x61,0x33,0x1b,0xed,0x21,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82 +}; diff --git a/data/resources/button.png b/data/resources/button.png new file mode 100644 index 0000000000000000000000000000000000000000..93ce17ccaf621cb78881640ef1caebfdf8539e71 GIT binary patch literal 3981 zcmV;84|4E{P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000E2Nkl`54D43<3#=;tnA6*IFSt$iOPuT_ zP96KhPF2zetVs3-9L!)Iq)3YPnSpId91MVNG%%Ej=}Y)p7boA8lCLD=i_7KmB|Lw8 zd`wxD=zL89OgaAZ=g)wJ01%=;5D*{&wBH$I(isgmy}Z0k22us! z9slvq4+sLt(MkK;Hihk_#5ay_GDKtVQG&>D@95x|NM%$I8Iwi(Nq`W3{rWcxBn!YS zT`m`V|NDD`{l#Vs#-(}2YL3bY4vy(*tY=k@udlBj2|kpxx&Hp0*NfUEq^YW!kprVz zxpKSqqW&Wwi)yuH2Q zcsv3C9?W?F=&sjjL^A%Bh5~aKcp6}4OoxnPc|;ns$0|ziU$RNc-NERSCE|QO<9Ixd zpPbKUJU>5Ik+xWrfTS0Z=y+0-P?Tme)XpdejIpULN)^=Ez5w3e-*G%15o_Rjy*43N zR*wnZCV%VLYxGLKHwr*_htbwlSAaHqXh!9y0wN{$PBW9`SkT*eW2^ENgC;x z7d$69{vB*ubBf3WUAGn{DpDtA!J0!Vm=Hu{xoeWH;H(zqNF4lf2y|`k%!u5q{FTz# zSS3%%jA9d(=P1;5*Qh*WMnfM7t=$FT`B9P5R=k?ZkX8R>?%Gjg}uXD%5pd9Qzq~8_SK% z6eG!m96UNTh~TCeNK4{sa}N^M^sX^K%?q!g!(r zjB!M11Tge{^8itg0v`4p-u6Aks36n_qk3M?#Ve?b+>BOJXy{#(@zeqgxo$Gqi~3Ch z!;rcqn1;M`pz%J^sn=B3MS6!urD04q8+~BthlY|2pa1Ae%l0+89Tq>B;~FoxVV#q- z70>4m%Z<-?R35RYogPr~W?m1g3~<6DZGEcB8@6>X0!1Ux_Qc(!sTMBQCJL?Ofp`aP z*6nq;pP$@$4&rA8pnD78e?Wlv;ESt2J1nEcRC1PX$Q`n;B>}W(!5uc#haq{m4VCui zn6}#Ek^poEEwnzxoV)+FKpfU3Q+M$-&Pgnrqc)@auvhO|&mC=8TYu#g5jdSrpQoSV zM%$_aKLEhf)6>4A#FSIqf<$f0C;Q;<*oMN2V%ApLv2xy$9x0Si;CA|O3vygpI~ikW zM@rf^^{3N+Xwz!y*{6#BH}?#+_0cj|N_I5Ash@&r)04N!uZ`9})ob}v1(2St8WJab nrOTXe{KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0001lNklqDkR9#&=8~VGHLuW z8QHEymKPsIv%_Qa(z9+4NDC?7L)-&W$`5Ik8(#niBcdlzRpoR*0RR910000000000 z000000000000000000000Pq5!;QmUUfbL&Nf7k&9y}VXStj!@qw-W#W|NjF3-Ionv TGaKz800000NkvXXu0mjf_%T^Z literal 0 HcmV?d00001 diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 0edb2e552..74dcdc00b 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -2,11 +2,17 @@ #include "../Renderer.h" #include "../Window.h" -ButtonComponent::ButtonComponent(Window* window) : GuiComponent(window) +ButtonComponent::ButtonComponent(Window* window) : GuiComponent(window), + mBox(window, ":/button.png") { setSize(64, 48); } +void ButtonComponent::onSizeChanged() +{ + mBox.setSize(mSize); +} + void ButtonComponent::setPressedFunc(std::function f) { mPressedFunc = f; @@ -38,6 +44,8 @@ void ButtonComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); + mBox.render(trans); + if(mTextCache) { Eigen::Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index 190332141..d7b4130c6 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -3,6 +3,7 @@ #include "../GuiComponent.h" #include #include "../Font.h" +#include "NinePatchComponent.h" class ButtonComponent : public GuiComponent { @@ -15,10 +16,14 @@ public: void render(const Eigen::Affine3f& parentTrans) override; void setText(const std::string& text, unsigned int color); + + void onSizeChanged() override; + private: std::shared_ptr getFont(); std::function mPressedFunc; std::string mText; std::unique_ptr mTextCache; + NinePatchComponent mBox; }; diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp index 3085cab0d..4e7972068 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiGameEd.cpp @@ -5,7 +5,7 @@ #define MDED_RESERVED_ROWS 3 GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd) : GuiComponent(window), - mBox(mWindow, 0, 0, 0, 0), + mBox(mWindow, ":/frame.png", 0xAAAAAAFF, 0xCCCCCCFF), mList(window, Eigen::Vector2i(3, mdd.size() + MDED_RESERVED_ROWS)), mPathDisp(window), mGame(game), @@ -20,14 +20,7 @@ GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd); - GuiBox mBox; + NinePatchComponent mBox; ComponentListComponent mList; diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp new file mode 100644 index 000000000..f4ff0eba4 --- /dev/null +++ b/src/components/NinePatchComponent.cpp @@ -0,0 +1,165 @@ +#include "NinePatchComponent.h" +#include "../Window.h" +#include "../Log.h" +#include "../Renderer.h" + +NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), + mEdgeColor(edgeColor), mCenterColor(centerColor), + mTexture(TextureResource::get(*window->getResourceManager(), path)), + mVertices(NULL), mColors(NULL) +{ + buildVertices(); +} + +void NinePatchComponent::buildVertices() +{ + if(mVertices != NULL) + delete[] mVertices; + + if(mColors != NULL) + delete[] mColors; + + if(mTexture->getSize() == Eigen::Vector2i::Zero()) + { + mVertices = NULL; + mColors = NULL; + LOG(LogWarning) << "NinePatchComponent missing texture!"; + return; + } + + mVertices = new Vertex[6 * 9]; + mColors = new GLubyte[6 * 9 * 4]; + Renderer::buildGLColorArray(mColors, mEdgeColor, 6 * 9); + Renderer::buildGLColorArray(&mColors[4 * 6 * 4], mCenterColor, 6); + + const Eigen::Vector2f ts = mTexture->getSize().cast(); + + //coordinates on the image in pixels, top left origin + const Eigen::Vector2f pieceCoords[9] = { + Eigen::Vector2f(0, 0), + Eigen::Vector2f(16, 0), + Eigen::Vector2f(32, 0), + Eigen::Vector2f(0, 16), + Eigen::Vector2f(16, 16), + Eigen::Vector2f(32, 16), + Eigen::Vector2f(0, 32), + Eigen::Vector2f(16, 32), + Eigen::Vector2f(32, 32), + }; + + const Eigen::Vector2f pieceSizes = getCornerSize(); + + //corners never stretch, so we calculate a width and height for slices 1, 3, 5, and 7 + float borderWidth = mSize.x() - (pieceSizes.x() * 2); //should be pieceSizes[0] and pieceSizes[2] + if(borderWidth < pieceSizes.x()) + borderWidth = pieceSizes.x(); + + float borderHeight = mSize.y() - (pieceSizes.y() * 2); //should be pieceSizes[0] and pieceSizes[6] + if(borderHeight < pieceSizes.y()) + borderHeight = pieceSizes.y(); + + mVertices[0 * 6].pos = pieceCoords[0]; //top left + mVertices[1 * 6].pos = pieceCoords[1]; //top middle + mVertices[2 * 6].pos = pieceCoords[1] + Eigen::Vector2f(borderWidth, 0); //top right + + mVertices[3 * 6].pos = mVertices[0 * 6].pos + Eigen::Vector2f(0, pieceSizes.y()); //mid left + mVertices[4 * 6].pos = mVertices[3 * 6].pos + Eigen::Vector2f(pieceSizes.x(), 0); //mid middle + mVertices[5 * 6].pos = mVertices[4 * 6].pos + Eigen::Vector2f(borderWidth, 0); //mid right + + mVertices[6 * 6].pos = mVertices[3 * 6].pos + Eigen::Vector2f(0, borderHeight); //bot left + mVertices[7 * 6].pos = mVertices[6 * 6].pos + Eigen::Vector2f(pieceSizes.x(), 0); //bot middle + mVertices[8 * 6].pos = mVertices[7 * 6].pos + Eigen::Vector2f(borderWidth, 0); //bot right + + int v = 0; + for(int slice = 0; slice < 9; slice++) + { + Eigen::Vector2f size; + + //corners + if(slice == 0 || slice == 2 || slice == 6 || slice == 8) + size = pieceSizes; + + //vertical borders + if(slice == 1 || slice == 7) + size << borderWidth, pieceSizes.y(); + + //horizontal borders + if(slice == 3 || slice == 5) + size << pieceSizes.x(), borderHeight; + + //center + if(slice == 4) + size << borderWidth, borderHeight; + + //no resizing will be necessary + //mVertices[v + 0] is already correct + mVertices[v + 1].pos = mVertices[v + 0].pos + size; + mVertices[v + 2].pos << mVertices[v + 0].pos.x(), mVertices[v + 1].pos.y(); + + mVertices[v + 3].pos << mVertices[v + 1].pos.x(), mVertices[v + 0].pos.y(); + mVertices[v + 4].pos = mVertices[v + 1].pos; + mVertices[v + 5].pos = mVertices[v + 0].pos; + + //texture coordinates + //the y = (1 - y) is to deal with texture coordinates having a bottom left corner origin vs. verticies having a top left origin + mVertices[v + 0].tex << pieceCoords[slice].x() / ts.x(), 1 - (pieceCoords[slice].y() / ts.y()); + mVertices[v + 1].tex << (pieceCoords[slice].x() + pieceSizes.x()) / ts.x(), 1 - ((pieceCoords[slice].y() + pieceSizes.y()) / ts.y()); + mVertices[v + 2].tex << mVertices[v + 0].tex.x(), mVertices[v + 1].tex.y(); + + mVertices[v + 3].tex << mVertices[v + 1].tex.x(), mVertices[v + 0].tex.y(); + mVertices[v + 4].tex = mVertices[v + 1].tex; + mVertices[v + 5].tex = mVertices[v + 0].tex; + + v += 6; + } +} + +void NinePatchComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + if(mTexture) + { + Renderer::setMatrix(trans); + + mTexture->bind(); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); + + glDrawArrays(GL_TRIANGLES, 0, 6 * 9); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + } + + renderChildren(trans); +} + +void NinePatchComponent::onSizeChanged() +{ + buildVertices(); +} + +Eigen::Vector2f NinePatchComponent::getCornerSize() const +{ + return Eigen::Vector2f(16, 16); +} + +void NinePatchComponent::fitTo(Eigen::Vector2f size) +{ + setSize(size + Eigen::Vector2f(getCornerSize().x() * 2, getCornerSize().y() * 2)); + setPosition(-getCornerSize().x(), -getCornerSize().y()); +} diff --git a/src/components/NinePatchComponent.h b/src/components/NinePatchComponent.h new file mode 100644 index 000000000..102d9c374 --- /dev/null +++ b/src/components/NinePatchComponent.h @@ -0,0 +1,34 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../resources/TextureResource.h" + +class NinePatchComponent : public GuiComponent +{ +public: + NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor = 0xFFFFFFFF, unsigned int centerColor = 0xFFFFFFFF); + + void render(const Eigen::Affine3f& parentTrans) override; + + void onSizeChanged() override; + + void fitTo(Eigen::Vector2f size); + +private: + Eigen::Vector2f getCornerSize() const; + + void buildVertices(); + + struct Vertex + { + Eigen::Vector2f pos; + Eigen::Vector2f tex; + }; + + Vertex* mVertices; + GLubyte* mColors; + + unsigned int mEdgeColor; + unsigned int mCenterColor; + std::shared_ptr mTexture; +}; From a23e873f9175c5f35e2f12d5c4129f8e6aa2016c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 Aug 2013 10:09:25 -0500 Subject: [PATCH 015/386] Update documentation to reflect move to SDL2. --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ad225c953..44cde268e 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,12 @@ Building EmulationStation uses some C++11 code, which means you'll need to install at least g++-4.7 on Linux, or VS2010 on Windows. For installing and switching to g++-4.7 see [here](http://lektiondestages.blogspot.de/2013/05/installing-and-switching-gccg-versions.html). You can also just use `export CXX=g++-4.7` to explicitly specify the compiler for CMake (make sure you delete your CMake cache files if it's not working). -EmulationStation has a few dependencies. For building, you'll need SDL 1.2, Boost.System, Boost.Filesystem, FreeImage, FreeType, and Eigen 3. You'll also need the DejaVu TrueType font on Linux to run ES. +EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.System, Boost.Filesystem, FreeImage, FreeType, and Eigen3. You'll also need the DejaVu TrueType font on Linux to run ES. **On Linux:** All of this be easily installed with apt-get: ``` -sudo apt-get install libsdl1.2-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu +sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu ``` On "desktop" Linux (that is, *not* the Raspberry Pi), you'll also need OpenGL. Try installing the MESA development package with: @@ -54,19 +54,19 @@ make [Boost](http://www.boost.org/users/download/) (you'll need to compile for Boost.Filesystem) -[Eigen 3](http://eigen.tuxfamily.org/index.php?title=Main_Page) +[Eigen3](http://eigen.tuxfamily.org/index.php?title=Main_Page) [FreeImage](http://downloads.sourceforge.net/freeimage/FreeImage3154Win32.zip) [FreeType2](http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.bz2) (you'll need to compile) -[SDL-1.2](http://www.libsdl.org/release/SDL-devel-1.2.15-VC.zip) +[SDL2](http://www.libsdl.org/release/SDL2-devel-2.0.0-VC.zip) -(remember to copy necessary .DLLs into the same folder as the executable: FreeImage.dll, freetype6.dll, SDL.dll, and zlib1.dll) +(remember to copy necessary .DLLs into the same folder as the executable: FreeImage.dll, freetype6.dll, SDL2.dll, and zlib1.dll) [CMake](http://www.cmake.org/cmake/resources/software.html) (this is used for generating the Visual Studio project) -(If you don't know how to use CMake, here are some hints: run cmake-gui and point it at your EmulationStation folder. Point the "build" directory somewhere - I use EmulationStation/build. Click configure, choose "Visual Studio 2010 Project", fill in red fields as they appear, then click Generate.) +(If you don't know how to use CMake, here are some hints: run cmake-gui and point it at your EmulationStation folder. Point the "build" directory somewhere - I use EmulationStation/build. Click configure, choose "Visual Studio [year] Project", fill in red fields as they appear, then click Generate.) Configuring From e55e0f3da7d21626c8be5132981fac6d1100ccf7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 Aug 2013 12:21:22 -0500 Subject: [PATCH 016/386] Added FolderData::removeFileRecursive(FileData* f). Fixed ButtonComponent crashing when pressed with no press func set. --- src/FolderData.cpp | 21 +++++++++++++++++++++ src/FolderData.h | 2 ++ src/components/ButtonComponent.cpp | 3 ++- src/components/GuiGameEd.cpp | 13 +++++++++++-- src/components/GuiGameEd.h | 3 ++- src/components/GuiGameList.cpp | 4 +++- src/resources/ResourceManager.cpp | 4 ++-- 7 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/FolderData.cpp b/src/FolderData.cpp index 451ffbc33..72b093405 100644 --- a/src/FolderData.cpp +++ b/src/FolderData.cpp @@ -184,3 +184,24 @@ std::vector FolderData::getFilesRecursive(bool onlyFiles) const } return temp; } + +void FolderData::removeFileRecursive(FileData* f) +{ + auto iter = mFileVector.begin(); + while(iter != mFileVector.end()) + { + if(*iter == f) + { + iter = mFileVector.erase(iter); + }else{ + + FolderData* folder = dynamic_cast(*iter); + if(folder) + { + folder->removeFileRecursive(f); + } + + iter++; + } + } +} diff --git a/src/FolderData.h b/src/FolderData.h index ecbd844fb..202ea8211 100644 --- a/src/FolderData.h +++ b/src/FolderData.h @@ -39,6 +39,8 @@ public: std::vector getFiles(bool onlyFiles = false) const; std::vector getFilesRecursive(bool onlyFiles = false) const; + void removeFileRecursive(FileData* file); + void pushFileData(FileData* file); void sort(ComparisonFunction & comparisonFunction = compareFileName, bool ascending = true); diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 74dcdc00b..9d45ccd8c 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -22,7 +22,8 @@ bool ButtonComponent::input(InputConfig* config, Input input) { if(config->isMappedTo("a", input)) { - mPressedFunc(); + if(mPressedFunc) + mPressedFunc(); return true; } diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiGameEd.cpp index 4e7972068..3750eb048 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiGameEd.cpp @@ -31,10 +31,12 @@ GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd) mList.setEntry(Vector2i(0, y), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter); } -void GuiGameEd::save() +void GuiGameEd::saveGame() { for(unsigned int i = 0; i < mLabels.size(); i++) { mGame->metadata()->set(mLabels.at(i)->getValue(), mEditors.at(i)->getValue()); } } + +void GuiGameEd::deleteGame() +{ + //mSystem->getRootFolder()->removeFileRecursive(mGame); + //delete mGame; + //mGame = NULL; +} diff --git a/src/components/GuiGameEd.h b/src/components/GuiGameEd.h index 38cd68617..80f628949 100644 --- a/src/components/GuiGameEd.h +++ b/src/components/GuiGameEd.h @@ -15,7 +15,8 @@ public: virtual ~GuiGameEd(); private: - void save(); + void saveGame(); + void deleteGame(); void populateList(const std::vector& mdd); diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 718484c74..68c140bb4 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -125,7 +125,9 @@ bool GuiGameList::input(InputConfig* config, Input input) if(input.id == SDLK_F3) { - mWindow->pushGui(new GuiGameEd(mWindow, (GameData*)mSystem->getRootFolder()->getFile(0), MetaDataList::getDefaultGameMDD())); + GameData* game = dynamic_cast(mList.getSelectedObject()); + if(game) + mWindow->pushGui(new GuiGameEd(mWindow, game, MetaDataList::getDefaultGameMDD())); return true; } diff --git a/src/resources/ResourceManager.cpp b/src/resources/ResourceManager.cpp index 37ba8a8cd..0184ff74d 100644 --- a/src/resources/ResourceManager.cpp +++ b/src/resources/ResourceManager.cpp @@ -72,7 +72,7 @@ void ResourceManager::unloadAll() iter->lock()->unload(*this); iter++; }else{ - mReloadables.erase(iter++); + iter = mReloadables.erase(iter); } } } @@ -87,7 +87,7 @@ void ResourceManager::reloadAll() iter->lock()->reload(*this); iter++; }else{ - mReloadables.erase(iter++); + iter = mReloadables.erase(iter); } } } From 268b918c464ccbdaf024b96c98e95333e397570e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 Aug 2013 17:15:00 -0500 Subject: [PATCH 017/386] Changed GuiGameEd to GuiMetaDataEd. Now accepts std::functions for save/delete. --- CMakeLists.txt | 4 +- src/components/GuiGameList.cpp | 10 +++- .../{GuiGameEd.cpp => GuiMetaDataEd.cpp} | 51 +++++++++---------- .../{GuiGameEd.h => GuiMetaDataEd.h} | 17 ++++--- 4 files changed, 45 insertions(+), 37 deletions(-) rename src/components/{GuiGameEd.cpp => GuiMetaDataEd.cpp} (63%) rename src/components/{GuiGameEd.h => GuiMetaDataEd.h} (56%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 86370a5b2..e4ab862fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,7 +151,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiBox.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameEd.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h @@ -198,7 +198,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameEd.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 68c140bb4..24ef6d003 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -6,7 +6,7 @@ #include #include "../Log.h" #include "../Settings.h" -#include "GuiGameEd.h" +#include "GuiMetaDataEd.h" std::vector GuiGameList::sortStates; @@ -127,7 +127,13 @@ bool GuiGameList::input(InputConfig* config, Input input) { GameData* game = dynamic_cast(mList.getSelectedObject()); if(game) - mWindow->pushGui(new GuiGameEd(mWindow, game, MetaDataList::getDefaultGameMDD())); + { + FolderData* root = mSystem->getRootFolder(); + mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), MetaDataList::getDefaultGameMDD(), game->getBaseName(), + [&] { updateDetailData(); }, + [game, root, this] { root->removeFileRecursive(game); updateList(); } + )); + } return true; } diff --git a/src/components/GuiGameEd.cpp b/src/components/GuiMetaDataEd.cpp similarity index 63% rename from src/components/GuiGameEd.cpp rename to src/components/GuiMetaDataEd.cpp index 3750eb048..3f4e632bd 100644 --- a/src/components/GuiGameEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -1,17 +1,19 @@ -#include "GuiGameEd.h" +#include "GuiMetaDataEd.h" #include "../Renderer.h" #include "../Log.h" #define MDED_RESERVED_ROWS 3 -GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vector& mdd) : GuiComponent(window), +GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, + const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mBox(mWindow, ":/frame.png", 0xAAAAAAFF, 0xCCCCCCFF), mList(window, Eigen::Vector2i(3, mdd.size() + MDED_RESERVED_ROWS)), - mPathDisp(window), - mGame(game), + mHeader(window), + mMetaData(md), + mSavedCallback(saveCallback), mDeleteFunc(deleteFunc), mDeleteButton(window), mFetchButton(window), mSaveButton(window) { - LOG(LogInfo) << "Creating GuiGameEd"; + LOG(LogInfo) << "Creating GuiMetaDataEd"; //set size to 80% by 80% of the window mSize << Renderer::getScreenWidth() * 0.8f, Renderer::getScreenHeight() * 0.8f; @@ -23,33 +25,34 @@ GuiGameEd::GuiGameEd(Window* window, GameData* game, const std::vectorgetBaseName()); + addChild(&mHeader); + mHeader.setPosition(0, 0); + mHeader.setSize(mSize.x(), 0); + mHeader.setCentered(true); + mHeader.setText(header); //initialize buttons - mDeleteButton.setText("DELETE", 0x555555FF); - mDeleteButton.setPressedFunc([&] { deleteGame(); delete this; }); + mDeleteButton.setText("DELETE", mDeleteFunc ? 0xFF0000FF : 0x555555FF); + if(mDeleteFunc) + mDeleteButton.setPressedFunc([&] { mDeleteFunc(); delete this; }); mFetchButton.setText("FETCH", 0x555555FF); mSaveButton.setText("SAVE", 0x0000FFFF); - mSaveButton.setPressedFunc([&] { saveGame(); delete this; }); + mSaveButton.setPressedFunc([&] { save(); delete this; }); //initialize metadata list addChild(&mList); populateList(mdd); - mList.setPosition((mSize.x() - mList.getSize().x()) / 2, mPathDisp.getSize().y() + 4); + mList.setPosition((mSize.x() - mList.getSize().x()) / 2, mHeader.getSize().y() + 4); } -GuiGameEd::~GuiGameEd() +GuiMetaDataEd::~GuiMetaDataEd() { - LOG(LogInfo) << "Deleted GuiGameEd"; + LOG(LogInfo) << "Deleted GuiMetaDataEd"; } -void GuiGameEd::populateList(const std::vector& mdd) +void GuiMetaDataEd::populateList(const std::vector& mdd) { // PATH //(centered, not part of componentlist) @@ -81,7 +84,7 @@ void GuiGameEd::populateList(const std::vector& mdd) GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); ed->setSize(mSize.x() / 2, ed->getSize().y()); - ed->setValue(mGame->metadata()->get(iter->key)); + ed->setValue(mMetaData->get(iter->key)); mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); mEditors.push_back(ed); @@ -92,17 +95,13 @@ void GuiGameEd::populateList(const std::vector& mdd) mList.setEntry(Vector2i(0, y), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter); } -void GuiGameEd::saveGame() +void GuiMetaDataEd::save() { for(unsigned int i = 0; i < mLabels.size(); i++) { - mGame->metadata()->set(mLabels.at(i)->getValue(), mEditors.at(i)->getValue()); + mMetaData->set(mLabels.at(i)->getValue(), mEditors.at(i)->getValue()); } -} -void GuiGameEd::deleteGame() -{ - //mSystem->getRootFolder()->removeFileRecursive(mGame); - //delete mGame; - //mGame = NULL; + if(mSavedCallback) + mSavedCallback(); } diff --git a/src/components/GuiGameEd.h b/src/components/GuiMetaDataEd.h similarity index 56% rename from src/components/GuiGameEd.h rename to src/components/GuiMetaDataEd.h index 80f628949..bdad64344 100644 --- a/src/components/GuiGameEd.h +++ b/src/components/GuiMetaDataEd.h @@ -7,16 +7,17 @@ #include "../GameData.h" #include "NinePatchComponent.h" #include "ButtonComponent.h" +#include -class GuiGameEd : public GuiComponent +class GuiMetaDataEd : public GuiComponent { public: - GuiGameEd(Window* window, GameData* game, const std::vector& mdd); - virtual ~GuiGameEd(); + GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, + const std::string& header, std::function savedCallback, std::function deleteFunc); + virtual ~GuiMetaDataEd(); private: - void saveGame(); - void deleteGame(); + void save(); void populateList(const std::vector& mdd); @@ -24,12 +25,14 @@ private: ComponentListComponent mList; - TextComponent mPathDisp; + TextComponent mHeader; std::vector mLabels; std::vector mEditors; - GameData* mGame; + MetaDataList* mMetaData; + std::function mSavedCallback; + std::function mDeleteFunc; ButtonComponent mDeleteButton; ButtonComponent mFetchButton; From 044619a2d3557286b961536a4a87a50cc0a06314 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 28 Aug 2013 14:39:29 -0500 Subject: [PATCH 018/386] Add ALSA package to dependency list. Change name of example config from "NES" to "nes". --- README.md | 2 +- src/SystemData.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 44cde268e..f0638b909 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.S **On Linux:** All of this be easily installed with apt-get: ``` -sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu +sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu libasound2-dev ``` On "desktop" Linux (that is, *not* the Raspberry Pi), you'll also need OpenGL. Try installing the MESA development package with: diff --git a/src/SystemData.cpp b/src/SystemData.cpp index ab99eafae..bdc7d2ecc 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -258,8 +258,8 @@ void SystemData::writeExampleConfig(const std::string& path) " \n" " \n" "\n" - " \n" - " NES\n" + " \n" + " nes\n" "\n" " \n" " Nintendo Entertainment System\n" From f9571b9389560ee5d65391601cf5c17a6164cf58 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 7 Sep 2013 17:43:36 -0500 Subject: [PATCH 019/386] TextEditComponent is now fixed-height and supports cursor-based editing. Fixed a text-wrapping bug with consecutive newlines in Font::wrapText. --- src/Font.cpp | 46 ++++++++++- src/Font.h | 1 + src/MetaData.cpp | 12 ++- src/components/ButtonComponent.cpp | 30 ++++++- src/components/ButtonComponent.h | 11 ++- src/components/TextEditComponent.cpp | 119 +++++++++++++++++++++------ src/components/TextEditComponent.h | 9 +- 7 files changed, 193 insertions(+), 35 deletions(-) diff --git a/src/Font.cpp b/src/Font.cpp index ed972e99e..8269c3672 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -383,6 +383,7 @@ std::string Font::wrapText(std::string text, float xLen) const newline = word.find('\n', 0); if(newline != std::string::npos) { + //get everything up to the newline word = word.substr(0, newline); text.erase(0, newline + 1); }else{ @@ -404,8 +405,7 @@ std::string Font::wrapText(std::string text, float xLen) const if(textSize.x() > xLen || text.length() == 0 || newline != std::string::npos) { //output line now - if(textSize.x() > 0) //make sure it's not blank - out += line + '\n'; + out += line + '\n'; //move the word we skipped to the next line line = word; @@ -427,6 +427,48 @@ Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const return sizeText(text); } +Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const +{ + std::string wrappedText = wrapText(text, xLen); + + float lineWidth = 0.0f; + float y = 0.0f; + + unsigned int stop = (unsigned int)cursor; + unsigned int wrapOffset = 0; + for(unsigned int i = 0; i < stop; i++) + { + unsigned char wrappedLetter = wrappedText[i + wrapOffset]; + unsigned char letter = text[i]; + + if(wrappedLetter == '\n' && letter != '\n') + { + //this is where the wordwrap inserted a newline + //reset lineWidth and increment y, but don't consume a cursor character + lineWidth = 0.0f; + y += getHeight(); + + wrapOffset++; + i--; + continue; + } + + if(letter == '\n') + { + lineWidth = 0.0f; + y += getHeight(); + continue; + } + + if(letter < 32 || letter >= 128) + letter = 127; + + lineWidth += charData[letter].advX * fontScale; + } + + return Eigen::Vector2f(lineWidth, y); +} + //============================================================================================================= //TextCache //============================================================================================================= diff --git a/src/Font.h b/src/Font.h index 90002aa3d..a5e75d0ef 100644 --- a/src/Font.h +++ b/src/Font.h @@ -57,6 +57,7 @@ public: void drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color); Eigen::Vector2f sizeWrappedText(std::string text, float xLen) const; + Eigen::Vector2f getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const; void drawCenteredText(std::string text, float xOffset, float y, unsigned int color); diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 8fe267d7d..a9a5d02b2 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -107,8 +107,16 @@ GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) { switch(as) { + case MD_MULTILINE_STRING: + { + TextEditComponent* comp = new TextEditComponent(window); + comp->setSize(comp->getSize().x(), comp->getSize().y() * 3); + return comp; + } default: - TextEditComponent* comp = new TextEditComponent(window); - return comp; + { + TextEditComponent* comp = new TextEditComponent(window); + return comp; + } } } diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 9d45ccd8c..555b25eb6 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -3,7 +3,9 @@ #include "../Window.h" ButtonComponent::ButtonComponent(Window* window) : GuiComponent(window), - mBox(window, ":/button.png") + mBox(window, ":/button.png"), + mFocused(false), + mTextColorFocused(0x000000FF), mTextColorUnfocused(0x333333FF), mTextPulseTime(0) { setSize(64, 48); } @@ -30,17 +32,28 @@ bool ButtonComponent::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -void ButtonComponent::setText(const std::string& text, unsigned int color) +void ButtonComponent::setText(const std::string& text, unsigned int focusedColor, unsigned int unfocusedColor) { mText = text; + mTextColorFocused = focusedColor; + mTextColorUnfocused = unfocusedColor; std::shared_ptr f = getFont(); - mTextCache = std::unique_ptr(f->buildTextCache(mText, 0, 0, color)); - mOpacity = color & 0x000000FF; + mTextCache = std::unique_ptr(f->buildTextCache(mText, 0, 0, getCurTextColor())); setSize(mTextCache->metrics.size + Eigen::Vector2f(12, 12)); } +void ButtonComponent::onFocusGained() +{ + mFocused = true; +} + +void ButtonComponent::onFocusLost() +{ + mFocused = false; +} + void ButtonComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); @@ -53,6 +66,7 @@ void ButtonComponent::render(const Eigen::Affine3f& parentTrans) trans = trans.translate(centerOffset); Renderer::setMatrix(trans); + mTextCache->setColor(getCurTextColor()); getFont()->renderTextCache(mTextCache.get()); trans = trans.translate(-centerOffset); } @@ -64,3 +78,11 @@ std::shared_ptr ButtonComponent::getFont() { return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); } + +unsigned int ButtonComponent::getCurTextColor() const +{ + if(!mFocused) + return mTextColorUnfocused; + else + return mTextColorFocused; +} diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index d7b4130c6..b0651b271 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -15,14 +15,23 @@ public: bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; - void setText(const std::string& text, unsigned int color); + void setText(const std::string& text, unsigned int focusedTextColor, unsigned int unfocusedTextColor = 0x555555FF); void onSizeChanged() override; + void onFocusGained() override; + void onFocusLost() override; private: std::shared_ptr getFont(); std::function mPressedFunc; + bool mFocused; + unsigned int mTextColorFocused; + unsigned int mTextColorUnfocused; + int mTextPulseTime; + + unsigned int getCurTextColor() const; + std::string mText; std::unique_ptr mTextCache; NinePatchComponent mBox; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 1efed94cd..dd31a833d 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -6,7 +6,8 @@ #include "ComponentListComponent.h" TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, 0, 0, 0, 0), mFocused(false), mAllowResize(true) + mBox(window, 0, 0, 0, 0), mFocused(false), + mScrollOffset(0.0f), mCursor(0), mEditing(false) { addChild(&mBox); @@ -53,18 +54,79 @@ std::string TextEditComponent::getValue() const void TextEditComponent::textInput(const char* text) { - if(mFocused) + if(mEditing) { if(text[0] == '\b') { - if(mText.length() > 0) - mText.erase(mText.end() - 1, mText.end()); + if(mCursor > 0) + { + mText.erase(mText.begin() + mCursor - 1, mText.begin() + mCursor); + mCursor--; + } }else{ - mText += text; + mText.insert(mCursor, text); + mCursor++; } } onTextChanged(); + onCursorChanged(); +} + +bool TextEditComponent::input(InputConfig* config, Input input) +{ + if(input.value == 0) + return false; + + if(config->isMappedTo("a", input) && mFocused && !mEditing) + { + mEditing = true; + return true; + } + + if(mEditing) + { + if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_RETURN) + { + textInput("\n"); + return true; + } + + if(config->isMappedTo("b", input)) + { + mEditing = false; + return true; + } + + if(config->isMappedTo("up", input)) + { + + }else if(config->isMappedTo("down", input)) + { + + }else if(config->isMappedTo("left", input)) + { + mCursor--; + if(mCursor < 0) + mCursor = 0; + + onCursorChanged(); + }else if(config->isMappedTo("right", input)) + { + mCursor++; + if(mText.length() == 0) + mCursor = 0; + if(mCursor > (int)mText.length() - 1) + mCursor = mText.length() - 1; + + onCursorChanged(); + } + + //consume all input when editing text + return true; + } + + return false; } void TextEditComponent::onTextChanged() @@ -73,25 +135,20 @@ void TextEditComponent::onTextChanged() std::string wrappedText = f->wrapText(mText, mSize.x()); mTextCache = std::unique_ptr(f->buildTextCache(wrappedText, 0, 0, 0x00000000 | getOpacity())); - - if(mAllowResize) - { - float y = f->sizeText(wrappedText).y(); - if(y == 0) - y = (float)f->getHeight(); - - setSize(mSize.x(), y); - } - - ComponentListComponent* cmp = dynamic_cast(getParent()); - if(cmp) - cmp->updateComponent(this); } -void TextEditComponent::setAllowResize(bool allow) +void TextEditComponent::onCursorChanged() { - mAllowResize = allow; - onTextChanged(); + std::shared_ptr font = getFont(); + Eigen::Vector2f textSize = font->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); //font->sizeWrappedText(mText.substr(0, mCursor), mSize.x()); + + if(mScrollOffset + mSize.y() < textSize.y() + font->getHeight()) //need to scroll down? + { + mScrollOffset = textSize.y() - mSize.y() + font->getHeight(); + }else if(mScrollOffset > textSize.y()) //need to scroll up? + { + mScrollOffset = textSize.y(); + } } void TextEditComponent::render(const Eigen::Affine3f& parentTrans) @@ -99,13 +156,29 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = getTransform() * parentTrans; renderChildren(trans); + Eigen::Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); + Eigen::Vector3f dimScaled = trans * Eigen::Vector3f(mSize.x(), mSize.y(), 0); + Eigen::Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); + Renderer::pushClipRect(clipPos, clipDim); + + trans.translate(Eigen::Vector3f(0, -mScrollOffset, 0)); + Renderer::setMatrix(trans); - + + std::shared_ptr f = getFont(); if(mTextCache != NULL) { - std::shared_ptr f = getFont(); f->renderTextCache(mTextCache.get()); } + + //draw cursor + if(mEditing) + { + Eigen::Vector2f cursorPos = f->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); + Renderer::drawRect(cursorPos.x(), cursorPos.y(), 3, f->getHeight(), 0x000000FF); + } + + Renderer::popClipRect(); } std::shared_ptr TextEditComponent::getFont() diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index dd35f4cd2..0c00bd4c9 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -12,6 +12,7 @@ public: TextEditComponent(Window* window); void textInput(const char* text) override; + bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; void onFocusGained() override; @@ -22,14 +23,16 @@ public: void setValue(const std::string& val) override; std::string getValue() const override; - void setAllowResize(bool allow); //Allow automatic resizing of height to accomodate more text. - private: void onTextChanged(); + void onCursorChanged(); std::string mText; bool mFocused; - bool mAllowResize; + + bool mEditing; + float mScrollOffset; + int mCursor; std::shared_ptr getFont(); From 8bd5966f8751d26b9f2bf1a879bd5704b8b8e3f2 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Sep 2013 16:35:44 -0500 Subject: [PATCH 020/386] Added single-line edit + view mode to TextEditComponent. Used automatically if component height <= font height. --- src/components/TextEditComponent.cpp | 56 +++++++++++++++++++++------- src/components/TextEditComponent.h | 4 +- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index dd31a833d..ce02801c6 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -7,7 +7,7 @@ TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), mBox(window, 0, 0, 0, 0), mFocused(false), - mScrollOffset(0.0f), mCursor(0), mEditing(false) + mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false) { addChild(&mBox); @@ -88,7 +88,9 @@ bool TextEditComponent::input(InputConfig* config, Input input) { if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_RETURN) { - textInput("\n"); + if(isMultiline()) + textInput("\n"); + return true; } @@ -116,8 +118,8 @@ bool TextEditComponent::input(InputConfig* config, Input input) mCursor++; if(mText.length() == 0) mCursor = 0; - if(mCursor > (int)mText.length() - 1) - mCursor = mText.length() - 1; + if(mCursor >= (int)mText.length()) + mCursor = mText.length(); onCursorChanged(); } @@ -133,21 +135,35 @@ void TextEditComponent::onTextChanged() { std::shared_ptr f = getFont(); - std::string wrappedText = f->wrapText(mText, mSize.x()); + std::string wrappedText = (isMultiline() ? f->wrapText(mText, mSize.x()) : mText); mTextCache = std::unique_ptr(f->buildTextCache(wrappedText, 0, 0, 0x00000000 | getOpacity())); } void TextEditComponent::onCursorChanged() { std::shared_ptr font = getFont(); - Eigen::Vector2f textSize = font->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); //font->sizeWrappedText(mText.substr(0, mCursor), mSize.x()); - if(mScrollOffset + mSize.y() < textSize.y() + font->getHeight()) //need to scroll down? + if(isMultiline()) { - mScrollOffset = textSize.y() - mSize.y() + font->getHeight(); - }else if(mScrollOffset > textSize.y()) //need to scroll up? - { - mScrollOffset = textSize.y(); + Eigen::Vector2f textSize = font->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); + + if(mScrollOffset.y() + mSize.y() < textSize.y() + font->getHeight()) //need to scroll down? + { + mScrollOffset[1] = textSize.y() - mSize.y() + font->getHeight(); + }else if(mScrollOffset.y() > textSize.y()) //need to scroll up? + { + mScrollOffset[1] = textSize.y(); + } + }else{ + Eigen::Vector2f cursorPos = font->sizeText(mText.substr(0, mCursor)); + + if(mScrollOffset.x() + mSize.x() < cursorPos.x()) + { + mScrollOffset[0] = cursorPos.x() - mSize.x(); + }else if(mScrollOffset.x() > cursorPos.x()) + { + mScrollOffset[0] = cursorPos.x(); + } } } @@ -161,7 +177,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); Renderer::pushClipRect(clipPos, clipDim); - trans.translate(Eigen::Vector3f(0, -mScrollOffset, 0)); + trans.translate(Eigen::Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0)); Renderer::setMatrix(trans); @@ -174,7 +190,15 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) //draw cursor if(mEditing) { - Eigen::Vector2f cursorPos = f->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); + Eigen::Vector2f cursorPos; + if(isMultiline()) + { + cursorPos = f->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); + }else{ + cursorPos = f->sizeText(mText.substr(0, mCursor)); + cursorPos[1] = 0; + } + Renderer::drawRect(cursorPos.x(), cursorPos.y(), 3, f->getHeight(), 0x000000FF); } @@ -185,3 +209,9 @@ std::shared_ptr TextEditComponent::getFont() { return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); } + +bool TextEditComponent::isMultiline() +{ + return (getSize().y() > (float)getFont()->getHeight()); +} + diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 0c00bd4c9..6ba3c67d4 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -27,11 +27,13 @@ private: void onTextChanged(); void onCursorChanged(); + bool isMultiline(); + std::string mText; bool mFocused; bool mEditing; - float mScrollOffset; + Eigen::Vector2f mScrollOffset; int mCursor; std::shared_ptr getFont(); From 376d746686e08ab6052e144a76c4217d0a55cfd9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Sep 2013 16:56:42 -0500 Subject: [PATCH 021/386] Fix newlines not initializing font vertices. --- src/Font.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Font.cpp b/src/Font.cpp index 8269c3672..5e200337a 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -502,6 +502,7 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of { y += (float)getHeight(); x = offsetX; + memset(&vert[i], 0, 6 * sizeof(float)); continue; } From 861a61cb3a1b700aeaf1ddb125ea665ff17a22fe Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 13 Sep 2013 14:01:39 -0500 Subject: [PATCH 022/386] Set *all* the vertex data to zero for newlines. --- src/Font.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Font.cpp b/src/Font.cpp index 5e200337a..57a5eaf64 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -502,7 +502,7 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of { y += (float)getHeight(); x = offsetX; - memset(&vert[i], 0, 6 * sizeof(float)); + memset(&vert[i], 0, 6 * sizeof(TextCache::Vertex)); continue; } From 74e8c40d6713fbf7d9cd3ee09bc61fc0145b9236 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 14 Sep 2013 10:58:34 -0500 Subject: [PATCH 023/386] Moved TextEditComponent to use NinePatchComponent. Enable key repeat while text editing. --- CMakeLists.txt | 6 +- data/ResourceUtil.cpp | 14 +- data/Resources.h | 14 +- data/converted/glow_off_vert_png.cpp | 290 ----------------- data/converted/glow_vert_png.cpp | 296 ------------------ ...w_off_hor_png.cpp => textbox_glow_png.cpp} | 95 +++++- .../{glow_hor_png.cpp => textbox_png.cpp} | 37 +-- data/resources/glow_off_vert.png | Bin 2821 -> 0 bytes data/resources/glow_vert.png | Bin 2889 -> 0 bytes data/resources/{glow_hor.png => textbox.png} | Bin 2884 -> 2894 bytes .../{glow_off_hor.png => textbox_glow.png} | Bin 2823 -> 3517 bytes src/InputManager.cpp | 2 +- src/components/NinePatchComponent.cpp | 31 +- src/components/NinePatchComponent.h | 6 + src/components/TextEditComponent.cpp | 24 +- src/components/TextEditComponent.h | 3 +- 16 files changed, 161 insertions(+), 657 deletions(-) delete mode 100644 data/converted/glow_off_vert_png.cpp delete mode 100644 data/converted/glow_vert_png.cpp rename data/converted/{glow_off_hor_png.cpp => textbox_glow_png.cpp} (77%) rename data/converted/{glow_hor_png.cpp => textbox_png.cpp} (93%) delete mode 100644 data/resources/glow_off_vert.png delete mode 100644 data/resources/glow_vert.png rename data/resources/{glow_hor.png => textbox.png} (92%) rename data/resources/{glow_off_hor.png => textbox_glow.png} (76%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4ab862fe..71906338b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -212,12 +212,10 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/bar_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/corner_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_hor_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_vert_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_off_hor_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/glow_off_vert_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_glow_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 1fb69cbe3..0fc679a8e 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 10; +const size_t res2hNrOfFiles = 8; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/bar.png", bar_png_size, bar_png_data}, {":/button.png", button_png_size, button_png_data}, @@ -10,10 +10,8 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, - {":/glow_hor.png", glow_hor_png_size, glow_hor_png_data}, - {":/glow_off_hor.png", glow_off_hor_png_size, glow_off_hor_png_data}, - {":/glow_off_vert.png", glow_off_vert_png_size, glow_off_vert_png_data}, - {":/glow_vert.png", glow_vert_png_size, glow_vert_png_data} + {":/textbox.png", textbox_png_size, textbox_png_data}, + {":/textbox_glow.png", textbox_glow_png_size, textbox_glow_png_data} }; res2hMapType::value_type mapTemp[] = { @@ -23,10 +21,8 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/ES_logo_16.png", res2hFiles[3]), std::make_pair(":/ES_logo_32.png", res2hFiles[4]), std::make_pair(":/frame.png", res2hFiles[5]), - std::make_pair(":/glow_hor.png", res2hFiles[6]), - std::make_pair(":/glow_off_hor.png", res2hFiles[7]), - std::make_pair(":/glow_off_vert.png", res2hFiles[8]), - std::make_pair(":/glow_vert.png", res2hFiles[9]) + std::make_pair(":/textbox.png", res2hFiles[6]), + std::make_pair(":/textbox_glow.png", res2hFiles[7]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index eaf81da7b..737619f54 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -23,17 +23,11 @@ extern const unsigned char ES_logo_32_png_data[]; extern const size_t frame_png_size; extern const unsigned char frame_png_data[]; -extern const size_t glow_hor_png_size; -extern const unsigned char glow_hor_png_data[]; +extern const size_t textbox_png_size; +extern const unsigned char textbox_png_data[]; -extern const size_t glow_off_hor_png_size; -extern const unsigned char glow_off_hor_png_data[]; - -extern const size_t glow_off_vert_png_size; -extern const unsigned char glow_off_vert_png_data[]; - -extern const size_t glow_vert_png_size; -extern const unsigned char glow_vert_png_data[]; +extern const size_t textbox_glow_png_size; +extern const unsigned char textbox_glow_png_data[]; struct Res2hEntry { const std::string relativeFileName; diff --git a/data/converted/glow_off_vert_png.cpp b/data/converted/glow_off_vert_png.cpp deleted file mode 100644 index 33668446e..000000000 --- a/data/converted/glow_off_vert_png.cpp +++ /dev/null @@ -1,290 +0,0 @@ -//this file was auto-generated from "glow_off_vert.png" by res2h - -#include "../Resources.h" - -const size_t glow_off_vert_png_size = 2821; -const unsigned char glow_off_vert_png_data[2821] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, - 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, - 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x20,0x49, - 0x44,0x41,0x54,0x78,0xda,0x62,0xfc,0xff,0xff,0x3f, - 0x03,0x2e,0xc0,0xc8,0xc8,0xf8,0x9f,0x89,0x81,0x00, - 0x18,0x1e,0x0a,0x00,0x00,0x00,0x00,0xff,0xff,0x03, - 0x00,0x02,0x48,0x04,0x0f,0x3d,0x1a,0xc2,0xf4,0x00, - 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, - 0x82 -}; diff --git a/data/converted/glow_vert_png.cpp b/data/converted/glow_vert_png.cpp deleted file mode 100644 index 7eaf7d714..000000000 --- a/data/converted/glow_vert_png.cpp +++ /dev/null @@ -1,296 +0,0 @@ -//this file was auto-generated from "glow_vert.png" by res2h - -#include "../Resources.h" - -const size_t glow_vert_png_size = 2889; -const unsigned char glow_vert_png_data[2889] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, - 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, - 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x64,0x49, - 0x44,0x41,0x54,0x78,0xda,0x6c,0xce,0xb1,0x0a,0xc2, - 0x30,0x00,0x04,0xd0,0x17,0x09,0x42,0x95,0x0e,0x2e, - 0x75,0x6c,0x3b,0xfa,0xff,0x7f,0xe1,0x5f,0x38,0xd6, - 0xc5,0x41,0x6c,0x41,0x0a,0xe9,0x92,0x42,0x09,0xb9, - 0xf5,0x1e,0xc7,0x85,0x94,0x92,0x22,0x0d,0x3a,0x74, - 0x21,0x84,0x67,0x2c,0xca,0x98,0xcb,0x11,0x03,0x9c, - 0x0a,0xd0,0x66,0x30,0xe0,0x51,0x03,0x17,0xdc,0x70, - 0x47,0x5f,0x03,0x11,0xe7,0xfc,0xe3,0x5a,0x03,0x2b, - 0xfe,0x58,0xf0,0xab,0x81,0x19,0x1f,0x4c,0x78,0xed, - 0x93,0xc7,0x7c,0xf1,0xde,0xe7,0x61,0x1b,0x00,0xbc, - 0x94,0x0e,0xc2,0x22,0xe1,0x7c,0x16,0x00,0x00,0x00, - 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/glow_off_hor_png.cpp b/data/converted/textbox_glow_png.cpp similarity index 77% rename from data/converted/glow_off_hor_png.cpp rename to data/converted/textbox_glow_png.cpp index a849daff9..9c5293671 100644 --- a/data/converted/glow_off_hor_png.cpp +++ b/data/converted/textbox_glow_png.cpp @@ -1,13 +1,13 @@ -//this file was auto-generated from "glow_off_hor.png" by res2h +//this file was auto-generated from "textbox_glow.png" by res2h #include "../Resources.h" -const size_t glow_off_hor_png_size = 2823; -const unsigned char glow_off_hor_png_data[2823] = { +const size_t textbox_glow_png_size = 3517; +const unsigned char textbox_glow_png_data[3517] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, - 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, - 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, @@ -280,11 +280,80 @@ const unsigned char glow_off_hor_png_data[2823] = { 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x22,0x49, - 0x44,0x41,0x54,0x78,0xda,0x62,0xfc,0xff,0xff,0x3f, - 0x03,0x3e,0xc0,0xc4,0x40,0x00,0x0c,0x09,0x05,0x8c, - 0x0c,0x0c,0x0c,0x78,0xfd,0x09,0x00,0x00,0x00,0xff, - 0xff,0x03,0x00,0x35,0x25,0x04,0x0b,0x6a,0x13,0x74, - 0xa7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae, - 0x42,0x60,0x82 + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x02,0xd8,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x99,0x5d,0x72,0xda, + 0x30,0x14,0x46,0xcf,0x87,0x6d,0x20,0x21,0xdd,0x47, + 0xbb,0x8a,0xae,0xa0,0xfb,0x7f,0xcf,0x16,0x9a,0x50, + 0x0c,0x36,0x5f,0x1f,0x24,0x61,0xe1,0xc9,0x4c,0x0c, + 0x88,0xa4,0x99,0x5a,0x33,0x77,0x6c,0xcc,0x20,0xee, + 0x91,0xee,0xaf,0x2c,0xdb,0x7c,0xe5,0xb1,0xe0,0x8b, + 0x8f,0x19,0x60,0x06,0x98,0x01,0x66,0x80,0x19,0xe0, + 0xff,0x06,0xa8,0xef,0xb0,0x20,0xb9,0x28,0xfb,0xce, + 0xc0,0x71,0x24,0xff,0x0c,0x40,0x15,0xe7,0xaa,0xe3, + 0x7d,0x92,0x31,0x40,0x9f,0x49,0x17,0xa5,0xff,0x4c, + 0x80,0x05,0xd0,0xbc,0x21,0xf5,0x68,0x17,0xf2,0xd5, + 0xef,0x80,0xc3,0x1b,0x72,0xfc,0x68,0x80,0x0a,0x58, + 0x02,0x2b,0x60,0x65,0x58,0x29,0x7c,0x4e,0x10,0xd5, + 0x1b,0x00,0x7d,0xa6,0xf0,0x1e,0x68,0xa3,0x2c,0xe2, + 0xe7,0xfe,0xa3,0x00,0xea,0xa8,0xf8,0x3a,0x89,0xc2, + 0x75,0x15,0xa5,0xc1,0xd4,0x88,0x2a,0xfb,0x4d,0x8f, + 0xe9,0x10,0x07,0x70,0x8b,0xd5,0xa2,0xd3,0x6e,0x25, + 0xd8,0x36,0xee,0xd0,0x5d,0x01,0xaa,0xa8,0xe4,0x03, + 0xf0,0x20,0xe9,0xf9,0x16,0x1b,0xb4,0xfd,0x7d,0xe4, + 0xf0,0xbe,0x64,0x27,0xea,0x2b,0x6c,0x7e,0x19,0x57, + 0xfd,0x41,0xd2,0xb3,0x6d,0xdd,0x02,0x20,0xc9,0xb6, + 0x7f,0x44,0xcd,0xad,0x60,0x6a,0xed,0x54,0x9f,0xb8, + 0x14,0xa0,0x09,0xab,0xef,0x35,0xe8,0xb1,0x60,0xf8, + 0xdd,0x30,0x28,0xdf,0x33,0x40,0x14,0x05,0xa8,0x06, + 0x00,0xad,0xa3,0x09,0x95,0x04,0xc8,0x43,0xeb,0xe4, + 0x10,0x5b,0x5f,0xe8,0x2f,0x4d,0xe6,0xbc,0xc5,0x76, + 0xc0,0xb0,0xd1,0x29,0xbc,0xfa,0x00,0xda,0xc7,0x48, + 0xd5,0x4f,0xb1,0xe9,0xa9,0xb6,0x9f,0x00,0x96,0x19, + 0x44,0x91,0xa1,0xb0,0x18,0x21,0x8a,0x59,0xcb,0x51, + 0x2e,0x29,0x06,0x50,0x65,0x31,0xbe,0x28,0x40,0x16, + 0x8e,0x57,0x88,0x06,0x9f,0xe5,0x91,0x82,0x00,0x3e, + 0xed,0x42,0xe3,0xb0,0x13,0xa5,0xc6,0x0a,0x58,0x46, + 0xc5,0x1b,0x74,0x96,0x1b,0x0a,0x02,0x88,0x05,0xb8, + 0x02,0x6a,0x95,0x2d,0x04,0x83,0xc9,0x9c,0x2b,0x3e, + 0x09,0xa0,0x9e,0x6e,0xa6,0x08,0xbc,0x00,0x25,0x88, + 0xaa,0x70,0x55,0x5c,0x65,0x4a,0x2f,0x86,0xff,0x2c, + 0xda,0x0f,0x48,0x21,0x5c,0x2b,0xde,0x17,0x0b,0x43, + 0x69,0x81,0x98,0xaa,0xf8,0xb5,0x0d,0x8d,0x41,0xce, + 0x52,0x7e,0xa9,0x30,0xe4,0x38,0x77,0x9a,0xd7,0xa5, + 0x01,0x3c,0x2a,0x89,0xfb,0x5b,0xeb,0xf8,0xd1,0xe8, + 0x86,0x39,0x9d,0xfe,0x63,0x12,0xc8,0x54,0x80,0x23, + 0xd0,0x7b,0xb8,0x76,0x97,0x56,0x8d,0xef,0x8c,0x03, + 0xd0,0x85,0x79,0xd5,0x73,0x5e,0x52,0x94,0x03,0x48, + 0xd9,0x52,0x43,0x3d,0x5f,0xca,0x09,0x5a,0x60,0xaf, + 0xa1,0x57,0xe8,0xee,0x02,0x30,0xa4,0x7a,0x5a,0x60, + 0x57,0x0e,0x40,0xbb,0x38,0x5f,0x9b,0x35,0x3c,0xc5, + 0x01,0x62,0xad,0xa2,0x7d,0x69,0x00,0xc3,0x36,0x03, + 0xd8,0x67,0xbb,0xf0,0x2e,0x40,0x7d,0xa1,0xa3,0xa5, + 0xd5,0x0f,0xd9,0xd8,0xfe,0x29,0xe9,0xa6,0x68,0x64, + 0xfb,0x17,0xf8,0x15,0x14,0x20,0x4c,0x1b,0xba,0xb6, + 0x69,0x3e,0xa6,0x0b,0x5f,0x70,0xa4,0x4e,0x6c,0x03, + 0x3c,0x19,0x9e,0x04,0xdf,0x30,0x4f,0x88,0x27,0x60, + 0x63,0xfc,0xa8,0x50,0x6e,0x2f,0x71,0xca,0xde,0xc9, + 0x04,0xbd,0x8f,0xe6,0xb2,0x05,0x5e,0x81,0x17,0xf0, + 0x0b,0xe8,0x77,0xb8,0xe7,0x25,0x3e,0xff,0x73,0x8f, + 0x7e,0x20,0x45,0x8b,0x05,0x50,0x19,0x16,0x4a,0x09, + 0x47,0x83,0x8f,0x28,0x28,0xb8,0xc2,0x34,0xc8,0x35, + 0x48,0xb1,0xd3,0xea,0x8c,0x0e,0x82,0x16,0xb3,0x43, + 0x09,0x42,0xaf,0x51,0xe9,0x6d,0x7c,0x9e,0xfc,0xe0, + 0x2e,0x2d,0xe5,0x31,0xda,0xe8,0xa0,0xfc,0xd0,0xc3, + 0x76,0xe0,0xd6,0x68,0x2d,0x58,0x86,0xba,0x46,0x55, + 0x4a,0xdf,0x59,0x14,0xdb,0x23,0x92,0xd3,0x6e,0xe3, + 0x6a,0x87,0x6b,0x78,0xbe,0xbf,0xe4,0x88,0xe5,0x9a, + 0x82,0xac,0xcf,0xb6,0x37,0x25,0xb7,0xce,0xc1,0xc1, + 0x77,0x4a,0xa7,0x12,0xa9,0xbe,0xf1,0xa9,0x30,0xe8, + 0x47,0x7e,0x94,0x02,0x41,0x2e,0xed,0xa5,0x09,0xf2, + 0xda,0x8a,0xb2,0x1b,0x9d,0xf5,0x74,0xca,0x1c,0xdc, + 0xd0,0x28,0x15,0x66,0x9a,0x74,0x2e,0xd4,0x5e,0x7b, + 0x2e,0xa4,0x1b,0xdf,0x52,0x4e,0x3f,0x99,0x33,0xc7, + 0xe8,0x2b,0x5d,0x6c,0x1b,0x8b,0x9c,0xcc,0xa9,0xd0, + 0x6b,0xd6,0x4f,0x3b,0x1b,0x55,0xe1,0xf7,0xc4,0x1f, + 0x7e,0x3a,0xad,0xf9,0x45,0xf7,0x0c,0x30,0x03,0xcc, + 0x00,0x33,0xc0,0x2d,0xe3,0xef,0x00,0x24,0x2b,0x53, + 0x56,0xac,0xd2,0x8e,0xc8,0x00,0x00,0x00,0x00,0x49, + 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; diff --git a/data/converted/glow_hor_png.cpp b/data/converted/textbox_png.cpp similarity index 93% rename from data/converted/glow_hor_png.cpp rename to data/converted/textbox_png.cpp index 56adce6fb..91444a5ee 100644 --- a/data/converted/glow_hor_png.cpp +++ b/data/converted/textbox_png.cpp @@ -1,13 +1,13 @@ -//this file was auto-generated from "glow_hor.png" by res2h +//this file was auto-generated from "textbox.png" by res2h #include "../Resources.h" -const size_t glow_hor_png_size = 2884; -const unsigned char glow_hor_png_data[2884] = { +const size_t textbox_png_size = 2894; +const unsigned char textbox_png_data[2894] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x08, - 0x00,0x00,0x00,0x08,0x08,0x06,0x00,0x00,0x00,0xc4, - 0x0f,0xbe,0x8b,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, @@ -280,17 +280,18 @@ const unsigned char glow_hor_png_data[2884] = { 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x5f,0x49, - 0x44,0x41,0x54,0x78,0xda,0x84,0xcf,0xb1,0x0a,0xc2, - 0x40,0x00,0x03,0xd0,0x77,0x72,0x08,0x5a,0x1c,0x5c, - 0xec,0xe8,0x39,0xfa,0xff,0x5f,0xe4,0xd8,0x2e,0x0e, - 0xd2,0x16,0x4a,0xe1,0xba,0x5c,0xc1,0xe9,0x2e,0x10, - 0x12,0x48,0x32,0x24,0xe4,0x9c,0xd5,0x70,0xd2,0x40, - 0xb3,0x10,0xff,0xf4,0x86,0x6b,0xf1,0x1b,0x66,0xfc, - 0x22,0x2e,0x78,0x14,0xde,0x71,0xc6,0x8a,0x2f,0xc6, - 0x58,0x82,0x17,0x12,0xfa,0x32,0x58,0x30,0xa0,0x3b, - 0x0a,0x09,0x6f,0x3c,0xd1,0x61,0xc2,0x07,0x02,0xaa, - 0x3f,0xf7,0x01,0x00,0x3d,0x79,0x0e,0xf7,0x63,0xad, - 0x98,0x43,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x69,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0xd9,0xc1,0x09,0x00, + 0x31,0x08,0x04,0xc0,0xec,0x91,0xfe,0x5b,0xde,0xeb, + 0x21,0x3e,0x42,0x60,0xb6,0x00,0x71,0x1e,0x82,0x62, + 0xda,0xae,0x97,0xf3,0xad,0xc7,0x03,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xf0,0x70,0xf6,0xb4,0x40, + 0x92,0xd1,0x3e,0xde,0x36,0xd7,0x00,0x49,0x3a,0x6d, + 0x60,0x5a,0xc3,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9c,0xaf,0xe3,0xd3,0xff,0xc0, + 0xed,0x83,0x26,0x1e,0x1c,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xa7,0xf9,0x01,0x00,0x00, + 0xff,0xff,0x03,0x00,0x53,0xb1,0x19,0x59,0xd2,0x78, + 0x50,0x32,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, 0xae,0x42,0x60,0x82 }; diff --git a/data/resources/glow_off_vert.png b/data/resources/glow_off_vert.png deleted file mode 100644 index c21e801e6adee4cbef591e17bd0ffa991efb0d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2821 zcmV+g3;OhlP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0000WNklKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0001FNkl`u~67UpUsq zL2N+^>5@VTx%D2$g_M#a4LWoogl8ic1}#OGr-TCmrII^fq{Y7)59eQNE?7K2OE$KXZqQ`QE@$2U8bjtV@SoVH#ZM* zG8l5O9C$PFU-Z4#igr#3+ZYPvnv!mnc0^3EGr-TCmrII^fq{Y7)59eQNOOQN2OE$)!oRP3qvCq5l6X%S$B>F!E$26K z9dck`zEEDo5hWAz=7r_2|M5?5=`0U-|~l_ztq7F=@JEb#wJTlPok zv_DFE6(aWvk9FxEi)a!T`ehVhu)vy&GvDT7;vsgXRrcQ*8Eh;0z9+Ap;S98s!PC{x JWt~$(69DolIqX6ot_&SNgbrq$- z)QBqkO^@ji2XKqkqSJ0A*f#FaT>+}7^>G>8LwEcbL@V;ax>MLx18CU&5(z9*d z0wBq@e?-l#U~27DpSTpD39Iil=&@k<-7qNMGe8sts0IM7qY0G+$V2Po5Pw@==r2v? zyv26Fu+b^J`T*L;NYziV>8ZA#0G1g-f>=hB=-7V-m9Se0b;G9 zeQ5y0HUrpayYMbReW9bJ)eqU&{we9EXk_~r_!Sf&OdGnkX+EY4Uw?3P#G3V2}gsEC@8qX zG{`kbvD4~|4uTf5LkU8!QR!`bp8Vi0E#)!V=%D=2!*<}-Xf0TVx<*w>-&qvfBa+i@ z<7$U%c)q{nh~=7staHz{Hzl{u!NGS*rxK~Y@u@KAM}Cw7K`!m33G&*CvKyWCbjlpu z&?psVnshGIUVAR28{bk+KbbSf=qp`p8;hLGsnBcIPdgh`;rGNJembrBMfVIa1Iz$3 cz%AqN03<6@R;<#F$N&HU07*qoM6N<$g2e=K2mk;8 delta 99 zcmdlh-7cos8Q|y6%O%Cdz`(%k>ERLtq&YyCgAGU?;osN2QE?rY1%r~Oi(^Q|t)xHy w|JyU$9XR5^z{APf!^6W<@s|^*@c(~i22)iQ?kwSwmdKI;Vst0H~K4;s5{u diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 6ab7e4e58..063742222 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -164,7 +164,7 @@ bool InputManager::parseEvent(const SDL_Event& ev) return true; } - if(ev.key.repeat) + if(ev.key.repeat && !SDL_IsTextInputActive()) return false; if(ev.key.keysym.sym == SDLK_F4) diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index f4ff0eba4..3828924f8 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -5,12 +5,18 @@ NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), mEdgeColor(edgeColor), mCenterColor(centerColor), - mTexture(TextureResource::get(*window->getResourceManager(), path)), + mPath(path), mVertices(NULL), mColors(NULL) { buildVertices(); } +void NinePatchComponent::updateColors() +{ + Renderer::buildGLColorArray(mColors, mEdgeColor, 6 * 9); + Renderer::buildGLColorArray(&mColors[4 * 6 * 4], mCenterColor, 6); +} + void NinePatchComponent::buildVertices() { if(mVertices != NULL) @@ -19,6 +25,8 @@ void NinePatchComponent::buildVertices() if(mColors != NULL) delete[] mColors; + mTexture = TextureResource::get(*mWindow->getResourceManager(), mPath); + if(mTexture->getSize() == Eigen::Vector2i::Zero()) { mVertices = NULL; @@ -29,8 +37,7 @@ void NinePatchComponent::buildVertices() mVertices = new Vertex[6 * 9]; mColors = new GLubyte[6 * 9 * 4]; - Renderer::buildGLColorArray(mColors, mEdgeColor, 6 * 9); - Renderer::buildGLColorArray(&mColors[4 * 6 * 4], mCenterColor, 6); + updateColors(); const Eigen::Vector2f ts = mTexture->getSize().cast(); @@ -163,3 +170,21 @@ void NinePatchComponent::fitTo(Eigen::Vector2f size) setSize(size + Eigen::Vector2f(getCornerSize().x() * 2, getCornerSize().y() * 2)); setPosition(-getCornerSize().x(), -getCornerSize().y()); } + +void NinePatchComponent::setImagePath(const std::string& path) +{ + mPath = path; + buildVertices(); +} + +void NinePatchComponent::setEdgeColor(unsigned int edgeColor) +{ + mEdgeColor = edgeColor; + updateColors(); +} + +void NinePatchComponent::setCenterColor(unsigned int centerColor) +{ + mCenterColor = centerColor; + updateColors(); +} diff --git a/src/components/NinePatchComponent.h b/src/components/NinePatchComponent.h index 102d9c374..41fa87dee 100644 --- a/src/components/NinePatchComponent.h +++ b/src/components/NinePatchComponent.h @@ -14,10 +14,15 @@ public: void fitTo(Eigen::Vector2f size); + void setImagePath(const std::string& path); + void setEdgeColor(unsigned int edgeColor); + void setCenterColor(unsigned int centerColor); + private: Eigen::Vector2f getCornerSize() const; void buildVertices(); + void updateColors(); struct Vertex { @@ -28,6 +33,7 @@ private: Vertex* mVertices; GLubyte* mColors; + std::string mPath; unsigned int mEdgeColor; unsigned int mCenterColor; std::shared_ptr mTexture; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index ce02801c6..7574d2a93 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -6,7 +6,7 @@ #include "ComponentListComponent.h" TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, 0, 0, 0, 0), mFocused(false), + mBox(window, ":/textbox.png"), mFocused(false), mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false) { addChild(&mBox); @@ -18,27 +18,25 @@ TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), void TextEditComponent::onFocusGained() { - mBox.setHorizontalImage(":/glow_hor.png"); - mBox.setVerticalImage(":/glow_vert.png"); - mBox.setBorderColor(0x51CCFF00 | getOpacity()); - + mBox.setImagePath(":/textbox_glow.png"); + mBox.setEdgeColor(0x51CCFF00 | getOpacity()); + SDL_StartTextInput(); mFocused = true; } void TextEditComponent::onFocusLost() { - mBox.setHorizontalImage(":/glow_off_hor.png"); - mBox.setVerticalImage(":/glow_off_vert.png"); - mBox.setBorderColor(0xFFFFFF00 | getOpacity()); - + mBox.setImagePath(":/textbox.png"); + mBox.setEdgeColor(0xFFFFFF00 | getOpacity()); + SDL_StopTextInput(); mFocused = false; } void TextEditComponent::onSizeChanged() { - mBox.setSize(mSize); + mBox.fitTo(getSize()); } void TextEditComponent::setValue(const std::string& val) @@ -90,11 +88,13 @@ bool TextEditComponent::input(InputConfig* config, Input input) { if(isMultiline()) textInput("\n"); + else + mEditing = false; return true; } - if(config->isMappedTo("b", input)) + if((config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_ESCAPE) || (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("b", input))) { mEditing = false; return true; @@ -199,7 +199,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) cursorPos[1] = 0; } - Renderer::drawRect(cursorPos.x(), cursorPos.y(), 3, f->getHeight(), 0x000000FF); + Renderer::drawRect((int)cursorPos.x(), (int)cursorPos.y(), 3, f->getHeight(), 0x000000FF); } Renderer::popClipRect(); diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 6ba3c67d4..24d65e063 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -2,6 +2,7 @@ #include "../GuiComponent.h" #include "GuiBox.h" +#include "NinePatchComponent.h" class Font; class TextCache; @@ -38,7 +39,7 @@ private: std::shared_ptr getFont(); - GuiBox mBox; + NinePatchComponent mBox; std::unique_ptr mTextCache; }; From b0d156d6bd39e6acd128683fe18f6ad3218edab0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 14 Sep 2013 11:14:21 -0500 Subject: [PATCH 024/386] Move GuiSettingsMenu to use NinePatch. --- CMakeLists.txt | 2 - data/ResourceUtil.cpp | 18 +- data/Resources.h | 6 - data/converted/bar_png.cpp | 290 ------------------------- data/converted/corner_png.cpp | 302 -------------------------- data/resources/bar.png | Bin 2825 -> 0 bytes data/resources/corner.png | Bin 2946 -> 0 bytes src/components/GuiSettingsMenu.cpp | 9 +- src/components/GuiSettingsMenu.h | 4 +- src/components/NinePatchComponent.cpp | 8 +- src/components/NinePatchComponent.h | 2 +- 11 files changed, 18 insertions(+), 623 deletions(-) delete mode 100644 data/converted/bar_png.cpp delete mode 100644 data/converted/corner_png.cpp delete mode 100644 data/resources/bar.png delete mode 100644 data/resources/corner.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 71906338b..d285202d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,8 +210,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/ResourceUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_16_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/bar_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/corner_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 0fc679a8e..444074814 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,11 +2,9 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 8; +const size_t res2hNrOfFiles = 6; const Res2hEntry res2hFiles[res2hNrOfFiles] = { - {":/bar.png", bar_png_size, bar_png_data}, {":/button.png", button_png_size, button_png_data}, - {":/corner.png", corner_png_size, corner_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, @@ -15,14 +13,12 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { }; res2hMapType::value_type mapTemp[] = { - std::make_pair(":/bar.png", res2hFiles[0]), - std::make_pair(":/button.png", res2hFiles[1]), - std::make_pair(":/corner.png", res2hFiles[2]), - std::make_pair(":/ES_logo_16.png", res2hFiles[3]), - std::make_pair(":/ES_logo_32.png", res2hFiles[4]), - std::make_pair(":/frame.png", res2hFiles[5]), - std::make_pair(":/textbox.png", res2hFiles[6]), - std::make_pair(":/textbox_glow.png", res2hFiles[7]) + std::make_pair(":/button.png", res2hFiles[0]), + std::make_pair(":/ES_logo_16.png", res2hFiles[1]), + std::make_pair(":/ES_logo_32.png", res2hFiles[2]), + std::make_pair(":/frame.png", res2hFiles[3]), + std::make_pair(":/textbox.png", res2hFiles[4]), + std::make_pair(":/textbox_glow.png", res2hFiles[5]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 737619f54..000c14895 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -5,15 +5,9 @@ #include #include -extern const size_t bar_png_size; -extern const unsigned char bar_png_data[]; - extern const size_t button_png_size; extern const unsigned char button_png_data[]; -extern const size_t corner_png_size; -extern const unsigned char corner_png_data[]; - extern const size_t ES_logo_16_png_size; extern const unsigned char ES_logo_16_png_data[]; diff --git a/data/converted/bar_png.cpp b/data/converted/bar_png.cpp deleted file mode 100644 index 2ccc94d0a..000000000 --- a/data/converted/bar_png.cpp +++ /dev/null @@ -1,290 +0,0 @@ -//this file was auto-generated from "bar.png" by res2h - -#include "../Resources.h" - -const size_t bar_png_size = 2825; -const unsigned char bar_png_data[2825] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x10, - 0x00,0x00,0x00,0x10,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xf3,0xff,0x61,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x24,0x49, - 0x44,0x41,0x54,0x78,0xda,0x62,0xfc,0xff,0xff,0xff, - 0x7f,0x06,0x0a,0x00,0x13,0x03,0x85,0x60,0xd4,0x80, - 0x51,0x03,0x46,0x0d,0x18,0x2c,0x06,0x00,0x00,0x00, - 0x00,0xff,0xff,0x03,0x00,0x6b,0xca,0x04,0x1c,0xc4, - 0xc8,0x59,0x18,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/corner_png.cpp b/data/converted/corner_png.cpp deleted file mode 100644 index 3ae6f5db2..000000000 --- a/data/converted/corner_png.cpp +++ /dev/null @@ -1,302 +0,0 @@ -//this file was auto-generated from "corner.png" by res2h - -#include "../Resources.h" - -const size_t corner_png_size = 2946; -const unsigned char corner_png_data[2946] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x10, - 0x00,0x00,0x00,0x10,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xf3,0xff,0x61,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x9d,0x49, - 0x44,0x41,0x54,0x78,0xda,0xa4,0x90,0x31,0x0a,0xc2, - 0x40,0x10,0x00,0x27,0x49,0x15,0x08,0x04,0xd2,0x5a, - 0x59,0x05,0xac,0x7c,0x80,0x20,0xa4,0xca,0x7b,0x04, - 0xc1,0x4f,0xf8,0x12,0x1f,0xe0,0x1b,0xfc,0x81,0x60, - 0x6b,0x65,0xe5,0x0f,0xc6,0xea,0x20,0x48,0x8c,0xc9, - 0xdd,0xc0,0xc2,0x35,0x33,0xdc,0x6e,0xa6,0xb2,0x80, - 0x3d,0xd0,0x03,0x3b,0xa0,0x04,0x36,0xa8,0xff,0xa6, - 0x56,0xcf,0xea,0xcb,0x11,0xa6,0xc4,0x42,0x3d,0xa8, - 0x6f,0x27,0xf8,0x25,0x37,0xea,0xd5,0x19,0x8c,0xc9, - 0x6b,0xf5,0xe1,0x4c,0xb2,0xaf,0x23,0xd6,0xc0,0x0d, - 0x68,0xe7,0x5e,0x35,0x1f,0xbc,0x0b,0xe0,0xb2,0x44, - 0x06,0x18,0x7e,0xfd,0x64,0x04,0x61,0x85,0x15,0x70, - 0x07,0x2a,0x16,0x12,0x56,0x38,0xc6,0xc8,0x00,0x99, - 0x5a,0x02,0x4f,0xa0,0x89,0x09,0xe4,0x40,0x17,0x2b, - 0x87,0x40,0x4f,0x02,0x39,0xb0,0x4d,0x0d,0xb4,0xa9, - 0x81,0x2a,0x25,0xf0,0x19,0x00,0x11,0x68,0x32,0x6a, - 0xb1,0xe9,0x64,0xd5,0x00,0x00,0x00,0x00,0x49,0x45, - 0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/resources/bar.png b/data/resources/bar.png deleted file mode 100644 index a1a3ea86e508b24c409a7e96ba9d18bd0298daf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2825 zcmV+k3-KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0000aNkl6~00000NkvXXu0mjf4{KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0001;NklsNQ}wdz``{%+-|0_fIZLyJD>zMsQ;!`&+5w&ro=)$sBb6u zB{%BT8H~wm_2EpiuOrsL4QS_HH6OeS;Ic#p7=Ha^1Yw00a0e`0I$N-sI0#Bfc s3FJT*D~CW&0y(fv4Ya9&Dkbn401;?1YO(2L)c^nh07*qoM6N<$f@0Qhn*aa+ diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index 7e1102f65..67f30b2ae 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -5,7 +5,7 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mList(window, Eigen::Vector2i(2, 4)), - mBox(mWindow, 0, 0, 0, 0), + mBox(mWindow, ":/frame.png", 0x444444FF), mDrawFramerateSwitch(window), mVolumeSlider(window, 0, 100, 1), mDisableSoundsSwitch(window, false), @@ -58,12 +58,7 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); //set up borders/background - mBox.setPosition(mList.getPosition()); - mBox.setSize(mList.getSize()); - mBox.setCornerImage(":/corner.png"); - mBox.setVerticalImage(":/bar.png"); - mBox.setHorizontalImage(":/bar.png"); - mBox.setBorderColor(0x333333FF); + mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(8, 8)); } GuiSettingsMenu::~GuiSettingsMenu() diff --git a/src/components/GuiSettingsMenu.h b/src/components/GuiSettingsMenu.h index 48ab6be11..f15fb965b 100644 --- a/src/components/GuiSettingsMenu.h +++ b/src/components/GuiSettingsMenu.h @@ -7,7 +7,7 @@ #include "SwitchComponent.h" #include "SliderComponent.h" #include "TextComponent.h" -#include "GuiBox.h" +#include "NinePatchComponent.h" class GuiSettingsMenu : public GuiComponent { @@ -23,7 +23,7 @@ private: ComponentListComponent mList; - GuiBox mBox; + NinePatchComponent mBox; SwitchComponent mDrawFramerateSwitch; SliderComponent mVolumeSlider; diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index 3828924f8..0557ab72b 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -165,10 +165,14 @@ Eigen::Vector2f NinePatchComponent::getCornerSize() const return Eigen::Vector2f(16, 16); } -void NinePatchComponent::fitTo(Eigen::Vector2f size) +void NinePatchComponent::fitTo(Eigen::Vector2f size, Eigen::Vector3f position, Eigen::Vector2f padding) { + size += padding; + position[0] -= padding.x() / 2; + position[1] -= padding.y() / 2; + setSize(size + Eigen::Vector2f(getCornerSize().x() * 2, getCornerSize().y() * 2)); - setPosition(-getCornerSize().x(), -getCornerSize().y()); + setPosition(-getCornerSize().x() + position.x(), -getCornerSize().y() + position.y()); } void NinePatchComponent::setImagePath(const std::string& path) diff --git a/src/components/NinePatchComponent.h b/src/components/NinePatchComponent.h index 41fa87dee..e3281b20b 100644 --- a/src/components/NinePatchComponent.h +++ b/src/components/NinePatchComponent.h @@ -12,7 +12,7 @@ public: void onSizeChanged() override; - void fitTo(Eigen::Vector2f size); + void fitTo(Eigen::Vector2f size, Eigen::Vector3f position = Eigen::Vector3f::Zero(), Eigen::Vector2f padding = Eigen::Vector2f::Zero()); void setImagePath(const std::string& path); void setEdgeColor(unsigned int edgeColor); From d7a6cae4ce71e1d2b903b87289ffdf5abd7821fa Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 14 Sep 2013 12:32:21 -0500 Subject: [PATCH 025/386] Moved the fast select GUI to nine patches. Luckily, no one ever used it anyway. --- THEMES.md | 30 +++++++++++++-------------- src/InputManager.cpp | 2 +- src/components/GuiFastSelect.cpp | 27 ++++++++++++++++-------- src/components/GuiFastSelect.h | 14 ++++++------- src/components/NinePatchComponent.cpp | 2 +- src/components/ThemeComponent.cpp | 21 ++----------------- src/components/ThemeComponent.h | 4 ---- 7 files changed, 43 insertions(+), 57 deletions(-) diff --git a/THEMES.md b/THEMES.md index 12af1e548..c908228c0 100644 --- a/THEMES.md +++ b/THEMES.md @@ -63,11 +63,13 @@ If EmulationStation is running in "basic" mode, it will try to use ` Components ========== + A theme is made up of components, which have various types. At the moment, the only type is `image`. Components are rendered in the order they are defined - that means you'll want to define the background first, a header image second, etc. The "image" component ===================== + Used to display an image. `` - path to the image file. Most common file types are supported, and . and ~ are properly expanded. @@ -83,6 +85,7 @@ Used to display an image. Display tags ============ + Display tags define some "meta" display attributes about your theme. Display tags must be at the root of the `` tree - for example, they can't be inside a component tag. They are not required. @@ -124,23 +127,11 @@ Display tags define some "meta" display attributes about your theme. Display tag **Fast Select box attributes:** -`` - the hex color to use for the letter display on the Fast Select box. +`` - the hex color to use for the letter display on the fast select box. -`` - path to a background image file. ~ and . are expanded. +`` - the path to a "nine patch" image to use for the "background" of the fast select box. See the "Nine Patches" section for more info. -`` - if present, the background will be tiled instead of stretched. - -`` - path to the "left" border image file. It will be flipped for the right border. ~ and . are expanded. - -`` - if present, the horizontal image will be tiled instead of stretched downwards. - -`` - path to the "top" border image file. It will be flipped for the bottom border. ~ and . are expanded. - -`` - if present, the vertical image will be tiled instead of stretched to the right. - -`` - path to the "top left corner" image file. It will be flipped for the top right, bottom right, and bottom left corners. ~ and . are expanded. - -There is also a `` font tag (see the Fonts section for more info). +`` - font definition to use for the fast select letter. See the "Fonts" section for more info. Fonts @@ -157,7 +148,7 @@ Fonts are defined like so: You can leave off any tags you don't want to use, and they'll use the default. Size is defined as a percentage of the screen height. "." and "~" are expanded for paths. -NOTE: If your font size is too big, it'll overrun the maximum texture size. +NOTE: If your font size is too big, it'll overrun the maximum OpenGL texture size. ES will attempt to rasterize it in progressively smaller sizes until one fits, then upscale it. **Font tags:** @@ -167,6 +158,7 @@ NOTE: If your font size is too big, it'll overrun the maximum texture size. `` - font to use for the fast select letter. + Audio ===== @@ -181,6 +173,12 @@ Themes can also define menu sounds. These tags go in the root of the `` t `` - path to the sound to play when the user opens a menu (either the "main menu" or the fast select menu). +Nine Patches +============ + +EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). + + List of variables ================= diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 063742222..6ab7e4e58 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -164,7 +164,7 @@ bool InputManager::parseEvent(const SDL_Event& ev) return true; } - if(ev.key.repeat && !SDL_IsTextInputActive()) + if(ev.key.repeat) return false; if(ev.key.keysym.sym == SDLK_F4) diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index ed6d7e9bd..5adaec2b9 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -3,12 +3,14 @@ #include #include "GuiGameList.h" +#define DEFAULT_FS_IMAGE ":/frame.png" + const std::string GuiFastSelect::LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const int GuiFastSelect::SCROLLSPEED = 100; const int GuiFastSelect::SCROLLDELAY = 507; GuiFastSelect::GuiFastSelect(Window* window, GuiGameList* parent, TextListComponent* list, char startLetter, ThemeComponent * theme) - : GuiComponent(window), mParent(parent), mList(list), mTheme(theme) + : GuiComponent(window), mParent(parent), mList(list), mTheme(theme), mBox(mWindow, "") { mLetterID = LETTERS.find(toupper(startLetter)); if(mLetterID == std::string::npos) @@ -22,27 +24,34 @@ GuiFastSelect::GuiFastSelect(Window* window, GuiGameList* parent, TextListCompon mScrollOffset = 0; unsigned int sw = Renderer::getScreenWidth(), sh = Renderer::getScreenHeight(); - mBox = new GuiBox(window, sw * 0.2f, sh * 0.2f, sw * 0.6f, sh * 0.6f); - mBox->setData(mTheme->getBoxData()); + + + if(theme->getString("fastSelectFrame").empty()) + { + mBox.setImagePath(DEFAULT_FS_IMAGE); + //mBox.setEdgeColor(0x0096ffFF); + mBox.setEdgeColor(0x005493FF); + mBox.setCenterColor(0x5e5e5eFF); + }else{ + mBox.setImagePath(theme->getString("fastSelectFrame")); + } + + mBox.setPosition(sw * 0.2f, sh * 0.2f); + mBox.setSize(sw * 0.6f, sh * 0.6f); } GuiFastSelect::~GuiFastSelect() { mParent->updateDetailData(); - delete mBox; } void GuiFastSelect::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::setMatrix(trans); unsigned int sw = Renderer::getScreenWidth(), sh = Renderer::getScreenHeight(); - if(!mBox->hasBackground()) - Renderer::drawRect((int)(sw * 0.3f), (int)(sh * 0.3f), (int)(sw * 0.4f), (int)(sh * 0.4f), 0x000FF0AA); - - mBox->render(trans); + mBox.render(trans); Renderer::setMatrix(trans); std::shared_ptr letterFont = mTheme->getFastSelectFont(); diff --git a/src/components/GuiFastSelect.h b/src/components/GuiFastSelect.h index a7bbd609f..b2ee4befc 100644 --- a/src/components/GuiFastSelect.h +++ b/src/components/GuiFastSelect.h @@ -7,14 +7,14 @@ #include "../Sound.h" #include "ThemeComponent.h" #include "TextListComponent.h" -#include "GuiBox.h" +#include "NinePatchComponent.h" class GuiGameList; class GuiFastSelect : public GuiComponent { public: - GuiFastSelect(Window* window, GuiGameList* parent, TextListComponent* list, char startLetter, ThemeComponent * theme); + GuiFastSelect(Window* window, GuiGameList* parent, TextListComponent* list, char startLetter, ThemeComponent* theme); ~GuiFastSelect(); bool input(InputConfig* config, Input input) override; @@ -30,19 +30,19 @@ private: void scroll(); void setLetterID(int id); + GuiGameList* mParent; TextListComponent* mList; + ThemeComponent * mTheme; + NinePatchComponent mBox; size_t mLetterID; - GuiGameList* mParent; - - GuiBox* mBox; - int mTextColor; + + unsigned int mTextColor; int mScrollTimer, mScrollOffset; bool mScrolling; std::shared_ptr mScrollSound; - ThemeComponent * mTheme; }; #endif diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index 0557ab72b..d5c9f57cf 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -124,7 +124,7 @@ void NinePatchComponent::buildVertices() void NinePatchComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - if(mTexture) + if(mTexture && mVertices != NULL) { Renderer::setMatrix(trans); diff --git a/src/components/ThemeComponent.cpp b/src/components/ThemeComponent.cpp index 3130a2549..7d5638d99 100644 --- a/src/components/ThemeComponent.cpp +++ b/src/components/ThemeComponent.cpp @@ -33,8 +33,6 @@ std::string ThemeComponent::getString(std::string name) return mStringMap[name]; } -GuiBoxData ThemeComponent::getBoxData() { return mBoxData; } - std::shared_ptr ThemeComponent::getListFont() { if(mListFont) @@ -108,14 +106,7 @@ void ThemeComponent::setDefaults() mSoundMap["menuOpen"]->loadFile(""); mStringMap["imageNotFoundPath"] = ""; - - mBoxData.backgroundPath = ""; - mBoxData.backgroundTiled = false; - mBoxData.horizontalPath = ""; - mBoxData.horizontalTiled = false; - mBoxData.verticalPath = ""; - mBoxData.verticalTiled = false; - mBoxData.cornerPath = ""; + mStringMap["fastSelectFrame"] = ""; mListFont.reset(); mDescFont.reset(); @@ -189,15 +180,6 @@ void ThemeComponent::readXML(std::string path, bool detailed) mBoolMap["hideHeader"] = root.child("hideHeader") != 0; mBoolMap["hideDividers"] = root.child("hideDividers") != 0; - //GuiBox theming data - mBoxData.backgroundPath = expandPath(root.child("boxBackground").text().get()); - mBoxData.backgroundTiled = root.child("boxBackgroundTiled") != 0; - mBoxData.horizontalPath = expandPath(root.child("boxHorizontal").text().get()); - mBoxData.horizontalTiled = root.child("boxHorizontalTiled") != 0; - mBoxData.verticalPath = expandPath(root.child("boxVertical").text().get()); - mBoxData.verticalTiled = root.child("boxVerticalTiled") != 0; - mBoxData.cornerPath = expandPath(root.child("boxCorner").text().get()); - //list stuff mBoolMap["listCentered"] = !root.child("listLeftAlign"); mFloatMap["listOffsetX"] = strToFloat(root.child("listOffsetX").text().get(), mFloatMap["listOffsetX"]); @@ -221,6 +203,7 @@ void ThemeComponent::readXML(std::string path, bool detailed) mFloatMap["gameImageOriginY"] = resolveExp(artOriginY, mFloatMap["gameImageOriginY"]); mStringMap["imageNotFoundPath"] = expandPath(root.child("gameImageNotFound").text().get()); + mStringMap["fastSelectFrame"] = expandPath(root.child("fastSelectFrame").text().get()); //sounds mSoundMap["menuScroll"]->loadFile(expandPath(root.child("menuScrollSound").text().get())); diff --git a/src/components/ThemeComponent.h b/src/components/ThemeComponent.h index e5e9c8ab6..a5da1d25a 100644 --- a/src/components/ThemeComponent.h +++ b/src/components/ThemeComponent.h @@ -18,8 +18,6 @@ public: void readXML(std::string path, bool detailed); - GuiBoxData getBoxData(); - unsigned int getColor(std::string name); bool getBool(std::string name); float getFloat(std::string name); @@ -52,8 +50,6 @@ private: std::map> mSoundMap; std::map mStringMap; - GuiBoxData mBoxData; - std::shared_ptr mListFont; std::shared_ptr mDescFont; std::shared_ptr mFastSelectFont; From 8e12ff9506bb8c86b71e23c2ea4b7c9c0a712bec Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 14 Sep 2013 12:51:13 -0500 Subject: [PATCH 026/386] Completely removed GuiBox. --- CMakeLists.txt | 2 - src/components/ComponentListComponent.h | 2 +- src/components/GuiBox.cpp | 136 ------------------------ src/components/GuiBox.h | 46 -------- src/components/NinePatchComponent.cpp | 3 +- src/components/TextEditComponent.h | 1 - src/components/ThemeComponent.h | 1 - 7 files changed, 3 insertions(+), 188 deletions(-) delete mode 100644 src/components/GuiBox.cpp delete mode 100644 src/components/GuiBox.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d285202d7..0b51fffc6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,7 +148,6 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ThemeComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiBox.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h @@ -195,7 +194,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ThemeComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentListComponent.h index 1f79d20bb..0db561084 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentListComponent.h @@ -117,7 +117,7 @@ private: //clip rect to our size //render a "selected" effect behind component with focus somehow // an edge filter would be cool, but we can't really do that without shader support -// a transparent rect will work for now, but it's kind of ugly...maybe a GuiBox +// a transparent rect will work for now, but it's kind of ugly... //glTranslatef by our render offset // doesn't handle getGlobalOffset for our components...would need parenting for that diff --git a/src/components/GuiBox.cpp b/src/components/GuiBox.cpp deleted file mode 100644 index 010d204a6..000000000 --- a/src/components/GuiBox.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include "GuiBox.h" - -GuiBox::GuiBox(Window* window, float offsetX, float offsetY, float width, float height) : GuiComponent(window), mBackgroundImage(window), - mHorizontalImage(window), mVerticalImage(window), mCornerImage(window) -{ - setPosition(offsetX, offsetY); - setSize(width, height); -} - -void GuiBox::setData(GuiBoxData data) -{ - setBackgroundImage(data.backgroundPath, data.backgroundTiled); - setHorizontalImage(data.horizontalPath, data.horizontalTiled); - setVerticalImage(data.verticalPath, data.verticalTiled); - setCornerImage(data.cornerPath); -} - -void GuiBox::setHorizontalImage(std::string path, bool tiled) -{ - mHorizontalImage.setTiling(tiled); - mHorizontalImage.setOrigin(0, 0); - - mHorizontalImage.setImage(path); - mHorizontalImage.setResize(mSize.x(), getHorizontalBorderWidth(), true); -} - -void GuiBox::setVerticalImage(std::string path, bool tiled) -{ - mVerticalImage.setTiling(tiled); - mVerticalImage.setOrigin(0, 0); - - mVerticalImage.setImage(path); - mVerticalImage.setResize(getVerticalBorderWidth(), mSize.y(), true); -} - -void GuiBox::setBackgroundImage(std::string path, bool tiled) -{ - mBackgroundImage.setOrigin(0, 0); - mBackgroundImage.setResize(mSize.x(), mSize.y(), true); - mBackgroundImage.setTiling(tiled); - mBackgroundImage.setPosition(0, 0); - - mBackgroundImage.setImage(path); -} - -void GuiBox::setCornerImage(std::string path) -{ - mCornerImage.setOrigin(0, 0); - mCornerImage.setResize(getHorizontalBorderWidth(), getVerticalBorderWidth(), true); - - mCornerImage.setImage(path); -} - -void GuiBox::setBackgroundColor(unsigned int color) -{ - mBackgroundImage.setColorShift(color); -} - -void GuiBox::setBorderColor(unsigned int color) -{ - mHorizontalImage.setColorShift(color); - mVerticalImage.setColorShift(color); - mCornerImage.setColorShift(color); -} - -void GuiBox::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - - mBackgroundImage.render(trans); - - //left border - mVerticalImage.setPosition(-getVerticalBorderWidth(), 0); - mVerticalImage.setFlipX(false); - mVerticalImage.render(trans); - - //right border - mVerticalImage.setPosition(mSize.x(), 0); - mVerticalImage.setFlipX(true); - mVerticalImage.render(trans); - - //top border - mHorizontalImage.setPosition(0, -getHorizontalBorderWidth()); - mHorizontalImage.setFlipY(false); - mHorizontalImage.render(trans); - - //bottom border - mHorizontalImage.setPosition(0, mSize.y()); - mHorizontalImage.setFlipY(true); - mHorizontalImage.render(trans); - - - //corner top left - mCornerImage.setPosition(-getHorizontalBorderWidth(), -getVerticalBorderWidth()); - mCornerImage.setFlipX(false); - mCornerImage.setFlipY(false); - mCornerImage.render(trans); - - //top right - mCornerImage.setPosition(mSize.x(), mCornerImage.getPosition().y()); - mCornerImage.setFlipX(true); - mCornerImage.render(trans); - - //bottom right - mCornerImage.setPosition(mCornerImage.getPosition().x(), mSize.y()); - mCornerImage.setFlipY(true); - mCornerImage.render(trans); - - //bottom left - mCornerImage.setPosition(-getHorizontalBorderWidth(), mCornerImage.getPosition().y()); - mCornerImage.setFlipX(false); - mCornerImage.render(trans); - - GuiComponent::renderChildren(trans); -} - -float GuiBox::getHorizontalBorderWidth() -{ - return (float)mHorizontalImage.getTextureSize().y(); -} - -float GuiBox::getVerticalBorderWidth() -{ - return (float)mVerticalImage.getTextureSize().x(); -} - -bool GuiBox::hasBackground() -{ - return mBackgroundImage.hasImage(); -} - -void GuiBox::onSizeChanged() -{ - mHorizontalImage.setResize(mSize.x(), getHorizontalBorderWidth(), true); - mVerticalImage.setResize(getVerticalBorderWidth(), mSize.y(), true); -} \ No newline at end of file diff --git a/src/components/GuiBox.h b/src/components/GuiBox.h deleted file mode 100644 index bd5c4b187..000000000 --- a/src/components/GuiBox.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _GUIBOX_H_ -#define _GUIBOX_H_ - -#include "../GuiComponent.h" -#include "ImageComponent.h" -#include - -struct GuiBoxData -{ - std::string backgroundPath; - bool backgroundTiled; - std::string horizontalPath; - bool horizontalTiled; - std::string verticalPath; - bool verticalTiled; - std::string cornerPath; -}; - -class GuiBox : public GuiComponent -{ -public: - GuiBox(Window* window, float offsetX, float offsetY, float width, float height); - - void setData(GuiBoxData data); - - void setBackgroundImage(std::string path, bool tiled = true); - void setHorizontalImage(std::string path, bool tiled = false); - void setVerticalImage(std::string path, bool tiled = false); - void setCornerImage(std::string path); - - bool hasBackground(); - - void setBackgroundColor(unsigned int color); - void setBorderColor(unsigned int color); - - void render(const Eigen::Affine3f& parentTrans) override; - - void onSizeChanged() override; -private: - ImageComponent mBackgroundImage, mHorizontalImage, mVerticalImage, mCornerImage; - - float getHorizontalBorderWidth(); - float getVerticalBorderWidth(); -}; - -#endif diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index d5c9f57cf..e4bc675d8 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -8,7 +8,8 @@ NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, mPath(path), mVertices(NULL), mColors(NULL) { - buildVertices(); + if(!mPath.empty()) + buildVertices(); } void NinePatchComponent::updateColors() diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 24d65e063..7eaef527d 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -1,7 +1,6 @@ #pragma once #include "../GuiComponent.h" -#include "GuiBox.h" #include "NinePatchComponent.h" class Font; diff --git a/src/components/ThemeComponent.h b/src/components/ThemeComponent.h index a5da1d25a..e364ba3df 100644 --- a/src/components/ThemeComponent.h +++ b/src/components/ThemeComponent.h @@ -5,7 +5,6 @@ #include "../GuiComponent.h" #include "../pugiXML/pugixml.hpp" -#include "GuiBox.h" #include "../AudioManager.h" #include "../Font.h" From c807c98b4a8d6e49109e9b2252cbb550cdc17e7b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 15 Sep 2013 12:56:47 -0500 Subject: [PATCH 027/386] Added HttpReq class based on Boost.Asio. --- CMakeLists.txt | 20 +++++ README.md | 6 +- src/HttpReq.cpp | 194 ++++++++++++++++++++++++++++++++++++++++++++++++ src/HttpReq.h | 68 +++++++++++++++++ 4 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 src/HttpReq.cpp create mode 100644 src/HttpReq.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b51fffc6..9912bc314 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,24 @@ if(DEFINED BCMHOST) add_definitions(-D_RPI_) endif() +#------------------------------------------------------------------------------- +#set up _WIN32_WINNT variable (used by boost::asio) on Windows +macro(get_WIN32_WINNT version) + if (WIN32 AND CMAKE_SYSTEM_VERSION) + set(ver ${CMAKE_SYSTEM_VERSION}) + string(REPLACE "." "" ver ${ver}) + string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) + + set(${version} "0x${ver}") + endif() +endmacro() + +if(WIN32) + get_WIN32_WINNT(ver) + add_definitions(-D_WIN32_WINNT=${ver}) +endif() +#------------------------------------------------------------------------------- + if(MSVC) set(CMAKE_DEBUG_POSTFIX "d") add_definitions(-D_CRT_SECURE_NO_DEPRECATE) @@ -122,6 +140,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/GameData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.h ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h @@ -167,6 +186,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/GameData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp diff --git a/README.md b/README.md index f0638b909..48902ea02 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,12 @@ Building EmulationStation uses some C++11 code, which means you'll need to install at least g++-4.7 on Linux, or VS2010 on Windows. For installing and switching to g++-4.7 see [here](http://lektiondestages.blogspot.de/2013/05/installing-and-switching-gccg-versions.html). You can also just use `export CXX=g++-4.7` to explicitly specify the compiler for CMake (make sure you delete your CMake cache files if it's not working). -EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.System, Boost.Filesystem, FreeImage, FreeType, and Eigen3. You'll also need the DejaVu TrueType font on Linux to run ES. +EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.System, Boost.Filesystem, Boost.Asio, FreeImage, FreeType, and Eigen3. You'll also need the DejaVu TrueType font on Linux to run ES. **On Linux:** All of this be easily installed with apt-get: ``` -sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu libasound2-dev +sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu libasound2-dev ``` On "desktop" Linux (that is, *not* the Raspberry Pi), you'll also need OpenGL. Try installing the MESA development package with: @@ -52,7 +52,7 @@ make **On Windows:** -[Boost](http://www.boost.org/users/download/) (you'll need to compile for Boost.Filesystem) +[Boost](http://www.boost.org/users/download/) (you'll need to compile for Boost.Filesystem and Boost.System) [Eigen3](http://eigen.tuxfamily.org/index.php?title=Main_Page) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp new file mode 100644 index 000000000..58c17bb5d --- /dev/null +++ b/src/HttpReq.cpp @@ -0,0 +1,194 @@ +#include +#include "HttpReq.h" +#include +#include "Log.h" + +boost::asio::io_service HttpReq::io_service; + +HttpReq::HttpReq(const std::string& server, const std::string& path) + : mResolver(io_service), mSocket(io_service), mStatus(REQ_IN_PROGRESS) +{ + std::ostream req_str(&mRequest); + req_str << "GET " << path << " HTTP/1.0\r\n"; + req_str << "Host: " << server << "\r\n"; + req_str << "Accept: */*\r\n"; + req_str << "Connection: close\r\n\r\n"; + + tcp::resolver::query query(server, "http"); + mResolver.async_resolve(query, + boost::bind(&HttpReq::handleResolve, this, + boost::asio::placeholders::error, + boost::asio::placeholders::iterator)); +} + + +void HttpReq::handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) +{ + if (!err) + { + // Attempt a connection to each endpoint in the list until we + // successfully establish a connection. + boost::asio::async_connect(mSocket, endpoint_iterator, + boost::bind(&HttpReq::handleConnect, this, + boost::asio::placeholders::error)); + } + else + { + onError(err); + } +} + +void HttpReq::handleConnect(const boost::system::error_code& err) +{ + if (!err) + { + // The connection was successful. Send the request. + boost::asio::async_write(mSocket, mRequest, + boost::bind(&HttpReq::handleWriteRequest, this, + boost::asio::placeholders::error)); + } + else + { + onError(err); + } +} + +void HttpReq::handleWriteRequest(const boost::system::error_code& err) +{ + if (!err) + { + // Read the response status line. The response_ streambuf will + // automatically grow to accommodate the entire line. The growth may be + // limited by passing a maximum size to the streambuf constructor. + boost::asio::async_read_until(mSocket, mResponse, "\r\n", + boost::bind(&HttpReq::handleReadStatusLine, this, + boost::asio::placeholders::error)); + } + else + { + onError(err); + } +} + +void HttpReq::handleReadStatusLine(const boost::system::error_code& err) +{ + if (!err) + { + // Check that response is OK. + std::istream response_stream(&mResponse); + std::string http_version; + response_stream >> http_version; + response_stream >> mResponseStatusCode; + std::string status_message; + std::getline(response_stream, status_message); + if(!response_stream || http_version.substr(0, 5) != "HTTP/") + { + mStatus = REQ_INVALID_RESPONSE; + return; + } + if(mResponseStatusCode != 200) + { + mStatus = REQ_BAD_STATUS_CODE; + return; + } + + // Read the response headers, which are terminated by a blank line. + boost::asio::async_read_until(mSocket, mResponse, "\r\n\r\n", + boost::bind(&HttpReq::handleReadHeaders, this, + boost::asio::placeholders::error)); + } + else + { + onError(err); + } +} + +void HttpReq::handleReadHeaders(const boost::system::error_code& err) +{ + if (!err) + { + // Process the response headers. + std::istream response_stream(&mResponse); + std::string header; + while (std::getline(response_stream, header) && header != "\r"); //and by process we mean ignore + + // Write whatever content we already have to output. + if (mResponse.size() > 0) + mContent << &mResponse; + + // Start reading remaining data until EOF. + boost::asio::async_read(mSocket, mResponse, + boost::asio::transfer_at_least(1), + boost::bind(&HttpReq::handleReadContent, this, + boost::asio::placeholders::error)); + } + else + { + onError(err); + } +} + +void HttpReq::handleReadContent(const boost::system::error_code& err) +{ + if (!err) + { + // Write all of the data that has been read so far. + mContent << &mResponse; + + // Continue reading remaining data until EOF. + boost::asio::async_read(mSocket, mResponse, + boost::asio::transfer_at_least(1), + boost::bind(&HttpReq::handleReadContent, this, + boost::asio::placeholders::error)); + }else{ + if (err != boost::asio::error::eof) + { + onError(err); + }else{ + mStatus = REQ_SUCCESS; + } + } +} + +HttpReq::Status HttpReq::status() +{ + io_service.poll(); + return mStatus; +} + +std::string HttpReq::getContent() +{ + if(mStatus != REQ_SUCCESS) + { + LOG(LogError) << "Called getContent() on an unsuccessful HttpReq!"; + return ""; + } + + return mContent.str(); +} + +//only called for boost-level errors (REQ_IO_ERROR) +void HttpReq::onError(const boost::system::error_code& err) +{ + mError = err; + mStatus = REQ_IO_ERROR; +} + +std::string HttpReq::getErrorMsg() +{ + switch(mStatus) + { + case REQ_BAD_STATUS_CODE: + return "Bad status code"; + case REQ_INVALID_RESPONSE: + return "Invalid response from server"; + case REQ_IO_ERROR: + return mError.message(); + case REQ_IN_PROGRESS: + return "Not done yet"; + case REQ_SUCCESS: + return "No error"; + default: + return "???"; + } +} diff --git a/src/HttpReq.h b/src/HttpReq.h new file mode 100644 index 000000000..ee8d2b1f7 --- /dev/null +++ b/src/HttpReq.h @@ -0,0 +1,68 @@ +#pragma once + +#include + +using boost::asio::ip::tcp; + +//Based on: http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/example/http/client/async_client.cpp + +/* Usage: + * HttpReq myRequest("www.google.com", "/index.html"); + * //for blocking behavior: while(myRequest.status() == HttpReq::REQ_IN_PROGRESS); + * //for non-blocking behavior: check if(myRequest.status() != HttpReq::REQ_IN_PROGRESS) in some sort of update method + * + * //once one of those completes, the request is ready + * if(myRequest.status() != REQ_SUCCESS) + * { + * //an error occured + * LOG(LogError) << "HTTP request error - " << myRequest.getErrorMessage(); + * return; + * } + * + * std::string content = myRequest.getContent(); + * //process contents... +*/ + +class HttpReq +{ +public: + HttpReq(const std::string& server, const std::string& path); + + enum Status + { + REQ_IN_PROGRESS, //request is in progress + REQ_SUCCESS, //request completed successfully, get it with getContent() + + REQ_IO_ERROR, //some boost::asio error happened, get it with getErrorMsg() + REQ_BAD_STATUS_CODE, //some invalid HTTP response status code happened (non-200) + REQ_INVALID_RESPONSE //the HTTP response was invalid + }; + + Status status(); //process any received data and return the status afterwards + + std::string getErrorMsg(); + + std::string getContent(); + +private: + static boost::asio::io_service io_service; + + void handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator); + void handleConnect(const boost::system::error_code& err); + void handleWriteRequest(const boost::system::error_code& err); + void handleReadStatusLine(const boost::system::error_code& err); + void handleReadHeaders(const boost::system::error_code& err); + void handleReadContent(const boost::system::error_code& err); + + void onError(const boost::system::error_code& error); + + tcp::resolver mResolver; + tcp::socket mSocket; + boost::asio::streambuf mRequest; + boost::asio::streambuf mResponse; + + Status mStatus; + std::stringstream mContent; + unsigned int mResponseStatusCode; + boost::system::error_code mError; +}; From e823592660d44a291e4d429724b02e7356eeac56 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 15 Sep 2013 14:11:39 -0500 Subject: [PATCH 028/386] Added AsyncReqComponent for easy asynchronous, cancelable HTTP requests with a nice loading icon. --- CMakeLists.txt | 2 ++ src/components/AsyncReqComponent.cpp | 44 ++++++++++++++++++++++++++++ src/components/AsyncReqComponent.h | 39 ++++++++++++++++++++++++ src/components/GuiMetaDataEd.cpp | 9 +++++- src/components/GuiMetaDataEd.h | 1 + 5 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 src/components/AsyncReqComponent.cpp create mode 100644 src/components/AsyncReqComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9912bc314..7eaa90576 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,6 +156,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimationComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h @@ -204,6 +205,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimationComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp diff --git a/src/components/AsyncReqComponent.cpp b/src/components/AsyncReqComponent.cpp new file mode 100644 index 000000000..2f7f3a9ea --- /dev/null +++ b/src/components/AsyncReqComponent.cpp @@ -0,0 +1,44 @@ +#include "AsyncReqComponent.h" +#include "../Renderer.h" + +AsyncReqComponent::AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel) + : GuiComponent(window), + mSuccessFunc(onSuccess), mCancelFunc(onCancel), mTime(0), mRequest(req) +{ + +} + +bool AsyncReqComponent::input(InputConfig* config, Input input) +{ + if(input.value != 0 && config->isMappedTo("b", input)) + { + if(mCancelFunc) + mCancelFunc(); + + delete this; + } + + return true; +} + +void AsyncReqComponent::update(int deltaTime) +{ + if(mRequest->status() != HttpReq::REQ_IN_PROGRESS) + { + mSuccessFunc(mRequest); + delete this; + return; + } + + mTime += deltaTime; +} + +void AsyncReqComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = Eigen::Affine3f::Identity(); + trans = trans.translate(Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); + Renderer::setMatrix(trans); + + Eigen::Vector3f point(cos(mTime * 0.01f) * 12, sin(mTime * 0.01f) * 12, 0); + Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF); +} diff --git a/src/components/AsyncReqComponent.h b/src/components/AsyncReqComponent.h new file mode 100644 index 000000000..47b43fdfb --- /dev/null +++ b/src/components/AsyncReqComponent.h @@ -0,0 +1,39 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../HttpReq.h" +#include + +/* Usage example: + std::shared_ptr httpreq = std::make_shared("cdn.garcya.us", "/wp-content/uploads/2010/04/TD250.jpg"); + AsyncReqComponent* req = new AsyncReqComponent(mWindow, httpreq, + [] (std::shared_ptr r) + { + LOG(LogInfo) << "Request completed"; + LOG(LogInfo) << " error, if any: " << r->getErrorMsg(); + }, [] () + { + LOG(LogInfo) << "Request canceled"; + }); + + mWindow->pushGui(req); + //we can forget about req, since it will always delete itself +*/ + +class AsyncReqComponent : public GuiComponent +{ +public: + + AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel = NULL); + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; + +private: + std::function)> mSuccessFunc; + std::function mCancelFunc; + + unsigned int mTime; + std::shared_ptr mRequest; +}; diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index 3f4e632bd..13323f307 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -1,6 +1,7 @@ #include "GuiMetaDataEd.h" #include "../Renderer.h" #include "../Log.h" +#include "AsyncReqComponent.h" #define MDED_RESERVED_ROWS 3 @@ -37,6 +38,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mDeleteButton.setPressedFunc([&] { mDeleteFunc(); delete this; }); mFetchButton.setText("FETCH", 0x555555FF); + mFetchButton.setPressedFunc([&] { fetch(); }); mSaveButton.setText("SAVE", 0x0000FFFF); mSaveButton.setPressedFunc([&] { save(); delete this; }); @@ -72,7 +74,7 @@ void GuiMetaDataEd::populateList(const std::vector& mdd) //fetch button mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mFetchButton, true, ComponentListComponent::AlignCenter); - + y++; for(auto iter = mdd.begin(); iter != mdd.end(); iter++) @@ -105,3 +107,8 @@ void GuiMetaDataEd::save() if(mSavedCallback) mSavedCallback(); } + +void GuiMetaDataEd::fetch() +{ + +} diff --git a/src/components/GuiMetaDataEd.h b/src/components/GuiMetaDataEd.h index bdad64344..624c75154 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/components/GuiMetaDataEd.h @@ -18,6 +18,7 @@ public: private: void save(); + void fetch(); void populateList(const std::vector& mdd); From fe991e1b86ad175283f66adf0ff7185d2e801458 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 16 Sep 2013 14:53:24 -0500 Subject: [PATCH 029/386] Skeleton for scrapers. --- CMakeLists.txt | 2 ++ src/scrapers/GamesDBScraper.cpp | 9 +++++++++ src/scrapers/GamesDBScraper.h | 10 ++++++++++ src/scrapers/Scraper.h | 23 +++++++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 src/scrapers/GamesDBScraper.cpp create mode 100644 src/scrapers/GamesDBScraper.h create mode 100644 src/scrapers/Scraper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7eaa90576..500218b7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -175,6 +175,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h @@ -223,6 +224,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp new file mode 100644 index 000000000..db9811420 --- /dev/null +++ b/src/scrapers/GamesDBScraper.cpp @@ -0,0 +1,9 @@ +#include "GamesDBScraper.h" + +std::vector GamesDBScraper::getResults(ScraperSearchParams params) +{ + std::vector results; + + return results; +} + diff --git a/src/scrapers/GamesDBScraper.h b/src/scrapers/GamesDBScraper.h new file mode 100644 index 000000000..18032a3f8 --- /dev/null +++ b/src/scrapers/GamesDBScraper.h @@ -0,0 +1,10 @@ +#pragma once + +#include "Scraper.h" + +class GamesDBScraper : public IScraper +{ +public: + std::vector getResults(ScraperSearchParams params) override; +}; + diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h new file mode 100644 index 000000000..7b9f92c6c --- /dev/null +++ b/src/scrapers/Scraper.h @@ -0,0 +1,23 @@ +#pragma once + +#include "../MetaData.h" +#include "../SystemData.h" +#include "../GameData.h" +#include + +struct ScraperSearchParams +{ + SystemData* sys; + GameData* game; + + std::string nameOverride; + bool async; +}; + +class IScraper +{ +public: + //Get a list of potential results. + virtual std::vector getResults(ScraperSearchParams params) = 0; +}; + From 5dfaeeabb4eeeed236e87d34636ff51d145c19e7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 17 Sep 2013 16:50:49 -0500 Subject: [PATCH 030/386] More infastructure for scrapers (starting to hook into GuiMetaDataEd). --- src/Settings.cpp | 9 ++++++++- src/Settings.h | 3 +++ src/components/GuiGameList.cpp | 5 ++++- src/components/GuiMetaDataEd.cpp | 10 +++++++++- src/components/GuiMetaDataEd.h | 6 +++++- src/scrapers/GamesDBScraper.cpp | 32 ++++++++++++++++++++++++++++++-- src/scrapers/GamesDBScraper.h | 6 ++++++ src/scrapers/Scraper.h | 7 +++++-- 8 files changed, 70 insertions(+), 8 deletions(-) diff --git a/src/Settings.cpp b/src/Settings.cpp index 847733103..7efd4ba7f 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -35,7 +35,9 @@ void Settings::setDefaults() mIntMap["DIMTIME"] = 30*1000; - mIntMap["GameListSortIndex"] = 0; + mIntMap["GameListSortIndex"] = 0; + + mScraper = NULL; //TODO } template @@ -85,6 +87,11 @@ void Settings::loadFile() setFloat(node.attribute("name").as_string(), node.attribute("value").as_float()); } +IScraper* Settings::getScraper() +{ + return mScraper; +} + //Print a warning message if the setting we're trying to get doesn't already exist in the map, then return the value in the map. #define SETTINGS_GETSET(type, mapName, getMethodName, setMethodName) type Settings::getMethodName(const std::string& name) \ { \ diff --git a/src/Settings.h b/src/Settings.h index 099a0afa7..c00c7af86 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -3,6 +3,7 @@ #include #include +#include "scrapers/Scraper.h" //This is a singleton for storing settings. class Settings @@ -22,6 +23,7 @@ public: void setInt(const std::string& name, int value); void setFloat(const std::string& name, float value); + IScraper* getScraper(); private: static Settings* sInstance; @@ -33,6 +35,7 @@ private: std::map mBoolMap; std::map mIntMap; std::map mFloatMap; + IScraper* mScraper; }; #endif diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 24ef6d003..97e6d21bb 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -129,7 +129,10 @@ bool GuiGameList::input(InputConfig* config, Input input) if(game) { FolderData* root = mSystem->getRootFolder(); - mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), MetaDataList::getDefaultGameMDD(), game->getBaseName(), + ScraperSearchParams searchParams; + searchParams.game = game; + searchParams.system = mSystem; + mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), MetaDataList::getDefaultGameMDD(), searchParams, game->getBaseName(), [&] { updateDetailData(); }, [game, root, this] { root->removeFileRecursive(game); updateList(); } )); diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index 13323f307..2d183fdba 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -2,11 +2,13 @@ #include "../Renderer.h" #include "../Log.h" #include "AsyncReqComponent.h" +#include "../Settings.h" #define MDED_RESERVED_ROWS 3 -GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, +GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), + mScraperParams(scraperParams), mBox(mWindow, ":/frame.png", 0xAAAAAAFF, 0xCCCCCCFF), mList(window, Eigen::Vector2i(3, mdd.size() + MDED_RESERVED_ROWS)), mHeader(window), @@ -109,6 +111,12 @@ void GuiMetaDataEd::save() } void GuiMetaDataEd::fetch() +{ + Settings::getInstance()->getScraper()->getResultsAsync(mScraperParams, mWindow, std::bind(&GuiMetaDataEd::fetchDone, this, std::placeholders::_1)); +} + +void GuiMetaDataEd::fetchDone(std::vector results) { } + diff --git a/src/components/GuiMetaDataEd.h b/src/components/GuiMetaDataEd.h index 624c75154..e59424941 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/components/GuiMetaDataEd.h @@ -8,20 +8,24 @@ #include "NinePatchComponent.h" #include "ButtonComponent.h" #include +#include "../scrapers/Scraper.h" class GuiMetaDataEd : public GuiComponent { public: - GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, + GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams params, const std::string& header, std::function savedCallback, std::function deleteFunc); virtual ~GuiMetaDataEd(); private: void save(); void fetch(); + void fetchDone(std::vector results); void populateList(const std::vector& mdd); + ScraperSearchParams mScraperParams; + NinePatchComponent mBox; ComponentListComponent mList; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index db9811420..102a7c9b9 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -1,9 +1,37 @@ #include "GamesDBScraper.h" +#include "../components/AsyncReqComponent.h" std::vector GamesDBScraper::getResults(ScraperSearchParams params) { - std::vector results; + std::shared_ptr req = makeHttpReq(); + while(req->status() == HttpReq::REQ_IN_PROGRESS); - return results; + return parseReq(params, req); +} + +std::shared_ptr GamesDBScraper::makeHttpReq() +{ + return std::make_shared("cdn.garcya.us", "/wp-content/uploads/2010/04/TD250.jpg"); +} + +std::vector GamesDBScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) +{ + std::vector mdl; + + return mdl; +} + +void GamesDBScraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) +{ + std::shared_ptr httpreq = makeHttpReq(); + AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, + [this, params, returnFunc] (std::shared_ptr r) + { + returnFunc(parseReq(params, r)); + }, [] () + { + }); + + window->pushGui(req); } diff --git a/src/scrapers/GamesDBScraper.h b/src/scrapers/GamesDBScraper.h index 18032a3f8..5b96fb253 100644 --- a/src/scrapers/GamesDBScraper.h +++ b/src/scrapers/GamesDBScraper.h @@ -1,10 +1,16 @@ #pragma once #include "Scraper.h" +#include "../HttpReq.h" class GamesDBScraper : public IScraper { public: std::vector getResults(ScraperSearchParams params) override; + void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) override; + +private: + std::shared_ptr makeHttpReq(); + std::vector parseReq(ScraperSearchParams params, std::shared_ptr); }; diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 7b9f92c6c..4e34a3684 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -4,14 +4,16 @@ #include "../SystemData.h" #include "../GameData.h" #include +#include + +class Window; struct ScraperSearchParams { - SystemData* sys; + SystemData* system; GameData* game; std::string nameOverride; - bool async; }; class IScraper @@ -19,5 +21,6 @@ class IScraper public: //Get a list of potential results. virtual std::vector getResults(ScraperSearchParams params) = 0; + virtual void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) = 0; }; From 3105073e502bbbfe3b77daf7c501978fc64dc341 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 19 Sep 2013 18:41:14 -0500 Subject: [PATCH 031/386] Work on scraper UI integration (about there, just need a real scraper now). --- CMakeLists.txt | 3 + src/GameData.cpp | 2 +- src/Settings.cpp | 8 +- src/SystemData.cpp | 5 + src/SystemData.h | 2 + src/XMLReader.cpp | 8 +- src/components/ButtonComponent.cpp | 2 +- src/components/ComponentListComponent.cpp | 65 ++++++--- src/components/ComponentListComponent.h | 40 +----- src/components/GuiGameList.cpp | 2 +- src/components/GuiGameScraper.cpp | 168 ++++++++++++++++++++++ src/components/GuiGameScraper.h | 44 ++++++ src/components/GuiMetaDataEd.cpp | 67 +++++---- src/components/GuiMetaDataEd.h | 3 +- src/components/TextComponent.cpp | 2 +- src/components/TextComponent.h | 8 +- src/scrapers/GamesDBScraper.cpp | 12 +- 17 files changed, 347 insertions(+), 94 deletions(-) create mode 100644 src/components/GuiGameScraper.cpp create mode 100644 src/components/GuiGameScraper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 500218b7b..26a3f7759 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,9 +172,11 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp @@ -221,6 +223,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp diff --git a/src/GameData.cpp b/src/GameData.cpp index a49490e53..976d3e058 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -5,7 +5,7 @@ #include GameData::GameData(SystemData* system, std::string path) - : mSystem(system), mPath(path), mBaseName(boost::filesystem::path(path).stem().string()), mMetaData(MetaDataList::getDefaultGameMDD()) + : mSystem(system), mPath(path), mBaseName(boost::filesystem::path(path).stem().string()), mMetaData(system->getGameMDD()) { if(mMetaData.get("name").empty()) mMetaData.set("name", mBaseName); diff --git a/src/Settings.cpp b/src/Settings.cpp index 7efd4ba7f..211679d12 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -3,10 +3,11 @@ #include "pugiXML/pugixml.hpp" #include "platform.h" #include +#include "scrapers/GamesDBScraper.h" Settings* Settings::sInstance = NULL; -Settings::Settings() +Settings::Settings() : mScraper(NULL) { setDefaults(); loadFile(); @@ -37,7 +38,10 @@ void Settings::setDefaults() mIntMap["GameListSortIndex"] = 0; - mScraper = NULL; //TODO + if(mScraper) + delete mScraper; + + mScraper = new GamesDBScraper(); //TODO } template diff --git a/src/SystemData.cpp b/src/SystemData.cpp index bdc7d2ecc..7e9d913e3 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -334,3 +334,8 @@ bool SystemData::hasGamelist() else return true; } + +std::vector SystemData::getGameMDD() +{ + return MetaDataList::getDefaultGameMDD(); +} diff --git a/src/SystemData.h b/src/SystemData.h index b9be59079..a087b8ba4 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -5,6 +5,7 @@ #include #include "FolderData.h" #include "Window.h" +#include "MetaData.h" class GameData; @@ -21,6 +22,7 @@ public: std::string getExtension(); std::string getGamelistPath(); bool hasGamelist(); + std::vector getGameMDD(); void launchGame(Window* window, GameData* game); diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 22c9ed282..4cb5c6799 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -155,7 +155,7 @@ void parseGamelist(SystemData* system) game = createGameFromPath(path, system); //load the metadata - *(game->metadata()) = MetaDataList::createFromXML(MetaDataList::getDefaultGameMDD(), gameNode); + *(game->metadata()) = MetaDataList::createFromXML(system->getGameMDD(), gameNode); //make sure name gets set if one didn't exist if(game->metadata()->get("name").empty()) @@ -166,13 +166,13 @@ void parseGamelist(SystemData* system) } } -void addGameDataNode(pugi::xml_node& parent, const GameData* game) +void addGameDataNode(pugi::xml_node& parent, const GameData* game, SystemData* system) { //create game and add to parent node pugi::xml_node newGame = parent.append_child("game"); //write metadata - const_cast(game)->metadata()->appendToXML(newGame, MetaDataList::getDefaultGameMDD()); + const_cast(game)->metadata()->appendToXML(newGame, system->getGameMDD()); if(newGame.children().begin() == newGame.child("name") //first element is name && ++newGame.children().begin() == newGame.children().end() //theres only one element @@ -254,7 +254,7 @@ void updateGamelist(SystemData* system) //either the game content was removed, because it needs to be updated, //or didn't exist in the first place, so just add it - addGameDataNode(root, game); + addGameDataNode(root, game, system); } ++fit; } diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 555b25eb6..19ad42939 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -22,7 +22,7 @@ void ButtonComponent::setPressedFunc(std::function f) bool ButtonComponent::input(InputConfig* config, Input input) { - if(config->isMappedTo("a", input)) + if(config->isMappedTo("a", input) && input.value != 0) { if(mPressedFunc) mPressedFunc(); diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 6504e7b7f..5321a0cbe 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -13,6 +13,14 @@ ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i g makeCells(gridDimensions); } +ComponentListComponent::~ComponentListComponent() +{ + for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) + { + delete *iter; + } +} + void ComponentListComponent::makeCells(Eigen::Vector2i size) { if(mGrid) @@ -57,7 +65,7 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, return; } - ComponentEntry entry(Eigen::Vector2i(pos.x(), pos.y()), Eigen::Vector2i(size.x(), size.y()), component, updateType, canFocus, align); + ComponentEntry* entry = new ComponentEntry(Eigen::Vector2i(pos.x(), pos.y()), Eigen::Vector2i(size.x(), size.y()), component, updateType, canFocus, align); mEntries.push_back(entry); @@ -65,7 +73,7 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, { for(int x = pos.x(); x < pos.x() + size.x(); x++) { - setCell(x, y, &mEntries.back()); + setCell(x, y, mEntries.back()); } } @@ -81,13 +89,40 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, // setColumnWidth(pos.x(), (unsigned int)component->getSize().x()); //if(autoFit.y() && (int)getRowHeight(pos.y()) < component->getSize().y()) // setRowHeight(pos.y(), (unsigned int)component->getSize().y()); - updateCellSize(&mEntries.back(), autoFit.x(), autoFit.y()); + updateCellSize(mEntries.back(), autoFit.x(), autoFit.y()); component->setPosition(getCellOffset(pos)); updateSize(); } +void ComponentListComponent::removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2i size) +{ + auto iter = mEntries.begin(); + while(iter != mEntries.end()) + { + if((*iter)->pos.x() >= pos.x() && (*iter)->pos.x() < pos.x() + size.x() + && (*iter)->pos.y() >= pos.y() && (*iter)->pos.y() < pos.y() + size.y()) + { + delete *iter; + iter = mEntries.erase(iter); + }else{ + iter++; + } + } + + for(int y = pos.y(); y < pos.y() + size.y(); y++) + { + for(int x = pos.x(); x < pos.x() + size.x(); x++) + { + setCell(x, y, NULL); + } + } + + if(!cursorValid()) + resetCursor(); +} + void ComponentListComponent::forceRowHeight(int row, unsigned int size) { mRowHeights[row] = size; @@ -99,7 +134,7 @@ void ComponentListComponent::forceRowHeight(int row, unsigned int size) void ComponentListComponent::forceColumnWidth(int col, unsigned int size) { mColumnWidths[col] = size; - mRowHeightForced[col] = true; + mColumnWidthForced[col] = true; updateSize(); updateComponentOffsets(); } @@ -174,7 +209,7 @@ void ComponentListComponent::updateComponentOffsets() { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { - iter->component->setPosition(getCellOffset(iter->pos)); + (*iter)->component->setPosition(getCellOffset((*iter)->pos)); } } @@ -229,9 +264,9 @@ void ComponentListComponent::updateComponent(GuiComponent* cmp) { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { - if(iter->component == cmp) + if((*iter)->component == cmp) { - updateCellSize(&(*iter)); + updateCellSize(*iter); } } } @@ -277,7 +312,7 @@ void ComponentListComponent::resetCursor() } const Eigen::Vector2i origCursor = mCursor; - mCursor << mEntries.at(0).pos[0], mEntries.at(0).pos[1]; + mCursor << mEntries.at(0)->pos[0], mEntries.at(0)->pos[1]; onCursorMoved(origCursor, mCursor); } @@ -356,15 +391,15 @@ void ComponentListComponent::update(int deltaTime) { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { - switch(iter->updateType) + switch((*iter)->updateType) { case UpdateAlways: - iter->component->update(deltaTime); + (*iter)->component->update(deltaTime); break; case UpdateFocused: - if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component == iter->component) - iter->component->update(deltaTime); + if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component == (*iter)->component) + (*iter)->component->update(deltaTime); break; } } @@ -373,13 +408,9 @@ void ComponentListComponent::update(int deltaTime) void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::setMatrix(trans); - - Renderer::drawRect(0, 0, (int)getSize().x(), (int)getSize().y(), 0xFFFFFFAA); - for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { - iter->component->render(trans); + (*iter)->component->render(trans); } diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentListComponent.h index 0db561084..f5d226dad 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentListComponent.h @@ -6,6 +6,7 @@ class ComponentListComponent : public GuiComponent { public: ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions); + virtual ~ComponentListComponent(); enum UpdateBehavior { @@ -21,6 +22,8 @@ public: void setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, Eigen::Matrix autoFit = Eigen::Matrix(true, true), UpdateBehavior updateType = UpdateAlways); + void removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2i size); + void onPositionChanged() override; void textInput(const char* text) override; @@ -38,6 +41,8 @@ public: GuiComponent* getSelectedComponent(); + void moveCursor(Eigen::Vector2i dir); + private: class ComponentEntry { @@ -58,18 +63,16 @@ private: } }; - //Offset we render components by (for scrolling). + //Offset we render components by (for scrolling). [unimplemented] Eigen::Vector2f mComponentOffset; Eigen::Vector2i mGridSize; ComponentEntry** mGrid; - std::vector mEntries; + std::vector mEntries; void makeCells(Eigen::Vector2i size); void setCell(unsigned int x, unsigned int y, ComponentEntry* entry); ComponentEntry* getCell(unsigned int x, unsigned int y); - Eigen::Vector2i mSelectedCellIndex; - unsigned int getColumnWidth(int col); unsigned int getRowHeight(int row); @@ -81,7 +84,6 @@ private: Eigen::Vector3f getCellOffset(Eigen::Vector2i gridPos); void updateSize(); - void moveCursor(Eigen::Vector2i dir); void onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to); Eigen::Vector2i mCursor; @@ -100,43 +102,15 @@ private: // scroll to prev/next selectable component in grid Y // if input == left/right // scroll to prev/next selectable component in grid X -// if input == accept -// call registered function? //entry struct/class // GuiComponent* component - component to work with // bool canFocus - can we pass input to this? (necessary for labels to not be selectable) -// Function* selectFunc? // UpdateBehavior update - how to handle updates (all the time or only when focused) //update -//animate component offset to display selected component within the bounds //pass update to all entries with appropriate update behavior //render //clip rect to our size //render a "selected" effect behind component with focus somehow -// an edge filter would be cool, but we can't really do that without shader support -// a transparent rect will work for now, but it's kind of ugly... -//glTranslatef by our render offset -// doesn't handle getGlobalOffset for our components...would need parenting for that - -//methods -//List::setEntry(Vector2i gridPos, GuiComponent* component, bool canFocus, AlignmentType align, -// Function* selectFunc = NULL, UpdateBehavior updateType = UpdateAlways); - -//example of setting up the SettingsMenu list: -//ComponentListComponent list; -//int row = 0; -//TextComponent* label = new TextComponent(Vector2i(0, 0), "Debug:", font, lblColor, etc); -// -//list.setEntry(Vector2i(-1, row), label, false, AlignRight); -//list.setEntry(Vector2i(0, row++), &mDebugSwitch, true, AlignLeft); -//... -//list.setEntry(Rect(-1, row, 2, 1), &mSaveButton, true, AlignCenter); - -//example of setting up GameGrid list: -//ComponentListComponent list; -//for(int y = 0; y < yMax; y++) -// for(int x = 0; x < xMax; x++) -// list.setEntry(Vector2i(x, y), getGameImage(x, y), true, AlignCenter, &this->onSelectGame); diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 97e6d21bb..138a5ebcf 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -132,7 +132,7 @@ bool GuiGameList::input(InputConfig* config, Input input) ScraperSearchParams searchParams; searchParams.game = game; searchParams.system = mSystem; - mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), MetaDataList::getDefaultGameMDD(), searchParams, game->getBaseName(), + mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), mSystem->getGameMDD(), searchParams, game->getBaseName(), [&] { updateDetailData(); }, [game, root, this] { root->removeFileRecursive(game); updateList(); } )); diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp new file mode 100644 index 000000000..d63070dd6 --- /dev/null +++ b/src/components/GuiGameScraper.cpp @@ -0,0 +1,168 @@ +#include "GuiGameScraper.h" +#include "../Renderer.h" +#include "../Log.h" +#include "../scrapers/Scraper.h" +#include "../Settings.h" + +#define RESULT_COUNT 5 + +GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc) : GuiComponent(window), + mList(window, Eigen::Vector2i(2, 7 + RESULT_COUNT)), + mBox(window, ":/frame.png"), + mHeader(window, params.game->getBaseName(), Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), + mResultName(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), + mResultInfo(window), + mResultDesc(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL)), + + mSearchLabel(window, "Search for: ", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL)), + mSearchText(window), + + mSearchParams(params), + mDoneFunc(doneFunc), + mSkipFunc(skipFunc) +{ + // FILE NAME + //-------------------------------------- + //Name................. | + //Desc................. | PREVIEW + //..................... | IMAGE? + //....(autoscroll)..... | + //-------------------------------------- + //Search for: [_______________________] + //-------------------------------------- + //Result #1 Name + //Result #2 Name + //Result #3 Name + //Result #4 Name + //Result #5 Name + + addChild(&mBox); + addChild(&mList); + + float sw = (float)Renderer::getScreenWidth(); + float sh = (float)Renderer::getScreenHeight(); + + float colWidth = sw * 0.35f; + + mList.forceColumnWidth(0, (unsigned int)colWidth); + mList.forceColumnWidth(1, (unsigned int)colWidth); + + using namespace Eigen; + + mList.setEntry(Vector2i(0, 0), Vector2i(2, 1), &mHeader, false, ComponentListComponent::AlignCenter); + + //y = 1 is a spacer row + + mResultName.setText(params.game->getName()); + mResultName.setColor(0x3B56CCFF); + mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentListComponent::AlignLeft); + + + mResultDesc.setText(params.game->metadata()->get("desc")); + mResultDesc.setSize(colWidth, 0); + mResultInfo.addChild(&mResultDesc); + mResultInfo.setSize(mResultDesc.getSize().x(), mResultDesc.getFont()->getHeight() * 3.0f); + mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentListComponent::AlignLeft); + + //y = 3 is a spacer row + + mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentListComponent::AlignLeft); + mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : params.game->getBaseName()); + mSearchText.setSize(colWidth * 2 - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); + mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentListComponent::AlignRight); + + //y = 5 is a spacer row + + std::shared_ptr font = Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + mResultNames.reserve(RESULT_COUNT); + for(int i = 0; i < RESULT_COUNT; i ++) + { + mResultNames.push_back(TextComponent(mWindow, "RESULT...", font)); + mResultNames.at(i).setColor(0x111111FF); + mList.forceRowHeight(6 + i, (unsigned int)mResultNames.at(i).getSize().y()); + } + + mList.setPosition((sw - mList.getSize().x()) / 2, (sh - mList.getSize().y()) / 2); + + mBox.fitTo(mList.getSize(), mList.getPosition()); + + mResultInfo.setAutoScroll(2200, 0.015f); +} + +void GuiGameScraper::search() +{ + //update mSearchParams + mSearchParams.nameOverride = mSearchText.getValue(); + + Settings::getInstance()->getScraper()->getResultsAsync(mSearchParams, mWindow, std::bind(&GuiGameScraper::onSearchDone, this, std::placeholders::_1)); +} + +void GuiGameScraper::onSearchDone(std::vector results) +{ + mList.removeEntriesIn(Eigen::Vector2i(0, 6), Eigen::Vector2i(1, 5)); + + mScraperResults = results; + + const int end = results.size() > 5 ? 5 : results.size(); //at max display 5 + + if(end == 0) + { + mResultNames.at(0).setText("No games found!"); + mList.setEntry(Eigen::Vector2i(0, 6), Eigen::Vector2i(1, 1), &mResultNames.at(0), false, ComponentListComponent::AlignLeft); + }else{ + for(int i = 0; i < end; i++) + { + mResultNames.at(i).setText(results.at(i).get("name")); + mList.setEntry(Eigen::Vector2i(0, 6 + i), Eigen::Vector2i(1, 1), &mResultNames.at(i), true, ComponentListComponent::AlignLeft); + } + } +} + +int GuiGameScraper::getSelectedIndex() +{ + int index = 0; + for(auto iter = mResultNames.begin(); iter != mResultNames.end(); iter++, index++) + { + if(&(*iter) == mList.getSelectedComponent()) + return index; + } + + return -1; +} + +bool GuiGameScraper::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("a", input) && input.value != 0) + { + //if you're on a result + if(getSelectedIndex()) + { + mDoneFunc(mScraperResults.at(getSelectedIndex())); + delete this; + return true; + } + }else if(config->isMappedTo("b", input) && input.value != 0) + { + if(mSkipFunc) + mSkipFunc(); + delete this; + return true; + } + + bool ret = GuiComponent::input(config, input); + + if(config->isMappedTo("up", input) || config->isMappedTo("down", input)) + { + //update game info pane + int i = getSelectedIndex(); + if(i != -1) + { + mResultName.setText(mScraperResults.at(i).get("name")); + mResultDesc.setText(mScraperResults.at(i).get("desc")); + mResultInfo.setScrollPos(Eigen::Vector2d(0, 0)); + mResultInfo.resetAutoScrollTimer(); + } + } + + return ret; +} diff --git a/src/components/GuiGameScraper.h b/src/components/GuiGameScraper.h new file mode 100644 index 000000000..1f29a5a6f --- /dev/null +++ b/src/components/GuiGameScraper.h @@ -0,0 +1,44 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../scrapers/Scraper.h" +#include "ComponentListComponent.h" +#include "TextComponent.h" +#include "ScrollableContainer.h" +#include "TextEditComponent.h" +#include "NinePatchComponent.h" +#include "../Settings.h" + +class GuiGameScraper : public GuiComponent +{ +public: + GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc = NULL); + + bool input(InputConfig* config, Input input) override; + + void search(); +private: + int getSelectedIndex(); + void onSearchDone(std::vector results); + + ComponentListComponent mList; + NinePatchComponent mBox; + + TextComponent mHeader; + + TextComponent mResultName; + ScrollableContainer mResultInfo; + TextComponent mResultDesc; + + TextComponent mSearchLabel; + TextEditComponent mSearchText; + + std::vector mResultNames; + + ScraperSearchParams mSearchParams; + + std::vector mScraperResults; + + std::function mDoneFunc; + std::function mSkipFunc; +}; diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index 2d183fdba..9b7226768 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -3,6 +3,7 @@ #include "../Log.h" #include "AsyncReqComponent.h" #include "../Settings.h" +#include "GuiGameScraper.h" #define MDED_RESERVED_ROWS 3 @@ -10,28 +11,19 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mScraperParams(scraperParams), mBox(mWindow, ":/frame.png", 0xAAAAAAFF, 0xCCCCCCFF), - mList(window, Eigen::Vector2i(3, mdd.size() + MDED_RESERVED_ROWS)), + mList(window, Eigen::Vector2i(2, mdd.size() + MDED_RESERVED_ROWS)), mHeader(window), + mMetaDataDecl(mdd), mMetaData(md), mSavedCallback(saveCallback), mDeleteFunc(deleteFunc), mDeleteButton(window), mFetchButton(window), mSaveButton(window) { - LOG(LogInfo) << "Creating GuiMetaDataEd"; - - //set size to 80% by 80% of the window - mSize << Renderer::getScreenWidth() * 0.8f, Renderer::getScreenHeight() * 0.8f; - - //center us - mPosition << (Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2, 0.0f; - + unsigned int sw = Renderer::getScreenWidth(); + unsigned int sh = Renderer::getScreenHeight(); + addChild(&mBox); - mBox.fitTo(mSize); - - //initialize path display + addChild(&mHeader); - mHeader.setPosition(0, 0); - mHeader.setSize(mSize.x(), 0); - mHeader.setCentered(true); mHeader.setText(header); //initialize buttons @@ -39,8 +31,8 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector if(mDeleteFunc) mDeleteButton.setPressedFunc([&] { mDeleteFunc(); delete this; }); - mFetchButton.setText("FETCH", 0x555555FF); - mFetchButton.setPressedFunc([&] { fetch(); }); + mFetchButton.setText("FETCH", 0x00FF00FF); + mFetchButton.setPressedFunc(std::bind(&GuiMetaDataEd::fetch, this)); mSaveButton.setText("SAVE", 0x0000FFFF); mSaveButton.setPressedFunc([&] { save(); delete this; }); @@ -48,12 +40,26 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector //initialize metadata list addChild(&mList); populateList(mdd); - mList.setPosition((mSize.x() - mList.getSize().x()) / 2, mHeader.getSize().y() + 4); + mList.setPosition((sw - mList.getSize().x()) / 2.0f, (sh - mList.getSize().y()) / 2.0f); //center it + mList.resetCursor(); + + mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(12, 12)); + + mHeader.setPosition(mList.getPosition()); + mHeader.setSize(mList.getSize().x(), 0); + mHeader.setCentered(true); } GuiMetaDataEd::~GuiMetaDataEd() { - LOG(LogInfo) << "Deleted GuiMetaDataEd"; + for(auto iter = mLabels.begin(); iter != mLabels.end(); iter++) + { + delete *iter; + } + for(auto iter = mEditors.begin(); iter != mEditors.end(); iter++) + { + delete *iter; + } } void GuiMetaDataEd::populateList(const std::vector& mdd) @@ -71,11 +77,11 @@ void GuiMetaDataEd::populateList(const std::vector& mdd) int y = 0; - //delete button - mList.setEntry(Vector2i(0, y), Vector2i(1, 1), &mDeleteButton, true, ComponentListComponent::AlignCenter); - //fetch button - mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mFetchButton, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(0, y), Vector2i(1, 1), &mFetchButton, true, ComponentListComponent::AlignLeft); + + //delete button + mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mDeleteButton, true, ComponentListComponent::AlignRight); y++; @@ -87,7 +93,7 @@ void GuiMetaDataEd::populateList(const std::vector& mdd) mLabels.push_back(label); GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); - ed->setSize(mSize.x() / 2, ed->getSize().y()); + ed->setSize(Renderer::getScreenWidth() * 0.4f, ed->getSize().y()); ed->setValue(mMetaData->get(iter->key)); mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); mEditors.push_back(ed); @@ -112,11 +118,16 @@ void GuiMetaDataEd::save() void GuiMetaDataEd::fetch() { - Settings::getInstance()->getScraper()->getResultsAsync(mScraperParams, mWindow, std::bind(&GuiMetaDataEd::fetchDone, this, std::placeholders::_1)); + GuiGameScraper* scr = new GuiGameScraper(mWindow, mScraperParams, std::bind(&GuiMetaDataEd::fetchDone, this, std::placeholders::_1)); + mWindow->pushGui(scr); + scr->search(); } -void GuiMetaDataEd::fetchDone(std::vector results) +void GuiMetaDataEd::fetchDone(MetaDataList result) { - + for(unsigned int i = 0; i < mEditors.size(); i++) + { + const std::string key = mMetaDataDecl.at(i).key; + mEditors.at(i)->setValue(result.get(key)); + } } - diff --git a/src/components/GuiMetaDataEd.h b/src/components/GuiMetaDataEd.h index e59424941..7ce136ac1 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/components/GuiMetaDataEd.h @@ -20,7 +20,7 @@ public: private: void save(); void fetch(); - void fetchDone(std::vector results); + void fetchDone(MetaDataList result); void populateList(const std::vector& mdd); @@ -35,6 +35,7 @@ private: std::vector mLabels; std::vector mEditors; + std::vector mMetaDataDecl; MetaDataList* mMetaData; std::function mSavedCallback; std::function mDeleteFunc; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 188ef5803..e0484a53d 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -101,7 +101,7 @@ void TextComponent::onTextChanged() calculateExtent(); std::shared_ptr f = getFont(); - mTextCache = std::unique_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); } void TextComponent::setValue(const std::string& value) diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 99892488f..b828db803 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -8,7 +8,7 @@ class TextComponent : public GuiComponent { public: TextComponent(Window* window); - TextComponent(Window* window, const std::string& text, std::shared_ptr font, Eigen::Vector3f pos, Eigen::Vector2f size); + TextComponent(Window* window, const std::string& text, std::shared_ptr font, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); void setFont(std::shared_ptr font); void onSizeChanged() override; @@ -21,9 +21,9 @@ public: std::string getValue() const override; void setValue(const std::string& value) override; -private: std::shared_ptr getFont() const; - + +private: void calculateExtent(); void onTextChanged(); @@ -32,7 +32,7 @@ private: std::shared_ptr mFont; Eigen::Matrix mAutoCalcExtent; std::string mText; - std::unique_ptr mTextCache; + std::shared_ptr mTextCache; bool mCentered; }; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 102a7c9b9..0da2b3f8c 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -1,5 +1,6 @@ #include "GamesDBScraper.h" #include "../components/AsyncReqComponent.h" +#include "../Log.h" std::vector GamesDBScraper::getResults(ScraperSearchParams params) { @@ -18,6 +19,16 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s { std::vector mdl; + MetaDataList md(params.system->getGameMDD()); + md.set("name", "JUNK RESULT #1"); + md.set("desc", "Black triangles"); + mdl.push_back(md); + + MetaDataList md2(params.system->getGameMDD()); + md2.set("name", "JUNK RESULT #2"); + md2.set("desc", "Test results are very exciting. Sort of. A little. If you squint. A lot."); + mdl.push_back(md2); + return mdl; } @@ -34,4 +45,3 @@ void GamesDBScraper::getResultsAsync(ScraperSearchParams params, Window* window, window->pushGui(req); } - From 9ce511cc7155b0bf24e848125878265275ce641e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 20 Sep 2013 14:55:44 -0500 Subject: [PATCH 032/386] Partial implementation for TheGamesDB scraper. Still needs a way to display error messages. --- src/scrapers/GamesDBScraper.cpp | 55 ++++++++++++++++++++++++++------- src/scrapers/GamesDBScraper.h | 2 +- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 0da2b3f8c..84143d7d8 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -1,40 +1,70 @@ #include "GamesDBScraper.h" #include "../components/AsyncReqComponent.h" #include "../Log.h" +#include "../pugiXML/pugixml.hpp" std::vector GamesDBScraper::getResults(ScraperSearchParams params) { - std::shared_ptr req = makeHttpReq(); + std::shared_ptr req = makeHttpReq(params); while(req->status() == HttpReq::REQ_IN_PROGRESS); return parseReq(params, req); } -std::shared_ptr GamesDBScraper::makeHttpReq() +std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) { - return std::make_shared("cdn.garcya.us", "/wp-content/uploads/2010/04/TD250.jpg"); + std::string path = "/api/GetGame.php?"; + + std::string cleanName = params.nameOverride; + if(cleanName.empty()) + cleanName = params.game->getBaseName(); + + path += "name=" + cleanName; + //platform TODO, should use some params.system get method + + return std::make_shared("thegamesdb.net", path); } std::vector GamesDBScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) { std::vector mdl; - MetaDataList md(params.system->getGameMDD()); - md.set("name", "JUNK RESULT #1"); - md.set("desc", "Black triangles"); - mdl.push_back(md); + if(req->status() != HttpReq::REQ_SUCCESS) + { + LOG(LogError) << "HttpReq error"; + return mdl; + } - MetaDataList md2(params.system->getGameMDD()); - md2.set("name", "JUNK RESULT #2"); - md2.set("desc", "Test results are very exciting. Sort of. A little. If you squint. A lot."); - mdl.push_back(md2); + pugi::xml_document doc; + pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); + if(!parseResult) + { + LOG(LogError) << "Error parsing XML"; + return mdl; + } + + pugi::xml_node data = doc.child("Data"); + + std::string baseImageUrl = data.child("baseImgUrl").text().get(); + + unsigned int resultNum = 0; + pugi::xml_node game = data.child("Game"); + while(game && resultNum < 5) + { + mdl.push_back(MetaDataList(params.system->getGameMDD())); + mdl.back().set("name", game.child("GameTitle").text().get()); + mdl.back().set("desc", game.child("Overview").text().get()); + + resultNum++; + game = game.next_sibling("Game"); + } return mdl; } void GamesDBScraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) { - std::shared_ptr httpreq = makeHttpReq(); + std::shared_ptr httpreq = makeHttpReq(params); AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, [this, params, returnFunc] (std::shared_ptr r) { @@ -45,3 +75,4 @@ void GamesDBScraper::getResultsAsync(ScraperSearchParams params, Window* window, window->pushGui(req); } + diff --git a/src/scrapers/GamesDBScraper.h b/src/scrapers/GamesDBScraper.h index 5b96fb253..f518c246f 100644 --- a/src/scrapers/GamesDBScraper.h +++ b/src/scrapers/GamesDBScraper.h @@ -10,7 +10,7 @@ public: void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) override; private: - std::shared_ptr makeHttpReq(); + std::shared_ptr makeHttpReq(ScraperSearchParams params); std::vector parseReq(ScraperSearchParams params, std::shared_ptr); }; From a3a4636fd57777eeda6d4e5a91b74043523dd7ec Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 20 Sep 2013 18:55:05 -0500 Subject: [PATCH 033/386] Search for box hooked up. Display thumbnails for results. Still need to resolve boxart. --- src/HttpReq.cpp | 33 ++++++++++++++- src/HttpReq.h | 4 ++ src/MetaData.cpp | 1 + src/components/ComponentListComponent.cpp | 15 ++++++- src/components/GuiGameScraper.cpp | 51 +++++++++++++++++++++-- src/components/GuiGameScraper.h | 7 ++++ src/components/ImageComponent.cpp | 10 +++++ src/components/ImageComponent.h | 1 + src/components/TextEditComponent.cpp | 7 ++++ src/components/TextEditComponent.h | 2 + src/resources/TextureResource.cpp | 28 +++++++++++++ src/resources/TextureResource.h | 1 + src/scrapers/GamesDBScraper.cpp | 13 +++++- 13 files changed, 166 insertions(+), 7 deletions(-) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 58c17bb5d..106192109 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -7,6 +7,38 @@ boost::asio::io_service HttpReq::io_service; HttpReq::HttpReq(const std::string& server, const std::string& path) : mResolver(io_service), mSocket(io_service), mStatus(REQ_IN_PROGRESS) +{ + start(server, path); +} + +HttpReq::HttpReq(const std::string& url) + : mResolver(io_service), mSocket(io_service), mStatus(REQ_IN_PROGRESS) +{ + size_t startpos = 0; + + if(url.substr(startpos, 7) == "http://") + startpos = 7; + else if(url.substr(0, 8) == "https://") + startpos = 8; + + if(url.substr(startpos, 4) == "www.") + startpos += 4; + + size_t pathStart = url.find('/', startpos); + std::string server = url.substr(startpos, pathStart - startpos); + std::string path = url.substr(pathStart, std::string::npos); + + start(server, path); +} + +HttpReq::~HttpReq() +{ + mResolver.cancel(); + mSocket.close(); + while(status() == REQ_IN_PROGRESS); //otherwise you get really weird heap-allocation-related crashes +} + +void HttpReq::start(const std::string& server, const std::string& path) { std::ostream req_str(&mRequest); req_str << "GET " << path << " HTTP/1.0\r\n"; @@ -21,7 +53,6 @@ HttpReq::HttpReq(const std::string& server, const std::string& path) boost::asio::placeholders::iterator)); } - void HttpReq::handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) { if (!err) diff --git a/src/HttpReq.h b/src/HttpReq.h index ee8d2b1f7..31d368540 100644 --- a/src/HttpReq.h +++ b/src/HttpReq.h @@ -27,6 +27,9 @@ class HttpReq { public: HttpReq(const std::string& server, const std::string& path); + HttpReq(const std::string& url); + + ~HttpReq(); enum Status { @@ -47,6 +50,7 @@ public: private: static boost::asio::io_service io_service; + void start(const std::string& server, const std::string& path); void handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator); void handleConnect(const boost::system::error_code& err); void handleWriteRequest(const boost::system::error_code& err); diff --git a/src/MetaData.cpp b/src/MetaData.cpp index a9a5d02b2..0eba49ae3 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -19,6 +19,7 @@ std::vector MetaDataList::getDefaultGameMDD() {"name", MD_STRING, ""}, {"desc", MD_MULTILINE_STRING, ""}, {"image", MD_IMAGE_PATH, ""}, + {"thumbnail", MD_IMAGE_PATH, ""}, {"rating", MD_RATING, "0"}, {"userrating", MD_RATING, "0"}, {"playcount", MD_INT, "0"}, diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 5321a0cbe..5b8bf4a12 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -104,6 +104,9 @@ void ComponentListComponent::removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2 if((*iter)->pos.x() >= pos.x() && (*iter)->pos.x() < pos.x() + size.x() && (*iter)->pos.y() >= pos.y() && (*iter)->pos.y() < pos.y() + size.y()) { + if((*iter)->component->getParent() == this) + (*iter)->component->setParent(NULL); + delete *iter; iter = mEntries.erase(iter); }else{ @@ -305,14 +308,22 @@ bool ComponentListComponent::input(InputConfig* config, Input input) void ComponentListComponent::resetCursor() { - if(mEntries.size() == 0) + auto iter = mEntries.begin(); + while(iter != mEntries.end()) + { + if((*iter)->canFocus) + break; + iter++; + } + + if(iter == mEntries.end()) { mCursor = Eigen::Vector2i(-1, -1); return; } const Eigen::Vector2i origCursor = mCursor; - mCursor << mEntries.at(0)->pos[0], mEntries.at(0)->pos[1]; + mCursor << (*iter)->pos[0], (*iter)->pos[1]; onCursorMoved(origCursor, mCursor); } diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index d63070dd6..d8111f7a4 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -13,6 +13,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mResultName(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), mResultInfo(window), mResultDesc(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL)), + mResultThumbnail(window), mSearchLabel(window, "Search for: ", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL)), mSearchText(window), @@ -57,13 +58,16 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mResultName.setColor(0x3B56CCFF); mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentListComponent::AlignLeft); - mResultDesc.setText(params.game->metadata()->get("desc")); mResultDesc.setSize(colWidth, 0); mResultInfo.addChild(&mResultDesc); mResultInfo.setSize(mResultDesc.getSize().x(), mResultDesc.getFont()->getHeight() * 3.0f); mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentListComponent::AlignLeft); + mResultThumbnail.setOrigin(0.5f, 0.5f); + mResultThumbnail.setResize(colWidth, mResultInfo.getSize().y(), false); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mResultThumbnail, false, ComponentListComponent::AlignCenter); + //y = 3 is a spacer row mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentListComponent::AlignLeft); @@ -87,6 +91,8 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mBox.fitTo(mList.getSize(), mList.getPosition()); mResultInfo.setAutoScroll(2200, 0.015f); + + mList.resetCursor(); } void GuiGameScraper::search() @@ -135,7 +141,7 @@ bool GuiGameScraper::input(InputConfig* config, Input input) if(config->isMappedTo("a", input) && input.value != 0) { //if you're on a result - if(getSelectedIndex()) + if(getSelectedIndex() != -1) { mDoneFunc(mScraperResults.at(getSelectedIndex())); delete this; @@ -149,9 +155,10 @@ bool GuiGameScraper::input(InputConfig* config, Input input) return true; } + bool wasEditing = mSearchText.isEditing(); bool ret = GuiComponent::input(config, input); - if(config->isMappedTo("up", input) || config->isMappedTo("down", input)) + if(config->isMappedTo("up", input) || config->isMappedTo("down", input) && input.value != 0) { //update game info pane int i = getSelectedIndex(); @@ -161,8 +168,46 @@ bool GuiGameScraper::input(InputConfig* config, Input input) mResultDesc.setText(mScraperResults.at(i).get("desc")); mResultInfo.setScrollPos(Eigen::Vector2d(0, 0)); mResultInfo.resetAutoScrollTimer(); + + std::string thumb = mScraperResults.at(i).get("thumbnail"); + mResultThumbnail.setImage(""); + if(!thumb.empty()) + mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); + else + mThumbnailReq.reset(); } } + //stopped editing + if(wasEditing && !mSearchText.isEditing()) + { + //update results + search(); + } + return ret; } + +void GuiGameScraper::update(int deltaTime) +{ + if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) + { + updateThumbnail(); + } + + GuiComponent::update(deltaTime); +} + +void GuiGameScraper::updateThumbnail() +{ + if(mThumbnailReq && mThumbnailReq->status() == HttpReq::REQ_SUCCESS) + { + std::string content = mThumbnailReq->getContent(); + mResultThumbnail.setImage(content.data(), content.length()); + }else{ + LOG(LogWarning) << "thumbnail req failed: " << mThumbnailReq->getErrorMsg(); + mResultThumbnail.setImage(""); + } + + mThumbnailReq.reset(); +} diff --git a/src/components/GuiGameScraper.h b/src/components/GuiGameScraper.h index 1f29a5a6f..c70052bed 100644 --- a/src/components/GuiGameScraper.h +++ b/src/components/GuiGameScraper.h @@ -8,6 +8,8 @@ #include "TextEditComponent.h" #include "NinePatchComponent.h" #include "../Settings.h" +#include "../HttpReq.h" +#include "ImageComponent.h" class GuiGameScraper : public GuiComponent { @@ -15,11 +17,13 @@ public: GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc = NULL); bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; void search(); private: int getSelectedIndex(); void onSearchDone(std::vector results); + void updateThumbnail(); ComponentListComponent mList; NinePatchComponent mBox; @@ -29,6 +33,7 @@ private: TextComponent mResultName; ScrollableContainer mResultInfo; TextComponent mResultDesc; + ImageComponent mResultThumbnail; TextComponent mSearchLabel; TextEditComponent mSearchText; @@ -41,4 +46,6 @@ private: std::function mDoneFunc; std::function mSkipFunc; + + std::unique_ptr mThumbnailReq; }; diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 6ed1f7cd1..e86015237 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -81,6 +81,16 @@ void ImageComponent::setImage(std::string path) resize(); } +void ImageComponent::setImage(const char* path, size_t length) +{ + mTexture.reset(); + + mTexture = TextureResource::get(*mWindow->getResourceManager(), ""); + mTexture->initFromMemory(path, length); + + resize(); +} + void ImageComponent::setOrigin(float originX, float originY) { mOrigin << originX, originY; diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index 92509492a..df0d1ece8 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -20,6 +20,7 @@ public: void copyScreen(); //Copy the entire screen into a texture for us to use. void setImage(std::string path); //Loads the image at the given filepath. + void setImage(const char* image, size_t length); //Loads image from memory. void setOrigin(float originX, float originY); //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) void setTiling(bool tile); //Enables or disables tiling. Must be called before loading an image or resizing will be weird. void setResize(float width, float height, bool allowUpscale); diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 7574d2a93..6beb5afee 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -137,6 +137,9 @@ void TextEditComponent::onTextChanged() std::string wrappedText = (isMultiline() ? f->wrapText(mText, mSize.x()) : mText); mTextCache = std::unique_ptr(f->buildTextCache(wrappedText, 0, 0, 0x00000000 | getOpacity())); + + if(mCursor > (int)mText.length()) + mCursor = mText.length(); } void TextEditComponent::onCursorChanged() @@ -215,3 +218,7 @@ bool TextEditComponent::isMultiline() return (getSize().y() > (float)getFont()->getHeight()); } +bool TextEditComponent::isEditing() const +{ + return mEditing; +} diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 7eaef527d..d9117597a 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -23,6 +23,8 @@ public: void setValue(const std::string& val) override; std::string getValue() const override; + bool isEditing() const; + private: void onTextChanged(); void onCursorChanged(); diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index e46992cb2..e0540796a 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -79,6 +79,34 @@ void TextureResource::initFromScreen() mTextureSize[1] = height; } +void TextureResource::initFromMemory(const char* data, size_t length) +{ + deinit(); + + size_t width, height; + std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(data), length, width, height); + + if(imageRGBA.size() == 0) + { + LOG(LogError) << "Could not initialize texture from memory (invalid data)!"; + return; + } + + //now for the openGL texture stuff + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageRGBA.data()); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + mTextureSize << width, height; +} + void TextureResource::deinit() { if(mTextureID != 0) diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index fb72eeb82..85230aff3 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -21,6 +21,7 @@ public: void bind() const; void initFromScreen(); + void initFromMemory(const char* image, size_t length); private: TextureResource(const ResourceManager& rm, const std::string& path); diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 84143d7d8..08e5d03be 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -54,6 +54,18 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s mdl.push_back(MetaDataList(params.system->getGameMDD())); mdl.back().set("name", game.child("GameTitle").text().get()); mdl.back().set("desc", game.child("Overview").text().get()); + pugi::xml_node images = game.child("Images"); + + if(images) + { + pugi::xml_node art = images.find_child_by_attribute("boxart", "side", "front"); + + if(art) + { + mdl.back().set("thumbnail", baseImageUrl + art.attribute("thumb").as_string()); + mdl.back().set("image", baseImageUrl + art.text().get()); + } + } resultNum++; game = game.next_sibling("Game"); @@ -75,4 +87,3 @@ void GamesDBScraper::getResultsAsync(ScraperSearchParams params, Window* window, window->pushGui(req); } - From 8a0eff8ef62065165933e470091cfd632b9b21db Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 20 Sep 2013 22:06:50 -0500 Subject: [PATCH 034/386] Fix wrapping text that ends with a newline. --- src/Font.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Font.cpp b/src/Font.cpp index 57a5eaf64..329b6c12e 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -415,7 +415,7 @@ std::string Font::wrapText(std::string text, float xLen) const } } - if(!out.empty()) //chop off the last newline + if(!out.empty() && newline == std::string::npos) //chop off the last newline if we added one out.erase(out.length() - 1, 1); return out; From e65d94fe54e03f420035d7ebb55fc5d1896f077b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 22 Sep 2013 19:40:51 -0500 Subject: [PATCH 035/386] Initialize std::functions with nullptr instead of NULL. --- src/components/AsyncReqComponent.h | 2 +- src/components/GuiGameScraper.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AsyncReqComponent.h b/src/components/AsyncReqComponent.h index 47b43fdfb..55a5624f7 100644 --- a/src/components/AsyncReqComponent.h +++ b/src/components/AsyncReqComponent.h @@ -24,7 +24,7 @@ class AsyncReqComponent : public GuiComponent { public: - AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel = NULL); + AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel = nullptr); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; diff --git a/src/components/GuiGameScraper.h b/src/components/GuiGameScraper.h index c70052bed..db8d0191f 100644 --- a/src/components/GuiGameScraper.h +++ b/src/components/GuiGameScraper.h @@ -14,7 +14,7 @@ class GuiGameScraper : public GuiComponent { public: - GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc = NULL); + GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc = nullptr); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; From 08048945bafce4bccce244fe24862f0f08f2758c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 23 Sep 2013 13:37:40 -0500 Subject: [PATCH 036/386] Rating star --- data/resources/star_filled.png | Bin 0 -> 3130 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/resources/star_filled.png diff --git a/data/resources/star_filled.png b/data/resources/star_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..2859a54c27640b1b9ae7ea10bc749e8332e51682 GIT binary patch literal 3130 zcmV-A48`+_P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}00041NkljN7Xe|ZkTuEpOOgs_X{pG<<-MfE46Fm_P==~t2yAC>gW&wWQ&9@vfSOmuqpV!Z07*qoM6N<$g2e2;qW}N^ literal 0 HcmV?d00001 From 964d5afc56f974557c742556210ff079a8b7130b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 23 Sep 2013 14:58:28 -0500 Subject: [PATCH 037/386] Work on RatingComponent --- CMakeLists.txt | 2 + src/components/GuiGameList.cpp | 4 +- src/components/GuiGameList.h | 2 + src/components/RatingComponent.cpp | 93 ++++++++++++++++++++++++++++++ src/components/RatingComponent.h | 31 ++++++++++ 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/components/RatingComponent.cpp create mode 100644 src/components/RatingComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 26a3f7759..88b9a6e4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h @@ -213,6 +214,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 138a5ebcf..43da12d63 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -28,6 +28,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mList(window, 0.0f, 0.0f, Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), mScreenshot(window), mDescription(window), + mRating(window), mDescContainer(window), mTransitionImage(window, 0.0f, 0.0f, "", (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), true), mHeaderText(mWindow), @@ -50,7 +51,8 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), } mImageAnimation.addChild(&mScreenshot); - mDescContainer.addChild(&mDescription); + mDescContainer.addChild(&mRating); + //mDescContainer.addChild(&mDescription); //scale delay with screen width (higher width = more text per line) //the scroll speed is automatically scaled by component size diff --git a/src/components/GuiGameList.h b/src/components/GuiGameList.h index dda1e8088..1e03e532d 100644 --- a/src/components/GuiGameList.h +++ b/src/components/GuiGameList.h @@ -13,6 +13,7 @@ #include "../GameData.h" #include "../FolderData.h" #include "ScrollableContainer.h" +#include "RatingComponent.h" //This is where the magic happens - GuiGameList is the parent of almost every graphical element in ES at the moment. //It has a TextListComponent child that handles the game list, a ThemeComponent that handles the theming system, and an ImageComponent for game images. @@ -60,6 +61,7 @@ private: TextListComponent mList; ImageComponent mScreenshot; TextComponent mDescription; + RatingComponent mRating; ScrollableContainer mDescContainer; AnimationComponent mImageAnimation; ThemeComponent* mTheme; diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp new file mode 100644 index 000000000..1db3ec1cf --- /dev/null +++ b/src/components/RatingComponent.cpp @@ -0,0 +1,93 @@ +#include "RatingComponent.h" +#include "../Renderer.h" +#include "../Window.h" + +RatingComponent::RatingComponent(Window* window) : GuiComponent(window) +{ + mFilledTexture = TextureResource::get(*window->getResourceManager(), ":/button.png"); + mUnfilledTexture = TextureResource::get(*window->getResourceManager(), ":/button.png"); + mValue = 0.5f; + mSize << 64 * 5.0f, 64; + updateVertices(); +} + +void RatingComponent::setValue(const std::string& value) +{ + mValue = stof(value); + updateVertices(); +} + +std::string RatingComponent::getValue() const +{ + return std::to_string(mValue); +} + +void RatingComponent::onSizeChanged() +{ + updateVertices(); +} + +void RatingComponent::updateVertices() +{ + const float numStars = 5.0f; + + float h = getSize().y(); + float w = h * mValue * numStars; + float fw = h * numStars; + + mVertices[0].pos << 0, 0; + mVertices[0].tex << 0, 0; + mVertices[1].pos << w, h; + mVertices[1].tex << mValue * numStars, 1.0f; + mVertices[2].pos << 0, h; + mVertices[2].tex << 0, 1.0f; + + mVertices[3] = mVertices[0]; + mVertices[4].pos << w, 0; + mVertices[5].tex << mValue * numStars, 0; + mVertices[5] = mVertices[1]; + + mVertices[6] = mVertices[4]; + mVertices[7].pos << fw, h; + mVertices[7].tex << numStars, 1.0f; + mVertices[8] = mVertices[1]; + + mVertices[9] = mVertices[6]; + mVertices[10].pos << fw, 0; + mVertices[10].tex << numStars, 0; + mVertices[11] = mVertices[7]; +} + +void RatingComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + Renderer::setMatrix(trans); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + //glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); + //glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); + + mFilledTexture->bind(); + glDrawArrays(GL_TRIANGLES, 0, 6); + + mUnfilledTexture->bind(); + glDrawArrays(GL_TRIANGLES, 6, 6); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + //glDisableClientState(GL_COLOR_ARRAY); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + + renderChildren(trans); +} + diff --git a/src/components/RatingComponent.h b/src/components/RatingComponent.h new file mode 100644 index 000000000..041f1d98b --- /dev/null +++ b/src/components/RatingComponent.h @@ -0,0 +1,31 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../resources/TextureResource.h" + +class RatingComponent : public GuiComponent +{ +public: + RatingComponent(Window* window); + + std::string getValue() const override; + void setValue(const std::string& value) override; + + void render(const Eigen::Affine3f& parentTrans); + + void onSizeChanged() override; +private: + void updateVertices(); + + float mValue; + + struct Vertex + { + Eigen::Vector2f pos; + Eigen::Vector2f tex; + } mVertices[12]; + + std::shared_ptr mFilledTexture; + std::shared_ptr mUnfilledTexture; +}; + From 51e797bbd0703a2821dd17ba5c62bf2f2ab16ec3 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 23 Sep 2013 21:02:41 -0500 Subject: [PATCH 038/386] RatingComponent mostly working. --- CMakeLists.txt | 2 + data/ResourceUtil.cpp | 10 +- data/Resources.h | 6 + data/converted/star_filled_png.cpp | 320 +++++++++++++++++++++++++++ data/converted/star_unfilled_png.cpp | 320 +++++++++++++++++++++++++++ data/resources/star_filled.png | Bin 3130 -> 3128 bytes data/resources/star_unfilled.png | Bin 0 -> 3130 bytes src/FolderData.cpp | 12 - src/FolderData.h | 1 - src/MetaData.cpp | 1 - src/components/GuiGameList.cpp | 77 ++++--- src/components/GuiGameList.h | 2 +- src/components/RatingComponent.cpp | 45 ++-- src/scrapers/GamesDBScraper.cpp | 1 + 14 files changed, 718 insertions(+), 79 deletions(-) create mode 100644 data/converted/star_filled_png.cpp create mode 100644 data/converted/star_unfilled_png.cpp create mode 100644 data/resources/star_unfilled.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 88b9a6e4e..9661f97f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,6 +241,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_glow_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 444074814..2364250b1 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,12 +2,14 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 6; +const size_t res2hNrOfFiles = 8; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/button.png", button_png_size, button_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, + {":/star_filled.png", star_filled_png_size, star_filled_png_data}, + {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, {":/textbox.png", textbox_png_size, textbox_png_data}, {":/textbox_glow.png", textbox_glow_png_size, textbox_glow_png_data} }; @@ -17,8 +19,10 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/ES_logo_16.png", res2hFiles[1]), std::make_pair(":/ES_logo_32.png", res2hFiles[2]), std::make_pair(":/frame.png", res2hFiles[3]), - std::make_pair(":/textbox.png", res2hFiles[4]), - std::make_pair(":/textbox_glow.png", res2hFiles[5]) + std::make_pair(":/star_filled.png", res2hFiles[4]), + std::make_pair(":/star_unfilled.png", res2hFiles[5]), + std::make_pair(":/textbox.png", res2hFiles[6]), + std::make_pair(":/textbox_glow.png", res2hFiles[7]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 000c14895..efc90b41b 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -17,6 +17,12 @@ extern const unsigned char ES_logo_32_png_data[]; extern const size_t frame_png_size; extern const unsigned char frame_png_data[]; +extern const size_t star_filled_png_size; +extern const unsigned char star_filled_png_data[]; + +extern const size_t star_unfilled_png_size; +extern const unsigned char star_unfilled_png_data[]; + extern const size_t textbox_png_size; extern const unsigned char textbox_png_data[]; diff --git a/data/converted/star_filled_png.cpp b/data/converted/star_filled_png.cpp new file mode 100644 index 000000000..38462b66f --- /dev/null +++ b/data/converted/star_filled_png.cpp @@ -0,0 +1,320 @@ +//this file was auto-generated from "star_filled.png" by res2h + +#include "../Resources.h" + +const size_t star_filled_png_size = 3128; +const unsigned char star_filled_png_data[3128] = { + 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,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0x53,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0x49,0x0e,0xc3, + 0x30,0x0c,0x03,0x45,0x21,0xff,0x7f,0x65,0xff,0xc1, + 0xde,0x03,0x14,0xcd,0x62,0x6d,0x96,0x7c,0x6e,0x11, + 0x6b,0x48,0xaa,0xb2,0x53,0xf0,0x23,0x91,0x8b,0x22, + 0x82,0xc8,0x0d,0xa8,0xc4,0x2f,0x76,0x07,0x10,0x0a, + 0x41,0x13,0x15,0xcd,0xce,0x0e,0x68,0x1f,0x81,0x76, + 0x00,0x98,0xa5,0x17,0x8c,0x03,0x06,0x40,0xb3,0xdf, + 0xfd,0x0a,0x0e,0xe0,0xce,0x00,0x38,0x11,0x18,0x00, + 0xb9,0x9c,0xa2,0x9d,0xed,0x3f,0x11,0x18,0x00,0x7e, + 0x00,0x98,0x35,0x32,0xed,0x1d,0x70,0x9c,0x48,0xa3, + 0x23,0x80,0x27,0xb6,0x83,0x93,0x95,0xcd,0xef,0x0c, + 0x0f,0xe3,0x4c,0xa7,0x77,0x94,0x75,0x0f,0x60,0xb5, + 0x08,0x54,0x98,0x0a,0xb1,0x1a,0x00,0xaa,0xa8,0x65, + 0x11,0xbf,0xe3,0xf4,0x85,0x2a,0x10,0x96,0x81,0xd2, + 0x6a,0x4d,0xcb,0xa3,0x09,0xa2,0x3b,0x80,0x2e,0x10, + 0x20,0x22,0xd0,0x7f,0x1f,0xd8,0xb8,0xf8,0xcb,0x73, + 0x00,0x76,0x2d,0xfe,0xce,0x20,0x84,0x5d,0x2c,0xff, + 0x66,0x12,0xc4,0x2e,0xaa,0xbf,0x19,0x85,0xb1,0x83, + 0xea,0x6f,0xcf,0x02,0x55,0x9a,0xe3,0xa5,0x3d,0xaa, + 0xf5,0x03,0x32,0xaa,0xbe,0xf2,0x34,0x88,0x8a,0xaa, + 0xaf,0x3e,0x0e,0xa3,0x6a,0xf1,0x2b,0xef,0x03,0x50, + 0xc5,0xf2,0x56,0x00,0x4a,0xa9,0x6e,0x01,0x80,0x15, + 0x8b,0xdf,0xc1,0x01,0x03,0x20,0x03,0x00,0x8e,0x03, + 0x62,0x16,0x27,0x02,0x09,0x00,0x70,0x7a,0x40,0xf1, + 0x18,0x68,0x67,0xf5,0xa7,0x07,0x24,0x00,0x10,0x7e, + 0xb7,0xa0,0x81,0xf6,0xc7,0xa2,0xb1,0x96,0xd5,0x1c, + 0xf0,0x4b,0x75,0x74,0x88,0x00,0xb2,0x45,0x42,0x9d, + 0x2c,0x77,0xb7,0x30,0x78,0xc5,0x40,0x13,0xa8,0x6e, + 0x7a,0xdc,0x8d,0x04,0xb0,0xc2,0xce,0xc8,0x06,0x20, + 0xe2,0xbf,0x41,0x57,0x41,0x32,0x8b,0x03,0x90,0x2c, + 0x4a,0x6e,0x00,0x3c,0x3a,0x38,0x22,0x01,0x30,0xba, + 0x61,0x59,0x3c,0x4b,0x0b,0xa8,0x7e,0x07,0x02,0x3d, + 0x01,0x44,0xbf,0x10,0x59,0x02,0x5f,0x1f,0xd8,0x3f, + 0xdb,0xcb,0xd1,0x57,0x7b,0xf9,0x0e,0x00,0xad,0xa2, + 0x2a,0x96,0x54,0x26,0x5d,0xab,0x00,0x00,0x00,0x00, + 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/star_unfilled_png.cpp b/data/converted/star_unfilled_png.cpp new file mode 100644 index 000000000..301d26cb9 --- /dev/null +++ b/data/converted/star_unfilled_png.cpp @@ -0,0 +1,320 @@ +//this file was auto-generated from "star_unfilled.png" by res2h + +#include "../Resources.h" + +const size_t star_unfilled_png_size = 3130; +const unsigned char star_unfilled_png_data[3130] = { + 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,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0x55,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0x51,0x0e,0xc3, + 0x30,0x08,0x43,0x31,0xea,0x11,0x77,0xb3,0x1d,0xd8, + 0xfb,0xaf,0x34,0xad,0x5d,0x21,0x40,0x20,0xdf,0x9b, + 0x1a,0x9e,0x6d,0x46,0xd2,0x41,0x5e,0x6f,0x09,0x5c, + 0x14,0x11,0x44,0x6e,0x40,0x25,0x7e,0xb1,0x3b,0x80, + 0x50,0x08,0x9a,0xa8,0x68,0x76,0x76,0x40,0xfb,0x08, + 0xb4,0x03,0xc0,0x2c,0xbd,0x60,0x1c,0x30,0x00,0x9a, + 0xfd,0xee,0x57,0x70,0x00,0x77,0x06,0xc0,0x89,0xc0, + 0x00,0xc8,0xe5,0x14,0xed,0x6c,0xff,0x89,0xc0,0x00, + 0x58,0x07,0x80,0x59,0x23,0xd3,0xde,0x01,0xc7,0x89, + 0x34,0x3a,0x02,0xf8,0xc7,0x76,0x58,0x64,0x65,0xf7, + 0x3b,0xc3,0xc3,0x39,0xd3,0xe9,0x1d,0xe5,0xdd,0x03, + 0x58,0x2d,0x02,0x15,0xa6,0x42,0x58,0x03,0x40,0x15, + 0xb5,0x3c,0xe2,0x77,0x9c,0xbe,0x50,0x05,0x82,0x19, + 0x28,0xad,0xd6,0xb4,0x56,0x34,0x41,0x74,0x07,0xd0, + 0x05,0x02,0x44,0x04,0xfa,0xeb,0x03,0x1b,0x17,0x7f, + 0x79,0x0e,0xc0,0xae,0xc5,0xdf,0x19,0x84,0xb0,0x8b, + 0xe5,0x9f,0x4c,0x82,0xd8,0x45,0xf5,0x27,0xa3,0x30, + 0x76,0x50,0xfd,0xe9,0x59,0xa0,0x4a,0x73,0xbc,0xb4, + 0x47,0xf5,0x7e,0x40,0x46,0xd5,0x2d,0x4f,0x83,0xa8, + 0xa8,0xba,0xf5,0x71,0x18,0x55,0x8b,0xb7,0xbc,0x0f, + 0x40,0x15,0xcb,0x7b,0x01,0x28,0xa5,0xba,0x07,0x00, + 0x56,0x2c,0x7e,0x07,0x07,0x0c,0x80,0x0c,0x00,0x38, + 0x0e,0x88,0x59,0x9c,0x08,0x24,0x00,0xc0,0xe9,0x01, + 0xc5,0x63,0xa0,0x9d,0xd5,0x9f,0x1e,0x90,0x00,0x40, + 0xf8,0xdd,0x82,0x06,0xda,0x1f,0x46,0x63,0x2d,0xab, + 0x39,0xe0,0x9b,0xea,0xe8,0x10,0x01,0x64,0x8b,0x84, + 0x2e,0xb2,0xdc,0xdd,0xc2,0xb0,0x2a,0x06,0x9a,0x40, + 0x75,0xd7,0xe3,0x6e,0x24,0x00,0x0b,0x3b,0x23,0x1b, + 0x80,0x88,0xff,0x06,0x5d,0x05,0xc9,0x2c,0x0e,0x40, + 0xb2,0x28,0x2d,0x03,0xb0,0xa2,0x83,0x23,0x12,0x00, + 0xa3,0x1b,0x96,0xc7,0xb3,0xb4,0x80,0xea,0x77,0x20, + 0x70,0x25,0x80,0xe8,0x17,0x22,0x26,0xf0,0xf5,0x0f, + 0xfb,0x67,0x7b,0x39,0xfa,0x68,0x2f,0x9f,0x01,0x00, + 0x6b,0x57,0x29,0x9a,0x56,0xe3,0x24,0xcd,0x00,0x00, + 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/star_filled.png b/data/resources/star_filled.png index 2859a54c27640b1b9ae7ea10bc749e8332e51682..c26576948b81bbb1aef142a8f3e378749e602ded 100644 GIT binary patch delta 370 zcmV-&0ge8;7`Pa)&3bsKhUJ2M`KD6BW(Q4rm{Nb^w^A7mNc2K(pWd3J&1T05}mC0J)r^o$Wsn z7yy0%m^Cu(9dMjTqa%PPwu6(E&F>5k<4mV_lywhawFp$03bB700IH~E5x?W~g(?u1 zfzoPC%cBXRJAf__AR^FzAK19~%X0vBE&k3Rgk3EEW)j3Ms=pb9v4iSw&jMAN@_HdV!p_JBAmYD4 zS3xq11CT6AZU8(wI3fWsx?x#7OADxe2Le3-M86PO0$(54KikXES9|#m0Ii}bmQ*HP Qs{jB107*qoM6N<$f*oO*x&QzG delta 372 zcmV-)0gL{)7`hm+&G+gi?_TFKo!e-0Vt)q2LM(qeg_8(fD8aQ4v1Nt2qXZ&=>f%K zpqUSV;C4lG`A|~+l5Bq0(Ir?ZXp8)`CS1FoS S<0Q=h0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}00041NkljN7Xe|ZkTuEpOOgs_X{pG<<-MfE46Fm_P==~t2yAC>gW&wWQ&9@vfSOmuqpV!Z07*qoM6N<$g2e2;qW}N^ literal 0 HcmV?d00001 diff --git a/src/FolderData.cpp b/src/FolderData.cpp index 72b093405..f6caea59a 100644 --- a/src/FolderData.cpp +++ b/src/FolderData.cpp @@ -20,7 +20,6 @@ FolderData::FolderData(SystemData* system, std::string path, std::string name) if (sortStateNameMap.empty()) { sortStateNameMap[compareFileName] = "file name"; sortStateNameMap[compareRating] = "rating"; - sortStateNameMap[compareUserRating] = "user rating"; sortStateNameMap[compareTimesPlayed] = "times played"; sortStateNameMap[compareLastPlayed] = "last time played"; } @@ -87,17 +86,6 @@ bool FolderData::compareRating(const FileData* file1, const FileData* file2) return false; } -bool FolderData::compareUserRating(const FileData* file1, const FileData* file2) -{ - //we need game data. try to cast - const GameData * game1 = dynamic_cast(file1); - const GameData * game2 = dynamic_cast(file2); - if (game1 != nullptr && game2 != nullptr) { - return const_cast(game1)->metadata()->getFloat("userrating") < const_cast(game2)->metadata()->getFloat("userrating"); - } - return false; -} - bool FolderData::compareTimesPlayed(const FileData* file1, const FileData* file2) { //we need game data. try to cast diff --git a/src/FolderData.h b/src/FolderData.h index 202ea8211..2d073b074 100644 --- a/src/FolderData.h +++ b/src/FolderData.h @@ -46,7 +46,6 @@ public: void sort(ComparisonFunction & comparisonFunction = compareFileName, bool ascending = true); static bool compareFileName(const FileData* file1, const FileData* file2); static bool compareRating(const FileData* file1, const FileData* file2); - static bool compareUserRating(const FileData* file1, const FileData* file2); static bool compareTimesPlayed(const FileData* file1, const FileData* file2); static bool compareLastPlayed(const FileData* file1, const FileData* file2); static std::string getSortStateName(ComparisonFunction & comparisonFunction = compareFileName, bool ascending = true); diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 0eba49ae3..161fc9bea 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -21,7 +21,6 @@ std::vector MetaDataList::getDefaultGameMDD() {"image", MD_IMAGE_PATH, ""}, {"thumbnail", MD_IMAGE_PATH, ""}, {"rating", MD_RATING, "0"}, - {"userrating", MD_RATING, "0"}, {"playcount", MD_INT, "0"}, {"lastplayed", MD_TIME, "0"} }; diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 43da12d63..a6746c571 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -40,10 +40,8 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), if (sortStates.empty()) { sortStates.push_back(FolderData::SortState(FolderData::compareFileName, true, "file name, ascending")); sortStates.push_back(FolderData::SortState(FolderData::compareFileName, false, "file name, descending")); - sortStates.push_back(FolderData::SortState(FolderData::compareRating, true, "database rating, ascending")); - sortStates.push_back(FolderData::SortState(FolderData::compareRating, false, "database rating, descending")); - sortStates.push_back(FolderData::SortState(FolderData::compareUserRating, true, "your rating, ascending")); - sortStates.push_back(FolderData::SortState(FolderData::compareUserRating, false, "your rating, descending")); + sortStates.push_back(FolderData::SortState(FolderData::compareRating, true, "rating, ascending")); + sortStates.push_back(FolderData::SortState(FolderData::compareRating, false, "rating, descending")); sortStates.push_back(FolderData::SortState(FolderData::compareTimesPlayed, true, "played least often")); sortStates.push_back(FolderData::SortState(FolderData::compareTimesPlayed, false, "played most often")); sortStates.push_back(FolderData::SortState(FolderData::compareLastPlayed, true, "played least recently")); @@ -52,7 +50,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mImageAnimation.addChild(&mScreenshot); mDescContainer.addChild(&mRating); - //mDescContainer.addChild(&mDescription); + mDescContainer.addChild(&mDescription); //scale delay with screen width (higher width = more text per line) //the scroll speed is automatically scaled by component size @@ -232,7 +230,7 @@ bool GuiGameList::input(InputConfig* config, Input input) if(input.value == 0) updateDetailData(); else - clearDetailData(); + hideDetailData(); } return true; } @@ -364,49 +362,50 @@ void GuiGameList::updateTheme() void GuiGameList::updateDetailData() { - if(!isDetailed()) + if(!isDetailed() || !mList.getSelectedObject() || mList.getSelectedObject()->isFolder()) { - mScreenshot.setImage(""); - mDescription.setText(""); + hideDetailData(); }else{ - //if we've selected a game - if(mList.getSelectedObject() && !mList.getSelectedObject()->isFolder()) - { - GameData* game = (GameData*)mList.getSelectedObject(); - //set image to either "not found" image or metadata image - if(game->metadata()->get("image").empty()) - mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); - else - mScreenshot.setImage(game->metadata()->get("image")); + if(mDescContainer.getParent() != this) + addChild(&mDescContainer); - Eigen::Vector3f imgOffset = Eigen::Vector3f(Renderer::getScreenWidth() * 0.10f, 0, 0); - mScreenshot.setPosition(getImagePos() - imgOffset); + GameData* game = (GameData*)mList.getSelectedObject(); + //set image to either "not found" image or metadata image + if(game->metadata()->get("image").empty()) + mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); + else + mScreenshot.setImage(game->metadata()->get("image")); - mImageAnimation.fadeIn(35); - mImageAnimation.move(imgOffset.x(), imgOffset.y(), 20); + Eigen::Vector3f imgOffset = Eigen::Vector3f(Renderer::getScreenWidth() * 0.10f, 0, 0); + mScreenshot.setPosition(getImagePos() - imgOffset); - mDescContainer.setPosition(Eigen::Vector3f(Renderer::getScreenWidth() * 0.03f, getImagePos().y() + mScreenshot.getSize().y() + 12, 0)); - mDescContainer.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), Renderer::getScreenHeight() - mDescContainer.getPosition().y())); - mDescContainer.setScrollPos(Eigen::Vector2d(0, 0)); - mDescContainer.resetAutoScrollTimer(); + mImageAnimation.fadeIn(35); + mImageAnimation.move(imgOffset.x(), imgOffset.y(), 20); - mDescription.setPosition(0, 0); - mDescription.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), 0)); - mDescription.setText(game->metadata()->get("desc")); - }else{ - mScreenshot.setImage(""); - mDescription.setText(""); - } + mDescContainer.setPosition(Eigen::Vector3f(Renderer::getScreenWidth() * 0.03f, getImagePos().y() + mScreenshot.getSize().y() + 12, 0)); + mDescContainer.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), Renderer::getScreenHeight() - mDescContainer.getPosition().y())); + mDescContainer.setScrollPos(Eigen::Vector2d(0, 0)); + mDescContainer.resetAutoScrollTimer(); + + const float colwidth = mDescContainer.getSize().x(); + float ratingHeight = colwidth * 0.3f / 5.0f; + mRating.setSize(ratingHeight * 5.0f, ratingHeight); + + mRating.setPosition(colwidth - mRating.getSize().x() - 12, 0); + mRating.setValue(game->metadata()->get("rating")); + + mDescription.setPosition(0, mRating.getSize().y()); + mDescription.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), 0)); + mDescription.setText(game->metadata()->get("desc")); } } -void GuiGameList::clearDetailData() +void GuiGameList::hideDetailData() { - if(isDetailed()) - { - mImageAnimation.fadeOut(35); - mDescription.setText(""); - } + if(mDescContainer.getParent() == this) + removeChild(&mDescContainer); + + mImageAnimation.fadeOut(35); } GuiGameList* GuiGameList::create(Window* window) diff --git a/src/components/GuiGameList.h b/src/components/GuiGameList.h index 1e03e532d..77539e6af 100644 --- a/src/components/GuiGameList.h +++ b/src/components/GuiGameList.h @@ -48,7 +48,7 @@ public: private: void updateList(); void updateTheme(); - void clearDetailData(); + void hideDetailData(); void doTransition(int dir); std::string getThemeFile(); diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 1db3ec1cf..01dd40b03 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -4,8 +4,8 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { - mFilledTexture = TextureResource::get(*window->getResourceManager(), ":/button.png"); - mUnfilledTexture = TextureResource::get(*window->getResourceManager(), ":/button.png"); + mFilledTexture = TextureResource::get(*window->getResourceManager(), ":/star_filled.png"); + mUnfilledTexture = TextureResource::get(*window->getResourceManager(), ":/star_unfilled.png"); mValue = 0.5f; mSize << 64 * 5.0f, 64; updateVertices(); @@ -14,12 +14,16 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window) void RatingComponent::setValue(const std::string& value) { mValue = stof(value); + if(mValue > 1.0f) + mValue = 1.0f; + else if(mValue < 0.0f) + mValue = 0.0f; updateVertices(); } std::string RatingComponent::getValue() const { - return std::to_string(mValue); + return std::to_string((long double)mValue); } void RatingComponent::onSizeChanged() @@ -31,30 +35,30 @@ void RatingComponent::updateVertices() { const float numStars = 5.0f; - float h = getSize().y(); - float w = h * mValue * numStars; - float fw = h * numStars; + const float h = getSize().y(); + const float w = h * mValue * numStars; + const float fw = h * numStars; - mVertices[0].pos << 0, 0; - mVertices[0].tex << 0, 0; + mVertices[0].pos << 0.0f, 0.0f; + mVertices[0].tex << 0.0f, 1.0f; mVertices[1].pos << w, h; - mVertices[1].tex << mValue * numStars, 1.0f; - mVertices[2].pos << 0, h; - mVertices[2].tex << 0, 1.0f; + mVertices[1].tex << mValue * numStars, 0.0f; + mVertices[2].pos << 0.0f, h; + mVertices[2].tex << 0.0f, 0.0f; mVertices[3] = mVertices[0]; - mVertices[4].pos << w, 0; - mVertices[5].tex << mValue * numStars, 0; + mVertices[4].pos << w, 0.0f; + mVertices[4].tex << mValue * numStars, 1.0f; mVertices[5] = mVertices[1]; mVertices[6] = mVertices[4]; mVertices[7].pos << fw, h; - mVertices[7].tex << numStars, 1.0f; + mVertices[7].tex << numStars, 0.0f; mVertices[8] = mVertices[1]; mVertices[9] = mVertices[6]; - mVertices[10].pos << fw, 0; - mVertices[10].tex << numStars, 0; + mVertices[10].pos << fw, 0.0f; + mVertices[10].tex << numStars, 1.0f; mVertices[11] = mVertices[7]; } @@ -69,12 +73,10 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); - //glEnableClientState(GL_COLOR_ARRAY); - + glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); - //glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); - + mFilledTexture->bind(); glDrawArrays(GL_TRIANGLES, 0, 6); @@ -83,8 +85,7 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); - //glDisableClientState(GL_COLOR_ARRAY); - + glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 08e5d03be..d44b4d390 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -54,6 +54,7 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s mdl.push_back(MetaDataList(params.system->getGameMDD())); mdl.back().set("name", game.child("GameTitle").text().get()); mdl.back().set("desc", game.child("Overview").text().get()); + mdl.back().set("releasedate", game.child("ReleaseDate").text().get()); pugi::xml_node images = game.child("Images"); if(images) From 57eb9849ffe49097e01077ec10141a9a928164a6 Mon Sep 17 00:00:00 2001 From: Juan Pablo Date: Tue, 24 Sep 2013 01:58:59 -0300 Subject: [PATCH 039/386] Renamed/moved maximum scraper results constant to be used in scraper --- src/components/GuiGameScraper.cpp | 8 +++----- src/components/GuiGameScraper.h | 2 ++ src/scrapers/GamesDBScraper.cpp | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index d8111f7a4..e15eab576 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -4,10 +4,8 @@ #include "../scrapers/Scraper.h" #include "../Settings.h" -#define RESULT_COUNT 5 - GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 7 + RESULT_COUNT)), + mList(window, Eigen::Vector2i(2, 7 + MAX_SCRAPER_RESULTS)), mBox(window, ":/frame.png"), mHeader(window, params.game->getBaseName(), Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), mResultName(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), @@ -78,8 +76,8 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: //y = 5 is a spacer row std::shared_ptr font = Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); - mResultNames.reserve(RESULT_COUNT); - for(int i = 0; i < RESULT_COUNT; i ++) + mResultNames.reserve(MAX_SCRAPER_RESULTS); + for(int i = 0; i < MAX_SCRAPER_RESULTS; i ++) { mResultNames.push_back(TextComponent(mWindow, "RESULT...", font)); mResultNames.at(i).setColor(0x111111FF); diff --git a/src/components/GuiGameScraper.h b/src/components/GuiGameScraper.h index db8d0191f..1a268a114 100644 --- a/src/components/GuiGameScraper.h +++ b/src/components/GuiGameScraper.h @@ -11,6 +11,8 @@ #include "../HttpReq.h" #include "ImageComponent.h" +#define MAX_SCRAPER_RESULTS 5 + class GuiGameScraper : public GuiComponent { public: diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index d44b4d390..a0cb66915 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -1,4 +1,5 @@ #include "GamesDBScraper.h" +#include "../components/GuiGameScraper.h" #include "../components/AsyncReqComponent.h" #include "../Log.h" #include "../pugiXML/pugixml.hpp" @@ -49,7 +50,7 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s unsigned int resultNum = 0; pugi::xml_node game = data.child("Game"); - while(game && resultNum < 5) + while(game && resultNum < MAX_SCRAPER_RESULTS) { mdl.push_back(MetaDataList(params.system->getGameMDD())); mdl.back().set("name", game.child("GameTitle").text().get()); From 3e1ecb4a844154245471794e716e2dfdad864b3a Mon Sep 17 00:00:00 2001 From: Juan Pablo Date: Tue, 24 Sep 2013 02:20:53 -0300 Subject: [PATCH 040/386] Added a method to clean filenames before scraping --- src/GameData.cpp | 6 ++++++ src/GameData.h | 1 + src/components/GuiGameScraper.cpp | 2 +- src/scrapers/GamesDBScraper.cpp | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/GameData.cpp b/src/GameData.cpp index 976d3e058..d6f11ca3e 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -1,5 +1,6 @@ #include "GameData.h" #include +#include #include #include #include @@ -57,6 +58,11 @@ std::string GameData::getBaseName() const return mBaseName; } +std::string GameData::getCleanName() const +{ + return regex_replace(mBaseName, boost::regex("\\((.*)\\)|\\[(.*)\\]"), ""); +} + void GameData::incTimesPlayed() { int timesPlayed = metadata()->getInt("playcount"); diff --git a/src/GameData.h b/src/GameData.h index e67ec2e1d..6f40c798b 100644 --- a/src/GameData.h +++ b/src/GameData.h @@ -21,6 +21,7 @@ public: std::string getBashPath() const; std::string getBaseName() const; + std::string getCleanName() const; bool isFolder() const override; diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index e15eab576..701cafb95 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -69,7 +69,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: //y = 3 is a spacer row mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentListComponent::AlignLeft); - mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : params.game->getBaseName()); + mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : params.game->getCleanName()); mSearchText.setSize(colWidth * 2 - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentListComponent::AlignRight); diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index a0cb66915..fc018493c 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -18,7 +18,7 @@ std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) std::string cleanName = params.nameOverride; if(cleanName.empty()) - cleanName = params.game->getBaseName(); + cleanName = params.game->getCleanName(); path += "name=" + cleanName; //platform TODO, should use some params.system get method From 2999a8068a882b32374d74cf725510fe12c23a41 Mon Sep 17 00:00:00 2001 From: Juan Pablo Date: Tue, 24 Sep 2013 04:02:14 -0300 Subject: [PATCH 041/386] Properly encoded parameters. Otherwise the query gets truncated. --- src/HttpReq.cpp | 22 ++++++++++++++++++++++ src/HttpReq.h | 2 ++ src/scrapers/GamesDBScraper.cpp | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 106192109..4cd4a46ec 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -5,6 +5,28 @@ boost::asio::io_service HttpReq::io_service; +std::string HttpReq::urlEncode(const std::string &s) +{ + const std::string unreserved = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~"; + + std::string escaped=""; + for(size_t i=0; i GamesDBScraper::makeHttpReq(ScraperSearchParams params) if(cleanName.empty()) cleanName = params.game->getCleanName(); - path += "name=" + cleanName; + path += "name=" + HttpReq::urlEncode(cleanName); //platform TODO, should use some params.system get method return std::make_shared("thegamesdb.net", path); From a8427d33a6461f855bbf1051eb2644d97ad0895d Mon Sep 17 00:00:00 2001 From: Juan Pablo Date: Tue, 24 Sep 2013 04:26:33 -0300 Subject: [PATCH 042/386] Partial implementation for The Archive scraper. --- CMakeLists.txt | 2 + src/Settings.cpp | 1 + src/scrapers/TheArchiveScraper.cpp | 84 ++++++++++++++++++++++++++++++ src/scrapers/TheArchiveScraper.h | 16 ++++++ 4 files changed, 103 insertions(+) create mode 100644 src/scrapers/TheArchiveScraper.cpp create mode 100644 src/scrapers/TheArchiveScraper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9661f97f9..3d74b2386 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,6 +179,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h @@ -230,6 +231,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp diff --git a/src/Settings.cpp b/src/Settings.cpp index 211679d12..75f0277af 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -4,6 +4,7 @@ #include "platform.h" #include #include "scrapers/GamesDBScraper.h" +#include "scrapers/TheArchiveScraper.h" Settings* Settings::sInstance = NULL; diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp new file mode 100644 index 000000000..fadbfeba3 --- /dev/null +++ b/src/scrapers/TheArchiveScraper.cpp @@ -0,0 +1,84 @@ +#include "TheArchiveScraper.h" +#include "../components/GuiGameScraper.h" +#include "../components/AsyncReqComponent.h" +#include "../Log.h" +#include "../pugiXML/pugixml.hpp" + +std::vector TheArchiveScraper::getResults(ScraperSearchParams params) +{ + std::shared_ptr req = makeHttpReq(params); + while(req->status() == HttpReq::REQ_IN_PROGRESS); + + return parseReq(params, req); +} + +std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams params) +{ + std::string path = "/2.0/Archive.search/xml/7TTRM4MNTIKR2NNAGASURHJOZJ3QXQC5/"; + + std::string cleanName = params.nameOverride; + if(cleanName.empty()) + cleanName = params.game->getCleanName(); + + path += HttpReq::urlEncode(cleanName); + //platform TODO, should use some params.system get method + + return std::make_shared("api.archive.vg", path); +} + +std::vector TheArchiveScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) +{ + std::vector mdl; + + if(req->status() != HttpReq::REQ_SUCCESS) + { + LOG(LogError) << "HttpReq error"; + return mdl; + } + + pugi::xml_document doc; + pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); + if(!parseResult) + { + LOG(LogError) << "Error parsing XML"; + return mdl; + } + + pugi::xml_node data = doc.child("OpenSearchDescription").child("games"); + + unsigned int resultNum = 0; + pugi::xml_node game = data.child("game"); + while(game && resultNum < MAX_SCRAPER_RESULTS) + { + mdl.push_back(MetaDataList(params.system->getGameMDD())); + mdl.back().set("name", game.child("title").text().get()); + mdl.back().set("desc", game.child("description").text().get()); + + pugi::xml_node image = game.child("box_front"); + pugi::xml_node thumbnail = game.child("box_front_small"); + + if (image) + mdl.back().set("image",image.text().get()); + if (thumbnail) + mdl.back().set("thumbnail", thumbnail.text().get()); + + resultNum++; + game = game.next_sibling("game"); + } + + return mdl; +} + +void TheArchiveScraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) +{ + std::shared_ptr httpreq = makeHttpReq(params); + AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, + [this, params, returnFunc] (std::shared_ptr r) + { + returnFunc(parseReq(params, r)); + }, [] () + { + }); + + window->pushGui(req); +} diff --git a/src/scrapers/TheArchiveScraper.h b/src/scrapers/TheArchiveScraper.h new file mode 100644 index 000000000..e88c23e98 --- /dev/null +++ b/src/scrapers/TheArchiveScraper.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Scraper.h" +#include "../HttpReq.h" + +class TheArchiveScraper : public IScraper +{ +public: + std::vector getResults(ScraperSearchParams params) override; + void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) override; + +private: + std::shared_ptr makeHttpReq(ScraperSearchParams params); + std::vector parseReq(ScraperSearchParams params, std::shared_ptr); +}; + From b2f615347e81c685d02a95eae7b97b7fa584f39d Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 24 Sep 2013 13:06:13 -0500 Subject: [PATCH 043/386] IScraper renamed to Scraper. Scraper now contains a partial implementation since almost all scrapers will follow the pattern of create HttpReq -> create and wait for AsyncReqComponent -> parse HttpReq contents. --- CMakeLists.txt | 1 + src/Settings.cpp | 2 +- src/Settings.h | 4 ++-- src/scrapers/GamesDBScraper.cpp | 22 ---------------------- src/scrapers/GamesDBScraper.h | 11 +++-------- src/scrapers/Scraper.cpp | 25 +++++++++++++++++++++++++ src/scrapers/Scraper.h | 12 ++++++++---- src/scrapers/TheArchiveScraper.cpp | 22 ---------------------- src/scrapers/TheArchiveScraper.h | 10 +++------- 9 files changed, 43 insertions(+), 66 deletions(-) create mode 100644 src/scrapers/Scraper.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d74b2386..6d781c99a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -230,6 +230,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp diff --git a/src/Settings.cpp b/src/Settings.cpp index 75f0277af..78f1c96d8 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -92,7 +92,7 @@ void Settings::loadFile() setFloat(node.attribute("name").as_string(), node.attribute("value").as_float()); } -IScraper* Settings::getScraper() +Scraper* Settings::getScraper() { return mScraper; } diff --git a/src/Settings.h b/src/Settings.h index c00c7af86..fad641a6e 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -23,7 +23,7 @@ public: void setInt(const std::string& name, int value); void setFloat(const std::string& name, float value); - IScraper* getScraper(); + Scraper* getScraper(); private: static Settings* sInstance; @@ -35,7 +35,7 @@ private: std::map mBoolMap; std::map mIntMap; std::map mFloatMap; - IScraper* mScraper; + Scraper* mScraper; }; #endif diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 7e60038d3..27c375cd3 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -4,14 +4,6 @@ #include "../Log.h" #include "../pugiXML/pugixml.hpp" -std::vector GamesDBScraper::getResults(ScraperSearchParams params) -{ - std::shared_ptr req = makeHttpReq(params); - while(req->status() == HttpReq::REQ_IN_PROGRESS); - - return parseReq(params, req); -} - std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) { std::string path = "/api/GetGame.php?"; @@ -75,17 +67,3 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s return mdl; } - -void GamesDBScraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) -{ - std::shared_ptr httpreq = makeHttpReq(params); - AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, - [this, params, returnFunc] (std::shared_ptr r) - { - returnFunc(parseReq(params, r)); - }, [] () - { - }); - - window->pushGui(req); -} diff --git a/src/scrapers/GamesDBScraper.h b/src/scrapers/GamesDBScraper.h index f518c246f..3c80cde50 100644 --- a/src/scrapers/GamesDBScraper.h +++ b/src/scrapers/GamesDBScraper.h @@ -3,14 +3,9 @@ #include "Scraper.h" #include "../HttpReq.h" -class GamesDBScraper : public IScraper +class GamesDBScraper : public Scraper { -public: - std::vector getResults(ScraperSearchParams params) override; - void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) override; - private: - std::shared_ptr makeHttpReq(ScraperSearchParams params); - std::vector parseReq(ScraperSearchParams params, std::shared_ptr); + std::shared_ptr makeHttpReq(ScraperSearchParams params) override; + std::vector parseReq(ScraperSearchParams params, std::shared_ptr) override; }; - diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp new file mode 100644 index 000000000..1a8b26086 --- /dev/null +++ b/src/scrapers/Scraper.cpp @@ -0,0 +1,25 @@ +#include "Scraper.h" +#include "../components/AsyncReqComponent.h" + +std::vector Scraper::getResults(ScraperSearchParams params) +{ + std::shared_ptr req = makeHttpReq(params); + while(req->status() == HttpReq::REQ_IN_PROGRESS); + + return parseReq(params, req); +} + +void Scraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) +{ + std::shared_ptr httpreq = makeHttpReq(params); + AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, + [this, params, returnFunc] (std::shared_ptr r) + { + returnFunc(parseReq(params, r)); + }, [returnFunc] () + { + returnFunc(std::vector()); + }); + + window->pushGui(req); +} diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 4e34a3684..9bb2cff7a 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -3,6 +3,7 @@ #include "../MetaData.h" #include "../SystemData.h" #include "../GameData.h" +#include "../HttpReq.h" #include #include @@ -16,11 +17,14 @@ struct ScraperSearchParams std::string nameOverride; }; -class IScraper +class Scraper { public: //Get a list of potential results. - virtual std::vector getResults(ScraperSearchParams params) = 0; - virtual void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) = 0; -}; + virtual std::vector getResults(ScraperSearchParams params); + virtual void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc); +private: + virtual std::shared_ptr makeHttpReq(ScraperSearchParams params) = 0; + virtual std::vector parseReq(ScraperSearchParams params, std::shared_ptr) = 0; +}; diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index fadbfeba3..73ad0dbc6 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -4,14 +4,6 @@ #include "../Log.h" #include "../pugiXML/pugixml.hpp" -std::vector TheArchiveScraper::getResults(ScraperSearchParams params) -{ - std::shared_ptr req = makeHttpReq(params); - while(req->status() == HttpReq::REQ_IN_PROGRESS); - - return parseReq(params, req); -} - std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams params) { std::string path = "/2.0/Archive.search/xml/7TTRM4MNTIKR2NNAGASURHJOZJ3QXQC5/"; @@ -68,17 +60,3 @@ std::vector TheArchiveScraper::parseReq(ScraperSearchParams params return mdl; } - -void TheArchiveScraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) -{ - std::shared_ptr httpreq = makeHttpReq(params); - AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, - [this, params, returnFunc] (std::shared_ptr r) - { - returnFunc(parseReq(params, r)); - }, [] () - { - }); - - window->pushGui(req); -} diff --git a/src/scrapers/TheArchiveScraper.h b/src/scrapers/TheArchiveScraper.h index e88c23e98..a9a027ee8 100644 --- a/src/scrapers/TheArchiveScraper.h +++ b/src/scrapers/TheArchiveScraper.h @@ -3,14 +3,10 @@ #include "Scraper.h" #include "../HttpReq.h" -class TheArchiveScraper : public IScraper +class TheArchiveScraper : public Scraper { -public: - std::vector getResults(ScraperSearchParams params) override; - void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) override; - private: - std::shared_ptr makeHttpReq(ScraperSearchParams params); - std::vector parseReq(ScraperSearchParams params, std::shared_ptr); + std::shared_ptr makeHttpReq(ScraperSearchParams params) override; + std::vector parseReq(ScraperSearchParams params, std::shared_ptr) override; }; From fb8bfc9486a80e18ca5a62a101e6683de7845667 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 24 Sep 2013 13:41:19 -0500 Subject: [PATCH 044/386] Added "releasedate" to the MetaDataDecl list. --- src/MetaData.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 161fc9bea..d8870f81e 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -21,6 +21,7 @@ std::vector MetaDataList::getDefaultGameMDD() {"image", MD_IMAGE_PATH, ""}, {"thumbnail", MD_IMAGE_PATH, ""}, {"rating", MD_RATING, "0"}, + {"releasedate", MD_TIME, "0"}, {"playcount", MD_INT, "0"}, {"lastplayed", MD_TIME, "0"} }; From 153aee5040133f38a5aa26a32ca2edd304773862 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 24 Sep 2013 14:44:18 -0500 Subject: [PATCH 045/386] Use RatingComponent in the metadata editor. --- src/MetaData.cpp | 12 ++++++++++++ src/components/RatingComponent.cpp | 13 +++++++++++++ src/components/RatingComponent.h | 1 + 3 files changed, 26 insertions(+) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index d8870f81e..c966364e8 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -1,7 +1,9 @@ #include "MetaData.h" #include "components/TextComponent.h" #include "Log.h" + #include "components/TextEditComponent.h" +#include "components/RatingComponent.h" MetaDataList::MetaDataList() { @@ -98,6 +100,11 @@ GuiComponent* MetaDataList::makeDisplay(Window* window, MetaDataType as) { switch(as) { + case MD_RATING: + { + RatingComponent* comp = new RatingComponent(window); + return comp; + } default: TextComponent* comp = new TextComponent(window); return comp; @@ -108,6 +115,11 @@ GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) { switch(as) { + case MD_RATING: + { + RatingComponent* comp = new RatingComponent(window); + return comp; + } case MD_MULTILINE_STRING: { TextEditComponent* comp = new TextEditComponent(window); diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 01dd40b03..63ce05a4a 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -92,3 +92,16 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) renderChildren(trans); } +bool RatingComponent::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("a", input) && input.value != 0) + { + mValue += 0.2f; + if(mValue > 1.0f) + mValue = 0.0f; + + updateVertices(); + } + + return GuiComponent::input(config, input); +} diff --git a/src/components/RatingComponent.h b/src/components/RatingComponent.h index 041f1d98b..bf2ce2071 100644 --- a/src/components/RatingComponent.h +++ b/src/components/RatingComponent.h @@ -11,6 +11,7 @@ public: std::string getValue() const override; void setValue(const std::string& value) override; + bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans); void onSizeChanged() override; From 69ef41a49f621b0b1cdb8136a51d6cc5222f04ed Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 24 Sep 2013 16:27:20 -0500 Subject: [PATCH 046/386] Add boost-regex to required libs. Added PlatformId.h. --- CMakeLists.txt | 2 +- src/PlatformId.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ src/SystemData.h | 3 +++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/PlatformId.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d781c99a..8b8fa5a96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ endif() find_package(FreeType REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) -find_package(Boost REQUIRED COMPONENTS system filesystem) +find_package(Boost REQUIRED COMPONENTS system filesystem regex) find_package(Eigen3 REQUIRED) #add ALSA for Linux diff --git a/src/PlatformId.h b/src/PlatformId.h new file mode 100644 index 000000000..1ce1cda0b --- /dev/null +++ b/src/PlatformId.h @@ -0,0 +1,54 @@ +#pragma once + +namespace PlatformIds +{ + enum PlatformId + { + PLATFORM_UNKNOWN, + THREEDO, //can't start with a constant + AMIGA, + ARCADE, + ATARI_2600, + ATARI_5200, + ATARI_7800, + ATARI_JAGUAR, + ATARI_JAGUAR_CD, + ATARI_XE, + COLECOVISION, + COMMODORE_64, + INTELLIVISION, + MAC_OS, + XBOX, + XBOX_360, + NEOGEO, + NINTENDO_3DS, + NINTENDO_64, + NINTENDO_DS, + NINTENDO_ENTERTAINMENT_SYSTEM, + GAME_BOY, + GAME_BOY_ADVANCE, + GAME_BOY_COLOR, + NINTENDO_GAMECUBE, + NINTENDO_WII, + NINTENDO_WII_U, + PC, + SEGA_32X, + SEGA_CD, + SEGA_DREAMCAST, + SEGA_GAME_GEAR, + SEGA_GENESIS, + SEGA_MASTER_SYSTEM, + SEGA_MEGA_DRIVE, + SEGA_SATURN, + PLAYSTATION, + PLAYSTATION_2, + PLAYSTATION_3, + PLAYSTATION_4, + PLAYSTATION_VITA, + PLAYSTATION_PORTABLE, + SUPER_NINTENDO, + TURBOGRAFX_16, + PLATFORM_COUNT + }; +} + diff --git a/src/SystemData.h b/src/SystemData.h index a087b8ba4..acd4540ee 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -6,6 +6,7 @@ #include "FolderData.h" #include "Window.h" #include "MetaData.h" +#include "PlatformId.h" class GameData; @@ -38,6 +39,7 @@ private: std::string mStartPath; std::string mSearchExtension; std::string mLaunchCommand; + PlatformIds::PlatformId mPlatformId; void populateFolder(FolderData* folder); @@ -45,3 +47,4 @@ private: }; #endif + From 56b5127200035f4d9c4f897babd515dc94ae5e40 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 24 Sep 2013 16:35:48 -0500 Subject: [PATCH 047/386] Fix HttpReq destructor freeze on Linux --- src/HttpReq.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 4cd4a46ec..cfe1a44af 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -57,7 +57,8 @@ HttpReq::~HttpReq() { mResolver.cancel(); mSocket.close(); - while(status() == REQ_IN_PROGRESS); //otherwise you get really weird heap-allocation-related crashes + status(); //poll once + //while(status() == REQ_IN_PROGRESS); //otherwise you get really weird heap-allocation-related crashes } void HttpReq::start(const std::string& server, const std::string& path) From 8c768e057d9c8a06d654d641df0979d4a54e9531 Mon Sep 17 00:00:00 2001 From: Juan Pablo Date: Wed, 25 Sep 2013 01:07:11 -0300 Subject: [PATCH 048/386] Replaced boost's regex with std's regex --- CMakeLists.txt | 2 +- src/GameData.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b8fa5a96..6d781c99a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ endif() find_package(FreeType REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) -find_package(Boost REQUIRED COMPONENTS system filesystem regex) +find_package(Boost REQUIRED COMPONENTS system filesystem) find_package(Eigen3 REQUIRED) #add ALSA for Linux diff --git a/src/GameData.cpp b/src/GameData.cpp index d6f11ca3e..28c636790 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -1,6 +1,6 @@ #include "GameData.h" #include -#include +#include #include #include #include @@ -60,7 +60,7 @@ std::string GameData::getBaseName() const std::string GameData::getCleanName() const { - return regex_replace(mBaseName, boost::regex("\\((.*)\\)|\\[(.*)\\]"), ""); + return regex_replace(mBaseName, std::regex("\\((.*)\\)|\\[(.*)\\]"), ""); } void GameData::incTimesPlayed() From 71f0dbf7e596f477afc7eef235dbab4ccbf10d03 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 25 Sep 2013 14:38:53 -0500 Subject: [PATCH 049/386] Revert "Merge pull request #134 from elpendor/unstable" This reverts commit 896e0f460b6438081320301aa5b76f7000274f2e, reversing changes made to 56b5127200035f4d9c4f897babd515dc94ae5e40. --- CMakeLists.txt | 2 +- src/GameData.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d781c99a..8b8fa5a96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ endif() find_package(FreeType REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) -find_package(Boost REQUIRED COMPONENTS system filesystem) +find_package(Boost REQUIRED COMPONENTS system filesystem regex) find_package(Eigen3 REQUIRED) #add ALSA for Linux diff --git a/src/GameData.cpp b/src/GameData.cpp index 28c636790..d6f11ca3e 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -1,6 +1,6 @@ #include "GameData.h" #include -#include +#include #include #include #include @@ -60,7 +60,7 @@ std::string GameData::getBaseName() const std::string GameData::getCleanName() const { - return regex_replace(mBaseName, std::regex("\\((.*)\\)|\\[(.*)\\]"), ""); + return regex_replace(mBaseName, boost::regex("\\((.*)\\)|\\[(.*)\\]"), ""); } void GameData::incTimesPlayed() From 10ed603f2771857b5f09f21f00cb0061ea4baef9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 01:17:41 +0000 Subject: [PATCH 050/386] Unified renderer initialization on RPi and other platforms! Woo, SDL2! --- CMakeLists.txt | 14 +-- src/Renderer_init_rpi.cpp | 235 ------------------------------------ src/Renderer_init_sdlgl.cpp | 6 +- src/main.cpp | 8 -- 4 files changed, 12 insertions(+), 251 deletions(-) delete mode 100644 src/Renderer_init_rpi.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b8fa5a96..3eed7a600 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) message(SEND_ERROR "You need at least G++ 4.7 to compile EmulationStation!") endif() #set up compiler flags for GCC - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2") #support C++11 for std::, optimize + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #support C++11 for std::, optimize set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") #strip binary endif() @@ -251,15 +251,15 @@ set(ES_SOURCES SOURCE_GROUP(resources FILES ResourceUtil.cpp) #add open gl specific sources -if(${GLSystem} MATCHES "Desktop OpenGL") +#if(${GLSystem} MATCHES "Desktop OpenGL") LIST(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_sdlgl.cpp ) -else() - LIST(APPEND ES_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_rpi.cpp - ) -endif() +#else() +# LIST(APPEND ES_SOURCES +# ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_rpi.cpp +# ) +#endif() #------------------------------------------------------------------------------- #define OS specific sources and headers diff --git a/src/Renderer_init_rpi.cpp b/src/Renderer_init_rpi.cpp deleted file mode 100644 index e4f814aae..000000000 --- a/src/Renderer_init_rpi.cpp +++ /dev/null @@ -1,235 +0,0 @@ -#include "Renderer.h" -#include -#include "platform.h" -#include -#include -#include -#include -#include "Log.h" - -#ifdef _RPI_ - #include -#endif - -namespace Renderer -{ - SDL_Window* sdlWindow; - - EGLDisplay display; - EGLSurface surface; - EGLContext context; - EGLConfig config; - -#ifdef _RPI_ - static EGL_DISPMANX_WINDOW_T nativewindow; -#else - NativeWindowType nativewindow; -#endif - - unsigned int display_width = 0; - unsigned int display_height = 0; - - unsigned int getScreenWidth() { return display_width; } - unsigned int getScreenHeight() { return display_height; } - - bool createSurface() //unsigned int display_width, unsigned int display_height) - { - LOG(LogInfo) << "Starting SDL..."; - - if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0) - { - LOG(LogError) << "Error initializing SDL!\n " << SDL_GetError() << "\n" << "Are you in the 'video', 'audio', and 'input' groups? Is X closed? Is your firmware up to date? Are you using at least the 192/64 memory split?"; - return false; - } - - sdlWindow = SDL_CreateWindow("EmulationStation", - SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - display_width, display_height, - 0); - - if(sdlWindow == NULL) - { - LOG(LogError) << "Error creating SDL window!" << SDL_GetError(); - return false; - } - - LOG(LogInfo) << "SDL Window created, creating EGL context..."; - -#ifdef _RPI_ - DISPMANX_ELEMENT_HANDLE_T dispman_element; - DISPMANX_DISPLAY_HANDLE_T dispman_display; - DISPMANX_UPDATE_HANDLE_T dispman_update; - VC_RECT_T dst_rect; - VC_RECT_T src_rect; -#endif - - display = eglGetDisplay(EGL_DEFAULT_DISPLAY); - if(display == EGL_NO_DISPLAY) - { - LOG(LogError) << "Error getting display!"; - return false; - } - - bool result = eglInitialize(display, NULL, NULL); - if(result == EGL_FALSE) - { - LOG(LogError) << "Error initializing display!"; - return false; - } - - result = eglBindAPI(EGL_OPENGL_ES_API); - if(result == EGL_FALSE) - { - LOG(LogError) << "Error binding API!"; - return false; - } - - - static const EGLint config_attributes[] = - { - EGL_RED_SIZE, 8, - EGL_GREEN_SIZE, 8, - EGL_BLUE_SIZE, 8, - EGL_ALPHA_SIZE, 8, - EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_NONE - }; - - GLint numConfigs; - result = eglChooseConfig(display, config_attributes, &config, 1, &numConfigs); - - if(result == EGL_FALSE) - { - LOG(LogError) << "Error choosing config!"; - return false; - } - - - context = eglCreateContext(display, config, EGL_NO_CONTEXT, NULL); - if(context == EGL_NO_CONTEXT) - { - LOG(LogError) << "Error getting context!\n " << eglGetError(); - return false; - } - -#ifdef _RPI_ - //get hardware info for screen/desktop from BCM interface - if(!display_width || !display_height) - { - bool success = graphics_get_display_size(0, &display_width, &display_height); //0 = LCD - - if(success < 0) - { - LOG(LogError) << "Error getting display size!"; - return false; - } - } -#else - //get hardware info for screen/desktop from SDL - if(!display_width || !display_height) - { - const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo(); - if(videoInfo == NULL) - { - LOG(LogError) << "Error getting display size!"; - return false; - } - else - { - display_width = current_w; - display_height = current_h; - } - } -#endif - - LOG(LogInfo) << "Resolution: " << display_width << "x" << display_height << "..."; - -#ifdef _RPI_ - dst_rect.x = 0; dst_rect.y = 0; - dst_rect.width = display_width; dst_rect.height = display_height; - - src_rect.x = 0; src_rect.y = 0; - src_rect.width = display_width << 16; src_rect.height = display_height << 16; - - dispman_display = vc_dispmanx_display_open(0); //0 = LCD - dispman_update = vc_dispmanx_update_start(0); - - dispman_element = vc_dispmanx_element_add(dispman_update, dispman_display, 0 /*layer*/, &dst_rect, 0 /*src*/, &src_rect, DISPMANX_PROTECTION_NONE, 0 /*alpha*/, 0 /*clamp*/, DISPMANX_NO_ROTATE /*transform*/); - - nativewindow.element = dispman_element; - nativewindow.width = display_width; nativewindow.height = display_height; - vc_dispmanx_update_submit_sync(dispman_update); -#endif - - surface = eglCreateWindowSurface(display, config, &nativewindow, NULL); - if(surface == EGL_NO_SURFACE) - { - LOG(LogError) << "Error creating window surface!"; - return false; - } - - result = eglMakeCurrent(display, surface, surface, context); - if(result == EGL_FALSE) - { - LOG(LogError) << "Error with eglMakeCurrent!"; - return false; - } - - - LOG(LogInfo) << "Created surface successfully!"; - - return true; - } - - void swapBuffers() - { - eglSwapBuffers(display, surface); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - - void destroySurface() - { - eglSwapBuffers(display, surface); - eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - eglDestroySurface(display, surface); - eglDestroyContext(display, context); - eglTerminate(display); - - display = EGL_NO_DISPLAY; - surface = EGL_NO_SURFACE; - context = EGL_NO_CONTEXT; - - SDL_DestroyWindow(sdlWindow); - sdlWindow = NULL; - SDL_Quit(); - } - - bool init(int w, int h) - { - if(w) - display_width = w; - if(h) - display_height = h; - - bool createdSurface = createSurface(); - - if(!createdSurface) - return false; - - glViewport(0, 0, display_width, display_height); - glMatrixMode(GL_PROJECTION); - glOrthof(0, display_width, display_height, 0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - - onInit(); - - return true; - } - - void deinit() - { - onDeinit(); - destroySurface(); - } -}; diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index 6065eb392..cf484e3a8 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -10,6 +10,10 @@ #include "EmulationStation.h" #include "Settings.h" +#ifdef USE_OPENGL_ES + #define glOrtho glOrthof +#endif + namespace Renderer { static bool initialCursorState; @@ -41,7 +45,7 @@ namespace Renderer //SDL_GL_SetSwapInterval(1); //0 for immediate updates, 1 for updates synchronized with the vertical retrace, -1 for late swap tearing SDL_DisplayMode dispMode; - SDL_GetDisplayMode(0, 0, &dispMode); + SDL_GetDesktopDisplayMode(0, &dispMode); if(display_width == 0) display_width = dispMode.w; if(display_height == 0) diff --git a/src/main.cpp b/src/main.cpp index 04e0e877d..2d3c77c7a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -111,10 +111,6 @@ bool verifyHomeFolderExists() void onExit() { Log::close(); - - #ifdef _RPI_ - bcm_host_deinit(); - #endif } int main(int argc, char* argv[]) @@ -129,10 +125,6 @@ int main(int argc, char* argv[]) if(!verifyHomeFolderExists()) return 1; - #ifdef _RPI_ - bcm_host_init(); - #endif - //start the logger Log::open(); LOG(LogInfo) << "EmulationStation - " << PROGRAM_VERSION_STRING; From c5d772657b4ff91533a697cab45934d7347126aa Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 11:10:06 -0500 Subject: [PATCH 051/386] Added PlatformId to SystemData. --- CMakeLists.txt | 1 + src/PlatformId.h | 93 +++++++++++++++++++++++----------------------- src/SystemData.cpp | 14 ++++++- src/SystemData.h | 4 +- 4 files changed, 62 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eed7a600..89a1ea6d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,6 +148,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.h ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h diff --git a/src/PlatformId.h b/src/PlatformId.h index 1ce1cda0b..bfdc37b12 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -2,53 +2,52 @@ namespace PlatformIds { - enum PlatformId + enum PlatformId : unsigned int { - PLATFORM_UNKNOWN, - THREEDO, //can't start with a constant - AMIGA, - ARCADE, - ATARI_2600, - ATARI_5200, - ATARI_7800, - ATARI_JAGUAR, - ATARI_JAGUAR_CD, - ATARI_XE, - COLECOVISION, - COMMODORE_64, - INTELLIVISION, - MAC_OS, - XBOX, - XBOX_360, - NEOGEO, - NINTENDO_3DS, - NINTENDO_64, - NINTENDO_DS, - NINTENDO_ENTERTAINMENT_SYSTEM, - GAME_BOY, - GAME_BOY_ADVANCE, - GAME_BOY_COLOR, - NINTENDO_GAMECUBE, - NINTENDO_WII, - NINTENDO_WII_U, - PC, - SEGA_32X, - SEGA_CD, - SEGA_DREAMCAST, - SEGA_GAME_GEAR, - SEGA_GENESIS, - SEGA_MASTER_SYSTEM, - SEGA_MEGA_DRIVE, - SEGA_SATURN, - PLAYSTATION, - PLAYSTATION_2, - PLAYSTATION_3, - PLAYSTATION_4, - PLAYSTATION_VITA, - PLAYSTATION_PORTABLE, - SUPER_NINTENDO, - TURBOGRAFX_16, - PLATFORM_COUNT + PLATFORM_UNKNOWN = 0, + THREEDO = 1, //can't start with a constant + AMIGA = 2, + ARCADE = 3, + ATARI_2600 = 4, + ATARI_5200 = 5, + ATARI_7800 = 6, + ATARI_JAGUAR = 7, + ATARI_JAGUAR_CD = 8, + ATARI_XE = 9, + COLECOVISION = 10, + COMMODORE_64 = 11, + INTELLIVISION = 12, + MAC_OS = 13, + XBOX = 14, + XBOX_360 = 15, + NEOGEO = 16, + NINTENDO_3DS = 17, + NINTENDO_64 = 18, + NINTENDO_DS = 19, + NINTENDO_ENTERTAINMENT_SYSTEM = 20, + GAME_BOY = 21, + GAME_BOY_ADVANCE = 22, + GAME_BOY_COLOR = 23, + NINTENDO_GAMECUBE = 24, + NINTENDO_WII = 25, + NINTENDO_WII_U = 26, + PC = 27, + SEGA_32X = 28, + SEGA_CD = 29, + SEGA_DREAMCAST = 30, + SEGA_GAME_GEAR = 31, + SEGA_GENESIS = 32, + SEGA_MASTER_SYSTEM = 33, + SEGA_MEGA_DRIVE = 34, + SEGA_SATURN = 35, + PLAYSTATION = 36, + PLAYSTATION_2 = 37, + PLAYSTATION_3 = 38, + PLAYSTATION_4 = 39, + PLAYSTATION_VITA = 40, + PLAYSTATION_PORTABLE = 41, + SUPER_NINTENDO = 42, + TURBOGRAFX_16 = 43, + PLATFORM_COUNT = 44 }; } - diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 7e9d913e3..e84a3714b 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -20,7 +20,8 @@ namespace fs = boost::filesystem; std::string SystemData::getStartPath() { return mStartPath; } std::string SystemData::getExtension() { return mSearchExtension; } -SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, const std::string& command) +SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, + const std::string& command, PlatformIds::PlatformId platformId) { mName = name; mFullName = fullName; @@ -35,6 +36,7 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mSearchExtension = extension; mLaunchCommand = command; + mPlatformId = platformId; mRootFolder = new FolderData(this, mStartPath, "Search Root"); @@ -217,11 +219,14 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { std::string name, fullname, path, ext, cmd; + PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN; + name = system.child("name").text().get(); fullname = system.child("fullname").text().get(); path = system.child("path").text().get(); ext = system.child("extension").text().get(); cmd = system.child("command").text().get(); + platformId = (PlatformIds::PlatformId)system.child("platformid").text().as_uint(PlatformIds::PLATFORM_UNKNOWN); //validate if(name.empty() || path.empty() || ext.empty() || cmd.empty()) @@ -234,7 +239,7 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) boost::filesystem::path genericPath(path); path = genericPath.generic_string(); - SystemData* newSys = new SystemData(name, fullname, path, ext, cmd); + SystemData* newSys = new SystemData(name, fullname, path, ext, cmd, platformId); if(newSys->getRootFolder()->getFileCount() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; @@ -339,3 +344,8 @@ std::vector SystemData::getGameMDD() { return MetaDataList::getDefaultGameMDD(); } + +PlatformIds::PlatformId SystemData::getPlatformId() +{ + return mPlatformId; +} diff --git a/src/SystemData.h b/src/SystemData.h index acd4540ee..98fb956ba 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -13,7 +13,8 @@ class GameData; class SystemData { public: - SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, const std::string& command); + SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, + const std::string& command, PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN); ~SystemData(); FolderData* getRootFolder(); @@ -22,6 +23,7 @@ public: std::string getStartPath(); std::string getExtension(); std::string getGamelistPath(); + PlatformIds::PlatformId getPlatformId(); bool hasGamelist(); std::vector getGameMDD(); From cfd63c74db25a3e64cd54b005803ceb463321890 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 11:16:20 -0500 Subject: [PATCH 052/386] Refactored GameData to be completely independent of SystemData. --- src/GameData.cpp | 4 ++-- src/GameData.h | 12 +----------- src/SystemData.cpp | 2 +- src/XMLReader.cpp | 2 +- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/GameData.cpp b/src/GameData.cpp index d6f11ca3e..f40764393 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -5,8 +5,8 @@ #include #include -GameData::GameData(SystemData* system, std::string path) - : mSystem(system), mPath(path), mBaseName(boost::filesystem::path(path).stem().string()), mMetaData(system->getGameMDD()) +GameData::GameData(const std::string& path, const MetaDataList& metadata) + : mPath(path), mBaseName(boost::filesystem::path(path).stem().string()), mMetaData(metadata) { if(mMetaData.get("name").empty()) mMetaData.set("name", mBaseName); diff --git a/src/GameData.h b/src/GameData.h index 6f40c798b..27ce4f099 100644 --- a/src/GameData.h +++ b/src/GameData.h @@ -4,14 +4,13 @@ #include #include "FileData.h" -#include "SystemData.h" #include "MetaData.h" //This class holds information about a game: at the least, its name, system, and path. Additional information is optional and read by other classes. class GameData : public FileData { public: - GameData(SystemData* system, std::string path); + GameData(const std::string& path, const MetaDataList& metadata); const std::string& getName() const override; const std::string& getPath() const override; @@ -28,18 +27,9 @@ public: MetaDataList* metadata(); private: - SystemData* mSystem; const std::string mPath; const std::string mBaseName; - //extra data - /*std::string mDescription; - std::string mImagePath; - float mRating; - float mUserRating; - size_t mTimesPlayed; - std::time_t mLastPlayed;*/ - MetaDataList mMetaData; }; diff --git a/src/SystemData.cpp b/src/SystemData.cpp index e84a3714b..3fdce18db 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -147,7 +147,7 @@ void SystemData::populateFolder(FolderData* folder) //if it matches, add it if(chkExt == extension) { - GameData* newGame = new GameData(this, filePath.generic_string()); + GameData* newGame = new GameData(filePath.generic_string(), MetaDataList(getGameMDD())); folder->pushFileData(newGame); isGame = true; break; diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 4cb5c6799..80d83f3c2 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -90,7 +90,7 @@ GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) loops++; } - GameData* game = new GameData(system, gameAbsPath); + GameData* game = new GameData(gameAbsPath, MetaDataList(system->getGameMDD())); folder->pushFileData(game); return game; } From 7bd34ec62a179bff95d1151a48298d887a3312e6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 11:38:31 -0500 Subject: [PATCH 053/386] Added "isStatistic" property to MDDs. If true, ignore scraper values for this value. This keeps scraping from overwriting playcount and lastplaytime. --- src/MetaData.cpp | 16 ++++++++-------- src/MetaData.h | 1 + src/PlatformId.h | 4 +++- src/components/GuiMetaDataEd.cpp | 4 ++++ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index c966364e8..2aaadd284 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -18,14 +18,14 @@ MetaDataList::MetaDataList(const std::vector& mdd) std::vector MetaDataList::getDefaultGameMDD() { MetaDataDecl decls[] = { - {"name", MD_STRING, ""}, - {"desc", MD_MULTILINE_STRING, ""}, - {"image", MD_IMAGE_PATH, ""}, - {"thumbnail", MD_IMAGE_PATH, ""}, - {"rating", MD_RATING, "0"}, - {"releasedate", MD_TIME, "0"}, - {"playcount", MD_INT, "0"}, - {"lastplayed", MD_TIME, "0"} + {"name", MD_STRING, "", false}, + {"desc", MD_MULTILINE_STRING, "", false}, + {"image", MD_IMAGE_PATH, "", false}, + {"thumbnail", MD_IMAGE_PATH, "", false}, + {"rating", MD_RATING, "0", false}, + {"releasedate", MD_TIME, "0", false}, + {"playcount", MD_INT, "0", true}, + {"lastplayed", MD_TIME, "0", true} }; std::vector mdd(decls, decls + sizeof(decls) / sizeof(decls[0])); diff --git a/src/MetaData.h b/src/MetaData.h index 38e5393f9..13e8c98d7 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -25,6 +25,7 @@ struct MetaDataDecl std::string key; MetaDataType type; std::string defaultValue; + bool isStatistic; }; class MetaDataList diff --git a/src/PlatformId.h b/src/PlatformId.h index bfdc37b12..40483dbb3 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -5,7 +5,8 @@ namespace PlatformIds enum PlatformId : unsigned int { PLATFORM_UNKNOWN = 0, - THREEDO = 1, //can't start with a constant + + THREEDO = 1, //name can't start with a constant AMIGA = 2, ARCADE = 3, ATARI_2600 = 4, @@ -48,6 +49,7 @@ namespace PlatformIds PLAYSTATION_PORTABLE = 41, SUPER_NINTENDO = 42, TURBOGRAFX_16 = 43, + PLATFORM_COUNT = 44 }; } diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index 9b7226768..bac78d6e9 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -127,6 +127,10 @@ void GuiMetaDataEd::fetchDone(MetaDataList result) { for(unsigned int i = 0; i < mEditors.size(); i++) { + //don't overwrite statistics + if(mMetaDataDecl.at(i).isStatistic) + continue; + const std::string key = mMetaDataDecl.at(i).key; mEditors.at(i)->setValue(result.get(key)); } From 7db0100edd8a1a4e4f3f6a896d3b88f80b46c2c9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 12:51:16 -0500 Subject: [PATCH 054/386] Use boost::posix_time::ptime internally for times and dates. --- src/GameData.cpp | 5 ++--- src/MetaData.cpp | 20 ++++++++++++++++++-- src/MetaData.h | 10 +++++++--- src/scrapers/GamesDBScraper.cpp | 6 +++++- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/GameData.cpp b/src/GameData.cpp index f40764393..d679784b1 100644 --- a/src/GameData.cpp +++ b/src/GameData.cpp @@ -74,9 +74,8 @@ void GameData::incTimesPlayed() void GameData::lastPlayedNow() { - std::stringstream ss; - ss << std::time(nullptr); - metadata()->set("lastplayed", ss.str()); + boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); + metadata()->setTime("lastplayed", time); } MetaDataList* GameData::metadata() diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 2aaadd284..be717e96d 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -76,6 +76,11 @@ void MetaDataList::set(const std::string& key, const std::string& value) mMap[key] = value; } +void MetaDataList::setTime(const std::string& key, const boost::posix_time::ptime& time) +{ + mMap[key] = boost::posix_time::to_iso_string(time); +} + const std::string& MetaDataList::get(const std::string& key) const { return mMap.at(key); @@ -91,9 +96,9 @@ float MetaDataList::getFloat(const std::string& key) const return (float)atof(get(key).c_str()); } -std::time_t MetaDataList::getTime(const std::string& key) const +boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const { - return (std::time_t) atoi(get(key).c_str()); + return string_to_ptime(get(key), "%Y%m%dT%H%M%S%F%q"); } GuiComponent* MetaDataList::makeDisplay(Window* window, MetaDataType as) @@ -133,3 +138,14 @@ GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) } } } + +//util function +boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt) +{ + std::istringstream ss(str); + ss.imbue(std::locale(std::locale::classic(), new boost::posix_time::time_input_facet(fmt))); //std::locale handles deleting the facet + boost::posix_time::ptime time; + ss >> time; + + return time; +} diff --git a/src/MetaData.h b/src/MetaData.h index 13e8c98d7..59b5da145 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -4,7 +4,7 @@ #include #include #include "GuiComponent.h" -#include +#include enum MetaDataType { @@ -25,9 +25,11 @@ struct MetaDataDecl std::string key; MetaDataType type; std::string defaultValue; - bool isStatistic; + bool isStatistic; //if true, ignore scraper values for this metadata }; +boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt); + class MetaDataList { public: @@ -39,10 +41,12 @@ public: MetaDataList(const std::vector& mdd); void set(const std::string& key, const std::string& value); + void setTime(const std::string& key, const boost::posix_time::ptime& time); + const std::string& get(const std::string& key) const; int getInt(const std::string& key) const; float getFloat(const std::string& key) const; - std::time_t getTime(const std::string& key) const; + boost::posix_time::ptime getTime(const std::string& key) const; static GuiComponent* makeDisplay(Window* window, MetaDataType as); static GuiComponent* makeEditor(Window* window, MetaDataType as); diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 27c375cd3..8965529a3 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -3,6 +3,7 @@ #include "../components/AsyncReqComponent.h" #include "../Log.h" #include "../pugiXML/pugixml.hpp" +#include "../MetaData.h" std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) { @@ -47,7 +48,10 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s mdl.push_back(MetaDataList(params.system->getGameMDD())); mdl.back().set("name", game.child("GameTitle").text().get()); mdl.back().set("desc", game.child("Overview").text().get()); - mdl.back().set("releasedate", game.child("ReleaseDate").text().get()); + + boost::posix_time::ptime rd = string_to_ptime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"); + mdl.back().setTime("releasedate", rd); + pugi::xml_node images = game.child("Images"); if(images) From 838b8ee4222c8995d3bd21632ac70be98477a191 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 17:35:38 -0500 Subject: [PATCH 055/386] DateTimeComponent. Can display dates, date + times, and an english description of a time relative to now ("2 secs ago", "1 day ago", etc.). Supports editing dates (including day-of-month validation). This took a lot longer than I thought. --- CMakeLists.txt | 2 + src/MetaData.cpp | 14 +- src/MetaData.h | 7 +- src/components/DateTimeComponent.cpp | 269 +++++++++++++++++++++++++++ src/components/DateTimeComponent.h | 47 +++++ 5 files changed, 335 insertions(+), 4 deletions(-) create mode 100644 src/components/DateTimeComponent.cpp create mode 100644 src/components/DateTimeComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 89a1ea6d2..0d9d6b8c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,6 +160,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h @@ -214,6 +215,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp diff --git a/src/MetaData.cpp b/src/MetaData.cpp index be717e96d..5879888d2 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -4,6 +4,7 @@ #include "components/TextEditComponent.h" #include "components/RatingComponent.h" +#include "components/DateTimeComponent.h" MetaDataList::MetaDataList() { @@ -23,7 +24,7 @@ std::vector MetaDataList::getDefaultGameMDD() {"image", MD_IMAGE_PATH, "", false}, {"thumbnail", MD_IMAGE_PATH, "", false}, {"rating", MD_RATING, "0", false}, - {"releasedate", MD_TIME, "0", false}, + {"releasedate", MD_DATE, "0", false}, {"playcount", MD_INT, "0", true}, {"lastplayed", MD_TIME, "0", true} }; @@ -131,6 +132,17 @@ GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) comp->setSize(comp->getSize().x(), comp->getSize().y() * 3); return comp; } + case MD_DATE: + { + DateTimeComponent* comp = new DateTimeComponent(window); + return comp; + } + case MD_TIME: + { + DateTimeComponent* comp = new DateTimeComponent(window); + comp->setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + return comp; + } default: { TextEditComponent* comp = new TextEditComponent(window); diff --git a/src/MetaData.h b/src/MetaData.h index 59b5da145..f83d2aeed 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -17,7 +17,8 @@ enum MetaDataType MD_MULTILINE_STRING, MD_IMAGE_PATH, MD_RATING, - MD_TIME + MD_DATE, + MD_TIME //used for lastplayed }; struct MetaDataDecl @@ -28,7 +29,7 @@ struct MetaDataDecl bool isStatistic; //if true, ignore scraper values for this metadata }; -boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt); +boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); class MetaDataList { @@ -41,7 +42,7 @@ public: MetaDataList(const std::vector& mdd); void set(const std::string& key, const std::string& value); - void setTime(const std::string& key, const boost::posix_time::ptime& time); + void setTime(const std::string& key, const boost::posix_time::ptime& time); //times are internally stored as ISO strings (e.g. boost::posix_time::to_iso_string(ptime)) const std::string& get(const std::string& key) const; int getInt(const std::string& key) const; diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp new file mode 100644 index 000000000..cd6266f12 --- /dev/null +++ b/src/components/DateTimeComponent.cpp @@ -0,0 +1,269 @@ +#include "DateTimeComponent.h" +#include "../MetaData.h" +#include "../Renderer.h" +#include "../Window.h" +#include "../Log.h" + +DateTimeComponent::DateTimeComponent(Window* window) : GuiComponent(window), + mEditing(false), mEditIndex(0), mDisplayMode(DISP_DATE), mRelativeUpdateAccumulator(0) +{ + mSize << 64, (float)getFont()->getHeight(); + updateTextCache(); +} + +void DateTimeComponent::setDisplayMode(DisplayMode mode) +{ + mDisplayMode = mode; +} + +bool DateTimeComponent::input(InputConfig* config, Input input) +{ + if(input.value == 0) + return false; + + if(config->isMappedTo("a", input)) + { + if(mDisplayMode != DISP_RELATIVE_TO_NOW) //don't allow editing for relative times + mEditing = !mEditing; + + if(mEditing) + { + //started editing + mTimeBeforeEdit = mTime; + + //initialize to now if unset + if(mTime == boost::posix_time::not_a_date_time) + { + mTime = boost::posix_time::ptime(boost::gregorian::day_clock::local_day()); + updateTextCache(); + } + } + + return true; + } + + if(mEditing) + { + if(config->isMappedTo("b", input)) + { + mEditing = false; + mTime = mTimeBeforeEdit; + updateTextCache(); + } + + int incDir = 0; + if(config->isMappedTo("up", input)) + incDir = 1; + else if(config->isMappedTo("down", input)) + incDir = -1; + + if(incDir != 0) + { + tm new_tm = boost::posix_time::to_tm(mTime); + + if(mEditIndex == 0) + { + new_tm.tm_mon += incDir; + + if(new_tm.tm_mon > 11) + new_tm.tm_mon = 11; + else if(new_tm.tm_mon < 0) + new_tm.tm_mon = 0; + + }else if(mEditIndex == 1) + { + new_tm.tm_mday += incDir; + int days_in_month = mTime.date().end_of_month().day().as_number(); + if(new_tm.tm_mday > days_in_month) + new_tm.tm_mday = days_in_month; + else if(new_tm.tm_mday < 1) + new_tm.tm_mday = 1; + + }else if(mEditIndex == 2) + { + new_tm.tm_year += incDir; + if(new_tm.tm_year < 0) + new_tm.tm_year = 0; + } + + //validate day + int days_in_month = boost::gregorian::date(new_tm.tm_year + 1900, new_tm.tm_mon + 1, 1).end_of_month().day().as_number(); + if(new_tm.tm_mday > days_in_month) + new_tm.tm_mday = days_in_month; + + mTime = boost::posix_time::ptime_from_tm(new_tm); + + updateTextCache(); + return true; + } + + if(config->isMappedTo("right", input)) + { + mEditIndex++; + if(mEditIndex >= (int)mCursorBoxes.size()) + mEditIndex--; + return true; + } + + if(config->isMappedTo("left", input)) + { + mEditIndex--; + if(mEditIndex < 0) + mEditIndex++; + return true; + } + } + + return GuiComponent::input(config, input); +} + +void DateTimeComponent::update(int deltaTime) +{ + if(mDisplayMode == DISP_RELATIVE_TO_NOW) + { + mRelativeUpdateAccumulator += deltaTime; + if(mRelativeUpdateAccumulator > 1000) + { + mRelativeUpdateAccumulator = 0; + updateTextCache(); + } + } + + GuiComponent::update(deltaTime); +} + +void DateTimeComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + Renderer::setMatrix(trans); + + if(mTextCache) + { + std::shared_ptr font = getFont(); + font->renderTextCache(mTextCache.get()); + + if(mEditing) + { + if(mEditIndex >= 0 && (unsigned int)mEditIndex < mCursorBoxes.size()) + { + Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], + (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022); + } + } + } + + renderChildren(trans); +} + +void DateTimeComponent::setValue(const std::string& val) +{ + mTime = string_to_ptime(val); + updateTextCache(); +} + +std::string DateTimeComponent::getValue() const +{ + return boost::posix_time::to_iso_string(mTime); +} + +DateTimeComponent::DisplayMode DateTimeComponent::getCurrentDisplayMode() const +{ + /*if(mEditing) + { + if(mDisplayMode == DISP_RELATIVE_TO_NOW) + { + //TODO: if time component == 00:00:00, return DISP_DATE, else return DISP_DATE_TIME + return DISP_DATE; + } + }*/ + + return mDisplayMode; +} + +std::string DateTimeComponent::getDisplayString(DisplayMode mode) const +{ + std::string fmt; + switch(mode) + { + case DISP_DATE: + fmt = "%m/%d/%Y"; + break; + case DISP_DATE_TIME: + fmt = "%m/%d/%Y %H:%M:%S"; + break; + case DISP_RELATIVE_TO_NOW: + { + //relative time + using namespace boost::posix_time; + + if(mTime == not_a_date_time) + return "never"; + + ptime now = second_clock::universal_time(); + time_duration dur = now - mTime; + + if(dur < seconds(2)) + return "just now"; + if(dur < seconds(60)) + return std::to_string((long long)dur.seconds()) + " secs ago"; + if(dur < minutes(60)) + return std::to_string((long long)dur.minutes()) + " min" + (dur < minutes(2) ? "" : "s") + " ago"; + if(dur < hours(24)) + return std::to_string((long long)dur.hours()) + " hour" + (dur < hours(2) ? "" : "s") + " ago"; + + return std::to_string((long long)(ptime() + dur).date().day_count().as_number()); + } + break; + } + + if(mTime == boost::posix_time::not_a_date_time) + return "unknown"; + + boost::posix_time::time_facet* facet = new boost::posix_time::time_facet(); + facet->format(fmt.c_str()); + std::locale loc(std::locale::classic(), facet); + + std::stringstream ss; + ss.imbue(loc); + ss << mTime; + return ss.str(); +} + +std::shared_ptr DateTimeComponent::getFont() const +{ + return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM); +} + +void DateTimeComponent::updateTextCache() +{ + DisplayMode mode = getCurrentDisplayMode(); + const std::string dispString = getDisplayString(mode); + std::shared_ptr font = getFont(); + mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, 0x000000FF)); + + //set up cursor positions + mCursorBoxes.clear(); + + if(dispString.empty() || mode == DISP_RELATIVE_TO_NOW) + return; + + //month + Eigen::Vector2f start(0, 0); + Eigen::Vector2f end = font->sizeText(dispString.substr(0, 2)); + Eigen::Vector2f diff = end - start; + mCursorBoxes.push_back(Eigen::Vector4f(start[0], start[1], diff[0], diff[1])); + + //day + start[0] = font->sizeText(dispString.substr(0, 3)).x(); + end = font->sizeText(dispString.substr(0, 5)); + diff = end - start; + mCursorBoxes.push_back(Eigen::Vector4f(start[0], start[1], diff[0], diff[1])); + + //year + start[0] = font->sizeText(dispString.substr(0, 6)).x(); + end = font->sizeText(dispString.substr(0, 10)); + diff = end - start; + mCursorBoxes.push_back(Eigen::Vector4f(start[0], start[1], diff[0], diff[1])); + + //if mode == DISP_DATE_TIME do times too but I don't wanna do the logic for editing times because no one will ever use it so screw it +} diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h new file mode 100644 index 000000000..1f5359978 --- /dev/null +++ b/src/components/DateTimeComponent.h @@ -0,0 +1,47 @@ +#pragma once + +#include "../GuiComponent.h" +#include +#include "../Font.h" + +class DateTimeComponent : public GuiComponent +{ +public: + DateTimeComponent(Window* window); + + void setValue(const std::string& val) override; + std::string getValue() const override; + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; + + enum DisplayMode + { + DISP_DATE, + DISP_DATE_TIME, + DISP_RELATIVE_TO_NOW + }; + + void setDisplayMode(DisplayMode mode); + +private: + std::shared_ptr getFont() const; + + std::string getDisplayString(DisplayMode mode) const; + DisplayMode getCurrentDisplayMode() const; + + void updateTextCache(); + + boost::posix_time::ptime mTime; + boost::posix_time::ptime mTimeBeforeEdit; + + bool mEditing; + int mEditIndex; + DisplayMode mDisplayMode; + + int mRelativeUpdateAccumulator; + + std::unique_ptr mTextCache; + std::vector mCursorBoxes; +}; From bbc387ce8ae259c8827a99049e446b52593ad4c0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 28 Sep 2013 21:54:15 -0500 Subject: [PATCH 056/386] Initial command-line scraper. --- CMakeLists.txt | 2 + src/HttpReq.cpp | 8 +- src/ScraperCmdLine.cpp | 242 +++++++++++++++++++++++++++++++++++++++++ src/ScraperCmdLine.h | 3 + src/SystemData.cpp | 5 + src/SystemData.h | 1 + src/main.cpp | 33 ++++-- 7 files changed, 283 insertions(+), 11 deletions(-) create mode 100644 src/ScraperCmdLine.cpp create mode 100644 src/ScraperCmdLine.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d9d6b8c7..324eee80a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,6 +150,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h @@ -205,6 +206,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index cfe1a44af..e1ac90ec6 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -206,7 +206,13 @@ void HttpReq::handleReadContent(const boost::system::error_code& err) HttpReq::Status HttpReq::status() { - io_service.poll(); + try { + io_service.poll(); + } catch(boost::system::system_error& e) + { + LOG(LogError) << "Boost.ASIO system error! " << e.what(); + } + return mStatus; } diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp new file mode 100644 index 000000000..2092f3c28 --- /dev/null +++ b/src/ScraperCmdLine.cpp @@ -0,0 +1,242 @@ +#include "ScraperCmdLine.h" +#include +#include +#include "SystemData.h" +#include "Settings.h" +#include +#include "Log.h" + +std::ostream& out = std::cout; + +void handle_interrupt_signal(int p) +{ + sleep(50); + + LOG(LogInfo) << "Interrupt received during scrape..."; + + SystemData::deleteSystems(); + + exit(1); +} + +int run_scraper_cmdline() +{ + out << "EmulationStation scraper\n"; + out << "========================\n"; + out << "\n"; + + signal(SIGINT, handle_interrupt_signal); + + //================================================================================== + //filter + //================================================================================== + enum FilterChoice + { + FILTER_MISSING_IMAGES, + FILTER_ALL + }; + + int filter_choice; + do { + out << "Select filter for games to be scraped:\n"; + out << FILTER_MISSING_IMAGES << " - games missing images\n"; + out << FILTER_ALL << " - all games period, can overwrite existing metadata\n"; + + std::cin >> filter_choice; + std::cin.ignore(1, '\n'); //skip the unconsumed newline + } while(filter_choice < FILTER_MISSING_IMAGES || filter_choice > FILTER_ALL); + + out << "\n"; + + //================================================================================== + //platforms + //================================================================================== + + std::vector systems; + + out << "You can scrape only specific platforms, or scrape all of them.\n"; + out << "Would you like to scrape all platforms? (y/n)\n"; + + std::string system_choice; + std::getline(std::cin, system_choice); + + if(system_choice == "y" || system_choice == "Y") + { + out << "Will scrape all platforms.\n"; + for(auto i = SystemData::sSystemVector.begin(); i != SystemData::sSystemVector.end(); i++) + { + out << " " << (*i)->getName() << " (" << (*i)->getGameCount() << " games)\n"; + systems.push_back(*i); + } + + }else{ + std::string sys_name; + + out << "Enter the names of the platforms you would like to scrape, one at a time.\n"; + out << "Type nothing and press enter when you are ready to continue.\n"; + + do { + for(auto i = SystemData::sSystemVector.begin(); i != SystemData::sSystemVector.end(); i++) + { + if(std::find(systems.begin(), systems.end(), (*i)) != systems.end()) + out << " C "; + else + out << " "; + + out << "\"" << (*i)->getName() << "\" (" << (*i)->getGameCount() << " games)\n"; + } + + std::getline(std::cin, sys_name); + + if(sys_name.empty()) + break; + + bool found = false; + for(auto i = SystemData::sSystemVector.begin(); i != SystemData::sSystemVector.end(); i++) + { + if((*i)->getName() == sys_name) + { + systems.push_back(*i); + found = true; + break; + } + } + + if(!found) + out << "System not found.\n"; + + } while(true); + } + + //================================================================================== + //manual mode + //================================================================================== + + out << "\n"; + out << "You can let the scraper try to automatically choose the best result, or\n"; + out << "you can manually approve each result. This \"manual mode\" is much more accurate.\n"; + out << "It is highly recommended you use manual mode unless you have a very large collection.\n"; + out << "Scrape in manual mode? (y/n)\n"; + + std::string manual_mode_str; + std::getline(std::cin, manual_mode_str); + + bool manual_mode = false; + + if(manual_mode_str == "y" || manual_mode_str == "Y") + { + manual_mode = true; + out << "Scraping in manual mode!\n"; + }else{ + out << "Scraping in automatic mode!\n"; + } + + //================================================================================== + //scraping + //================================================================================== + out << "\n"; + out << "Alright, let's do this thing!\n"; + out << "=============================\n"; + + Scraper* scraper = Settings::getInstance()->getScraper(); + for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) + { + std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(true); + + ScraperSearchParams params; + params.system = (*sysIt); + + for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + { + params.nameOverride = ""; + params.game = (GameData*)(*gameIt); + + //print original search term + out << params.game->getCleanName() << "...\n"; + + //need to take into account filter_choice + if(filter_choice == FILTER_MISSING_IMAGES) + { + if(!params.game->metadata()->get("image").empty()) //maybe should also check if the image file exists/is a URL + { + out << " Skipping, metadata \"image\" entry is not empty.\n"; + continue; + } + } + + //actually get some results + do { + std::vector mdls = scraper->getResults(params); + + //no results + if(mdls.size() == 0) + { + if(manual_mode) + { + //in manual mode let the user enter a custom search + out << " NO RESULTS FOUND! Enter a new name to search for, or nothing to skip.\n"; + + std::getline(std::cin, params.nameOverride); + + if(params.nameOverride.empty()) + { + out << " Skipping...\n"; + break; + } + + continue; + + }else{ + out << " NO RESULTS FOUND! Skipping...\n"; + break; + } + } + + //some results + if(manual_mode) + { + //print list of choices + for(unsigned int i = 0; i < mdls.size(); i++) + { + out << " " << i << " - " << mdls.at(i).get("name") << "\n"; + } + + int choice = -1; + std::string choice_str; + + out << "Your choice: "; + + std::getline(std::cin, choice_str); + std::stringstream choice_buff(choice_str); //convert to int + choice_buff >> choice; + + if(choice >= 0 && choice < (int)mdls.size()) + { + *params.game->metadata() = mdls.at(choice); + break; + }else{ + out << "Invalid choice.\n"; + continue; + } + + }else{ + //automatic mode + //always choose the first choice + out << " name -> " << mdls.at(0).get("name") << "\n"; + *params.game->metadata() = mdls.at(0); + break; + } + + } while(true); + + out << "===================\n"; + } + } + + out << "\n\n"; + out << "==============================\n"; + out << "SCRAPE COMPLETE!\n"; + out << "==============================\n"; + + return 0; +} diff --git a/src/ScraperCmdLine.h b/src/ScraperCmdLine.h new file mode 100644 index 000000000..657c0186e --- /dev/null +++ b/src/ScraperCmdLine.h @@ -0,0 +1,3 @@ +#pragma once + +int run_scraper_cmdline(); diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 3fdce18db..087de8bb2 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -349,3 +349,8 @@ PlatformIds::PlatformId SystemData::getPlatformId() { return mPlatformId; } + +unsigned int SystemData::getGameCount() +{ + return mRootFolder->getFilesRecursive(true).size(); +} diff --git a/src/SystemData.h b/src/SystemData.h index 98fb956ba..e6bbefa6e 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -26,6 +26,7 @@ public: PlatformIds::PlatformId getPlatformId(); bool hasGamelist(); std::vector getGameMDD(); + unsigned int getGameCount(); void launchGame(Window* window, GameData* game); diff --git a/src/main.cpp b/src/main.cpp index 2d3c77c7a..f000232d0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,6 +15,7 @@ #include "Window.h" #include "EmulationStation.h" #include "Settings.h" +#include "ScraperCmdLine.h" #ifdef _RPI_ #include @@ -24,6 +25,8 @@ namespace fs = boost::filesystem; +bool scrape_cmdline = false; + bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height) { if(argc > 1) @@ -61,6 +64,9 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--windowed") == 0) { Settings::getInstance()->setBool("WINDOWED", true); + }else if(strcmp(argv[i], "--scrape") == 0) + { + scrape_cmdline = true; }else if(strcmp(argv[i], "--help") == 0) { std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n"; @@ -73,6 +79,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height std::cout << "--no-exit don't show the exit option in the menu\n"; std::cout << "--debug even more logging\n"; std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 30, use 0 for never)\n"; + std::cout << "--scrape scrape using command line interface\n"; #ifdef USE_OPENGL_DESKTOP std::cout << "--windowed not fullscreen\n"; @@ -132,16 +139,6 @@ int main(int argc, char* argv[]) //always close the log and deinit the BCM library on exit atexit(&onExit); - Window window; - if(!window.init(width, height)) - { - LOG(LogError) << "Window failed to initialize!"; - return 1; - } - - //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug) - SDL_JoystickEventState(SDL_DISABLE); - //try loading the system config file if(!SystemData::loadConfig(SystemData::getConfigPath(), true)) { @@ -156,6 +153,22 @@ int main(int argc, char* argv[]) return 1; } + //run the command line scraper ui then quit + if(scrape_cmdline) + { + return run_scraper_cmdline(); + } + + Window window; + if(!window.init(width, height)) + { + LOG(LogError) << "Window failed to initialize!"; + return 1; + } + + //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug) + SDL_JoystickEventState(SDL_DISABLE); + //choose which GUI to open depending on if an input configuration already exists if(fs::exists(InputManager::getConfigPath())) { From 2f358826fd5e5e896e41d3b4ae5fd21f6d784655 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 30 Sep 2013 14:33:50 -0500 Subject: [PATCH 057/386] Added boost date_time to CMakeLists.txt to fix building on Linux. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 324eee80a..749529d0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ endif() find_package(FreeType REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) -find_package(Boost REQUIRED COMPONENTS system filesystem regex) +find_package(Boost REQUIRED COMPONENTS system filesystem regex date_time) find_package(Eigen3 REQUIRED) #add ALSA for Linux From e7135d869c57836b16f61322299cb41510b2d1dd Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 30 Sep 2013 14:34:22 -0500 Subject: [PATCH 058/386] Updated README.md and --help command. --- README.md | 31 ++++++++++++++++--------------- src/main.cpp | 11 +---------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 48902ea02..7993d0877 100644 --- a/README.md +++ b/README.md @@ -27,20 +27,20 @@ Building EmulationStation uses some C++11 code, which means you'll need to install at least g++-4.7 on Linux, or VS2010 on Windows. For installing and switching to g++-4.7 see [here](http://lektiondestages.blogspot.de/2013/05/installing-and-switching-gccg-versions.html). You can also just use `export CXX=g++-4.7` to explicitly specify the compiler for CMake (make sure you delete your CMake cache files if it's not working). -EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.System, Boost.Filesystem, Boost.Asio, FreeImage, FreeType, and Eigen3. You'll also need the DejaVu TrueType font on Linux to run ES. +EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.System, Boost.Filesystem, Boost.Asio, Boost.Regex, Boost.DateTime, FreeImage, FreeType, and Eigen3. You'll also need the DejaVu TrueType font on Linux to run ES. **On Linux:** All of this be easily installed with apt-get: ``` -sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu libasound2-dev +sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu libasound2-dev ``` -On "desktop" Linux (that is, *not* the Raspberry Pi), you'll also need OpenGL. Try installing the MESA development package with: +Unless you're on the Raspberry Pi, you'll also need OpenGL: ``` -sudo apt-get libgl1-mesa-dev +sudo apt-get install libgl1-mesa-dev ``` -On the Raspberry Pi, there are also a few special libraries, located in /opt/vc/: the Broadcom libraries, libEGL, and GLES. You shouldn't need to install them. +On the Raspberry Pi, there are also a few special libraries, located in /opt/vc/: the Broadcom libraries, libEGL, and GLES. You shouldn't need to install them; they are used by the Raspberry Pi port of SDL 2. **Generate and Build Makefile with CMake:** ``` @@ -52,7 +52,7 @@ make **On Windows:** -[Boost](http://www.boost.org/users/download/) (you'll need to compile for Boost.Filesystem and Boost.System) +[Boost](http://www.boost.org/users/download/) (you'll need to compile yourself or get the pre-compiled binaries) [Eigen3](http://eigen.tuxfamily.org/index.php?title=Main_Page) @@ -66,7 +66,7 @@ make [CMake](http://www.cmake.org/cmake/resources/software.html) (this is used for generating the Visual Studio project) -(If you don't know how to use CMake, here are some hints: run cmake-gui and point it at your EmulationStation folder. Point the "build" directory somewhere - I use EmulationStation/build. Click configure, choose "Visual Studio [year] Project", fill in red fields as they appear, then click Generate.) +(If you don't know how to use CMake, here are some hints: run cmake-gui and point it at your EmulationStation folder. Point the "build" directory somewhere - I use EmulationStation/build. Click configure, choose "Visual Studio [year] Project", fill in red fields as they appear and keep clicking Configure, then click Generate.) Configuring @@ -78,19 +78,19 @@ When first run, an example systems configuration file will be created at $HOME/. **~/.emulationstation/es_input.cfg:** When you first start EmulationStation, you will be prompted to configure any input devices you wish to use. The process is thus: -1. Press a button on any device you wish to use. *This includes the keyboard.* If you are unable to configure a device, hold a button on the first device to continue to step 2. +1. Press a button on any device you wish to use. *This includes the keyboard.* Once you have selected all the devices you wish to configure, hold a button on the first device to continue to step 2. -2. Press the displayed input for each device in sequence. You will be prompted for Up, Down, Left, Right, A (Select), B (Back), Menu, Select (fast select), PageUp, and PageDown, Volume up and Volume down. If your controller doesn't have enough buttons to map PageUp/PageDown, it will be skipped. +2. Press the displayed input for each device in sequence. You will be prompted for Up, Down, Left, Right, A (Select), B (Back), Menu, Select (fast select), PageUp, and PageDown. If your controller doesn't have enough buttons for everything, you can press A to skip the remaining inputs. -3. Your config will be saved to `~/.emulationstation/es_input.cfg`. If you wish to reconfigure, just delete this file. +3. Your config will be saved to `~/.emulationstation/es_input.cfg`. *If you wish to reconfigure, just delete this file.* -*NOTE: If `~/.emulationstation/es_input.cfg` is present but does not contain any available joysticks or a keyboard, an emergency default keyboard mapping will be provided.* +*NOTE: If `~/.emulationstation/es_input.cfg` is present but does not contain any available joysticks or a keyboard, an emergency default keyboard mapping will be used.* As long as ES hasn't frozen, you can always press F4 to close the application. **Keep in mind you'll have to set up your emulator separately from EmulationStation.** -I am currently also working on a stand-alone tool, [ES-config](https://github.com/Aloshi/ES-config), that will help make configuring emulators easier. +I am currently also working on a stand-alone tool, [ES-config](https://github.com/Aloshi/ES-config), that should help make configuring emulators easier. After you launch a game, EmulationStation will return once your system's command terminates (i.e. your emulator closes). @@ -106,6 +106,7 @@ You can use `--help` to view a list of command-line options. Briefly outlined he --debug - print additional output to the console, primarily about input. --dimtime [seconds] - delay before dimming the screen and entering sleep mode. Default is 30, use 0 for never. --windowed - run ES in a window. +--scrape - run the interactive command-line metadata scraper. ``` Writing an es_systems.cfg @@ -157,9 +158,7 @@ The following "tags" are replaced by ES in launch commands: gamelist.xml ============ -The gamelist.xml for a system defines metadata for a system's games. This metadata includes an image (e.g. screenshot or box art), description, and name. - -**Making a gamelist.xml by hand sucks, so a cool guy named Pendor made a python script which automatically generates a gamelist.xml for you, with boxart automatically downloaded. It can be found here:** https://github.com/elpendor/ES-scraper +The gamelist.xml for a system defines metadata for a system's games, such as a name, image (like a screenshot or box art), description, release date, and rating. If a file named gamelist.xml is found in the root of a system's search directory OR within `~/.emulationstation/%NAME%/`, game metadata will be loaded from it. This allows you to define images, descriptions, and different names for files. Note that only standard ASCII characters are supported for text (if you see a weird [X] symbol, you're probably using unicode!). Images will be automatically resized to fit within the left column of the screen. Smaller images will load faster, so try to keep your resolution low. @@ -180,6 +179,8 @@ The path element should be the absolute path of the ROM. Special characters SHOU The switch `--gamelist-only` can be used to skip automatic searching, and only display games defined in the system's gamelist.xml. The switch `--ignore-gamelist` can be used to ignore the gamelist and use the non-detailed view. +*You can use ES's [scraping](http://en.wikipedia.org/wiki/Web_scraping) tools to avoid creating a gamelist.xml by hand.* A command-line version is also provided - just run emulationstation with `--scrape`. + Themes ====== diff --git a/src/main.cpp b/src/main.cpp index f000232d0..f8e6c244b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,11 +16,6 @@ #include "EmulationStation.h" #include "Settings.h" #include "ScraperCmdLine.h" - -#ifdef _RPI_ - #include -#endif - #include namespace fs = boost::filesystem; @@ -80,11 +75,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height std::cout << "--debug even more logging\n"; std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 30, use 0 for never)\n"; std::cout << "--scrape scrape using command line interface\n"; - - #ifdef USE_OPENGL_DESKTOP - std::cout << "--windowed not fullscreen\n"; - #endif - + std::cout << "--windowed not fullscreen\n"; std::cout << "--help summon a sentient, angry tuba\n\n"; std::cout << "More information available in README.md.\n"; return false; //exit after printing help From 6956211ff09f1456274c2d2a631d9cda3962771e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 1 Oct 2013 16:52:30 -0500 Subject: [PATCH 059/386] Started on OptionListComponent. --- CMakeLists.txt | 2 + src/components/OptionListComponent.cpp | 55 ++++++++++++++++++++++++++ src/components/OptionListComponent.h | 38 ++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/components/OptionListComponent.cpp create mode 100644 src/components/OptionListComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 749529d0e..706ba1604 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,6 +164,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h @@ -220,6 +221,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp diff --git a/src/components/OptionListComponent.cpp b/src/components/OptionListComponent.cpp new file mode 100644 index 000000000..76a071da2 --- /dev/null +++ b/src/components/OptionListComponent.cpp @@ -0,0 +1,55 @@ +#include "OptionListComponent.h" + +OptionListComponent::OptionListComponent(Window* window) : GuiComponent(window), + mClosedCallback(nullptr) +{ +} + +void OptionListComponent::setClosedCallback(std::function)> callback) +{ + mClosedCallback = callback; +} + +bool OptionListComponent::input(InputConfig* config, Input input) +{ + return GuiComponent::input(config, input); +} + +void OptionListComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + + renderChildren(trans); +} + +template +void OptionListComponent::populate(const std::vector& vec, std::function selector) +{ + for(auto it = vec.begin(); it != vec.end(); it++) + { + ListEntry e = selector(*it); + if(!e.name.empty()) + mEntries.push_back(e); + } +} + +std::vector OptionListComponent::getSelected() +{ + std::vector ret; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).selected) + ret.push_back(&(*it)); + } + + return ret; +} + +void OptionListComponent::close() +{ + if(mClosedCallback) + mClosedCallback(getSelected()); + + delete this; +} + diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h new file mode 100644 index 000000000..68cb614d9 --- /dev/null +++ b/src/components/OptionListComponent.h @@ -0,0 +1,38 @@ +#pragma once + +#include "../GuiComponent.h" +#include +#include + +//Used to display a list of options. +//Can select one or multiple options. + +struct ListEntry +{ + std::string name; + unsigned int color; + bool selected; +}; + +class OptionListComponent : public GuiComponent +{ +public: + OptionListComponent(Window* window); + + bool input(InputConfig* config, Input input); + void render(const Eigen::Affine3f& trans); + + void setClosedCallback(std::function)> callback); + + template + void populate(const std::vector& vec, std::function selector); + + std::vector getSelected(); +private: + void close(); + + std::function)> mClosedCallback; + + std::vector mEntries; +}; + From a4185176da401858d20f79d077874bb6e7219816 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 3 Oct 2013 15:58:09 -0500 Subject: [PATCH 060/386] OptionListComponent --- CMakeLists.txt | 1 - src/components/GuiSettingsMenu.cpp | 27 +++- src/components/GuiSettingsMenu.h | 3 + src/components/OptionListComponent.cpp | 55 -------- src/components/OptionListComponent.h | 183 ++++++++++++++++++++++--- src/scrapers/GamesDBScraper.cpp | 2 + src/scrapers/GamesDBScraper.h | 2 + src/scrapers/Scraper.h | 2 + src/scrapers/TheArchiveScraper.cpp | 2 + src/scrapers/TheArchiveScraper.h | 2 + 10 files changed, 204 insertions(+), 75 deletions(-) delete mode 100644 src/components/OptionListComponent.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 706ba1604..766f14169 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index 67f30b2ae..30a3bd2d2 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -3,13 +3,17 @@ #include "../Settings.h" #include "../VolumeControl.h" +#include "../scrapers/TheArchiveScraper.h" +#include "../scrapers/GamesDBScraper.h" + GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 4)), + mList(window, Eigen::Vector2i(2, 5)), mBox(mWindow, ":/frame.png", 0x444444FF), mDrawFramerateSwitch(window), mVolumeSlider(window, 0, 100, 1), mDisableSoundsSwitch(window, false), - mSaveLabel(window) + mSaveLabel(window), + mScraperOptList(window) { loadStates(); @@ -20,6 +24,7 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), using namespace Eigen; + //drawFramerate label TextComponent* label = new TextComponent(mWindow); label->setText("Draw Framerate: "); label->setColor(0x0000FFFF); @@ -48,11 +53,27 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mDisableSoundsSwitch, true, ComponentListComponent::AlignCenter, Matrix(true, true)); + //scraper label + label = new TextComponent(mWindow); + label->setText("Scraper: "); + label->setColor(0x0000FFFF); + mLabels.push_back(label); + mList.setEntry(Vector2i(0, 3), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); + + //fill scraper list + std::vector< std::shared_ptr > scrapers; + scrapers.push_back(std::shared_ptr(new GamesDBScraper())); + scrapers.push_back(std::shared_ptr(new TheArchiveScraper())); + mScraperOptList.populate(scrapers, [&] (const std::shared_ptr& s) { + return mScraperOptList.makeEntry(s->getName(), 0x00FF00FF, s); + } ); + + mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentListComponent::AlignCenter); //save label mSaveLabel.setText("SAVE"); mSaveLabel.setColor(0x000000FF); - mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mSaveLabel, true, ComponentListComponent::AlignCenter, Matrix(false, true)); + mList.setEntry(Vector2i(0, 4), Vector2i(2, 1), &mSaveLabel, true, ComponentListComponent::AlignCenter, Matrix(false, true)); //center list mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); diff --git a/src/components/GuiSettingsMenu.h b/src/components/GuiSettingsMenu.h index f15fb965b..2f85bb34f 100644 --- a/src/components/GuiSettingsMenu.h +++ b/src/components/GuiSettingsMenu.h @@ -8,6 +8,8 @@ #include "SliderComponent.h" #include "TextComponent.h" #include "NinePatchComponent.h" +#include "OptionListComponent.h" +#include "../scrapers/Scraper.h" class GuiSettingsMenu : public GuiComponent { @@ -28,6 +30,7 @@ private: SwitchComponent mDrawFramerateSwitch; SliderComponent mVolumeSlider; SwitchComponent mDisableSoundsSwitch; + OptionListComponent< std::shared_ptr > mScraperOptList; TextComponent mSaveLabel; std::vector mLabels; diff --git a/src/components/OptionListComponent.cpp b/src/components/OptionListComponent.cpp deleted file mode 100644 index 76a071da2..000000000 --- a/src/components/OptionListComponent.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "OptionListComponent.h" - -OptionListComponent::OptionListComponent(Window* window) : GuiComponent(window), - mClosedCallback(nullptr) -{ -} - -void OptionListComponent::setClosedCallback(std::function)> callback) -{ - mClosedCallback = callback; -} - -bool OptionListComponent::input(InputConfig* config, Input input) -{ - return GuiComponent::input(config, input); -} - -void OptionListComponent::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - - renderChildren(trans); -} - -template -void OptionListComponent::populate(const std::vector& vec, std::function selector) -{ - for(auto it = vec.begin(); it != vec.end(); it++) - { - ListEntry e = selector(*it); - if(!e.name.empty()) - mEntries.push_back(e); - } -} - -std::vector OptionListComponent::getSelected() -{ - std::vector ret; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - { - if((*it).selected) - ret.push_back(&(*it)); - } - - return ret; -} - -void OptionListComponent::close() -{ - if(mClosedCallback) - mClosedCallback(getSelected()); - - delete this; -} - diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 68cb614d9..e2955d38c 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -1,38 +1,189 @@ #pragma once #include "../GuiComponent.h" +#include "../Font.h" #include #include +#include "../Renderer.h" +#include "../Window.h" //Used to display a list of options. //Can select one or multiple options. -struct ListEntry -{ - std::string name; - unsigned int color; - bool selected; -}; - +template class OptionListComponent : public GuiComponent { public: - OptionListComponent(Window* window); + OptionListComponent(Window* window) : GuiComponent(window), + mClosedCallback(nullptr), mCursor(0), mScrollOffset(0) + { + } - bool input(InputConfig* config, Input input); - void render(const Eigen::Affine3f& trans); + struct ListEntry + { + std::string text; + unsigned int color; + bool selected; + T object; + }; - void setClosedCallback(std::function)> callback); - - template - void populate(const std::vector& vec, std::function selector); - std::vector getSelected(); + void setClosedCallback(std::function)> callback) + { + mClosedCallback = callback; + } + + bool input(InputConfig* config, Input input) + { + if(input.value != 0) + { + if(config->isMappedTo("b", input)) + { + close(); + return true; + } + if(config->isMappedTo("a", input)) + { + select(mCursor); + return true; + } + if(mEntries.size() > 1) + { + if(config->isMappedTo("up", input)) + { + if(mCursor > 0) + { + mCursor--; + return true; + } + } + if(config->isMappedTo("down", input)) + { + if(mCursor < mEntries.size() - 1) + { + mCursor++; + return true; + } + } + } + } + + return GuiComponent::input(config, input); + } + + void render(const Eigen::Affine3f& parentTrans) + { + Eigen::Affine3f trans = parentTrans * getTransform(); + + std::shared_ptr font = getFont(); + + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + Eigen::Vector2i((int)getSize().x(), (int)getSize().y())); + + for(unsigned int i = mScrollOffset; i < mTextCaches.size(); i++) + { + Renderer::setMatrix(trans); + + if(i == mCursor) + Renderer::drawRect(0, 0, (int)mSize.x(), font->getHeight(), 0x000000FF); + + font->renderTextCache(mTextCaches.at(i)); + trans = trans.translate(Eigen::Vector3f(0, (float)font->getHeight(), 0)); + } + + Renderer::popClipRect(); + + trans = parentTrans * getTransform(); + renderChildren(trans); + } + + ListEntry makeEntry(const std::string& name, unsigned int color, T obj) const + { + ListEntry e = {name, color, false, obj}; + return e; + } + + void populate(std::vector& vec, std::function selector) + { + for(auto it = vec.begin(); it != vec.end(); it++) + { + ListEntry e = selector(*it); + if(!e.text.empty()) + mEntries.push_back(e); + } + + updateTextCaches(); + } + + void addEntry(ListEntry e) + { + mEntries.push_back(e); + updateTextCaches(); + } + + std::vector getSelected() + { + std::vector ret; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).selected) + ret.push_back(&(*it)); + } + + return ret; + } private: - void close(); + void select(unsigned int i) + { + if(i >= mEntries.size()) + return; + + mEntries.at(i).selected = !mEntries.at(i).selected; + updateTextCaches(); + } + + void close() + { + if(mClosedCallback) + mClosedCallback(getSelected()); + } + + void updateTextCaches() + { + for(auto it = mTextCaches.begin(); it != mTextCaches.end(); it++) + { + delete *it; + } + mTextCaches.clear(); + + TextCache* cache; + std::shared_ptr font = getFont(); + Eigen::Vector2f newSize = getSize(); + newSize[1] = 0; + for(unsigned int i = 0; i < mEntries.size(); i++) + { + cache = font->buildTextCache(mEntries.at(i).text, 0, 0, mEntries.at(i).color); + mTextCaches.push_back(cache); + + if(cache->metrics.size.x() > newSize.x()) + newSize[0] = cache->metrics.size.x(); + + newSize[1] += cache->metrics.size.y(); + } + setSize(newSize); + } + + std::shared_ptr getFont() + { + return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + } + std::function)> mClosedCallback; + unsigned int mCursor; + unsigned int mScrollOffset; std::vector mEntries; + std::vector mTextCaches; }; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 8965529a3..1d8d7e39d 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -5,6 +5,8 @@ #include "../pugiXML/pugixml.hpp" #include "../MetaData.h" +const char* GamesDBScraper::getName() { return "TheGamesDB"; } + std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) { std::string path = "/api/GetGame.php?"; diff --git a/src/scrapers/GamesDBScraper.h b/src/scrapers/GamesDBScraper.h index 3c80cde50..3a306ee99 100644 --- a/src/scrapers/GamesDBScraper.h +++ b/src/scrapers/GamesDBScraper.h @@ -5,6 +5,8 @@ class GamesDBScraper : public Scraper { +public: + const char* getName(); private: std::shared_ptr makeHttpReq(ScraperSearchParams params) override; std::vector parseReq(ScraperSearchParams params, std::shared_ptr) override; diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 9bb2cff7a..f5f9a8ed3 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -24,7 +24,9 @@ public: virtual std::vector getResults(ScraperSearchParams params); virtual void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc); + virtual const char* getName() = 0; private: virtual std::shared_ptr makeHttpReq(ScraperSearchParams params) = 0; virtual std::vector parseReq(ScraperSearchParams params, std::shared_ptr) = 0; }; + diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 73ad0dbc6..61a5e03ca 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -4,6 +4,8 @@ #include "../Log.h" #include "../pugiXML/pugixml.hpp" +const char* TheArchiveScraper::getName() { return "TheArchiveVG"; } + std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams params) { std::string path = "/2.0/Archive.search/xml/7TTRM4MNTIKR2NNAGASURHJOZJ3QXQC5/"; diff --git a/src/scrapers/TheArchiveScraper.h b/src/scrapers/TheArchiveScraper.h index a9a027ee8..bf5ef0bef 100644 --- a/src/scrapers/TheArchiveScraper.h +++ b/src/scrapers/TheArchiveScraper.h @@ -5,6 +5,8 @@ class TheArchiveScraper : public Scraper { +public: + const char* getName(); private: std::shared_ptr makeHttpReq(ScraperSearchParams params) override; std::vector parseReq(ScraperSearchParams params, std::shared_ptr) override; From b510aa8cd460bfda9d260457b6cc3ce7ab2c0172 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 4 Oct 2013 18:09:54 -0500 Subject: [PATCH 061/386] Moved ResourceManager to be a singleton. The character count of the average Font::get decreased by 310%... --- src/Font.cpp | 16 ++++++++-------- src/Font.h | 8 ++++---- src/Window.cpp | 15 +++++---------- src/Window.h | 1 - src/components/ButtonComponent.cpp | 2 +- src/components/DateTimeComponent.cpp | 2 +- src/components/GuiDetectDevice.cpp | 2 +- src/components/GuiGameList.cpp | 6 +++--- src/components/GuiGameScraper.cpp | 10 +++++----- src/components/GuiInputConfig.cpp | 2 +- src/components/GuiMenu.cpp | 2 +- src/components/ImageComponent.cpp | 10 ++++------ src/components/NinePatchComponent.cpp | 2 +- src/components/OptionListComponent.h | 2 +- src/components/RatingComponent.cpp | 4 ++-- src/components/SwitchComponent.cpp | 4 ++-- src/components/TextComponent.cpp | 2 +- src/components/TextEditComponent.cpp | 2 +- src/components/ThemeComponent.cpp | 8 ++++---- src/resources/ResourceManager.cpp | 18 ++++++++++++++++-- src/resources/ResourceManager.h | 10 ++++++++-- src/resources/TextureResource.cpp | 23 +++++++++++++---------- src/resources/TextureResource.h | 8 ++++---- 23 files changed, 87 insertions(+), 72 deletions(-) diff --git a/src/Font.cpp b/src/Font.cpp index 329b6c12e..b49b4fe1d 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -79,9 +79,9 @@ void Font::initLibrary() } } -Font::Font(const ResourceManager& rm, const std::string& path, int size) : fontScale(1.0f), mSize(size), mPath(path) +Font::Font(int size, const std::string& path) : fontScale(1.0f), mSize(size), mPath(path) { - reload(rm); + reload(ResourceManager::getInstance()); } Font::~Font() @@ -89,17 +89,17 @@ Font::~Font() deinit(); } -void Font::reload(const ResourceManager& rm) +void Font::reload(std::shared_ptr& rm) { - init(rm.getFileData(mPath)); + init(rm->getFileData(mPath)); } -void Font::unload(const ResourceManager& rm) +void Font::unload(std::shared_ptr& rm) { deinit(); } -std::shared_ptr Font::get(ResourceManager& rm, const std::string& path, int size) +std::shared_ptr Font::get(int size, const std::string& path) { if(path.empty()) { @@ -115,9 +115,9 @@ std::shared_ptr Font::get(ResourceManager& rm, const std::string& path, in return foundFont->second.lock(); } - std::shared_ptr font = std::shared_ptr(new Font(rm, path, size)); + std::shared_ptr font = std::shared_ptr(new Font(size, path)); sFontMap[def] = std::weak_ptr(font); - rm.addReloadable(font); + ResourceManager::getInstance()->addReloadable(font); return font; } diff --git a/src/Font.h b/src/Font.h index a5e75d0ef..9298b3195 100644 --- a/src/Font.h +++ b/src/Font.h @@ -22,7 +22,7 @@ class Font : public IReloadable public: static void initLibrary(); - static std::shared_ptr get(ResourceManager& rm, const std::string& path, int size); + static std::shared_ptr get(int size, const std::string& path = getDefaultPath()); ~Font(); @@ -63,8 +63,8 @@ public: int getHeight() const; - void unload(const ResourceManager& rm) override; - void reload(const ResourceManager& rm) override; + void unload(std::shared_ptr& rm) override; + void reload(std::shared_ptr& rm) override; int getSize() const; @@ -78,7 +78,7 @@ private: static std::map< std::pair, std::weak_ptr > sFontMap; - Font(const ResourceManager& rm, const std::string& path, int size); + Font(int size, const std::string& path); void init(ResourceData data); void deinit(); diff --git a/src/Window.cpp b/src/Window.cpp index 8c4ce6dfb..cf1784443 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -58,14 +58,14 @@ bool Window::init(unsigned int width, unsigned int height) mInputManager->init(); - mResourceManager.reloadAll(); + ResourceManager::getInstance()->reloadAll(); //keep a reference to the default fonts, so they don't keep getting destroyed/recreated if(mDefaultFonts.empty()) { - mDefaultFonts.push_back(Font::get(mResourceManager, Font::getDefaultPath(), FONT_SIZE_SMALL)); - mDefaultFonts.push_back(Font::get(mResourceManager, Font::getDefaultPath(), FONT_SIZE_MEDIUM)); - mDefaultFonts.push_back(Font::get(mResourceManager, Font::getDefaultPath(), FONT_SIZE_LARGE)); + mDefaultFonts.push_back(Font::get(FONT_SIZE_SMALL)); + mDefaultFonts.push_back(Font::get(FONT_SIZE_MEDIUM)); + mDefaultFonts.push_back(Font::get(FONT_SIZE_LARGE)); } return true; @@ -74,7 +74,7 @@ bool Window::init(unsigned int width, unsigned int height) void Window::deinit() { mInputManager->deinit(); - mResourceManager.unloadAll(); + ResourceManager::getInstance()->unloadAll(); Renderer::deinit(); } @@ -153,11 +153,6 @@ InputManager* Window::getInputManager() return mInputManager; } -ResourceManager* Window::getResourceManager() -{ - return &mResourceManager; -} - void Window::setZoomFactor(const float& zoom) { mZoomFactor = zoom; diff --git a/src/Window.h b/src/Window.h index 9cb694d85..610ca817b 100644 --- a/src/Window.h +++ b/src/Window.h @@ -36,7 +36,6 @@ public: private: InputManager* mInputManager; - ResourceManager mResourceManager; std::vector mGuiStack; std::vector< std::shared_ptr > mDefaultFonts; diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 19ad42939..6ae9f5ebd 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -76,7 +76,7 @@ void ButtonComponent::render(const Eigen::Affine3f& parentTrans) std::shared_ptr ButtonComponent::getFont() { - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + return Font::get(FONT_SIZE_SMALL); } unsigned int ButtonComponent::getCurTextColor() const diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index cd6266f12..aaf624dfc 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -231,7 +231,7 @@ std::string DateTimeComponent::getDisplayString(DisplayMode mode) const std::shared_ptr DateTimeComponent::getFont() const { - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM); + return Font::get(FONT_SIZE_MEDIUM); } void DateTimeComponent::updateTextCache() diff --git a/src/components/GuiDetectDevice.cpp b/src/components/GuiDetectDevice.cpp index 2777ae26d..79cf2c74b 100644 --- a/src/components/GuiDetectDevice.cpp +++ b/src/components/GuiDetectDevice.cpp @@ -82,7 +82,7 @@ void GuiDetectDevice::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); - std::shared_ptr font = Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM); + std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); std::string playerString; std::stringstream stream; diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index a6746c571..27e17707f 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -25,7 +25,7 @@ bool GuiGameList::isDetailed() const GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mTheme(new ThemeComponent(mWindow)), - mList(window, 0.0f, 0.0f, Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), + mList(window, 0.0f, 0.0f, Font::get(FONT_SIZE_MEDIUM)), mScreenshot(window), mDescription(window), mRating(window), @@ -60,7 +60,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mTransitionImage.setOrigin(0, 0); mHeaderText.setColor(0xFF0000FF); - mHeaderText.setFont(Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_LARGE)); + mHeaderText.setFont(Font::get(FONT_SIZE_LARGE)); mHeaderText.setPosition(0, 1); mHeaderText.setSize((float)Renderer::getScreenWidth(), 0); mHeaderText.setCentered(true); @@ -329,7 +329,7 @@ void GuiGameList::updateTheme() mList.setScrollSound(mTheme->getSound("menuScroll")); mList.setFont(mTheme->getListFont()); - mList.setPosition(0.0f, Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_LARGE)->getHeight() + 2.0f); + mList.setPosition(0.0f, Font::get(FONT_SIZE_LARGE)->getHeight() + 2.0f); if(!mTheme->getBool("hideHeader")) { diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index 701cafb95..55a10ef07 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -7,13 +7,13 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc) : GuiComponent(window), mList(window, Eigen::Vector2i(2, 7 + MAX_SCRAPER_RESULTS)), mBox(window, ":/frame.png"), - mHeader(window, params.game->getBaseName(), Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), - mResultName(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)), + mHeader(window, params.game->getBaseName(), Font::get(FONT_SIZE_MEDIUM)), + mResultName(window, "", Font::get(FONT_SIZE_MEDIUM)), mResultInfo(window), - mResultDesc(window, "", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL)), + mResultDesc(window, "", Font::get(FONT_SIZE_SMALL)), mResultThumbnail(window), - mSearchLabel(window, "Search for: ", Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL)), + mSearchLabel(window, "Search for: ", Font::get(FONT_SIZE_SMALL)), mSearchText(window), mSearchParams(params), @@ -75,7 +75,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: //y = 5 is a spacer row - std::shared_ptr font = Font::get(*window->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + std::shared_ptr font = Font::get(FONT_SIZE_SMALL); mResultNames.reserve(MAX_SCRAPER_RESULTS); for(int i = 0; i < MAX_SCRAPER_RESULTS; i ++) { diff --git a/src/components/GuiInputConfig.cpp b/src/components/GuiInputConfig.cpp index 15fa2f21b..050a6122b 100644 --- a/src/components/GuiInputConfig.cpp +++ b/src/components/GuiInputConfig.cpp @@ -79,7 +79,7 @@ void GuiInputConfig::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); - std::shared_ptr font = Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM); + std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); std::stringstream stream; stream << "PLAYER " << mTargetConfig->getPlayerNum() + 1 << ", press..."; diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index b5963790b..18eaffd9f 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -11,7 +11,7 @@ GuiMenu::GuiMenu(Window* window, GuiGameList* parent) : GuiComponent(window) { mParent = parent; - std::shared_ptr font = Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_LARGE); + std::shared_ptr font = Font::get(FONT_SIZE_LARGE); mList = new TextListComponent(mWindow, 0.0f, font->getHeight() + 2.0f, font); mList->setSelectedTextColor(0x0000FFFF); populateList(); diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index e86015237..6c129099e 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -4,7 +4,6 @@ #include #include "../Log.h" #include "../Renderer.h" -#include "../Window.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -73,10 +72,10 @@ void ImageComponent::setImage(std::string path) { mPath = path; - if(mPath.empty() || !mWindow->getResourceManager()->fileExists(mPath)) + if(mPath.empty() || !ResourceManager::getInstance()->fileExists(mPath)) mTexture.reset(); else - mTexture = TextureResource::get(*mWindow->getResourceManager(), mPath); + mTexture = TextureResource::get(mPath); resize(); } @@ -85,7 +84,7 @@ void ImageComponent::setImage(const char* path, size_t length) { mTexture.reset(); - mTexture = TextureResource::get(*mWindow->getResourceManager(), ""); + mTexture = TextureResource::get(""); mTexture->initFromMemory(path, length); resize(); @@ -231,12 +230,11 @@ bool ImageComponent::hasImage() return !mPath.empty(); } - void ImageComponent::copyScreen() { mTexture.reset(); - mTexture = TextureResource::get(*mWindow->getResourceManager(), ""); + mTexture = TextureResource::get(""); mTexture->initFromScreen(); resize(); diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index e4bc675d8..4fdc62a30 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -26,7 +26,7 @@ void NinePatchComponent::buildVertices() if(mColors != NULL) delete[] mColors; - mTexture = TextureResource::get(*mWindow->getResourceManager(), mPath); + mTexture = TextureResource::get(mPath); if(mTexture->getSize() == Eigen::Vector2i::Zero()) { diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index e2955d38c..f64392875 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -175,7 +175,7 @@ private: std::shared_ptr getFont() { - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + return Font::get(FONT_SIZE_SMALL); } diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 63ce05a4a..6a827cb78 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -4,8 +4,8 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { - mFilledTexture = TextureResource::get(*window->getResourceManager(), ":/star_filled.png"); - mUnfilledTexture = TextureResource::get(*window->getResourceManager(), ":/star_unfilled.png"); + mFilledTexture = TextureResource::get(":/star_filled.png"); + mUnfilledTexture = TextureResource::get(":/star_unfilled.png"); mValue = 0.5f; mSize << 64 * 5.0f, 64; updateVertices(); diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index ef7156522..96ae1d0fb 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -8,7 +8,7 @@ SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(wind //mSize = Vector2u((unsigned int)(Renderer::getScreenWidth() * 0.05), // (unsigned int)(Renderer::getScreenHeight() * 0.05)); - mSize = Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)->sizeText("OFF"); + mSize = Font::get(FONT_SIZE_MEDIUM)->sizeText("OFF"); } bool SwitchComponent::input(InputConfig* config, Input input) @@ -29,7 +29,7 @@ void SwitchComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); - Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM)->drawText(mState ? "ON" : "OFF", Eigen::Vector2f(0, 0), mState ? 0x00FF00FF : 0xFF0000FF); + Font::get(FONT_SIZE_MEDIUM)->drawText(mState ? "ON" : "OFF", Eigen::Vector2f(0, 0), mState ? 0x00FF00FF : 0xFF0000FF); //Renderer::popClipRect(); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index e0484a53d..293624ef1 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -52,7 +52,7 @@ std::shared_ptr TextComponent::getFont() const if(mFont) return mFont; else - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM); + return Font::get(FONT_SIZE_MEDIUM); } void TextComponent::render(const Eigen::Affine3f& parentTrans) diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 6beb5afee..048a4ca03 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -210,7 +210,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) std::shared_ptr TextEditComponent::getFont() { - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + return Font::get(FONT_SIZE_SMALL); } bool TextEditComponent::isMultiline() diff --git a/src/components/ThemeComponent.cpp b/src/components/ThemeComponent.cpp index 7d5638d99..43703f214 100644 --- a/src/components/ThemeComponent.cpp +++ b/src/components/ThemeComponent.cpp @@ -38,7 +38,7 @@ std::shared_ptr ThemeComponent::getListFont() if(mListFont) return mListFont; else - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_MEDIUM); + return Font::get(FONT_SIZE_MEDIUM); } std::shared_ptr ThemeComponent::getDescriptionFont() @@ -46,7 +46,7 @@ std::shared_ptr ThemeComponent::getDescriptionFont() if(mDescFont) return mDescFont; else - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL); + return Font::get(FONT_SIZE_SMALL); } std::shared_ptr ThemeComponent::getFastSelectFont() @@ -54,7 +54,7 @@ std::shared_ptr ThemeComponent::getFastSelectFont() if(mFastSelectFont) return mFastSelectFont; else - return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_LARGE); + return Font::get(FONT_SIZE_LARGE); } ThemeComponent::ThemeComponent(Window* window) : GuiComponent(window) @@ -389,5 +389,5 @@ std::shared_ptr ThemeComponent::resolveFont(pugi::xml_node node, std::stri size = defaultSize; } - return Font::get(*mWindow->getResourceManager(), path, size); + return Font::get(size, path); } diff --git a/src/resources/ResourceManager.cpp b/src/resources/ResourceManager.cpp index 0184ff74d..5f2021607 100644 --- a/src/resources/ResourceManager.cpp +++ b/src/resources/ResourceManager.cpp @@ -9,6 +9,20 @@ namespace fs = boost::filesystem; auto array_deleter = [](unsigned char* p) { delete[] p; }; auto nop_deleter = [](unsigned char* p) { }; +std::shared_ptr ResourceManager::sInstance = nullptr; + +ResourceManager::ResourceManager() +{ +} + +std::shared_ptr& ResourceManager::getInstance() +{ + if(!sInstance) + sInstance = std::shared_ptr(new ResourceManager()); + + return sInstance; +} + const ResourceData ResourceManager::getFileData(const std::string& path) const { //check if its embedded @@ -69,7 +83,7 @@ void ResourceManager::unloadAll() { if(!iter->expired()) { - iter->lock()->unload(*this); + iter->lock()->unload(sInstance); iter++; }else{ iter = mReloadables.erase(iter); @@ -84,7 +98,7 @@ void ResourceManager::reloadAll() { if(!iter->expired()) { - iter->lock()->reload(*this); + iter->lock()->reload(sInstance); iter++; }else{ iter = mReloadables.erase(iter); diff --git a/src/resources/ResourceManager.h b/src/resources/ResourceManager.h index ed1d04998..d9d4aa3b8 100644 --- a/src/resources/ResourceManager.h +++ b/src/resources/ResourceManager.h @@ -20,13 +20,15 @@ class ResourceManager; class IReloadable { public: - virtual void unload(const ResourceManager& rm) = 0; - virtual void reload(const ResourceManager& rm) = 0; + virtual void unload(std::shared_ptr& rm) = 0; + virtual void reload(std::shared_ptr& rm) = 0; }; class ResourceManager { public: + static std::shared_ptr& getInstance(); + void addReloadable(std::weak_ptr reloadable); void unloadAll(); @@ -36,6 +38,10 @@ public: bool fileExists(const std::string& path) const; private: + ResourceManager(); + + static std::shared_ptr sInstance; + ResourceData loadFile(const std::string& path) const; std::list< std::weak_ptr > mReloadables; diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index e0540796a..f53f75360 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -7,9 +7,10 @@ std::map< std::string, std::weak_ptr > TextureResource::sTextureMap; -TextureResource::TextureResource(const ResourceManager& rm, const std::string& path) : mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()) +TextureResource::TextureResource(const std::string& path) : + mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()) { - reload(rm); + reload(ResourceManager::getInstance()); } TextureResource::~TextureResource() @@ -17,15 +18,15 @@ TextureResource::~TextureResource() deinit(); } -void TextureResource::unload(const ResourceManager& rm) +void TextureResource::unload(std::shared_ptr& rm) { deinit(); } -void TextureResource::reload(const ResourceManager& rm) +void TextureResource::reload(std::shared_ptr& rm) { if(!mPath.empty()) - initFromResource(rm.getFileData(mPath)); + initFromResource(rm->getFileData(mPath)); } void TextureResource::initFromResource(const ResourceData data) @@ -130,12 +131,14 @@ void TextureResource::bind() const } -std::shared_ptr TextureResource::get(ResourceManager& rm, const std::string& path) +std::shared_ptr TextureResource::get(const std::string& path) { + std::shared_ptr& rm = ResourceManager::getInstance(); + if(path.empty()) { - std::shared_ptr tex(new TextureResource(rm, "")); - rm.addReloadable(tex); //make sure we're deinitialized even though we do nothing on reinitialization + std::shared_ptr tex(new TextureResource("")); + rm->addReloadable(tex); //make sure we're deinitialized even though we do nothing on reinitialization return tex; } @@ -148,8 +151,8 @@ std::shared_ptr TextureResource::get(ResourceManager& rm, const } } - std::shared_ptr tex = std::shared_ptr(new TextureResource(rm, path)); + std::shared_ptr tex = std::shared_ptr(new TextureResource(path)); sTextureMap[path] = std::weak_ptr(tex); - rm.addReloadable(tex); + rm->addReloadable(tex); return tex; } diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index 85230aff3..0b4006ee1 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -10,12 +10,12 @@ class TextureResource : public IReloadable { public: - static std::shared_ptr get(ResourceManager& rm, const std::string& path); + static std::shared_ptr get(const std::string& path); virtual ~TextureResource(); - void unload(const ResourceManager& rm) override; - void reload(const ResourceManager& rm) override; + void unload(std::shared_ptr& rm) override; + void reload(std::shared_ptr& rm) override; Eigen::Vector2i getSize() const; void bind() const; @@ -24,7 +24,7 @@ public: void initFromMemory(const char* image, size_t length); private: - TextureResource(const ResourceManager& rm, const std::string& path); + TextureResource(const std::string& path); void initFromPath(); void initFromResource(const ResourceData data); From a6dbaa2dea813f52bcdc334166f0e0a9dade8d2c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 4 Oct 2013 18:24:41 -0500 Subject: [PATCH 062/386] Moved Font.h/.cpp to the "resources" directory (since it's a Reloadable). --- CMakeLists.txt | 4 +- src/Renderer_draw_gl.cpp | 2 +- src/Renderer_init.cpp | 2 +- src/Window.h | 2 +- src/components/ButtonComponent.h | 2 +- src/components/DateTimeComponent.h | 2 +- src/components/GuiDetectDevice.cpp | 2 +- src/components/GuiInputConfig.cpp | 2 +- src/components/OptionListComponent.h | 2 +- src/components/SwitchComponent.cpp | 2 +- src/components/TextComponent.h | 2 +- src/components/TextEditComponent.cpp | 2 +- src/components/TextListComponent.h | 2 +- src/components/ThemeComponent.h | 2 +- src/{ => resources}/Font.cpp | 1122 +++++++++++++------------- src/{ => resources}/Font.h | 242 +++--- 16 files changed, 697 insertions(+), 697 deletions(-) rename src/{ => resources}/Font.cpp (95%) rename src/{ => resources}/Font.h (94%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 766f14169..9cd614a12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,7 +137,6 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FolderData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/GameData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h @@ -186,6 +185,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h ${CMAKE_CURRENT_SOURCE_DIR}/data/Resources.h @@ -193,7 +193,6 @@ set(ES_HEADERS set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/FolderData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/GameData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp @@ -240,6 +239,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp diff --git a/src/Renderer_draw_gl.cpp b/src/Renderer_draw_gl.cpp index d851129b2..1a6727961 100644 --- a/src/Renderer_draw_gl.cpp +++ b/src/Renderer_draw_gl.cpp @@ -2,7 +2,7 @@ #include "Renderer.h" #include GLHEADER #include -#include "Font.h" +#include "resources/Font.h" #include #include "Log.h" #include diff --git a/src/Renderer_init.cpp b/src/Renderer_init.cpp index 4158ba6cc..3b098baee 100644 --- a/src/Renderer_init.cpp +++ b/src/Renderer_init.cpp @@ -1,7 +1,7 @@ #include "Renderer.h" #include "platform.h" #include GLHEADER -#include "Font.h" +#include "resources/Font.h" namespace Renderer { diff --git a/src/Window.h b/src/Window.h index 610ca817b..d568bbda3 100644 --- a/src/Window.h +++ b/src/Window.h @@ -5,7 +5,7 @@ #include "InputManager.h" #include "resources/ResourceManager.h" #include -#include "Font.h" +#include "resources/Font.h" class Window { diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index b0651b271..5c135fc4a 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -2,7 +2,7 @@ #include "../GuiComponent.h" #include -#include "../Font.h" +#include "../resources/Font.h" #include "NinePatchComponent.h" class ButtonComponent : public GuiComponent diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index 1f5359978..451e9fd3b 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -2,7 +2,7 @@ #include "../GuiComponent.h" #include -#include "../Font.h" +#include "../resources/Font.h" class DateTimeComponent : public GuiComponent { diff --git a/src/components/GuiDetectDevice.cpp b/src/components/GuiDetectDevice.cpp index 79cf2c74b..8bd59400c 100644 --- a/src/components/GuiDetectDevice.cpp +++ b/src/components/GuiDetectDevice.cpp @@ -1,7 +1,7 @@ #include "GuiDetectDevice.h" #include "../Window.h" #include "../Renderer.h" -#include "../Font.h" +#include "../resources/Font.h" #include "GuiInputConfig.h" #include #include diff --git a/src/components/GuiInputConfig.cpp b/src/components/GuiInputConfig.cpp index 050a6122b..3d8439c8f 100644 --- a/src/components/GuiInputConfig.cpp +++ b/src/components/GuiInputConfig.cpp @@ -1,7 +1,7 @@ #include "GuiInputConfig.h" #include "../Window.h" #include "../Renderer.h" -#include "../Font.h" +#include "../resources/Font.h" #include "GuiGameList.h" #include "../Log.h" diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index f64392875..7e4956764 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -1,7 +1,7 @@ #pragma once #include "../GuiComponent.h" -#include "../Font.h" +#include "../resources/Font.h" #include #include #include "../Renderer.h" diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index 96ae1d0fb..dcffca3e5 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -1,6 +1,6 @@ #include "SwitchComponent.h" #include "../Renderer.h" -#include "../Font.h" +#include "../resources/Font.h" #include "../Window.h" SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mState(state) diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index b828db803..641d5cb4a 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -2,7 +2,7 @@ #define _TEXTCOMPONENT_H_ #include "../GuiComponent.h" -#include "../Font.h" +#include "../resources/Font.h" class TextComponent : public GuiComponent { diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 048a4ca03..f8b88ea98 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -1,6 +1,6 @@ #include "TextEditComponent.h" #include "../Log.h" -#include "../Font.h" +#include "../resources/Font.h" #include "../Window.h" #include "../Renderer.h" #include "ComponentListComponent.h" diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 1c1f13f52..df9bb222d 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -2,7 +2,7 @@ #define _TEXTLISTCOMPONENT_H_ #include "../Renderer.h" -#include "../Font.h" +#include "../resources/Font.h" #include "../GuiComponent.h" #include "../InputManager.h" #include diff --git a/src/components/ThemeComponent.h b/src/components/ThemeComponent.h index e364ba3df..7a3057860 100644 --- a/src/components/ThemeComponent.h +++ b/src/components/ThemeComponent.h @@ -6,7 +6,7 @@ #include "../GuiComponent.h" #include "../pugiXML/pugixml.hpp" #include "../AudioManager.h" -#include "../Font.h" +#include "../resources/Font.h" //This class loads an XML-defined list of GuiComponents. class ThemeComponent : public GuiComponent diff --git a/src/Font.cpp b/src/resources/Font.cpp similarity index 95% rename from src/Font.cpp rename to src/resources/Font.cpp index b49b4fe1d..b463160b2 100644 --- a/src/Font.cpp +++ b/src/resources/Font.cpp @@ -1,561 +1,561 @@ -#include "Font.h" -#include -#include -#include -#include "Renderer.h" -#include -#include "Log.h" - -FT_Library Font::sLibrary; -bool Font::libraryInitialized = false; - -int Font::getDpiX() { return 96; } -int Font::getDpiY() { return 96; } - -int Font::getSize() const { return mSize; } - -std::map< std::pair, std::weak_ptr > Font::sFontMap; - -static std::string default_font_path = ""; - -std::string Font::getDefaultPath() -{ - if(!default_font_path.empty()) - return default_font_path; - - const int fontCount = 4; - -#ifdef WIN32 - std::string fonts[] = {"DejaVuSerif.ttf", - "Arial.ttf", - "Verdana.ttf", - "Tahoma.ttf" }; - - //build full font path - TCHAR winDir[MAX_PATH]; - GetWindowsDirectory(winDir, MAX_PATH); -#ifdef UNICODE - char winDirChar[MAX_PATH*2]; - char DefChar = ' '; - WideCharToMultiByte(CP_ACP, 0, winDir, -1, winDirChar, MAX_PATH, &DefChar, NULL); - std::string fontPath(winDirChar); -#else - std::string fontPath(winDir); -#endif - fontPath += "\\Fonts\\"; - //prepend to font file names - for(int i = 0; i < fontCount; i++) - { - fonts[i] = fontPath + fonts[i]; - } -#else - std::string fonts[] = {"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf", - "/usr/share/fonts/TTF/DejaVuSerif.ttf", - "/usr/share/fonts/dejavu/DejaVuSerif.ttf", - "font.ttf" }; -#endif - - for(int i = 0; i < fontCount; i++) - { - if(boost::filesystem::exists(fonts[i])) - { - default_font_path = fonts[i]; - return fonts[i]; - } - } - - LOG(LogError) << "Error - could not find the default font!"; - - return ""; -} - -void Font::initLibrary() -{ - if(FT_Init_FreeType(&sLibrary)) - { - LOG(LogError) << "Error initializing FreeType!"; - }else{ - libraryInitialized = true; - } -} - -Font::Font(int size, const std::string& path) : fontScale(1.0f), mSize(size), mPath(path) -{ - reload(ResourceManager::getInstance()); -} - -Font::~Font() -{ - deinit(); -} - -void Font::reload(std::shared_ptr& rm) -{ - init(rm->getFileData(mPath)); -} - -void Font::unload(std::shared_ptr& rm) -{ - deinit(); -} - -std::shared_ptr Font::get(int size, const std::string& path) -{ - if(path.empty()) - { - LOG(LogError) << "Tried to get font with no path!"; - return std::shared_ptr(); - } - - std::pair def(path, size); - auto foundFont = sFontMap.find(def); - if(foundFont != sFontMap.end()) - { - if(!foundFont->second.expired()) - return foundFont->second.lock(); - } - - std::shared_ptr font = std::shared_ptr(new Font(size, path)); - sFontMap[def] = std::weak_ptr(font); - ResourceManager::getInstance()->addReloadable(font); - return font; -} - -void Font::init(ResourceData data) -{ - if(!libraryInitialized) - initLibrary(); - - mMaxGlyphHeight = 0; - - buildAtlas(data); -} - -void Font::deinit() -{ - if(textureID) - { - glDeleteTextures(1, &textureID); - textureID = 0; - } -} - -void Font::buildAtlas(ResourceData data) -{ - if(FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face)) - { - LOG(LogError) << "Error creating font face!"; - return; - } - - //FT_Set_Char_Size(face, 0, size * 64, getDpiX(), getDpiY()); - FT_Set_Pixel_Sizes(face, 0, mSize); - - //find the size we should use - FT_GlyphSlot g = face->glyph; - int w = 0; - int h = 0; - - /*for(int i = 32; i < 128; i++) - { - if(FT_Load_Char(face, i, FT_LOAD_RENDER)) - { - fprintf(stderr, "Loading character %c failed!\n", i); - continue; - } - - w += g->bitmap.width; - h = std::max(h, g->bitmap.rows); - }*/ - - //the max size (GL_MAX_TEXTURE_SIZE) is like 3300 - w = 2048; - h = 512; - - textureWidth = w; - textureHeight = h; - - //create the texture - glGenTextures(1, &textureID); - glBindTexture(GL_TEXTURE_2D, textureID); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, w, h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); - - //copy the glyphs into the texture - int x = 0; - int y = 0; - int maxHeight = 0; - for(int i = 32; i < 128; i++) - { - if(FT_Load_Char(face, i, FT_LOAD_RENDER)) - continue; - - //prints rendered texture to the console - /*std::cout << "uploading at x: " << x << ", w: " << g->bitmap.width << " h: " << g->bitmap.rows << "\n"; - - for(int k = 0; k < g->bitmap.rows; k++) - { - for(int j = 0; j < g->bitmap.width; j++) - { - if(g->bitmap.buffer[g->bitmap.width * k + j]) - std::cout << "."; - else - std::cout << " "; - } - std::cout << "\n"; - }*/ - - if(x + g->bitmap.width >= textureWidth) - { - x = 0; - y += maxHeight + 1; //leave one pixel of space between glyphs - maxHeight = 0; - } - - if(g->bitmap.rows > maxHeight) - maxHeight = g->bitmap.rows; - - glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, g->bitmap.width, g->bitmap.rows, GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap.buffer); - - - charData[i].texX = x; - charData[i].texY = y; - charData[i].texW = g->bitmap.width; - charData[i].texH = g->bitmap.rows; - charData[i].advX = (float)g->metrics.horiAdvance / 64.0f; - charData[i].advY = (float)g->metrics.vertAdvance / 64.0f; - charData[i].bearingX = (float)g->metrics.horiBearingX / 64.0f; - charData[i].bearingY = (float)g->metrics.horiBearingY / 64.0f; - - if(charData[i].texH > mMaxGlyphHeight) - mMaxGlyphHeight = charData[i].texH; - - x += g->bitmap.width + 1; //leave one pixel of space between glyphs - } - - glBindTexture(GL_TEXTURE_2D, 0); - - FT_Done_Face(face); - - if((y + maxHeight) >= textureHeight) - { - //failed to create a proper font texture - LOG(LogWarning) << "Font \"" << mPath << "\" with size " << mSize << " exceeded max texture size! Trying again..."; - //try a 3/4th smaller size and redo initialization - fontScale *= 1.25f; - mSize = (int)(mSize * (1.0f / fontScale)); - deinit(); - init(data); - } -} - - -void Font::drawText(std::string text, const Eigen::Vector2f& offset, unsigned int color) -{ - TextCache* cache = buildTextCache(text, offset[0], offset[1], color); - renderTextCache(cache); - delete cache; -} - -void Font::renderTextCache(TextCache* cache) -{ - if(!textureID) - { - LOG(LogError) << "Error - tried to draw with Font that has no texture loaded!"; - return; - } - - if(cache == NULL) - { - LOG(LogError) << "Attempted to draw NULL TextCache!"; - return; - } - - glBindTexture(GL_TEXTURE_2D, textureID); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &cache->verts[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &cache->verts[0].tex); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, cache->colors); - - glDrawArrays(GL_TRIANGLES, 0, cache->vertCount); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); -} - -Eigen::Vector2f Font::sizeText(std::string text) const -{ - float lineWidth = 0.0f; - float highestWidth = 0.0f; - - float y = (float)getHeight(); - - for(unsigned int i = 0; i < text.length(); i++) - { - unsigned char letter = text[i]; - - if(letter == '\n') - { - if(lineWidth > highestWidth) - highestWidth = lineWidth; - - lineWidth = 0.0f; - y += getHeight(); - } - - if(letter < 32 || letter >= 128) - letter = 127; - - lineWidth += charData[letter].advX * fontScale; - } - - if(lineWidth > highestWidth) - highestWidth = lineWidth; - - return Eigen::Vector2f(highestWidth, y); -} - -int Font::getHeight() const -{ - return (int)(mMaxGlyphHeight * 1.5f * fontScale); -} - - -void Font::drawCenteredText(std::string text, float xOffset, float y, unsigned int color) -{ - Eigen::Vector2f pos = sizeText(text); - - pos[0] = (Renderer::getScreenWidth() - pos.x()); - pos[0] = (pos.x() / 2) + (xOffset / 2); - pos[1] = y; - - drawText(text, pos, color); -} - -//this could probably be optimized -//draws text and ensures it's never longer than xLen -void Font::drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color) -{ - text = wrapText(text, xLen); - drawText(text, offset, color); -} - -//the worst algorithm ever written -//breaks up a normal string with newlines to make it fit xLen -std::string Font::wrapText(std::string text, float xLen) const -{ - std::string out; - - std::string line, word, temp; - size_t space, newline; - - Eigen::Vector2f textSize; - - while(text.length() > 0 || !line.empty()) //while there's text or we still have text to render - { - space = text.find(' ', 0); - if(space == std::string::npos) - space = text.length() - 1; - - word = text.substr(0, space + 1); - - //check if the next word contains a newline - newline = word.find('\n', 0); - if(newline != std::string::npos) - { - //get everything up to the newline - word = word.substr(0, newline); - text.erase(0, newline + 1); - }else{ - text.erase(0, space + 1); - } - - temp = line + word; - - textSize = sizeText(temp); - - //if we're on the last word and it'll fit on the line, just add it to the line - if((textSize.x() <= xLen && text.length() == 0) || newline != std::string::npos) - { - line = temp; - word = ""; - } - - //if the next line will be too long or we're on the last of the text, render it - if(textSize.x() > xLen || text.length() == 0 || newline != std::string::npos) - { - //output line now - out += line + '\n'; - - //move the word we skipped to the next line - line = word; - }else{ - //there's still space, continue building the line - line = temp; - } - } - - if(!out.empty() && newline == std::string::npos) //chop off the last newline if we added one - out.erase(out.length() - 1, 1); - - return out; -} - -Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const -{ - text = wrapText(text, xLen); - return sizeText(text); -} - -Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const -{ - std::string wrappedText = wrapText(text, xLen); - - float lineWidth = 0.0f; - float y = 0.0f; - - unsigned int stop = (unsigned int)cursor; - unsigned int wrapOffset = 0; - for(unsigned int i = 0; i < stop; i++) - { - unsigned char wrappedLetter = wrappedText[i + wrapOffset]; - unsigned char letter = text[i]; - - if(wrappedLetter == '\n' && letter != '\n') - { - //this is where the wordwrap inserted a newline - //reset lineWidth and increment y, but don't consume a cursor character - lineWidth = 0.0f; - y += getHeight(); - - wrapOffset++; - i--; - continue; - } - - if(letter == '\n') - { - lineWidth = 0.0f; - y += getHeight(); - continue; - } - - if(letter < 32 || letter >= 128) - letter = 127; - - lineWidth += charData[letter].advX * fontScale; - } - - return Eigen::Vector2f(lineWidth, y); -} - -//============================================================================================================= -//TextCache -//============================================================================================================= - -TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) -{ - if(!textureID) - { - LOG(LogError) << "Error - tried to build TextCache with Font that has no texture loaded!"; - return NULL; - } - - const int triCount = text.length() * 2; - const int vertCount = triCount * 3; - TextCache::Vertex* vert = new TextCache::Vertex[vertCount]; - GLubyte* colors = new GLubyte[vertCount * 4]; - - //texture atlas width/height - float tw = (float)textureWidth; - float th = (float)textureHeight; - - float x = offsetX; - float y = offsetY + mMaxGlyphHeight * 1.1f * fontScale; //padding (another 0.5% is added to the bottom through the sizeText function) - - int charNum = 0; - for(int i = 0; i < vertCount; i += 6, charNum++) - { - unsigned char letter = text[charNum]; - - if(letter == '\n') - { - y += (float)getHeight(); - x = offsetX; - memset(&vert[i], 0, 6 * sizeof(TextCache::Vertex)); - continue; - } - - if(letter < 32 || letter >= 128) - letter = 127; //print [X] if character is not standard ASCII - - //the glyph might not start at the cursor position, but needs to be shifted a bit - const float glyphStartX = x + charData[letter].bearingX * fontScale; - //order is bottom left, top right, top left - vert[i + 0].pos << glyphStartX, y + (charData[letter].texH - charData[letter].bearingY) * fontScale; - vert[i + 1].pos << glyphStartX + charData[letter].texW * fontScale, y - charData[letter].bearingY * fontScale; - vert[i + 2].pos << glyphStartX, vert[i + 1].pos.y(); - - Eigen::Vector2i charTexCoord(charData[letter].texX, charData[letter].texY); - Eigen::Vector2i charTexSize(charData[letter].texW, charData[letter].texH); - - vert[i + 0].tex << charTexCoord.x() / tw, (charTexCoord.y() + charTexSize.y()) / th; - vert[i + 1].tex << (charTexCoord.x() + charTexSize.x()) / tw, charTexCoord.y() / th; - vert[i + 2].tex << vert[i + 0].tex.x(), vert[i + 1].tex.y(); - - //next triangle (second half of the quad) - vert[i + 3].pos = vert[i + 0].pos; - vert[i + 4].pos = vert[i + 1].pos; - vert[i + 5].pos[0] = vert[i + 1].pos.x(); - vert[i + 5].pos[1] = vert[i + 0].pos.y(); - - vert[i + 3].tex = vert[i + 0].tex; - vert[i + 4].tex = vert[i + 1].tex; - vert[i + 5].tex[0] = vert[i + 1].tex.x(); - vert[i + 5].tex[1] = vert[i + 0].tex.y(); - - x += charData[letter].advX * fontScale; - } - - TextCache::CacheMetrics metrics = { sizeText(text) }; - TextCache* cache = new TextCache(vertCount, vert, colors, metrics); - if(color != 0x00000000) - cache->setColor(color); - - return cache; -} - -TextCache::TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m) : vertCount(verts), verts(v), colors(c), metrics(m) -{ -} - -TextCache::~TextCache() -{ - delete[] verts; - delete[] colors; -} - -void TextCache::setColor(unsigned int color) -{ - Renderer::buildGLColorArray(const_cast(colors), color, vertCount); -} +#include "Font.h" +#include +#include +#include +#include "../Renderer.h" +#include +#include "../Log.h" + +FT_Library Font::sLibrary; +bool Font::libraryInitialized = false; + +int Font::getDpiX() { return 96; } +int Font::getDpiY() { return 96; } + +int Font::getSize() const { return mSize; } + +std::map< std::pair, std::weak_ptr > Font::sFontMap; + +static std::string default_font_path = ""; + +std::string Font::getDefaultPath() +{ + if(!default_font_path.empty()) + return default_font_path; + + const int fontCount = 4; + +#ifdef WIN32 + std::string fonts[] = {"DejaVuSerif.ttf", + "Arial.ttf", + "Verdana.ttf", + "Tahoma.ttf" }; + + //build full font path + TCHAR winDir[MAX_PATH]; + GetWindowsDirectory(winDir, MAX_PATH); +#ifdef UNICODE + char winDirChar[MAX_PATH*2]; + char DefChar = ' '; + WideCharToMultiByte(CP_ACP, 0, winDir, -1, winDirChar, MAX_PATH, &DefChar, NULL); + std::string fontPath(winDirChar); +#else + std::string fontPath(winDir); +#endif + fontPath += "\\Fonts\\"; + //prepend to font file names + for(int i = 0; i < fontCount; i++) + { + fonts[i] = fontPath + fonts[i]; + } +#else + std::string fonts[] = {"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf", + "/usr/share/fonts/TTF/DejaVuSerif.ttf", + "/usr/share/fonts/dejavu/DejaVuSerif.ttf", + "font.ttf" }; +#endif + + for(int i = 0; i < fontCount; i++) + { + if(boost::filesystem::exists(fonts[i])) + { + default_font_path = fonts[i]; + return fonts[i]; + } + } + + LOG(LogError) << "Error - could not find the default font!"; + + return ""; +} + +void Font::initLibrary() +{ + if(FT_Init_FreeType(&sLibrary)) + { + LOG(LogError) << "Error initializing FreeType!"; + }else{ + libraryInitialized = true; + } +} + +Font::Font(int size, const std::string& path) : fontScale(1.0f), mSize(size), mPath(path) +{ + reload(ResourceManager::getInstance()); +} + +Font::~Font() +{ + deinit(); +} + +void Font::reload(std::shared_ptr& rm) +{ + init(rm->getFileData(mPath)); +} + +void Font::unload(std::shared_ptr& rm) +{ + deinit(); +} + +std::shared_ptr Font::get(int size, const std::string& path) +{ + if(path.empty()) + { + LOG(LogError) << "Tried to get font with no path!"; + return std::shared_ptr(); + } + + std::pair def(path, size); + auto foundFont = sFontMap.find(def); + if(foundFont != sFontMap.end()) + { + if(!foundFont->second.expired()) + return foundFont->second.lock(); + } + + std::shared_ptr font = std::shared_ptr(new Font(size, path)); + sFontMap[def] = std::weak_ptr(font); + ResourceManager::getInstance()->addReloadable(font); + return font; +} + +void Font::init(ResourceData data) +{ + if(!libraryInitialized) + initLibrary(); + + mMaxGlyphHeight = 0; + + buildAtlas(data); +} + +void Font::deinit() +{ + if(textureID) + { + glDeleteTextures(1, &textureID); + textureID = 0; + } +} + +void Font::buildAtlas(ResourceData data) +{ + if(FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face)) + { + LOG(LogError) << "Error creating font face!"; + return; + } + + //FT_Set_Char_Size(face, 0, size * 64, getDpiX(), getDpiY()); + FT_Set_Pixel_Sizes(face, 0, mSize); + + //find the size we should use + FT_GlyphSlot g = face->glyph; + int w = 0; + int h = 0; + + /*for(int i = 32; i < 128; i++) + { + if(FT_Load_Char(face, i, FT_LOAD_RENDER)) + { + fprintf(stderr, "Loading character %c failed!\n", i); + continue; + } + + w += g->bitmap.width; + h = std::max(h, g->bitmap.rows); + }*/ + + //the max size (GL_MAX_TEXTURE_SIZE) is like 3300 + w = 2048; + h = 512; + + textureWidth = w; + textureHeight = h; + + //create the texture + glGenTextures(1, &textureID); + glBindTexture(GL_TEXTURE_2D, textureID); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, w, h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); + + //copy the glyphs into the texture + int x = 0; + int y = 0; + int maxHeight = 0; + for(int i = 32; i < 128; i++) + { + if(FT_Load_Char(face, i, FT_LOAD_RENDER)) + continue; + + //prints rendered texture to the console + /*std::cout << "uploading at x: " << x << ", w: " << g->bitmap.width << " h: " << g->bitmap.rows << "\n"; + + for(int k = 0; k < g->bitmap.rows; k++) + { + for(int j = 0; j < g->bitmap.width; j++) + { + if(g->bitmap.buffer[g->bitmap.width * k + j]) + std::cout << "."; + else + std::cout << " "; + } + std::cout << "\n"; + }*/ + + if(x + g->bitmap.width >= textureWidth) + { + x = 0; + y += maxHeight + 1; //leave one pixel of space between glyphs + maxHeight = 0; + } + + if(g->bitmap.rows > maxHeight) + maxHeight = g->bitmap.rows; + + glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, g->bitmap.width, g->bitmap.rows, GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap.buffer); + + + charData[i].texX = x; + charData[i].texY = y; + charData[i].texW = g->bitmap.width; + charData[i].texH = g->bitmap.rows; + charData[i].advX = (float)g->metrics.horiAdvance / 64.0f; + charData[i].advY = (float)g->metrics.vertAdvance / 64.0f; + charData[i].bearingX = (float)g->metrics.horiBearingX / 64.0f; + charData[i].bearingY = (float)g->metrics.horiBearingY / 64.0f; + + if(charData[i].texH > mMaxGlyphHeight) + mMaxGlyphHeight = charData[i].texH; + + x += g->bitmap.width + 1; //leave one pixel of space between glyphs + } + + glBindTexture(GL_TEXTURE_2D, 0); + + FT_Done_Face(face); + + if((y + maxHeight) >= textureHeight) + { + //failed to create a proper font texture + LOG(LogWarning) << "Font \"" << mPath << "\" with size " << mSize << " exceeded max texture size! Trying again..."; + //try a 3/4th smaller size and redo initialization + fontScale *= 1.25f; + mSize = (int)(mSize * (1.0f / fontScale)); + deinit(); + init(data); + } +} + + +void Font::drawText(std::string text, const Eigen::Vector2f& offset, unsigned int color) +{ + TextCache* cache = buildTextCache(text, offset[0], offset[1], color); + renderTextCache(cache); + delete cache; +} + +void Font::renderTextCache(TextCache* cache) +{ + if(!textureID) + { + LOG(LogError) << "Error - tried to draw with Font that has no texture loaded!"; + return; + } + + if(cache == NULL) + { + LOG(LogError) << "Attempted to draw NULL TextCache!"; + return; + } + + glBindTexture(GL_TEXTURE_2D, textureID); + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &cache->verts[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &cache->verts[0].tex); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, cache->colors); + + glDrawArrays(GL_TRIANGLES, 0, cache->vertCount); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); +} + +Eigen::Vector2f Font::sizeText(std::string text) const +{ + float lineWidth = 0.0f; + float highestWidth = 0.0f; + + float y = (float)getHeight(); + + for(unsigned int i = 0; i < text.length(); i++) + { + unsigned char letter = text[i]; + + if(letter == '\n') + { + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + lineWidth = 0.0f; + y += getHeight(); + } + + if(letter < 32 || letter >= 128) + letter = 127; + + lineWidth += charData[letter].advX * fontScale; + } + + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + return Eigen::Vector2f(highestWidth, y); +} + +int Font::getHeight() const +{ + return (int)(mMaxGlyphHeight * 1.5f * fontScale); +} + + +void Font::drawCenteredText(std::string text, float xOffset, float y, unsigned int color) +{ + Eigen::Vector2f pos = sizeText(text); + + pos[0] = (Renderer::getScreenWidth() - pos.x()); + pos[0] = (pos.x() / 2) + (xOffset / 2); + pos[1] = y; + + drawText(text, pos, color); +} + +//this could probably be optimized +//draws text and ensures it's never longer than xLen +void Font::drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color) +{ + text = wrapText(text, xLen); + drawText(text, offset, color); +} + +//the worst algorithm ever written +//breaks up a normal string with newlines to make it fit xLen +std::string Font::wrapText(std::string text, float xLen) const +{ + std::string out; + + std::string line, word, temp; + size_t space, newline; + + Eigen::Vector2f textSize; + + while(text.length() > 0 || !line.empty()) //while there's text or we still have text to render + { + space = text.find(' ', 0); + if(space == std::string::npos) + space = text.length() - 1; + + word = text.substr(0, space + 1); + + //check if the next word contains a newline + newline = word.find('\n', 0); + if(newline != std::string::npos) + { + //get everything up to the newline + word = word.substr(0, newline); + text.erase(0, newline + 1); + }else{ + text.erase(0, space + 1); + } + + temp = line + word; + + textSize = sizeText(temp); + + //if we're on the last word and it'll fit on the line, just add it to the line + if((textSize.x() <= xLen && text.length() == 0) || newline != std::string::npos) + { + line = temp; + word = ""; + } + + //if the next line will be too long or we're on the last of the text, render it + if(textSize.x() > xLen || text.length() == 0 || newline != std::string::npos) + { + //output line now + out += line + '\n'; + + //move the word we skipped to the next line + line = word; + }else{ + //there's still space, continue building the line + line = temp; + } + } + + if(!out.empty() && newline == std::string::npos) //chop off the last newline if we added one + out.erase(out.length() - 1, 1); + + return out; +} + +Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const +{ + text = wrapText(text, xLen); + return sizeText(text); +} + +Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const +{ + std::string wrappedText = wrapText(text, xLen); + + float lineWidth = 0.0f; + float y = 0.0f; + + unsigned int stop = (unsigned int)cursor; + unsigned int wrapOffset = 0; + for(unsigned int i = 0; i < stop; i++) + { + unsigned char wrappedLetter = wrappedText[i + wrapOffset]; + unsigned char letter = text[i]; + + if(wrappedLetter == '\n' && letter != '\n') + { + //this is where the wordwrap inserted a newline + //reset lineWidth and increment y, but don't consume a cursor character + lineWidth = 0.0f; + y += getHeight(); + + wrapOffset++; + i--; + continue; + } + + if(letter == '\n') + { + lineWidth = 0.0f; + y += getHeight(); + continue; + } + + if(letter < 32 || letter >= 128) + letter = 127; + + lineWidth += charData[letter].advX * fontScale; + } + + return Eigen::Vector2f(lineWidth, y); +} + +//============================================================================================================= +//TextCache +//============================================================================================================= + +TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) +{ + if(!textureID) + { + LOG(LogError) << "Error - tried to build TextCache with Font that has no texture loaded!"; + return NULL; + } + + const int triCount = text.length() * 2; + const int vertCount = triCount * 3; + TextCache::Vertex* vert = new TextCache::Vertex[vertCount]; + GLubyte* colors = new GLubyte[vertCount * 4]; + + //texture atlas width/height + float tw = (float)textureWidth; + float th = (float)textureHeight; + + float x = offsetX; + float y = offsetY + mMaxGlyphHeight * 1.1f * fontScale; //padding (another 0.5% is added to the bottom through the sizeText function) + + int charNum = 0; + for(int i = 0; i < vertCount; i += 6, charNum++) + { + unsigned char letter = text[charNum]; + + if(letter == '\n') + { + y += (float)getHeight(); + x = offsetX; + memset(&vert[i], 0, 6 * sizeof(TextCache::Vertex)); + continue; + } + + if(letter < 32 || letter >= 128) + letter = 127; //print [X] if character is not standard ASCII + + //the glyph might not start at the cursor position, but needs to be shifted a bit + const float glyphStartX = x + charData[letter].bearingX * fontScale; + //order is bottom left, top right, top left + vert[i + 0].pos << glyphStartX, y + (charData[letter].texH - charData[letter].bearingY) * fontScale; + vert[i + 1].pos << glyphStartX + charData[letter].texW * fontScale, y - charData[letter].bearingY * fontScale; + vert[i + 2].pos << glyphStartX, vert[i + 1].pos.y(); + + Eigen::Vector2i charTexCoord(charData[letter].texX, charData[letter].texY); + Eigen::Vector2i charTexSize(charData[letter].texW, charData[letter].texH); + + vert[i + 0].tex << charTexCoord.x() / tw, (charTexCoord.y() + charTexSize.y()) / th; + vert[i + 1].tex << (charTexCoord.x() + charTexSize.x()) / tw, charTexCoord.y() / th; + vert[i + 2].tex << vert[i + 0].tex.x(), vert[i + 1].tex.y(); + + //next triangle (second half of the quad) + vert[i + 3].pos = vert[i + 0].pos; + vert[i + 4].pos = vert[i + 1].pos; + vert[i + 5].pos[0] = vert[i + 1].pos.x(); + vert[i + 5].pos[1] = vert[i + 0].pos.y(); + + vert[i + 3].tex = vert[i + 0].tex; + vert[i + 4].tex = vert[i + 1].tex; + vert[i + 5].tex[0] = vert[i + 1].tex.x(); + vert[i + 5].tex[1] = vert[i + 0].tex.y(); + + x += charData[letter].advX * fontScale; + } + + TextCache::CacheMetrics metrics = { sizeText(text) }; + TextCache* cache = new TextCache(vertCount, vert, colors, metrics); + if(color != 0x00000000) + cache->setColor(color); + + return cache; +} + +TextCache::TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m) : vertCount(verts), verts(v), colors(c), metrics(m) +{ +} + +TextCache::~TextCache() +{ + delete[] verts; + delete[] colors; +} + +void TextCache::setColor(unsigned int color) +{ + Renderer::buildGLColorArray(const_cast(colors), color, vertCount); +} diff --git a/src/Font.h b/src/resources/Font.h similarity index 94% rename from src/Font.h rename to src/resources/Font.h index 9298b3195..d04f25083 100644 --- a/src/Font.h +++ b/src/resources/Font.h @@ -1,121 +1,121 @@ -#ifndef _FONT_H_ -#define _FONT_H_ - -#include -#include "platform.h" -#include GLHEADER -#include -#include FT_FREETYPE_H -#include -#include "resources/ResourceManager.h" - -class TextCache; - -#define FONT_SIZE_SMALL ((unsigned int)(0.035f * Renderer::getScreenHeight())) -#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Renderer::getScreenHeight())) -#define FONT_SIZE_LARGE ((unsigned int)(0.1f * Renderer::getScreenHeight())) - -//A TrueType Font renderer that uses FreeType and OpenGL. -//The library is automatically initialized when it's needed. -class Font : public IReloadable -{ -public: - static void initLibrary(); - - static std::shared_ptr get(int size, const std::string& path = getDefaultPath()); - - ~Font(); - - FT_Face face; - - //contains sizing information for every glyph. - struct charPosData { - int texX; - int texY; - int texW; - int texH; - - float advX; //!& rm) override; - void reload(std::shared_ptr& rm) override; - - int getSize() const; - - static std::string getDefaultPath(); -private: - static int getDpiX(); - static int getDpiY(); - - static FT_Library sLibrary; - static bool libraryInitialized; - - static std::map< std::pair, std::weak_ptr > sFontMap; - - Font(int size, const std::string& path); - - void init(ResourceData data); - void deinit(); - - void buildAtlas(ResourceData data); //Builds a "texture atlas," one big OpenGL texture with glyphs 32 to 128. - - int textureWidth; //OpenGL texture width - int textureHeight; //OpenGL texture height - int mMaxGlyphHeight; - float fontScale; //! 1.0 if the font would be to big for the texture - - int mSize; - const std::string mPath; -}; - -class TextCache -{ -public: - struct Vertex - { - Eigen::Vector2f pos; - Eigen::Vector2f tex; - }; - - struct CacheMetrics - { - Eigen::Vector2f size; - } metrics; - - void setColor(unsigned int color); - - TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m); - ~TextCache(); - - int vertCount; - Vertex* verts; - GLubyte* colors; -}; - -#endif +#ifndef _FONT_H_ +#define _FONT_H_ + +#include +#include "../platform.h" +#include GLHEADER +#include +#include FT_FREETYPE_H +#include +#include "ResourceManager.h" + +class TextCache; + +#define FONT_SIZE_SMALL ((unsigned int)(0.035f * Renderer::getScreenHeight())) +#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Renderer::getScreenHeight())) +#define FONT_SIZE_LARGE ((unsigned int)(0.1f * Renderer::getScreenHeight())) + +//A TrueType Font renderer that uses FreeType and OpenGL. +//The library is automatically initialized when it's needed. +class Font : public IReloadable +{ +public: + static void initLibrary(); + + static std::shared_ptr get(int size, const std::string& path = getDefaultPath()); + + ~Font(); + + FT_Face face; + + //contains sizing information for every glyph. + struct charPosData { + int texX; + int texY; + int texW; + int texH; + + float advX; //!& rm) override; + void reload(std::shared_ptr& rm) override; + + int getSize() const; + + static std::string getDefaultPath(); +private: + static int getDpiX(); + static int getDpiY(); + + static FT_Library sLibrary; + static bool libraryInitialized; + + static std::map< std::pair, std::weak_ptr > sFontMap; + + Font(int size, const std::string& path); + + void init(ResourceData data); + void deinit(); + + void buildAtlas(ResourceData data); //Builds a "texture atlas," one big OpenGL texture with glyphs 32 to 128. + + int textureWidth; //OpenGL texture width + int textureHeight; //OpenGL texture height + int mMaxGlyphHeight; + float fontScale; //! 1.0 if the font would be to big for the texture + + int mSize; + const std::string mPath; +}; + +class TextCache +{ +public: + struct Vertex + { + Eigen::Vector2f pos; + Eigen::Vector2f tex; + }; + + struct CacheMetrics + { + Eigen::Vector2f size; + } metrics; + + void setColor(unsigned int color); + + TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m); + ~TextCache(); + + int vertCount; + Vertex* verts; + GLubyte* colors; +}; + +#endif From 63d89080618236df1c2a414c6f414694c92a98ee Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 5 Oct 2013 15:28:59 -0500 Subject: [PATCH 063/386] Synchronous scraper image downloading. Code is there for async, just not hooked up to the UI yet. --- src/HttpReq.cpp | 19 +++-- src/Settings.cpp | 2 + src/components/GuiMetaDataEd.cpp | 6 ++ src/scrapers/Scraper.cpp | 134 +++++++++++++++++++++++++++++++ src/scrapers/Scraper.h | 18 +++++ 5 files changed, 172 insertions(+), 7 deletions(-) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index e1ac90ec6..77f0a146d 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -43,12 +43,17 @@ HttpReq::HttpReq(const std::string& url) else if(url.substr(0, 8) == "https://") startpos = 8; - if(url.substr(startpos, 4) == "www.") - startpos += 4; - size_t pathStart = url.find('/', startpos); - std::string server = url.substr(startpos, pathStart - startpos); - std::string path = url.substr(pathStart, std::string::npos); + + std::string server, path; + if(pathStart == std::string::npos) + { + server = url; + path = "/"; + }else{ + server = url.substr(startpos, pathStart - startpos); + path = url.substr(pathStart, std::string::npos); + } start(server, path); } @@ -57,8 +62,8 @@ HttpReq::~HttpReq() { mResolver.cancel(); mSocket.close(); - status(); //poll once - //while(status() == REQ_IN_PROGRESS); //otherwise you get really weird heap-allocation-related crashes + //status(); //poll once + while(status() == REQ_IN_PROGRESS); //otherwise you get really weird heap-allocation-related crashes } void HttpReq::start(const std::string& server, const std::string& path) diff --git a/src/Settings.cpp b/src/Settings.cpp index 78f1c96d8..169a640d4 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -36,6 +36,8 @@ void Settings::setDefaults() mBoolMap["DISABLESOUNDS"] = false; mIntMap["DIMTIME"] = 30*1000; + mIntMap["ScraperResizeWidth"] = 450; + mIntMap["ScraperResizeHeight"] = 0; mIntMap["GameListSortIndex"] = 0; diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index bac78d6e9..ffab7c9ff 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -132,6 +132,12 @@ void GuiMetaDataEd::fetchDone(MetaDataList result) continue; const std::string key = mMetaDataDecl.at(i).key; + if(mMetaDataDecl.at(i).type == MD_IMAGE_PATH) + { + std::string url = result.get(key); + result.set(key, downloadImage(url, getSaveAsPath(mScraperParams.system->getName(), mScraperParams.game->getCleanName() + "-" + key, url))); + } + mEditors.at(i)->setValue(result.get(key)); } } diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index 1a8b26086..e6f7f76ab 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -1,5 +1,10 @@ #include "Scraper.h" #include "../components/AsyncReqComponent.h" +#include "../Log.h" +#include "../Settings.h" +#include +#include +#include std::vector Scraper::getResults(ScraperSearchParams params) { @@ -23,3 +28,132 @@ void Scraper::getResultsAsync(ScraperSearchParams params, Window* window, std::f window->pushGui(req); } + + + +std::string processFileDownload(std::shared_ptr r, std::string saveAs) +{ + if(r->status() != HttpReq::REQ_SUCCESS) + { + LOG(LogError) << "Failed to download file - HttpReq error: " << r->getErrorMsg(); + return ""; + } + + std::ofstream stream(saveAs, std::ios_base::out | std::ios_base::binary); + if(stream.fail()) + { + LOG(LogError) << "Failed to open \"" << saveAs << "\" for writing downloaded file."; + return ""; + } + + std::string content = r->getContent(); + stream.write(content.data(), content.length()); + stream.close(); + + return saveAs; +} + +//you can pass 0 for width or height to keep aspect ratio +void resizeImage(const std::string& path, int maxWidth, int maxHeight) +{ + if(maxWidth == 0 && maxHeight == 0) + return; + + FREE_IMAGE_FORMAT format = FIF_UNKNOWN; + FIBITMAP* image = NULL; + + //detect the filetype + format = FreeImage_GetFileType(path.c_str(), 0); + if(format == FIF_UNKNOWN) + format = FreeImage_GetFIFFromFilename(path.c_str()); + if(format == FIF_UNKNOWN) + { + LOG(LogError) << "Error - could not detect filetype for image \"" << path << "\"!"; + return; + } + + //make sure we can read this filetype first, then load it + if(FreeImage_FIFSupportsReading(format)) + { + image = FreeImage_Load(format, path.c_str()); + }else{ + LOG(LogError) << "Error - file format reading not supported for image \"" << path << "\"!"; + return; + } + + float width = (float)FreeImage_GetWidth(image); + float height = (float)FreeImage_GetHeight(image); + + if(maxWidth == 0) + { + maxWidth = (int)((maxHeight / height) * width); + }else if(maxHeight == 0) + { + maxHeight = (int)((maxWidth / width) * height); + } + + FIBITMAP* imageRescaled = FreeImage_Rescale(image, maxWidth, maxHeight, FILTER_BILINEAR); + FreeImage_Unload(image); + + if(imageRescaled == NULL) + { + LOG(LogError) << "Could not resize image! (not enough memory? invalid bitdepth?)"; + return; + } + + if(!FreeImage_Save(format, imageRescaled, path.c_str())) + { + LOG(LogError) << "Failed to save resized image!"; + } + + FreeImage_Unload(imageRescaled); +} + +void downloadImageAsync(Window* window, const std::string& url, const std::string& saveAs, std::function returnFunc) +{ + std::shared_ptr httpreq = std::make_shared(url); + AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, + [returnFunc, saveAs] (std::shared_ptr r) + { + std::string file = processFileDownload(r, saveAs); + if(!file.empty()) + resizeImage(file, Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight")); + returnFunc(file); + }, NULL); + + window->pushGui(req); +} + +std::string downloadImage(const std::string& url, const std::string& saveAs) +{ + std::shared_ptr httpreq = std::make_shared(url); + while(httpreq->status() == HttpReq::REQ_IN_PROGRESS); + + std::string file = processFileDownload(httpreq, saveAs); + + if(!file.empty()) + resizeImage(file, Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight")); + + return file; +} + +std::string getSaveAsPath(const std::string& subdirectory, const std::string& name, const std::string& url) +{ + std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; + + if(!boost::filesystem::exists(path)) + boost::filesystem::create_directory(path); + + path += subdirectory + "/"; + + if(!boost::filesystem::exists(path)) + boost::filesystem::create_directory(path); + + size_t dot = url.find_last_of('.'); + std::string ext; + if(dot != std::string::npos) + ext = url.substr(dot, std::string::npos); + + path += name + ext; + return path; +} diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index f5f9a8ed3..7d11af471 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -30,3 +30,21 @@ private: virtual std::vector parseReq(ScraperSearchParams params, std::shared_ptr) = 0; }; +//About the same as "~/.emulationstation/downloaded_images/[subdirectory]/[name].[url's extension]". +//Will create the "downloaded_images" and "subdirectory" directories if they do not exist. +std::string getSaveAsPath(const std::string& subdirectory, const std::string& name, const std::string& url); + +//Returns the path to the downloaded file (saveAs) on completion. +//Returns empty string if an error occured. +//Will resize according to Settings::getInt("ScraperResizeWidth") and Settings::getInt("ScraperResizeHeight"). +std::string downloadImage(const std::string& url, const std::string& saveAs); + +//Returns (via returnFunc) the path to the downloaded file (saveAs) on completion. +//Returns empty string if an error occured. +//Will resize according to Settings::getInt("ScraperResizeWidth") and Settings::getInt("ScraperResizeHeight"). +//Same as downloadImage, just async. +void downloadImageAsync(Window* window, const std::string& url, const std::string& saveAs, std::function returnFunc); + +//You can pass 0 for maxWidth or maxHeight to automatically keep the aspect ratio. +//Will overwrite the image at [path] with the new resized one. +void resizeImage(const std::string& path, int maxWidth, int maxHeight); From 5d6192613c565e8c6538bf02976cb3f838ded445 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 5 Oct 2013 21:56:06 -0500 Subject: [PATCH 064/386] You can now choose a scraper in the Settings menu. --- src/ScraperCmdLine.cpp | 2 +- src/Settings.cpp | 25 ++-- src/Settings.h | 5 +- src/components/ComponentListComponent.cpp | 23 ++-- src/components/GuiSettingsMenu.cpp | 5 +- src/components/OptionListComponent.h | 141 ++++++++++++++++------ src/scrapers/Scraper.cpp | 14 +++ src/scrapers/Scraper.h | 2 + src/scrapers/TheArchiveScraper.cpp | 2 +- 9 files changed, 157 insertions(+), 62 deletions(-) diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp index 2092f3c28..31f79c438 100644 --- a/src/ScraperCmdLine.cpp +++ b/src/ScraperCmdLine.cpp @@ -138,7 +138,7 @@ int run_scraper_cmdline() out << "Alright, let's do this thing!\n"; out << "=============================\n"; - Scraper* scraper = Settings::getInstance()->getScraper(); + std::shared_ptr scraper = Settings::getInstance()->getScraper(); for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) { std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(true); diff --git a/src/Settings.cpp b/src/Settings.cpp index 169a640d4..d5d34bb16 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -4,11 +4,10 @@ #include "platform.h" #include #include "scrapers/GamesDBScraper.h" -#include "scrapers/TheArchiveScraper.h" Settings* Settings::sInstance = NULL; -Settings::Settings() : mScraper(NULL) +Settings::Settings() { setDefaults(); loadFile(); @@ -41,10 +40,7 @@ void Settings::setDefaults() mIntMap["GameListSortIndex"] = 0; - if(mScraper) - delete mScraper; - - mScraper = new GamesDBScraper(); //TODO + mScraper = std::shared_ptr(new GamesDBScraper()); } template @@ -68,6 +64,9 @@ void Settings::saveFile() saveMap(doc, mIntMap, "int"); saveMap(doc, mFloatMap, "float"); + pugi::xml_node scraperNode = doc.append_child("scraper"); + scraperNode.append_attribute("value").set_value(mScraper->getName()); + doc.save_file(path.c_str()); } @@ -92,13 +91,25 @@ void Settings::loadFile() setInt(node.attribute("name").as_string(), node.attribute("value").as_int()); for(pugi::xml_node node = doc.child("float"); node; node = node.next_sibling()) setFloat(node.attribute("name").as_string(), node.attribute("value").as_float()); + + if(doc.child("scraper")) + { + std::shared_ptr scr = createScraperByName(doc.child("scraper").attribute("value").as_string()); + if(scr) + mScraper = scr; + } } -Scraper* Settings::getScraper() +std::shared_ptr Settings::getScraper() { return mScraper; } +void Settings::setScraper(std::shared_ptr scraper) +{ + mScraper = scraper; +} + //Print a warning message if the setting we're trying to get doesn't already exist in the map, then return the value in the map. #define SETTINGS_GETSET(type, mapName, getMethodName, setMethodName) type Settings::getMethodName(const std::string& name) \ { \ diff --git a/src/Settings.h b/src/Settings.h index fad641a6e..9f7e69d24 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -23,7 +23,8 @@ public: void setInt(const std::string& name, int value); void setFloat(const std::string& name, float value); - Scraper* getScraper(); + std::shared_ptr getScraper(); + void setScraper(std::shared_ptr scraper); private: static Settings* sInstance; @@ -35,7 +36,7 @@ private: std::map mBoolMap; std::map mIntMap; std::map mFloatMap; - Scraper* mScraper; + std::shared_ptr mScraper; }; #endif diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 5b8bf4a12..8dc894996 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -419,6 +419,18 @@ void ComponentListComponent::update(int deltaTime) void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); + + //draw cursor + if(cursorValid()) + { + ComponentEntry* entry = getCell(mCursor.x(), mCursor.y()); + Eigen::Affine3f entryTrans = trans * entry->component->getTransform(); + Renderer::setMatrix(entryTrans); + + Renderer::drawRect(0, 0, 4, 4, 0xFF0000FF); + Renderer::drawRect(0, 0, (int)entry->component->getSize().x(), (int)entry->component->getSize().y(), 0x0000AA22); + } + for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { (*iter)->component->render(trans); @@ -444,16 +456,7 @@ void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) pos[0] += getColumnWidth(x); }*/ - //draw cursor - if(cursorValid()) - { - ComponentEntry* entry = getCell(mCursor.x(), mCursor.y()); - Eigen::Affine3f entryTrans = trans * entry->component->getTransform(); - Renderer::setMatrix(entryTrans); - - Renderer::drawRect(0, 0, 4, 4, 0xFF0000FF); - Renderer::drawRect(0, 0, (int)entry->component->getSize().x(), (int)entry->component->getSize().y(), 0x0000AA22); - } + } void ComponentListComponent::textInput(const char* text) diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index 30a3bd2d2..e67a58fa9 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -65,7 +65,7 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), scrapers.push_back(std::shared_ptr(new GamesDBScraper())); scrapers.push_back(std::shared_ptr(new TheArchiveScraper())); mScraperOptList.populate(scrapers, [&] (const std::shared_ptr& s) { - return mScraperOptList.makeEntry(s->getName(), 0x00FF00FF, s); + return mScraperOptList.makeEntry(s->getName(), 0x00FF00FF, s, s->getName() == Settings::getInstance()->getScraper()->getName()); } ); mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentListComponent::AlignCenter); @@ -131,5 +131,8 @@ void GuiSettingsMenu::applyStates() s->setBool("DISABLESOUNDS", mDisableSoundsSwitch.getState()); + if(mScraperOptList.getSelected().size() > 0) + s->setScraper(mScraperOptList.getSelected()[0]->object); + s->saveFile(); } diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 7e4956764..02ed9dd4d 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -5,7 +5,7 @@ #include #include #include "../Renderer.h" -#include "../Window.h" +#include "NinePatchComponent.h" //Used to display a list of options. //Can select one or multiple options. @@ -14,8 +14,8 @@ template class OptionListComponent : public GuiComponent { public: - OptionListComponent(Window* window) : GuiComponent(window), - mClosedCallback(nullptr), mCursor(0), mScrollOffset(0) + OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), + mCursor(0), mScrollOffset(0), mMultiSelect(multiSelect), mEditing(false), mBox(window, ":/textbox.png") { } @@ -28,11 +28,6 @@ public: }; - void setClosedCallback(std::function)> callback) - { - mClosedCallback = callback; - } - bool input(InputConfig* config, Input input) { if(input.value != 0) @@ -44,26 +39,32 @@ public: } if(config->isMappedTo("a", input)) { - select(mCursor); + if(mEditing) + { + select(mCursor); + if(!mMultiSelect) + close(); + }else{ + open(); + } + return true; } - if(mEntries.size() > 1) + if(mEditing && mEntries.size() > 1) { if(config->isMappedTo("up", input)) { if(mCursor > 0) - { mCursor--; - return true; - } + + return true; } if(config->isMappedTo("down", input)) { if(mCursor < mEntries.size() - 1) - { mCursor++; - return true; - } + + return true; } } } @@ -73,33 +74,84 @@ public: void render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); - std::shared_ptr font = getFont(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - Eigen::Vector2i((int)getSize().x(), (int)getSize().y())); - - for(unsigned int i = mScrollOffset; i < mTextCaches.size(); i++) + //draw the option list + if(mEditing) { + Eigen::Affine3f trans = parentTrans * getTransform(); + + unsigned int renderCount = mTextCaches.size() - mScrollOffset; + + float height = (float)renderCount * font->getHeight(); + trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0)); + + mBox.fitTo(Eigen::Vector2f(mSize.x(), height)); + mBox.render(trans); + Renderer::setMatrix(trans); + Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF); - if(i == mCursor) - Renderer::drawRect(0, 0, (int)mSize.x(), font->getHeight(), 0x000000FF); + for(unsigned int i = mScrollOffset; i < renderCount; i++) + { + Renderer::setMatrix(trans); - font->renderTextCache(mTextCaches.at(i)); - trans = trans.translate(Eigen::Vector3f(0, (float)font->getHeight(), 0)); + char rectOpacity = 0x00; + if(i == mCursor) + rectOpacity += 0x22; + if(mEntries.at(i).selected) + rectOpacity += 0x44; + + Renderer::drawRect(0, 0, (int)mSize.x(), font->getHeight(), 0x00000000 | rectOpacity); + + Renderer::setMatrix(trans); + font->renderTextCache(mTextCaches.at(i)); + + trans = trans.translate(Eigen::Vector3f(0, (float)font->getHeight(), 0)); + } + }else{ + Renderer::setMatrix(parentTrans * getTransform()); + + unsigned int color = 0x000000FF; + + if(mMultiSelect) + { + //draw "# selected" + unsigned int selectedCount = 0; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if(it->selected) + selectedCount++; + } + + std::stringstream ss; + ss << selectedCount << " selected"; + font->drawText(ss.str(), Eigen::Vector2f(0, 0), color); + + }else{ + //draw selected option + bool found = false; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if(it->selected) + { + font->drawText(it->text, Eigen::Vector2f(0, 0), color); + found = true; + break; + } + } + + if(!found) + font->drawText("Not set", Eigen::Vector2f(0, 0), color); + } } - Renderer::popClipRect(); - - trans = parentTrans * getTransform(); - renderChildren(trans); + renderChildren(parentTrans * getTransform()); } - ListEntry makeEntry(const std::string& name, unsigned int color, T obj) const + ListEntry makeEntry(const std::string& name, unsigned int color, T obj, bool selected = false) const { - ListEntry e = {name, color, false, obj}; + ListEntry e = {name, color, selected, obj}; return e; } @@ -138,14 +190,22 @@ private: if(i >= mEntries.size()) return; + if(!mMultiSelect) + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + it->selected = false; + mEntries.at(i).selected = !mEntries.at(i).selected; updateTextCaches(); } void close() { - if(mClosedCallback) - mClosedCallback(getSelected()); + mEditing = false; + } + + void open() + { + mEditing = true; } void updateTextCaches() @@ -159,7 +219,7 @@ private: TextCache* cache; std::shared_ptr font = getFont(); Eigen::Vector2f newSize = getSize(); - newSize[1] = 0; + newSize[1] = (float)font->getHeight(); for(unsigned int i = 0; i < mEntries.size(); i++) { cache = font->buildTextCache(mEntries.at(i).text, 0, 0, mEntries.at(i).color); @@ -167,23 +227,24 @@ private: if(cache->metrics.size.x() > newSize.x()) newSize[0] = cache->metrics.size.x(); - - newSize[1] += cache->metrics.size.y(); } + setSize(newSize); } std::shared_ptr getFont() { - return Font::get(FONT_SIZE_SMALL); + return Font::get(FONT_SIZE_MEDIUM); } - std::function)> mClosedCallback; unsigned int mCursor; unsigned int mScrollOffset; + bool mMultiSelect; + bool mEditing; + + NinePatchComponent mBox; std::vector mEntries; std::vector mTextCaches; }; - diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index e6f7f76ab..5e4837e0d 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -6,6 +6,9 @@ #include #include +#include "GamesDBScraper.h" +#include "TheArchiveScraper.h" + std::vector Scraper::getResults(ScraperSearchParams params) { std::shared_ptr req = makeHttpReq(params); @@ -157,3 +160,14 @@ std::string getSaveAsPath(const std::string& subdirectory, const std::string& na path += name + ext; return path; } + + +std::shared_ptr createScraperByName(const std::string& name) +{ + if(name == "TheGamesDB") + return std::shared_ptr(new GamesDBScraper()); + else if(name == "TheArchive") + return std::shared_ptr(new TheArchiveScraper()); + + return nullptr; +} diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 7d11af471..9243f6396 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -30,6 +30,8 @@ private: virtual std::vector parseReq(ScraperSearchParams params, std::shared_ptr) = 0; }; +std::shared_ptr createScraperByName(const std::string& name); + //About the same as "~/.emulationstation/downloaded_images/[subdirectory]/[name].[url's extension]". //Will create the "downloaded_images" and "subdirectory" directories if they do not exist. std::string getSaveAsPath(const std::string& subdirectory, const std::string& name, const std::string& url); diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 61a5e03ca..ca22ad21e 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -4,7 +4,7 @@ #include "../Log.h" #include "../pugiXML/pugixml.hpp" -const char* TheArchiveScraper::getName() { return "TheArchiveVG"; } +const char* TheArchiveScraper::getName() { return "TheArchive"; } std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams params) { From 0fa4cf527bb8bdea4b423ff06cdf8067f56be875 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 8 Oct 2013 16:31:29 -0500 Subject: [PATCH 065/386] Fixed SDL2 warnings on Linux (-W-no-attributes). Fixed #include for old Font.h location in Renderer_init_sdlgl.cpp. --- CMakeLists.txt | 2 +- src/Renderer_init_sdlgl.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cd614a12..efc6a3d79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) message(SEND_ERROR "You need at least G++ 4.7 to compile EmulationStation!") endif() #set up compiler flags for GCC - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #support C++11 for std::, optimize + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes") #support C++11 for std::, optimize set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") #strip binary endif() diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index cf484e3a8..d807fcdaf 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -2,7 +2,7 @@ #include #include "platform.h" #include GLHEADER -#include "Font.h" +#include "resources/Font.h" #include #include "Log.h" #include "ImageIO.h" From 4e2b57c0013ba7426d891a7d11d2f1d7c9b82161 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 9 Oct 2013 19:50:42 -0500 Subject: [PATCH 066/386] Image downloading is now async for GuiMetaDataEd. GamesDBScraper now uses system->getPlatformId() if set. --- src/HttpReq.cpp | 8 +++++ src/HttpReq.h | 1 + src/ScraperCmdLine.cpp | 34 ++++++++++++++++++++ src/components/GuiMetaDataEd.cpp | 35 ++++++++++++++++----- src/scrapers/GamesDBScraper.cpp | 54 +++++++++++++++++++++++++++++++- 5 files changed, 124 insertions(+), 8 deletions(-) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 77f0a146d..7d1316913 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -2,6 +2,7 @@ #include "HttpReq.h" #include #include "Log.h" +#include boost::asio::io_service HttpReq::io_service; @@ -27,6 +28,13 @@ std::string HttpReq::urlEncode(const std::string &s) return escaped; } +bool HttpReq::isUrl(const std::string& str) +{ + //the worst guess + return (!str.empty() && !boost::filesystem::exists(str) && + (str.find("http://") != std::string::npos || str.find("https://") != std::string::npos || str.find("www.") != std::string::npos)); +} + HttpReq::HttpReq(const std::string& server, const std::string& path) : mResolver(io_service), mSocket(io_service), mStatus(REQ_IN_PROGRESS) { diff --git a/src/HttpReq.h b/src/HttpReq.h index 14181ace4..1fcc9976e 100644 --- a/src/HttpReq.h +++ b/src/HttpReq.h @@ -48,6 +48,7 @@ public: std::string getContent(); static std::string urlEncode(const std::string &s); + static bool isUrl(const std::string& s); private: static boost::asio::io_service io_service; diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp index 31f79c438..1daac6b23 100644 --- a/src/ScraperCmdLine.cpp +++ b/src/ScraperCmdLine.cpp @@ -233,6 +233,40 @@ int run_scraper_cmdline() } } + out << "\n\n"; + out << "Downloading boxart...\n"; + + for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) + { + std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(true); + + for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + { + GameData* game = (GameData*)(*gameIt); + std::vector mdd = (*sysIt)->getGameMDD(); + for(auto i = mdd.begin(); i != mdd.end(); i++) + { + std::string key = i->key; + std::string url = game->metadata()->get(key); + + if(i->type == MD_IMAGE_PATH && HttpReq::isUrl(url)) + { + std::string urlShort = url.substr(0, url.length() > 35 ? 35 : url.length()); + if(url.length() != urlShort.length()) urlShort += "..."; + + out << " " << game->metadata()->get("name") << " [from: " << urlShort << "]...\n"; + game->metadata()->set(key, downloadImage(url, getSaveAsPath((*sysIt)->getName(), game->getCleanName(), url))); + if(game->metadata()->get(key).empty()) + { + out << " FAILED! Skipping.\n"; + game->metadata()->set(key, url); //result URL to what it was if download failed, retry some other time + } + } + } + } + } + + out << "\n\n"; out << "==============================\n"; out << "SCRAPE COMPLETE!\n"; diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index ffab7c9ff..13831c943 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -4,6 +4,7 @@ #include "AsyncReqComponent.h" #include "../Settings.h" #include "GuiGameScraper.h" +#include #define MDED_RESERVED_ROWS 3 @@ -125,19 +126,39 @@ void GuiMetaDataEd::fetch() void GuiMetaDataEd::fetchDone(MetaDataList result) { + //this is a little tricky: + //go through the list of returned results, if anything is an image and the path looks like a URL: + // (1) start an async download + resize (will create an AsyncReq that blocks further user input) + // (when this is finished, call result.set(key, newly_downloaded_file_path) and call fetchDone() again) + // (2) return from this function immediately + for(auto it = mMetaDataDecl.begin(); it != mMetaDataDecl.end(); it++) + { + std::string key = it->key; + std::string val = result.get(it->key); + + //val is /probably/ a URL + if(it->type == MD_IMAGE_PATH && HttpReq::isUrl(val)) + { + downloadImageAsync(mWindow, val, getSaveAsPath(mScraperParams.system->getName(), mScraperParams.game->getCleanName() + "-" + key, val), + [this, result, key] (std::string filePath) mutable -> void { + //skip it + if(filePath.empty()) + LOG(LogError) << "Error resolving boxart"; + + result.set(key, filePath); + this->fetchDone(result); + }); + return; + } + } + for(unsigned int i = 0; i < mEditors.size(); i++) { //don't overwrite statistics if(mMetaDataDecl.at(i).isStatistic) continue; - const std::string key = mMetaDataDecl.at(i).key; - if(mMetaDataDecl.at(i).type == MD_IMAGE_PATH) - { - std::string url = result.get(key); - result.set(key, downloadImage(url, getSaveAsPath(mScraperParams.system->getName(), mScraperParams.game->getCleanName() + "-" + key, url))); - } - + const std::string& key = mMetaDataDecl.at(i).key; mEditors.at(i)->setValue(result.get(key)); } } diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 1d8d7e39d..86f2a675f 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -4,9 +4,56 @@ #include "../Log.h" #include "../pugiXML/pugixml.hpp" #include "../MetaData.h" +#include const char* GamesDBScraper::getName() { return "TheGamesDB"; } +using namespace PlatformIds; +const std::map gamesdb_platformid_map = boost::assign::map_list_of + (THREEDO, "3DO") + (AMIGA, "Amiga") + (ARCADE, "Arcade") + (ATARI_2600, "Atari 2600") + (ATARI_5200, "Atari 5200") + (ATARI_7800, "Atari 7800") + (ATARI_JAGUAR, "Atari Jaguar") + (ATARI_JAGUAR_CD, "Atari Jaguar CD") + (ATARI_XE, "Atari XE") + (COLECOVISION, "Colecovision") + (COMMODORE_64, "Commodore 64") + (INTELLIVISION, "Intellivision") + (MAC_OS, "Mac OS") + (XBOX, "Microsoft Xbox") + (XBOX_360, "Microsoft Xbox 360") + (NEOGEO, "NeoGeo") + (NINTENDO_3DS, "Nintendo 3DS") + (NINTENDO_64, "Nintendo 64") + (NINTENDO_DS, "Nintendo DS") + (NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System (NES)") + (GAME_BOY, "Nintendo Game Boy") + (GAME_BOY_ADVANCE, "Nintendo Game Boy Advance") + (GAME_BOY_COLOR, "Nintendo Game Boy Color") + (NINTENDO_GAMECUBE, "Nintendo GameCube") + (NINTENDO_WII, "Nintendo Wii") + (NINTENDO_WII_U, "Nintendo Wii U") + (PC, "PC") + (SEGA_32X, "Sega 32X") + (SEGA_CD, "Sega CD") + (SEGA_DREAMCAST, "Sega Dreamcast") + (SEGA_GAME_GEAR, "Sega Game Gear") + (SEGA_GENESIS, "Sega Genesis") + (SEGA_MASTER_SYSTEM, "Sega Master System") + (SEGA_MEGA_DRIVE, "Sega Mega Drive") + (SEGA_SATURN, "Sega Saturn") + (PLAYSTATION, "Sony Playstation") + (PLAYSTATION_2, "Sony Playstation 2") + (PLAYSTATION_3, "Sony Playstation 3") + (PLAYSTATION_VITA, "Sony Playstation Vita") + (PLAYSTATION_PORTABLE, "Sony PSP") + (SUPER_NINTENDO, "Super Nintendo (SNES)") + (TURBOGRAFX_16, "TurboGrafx 16"); + + std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) { std::string path = "/api/GetGame.php?"; @@ -16,7 +63,12 @@ std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) cleanName = params.game->getCleanName(); path += "name=" + HttpReq::urlEncode(cleanName); - //platform TODO, should use some params.system get method + + if(params.system->getPlatformId() != PLATFORM_UNKNOWN) + { + path += "&platform="; + path += HttpReq::urlEncode(gamesdb_platformid_map.at(params.system->getPlatformId())); + } return std::make_shared("thegamesdb.net", path); } From dca5467f7b35c03961052d45b24ef564993d8ec6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 10 Oct 2013 13:11:01 -0500 Subject: [PATCH 067/386] Boost.Asio -> libcurl to hopefully fix the Linux bugs. --- CMakeLists.txt | 3 + README.md | 6 +- src/HttpReq.cpp | 298 +++++++++++------------------ src/HttpReq.h | 35 ++-- src/scrapers/GamesDBScraper.cpp | 2 +- src/scrapers/TheArchiveScraper.cpp | 2 +- 6 files changed, 130 insertions(+), 216 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index efc6a3d79..30539343e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,7 @@ find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) find_package(Boost REQUIRED COMPONENTS system filesystem regex date_time) find_package(Eigen3 REQUIRED) +find_package(CURL REQUIRED) #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") @@ -102,6 +103,7 @@ set(ES_INCLUDE_DIRS ${SDL2_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} + ${CURL_INCLUDE_DIR} ) #add ALSA for Linux @@ -294,6 +296,7 @@ set(ES_LIBRARIES ${FreeImage_LIBRARIES} ${SDL2_LIBRARY} ${SDL2MAIN_LIBRARY} + ${CURL_LIBRARIES} ) #add ALSA for Linux diff --git a/README.md b/README.md index 7993d0877..150cc64f2 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,12 @@ Building EmulationStation uses some C++11 code, which means you'll need to install at least g++-4.7 on Linux, or VS2010 on Windows. For installing and switching to g++-4.7 see [here](http://lektiondestages.blogspot.de/2013/05/installing-and-switching-gccg-versions.html). You can also just use `export CXX=g++-4.7` to explicitly specify the compiler for CMake (make sure you delete your CMake cache files if it's not working). -EmulationStation has a few dependencies. For building, you'll need SDL2, Boost.System, Boost.Filesystem, Boost.Asio, Boost.Regex, Boost.DateTime, FreeImage, FreeType, and Eigen3. You'll also need the DejaVu TrueType font on Linux to run ES. +EmulationStation has a few dependencies. For building, you'll need SDL2, Boost (System, Filesystem, Regex, DateTime), FreeImage, FreeType, Eigen3, and cURL. You'll also need the DejaVu TrueType font on Linux to run ES. **On Linux:** All of this be easily installed with apt-get: ``` -sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev ttf-dejavu libasound2-dev +sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl-dev ttf-dejavu libasound2-dev ``` Unless you're on the Raspberry Pi, you'll also need OpenGL: @@ -62,6 +62,8 @@ make [SDL2](http://www.libsdl.org/release/SDL2-devel-2.0.0-VC.zip) +[CURL](http://curl.haxx.se/download.html) (you'll need to compile or get the pre-compiled (DLL version)) + (remember to copy necessary .DLLs into the same folder as the executable: FreeImage.dll, freetype6.dll, SDL2.dll, and zlib1.dll) [CMake](http://www.cmake.org/cmake/resources/software.html) (this is used for generating the Visual Studio project) diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 7d1316913..867cec035 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -4,7 +4,9 @@ #include "Log.h" #include -boost::asio::io_service HttpReq::io_service; +CURLM* HttpReq::s_multi_handle = curl_multi_init(); + +std::map HttpReq::s_requests; std::string HttpReq::urlEncode(const std::string &s) { @@ -35,195 +37,108 @@ bool HttpReq::isUrl(const std::string& str) (str.find("http://") != std::string::npos || str.find("https://") != std::string::npos || str.find("www.") != std::string::npos)); } -HttpReq::HttpReq(const std::string& server, const std::string& path) - : mResolver(io_service), mSocket(io_service), mStatus(REQ_IN_PROGRESS) -{ - start(server, path); -} - HttpReq::HttpReq(const std::string& url) - : mResolver(io_service), mSocket(io_service), mStatus(REQ_IN_PROGRESS) + : mStatus(REQ_IN_PROGRESS), mHandle(NULL) { - size_t startpos = 0; + mHandle = curl_easy_init(); - if(url.substr(startpos, 7) == "http://") - startpos = 7; - else if(url.substr(0, 8) == "https://") - startpos = 8; - - size_t pathStart = url.find('/', startpos); - - std::string server, path; - if(pathStart == std::string::npos) + if(mHandle == NULL) { - server = url; - path = "/"; - }else{ - server = url.substr(startpos, pathStart - startpos); - path = url.substr(pathStart, std::string::npos); + mStatus = REQ_IO_ERROR; + onError("curl_easy_init failed"); + return; } - - start(server, path); + + //set the url + CURLcode err = curl_easy_setopt(mHandle, CURLOPT_URL, url.c_str()); + if(err != CURLE_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + + //tell curl how to write the data + err = curl_easy_setopt(mHandle, CURLOPT_WRITEFUNCTION, &HttpReq::write_content); + if(err != CURLE_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + + //give curl a pointer to this HttpReq so we know where to write the data *to* in our write function + err = curl_easy_setopt(mHandle, CURLOPT_WRITEDATA, this); + if(err != CURLE_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + + //add the handle to our multi + CURLMcode merr = curl_multi_add_handle(s_multi_handle, mHandle); + if(merr != CURLM_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_multi_strerror(merr)); + return; + } + + s_requests[mHandle] = this; } HttpReq::~HttpReq() { - mResolver.cancel(); - mSocket.close(); - //status(); //poll once - while(status() == REQ_IN_PROGRESS); //otherwise you get really weird heap-allocation-related crashes -} - -void HttpReq::start(const std::string& server, const std::string& path) -{ - std::ostream req_str(&mRequest); - req_str << "GET " << path << " HTTP/1.0\r\n"; - req_str << "Host: " << server << "\r\n"; - req_str << "Accept: */*\r\n"; - req_str << "Connection: close\r\n\r\n"; - - tcp::resolver::query query(server, "http"); - mResolver.async_resolve(query, - boost::bind(&HttpReq::handleResolve, this, - boost::asio::placeholders::error, - boost::asio::placeholders::iterator)); -} - -void HttpReq::handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) -{ - if (!err) + if(mHandle) { - // Attempt a connection to each endpoint in the list until we - // successfully establish a connection. - boost::asio::async_connect(mSocket, endpoint_iterator, - boost::bind(&HttpReq::handleConnect, this, - boost::asio::placeholders::error)); - } - else - { - onError(err); - } -} + s_requests.erase(mHandle); -void HttpReq::handleConnect(const boost::system::error_code& err) -{ - if (!err) - { - // The connection was successful. Send the request. - boost::asio::async_write(mSocket, mRequest, - boost::bind(&HttpReq::handleWriteRequest, this, - boost::asio::placeholders::error)); - } - else - { - onError(err); - } -} + CURLMcode merr = curl_multi_remove_handle(s_multi_handle, mHandle); -void HttpReq::handleWriteRequest(const boost::system::error_code& err) -{ - if (!err) - { - // Read the response status line. The response_ streambuf will - // automatically grow to accommodate the entire line. The growth may be - // limited by passing a maximum size to the streambuf constructor. - boost::asio::async_read_until(mSocket, mResponse, "\r\n", - boost::bind(&HttpReq::handleReadStatusLine, this, - boost::asio::placeholders::error)); - } - else - { - onError(err); - } -} + if(merr != CURLM_OK) + LOG(LogError) << "Error removing curl_easy handle from curl_multi: " << curl_multi_strerror(merr); -void HttpReq::handleReadStatusLine(const boost::system::error_code& err) -{ - if (!err) - { - // Check that response is OK. - std::istream response_stream(&mResponse); - std::string http_version; - response_stream >> http_version; - response_stream >> mResponseStatusCode; - std::string status_message; - std::getline(response_stream, status_message); - if(!response_stream || http_version.substr(0, 5) != "HTTP/") - { - mStatus = REQ_INVALID_RESPONSE; - return; - } - if(mResponseStatusCode != 200) - { - mStatus = REQ_BAD_STATUS_CODE; - return; - } - - // Read the response headers, which are terminated by a blank line. - boost::asio::async_read_until(mSocket, mResponse, "\r\n\r\n", - boost::bind(&HttpReq::handleReadHeaders, this, - boost::asio::placeholders::error)); - } - else - { - onError(err); - } -} - -void HttpReq::handleReadHeaders(const boost::system::error_code& err) -{ - if (!err) - { - // Process the response headers. - std::istream response_stream(&mResponse); - std::string header; - while (std::getline(response_stream, header) && header != "\r"); //and by process we mean ignore - - // Write whatever content we already have to output. - if (mResponse.size() > 0) - mContent << &mResponse; - - // Start reading remaining data until EOF. - boost::asio::async_read(mSocket, mResponse, - boost::asio::transfer_at_least(1), - boost::bind(&HttpReq::handleReadContent, this, - boost::asio::placeholders::error)); - } - else - { - onError(err); - } -} - -void HttpReq::handleReadContent(const boost::system::error_code& err) -{ - if (!err) - { - // Write all of the data that has been read so far. - mContent << &mResponse; - - // Continue reading remaining data until EOF. - boost::asio::async_read(mSocket, mResponse, - boost::asio::transfer_at_least(1), - boost::bind(&HttpReq::handleReadContent, this, - boost::asio::placeholders::error)); - }else{ - if (err != boost::asio::error::eof) - { - onError(err); - }else{ - mStatus = REQ_SUCCESS; - } + curl_easy_cleanup(mHandle); } } HttpReq::Status HttpReq::status() { - try { - io_service.poll(); - } catch(boost::system::system_error& e) + if(mStatus == REQ_IN_PROGRESS) { - LOG(LogError) << "Boost.ASIO system error! " << e.what(); + int handle_count; + CURLMcode merr = curl_multi_perform(s_multi_handle, &handle_count); + if(merr != CURLM_OK && merr != CURLM_CALL_MULTI_PERFORM) + { + mStatus = REQ_IO_ERROR; + onError(curl_multi_strerror(merr)); + return mStatus; + } + + int msgs_left; + CURLMsg* msg; + while(msg = curl_multi_info_read(s_multi_handle, &msgs_left)) + { + if(msg->msg == CURLMSG_DONE) + { + HttpReq* req = s_requests[msg->easy_handle]; + + if(req == NULL) + { + LOG(LogError) << "Cannot find easy handle!"; + continue; + } + + if(msg->data.result == CURLE_OK) + { + req->mStatus = REQ_SUCCESS; + }else{ + req->mStatus = REQ_IO_ERROR; + req->onError(curl_easy_strerror(msg->data.result)); + } + } + } } return mStatus; @@ -233,35 +148,36 @@ std::string HttpReq::getContent() { if(mStatus != REQ_SUCCESS) { - LOG(LogError) << "Called getContent() on an unsuccessful HttpReq!"; + LOG(LogError) << "Called getContent() on an incomplete HttpReq!"; return ""; } return mContent.str(); } -//only called for boost-level errors (REQ_IO_ERROR) -void HttpReq::onError(const boost::system::error_code& err) +void HttpReq::onError(const char* msg) { - mError = err; - mStatus = REQ_IO_ERROR; + mErrorMsg = msg; } std::string HttpReq::getErrorMsg() { - switch(mStatus) - { - case REQ_BAD_STATUS_CODE: - return "Bad status code"; - case REQ_INVALID_RESPONSE: - return "Invalid response from server"; - case REQ_IO_ERROR: - return mError.message(); - case REQ_IN_PROGRESS: - return "Not done yet"; - case REQ_SUCCESS: - return "No error"; - default: - return "???"; - } + return mErrorMsg; } + +//used as a curl callback +//size = size of an element, nmemb = number of elements +//return value is number of elements successfully read +size_t HttpReq::write_content(void* buff, size_t size, size_t nmemb, void* req_ptr) +{ + std::stringstream& ss = ((HttpReq*)req_ptr)->mContent; + ss.write((char*)buff, size * nmemb); + + return nmemb; +} + +//used as a curl callback +/*int HttpReq::update_progress(void* req_ptr, double dlTotal, double dlNow, double ulTotal, double ulNow) +{ + +}*/ diff --git a/src/HttpReq.h b/src/HttpReq.h index 1fcc9976e..44d214e27 100644 --- a/src/HttpReq.h +++ b/src/HttpReq.h @@ -1,10 +1,8 @@ #pragma once -#include - -using boost::asio::ip::tcp; - -//Based on: http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/example/http/client/async_client.cpp +#include +#include +#include /* Usage: * HttpReq myRequest("www.google.com", "/index.html"); @@ -26,7 +24,6 @@ using boost::asio::ip::tcp; class HttpReq { public: - HttpReq(const std::string& server, const std::string& path); HttpReq(const std::string& url); ~HttpReq(); @@ -51,25 +48,21 @@ public: static bool isUrl(const std::string& s); private: - static boost::asio::io_service io_service; + static size_t write_content(void* buff, size_t size, size_t nmemb, void* req_ptr); + //static int update_progress(void* req_ptr, double dlTotal, double dlNow, double ulTotal, double ulNow); - void start(const std::string& server, const std::string& path); - void handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator); - void handleConnect(const boost::system::error_code& err); - void handleWriteRequest(const boost::system::error_code& err); - void handleReadStatusLine(const boost::system::error_code& err); - void handleReadHeaders(const boost::system::error_code& err); - void handleReadContent(const boost::system::error_code& err); + //god dammit libcurl why can't you have some way to check the status of an individual handle + //why do I have to handle ALL messages at once + static std::map s_requests; - void onError(const boost::system::error_code& error); + static CURLM* s_multi_handle; - tcp::resolver mResolver; - tcp::socket mSocket; - boost::asio::streambuf mRequest; - boost::asio::streambuf mResponse; + void onError(const char* msg); + + CURL* mHandle; Status mStatus; + std::stringstream mContent; - unsigned int mResponseStatusCode; - boost::system::error_code mError; + std::string mErrorMsg; }; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 86f2a675f..8f1b94649 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -70,7 +70,7 @@ std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) path += HttpReq::urlEncode(gamesdb_platformid_map.at(params.system->getPlatformId())); } - return std::make_shared("thegamesdb.net", path); + return std::make_shared("thegamesdb.net" + path); } std::vector GamesDBScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index ca22ad21e..1effa418e 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -17,7 +17,7 @@ std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams para path += HttpReq::urlEncode(cleanName); //platform TODO, should use some params.system get method - return std::make_shared("api.archive.vg", path); + return std::make_shared("api.archive.vg" + path); } std::vector TheArchiveScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) From 2aad9cbdebea72d35d8d8b1a76803e8cd25a7036 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 10 Oct 2013 15:55:54 -0500 Subject: [PATCH 068/386] Fix building on Linux --- src/components/AsyncReqComponent.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/AsyncReqComponent.h b/src/components/AsyncReqComponent.h index 55a5624f7..dd7417b0a 100644 --- a/src/components/AsyncReqComponent.h +++ b/src/components/AsyncReqComponent.h @@ -3,6 +3,7 @@ #include "../GuiComponent.h" #include "../HttpReq.h" #include +#include /* Usage example: std::shared_ptr httpreq = std::make_shared("cdn.garcya.us", "/wp-content/uploads/2010/04/TD250.jpg"); From e247326b51fea2bae4bdcaddda096ba75eb93217 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 10 Oct 2013 16:14:33 -0500 Subject: [PATCH 069/386] Better opacity support for TextComponent --- src/GuiComponent.cpp | 4 ++++ src/GuiComponent.h | 4 ++-- src/components/TextComponent.cpp | 28 ++++++++++++++++++++++++++-- src/components/TextComponent.h | 4 ++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 501e5dd8b..4f793713e 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -149,6 +149,10 @@ unsigned char GuiComponent::getOpacity() const void GuiComponent::setOpacity(unsigned char opacity) { mOpacity = opacity; + for(auto it = mChildren.begin(); it != mChildren.end(); it++) + { + (*it)->setOpacity(opacity); + } } const Eigen::Affine3f GuiComponent::getTransform() diff --git a/src/GuiComponent.h b/src/GuiComponent.h index aad06ffa3..928d6f2b7 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -48,8 +48,8 @@ public: unsigned int getChildCount() const; GuiComponent* getChild(unsigned int i) const; - unsigned char getOpacity() const; - void setOpacity(unsigned char opacity); + virtual unsigned char getOpacity() const; + virtual void setOpacity(unsigned char opacity); const Eigen::Affine3f getTransform(); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 293624ef1..1d172f97f 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -32,8 +32,24 @@ void TextComponent::setFont(std::shared_ptr font) void TextComponent::setColor(unsigned int color) { mColor = color; - mOpacity = mColor & 0x000000FF; - onTextChanged(); + + unsigned char opacity = mColor & 0x000000FF; + GuiComponent::setOpacity(opacity); + + onColorChanged(); +} + +void TextComponent::setOpacity(unsigned char opacity) +{ + mColor = (mColor & 0xFFFFFF00) | opacity; + onColorChanged(); + + GuiComponent::setOpacity(opacity); +} + +unsigned char TextComponent::getOpacity() const +{ + return mColor & 0x000000FF; } void TextComponent::setText(const std::string& text) @@ -104,6 +120,14 @@ void TextComponent::onTextChanged() mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); } +void TextComponent::onColorChanged() +{ + if(mTextCache) + { + mTextCache->setColor(mColor); + } +} + void TextComponent::setValue(const std::string& value) { setText(value); diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 641d5cb4a..4cac3da4f 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -20,6 +20,9 @@ public: std::string getValue() const override; void setValue(const std::string& value) override; + + unsigned char getOpacity() const override; + void setOpacity(unsigned char opacity) override; std::shared_ptr getFont() const; @@ -27,6 +30,7 @@ private: void calculateExtent(); void onTextChanged(); + void onColorChanged(); unsigned int mColor; std::shared_ptr mFont; From f3695a7545135f982049bccaf233b8c1271fe1f9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 10 Oct 2013 16:49:59 -0500 Subject: [PATCH 070/386] Started work on "scrape multiple games" UI. --- CMakeLists.txt | 2 ++ src/components/GuiGameList.cpp | 8 +++++++ src/components/GuiScraperStart.cpp | 32 ++++++++++++++++++++++++++ src/components/GuiScraperStart.h | 36 ++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 src/components/GuiScraperStart.cpp create mode 100644 src/components/GuiScraperStart.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 30539343e..93b87a664 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -182,6 +182,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h @@ -237,6 +238,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 27e17707f..f23ae169c 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -6,7 +6,9 @@ #include #include "../Log.h" #include "../Settings.h" + #include "GuiMetaDataEd.h" +#include "GuiScraperStart.h" std::vector GuiGameList::sortStates; @@ -140,6 +142,12 @@ bool GuiGameList::input(InputConfig* config, Input input) return true; } + if(input.id == SDLK_F5) + { + mWindow->pushGui(new GuiScraperStart(mWindow)); + return true; + } + if(config->isMappedTo("a", input) && mFolder->getFileCount() > 0 && input.value != 0) { //play select sound diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp new file mode 100644 index 000000000..cb7821e45 --- /dev/null +++ b/src/components/GuiScraperStart.cpp @@ -0,0 +1,32 @@ +#include "GuiScraperStart.h" + +GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), + mBox(window, ":/frame.png"), + mList(window, Eigen::Vector2i(2, 4)), + mFilterLabel(mWindow), + mSystemsLabel(mWindow), + mManualLabel(mWindow), + mFiltersOpt(mWindow), + mSystemsOpt(mWindow), + mManualSwitch(mWindow) +{ + mFilterLabel.setText("Filter: "); + mSystemsLabel.setText("Systems: "); + mManualLabel.setText("Manual mode: "); + + addChild(&mBox); + addChild(&mList); + + using namespace Eigen; + mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentListComponent::AlignCenter); + + mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentListComponent::AlignCenter); + + mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentListComponent::AlignCenter); + + mBox.fitTo(mList.getSize()); +} + diff --git a/src/components/GuiScraperStart.h b/src/components/GuiScraperStart.h new file mode 100644 index 000000000..c32a5f5cb --- /dev/null +++ b/src/components/GuiScraperStart.h @@ -0,0 +1,36 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../SystemData.h" +#include "TextComponent.h" +#include "ComponentListComponent.h" +#include "OptionListComponent.h" +#include "SwitchComponent.h" + +class GuiScraperStart : public GuiComponent +{ +public: + GuiScraperStart(Window* window); + +private: + NinePatchComponent mBox; + ComponentListComponent mList; + + TextComponent mFilterLabel; + TextComponent mSystemsLabel; + TextComponent mManualLabel; + + OptionListComponent mFiltersOpt; + OptionListComponent mSystemsOpt; + SwitchComponent mManualSwitch; +}; + +/* + +Filter: [MISSING IMAGES | ALL] +Systems: [# selected] +Manual Mode: [ON | OFF] +GO GO GO + +*/ + From ff85f971b2bd8f94bc4da22e72805e3fa9b94016 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 10 Oct 2013 19:55:57 -0500 Subject: [PATCH 071/386] More work on multi-game scraping UI. --- src/components/GuiGameList.cpp | 2 +- src/components/GuiScraperStart.cpp | 75 +++++++++++++++++++++++++--- src/components/GuiScraperStart.h | 14 +++++- src/components/GuiSettingsMenu.cpp | 2 +- src/components/OptionListComponent.h | 25 ++++++++-- 5 files changed, 105 insertions(+), 13 deletions(-) diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index f23ae169c..ed1668446 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -388,7 +388,7 @@ void GuiGameList::updateDetailData() mScreenshot.setPosition(getImagePos() - imgOffset); mImageAnimation.fadeIn(35); - mImageAnimation.move(imgOffset.x(), imgOffset.y(), 20); + mImageAnimation.move((int)imgOffset.x(), (int)imgOffset.y(), 20); mDescContainer.setPosition(Eigen::Vector3f(Renderer::getScreenWidth() * 0.03f, getImagePos().y() + mScreenshot.getSize().y() + 12, 0)); mDescContainer.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), Renderer::getScreenHeight() - mDescContainer.getPosition().y())); diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index cb7821e45..ecb789636 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -7,8 +7,9 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mSystemsLabel(mWindow), mManualLabel(mWindow), mFiltersOpt(mWindow), - mSystemsOpt(mWindow), - mManualSwitch(mWindow) + mSystemsOpt(mWindow, true), + mManualSwitch(mWindow), + mStartButton(mWindow) { mFilterLabel.setText("Filter: "); mSystemsLabel.setText("Systems: "); @@ -18,15 +19,77 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), addChild(&mList); using namespace Eigen; + + //add filters (with first one selected) + mFiltersOpt.addEntry(mFiltersOpt.makeEntry("All Games", + [](SystemData*, GameData*) -> bool { return true; }, true)); + mFiltersOpt.addEntry(mFiltersOpt.makeEntry("Missing Image", + [](SystemData*, GameData* g) -> bool { return g->metadata()->get("image").empty(); })); + mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentListComponent::AlignLeft); + + //add systems (with all selected) + std::vector sys = SystemData::sSystemVector; + mSystemsOpt.populate(sys, + [&](SystemData* s) { + return mSystemsOpt.makeEntry(s->getName(), s, true); + }); mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentListComponent::AlignLeft); mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentListComponent::AlignLeft); - mBox.fitTo(mList.getSize()); + mStartButton.setText("GO GO GO GO", 0x00FF00FF); + mStartButton.setPressedFunc(std::bind(&GuiScraperStart::start, this)); + mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentListComponent::AlignCenter); + + mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); + + mBox.setEdgeColor(0x333333FF); + mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(8, 8)); } +void GuiScraperStart::start() +{ + std::queue searches = getSearches(mSystemsOpt.getSelectedObjects(), mFiltersOpt.getSelectedObjects()[0]); +} + +std::queue GuiScraperStart::getSearches(std::vector systems, GameFilterFunc selector) +{ + std::queue queue; + for(auto sys = systems.begin(); sys != systems.end(); sys++) + { + std::vector games = (*sys)->getRootFolder()->getFilesRecursive(true); + for(auto game = games.begin(); game != games.end(); game++) + { + if(selector((*sys), (GameData*)(*game))) + { + ScraperSearchParams search; + search.game = (GameData*)(*game); + search.system = *sys; + + queue.push(search); + } + } + } + + return queue; +} + +bool GuiScraperStart::input(InputConfig* config, Input input) +{ + bool consumed = GuiComponent::input(config, input); + if(consumed) + return true; + + if(input.value != 0 && config->isMappedTo("b", input)) + { + delete this; + return true; + } + + return false; +} diff --git a/src/components/GuiScraperStart.h b/src/components/GuiScraperStart.h index c32a5f5cb..e5f4250fb 100644 --- a/src/components/GuiScraperStart.h +++ b/src/components/GuiScraperStart.h @@ -6,13 +6,23 @@ #include "ComponentListComponent.h" #include "OptionListComponent.h" #include "SwitchComponent.h" +#include "ButtonComponent.h" +#include "../scrapers/Scraper.h" +#include + +typedef std::function GameFilterFunc; class GuiScraperStart : public GuiComponent { public: GuiScraperStart(Window* window); + bool input(InputConfig* config, Input input) override; + private: + void start(); + std::queue getSearches(std::vector systems, GameFilterFunc selector); + NinePatchComponent mBox; ComponentListComponent mList; @@ -20,9 +30,11 @@ private: TextComponent mSystemsLabel; TextComponent mManualLabel; - OptionListComponent mFiltersOpt; + OptionListComponent mFiltersOpt; OptionListComponent mSystemsOpt; SwitchComponent mManualSwitch; + + ButtonComponent mStartButton; }; /* diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index e67a58fa9..af4106653 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -65,7 +65,7 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), scrapers.push_back(std::shared_ptr(new GamesDBScraper())); scrapers.push_back(std::shared_ptr(new TheArchiveScraper())); mScraperOptList.populate(scrapers, [&] (const std::shared_ptr& s) { - return mScraperOptList.makeEntry(s->getName(), 0x00FF00FF, s, s->getName() == Settings::getInstance()->getScraper()->getName()); + return mScraperOptList.makeEntry(s->getName(), s, s->getName() == Settings::getInstance()->getScraper()->getName()); } ); mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentListComponent::AlignCenter); diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 02ed9dd4d..c73690f7c 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -17,12 +17,12 @@ public: OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), mCursor(0), mScrollOffset(0), mMultiSelect(multiSelect), mEditing(false), mBox(window, ":/textbox.png") { + setSize(getFont()->sizeText("Not set")); } struct ListEntry { std::string text; - unsigned int color; bool selected; T object; }; @@ -149,9 +149,12 @@ public: renderChildren(parentTrans * getTransform()); } - ListEntry makeEntry(const std::string& name, unsigned int color, T obj, bool selected = false) const + ListEntry makeEntry(const std::string& name, T obj, bool selected = false) const { - ListEntry e = {name, color, selected, obj}; + ListEntry e; + e.text = name; + e.object = obj; + e.selected = selected; return e; } @@ -184,6 +187,19 @@ public: return ret; } + + std::vector getSelectedObjects() + { + std::vector ret; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).selected) + ret.push_back(it->object); + } + + return ret; + } + private: void select(unsigned int i) { @@ -205,6 +221,7 @@ private: void open() { + mCursor = 0; mEditing = true; } @@ -222,7 +239,7 @@ private: newSize[1] = (float)font->getHeight(); for(unsigned int i = 0; i < mEntries.size(); i++) { - cache = font->buildTextCache(mEntries.at(i).text, 0, 0, mEntries.at(i).color); + cache = font->buildTextCache(mEntries.at(i).text, 0, 0, 0x000000FF); mTextCaches.push_back(cache); if(cache->metrics.size.x() > newSize.x()) From 9b1ba71fa312e9bc25e5d3d0f53fc3ff5847b0fa Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 12 Oct 2013 14:03:32 -0500 Subject: [PATCH 072/386] Reworked OptionListComponent to push a second component when editing the list to fix the "draw order" problem. --- src/components/OptionListComponent.h | 307 ++++++++++++++------------- 1 file changed, 165 insertions(+), 142 deletions(-) diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index c73690f7c..475411db2 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -15,9 +15,12 @@ class OptionListComponent : public GuiComponent { public: OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), - mCursor(0), mScrollOffset(0), mMultiSelect(multiSelect), mEditing(false), mBox(window, ":/textbox.png") + mMultiSelect(multiSelect) { - setSize(getFont()->sizeText("Not set")); + if(multiSelect) + setSize(getFont()->sizeText("0 selected")); + else + setSize(getFont()->sizeText("Not set")); } struct ListEntry @@ -28,47 +31,16 @@ public: }; - bool input(InputConfig* config, Input input) + bool input(InputConfig* config, Input input) override { if(input.value != 0) { - if(config->isMappedTo("b", input)) - { - close(); - return true; - } if(config->isMappedTo("a", input)) { - if(mEditing) - { - select(mCursor); - if(!mMultiSelect) - close(); - }else{ - open(); - } - + open(); return true; } - if(mEditing && mEntries.size() > 1) - { - if(config->isMappedTo("up", input)) - { - if(mCursor > 0) - mCursor--; - - return true; - } - if(config->isMappedTo("down", input)) - { - if(mCursor < mEntries.size() - 1) - mCursor++; - - return true; - } - } } - return GuiComponent::input(config, input); } @@ -76,74 +48,39 @@ public: { std::shared_ptr font = getFont(); - //draw the option list - if(mEditing) + Renderer::setMatrix(parentTrans * getTransform()); + + unsigned int color = 0x000000FF; + + if(mMultiSelect) { - Eigen::Affine3f trans = parentTrans * getTransform(); - - unsigned int renderCount = mTextCaches.size() - mScrollOffset; - - float height = (float)renderCount * font->getHeight(); - trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0)); - - mBox.fitTo(Eigen::Vector2f(mSize.x(), height)); - mBox.render(trans); - - Renderer::setMatrix(trans); - Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF); - - for(unsigned int i = mScrollOffset; i < renderCount; i++) + //draw "# selected" + unsigned int selectedCount = 0; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) { - Renderer::setMatrix(trans); - - char rectOpacity = 0x00; - if(i == mCursor) - rectOpacity += 0x22; - if(mEntries.at(i).selected) - rectOpacity += 0x44; - - Renderer::drawRect(0, 0, (int)mSize.x(), font->getHeight(), 0x00000000 | rectOpacity); - - Renderer::setMatrix(trans); - font->renderTextCache(mTextCaches.at(i)); - - trans = trans.translate(Eigen::Vector3f(0, (float)font->getHeight(), 0)); + if(it->selected) + selectedCount++; } + + std::stringstream ss; + ss << selectedCount << " selected"; + font->drawText(ss.str(), Eigen::Vector2f(0, 0), color); + }else{ - Renderer::setMatrix(parentTrans * getTransform()); - - unsigned int color = 0x000000FF; - - if(mMultiSelect) + //draw selected option + bool found = false; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) { - //draw "# selected" - unsigned int selectedCount = 0; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + if(it->selected) { - if(it->selected) - selectedCount++; + font->drawText(it->text, Eigen::Vector2f(0, 0), color); + found = true; + break; } - - std::stringstream ss; - ss << selectedCount << " selected"; - font->drawText(ss.str(), Eigen::Vector2f(0, 0), color); - - }else{ - //draw selected option - bool found = false; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - { - if(it->selected) - { - font->drawText(it->text, Eigen::Vector2f(0, 0), color); - found = true; - break; - } - } - - if(!found) - font->drawText("Not set", Eigen::Vector2f(0, 0), color); } + + if(!found) + font->drawText("Not set", Eigen::Vector2f(0, 0), color); } renderChildren(parentTrans * getTransform()); @@ -164,16 +101,17 @@ public: { ListEntry e = selector(*it); if(!e.text.empty()) - mEntries.push_back(e); + addEntry(e); } - - updateTextCaches(); } void addEntry(ListEntry e) { mEntries.push_back(e); - updateTextCaches(); + + Eigen::Vector2f size = getFont()->sizeText(e.text); + if(size.x() > mSize.x()) + setSize(size.x(), mSize.y()); } std::vector getSelected() @@ -201,6 +139,11 @@ public: } private: + void open() + { + mWindow->pushGui(new OptionListPopup(mWindow, *this)); + } + void select(unsigned int i) { if(i >= mEntries.size()) @@ -211,42 +154,6 @@ private: it->selected = false; mEntries.at(i).selected = !mEntries.at(i).selected; - updateTextCaches(); - } - - void close() - { - mEditing = false; - } - - void open() - { - mCursor = 0; - mEditing = true; - } - - void updateTextCaches() - { - for(auto it = mTextCaches.begin(); it != mTextCaches.end(); it++) - { - delete *it; - } - mTextCaches.clear(); - - TextCache* cache; - std::shared_ptr font = getFont(); - Eigen::Vector2f newSize = getSize(); - newSize[1] = (float)font->getHeight(); - for(unsigned int i = 0; i < mEntries.size(); i++) - { - cache = font->buildTextCache(mEntries.at(i).text, 0, 0, 0x000000FF); - mTextCaches.push_back(cache); - - if(cache->metrics.size.x() > newSize.x()) - newSize[0] = cache->metrics.size.x(); - } - - setSize(newSize); } std::shared_ptr getFont() @@ -255,13 +162,129 @@ private: } - unsigned int mCursor; - unsigned int mScrollOffset; + class OptionListPopup : public GuiComponent + { + public: + OptionListPopup(Window* window, OptionListComponent& optList) : GuiComponent(window), + mOptList(optList), mBox(window, ":/textbox.png"), mCursor(0), mScrollOffset(0) + { + //find global position + GuiComponent* p = &mOptList; + do { + mPosition += p->getPosition(); + } while(p = p->getParent()); + + mSize = mOptList.getSize(); + updateTextCaches(); + } + + void render(const Eigen::Affine3f& parentTrans) override + { + Eigen::Affine3f trans = parentTrans * getTransform(); + + std::shared_ptr font = mOptList.getFont(); + + unsigned int renderCount = mTextCaches.size() - mScrollOffset; + + float height = (float)renderCount * font->getHeight(); + trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0)); + + mBox.fitTo(Eigen::Vector2f(mSize.x(), height)); + mBox.render(trans); + + Renderer::setMatrix(trans); + Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF); + + for(unsigned int i = mScrollOffset; i < renderCount; i++) + { + Renderer::setMatrix(trans); + + char rectOpacity = 0x00; + if(i == mCursor) + rectOpacity += 0x22; + if(mOptList.mEntries.at(i).selected) + rectOpacity += 0x44; + + Renderer::drawRect(0, 0, (int)mSize.x(), font->getHeight(), 0x00000000 | rectOpacity); + + Renderer::setMatrix(trans); + font->renderTextCache(mTextCaches.at(i)); + + trans = trans.translate(Eigen::Vector3f(0, (float)font->getHeight(), 0)); + } + } + + bool input(InputConfig* config, Input input) + { + if(input.value != 0) + { + if(config->isMappedTo("b", input)) + { + close(); + return true; + } + if(config->isMappedTo("a", input)) + { + mOptList.select(mCursor); + if(!mOptList.mMultiSelect) + close(); + + return true; + } + if(mOptList.mEntries.size() > 1) + { + if(config->isMappedTo("up", input)) + { + if(mCursor > 0) + mCursor--; + + return true; + } + if(config->isMappedTo("down", input)) + { + if(mCursor < mOptList.mEntries.size() - 1) + mCursor++; + + return true; + } + } + } + + return GuiComponent::input(config, input); + } + + private: + void close() + { + delete this; + } + + void updateTextCaches() + { + for(auto it = mTextCaches.begin(); it != mTextCaches.end(); it++) + { + delete *it; + } + mTextCaches.clear(); + + TextCache* cache; + std::shared_ptr font = mOptList.getFont(); + for(unsigned int i = 0; i < mOptList.mEntries.size(); i++) + { + cache = font->buildTextCache(mOptList.mEntries.at(i).text, 0, 0, 0x000000FF); + mTextCaches.push_back(cache); + } + } + + OptionListComponent& mOptList; + NinePatchComponent mBox; + + unsigned int mCursor; + unsigned int mScrollOffset; + std::vector mTextCaches; + }; + bool mMultiSelect; - bool mEditing; - - NinePatchComponent mBox; - + std::vector mEntries; - std::vector mTextCaches; }; From d419bb368a64baca309d0ce4b0fefcfc972ee493 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 12 Oct 2013 15:08:27 -0500 Subject: [PATCH 073/386] Added GuiMsgBoxOk. --- CMakeLists.txt | 2 ++ src/components/GuiMsgBoxOk.cpp | 46 ++++++++++++++++++++++++++++++ src/components/GuiMsgBoxOk.h | 20 +++++++++++++ src/components/GuiScraperStart.cpp | 3 ++ 4 files changed, 71 insertions(+) create mode 100644 src/components/GuiMsgBoxOk.cpp create mode 100644 src/components/GuiMsgBoxOk.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 93b87a664..ab3020b15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -177,6 +177,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h @@ -233,6 +234,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp diff --git a/src/components/GuiMsgBoxOk.cpp b/src/components/GuiMsgBoxOk.cpp new file mode 100644 index 000000000..049890021 --- /dev/null +++ b/src/components/GuiMsgBoxOk.cpp @@ -0,0 +1,46 @@ +#include "GuiMsgBoxOk.h" +#include "../Renderer.h" + +GuiMsgBoxOk::GuiMsgBoxOk(Window* window, const std::string& text, std::function callback) : GuiComponent(window), + mCallback(callback), + mText(window), + mOkText(window) +{ + mText.setCentered(true); + mText.setColor(0x00BB00FF); + mText.setSize((float)Renderer::getScreenWidth(), 0); + mText.setText(text); + + mOkText.setCentered(true); + mOkText.setColor(0x0044BBFF); + mOkText.setFont(Font::get(FONT_SIZE_SMALL)); + mOkText.setSize((float)Renderer::getScreenWidth(), 0); + mOkText.setText("[A]"); + + mText.setPosition(0, (Renderer::getScreenHeight() - mText.getSize().y() - mOkText.getSize().y()) / 2); + mOkText.setPosition(0, mText.getPosition().y() + mText.getSize().y()); +} + +bool GuiMsgBoxOk::input(InputConfig* config, Input input) +{ + if(input.value != 0 && + (config->isMappedTo("a", input) || config->isMappedTo("b", input))) + { + if(mCallback) + mCallback(); + + delete this; + return true; + } + + return false; +} + +void GuiMsgBoxOk::render(const Eigen::Affine3f& parentTrans) +{ + float height = mText.getSize().y() + mOkText.getSize().y(); + Renderer::setMatrix(parentTrans); + Renderer::drawRect(0, (int)((Renderer::getScreenHeight() - height) / 2), Renderer::getScreenWidth(), (int)height, 0x111111FF); + mText.render(parentTrans); + mOkText.render(parentTrans); +} diff --git a/src/components/GuiMsgBoxOk.h b/src/components/GuiMsgBoxOk.h new file mode 100644 index 000000000..4898c4e5d --- /dev/null +++ b/src/components/GuiMsgBoxOk.h @@ -0,0 +1,20 @@ +#pragma once + +#include "../GuiComponent.h" +#include "TextComponent.h" +#include + +class GuiMsgBoxOk : public GuiComponent +{ +public: + GuiMsgBoxOk(Window* window, const std::string& msg, std::function okCallback = nullptr); + + bool input(InputConfig* config, Input input) override; + void render(const Eigen::Affine3f& parentTrans) override; + +private: + std::function mCallback; + + TextComponent mText; + TextComponent mOkText; +}; diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index ecb789636..6dd3e9bef 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -1,4 +1,5 @@ #include "GuiScraperStart.h" +#include "GuiMsgBoxOk.h" GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mBox(window, ":/frame.png"), @@ -55,6 +56,8 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), void GuiScraperStart::start() { std::queue searches = getSearches(mSystemsOpt.getSelectedObjects(), mFiltersOpt.getSelectedObjects()[0]); + + mWindow->pushGui(new GuiMsgBoxOk(mWindow, "this isn't implemented yet")); } std::queue GuiScraperStart::getSearches(std::vector systems, GameFilterFunc selector) From 69852af751755cf0002607f8a3ad9d6641b038a7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 13 Oct 2013 14:07:48 -0500 Subject: [PATCH 074/386] Multi-game scraper seems to be functional! --- CMakeLists.txt | 2 + src/ScraperCmdLine.cpp | 6 +- src/Settings.cpp | 2 + src/XMLReader.cpp | 4 + src/components/GuiMetaDataEd.cpp | 4 +- src/components/GuiScraperLog.cpp | 158 +++++++++++++++++++++++++++++ src/components/GuiScraperLog.h | 39 +++++++ src/components/GuiScraperStart.cpp | 7 +- src/scrapers/Scraper.cpp | 33 +++++- src/scrapers/Scraper.h | 6 +- 10 files changed, 254 insertions(+), 7 deletions(-) create mode 100644 src/components/GuiScraperLog.cpp create mode 100644 src/components/GuiScraperLog.h diff --git a/CMakeLists.txt b/CMakeLists.txt index ab3020b15..56b6b4c8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -184,6 +184,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h @@ -241,6 +242,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp index 1daac6b23..f62b64a03 100644 --- a/src/ScraperCmdLine.cpp +++ b/src/ScraperCmdLine.cpp @@ -255,7 +255,11 @@ int run_scraper_cmdline() if(url.length() != urlShort.length()) urlShort += "..."; out << " " << game->metadata()->get("name") << " [from: " << urlShort << "]...\n"; - game->metadata()->set(key, downloadImage(url, getSaveAsPath((*sysIt)->getName(), game->getCleanName(), url))); + + ScraperSearchParams p; + p.game = game; + p.system = *sysIt; + game->metadata()->set(key, downloadImage(url, getSaveAsPath(p, key, url))); if(game->metadata()->get(key).empty()) { out << " FAILED! Skipping.\n"; diff --git a/src/Settings.cpp b/src/Settings.cpp index d5d34bb16..89f28e312 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -33,6 +33,7 @@ void Settings::setDefaults() mBoolMap["DEBUG"] = false; mBoolMap["WINDOWED"] = false; mBoolMap["DISABLESOUNDS"] = false; + mBoolMap["DisableGamelistWrites"] = false; mIntMap["DIMTIME"] = 30*1000; mIntMap["ScraperResizeWidth"] = 450; @@ -40,6 +41,7 @@ void Settings::setDefaults() mIntMap["GameListSortIndex"] = 0; + mScraper = std::shared_ptr(new GamesDBScraper()); } diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 80d83f3c2..4fa20d655 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -4,6 +4,7 @@ #include "pugiXML/pugixml.hpp" #include #include "Log.h" +#include "Settings.h" //this is obviously an incredibly inefficient way to go about searching //but I don't think it'll matter too much with the size of most collections @@ -193,6 +194,9 @@ void updateGamelist(SystemData* system) //We have the complete information for every game though, so we can simply remove a game //we already have in the system from the XML, and then add it back from its GameData information... + if(Settings::getInstance()->getBool("DisableGamelistWrites")) + return; + std::string xmlpath = system->getGamelistPath(); if(xmlpath.empty()) return; diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index 13831c943..61246dd06 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -126,6 +126,8 @@ void GuiMetaDataEd::fetch() void GuiMetaDataEd::fetchDone(MetaDataList result) { + //TODO - replace this with resolveMetaDataAssetsAsync! + //this is a little tricky: //go through the list of returned results, if anything is an image and the path looks like a URL: // (1) start an async download + resize (will create an AsyncReq that blocks further user input) @@ -139,7 +141,7 @@ void GuiMetaDataEd::fetchDone(MetaDataList result) //val is /probably/ a URL if(it->type == MD_IMAGE_PATH && HttpReq::isUrl(val)) { - downloadImageAsync(mWindow, val, getSaveAsPath(mScraperParams.system->getName(), mScraperParams.game->getCleanName() + "-" + key, val), + downloadImageAsync(mWindow, val, getSaveAsPath(mScraperParams, key, val), [this, result, key] (std::string filePath) mutable -> void { //skip it if(filePath.empty()) diff --git a/src/components/GuiScraperLog.cpp b/src/components/GuiScraperLog.cpp new file mode 100644 index 000000000..a768e3bc3 --- /dev/null +++ b/src/components/GuiScraperLog.cpp @@ -0,0 +1,158 @@ +#include "GuiScraperLog.h" +#include "../Settings.h" +#include "GuiGameScraper.h" +#include "../Renderer.h" +#include "../Log.h" + +GuiScraperLog::GuiScraperLog(Window* window, const std::queue& searches, bool manualMode) : GuiComponent(window), + mManualMode(manualMode), + mBox(window, ":/frame.png"), + mSearches(searches), + mStatus(window), + mTextLines(40) +{ + addChild(&mBox); + addChild(&mStatus); + + setSize(Renderer::getScreenWidth() * 0.8f, (float)Renderer::getScreenHeight()); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, 0); + + mStatus.setColor(0x000000FF); + mStatus.setSize(mSize.x(), (float)mStatus.getFont()->getHeight()); + mStatus.setCentered(true); + updateStatus(); + + mBox.setEdgeColor(0x111111FF); + mBox.setCenterColor(0xDFDFDFFF); + mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(8, 0)); +} + +void GuiScraperLog::start() +{ + next(); +} + +void GuiScraperLog::next() +{ + if(mSearches.empty()) + { + done(); + return; + } + + ScraperSearchParams search = mSearches.front(); + mSearches.pop(); + + writeLine(search.game->getCleanName(), 0x0000FFFF); + + if(mManualMode) + { + GuiGameScraper* ggs = new GuiGameScraper(mWindow, search, + [this, search] (MetaDataList result) { resultFetched(search, result); }, + [this, search] { resultEmpty(search); }); + + mWindow->pushGui(ggs); + ggs->search(); + }else{ + std::shared_ptr scraper = Settings::getInstance()->getScraper(); + scraper->getResultsAsync(search, mWindow, [this, search] (std::vector mdls) { + if(mdls.empty()) + resultEmpty(search); + else + resultFetched(search, mdls[0]); + }); + } + + updateStatus(); +} + +void GuiScraperLog::resultFetched(ScraperSearchParams params, MetaDataList mdl) +{ + writeLine(" -> \"" + mdl.get("name") + "\"", 0x0000FFFF); + writeLine(" Downloading images...", 0x0000FFFF); + resolveMetaDataAssetsAsync(mWindow, params, mdl, [this, params] (MetaDataList meta) { resultResolved(params, meta); }); + + //-> resultResolved +} + +void GuiScraperLog::resultResolved(ScraperSearchParams params, MetaDataList mdl) +{ + writeLine(" Success!", 0x00FF00FF); + + next(); +} + +void GuiScraperLog::resultEmpty(ScraperSearchParams search) +{ + if(mManualMode) + writeLine(" SKIPPING", 0xFF0000FF); + else + writeLine(" NO RESULTS, skipping", 0xFF0000FF); + + LOG(LogInfo) << "Scraper skipping [" << search.game->getCleanName() << "]"; + + next(); +} + +void GuiScraperLog::done() +{ + writeLine("====================", 0x000000FF); + writeLine("DONE!!", 0x00FF00FF); + writeLine("====================", 0x000000FF); + + //done with everything! +} + +void GuiScraperLog::writeLine(const std::string& line, unsigned int color) +{ + std::shared_ptr cmp(new TextComponent(mWindow)); + cmp->setText(line); + cmp->setColor(color); + cmp->setSize(mSize.x(), (float)cmp->getFont()->getHeight()); + + mTextLines.push_back(cmp); +} + +void GuiScraperLog::render(const Eigen::Affine3f& parentTrans) +{ + renderChildren(parentTrans * getTransform()); + + Eigen::Affine3f trans = parentTrans * getTransform(); + + //draw messages + float fontHeight = (float)Font::get(FONT_SIZE_MEDIUM)->getHeight(); + trans = trans.translate(Eigen::Vector3f(0, mSize.y() - fontHeight, 0)); + + for(auto it = mTextLines.rbegin(); it != mTextLines.rend(); it++) + { + (*it)->render(trans); + trans = trans.translate(Eigen::Vector3f(0, -fontHeight, 0)); + + if(trans.translation().y() < fontHeight) + break; + } +} + +bool GuiScraperLog::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + //we're done + if(mSearches.empty()) + { + delete this; + return true; + } + } + + return GuiComponent::input(config, input); +} + +void GuiScraperLog::updateStatus() +{ + std::stringstream ss; + + ss << mSearches.size() << " games remaining"; + + mStatus.setText(ss.str()); +} diff --git a/src/components/GuiScraperLog.h b/src/components/GuiScraperLog.h new file mode 100644 index 000000000..04a7d14cc --- /dev/null +++ b/src/components/GuiScraperLog.h @@ -0,0 +1,39 @@ +#pragma once + +#include "../GuiComponent.h" +#include "NinePatchComponent.h" +#include +#include "../scrapers/Scraper.h" +#include +#include "TextComponent.h" + +class GuiScraperLog : public GuiComponent +{ +public: + GuiScraperLog(Window* window, const std::queue& params, bool manualMode); + + void start(); + + void render(const Eigen::Affine3f& parentTrans) override; + bool input(InputConfig* config, Input input) override; + +private: + void updateStatus(); + void writeLine(const std::string& line, unsigned int color); + + void resultFetched(ScraperSearchParams params, MetaDataList mdl); + void resultResolved(ScraperSearchParams params, MetaDataList mdl); + void resultEmpty(ScraperSearchParams params); + + void next(); + void done(); + + bool mManualMode; + + NinePatchComponent mBox; + + std::queue mSearches; + + TextComponent mStatus; + boost::circular_buffer< std::shared_ptr > mTextLines; +}; diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index 6dd3e9bef..a54eef47f 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -1,5 +1,5 @@ #include "GuiScraperStart.h" -#include "GuiMsgBoxOk.h" +#include "GuiScraperLog.h" GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mBox(window, ":/frame.png"), @@ -57,7 +57,10 @@ void GuiScraperStart::start() { std::queue searches = getSearches(mSystemsOpt.getSelectedObjects(), mFiltersOpt.getSelectedObjects()[0]); - mWindow->pushGui(new GuiMsgBoxOk(mWindow, "this isn't implemented yet")); + GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mManualSwitch.getState()); + mWindow->pushGui(gsl); + gsl->start(); + delete this; } std::queue GuiScraperStart::getSearches(std::vector systems, GameFilterFunc selector) diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index 5e4837e0d..8f8058ac6 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -140,8 +140,11 @@ std::string downloadImage(const std::string& url, const std::string& saveAs) return file; } -std::string getSaveAsPath(const std::string& subdirectory, const std::string& name, const std::string& url) +std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url) { + const std::string subdirectory = params.system->getName(); + const std::string name = params.game->getCleanName() + "-" + suffix; + std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; if(!boost::filesystem::exists(path)) @@ -171,3 +174,31 @@ std::shared_ptr createScraperByName(const std::string& name) return nullptr; } + +void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& params, MetaDataList mdl, std::function returnFunc) +{ + std::vector mdd = params.system->getGameMDD(); + for(auto it = mdd.begin(); it != mdd.end(); it++) + { + std::string key = it->key; + std::string val = mdl.get(key); + if(it->type == MD_IMAGE_PATH && HttpReq::isUrl(val)) + { + downloadImageAsync(window, val, getSaveAsPath(params, key, val), [window, params, mdl, key, returnFunc] (std::string savedAs) mutable -> + void + { + if(savedAs.empty()) + { + //error + LOG(LogError) << "Could not resolve image for [" << params.game->getCleanName() << "]! Skipping."; + } + + mdl.set(key, savedAs); + resolveMetaDataAssetsAsync(window, params, mdl, returnFunc); + }); + return; + } + } + + returnFunc(mdl); +} diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 9243f6396..854aa3a11 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -32,9 +32,9 @@ private: std::shared_ptr createScraperByName(const std::string& name); -//About the same as "~/.emulationstation/downloaded_images/[subdirectory]/[name].[url's extension]". +//About the same as "~/.emulationstation/downloaded_images/[system_name]/[game_name].[url's extension]". //Will create the "downloaded_images" and "subdirectory" directories if they do not exist. -std::string getSaveAsPath(const std::string& subdirectory, const std::string& name, const std::string& url); +std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url); //Returns the path to the downloaded file (saveAs) on completion. //Returns empty string if an error occured. @@ -47,6 +47,8 @@ std::string downloadImage(const std::string& url, const std::string& saveAs); //Same as downloadImage, just async. void downloadImageAsync(Window* window, const std::string& url, const std::string& saveAs, std::function returnFunc); +void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& params, MetaDataList mdl, std::function returnFunc); + //You can pass 0 for maxWidth or maxHeight to automatically keep the aspect ratio. //Will overwrite the image at [path] with the new resized one. void resizeImage(const std::string& path, int maxWidth, int maxHeight); From 12dd8b028d390edc28b08cf2ff89c185319131b4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 13 Oct 2013 16:40:36 -0500 Subject: [PATCH 075/386] Disable sleep mode while scraping. Fix to actually update metadata. Write changes to gamelist.xml after each game is done. --- src/SystemData.cpp | 10 ++-------- src/Window.cpp | 12 +++++++++++- src/Window.h | 5 +++++ src/XMLReader.cpp | 4 ++-- src/components/GuiScraperLog.cpp | 32 ++++++++++++++++++++++++++++---- src/components/GuiScraperLog.h | 4 ++++ src/main.cpp | 2 +- 7 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 087de8bb2..de19c3d0e 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -326,18 +326,12 @@ std::string SystemData::getGamelistPath() filePath = getHomePath(); filePath += "/.emulationstation/"+ getName() + "/gamelist.xml"; - if(fs::exists(filePath)) - return filePath; - - return ""; + return filePath; } bool SystemData::hasGamelist() { - if(getGamelistPath().empty()) - return false; - else - return true; + return (fs::exists(getGamelistPath())); } std::vector SystemData::getGameMDD() diff --git a/src/Window.cpp b/src/Window.cpp index cf1784443..847f55e48 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -8,7 +8,7 @@ #include Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), - mZoomFactor(1.0f), mCenterPoint(0, 0), mMatrix(Eigen::Affine3f::Identity()), mFadePercent(0.0f) + mZoomFactor(1.0f), mCenterPoint(0, 0), mMatrix(Eigen::Affine3f::Identity()), mFadePercent(0.0f), mAllowSleep(true) { mInputManager = new InputManager(this); setCenterPoint(Eigen::Vector2f(Renderer::getScreenWidth() / 2, Renderer::getScreenHeight() / 2)); @@ -188,3 +188,13 @@ void Window::postProcess() Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | ((unsigned char)(mFadePercent * 255))); } } + +bool Window::getAllowSleep() +{ + return mAllowSleep; +} + +void Window::setAllowSleep(bool sleep) +{ + mAllowSleep = sleep; +} diff --git a/src/Window.h b/src/Window.h index d568bbda3..dcff3f923 100644 --- a/src/Window.h +++ b/src/Window.h @@ -34,6 +34,9 @@ public: void setFadePercent(const float& perc); + bool getAllowSleep(); + void setAllowSleep(bool sleep); + private: InputManager* mInputManager; std::vector mGuiStack; @@ -55,6 +58,8 @@ private: void postProcess(); float mFadePercent; + + bool mAllowSleep; }; #endif diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 4fa20d655..ab7077ef8 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -100,7 +100,7 @@ void parseGamelist(SystemData* system) { std::string xmlpath = system->getGamelistPath(); - if(xmlpath.empty()) + if(!boost::filesystem::exists(xmlpath)) return; LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; @@ -198,7 +198,7 @@ void updateGamelist(SystemData* system) return; std::string xmlpath = system->getGamelistPath(); - if(xmlpath.empty()) + if(!boost::filesystem::exists(xmlpath)) return; LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\" before writing..."; diff --git a/src/components/GuiScraperLog.cpp b/src/components/GuiScraperLog.cpp index a768e3bc3..66c5b4dbf 100644 --- a/src/components/GuiScraperLog.cpp +++ b/src/components/GuiScraperLog.cpp @@ -3,13 +3,15 @@ #include "GuiGameScraper.h" #include "../Renderer.h" #include "../Log.h" +#include "../XMLReader.h" GuiScraperLog::GuiScraperLog(Window* window, const std::queue& searches, bool manualMode) : GuiComponent(window), mManualMode(manualMode), mBox(window, ":/frame.png"), mSearches(searches), mStatus(window), - mTextLines(40) + mTextLines(40), + mSuccessCount(0), mSkippedCount(0) { addChild(&mBox); addChild(&mStatus); @@ -25,6 +27,13 @@ GuiScraperLog::GuiScraperLog(Window* window, const std::queuesetAllowSleep(false); +} + +GuiScraperLog::~GuiScraperLog() +{ + mWindow->setAllowSleep(true); } void GuiScraperLog::start() @@ -77,8 +86,16 @@ void GuiScraperLog::resultFetched(ScraperSearchParams params, MetaDataList mdl) void GuiScraperLog::resultResolved(ScraperSearchParams params, MetaDataList mdl) { + //apply new metadata + *params.game->metadata() = mdl; + writeLine(" Success!", 0x00FF00FF); + //write changes to gamelist.xml + updateGamelist(params.system); + + mSuccessCount++; + next(); } @@ -91,14 +108,21 @@ void GuiScraperLog::resultEmpty(ScraperSearchParams search) LOG(LogInfo) << "Scraper skipping [" << search.game->getCleanName() << "]"; + mSkippedCount++; + next(); } void GuiScraperLog::done() { - writeLine("====================", 0x000000FF); - writeLine("DONE!!", 0x00FF00FF); - writeLine("====================", 0x000000FF); + writeLine("===================================", 0x000000FF); + + std::stringstream ss; + ss << mSuccessCount << " successful, " << mSkippedCount << " skipped"; + writeLine(ss.str(), 0x000000FF); + + writeLine("DONE!! Press anything to continue.", 0x00FF00FF); + writeLine("===================================", 0x000000FF); //done with everything! } diff --git a/src/components/GuiScraperLog.h b/src/components/GuiScraperLog.h index 04a7d14cc..7674d880c 100644 --- a/src/components/GuiScraperLog.h +++ b/src/components/GuiScraperLog.h @@ -11,6 +11,7 @@ class GuiScraperLog : public GuiComponent { public: GuiScraperLog(Window* window, const std::queue& params, bool manualMode); + ~GuiScraperLog(); void start(); @@ -36,4 +37,7 @@ private: TextComponent mStatus; boost::circular_buffer< std::shared_ptr > mTextLines; + + unsigned int mSuccessCount; + unsigned int mSkippedCount; }; diff --git a/src/main.cpp b/src/main.cpp index f8e6c244b..0c905fd38 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -228,7 +228,7 @@ int main(int argc, char* argv[]) //sleeping entails setting a flag to start skipping frames //and initially drawing a black semi-transparent rect to dim the screen timeSinceLastEvent += deltaTime; - if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("DIMTIME") && Settings::getInstance()->getInt("DIMTIME") != 0) + if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("DIMTIME") && Settings::getInstance()->getInt("DIMTIME") != 0 && window.getAllowSleep()) { sleeping = true; timeSinceLastEvent = 0; From 56b04aec4c02e130b58dd5b61dee12d659cf1510 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 17:05:02 -0500 Subject: [PATCH 076/386] updateGamelist now creates a gamelist.xml if one does not exist. Added GuiMsgBoxOk and GuiMsgBoxYesNo, basic message boxes. Added rating scraping to TheGamesDB scraper. Added warning if platform ID is not set for a system the user has selected to scrape. --- CMakeLists.txt | 2 + src/Settings.cpp | 3 +- src/XMLReader.cpp | 22 +++++++---- src/components/GuiMsgBoxOk.cpp | 11 ++++-- src/components/GuiMsgBoxOk.h | 2 + src/components/GuiMsgBoxYesNo.cpp | 59 ++++++++++++++++++++++++++++++ src/components/GuiMsgBoxYesNo.h | 22 +++++++++++ src/components/GuiScraperLog.h | 2 + src/components/GuiScraperStart.cpp | 19 +++++++++- src/components/GuiScraperStart.h | 4 ++ src/components/RatingComponent.cpp | 6 +++ src/scrapers/GamesDBScraper.cpp | 8 ++++ src/scrapers/TheArchiveScraper.cpp | 4 +- 13 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 src/components/GuiMsgBoxYesNo.cpp create mode 100644 src/components/GuiMsgBoxYesNo.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 56b6b4c8c..343cc0931 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,6 +178,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h @@ -236,6 +237,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp diff --git a/src/Settings.cpp b/src/Settings.cpp index 89f28e312..f6b428c5f 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -34,9 +34,10 @@ void Settings::setDefaults() mBoolMap["WINDOWED"] = false; mBoolMap["DISABLESOUNDS"] = false; mBoolMap["DisableGamelistWrites"] = false; + mBoolMap["ScrapeRatings"] = true; mIntMap["DIMTIME"] = 30*1000; - mIntMap["ScraperResizeWidth"] = 450; + mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; mIntMap["GameListSortIndex"] = 0; diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index ab7077ef8..d8cf5da28 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -198,20 +198,26 @@ void updateGamelist(SystemData* system) return; std::string xmlpath = system->getGamelistPath(); - if(!boost::filesystem::exists(xmlpath)) - return; - - LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\" before writing..."; pugi::xml_document doc; - pugi::xml_parse_result result = doc.load_file(xmlpath.c_str()); - if(!result) + if(boost::filesystem::exists(xmlpath)) { - LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); - return; + //parse an existing file first + LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\" before writing..."; + + pugi::xml_parse_result result = doc.load_file(xmlpath.c_str()); + if(!result) + { + LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); + return; + } + }else{ + //set up an empty gamelist to append to + doc.append_child("gameList"); } + pugi::xml_node root = doc.child("gameList"); if(!root) { diff --git a/src/components/GuiMsgBoxOk.cpp b/src/components/GuiMsgBoxOk.cpp index 049890021..4cb08bca2 100644 --- a/src/components/GuiMsgBoxOk.cpp +++ b/src/components/GuiMsgBoxOk.cpp @@ -1,6 +1,9 @@ #include "GuiMsgBoxOk.h" #include "../Renderer.h" +#define MSG_WIDTH 0.8f +#define MSG_PADDING ((1 - MSG_WIDTH) / 2) + GuiMsgBoxOk::GuiMsgBoxOk(Window* window, const std::string& text, std::function callback) : GuiComponent(window), mCallback(callback), mText(window), @@ -8,17 +11,17 @@ GuiMsgBoxOk::GuiMsgBoxOk(Window* window, const std::string& text, std::function< { mText.setCentered(true); mText.setColor(0x00BB00FF); - mText.setSize((float)Renderer::getScreenWidth(), 0); + mText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); mText.setText(text); mOkText.setCentered(true); mOkText.setColor(0x0044BBFF); mOkText.setFont(Font::get(FONT_SIZE_SMALL)); - mOkText.setSize((float)Renderer::getScreenWidth(), 0); + mOkText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); mOkText.setText("[A]"); - mText.setPosition(0, (Renderer::getScreenHeight() - mText.getSize().y() - mOkText.getSize().y()) / 2); - mOkText.setPosition(0, mText.getPosition().y() + mText.getSize().y()); + mText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, (Renderer::getScreenHeight() - mText.getSize().y() - mOkText.getSize().y()) / 2); + mOkText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, mText.getPosition().y() + mText.getSize().y()); } bool GuiMsgBoxOk::input(InputConfig* config, Input input) diff --git a/src/components/GuiMsgBoxOk.h b/src/components/GuiMsgBoxOk.h index 4898c4e5d..66232adfc 100644 --- a/src/components/GuiMsgBoxOk.h +++ b/src/components/GuiMsgBoxOk.h @@ -4,6 +4,8 @@ #include "TextComponent.h" #include +//A simple popup message box with callbacks for when the user dismisses it. +//Make sure you remember to push it onto the window! class GuiMsgBoxOk : public GuiComponent { public: diff --git a/src/components/GuiMsgBoxYesNo.cpp b/src/components/GuiMsgBoxYesNo.cpp new file mode 100644 index 000000000..84ba96617 --- /dev/null +++ b/src/components/GuiMsgBoxYesNo.cpp @@ -0,0 +1,59 @@ +#include "GuiMsgBoxYesNo.h" +#include "../Renderer.h" + +#define MSG_WIDTH 0.8f +#define MSG_PADDING ((1 - MSG_WIDTH) / 2) + +GuiMsgBoxYesNo::GuiMsgBoxYesNo(Window* window, const std::string& text, std::function yesCallback, std::function noCallback) : GuiComponent(window), + mYesCallback(yesCallback), + mNoCallback(noCallback), + mText(window), + mInputText(window) +{ + mText.setCentered(true); + mText.setColor(0x00BB00FF); + mText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); + mText.setText(text); + + mInputText.setCentered(true); + mInputText.setColor(0x0044BBFF); + mInputText.setFont(Font::get(FONT_SIZE_SMALL)); + mInputText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); + mInputText.setText("[A - yes] [B - no]"); + + mText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, (Renderer::getScreenHeight() - mText.getSize().y() - mInputText.getSize().y()) / 2); + mInputText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, mText.getPosition().y() + mText.getSize().y()); +} + +bool GuiMsgBoxYesNo::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + if(config->isMappedTo("a", input)) + { + if(mYesCallback) + mYesCallback(); + + delete this; + return true; + }else if(config->isMappedTo("b", input)) + { + if(mNoCallback) + mNoCallback(); + + delete this; + return true; + } + } + + return false; +} + +void GuiMsgBoxYesNo::render(const Eigen::Affine3f& parentTrans) +{ + float height = mText.getSize().y() + mInputText.getSize().y(); + Renderer::setMatrix(parentTrans); + Renderer::drawRect(0, (int)((Renderer::getScreenHeight() - height) / 2), Renderer::getScreenWidth(), (int)height, 0x111111FF); + mText.render(parentTrans); + mInputText.render(parentTrans); +} diff --git a/src/components/GuiMsgBoxYesNo.h b/src/components/GuiMsgBoxYesNo.h new file mode 100644 index 000000000..9a17c92b3 --- /dev/null +++ b/src/components/GuiMsgBoxYesNo.h @@ -0,0 +1,22 @@ +#pragma once + +#include "../GuiComponent.h" +#include "TextComponent.h" +#include + +//A simple "yes or no" popup box with callbacks for yes or no. +//Make sure you remember to push it onto the window! +class GuiMsgBoxYesNo : public GuiComponent +{ +public: + GuiMsgBoxYesNo(Window* window, const std::string& msg, std::function yesCallback = nullptr, std::function noCallback = nullptr); + + bool input(InputConfig* config, Input input) override; + void render(const Eigen::Affine3f& parentTrans) override; + +private: + std::function mYesCallback, mNoCallback; + + TextComponent mText; + TextComponent mInputText; +}; diff --git a/src/components/GuiScraperLog.h b/src/components/GuiScraperLog.h index 7674d880c..ca0b03b22 100644 --- a/src/components/GuiScraperLog.h +++ b/src/components/GuiScraperLog.h @@ -7,6 +7,8 @@ #include #include "TextComponent.h" +//A "terminal" of sorts for scraping. +//Doesn't accept input, but renders log-style messages and handles the callback chain for multi-game scraping. class GuiScraperLog : public GuiComponent { public: diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index a54eef47f..dfbc1ef4d 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -1,5 +1,6 @@ #include "GuiScraperStart.h" #include "GuiScraperLog.h" +#include "GuiMsgBoxYesNo.h" GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mBox(window, ":/frame.png"), @@ -44,7 +45,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentListComponent::AlignLeft); mStartButton.setText("GO GO GO GO", 0x00FF00FF); - mStartButton.setPressedFunc(std::bind(&GuiScraperStart::start, this)); + mStartButton.setPressedFunc(std::bind(&GuiScraperStart::pressedStart, this)); mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentListComponent::AlignCenter); mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); @@ -53,6 +54,22 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(8, 8)); } +void GuiScraperStart::pressedStart() +{ + std::vector sys = mSystemsOpt.getSelectedObjects(); + for(auto it = sys.begin(); it != sys.end(); it++) + { + if((*it)->getPlatformId() == PlatformIds::PLATFORM_UNKNOWN) + { + mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?", + std::bind(&GuiScraperStart::start, this))); + return; + } + } + + start(); +} + void GuiScraperStart::start() { std::queue searches = getSearches(mSystemsOpt.getSelectedObjects(), mFiltersOpt.getSelectedObjects()[0]); diff --git a/src/components/GuiScraperStart.h b/src/components/GuiScraperStart.h index e5f4250fb..02514cb3b 100644 --- a/src/components/GuiScraperStart.h +++ b/src/components/GuiScraperStart.h @@ -12,6 +12,9 @@ typedef std::function GameFilterFunc; +//The starting point for a multi-game scrape. +//Allows the user to set various parameters (to set filters, to set which systems to scrape, to enable manual mode). +//Generates a list of "searches" that will be carried out by GuiScraperLog. class GuiScraperStart : public GuiComponent { public: @@ -20,6 +23,7 @@ public: bool input(InputConfig* config, Input input) override; private: + void pressedStart(); void start(); std::queue getSearches(std::vector systems, GameFilterFunc selector); diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 6a827cb78..25c97d482 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -13,6 +13,12 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window) void RatingComponent::setValue(const std::string& value) { + if(value.empty()) + { + mValue = 0.0f; + return; + } + mValue = stof(value); if(mValue > 1.0f) mValue = 1.0f; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 8f1b94649..00dfe1765 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -106,6 +106,14 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s boost::posix_time::ptime rd = string_to_ptime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"); mdl.back().setTime("releasedate", rd); + if(Settings::getInstance()->getBool("ScrapeRatings") && game.child("Rating")) + { + float ratingVal = (game.child("Rating").text().as_int() / 10.0f); + std::stringstream ss; + ss << ratingVal; + mdl.back().set("rating", ss.str()); + } + pugi::xml_node images = game.child("Images"); if(images) diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 1effa418e..efa542a77 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -47,7 +47,9 @@ std::vector TheArchiveScraper::parseReq(ScraperSearchParams params mdl.push_back(MetaDataList(params.system->getGameMDD())); mdl.back().set("name", game.child("title").text().get()); mdl.back().set("desc", game.child("description").text().get()); - + + //Archive.search does not return ratings + pugi::xml_node image = game.child("box_front"); pugi::xml_node thumbnail = game.child("box_front_small"); From bff7920f1422a37e03020853832ea4cfd326df3e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 17:14:50 -0500 Subject: [PATCH 077/386] Added "Scrape Ratings" option to settings menu. Finally changed the stupid "SAVE" label hack to an actual ButtonComponent. --- src/components/GuiSettingsMenu.cpp | 36 ++++++++++++++++++------------ src/components/GuiSettingsMenu.h | 6 +++-- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index af4106653..0b2ea8feb 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -7,13 +7,14 @@ #include "../scrapers/GamesDBScraper.h" GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 5)), + mList(window, Eigen::Vector2i(2, 6)), mBox(mWindow, ":/frame.png", 0x444444FF), mDrawFramerateSwitch(window), mVolumeSlider(window, 0, 100, 1), mDisableSoundsSwitch(window, false), - mSaveLabel(window), - mScraperOptList(window) + mScraperOptList(window), + mScrapeRatingsSwitch(window), + mSaveButton(window) { loadStates(); @@ -70,10 +71,19 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentListComponent::AlignCenter); - //save label - mSaveLabel.setText("SAVE"); - mSaveLabel.setColor(0x000000FF); - mList.setEntry(Vector2i(0, 4), Vector2i(2, 1), &mSaveLabel, true, ComponentListComponent::AlignCenter, Matrix(false, true)); + //scrape ratings label + label = new TextComponent(mWindow); + label->setText("Scrape ratings? "); + label->setColor(0x0000FFFF); + mLabels.push_back(label); + mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); + + mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mScrapeRatingsSwitch, true, ComponentListComponent::AlignCenter); + + //save button + mSaveButton.setText("SAVE", 0x00FF00FF); + mSaveButton.setPressedFunc([this] () { applyStates(); delete this; }); + mList.setEntry(Vector2i(0, 5), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter, Matrix(false, true)); //center list mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); @@ -96,19 +106,13 @@ bool GuiSettingsMenu::input(InputConfig* config, Input input) if(GuiComponent::input(config, input)) return true; + //cancel if b is pressed if(config->isMappedTo("b", input) && input.value) { delete this; return true; } - if(config->isMappedTo("a", input) && mList.getSelectedComponent() == &mSaveLabel && input.value) - { - applyStates(); - delete this; - return true; - } - return false; } @@ -120,6 +124,8 @@ void GuiSettingsMenu::loadStates() mVolumeSlider.setValue((float)VolumeControl::getInstance()->getVolume()); mDisableSoundsSwitch.setState(s->getBool("DISABLESOUNDS")); + + mScrapeRatingsSwitch.setState(s->getBool("ScrapeRatings")); } void GuiSettingsMenu::applyStates() @@ -134,5 +140,7 @@ void GuiSettingsMenu::applyStates() if(mScraperOptList.getSelected().size() > 0) s->setScraper(mScraperOptList.getSelected()[0]->object); + s->setBool("ScrapeRatings", mScrapeRatingsSwitch.getState()); + s->saveFile(); } diff --git a/src/components/GuiSettingsMenu.h b/src/components/GuiSettingsMenu.h index 2f85bb34f..a55258f90 100644 --- a/src/components/GuiSettingsMenu.h +++ b/src/components/GuiSettingsMenu.h @@ -9,6 +9,7 @@ #include "TextComponent.h" #include "NinePatchComponent.h" #include "OptionListComponent.h" +#include "ButtonComponent.h" #include "../scrapers/Scraper.h" class GuiSettingsMenu : public GuiComponent @@ -31,8 +32,9 @@ private: SliderComponent mVolumeSlider; SwitchComponent mDisableSoundsSwitch; OptionListComponent< std::shared_ptr > mScraperOptList; - TextComponent mSaveLabel; - + SwitchComponent mScrapeRatingsSwitch; + ButtonComponent mSaveButton; + std::vector mLabels; }; From 26a8538b20de3fdf41e46367b1725fe7c260c29e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 17:31:54 -0500 Subject: [PATCH 078/386] Better stars. --- data/converted/star_filled_png.cpp | 133 ++++++++++++++++++-------- data/converted/star_unfilled_png.cpp | 136 +++++++++++++++++++-------- data/resources/star_filled.png | Bin 3128 -> 3698 bytes data/resources/star_unfilled.png | Bin 3130 -> 3703 bytes 4 files changed, 192 insertions(+), 77 deletions(-) diff --git a/data/converted/star_filled_png.cpp b/data/converted/star_filled_png.cpp index 38462b66f..ec16d993b 100644 --- a/data/converted/star_filled_png.cpp +++ b/data/converted/star_filled_png.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t star_filled_png_size = 3128; -const unsigned char star_filled_png_data[3128] = { +const size_t star_filled_png_size = 3698; +const unsigned char star_filled_png_data[3698] = { 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, @@ -280,41 +280,98 @@ const unsigned char star_filled_png_data[3128] = { 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0x53,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0x49,0x0e,0xc3, - 0x30,0x0c,0x03,0x45,0x21,0xff,0x7f,0x65,0xff,0xc1, - 0xde,0x03,0x14,0xcd,0x62,0x6d,0x96,0x7c,0x6e,0x11, - 0x6b,0x48,0xaa,0xb2,0x53,0xf0,0x23,0x91,0x8b,0x22, - 0x82,0xc8,0x0d,0xa8,0xc4,0x2f,0x76,0x07,0x10,0x0a, - 0x41,0x13,0x15,0xcd,0xce,0x0e,0x68,0x1f,0x81,0x76, - 0x00,0x98,0xa5,0x17,0x8c,0x03,0x06,0x40,0xb3,0xdf, - 0xfd,0x0a,0x0e,0xe0,0xce,0x00,0x38,0x11,0x18,0x00, - 0xb9,0x9c,0xa2,0x9d,0xed,0x3f,0x11,0x18,0x00,0x7e, - 0x00,0x98,0x35,0x32,0xed,0x1d,0x70,0x9c,0x48,0xa3, - 0x23,0x80,0x27,0xb6,0x83,0x93,0x95,0xcd,0xef,0x0c, - 0x0f,0xe3,0x4c,0xa7,0x77,0x94,0x75,0x0f,0x60,0xb5, - 0x08,0x54,0x98,0x0a,0xb1,0x1a,0x00,0xaa,0xa8,0x65, - 0x11,0xbf,0xe3,0xf4,0x85,0x2a,0x10,0x96,0x81,0xd2, - 0x6a,0x4d,0xcb,0xa3,0x09,0xa2,0x3b,0x80,0x2e,0x10, - 0x20,0x22,0xd0,0x7f,0x1f,0xd8,0xb8,0xf8,0xcb,0x73, - 0x00,0x76,0x2d,0xfe,0xce,0x20,0x84,0x5d,0x2c,0xff, - 0x66,0x12,0xc4,0x2e,0xaa,0xbf,0x19,0x85,0xb1,0x83, - 0xea,0x6f,0xcf,0x02,0x55,0x9a,0xe3,0xa5,0x3d,0xaa, - 0xf5,0x03,0x32,0xaa,0xbe,0xf2,0x34,0x88,0x8a,0xaa, - 0xaf,0x3e,0x0e,0xa3,0x6a,0xf1,0x2b,0xef,0x03,0x50, - 0xc5,0xf2,0x56,0x00,0x4a,0xa9,0x6e,0x01,0x80,0x15, - 0x8b,0xdf,0xc1,0x01,0x03,0x20,0x03,0x00,0x8e,0x03, - 0x62,0x16,0x27,0x02,0x09,0x00,0x70,0x7a,0x40,0xf1, - 0x18,0x68,0x67,0xf5,0xa7,0x07,0x24,0x00,0x10,0x7e, - 0xb7,0xa0,0x81,0xf6,0xc7,0xa2,0xb1,0x96,0xd5,0x1c, - 0xf0,0x4b,0x75,0x74,0x88,0x00,0xb2,0x45,0x42,0x9d, - 0x2c,0x77,0xb7,0x30,0x78,0xc5,0x40,0x13,0xa8,0x6e, - 0x7a,0xdc,0x8d,0x04,0xb0,0xc2,0xce,0xc8,0x06,0x20, - 0xe2,0xbf,0x41,0x57,0x41,0x32,0x8b,0x03,0x90,0x2c, - 0x4a,0x6e,0x00,0x3c,0x3a,0x38,0x22,0x01,0x30,0xba, - 0x61,0x59,0x3c,0x4b,0x0b,0xa8,0x7e,0x07,0x02,0x3d, - 0x01,0x44,0xbf,0x10,0x59,0x02,0x5f,0x1f,0xd8,0x3f, - 0xdb,0xcb,0xd1,0x57,0x7b,0xf9,0x0e,0x00,0xad,0xa2, - 0x2a,0x96,0x54,0x26,0x5d,0xab,0x00,0x00,0x00,0x00, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x8d,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x9b,0x51,0x64,0x5b, + 0x61,0x14,0xc7,0x7f,0x4d,0xab,0x8c,0x50,0x6a,0xa5, + 0x8c,0x56,0xab,0xd5,0xc9,0xa4,0x32,0x79,0x98,0xcd, + 0x6a,0xb5,0x31,0x9b,0xd6,0x1e,0x6a,0x33,0x5a,0x9b, + 0xb1,0x51,0xeb,0x4b,0x1f,0xaa,0x93,0xd1,0xd7,0x3d, + 0x8d,0xbe,0x8e,0xb2,0xa7,0x31,0xf6,0x54,0x2b,0x65, + 0x8c,0x51,0xfa,0x34,0x4a,0x29,0xa1,0x94,0x6a,0x09, + 0xb1,0x56,0x28,0x21,0x94,0xc8,0x1e,0xee,0x89,0x45, + 0x34,0xcd,0xcd,0x77,0x6f,0xbe,0xef,0xde,0xfb,0xed, + 0x10,0x91,0xa4,0xc9,0xfd,0xce,0x2f,0xe7,0x9c,0xef, + 0x9c,0xff,0xd7,0x74,0x54,0x2a,0x15,0x6c,0xb6,0x2e, + 0x00,0x8e,0xae,0x9a,0xba,0x7e,0x3f,0x70,0x02,0x94, + 0x8d,0x5c,0x7d,0xf0,0x94,0x98,0xe1,0x2f,0x60,0x19, + 0x98,0x35,0xb9,0x80,0x8e,0x4a,0xa5,0x62,0x2a,0x02, + 0x7a,0x81,0x23,0xe0,0x10,0x18,0xb7,0x31,0x02,0xde, + 0x02,0x71,0x20,0x09,0x4c,0x99,0x5a,0x84,0x29,0x00, + 0x57,0x80,0xc5,0x9a,0xc7,0x19,0xdb,0x00,0xbc,0x06, + 0xfa,0x6a,0x1e,0xdf,0x95,0x9b,0x15,0x00,0x3a,0xa5, + 0xf8,0xd5,0x5b,0xc6,0x16,0x00,0xb3,0xc0,0xc0,0x05, + 0xcf,0x4f,0x49,0x3d,0x88,0x3c,0x80,0x8c,0xe2,0x6b, + 0x91,0x00,0xf0,0x04,0x48,0x5c,0xf2,0xfa,0x73,0x60, + 0x28,0xca,0x00,0x32,0x8a,0xf5,0x21,0x12,0x00,0xee, + 0x01,0xb7,0x5d,0xfc,0xdd,0x2b,0x69,0x91,0x23,0x07, + 0xc0,0x6d,0x7e,0xd7,0xf7,0x08,0x91,0x00,0x90,0x02, + 0x1e,0xb5,0xd8,0x25,0xf6,0x44,0x09,0x40,0xab,0xd5, + 0xbd,0x47,0x20,0x44,0x02,0xc0,0x10,0xf0,0x54,0xe1, + 0x7d,0x8b,0x92,0x0e,0xa1,0x07,0xb0,0x2c,0xd5,0x5d, + 0x45,0x2b,0x78,0x11,0x76,0x00,0xfd,0x52,0xd5,0x75, + 0xc3,0x0b,0x0c,0x00,0xaf,0x61,0x3c,0xa2,0x98,0x3e, + 0x81,0x00,0xe0,0x57,0x21,0x6b,0x6b,0x7b,0xdc,0xe5, + 0xc3,0x5c,0x9f,0x90,0xe1,0xa6,0x0f,0x48,0xcb,0xfd, + 0x80,0x3c,0xef,0x47,0x11,0x4b,0x01,0x7f,0x80,0x63, + 0x20,0x8b,0xa3,0x21,0xee,0xe3,0x28,0x49,0x05,0x60, + 0xa7,0x9d,0x00,0xba,0x65,0x42,0xbb,0x26,0xf9,0x9c, + 0x12,0x07,0x87,0x80,0x31,0x1c,0x45,0x47,0x87,0xf5, + 0xd5,0x00,0xbe,0xc8,0x4e,0x1a,0x00,0x3a,0x01,0x76, + 0xdd,0x00,0x48,0x4a,0x9b,0x9a,0x94,0x0b,0x8d,0xc8, + 0xad,0x87,0x70,0x58,0x33,0x40,0x79,0x20,0x07,0xec, + 0x09,0x94,0x03,0x60,0x13,0xc8,0x55,0x45,0xd1,0x38, + 0xf0,0x1d,0xb8,0x8f,0x1d,0xb6,0x06,0x2c,0x30,0x78, + 0x5a,0xae,0x16,0xc1,0x22,0x30,0x0d,0x6c,0x58,0xe0, + 0xfc,0x47,0x60,0x1e,0x39,0x8b,0xa8,0xdd,0x05,0x4a, + 0xc0,0x0c,0xf0,0x35,0xc2,0xce,0xbf,0x07,0xde,0x5d, + 0x56,0x04,0xcb,0xc0,0x1c,0x70,0xa6,0xab,0x17,0xd7, + 0x68,0xf3,0x12,0xfa,0xae,0xfa,0x80,0x05,0xe0,0x43, + 0x44,0x1c,0x3f,0x97,0x2f,0x75,0xad,0xd5,0x46,0x68, + 0x05,0x58,0x0a,0xb9,0xf3,0x25,0xe0,0xd9,0x65,0x69, + 0xdd,0xac,0x13,0x5c,0xad,0x2d,0x18,0x21,0xb3,0x22, + 0xf0,0xb8,0x59,0x61,0x77,0xd3,0x0a,0xaf,0x49,0x08, + 0x9d,0x87,0xc8,0xf9,0x02,0x30,0x09,0x6c,0xf9,0x35, + 0x0b,0x7c,0x93,0x1d,0xa2,0x14,0x02,0xe7,0x73,0xc0, + 0x84,0xdb,0x16,0xb9,0x95,0x61,0x68,0x13,0x78,0x28, + 0x3b,0x44,0x50,0xed,0x50,0x9c,0xcf,0xb6,0x6b,0x1a, + 0xdc,0x06,0x1e,0x48,0x3b,0x19,0x34,0xcb,0x02,0x77, + 0x04,0x42,0x5b,0xc7,0xe1,0x1d,0xa1,0x9c,0x0b,0x90, + 0xf3,0xbf,0x65,0x4d,0x79,0x5d,0x7a,0xc0,0xbe,0xd0, + 0x3e,0x08,0x80,0xf3,0xbf,0x24,0x2a,0x0b,0xba,0x05, + 0x91,0x63,0xa1,0xbe,0x67,0xd0,0xf9,0x0d,0x99,0x61, + 0x8a,0xaa,0x1f,0xe0,0x55,0x11,0xca,0xcb,0x76,0x73, + 0x6e,0x28,0xe7,0x3d,0xef,0x4c,0x7e,0x48,0x62,0x71, + 0x11,0x4e,0x4c,0x68,0x00,0x9e,0x1b,0x34,0x3f,0x00, + 0x24,0x0d,0x85,0x7f,0x55,0x7a,0x33,0x0e,0x20,0x6d, + 0xb0,0x06,0xa4,0x82,0x00,0x20,0x65,0x3b,0x00,0xab, + 0x23,0xa0,0xd7,0x8f,0x3c,0x34,0x09,0x3f,0x16,0xe2, + 0xf0,0x87,0x7f,0xe7,0x11,0xd6,0x02,0xf0,0xbc,0x86, + 0x58,0x88,0xf3,0xdf,0x97,0x6d,0x38,0x0a,0x00,0xd2, + 0xa6,0x00,0xc4,0x71,0x4e,0x8f,0x54,0xad,0x80,0xa3, + 0x39,0xae,0x7a,0x6c,0xa5,0x8d,0x01,0x48,0xa0,0x76, + 0x76,0x5f,0x12,0xa7,0x87,0xe5,0x7e,0x09,0x18,0x45, + 0xfd,0x3c,0x62,0x04,0x0f,0x67,0x94,0x31,0xcd,0xe4, + 0xbf,0x00,0xd7,0xc5,0xe9,0xb3,0xba,0xc9,0x72,0x0e, + 0xb8,0x89,0x0b,0x1d,0xaf,0xce,0x3a,0xbd,0xd4,0x01, + 0x5d,0x00,0xb6,0xc4,0xb9,0x97,0xe2,0x6c,0x23,0xdb, + 0x95,0xe9,0x72,0x9a,0x16,0x64,0x2d,0x2f,0x3b,0x81, + 0x17,0x00,0x6e,0x2e,0x9a,0xc5,0x91,0xa6,0x27,0x69, + 0x72,0x4c,0x5d,0x67,0x9b,0x38,0xbf,0x22,0x79,0x83, + 0x3b,0x95,0x27,0xad,0x1b,0x40,0x77,0x93,0xb0,0xcb, + 0xcb,0xe2,0x6f,0x00,0x3f,0x14,0xaf,0x51,0x06,0x3e, + 0x4b,0x7d,0x58,0x69,0x22,0x7a,0x68,0x8f,0x80,0xb1, + 0x06,0x1a,0x40,0x51,0x16,0x3b,0x2c,0x8b,0xf7,0xc3, + 0x8a,0x38,0xc7,0x74,0xa3,0xc0,0xa7,0x06,0x1a,0x40, + 0x52,0x55,0x93,0x88,0xf9,0x94,0xff,0x65,0x59,0xdc, + 0xb0,0x2c,0xb6,0x1d,0xe7,0x07,0x79,0x9c,0x33,0xcb, + 0x71,0x60,0xfd,0x82,0x88,0x4c,0xe8,0x04,0x50,0x1b, + 0x72,0xeb,0x12,0xea,0x0b,0xe8,0x91,0xcb,0xab,0x52, + 0xd8,0x04,0x8e,0x1a,0xec,0x29,0x0d,0xbc,0x44,0x40, + 0x55,0x8a,0x9e,0xc1,0x51,0x89,0x75,0xdb,0x36,0x70, + 0x4b,0xb6,0xcf,0x03,0x55,0x00,0xaa,0xbf,0x1b,0x9c, + 0x92,0x4a,0x1d,0x14,0xeb,0xc6,0xf9,0x77,0xfc,0x9f, + 0x2d,0xbd,0x6b,0xf0,0x54,0x00,0x58,0x6c,0x31,0x2c, + 0xb7,0xff,0x00,0x6c,0x07,0xf0,0x77,0x00,0x61,0xc5, + 0xb1,0x4d,0xf4,0xc6,0x0e,0x12,0x00,0x00,0x00,0x00, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; diff --git a/data/converted/star_unfilled_png.cpp b/data/converted/star_unfilled_png.cpp index 301d26cb9..40b12d668 100644 --- a/data/converted/star_unfilled_png.cpp +++ b/data/converted/star_unfilled_png.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t star_unfilled_png_size = 3130; -const unsigned char star_unfilled_png_data[3130] = { +const size_t star_unfilled_png_size = 3703; +const unsigned char star_unfilled_png_data[3703] = { 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, @@ -280,41 +280,99 @@ const unsigned char star_unfilled_png_data[3130] = { 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0x55,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0x51,0x0e,0xc3, - 0x30,0x08,0x43,0x31,0xea,0x11,0x77,0xb3,0x1d,0xd8, - 0xfb,0xaf,0x34,0xad,0x5d,0x21,0x40,0x20,0xdf,0x9b, - 0x1a,0x9e,0x6d,0x46,0xd2,0x41,0x5e,0x6f,0x09,0x5c, - 0x14,0x11,0x44,0x6e,0x40,0x25,0x7e,0xb1,0x3b,0x80, - 0x50,0x08,0x9a,0xa8,0x68,0x76,0x76,0x40,0xfb,0x08, - 0xb4,0x03,0xc0,0x2c,0xbd,0x60,0x1c,0x30,0x00,0x9a, - 0xfd,0xee,0x57,0x70,0x00,0x77,0x06,0xc0,0x89,0xc0, - 0x00,0xc8,0xe5,0x14,0xed,0x6c,0xff,0x89,0xc0,0x00, - 0x58,0x07,0x80,0x59,0x23,0xd3,0xde,0x01,0xc7,0x89, - 0x34,0x3a,0x02,0xf8,0xc7,0x76,0x58,0x64,0x65,0xf7, - 0x3b,0xc3,0xc3,0x39,0xd3,0xe9,0x1d,0xe5,0xdd,0x03, - 0x58,0x2d,0x02,0x15,0xa6,0x42,0x58,0x03,0x40,0x15, - 0xb5,0x3c,0xe2,0x77,0x9c,0xbe,0x50,0x05,0x82,0x19, - 0x28,0xad,0xd6,0xb4,0x56,0x34,0x41,0x74,0x07,0xd0, - 0x05,0x02,0x44,0x04,0xfa,0xeb,0x03,0x1b,0x17,0x7f, - 0x79,0x0e,0xc0,0xae,0xc5,0xdf,0x19,0x84,0xb0,0x8b, - 0xe5,0x9f,0x4c,0x82,0xd8,0x45,0xf5,0x27,0xa3,0x30, - 0x76,0x50,0xfd,0xe9,0x59,0xa0,0x4a,0x73,0xbc,0xb4, - 0x47,0xf5,0x7e,0x40,0x46,0xd5,0x2d,0x4f,0x83,0xa8, - 0xa8,0xba,0xf5,0x71,0x18,0x55,0x8b,0xb7,0xbc,0x0f, - 0x40,0x15,0xcb,0x7b,0x01,0x28,0xa5,0xba,0x07,0x00, - 0x56,0x2c,0x7e,0x07,0x07,0x0c,0x80,0x0c,0x00,0x38, - 0x0e,0x88,0x59,0x9c,0x08,0x24,0x00,0xc0,0xe9,0x01, - 0xc5,0x63,0xa0,0x9d,0xd5,0x9f,0x1e,0x90,0x00,0x40, - 0xf8,0xdd,0x82,0x06,0xda,0x1f,0x46,0x63,0x2d,0xab, - 0x39,0xe0,0x9b,0xea,0xe8,0x10,0x01,0x64,0x8b,0x84, - 0x2e,0xb2,0xdc,0xdd,0xc2,0xb0,0x2a,0x06,0x9a,0x40, - 0x75,0xd7,0xe3,0x6e,0x24,0x00,0x0b,0x3b,0x23,0x1b, - 0x80,0x88,0xff,0x06,0x5d,0x05,0xc9,0x2c,0x0e,0x40, - 0xb2,0x28,0x2d,0x03,0xb0,0xa2,0x83,0x23,0x12,0x00, - 0xa3,0x1b,0x96,0xc7,0xb3,0xb4,0x80,0xea,0x77,0x20, - 0x70,0x25,0x80,0xe8,0x17,0x22,0x26,0xf0,0xf5,0x0f, - 0xfb,0x67,0x7b,0x39,0xfa,0x68,0x2f,0x9f,0x01,0x00, - 0x6b,0x57,0x29,0x9a,0x56,0xe3,0x24,0xcd,0x00,0x00, - 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x92,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x9b,0x4f,0x64,0x1c, + 0x51,0x1c,0xc7,0x3f,0xd9,0x24,0x94,0x10,0x21,0x44, + 0x09,0xb1,0xb4,0x56,0xd7,0xd4,0x5e,0x4a,0xa5,0x4d, + 0x4b,0x2b,0x69,0x2f,0xb5,0x95,0x48,0xf5,0x8f,0x56, + 0x7a,0x48,0x7a,0xc8,0xbf,0x5e,0x4a,0xc8,0x31,0x54, + 0xe9,0xb1,0x54,0xc9,0xb1,0x84,0x5e,0x4a,0x68,0x4a, + 0x88,0xd0,0x4b,0x09,0xb9,0x94,0x54,0x84,0x25,0xd4, + 0x12,0xd6,0x12,0x56,0x58,0x96,0x58,0xe9,0xe1,0xfd, + 0x96,0xb1,0x76,0xb3,0xb3,0x6f,0x66,0xe7,0xcd,0xce, + 0xe4,0xcb,0x58,0x3b,0xbb,0xc9,0xcc,0xef,0x93,0xf7, + 0x7e,0xef,0xf7,0xbe,0xbf,0x49,0xc7,0xd9,0xd9,0x19, + 0x51,0x56,0x8c,0x88,0xab,0x0b,0x20,0x9d,0x4e,0x9b, + 0xba,0xfe,0x00,0x70,0x0c,0x94,0x4d,0x5c,0x7c,0x63, + 0x63,0xc3,0xf8,0x08,0x98,0x05,0x26,0xa2,0x3a,0x05, + 0xfa,0x80,0x57,0x02,0x21,0x92,0x00,0x5e,0x03,0x3d, + 0x40,0x12,0x18,0x8b,0x1a,0x80,0x4b,0xc0,0x8c,0xed, + 0xfd,0x42,0xd4,0x00,0xbc,0x00,0xfa,0x6d,0xef,0x6f, + 0xca,0x11,0x09,0x00,0x9d,0xc0,0x5c,0x8d,0xf3,0x0b, + 0x51,0x01,0x30,0x01,0x0c,0xd6,0x38,0x3f,0x26,0xf9, + 0x20,0xf4,0x00,0x16,0x34,0x3f,0x0b,0x05,0x80,0x87, + 0x40,0xe2,0x9c,0xcf,0x1f,0x03,0x43,0x61,0x06,0xb0, + 0xe8,0x20,0x3f,0xcc,0x86,0x15,0xc0,0x2d,0xe0,0x86, + 0x83,0xef,0x3d,0x93,0x12,0x39,0x74,0x00,0x9c,0xce, + 0xef,0xea,0x1a,0x21,0x14,0x00,0x2c,0xe0,0x7e,0x13, + 0xdf,0x9f,0x02,0x7a,0xc3,0x04,0x60,0xb1,0xc9,0xef, + 0xf7,0x0a,0x84,0x50,0x00,0x18,0x02,0x1e,0x69,0xfc, + 0xdc,0x8c,0x4c,0x87,0xb6,0x07,0x30,0x2b,0xd9,0x5d, + 0xc7,0x2b,0x78,0xd2,0xee,0x00,0x06,0x24,0xab,0xeb, + 0x6a,0x4e,0x13,0x5e,0x60,0x00,0xb8,0x1d,0xc6,0x71, + 0xcd,0xe9,0x13,0x08,0x00,0x5e,0x25,0xb2,0xc5,0x56, + 0x02,0xe8,0xf2,0x60,0x5f,0x9f,0x90,0xcd,0x4d,0x3f, + 0x90,0x92,0xd7,0x41,0x39,0xef,0x45,0x12,0xb3,0x80, + 0xbf,0xc0,0x11,0x90,0x41,0x79,0x88,0x87,0x40,0x16, + 0x28,0x00,0x7b,0xad,0x04,0xd0,0x2d,0x3b,0xb4,0xcb, + 0x32,0x9f,0x2d,0x09,0x70,0x08,0xb8,0x82,0x72,0x74, + 0xfc,0x50,0xbf,0x0d,0x70,0x2d,0x1d,0xd7,0x01,0x74, + 0x0c,0xec,0x3b,0x01,0x90,0x94,0x32,0x35,0x29,0x17, + 0x8a,0xcb,0xd1,0x4b,0x7b,0xa8,0x11,0xa0,0x3c,0x90, + 0x03,0x0e,0x04,0xca,0x3f,0x60,0x1b,0xc8,0x55,0x00, + 0x64,0x81,0x15,0xe0,0x0e,0xe1,0xd4,0x80,0x1c,0x15, + 0x40,0x6b,0xc0,0x37,0x7b,0x12,0x2c,0x4a,0xc2,0xda, + 0x22,0xfc,0xfa,0x02,0x2c,0x21,0xbd,0x08,0xfb,0x2a, + 0x50,0x02,0xa6,0x81,0xf5,0x10,0x07,0xff,0x01,0x78, + 0x7f,0x5e,0x12,0x2c,0x03,0xf3,0xc0,0x09,0xca,0xb6, + 0x0e,0x93,0x96,0x64,0xe8,0x3b,0xaa,0x03,0x96,0x81, + 0x4f,0x21,0x09,0xfc,0x54,0xfe,0xa8,0x6b,0xcd,0x16, + 0x42,0x1f,0x25,0x31,0xb6,0xb3,0x4a,0xc0,0x9b,0xf3, + 0xa6,0x75,0xa3,0x4a,0x70,0xd5,0x9e,0x30,0xda,0x4c, + 0x45,0xe0,0x65,0xa3,0xc4,0xee,0xa4,0x14,0x5e,0x93, + 0x21,0x74,0xda,0x46,0xc1,0x17,0x80,0x49,0x60,0xc7, + 0xab,0xbd,0xc0,0x0f,0x59,0x21,0x4a,0x6d,0x10,0x7c, + 0x0e,0x18,0x77,0x5a,0x22,0x37,0xb3,0x19,0xda,0x06, + 0x9e,0xcb,0x0a,0x11,0x54,0x65,0x25,0xf8,0x4c,0xab, + 0x76,0x83,0xbb,0xc0,0x53,0x29,0x27,0x83,0xa6,0x0c, + 0xaa,0xaf,0x90,0x6d,0xf5,0x76,0x78,0x4f,0x28,0xe7, + 0x02,0x14,0xfc,0x1f,0xb9,0xa7,0xbc,0x5f,0x7e,0xc0, + 0x21,0x90,0x96,0x4d,0x85,0x69,0xfd,0x96,0x51,0x59, + 0xf0,0xdb,0x10,0x39,0x12,0xea,0x07,0x06,0x83,0xdf, + 0x92,0x3d,0x4c,0x51,0xf7,0x17,0xb8,0x75,0x84,0xf2, + 0xb2,0xdc,0x9c,0x1a,0x9a,0xf3,0xae,0x57,0x26,0x2f, + 0x2c,0xb1,0x1e,0x31,0x4e,0x4c,0x78,0x00,0xae,0x0b, + 0x34,0x2f,0x00,0x24,0x0d,0x0d,0xff,0x8a,0xf5,0x66, + 0x1c,0x40,0xca,0x60,0x0e,0xb0,0x82,0x00,0xc0,0x32, + 0x08,0xe0,0xfa,0xc5,0x08,0x30,0x0c,0xa0,0xcf,0x8b, + 0x79,0x68,0x12,0x7e,0xcc,0xf4,0x10,0x74,0xa9,0x4a, + 0x3f,0xc2,0x18,0x00,0x0b,0xf3,0xb2,0x4c,0x02,0x48, + 0x05,0x00,0x40,0x32,0xea,0x00,0x52,0xa6,0x00,0xf4, + 0xa0,0xba,0x47,0xba,0x2a,0xa0,0x3c,0xc7,0x55,0x97, + 0xa5,0xb4,0x31,0x00,0x09,0xf4,0x7a,0xf7,0x25,0x09, + 0x7a,0x58,0x5e,0x57,0x80,0xdb,0xe8,0xf7,0x23,0xe2, + 0xb8,0xe8,0x51,0xc6,0x7c,0x26,0xff,0x1d,0xb8,0x2b, + 0x41,0x9f,0x54,0xed,0x2c,0xe7,0x81,0x07,0x38,0xf0, + 0xf1,0xaa,0xd4,0x09,0x5c,0x0b,0x3a,0x80,0x1d,0x09, + 0xee,0xad,0x04,0x5b,0x4f,0xfb,0xb2,0xbb,0x9c,0xa2, + 0x09,0x5b,0xcb,0xcd,0x72,0xec,0x06,0x80,0x93,0xe5, + 0x27,0x83,0xb2,0xa6,0x27,0x69,0xd0,0xa6,0xae,0xd2, + 0x36,0x30,0x0a,0xbc,0xc3,0x99,0xcb,0x93,0xf2,0x1b, + 0x40,0x77,0x83,0xe5,0x27,0x2f,0x37,0x7f,0x0f,0xf8, + 0xa5,0x79,0x8d,0x32,0xaa,0x83,0x3b,0x82,0x6a,0xd2, + 0x14,0x5b,0x51,0x0b,0xe8,0x02,0xb8,0x5a,0xc7,0x03, + 0x28,0xca,0xcd,0x0e,0xcb,0xcd,0x7b,0xa1,0x22,0xaa, + 0x4d,0x37,0x02,0x7c,0xad,0xe3,0x01,0x24,0x75,0x3d, + 0x89,0x98,0x47,0xf3,0xbf,0x2c,0x37,0x37,0x2c,0x37, + 0xdb,0x8a,0xfe,0x41,0x1e,0xd5,0xb3,0x1c,0x05,0x36, + 0x6b,0x8c,0xc8,0x84,0x9f,0x00,0xec,0x43,0x6e,0x53, + 0x86,0xfa,0x32,0xfe,0xd8,0xe5,0x15,0x2b,0x6c,0x1c, + 0xe5,0x06,0xbb,0x4a,0x84,0x6e,0x46,0x40,0xc5,0x8a, + 0x9e,0x46,0xb9,0xc4,0x7e,0x6b,0x17,0xf5,0x08,0xdd, + 0x3c,0xca,0x9d,0xd6,0xca,0x03,0xba,0x4f,0x89,0x7d, + 0x96,0x4c,0x1d,0x04,0xad,0x03,0x3f,0x51,0x8f,0xe3, + 0x37,0xad,0x8e,0x8b,0x7f,0x9e,0x8e,0xb8,0x22,0x0f, + 0xe0,0xff,0x00,0x58,0x0b,0xa6,0xee,0x5b,0xdd,0x0e, + 0xa6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae, + 0x42,0x60,0x82 }; diff --git a/data/resources/star_filled.png b/data/resources/star_filled.png index c26576948b81bbb1aef142a8f3e378749e602ded..9405c35e525439913372b7cd546ff8b31c70e336 100644 GIT binary patch delta 946 zcmV;j15Nz681fvj&kBD7jY&j7RCwC#n^9z2VHC%IO{q{T1lhM~bjlPbur!n?aD`kvP`ZP)@p_FO~u~sM{l*k_LiA6Nc&3A9U z@80|E5Rs(G{mw7vobR0f*K|}W6>PRH0FJJjx_&=!0+fwheei#jnBgyA8JIP>fR0L~ zVk!c9fg|7$7`HJ3-U4wT2~3$#DyC(UZ5(kHX zF&srlhxOF}zQ|4*06GD7-2g~Ro0^mhjmWKsa9A@yc_4oW>TcNO27>8HNwun2i{#)1k1o2aHgvl*J$$+`mXwb z1>i$O96y&Yb*~0(S<gTxYp_~hl z^S@NT7ChUlON><$ehmMg2Tt1P^DFG0o(^0N2Io zv%1N04!DU69k0$hz0?6+0Jg-rm*Q+A+m-2Zniga&FFS!30B$at#gV2bX>v?mXPY>` zB6)v&7bicl@6%y=(AP09b4>EVusvYzOdn0AaySug8%>k delta 371 zcmV-(0gV3g9Jm;;&kBD5Q%OWYRCwC#nn@1BFbo4lA^(46|H0k^6wP97mV9mzYe=fH zQ}82^iz0%^4XDH~b_Wm&K@%0t&JJiFfp!3xr5B6?20*jl{R$4?&Hy+O7y!APqMhwO z5f}h|0GKs0?HzEONTVZwC$@u=mCf%A593Uyca(JxV6_NTmt5FjGZe;?Sm_{(zub}jzSAcS2k|7H@zE~>v7g|UO`Z_ff%n&YKC zs`Udhs=o3xh>EJOJ`SU5@hk5GP{s0A07|KD0e}^Y-@yR`AOir717a2@0toN^Sr=IyfQ$FuGw`JWC6xeg^_Q0YtwLSpr`l*gxCL(N}x<4gjs9Dwb3x RU8?{9002ovPDHLkV1jr4nfCwy diff --git a/data/resources/star_unfilled.png b/data/resources/star_unfilled.png index 2859a54c27640b1b9ae7ea10bc749e8332e51682..dddbba15460ce43196d42cd7960c3573518c7d79 100644 GIT binary patch delta 951 zcmV;o14#V38222o&kBD7l1W5CRCwC#n@?mMQ5?rV*(8(@Aw&tWv{u*DUP`4+ODkzF zwUtQqk5+m}ddR9JJFv4mbqXiA9CO9{D@RD>ne64nw{Se97n;r*7ecC)i@ zX6Mb$MwvLev1f0Qzn3Z^{t~0G+^Gjq?jp0Wbj!);K>V z`5^QF7BoK#1%QV@;+)SP14Cg3u;?H^%!U=fE#QWO?>&U| zp8|Tr1Yohr@ArQSgirt&0v>7n+>A_zwg)gP*%(Mx-%5ukrOkOK|`%0FNm$W;Jjffe8m z;naW}6+mmiH+vE+O2XPA{Q3ecA-xFuDo_HZf%Omv{{eV^UJ@(=^S}wpwhoh)WavAp z1D1hLAqo6c{-|rs7D68-F}AZxz?<`?b)!mf)t)fgOhw>jqr~o{6kd}dblOJ27l27% z$E&@-4_SX9N^KB)4j6Y@A~&-c+6JD>3K3LgCHPFMc7waXQz<8drVOgDkZtvLcuy$j z0u=loxu?8ee!wA+mQ96e{gzQ#@Y@hM66yyAgWr-pOi}k2xOIf`vfP{+n)9w#CNC_p z9x+Z#cmS>oG%o-o4GsT_^=2GE%3uz#f&joW2;hJE#RxDApwEkWXcB(R^bmBZN;{07JfLd9oYM?G_74BKp@|n8lG)N z(m`Ht30xErL~cMOez7}%Pzai+Xm)l$`v|lHz%0FB954Wy{q9$A0Cxt!iNFBJmdjTk=x(5JOEPe+E41f#(I1Y$eoCqWU!07?S zW1yYYpB|6^K=^Ilf(F_jMq@3jIpCY>=nw&9i-az++}*;kDh8TBb=Tu=BmfILBO8E- z{{~$J$t(^)vM4PBu%d$_5&)wcmdCTSfa-T3a3z4~7a}I`^$+`JdpY`OFP{MbYgZ|n TR^uei00000NkvXXu0mjfsXm^b From 89fca2b875c3f302349c8e0672f077d56357da04 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 17:49:14 -0500 Subject: [PATCH 079/386] Create folders when writing a new gamelist.xml if necessary. --- src/XMLReader.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index d8cf5da28..e6d915ce7 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -215,6 +215,10 @@ void updateGamelist(SystemData* system) }else{ //set up an empty gamelist to append to doc.append_child("gameList"); + + //make sure the folders leading up to this path exist (or the XML file write will fail later on) + boost::filesystem::path path(xmlpath); + boost::filesystem::create_directories(path.parent_path()); } From 36ecb83d8d682af0c0c809d18dac27551b4cce84 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 18:11:43 -0500 Subject: [PATCH 080/386] Added color/font settings for DateTimeComponent. Added "release date" entry to GuiGameList. --- src/components/DateTimeComponent.cpp | 25 +++++++++++++++-- src/components/DateTimeComponent.h | 6 ++++ src/components/GuiGameList.cpp | 42 +++++++++++++++++++++++----- src/components/GuiGameList.h | 4 +++ 4 files changed, 68 insertions(+), 9 deletions(-) diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index aaf624dfc..df31803fb 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -5,7 +5,8 @@ #include "../Log.h" DateTimeComponent::DateTimeComponent(Window* window) : GuiComponent(window), - mEditing(false), mEditIndex(0), mDisplayMode(DISP_DATE), mRelativeUpdateAccumulator(0) + mEditing(false), mEditIndex(0), mDisplayMode(DISP_DATE), mRelativeUpdateAccumulator(0), + mColor(0x000000FF) { mSize << 64, (float)getFont()->getHeight(); updateTextCache(); @@ -231,6 +232,9 @@ std::string DateTimeComponent::getDisplayString(DisplayMode mode) const std::shared_ptr DateTimeComponent::getFont() const { + if(mFont) + return mFont; + return Font::get(FONT_SIZE_MEDIUM); } @@ -239,7 +243,7 @@ void DateTimeComponent::updateTextCache() DisplayMode mode = getCurrentDisplayMode(); const std::string dispString = getDisplayString(mode); std::shared_ptr font = getFont(); - mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, 0x000000FF)); + mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); //set up cursor positions mCursorBoxes.clear(); @@ -267,3 +271,20 @@ void DateTimeComponent::updateTextCache() //if mode == DISP_DATE_TIME do times too but I don't wanna do the logic for editing times because no one will ever use it so screw it } + +void DateTimeComponent::setColor(unsigned int color) +{ + mColor = color; + if(mTextCache) + mTextCache->setColor(color); +} + +void DateTimeComponent::setFont(std::shared_ptr font) +{ + mFont = font; + + if(getSize().y() < mFont->getHeight()) + setSize(getSize().x(), (float)mFont->getHeight()); + + updateTextCache(); +} diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index 451e9fd3b..bccb1a99b 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -25,6 +25,9 @@ public: void setDisplayMode(DisplayMode mode); + void setColor(unsigned int color); + void setFont(std::shared_ptr font); + private: std::shared_ptr getFont() const; @@ -44,4 +47,7 @@ private: std::unique_ptr mTextCache; std::vector mCursorBoxes; + + unsigned int mColor; + std::shared_ptr mFont; }; diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index ed1668446..efbceb6a0 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -19,10 +19,21 @@ Eigen::Vector3f GuiGameList::getImagePos() bool GuiGameList::isDetailed() const { - if(mSystem == NULL) + if(!mFolder) return false; - return mSystem->hasGamelist(); + //return true if any game has an image specified + for(unsigned int i = 0; i < mFolder->getFileCount(); i++) + { + if(!mFolder->getFile(i)->isFolder()) + { + GameData* game = (GameData*)(mFolder->getFile(i)); + if(!game->metadata()->get("image").empty()) + return true; + } + } + + return false; } GuiGameList::GuiGameList(Window* window) : GuiComponent(window), @@ -31,6 +42,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mScreenshot(window), mDescription(window), mRating(window), + mReleaseDate(window), mDescContainer(window), mTransitionImage(window, 0.0f, 0.0f, "", (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), true), mHeaderText(mWindow), @@ -51,6 +63,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), } mImageAnimation.addChild(&mScreenshot); + mDescContainer.addChild(&mReleaseDate); mDescContainer.addChild(&mRating); mDescContainer.addChild(&mDescription); @@ -357,14 +370,15 @@ void GuiGameList::updateTheme() mScreenshot.setOrigin(mTheme->getFloat("gameImageOriginX"), mTheme->getFloat("gameImageOriginY")); mScreenshot.setResize(mTheme->getFloat("gameImageWidth") * Renderer::getScreenWidth(), mTheme->getFloat("gameImageHeight") * Renderer::getScreenHeight(), false); + mReleaseDate.setColor(mTheme->getColor("description")); + mReleaseDate.setFont(mTheme->getDescriptionFont()); + mDescription.setColor(mTheme->getColor("description")); mDescription.setFont(mTheme->getDescriptionFont()); }else{ mList.setCentered(true); mList.setPosition(0, mList.getPosition().y()); mList.setTextOffsetX(0); - - //mDescription.setFont(nullptr); } } @@ -378,11 +392,22 @@ void GuiGameList::updateDetailData() addChild(&mDescContainer); GameData* game = (GameData*)mList.getSelectedObject(); + //set image to either "not found" image or metadata image - if(game->metadata()->get("image").empty()) - mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); - else + if(!boost::filesystem::exists(game->metadata()->get("image"))) + { + //image doesn't exist + if(mTheme->getString("imageNotFoundPath").empty()) + { + //"not found" image doesn't exist + mScreenshot.setImage(""); + mScreenshot.setSize(0, 0); //clear old size + }else{ + mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); + } + }else{ mScreenshot.setImage(game->metadata()->get("image")); + } Eigen::Vector3f imgOffset = Eigen::Vector3f(Renderer::getScreenWidth() * 0.10f, 0, 0); mScreenshot.setPosition(getImagePos() - imgOffset); @@ -399,6 +424,9 @@ void GuiGameList::updateDetailData() float ratingHeight = colwidth * 0.3f / 5.0f; mRating.setSize(ratingHeight * 5.0f, ratingHeight); + mReleaseDate.setPosition(0, 0); + mReleaseDate.setValue(game->metadata()->get("releasedate")); + mRating.setPosition(colwidth - mRating.getSize().x() - 12, 0); mRating.setValue(game->metadata()->get("rating")); diff --git a/src/components/GuiGameList.h b/src/components/GuiGameList.h index 77539e6af..87f5c359f 100644 --- a/src/components/GuiGameList.h +++ b/src/components/GuiGameList.h @@ -14,6 +14,7 @@ #include "../FolderData.h" #include "ScrollableContainer.h" #include "RatingComponent.h" +#include "DateTimeComponent.h" //This is where the magic happens - GuiGameList is the parent of almost every graphical element in ES at the moment. //It has a TextListComponent child that handles the game list, a ThemeComponent that handles the theming system, and an ImageComponent for game images. @@ -60,8 +61,11 @@ private: TextListComponent mList; ImageComponent mScreenshot; + TextComponent mDescription; RatingComponent mRating; + DateTimeComponent mReleaseDate; + ScrollableContainer mDescContainer; AnimationComponent mImageAnimation; ThemeComponent* mTheme; From 9867e902dec507247b7dc2e07379cef2dbb62d08 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 18:20:21 -0500 Subject: [PATCH 081/386] Fixed a Settings loading bug that would cause values from other types to get loaded into a map. Added a "Released:" label for release date on GuiGameList. --- src/Settings.cpp | 6 +++--- src/components/GuiGameList.cpp | 8 +++++++- src/components/GuiGameList.h | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Settings.cpp b/src/Settings.cpp index f6b428c5f..991723dc9 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -88,11 +88,11 @@ void Settings::loadFile() return; } - for(pugi::xml_node node = doc.child("bool"); node; node = node.next_sibling()) + for(pugi::xml_node node = doc.child("bool"); node; node = node.next_sibling("bool")) setBool(node.attribute("name").as_string(), node.attribute("value").as_bool()); - for(pugi::xml_node node = doc.child("int"); node; node = node.next_sibling()) + for(pugi::xml_node node = doc.child("int"); node; node = node.next_sibling("int")) setInt(node.attribute("name").as_string(), node.attribute("value").as_int()); - for(pugi::xml_node node = doc.child("float"); node; node = node.next_sibling()) + for(pugi::xml_node node = doc.child("float"); node; node = node.next_sibling("float")) setFloat(node.attribute("name").as_string(), node.attribute("value").as_float()); if(doc.child("scraper")) diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index efbceb6a0..3ef3746cf 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -42,6 +42,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mScreenshot(window), mDescription(window), mRating(window), + mReleaseDateLabel(window), mReleaseDate(window), mDescContainer(window), mTransitionImage(window, 0.0f, 0.0f, "", (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), true), @@ -63,6 +64,7 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), } mImageAnimation.addChild(&mScreenshot); + mDescContainer.addChild(&mReleaseDateLabel); mDescContainer.addChild(&mReleaseDate); mDescContainer.addChild(&mRating); mDescContainer.addChild(&mDescription); @@ -370,6 +372,8 @@ void GuiGameList::updateTheme() mScreenshot.setOrigin(mTheme->getFloat("gameImageOriginX"), mTheme->getFloat("gameImageOriginY")); mScreenshot.setResize(mTheme->getFloat("gameImageWidth") * Renderer::getScreenWidth(), mTheme->getFloat("gameImageHeight") * Renderer::getScreenHeight(), false); + mReleaseDateLabel.setColor(mTheme->getColor("description")); + mReleaseDateLabel.setFont(mTheme->getDescriptionFont()); mReleaseDate.setColor(mTheme->getColor("description")); mReleaseDate.setFont(mTheme->getDescriptionFont()); @@ -424,7 +428,9 @@ void GuiGameList::updateDetailData() float ratingHeight = colwidth * 0.3f / 5.0f; mRating.setSize(ratingHeight * 5.0f, ratingHeight); - mReleaseDate.setPosition(0, 0); + mReleaseDateLabel.setPosition(0, 0); + mReleaseDateLabel.setText("Released: "); + mReleaseDate.setPosition(mReleaseDateLabel.getPosition().x() + mReleaseDateLabel.getSize().x(), mReleaseDateLabel.getPosition().y()); mReleaseDate.setValue(game->metadata()->get("releasedate")); mRating.setPosition(colwidth - mRating.getSize().x() - 12, 0); diff --git a/src/components/GuiGameList.h b/src/components/GuiGameList.h index 87f5c359f..a080d55e1 100644 --- a/src/components/GuiGameList.h +++ b/src/components/GuiGameList.h @@ -64,6 +64,7 @@ private: TextComponent mDescription; RatingComponent mRating; + TextComponent mReleaseDateLabel; DateTimeComponent mReleaseDate; ScrollableContainer mDescContainer; From a554fea9737d1d40a502e864c19acc4c9ee55186 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Oct 2013 18:46:05 -0500 Subject: [PATCH 082/386] Fixed memory leak with FolderData::removeFileRecursive. Made "DELETE" actually work in GuiMetaDataEd. "DELETE" option also now asks if you're sure. GuiMetaDataEd can be closed with the "b" button now. GuiGameScraper now tries to put the cursor on the first game if there is one when a search completes. --- src/FolderData.cpp | 1 + src/components/GuiGameList.cpp | 7 +++++-- src/components/GuiGameScraper.cpp | 3 +++ src/components/GuiMetaDataEd.cpp | 22 +++++++++++++++++++++- src/components/GuiMetaDataEd.h | 2 ++ 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/FolderData.cpp b/src/FolderData.cpp index f6caea59a..a94c7d47b 100644 --- a/src/FolderData.cpp +++ b/src/FolderData.cpp @@ -180,6 +180,7 @@ void FolderData::removeFileRecursive(FileData* f) { if(*iter == f) { + delete *iter; iter = mFileVector.erase(iter); }else{ diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 3ef3746cf..c7c5a6baa 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -151,8 +151,11 @@ bool GuiGameList::input(InputConfig* config, Input input) searchParams.system = mSystem; mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), mSystem->getGameMDD(), searchParams, game->getBaseName(), [&] { updateDetailData(); }, - [game, root, this] { root->removeFileRecursive(game); updateList(); } - )); + [game, root, this] { + boost::filesystem::remove(game->getPath()); + root->removeFileRecursive(game); + updateList(); + })); } return true; } diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index 55a10ef07..973110d9b 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -120,6 +120,9 @@ void GuiGameScraper::onSearchDone(std::vector results) mList.setEntry(Eigen::Vector2i(0, 6 + i), Eigen::Vector2i(1, 1), &mResultNames.at(i), true, ComponentListComponent::AlignLeft); } } + + mList.resetCursor(); + mList.moveCursor(Eigen::Vector2i(0, 1)); //move cursor to first game if there is one } int GuiGameScraper::getSelectedIndex() diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index 61246dd06..f3f7d7b39 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -5,6 +5,7 @@ #include "../Settings.h" #include "GuiGameScraper.h" #include +#include "GuiMsgBoxYesNo.h" #define MDED_RESERVED_ROWS 3 @@ -30,7 +31,11 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector //initialize buttons mDeleteButton.setText("DELETE", mDeleteFunc ? 0xFF0000FF : 0x555555FF); if(mDeleteFunc) - mDeleteButton.setPressedFunc([&] { mDeleteFunc(); delete this; }); + { + std::function deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; + std::function pressedFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "This will delete a file!\nAre you sure?", deleteFileAndSelf)); }; + mDeleteButton.setPressedFunc(pressedFunc); + } mFetchButton.setText("FETCH", 0x00FF00FF); mFetchButton.setPressedFunc(std::bind(&GuiMetaDataEd::fetch, this)); @@ -164,3 +169,18 @@ void GuiMetaDataEd::fetchDone(MetaDataList result) mEditors.at(i)->setValue(result.get(key)); } } + + +bool GuiMetaDataEd::input(InputConfig* config, Input input) +{ + if(GuiComponent::input(config, input)) + return true; + + if(input.value != 0 && config->isMappedTo("b", input)) + { + delete this; + return true; + } + + return false; +} diff --git a/src/components/GuiMetaDataEd.h b/src/components/GuiMetaDataEd.h index 7ce136ac1..1c33394f5 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/components/GuiMetaDataEd.h @@ -17,6 +17,8 @@ public: const std::string& header, std::function savedCallback, std::function deleteFunc); virtual ~GuiMetaDataEd(); + bool input(InputConfig* config, Input input) override; + private: void save(); void fetch(); From afdd5f286241cd9d4885316c82d2a3a3979139b9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Oct 2013 14:53:14 -0500 Subject: [PATCH 083/386] Fixed building on Linux. --- src/components/OptionListComponent.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 475411db2..d28d5b63e 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -6,6 +6,7 @@ #include #include "../Renderer.h" #include "NinePatchComponent.h" +#include "../Window.h" //Used to display a list of options. //Can select one or multiple options. From 81e2f2d783f2861eb51736ba44362ce397c41c1f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 24 Oct 2013 16:43:54 +0000 Subject: [PATCH 084/386] Specify for SDL to use OpenGL ES 1.x --- src/Renderer_init_sdlgl.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index d807fcdaf..a9b4d97cd 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -42,6 +42,10 @@ namespace Renderer SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + + if(USE_OPENGL_ES) + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + //SDL_GL_SetSwapInterval(1); //0 for immediate updates, 1 for updates synchronized with the vertical retrace, -1 for late swap tearing SDL_DisplayMode dispMode; From a666415302cd6eaba0441d748c96a5ba9386344a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 24 Oct 2013 11:47:09 -0500 Subject: [PATCH 085/386] I forgot how to #ifdef apparently --- src/Renderer_init_sdlgl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index a9b4d97cd..812e7b8a8 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -43,9 +43,9 @@ namespace Renderer SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - if(USE_OPENGL_ES) - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); - +#ifdef USE_OPENGL_ES + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); +#endif //SDL_GL_SetSwapInterval(1); //0 for immediate updates, 1 for updates synchronized with the vertical retrace, -1 for late swap tearing SDL_DisplayMode dispMode; From 20c367daa79298f4a605c2a474e4dd37bc236f54 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 24 Oct 2013 11:48:29 -0500 Subject: [PATCH 086/386] Fix DateTimeComponent not consuming input when leaving edit mode. --- src/components/DateTimeComponent.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index df31803fb..d501d666b 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -50,6 +50,7 @@ bool DateTimeComponent::input(InputConfig* config, Input input) mEditing = false; mTime = mTimeBeforeEdit; updateTextCache(); + return true; } int incDir = 0; From 68841aa65414cdfa173fdcefebe1fc2e699c14ee Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 26 Oct 2013 14:07:30 -0500 Subject: [PATCH 087/386] SystemData now stores extension lists as a vector internally. Don't write gamelist.xml changes if IGNOREGAMELIST is true. --- src/SystemData.cpp | 65 +++++++++++++++++++++++----------------------- src/SystemData.h | 11 +++++--- src/XMLReader.cpp | 2 +- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/SystemData.cpp b/src/SystemData.cpp index de19c3d0e..aef0c808b 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -18,9 +18,9 @@ std::vector SystemData::sSystemVector; namespace fs = boost::filesystem; std::string SystemData::getStartPath() { return mStartPath; } -std::string SystemData::getExtension() { return mSearchExtension; } +std::vector SystemData::getExtensions() { return mSearchExtensions; } -SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, +SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, const std::string& command, PlatformIds::PlatformId platformId) { mName = name; @@ -34,7 +34,7 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mStartPath.insert(0, getHomePath()); } - mSearchExtension = extension; + mSearchExtensions = extensions; mLaunchCommand = command; mPlatformId = platformId; @@ -122,42 +122,31 @@ void SystemData::populateFolder(FolderData* folder) } } + fs::path filePath; + std::string extension; + bool isGame; for(fs::directory_iterator end, dir(folderPath); dir != end; ++dir) { - fs::path filePath = (*dir).path(); + filePath = (*dir).path(); if(filePath.stem().string().empty()) continue; //this is a little complicated because we allow a list of extensions to be defined (delimited with a space) //we first get the extension of the file itself: - std::string extension = filePath.extension().string(); - std::string chkExt; - size_t extPos = 0; - - //folders *can* also match the extension and be added as games - this is mostly just to support higan + extension = filePath.extension().string(); + + //fyi, folders *can* also match the extension and be added as games - this is mostly just to support higan //see issue #75: https://github.com/Aloshi/EmulationStation/issues/75 - bool isGame = false; - do { - //now we loop through every extension in the list - size_t cpos = extPos; - extPos = mSearchExtension.find(" ", extPos); - chkExt = mSearchExtension.substr(cpos, ((extPos == std::string::npos) ? mSearchExtension.length() - cpos: extPos - cpos)); - //if it matches, add it - if(chkExt == extension) - { - GameData* newGame = new GameData(filePath.generic_string(), MetaDataList(getGameMDD())); - folder->pushFileData(newGame); - isGame = true; - break; - }else if(extPos != std::string::npos) //if not, add one to the "next position" marker to skip the space when reading the next extension - { - extPos++; - } + isGame = false; + if(std::find(mSearchExtensions.begin(), mSearchExtensions.end(), extension) != mSearchExtensions.end()) + { + GameData* newGame = new GameData(filePath.generic_string(), MetaDataList(getGameMDD())); + folder->pushFileData(newGame); + isGame = true; + } - } while(extPos != std::string::npos && chkExt != "" && chkExt.find(".") != std::string::npos); - //add directories that also do not match an extension as folders if(!isGame && fs::is_directory(filePath)) { @@ -218,18 +207,30 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { - std::string name, fullname, path, ext, cmd; + std::string name, fullname, path, cmd; PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN; name = system.child("name").text().get(); fullname = system.child("fullname").text().get(); path = system.child("path").text().get(); - ext = system.child("extension").text().get(); + + //convert extensions list from a string into a vector of strings + const pugi::char_t* extStr = system.child("extension").text().get(); + std::vector extensions; + std::vector buff(strlen(extStr) + 1); + strcpy(buff.data(), extStr); + char* ext = strtok(buff.data(), " "); + while(ext != NULL) + { + extensions.push_back(ext); + ext = strtok(NULL, " "); + } + cmd = system.child("command").text().get(); platformId = (PlatformIds::PlatformId)system.child("platformid").text().as_uint(PlatformIds::PLATFORM_UNKNOWN); //validate - if(name.empty() || path.empty() || ext.empty() || cmd.empty()) + if(name.empty() || path.empty() || extensions.empty() || cmd.empty()) { LOG(LogError) << "System \"" << name << "\" is missing name, path, extension, or command!"; continue; @@ -239,7 +240,7 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) boost::filesystem::path genericPath(path); path = genericPath.generic_string(); - SystemData* newSys = new SystemData(name, fullname, path, ext, cmd, platformId); + SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformId); if(newSys->getRootFolder()->getFileCount() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; diff --git a/src/SystemData.h b/src/SystemData.h index e6bbefa6e..fb82961b9 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -13,19 +13,22 @@ class GameData; class SystemData { public: - SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::string& extension, + SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, const std::string& command, PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN); ~SystemData(); FolderData* getRootFolder(); + std::string getName(); std::string getFullName(); std::string getStartPath(); - std::string getExtension(); - std::string getGamelistPath(); + std::vector getExtensions(); PlatformIds::PlatformId getPlatformId(); + + std::string getGamelistPath(); bool hasGamelist(); std::vector getGameMDD(); + unsigned int getGameCount(); void launchGame(Window* window, GameData* game); @@ -40,7 +43,7 @@ private: std::string mName; std::string mFullName; std::string mStartPath; - std::string mSearchExtension; + std::vector mSearchExtensions; std::string mLaunchCommand; PlatformIds::PlatformId mPlatformId; diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index e6d915ce7..5cd25df08 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -194,7 +194,7 @@ void updateGamelist(SystemData* system) //We have the complete information for every game though, so we can simply remove a game //we already have in the system from the XML, and then add it back from its GameData information... - if(Settings::getInstance()->getBool("DisableGamelistWrites")) + if(Settings::getInstance()->getBool("DisableGamelistWrites") || Settings::getInstance()->getBool("IGNOREGAMELIST")) return; std::string xmlpath = system->getGamelistPath(); From fb55b1cd91cfa425b407de319edfeed31004b5a8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 26 Oct 2013 15:57:46 -0500 Subject: [PATCH 088/386] Limit OptionListComponent to 5 entries on screen. Can now hold up/down to scroll OptionListComponent. --- src/components/OptionListComponent.h | 82 ++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index d28d5b63e..f81d248ea 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -167,7 +167,7 @@ private: { public: OptionListPopup(Window* window, OptionListComponent& optList) : GuiComponent(window), - mOptList(optList), mBox(window, ":/textbox.png"), mCursor(0), mScrollOffset(0) + mOptList(optList), mBox(window, ":/textbox.png"), mCursor(0), mScrollOffset(0), mCursorTimer(0) { //find global position GuiComponent* p = &mOptList; @@ -185,7 +185,11 @@ private: std::shared_ptr font = mOptList.getFont(); - unsigned int renderCount = mTextCaches.size() - mScrollOffset; + unsigned int renderCount = getPageSize(); + if(renderCount + mScrollOffset > mTextCaches.size()) + renderCount = mTextCaches.size() - mScrollOffset; + + unsigned int renderTo = mScrollOffset + renderCount; float height = (float)renderCount * font->getHeight(); trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0)); @@ -196,7 +200,7 @@ private: Renderer::setMatrix(trans); Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF); - for(unsigned int i = mScrollOffset; i < renderCount; i++) + for(unsigned int i = mScrollOffset; i < renderTo; i++) { Renderer::setMatrix(trans); @@ -232,29 +236,64 @@ private: return true; } - if(mOptList.mEntries.size() > 1) + if(config->isMappedTo("up", input)) { - if(config->isMappedTo("up", input)) - { - if(mCursor > 0) - mCursor--; - - return true; - } - if(config->isMappedTo("down", input)) - { - if(mCursor < mOptList.mEntries.size() - 1) - mCursor++; - - return true; - } + mCursorDir = -1; + mCursorTimer = -350; + moveCursor(); + return true; } + if(config->isMappedTo("down", input)) + { + mCursorDir = 1; + mCursorTimer = -350; + moveCursor(); + return true; + } + }else{ + if(config->isMappedTo("up", input) || config->isMappedTo("down", input)) + mCursorDir = 0; } return GuiComponent::input(config, input); } + + void update(int deltaTime) + { + if(mCursorDir != 0) + { + mCursorTimer += deltaTime; + while(mCursorTimer >= 100) + { + moveCursor(); + mCursorTimer -= 100; + } + } + } private: + void moveCursor() + { + if(mOptList.mEntries.size() == 0) + return; + + if(mCursorDir < 0) //scroll up + { + if(mCursor > 0) + mCursor--; + + if(mCursor < mScrollOffset) + mScrollOffset--; + }else if(mCursorDir > 0) //scroll down + { + if(mCursor < mOptList.mEntries.size() - 1) + mCursor++; + + if(mCursor - mScrollOffset >= getPageSize()) + mScrollOffset++; + } + } + void close() { delete this; @@ -277,10 +316,17 @@ private: } } + unsigned int getPageSize() + { + return 5; + } + OptionListComponent& mOptList; NinePatchComponent mBox; unsigned int mCursor; + int mCursorDir; + int mCursorTimer; unsigned int mScrollOffset; std::vector mTextCaches; }; From 626a2692e59670cc8b78a38a6e6dd9c4811ab0ce Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 27 Oct 2013 11:18:38 -0500 Subject: [PATCH 089/386] Removed an unnecessary path.string() during folder population. --- src/SystemData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SystemData.cpp b/src/SystemData.cpp index aef0c808b..9a308510a 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -129,7 +129,7 @@ void SystemData::populateFolder(FolderData* folder) { filePath = (*dir).path(); - if(filePath.stem().string().empty()) + if(filePath.stem().empty()) continue; //this is a little complicated because we allow a list of extensions to be defined (delimited with a space) From 5c65747551c217105501b869d153f22f411dfa1b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 3 Nov 2013 19:54:13 -0600 Subject: [PATCH 090/386] Moved metadata type declarations more behind-the-scenes. The original plan was to allow each system to have customizable lists of metadata, which made constructing metadata really painful (the declaration list isn't stored on the metadata instance because that's pretty wasteful for 2,000 games). Now they're constructed by passing a MetaDataListType enum in the constructor. Declaration lists are now managed by const globals passed by reference through getMDDByType(MetaDataListType). --- src/MetaData.cpp | 83 ++++++++++++++++++++---------- src/MetaData.h | 27 ++++++---- src/ScraperCmdLine.cpp | 2 +- src/SystemData.cpp | 7 +-- src/SystemData.h | 3 +- src/XMLReader.cpp | 6 +-- src/components/GuiGameList.cpp | 2 +- src/scrapers/GamesDBScraper.cpp | 2 +- src/scrapers/Scraper.cpp | 2 +- src/scrapers/TheArchiveScraper.cpp | 2 +- 10 files changed, 82 insertions(+), 54 deletions(-) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 5879888d2..4a782f5bc 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -6,36 +6,57 @@ #include "components/RatingComponent.h" #include "components/DateTimeComponent.h" -MetaDataList::MetaDataList() + +MetaDataDecl gameDecls[] = { + {"name", MD_STRING, "", false}, + {"desc", MD_MULTILINE_STRING, "", false}, + {"image", MD_IMAGE_PATH, "", false}, + {"thumbnail", MD_IMAGE_PATH, "", false}, + {"rating", MD_RATING, "0", false}, + {"releasedate", MD_DATE, "0", false}, + {"playcount", MD_INT, "0", true}, + {"lastplayed", MD_TIME, "0", true} +}; +const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); + +MetaDataDecl folderDecls[] = { + {"name", MD_STRING, "", false}, + {"desc", MD_MULTILINE_STRING, "", false}, + {"image", MD_IMAGE_PATH, "", false}, + {"thumbnail", MD_IMAGE_PATH, "", false}, +}; +const std::vector folderMDD(folderDecls, folderDecls + sizeof(folderDecls) / sizeof(folderDecls[0])); + +const std::vector& getMDDByType(MetaDataListType type) { + switch(type) + { + case GAME_METADATA: + return gameMDD; + case FOLDER_METADATA: + return folderMDD; + } + + LOG(LogError) << "Invalid MDD type"; + return gameMDD; } -MetaDataList::MetaDataList(const std::vector& mdd) + + +MetaDataList::MetaDataList(MetaDataListType type) + : mType(type) { + const std::vector& mdd = getMDD(); for(auto iter = mdd.begin(); iter != mdd.end(); iter++) set(iter->key, iter->defaultValue); } -std::vector MetaDataList::getDefaultGameMDD() -{ - MetaDataDecl decls[] = { - {"name", MD_STRING, "", false}, - {"desc", MD_MULTILINE_STRING, "", false}, - {"image", MD_IMAGE_PATH, "", false}, - {"thumbnail", MD_IMAGE_PATH, "", false}, - {"rating", MD_RATING, "0", false}, - {"releasedate", MD_DATE, "0", false}, - {"playcount", MD_INT, "0", true}, - {"lastplayed", MD_TIME, "0", true} - }; - std::vector mdd(decls, decls + sizeof(decls) / sizeof(decls[0])); - return mdd; -} - -MetaDataList MetaDataList::createFromXML(const std::vector& mdd, pugi::xml_node node) +MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node node) { - MetaDataList mdl; + MetaDataList mdl(type); + + const std::vector& mdd = mdl.getMDD(); for(auto iter = mdd.begin(); iter != mdd.end(); iter++) { @@ -51,19 +72,25 @@ MetaDataList MetaDataList::createFromXML(const std::vector& mdd, p return mdl; } -void MetaDataList::appendToXML(pugi::xml_node parent, const std::vector& ignoreDefaults) const +void MetaDataList::appendToXML(pugi::xml_node parent, bool ignoreDefaults) const { + const std::vector& mdd = getMDD(); + for(auto iter = mMap.begin(); iter != mMap.end(); iter++) { bool write = true; - for(auto mddIter = ignoreDefaults.begin(); mddIter != ignoreDefaults.end(); mddIter++) - { - if(mddIter->key == iter->first) - { - if(iter->second == mddIter->defaultValue) - write = false; - break; + if(ignoreDefaults) + { + for(auto mddIter = mdd.begin(); mddIter != mdd.end(); mddIter++) + { + if(mddIter->key == iter->first) + { + if(iter->second == mddIter->defaultValue) + write = false; + + break; + } } } diff --git a/src/MetaData.h b/src/MetaData.h index f83d2aeed..48c6c3f5c 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -31,16 +31,22 @@ struct MetaDataDecl boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); +enum MetaDataListType +{ + GAME_METADATA, + FOLDER_METADATA +}; + +const std::vector& getMDDByType(MetaDataListType type); + class MetaDataList { public: - static std::vector getDefaultGameMDD(); - - static MetaDataList createFromXML(const std::vector& mdd, pugi::xml_node node); - - //MetaDataDecl required to set our defaults. - MetaDataList(const std::vector& mdd); + static MetaDataList createFromXML(MetaDataListType type, pugi::xml_node node); + void appendToXML(pugi::xml_node parent, bool ignoreDefaults = false) const; + MetaDataList(MetaDataListType type); + void set(const std::string& key, const std::string& value); void setTime(const std::string& key, const boost::posix_time::ptime& time); //times are internally stored as ISO strings (e.g. boost::posix_time::to_iso_string(ptime)) @@ -52,11 +58,11 @@ public: static GuiComponent* makeDisplay(Window* window, MetaDataType as); static GuiComponent* makeEditor(Window* window, MetaDataType as); - void appendToXML(pugi::xml_node parent, const std::vector& ignoreDefaults = std::vector()) const; + inline MetaDataListType getType() const { return mType; } + inline const std::vector& getMDD() const { return getMDDByType(getType()); } private: - MetaDataList(); - + MetaDataListType mType; std::map mMap; }; @@ -64,7 +70,8 @@ private: //options for storing metadata... //store internally everything as a string - this is all going to be read to/from XML anyway, after all -//store using individual get/set functions ala Settings - this is a fair amount of work but the most explicit, for better or worse +// - problem: this does not play nice with lists of values +//store using individual get/set functions ala Settings - this is a fair amount of work but the most explicit and type-safe, for better or worse //let's think about some of the special types we would like to support... //image paths, sound paths, ratings, play counts diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp index f62b64a03..53fce16c5 100644 --- a/src/ScraperCmdLine.cpp +++ b/src/ScraperCmdLine.cpp @@ -243,7 +243,7 @@ int run_scraper_cmdline() for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) { GameData* game = (GameData*)(*gameIt); - std::vector mdd = (*sysIt)->getGameMDD(); + const std::vector& mdd = game->metadata()->getMDD(); for(auto i = mdd.begin(); i != mdd.end(); i++) { std::string key = i->key; diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 9a308510a..84b3e7ddd 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -142,7 +142,7 @@ void SystemData::populateFolder(FolderData* folder) isGame = false; if(std::find(mSearchExtensions.begin(), mSearchExtensions.end(), extension) != mSearchExtensions.end()) { - GameData* newGame = new GameData(filePath.generic_string(), MetaDataList(getGameMDD())); + GameData* newGame = new GameData(filePath.generic_string(), MetaDataList(GAME_METADATA)); folder->pushFileData(newGame); isGame = true; } @@ -335,11 +335,6 @@ bool SystemData::hasGamelist() return (fs::exists(getGamelistPath())); } -std::vector SystemData::getGameMDD() -{ - return MetaDataList::getDefaultGameMDD(); -} - PlatformIds::PlatformId SystemData::getPlatformId() { return mPlatformId; diff --git a/src/SystemData.h b/src/SystemData.h index fb82961b9..6040d2e61 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -27,8 +27,7 @@ public: std::string getGamelistPath(); bool hasGamelist(); - std::vector getGameMDD(); - + unsigned int getGameCount(); void launchGame(Window* window, GameData* game); diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 5cd25df08..35f8fdcda 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -91,7 +91,7 @@ GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) loops++; } - GameData* game = new GameData(gameAbsPath, MetaDataList(system->getGameMDD())); + GameData* game = new GameData(gameAbsPath, MetaDataList(GAME_METADATA)); folder->pushFileData(game); return game; } @@ -156,7 +156,7 @@ void parseGamelist(SystemData* system) game = createGameFromPath(path, system); //load the metadata - *(game->metadata()) = MetaDataList::createFromXML(system->getGameMDD(), gameNode); + *(game->metadata()) = MetaDataList::createFromXML(GAME_METADATA, gameNode); //make sure name gets set if one didn't exist if(game->metadata()->get("name").empty()) @@ -173,7 +173,7 @@ void addGameDataNode(pugi::xml_node& parent, const GameData* game, SystemData* s pugi::xml_node newGame = parent.append_child("game"); //write metadata - const_cast(game)->metadata()->appendToXML(newGame, system->getGameMDD()); + const_cast(game)->metadata()->appendToXML(newGame, true); if(newGame.children().begin() == newGame.child("name") //first element is name && ++newGame.children().begin() == newGame.children().end() //theres only one element diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index c7c5a6baa..88908c6d7 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -149,7 +149,7 @@ bool GuiGameList::input(InputConfig* config, Input input) ScraperSearchParams searchParams; searchParams.game = game; searchParams.system = mSystem; - mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), mSystem->getGameMDD(), searchParams, game->getBaseName(), + mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), game->metadata()->getMDD(), searchParams, game->getBaseName(), [&] { updateDetailData(); }, [game, root, this] { boost::filesystem::remove(game->getPath()); diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 00dfe1765..10be80824 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -99,7 +99,7 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s pugi::xml_node game = data.child("Game"); while(game && resultNum < MAX_SCRAPER_RESULTS) { - mdl.push_back(MetaDataList(params.system->getGameMDD())); + mdl.push_back(MetaDataList(GAME_METADATA)); mdl.back().set("name", game.child("GameTitle").text().get()); mdl.back().set("desc", game.child("Overview").text().get()); diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index 8f8058ac6..4f5d0a7af 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -177,7 +177,7 @@ std::shared_ptr createScraperByName(const std::string& name) void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& params, MetaDataList mdl, std::function returnFunc) { - std::vector mdd = params.system->getGameMDD(); + const std::vector& mdd = params.game->metadata()->getMDD(); for(auto it = mdd.begin(); it != mdd.end(); it++) { std::string key = it->key; diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index efa542a77..4ad80a161 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -44,7 +44,7 @@ std::vector TheArchiveScraper::parseReq(ScraperSearchParams params pugi::xml_node game = data.child("game"); while(game && resultNum < MAX_SCRAPER_RESULTS) { - mdl.push_back(MetaDataList(params.system->getGameMDD())); + mdl.push_back(MetaDataList(GAME_METADATA)); mdl.back().set("name", game.child("title").text().get()); mdl.back().set("desc", game.child("description").text().get()); From 3a3471cfe8fdf4d64f7a893db9f7a67728bbefa6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 5 Nov 2013 19:41:49 -0600 Subject: [PATCH 091/386] Combined FolderData and GameData into one class, FileData. You don't need to dynamic_cast everywhere to check things anymore. Folders can have metadata now (currently not set up). Metadata is now a public member variable instead of a function that returns a pointer to make actually using const possible. --- CMakeLists.txt | 7 +- src/FileData.cpp | 98 +++++++++++++++ src/FileData.h | 65 ++++++++-- src/FileSorts.cpp | 62 +++++++++ src/FileSorts.h | 14 +++ src/FolderData.cpp | 196 ----------------------------- src/FolderData.h | 60 --------- src/GameData.cpp | 84 ------------- src/GameData.h | 36 ------ src/ScraperCmdLine.cpp | 28 ++--- src/SystemData.cpp | 122 ++++++++++-------- src/SystemData.h | 29 ++--- src/XMLReader.cpp | 74 +++++------ src/components/GuiFastSelect.cpp | 13 +- src/components/GuiFastSelect.h | 4 +- src/components/GuiGameList.cpp | 121 ++++-------------- src/components/GuiGameList.h | 15 +-- src/components/GuiGameScraper.cpp | 6 +- src/components/GuiMetaDataEd.h | 1 - src/components/GuiScraperLog.cpp | 6 +- src/components/GuiScraperStart.cpp | 10 +- src/components/GuiScraperStart.h | 2 +- src/scrapers/GamesDBScraper.cpp | 2 +- src/scrapers/Scraper.cpp | 6 +- src/scrapers/Scraper.h | 3 +- src/scrapers/TheArchiveScraper.cpp | 2 +- 26 files changed, 416 insertions(+), 650 deletions(-) create mode 100644 src/FileData.cpp create mode 100644 src/FileSorts.cpp create mode 100644 src/FileSorts.h delete mode 100644 src/FolderData.cpp delete mode 100644 src/FolderData.h delete mode 100644 src/GameData.cpp delete mode 100644 src/GameData.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 343cc0931..31fad76de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,8 +138,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/FolderData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/GameData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.h ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.h @@ -198,8 +197,8 @@ set(ES_HEADERS ) set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/FolderData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/GameData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.cpp diff --git a/src/FileData.cpp b/src/FileData.cpp new file mode 100644 index 000000000..958ecf499 --- /dev/null +++ b/src/FileData.cpp @@ -0,0 +1,98 @@ +#include "FileData.h" +#include + +namespace fs = boost::filesystem; + +std::string getCleanFileName(const fs::path& path) +{ + return regex_replace(path.stem().generic_string(), boost::regex("\\((.*)\\)|\\[(.*)\\]"), ""); +} + + +FileData::FileData(FileType type, const fs::path& path) + : mType(type), mPath(path), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! +{ + // metadata needs at least a name field (since that's what getName() will return) + if(metadata.get("name").empty()) + metadata.set("name", getCleanFileName(mPath)); +} + +FileData::~FileData() +{ + if(mParent) + mParent->removeChild(this); +} + +const std::string& FileData::getThumbnailPath() const +{ + if(!metadata.get("thumbnail").empty()) + return metadata.get("thumbnail"); + else + return metadata.get("image"); +} + + +std::vector FileData::getFilesRecursive(unsigned int typeMask) const +{ + std::vector out; + + for(auto it = mChildren.begin(); it != mChildren.end(); it++) + { + if((*it)->getType() & typeMask) + out.push_back(*it); + + if((*it)->getChildren().size() > 0) + { + std::vector subchildren = (*it)->getFilesRecursive(typeMask); + out.insert(out.end(), subchildren.cbegin(), subchildren.cend()); + } + } + + return out; +} + +void FileData::addChild(FileData* file) +{ + assert(mType == FOLDER); + assert(file->getParent() == NULL); + + mChildren.push_back(file); + file->mParent = this; +} + +void FileData::removeChild(FileData* file) +{ + assert(mType == FOLDER); + assert(file->getParent() == this); + + for(auto it = mChildren.begin(); it != mChildren.end(); it++) + { + if(*it == file) + { + mChildren.erase(it); + return; + } + } + + // File somehow wasn't in our children. + assert(false); +} + +void FileData::sort(ComparisonFunction& comparator, bool ascending) +{ + std::sort(mChildren.begin(), mChildren.end(), comparator); + + for(auto it = mChildren.begin(); it != mChildren.end(); it++) + { + if((*it)->getChildren().size() > 0) + (*it)->sort(comparator, ascending); + } + + if(!ascending) + std::reverse(mChildren.begin(), mChildren.end()); +} + +void FileData::sort(const SortType& type) +{ + sort(*type.comparisonFunction, type.ascending); +} diff --git a/src/FileData.h b/src/FileData.h index de927a081..2ef987dc7 100644 --- a/src/FileData.h +++ b/src/FileData.h @@ -1,17 +1,62 @@ -#ifndef _FILEDATA_H_ -#define _FILEDATA_H_ +#pragma once +#include #include +#include +#include "MetaData.h" -//This is a really basic class that the GameData and FolderData subclass from. -//This lets us keep everything in one vector and not have to differentiate between files and folders when we just want to check the name, etc. +enum FileType +{ + GAME = 1, // Cannot have children. + FOLDER = 2 +}; + +// Used for loading/saving gamelist.xml. +const char* fileTypeToString(FileType type); +FileType stringToFileType(const char* str); + +std::string getCleanFileName(const boost::filesystem::path& path); + +// A tree node that holds information for a file. class FileData { public: - virtual ~FileData() { }; - virtual bool isFolder() const = 0; - virtual const std::string& getName() const = 0; - virtual const std::string& getPath() const = 0; -}; + FileData(FileType type, const boost::filesystem::path& path); + virtual ~FileData(); -#endif + inline const std::string& getName() const { return metadata.get("name"); } + inline FileType getType() const { return mType; } + inline const boost::filesystem::path& getPath() const { return mPath; } + inline FileData* getParent() const { return mParent; } + inline const std::vector& getChildren() const { return mChildren; } + + virtual const std::string& getThumbnailPath() const; + + std::vector getFilesRecursive(unsigned int typeMask) const; + + void addChild(FileData* file); // Error if mType != FOLDER + void removeChild(FileData* file); //Error if mType != FOLDER + + + typedef bool ComparisonFunction(const FileData* a, const FileData* b); + struct SortType + { + ComparisonFunction* comparisonFunction; + bool ascending; + std::string description; + + SortType(ComparisonFunction* sortFunction, bool sortAscending, const std::string & sortDescription) + : comparisonFunction(sortFunction), ascending(sortAscending), description(sortDescription) {} + }; + + void sort(ComparisonFunction& comparator, bool ascending = true); + void sort(const SortType& type); + + MetaDataList metadata; + +private: + FileType mType; + boost::filesystem::path mPath; + FileData* mParent; + std::vector mChildren; +}; diff --git a/src/FileSorts.cpp b/src/FileSorts.cpp new file mode 100644 index 000000000..5f5b02085 --- /dev/null +++ b/src/FileSorts.cpp @@ -0,0 +1,62 @@ +#include "FileSorts.h" + +namespace FileSorts +{ + const FileData::SortType typesArr[] = { + FileData::SortType(&compareFileName, true, "file name, ascending") + }; + + const std::vector SortTypes(typesArr, typesArr + sizeof(typesArr)/sizeof(typesArr[0])); + + //returns if file1 should come before file2 + bool compareFileName(const FileData* file1, const FileData* file2) + { + std::string name1 = file1->getName(); + std::string name2 = file2->getName(); + + //min of name1/name2 .length()s + unsigned int count = name1.length() > name2.length() ? name2.length() : name1.length(); + for(unsigned int i = 0; i < count; i++) + { + if(toupper(name1[i]) != toupper(name2[i])) + { + return toupper(name1[i]) < toupper(name2[i]); + } + } + + return name1.length() < name2.length(); + } + + bool compareRating(const FileData* file1, const FileData* file2) + { + //only games have rating metadata + if(file1->metadata.getType() == GAME_METADATA && file2->metadata.getType() == GAME_METADATA) + { + return file1->metadata.getFloat("rating") < file2->metadata.getFloat("rating"); + } + + return false; + } + + bool compareTimesPlayed(const FileData* file1, const FileData* file2) + { + //only games have playcount metadata + if(file1->metadata.getType() == GAME_METADATA && file2->metadata.getType() == GAME_METADATA) + { + return (file1)->metadata.getInt("playcount") < (file2)->metadata.getInt("playcount"); + } + + return false; + } + + bool compareLastPlayed(const FileData* file1, const FileData* file2) + { + //only games have lastplayed metadata + if(file1->metadata.getType() == GAME_METADATA && file2->metadata.getType() == GAME_METADATA) + { + return (file1)->metadata.getTime("lastplayed") < (file2)->metadata.getTime("lastplayed"); + } + + return false; + } +}; diff --git a/src/FileSorts.h b/src/FileSorts.h new file mode 100644 index 000000000..e9f662437 --- /dev/null +++ b/src/FileSorts.h @@ -0,0 +1,14 @@ +#pragma once + +#include +#include "FileData.h" + +namespace FileSorts +{ + bool compareFileName(const FileData* file1, const FileData* file2); + bool compareRating(const FileData* file1, const FileData* file2); + bool compareTimesPlayed(const FileData* file1, const FileData* fil2); + bool compareLastPlayed(const FileData* file1, const FileData* file2); + + extern const std::vector SortTypes; +}; diff --git a/src/FolderData.cpp b/src/FolderData.cpp deleted file mode 100644 index a94c7d47b..000000000 --- a/src/FolderData.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include "FolderData.h" -#include "SystemData.h" -#include "GameData.h" -#include -#include - - -std::map FolderData::sortStateNameMap; - -bool FolderData::isFolder() const { return true; } -const std::string & FolderData::getName() const { return mName; } -const std::string & FolderData::getPath() const { return mPath; } -unsigned int FolderData::getFileCount() { return mFileVector.size(); } - - -FolderData::FolderData(SystemData* system, std::string path, std::string name) - : mSystem(system), mPath(path), mName(name) -{ - //first created folder data initializes the list - if (sortStateNameMap.empty()) { - sortStateNameMap[compareFileName] = "file name"; - sortStateNameMap[compareRating] = "rating"; - sortStateNameMap[compareTimesPlayed] = "times played"; - sortStateNameMap[compareLastPlayed] = "last time played"; - } -} - -FolderData::~FolderData() -{ - for(unsigned int i = 0; i < mFileVector.size(); i++) - { - delete mFileVector.at(i); - } - - mFileVector.clear(); -} - -void FolderData::pushFileData(FileData* file) -{ - mFileVector.push_back(file); -} - -//sort this folder and any subfolders -void FolderData::sort(ComparisonFunction & comparisonFunction, bool ascending) -{ - std::sort(mFileVector.begin(), mFileVector.end(), comparisonFunction); - - for(unsigned int i = 0; i < mFileVector.size(); i++) - { - if(mFileVector.at(i)->isFolder()) - ((FolderData*)mFileVector.at(i))->sort(comparisonFunction, ascending); - } - - if (!ascending) { - std::reverse(mFileVector.begin(), mFileVector.end()); - } -} - -//returns if file1 should come before file2 -bool FolderData::compareFileName(const FileData* file1, const FileData* file2) -{ - std::string name1 = file1->getName(); - std::string name2 = file2->getName(); - - //min of name1/name2 .length()s - unsigned int count = name1.length() > name2.length() ? name2.length() : name1.length(); - for(unsigned int i = 0; i < count; i++) - { - if(toupper(name1[i]) != toupper(name2[i])) - { - return toupper(name1[i]) < toupper(name2[i]); - } - } - - return name1.length() < name2.length(); -} - -bool FolderData::compareRating(const FileData* file1, const FileData* file2) -{ - //we need game data. try to cast - const GameData * game1 = dynamic_cast(file1); - const GameData * game2 = dynamic_cast(file2); - if (game1 != nullptr && game2 != nullptr) { - return const_cast(game1)->metadata()->getFloat("rating") < const_cast(game2)->metadata()->getFloat("rating"); - } - return false; -} - -bool FolderData::compareTimesPlayed(const FileData* file1, const FileData* file2) -{ - //we need game data. try to cast - const GameData * game1 = dynamic_cast(file1); - const GameData * game2 = dynamic_cast(file2); - if (game1 != nullptr && game2 != nullptr) { - return const_cast(game1)->metadata()->getInt("playcount") < const_cast(game2)->metadata()->getInt("playcount"); - } - return false; -} - -bool FolderData::compareLastPlayed(const FileData* file1, const FileData* file2) -{ - //we need game data. try to cast - const GameData * game1 = dynamic_cast(file1); - const GameData * game2 = dynamic_cast(file2); - if (game1 != nullptr && game2 != nullptr) { - return const_cast(game1)->metadata()->getTime("lastplayed") < const_cast(game2)->metadata()->getTime("lastplayed"); - } - return false; -} - -std::string FolderData::getSortStateName(ComparisonFunction & comparisonFunction, bool ascending) -{ - std::string temp = sortStateNameMap[comparisonFunction]; - if (ascending) { - temp.append(" (ascending)"); - } - else { - temp.append(" (descending)"); - } - return temp; -} - -FileData* FolderData::getFile(unsigned int i) const -{ - return mFileVector.at(i); -} - -std::vector FolderData::getFiles(bool onlyFiles) const -{ - std::vector temp; - //now check if a child is a folder and get those children in turn - std::vector::const_iterator fdit = mFileVector.cbegin(); - while(fdit != mFileVector.cend()) { - //dynamically try to cast to FolderData type - FolderData * folder = dynamic_cast(*fdit); - if (folder != nullptr) { - //add this only when user wanted it - if (!onlyFiles) { - temp.push_back(*fdit); - } - } - else { - temp.push_back(*fdit); - } - ++fdit; - } - return temp; -} - -std::vector FolderData::getFilesRecursive(bool onlyFiles) const -{ - std::vector temp; - //now check if a child is a folder and get those children in turn - std::vector::const_iterator fdit = mFileVector.cbegin(); - while(fdit != mFileVector.cend()) { - //dynamically try to cast to FolderData type - FolderData * folder = dynamic_cast(*fdit); - if (folder != nullptr) { - //add this onyl when user wanted it - if (!onlyFiles) { - temp.push_back(*fdit); - } - //worked. Is actual folder data. recurse - std::vector children = folder->getFilesRecursive(onlyFiles); - //insert children into return vector - temp.insert(temp.end(), children.cbegin(), children.cend()); - } - else { - temp.push_back(*fdit); - } - ++fdit; - } - return temp; -} - -void FolderData::removeFileRecursive(FileData* f) -{ - auto iter = mFileVector.begin(); - while(iter != mFileVector.end()) - { - if(*iter == f) - { - delete *iter; - iter = mFileVector.erase(iter); - }else{ - - FolderData* folder = dynamic_cast(*iter); - if(folder) - { - folder->removeFileRecursive(f); - } - - iter++; - } - } -} diff --git a/src/FolderData.h b/src/FolderData.h deleted file mode 100644 index 2d073b074..000000000 --- a/src/FolderData.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef _FOLDER_H_ -#define _FOLDER_H_ - -#include -#include - -#include "FileData.h" - - -class SystemData; - -//This class lets us hold a vector of FileDatas within under a common name. -class FolderData : public FileData -{ -public: - typedef bool ComparisonFunction(const FileData* a, const FileData* b); - struct SortState - { - ComparisonFunction & comparisonFunction; - bool ascending; - std::string description; - - SortState(ComparisonFunction & sortFunction, bool sortAscending, const std::string & sortDescription) : comparisonFunction(sortFunction), ascending(sortAscending), description(sortDescription) {} - }; - -private: - static std::map sortStateNameMap; - -public: - FolderData(SystemData* system, std::string path, std::string name); - ~FolderData(); - - bool isFolder() const; - const std::string & getName() const; - const std::string & getPath() const; - - unsigned int getFileCount(); - FileData* getFile(unsigned int i) const; - std::vector getFiles(bool onlyFiles = false) const; - std::vector getFilesRecursive(bool onlyFiles = false) const; - - void removeFileRecursive(FileData* file); - - void pushFileData(FileData* file); - - void sort(ComparisonFunction & comparisonFunction = compareFileName, bool ascending = true); - static bool compareFileName(const FileData* file1, const FileData* file2); - static bool compareRating(const FileData* file1, const FileData* file2); - static bool compareTimesPlayed(const FileData* file1, const FileData* file2); - static bool compareLastPlayed(const FileData* file1, const FileData* file2); - static std::string getSortStateName(ComparisonFunction & comparisonFunction = compareFileName, bool ascending = true); - -private: - SystemData* mSystem; - std::string mPath; - std::string mName; - std::vector mFileVector; -}; - -#endif diff --git a/src/GameData.cpp b/src/GameData.cpp deleted file mode 100644 index d679784b1..000000000 --- a/src/GameData.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "GameData.h" -#include -#include -#include -#include -#include - -GameData::GameData(const std::string& path, const MetaDataList& metadata) - : mPath(path), mBaseName(boost::filesystem::path(path).stem().string()), mMetaData(metadata) -{ - if(mMetaData.get("name").empty()) - mMetaData.set("name", mBaseName); -} - -bool GameData::isFolder() const -{ - return false; -} - -const std::string& GameData::getName() const -{ - return mMetaData.get("name"); -} - -const std::string& GameData::getPath() const -{ - return mPath; -} - -std::string GameData::getBashPath() const -{ - //a quick and dirty way to insert a backslash before most characters that would mess up a bash path - std::string path = getPath(); - - const char* invalidChars = " '\"\\!$^&*(){}[]?;<>"; - for(unsigned int i = 0; i < path.length(); i++) - { - char c; - unsigned int charNum = 0; - do { - c = invalidChars[charNum]; - if(path[i] == c) - { - path.insert(i, "\\"); - i++; - break; - } - charNum++; - } while(c != '\0'); - } - - return path; -} - -//returns the boost::filesystem stem of our path - e.g. for "/foo/bar.rom" returns "bar" -std::string GameData::getBaseName() const -{ - return mBaseName; -} - -std::string GameData::getCleanName() const -{ - return regex_replace(mBaseName, boost::regex("\\((.*)\\)|\\[(.*)\\]"), ""); -} - -void GameData::incTimesPlayed() -{ - int timesPlayed = metadata()->getInt("playcount"); - timesPlayed++; - - std::stringstream ss; - metadata()->set("playcount", std::to_string(static_cast(timesPlayed))); -} - -void GameData::lastPlayedNow() -{ - boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); - metadata()->setTime("lastplayed", time); -} - -MetaDataList* GameData::metadata() -{ - return &mMetaData; -} diff --git a/src/GameData.h b/src/GameData.h deleted file mode 100644 index 27ce4f099..000000000 --- a/src/GameData.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _GAMEDATA_H_ -#define _GAMEDATA_H_ - -#include - -#include "FileData.h" -#include "MetaData.h" - -//This class holds information about a game: at the least, its name, system, and path. Additional information is optional and read by other classes. -class GameData : public FileData -{ -public: - GameData(const std::string& path, const MetaDataList& metadata); - - const std::string& getName() const override; - const std::string& getPath() const override; - - void incTimesPlayed(); - void lastPlayedNow(); - - std::string getBashPath() const; - std::string getBaseName() const; - std::string getCleanName() const; - - bool isFolder() const override; - - MetaDataList* metadata(); - -private: - const std::string mPath; - const std::string mBaseName; - - MetaDataList mMetaData; -}; - -#endif diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp index 53fce16c5..4fd535e78 100644 --- a/src/ScraperCmdLine.cpp +++ b/src/ScraperCmdLine.cpp @@ -141,7 +141,7 @@ int run_scraper_cmdline() std::shared_ptr scraper = Settings::getInstance()->getScraper(); for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) { - std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(true); + std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); ScraperSearchParams params; params.system = (*sysIt); @@ -149,15 +149,15 @@ int run_scraper_cmdline() for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) { params.nameOverride = ""; - params.game = (GameData*)(*gameIt); + params.game = *gameIt; //print original search term - out << params.game->getCleanName() << "...\n"; + out << getCleanFileName(params.game->getPath()) << "...\n"; //need to take into account filter_choice if(filter_choice == FILTER_MISSING_IMAGES) { - if(!params.game->metadata()->get("image").empty()) //maybe should also check if the image file exists/is a URL + if(!params.game->metadata.get("image").empty()) //maybe should also check if the image file exists/is a URL { out << " Skipping, metadata \"image\" entry is not empty.\n"; continue; @@ -212,7 +212,7 @@ int run_scraper_cmdline() if(choice >= 0 && choice < (int)mdls.size()) { - *params.game->metadata() = mdls.at(choice); + params.game->metadata = mdls.at(choice); break; }else{ out << "Invalid choice.\n"; @@ -223,7 +223,7 @@ int run_scraper_cmdline() //automatic mode //always choose the first choice out << " name -> " << mdls.at(0).get("name") << "\n"; - *params.game->metadata() = mdls.at(0); + params.game->metadata = mdls.at(0); break; } @@ -238,32 +238,32 @@ int run_scraper_cmdline() for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) { - std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(true); + std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) { - GameData* game = (GameData*)(*gameIt); - const std::vector& mdd = game->metadata()->getMDD(); + FileData* game = *gameIt; + const std::vector& mdd = game->metadata.getMDD(); for(auto i = mdd.begin(); i != mdd.end(); i++) { std::string key = i->key; - std::string url = game->metadata()->get(key); + std::string url = game->metadata.get(key); if(i->type == MD_IMAGE_PATH && HttpReq::isUrl(url)) { std::string urlShort = url.substr(0, url.length() > 35 ? 35 : url.length()); if(url.length() != urlShort.length()) urlShort += "..."; - out << " " << game->metadata()->get("name") << " [from: " << urlShort << "]...\n"; + out << " " << game->metadata.get("name") << " [from: " << urlShort << "]...\n"; ScraperSearchParams p; p.game = game; p.system = *sysIt; - game->metadata()->set(key, downloadImage(url, getSaveAsPath(p, key, url))); - if(game->metadata()->get(key).empty()) + game->metadata.set(key, downloadImage(url, getSaveAsPath(p, key, url))); + if(game->metadata.get(key).empty()) { out << " FAILED! Skipping.\n"; - game->metadata()->set(key, url); //result URL to what it was if download failed, retry some other time + game->metadata.set(key, url); //result URL to what it was if download failed, retry some other time } } } diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 84b3e7ddd..d162a4b00 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -1,5 +1,4 @@ #include "SystemData.h" -#include "GameData.h" #include "XMLReader.h" #include #include @@ -12,14 +11,12 @@ #include "InputManager.h" #include #include "Settings.h" +#include "FileSorts.h" std::vector SystemData::sSystemVector; namespace fs = boost::filesystem; -std::string SystemData::getStartPath() { return mStartPath; } -std::vector SystemData::getExtensions() { return mSearchExtensions; } - SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, const std::string& command, PlatformIds::PlatformId platformId) { @@ -38,7 +35,8 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mLaunchCommand = command; mPlatformId = platformId; - mRootFolder = new FolderData(this, mStartPath, "Search Root"); + mRootFolder = new FileData(FOLDER, mStartPath); + mRootFolder->metadata.set("name", "Search Root"); if(!Settings::getInstance()->getBool("PARSEGAMELISTONLY")) populateFolder(mRootFolder); @@ -46,15 +44,17 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con if(!Settings::getInstance()->getBool("IGNOREGAMELIST")) parseGamelist(this); - mRootFolder->sort(); + mRootFolder->sort(FileSorts::SortTypes.at(0)); } SystemData::~SystemData() { //save changed game data back to xml - if(!Settings::getInstance()->getBool("IGNOREGAMELIST")) { + if(!Settings::getInstance()->getBool("IGNOREGAMELIST")) + { updateGamelist(this); } + delete mRootFolder; } @@ -68,7 +68,33 @@ std::string strreplace(std::string& str, std::string replace, std::string with) return str; } -void SystemData::launchGame(Window* window, GameData* game) +std::string escapePath(const boost::filesystem::path& path) +{ + // a quick and dirty way to insert a backslash before most characters that would mess up a bash path; + // someone with regex knowledge should make this into a one-liner + std::string pathStr = path.generic_string(); + + const char* invalidChars = " '\"\\!$^&*(){}[]?;<>"; + for(unsigned int i = 0; i < pathStr.length(); i++) + { + char c; + unsigned int charNum = 0; + do { + c = invalidChars[charNum]; + if(pathStr[i] == c) + { + pathStr.insert(i, "\\"); + i++; + break; + } + charNum++; + } while(c != '\0'); + } + + return pathStr; +} + +void SystemData::launchGame(Window* window, FileData* game) { LOG(LogInfo) << "Attempting to launch game..."; @@ -78,9 +104,13 @@ void SystemData::launchGame(Window* window, GameData* game) std::string command = mLaunchCommand; - command = strreplace(command, "%ROM%", game->getBashPath()); - command = strreplace(command, "%BASENAME%", game->getBaseName()); - command = strreplace(command, "%ROM_RAW%", game->getPath()); + const std::string rom = escapePath(game->getPath()); + const std::string basename = game->getPath().stem().string(); + const std::string rom_raw = game->getPath().string(); + + command = strreplace(command, "%ROM%", rom); + command = strreplace(command, "%BASENAME%", basename); + command = strreplace(command, "%ROM_RAW%", rom_raw); LOG(LogInfo) << " " << command; std::cout << "==============================================\n"; @@ -97,25 +127,31 @@ void SystemData::launchGame(Window* window, GameData* game) AudioManager::getInstance()->init(); window->normalizeNextUpdate(); - //update number of times the game has been launched and the time - game->incTimesPlayed(); - game->lastPlayedNow(); + //update number of times the game has been launched + int timesPlayed = game->metadata.getInt("playcount") + 1; + game->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); + + //update last played time + boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); + game->metadata.setTime("lastplayed", time); } -void SystemData::populateFolder(FolderData* folder) +void SystemData::populateFolder(FileData* folder) { - std::string folderPath = folder->getPath(); + const fs::path& folderPath = folder->getPath(); if(!fs::is_directory(folderPath)) { LOG(LogWarning) << "Error - folder with path \"" << folderPath << "\" is not a directory!"; return; } + const std::string folderStr = folderPath.generic_string(); + //make sure that this isn't a symlink to a thing we already have if(fs::is_symlink(folderPath)) { //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse - if(folderPath.find(fs::canonical(folderPath).string()) == 0) + if(folderStr.find(fs::canonical(folderPath).generic_string()) == 0) { LOG(LogWarning) << "Skipping infinitely recursive symlink \"" << folderPath << "\""; return; @@ -142,39 +178,26 @@ void SystemData::populateFolder(FolderData* folder) isGame = false; if(std::find(mSearchExtensions.begin(), mSearchExtensions.end(), extension) != mSearchExtensions.end()) { - GameData* newGame = new GameData(filePath.generic_string(), MetaDataList(GAME_METADATA)); - folder->pushFileData(newGame); + FileData* newGame = new FileData(GAME, filePath.generic_string()); + folder->addChild(newGame); isGame = true; } //add directories that also do not match an extension as folders if(!isGame && fs::is_directory(filePath)) { - FolderData* newFolder = new FolderData(this, filePath.generic_string(), filePath.stem().string()); + FileData* newFolder = new FileData(FOLDER, filePath.generic_string()); populateFolder(newFolder); //ignore folders that do not contain games - if(newFolder->getFileCount() == 0) + if(newFolder->getChildren().size() == 0) delete newFolder; else - folder->pushFileData(newFolder); + folder->addChild(newFolder); } } } -std::string SystemData::getName() -{ - return mName; -} - -std::string SystemData::getFullName() -{ - if(mFullName.empty()) - return mName; - else - return mFullName; -} - //creates systems from information located in a config file bool SystemData::loadConfig(const std::string& path, bool writeExample) { @@ -241,7 +264,7 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) path = genericPath.generic_string(); SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformId); - if(newSys->getRootFolder()->getFileCount() == 0) + if(newSys->getRootFolder()->getChildren().size() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; delete newSys; @@ -312,22 +335,16 @@ std::string SystemData::getConfigPath() return(home + "/.emulationstation/es_systems.cfg"); } -FolderData* SystemData::getRootFolder() +std::string SystemData::getGamelistPath() const { - return mRootFolder; -} + fs::path filePath; -std::string SystemData::getGamelistPath() -{ - std::string filePath; - - filePath = mRootFolder->getPath() + "/gamelist.xml"; + filePath = mRootFolder->getPath() / "gamelist.xml"; if(fs::exists(filePath)) - return filePath; + return filePath.generic_string(); - filePath = getHomePath(); - filePath += "/.emulationstation/"+ getName() + "/gamelist.xml"; - return filePath; + filePath = getHomePath() + "/.emulationstation/"+ getName() + "/gamelist.xml"; + return filePath.generic_string(); } bool SystemData::hasGamelist() @@ -335,12 +352,7 @@ bool SystemData::hasGamelist() return (fs::exists(getGamelistPath())); } -PlatformIds::PlatformId SystemData::getPlatformId() +unsigned int SystemData::getGameCount() const { - return mPlatformId; -} - -unsigned int SystemData::getGameCount() -{ - return mRootFolder->getFilesRecursive(true).size(); + return mRootFolder->getFilesRecursive(GAME).size(); } diff --git a/src/SystemData.h b/src/SystemData.h index 6040d2e61..c0f2b0e92 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -3,13 +3,11 @@ #include #include -#include "FolderData.h" +#include "FileData.h" #include "Window.h" #include "MetaData.h" #include "PlatformId.h" -class GameData; - class SystemData { public: @@ -17,20 +15,19 @@ public: const std::string& command, PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN); ~SystemData(); - FolderData* getRootFolder(); + inline FileData* getRootFolder() const { return mRootFolder; }; + inline const std::string& getName() const { return mName; } + inline const std::string& getFullName() const { return mFullName; } + inline const std::string& getStartPath() const { return mStartPath; } + inline const std::vector& getExtensions() const { return mSearchExtensions; } + inline PlatformIds::PlatformId getPlatformId() const { return mPlatformId; } - std::string getName(); - std::string getFullName(); - std::string getStartPath(); - std::vector getExtensions(); - PlatformIds::PlatformId getPlatformId(); - - std::string getGamelistPath(); + std::string getGamelistPath() const; bool hasGamelist(); - unsigned int getGameCount(); + unsigned int getGameCount() const; - void launchGame(Window* window, GameData* game); + void launchGame(Window* window, FileData* game); static void deleteSystems(); static bool loadConfig(const std::string& path, bool writeExampleIfNonexistant = true); //Load the system config file at getConfigPath(). Returns true if no errors were encountered. An example can be written if the file doesn't exist. @@ -38,6 +35,7 @@ public: static std::string getConfigPath(); static std::vector sSystemVector; + private: std::string mName; std::string mFullName; @@ -46,10 +44,9 @@ private: std::string mLaunchCommand; PlatformIds::PlatformId mPlatformId; - void populateFolder(FolderData* folder); + void populateFolder(FileData* folder); - FolderData* mRootFolder; + FileData* mRootFolder; }; #endif - diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 35f8fdcda..fbdf19bd6 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -1,6 +1,5 @@ #include "XMLReader.h" #include "SystemData.h" -#include "GameData.h" #include "pugiXML/pugixml.hpp" #include #include "Log.h" @@ -8,27 +7,25 @@ //this is obviously an incredibly inefficient way to go about searching //but I don't think it'll matter too much with the size of most collections -GameData* searchFolderByPath(FolderData* folder, std::string const& path) +FileData* searchFolderByPath(FileData* folder, std::string const& path) { - for(unsigned int i = 0; i < folder->getFileCount(); i++) + for(auto it = folder->getChildren().begin(); it != folder->getChildren().end(); it++) { - FileData* file = folder->getFile(i); - - if(file->isFolder()) + if((*it)->getType() == FOLDER) { - GameData* result = searchFolderByPath((FolderData*)file, path); + FileData* result = searchFolderByPath(*it, path); if(result) - return (GameData*)result; + return result; }else{ - if(file->getPath() == path) - return (GameData*)file; + if((*it)->getPath().generic_string() == path) + return *it; } } return NULL; } -GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) +FileData* createGameFromPath(std::string gameAbsPath, SystemData* system) { std::string gamePath = gameAbsPath; std::string sysPath = system->getStartPath(); @@ -46,11 +43,10 @@ GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) //make our way through the directory tree finding each folder in our path or creating it if it doesn't exist - FolderData* folder = system->getRootFolder(); + FileData* folder = system->getRootFolder(); size_t separator = 0; size_t nextSeparator = 0; - unsigned int loops = 0; while(nextSeparator != std::string::npos) { //determine which chunk of the path we're testing right now @@ -63,12 +59,11 @@ GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) //see if the folder already exists bool foundFolder = false; - for(unsigned int i = 0; i < folder->getFileCount(); i++) + for(auto it = folder->getChildren().begin(); it != folder->getChildren().end(); it++) { - FileData* checkFolder = folder->getFile(i); - if(checkFolder->isFolder() && checkFolder->getName() == checkName) + if((*it)->getType() == FOLDER && (*it)->getName() == checkName) { - folder = (FolderData*)checkFolder; + folder = *it; foundFolder = true; break; } @@ -77,22 +72,14 @@ GameData* createGameFromPath(std::string gameAbsPath, SystemData* system) //the folder didn't already exist, so create it if(!foundFolder) { - FolderData* newFolder = new FolderData(system, folder->getPath() + "/" + checkName, checkName); - folder->pushFileData(newFolder); + FileData* newFolder = new FileData(FOLDER, folder->getPath() / checkName); + folder->addChild(newFolder); folder = newFolder; } - - //if for some reason this function is broken, break out of this while instead of freezing - if(loops > gamePath.length() * 2) - { - LOG(LogError) << "createGameFromPath breaking out of loop for path \"" << gamePath << "\" to prevent infinite loop (please report this)"; - break; - } - loops++; } - GameData* game = new GameData(gameAbsPath, MetaDataList(GAME_METADATA)); - folder->pushFileData(game); + FileData* game = new FileData(GAME, gameAbsPath); + folder->addChild(game); return game; } @@ -150,40 +137,41 @@ void parseGamelist(SystemData* system) if(boost::filesystem::exists(path)) { - GameData* game = searchFolderByPath(system->getRootFolder(), path); + FileData* game = searchFolderByPath(system->getRootFolder(), path); if(game == NULL) game = createGameFromPath(path, system); //load the metadata - *(game->metadata()) = MetaDataList::createFromXML(GAME_METADATA, gameNode); + std::string defaultName = game->metadata.get("name"); + game->metadata = MetaDataList::createFromXML(GAME_METADATA, gameNode); //make sure name gets set if one didn't exist - if(game->metadata()->get("name").empty()) - game->metadata()->set("name", game->getBaseName()); + if(game->metadata.get("name").empty()) + game->metadata.set("name", defaultName); }else{ LOG(LogWarning) << "Game at \"" << path << "\" does not exist!"; } } } -void addGameDataNode(pugi::xml_node& parent, const GameData* game, SystemData* system) +void addGameDataNode(pugi::xml_node& parent, const FileData* game, SystemData* system) { //create game and add to parent node pugi::xml_node newGame = parent.append_child("game"); //write metadata - const_cast(game)->metadata()->appendToXML(newGame, true); + game->metadata.appendToXML(newGame, true); if(newGame.children().begin() == newGame.child("name") //first element is name && ++newGame.children().begin() == newGame.children().end() //theres only one element - && newGame.child("name").text().get() == game->getBaseName()) //the name is the default + && newGame.child("name").text().get() == getCleanFileName(game->getPath())) //the name is the default { //if the only info is the default name, don't bother with this node parent.remove_child(newGame); }else{ //there's something useful in there so we'll keep the node, add the path - newGame.prepend_child("path").text().set(game->getPath().c_str()); + newGame.prepend_child("path").text().set(game->getPath().generic_string().c_str()); } } @@ -230,18 +218,16 @@ void updateGamelist(SystemData* system) } //now we have all the information from the XML. now iterate through all our games and add information from there - FolderData * rootFolder = system->getRootFolder(); + FileData* rootFolder = system->getRootFolder(); if (rootFolder != nullptr) { //get only files, no folders - std::vector files = rootFolder->getFilesRecursive(true); + std::vector files = rootFolder->getFilesRecursive(GAME); //iterate through all files, checking if they're already in the XML std::vector::const_iterator fit = files.cbegin(); while(fit != files.cend()) { - //try to cast to gamedata - const GameData * game = dynamic_cast(*fit); - if (game != nullptr) + if((*fit)->getType() == GAME) { //worked. check if this games' path can be found somewhere in the XML for(pugi::xml_node gameNode = root.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) @@ -256,7 +242,7 @@ void updateGamelist(SystemData* system) //check paths. use the same directory separators boost::filesystem::path nodePath(pathNode.text().get()); - boost::filesystem::path gamePath(game->getPath()); + boost::filesystem::path gamePath((*fit)->getPath()); if (nodePath.generic_string() == gamePath.generic_string()) { //found the game. remove it. it will be added again later with updated values @@ -268,7 +254,7 @@ void updateGamelist(SystemData* system) //either the game content was removed, because it needs to be updated, //or didn't exist in the first place, so just add it - addGameDataNode(root, game, system); + addGameDataNode(root, *fit, system); } ++fit; } diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index 5adaec2b9..3a59398c5 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -2,6 +2,7 @@ #include "../Renderer.h" #include #include "GuiGameList.h" +#include "../FileSorts.h" #define DEFAULT_FS_IMAGE ":/frame.png" @@ -9,6 +10,8 @@ const std::string GuiFastSelect::LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const int GuiFastSelect::SCROLLSPEED = 100; const int GuiFastSelect::SCROLLDELAY = 507; +int GuiFastSelect::sortTypeId = 0; + GuiFastSelect::GuiFastSelect(Window* window, GuiGameList* parent, TextListComponent* list, char startLetter, ThemeComponent * theme) : GuiComponent(window), mParent(parent), mList(list), mTheme(theme), mBox(mWindow, "") { @@ -60,7 +63,7 @@ void GuiFastSelect::render(const Eigen::Affine3f& parentTrans) letterFont->drawCenteredText(LETTERS.substr(mLetterID, 1), 0, sh * 0.5f - (letterFont->getHeight() * 0.5f), mTextColor); subtextFont->drawCenteredText("Sort order:", 0, sh * 0.6f - (subtextFont->getHeight() * 0.5f), mTextColor); - std::string sortString = "<- " + mParent->getSortState().description + " ->"; + std::string sortString = "<- " + FileSorts::SortTypes.at(sortTypeId).description + " ->"; subtextFont->drawCenteredText(sortString, 0, sh * 0.6f + (subtextFont->getHeight() * 0.5f), mTextColor); } @@ -82,13 +85,16 @@ bool GuiFastSelect::input(InputConfig* config, Input input) if(config->isMappedTo("left", input) && input.value != 0) { - mParent->setPreviousSortIndex(); + sortTypeId--; + if(sortTypeId < 0) + sortTypeId = FileSorts::SortTypes.size() - 1; + mScrollSound->play(); return true; } else if(config->isMappedTo("right", input) && input.value != 0) { - mParent->setNextSortIndex(); + sortTypeId = (sortTypeId + 1) % FileSorts::SortTypes.size(); mScrollSound->play(); return true; } @@ -104,6 +110,7 @@ bool GuiFastSelect::input(InputConfig* config, Input input) if(config->isMappedTo("select", input) && input.value == 0) { setListPos(); + mParent->sort(FileSorts::SortTypes.at(sortTypeId)); delete this; return true; } diff --git a/src/components/GuiFastSelect.h b/src/components/GuiFastSelect.h index b2ee4befc..02cec1c03 100644 --- a/src/components/GuiFastSelect.h +++ b/src/components/GuiFastSelect.h @@ -3,7 +3,6 @@ #include "../GuiComponent.h" #include "../SystemData.h" -#include "../FolderData.h" #include "../Sound.h" #include "ThemeComponent.h" #include "TextListComponent.h" @@ -11,6 +10,7 @@ class GuiGameList; + class GuiFastSelect : public GuiComponent { public: @@ -26,6 +26,8 @@ private: static const int SCROLLSPEED; static const int SCROLLDELAY; + static int sortTypeId; + void setListPos(); void scroll(); void setLetterID(int id); diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp index 88908c6d7..59e21c545 100644 --- a/src/components/GuiGameList.cpp +++ b/src/components/GuiGameList.cpp @@ -10,8 +10,6 @@ #include "GuiMetaDataEd.h" #include "GuiScraperStart.h" -std::vector GuiGameList::sortStates; - Eigen::Vector3f GuiGameList::getImagePos() { return Eigen::Vector3f(Renderer::getScreenWidth() * mTheme->getFloat("gameImageOffsetX"), Renderer::getScreenHeight() * mTheme->getFloat("gameImageOffsetY"), 0.0f); @@ -23,16 +21,12 @@ bool GuiGameList::isDetailed() const return false; //return true if any game has an image specified - for(unsigned int i = 0; i < mFolder->getFileCount(); i++) + for(auto it = mFolder->getChildren().begin(); it != mFolder->getChildren().end(); it++) { - if(!mFolder->getFile(i)->isFolder()) - { - GameData* game = (GameData*)(mFolder->getFile(i)); - if(!game->metadata()->get("image").empty()) - return true; - } + if(!(*it)->getThumbnailPath().empty()) + return true; } - + return false; } @@ -47,22 +41,9 @@ GuiGameList::GuiGameList(Window* window) : GuiComponent(window), mDescContainer(window), mTransitionImage(window, 0.0f, 0.0f, "", (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), true), mHeaderText(mWindow), - sortStateIndex(Settings::getInstance()->getInt("GameListSortIndex")), mLockInput(false), mEffectFunc(NULL), mEffectTime(0), mGameLaunchEffectLength(700) { - //first object initializes the vector - if (sortStates.empty()) { - sortStates.push_back(FolderData::SortState(FolderData::compareFileName, true, "file name, ascending")); - sortStates.push_back(FolderData::SortState(FolderData::compareFileName, false, "file name, descending")); - sortStates.push_back(FolderData::SortState(FolderData::compareRating, true, "rating, ascending")); - sortStates.push_back(FolderData::SortState(FolderData::compareRating, false, "rating, descending")); - sortStates.push_back(FolderData::SortState(FolderData::compareTimesPlayed, true, "played least often")); - sortStates.push_back(FolderData::SortState(FolderData::compareTimesPlayed, false, "played most often")); - sortStates.push_back(FolderData::SortState(FolderData::compareLastPlayed, true, "played least recently")); - sortStates.push_back(FolderData::SortState(FolderData::compareLastPlayed, false, "played most recently")); - } - mImageAnimation.addChild(&mScreenshot); mDescContainer.addChild(&mReleaseDateLabel); mDescContainer.addChild(&mReleaseDate); @@ -142,18 +123,18 @@ bool GuiGameList::input(InputConfig* config, Input input) if(input.id == SDLK_F3) { - GameData* game = dynamic_cast(mList.getSelectedObject()); - if(game) + FileData* game = mList.getSelectedObject(); + if(game->getType() == GAME) { - FolderData* root = mSystem->getRootFolder(); + FileData* root = mSystem->getRootFolder(); ScraperSearchParams searchParams; searchParams.game = game; searchParams.system = mSystem; - mWindow->pushGui(new GuiMetaDataEd(mWindow, game->metadata(), game->metadata()->getMDD(), searchParams, game->getBaseName(), + mWindow->pushGui(new GuiMetaDataEd(mWindow, &game->metadata, game->metadata.getMDD(), searchParams, game->getPath().stem().string(), [&] { updateDetailData(); }, [game, root, this] { boost::filesystem::remove(game->getPath()); - root->removeFileRecursive(game); + root->removeChild(game); updateList(); })); } @@ -166,16 +147,16 @@ bool GuiGameList::input(InputConfig* config, Input input) return true; } - if(config->isMappedTo("a", input) && mFolder->getFileCount() > 0 && input.value != 0) + if(config->isMappedTo("a", input) && input.value != 0) { //play select sound mTheme->getSound("menuSelect")->play(); FileData* file = mList.getSelectedObject(); - if(file->isFolder()) //if you selected a folder, add this directory to the stack, and use the selected one + if(file->getType() == FOLDER) //if you selected a folder, add this directory to the stack, and use the selected one { mFolderStack.push(mFolder); - mFolder = (FolderData*)file; + mFolder = file; updateList(); updateDetailData(); return true; @@ -225,16 +206,6 @@ bool GuiGameList::input(InputConfig* config, Input input) } } - //change sort order - if(config->isMappedTo("sortordernext", input) && input.value != 0) { - setNextSortIndex(); - //std::cout << "Sort order is " << FolderData::getSortStateName(sortStates.at(sortStateIndex).comparisonFunction, sortStates.at(sortStateIndex).ascending) << std::endl; - } - else if(config->isMappedTo("sortorderprevious", input) && input.value != 0) { - setPreviousSortIndex(); - //std::cout << "Sort order is " << FolderData::getSortStateName(sortStates.at(sortStateIndex).comparisonFunction, sortStates.at(sortStateIndex).ascending) << std::endl; - } - //open the "start menu" if(config->isMappedTo("menu", input) && input.value != 0) { @@ -264,48 +235,10 @@ bool GuiGameList::input(InputConfig* config, Input input) return false; } -const FolderData::SortState & GuiGameList::getSortState() const -{ - return sortStates.at(sortStateIndex); -} - -void GuiGameList::setSortIndex(size_t index) -{ - //make the index valid - if (index >= sortStates.size()) { - index = 0; - } - if (index != sortStateIndex) { - //get sort state from vector and sort list - sortStateIndex = index; - sort(sortStates.at(sortStateIndex).comparisonFunction, sortStates.at(sortStateIndex).ascending); - } - //save new index to settings - Settings::getInstance()->setInt("GameListSortIndex", sortStateIndex); -} - -void GuiGameList::setNextSortIndex() -{ - //make the index wrap around - if ((sortStateIndex - 1) >= sortStates.size()) { - setSortIndex(0); - } - setSortIndex(sortStateIndex + 1); -} - -void GuiGameList::setPreviousSortIndex() -{ - //make the index wrap around - if (((int)sortStateIndex - 1) < 0) { - setSortIndex(sortStates.size() - 1); - } - setSortIndex(sortStateIndex - 1); -} - -void GuiGameList::sort(FolderData::ComparisonFunction & comparisonFunction, bool ascending) +void GuiGameList::sort(const FileData::SortType& type) { //resort list and update it - mFolder->sort(comparisonFunction, ascending); + mFolder->sort(type); updateList(); updateDetailData(); } @@ -314,14 +247,12 @@ void GuiGameList::updateList() { mList.clear(); - for(unsigned int i = 0; i < mFolder->getFileCount(); i++) + for(auto it = mFolder->getChildren().begin(); it != mFolder->getChildren().end(); it++) { - FileData* file = mFolder->getFile(i); - - if(file->isFolder()) - mList.addObject(file->getName(), file, mTheme->getColor("secondary")); + if((*it)->getType() == FOLDER) + mList.addObject((*it)->getName(), *it, mTheme->getColor("secondary")); else - mList.addObject(file->getName(), file, mTheme->getColor("primary")); + mList.addObject((*it)->getName(), *it, mTheme->getColor("primary")); } } @@ -391,17 +322,17 @@ void GuiGameList::updateTheme() void GuiGameList::updateDetailData() { - if(!isDetailed() || !mList.getSelectedObject() || mList.getSelectedObject()->isFolder()) + if(!isDetailed() || !mList.getSelectedObject() || mList.getSelectedObject()->getType() == FOLDER) { hideDetailData(); }else{ if(mDescContainer.getParent() != this) addChild(&mDescContainer); - GameData* game = (GameData*)mList.getSelectedObject(); + FileData* game = mList.getSelectedObject(); //set image to either "not found" image or metadata image - if(!boost::filesystem::exists(game->metadata()->get("image"))) + if(!boost::filesystem::exists(game->metadata.get("image"))) { //image doesn't exist if(mTheme->getString("imageNotFoundPath").empty()) @@ -413,7 +344,7 @@ void GuiGameList::updateDetailData() mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); } }else{ - mScreenshot.setImage(game->metadata()->get("image")); + mScreenshot.setImage(game->metadata.get("image")); } Eigen::Vector3f imgOffset = Eigen::Vector3f(Renderer::getScreenWidth() * 0.10f, 0, 0); @@ -434,14 +365,14 @@ void GuiGameList::updateDetailData() mReleaseDateLabel.setPosition(0, 0); mReleaseDateLabel.setText("Released: "); mReleaseDate.setPosition(mReleaseDateLabel.getPosition().x() + mReleaseDateLabel.getSize().x(), mReleaseDateLabel.getPosition().y()); - mReleaseDate.setValue(game->metadata()->get("releasedate")); + mReleaseDate.setValue(game->metadata.get("releasedate")); mRating.setPosition(colwidth - mRating.getSize().x() - 12, 0); - mRating.setValue(game->metadata()->get("rating")); + mRating.setValue(game->metadata.get("rating")); mDescription.setPosition(0, mRating.getSize().y()); mDescription.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), 0)); - mDescription.setText(game->metadata()->get("desc")); + mDescription.setText(game->metadata.get("desc")); } } @@ -557,7 +488,7 @@ void GuiGameList::updateGameLaunchEffect(int t) { //effect done mTransitionImage.setImage(""); //fixes "tried to bind uninitialized texture!" since copyScreen()'d textures don't reinit - mSystem->launchGame(mWindow, (GameData*)mList.getSelectedObject()); + mSystem->launchGame(mWindow, mList.getSelectedObject()); mEffectFunc = &GuiGameList::updateGameReturnEffect; mEffectTime = 0; mGameLaunchEffectLength = 700; diff --git a/src/components/GuiGameList.h b/src/components/GuiGameList.h index a080d55e1..7d29923b3 100644 --- a/src/components/GuiGameList.h +++ b/src/components/GuiGameList.h @@ -10,8 +10,6 @@ #include #include #include "../SystemData.h" -#include "../GameData.h" -#include "../FolderData.h" #include "ScrollableContainer.h" #include "RatingComponent.h" #include "DateTimeComponent.h" @@ -20,9 +18,6 @@ //It has a TextListComponent child that handles the game list, a ThemeComponent that handles the theming system, and an ImageComponent for game images. class GuiGameList : public GuiComponent { - static std::vector sortStates; - size_t sortStateIndex; - public: GuiGameList(Window* window); virtual ~GuiGameList(); @@ -35,11 +30,7 @@ public: void updateDetailData(); - const FolderData::SortState & getSortState() const; - void setSortIndex(size_t index); - void setNextSortIndex(); - void setPreviousSortIndex(); - void sort(FolderData::ComparisonFunction & comparisonFunction = FolderData::compareFileName, bool ascending = true); + void sort(const FileData::SortType& type); static GuiGameList* create(Window* window); @@ -55,8 +46,8 @@ private: std::string getThemeFile(); SystemData* mSystem; - FolderData* mFolder; - std::stack mFolderStack; + FileData* mFolder; + std::stack mFolderStack; int mSystemId; TextListComponent mList; diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index 973110d9b..fbae61f38 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -7,7 +7,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc) : GuiComponent(window), mList(window, Eigen::Vector2i(2, 7 + MAX_SCRAPER_RESULTS)), mBox(window, ":/frame.png"), - mHeader(window, params.game->getBaseName(), Font::get(FONT_SIZE_MEDIUM)), + mHeader(window, getCleanFileName(params.game->getPath()), Font::get(FONT_SIZE_MEDIUM)), mResultName(window, "", Font::get(FONT_SIZE_MEDIUM)), mResultInfo(window), mResultDesc(window, "", Font::get(FONT_SIZE_SMALL)), @@ -56,7 +56,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mResultName.setColor(0x3B56CCFF); mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentListComponent::AlignLeft); - mResultDesc.setText(params.game->metadata()->get("desc")); + mResultDesc.setText(params.game->metadata.get("desc")); mResultDesc.setSize(colWidth, 0); mResultInfo.addChild(&mResultDesc); mResultInfo.setSize(mResultDesc.getSize().x(), mResultDesc.getFont()->getHeight() * 3.0f); @@ -69,7 +69,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: //y = 3 is a spacer row mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentListComponent::AlignLeft); - mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : params.game->getCleanName()); + mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : getCleanFileName(params.game->getPath())); mSearchText.setSize(colWidth * 2 - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentListComponent::AlignRight); diff --git a/src/components/GuiMetaDataEd.h b/src/components/GuiMetaDataEd.h index 1c33394f5..396d2d95c 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/components/GuiMetaDataEd.h @@ -4,7 +4,6 @@ #include "ComponentListComponent.h" #include "../MetaData.h" #include "TextComponent.h" -#include "../GameData.h" #include "NinePatchComponent.h" #include "ButtonComponent.h" #include diff --git a/src/components/GuiScraperLog.cpp b/src/components/GuiScraperLog.cpp index 66c5b4dbf..ce1b840d5 100644 --- a/src/components/GuiScraperLog.cpp +++ b/src/components/GuiScraperLog.cpp @@ -52,7 +52,7 @@ void GuiScraperLog::next() ScraperSearchParams search = mSearches.front(); mSearches.pop(); - writeLine(search.game->getCleanName(), 0x0000FFFF); + writeLine(getCleanFileName(search.game->getPath()), 0x0000FFFF); if(mManualMode) { @@ -87,7 +87,7 @@ void GuiScraperLog::resultFetched(ScraperSearchParams params, MetaDataList mdl) void GuiScraperLog::resultResolved(ScraperSearchParams params, MetaDataList mdl) { //apply new metadata - *params.game->metadata() = mdl; + params.game->metadata = mdl; writeLine(" Success!", 0x00FF00FF); @@ -106,7 +106,7 @@ void GuiScraperLog::resultEmpty(ScraperSearchParams search) else writeLine(" NO RESULTS, skipping", 0xFF0000FF); - LOG(LogInfo) << "Scraper skipping [" << search.game->getCleanName() << "]"; + LOG(LogInfo) << "Scraper skipping [" << getCleanFileName(search.game->getPath()) << "]"; mSkippedCount++; diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index dfbc1ef4d..6cf43762b 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -24,9 +24,9 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), //add filters (with first one selected) mFiltersOpt.addEntry(mFiltersOpt.makeEntry("All Games", - [](SystemData*, GameData*) -> bool { return true; }, true)); + [](SystemData*, FileData*) -> bool { return true; }, true)); mFiltersOpt.addEntry(mFiltersOpt.makeEntry("Missing Image", - [](SystemData*, GameData* g) -> bool { return g->metadata()->get("image").empty(); })); + [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); })); mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentListComponent::AlignRight); mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentListComponent::AlignLeft); @@ -85,13 +85,13 @@ std::queue GuiScraperStart::getSearches(std::vector queue; for(auto sys = systems.begin(); sys != systems.end(); sys++) { - std::vector games = (*sys)->getRootFolder()->getFilesRecursive(true); + std::vector games = (*sys)->getRootFolder()->getFilesRecursive(GAME); for(auto game = games.begin(); game != games.end(); game++) { - if(selector((*sys), (GameData*)(*game))) + if(selector((*sys), (*game))) { ScraperSearchParams search; - search.game = (GameData*)(*game); + search.game = *game; search.system = *sys; queue.push(search); diff --git a/src/components/GuiScraperStart.h b/src/components/GuiScraperStart.h index 02514cb3b..117433f33 100644 --- a/src/components/GuiScraperStart.h +++ b/src/components/GuiScraperStart.h @@ -10,7 +10,7 @@ #include "../scrapers/Scraper.h" #include -typedef std::function GameFilterFunc; +typedef std::function GameFilterFunc; //The starting point for a multi-game scrape. //Allows the user to set various parameters (to set filters, to set which systems to scrape, to enable manual mode). diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 10be80824..16d40a571 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -60,7 +60,7 @@ std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) std::string cleanName = params.nameOverride; if(cleanName.empty()) - cleanName = params.game->getCleanName(); + cleanName = getCleanFileName(params.game->getPath()); path += "name=" + HttpReq::urlEncode(cleanName); diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index 4f5d0a7af..ddfe6350e 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -143,7 +143,7 @@ std::string downloadImage(const std::string& url, const std::string& saveAs) std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url) { const std::string subdirectory = params.system->getName(); - const std::string name = params.game->getCleanName() + "-" + suffix; + const std::string name = getCleanFileName(params.game->getPath()) + "-" + suffix; std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; @@ -177,7 +177,7 @@ std::shared_ptr createScraperByName(const std::string& name) void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& params, MetaDataList mdl, std::function returnFunc) { - const std::vector& mdd = params.game->metadata()->getMDD(); + const std::vector& mdd = params.game->metadata.getMDD(); for(auto it = mdd.begin(); it != mdd.end(); it++) { std::string key = it->key; @@ -190,7 +190,7 @@ void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& param if(savedAs.empty()) { //error - LOG(LogError) << "Could not resolve image for [" << params.game->getCleanName() << "]! Skipping."; + LOG(LogError) << "Could not resolve image for [" << getCleanFileName(params.game->getPath()) << "]! Skipping."; } mdl.set(key, savedAs); diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 854aa3a11..df9b8a42d 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -2,7 +2,6 @@ #include "../MetaData.h" #include "../SystemData.h" -#include "../GameData.h" #include "../HttpReq.h" #include #include @@ -12,7 +11,7 @@ class Window; struct ScraperSearchParams { SystemData* system; - GameData* game; + FileData* game; std::string nameOverride; }; diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 4ad80a161..2429bf448 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -12,7 +12,7 @@ std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams para std::string cleanName = params.nameOverride; if(cleanName.empty()) - cleanName = params.game->getCleanName(); + cleanName = getCleanFileName(params.game->getPath()); path += HttpReq::urlEncode(cleanName); //platform TODO, should use some params.system get method From 8bfde9696698233fa9f01cc297dce491123bea60 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 5 Nov 2013 20:31:52 -0600 Subject: [PATCH 092/386] Added missing sorts. --- src/FileSorts.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/FileSorts.cpp b/src/FileSorts.cpp index 5f5b02085..b985c0ae6 100644 --- a/src/FileSorts.cpp +++ b/src/FileSorts.cpp @@ -3,7 +3,17 @@ namespace FileSorts { const FileData::SortType typesArr[] = { - FileData::SortType(&compareFileName, true, "file name, ascending") + FileData::SortType(&compareFileName, true, "filename, ascending"), + FileData::SortType(&compareFileName, false, "filename, descending"), + + FileData::SortType(&compareRating, true, "rating, ascending"), + FileData::SortType(&compareRating, false, "rating, descending"), + + FileData::SortType(&compareTimesPlayed, true, "times played, ascending"), + FileData::SortType(&compareTimesPlayed, false, "times played, descending"), + + FileData::SortType(&compareLastPlayed, true, "last played, ascending"), + FileData::SortType(&compareLastPlayed, false, "last played, descending") }; const std::vector SortTypes(typesArr, typesArr + sizeof(typesArr)/sizeof(typesArr[0])); From a7359a2d08a4efd086344f722aa70cce2c1b5828 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 12 Nov 2013 17:28:15 -0600 Subject: [PATCH 093/386] Themes mostly stable, documentation updated --- CMakeLists.txt | 30 +- DEVNOTES.md | 35 ++ THEMES.md | 219 ++++------- src/FileData.cpp | 7 +- src/FileData.h | 13 +- src/GuiComponent.cpp | 3 + src/SystemData.cpp | 25 +- src/SystemData.h | 6 +- src/ThemeData.cpp | 207 +++++++++++ src/ThemeData.h | 78 ++++ src/Window.cpp | 19 +- src/Window.h | 8 +- src/XMLReader.cpp | 4 +- src/components/AnimationComponent.cpp | 100 ----- src/components/AnimationComponent.h | 39 -- src/components/GuiFastSelect.cpp | 185 ---------- src/components/GuiFastSelect.h | 50 --- src/components/GuiGameList.cpp | 505 -------------------------- src/components/GuiGameList.h | 81 ----- src/components/GuiInputConfig.cpp | 4 +- src/components/GuiMenu.cpp | 102 ------ src/components/GuiMenu.h | 27 -- src/components/ImageComponent.cpp | 16 +- src/components/ImageComponent.h | 3 +- src/components/TextListComponent.h | 327 +++++++---------- src/components/ThemeComponent.cpp | 393 -------------------- src/components/ThemeComponent.h | 57 --- src/main.cpp | 22 +- src/resources/Font.cpp | 8 +- src/views/BasicGameListView.cpp | 174 +++++++++ src/views/BasicGameListView.h | 34 ++ src/views/DetailedGameListView.cpp | 64 ++++ src/views/DetailedGameListView.h | 25 ++ src/views/GameListView.cpp | 28 ++ src/views/GameListView.h | 36 ++ src/views/ViewController.cpp | 168 +++++++++ src/views/ViewController.h | 61 ++++ 37 files changed, 1228 insertions(+), 1935 deletions(-) create mode 100644 DEVNOTES.md create mode 100644 src/ThemeData.cpp create mode 100644 src/ThemeData.h delete mode 100644 src/components/AnimationComponent.cpp delete mode 100644 src/components/AnimationComponent.h delete mode 100644 src/components/GuiFastSelect.cpp delete mode 100644 src/components/GuiFastSelect.h delete mode 100644 src/components/GuiGameList.cpp delete mode 100644 src/components/GuiGameList.h delete mode 100644 src/components/GuiMenu.cpp delete mode 100644 src/components/GuiMenu.h delete mode 100644 src/components/ThemeComponent.cpp delete mode 100644 src/components/ThemeComponent.h create mode 100644 src/views/BasicGameListView.cpp create mode 100644 src/views/BasicGameListView.h create mode 100644 src/views/DetailedGameListView.cpp create mode 100644 src/views/DetailedGameListView.h create mode 100644 src/views/GameListView.cpp create mode 100644 src/views/GameListView.h create mode 100644 src/views/ViewController.cpp create mode 100644 src/views/ViewController.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 31fad76de..d2f7ce5c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,10 +154,11 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimationComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h @@ -172,24 +173,28 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ThemeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp + + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/BasicGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h @@ -215,10 +220,11 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimationComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp @@ -231,27 +237,31 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ThemeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/BasicGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/ResourceUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_16_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp diff --git a/DEVNOTES.md b/DEVNOTES.md new file mode 100644 index 000000000..7ec034477 --- /dev/null +++ b/DEVNOTES.md @@ -0,0 +1,35 @@ +Also known as "Really Bad Technical Documentation" + +These are mostly notes I create as I go along, marking potential gotchas for people who might try to extend my code. +Some day I'll try and add an overview of the code structure, what each class does, etc. + +Development Environment +======================= + +I personally launch ES in windowed mode with a smaller resolution than my monitor and with debug text enabled. + +`emulationstation --windowed --debug -w 1280 -h 720` + + +Creating a new GuiComponent +=========================== + +You probably want to override: + + `bool input(InputConfig* config, Input input);` + Check if some input is mapped to some action with `config->isMappedTo("a", input);`. + Check if an input is "pressed" with `input.value != 0` (input.value *can* be negative in the case of axes). + + `void update(int deltaTime);` + `deltaTime` is in milliseconds. + + `void render(const Eigen::Affine3f& parentTrans);` + You probably want to do `Eigen::Affine3f trans = parentTrans * getTransform();` to get your final "modelview" matrix. + Apply the modelview matrix with `Renderer::setMatrix(const Eigen::Affine3f&)`. + Render any children the component may have with `renderChildren(parentTrans);`. + + +Creating a new GameListView Class +================================= + +1. Don't allow the user to navigate to the root node's parent. If you use a stack of some sort to keep track of past cursor states this will be a natural side effect. diff --git a/THEMES.md b/THEMES.md index c908228c0..0adbf7858 100644 --- a/THEMES.md +++ b/THEMES.md @@ -1,176 +1,114 @@ Themes ====== -EmulationStation allows each system to have its own "theme." A theme is a collection of display settings and images defined in an XML document. +EmulationStation allows each system to have its own "theme." A theme is a collection of resources defined in an XML document. -ES will check 3 places for a theme, in the following order: - - a theme.xml file in the root of a system's %PATH% directory. - - $HOME/.emulationstation/%NAME%/theme.xml - - $HOME/.emulationstation/es_theme.xml - -Almost all positions, dimensions, origins, etc. work in percentages - that is, they are a decimal between 0 and 1, representing the percentage of the screen on that axis to use. This ensures that themes look similar at every resolution. - -Colors are hex values, either 6 or 8 characters, defined as RRGGBB or RRGGBBAA. If alpha is not included, a default value of FF will be assumed (not transparent). +Themes are loaded like this: +1. Initialize to default values. +2. If `$HOME/.emulationstation/es_theme_default.xml` exists, load it. +3a. If there is a `theme.xml` present in the root of a system's `path` directory, load it. +3b. IF NOT, If `$HOME/.emulationstation/%SYSTEMNAME%/theme.xml` exists, load it. Example ======= -Here's a theme that defines some colors, displays a background, and displays a logo in the top left corner: ``` 0000FF 00FF00 - - image - ./theme/background.png - 0 0 - 1 1 - 0 0 - + + ./../all_themes/font.ttf + 0.045 + - - image + + ./../all_themes/font.ttf + 0.035 + + + + ./theme/background.png + true + + + ./theme/logo.png - 0 0 - 0.4 0 - 0 0 - + false + + + ./../all_themes/scrollSound.wav - - - - 0000FF - 00FF00 - - - image - ./theme/background.png - 0 0 - 1 1 - 0 0 - - - ``` -Themes can be defined with two tags: `` and ``. -You can define both a normal and basic theme in the same file. +Themes must be enclosed in a `` tag. -If EmulationStation is running in "basic" mode, it will try to use ``. If that doesn't exist or ES is running in "detailed" mode (a gamelist.xml is present), `` will be used. - - -Components -========== - -A theme is made up of components, which have various types. At the moment, the only type is `image`. Components are rendered in the order they are defined - that means you'll want to define the background first, a header image second, etc. - - -The "image" component -===================== - -Used to display an image. - -`` - path to the image file. Most common file types are supported, and . and ~ are properly expanded. - -`` - the position, as two screen percentages, at which to display the image. - -`` - the dimensions, as two screen percentages, that the image will be resized to. Make one axis 0 to keep the aspect ratio. - -`` - the point on the image that `` defines, as an image percentage. "0.5 0.5", the center of the image, by default. - -`` - if present, the image is tiled instead of resized. - - -Display tags -============ - -Display tags define some "meta" display attributes about your theme. Display tags must be at the root of the `` tree - for example, they can't be inside a component tag. They are not required. - - -**Game list attributes:** - -`` - the hex font color to use for games on the GuiGameList. - -`` - the hex font color to use for folders on the GuiGameList. - -`` - the hex font color to use for the description on the GuiGameList. - -`` - the hex color to use for the "selector bar" on the GuiGameList. Default is `000000FF`. - -`` - the hex color to use for selected text on the GuiGameList. Default is zero, which means no change. - -`` - if present, the games list names will be left aligned to the value of `` + ``. On by default for detailed themes. - -`` - if present, the system name header won't be displayed (useful for replacing it with an image). If you're making a complete custom theme, you probably want to use this. - -`` - if present, the divider between games on the detailed GuiGameList won't be displayed. - -`` - the percentage to offset the list by. Default is 0.5 (half the screen). **Will also move the selector bar**. - -`` - the percentage to offset the text in the list by. Default is 0.005. Only works in combination with ``. - - - -**Game image attributes:** - -`` - two values for the position of the game art, in the form of `[x] [y]`, as a percentage. Default is `$infoWidth/2 $headerHeight`. - -`` - two values for the dimensions of the game art, in the form of `[width] [height]`, as a percentage of the screen. Default is `$infoWidth 0` (width fits within the info column). The image will only be resized if at least one axis is nonzero *and* exceeded by the image's size. You should always leave at least one axis as zero to preserve the aspect ratio. - -`` - two values for the origin of the game art, in the form of `[x] [y]`, as a percentage. Default is `0.5 0` (top-center of the image). - -`` - path to the image to display if a game's image is missing. '.' and '~' are expanded. - - - -**Fast Select box attributes:** - -`` - the hex color to use for the letter display on the fast select box. - -`` - the path to a "nine patch" image to use for the "background" of the fast select box. See the "Nine Patches" section for more info. - -`` - font definition to use for the fast select letter. See the "Fonts" section for more info. +All paths automatically expand `./` to the folder containing the theme.xml. +All paths automatically expand `~/` to the home directory ($HOME on Linux, %HOMEPATH% on Windows). +Stuff you can define +==================== Fonts ===== Fonts are defined like so: - ``` - - ./path/to/font - 0.05 - + + + ./some/path/here.ttf + + 0.035 + ``` -You can leave off any tags you don't want to use, and they'll use the default. Size is defined as a percentage of the screen height. "." and "~" are expanded for paths. +`` - Default size: 0.045. +`` - Default size: 0.035. -NOTE: If your font size is too big, it'll overrun the maximum OpenGL texture size. ES will attempt to rasterize it in progressively smaller sizes until one fits, then upscale it. +Colors +====== -**Font tags:** +Colors are defined in hex, like this: -`` - font to use for the game list. +`00FF00FF` +or +`00FF00` +(without the alpha channel specified - will assume FF) -`` - font to use for description text. +`` - Default: 0000FFFF. +`` - Default: 00FF00FF. +`` - Default: 000000FF. +`` - Default: 00000000. +`` - Default: 48474DFF. -`` - font to use for the fast select letter. +Images +====== +Images are defined like this: +``` + + ./some/path/here.png + + true + +``` +Pretty much any image format is supported. -Audio -===== +`` - No default. +`` - No default. -Themes can also define menu sounds. These tags go in the root of the `` tree, just like Display tags. Sounds should be in the .wav format. The relative path operator (.) and home operator (~) are properly expanded. +Sounds +====== -`` - path to the sound to play when the game list or fast select menu is scrolling. +Sounds are defined like this: +`./some/path/here.wav` +Only .wav files are supported. -`` - path to the sound to play when the user selects something from the game list. - -`` - path to the sound to play when the user "goes up" from a folder in the game list. - -`` - path to the sound to play when the user opens a menu (either the "main menu" or the fast select menu). +`` - No default. +`` - No default. +`` - No default. +`` - No default. Nine Patches @@ -178,18 +116,5 @@ Nine Patches EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). - -List of variables -================= - -Variables can be used in position and dimension definitions. They can be added, subtracted, multiplied, and divided. Parenthesis are valid. They are a percentage of the screen. - -For example, if you wanted to place an image that covered the left half of the screen, up to the game list, you could use `$infoWidth 1`. - -`$headerHeight` - height of the system name header. - -`$infoWidth` - where the left of the game list begins. Will follow ``. - - -Aloshi http://www.aloshi.com diff --git a/src/FileData.cpp b/src/FileData.cpp index 958ecf499..710313f85 100644 --- a/src/FileData.cpp +++ b/src/FileData.cpp @@ -9,8 +9,8 @@ std::string getCleanFileName(const fs::path& path) } -FileData::FileData(FileType type, const fs::path& path) - : mType(type), mPath(path), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! +FileData::FileData(FileType type, const fs::path& path, SystemData* system) + : mType(type), mPath(path), mSystem(system), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! { // metadata needs at least a name field (since that's what getName() will return) if(metadata.get("name").empty()) @@ -21,6 +21,9 @@ FileData::~FileData() { if(mParent) mParent->removeChild(this); + + while(mChildren.size()) + delete mChildren.back(); } const std::string& FileData::getThumbnailPath() const diff --git a/src/FileData.h b/src/FileData.h index 2ef987dc7..9d9ef0175 100644 --- a/src/FileData.h +++ b/src/FileData.h @@ -5,12 +5,21 @@ #include #include "MetaData.h" +class SystemData; + enum FileType { GAME = 1, // Cannot have children. FOLDER = 2 }; +enum FileChangeType +{ + FILE_ADDED, + FILE_METADATA_CHANGED, + FILE_REMOVED +}; + // Used for loading/saving gamelist.xml. const char* fileTypeToString(FileType type); FileType stringToFileType(const char* str); @@ -21,7 +30,7 @@ std::string getCleanFileName(const boost::filesystem::path& path); class FileData { public: - FileData(FileType type, const boost::filesystem::path& path); + FileData(FileType type, const boost::filesystem::path& path, SystemData* system); virtual ~FileData(); inline const std::string& getName() const { return metadata.get("name"); } @@ -29,6 +38,7 @@ public: inline const boost::filesystem::path& getPath() const { return mPath; } inline FileData* getParent() const { return mParent; } inline const std::vector& getChildren() const { return mChildren; } + inline SystemData* getSystem() const { return mSystem; } virtual const std::string& getThumbnailPath() const; @@ -57,6 +67,7 @@ public: private: FileType mType; boost::filesystem::path mPath; + SystemData* mSystem; FileData* mParent; std::vector mChildren; }; diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 4f793713e..c4a1fde41 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -99,6 +99,9 @@ void GuiComponent::addChild(GuiComponent* cmp) void GuiComponent::removeChild(GuiComponent* cmp) { + if(!cmp->getParent()) + return; + if(cmp->getParent() != this) { LOG(LogError) << "Tried to remove child from incorrect parent!"; diff --git a/src/SystemData.cpp b/src/SystemData.cpp index d162a4b00..e7055d510 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -35,8 +35,8 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mLaunchCommand = command; mPlatformId = platformId; - mRootFolder = new FileData(FOLDER, mStartPath); - mRootFolder->metadata.set("name", "Search Root"); + mRootFolder = new FileData(FOLDER, mStartPath, this); + mRootFolder->metadata.set("name", mFullName); if(!Settings::getInstance()->getBool("PARSEGAMELISTONLY")) populateFolder(mRootFolder); @@ -45,6 +45,9 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con parseGamelist(this); mRootFolder->sort(FileSorts::SortTypes.at(0)); + + mTheme = std::make_shared(); + mTheme->loadFile(getThemePath()); } SystemData::~SystemData() @@ -178,7 +181,7 @@ void SystemData::populateFolder(FileData* folder) isGame = false; if(std::find(mSearchExtensions.begin(), mSearchExtensions.end(), extension) != mSearchExtensions.end()) { - FileData* newGame = new FileData(GAME, filePath.generic_string()); + FileData* newGame = new FileData(GAME, filePath.generic_string(), this); folder->addChild(newGame); isGame = true; } @@ -186,7 +189,7 @@ void SystemData::populateFolder(FileData* folder) //add directories that also do not match an extension as folders if(!isGame && fs::is_directory(filePath)) { - FileData* newFolder = new FileData(FOLDER, filePath.generic_string()); + FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), this); populateFolder(newFolder); //ignore folders that do not contain games @@ -347,7 +350,19 @@ std::string SystemData::getGamelistPath() const return filePath.generic_string(); } -bool SystemData::hasGamelist() +std::string SystemData::getThemePath() const +{ + fs::path filePath; + + filePath = mRootFolder->getPath() / "theme.xml"; + if(fs::exists(filePath)) + return filePath.generic_string(); + + filePath = getHomePath() + "/.emulationstation/" + getName() + "/theme.xml"; + return filePath.generic_string(); +} + +bool SystemData::hasGamelist() const { return (fs::exists(getGamelistPath())); } diff --git a/src/SystemData.h b/src/SystemData.h index c0f2b0e92..ca6e5bed0 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -7,6 +7,7 @@ #include "Window.h" #include "MetaData.h" #include "PlatformId.h" +#include "ThemeData.h" class SystemData { @@ -21,9 +22,11 @@ public: inline const std::string& getStartPath() const { return mStartPath; } inline const std::vector& getExtensions() const { return mSearchExtensions; } inline PlatformIds::PlatformId getPlatformId() const { return mPlatformId; } + inline const std::shared_ptr& getTheme() const { return mTheme; } std::string getGamelistPath() const; - bool hasGamelist(); + bool hasGamelist() const; + std::string getThemePath() const; unsigned int getGameCount() const; @@ -43,6 +46,7 @@ private: std::vector mSearchExtensions; std::string mLaunchCommand; PlatformIds::PlatformId mPlatformId; + std::shared_ptr mTheme; void populateFolder(FileData* folder); diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp new file mode 100644 index 000000000..63f35bf5a --- /dev/null +++ b/src/ThemeData.cpp @@ -0,0 +1,207 @@ +#include "ThemeData.h" +#include "Renderer.h" +#include "resources/Font.h" +#include "Sound.h" +#include "resources/TextureResource.h" +#include "Log.h" +#include +#include +#include "pugiXML/pugixml.hpp" + +// Defaults +std::map ThemeData::sDefaultFonts = boost::assign::map_list_of + ("listFont", FontDef(0.045f, "")) + ("descriptionFont", FontDef(0.035f, "")); + +std::map ThemeData::sDefaultColors = boost::assign::map_list_of + ("listPrimaryColor", 0x0000FFFF) + ("listSecondaryColor", 0x00FF00FF) + ("listSelectorColor", 0x000000FF) + ("listSelectedColor", 0x00000000) + ("descriptionColor", 0x48474DFF); + +std::map ThemeData::sDefaultImages = boost::assign::map_list_of + ("backgroundImage", ImageDef("", true)) + ("headerImage", ImageDef("", false)); + +std::map ThemeData::sDefaultSounds = boost::assign::map_list_of + ("scrollSound", SoundDef("")) + ("gameSelectSound", SoundDef("")) + ("backSound", SoundDef("")) + ("menuOpenSound", SoundDef("")); + + + +const std::shared_ptr& ThemeData::getDefault() +{ + static const std::shared_ptr def = std::shared_ptr(new ThemeData()); + return def; +} + +ThemeData::ThemeData() +{ + setDefaults(); + + std::string defaultDir = getHomePath() + "/.emulationstation/es_theme_default.xml"; + if(boost::filesystem::exists(defaultDir)) + loadFile(defaultDir); +} + +void ThemeData::setDefaults() +{ + mFontMap.clear(); + mImageMap.clear(); + mColorMap.clear(); + mSoundMap.clear(); + + mFontMap = sDefaultFonts; + mImageMap = sDefaultImages; + mColorMap = sDefaultColors; + mSoundMap = sDefaultSounds; +} + +unsigned int getHexColor(const char* str, unsigned int defaultColor) +{ + if(!str) + return defaultColor; + + size_t len = strlen(str); + if(len != 6 && len != 8) + { + LOG(LogError) << "Invalid theme color \"" << str << "\" (must be 6 or 8 characters)"; + return defaultColor; + } + + unsigned int val; + std::stringstream ss; + ss << str; + ss >> std::hex >> val; + + if(len == 6) + val = (val << 8) | 0xFF; + + return val; +} + +std::string resolvePath(const char* in, const std::string& relative) +{ + if(!in || in[0] == '\0') + return in; + + boost::filesystem::path relPath(relative); + relPath = relPath.parent_path(); + + boost::filesystem::path path(in); + + // we use boost filesystem here instead of just string checks because + // some directories could theoretically start with ~ or . + if(*path.begin() == "~") + { + path = getHomePath() + (in + 1); + }else if(*path.begin() == ".") + { + path = relPath / (in + 1); + } + + return path.generic_string(); +} + +void ThemeData::loadFile(const std::string& themePath) +{ + if(themePath.empty() || !boost::filesystem::exists(themePath)) + return; + + pugi::xml_document doc; + pugi::xml_parse_result result = doc.load_file(themePath.c_str()); + if(!result) + { + LOG(LogWarning) << "Could not parse theme file \"" << themePath << "\":\n " << result.description(); + return; + } + + pugi::xml_node root = doc.child("theme"); + + // Fonts + for(auto it = mFontMap.begin(); it != mFontMap.end(); it++) + { + pugi::xml_node node = root.child(it->first.c_str()); + if(node) + { + std::string path = resolvePath(node.child("path").text().as_string(it->second.path.c_str()), themePath); + if(!boost::filesystem::exists(path)) + { + LOG(LogWarning) << "Font \"" << path << "\" doesn't exist!"; + path = it->second.path; + } + + float size = node.child("size").text().as_float(it->second.size); + mFontMap[it->first] = FontDef(size, path); + root.remove_child(node); + } + } + + // Images + for(auto it = mImageMap.begin(); it != mImageMap.end(); it++) + { + pugi::xml_node node = root.child(it->first.c_str()); + if(node) + { + std::string path = resolvePath(node.child("path").text().as_string(it->second.path.c_str()), themePath); + if(!boost::filesystem::exists(path)) + { + LOG(LogWarning) << "Image \"" << path << "\" doesn't exist!"; + path = it->second.path; + } + + bool tile = node.child("tile").text().as_bool(it->second.tile); + mImageMap[it->first] = ImageDef(path, tile); + root.remove_child(node); + } + } + + // Colors + for(auto it = mColorMap.begin(); it != mColorMap.end(); it++) + { + pugi::xml_node node = root.child(it->first.c_str()); + if(node) + { + mColorMap[it->first] = getHexColor(node.text().as_string(NULL), it->second); + root.remove_child(node); + } + } + + // Sounds + for(auto it = mSoundMap.begin(); it != mSoundMap.end(); it++) + { + pugi::xml_node node = root.child(it->first.c_str()); + if(node) + { + std::string path = resolvePath(node.text().as_string(it->second.path.c_str()), themePath); + if(!boost::filesystem::exists(path)) + { + LOG(LogWarning) << "Sound \"" << path << "\" doesn't exist!"; + path = it->second.path; + } + + mSoundMap[it->first] = SoundDef(path); + root.remove_child(node); + } + } + + if(root.begin() != root.end()) + { + std::stringstream ss; + ss << "Unused theme identifiers:\n"; + for(auto it = root.children().begin(); it != root.children().end(); it++) + { + ss << " " << it->name() << "\n"; + } + + LOG(LogWarning) << ss.str(); + } +} + +void ThemeData::playSound(const std::string& identifier) const +{ + mSoundMap.at(identifier).get()->play(); +} diff --git a/src/ThemeData.h b/src/ThemeData.h new file mode 100644 index 000000000..ea4222801 --- /dev/null +++ b/src/ThemeData.h @@ -0,0 +1,78 @@ +#pragma once + +#include +#include +#include +#include "resources/Font.h" +#include "resources/TextureResource.h" +#include "Renderer.h" +#include "AudioManager.h" +#include "Sound.h" + +struct FontDef +{ + FontDef() {} + FontDef(float sz, const std::string& p) : path(p), size(sz) {} + + std::string path; + float size; + + inline const std::shared_ptr& get() const { if(!font) font = Font::get((int)(size * Renderer::getScreenHeight()), path); return font; } + +private: + mutable std::shared_ptr font; +}; + +struct ImageDef +{ + ImageDef() {} + ImageDef(const std::string& p, bool t) : path(p), tile(t) {} + + std::string path; + bool tile; + + inline const std::shared_ptr& getTexture() const { if(!texture && !path.empty()) texture = TextureResource::get(path); return texture; } + +private: + mutable std::shared_ptr texture; +}; + +struct SoundDef +{ + SoundDef() {} + SoundDef(const std::string& p) : path(p) { sound = std::shared_ptr(new Sound(path)); AudioManager::getInstance()->registerSound(sound); } + + std::string path; + + inline const std::shared_ptr& get() const { return sound; } + +private: + std::shared_ptr sound; +}; + +class ThemeData +{ +public: + static const std::shared_ptr& getDefault(); + + ThemeData(); + + void setDefaults(); + void loadFile(const std::string& path); + + inline std::shared_ptr getFont(const std::string& identifier) const { return mFontMap.at(identifier).get(); } + inline const ImageDef& getImage(const std::string& identifier) const { return mImageMap.at(identifier); } + inline unsigned int getColor(const std::string& identifier) const { return mColorMap.at(identifier); } + void playSound(const std::string& identifier) const; + +private: + static std::map sDefaultImages; + static std::map sDefaultColors; + static std::map sDefaultFonts; + static std::map sDefaultSounds; + + std::map mImageMap; + std::map mColorMap; + std::map mFontMap; + std::map< std::string, SoundDef > mSoundMap; +}; diff --git a/src/Window.cpp b/src/Window.cpp index 847f55e48..c2b2e42f6 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -6,11 +6,14 @@ #include "Log.h" #include "Settings.h" #include +#include "views/ViewController.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mZoomFactor(1.0f), mCenterPoint(0, 0), mMatrix(Eigen::Affine3f::Identity()), mFadePercent(0.0f), mAllowSleep(true) { mInputManager = new InputManager(this); + mViewController = new ViewController(this); + pushGui(mViewController); setCenterPoint(Eigen::Vector2f(Renderer::getScreenWidth() / 2, Renderer::getScreenHeight() / 2)); } @@ -88,8 +91,11 @@ void Window::input(InputConfig* config, Input input) { VolumeControl::getInstance()->setVolume(VolumeControl::getInstance()->getVolume() - 5); } - else if(peekGui()) - this->peekGui()->input(config, input); + else + { + if(peekGui()) + this->peekGui()->input(config, input); + } } void Window::update(int deltaTime) @@ -125,10 +131,6 @@ void Window::update(int deltaTime) void Window::render() { - //there's nothing to render, which should pretty much never happen - if(mGuiStack.size() == 0) - std::cout << "guistack empty\n"; - for(unsigned int i = 0; i < mGuiStack.size(); i++) { mGuiStack.at(i)->render(mMatrix); @@ -148,11 +150,6 @@ void Window::normalizeNextUpdate() mNormalizeNextUpdate = true; } -InputManager* Window::getInputManager() -{ - return mInputManager; -} - void Window::setZoomFactor(const float& zoom) { mZoomFactor = zoom; diff --git a/src/Window.h b/src/Window.h index dcff3f923..757fa2a7b 100644 --- a/src/Window.h +++ b/src/Window.h @@ -3,10 +3,11 @@ #include "GuiComponent.h" #include "InputManager.h" -#include "resources/ResourceManager.h" #include #include "resources/Font.h" +class ViewController; + class Window { public: @@ -24,8 +25,8 @@ public: bool init(unsigned int width = 0, unsigned int height = 0); void deinit(); - InputManager* getInputManager(); - ResourceManager* getResourceManager(); + inline InputManager* getInputManager() { return mInputManager; } + inline ViewController* getViewController() { return mViewController; } void normalizeNextUpdate(); @@ -39,6 +40,7 @@ public: private: InputManager* mInputManager; + ViewController* mViewController; std::vector mGuiStack; std::vector< std::shared_ptr > mDefaultFonts; diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index fbdf19bd6..b16fca806 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -72,13 +72,13 @@ FileData* createGameFromPath(std::string gameAbsPath, SystemData* system) //the folder didn't already exist, so create it if(!foundFolder) { - FileData* newFolder = new FileData(FOLDER, folder->getPath() / checkName); + FileData* newFolder = new FileData(FOLDER, folder->getPath() / checkName, system); folder->addChild(newFolder); folder = newFolder; } } - FileData* game = new FileData(GAME, gameAbsPath); + FileData* game = new FileData(GAME, gameAbsPath, system); folder->addChild(game); return game; } diff --git a/src/components/AnimationComponent.cpp b/src/components/AnimationComponent.cpp deleted file mode 100644 index c07be41f3..000000000 --- a/src/components/AnimationComponent.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "AnimationComponent.h" - -AnimationComponent::AnimationComponent() -{ - mMoveX = 0; - mMoveY = 0; - mMoveSpeed = 0; - mFadeRate = 0; - mOpacity = 0; - mAccumulator = 0; -} - -void AnimationComponent::move(int x, int y, int speed) -{ - mMoveX = x; - mMoveY = y; - mMoveSpeed = speed; -} - -void AnimationComponent::fadeIn(int time) -{ - mOpacity = 0; - setChildrenOpacity(0); - - mFadeRate = time; -} - -void AnimationComponent::fadeOut(int time) -{ - mOpacity = 255; - setChildrenOpacity(255); - - mFadeRate = -time; -} - -//this should really be fixed at the system loop level... -void AnimationComponent::update(int deltaTime) -{ - mAccumulator += deltaTime; - while(mAccumulator >= ANIMATION_TICK_SPEED) - { - mAccumulator -= ANIMATION_TICK_SPEED; - - if(mMoveX != 0 || mMoveY != 0) - { - Eigen::Vector2i offset(mMoveX, mMoveY); - if(abs(offset.x()) > mMoveSpeed) - offset.x() = mMoveSpeed * (offset.x() > 0 ? 1 : -1); - if(abs(offset.y()) > mMoveSpeed) - offset.y() = mMoveSpeed * (offset.y() > 0 ? 1 : -1); - - moveChildren(offset.x(), offset.y()); - - mMoveX -= offset.x(); - mMoveY -= offset.y(); - } - - if(mFadeRate != 0) - { - int opacity = (int)mOpacity + mFadeRate; - if(opacity > 255) - { - mFadeRate = 0; - opacity = 255; - } - - if(opacity < 0) - { - mFadeRate = 0; - opacity = 0; - } - - mOpacity = (unsigned char)opacity; - setChildrenOpacity((unsigned char)opacity); - } - } -} - -void AnimationComponent::addChild(GuiComponent* gui) -{ - mChildren.push_back(gui); -} - -void AnimationComponent::moveChildren(int offsetx, int offsety) -{ - Eigen::Vector3f move((float)offsetx, (float)offsety, 0); - for(unsigned int i = 0; i < mChildren.size(); i++) - { - GuiComponent* comp = mChildren.at(i); - comp->setPosition(comp->getPosition() + move); - } -} - -void AnimationComponent::setChildrenOpacity(unsigned char opacity) -{ - for(unsigned int i = 0; i < mChildren.size(); i++) - { - mChildren.at(i)->setOpacity(opacity); - } -} diff --git a/src/components/AnimationComponent.h b/src/components/AnimationComponent.h deleted file mode 100644 index ce37beb8b..000000000 --- a/src/components/AnimationComponent.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _ANIMATIONCOMPONENT_H_ -#define _ANIMATIONCOMPONENT_H_ - -#include "../GuiComponent.h" -#include - -#define ANIMATION_TICK_SPEED 16 - -//just fyi, this is easily the worst animation system i've ever written. -//it was mostly written during a single lecture and it really shows in how un-thought-out it is -//it also hasn't been converted to use floats or vectors yet -class AnimationComponent -{ -public: - AnimationComponent(); - - void move(int x, int y, int speed); - void fadeIn(int time); - void fadeOut(int time); - - void update(int deltaTime); - - void addChild(GuiComponent* gui); - -private: - unsigned char mOpacity; - - std::vector mChildren; - - void moveChildren(int offsetx, int offsety); - void setChildrenOpacity(unsigned char opacity); - - int mFadeRate; - int mMoveX, mMoveY, mMoveSpeed; - - int mAccumulator; -}; - -#endif diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp deleted file mode 100644 index 3a59398c5..000000000 --- a/src/components/GuiFastSelect.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "GuiFastSelect.h" -#include "../Renderer.h" -#include -#include "GuiGameList.h" -#include "../FileSorts.h" - -#define DEFAULT_FS_IMAGE ":/frame.png" - -const std::string GuiFastSelect::LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -const int GuiFastSelect::SCROLLSPEED = 100; -const int GuiFastSelect::SCROLLDELAY = 507; - -int GuiFastSelect::sortTypeId = 0; - -GuiFastSelect::GuiFastSelect(Window* window, GuiGameList* parent, TextListComponent* list, char startLetter, ThemeComponent * theme) - : GuiComponent(window), mParent(parent), mList(list), mTheme(theme), mBox(mWindow, "") -{ - mLetterID = LETTERS.find(toupper(startLetter)); - if(mLetterID == std::string::npos) - mLetterID = 0; - - mScrollSound = mTheme->getSound("menuScroll"); - mTextColor = mTheme->getColor("fastSelect"); - - mScrolling = false; - mScrollTimer = 0; - mScrollOffset = 0; - - unsigned int sw = Renderer::getScreenWidth(), sh = Renderer::getScreenHeight(); - - - if(theme->getString("fastSelectFrame").empty()) - { - mBox.setImagePath(DEFAULT_FS_IMAGE); - //mBox.setEdgeColor(0x0096ffFF); - mBox.setEdgeColor(0x005493FF); - mBox.setCenterColor(0x5e5e5eFF); - }else{ - mBox.setImagePath(theme->getString("fastSelectFrame")); - } - - mBox.setPosition(sw * 0.2f, sh * 0.2f); - mBox.setSize(sw * 0.6f, sh * 0.6f); -} - -GuiFastSelect::~GuiFastSelect() -{ - mParent->updateDetailData(); -} - -void GuiFastSelect::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - - unsigned int sw = Renderer::getScreenWidth(), sh = Renderer::getScreenHeight(); - - mBox.render(trans); - - Renderer::setMatrix(trans); - std::shared_ptr letterFont = mTheme->getFastSelectFont(); - std::shared_ptr subtextFont = mTheme->getDescriptionFont(); - - letterFont->drawCenteredText(LETTERS.substr(mLetterID, 1), 0, sh * 0.5f - (letterFont->getHeight() * 0.5f), mTextColor); - subtextFont->drawCenteredText("Sort order:", 0, sh * 0.6f - (subtextFont->getHeight() * 0.5f), mTextColor); - - std::string sortString = "<- " + FileSorts::SortTypes.at(sortTypeId).description + " ->"; - subtextFont->drawCenteredText(sortString, 0, sh * 0.6f + (subtextFont->getHeight() * 0.5f), mTextColor); -} - -bool GuiFastSelect::input(InputConfig* config, Input input) -{ - if(config->isMappedTo("up", input) && input.value != 0) - { - mScrollOffset = -1; - scroll(); - return true; - } - - if(config->isMappedTo("down", input) && input.value != 0) - { - mScrollOffset = 1; - scroll(); - return true; - } - - if(config->isMappedTo("left", input) && input.value != 0) - { - sortTypeId--; - if(sortTypeId < 0) - sortTypeId = FileSorts::SortTypes.size() - 1; - - mScrollSound->play(); - return true; - } - else if(config->isMappedTo("right", input) && input.value != 0) - { - sortTypeId = (sortTypeId + 1) % FileSorts::SortTypes.size(); - mScrollSound->play(); - return true; - } - - if((config->isMappedTo("up", input) || config->isMappedTo("down", input)) && input.value == 0) - { - mScrolling = false; - mScrollTimer = 0; - mScrollOffset = 0; - return true; - } - - if(config->isMappedTo("select", input) && input.value == 0) - { - setListPos(); - mParent->sort(FileSorts::SortTypes.at(sortTypeId)); - delete this; - return true; - } - - return false; -} - -void GuiFastSelect::update(int deltaTime) -{ - if(mScrollOffset != 0) - { - mScrollTimer += deltaTime; - - if(!mScrolling && mScrollTimer >= SCROLLDELAY) - { - mScrolling = true; - mScrollTimer = SCROLLSPEED; - } - - if(mScrolling && mScrollTimer >= SCROLLSPEED) - { - mScrollTimer = 0; - scroll(); - } - } -} - -void GuiFastSelect::scroll() -{ - setLetterID(mLetterID + mScrollOffset); - mScrollSound->play(); -} - -void GuiFastSelect::setLetterID(int id) -{ - while(id < 0) - id += LETTERS.length(); - while(id >= (int)LETTERS.length()) - id -= LETTERS.length(); - - mLetterID = (size_t)id; -} - -void GuiFastSelect::setListPos() -{ - char letter = LETTERS[mLetterID]; - - int min = 0; - int max = mList->getObjectCount() - 1; - - int mid = 0; - - while(max >= min) - { - mid = ((max - min) / 2) + min; - - char checkLetter = toupper(mList->getObject(mid)->getName()[0]); - - if(checkLetter < letter) - { - min = mid + 1; - }else if(checkLetter > letter) - { - max = mid - 1; - }else{ - //exact match found - break; - } - } - - mList->setSelection(mid); -} diff --git a/src/components/GuiFastSelect.h b/src/components/GuiFastSelect.h deleted file mode 100644 index 02cec1c03..000000000 --- a/src/components/GuiFastSelect.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _GUIFASTSELECT_H_ -#define _GUIFASTSELECT_H_ - -#include "../GuiComponent.h" -#include "../SystemData.h" -#include "../Sound.h" -#include "ThemeComponent.h" -#include "TextListComponent.h" -#include "NinePatchComponent.h" - -class GuiGameList; - - -class GuiFastSelect : public GuiComponent -{ -public: - GuiFastSelect(Window* window, GuiGameList* parent, TextListComponent* list, char startLetter, ThemeComponent* theme); - ~GuiFastSelect(); - - bool input(InputConfig* config, Input input) override; - void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; - -private: - static const std::string LETTERS; - static const int SCROLLSPEED; - static const int SCROLLDELAY; - - static int sortTypeId; - - void setListPos(); - void scroll(); - void setLetterID(int id); - - GuiGameList* mParent; - TextListComponent* mList; - ThemeComponent * mTheme; - NinePatchComponent mBox; - - size_t mLetterID; - - unsigned int mTextColor; - - int mScrollTimer, mScrollOffset; - bool mScrolling; - - std::shared_ptr mScrollSound; -}; - -#endif diff --git a/src/components/GuiGameList.cpp b/src/components/GuiGameList.cpp deleted file mode 100644 index 59e21c545..000000000 --- a/src/components/GuiGameList.cpp +++ /dev/null @@ -1,505 +0,0 @@ -#include "GuiGameList.h" -#include "../InputManager.h" -#include -#include "GuiMenu.h" -#include "GuiFastSelect.h" -#include -#include "../Log.h" -#include "../Settings.h" - -#include "GuiMetaDataEd.h" -#include "GuiScraperStart.h" - -Eigen::Vector3f GuiGameList::getImagePos() -{ - return Eigen::Vector3f(Renderer::getScreenWidth() * mTheme->getFloat("gameImageOffsetX"), Renderer::getScreenHeight() * mTheme->getFloat("gameImageOffsetY"), 0.0f); -} - -bool GuiGameList::isDetailed() const -{ - if(!mFolder) - return false; - - //return true if any game has an image specified - for(auto it = mFolder->getChildren().begin(); it != mFolder->getChildren().end(); it++) - { - if(!(*it)->getThumbnailPath().empty()) - return true; - } - - return false; -} - -GuiGameList::GuiGameList(Window* window) : GuiComponent(window), - mTheme(new ThemeComponent(mWindow)), - mList(window, 0.0f, 0.0f, Font::get(FONT_SIZE_MEDIUM)), - mScreenshot(window), - mDescription(window), - mRating(window), - mReleaseDateLabel(window), - mReleaseDate(window), - mDescContainer(window), - mTransitionImage(window, 0.0f, 0.0f, "", (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), true), - mHeaderText(mWindow), - mLockInput(false), - mEffectFunc(NULL), mEffectTime(0), mGameLaunchEffectLength(700) -{ - mImageAnimation.addChild(&mScreenshot); - mDescContainer.addChild(&mReleaseDateLabel); - mDescContainer.addChild(&mReleaseDate); - mDescContainer.addChild(&mRating); - mDescContainer.addChild(&mDescription); - - //scale delay with screen width (higher width = more text per line) - //the scroll speed is automatically scaled by component size - mDescContainer.setAutoScroll((int)(1500 + (Renderer::getScreenWidth() * 0.5)), 0.025f); - - mTransitionImage.setPosition((float)Renderer::getScreenWidth(), 0); - mTransitionImage.setOrigin(0, 0); - - mHeaderText.setColor(0xFF0000FF); - mHeaderText.setFont(Font::get(FONT_SIZE_LARGE)); - mHeaderText.setPosition(0, 1); - mHeaderText.setSize((float)Renderer::getScreenWidth(), 0); - mHeaderText.setCentered(true); - - addChild(mTheme); - addChild(&mHeaderText); - addChild(&mScreenshot); - addChild(&mDescContainer); - addChild(&mList); - addChild(&mTransitionImage); - - mTransitionAnimation.addChild(this); - - setSystemId(0); -} - -GuiGameList::~GuiGameList() -{ - delete mTheme; -} - -void GuiGameList::setSystemId(int id) -{ - if(SystemData::sSystemVector.size() == 0) - { - LOG(LogError) << "Error - no systems found!"; - return; - } - - //make sure the id is within range - if(id >= (int)SystemData::sSystemVector.size()) - id -= SystemData::sSystemVector.size(); - if(id < 0) - id += SystemData::sSystemVector.size(); - - mSystemId = id; - mSystem = SystemData::sSystemVector.at(mSystemId); - - //clear the folder stack - while(mFolderStack.size()){ mFolderStack.pop(); } - - mFolder = mSystem->getRootFolder(); - - updateTheme(); - updateList(); - updateDetailData(); - mWindow->normalizeNextUpdate(); //image loading can be slow -} - -void GuiGameList::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - renderChildren(trans); -} - -bool GuiGameList::input(InputConfig* config, Input input) -{ - if(mLockInput) - return false; - - mList.input(config, input); - - if(input.id == SDLK_F3) - { - FileData* game = mList.getSelectedObject(); - if(game->getType() == GAME) - { - FileData* root = mSystem->getRootFolder(); - ScraperSearchParams searchParams; - searchParams.game = game; - searchParams.system = mSystem; - mWindow->pushGui(new GuiMetaDataEd(mWindow, &game->metadata, game->metadata.getMDD(), searchParams, game->getPath().stem().string(), - [&] { updateDetailData(); }, - [game, root, this] { - boost::filesystem::remove(game->getPath()); - root->removeChild(game); - updateList(); - })); - } - return true; - } - - if(input.id == SDLK_F5) - { - mWindow->pushGui(new GuiScraperStart(mWindow)); - return true; - } - - if(config->isMappedTo("a", input) && input.value != 0) - { - //play select sound - mTheme->getSound("menuSelect")->play(); - - FileData* file = mList.getSelectedObject(); - if(file->getType() == FOLDER) //if you selected a folder, add this directory to the stack, and use the selected one - { - mFolderStack.push(mFolder); - mFolder = file; - updateList(); - updateDetailData(); - return true; - }else{ - mList.stopScrolling(); - - mEffectFunc = &GuiGameList::updateGameLaunchEffect; - mEffectTime = 0; - mGameLaunchEffectLength = (int)mTheme->getSound("menuSelect")->getLengthMS(); - if(mGameLaunchEffectLength < 800) - mGameLaunchEffectLength = 800; - - mLockInput = true; - - return true; - } - } - - //if there's something on the directory stack, return to it - if(config->isMappedTo("b", input) && input.value != 0 && mFolderStack.size()) - { - mFolder = mFolderStack.top(); - mFolderStack.pop(); - updateList(); - updateDetailData(); - - //play the back sound - mTheme->getSound("menuBack")->play(); - - return true; - } - - //only allow switching systems if more than one exists (otherwise it'll reset your position when you switch and it's annoying) - if(SystemData::sSystemVector.size() > 1 && input.value != 0) - { - if(config->isMappedTo("right", input)) - { - setSystemId(mSystemId + 1); - doTransition(-1); - return true; - } - if(config->isMappedTo("left", input)) - { - setSystemId(mSystemId - 1); - doTransition(1); - return true; - } - } - - //open the "start menu" - if(config->isMappedTo("menu", input) && input.value != 0) - { - mWindow->pushGui(new GuiMenu(mWindow, this)); - return true; - } - - //open the fast select menu - if(config->isMappedTo("select", input) && input.value != 0) - { - mWindow->pushGui(new GuiFastSelect(mWindow, this, &mList, mList.getSelectedObject()->getName()[0], mTheme)); - return true; - } - - if(isDetailed()) - { - if(config->isMappedTo("up", input) || config->isMappedTo("down", input) || config->isMappedTo("pageup", input) || config->isMappedTo("pagedown", input)) - { - if(input.value == 0) - updateDetailData(); - else - hideDetailData(); - } - return true; - } - - return false; -} - -void GuiGameList::sort(const FileData::SortType& type) -{ - //resort list and update it - mFolder->sort(type); - updateList(); - updateDetailData(); -} - -void GuiGameList::updateList() -{ - mList.clear(); - - for(auto it = mFolder->getChildren().begin(); it != mFolder->getChildren().end(); it++) - { - if((*it)->getType() == FOLDER) - mList.addObject((*it)->getName(), *it, mTheme->getColor("secondary")); - else - mList.addObject((*it)->getName(), *it, mTheme->getColor("primary")); - } -} - -std::string GuiGameList::getThemeFile() -{ - std::string themePath; - - themePath = getHomePath(); - themePath += "/.emulationstation/" + mSystem->getName() + "/theme.xml"; - if(boost::filesystem::exists(themePath)) - return themePath; - - themePath = mSystem->getStartPath() + "/theme.xml"; - if(boost::filesystem::exists(themePath)) - return themePath; - - themePath = getHomePath(); - themePath += "/.emulationstation/es_theme.xml"; - if(boost::filesystem::exists(themePath)) - return themePath; - - return ""; -} - -void GuiGameList::updateTheme() -{ - mTheme->readXML(getThemeFile(), isDetailed()); - - mList.setSelectorColor(mTheme->getColor("selector")); - mList.setSelectedTextColor(mTheme->getColor("selected")); - mList.setScrollSound(mTheme->getSound("menuScroll")); - - mList.setFont(mTheme->getListFont()); - mList.setPosition(0.0f, Font::get(FONT_SIZE_LARGE)->getHeight() + 2.0f); - - if(!mTheme->getBool("hideHeader")) - { - mHeaderText.setText(mSystem->getFullName()); - }else{ - mHeaderText.setText(""); - } - - if(isDetailed()) - { - mList.setCentered(mTheme->getBool("listCentered")); - - mList.setPosition(mTheme->getFloat("listOffsetX") * Renderer::getScreenWidth(), mList.getPosition().y()); - mList.setTextOffsetX((int)(mTheme->getFloat("listTextOffsetX") * Renderer::getScreenWidth())); - - mScreenshot.setPosition(mTheme->getFloat("gameImageOffsetX") * Renderer::getScreenWidth(), mTheme->getFloat("gameImageOffsetY") * Renderer::getScreenHeight()); - mScreenshot.setOrigin(mTheme->getFloat("gameImageOriginX"), mTheme->getFloat("gameImageOriginY")); - mScreenshot.setResize(mTheme->getFloat("gameImageWidth") * Renderer::getScreenWidth(), mTheme->getFloat("gameImageHeight") * Renderer::getScreenHeight(), false); - - mReleaseDateLabel.setColor(mTheme->getColor("description")); - mReleaseDateLabel.setFont(mTheme->getDescriptionFont()); - mReleaseDate.setColor(mTheme->getColor("description")); - mReleaseDate.setFont(mTheme->getDescriptionFont()); - - mDescription.setColor(mTheme->getColor("description")); - mDescription.setFont(mTheme->getDescriptionFont()); - }else{ - mList.setCentered(true); - mList.setPosition(0, mList.getPosition().y()); - mList.setTextOffsetX(0); - } -} - -void GuiGameList::updateDetailData() -{ - if(!isDetailed() || !mList.getSelectedObject() || mList.getSelectedObject()->getType() == FOLDER) - { - hideDetailData(); - }else{ - if(mDescContainer.getParent() != this) - addChild(&mDescContainer); - - FileData* game = mList.getSelectedObject(); - - //set image to either "not found" image or metadata image - if(!boost::filesystem::exists(game->metadata.get("image"))) - { - //image doesn't exist - if(mTheme->getString("imageNotFoundPath").empty()) - { - //"not found" image doesn't exist - mScreenshot.setImage(""); - mScreenshot.setSize(0, 0); //clear old size - }else{ - mScreenshot.setImage(mTheme->getString("imageNotFoundPath")); - } - }else{ - mScreenshot.setImage(game->metadata.get("image")); - } - - Eigen::Vector3f imgOffset = Eigen::Vector3f(Renderer::getScreenWidth() * 0.10f, 0, 0); - mScreenshot.setPosition(getImagePos() - imgOffset); - - mImageAnimation.fadeIn(35); - mImageAnimation.move((int)imgOffset.x(), (int)imgOffset.y(), 20); - - mDescContainer.setPosition(Eigen::Vector3f(Renderer::getScreenWidth() * 0.03f, getImagePos().y() + mScreenshot.getSize().y() + 12, 0)); - mDescContainer.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), Renderer::getScreenHeight() - mDescContainer.getPosition().y())); - mDescContainer.setScrollPos(Eigen::Vector2d(0, 0)); - mDescContainer.resetAutoScrollTimer(); - - const float colwidth = mDescContainer.getSize().x(); - float ratingHeight = colwidth * 0.3f / 5.0f; - mRating.setSize(ratingHeight * 5.0f, ratingHeight); - - mReleaseDateLabel.setPosition(0, 0); - mReleaseDateLabel.setText("Released: "); - mReleaseDate.setPosition(mReleaseDateLabel.getPosition().x() + mReleaseDateLabel.getSize().x(), mReleaseDateLabel.getPosition().y()); - mReleaseDate.setValue(game->metadata.get("releasedate")); - - mRating.setPosition(colwidth - mRating.getSize().x() - 12, 0); - mRating.setValue(game->metadata.get("rating")); - - mDescription.setPosition(0, mRating.getSize().y()); - mDescription.setSize(Eigen::Vector2f(Renderer::getScreenWidth() * (mTheme->getFloat("listOffsetX") - 0.03f), 0)); - mDescription.setText(game->metadata.get("desc")); - } -} - -void GuiGameList::hideDetailData() -{ - if(mDescContainer.getParent() == this) - removeChild(&mDescContainer); - - mImageAnimation.fadeOut(35); -} - -GuiGameList* GuiGameList::create(Window* window) -{ - GuiGameList* list = new GuiGameList(window); - window->pushGui(list); - return list; -} - -void GuiGameList::update(int deltaTime) -{ - mTransitionAnimation.update(deltaTime); - mImageAnimation.update(deltaTime); - - if(mEffectFunc != NULL) - { - mEffectTime += deltaTime; - (this->*mEffectFunc)(mEffectTime); - } - - GuiComponent::update(deltaTime); -} - -void GuiGameList::doTransition(int dir) -{ - mTransitionImage.copyScreen(); - mTransitionImage.setOpacity(255); - - //put the image of what's currently onscreen at what will be (in screen coords) 0, 0 - mTransitionImage.setPosition((float)Renderer::getScreenWidth() * dir, 0); - - //move the entire thing offscreen so we'll move into place - setPosition((float)Renderer::getScreenWidth() * -dir, mPosition[1]); - - mTransitionAnimation.move(Renderer::getScreenWidth() * dir, 0, 50); -} - -float lerpFloat(const float& start, const float& end, float t) -{ - if(t <= 0) - return start; - if(t >= 1) - return end; - - return (start * (1 - t) + end * t); -} - -Eigen::Vector2f lerpVector2f(const Eigen::Vector2f& start, const Eigen::Vector2f& end, float t) -{ - if(t <= 0) - return start; - if(t >= 1) - return end; - - return (start * (1 - t) + end * t); -} - -float clamp(float min, float max, float val) -{ - if(val < min) - val = min; - else if(val > max) - val = max; - - return val; -} - -//http://en.wikipedia.org/wiki/Smoothstep -float smoothStep(float edge0, float edge1, float x) -{ - // Scale, and clamp x to 0..1 range - x = clamp(0, 1, (x - edge0)/(edge1 - edge0)); - - // Evaluate polynomial - return x*x*x*(x*(x*6 - 15) + 10); -} - -void GuiGameList::updateGameLaunchEffect(int t) -{ - const int endTime = mGameLaunchEffectLength; - - const int zoomTime = endTime; - const int centerTime = endTime - 50; - - const int fadeDelay = endTime - 600; - const int fadeTime = endTime - fadeDelay - 100; - - Eigen::Vector2f imageCenter(mScreenshot.getCenter()); - if(!isDetailed()) - { - imageCenter << mList.getPosition().x() + mList.getSize().x() / 2, mList.getPosition().y() + mList.getSize().y() / 2; - } - - const Eigen::Vector2f centerStart(Renderer::getScreenWidth() / 2, Renderer::getScreenHeight() / 2); - - //remember to clamp or zoom factor will be incorrect with a negative t because squared - const float tNormalized = clamp(0, 1, (float)t / endTime); - - mWindow->setCenterPoint(lerpVector2f(centerStart, imageCenter, smoothStep(0.0, 1.0, tNormalized))); - mWindow->setZoomFactor(lerpFloat(1.0f, 3.0f, tNormalized*tNormalized)); - mWindow->setFadePercent(lerpFloat(0.0f, 1.0f, (float)(t - fadeDelay) / fadeTime)); - - if(t > endTime) - { - //effect done - mTransitionImage.setImage(""); //fixes "tried to bind uninitialized texture!" since copyScreen()'d textures don't reinit - mSystem->launchGame(mWindow, mList.getSelectedObject()); - mEffectFunc = &GuiGameList::updateGameReturnEffect; - mEffectTime = 0; - mGameLaunchEffectLength = 700; - mLockInput = false; - } -} - -void GuiGameList::updateGameReturnEffect(int t) -{ - updateGameLaunchEffect(mGameLaunchEffectLength - t); - - if(t >= mGameLaunchEffectLength) - mEffectFunc = NULL; -} diff --git a/src/components/GuiGameList.h b/src/components/GuiGameList.h deleted file mode 100644 index 7d29923b3..000000000 --- a/src/components/GuiGameList.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef _GUIGAMELIST_H_ -#define _GUIGAMELIST_H_ - -#include "../GuiComponent.h" -#include "TextListComponent.h" -#include "ImageComponent.h" -#include "ThemeComponent.h" -#include "AnimationComponent.h" -#include "TextComponent.h" -#include -#include -#include "../SystemData.h" -#include "ScrollableContainer.h" -#include "RatingComponent.h" -#include "DateTimeComponent.h" - -//This is where the magic happens - GuiGameList is the parent of almost every graphical element in ES at the moment. -//It has a TextListComponent child that handles the game list, a ThemeComponent that handles the theming system, and an ImageComponent for game images. -class GuiGameList : public GuiComponent -{ -public: - GuiGameList(Window* window); - virtual ~GuiGameList(); - - void setSystemId(int id); - - bool input(InputConfig* config, Input input) override; - void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; - - void updateDetailData(); - - void sort(const FileData::SortType& type); - - static GuiGameList* create(Window* window); - - bool isDetailed() const; - - static const float sInfoWidth; -private: - void updateList(); - void updateTheme(); - void hideDetailData(); - void doTransition(int dir); - - std::string getThemeFile(); - - SystemData* mSystem; - FileData* mFolder; - std::stack mFolderStack; - int mSystemId; - - TextListComponent mList; - ImageComponent mScreenshot; - - TextComponent mDescription; - RatingComponent mRating; - TextComponent mReleaseDateLabel; - DateTimeComponent mReleaseDate; - - ScrollableContainer mDescContainer; - AnimationComponent mImageAnimation; - ThemeComponent* mTheme; - TextComponent mHeaderText; - - ImageComponent mTransitionImage; - AnimationComponent mTransitionAnimation; - - Eigen::Vector3f getImagePos(); - - bool mLockInput; - - void (GuiGameList::*mEffectFunc)(int); - int mEffectTime; - int mGameLaunchEffectLength; - - void updateGameLaunchEffect(int t); - void updateGameReturnEffect(int t); -}; - -#endif diff --git a/src/components/GuiInputConfig.cpp b/src/components/GuiInputConfig.cpp index 3d8439c8f..c09fbad05 100644 --- a/src/components/GuiInputConfig.cpp +++ b/src/components/GuiInputConfig.cpp @@ -2,8 +2,8 @@ #include "../Window.h" #include "../Renderer.h" #include "../resources/Font.h" -#include "GuiGameList.h" #include "../Log.h" +#include "../views/ViewController.h" static const int inputCount = 10; static std::string inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Menu", "Select", "PageUp", "PageDown"}; @@ -38,7 +38,7 @@ bool GuiInputConfig::input(InputConfig* config, Input input) mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(mTargetConfig->getPlayerNum() + 1))); }else{ mWindow->getInputManager()->writeConfig(); - GuiGameList::create(mWindow); + mWindow->getViewController()->goToSystemSelect(); } delete this; return true; diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp deleted file mode 100644 index 18eaffd9f..000000000 --- a/src/components/GuiMenu.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "GuiMenu.h" -#include -#include -#include "../Log.h" -#include "../SystemData.h" -#include "GuiGameList.h" -#include "../Settings.h" -#include "GuiSettingsMenu.h" - -GuiMenu::GuiMenu(Window* window, GuiGameList* parent) : GuiComponent(window) -{ - mParent = parent; - - std::shared_ptr font = Font::get(FONT_SIZE_LARGE); - mList = new TextListComponent(mWindow, 0.0f, font->getHeight() + 2.0f, font); - mList->setSelectedTextColor(0x0000FFFF); - populateList(); -} - -GuiMenu::~GuiMenu() -{ - delete mList; -} - -bool GuiMenu::input(InputConfig* config, Input input) -{ - mList->input(config, input); - - if(config->isMappedTo("menu", input) && input.value != 0) - { - delete this; - return true; - } - - if(config->isMappedTo("a", input) && input.value != 0) - { - executeCommand(mList->getSelectedObject()); - return true; - } - - return false; -} - -void GuiMenu::executeCommand(std::string command) -{ - if(command == "exit") - { - //push SDL quit event - SDL_Event* event = new SDL_Event(); - event->type = SDL_QUIT; - SDL_PushEvent(event); - }else if(command == "es_reload") - { - //reload the game list - SystemData::loadConfig(SystemData::getConfigPath(), false); - mParent->setSystemId(0); - }else if(command == "es_settings") - { - mWindow->pushGui(new GuiSettingsMenu(mWindow)); - delete this; - }else{ - if(system(command.c_str()) != 0) - { - LOG(LogWarning) << "(warning: command terminated with nonzero result!)"; - } - } -} - -void GuiMenu::populateList() -{ - mList->clear(); - - //if you want to add your own commands to the menu, here is where you need to change! - //commands added here are called with system() when selected (so are executed as shell commands) - //the method is GuiList::addObject(std::string displayString, std::string commandString, unsigned int displayHexColor); - //the list will automatically adjust as items are added to it, this should be the only area you need to change - //if you want to do something special within ES, override your command in the executeComand() method - - mList->addObject("Settings", "es_settings", 0x0000FFFF); - - mList->addObject("Restart", "sudo shutdown -r now", 0x0000FFFF); - mList->addObject("Shutdown", "sudo shutdown -h now", 0x0000FFFF); - - mList->addObject("Reload", "es_reload", 0x0000FFFF); - - if(!Settings::getInstance()->getBool("DONTSHOWEXIT")) - mList->addObject("Exit", "exit", 0xFF0000FF); //a special case; pushes an SDL quit event to the event stack instead of being called by system() -} - -void GuiMenu::update(int deltaTime) -{ - mList->update(deltaTime); -} - -void GuiMenu::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans; - Renderer::setMatrix(trans); - - Renderer::drawRect(Renderer::getScreenWidth() / 4, 0, Renderer::getScreenWidth() / 2, Renderer::getScreenHeight(), 0x999999); - mList->render(trans); -} diff --git a/src/components/GuiMenu.h b/src/components/GuiMenu.h deleted file mode 100644 index 4f533a717..000000000 --- a/src/components/GuiMenu.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef _GUIMENU_H_ -#define _GUIMENU_H_ - -#include "../GuiComponent.h" -#include "TextListComponent.h" - -class GuiGameList; - -class GuiMenu : public GuiComponent -{ -public: - GuiMenu(Window* window, GuiGameList* parent); - virtual ~GuiMenu(); - - bool input(InputConfig* config, Input input) override; - void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; - -private: - GuiGameList* mParent; - TextListComponent* mList; - - void populateList(); - void executeCommand(std::string command); -}; - -#endif diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 6c129099e..41e39502e 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -20,7 +20,7 @@ Eigen::Vector2f ImageComponent::getCenter() const } ImageComponent::ImageComponent(Window* window, float offsetX, float offsetY, std::string path, float targetWidth, float targetHeight, bool allowUpscale) : GuiComponent(window), - mTiled(false), mAllowUpscale(allowUpscale), mFlipX(false), mFlipY(false), mOrigin(0.5, 0.5), mTargetSize(targetWidth, targetHeight), mColorShift(0xFFFFFFFF) + mTiled(false), mAllowUpscale(allowUpscale), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(targetWidth, targetHeight), mColorShift(0xFFFFFFFF) { setPosition(offsetX, offsetY); @@ -70,16 +70,20 @@ void ImageComponent::resize() void ImageComponent::setImage(std::string path) { - mPath = path; - - if(mPath.empty() || !ResourceManager::getInstance()->fileExists(mPath)) + if(path.empty() || !ResourceManager::getInstance()->fileExists(path)) mTexture.reset(); else - mTexture = TextureResource::get(mPath); + mTexture = TextureResource::get(path); resize(); } +void ImageComponent::setImage(const std::shared_ptr& texture) +{ + mTexture = texture; + resize(); +} + void ImageComponent::setImage(const char* path, size_t length) { mTexture.reset(); @@ -227,7 +231,7 @@ void ImageComponent::drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* col bool ImageComponent::hasImage() { - return !mPath.empty(); + return (bool)mTexture; } void ImageComponent::copyScreen() diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index df0d1ece8..ce3dd9c3c 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -21,6 +21,7 @@ public: void copyScreen(); //Copy the entire screen into a texture for us to use. void setImage(std::string path); //Loads the image at the given filepath. void setImage(const char* image, size_t length); //Loads image from memory. + void setImage(const std::shared_ptr& texture); //Use an already existing texture. void setOrigin(float originX, float originY); //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) void setTiling(bool tile); //Enables or disables tiling. Must be called before loading an image or resizing will be weird. void setResize(float width, float height, bool allowUpscale); @@ -48,8 +49,6 @@ private: void buildImageArray(int x, int y, GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); //writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position void drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* colors, unsigned int count = 6); //draws the given set of points and texture coordinates, number of coordinate pairs may be specified (default 6) - std::string mPath; - unsigned int mColorShift; std::shared_ptr mTexture; diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index df9bb222d..9a9e9f906 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -10,102 +10,98 @@ #include #include "../Sound.h" #include "../Log.h" +#include "../ThemeData.h" +#include -#define MARQUEE_DELAY 900 -#define MARQUEE_SPEED 16 -#define MARQUEE_RATE 3 +#define THEME_FONT "listFont" +#define THEME_SELECTOR_COLOR "listSelectorColor" +#define THEME_HIGHLIGHTED_COLOR "listSelectedColor" +#define THEME_SCROLL_SOUND "listScrollSound" +static const int THEME_COLOR_ID_COUNT = 2; +static const char* const THEME_ENTRY_COLOR[THEME_COLOR_ID_COUNT] = { "listPrimaryColor", "listSecondaryColor" }; //A graphical list. Supports multiple colors for rows and scrolling. template class TextListComponent : public GuiComponent { public: - TextListComponent(Window* window, float offsetX, float offsetY, std::shared_ptr font); + TextListComponent(Window* window); virtual ~TextListComponent(); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; - void onPositionChanged() override; - - void addObject(std::string name, T obj, unsigned int color = 0xFF0000); - void clear(); - - std::string getSelectedName(); - T getSelectedObject(); - int getSelection(); - void stopScrolling(); - bool isScrolling(); - - void setSelectorColor(unsigned int selectorColor); - void setSelectedTextColor(unsigned int selectedColor); - void setCentered(bool centered); - void setScrollSound(std::shared_ptr & sound); - void setTextOffsetX(int textoffsetx); - - int getObjectCount(); - T getObject(int i); - void setSelection(int i); - - void setFont(std::shared_ptr f); - -private: - static const int SCROLLDELAY = 507; - static const int SCROLLTIME = 200; - - void scroll(); //helper method, scrolls in whatever direction scrollDir is - void setScrollDir(int val); //helper method, set mScrollDir as well as reset marquee stuff - - int mScrollDir, mScrollAccumulator; - bool mScrolling; - - int mMarqueeOffset; - int mMarqueeTime; - - std::shared_ptr mFont; - unsigned int mSelectorColor, mSelectedTextColorOverride; - bool mDrawCentered; - - int mTextOffsetX; - struct ListRow { std::string name; T object; - unsigned int color; + unsigned int colorId; }; + void add(const std::string& name, const T& obj, unsigned int colorId); + void remove(const T& obj); + void clear(); + + inline const std::string& getSelectedName() const { return mRowVector.at(mCursor).name; } + inline T getSelected() const { return mRowVector.at(mCursor).object; } + inline const std::vector& getList() const { return mRowVector; } + + void setCursor(const T& select); + + void stopScrolling(); + inline bool isScrolling() const { return mScrollDir != 0; } + + inline void setTheme(const std::shared_ptr& theme) { mTheme = theme; } + inline void setCentered(bool centered) { mCentered = centered; } + + enum CursorState { + CURSOR_STOPPED, + CURSOR_SCROLLING + }; + + inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } + +private: + static const int MARQUEE_DELAY = 900; + static const int MARQUEE_SPEED = 16; + static const int MARQUEE_RATE = 3; + + static const int SCROLL_DELAY = 507; + static const int SCROLL_TIME = 150; + + void scroll(); //helper method, scrolls in whatever direction scrollDir is + void setScrollDir(int val); //helper method, set mScrollDir as well as reset marquee stuff + void onCursorChanged(CursorState state); + + int mScrollDir, mScrollAccumulator; + + int mMarqueeOffset; + int mMarqueeTime; + + std::shared_ptr mTheme; + bool mCentered; + std::vector mRowVector; - int mSelection; - std::shared_ptr mScrollSound; + int mCursor; + + std::function mCursorChangedCallback; }; template -TextListComponent::TextListComponent(Window* window, float offsetX, float offsetY, std::shared_ptr font) : GuiComponent(window) +TextListComponent::TextListComponent(Window* window) : + GuiComponent(window) { - mSelection = 0; + mCursor = 0; mScrollDir = 0; - mScrolling = 0; mScrollAccumulator = 0; - setPosition(offsetX, offsetY); - mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; - mTextOffsetX = 0; - mFont = font; - mSelectorColor = 0x000000FF; - mSelectedTextColorOverride = 0; - mScrollSound = NULL; - mDrawCentered = true; -} + mCentered = true; -template -void TextListComponent::onPositionChanged() -{ - setSize(Renderer::getScreenWidth() - getPosition().x(), Renderer::getScreenHeight() - getPosition().y()); + mTheme = ThemeData::getDefault(); } template @@ -119,8 +115,10 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); + std::shared_ptr font = mTheme->getFont(THEME_FONT); + const int cutoff = 0; - const int entrySize = mFont->getHeight() + 5; + const int entrySize = font->getHeight() + 5; int startEntry = 0; @@ -129,7 +127,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if((int)mRowVector.size() >= screenCount) { - startEntry = mSelection - (int)(screenCount * 0.5); + startEntry = mCursor - (int)(screenCount * 0.5); if(startEntry < 0) startEntry = 0; if(startEntry >= (int)mRowVector.size() - screenCount) @@ -140,7 +138,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(mRowVector.size() == 0) { - mFont->drawCenteredText("The list is empty.", 0, y, 0xFF0000FF); + font->drawCenteredText("The list is empty.", 0, y, 0xFF0000FF); return; } @@ -152,27 +150,28 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) dim = trans * dim - trans.translation(); Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); - //Renderer::pushClipRect(pos, dim); - //Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)getSize().x() * trans., (int)getSize().y() * trans.scale().y())); - //Renderer::pushClipRect(getGlobalOffset(), getSize()); - for(int i = startEntry; i < listCutoff; i++) { //draw selector bar - if(mSelection == i) + if(mCursor == i) { - Renderer::drawRect(0, (int)y, (int)getSize().x(), mFont->getHeight(), mSelectorColor); + Renderer::drawRect(0, (int)y, (int)getSize().x(), font->getHeight(), mTheme->getColor(THEME_SELECTOR_COLOR)); } ListRow row = mRowVector.at((unsigned int)i); - float x = (float)mTextOffsetX - (mSelection == i ? mMarqueeOffset : 0); - unsigned int color = (mSelection == i && mSelectedTextColorOverride != 0) ? mSelectedTextColorOverride : row.color; + float x = (float)(mCursor == i ? -mMarqueeOffset : 0); - if(mDrawCentered) - mFont->drawCenteredText(row.name, x, y, color); + unsigned int color; + if(mCursor == i && mTheme->getColor(THEME_HIGHLIGHTED_COLOR)) + color = mTheme->getColor(THEME_HIGHLIGHTED_COLOR); else - mFont->drawText(row.name, Eigen::Vector2f(x, y), color); + color = mTheme->getColor(THEME_ENTRY_COLOR[row.colorId]); + + if(mCentered) + font->drawCenteredText(row.name, x, y, color); + else + font->drawText(row.name, Eigen::Vector2f(x, y), color); y += entrySize; } @@ -216,7 +215,8 @@ bool TextListComponent::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedTo("down", input) || config->isMappedTo("up", input) || config->isMappedTo("pagedown", input) || config->isMappedTo("pageup", input)) + if(config->isMappedTo("down", input) || config->isMappedTo("up", input) || + config->isMappedTo("pagedown", input) || config->isMappedTo("pageup", input)) { stopScrolling(); } @@ -232,14 +232,15 @@ void TextListComponent::setScrollDir(int val) mScrollDir = val; mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; + mScrollAccumulator = -SCROLL_DELAY; } template void TextListComponent::stopScrolling() { mScrollAccumulator = 0; - mScrolling = false; mScrollDir = 0; + onCursorChanged(CURSOR_STOPPED); } template @@ -249,31 +250,17 @@ void TextListComponent::update(int deltaTime) { mScrollAccumulator += deltaTime; - if(!mScrolling) + while(mScrollAccumulator >= SCROLL_TIME) { - if(mScrollAccumulator >= SCROLLDELAY) - { - mScrollAccumulator = SCROLLTIME; - mScrolling = true; - } + mScrollAccumulator -= SCROLL_TIME; + scroll(); } - if(mScrolling) - { - mScrollAccumulator += deltaTime; - - while(mScrollAccumulator >= SCROLLTIME) - { - mScrollAccumulator -= SCROLLTIME; - - scroll(); - } - } }else{ //if we're not scrolling and this object's text goes outside our size, marquee it! std::string text = getSelectedName(); - Eigen::Vector2f textSize = mFont->sizeText(text); + Eigen::Vector2f textSize = mTheme->getFont(THEME_FONT)->sizeText(text); //it's long enough to marquee if(textSize.x() - mMarqueeOffset > getSize().x() - 12) @@ -293,126 +280,94 @@ void TextListComponent::update(int deltaTime) template void TextListComponent::scroll() { - mSelection += mScrollDir; + mCursor += mScrollDir; - if(mSelection < 0) + if(mCursor < 0) { if(mScrollDir < -1) - mSelection = 0; + mCursor = 0; else - mSelection += mRowVector.size(); + mCursor += mRowVector.size(); } - if(mSelection >= (int)mRowVector.size()) + if(mCursor >= (int)mRowVector.size()) { if(mScrollDir > 1) - mSelection = (int)mRowVector.size() - 1; + mCursor = (int)mRowVector.size() - 1; else - mSelection -= mRowVector.size(); + mCursor -= mRowVector.size(); } - if(mScrollSound) - mScrollSound->play(); + onCursorChanged(CURSOR_SCROLLING); + mTheme->playSound("scrollSound"); } //list management stuff template -void TextListComponent::addObject(std::string name, T obj, unsigned int color) +void TextListComponent::add(const std::string& name, const T& obj, unsigned int color) { + if(color >= THEME_COLOR_ID_COUNT) + { + LOG(LogError) << "Invalid row color Id (" << color << ")"; + color = 0; + } + ListRow row = {name, obj, color}; mRowVector.push_back(row); } +template +void TextListComponent::remove(const T& obj) +{ + for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) + { + if((*it).object == obj) + { + if(mCursor > 0 && it - mRowVector.begin() >= mCursor) + { + mCursor--; + onCursorChanged(CURSOR_STOPPED); + } + + mRowVector.erase(it); + return; + } + } + + LOG(LogError) << "Tried to remove an object we couldn't find"; +} + template void TextListComponent::clear() { mRowVector.clear(); - mSelection = 0; + mCursor = 0; + mScrollDir = 0; mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; + onCursorChanged(CURSOR_STOPPED); } template -std::string TextListComponent::getSelectedName() +void TextListComponent::setCursor(const T& obj) { - if((int)mRowVector.size() > mSelection) - return mRowVector.at(mSelection).name; - else - return ""; + for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) + { + if((*it).object == obj) + { + mCursor = it - mRowVector.begin(); + onCursorChanged(CURSOR_STOPPED); + return; + } + } + + LOG(LogError) << "Tried to set cursor to object we couldn't find"; } template -T TextListComponent::getSelectedObject() +void TextListComponent::onCursorChanged(CursorState state) { - if((int)mRowVector.size() > mSelection) - return mRowVector.at(mSelection).object; - else - return NULL; -} - -template -int TextListComponent::getSelection() -{ - return mSelection; -} - -template -bool TextListComponent::isScrolling() -{ - return mScrollDir != 0; -} - -template -void TextListComponent::setSelectorColor(unsigned int selectorColor) -{ - mSelectorColor = selectorColor; -} - -template -void TextListComponent::setSelectedTextColor(unsigned int selectedColor) -{ - mSelectedTextColorOverride = selectedColor; -} - -template -void TextListComponent::setCentered(bool centered) -{ - mDrawCentered = centered; -} - -template -void TextListComponent::setTextOffsetX(int textoffsetx) -{ - mTextOffsetX = textoffsetx; -} - -template -int TextListComponent::getObjectCount() -{ - return mRowVector.size(); -} - -template -T TextListComponent::getObject(int i) -{ - return mRowVector.at(i).object; -} - -template -void TextListComponent::setSelection(int i) -{ - mSelection = i; -} - -template -void TextListComponent::setScrollSound(std::shared_ptr & sound) -{ - mScrollSound = sound; -} - -template -void TextListComponent::setFont(std::shared_ptr font) -{ - mFont = font; + if(mCursorChangedCallback) + mCursorChangedCallback(state); } #endif diff --git a/src/components/ThemeComponent.cpp b/src/components/ThemeComponent.cpp deleted file mode 100644 index 43703f214..000000000 --- a/src/components/ThemeComponent.cpp +++ /dev/null @@ -1,393 +0,0 @@ -#include "ThemeComponent.h" -#include "../MathExp.h" -#include -#include "GuiGameList.h" -#include "ImageComponent.h" -#include -#include -#include "../Renderer.h" -#include "../Log.h" - -unsigned int ThemeComponent::getColor(std::string name) -{ - return mColorMap[name]; -} - -bool ThemeComponent::getBool(std::string name) -{ - return mBoolMap[name]; -} - -float ThemeComponent::getFloat(std::string name) -{ - return mFloatMap[name]; -} - -std::shared_ptr & ThemeComponent::getSound(std::string name) -{ - return mSoundMap[name]; -} - -std::string ThemeComponent::getString(std::string name) -{ - return mStringMap[name]; -} - -std::shared_ptr ThemeComponent::getListFont() -{ - if(mListFont) - return mListFont; - else - return Font::get(FONT_SIZE_MEDIUM); -} - -std::shared_ptr ThemeComponent::getDescriptionFont() -{ - if(mDescFont) - return mDescFont; - else - return Font::get(FONT_SIZE_SMALL); -} - -std::shared_ptr ThemeComponent::getFastSelectFont() -{ - if(mFastSelectFont) - return mFastSelectFont; - else - return Font::get(FONT_SIZE_LARGE); -} - -ThemeComponent::ThemeComponent(Window* window) : GuiComponent(window) -{ - mSoundMap["menuScroll"] = std::shared_ptr(new Sound); - mSoundMap["menuSelect"] = std::shared_ptr(new Sound); - mSoundMap["menuBack"] = std::shared_ptr(new Sound); - mSoundMap["menuOpen"] = std::shared_ptr(new Sound); - - //register all sound with the audiomanager - AudioManager::getInstance()->registerSound(mSoundMap["menuScroll"]); - AudioManager::getInstance()->registerSound(mSoundMap["menuSelect"]); - AudioManager::getInstance()->registerSound(mSoundMap["menuBack"]); - AudioManager::getInstance()->registerSound(mSoundMap["menuOpen"]); - - setDefaults(); -} - -ThemeComponent::~ThemeComponent() -{ - deleteComponents(); -} - -void ThemeComponent::setDefaults() -{ - mColorMap["primary"] = 0x0000FFFF; - mColorMap["secondary"] = 0x00FF00FF; - mColorMap["selector"] = 0x000000FF; - mColorMap["selected"] = 0x00000000; - mColorMap["description"] = 0x0000FFFF; - mColorMap["fastSelect"] = 0xFF0000FF; - - mBoolMap["hideHeader"] = false; - mBoolMap["hideDividers"] = false; - mBoolMap["listCentered"] = false; - - mFloatMap["listOffsetX"] = 0.5; - mFloatMap["listTextOffsetX"] = 0.005f; - mFloatMap["gameImageOriginX"] = 0.5; - mFloatMap["gameImageOriginY"] = 0; - mFloatMap["gameImageOffsetX"] = mFloatMap["listOffsetX"] / 2; - mFloatMap["gameImageOffsetY"] = (float)FONT_SIZE_LARGE / (float)Renderer::getScreenHeight(); - mFloatMap["gameImageWidth"] = mFloatMap["listOffsetX"]; - mFloatMap["gameImageHeight"] = 0; - - mSoundMap["menuScroll"]->loadFile(""); - mSoundMap["menuSelect"]->loadFile(""); - mSoundMap["menuBack"]->loadFile(""); - mSoundMap["menuOpen"]->loadFile(""); - - mStringMap["imageNotFoundPath"] = ""; - mStringMap["fastSelectFrame"] = ""; - - mListFont.reset(); - mDescFont.reset(); - mFastSelectFont.reset(); -} - -void ThemeComponent::deleteComponents() -{ - for(unsigned int i = 0; i < getChildCount(); i++) - { - delete getChild(i); - } - - clearChildren(); - - setDefaults(); -} - - -void ThemeComponent::readXML(std::string path, bool detailed) -{ - if(mPath == path) - return; - - setDefaults(); - deleteComponents(); - - mPath = path; - - if(path.empty()) - return; - - LOG(LogInfo) << "Loading theme \"" << path << "\"..."; - - pugi::xml_document doc; - pugi::xml_parse_result result = doc.load_file(path.c_str()); - - if(!result) - { - LOG(LogError) << "Error parsing theme \"" << path << "\"!\n" << " " << result.description(); - return; - } - - pugi::xml_node root; - - if(!detailed) - { - //if we're using the basic view, check if there's a basic version of the theme - root = doc.child("basicTheme"); - } - - if(!root) - { - root = doc.child("theme"); - } - - if(!root) - { - LOG(LogError) << "No theme tag found in theme \"" << path << "\"!"; - return; - } - - //load non-component theme stuff - mColorMap["primary"] = resolveColor(root.child("listPrimaryColor").text().get(), mColorMap["primary"]); - mColorMap["secondary"] = resolveColor(root.child("listSecondaryColor").text().get(), mColorMap["secondary"]); - mColorMap["selector"] = resolveColor(root.child("listSelectorColor").text().get(), mColorMap["selector"]); - mColorMap["selected"] = resolveColor(root.child("listSelectedColor").text().get(), mColorMap["selected"]); - mColorMap["description"] = resolveColor(root.child("descColor").text().get(), mColorMap["description"]); - mColorMap["fastSelect"] = resolveColor(root.child("fastSelectColor").text().get(), mColorMap["fastSelect"]); - - mBoolMap["hideHeader"] = root.child("hideHeader") != 0; - mBoolMap["hideDividers"] = root.child("hideDividers") != 0; - - //list stuff - mBoolMap["listCentered"] = !root.child("listLeftAlign"); - mFloatMap["listOffsetX"] = strToFloat(root.child("listOffsetX").text().get(), mFloatMap["listOffsetX"]); - mFloatMap["listTextOffsetX"] = strToFloat(root.child("listTextOffsetX").text().get(), mFloatMap["listTextOffsetX"]); - - //game image stuff - std::string artPos = root.child("gameImagePos").text().get(); - std::string artDim = root.child("gameImageDim").text().get(); - std::string artOrigin = root.child("gameImageOrigin").text().get(); - - std::string artPosX, artPosY, artWidth, artHeight, artOriginX, artOriginY; - splitString(artPos, ' ', &artPosX, &artPosY); - splitString(artDim, ' ', &artWidth, &artHeight); - splitString(artOrigin, ' ', &artOriginX, &artOriginY); - - mFloatMap["gameImageOffsetX"] = resolveExp(artPosX, mFloatMap["gameImageOffsetX"]); - mFloatMap["gameImageOffsetY"] = resolveExp(artPosY, mFloatMap["gameImageOffsetY"]); - mFloatMap["gameImageWidth"] = resolveExp(artWidth, mFloatMap["gameImageWidth"]); - mFloatMap["gameImageHeight"] = resolveExp(artHeight, mFloatMap["gameImageHeight"]); - mFloatMap["gameImageOriginX"] = resolveExp(artOriginX, mFloatMap["gameImageOriginX"]); - mFloatMap["gameImageOriginY"] = resolveExp(artOriginY, mFloatMap["gameImageOriginY"]); - - mStringMap["imageNotFoundPath"] = expandPath(root.child("gameImageNotFound").text().get()); - mStringMap["fastSelectFrame"] = expandPath(root.child("fastSelectFrame").text().get()); - - //sounds - mSoundMap["menuScroll"]->loadFile(expandPath(root.child("menuScrollSound").text().get())); - mSoundMap["menuSelect"]->loadFile(expandPath(root.child("menuSelectSound").text().get())); - mSoundMap["menuBack"]->loadFile(expandPath(root.child("menuBackSound").text().get())); - mSoundMap["menuOpen"]->loadFile(expandPath(root.child("menuOpenSound").text().get())); - - //fonts - mListFont = resolveFont(root.child("listFont"), Font::getDefaultPath(), FONT_SIZE_MEDIUM); - mDescFont = resolveFont(root.child("descriptionFont"), Font::getDefaultPath(), FONT_SIZE_SMALL); - mFastSelectFont = resolveFont(root.child("fastSelectFont"), Font::getDefaultPath(), FONT_SIZE_LARGE); - - //actually read the components - createComponentChildren(root, this); - - LOG(LogInfo) << "Theme loading complete."; -} - -//recursively creates components -void ThemeComponent::createComponentChildren(pugi::xml_node node, GuiComponent* parent) -{ - for(pugi::xml_node data = node.child("component"); data; data = data.next_sibling("component")) - { - GuiComponent* nextComp = createElement(data, parent); - - if(nextComp) - createComponentChildren(data, nextComp); - } -} - -//takes an XML element definition and creates an object from it -GuiComponent* ThemeComponent::createElement(pugi::xml_node data, GuiComponent* parent) -{ - std::string type = data.child("type").text().get(); - - if(type == "image") - { - std::string path = expandPath(data.child("path").text().get()); - - if(!boost::filesystem::exists(path)) - { - LOG(LogError) << "Error - theme image \"" << path << "\" does not exist."; - return NULL; - } - - std::string pos = data.child("pos").text().get(); - std::string dim = data.child("dim").text().get(); - std::string origin = data.child("origin").text().get(); - - bool tiled = data.child("tiled") != 0; - - //split position and dimension information - std::string posX, posY; - splitString(pos, ' ', &posX, &posY); - - std::string dimW, dimH; - splitString(dim, ' ', &dimW, &dimH); - - std::string originX, originY; - splitString(origin, ' ', &originX, &originY); - - //resolve to pixels from percentages/variables - float x = resolveExp(posX) * Renderer::getScreenWidth(); - float y = resolveExp(posY) * Renderer::getScreenHeight(); - float w = resolveExp(dimW) * Renderer::getScreenWidth(); - float h = resolveExp(dimH) * Renderer::getScreenHeight(); - - float ox = strToFloat(originX); - float oy = strToFloat(originY); - - ImageComponent* comp = new ImageComponent(mWindow, x, y, "", w, h, true); - comp->setOrigin(ox, oy); - comp->setTiling(tiled); - comp->setImage(path); - - addChild(comp); - return comp; - } - - - LOG(LogError) << "Theme component type \"" << type << "\" unknown!"; - return NULL; -} - -//expands a file path (./ becomes the directory of this theme file, ~/ becomes $HOME/) -std::string ThemeComponent::expandPath(std::string path) -{ - if(path.empty()) - return ""; - - if(path[0] == '~') - path = getHomePath() + path.substr(1, path.length() - 1); - else if(path[0] == '.') - path = boost::filesystem::path(mPath).parent_path().string() + path.substr(1, path.length() - 1); - - return path; -} - -//takes a string containing a mathematical expression (possibly including variables) and resolves it to a float value -float ThemeComponent::resolveExp(std::string str, float defaultVal) -{ - if(str.empty()) - return defaultVal; - - MathExp exp; - exp.setExpression(str); - - //set variables - exp.setVariable("headerHeight", (float)(FONT_SIZE_LARGE / Renderer::getScreenHeight())); - exp.setVariable("infoWidth", mFloatMap["listOffsetX"]); - - return exp.eval(); -} - -//takes a string of hex and resolves it to an integer -unsigned int ThemeComponent::resolveColor(std::string str, unsigned int defaultColor) -{ - if(str.empty()) - return defaultColor; - - if(str.length() != 6 && str.length() != 8) - { - LOG(LogError) << "Color \"" << str << "\" is not a valid hex color! Must be 6 or 8 characters."; - return defaultColor; - } - - //if there's no alpha specified, assume FF - if(str.length() == 6) - str += "FF"; - - unsigned int ret; - std::stringstream ss; - ss << std::hex << str; - ss >> ret; - - return ret; -} - -//splits a string in two at the first instance of the delimiter -void ThemeComponent::splitString(std::string str, char delim, std::string* before, std::string* after) -{ - if(str.empty()) - return; - - size_t split = str.find(delim); - if(split != std::string::npos) - { - *before = str.substr(0, split); - *after = str.substr(split + 1, str.length() - split - 1); - }else{ - LOG(LogError) << "Tried to splt string \"" << str << "\" with delimiter '" << delim << "', but delimiter was not found!"; - } -} - -//converts a string to a float -float ThemeComponent::strToFloat(std::string str, float defaultVal) -{ - if(str.empty()) - return defaultVal; - - float ret; - std::stringstream ss; - ss << str; - ss >> ret; - return ret; -} - -std::shared_ptr ThemeComponent::resolveFont(pugi::xml_node node, std::string defaultPath, unsigned int defaultSize) -{ - if(!node) - return NULL; - - std::string path = expandPath(node.child("path").text().get()); - unsigned int size = (unsigned int)(strToFloat(node.child("size").text().get()) * Renderer::getScreenHeight()); - - if(!boost::filesystem::exists(path)) - { - path = defaultPath; - } - - if(size == 0) - { - size = defaultSize; - } - - return Font::get(size, path); -} diff --git a/src/components/ThemeComponent.h b/src/components/ThemeComponent.h deleted file mode 100644 index 7a3057860..000000000 --- a/src/components/ThemeComponent.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef _THEMECOMPONENT_H_ -#define _THEMECOMPONENT_H_ - -#include - -#include "../GuiComponent.h" -#include "../pugiXML/pugixml.hpp" -#include "../AudioManager.h" -#include "../resources/Font.h" - -//This class loads an XML-defined list of GuiComponents. -class ThemeComponent : public GuiComponent -{ -public: - ThemeComponent(Window* window); - virtual ~ThemeComponent(); - - void readXML(std::string path, bool detailed); - - unsigned int getColor(std::string name); - bool getBool(std::string name); - float getFloat(std::string name); - std::shared_ptr & getSound(std::string name); - std::string getString(std::string name); - - std::shared_ptr getListFont(); - std::shared_ptr getDescriptionFont(); - std::shared_ptr getFastSelectFont(); - -private: - void setDefaults(); - void deleteComponents(); - void createComponentChildren(pugi::xml_node node, GuiComponent* parent); - GuiComponent* createElement(pugi::xml_node data, GuiComponent* parent); - - //utility functions - std::string expandPath(std::string path); - float resolveExp(std::string str, float defaultVal = 0.0); - unsigned int resolveColor(std::string str, unsigned int defaultColor = 0x000000FF); - void splitString(std::string str, char delim, std::string* before, std::string* after); - float strToFloat(std::string str, float defaultVal = 0.0f); - std::shared_ptr resolveFont(pugi::xml_node node, std::string defaultPath, unsigned int defaultSize); - - std::string mPath; - - std::map mColorMap; - std::map mBoolMap; - std::map mFloatMap; - std::map> mSoundMap; - std::map mStringMap; - - std::shared_ptr mListFont; - std::shared_ptr mDescFont; - std::shared_ptr mFastSelectFont; -}; - -#endif diff --git a/src/main.cpp b/src/main.cpp index 0c905fd38..0921740b7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,7 +5,7 @@ #include #include #include "Renderer.h" -#include "components/GuiGameList.h" +#include "views/ViewController.h" #include "SystemData.h" #include #include "components/GuiDetectDevice.h" @@ -127,9 +127,16 @@ int main(int argc, char* argv[]) Log::open(); LOG(LogInfo) << "EmulationStation - " << PROGRAM_VERSION_STRING; - //always close the log and deinit the BCM library on exit + //always close the log on exit atexit(&onExit); + Window window; + if(!scrape_cmdline && !window.init(width, height)) + { + LOG(LogError) << "Window failed to initialize!"; + return 1; + } + //try loading the system config file if(!SystemData::loadConfig(SystemData::getConfigPath(), true)) { @@ -144,26 +151,19 @@ int main(int argc, char* argv[]) return 1; } - //run the command line scraper ui then quit + //run the command line scraper then quit if(scrape_cmdline) { return run_scraper_cmdline(); } - Window window; - if(!window.init(width, height)) - { - LOG(LogError) << "Window failed to initialize!"; - return 1; - } - //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug) SDL_JoystickEventState(SDL_DISABLE); //choose which GUI to open depending on if an input configuration already exists if(fs::exists(InputManager::getConfigPath())) { - GuiGameList::create(&window); + window.getViewController()->goToSystemSelect(); }else{ window.pushGui(new GuiDetectDevice(&window)); } diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index b463160b2..08a9487f2 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -101,13 +101,7 @@ void Font::unload(std::shared_ptr& rm) std::shared_ptr Font::get(int size, const std::string& path) { - if(path.empty()) - { - LOG(LogError) << "Tried to get font with no path!"; - return std::shared_ptr(); - } - - std::pair def(path, size); + std::pair def(path.empty() ? getDefaultPath() : path, size); auto foundFont = sFontMap.find(def); if(foundFont != sFontMap.end()) { diff --git a/src/views/BasicGameListView.cpp b/src/views/BasicGameListView.cpp new file mode 100644 index 000000000..f338da262 --- /dev/null +++ b/src/views/BasicGameListView.cpp @@ -0,0 +1,174 @@ +#include "BasicGameListView.h" +#include "ViewController.h" +#include "../Renderer.h" +#include "../Window.h" +#include "../ThemeData.h" + +BasicGameListView::BasicGameListView(Window* window, FileData* root) + : GameListView(window, root), + mHeaderText(window), mHeaderImage(window), mBackground(window), mList(window) +{ + mHeaderText.setText("Header"); + mHeaderText.setSize(mSize.x(), 0); + mHeaderText.setPosition(0, 0); + mHeaderText.setCentered(true); + + mHeaderImage.setResize(0, mSize.y() * 0.2f, false); + mHeaderImage.setOrigin(0.5f, 0.0f); + mHeaderImage.setPosition(mSize.x() / 2, 0); + + mBackground.setResize(mSize.x(), mSize.y(), true); + + mList.setSize(mSize.x(), mSize.y() * 0.8f); + mList.setPosition(0, mSize.y() * 0.2f); + + populateList(root); + + addChild(&mBackground); + addChild(&mList); + addChild(&mHeaderText); +} + +void BasicGameListView::setTheme(const std::shared_ptr& theme) +{ + const ImageDef& bg = theme->getImage("backgroundImage"); + mBackground.setTiling(bg.tile); + mBackground.setImage(bg.getTexture()); + + const ImageDef& hdr = theme->getImage("headerImage"); + mHeaderImage.setTiling(hdr.tile); + mHeaderImage.setImage(hdr.getTexture()); + + if(mHeaderImage.hasImage()) + { + removeChild(&mHeaderText); + addChild(&mHeaderImage); + }else{ + addChild(&mHeaderText); + removeChild(&mHeaderImage); + } + + mList.setTheme(theme); +} + +void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) +{ + // we don't care about metadata changes (since we don't display metadata), + // so we just ignore the FILE_METADATA_CHANGED case + + // if it's immediately inside our current folder + if(file->getParent() == getCurrentFolder()) + { + if(change == FILE_REMOVED) + { + mList.remove(file); // will automatically make sure cursor ends up in a "safe" place + }else if(change == FILE_ADDED) + { + FileData* cursor = getCursor(); + populateList(cursor->getParent()); + mList.setCursor(cursor); + } + } +} + +void buildHeader(FileData* from, std::stringstream& ss) +{ + if(from->getParent()) + { + buildHeader(from->getParent(), ss); + ss << " -> "; + } + + ss << from->getName(); +} + +void BasicGameListView::populateList(FileData* root) +{ + mList.clear(); + + std::stringstream ss; + buildHeader(root, ss); + mHeaderText.setText(ss.str()); + + for(auto it = root->getChildren().begin(); it != root->getChildren().end(); it++) + { + mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); + } +} + +void BasicGameListView::setCursor(FileData* cursor) +{ + if(cursor->getParent() != getCursor()->getParent()) + { + // Rebuild the folder stack + std::stack path; + FileData* cur = cursor; + while((cur = cur->getParent()) != mRoot) + path.push(cur); + + while(!mCursorStack.empty()) + mCursorStack.pop(); + + while(!path.empty()) // put back in reverse order (flip) + { + mCursorStack.push(path.top()); + path.pop(); + } + + populateList(cursor->getParent()); + } + + mList.setCursor(cursor); +} + +bool BasicGameListView::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + if(config->isMappedTo("a", input)) + { + if(mList.getList().size() > 0) + { + FileData* cursor = getCursor(); + if(cursor->getType() == GAME) + { + mWindow->getViewController()->launch(cursor); + }else{ + // it's a folder + if(cursor->getChildren().size() > 0) + { + mCursorStack.push(cursor); + populateList(cursor); + } + } + + return true; + } + }else if(config->isMappedTo("b", input)) + { + if(mCursorStack.size()) + { + populateList(mCursorStack.top()->getParent()); + mList.setCursor(mCursorStack.top()); + mCursorStack.pop(); + }else{ + mList.stopScrolling(); + mWindow->getViewController()->goToSystemSelect(); + } + + return true; + }else if(config->isMappedTo("right", input)) + { + mList.stopScrolling(); + mWindow->getViewController()->goToNextSystem(); + return true; + }else if(config->isMappedTo("left", input)) + { + mList.stopScrolling(); + mWindow->getViewController()->goToPrevSystem(); + return true; + } + } + + return GameListView::input(config, input); +} diff --git a/src/views/BasicGameListView.h b/src/views/BasicGameListView.h new file mode 100644 index 000000000..0eaed66ca --- /dev/null +++ b/src/views/BasicGameListView.h @@ -0,0 +1,34 @@ +#pragma once + +#include "GameListView.h" +#include "../components/TextListComponent.h" +#include "../components/TextComponent.h" +#include "../components/ImageComponent.h" + +class BasicGameListView : public GameListView +{ +public: + BasicGameListView(Window* window, FileData* root); + + // Called when a FileData* is added, has its metadata changed, or is removed + virtual void onFileChanged(FileData* file, FileChangeType change); + + virtual bool input(InputConfig* config, Input input) override; + + virtual void setTheme(const std::shared_ptr& theme) override; + + inline FileData* getCursor() { return mList.getSelected(); } + virtual void setCursor(FileData* file) override; + +protected: + void populateList(FileData* root); + + TextComponent mHeaderText; + ImageComponent mHeaderImage; + ImageComponent mBackground; + TextListComponent mList; + + inline FileData* getCurrentFolder() { return getCursor()->getParent(); } + + std::stack mCursorStack; +}; diff --git a/src/views/DetailedGameListView.cpp b/src/views/DetailedGameListView.cpp new file mode 100644 index 000000000..11ee74389 --- /dev/null +++ b/src/views/DetailedGameListView.cpp @@ -0,0 +1,64 @@ +#include "DetailedGameListView.h" + +DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : + BasicGameListView(window, root), + mDescContainer(window), mDescription(window), + mImage(window) +{ + const float padding = 0.02f; + + mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); + mList.setSize(mSize.x() * (0.50f - 2*padding), mList.getSize().y()); + mList.setCentered(false); + mList.setCursorChangedCallback([&](TextListComponent::CursorState state) { updateInfoPanel(); }); + + mImage.setOrigin(0.5f, 0.0f); + mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y()); + mImage.setResize(mSize.x() * (0.50f - 2*padding), 0, false); + addChild(&mImage); + + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.2f); + mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), 0); + mDescContainer.setAutoScroll((int)(1600 + mDescContainer.getSize().x()), 0.025f); + addChild(&mDescContainer); + + mDescription.setSize(mDescContainer.getSize().x(), 0); + mDescContainer.addChild(&mDescription); + + updateInfoPanel(); +} + +void DetailedGameListView::setTheme(const std::shared_ptr& theme) +{ + BasicGameListView::setTheme(theme); + + mDescription.setFont(theme->getFont("descriptionFont")); + mDescription.setColor(theme->getColor("descriptionColor")); +} + +void DetailedGameListView::updateInfoPanel() +{ + FileData* file = (mList.getList().size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); + + if(file == NULL) + { + mImage.setImage(""); + mDescription.setText(""); + }else{ + mImage.setImage(file->metadata.get("image")); + + mDescContainer.setPosition(mDescContainer.getPosition().x(), mImage.getPosition().y() + mImage.getSize().y() * 1.02f); + mDescContainer.setSize(mDescContainer.getSize().x(), mSize.y() - mDescContainer.getPosition().y()); + mDescContainer.resetAutoScrollTimer(); + + mDescription.setText(file->metadata.get("desc")); + } +} + +void DetailedGameListView::onFileChanged(FileData* file, FileChangeType type) +{ + BasicGameListView::onFileChanged(file, type); + + if(type == FILE_METADATA_CHANGED && file == getCursor()) + updateInfoPanel(); +} diff --git a/src/views/DetailedGameListView.h b/src/views/DetailedGameListView.h new file mode 100644 index 000000000..0bf988828 --- /dev/null +++ b/src/views/DetailedGameListView.h @@ -0,0 +1,25 @@ +#pragma once + +#include "BasicGameListView.h" +#include "../components/ImageComponent.h" +#include "../components/TextComponent.h" +#include "../components/ScrollableContainer.h" + +class DetailedGameListView : public BasicGameListView +{ +public: + DetailedGameListView(Window* window, FileData* root); + + virtual void setTheme(const std::shared_ptr& theme) override; + + virtual void onFileChanged(FileData* file, FileChangeType change); + +private: + void updateInfoPanel(); + + ImageComponent mImage; + + ScrollableContainer mDescContainer; + TextComponent mDescription; +}; + diff --git a/src/views/GameListView.cpp b/src/views/GameListView.cpp new file mode 100644 index 000000000..123677e9a --- /dev/null +++ b/src/views/GameListView.cpp @@ -0,0 +1,28 @@ +#include "GameListView.h" +#include "../Window.h" +#include "../components/GuiMetaDataEd.h" + +bool GameListView::input(InputConfig* config, Input input) +{ + if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_F3 && input.value != 0) + { + // open metadata editor + FileData* file = getCursor(); + ScraperSearchParams p; + p.game = file; + p.system = file->getSystem(); + mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), + std::bind(&GameListView::onFileChanged, this, file, FILE_METADATA_CHANGED), [file, this] { + boost::filesystem::remove(file->getPath()); //actually delete the file on the filesystem + file->getParent()->removeChild(file); //unlink it so list repopulations triggered from onFileChanged won't see it + onFileChanged(file, FILE_REMOVED); //tell the view + delete file; //free it + })); + return true; + }else if(config->isMappedTo("start", input) && input.value != 0) + { + // open menu + } + + return GuiComponent::input(config, input); +} diff --git a/src/views/GameListView.h b/src/views/GameListView.h new file mode 100644 index 000000000..ad3ef603b --- /dev/null +++ b/src/views/GameListView.h @@ -0,0 +1,36 @@ +#pragma once + +#include "../FileData.h" +#include "../Renderer.h" + +class Window; +class GuiComponent; +class FileData; +class ThemeData; + +//GameListView needs to know: +// What theme data to use +// The root FileData for the tree it should explore + +class GameListView : public GuiComponent +{ +public: + GameListView(Window* window, FileData* root) : GuiComponent(window), mRoot(root) + { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); } + + virtual ~GameListView() {} + + // Called when a new file is added, a file is removed, or a file's metadata changes. + virtual void onFileChanged(FileData* file, FileChangeType change) = 0; + + // Called to set or update theme. + virtual void setTheme(const std::shared_ptr& theme) = 0; + + virtual bool input(InputConfig* config, Input input) override; + + virtual FileData* getCursor() = 0; + virtual void setCursor(FileData*) = 0; + +protected: + FileData* mRoot; +}; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp new file mode 100644 index 000000000..de3f1f5ea --- /dev/null +++ b/src/views/ViewController.cpp @@ -0,0 +1,168 @@ +#include "ViewController.h" +#include "../Log.h" +#include "../SystemData.h" + +#include "BasicGameListView.h" +#include "DetailedGameListView.h" + +ViewController::ViewController(Window* window) + : GuiComponent(window), mCurrentView(nullptr), mCameraPos(Eigen::Affine3f::Identity()) +{ + mState.viewing = START_SCREEN; +} + +void ViewController::goToSystemSelect() +{ + mState.viewing = SYSTEM_SELECT; + goToSystem(SystemData::sSystemVector.at(0)); +} + +SystemData* getSystemCyclic(SystemData* from, bool reverse) +{ + std::vector& sysVec = SystemData::sSystemVector; + + if(reverse) + { + auto it = std::find(sysVec.rbegin(), sysVec.rend(), from); + assert(it != sysVec.rend()); + it++; + if(it == sysVec.rend()) + it = sysVec.rbegin(); + return *it; + }else{ + auto it = std::find(sysVec.begin(), sysVec.end(), from); + assert(it != sysVec.end()); + it++; + if(it == sysVec.end()) + it = sysVec.begin(); + return *it; + } +} + +void ViewController::goToNextSystem() +{ + assert(mState.viewing == SYSTEM); + + SystemData* system = mState.data.system; + if(system == NULL) + return; + + goToSystem(getSystemCyclic(system, false)); +} + +void ViewController::goToPrevSystem() +{ + assert(mState.viewing == SYSTEM); + + SystemData* system = mState.data.system; + if(system == NULL) + return; + + goToSystem(getSystemCyclic(system, true)); +} + +void ViewController::goToSystem(SystemData* system) +{ + mState.viewing = SYSTEM; + mState.data.system = system; + + mCurrentView = getSystemView(system); +} + +void ViewController::onFileChanged(FileData* file, FileChangeType change) +{ + for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) + { + it->second->onFileChanged(file, change); + } +} + +void ViewController::launch(FileData* game) +{ + if(game->getType() != GAME) + { + LOG(LogError) << "tried to launch something that isn't a game"; + return; + } + + // Effect TODO + game->getSystem()->launchGame(mWindow, game); +} + +std::shared_ptr ViewController::getSystemView(SystemData* system) +{ + //if we already made one, return that one + auto exists = mSystemViews.find(system); + if(exists != mSystemViews.end()) + return exists->second; + + //if we didn't, make it, remember it, and return it + std::shared_ptr view; + + if(system != NULL) + { + view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); + view->setTheme(system->getTheme()); + }else{ + LOG(LogError) << "null system"; // should eventually return an "all games" gamelist view + } + + std::vector& sysVec = SystemData::sSystemVector; + int id = std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); + view->setPosition(id * (float)Renderer::getScreenWidth(), 0); + + mSystemViews[system] = view; + return view; +} + + + +bool ViewController::input(InputConfig* config, Input input) +{ + if(mCurrentView) + return mCurrentView->input(config, input); + + return false; +} + + +float clamp(float min, float max, float val) +{ + if(val < min) + val = min; + else if(val > max) + val = max; + + return val; +} + +//http://en.wikipedia.org/wiki/Smoothstep +float smoothStep(float edge0, float edge1, float x) +{ + // Scale, and clamp x to 0..1 range + x = clamp(0, 1, (x - edge0)/(edge1 - edge0)); + + // Evaluate polynomial + return x*x*x*(x*(x*6 - 15) + 10); +} + +void ViewController::update(int deltaTime) +{ + if(mCurrentView) + { + mCurrentView->update(deltaTime); + + // move camera towards current view (should use smoothstep) + Eigen::Vector3f diff = (mCurrentView->getPosition() + mCameraPos.translation()) * 0.0075f * (float)deltaTime; + mCameraPos.translate(-diff); + } +} + +void ViewController::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * mCameraPos; + + //should really do some clipping here + for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) + it->second->render(trans); +} diff --git a/src/views/ViewController.h b/src/views/ViewController.h new file mode 100644 index 000000000..e678d5cab --- /dev/null +++ b/src/views/ViewController.h @@ -0,0 +1,61 @@ +#pragma once + +#include "GameListView.h" + +class SystemData; + +class ViewController : public GuiComponent +{ +public: + ViewController(Window* window); + + // Navigation. + void goToNextSystem(); + void goToPrevSystem(); + void goToSystem(SystemData* system); + void goToSystemSelect(); + void showQuickSystemSelect(); + + void onFileChanged(FileData* file, FileChangeType change); + + // Plays a nice launch effect and launches the game at the end of it. + // Once the game terminates, plays a return effect. + void launch(FileData* game); + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; + + enum ViewMode + { + START_SCREEN, + SYSTEM_SELECT, + SYSTEM + }; + + struct State + { + ViewMode viewing; + + inline SystemData* getSystem() const { assert(viewing == SYSTEM); return data.system; } + + private: + friend ViewController; + union + { + SystemData* system; + } data; + }; + + inline const State& getState() const { return mState; } + +private: + std::shared_ptr getSystemView(SystemData* system); + + std::shared_ptr mCurrentView; + std::map< SystemData*, std::shared_ptr > mSystemViews; + + Eigen::Affine3f mCameraPos; + + State mState; +}; From 87137df51e6dc8a5111934e95b32c7eb1b0db093 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 21 Nov 2013 14:06:01 -0600 Subject: [PATCH 094/386] Added infoBackgroundImage --- THEMES.md | 1 + src/ThemeData.cpp | 3 ++- src/views/BasicGameListView.cpp | 2 +- src/views/DetailedGameListView.cpp | 13 +++++++++++-- src/views/DetailedGameListView.h | 1 + src/views/ViewController.cpp | 18 +++++++++++++++++- 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/THEMES.md b/THEMES.md index 0adbf7858..f05a345fb 100644 --- a/THEMES.md +++ b/THEMES.md @@ -97,6 +97,7 @@ Pretty much any image format is supported. `` - No default. `` - No default. +`` - No default. Sounds ====== diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 63f35bf5a..21bb49d90 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -22,7 +22,8 @@ std::map ThemeData::sDefaultColors = boost::assign::m std::map ThemeData::sDefaultImages = boost::assign::map_list_of ("backgroundImage", ImageDef("", true)) - ("headerImage", ImageDef("", false)); + ("headerImage", ImageDef("", false)) + ("infoBackgroundImage", ImageDef("", false)); std::map ThemeData::sDefaultSounds = boost::assign::map_list_of ("scrollSound", SoundDef("")) diff --git a/src/views/BasicGameListView.cpp b/src/views/BasicGameListView.cpp index f338da262..3050e6a23 100644 --- a/src/views/BasicGameListView.cpp +++ b/src/views/BasicGameListView.cpp @@ -13,7 +13,7 @@ BasicGameListView::BasicGameListView(Window* window, FileData* root) mHeaderText.setPosition(0, 0); mHeaderText.setCentered(true); - mHeaderImage.setResize(0, mSize.y() * 0.2f, false); + mHeaderImage.setResize(0, mSize.y() * 0.185f, false); mHeaderImage.setOrigin(0.5f, 0.0f); mHeaderImage.setPosition(mSize.x() / 2, 0); diff --git a/src/views/DetailedGameListView.cpp b/src/views/DetailedGameListView.cpp index 11ee74389..332021aeb 100644 --- a/src/views/DetailedGameListView.cpp +++ b/src/views/DetailedGameListView.cpp @@ -3,9 +3,17 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), - mImage(window) + mImage(window), mInfoBackground(window) { - const float padding = 0.02f; + mHeaderImage.setPosition(mSize.x() * 0.25f, 0); + mHeaderImage.setResize(mSize.x() * 0.5f, 0, true); + + mInfoBackground.setPosition(0, mSize.y() * 0.5f, 0); + mInfoBackground.setOrigin(0, 0.5f); + mInfoBackground.setResize(mSize.x() * 0.5f, mSize.y(), true); + addChild(&mInfoBackground); + + const float padding = 0.01f; mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); mList.setSize(mSize.x() * (0.50f - 2*padding), mList.getSize().y()); @@ -34,6 +42,7 @@ void DetailedGameListView::setTheme(const std::shared_ptr& theme) mDescription.setFont(theme->getFont("descriptionFont")); mDescription.setColor(theme->getColor("descriptionColor")); + mInfoBackground.setImage(theme->getImage("infoBackgroundImage").getTexture()); } void DetailedGameListView::updateInfoPanel() diff --git a/src/views/DetailedGameListView.h b/src/views/DetailedGameListView.h index 0bf988828..f98eb586a 100644 --- a/src/views/DetailedGameListView.h +++ b/src/views/DetailedGameListView.h @@ -18,6 +18,7 @@ private: void updateInfoPanel(); ImageComponent mImage; + ImageComponent mInfoBackground; ScrollableContainer mDescContainer; TextComponent mDescription; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index de3f1f5ea..6b1fabf98 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -101,7 +101,23 @@ std::shared_ptr ViewController::getSystemView(SystemData* system) if(system != NULL) { - view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); + //decide type + bool detailed = false; + std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); + for(auto it = files.begin(); it != files.end(); it++) + { + if(!(*it)->getThumbnailPath().empty()) + { + detailed = true; + break; + } + } + + if(detailed) + view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); + else + view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); + view->setTheme(system->getTheme()); }else{ LOG(LogError) << "null system"; // should eventually return an "all games" gamelist view From 4b4fff39ef7f90859b4f69c6196172435b3de3cf Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 21 Nov 2013 16:39:02 -0600 Subject: [PATCH 095/386] Optimized the hell out of TextListComponent (and TextComponent a bit) --- src/components/TextComponent.cpp | 2 +- src/components/TextListComponent.h | 38 +++++++++++++++++++++++------- src/views/DetailedGameListView.cpp | 6 ++++- src/views/ViewController.cpp | 12 +++++++++- src/views/ViewController.h | 3 +-- 5 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 1d172f97f..4808b9d7d 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -83,7 +83,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mCentered) { - Eigen::Vector2f textSize = font->sizeWrappedText(mText, getSize().x()); + const Eigen::Vector2f& textSize = mTextCache->metrics.size; Eigen::Vector2f pos((getSize().x() - textSize.x()) / 2, 0); Eigen::Affine3f centeredTrans = trans; diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 9a9e9f906..4313694bf 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -37,6 +37,7 @@ public: std::string name; T object; unsigned int colorId; + std::shared_ptr textCache; }; void add(const std::string& name, const T& obj, unsigned int colorId); @@ -52,7 +53,7 @@ public: void stopScrolling(); inline bool isScrolling() const { return mScrollDir != 0; } - inline void setTheme(const std::shared_ptr& theme) { mTheme = theme; } + void setTheme(const std::shared_ptr& theme); inline void setCentered(bool centered) { mCentered = centered; } enum CursorState { @@ -113,8 +114,7 @@ template void TextListComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::setMatrix(trans); - + std::shared_ptr font = mTheme->getFont(THEME_FONT); const int cutoff = 0; @@ -155,10 +155,11 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) //draw selector bar if(mCursor == i) { + Renderer::setMatrix(trans); Renderer::drawRect(0, (int)y, (int)getSize().x(), font->getHeight(), mTheme->getColor(THEME_SELECTOR_COLOR)); } - ListRow row = mRowVector.at((unsigned int)i); + ListRow& row = mRowVector.at((unsigned int)i); float x = (float)(mCursor == i ? -mMarqueeOffset : 0); @@ -168,11 +169,22 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) else color = mTheme->getColor(THEME_ENTRY_COLOR[row.colorId]); - if(mCentered) - font->drawCenteredText(row.name, x, y, color); - else - font->drawText(row.name, Eigen::Vector2f(x, y), color); + if(!row.textCache) + row.textCache = std::unique_ptr(font->buildTextCache(row.name, 0, 0, 0x000000FF)); + row.textCache->setColor(color); + + Eigen::Vector3f offset(x, y, 0); + + if(mCentered) + offset[0] += (mSize.x() - row.textCache->metrics.size.x()) / 2; + + Eigen::Affine3f drawTrans = trans; + drawTrans.translate(offset); + Renderer::setMatrix(drawTrans); + + font->renderTextCache(row.textCache.get()); + y += entrySize; } @@ -370,4 +382,14 @@ void TextListComponent::onCursorChanged(CursorState state) mCursorChangedCallback(state); } +template +void TextListComponent::setTheme(const std::shared_ptr& theme) +{ + mTheme = theme; + + // invalidate text caches in case font changed + for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) + it->textCache.reset(); +} + #endif diff --git a/src/views/DetailedGameListView.cpp b/src/views/DetailedGameListView.cpp index 332021aeb..ba1d1cbdb 100644 --- a/src/views/DetailedGameListView.cpp +++ b/src/views/DetailedGameListView.cpp @@ -6,7 +6,6 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mImage(window), mInfoBackground(window) { mHeaderImage.setPosition(mSize.x() * 0.25f, 0); - mHeaderImage.setResize(mSize.x() * 0.5f, 0, true); mInfoBackground.setPosition(0, mSize.y() * 0.5f, 0); mInfoBackground.setOrigin(0, 0.5f); @@ -38,11 +37,16 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : void DetailedGameListView::setTheme(const std::shared_ptr& theme) { + mHeaderImage.setResize(mSize.x() * 0.5f, 0, true); BasicGameListView::setTheme(theme); + if(mHeaderImage.getPosition().y() + mHeaderImage.getSize().y() > mImage.getPosition().y()) + mHeaderImage.setResize(0, mSize.y() * 0.185f, true); + mDescription.setFont(theme->getFont("descriptionFont")); mDescription.setColor(theme->getColor("descriptionColor")); mInfoBackground.setImage(theme->getImage("infoBackgroundImage").getTexture()); + mInfoBackground.setTiling(theme->getImage("infoBackgroundImage").tile); } void DetailedGameListView::updateInfoPanel() diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 6b1fabf98..eb18e758d 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -180,5 +180,15 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) //should really do some clipping here for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) - it->second->render(trans); + { + Eigen::Vector3f pos = it->second->getPosition(); + Eigen::Vector2f size = it->second->getSize(); + + Eigen::Vector3f camPos = -trans.translation(); + Eigen::Vector2f camSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + if(pos.x() + size.x() >= camPos.x() && pos.y() + size.y() >= camPos.y() && + pos.x() <= camPos.x() + camSize.x() && pos.y() <= camPos.y() + camSize.y()) + it->second->render(trans); + } } diff --git a/src/views/ViewController.h b/src/views/ViewController.h index e678d5cab..faf17bc56 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -14,8 +14,7 @@ public: void goToPrevSystem(); void goToSystem(SystemData* system); void goToSystemSelect(); - void showQuickSystemSelect(); - + void onFileChanged(FileData* file, FileChangeType change); // Plays a nice launch effect and launches the game at the end of it. From cad914ab0102898f36e233d9b2d27be3076724dc Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 21 Nov 2013 19:52:09 -0600 Subject: [PATCH 096/386] Added verticalDividerImage to themes/detailedgamelistview. --- src/ThemeData.cpp | 3 ++- src/views/DetailedGameListView.cpp | 11 +++++++++-- src/views/DetailedGameListView.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 21bb49d90..8827c9abd 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -23,7 +23,8 @@ std::map ThemeData::sDefaultColors = boost::assign::m std::map ThemeData::sDefaultImages = boost::assign::map_list_of ("backgroundImage", ImageDef("", true)) ("headerImage", ImageDef("", false)) - ("infoBackgroundImage", ImageDef("", false)); + ("infoBackgroundImage", ImageDef("", false)) + ("verticalDividerImage", ImageDef("", false)); std::map ThemeData::sDefaultSounds = boost::assign::map_list_of ("scrollSound", SoundDef("")) diff --git a/src/views/DetailedGameListView.cpp b/src/views/DetailedGameListView.cpp index ba1d1cbdb..88cf7158b 100644 --- a/src/views/DetailedGameListView.cpp +++ b/src/views/DetailedGameListView.cpp @@ -3,15 +3,19 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), - mImage(window), mInfoBackground(window) + mImage(window), mInfoBackground(window), mDivider(window) { mHeaderImage.setPosition(mSize.x() * 0.25f, 0); - mInfoBackground.setPosition(0, mSize.y() * 0.5f, 0); + mInfoBackground.setPosition(0, mSize.y() * 0.5f); mInfoBackground.setOrigin(0, 0.5f); mInfoBackground.setResize(mSize.x() * 0.5f, mSize.y(), true); addChild(&mInfoBackground); + mDivider.setPosition(mSize.x() * 0.5f, mSize.y() * 0.5f); + mDivider.setOrigin(0.5f, 0.5f); + addChild(&mDivider); + const float padding = 0.01f; mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); @@ -47,6 +51,9 @@ void DetailedGameListView::setTheme(const std::shared_ptr& theme) mDescription.setColor(theme->getColor("descriptionColor")); mInfoBackground.setImage(theme->getImage("infoBackgroundImage").getTexture()); mInfoBackground.setTiling(theme->getImage("infoBackgroundImage").tile); + + mDivider.setImage(theme->getImage("verticalDividerImage").getTexture()); + mDivider.setResize((float)mDivider.getTextureSize().x(), mSize.y(), true); } void DetailedGameListView::updateInfoPanel() diff --git a/src/views/DetailedGameListView.h b/src/views/DetailedGameListView.h index f98eb586a..57a6ca06f 100644 --- a/src/views/DetailedGameListView.h +++ b/src/views/DetailedGameListView.h @@ -19,6 +19,7 @@ private: ImageComponent mImage; ImageComponent mInfoBackground; + ImageComponent mDivider; ScrollableContainer mDescContainer; TextComponent mDescription; From 94ca712759531e12c8045671db27ea3b8a2f533a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 23 Nov 2013 14:04:11 -0600 Subject: [PATCH 097/386] Redid GuiMenu. --- CMakeLists.txt | 2 + src/ThemeData.h | 4 ++ src/components/GuiMenu.cpp | 68 +++++++++++++++++++++++++++++ src/components/GuiMenu.h | 18 ++++++++ src/components/NinePatchComponent.h | 2 +- src/views/GameListView.cpp | 4 +- 6 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 src/components/GuiMenu.cpp create mode 100644 src/components/GuiMenu.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d2f7ce5c6..c287b8781 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,6 +179,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.h @@ -243,6 +244,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.cpp diff --git a/src/ThemeData.h b/src/ThemeData.h index ea4222801..572e6c63e 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -60,11 +60,15 @@ public: void setDefaults(); void loadFile(const std::string& path); + inline const FontDef& getFontDef(const std::string& identifier) const { return mFontMap.at(identifier); } inline std::shared_ptr getFont(const std::string& identifier) const { return mFontMap.at(identifier).get(); } inline const ImageDef& getImage(const std::string& identifier) const { return mImageMap.at(identifier); } inline unsigned int getColor(const std::string& identifier) const { return mColorMap.at(identifier); } void playSound(const std::string& identifier) const; + inline void setFont(const std::string& identifier, FontDef def) { mFontMap[identifier] = def; } + inline void setColor(const std::string& identifier, unsigned int color) { mColorMap[identifier] = color; } + private: static std::map sDefaultImages; static std::map sDefaultColors; diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp new file mode 100644 index 000000000..653c745fc --- /dev/null +++ b/src/components/GuiMenu.cpp @@ -0,0 +1,68 @@ +#include "GuiMenu.h" +#include "GuiSettingsMenu.h" +#include "GuiScraperStart.h" +#include "../Window.h" + +GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/button.png"), mList(window) +{ + mList.add("Settings", [&] { + mWindow->pushGui(new GuiSettingsMenu(mWindow)); + }, 0); + + mList.add("Scrape Systems", [&] { + mWindow->pushGui(new GuiScraperStart(mWindow)); + }, 0); + + mList.add("Restart", [] { + if(system("sudo shutdown -r now") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; + }, 0); + + mList.add("Shutdown", [] { + if(system("sudo shutdown -h now") != 0) + LOG(LogWarning) << "Shutdown terminated with non-zero result!"; + }, 1); + + mList.add("Exit", [] { + SDL_Event* ev = new SDL_Event(); + ev->type = SDL_QUIT; + SDL_PushEvent(ev); + }, 0); + + + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + mList.setPosition(mSize.x() * 0.175f, mSize.y() * 0.05f); + mList.setSize(mSize.x() * 0.65f, mSize.y() * 0.9f); + + mBackground.fitTo(Eigen::Vector2f(mList.getSize().x(), mSize.y()), Eigen::Vector3f(mList.getPosition().x(), 0, 0)); + addChild(&mBackground); + + std::shared_ptr theme = std::make_shared(); + theme->setFont("listFont", FontDef(0.09f, theme->getFontDef("listFont").path)); + theme->setColor("listSelectorColor", 0xBBBBBBFF); + theme->setColor("listPrimaryColor", 0x0000FFFF); + theme->setColor("listSecondaryColor", 0xFF0000FF); + mList.setTheme(theme); + + addChild(&mList); +} + +bool GuiMenu::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + if(config->isMappedTo("b", input) || config->isMappedTo("menu", input)) + { + delete this; + return true; + }else if(config->isMappedTo("a", input) && mList.getList().size() > 0) + { + mList.getSelected()(); + delete this; + return true; + } + } + + return GuiComponent::input(config, input); +} diff --git a/src/components/GuiMenu.h b/src/components/GuiMenu.h new file mode 100644 index 000000000..17249b7f3 --- /dev/null +++ b/src/components/GuiMenu.h @@ -0,0 +1,18 @@ +#pragma once + +#include "../GuiComponent.h" +#include "TextListComponent.h" +#include "NinePatchComponent.h" +#include + +class GuiMenu : public GuiComponent +{ +public: + GuiMenu(Window* window); + + bool input(InputConfig* config, Input input) override; + +private: + NinePatchComponent mBackground; + TextListComponent< std::function > mList; +}; diff --git a/src/components/NinePatchComponent.h b/src/components/NinePatchComponent.h index e3281b20b..fad6feb65 100644 --- a/src/components/NinePatchComponent.h +++ b/src/components/NinePatchComponent.h @@ -6,7 +6,7 @@ class NinePatchComponent : public GuiComponent { public: - NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor = 0xFFFFFFFF, unsigned int centerColor = 0xFFFFFFFF); + NinePatchComponent(Window* window, const std::string& path = "", unsigned int edgeColor = 0xFFFFFFFF, unsigned int centerColor = 0xFFFFFFFF); void render(const Eigen::Affine3f& parentTrans) override; diff --git a/src/views/GameListView.cpp b/src/views/GameListView.cpp index 123677e9a..e2153ef45 100644 --- a/src/views/GameListView.cpp +++ b/src/views/GameListView.cpp @@ -1,6 +1,7 @@ #include "GameListView.h" #include "../Window.h" #include "../components/GuiMetaDataEd.h" +#include "../components/GuiMenu.h" bool GameListView::input(InputConfig* config, Input input) { @@ -19,9 +20,10 @@ bool GameListView::input(InputConfig* config, Input input) delete file; //free it })); return true; - }else if(config->isMappedTo("start", input) && input.value != 0) + }else if(config->isMappedTo("menu", input) && input.value != 0) { // open menu + mWindow->pushGui(new GuiMenu(mWindow)); } return GuiComponent::input(config, input); From 0cfa38fcf9de766e444d8411e42a4f0e4b06f8b7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 25 Nov 2013 14:49:02 -0600 Subject: [PATCH 098/386] Mostly reimplemented the fast select GUI. Still not sure how I want to store sort state. I'd kind of like to move sorting out of the FileData tree altogether and into the display classes. --- CMakeLists.txt | 2 + THEMES.md | 4 + src/FileData.h | 3 +- src/ThemeData.cpp | 7 +- src/components/GuiFastSelect.cpp | 159 +++++++++++++++++++++++++++++ src/components/GuiFastSelect.h | 35 +++++++ src/components/TextComponent.cpp | 7 ++ src/components/TextComponent.h | 4 + src/views/BasicGameListView.cpp | 10 +- src/views/BasicGameListView.h | 2 +- src/views/DetailedGameListView.cpp | 4 +- src/views/DetailedGameListView.h | 2 +- src/views/GameListView.cpp | 12 +++ src/views/GameListView.h | 14 ++- 14 files changed, 253 insertions(+), 12 deletions(-) create mode 100644 src/components/GuiFastSelect.cpp create mode 100644 src/components/GuiFastSelect.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c287b8781..057868be7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,6 +174,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.h @@ -239,6 +240,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.cpp diff --git a/THEMES.md b/THEMES.md index f05a345fb..d8e2ecd9d 100644 --- a/THEMES.md +++ b/THEMES.md @@ -65,6 +65,7 @@ Fonts are defined like so: `` - Default size: 0.045. `` - Default size: 0.035. +`` - Default size: 0.15. Colors ====== @@ -81,6 +82,8 @@ or `` - Default: 000000FF. `` - Default: 00000000. `` - Default: 48474DFF. +`` - Default: FFFFFFFF. +`` - Default: DDDDDDFF. Images ====== @@ -98,6 +101,7 @@ Pretty much any image format is supported. `` - No default. `` - No default. `` - No default. +`` - No default. Sounds ====== diff --git a/src/FileData.h b/src/FileData.h index 9d9ef0175..b5f221093 100644 --- a/src/FileData.h +++ b/src/FileData.h @@ -17,7 +17,8 @@ enum FileChangeType { FILE_ADDED, FILE_METADATA_CHANGED, - FILE_REMOVED + FILE_REMOVED, + FILE_SORTED }; // Used for loading/saving gamelist.xml. diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 8827c9abd..62b60949e 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -11,14 +11,17 @@ // Defaults std::map ThemeData::sDefaultFonts = boost::assign::map_list_of ("listFont", FontDef(0.045f, "")) - ("descriptionFont", FontDef(0.035f, "")); + ("descriptionFont", FontDef(0.035f, "")) + ("fastSelectLetterFont", FontDef(0.15f, "")); std::map ThemeData::sDefaultColors = boost::assign::map_list_of ("listPrimaryColor", 0x0000FFFF) ("listSecondaryColor", 0x00FF00FF) ("listSelectorColor", 0x000000FF) ("listSelectedColor", 0x00000000) - ("descriptionColor", 0x48474DFF); + ("descriptionColor", 0x48474DFF) + ("fastSelectLetterColor", 0xFFFFFFFF) + ("fastSelectTextColor", 0xDDDDDDFF); std::map ThemeData::sDefaultImages = boost::assign::map_list_of ("backgroundImage", ImageDef("", true)) diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp new file mode 100644 index 000000000..f56acf0ef --- /dev/null +++ b/src/components/GuiFastSelect.cpp @@ -0,0 +1,159 @@ +#include "GuiFastSelect.h" +#include "../ThemeData.h" +#include "../FileSorts.h" +#include "../SystemData.h" + +static const std::string LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +GuiFastSelect::GuiFastSelect(Window* window, GameListView* gamelist) : GuiComponent(window), + mBackground(window, ":/button.png"), mSortText(window), mLetterText(window), mGameList(gamelist) +{ + setPosition(Renderer::getScreenWidth() * 0.2f, Renderer::getScreenHeight() * 0.2f); + setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.6f); + + const std::shared_ptr& theme = mGameList->getTheme(); + + mBackground.fitTo(mSize); + addChild(&mBackground); + + mLetterText.setSize(mSize.x(), mSize.y() * 0.75f); + mLetterText.setCentered(true); + mLetterText.setFromTheme(theme, "fastSelectLetterFont", "fastSelectLetterColor"); + addChild(&mLetterText); + + mSortText.setPosition(0, mSize.y() * 0.75f); + mSortText.setSize(mSize.x(), mSize.y() * 0.25f); + mSortText.setCentered(true); + mSortText.setFromTheme(theme, "descriptionFont", "fastSelectTextColor"); + addChild(&mSortText); + + mSortId = 0; // TODO + updateSortText(); + + mLetterId = LETTERS.find(mGameList->getCursor()->getName()[0]); + if(mLetterId == std::string::npos) + mLetterId = 0; + + mScrollDir = 0; + mScrollAccumulator = 0; + scroll(); // initialize the letter value +} + +bool GuiFastSelect::input(InputConfig* config, Input input) +{ + if(input.value == 0 && config->isMappedTo("select", input)) + { + // the user let go of select; make our changes to the gamelist and close this gui + updateGameListSort(); + updateGameListCursor(); + delete this; + return true; + } + + if(config->isMappedTo("up", input)) + { + if(input.value != 0) + setScrollDir(-1); + else + setScrollDir(0); + + return true; + }else if(config->isMappedTo("down", input)) + { + if(input.value != 0) + setScrollDir(1); + else + setScrollDir(0); + + return true; + }else if(config->isMappedTo("left", input) && input.value != 0) + { + mSortId = (mSortId + 1) % FileSorts::SortTypes.size(); + updateSortText(); + return true; + }else if(config->isMappedTo("right", input) && input.value != 0) + { + mSortId--; + if(mSortId < 0) + mSortId += FileSorts::SortTypes.size(); + + updateSortText(); + return true; + } + + return GuiComponent::input(config, input); +} + +void GuiFastSelect::setScrollDir(int dir) +{ + mScrollDir = dir; + scroll(); + mScrollAccumulator = -500; +} + +void GuiFastSelect::update(int deltaTime) +{ + if(mScrollDir != 0) + { + mScrollAccumulator += deltaTime; + while(mScrollAccumulator >= 150) + { + scroll(); + mScrollAccumulator -= 150; + } + } + + GuiComponent::update(deltaTime); +} + +void GuiFastSelect::scroll() +{ + mLetterId += mScrollDir; + if(mLetterId < 0) + mLetterId += LETTERS.length(); + else if(mLetterId >= (int)LETTERS.length()) + mLetterId -= LETTERS.length(); + + mLetterText.setText(LETTERS.substr(mLetterId, 1)); +} + +void GuiFastSelect::updateSortText() +{ + std::stringstream ss; + ss << "<- " << FileSorts::SortTypes.at(mSortId).description << " ->"; + mSortText.setText(ss.str()); +} + +void GuiFastSelect::updateGameListSort() +{ + const FileData::SortType& sort = FileSorts::SortTypes.at(mSortId); + + FileData* root = mGameList->getCursor()->getSystem()->getRootFolder(); + root->sort(sort); // will also recursively sort children + + // notify that the root folder was sorted + mGameList->onFileChanged(root, FILE_SORTED); +} + +void GuiFastSelect::updateGameListCursor() +{ + const std::vector& list = mGameList->getCursor()->getParent()->getChildren(); + + // only skip by letter when the sort mode is alphabetical + const FileData::SortType& sort = FileSorts::SortTypes.at(mSortId); + if(sort.comparisonFunction != &FileSorts::compareFileName) + return; + + // find the first entry in the list that either exactly matches our target letter or is beyond our target letter + for(auto it = list.cbegin(); it != list.cend(); it++) + { + char check = (*it)->getName().empty() ? 'A' : (*it)->getName()[0]; + + // if there's an exact match or we've passed it, set the cursor to this one + if(check == LETTERS[mLetterId] || (sort.ascending && check > LETTERS[mLetterId]) || (!sort.ascending && check < LETTERS[mLetterId])) + { + mGameList->setCursor(*it); + break; + } + } +} diff --git a/src/components/GuiFastSelect.h b/src/components/GuiFastSelect.h new file mode 100644 index 000000000..dfee83433 --- /dev/null +++ b/src/components/GuiFastSelect.h @@ -0,0 +1,35 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../views/GameListView.h" + +#include "NinePatchComponent.h" +#include "TextComponent.h" + +class GuiFastSelect : public GuiComponent +{ +public: + GuiFastSelect(Window* window, GameListView* gamelist); + + bool input(InputConfig* config, Input input); + void update(int deltaTime); + +private: + void setScrollDir(int dir); + void scroll(); + void updateGameListCursor(); + void updateGameListSort(); + void updateSortText(); + + int mSortId; + int mLetterId; + + int mScrollDir; + int mScrollAccumulator; + + NinePatchComponent mBackground; + TextComponent mSortText; + TextComponent mLetterText; + + GameListView* mGameList; +}; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 4808b9d7d..c3ae71ba2 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -2,6 +2,7 @@ #include "../Renderer.h" #include "../Log.h" #include "../Window.h" +#include "../ThemeData.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) @@ -137,3 +138,9 @@ std::string TextComponent::getValue() const { return mText; } + +void TextComponent::setFromTheme(const std::shared_ptr& theme, const std::string& fontIdentifier, const std::string& colorIdentifier) +{ + setFont(theme->getFont(fontIdentifier)); + setColor(theme->getColor(colorIdentifier)); +} diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 4cac3da4f..0b73d88e9 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -4,6 +4,8 @@ #include "../GuiComponent.h" #include "../resources/Font.h" +class ThemeData; + class TextComponent : public GuiComponent { public: @@ -26,6 +28,8 @@ public: std::shared_ptr getFont() const; + void setFromTheme(const std::shared_ptr& theme, const std::string& fontIdentifier, const std::string& colorIdentifier); + private: void calculateExtent(); diff --git a/src/views/BasicGameListView.cpp b/src/views/BasicGameListView.cpp index 3050e6a23..008411544 100644 --- a/src/views/BasicGameListView.cpp +++ b/src/views/BasicGameListView.cpp @@ -29,7 +29,7 @@ BasicGameListView::BasicGameListView(Window* window, FileData* root) addChild(&mHeaderText); } -void BasicGameListView::setTheme(const std::shared_ptr& theme) +void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) { const ImageDef& bg = theme->getImage("backgroundImage"); mBackground.setTiling(bg.tile); @@ -69,6 +69,14 @@ void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) mList.setCursor(cursor); } } + + // the root file was sorted (so children were sorted too) + if(file == mRoot && change == FILE_SORTED) + { + FileData* cursor = getCursor(); + populateList(cursor->getParent()); + mList.setCursor(cursor); + } } void buildHeader(FileData* from, std::stringstream& ss) diff --git a/src/views/BasicGameListView.h b/src/views/BasicGameListView.h index 0eaed66ca..f59beab37 100644 --- a/src/views/BasicGameListView.h +++ b/src/views/BasicGameListView.h @@ -15,7 +15,7 @@ public: virtual bool input(InputConfig* config, Input input) override; - virtual void setTheme(const std::shared_ptr& theme) override; + virtual void onThemeChanged(const std::shared_ptr& theme) override; inline FileData* getCursor() { return mList.getSelected(); } virtual void setCursor(FileData* file) override; diff --git a/src/views/DetailedGameListView.cpp b/src/views/DetailedGameListView.cpp index 88cf7158b..e21c8edcc 100644 --- a/src/views/DetailedGameListView.cpp +++ b/src/views/DetailedGameListView.cpp @@ -39,10 +39,10 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : updateInfoPanel(); } -void DetailedGameListView::setTheme(const std::shared_ptr& theme) +void DetailedGameListView::onThemeChanged(const std::shared_ptr& theme) { mHeaderImage.setResize(mSize.x() * 0.5f, 0, true); - BasicGameListView::setTheme(theme); + BasicGameListView::onThemeChanged(theme); if(mHeaderImage.getPosition().y() + mHeaderImage.getSize().y() > mImage.getPosition().y()) mHeaderImage.setResize(0, mSize.y() * 0.185f, true); diff --git a/src/views/DetailedGameListView.h b/src/views/DetailedGameListView.h index 57a6ca06f..7f7ab50d3 100644 --- a/src/views/DetailedGameListView.h +++ b/src/views/DetailedGameListView.h @@ -10,7 +10,7 @@ class DetailedGameListView : public BasicGameListView public: DetailedGameListView(Window* window, FileData* root); - virtual void setTheme(const std::shared_ptr& theme) override; + virtual void onThemeChanged(const std::shared_ptr& theme) override; virtual void onFileChanged(FileData* file, FileChangeType change); diff --git a/src/views/GameListView.cpp b/src/views/GameListView.cpp index e2153ef45..56f9d7655 100644 --- a/src/views/GameListView.cpp +++ b/src/views/GameListView.cpp @@ -2,6 +2,8 @@ #include "../Window.h" #include "../components/GuiMetaDataEd.h" #include "../components/GuiMenu.h" +#include "../components/GuiFastSelect.h" +#include "ViewController.h" bool GameListView::input(InputConfig* config, Input input) { @@ -24,7 +26,17 @@ bool GameListView::input(InputConfig* config, Input input) { // open menu mWindow->pushGui(new GuiMenu(mWindow)); + }else if(config->isMappedTo("select", input) && input.value != 0) + { + // open fast select + mWindow->pushGui(new GuiFastSelect(mWindow, this)); } return GuiComponent::input(config, input); } + +void GameListView::setTheme(const std::shared_ptr& theme) +{ + mTheme = theme; + onThemeChanged(theme); +} diff --git a/src/views/GameListView.h b/src/views/GameListView.h index ad3ef603b..1ea16bd7a 100644 --- a/src/views/GameListView.h +++ b/src/views/GameListView.h @@ -20,17 +20,23 @@ public: virtual ~GameListView() {} - // Called when a new file is added, a file is removed, or a file's metadata changes. + // Called when a new file is added, a file is removed, a file's metadata changes, or a file's children are sorted. + // NOTE: FILE_SORTED is only reported for the topmost FileData, where the sort started. + // Since sorts are recursive, that FileData's children probably changed too. virtual void onFileChanged(FileData* file, FileChangeType change) = 0; - // Called to set or update theme. - virtual void setTheme(const std::shared_ptr& theme) = 0; + // Called whenever the theme changes. + virtual void onThemeChanged(const std::shared_ptr& theme) = 0; - virtual bool input(InputConfig* config, Input input) override; + void setTheme(const std::shared_ptr& theme); + inline const std::shared_ptr& getTheme() const { return mTheme; } virtual FileData* getCursor() = 0; virtual void setCursor(FileData*) = 0; + virtual bool input(InputConfig* config, Input input) override; + protected: FileData* mRoot; + std::shared_ptr mTheme; }; From 25a4c8a2e5d1f8094136efdffa2a90b4addba851 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 28 Nov 2013 13:52:21 -0600 Subject: [PATCH 099/386] Added fastSelectBackgroundImage and menuCloseSound to ThemeData, implemented some missing sounds. --- THEMES.md | 10 ++++++---- src/ThemeData.cpp | 6 ++++-- src/components/GuiFastSelect.cpp | 3 ++- src/components/GuiMenu.cpp | 13 +++++++------ src/components/GuiMenu.h | 1 + src/views/BasicGameListView.cpp | 1 + src/views/GameListView.cpp | 4 ++++ src/views/ViewController.cpp | 1 + 8 files changed, 26 insertions(+), 13 deletions(-) diff --git a/THEMES.md b/THEMES.md index d8e2ecd9d..15801a157 100644 --- a/THEMES.md +++ b/THEMES.md @@ -102,6 +102,7 @@ Pretty much any image format is supported. `` - No default. `` - No default. `` - No default. +`` - Nine patch. Default is the "button.png" resource. Sounds ====== @@ -110,10 +111,11 @@ Sounds are defined like this: `./some/path/here.wav` Only .wav files are supported. -`` - No default. -`` - No default. -`` - No default. -`` - No default. +`` - No default. Played when a list scrolls. +`` - No default. Played when a game is launched. +`` - No default. Played when leaving a folder in the game list. +`` - No default. Played when the menu is opened. +`` - No default. Played when the menu is closed. Nine Patches diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 62b60949e..06749c476 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -27,13 +27,15 @@ std::map ThemeData::sDefaultImages = boost::assign::map_l ("backgroundImage", ImageDef("", true)) ("headerImage", ImageDef("", false)) ("infoBackgroundImage", ImageDef("", false)) - ("verticalDividerImage", ImageDef("", false)); + ("verticalDividerImage", ImageDef("", false)) + ("fastSelectBackgroundImage", ImageDef(":/button.png", false)); std::map ThemeData::sDefaultSounds = boost::assign::map_list_of ("scrollSound", SoundDef("")) ("gameSelectSound", SoundDef("")) ("backSound", SoundDef("")) - ("menuOpenSound", SoundDef("")); + ("menuOpenSound", SoundDef("")) + ("menuCloseSound", SoundDef("")); diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index f56acf0ef..0022f4abc 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -6,13 +6,14 @@ static const std::string LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; GuiFastSelect::GuiFastSelect(Window* window, GameListView* gamelist) : GuiComponent(window), - mBackground(window, ":/button.png"), mSortText(window), mLetterText(window), mGameList(gamelist) + mBackground(window), mSortText(window), mLetterText(window), mGameList(gamelist) { setPosition(Renderer::getScreenWidth() * 0.2f, Renderer::getScreenHeight() * 0.2f); setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.6f); const std::shared_ptr& theme = mGameList->getTheme(); + mBackground.setImagePath(theme->getImage("fastSelectBackgroundImage").path); mBackground.fitTo(mSize); addChild(&mBackground); diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index 653c745fc..da4884a3d 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -38,12 +38,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/ mBackground.fitTo(Eigen::Vector2f(mList.getSize().x(), mSize.y()), Eigen::Vector3f(mList.getPosition().x(), 0, 0)); addChild(&mBackground); - std::shared_ptr theme = std::make_shared(); - theme->setFont("listFont", FontDef(0.09f, theme->getFontDef("listFont").path)); - theme->setColor("listSelectorColor", 0xBBBBBBFF); - theme->setColor("listPrimaryColor", 0x0000FFFF); - theme->setColor("listSecondaryColor", 0xFF0000FF); - mList.setTheme(theme); + mTheme = std::make_shared(); + mTheme->setFont("listFont", FontDef(0.09f, mTheme->getFontDef("listFont").path)); + mTheme->setColor("listSelectorColor", 0xBBBBBBFF); + mTheme->setColor("listPrimaryColor", 0x0000FFFF); + mTheme->setColor("listSecondaryColor", 0xFF0000FF); + mList.setTheme(mTheme); addChild(&mList); } @@ -54,6 +54,7 @@ bool GuiMenu::input(InputConfig* config, Input input) { if(config->isMappedTo("b", input) || config->isMappedTo("menu", input)) { + mTheme->playSound("menuCloseSound"); delete this; return true; }else if(config->isMappedTo("a", input) && mList.getList().size() > 0) diff --git a/src/components/GuiMenu.h b/src/components/GuiMenu.h index 17249b7f3..a620435dd 100644 --- a/src/components/GuiMenu.h +++ b/src/components/GuiMenu.h @@ -13,6 +13,7 @@ public: bool input(InputConfig* config, Input input) override; private: + std::shared_ptr mTheme; NinePatchComponent mBackground; TextListComponent< std::function > mList; }; diff --git a/src/views/BasicGameListView.cpp b/src/views/BasicGameListView.cpp index 008411544..bc6a4e829 100644 --- a/src/views/BasicGameListView.cpp +++ b/src/views/BasicGameListView.cpp @@ -159,6 +159,7 @@ bool BasicGameListView::input(InputConfig* config, Input input) populateList(mCursorStack.top()->getParent()); mList.setCursor(mCursorStack.top()); mCursorStack.pop(); + mTheme->playSound("backSound"); }else{ mList.stopScrolling(); mWindow->getViewController()->goToSystemSelect(); diff --git a/src/views/GameListView.cpp b/src/views/GameListView.cpp index 56f9d7655..b819b3fe4 100644 --- a/src/views/GameListView.cpp +++ b/src/views/GameListView.cpp @@ -21,15 +21,19 @@ bool GameListView::input(InputConfig* config, Input input) onFileChanged(file, FILE_REMOVED); //tell the view delete file; //free it })); + mTheme->playSound("menuOpenSound"); return true; }else if(config->isMappedTo("menu", input) && input.value != 0) { // open menu mWindow->pushGui(new GuiMenu(mWindow)); + mTheme->playSound("menuOpenSound"); + return true; }else if(config->isMappedTo("select", input) && input.value != 0) { // open fast select mWindow->pushGui(new GuiFastSelect(mWindow, this)); + return true; } return GuiComponent::input(config, input); diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index eb18e758d..8a6e32fcb 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -86,6 +86,7 @@ void ViewController::launch(FileData* game) } // Effect TODO + game->getSystem()->getTheme()->playSound("gameSelectSound"); game->getSystem()->launchGame(mWindow, game); } From 9875a59549cbc26f3a28f7f163e684c53313febc Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 30 Nov 2013 19:04:46 -0600 Subject: [PATCH 100/386] Added GridGameListView. Currently no way to enable it and no way to switch systems with it. --- CMakeLists.txt | 3 + src/components/GuiGameScraper.cpp | 37 +-- src/components/GuiGameScraper.h | 1 + src/components/ImageGridComponent.h | 360 ++++++++++++++++++++++++++++ src/views/GridGameListView.cpp | 90 +++++++ src/views/GridGameListView.h | 28 +++ src/views/ViewController.cpp | 6 +- 7 files changed, 508 insertions(+), 17 deletions(-) create mode 100644 src/components/ImageGridComponent.h create mode 100644 src/views/GridGameListView.cpp create mode 100644 src/views/GridGameListView.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 057868be7..58678f012 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,6 +164,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h @@ -195,6 +196,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/views/BasicGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h @@ -264,6 +266,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/views/BasicGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/ResourceUtil.cpp diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index fbae61f38..ed804338d 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -123,6 +123,7 @@ void GuiGameScraper::onSearchDone(std::vector results) mList.resetCursor(); mList.moveCursor(Eigen::Vector2i(0, 1)); //move cursor to first game if there is one + updateInfoPane(); } int GuiGameScraper::getSelectedIndex() @@ -161,22 +162,7 @@ bool GuiGameScraper::input(InputConfig* config, Input input) if(config->isMappedTo("up", input) || config->isMappedTo("down", input) && input.value != 0) { - //update game info pane - int i = getSelectedIndex(); - if(i != -1) - { - mResultName.setText(mScraperResults.at(i).get("name")); - mResultDesc.setText(mScraperResults.at(i).get("desc")); - mResultInfo.setScrollPos(Eigen::Vector2d(0, 0)); - mResultInfo.resetAutoScrollTimer(); - - std::string thumb = mScraperResults.at(i).get("thumbnail"); - mResultThumbnail.setImage(""); - if(!thumb.empty()) - mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); - else - mThumbnailReq.reset(); - } + updateInfoPane(); } //stopped editing @@ -189,6 +175,25 @@ bool GuiGameScraper::input(InputConfig* config, Input input) return ret; } +void GuiGameScraper::updateInfoPane() +{ + int i = getSelectedIndex(); + if(i != -1) + { + mResultName.setText(mScraperResults.at(i).get("name")); + mResultDesc.setText(mScraperResults.at(i).get("desc")); + mResultInfo.setScrollPos(Eigen::Vector2d(0, 0)); + mResultInfo.resetAutoScrollTimer(); + + std::string thumb = mScraperResults.at(i).get("thumbnail"); + mResultThumbnail.setImage(""); + if(!thumb.empty()) + mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); + else + mThumbnailReq.reset(); + } +} + void GuiGameScraper::update(int deltaTime) { if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) diff --git a/src/components/GuiGameScraper.h b/src/components/GuiGameScraper.h index 1a268a114..49925fd40 100644 --- a/src/components/GuiGameScraper.h +++ b/src/components/GuiGameScraper.h @@ -25,6 +25,7 @@ public: private: int getSelectedIndex(); void onSearchDone(std::vector results); + void updateInfoPane(); void updateThumbnail(); ComponentListComponent mList; diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h new file mode 100644 index 000000000..240330c0b --- /dev/null +++ b/src/components/ImageGridComponent.h @@ -0,0 +1,360 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../components/ImageComponent.h" +#include "../Log.h" + +template +class ImageGridComponent : public GuiComponent +{ +public: + ImageGridComponent(Window* window); + + struct Entry + { + std::shared_ptr texture; + T object; + + Entry() {} + Entry(std::shared_ptr t, const T& o) : texture(t), object(o) {} + }; + + void add(const std::string& imagePath, const T& obj); + void remove(const T& obj); + void clear(); + + void setCursor(const T& select); + + inline const T& getSelected() const { return mEntries.at(mCursor).object; } + inline const std::vector& getList() const { return mEntries; } + + enum CursorState { + CURSOR_STOPPED, + CURSOR_SCROLLING + }; + + void stopScrolling(); + + void onSizeChanged() override; + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; + +private: + Eigen::Vector2f getSquareSize(std::shared_ptr tex = nullptr) const + { + Eigen::Vector2f aspect(1, 1); + + if(tex) + { + const Eigen::Vector2i& texSize = tex->getSize(); + + if(texSize.x() > texSize.y()) + aspect[0] = (float)texSize.x() / texSize.y(); + else + aspect[1] = (float)texSize.y() / texSize.x(); + } + + return Eigen::Vector2f(156 * aspect.x(), 156 * aspect.y()); + }; + + Eigen::Vector2f getMaxSquareSize() const + { + Eigen::Vector2f squareSize(32, 32); + + // calc biggest square size + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + Eigen::Vector2f chkSize = getSquareSize(it->texture); + if(chkSize.x() > squareSize.x()) + squareSize[0] = chkSize[0]; + if(chkSize.y() > squareSize.y()) + squareSize[1] = chkSize[1]; + } + + return squareSize; + }; + + Eigen::Vector2i getGridSize() const + { + Eigen::Vector2f squareSize = getMaxSquareSize(); + Eigen::Vector2i gridSize(mSize.x() / (squareSize.x() + getPadding().x()), mSize.y() / (squareSize.y() + getPadding().y())); + return gridSize; + }; + + Eigen::Vector2f getPadding() const { return Eigen::Vector2f(24, 24); } + + void buildImages(); + void updateImages(); + + static const int SCROLL_DELAY = 507; + static const int SCROLL_TIME = 150; + + void setScrollDir(Eigen::Vector2i dir); + void scroll(); + void onCursorChanged(CursorState state); + + int mCursor; + + Eigen::Vector2i mScrollDir; + int mScrollAccumulator; + + bool mEntriesDirty; + + std::vector mEntries; + std::vector mImages; +}; + +template +ImageGridComponent::ImageGridComponent(Window* window) : GuiComponent(window) +{ + mEntriesDirty = true; + mCursor = 0; + mScrollDir << 0, 0; + mScrollAccumulator = 0; +} + +template +void ImageGridComponent::add(const std::string& imagePath, const T& obj) +{ + Entry e(ResourceManager::getInstance()->fileExists(imagePath) ? TextureResource::get(imagePath) : TextureResource::get(":/button.png"), obj); + mEntries.push_back(e); + mEntriesDirty = true; +} + +template +void ImageGridComponent::remove(const T& obj) +{ + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).object == obj) + { + if(mCursor > 0 && it - mRowVector.begin() >= mCursor) + { + mCursor--; + onCursorChanged(CURSOR_STOPPED); + } + + mEntriesDirty = true; + mEntries.erase(it); + return; + } + } + + LOG(LogError) << "Tried to remove an object we couldn't find"; +} + +template +void ImageGridComponent::clear() +{ + mEntries.clear(); + mCursor = 0; + mScrollDir << 0, 0; + onCursorChanged(CURSOR_STOPPED); + mEntriesDirty = true; +} + +template +void ImageGridComponent::setCursor(const T& obj) +{ + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).object == obj) + { + mCursor = it - mEntries.begin(); + onCursorChanged(CURSOR_STOPPED); + return; + } + } + + LOG(LogError) << "Tried to set cursor to object we couldn't find"; +} + +template +void ImageGridComponent::stopScrolling() +{ + mScrollDir = Eigen::Vector2i::Zero(); +} + +template +void ImageGridComponent::scroll() +{ + if(mEntries.size() == 0) + return; + + int offset = 0; + Eigen::Vector2i size = getGridSize(); + + offset += mScrollDir.x(); + offset += mScrollDir.y() * size.x(); + + mCursor += offset; + if(mCursor < 0) + mCursor += mEntries.size(); + if(mCursor >= (int)mEntries.size()) + mCursor -= mEntries.size(); + + onCursorChanged(CURSOR_SCROLLING); +} + +template +void ImageGridComponent::setScrollDir(Eigen::Vector2i dir) +{ + mScrollDir = dir; + mScrollAccumulator = -SCROLL_DELAY; +} + +template +bool ImageGridComponent::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + Eigen::Vector2i dir = Eigen::Vector2i::Zero(); + if(config->isMappedTo("up", input)) + dir[1] = -1; + else if(config->isMappedTo("down", input)) + dir[1] = 1; + else if(config->isMappedTo("left", input)) + dir[0] = -1; + else if(config->isMappedTo("right", input)) + dir[0] = 1; + + if(dir != Eigen::Vector2i::Zero()) + { + setScrollDir(dir); + scroll(); + return true; + } + }else{ + if(config->isMappedTo("up", input) || config->isMappedTo("down", input) || config->isMappedTo("left", input) || config->isMappedTo("right", input)) + { + mScrollDir << 0, 0; + onCursorChanged(CURSOR_STOPPED); + } + } + + return GuiComponent::input(config, input); +} + +template +void ImageGridComponent::update(int deltaTime) +{ + if(mScrollDir != Eigen::Vector2i::Zero()) + { + mScrollAccumulator += deltaTime; + while(mScrollAccumulator >= SCROLL_TIME) + { + scroll(); + mScrollAccumulator -= SCROLL_TIME; + } + } +} + +template +void ImageGridComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = getTransform() * parentTrans; + + if(mEntriesDirty) + { + buildImages(); + updateImages(); + mEntriesDirty = false; + } + + for(auto it = mImages.begin(); it != mImages.end(); it++) + { + it->render(trans); + } + + renderChildren(trans); +} + +template +void ImageGridComponent::onCursorChanged(CursorState state) +{ + updateImages(); +} + +template +void ImageGridComponent::onSizeChanged() +{ + buildImages(); + updateImages(); +} + +// create and position imagecomponents (mImages) +template +void ImageGridComponent::buildImages() +{ + mImages.clear(); + + Eigen::Vector2i gridSize = getGridSize(); + Eigen::Vector2f squareSize = getMaxSquareSize(); + Eigen::Vector2f padding = getPadding(); + + // attempt to center within our size + Eigen::Vector2f totalSize(gridSize.x() * (squareSize.x() + padding.x()), gridSize.y() * (squareSize.y() + padding.y())); + Eigen::Vector2f offset(mSize.x() - totalSize.x(), mSize.y() - totalSize.y()); + offset /= 2; + + for(int y = 0; y < gridSize.y(); y++) + { + for(int x = 0; x < gridSize.x(); x++) + { + mImages.push_back(ImageComponent(mWindow)); + ImageComponent& image = mImages.at(y * gridSize.x() + x); + + image.setPosition((squareSize.x() + padding.x()) * (x + 0.5f) + offset.x(), (squareSize.y() + padding.y()) * (y + 0.5f) + offset.y()); + image.setOrigin(0.5f, 0.5f); + image.setResize(squareSize.x(), squareSize.y(), true); + image.setImage(""); + } + } +} + +template +void ImageGridComponent::updateImages() +{ + if(mImages.empty()) + buildImages(); + + Eigen::Vector2i gridSize = getGridSize(); + + int cursorRow = mCursor / gridSize.x(); + int cursorCol = mCursor % gridSize.x(); + + int start = (cursorRow - (gridSize.y() / 2)) * gridSize.x(); + + //if we're at the end put the row as close as we can and no higher + if(start + (gridSize.x() * gridSize.y()) >= (int)mEntries.size()) + start = gridSize.x() * ((int)mEntries.size()/gridSize.x() - gridSize.y() + 1); + + if(start < 0) + start = 0; + + unsigned int i = (unsigned int)start; + for(unsigned int img = 0; img < mImages.size(); img++) + { + ImageComponent& image = mImages.at(img); + if(i >= mEntries.size()) + { + image.setImage(""); + continue; + } + + Eigen::Vector2f squareSize = getSquareSize(mEntries.at(i).texture); + if(i == mCursor) + { + image.setColorShift(0xFFFFFFFF); + image.setResize(squareSize.x() + getPadding().x() * 0.95f, squareSize.y() + getPadding().y() * 0.95f, true); + }else{ + image.setColorShift(0xAAAAAABB); + image.setResize(squareSize.x(), squareSize.y(), true); + } + + image.setImage(mEntries.at(i).texture); + i++; + } +} diff --git a/src/views/GridGameListView.cpp b/src/views/GridGameListView.cpp new file mode 100644 index 000000000..095232a63 --- /dev/null +++ b/src/views/GridGameListView.cpp @@ -0,0 +1,90 @@ +#include "GridGameListView.h" +#include "../ThemeData.h" +#include "../Window.h" +#include "ViewController.h" + +GridGameListView::GridGameListView(Window* window, FileData* root) : GameListView(window, root), + mGrid(window), mBackground(window) +{ + mBackground.setResize(mSize.x(), mSize.y(), true); + addChild(&mBackground); + + mGrid.setPosition(0, mSize.y() * 0.2f); + mGrid.setSize(mSize.x(), mSize.y() * 0.8f); + addChild(&mGrid); + + populateList(root); +} + +void GridGameListView::onFileChanged(FileData* file, FileChangeType change) +{ + // fuck it, just completely repopulate always all the time + FileData* cursor = getCursor(); + populateList(cursor->getParent()); + mGrid.setCursor(cursor); +} + +void GridGameListView::onThemeChanged(const std::shared_ptr& theme) +{ + mBackground.setImage(theme->getImage("backgroundImage").getTexture()); + mBackground.setTiling(theme->getImage("backgroundImage").tile); +} + +FileData* GridGameListView::getCursor() +{ + return mGrid.getSelected(); +} + +void GridGameListView::setCursor(FileData* file) +{ + assert(file->getParent() == getCursor()->getParent()); // too lazy to implement right now + mGrid.setCursor(file); +} + +bool GridGameListView::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("a", input)) + { + if(mGrid.getList().size() > 0) + { + FileData* cursor = getCursor(); + if(cursor->getType() == GAME) + { + mWindow->getViewController()->launch(cursor); + }else{ + // it's a folder + if(cursor->getChildren().size() > 0) + { + mCursorStack.push(cursor); + populateList(cursor); + } + } + + return true; + } + }else if(config->isMappedTo("b", input)) + { + if(mCursorStack.size()) + { + populateList(mCursorStack.top()->getParent()); + mGrid.setCursor(mCursorStack.top()); + mCursorStack.pop(); + mTheme->playSound("backSound"); + }else{ + mGrid.stopScrolling(); + mWindow->getViewController()->goToSystemSelect(); + } + + return true; + } + return GameListView::input(config, input); +} + +void GridGameListView::populateList(FileData* root) +{ + mGrid.clear(); + for(auto it = root->getChildren().begin(); it != root->getChildren().end(); it++) + { + mGrid.add((*it)->getThumbnailPath(), *it); + } +} diff --git a/src/views/GridGameListView.h b/src/views/GridGameListView.h new file mode 100644 index 000000000..f9c36afe0 --- /dev/null +++ b/src/views/GridGameListView.h @@ -0,0 +1,28 @@ +#pragma once + +#include "GameListView.h" +#include "../components/ImageGridComponent.h" +#include "../components/ImageComponent.h" +#include + +class GridGameListView : public GameListView +{ +public: + GridGameListView(Window* window, FileData* root); + + virtual void onFileChanged(FileData* file, FileChangeType change) override; + virtual void onThemeChanged(const std::shared_ptr& theme) override; + + FileData* getCursor() override; + void setCursor(FileData*) override; + + virtual bool input(InputConfig* config, Input input) override; + +private: + void populateList(FileData* root); + + ImageGridComponent mGrid; + ImageComponent mBackground; + + std::stack mCursorStack; +}; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 8a6e32fcb..94164bc34 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -4,6 +4,7 @@ #include "BasicGameListView.h" #include "DetailedGameListView.h" +#include "GridGameListView.h" ViewController::ViewController(Window* window) : GuiComponent(window), mCurrentView(nullptr), mCameraPos(Eigen::Affine3f::Identity()) @@ -113,11 +114,14 @@ std::shared_ptr ViewController::getSystemView(SystemData* system) break; } } - + if(detailed) view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); else view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); + + + //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); view->setTheme(system->getTheme()); }else{ From a13ed11ead656cdc19fe4a8dcae0a7c55f47e735 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 8 Dec 2013 11:35:43 -0600 Subject: [PATCH 101/386] Added a simple Animation system. Launch/return effect reimplemented. ViewController's scrolling camera reimplemented as an Animation. --- CMakeLists.txt | 7 +++ src/GuiComponent.cpp | 14 ++++++ src/GuiComponent.h | 8 ++++ src/animations/Animation.h | 43 +++++++++++++++++ src/animations/AnimationController.cpp | 38 +++++++++++++++ src/animations/AnimationController.h | 22 +++++++++ src/animations/LaunchAnimation.h | 64 ++++++++++++++++++++++++++ src/animations/MoveCameraAnimation.h | 24 ++++++++++ src/views/ViewController.cpp | 64 +++++++++++++------------- src/views/ViewController.h | 6 ++- 10 files changed, 256 insertions(+), 34 deletions(-) create mode 100644 src/animations/Animation.h create mode 100644 src/animations/AnimationController.cpp create mode 100644 src/animations/AnimationController.h create mode 100644 src/animations/LaunchAnimation.h create mode 100644 src/animations/MoveCameraAnimation.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 58678f012..0442f7277 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,6 +199,11 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LaunchAnimation.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/MoveCameraAnimation.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h @@ -269,6 +274,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/ResourceUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_16_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index c4a1fde41..6bd70a989 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -2,6 +2,7 @@ #include "Window.h" #include "Log.h" #include "Renderer.h" +#include "animations/AnimationController.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()) @@ -32,6 +33,9 @@ bool GuiComponent::input(InputConfig* config, Input input) void GuiComponent::update(int deltaTime) { + if(mAnimationController) + mAnimationController->update(deltaTime); + for(unsigned int i = 0; i < getChildCount(); i++) { getChild(i)->update(deltaTime); @@ -181,3 +185,13 @@ void GuiComponent::textInput(const char* text) (*iter)->textInput(text); } } + +void GuiComponent::setAnimation(Animation* anim, std::function finishedCallback, bool reverse) +{ + mAnimationController = std::shared_ptr(new AnimationController(anim, finishedCallback, reverse)); +} + +void GuiComponent::stopAnimation() +{ + mAnimationController.reset(); +} diff --git a/src/GuiComponent.h b/src/GuiComponent.h index 928d6f2b7..5118b199e 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -2,9 +2,12 @@ #define _GUICOMPONENT_H_ #include "InputConfig.h" +#include #include class Window; +class Animation; +class AnimationController; class GuiComponent { @@ -48,6 +51,10 @@ public: unsigned int getChildCount() const; GuiComponent* getChild(unsigned int i) const; + // animation will be automatically deleted when it completes or is stopped. + void setAnimation(Animation* animation, std::function finishedCallback = nullptr, bool reverse = false); + void stopAnimation(); + virtual unsigned char getOpacity() const; virtual void setOpacity(unsigned char opacity); @@ -73,6 +80,7 @@ protected: private: Eigen::Affine3f mTransform; //Don't access this directly! Use getTransform()! + std::shared_ptr mAnimationController; }; #endif diff --git a/src/animations/Animation.h b/src/animations/Animation.h new file mode 100644 index 000000000..e34dfb438 --- /dev/null +++ b/src/animations/Animation.h @@ -0,0 +1,43 @@ +#pragma once + +#include + +class Animation +{ +public: + virtual int getDuration() const = 0; + virtual void apply(float t) = 0; +}; + + +// useful helper/interpolation functions +inline float clamp(float min, float max, float val) +{ + if(val < min) + val = min; + else if(val > max) + val = max; + + return val; +} + +//http://en.wikipedia.org/wiki/Smoothstep +inline float smoothStep(float edge0, float edge1, float x) +{ + // Scale, and clamp x to 0..1 range + x = clamp(0, 1, (x - edge0)/(edge1 - edge0)); + + // Evaluate polynomial + return x*x*x*(x*(x*6 - 15) + 10); +} + +template +T lerp(const T& start, const T& end, float t) +{ + if(t <= 0.0f) + return start; + if(t >= 1.0f) + return end; + + return (start * (1 - t) + end * t); +} diff --git a/src/animations/AnimationController.cpp b/src/animations/AnimationController.cpp new file mode 100644 index 000000000..03b75cccd --- /dev/null +++ b/src/animations/AnimationController.cpp @@ -0,0 +1,38 @@ +#include "AnimationController.h" + +AnimationController::AnimationController(Animation* anim, std::function finishedCallback, bool reverse) + : mAnimation(anim), mFinishedCallback(finishedCallback), mReverse(reverse), mTime(0) +{ +} + +AnimationController::~AnimationController() +{ + if(mFinishedCallback) + mFinishedCallback(); + + delete mAnimation; +} + +void AnimationController::update(int deltaTime) +{ + mTime += deltaTime; + float t = (float)mTime / mAnimation->getDuration(); + + if(t > 1.0f) + t = 1.0f; + else if(t < 0.0f) + t = 0.0f; + + mAnimation->apply(mReverse ? 1.0f - t : t); + + if(t == 1.0f) + { + if(mFinishedCallback) + { + // in case mFinishedCallback causes us to be deleted, use a copy + auto copy = mFinishedCallback; + mFinishedCallback = nullptr; + copy(); + } + } +} diff --git a/src/animations/AnimationController.h b/src/animations/AnimationController.h new file mode 100644 index 000000000..5ea62b209 --- /dev/null +++ b/src/animations/AnimationController.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include "Animation.h" + +class AnimationController +{ +public: + // FinishedCallback is guaranteed to be called exactly once, even if the animation does not finish normally. + // Takes ownership of anim (will delete in destructor). + AnimationController(Animation* anim, std::function finishedCallback = nullptr, bool reverse = false); + virtual ~AnimationController(); + + void update(int deltaTime); + +private: + Animation* mAnimation; + std::function mFinishedCallback; + bool mReverse; + int mTime; +}; diff --git a/src/animations/LaunchAnimation.h b/src/animations/LaunchAnimation.h new file mode 100644 index 000000000..3072a5f37 --- /dev/null +++ b/src/animations/LaunchAnimation.h @@ -0,0 +1,64 @@ +#pragma once + +#include "Animation.h" +#include "../Log.h" + +// let's look at the game launch effect: +// -move camera to center on point P (interpolation method: linear) +// -zoom camera to factor Z via matrix scale (interpolation method: exponential) +// -fade screen to black at rate F (interpolation method: exponential) + +// How the animation gets constructed from the example of implementing the game launch effect: +// 1. Current parameters are retrieved through a get() call +// ugliness: +// -have to have a way to get a reference to the animation +// -requires additional implementation in some parent object, potentially AnimationController +// 2. ViewController is passed in LaunchAnimation constructor, applies state through setters +// ugliness: +// -effect only works for ViewController +// 3. Pass references to ViewController variables - LaunchAnimation(mCameraPos, mFadePerc, target) +// ugliness: +// -what if ViewController is deleted? --> AnimationController class handles that +// -no callbacks for changes...but that works well with this style of update, so I think it's okay +// 4. Use callbacks to set variables +// ugliness: +// -boilerplate as hell every time + +// #3 wins +// can't wait to see how this one bites me in the ass + +class LaunchAnimation : public Animation +{ +public: + //Target is a centerpoint + LaunchAnimation(Eigen::Affine3f& camera, float& fade, const Eigen::Vector3f& target, int duration) : + mCameraStart(camera), mTarget(target), mDuration(duration), cameraOut(camera), fadeOut(fade) {} + + int getDuration() const override { return mDuration; } + + void apply(float t) override + { + cameraOut = Eigen::Affine3f::Identity(); + + float zoom = lerp(1.0, 3.0, t*t); + cameraOut.scale(Eigen::Vector3f(zoom, zoom, 1)); + + const float sw = (float)Renderer::getScreenWidth() / zoom; + const float sh = (float)Renderer::getScreenHeight() / zoom; + + Eigen::Vector3f centerPoint = lerp(-mCameraStart.translation() + Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0), + mTarget, smoothStep(0.0, 1.0, t)); + + cameraOut.translate(Eigen::Vector3f((sw / 2) - centerPoint.x(), (sh / 2) - centerPoint.y(), 0)); + + fadeOut = lerp(0.0, 1.0, t*t); + } + +private: + Eigen::Affine3f mCameraStart; + Eigen::Vector3f mTarget; + int mDuration; + + Eigen::Affine3f& cameraOut; + float& fadeOut; +}; diff --git a/src/animations/MoveCameraAnimation.h b/src/animations/MoveCameraAnimation.h new file mode 100644 index 000000000..9f3675980 --- /dev/null +++ b/src/animations/MoveCameraAnimation.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Animation.h" + +class MoveCameraAnimation : public Animation +{ +public: + MoveCameraAnimation(Eigen::Affine3f& camera, const Eigen::Vector3f& target) : mCameraStart(camera), mTarget(target), cameraOut(camera) {} + + int getDuration() const override { return 400; } + + void apply(float t) override + { + // cubic ease out + t -= 1; + cameraOut.translation() = -lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); + } + +private: + Eigen::Affine3f mCameraStart; + Eigen::Vector3f mTarget; + + Eigen::Affine3f& cameraOut; +}; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 94164bc34..526a6e018 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -5,9 +5,11 @@ #include "BasicGameListView.h" #include "DetailedGameListView.h" #include "GridGameListView.h" +#include "../animations/LaunchAnimation.h" +#include "../animations/MoveCameraAnimation.h" ViewController::ViewController(Window* window) - : GuiComponent(window), mCurrentView(nullptr), mCameraPos(Eigen::Affine3f::Identity()) + : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0) { mState.viewing = START_SCREEN; } @@ -16,6 +18,7 @@ void ViewController::goToSystemSelect() { mState.viewing = SYSTEM_SELECT; goToSystem(SystemData::sSystemVector.at(0)); + //playViewTransition(); } SystemData* getSystemCyclic(SystemData* from, bool reverse) @@ -68,6 +71,12 @@ void ViewController::goToSystem(SystemData* system) mState.data.system = system; mCurrentView = getSystemView(system); + playViewTransition(); +} + +void ViewController::playViewTransition() +{ + setAnimation(new MoveCameraAnimation(mCamera, mCurrentView->getPosition())); } void ViewController::onFileChanged(FileData* file, FileChangeType change) @@ -78,7 +87,7 @@ void ViewController::onFileChanged(FileData* file, FileChangeType change) } } -void ViewController::launch(FileData* game) +void ViewController::launch(FileData* game, const Eigen::Vector3f& center) { if(game->getType() != GAME) { @@ -86,9 +95,16 @@ void ViewController::launch(FileData* game) return; } - // Effect TODO + game->getSystem()->getTheme()->playSound("gameSelectSound"); - game->getSystem()->launchGame(mWindow, game); + + Eigen::Affine3f origCamera = mCamera; + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), [this, origCamera, center, game] + { + game->getSystem()->launchGame(mWindow, game); + mCamera = origCamera; + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), nullptr, true); + }); } std::shared_ptr ViewController::getSystemView(SystemData* system) @@ -120,7 +136,6 @@ std::shared_ptr ViewController::getSystemView(SystemData* system) else view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); - //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); view->setTheme(system->getTheme()); @@ -146,46 +161,24 @@ bool ViewController::input(InputConfig* config, Input input) return false; } - -float clamp(float min, float max, float val) -{ - if(val < min) - val = min; - else if(val > max) - val = max; - - return val; -} - -//http://en.wikipedia.org/wiki/Smoothstep -float smoothStep(float edge0, float edge1, float x) -{ - // Scale, and clamp x to 0..1 range - x = clamp(0, 1, (x - edge0)/(edge1 - edge0)); - - // Evaluate polynomial - return x*x*x*(x*(x*6 - 15) + 10); -} - void ViewController::update(int deltaTime) { if(mCurrentView) { mCurrentView->update(deltaTime); - - // move camera towards current view (should use smoothstep) - Eigen::Vector3f diff = (mCurrentView->getPosition() + mCameraPos.translation()) * 0.0075f * (float)deltaTime; - mCameraPos.translate(-diff); } + + GuiComponent::update(deltaTime); } void ViewController::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * mCameraPos; + Eigen::Affine3f trans = mCamera * parentTrans; - //should really do some clipping here + // draw systems for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) { + // clipping Eigen::Vector3f pos = it->second->getPosition(); Eigen::Vector2f size = it->second->getSize(); @@ -196,4 +189,11 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) pos.x() <= camPos.x() + camSize.x() && pos.y() <= camPos.y() + camSize.y()) it->second->render(trans); } + + // fade out + if(mFadeOpacity) + { + Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | (unsigned char)(mFadeOpacity * 255)); + } } diff --git a/src/views/ViewController.h b/src/views/ViewController.h index faf17bc56..33b109a56 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -19,7 +19,7 @@ public: // Plays a nice launch effect and launches the game at the end of it. // Once the game terminates, plays a return effect. - void launch(FileData* game); + void launch(FileData* game, const Eigen::Vector3f& centerCameraOn = Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; @@ -49,12 +49,14 @@ public: inline const State& getState() const { return mState; } private: + void playViewTransition(); std::shared_ptr getSystemView(SystemData* system); std::shared_ptr mCurrentView; std::map< SystemData*, std::shared_ptr > mSystemViews; - Eigen::Affine3f mCameraPos; + Eigen::Affine3f mCamera; + float mFadeOpacity; State mState; }; From 886bf7b00b824bfbef472f3db7ea72559870a068 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 8 Dec 2013 19:33:43 +0000 Subject: [PATCH 102/386] Fixed ImageGridComponent --- src/components/ImageGridComponent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index 240330c0b..c185ac1dc 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -130,7 +130,7 @@ void ImageGridComponent::remove(const T& obj) { if((*it).object == obj) { - if(mCursor > 0 && it - mRowVector.begin() >= mCursor) + if(mCursor > 0 && it - mEntries.begin() >= mCursor) { mCursor--; onCursorChanged(CURSOR_STOPPED); From 5aeb2bc87fce844c02878b2f1a35f0346ee037d4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 8 Dec 2013 20:00:53 +0000 Subject: [PATCH 103/386] Fixed a bug with empty font paths not resolving correctly. --- src/resources/Font.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 08a9487f2..f4e671980 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -109,7 +109,7 @@ std::shared_ptr Font::get(int size, const std::string& path) return foundFont->second.lock(); } - std::shared_ptr font = std::shared_ptr(new Font(size, path)); + std::shared_ptr font = std::shared_ptr(new Font(def.second, def.first)); sFontMap[def] = std::weak_ptr(font); ResourceManager::getInstance()->addReloadable(font); return font; @@ -138,7 +138,7 @@ void Font::buildAtlas(ResourceData data) { if(FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face)) { - LOG(LogError) << "Error creating font face!"; + LOG(LogError) << "Error creating font face! (mPath: " << mPath << ", data.length: " << data.length << ")"; return; } From aad80b73fd69ae2fb9d3fcded4235c217f7d2cac Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 8 Dec 2013 19:22:21 -0600 Subject: [PATCH 104/386] Made ViewController's launch animation to add current view's position to center point. Fixed clipping with a scaled camera matrix. --- src/views/ViewController.cpp | 18 ++++++++++-------- src/views/ViewController.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 526a6e018..84444885f 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -87,7 +87,7 @@ void ViewController::onFileChanged(FileData* file, FileChangeType change) } } -void ViewController::launch(FileData* game, const Eigen::Vector3f& center) +void ViewController::launch(FileData* game, Eigen::Vector3f center) { if(game->getType() != GAME) { @@ -99,6 +99,7 @@ void ViewController::launch(FileData* game, const Eigen::Vector3f& center) game->getSystem()->getTheme()->playSound("gameSelectSound"); Eigen::Affine3f origCamera = mCamera; + center += mCurrentView->getPosition(); setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), [this, origCamera, center, game] { game->getSystem()->launchGame(mWindow, game); @@ -175,18 +176,19 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = mCamera * parentTrans; + // camera position, position + size + Eigen::Vector3f viewStart = trans.inverse().translation(); + Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); + // draw systems for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) { // clipping - Eigen::Vector3f pos = it->second->getPosition(); - Eigen::Vector2f size = it->second->getSize(); + Eigen::Vector3f guiStart = it->second->getPosition(); + Eigen::Vector3f guiEnd = it->second->getPosition() + Eigen::Vector3f(it->second->getSize().x(), it->second->getSize().y(), 0); - Eigen::Vector3f camPos = -trans.translation(); - Eigen::Vector2f camSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - - if(pos.x() + size.x() >= camPos.x() && pos.y() + size.y() >= camPos.y() && - pos.x() <= camPos.x() + camSize.x() && pos.y() <= camPos.y() + camSize.y()) + if(guiEnd.x() >= viewStart.x() && guiEnd.y() >= viewStart.y() && + guiStart.x() <= viewEnd.x() && guiStart.y() <= viewEnd.y()) it->second->render(trans); } diff --git a/src/views/ViewController.h b/src/views/ViewController.h index 33b109a56..45a5bb49f 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -19,7 +19,7 @@ public: // Plays a nice launch effect and launches the game at the end of it. // Once the game terminates, plays a return effect. - void launch(FileData* game, const Eigen::Vector3f& centerCameraOn = Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); + void launch(FileData* game, Eigen::Vector3f centerCameraOn = Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; From 4d38d41c973dc471e67fbddf7cf82bd38e4e54a9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 8 Dec 2013 22:47:13 -0600 Subject: [PATCH 105/386] Sort of fixed formatting for THEMES.md. --- THEMES.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/THEMES.md b/THEMES.md index 15801a157..407f15be9 100644 --- a/THEMES.md +++ b/THEMES.md @@ -7,8 +7,9 @@ Themes are loaded like this: 1. Initialize to default values. 2. If `$HOME/.emulationstation/es_theme_default.xml` exists, load it. -3a. If there is a `theme.xml` present in the root of a system's `path` directory, load it. -3b. IF NOT, If `$HOME/.emulationstation/%SYSTEMNAME%/theme.xml` exists, load it. +3. If there is a `theme.xml` present in the root of a system's `path` directory, load it. + + IF NOT, If `$HOME/.emulationstation/%SYSTEMNAME%/theme.xml` exists, load it. Example ======= @@ -45,6 +46,7 @@ Example Themes must be enclosed in a `` tag. All paths automatically expand `./` to the folder containing the theme.xml. + All paths automatically expand `~/` to the home directory ($HOME on Linux, %HOMEPATH% on Windows). Stuff you can define @@ -63,8 +65,11 @@ Fonts are defined like so: ``` + `` - Default size: 0.045. + `` - Default size: 0.035. + `` - Default size: 0.15. Colors @@ -73,16 +78,26 @@ Colors Colors are defined in hex, like this: `00FF00FF` + or + `00FF00` + (without the alpha channel specified - will assume FF) + `` - Default: 0000FFFF. + `` - Default: 00FF00FF. + `` - Default: 000000FF. + `` - Default: 00000000. + `` - Default: 48474DFF. + `` - Default: FFFFFFFF. + `` - Default: DDDDDDFF. Images @@ -98,23 +113,35 @@ Images are defined like this: ``` Pretty much any image format is supported. + `` - No default. + `` - No default. + `` - No default. + `` - No default. + `` - Nine patch. Default is the "button.png" resource. Sounds ====== Sounds are defined like this: + `./some/path/here.wav` + Only .wav files are supported. + `` - No default. Played when a list scrolls. + `` - No default. Played when a game is launched. + `` - No default. Played when leaving a folder in the game list. + `` - No default. Played when the menu is opened. + `` - No default. Played when the menu is closed. From abb568aa6ebeb717dc0f0e335c972d0cbaafe0b6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 10 Dec 2013 13:07:50 -0600 Subject: [PATCH 106/386] Don't scrape systems without a platform ID set by default. --- src/components/GuiScraperStart.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index 6cf43762b..6ef080543 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -31,11 +31,11 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentListComponent::AlignRight); mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentListComponent::AlignLeft); - //add systems (with all selected) + //add systems (all with a platformid specified selected) std::vector sys = SystemData::sSystemVector; mSystemsOpt.populate(sys, [&](SystemData* s) { - return mSystemsOpt.makeEntry(s->getName(), s, true); + return mSystemsOpt.makeEntry(s->getName(), s, s->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); }); mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentListComponent::AlignRight); From 7152ca6246f97351dbe47dffea5bc2d11448f154 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 10 Dec 2013 21:23:47 -0600 Subject: [PATCH 107/386] First version of the system select menu. --- CMakeLists.txt | 4 ++ THEMES.md | 2 + src/ThemeData.cpp | 3 +- src/views/BasicGameListView.cpp | 4 +- src/views/SystemListView.cpp | 78 +++++++++++++++++++++++++++++++++ src/views/SystemListView.h | 23 ++++++++++ src/views/SystemView.cpp | 47 ++++++++++++++++++++ src/views/SystemView.h | 23 ++++++++++ src/views/ViewController.cpp | 48 +++++++++++++------- src/views/ViewController.h | 21 +++++---- 10 files changed, 224 insertions(+), 29 deletions(-) create mode 100644 src/views/SystemListView.cpp create mode 100644 src/views/SystemListView.h create mode 100644 src/views/SystemView.cpp create mode 100644 src/views/SystemView.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0442f7277..895135281 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -197,6 +197,8 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h @@ -272,6 +274,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp diff --git a/THEMES.md b/THEMES.md index 407f15be9..e9fca7010 100644 --- a/THEMES.md +++ b/THEMES.md @@ -122,6 +122,8 @@ Pretty much any image format is supported. `` - No default. +`` - No default. Large image, shown in the system select menu. + `` - Nine patch. Default is the "button.png" resource. Sounds diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 06749c476..229dd18fb 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -28,7 +28,8 @@ std::map ThemeData::sDefaultImages = boost::assign::map_l ("headerImage", ImageDef("", false)) ("infoBackgroundImage", ImageDef("", false)) ("verticalDividerImage", ImageDef("", false)) - ("fastSelectBackgroundImage", ImageDef(":/button.png", false)); + ("fastSelectBackgroundImage", ImageDef(":/button.png", false)) + ("systemImage", ImageDef("", false)); std::map ThemeData::sDefaultSounds = boost::assign::map_list_of ("scrollSound", SoundDef("")) diff --git a/src/views/BasicGameListView.cpp b/src/views/BasicGameListView.cpp index bc6a4e829..ee886d837 100644 --- a/src/views/BasicGameListView.cpp +++ b/src/views/BasicGameListView.cpp @@ -169,12 +169,12 @@ bool BasicGameListView::input(InputConfig* config, Input input) }else if(config->isMappedTo("right", input)) { mList.stopScrolling(); - mWindow->getViewController()->goToNextSystem(); + mWindow->getViewController()->goToNextGameList(); return true; }else if(config->isMappedTo("left", input)) { mList.stopScrolling(); - mWindow->getViewController()->goToPrevSystem(); + mWindow->getViewController()->goToPrevGameList(); return true; } } diff --git a/src/views/SystemListView.cpp b/src/views/SystemListView.cpp new file mode 100644 index 000000000..d62faf8a0 --- /dev/null +++ b/src/views/SystemListView.cpp @@ -0,0 +1,78 @@ +#include "SystemListView.h" +#include "../Renderer.h" +#include "../SystemData.h" +#include "../animations/MoveCameraAnimation.h" +#include "../Window.h" +#include "ViewController.h" + +SystemListView::SystemListView(Window* window) : GuiComponent(window), mCamera(Eigen::Affine3f::Identity()), mCurrentSystem(NULL) +{ + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + goToSystem(SystemData::sSystemVector.at(0)); +} + +void SystemListView::goToSystem(SystemData* system) +{ + std::shared_ptr view = getSystemView(system); + mCurrentView = view; + mCurrentSystem = system; + setAnimation(new MoveCameraAnimation(mCamera, view->getPosition())); +} + + +std::shared_ptr SystemListView::getSystemView(SystemData* system) +{ + auto exists = mSystemViews.find(system); + if(exists != mSystemViews.end()) + return exists->second; + + const std::vector& sysVec = SystemData::sSystemVector; + int id = std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); + + std::shared_ptr view = std::shared_ptr(new SystemView(mWindow, system)); + view->setPosition(id * (float)Renderer::getScreenWidth(), 0); + + mSystemViews[system] = view; + + return view; +} + +bool SystemListView::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + int id = std::find(SystemData::sSystemVector.begin(), SystemData::sSystemVector.end(), mCurrentSystem) - SystemData::sSystemVector.begin(); + if(config->isMappedTo("left", input)) + { + id--; + if(id < 0) + id += SystemData::sSystemVector.size(); + goToSystem(SystemData::sSystemVector.at(id)); + return true; + } + if(config->isMappedTo("right", input)) + { + id = (id + 1) % SystemData::sSystemVector.size(); + goToSystem(SystemData::sSystemVector.at(id)); + return true; + } + if(config->isMappedTo("a", input)) + { + mWindow->getViewController()->goToGameList(mCurrentSystem); + return true; + } + } + + return GuiComponent::input(config, input); +} + +void SystemListView::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = mCamera * getTransform() * parentTrans; + + for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) + { + it->second->render(trans); + } +} diff --git a/src/views/SystemListView.h b/src/views/SystemListView.h new file mode 100644 index 000000000..7fe685c89 --- /dev/null +++ b/src/views/SystemListView.h @@ -0,0 +1,23 @@ +#pragma once + +#include "SystemView.h" + +class SystemListView : public GuiComponent +{ +public: + SystemListView(Window* window); + + void goToSystem(SystemData* system); + + bool input(InputConfig* config, Input input) override; + void render(const Eigen::Affine3f& parentTrans) override; + +private: + Eigen::Affine3f mCamera; + + std::shared_ptr mCurrentView; + SystemData* mCurrentSystem; + std::shared_ptr getSystemView(SystemData* system); + + std::map< SystemData*, std::shared_ptr > mSystemViews; +}; diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp new file mode 100644 index 000000000..4b0270363 --- /dev/null +++ b/src/views/SystemView.cpp @@ -0,0 +1,47 @@ +#include "SystemView.h" +#include "../SystemData.h" +#include "../Renderer.h" +#include "../Log.h" + +SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window), + mSystem(system), + + mHeaderImage(window), + mHeaderText(window), + mImage(window) +{ + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + mHeaderImage.setOrigin(0.5f, 0.0f); + mHeaderImage.setPosition(mSize.x() / 2, 0); + mHeaderImage.setResize(0, mSize.y() * 0.2f, true); + + mHeaderText.setSize(mSize.x(), 0); + mHeaderText.setCentered(true); + + mImage.setOrigin(0.5f, 0.5f); + mImage.setPosition(mSize.x() / 2, mSize.y() / 2); + + addChild(&mImage); + addChild(&mHeaderText); + addChild(&mHeaderImage); + + updateData(); +} + +void SystemView::updateData() +{ + // header + if(mSystem->getTheme()->getImage("headerImage").path.empty()) + { + // use text + mHeaderImage.setImage(""); + mHeaderText.setText(mSystem->getFullName()); + }else{ + // use image + mHeaderText.setText(""); + mHeaderImage.setImage(mSystem->getTheme()->getImage("headerImage").getTexture()); + } + + mImage.setImage(mSystem->getTheme()->getImage("systemImage").getTexture()); +} diff --git a/src/views/SystemView.h b/src/views/SystemView.h new file mode 100644 index 000000000..762591cac --- /dev/null +++ b/src/views/SystemView.h @@ -0,0 +1,23 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../components/ImageComponent.h" +#include "../components/TextComponent.h" +#include "../components/ScrollableContainer.h" + +class SystemData; + +class SystemView : public GuiComponent +{ +public: + SystemView(Window* window, SystemData* system); + + void updateData(); + +private: + SystemData* mSystem; + + TextComponent mHeaderText; + ImageComponent mHeaderImage; + ImageComponent mImage; +}; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 84444885f..7eb34c2c3 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -17,8 +17,9 @@ ViewController::ViewController(Window* window) void ViewController::goToSystemSelect() { mState.viewing = SYSTEM_SELECT; - goToSystem(SystemData::sSystemVector.at(0)); - //playViewTransition(); + mCurrentView = getSystemListView(); + playViewTransition(); + LOG(LogInfo) << "going to system select"; } SystemData* getSystemCyclic(SystemData* from, bool reverse) @@ -43,7 +44,7 @@ SystemData* getSystemCyclic(SystemData* from, bool reverse) } } -void ViewController::goToNextSystem() +void ViewController::goToNextGameList() { assert(mState.viewing == SYSTEM); @@ -51,10 +52,10 @@ void ViewController::goToNextSystem() if(system == NULL) return; - goToSystem(getSystemCyclic(system, false)); + goToGameList(getSystemCyclic(system, false)); } -void ViewController::goToPrevSystem() +void ViewController::goToPrevGameList() { assert(mState.viewing == SYSTEM); @@ -62,15 +63,15 @@ void ViewController::goToPrevSystem() if(system == NULL) return; - goToSystem(getSystemCyclic(system, true)); + goToGameList(getSystemCyclic(system, true)); } -void ViewController::goToSystem(SystemData* system) +void ViewController::goToGameList(SystemData* system) { - mState.viewing = SYSTEM; + mState.viewing = GAME_LIST; mState.data.system = system; - mCurrentView = getSystemView(system); + mCurrentView = getGameListView(system); playViewTransition(); } @@ -81,7 +82,7 @@ void ViewController::playViewTransition() void ViewController::onFileChanged(FileData* file, FileChangeType change) { - for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) + for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { it->second->onFileChanged(file, change); } @@ -108,11 +109,11 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) }); } -std::shared_ptr ViewController::getSystemView(SystemData* system) +std::shared_ptr ViewController::getGameListView(SystemData* system) { //if we already made one, return that one - auto exists = mSystemViews.find(system); - if(exists != mSystemViews.end()) + auto exists = mGameListViews.find(system); + if(exists != mGameListViews.end()) return exists->second; //if we didn't, make it, remember it, and return it @@ -146,12 +147,22 @@ std::shared_ptr ViewController::getSystemView(SystemData* system) std::vector& sysVec = SystemData::sSystemVector; int id = std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); - view->setPosition(id * (float)Renderer::getScreenWidth(), 0); + view->setPosition(id * (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight() * 2); - mSystemViews[system] = view; + mGameListViews[system] = view; return view; } +std::shared_ptr ViewController::getSystemListView() +{ + if(!mSystemListView) + { + mSystemListView = std::shared_ptr(new SystemListView(mWindow)); + mSystemListView->setPosition(0, (float)Renderer::getScreenHeight()); + } + + return mSystemListView; +} bool ViewController::input(InputConfig* config, Input input) @@ -180,8 +191,11 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f viewStart = trans.inverse().translation(); Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); - // draw systems - for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) + // draw systemlist + mSystemListView->render(trans); + + // draw gamelists + for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { // clipping Eigen::Vector3f guiStart = it->second->getPosition(); diff --git a/src/views/ViewController.h b/src/views/ViewController.h index 45a5bb49f..35cd10a7e 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -1,6 +1,7 @@ #pragma once #include "GameListView.h" +#include "SystemListView.h" class SystemData; @@ -10,9 +11,9 @@ public: ViewController(Window* window); // Navigation. - void goToNextSystem(); - void goToPrevSystem(); - void goToSystem(SystemData* system); + void goToNextGameList(); + void goToPrevGameList(); + void goToGameList(SystemData* system); void goToSystemSelect(); void onFileChanged(FileData* file, FileChangeType change); @@ -29,14 +30,14 @@ public: { START_SCREEN, SYSTEM_SELECT, - SYSTEM + GAME_LIST }; struct State { ViewMode viewing; - inline SystemData* getSystem() const { assert(viewing == SYSTEM); return data.system; } + inline SystemData* getSystem() const { assert(viewing == GAME_LIST); return data.system; } private: friend ViewController; @@ -50,11 +51,13 @@ public: private: void playViewTransition(); - std::shared_ptr getSystemView(SystemData* system); - + std::shared_ptr getGameListView(SystemData* system); + std::shared_ptr getSystemListView(); + std::shared_ptr mCurrentView; - std::map< SystemData*, std::shared_ptr > mSystemViews; - + std::map< SystemData*, std::shared_ptr > mGameListViews; + std::shared_ptr mSystemListView; + Eigen::Affine3f mCamera; float mFadeOpacity; From 3fb06d18336b083853b2fe4e3aa2eb6a0a510daa Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Dec 2013 13:17:03 -0600 Subject: [PATCH 108/386] Better positioning for system images. --- src/views/SystemListView.cpp | 1 + src/views/SystemView.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/views/SystemListView.cpp b/src/views/SystemListView.cpp index d62faf8a0..424fdc43a 100644 --- a/src/views/SystemListView.cpp +++ b/src/views/SystemListView.cpp @@ -71,6 +71,7 @@ void SystemListView::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = mCamera * getTransform() * parentTrans; + // TODO: clipping for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) { it->second->render(trans); diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 4b0270363..b1f0a5902 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -16,11 +16,13 @@ SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window mHeaderImage.setPosition(mSize.x() / 2, 0); mHeaderImage.setResize(0, mSize.y() * 0.2f, true); + mHeaderText.setPosition(0, 6); mHeaderText.setSize(mSize.x(), 0); mHeaderText.setCentered(true); mImage.setOrigin(0.5f, 0.5f); - mImage.setPosition(mSize.x() / 2, mSize.y() / 2); + mImage.setPosition(mSize.x() / 2, mSize.y() * 0.6f); + mImage.setResize(0, mSize.y() * 0.8f, false); addChild(&mImage); addChild(&mHeaderText); From ccea2a7e049957caaf3b46f3972e0e01414e8dd8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Dec 2013 13:48:29 -0600 Subject: [PATCH 109/386] Removed some old effects code from Window. Added a simple "LOADING" screen when ES starts up. ViewController now preloads GameListViews so there's no lag when browsing to a system for the first time. --- src/Window.cpp | 54 +++++++++--------------------------- src/Window.h | 16 ++--------- src/main.cpp | 15 ++++++++-- src/views/ViewController.cpp | 13 +++++++-- src/views/ViewController.h | 4 +++ 5 files changed, 41 insertions(+), 61 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index c2b2e42f6..6635dca52 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -9,16 +9,17 @@ #include "views/ViewController.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), - mZoomFactor(1.0f), mCenterPoint(0, 0), mMatrix(Eigen::Affine3f::Identity()), mFadePercent(0.0f), mAllowSleep(true) + mAllowSleep(true) { mInputManager = new InputManager(this); mViewController = new ViewController(this); pushGui(mViewController); - setCenterPoint(Eigen::Vector2f(Renderer::getScreenWidth() / 2, Renderer::getScreenHeight() / 2)); } Window::~Window() { + delete mViewController; // this would get deleted down below, but just to be safe, delete it here + //delete all our GUIs while(peekGui()) delete peekGui(); @@ -131,13 +132,12 @@ void Window::update(int deltaTime) void Window::render() { + Eigen::Affine3f transform = Eigen::Affine3f::Identity(); for(unsigned int i = 0; i < mGuiStack.size(); i++) { - mGuiStack.at(i)->render(mMatrix); + mGuiStack.at(i)->render(transform); } - postProcess(); - if(Settings::getInstance()->getBool("DRAWFRAMERATE")) { Renderer::setMatrix(Eigen::Affine3f::Identity()); @@ -150,42 +150,6 @@ void Window::normalizeNextUpdate() mNormalizeNextUpdate = true; } -void Window::setZoomFactor(const float& zoom) -{ - mZoomFactor = zoom; - updateMatrix(); -} - -void Window::setCenterPoint(const Eigen::Vector2f& point) -{ - mCenterPoint = point; - updateMatrix(); -} - -void Window::updateMatrix() -{ - const float sw = Renderer::getScreenWidth() / mZoomFactor; - const float sh = Renderer::getScreenHeight() / mZoomFactor; - - mMatrix = Eigen::Affine3f::Identity(); - mMatrix = mMatrix.scale(Eigen::Vector3f(mZoomFactor, mZoomFactor, 1)); - mMatrix = mMatrix.translate(Eigen::Vector3f(sw / 2 - mCenterPoint.x(), sh / 2 - mCenterPoint.y(), 0)); -} - -void Window::setFadePercent(const float& perc) -{ - mFadePercent = perc; -} - -void Window::postProcess() -{ - if(mFadePercent > 0.0f) - { - Renderer::setMatrix(Eigen::Affine3f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | ((unsigned char)(mFadePercent * 255))); - } -} - bool Window::getAllowSleep() { return mAllowSleep; @@ -195,3 +159,11 @@ void Window::setAllowSleep(bool sleep) { mAllowSleep = sleep; } + +void Window::renderLoadingScreen() +{ + Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF); + mDefaultFonts.at(2)->drawCenteredText("LOADING", 0, (Renderer::getScreenHeight() - mDefaultFonts.at(2)->getHeight()) / 2.0f , 0xFFFFFFFF); + Renderer::swapBuffers(); +} diff --git a/src/Window.h b/src/Window.h index 757fa2a7b..d48450806 100644 --- a/src/Window.h +++ b/src/Window.h @@ -30,14 +30,11 @@ public: void normalizeNextUpdate(); - void setZoomFactor(const float& zoom); - void setCenterPoint(const Eigen::Vector2f& point); - - void setFadePercent(const float& perc); - bool getAllowSleep(); void setAllowSleep(bool sleep); + void renderLoadingScreen(); + private: InputManager* mInputManager; ViewController* mViewController; @@ -52,15 +49,6 @@ private: bool mNormalizeNextUpdate; - float mZoomFactor; - Eigen::Vector2f mCenterPoint; - - void updateMatrix(); - Eigen::Affine3f mMatrix; - - void postProcess(); - float mFadePercent; - bool mAllowSleep; }; diff --git a/src/main.cpp b/src/main.cpp index 0921740b7..bc8c9fec9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -131,10 +131,15 @@ int main(int argc, char* argv[]) atexit(&onExit); Window window; - if(!scrape_cmdline && !window.init(width, height)) + if(!scrape_cmdline) { - LOG(LogError) << "Window failed to initialize!"; - return 1; + if(!window.init(width, height)) + { + LOG(LogError) << "Window failed to initialize!"; + return 1; + } + + window.renderLoadingScreen(); } //try loading the system config file @@ -160,6 +165,10 @@ int main(int argc, char* argv[]) //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug) SDL_JoystickEventState(SDL_DISABLE); + // preload what we can right away instead of waiting for the user to select it + // this makes for no delays when accessing content, but a longer startup time + window.getViewController()->preload(); + //choose which GUI to open depending on if an input configuration already exists if(fs::exists(InputManager::getConfigPath())) { diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 7eb34c2c3..c5e77061d 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -19,7 +19,6 @@ void ViewController::goToSystemSelect() mState.viewing = SYSTEM_SELECT; mCurrentView = getSystemListView(); playViewTransition(); - LOG(LogInfo) << "going to system select"; } SystemData* getSystemCyclic(SystemData* from, bool reverse) @@ -46,7 +45,7 @@ SystemData* getSystemCyclic(SystemData* from, bool reverse) void ViewController::goToNextGameList() { - assert(mState.viewing == SYSTEM); + assert(mState.viewing == GAME_LIST); SystemData* system = mState.data.system; if(system == NULL) @@ -57,7 +56,7 @@ void ViewController::goToNextGameList() void ViewController::goToPrevGameList() { - assert(mState.viewing == SYSTEM); + assert(mState.viewing == GAME_LIST); SystemData* system = mState.data.system; if(system == NULL) @@ -213,3 +212,11 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | (unsigned char)(mFadeOpacity * 255)); } } + +void ViewController::preload() +{ + for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + { + getGameListView(*it); + } +} diff --git a/src/views/ViewController.h b/src/views/ViewController.h index 35cd10a7e..c9ec81ab3 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -10,6 +10,10 @@ class ViewController : public GuiComponent public: ViewController(Window* window); + // Try to completely populate the GameListView map. + // Caches things so there's no pauses during transitions. + void preload(); + // Navigation. void goToNextGameList(); void goToPrevGameList(); From 0423dc03dd42e51ffc501ac784a245ea0bb2b6d0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Dec 2013 16:04:15 -0600 Subject: [PATCH 110/386] Added folder metadata loading/saving. Rewrote a lot of the gamelist reading/saving code, let me know if I broke it. --- src/XMLReader.cpp | 274 ++++++++++++++++++++++++++-------------------- 1 file changed, 153 insertions(+), 121 deletions(-) diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index b16fca806..3ae03f548 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -5,82 +5,110 @@ #include "Log.h" #include "Settings.h" -//this is obviously an incredibly inefficient way to go about searching -//but I don't think it'll matter too much with the size of most collections -FileData* searchFolderByPath(FileData* folder, std::string const& path) +namespace fs = boost::filesystem; + +// example: removeCommonPath("/home/pi/roms/nes/foo/bar.nes", "/home/pi/roms/nes/") returns "foo/bar.nes" +fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool& contains) { - for(auto it = folder->getChildren().begin(); it != folder->getChildren().end(); it++) + fs::path p = fs::canonical(path); + fs::path r = fs::canonical(relativeTo); + + if(p.root_path() != r.root_path()) { - if((*it)->getType() == FOLDER) - { - FileData* result = searchFolderByPath(*it, path); - if(result) - return result; - }else{ - if((*it)->getPath().generic_string() == path) - return *it; - } + contains = false; + return p; } - return NULL; + fs::path result; + + // find point of divergence + auto itr_path = p.begin(); + auto itr_relative_to = r.begin(); + while(*itr_path == *itr_relative_to && itr_path != p.end() && itr_relative_to != r.end()) + { + ++itr_path; + ++itr_relative_to; + } + + if(itr_relative_to != r.end()) + { + contains = false; + return p; + } + + while(itr_path != p.end()) + { + if(*itr_path != fs::path(".")) + result = result / *itr_path; + + ++itr_path; + } + + contains = true; + return result; } -FileData* createGameFromPath(std::string gameAbsPath, SystemData* system) +FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type) { - std::string gamePath = gameAbsPath; - std::string sysPath = system->getStartPath(); - - //strip out the system path stuff so it's relative to the system root folder - unsigned int i = 0; - while(i < gamePath.length() && i < sysPath.length() && gamePath[i] == sysPath[i]) - i++; - - gamePath = gamePath.substr(i, gamePath.length() - i); - - - if(gamePath[0] != '/') - gamePath.insert(0, "/"); - - - //make our way through the directory tree finding each folder in our path or creating it if it doesn't exist - FileData* folder = system->getRootFolder(); - - size_t separator = 0; - size_t nextSeparator = 0; - while(nextSeparator != std::string::npos) + // first, verify that path is within the system's root folder + FileData* root = system->getRootFolder(); + + bool contains = false; + fs::path relative = removeCommonPath(path, root->getPath(), contains); + if(!contains) { - //determine which chunk of the path we're testing right now - nextSeparator = gamePath.find('/', separator + 1); - if(nextSeparator == std::string::npos) - break; + LOG(LogError) << "File path \"" << path << "\" is outside system path \"" << system->getStartPath() << "\""; + return NULL; + } - std::string checkName = gamePath.substr(separator + 1, nextSeparator - separator - 1); - separator = nextSeparator; - - //see if the folder already exists - bool foundFolder = false; - for(auto it = folder->getChildren().begin(); it != folder->getChildren().end(); it++) + auto path_it = relative.begin(); + FileData* treeNode = root; + bool found = false; + while(path_it != relative.end()) + { + const std::vector& children = treeNode->getChildren(); + found = false; + for(auto child_it = children.begin(); child_it != children.end(); child_it++) { - if((*it)->getType() == FOLDER && (*it)->getName() == checkName) + if((*child_it)->getPath().filename() == *path_it) { - folder = *it; - foundFolder = true; + treeNode = *child_it; + found = true; break; } } - //the folder didn't already exist, so create it - if(!foundFolder) + // this is the end + if(path_it == --relative.end()) { - FileData* newFolder = new FileData(FOLDER, folder->getPath() / checkName, system); - folder->addChild(newFolder); - folder = newFolder; + if(found) + return treeNode; + + FileData* file = new FileData(type, path, system); + treeNode->addChild(file); + return file; } + + if(!found) + { + // don't create folders unless it's leading up to a game + // if type is a folder it's gonna be empty, so don't bother + if(type == FOLDER) + { + LOG(LogWarning) << "folder doesn't already exist, won't create metadata for folder"; + return NULL; + } + + // create missing folder + FileData* folder = new FileData(FOLDER, treeNode->getPath().stem() / *path_it, system); + treeNode->addChild(folder); + treeNode = folder; + } + + path_it++; } - FileData* game = new FileData(GAME, gameAbsPath, system); - folder->addChild(game); - return game; + return NULL; } void parseGamelist(SystemData* system) @@ -108,49 +136,36 @@ void parseGamelist(SystemData* system) return; } - for(pugi::xml_node gameNode = root.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) + const char* tagList[2] = { "game", "folder" }; + FileType typeList[2] = { GAME, FOLDER }; + for(int i = 0; i < 2; i++) { - pugi::xml_node pathNode = gameNode.child("path"); - if(!pathNode) + const char* tag = tagList[i]; + FileType type = typeList[i]; + for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) { - LOG(LogError) << " node contains no child!"; - continue; - } + boost::filesystem::path path = boost::filesystem::path(fileNode.child("path").text().get()); + + if(!boost::filesystem::exists(path)) + { + LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; + continue; + } - //convert path to generic directory seperators - boost::filesystem::path gamePath(pathNode.text().get()); - std::string path = gamePath.generic_string(); - - //expand '.' - if(path[0] == '.') - { - path.erase(0, 1); - path.insert(0, boost::filesystem::path(xmlpath).parent_path().generic_string()); - } - - //expand '~' - if(path[0] == '~') - { - path.erase(0, 1); - path.insert(0, getHomePath()); - } - - if(boost::filesystem::exists(path)) - { - FileData* game = searchFolderByPath(system->getRootFolder(), path); - - if(game == NULL) - game = createGameFromPath(path, system); + FileData* file = findOrCreateFile(system, path, type); + if(!file) + { + LOG(LogError) << "Error finding/creating FileData for \"" << path << "\", skipping."; + continue; + } //load the metadata - std::string defaultName = game->metadata.get("name"); - game->metadata = MetaDataList::createFromXML(GAME_METADATA, gameNode); + std::string defaultName = file->metadata.get("name"); + file->metadata = MetaDataList::createFromXML(GAME_METADATA, fileNode); //make sure name gets set if one didn't exist - if(game->metadata.get("name").empty()) - game->metadata.set("name", defaultName); - }else{ - LOG(LogWarning) << "Game at \"" << path << "\" does not exist!"; + if(file->metadata.get("name").empty()) + file->metadata.set("name", defaultName); } } } @@ -175,6 +190,27 @@ void addGameDataNode(pugi::xml_node& parent, const FileData* game, SystemData* s } } +void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* tag, SystemData* system) +{ + //create game and add to parent node + pugi::xml_node newNode = parent.append_child(tag); + + //write metadata + file->metadata.appendToXML(newNode, true); + + if(newNode.children().begin() == newNode.child("name") //first element is name + && ++newNode.children().begin() == newNode.children().end() //theres only one element + && newNode.child("name").text().get() == getCleanFileName(file->getPath())) //the name is the default + { + //if the only info is the default name, don't bother with this node + //delete it and ultimately do nothing + parent.remove_child(newNode); + }else{ + //there's something useful in there so we'll keep the node, add the path + newNode.prepend_child("path").text().set(file->getPath().generic_string().c_str()); + } +} + void updateGamelist(SystemData* system) { //We do this by reading the XML again, adding changes and then writing it back, @@ -192,9 +228,8 @@ void updateGamelist(SystemData* system) if(boost::filesystem::exists(xmlpath)) { //parse an existing file first - LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\" before writing..."; - pugi::xml_parse_result result = doc.load_file(xmlpath.c_str()); + if(!result) { LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); @@ -222,40 +257,37 @@ void updateGamelist(SystemData* system) if (rootFolder != nullptr) { //get only files, no folders - std::vector files = rootFolder->getFilesRecursive(GAME); + std::vector files = rootFolder->getFilesRecursive(GAME | FOLDER); //iterate through all files, checking if they're already in the XML std::vector::const_iterator fit = files.cbegin(); while(fit != files.cend()) { - if((*fit)->getType() == GAME) - { - //worked. check if this games' path can be found somewhere in the XML - for(pugi::xml_node gameNode = root.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) - { - //get path from game node - pugi::xml_node pathNode = gameNode.child("path"); - if(!pathNode) - { - LOG(LogError) << " node contains no child!"; - continue; - } + const char* tag = ((*fit)->getType() == GAME) ? "game" : "folder"; - //check paths. use the same directory separators - boost::filesystem::path nodePath(pathNode.text().get()); - boost::filesystem::path gamePath((*fit)->getPath()); - if (nodePath.generic_string() == gamePath.generic_string()) - { - //found the game. remove it. it will be added again later with updated values - root.remove_child(gameNode); - //break node search loop - break; - } + // check if the file already exists in the XML + // if it does, remove it before adding + for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) + { + pugi::xml_node pathNode = fileNode.child("path"); + if(!pathNode) + { + LOG(LogError) << "<" << tag << "> node contains no child!"; + continue; } - //either the game content was removed, because it needs to be updated, - //or didn't exist in the first place, so just add it - addGameDataNode(root, *fit, system); + boost::filesystem::path nodePath(pathNode.text().get()); + boost::filesystem::path gamePath((*fit)->getPath()); + if(fs::canonical(nodePath) == fs::canonical(gamePath)) + { + // found it + root.remove_child(fileNode); + break; + } } + + // it was either removed or never existed to begin with; either way, we can add it now + addFileDataNode(root, *fit, tag, system); + ++fit; } //now write the file From 67818d5727b5ba5a56dbc89c60fa2759315cf3d9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Dec 2013 16:08:52 -0600 Subject: [PATCH 111/386] Don't create gamelist folders even if their parent directory is valid. --- src/XMLReader.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 3ae03f548..7552f159c 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -84,6 +84,12 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa if(found) return treeNode; + if(type == FOLDER) + { + LOG(LogWarning) << "gameList: folder doesn't already exist, won't create"; + return NULL; + } + FileData* file = new FileData(type, path, system); treeNode->addChild(file); return file; @@ -95,7 +101,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa // if type is a folder it's gonna be empty, so don't bother if(type == FOLDER) { - LOG(LogWarning) << "folder doesn't already exist, won't create metadata for folder"; + LOG(LogWarning) << "gameList: folder doesn't already exist, won't create"; return NULL; } From 7e9b20fac5a7414243dff9fbe5c6fecbad21bf45 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 12 Dec 2013 21:17:59 -0600 Subject: [PATCH 112/386] Added a fade in from black for ViewController. Added LambdaAnimation (which lets you use a lambda for the apply method). Useful for simple one-off animations. Added animation slots - only one animation can play per slot. This way you can have two animations run at the same time. --- CMakeLists.txt | 1 + src/GuiComponent.cpp | 42 ++++++++++++++++++++++---- src/GuiComponent.h | 9 ++++-- src/animations/AnimationController.cpp | 14 +++------ src/animations/AnimationController.h | 3 +- src/animations/LambdaAnimation.h | 20 ++++++++++++ src/main.cpp | 4 +-- src/views/ViewController.cpp | 9 ++++-- 8 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 src/animations/LambdaAnimation.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 895135281..986ea7173 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -203,6 +203,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LambdaAnimation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LaunchAnimation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/MoveCameraAnimation.h diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 6bd70a989..9f5f6f1f1 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -7,12 +7,20 @@ GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()) { + for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) + mAnimationMap[i] = NULL; } GuiComponent::~GuiComponent() { mWindow->removeGui(this); + for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) + { + if(mAnimationMap[i]) + delete mAnimationMap[i]; + } + if(mParent) mParent->removeChild(this); @@ -33,8 +41,19 @@ bool GuiComponent::input(InputConfig* config, Input input) void GuiComponent::update(int deltaTime) { - if(mAnimationController) - mAnimationController->update(deltaTime); + for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) + { + AnimationController* anim = mAnimationMap[i]; + if(anim) + { + bool done = anim->update(deltaTime); + if(done) + { + mAnimationMap[i] = NULL; + delete anim; + } + } + } for(unsigned int i = 0; i < getChildCount(); i++) { @@ -186,12 +205,23 @@ void GuiComponent::textInput(const char* text) } } -void GuiComponent::setAnimation(Animation* anim, std::function finishedCallback, bool reverse) +void GuiComponent::setAnimation(Animation* anim, std::function finishedCallback, bool reverse, unsigned char slot) { - mAnimationController = std::shared_ptr(new AnimationController(anim, finishedCallback, reverse)); + assert(slot < MAX_ANIMATIONS); + + AnimationController* oldAnim = mAnimationMap[slot]; + mAnimationMap[slot] = new AnimationController(anim, finishedCallback, reverse); + + if(oldAnim) + delete oldAnim; } -void GuiComponent::stopAnimation() +void GuiComponent::stopAnimation(unsigned char slot) { - mAnimationController.reset(); + assert(slot < MAX_ANIMATIONS); + if(mAnimationMap[slot]) + { + delete mAnimationMap[slot]; + mAnimationMap[slot] = NULL; + } } diff --git a/src/GuiComponent.h b/src/GuiComponent.h index 5118b199e..be58769ee 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -52,8 +52,8 @@ public: GuiComponent* getChild(unsigned int i) const; // animation will be automatically deleted when it completes or is stopped. - void setAnimation(Animation* animation, std::function finishedCallback = nullptr, bool reverse = false); - void stopAnimation(); + void setAnimation(Animation* animation, std::function finishedCallback = nullptr, bool reverse = false, unsigned char slot = 0); + void stopAnimation(unsigned char slot); virtual unsigned char getOpacity() const; virtual void setOpacity(unsigned char opacity); @@ -78,9 +78,12 @@ protected: Eigen::Vector3f mPosition; Eigen::Vector2f mSize; +public: + const static unsigned char MAX_ANIMATIONS = 4; + private: Eigen::Affine3f mTransform; //Don't access this directly! Use getTransform()! - std::shared_ptr mAnimationController; + AnimationController* mAnimationMap[MAX_ANIMATIONS]; }; #endif diff --git a/src/animations/AnimationController.cpp b/src/animations/AnimationController.cpp index 03b75cccd..3c92105d2 100644 --- a/src/animations/AnimationController.cpp +++ b/src/animations/AnimationController.cpp @@ -13,7 +13,7 @@ AnimationController::~AnimationController() delete mAnimation; } -void AnimationController::update(int deltaTime) +bool AnimationController::update(int deltaTime) { mTime += deltaTime; float t = (float)mTime / mAnimation->getDuration(); @@ -26,13 +26,7 @@ void AnimationController::update(int deltaTime) mAnimation->apply(mReverse ? 1.0f - t : t); if(t == 1.0f) - { - if(mFinishedCallback) - { - // in case mFinishedCallback causes us to be deleted, use a copy - auto copy = mFinishedCallback; - mFinishedCallback = nullptr; - copy(); - } - } + return true; + + return false; } diff --git a/src/animations/AnimationController.h b/src/animations/AnimationController.h index 5ea62b209..de28f62a5 100644 --- a/src/animations/AnimationController.h +++ b/src/animations/AnimationController.h @@ -12,7 +12,8 @@ public: AnimationController(Animation* anim, std::function finishedCallback = nullptr, bool reverse = false); virtual ~AnimationController(); - void update(int deltaTime); + // Returns true if the animation is complete. + bool update(int deltaTime); private: Animation* mAnimation; diff --git a/src/animations/LambdaAnimation.h b/src/animations/LambdaAnimation.h new file mode 100644 index 000000000..d3888c2f1 --- /dev/null +++ b/src/animations/LambdaAnimation.h @@ -0,0 +1,20 @@ +#pragma once + +#include "Animation.h" + +class LambdaAnimation : public Animation +{ +public: + LambdaAnimation(const std::function& func, int duration) : mFunction(func), mDuration(duration) {} + + int getDuration() const override { return mDuration; } + + void apply(float t) override + { + mFunction(t); + } + +private: + std::function mFunction; + int mDuration; +}; diff --git a/src/main.cpp b/src/main.cpp index bc8c9fec9..9e5f6bf6d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -182,7 +182,7 @@ int main(int argc, char* argv[]) bool sleeping = false; unsigned int timeSinceLastEvent = 0; - int lastTime = 0; + int lastTime = SDL_GetTicks(); bool running = true; while(running) @@ -230,8 +230,8 @@ int main(int argc, char* argv[]) deltaTime = 1000; window.update(deltaTime); - Renderer::swapBuffers(); //swap here so we can read the last screen state during updates (see ImageComponent::copyScreen()) window.render(); + Renderer::swapBuffers(); //sleep if we're past our threshold //sleeping entails setting a flag to start skipping frames diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index c5e77061d..e4daa665d 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -7,10 +7,13 @@ #include "GridGameListView.h" #include "../animations/LaunchAnimation.h" #include "../animations/MoveCameraAnimation.h" +#include "../animations/LambdaAnimation.h" ViewController::ViewController(Window* window) - : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0) + : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(1) { + // slot 1 so the fade carries over + setAnimation(new LambdaAnimation([&] (float t) { mFadeOpacity = lerp(1.0f, 0.0f, t); }, 900), nullptr, false, 1); mState.viewing = START_SCREEN; } @@ -95,11 +98,13 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) return; } - game->getSystem()->getTheme()->playSound("gameSelectSound"); Eigen::Affine3f origCamera = mCamera; + origCamera.translation() = -mCurrentView->getPosition(); + center += mCurrentView->getPosition(); + stopAnimation(1); // make sure the fade in isn't still playing setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), [this, origCamera, center, game] { game->getSystem()->launchGame(mWindow, game); From 1398785468c7aa3417ee29bd54a4dd070e87fa6b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 13 Dec 2013 14:38:34 -0600 Subject: [PATCH 113/386] Lock input during launch animation. --- src/views/ViewController.cpp | 7 ++++++- src/views/ViewController.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index e4daa665d..ca4f56340 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -10,7 +10,7 @@ #include "../animations/LambdaAnimation.h" ViewController::ViewController(Window* window) - : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(1) + : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(1), mLockInput(false) { // slot 1 so the fade carries over setAnimation(new LambdaAnimation([&] (float t) { mFadeOpacity = lerp(1.0f, 0.0f, t); }, 900), nullptr, false, 1); @@ -105,10 +105,12 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) center += mCurrentView->getPosition(); stopAnimation(1); // make sure the fade in isn't still playing + mLockInput = true; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), [this, origCamera, center, game] { game->getSystem()->launchGame(mWindow, game); mCamera = origCamera; + mLockInput = false; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), nullptr, true); }); } @@ -171,6 +173,9 @@ std::shared_ptr ViewController::getSystemListView() bool ViewController::input(InputConfig* config, Input input) { + if(mLockInput) + return true; + if(mCurrentView) return mCurrentView->input(config, input); diff --git a/src/views/ViewController.h b/src/views/ViewController.h index c9ec81ab3..bb3472cb9 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -64,6 +64,7 @@ private: Eigen::Affine3f mCamera; float mFadeOpacity; + bool mLockInput; State mState; }; From bec3a2599a9fff4404933518659450ef90dc0493 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 20 Dec 2013 15:09:35 -0600 Subject: [PATCH 114/386] Only run input code when input is pressed, not released. --- src/views/GridGameListView.cpp | 53 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/views/GridGameListView.cpp b/src/views/GridGameListView.cpp index 095232a63..a833ea352 100644 --- a/src/views/GridGameListView.cpp +++ b/src/views/GridGameListView.cpp @@ -43,39 +43,42 @@ void GridGameListView::setCursor(FileData* file) bool GridGameListView::input(InputConfig* config, Input input) { - if(config->isMappedTo("a", input)) + if(input.value != 0) { - if(mGrid.getList().size() > 0) + if(config->isMappedTo("a", input)) { - FileData* cursor = getCursor(); - if(cursor->getType() == GAME) + if(mGrid.getList().size() > 0) { - mWindow->getViewController()->launch(cursor); - }else{ - // it's a folder - if(cursor->getChildren().size() > 0) + FileData* cursor = getCursor(); + if(cursor->getType() == GAME) { - mCursorStack.push(cursor); - populateList(cursor); + mWindow->getViewController()->launch(cursor); + }else{ + // it's a folder + if(cursor->getChildren().size() > 0) + { + mCursorStack.push(cursor); + populateList(cursor); + } } - } + return true; + } + }else if(config->isMappedTo("b", input)) + { + if(mCursorStack.size()) + { + populateList(mCursorStack.top()->getParent()); + mGrid.setCursor(mCursorStack.top()); + mCursorStack.pop(); + mTheme->playSound("backSound"); + }else{ + mGrid.stopScrolling(); + mWindow->getViewController()->goToSystemSelect(); + } + return true; } - }else if(config->isMappedTo("b", input)) - { - if(mCursorStack.size()) - { - populateList(mCursorStack.top()->getParent()); - mGrid.setCursor(mCursorStack.top()); - mCursorStack.pop(); - mTheme->playSound("backSound"); - }else{ - mGrid.stopScrolling(); - mWindow->getViewController()->goToSystemSelect(); - } - - return true; } return GameListView::input(config, input); } From bce46cb92538528b41b1453691101996a1449b0a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 20 Dec 2013 15:44:12 -0600 Subject: [PATCH 115/386] Fixed sleep mode dimming not working --- src/main.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9e5f6bf6d..2eef78f66 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -231,8 +231,7 @@ int main(int argc, char* argv[]) window.update(deltaTime); window.render(); - Renderer::swapBuffers(); - + //sleep if we're past our threshold //sleeping entails setting a flag to start skipping frames //and initially drawing a black semi-transparent rect to dim the screen @@ -242,9 +241,10 @@ int main(int argc, char* argv[]) sleeping = true; timeSinceLastEvent = 0; Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000A0); - Renderer::swapBuffers(); } + Renderer::swapBuffers(); + Log::flush(); } From 4b6f8d9007c758f38f3dc370595a6445b10cf407 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 20 Dec 2013 15:47:21 -0600 Subject: [PATCH 116/386] Move menu open code to ViewController so you can open it in the system select --- src/views/GameListView.cpp | 6 ------ src/views/ViewController.cpp | 10 ++++++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/views/GameListView.cpp b/src/views/GameListView.cpp index b819b3fe4..743fb0bf6 100644 --- a/src/views/GameListView.cpp +++ b/src/views/GameListView.cpp @@ -23,12 +23,6 @@ bool GameListView::input(InputConfig* config, Input input) })); mTheme->playSound("menuOpenSound"); return true; - }else if(config->isMappedTo("menu", input) && input.value != 0) - { - // open menu - mWindow->pushGui(new GuiMenu(mWindow)); - mTheme->playSound("menuOpenSound"); - return true; }else if(config->isMappedTo("select", input) && input.value != 0) { // open fast select diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index ca4f56340..8e9a57d1c 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -5,6 +5,7 @@ #include "BasicGameListView.h" #include "DetailedGameListView.h" #include "GridGameListView.h" +#include "../components/GuiMenu.h" #include "../animations/LaunchAnimation.h" #include "../animations/MoveCameraAnimation.h" #include "../animations/LambdaAnimation.h" @@ -176,6 +177,15 @@ bool ViewController::input(InputConfig* config, Input input) if(mLockInput) return true; + // open menu + if(config->isMappedTo("menu", input) && input.value != 0) + { + // open menu + mWindow->pushGui(new GuiMenu(mWindow)); + ThemeData().playSound("menuOpenSound"); + return true; + } + if(mCurrentView) return mCurrentView->input(config, input); From 05948e9302bc4b47b14b7a8d664b9884d12ce1a7 Mon Sep 17 00:00:00 2001 From: N1xx1 Date: Sun, 22 Dec 2013 14:03:05 +0100 Subject: [PATCH 117/386] Segmentation Fault for pointer being null. --- src/views/ViewController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 8e9a57d1c..0f8e00dcd 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -211,7 +211,7 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); // draw systemlist - mSystemListView->render(trans); + getSystemListView()->render(trans); // draw gamelists for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) From b8d44be6c2e44aa0612be2ab74dce59444101d76 Mon Sep 17 00:00:00 2001 From: N1xx1 Date: Sun, 22 Dec 2013 14:08:20 +0100 Subject: [PATCH 118/386] Segmentation Fault for pointer being null. --- src/views/ViewController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 0f8e00dcd..36d8850a6 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -211,7 +211,7 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); // draw systemlist - getSystemListView()->render(trans); + if(mSystemListView) mSystemListView->render(trans); // draw gamelists for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) From 12ee2158739528f40d651f00fb0492f1422a6b7e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 22 Dec 2013 16:16:01 -0600 Subject: [PATCH 119/386] Refactored duplicate functionality in GridGameList and BasicGameList into ISimpleGameList. BasicGameList and DetailedGameList now automatically switch as metadata changes. --- CMakeLists.txt | 18 +- src/components/GuiFastSelect.cpp | 2 +- src/components/GuiFastSelect.h | 6 +- src/components/ImageGridComponent.h | 9 + src/components/TextListComponent.h | 10 + src/views/BasicGameListView.cpp | 183 ------------------ src/views/BasicGameListView.h | 34 ---- src/views/GridGameListView.cpp | 93 --------- src/views/GridGameListView.h | 28 --- src/views/ViewController.cpp | 34 +++- src/views/ViewController.h | 10 +- src/views/gamelist/BasicGameListView.cpp | 71 +++++++ src/views/gamelist/BasicGameListView.h | 24 +++ .../{ => gamelist}/DetailedGameListView.cpp | 11 +- .../{ => gamelist}/DetailedGameListView.h | 8 +- src/views/gamelist/GridGameListView.cpp | 56 ++++++ src/views/gamelist/GridGameListView.h | 25 +++ .../IGameListView.cpp} | 18 +- .../IGameListView.h} | 12 +- src/views/gamelist/ISimpleGameListView.cpp | 101 ++++++++++ src/views/gamelist/ISimpleGameListView.h | 36 ++++ 21 files changed, 404 insertions(+), 385 deletions(-) delete mode 100644 src/views/BasicGameListView.cpp delete mode 100644 src/views/BasicGameListView.h delete mode 100644 src/views/GridGameListView.cpp delete mode 100644 src/views/GridGameListView.h create mode 100644 src/views/gamelist/BasicGameListView.cpp create mode 100644 src/views/gamelist/BasicGameListView.h rename src/views/{ => gamelist}/DetailedGameListView.cpp (89%) rename src/views/{ => gamelist}/DetailedGameListView.h (68%) create mode 100644 src/views/gamelist/GridGameListView.cpp create mode 100644 src/views/gamelist/GridGameListView.h rename src/views/{GameListView.cpp => gamelist/IGameListView.cpp} (68%) rename src/views/{GameListView.h => gamelist/IGameListView.h} (81%) create mode 100644 src/views/gamelist/ISimpleGameListView.cpp create mode 100644 src/views/gamelist/ISimpleGameListView.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a8b7bb023..a23c16793 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,10 +193,11 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/BasicGameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h @@ -271,10 +272,11 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/BasicGameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/DetailedGameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GridGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index 0022f4abc..2df321dea 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -5,7 +5,7 @@ static const std::string LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -GuiFastSelect::GuiFastSelect(Window* window, GameListView* gamelist) : GuiComponent(window), +GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiComponent(window), mBackground(window), mSortText(window), mLetterText(window), mGameList(gamelist) { setPosition(Renderer::getScreenWidth() * 0.2f, Renderer::getScreenHeight() * 0.2f); diff --git a/src/components/GuiFastSelect.h b/src/components/GuiFastSelect.h index dfee83433..3e2eb309f 100644 --- a/src/components/GuiFastSelect.h +++ b/src/components/GuiFastSelect.h @@ -1,7 +1,7 @@ #pragma once #include "../GuiComponent.h" -#include "../views/GameListView.h" +#include "../views/gamelist/IGameListView.h" #include "NinePatchComponent.h" #include "TextComponent.h" @@ -9,7 +9,7 @@ class GuiFastSelect : public GuiComponent { public: - GuiFastSelect(Window* window, GameListView* gamelist); + GuiFastSelect(Window* window, IGameListView* gamelist); bool input(InputConfig* config, Input input); void update(int deltaTime); @@ -31,5 +31,5 @@ private: TextComponent mSortText; TextComponent mLetterText; - GameListView* mGameList; + IGameListView* mGameList; }; diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index c185ac1dc..f9e73ce94 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -24,6 +24,7 @@ public: void clear(); void setCursor(const T& select); + void setCursor(typename const std::vector::const_iterator& it); inline const T& getSelected() const { return mEntries.at(mCursor).object; } inline const std::vector& getList() const { return mEntries; } @@ -171,6 +172,14 @@ void ImageGridComponent::setCursor(const T& obj) LOG(LogError) << "Tried to set cursor to object we couldn't find"; } +template +void ImageGridComponent::setCursor(typename const std::vector::const_iterator& it) +{ + assert(it != mEntries.end()); + mCursor = it - mEntries.begin(); + onCursorChanged(CURSOR_STOPPED); +} + template void ImageGridComponent::stopScrolling() { diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 4313694bf..c63c50050 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -49,6 +49,7 @@ public: inline const std::vector& getList() const { return mRowVector; } void setCursor(const T& select); + void setCursor(typename const std::vector::const_iterator& it); void stopScrolling(); inline bool isScrolling() const { return mScrollDir != 0; } @@ -375,6 +376,15 @@ void TextListComponent::setCursor(const T& obj) LOG(LogError) << "Tried to set cursor to object we couldn't find"; } + +template +void TextListComponent::setCursor(typename const std::vector::const_iterator& it) +{ + assert(it != mRowVector.end()); + mCursor = it - mRowVector.begin(); + onCursorChanged(CURSOR_STOPPED); +} + template void TextListComponent::onCursorChanged(CursorState state) { diff --git a/src/views/BasicGameListView.cpp b/src/views/BasicGameListView.cpp deleted file mode 100644 index ee886d837..000000000 --- a/src/views/BasicGameListView.cpp +++ /dev/null @@ -1,183 +0,0 @@ -#include "BasicGameListView.h" -#include "ViewController.h" -#include "../Renderer.h" -#include "../Window.h" -#include "../ThemeData.h" - -BasicGameListView::BasicGameListView(Window* window, FileData* root) - : GameListView(window, root), - mHeaderText(window), mHeaderImage(window), mBackground(window), mList(window) -{ - mHeaderText.setText("Header"); - mHeaderText.setSize(mSize.x(), 0); - mHeaderText.setPosition(0, 0); - mHeaderText.setCentered(true); - - mHeaderImage.setResize(0, mSize.y() * 0.185f, false); - mHeaderImage.setOrigin(0.5f, 0.0f); - mHeaderImage.setPosition(mSize.x() / 2, 0); - - mBackground.setResize(mSize.x(), mSize.y(), true); - - mList.setSize(mSize.x(), mSize.y() * 0.8f); - mList.setPosition(0, mSize.y() * 0.2f); - - populateList(root); - - addChild(&mBackground); - addChild(&mList); - addChild(&mHeaderText); -} - -void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) -{ - const ImageDef& bg = theme->getImage("backgroundImage"); - mBackground.setTiling(bg.tile); - mBackground.setImage(bg.getTexture()); - - const ImageDef& hdr = theme->getImage("headerImage"); - mHeaderImage.setTiling(hdr.tile); - mHeaderImage.setImage(hdr.getTexture()); - - if(mHeaderImage.hasImage()) - { - removeChild(&mHeaderText); - addChild(&mHeaderImage); - }else{ - addChild(&mHeaderText); - removeChild(&mHeaderImage); - } - - mList.setTheme(theme); -} - -void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) -{ - // we don't care about metadata changes (since we don't display metadata), - // so we just ignore the FILE_METADATA_CHANGED case - - // if it's immediately inside our current folder - if(file->getParent() == getCurrentFolder()) - { - if(change == FILE_REMOVED) - { - mList.remove(file); // will automatically make sure cursor ends up in a "safe" place - }else if(change == FILE_ADDED) - { - FileData* cursor = getCursor(); - populateList(cursor->getParent()); - mList.setCursor(cursor); - } - } - - // the root file was sorted (so children were sorted too) - if(file == mRoot && change == FILE_SORTED) - { - FileData* cursor = getCursor(); - populateList(cursor->getParent()); - mList.setCursor(cursor); - } -} - -void buildHeader(FileData* from, std::stringstream& ss) -{ - if(from->getParent()) - { - buildHeader(from->getParent(), ss); - ss << " -> "; - } - - ss << from->getName(); -} - -void BasicGameListView::populateList(FileData* root) -{ - mList.clear(); - - std::stringstream ss; - buildHeader(root, ss); - mHeaderText.setText(ss.str()); - - for(auto it = root->getChildren().begin(); it != root->getChildren().end(); it++) - { - mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); - } -} - -void BasicGameListView::setCursor(FileData* cursor) -{ - if(cursor->getParent() != getCursor()->getParent()) - { - // Rebuild the folder stack - std::stack path; - FileData* cur = cursor; - while((cur = cur->getParent()) != mRoot) - path.push(cur); - - while(!mCursorStack.empty()) - mCursorStack.pop(); - - while(!path.empty()) // put back in reverse order (flip) - { - mCursorStack.push(path.top()); - path.pop(); - } - - populateList(cursor->getParent()); - } - - mList.setCursor(cursor); -} - -bool BasicGameListView::input(InputConfig* config, Input input) -{ - if(input.value != 0) - { - if(config->isMappedTo("a", input)) - { - if(mList.getList().size() > 0) - { - FileData* cursor = getCursor(); - if(cursor->getType() == GAME) - { - mWindow->getViewController()->launch(cursor); - }else{ - // it's a folder - if(cursor->getChildren().size() > 0) - { - mCursorStack.push(cursor); - populateList(cursor); - } - } - - return true; - } - }else if(config->isMappedTo("b", input)) - { - if(mCursorStack.size()) - { - populateList(mCursorStack.top()->getParent()); - mList.setCursor(mCursorStack.top()); - mCursorStack.pop(); - mTheme->playSound("backSound"); - }else{ - mList.stopScrolling(); - mWindow->getViewController()->goToSystemSelect(); - } - - return true; - }else if(config->isMappedTo("right", input)) - { - mList.stopScrolling(); - mWindow->getViewController()->goToNextGameList(); - return true; - }else if(config->isMappedTo("left", input)) - { - mList.stopScrolling(); - mWindow->getViewController()->goToPrevGameList(); - return true; - } - } - - return GameListView::input(config, input); -} diff --git a/src/views/BasicGameListView.h b/src/views/BasicGameListView.h deleted file mode 100644 index f59beab37..000000000 --- a/src/views/BasicGameListView.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include "GameListView.h" -#include "../components/TextListComponent.h" -#include "../components/TextComponent.h" -#include "../components/ImageComponent.h" - -class BasicGameListView : public GameListView -{ -public: - BasicGameListView(Window* window, FileData* root); - - // Called when a FileData* is added, has its metadata changed, or is removed - virtual void onFileChanged(FileData* file, FileChangeType change); - - virtual bool input(InputConfig* config, Input input) override; - - virtual void onThemeChanged(const std::shared_ptr& theme) override; - - inline FileData* getCursor() { return mList.getSelected(); } - virtual void setCursor(FileData* file) override; - -protected: - void populateList(FileData* root); - - TextComponent mHeaderText; - ImageComponent mHeaderImage; - ImageComponent mBackground; - TextListComponent mList; - - inline FileData* getCurrentFolder() { return getCursor()->getParent(); } - - std::stack mCursorStack; -}; diff --git a/src/views/GridGameListView.cpp b/src/views/GridGameListView.cpp deleted file mode 100644 index a833ea352..000000000 --- a/src/views/GridGameListView.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "GridGameListView.h" -#include "../ThemeData.h" -#include "../Window.h" -#include "ViewController.h" - -GridGameListView::GridGameListView(Window* window, FileData* root) : GameListView(window, root), - mGrid(window), mBackground(window) -{ - mBackground.setResize(mSize.x(), mSize.y(), true); - addChild(&mBackground); - - mGrid.setPosition(0, mSize.y() * 0.2f); - mGrid.setSize(mSize.x(), mSize.y() * 0.8f); - addChild(&mGrid); - - populateList(root); -} - -void GridGameListView::onFileChanged(FileData* file, FileChangeType change) -{ - // fuck it, just completely repopulate always all the time - FileData* cursor = getCursor(); - populateList(cursor->getParent()); - mGrid.setCursor(cursor); -} - -void GridGameListView::onThemeChanged(const std::shared_ptr& theme) -{ - mBackground.setImage(theme->getImage("backgroundImage").getTexture()); - mBackground.setTiling(theme->getImage("backgroundImage").tile); -} - -FileData* GridGameListView::getCursor() -{ - return mGrid.getSelected(); -} - -void GridGameListView::setCursor(FileData* file) -{ - assert(file->getParent() == getCursor()->getParent()); // too lazy to implement right now - mGrid.setCursor(file); -} - -bool GridGameListView::input(InputConfig* config, Input input) -{ - if(input.value != 0) - { - if(config->isMappedTo("a", input)) - { - if(mGrid.getList().size() > 0) - { - FileData* cursor = getCursor(); - if(cursor->getType() == GAME) - { - mWindow->getViewController()->launch(cursor); - }else{ - // it's a folder - if(cursor->getChildren().size() > 0) - { - mCursorStack.push(cursor); - populateList(cursor); - } - } - - return true; - } - }else if(config->isMappedTo("b", input)) - { - if(mCursorStack.size()) - { - populateList(mCursorStack.top()->getParent()); - mGrid.setCursor(mCursorStack.top()); - mCursorStack.pop(); - mTheme->playSound("backSound"); - }else{ - mGrid.stopScrolling(); - mWindow->getViewController()->goToSystemSelect(); - } - - return true; - } - } - return GameListView::input(config, input); -} - -void GridGameListView::populateList(FileData* root) -{ - mGrid.clear(); - for(auto it = root->getChildren().begin(); it != root->getChildren().end(); it++) - { - mGrid.add((*it)->getThumbnailPath(), *it); - } -} diff --git a/src/views/GridGameListView.h b/src/views/GridGameListView.h deleted file mode 100644 index f9c36afe0..000000000 --- a/src/views/GridGameListView.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include "GameListView.h" -#include "../components/ImageGridComponent.h" -#include "../components/ImageComponent.h" -#include - -class GridGameListView : public GameListView -{ -public: - GridGameListView(Window* window, FileData* root); - - virtual void onFileChanged(FileData* file, FileChangeType change) override; - virtual void onThemeChanged(const std::shared_ptr& theme) override; - - FileData* getCursor() override; - void setCursor(FileData*) override; - - virtual bool input(InputConfig* config, Input input) override; - -private: - void populateList(FileData* root); - - ImageGridComponent mGrid; - ImageComponent mBackground; - - std::stack mCursorStack; -}; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 36d8850a6..20d4814f9 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -2,9 +2,9 @@ #include "../Log.h" #include "../SystemData.h" -#include "BasicGameListView.h" -#include "DetailedGameListView.h" -#include "GridGameListView.h" +#include "gamelist/BasicGameListView.h" +#include "gamelist/DetailedGameListView.h" +#include "gamelist/GridGameListView.h" #include "../components/GuiMenu.h" #include "../animations/LaunchAnimation.h" #include "../animations/MoveCameraAnimation.h" @@ -116,7 +116,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) }); } -std::shared_ptr ViewController::getGameListView(SystemData* system) +std::shared_ptr ViewController::getGameListView(SystemData* system) { //if we already made one, return that one auto exists = mGameListViews.find(system); @@ -124,7 +124,7 @@ std::shared_ptr ViewController::getGameListView(SystemData* system return exists->second; //if we didn't, make it, remember it, and return it - std::shared_ptr view; + std::shared_ptr view; if(system != NULL) { @@ -141,11 +141,11 @@ std::shared_ptr ViewController::getGameListView(SystemData* system } if(detailed) - view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); + view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); else - view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); + view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); - //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); + view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); view->setTheme(system->getTheme()); }else{ @@ -240,3 +240,21 @@ void ViewController::preload() getGameListView(*it); } } + +void ViewController::reloadGameListView(IGameListView* view) +{ + for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) + { + if(it->second.get() == view) + { + SystemData* system = it->first; + FileData* cursor = view->getCursor(); + mGameListViews.erase(it); + + std::shared_ptr newView = getGameListView(system); + newView->setCursor(cursor); + mCurrentView = newView; + break; + } + } +} diff --git a/src/views/ViewController.h b/src/views/ViewController.h index bb3472cb9..c9f82363e 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -1,6 +1,6 @@ #pragma once -#include "GameListView.h" +#include "gamelist/IGameListView.h" #include "SystemListView.h" class SystemData; @@ -14,6 +14,10 @@ public: // Caches things so there's no pauses during transitions. void preload(); + // If a basic view detected a metadata change, it can request to recreate + // the current gamelist view (as it may change to be detailed). + void reloadGameListView(IGameListView* gamelist); + // Navigation. void goToNextGameList(); void goToPrevGameList(); @@ -55,11 +59,11 @@ public: private: void playViewTransition(); - std::shared_ptr getGameListView(SystemData* system); + std::shared_ptr getGameListView(SystemData* system); std::shared_ptr getSystemListView(); std::shared_ptr mCurrentView; - std::map< SystemData*, std::shared_ptr > mGameListViews; + std::map< SystemData*, std::shared_ptr > mGameListViews; std::shared_ptr mSystemListView; Eigen::Affine3f mCamera; diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp new file mode 100644 index 000000000..b1663ff55 --- /dev/null +++ b/src/views/gamelist/BasicGameListView.cpp @@ -0,0 +1,71 @@ +#include "BasicGameListView.h" +#include "../ViewController.h" +#include "../../Renderer.h" +#include "../../Window.h" +#include "../../ThemeData.h" +#include "../../SystemData.h" + +BasicGameListView::BasicGameListView(Window* window, FileData* root) + : ISimpleGameListView(window, root), mList(window) +{ + mList.setSize(mSize.x(), mSize.y() * 0.8f); + mList.setPosition(0, mSize.y() * 0.2f); + addChild(&mList); + + populateList(root->getChildren()); +} + +void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) +{ + ISimpleGameListView::onThemeChanged(theme); + mList.setTheme(theme); +} + +void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) +{ + if(change == FILE_METADATA_CHANGED) + { + // might switch to a detailed view + mWindow->getViewController()->reloadGameListView(this); + return; + } + + ISimpleGameListView::onFileChanged(file, change); +} + +void BasicGameListView::populateList(const std::vector& files) +{ + mList.clear(); + + mHeaderText.setText(files.at(0)->getSystem()->getFullName()); + + for(auto it = files.begin(); it != files.end(); it++) + { + mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); + } +} + +FileData* BasicGameListView::getCursor() +{ + return mList.getSelected(); +} + +void BasicGameListView::setCursor(FileData* cursor) +{ + typedef TextListComponent::ListRow Row; + const std::vector& list = mList.getList(); + auto found = std::find_if(list.begin(), list.end(), [&](const Row& row) { return (row.object == cursor); }); + + if(found != list.end()) + { + mList.setCursor(found); + }else{ + populateList(cursor->getParent()->getChildren()); + mList.setCursor(cursor); + } +} + +void BasicGameListView::launch(FileData* game) +{ + mWindow->getViewController()->launch(game); +} diff --git a/src/views/gamelist/BasicGameListView.h b/src/views/gamelist/BasicGameListView.h new file mode 100644 index 000000000..347934629 --- /dev/null +++ b/src/views/gamelist/BasicGameListView.h @@ -0,0 +1,24 @@ +#pragma once + +#include "ISimpleGameListView.h" +#include "../../components/TextListComponent.h" + +class BasicGameListView : public ISimpleGameListView +{ +public: + BasicGameListView(Window* window, FileData* root); + + // Called when a FileData* is added, has its metadata changed, or is removed + virtual void onFileChanged(FileData* file, FileChangeType change); + + virtual void onThemeChanged(const std::shared_ptr& theme); + + virtual FileData* getCursor() override; + virtual void setCursor(FileData* file) override; + +protected: + virtual void populateList(const std::vector& files) override; + virtual void launch(FileData* game) override; + + TextListComponent mList; +}; diff --git a/src/views/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp similarity index 89% rename from src/views/DetailedGameListView.cpp rename to src/views/gamelist/DetailedGameListView.cpp index e21c8edcc..06bf730d5 100644 --- a/src/views/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -1,4 +1,6 @@ #include "DetailedGameListView.h" +#include "../../Window.h" +#include "../ViewController.h" DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), @@ -75,10 +77,11 @@ void DetailedGameListView::updateInfoPanel() } } -void DetailedGameListView::onFileChanged(FileData* file, FileChangeType type) +void DetailedGameListView::launch(FileData* game) { - BasicGameListView::onFileChanged(file, type); + Eigen::Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); + if(mImage.hasImage()) + target = mImage.getPosition(); - if(type == FILE_METADATA_CHANGED && file == getCursor()) - updateInfoPanel(); + mWindow->getViewController()->launch(game, target); } diff --git a/src/views/DetailedGameListView.h b/src/views/gamelist/DetailedGameListView.h similarity index 68% rename from src/views/DetailedGameListView.h rename to src/views/gamelist/DetailedGameListView.h index 7f7ab50d3..7e6405244 100644 --- a/src/views/DetailedGameListView.h +++ b/src/views/gamelist/DetailedGameListView.h @@ -1,9 +1,7 @@ #pragma once #include "BasicGameListView.h" -#include "../components/ImageComponent.h" -#include "../components/TextComponent.h" -#include "../components/ScrollableContainer.h" +#include "../../components/ScrollableContainer.h" class DetailedGameListView : public BasicGameListView { @@ -12,7 +10,8 @@ public: virtual void onThemeChanged(const std::shared_ptr& theme) override; - virtual void onFileChanged(FileData* file, FileChangeType change); +protected: + virtual void launch(FileData* game) override; private: void updateInfoPanel(); @@ -24,4 +23,3 @@ private: ScrollableContainer mDescContainer; TextComponent mDescription; }; - diff --git a/src/views/gamelist/GridGameListView.cpp b/src/views/gamelist/GridGameListView.cpp new file mode 100644 index 000000000..d6afd601a --- /dev/null +++ b/src/views/gamelist/GridGameListView.cpp @@ -0,0 +1,56 @@ +#include "GridGameListView.h" +#include "../../ThemeData.h" +#include "../../Window.h" +#include "../ViewController.h" + +GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), + mGrid(window) +{ + mGrid.setPosition(0, mSize.y() * 0.2f); + mGrid.setSize(mSize.x(), mSize.y() * 0.8f); + addChild(&mGrid); + + populateList(root->getChildren()); +} + +FileData* GridGameListView::getCursor() +{ + return mGrid.getSelected(); +} + +void GridGameListView::setCursor(FileData* file) +{ + typedef ImageGridComponent::Entry Entry; + auto& list = mGrid.getList(); + auto found = std::find_if(list.begin(), list.end(), [&] (const Entry& e) { return (e.object == file); }); + + if(found != list.end()) + { + mGrid.setCursor(found); + }else{ + populateList(file->getParent()->getChildren()); + mGrid.setCursor(file); + } +} + +bool GridGameListView::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + return GuiComponent::input(config, input); + + return ISimpleGameListView::input(config, input); +} + +void GridGameListView::populateList(const std::vector& files) +{ + mGrid.clear(); + for(auto it = files.begin(); it != files.end(); it++) + { + mGrid.add((*it)->getThumbnailPath(), *it); + } +} + +void GridGameListView::launch(FileData* game) +{ + mWindow->getViewController()->launch(game); +} diff --git a/src/views/gamelist/GridGameListView.h b/src/views/gamelist/GridGameListView.h new file mode 100644 index 000000000..42db55ede --- /dev/null +++ b/src/views/gamelist/GridGameListView.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ISimpleGameListView.h" +#include "../../components/ImageGridComponent.h" +#include "../../components/ImageComponent.h" +#include + +class GridGameListView : public ISimpleGameListView +{ +public: + GridGameListView(Window* window, FileData* root); + + //virtual void onThemeChanged(const std::shared_ptr& theme) override; + + virtual FileData* getCursor() override; + virtual void setCursor(FileData*) override; + + virtual bool input(InputConfig* config, Input input) override; + +protected: + virtual void populateList(const std::vector& files) override; + virtual void launch(FileData* game) override; + + ImageGridComponent mGrid; +}; diff --git a/src/views/GameListView.cpp b/src/views/gamelist/IGameListView.cpp similarity index 68% rename from src/views/GameListView.cpp rename to src/views/gamelist/IGameListView.cpp index 743fb0bf6..26e1fabd4 100644 --- a/src/views/GameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -1,11 +1,11 @@ -#include "GameListView.h" -#include "../Window.h" -#include "../components/GuiMetaDataEd.h" -#include "../components/GuiMenu.h" -#include "../components/GuiFastSelect.h" -#include "ViewController.h" +#include "IGameListView.h" +#include "../../Window.h" +#include "../../components/GuiMetaDataEd.h" +#include "../../components/GuiMenu.h" +#include "../../components/GuiFastSelect.h" +#include "../ViewController.h" -bool GameListView::input(InputConfig* config, Input input) +bool IGameListView::input(InputConfig* config, Input input) { if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_F3 && input.value != 0) { @@ -15,7 +15,7 @@ bool GameListView::input(InputConfig* config, Input input) p.game = file; p.system = file->getSystem(); mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), - std::bind(&GameListView::onFileChanged, this, file, FILE_METADATA_CHANGED), [file, this] { + std::bind(&IGameListView::onFileChanged, this, file, FILE_METADATA_CHANGED), [file, this] { boost::filesystem::remove(file->getPath()); //actually delete the file on the filesystem file->getParent()->removeChild(file); //unlink it so list repopulations triggered from onFileChanged won't see it onFileChanged(file, FILE_REMOVED); //tell the view @@ -33,7 +33,7 @@ bool GameListView::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -void GameListView::setTheme(const std::shared_ptr& theme) +void IGameListView::setTheme(const std::shared_ptr& theme) { mTheme = theme; onThemeChanged(theme); diff --git a/src/views/GameListView.h b/src/views/gamelist/IGameListView.h similarity index 81% rename from src/views/GameListView.h rename to src/views/gamelist/IGameListView.h index 1ea16bd7a..14abab01d 100644 --- a/src/views/GameListView.h +++ b/src/views/gamelist/IGameListView.h @@ -1,24 +1,24 @@ #pragma once -#include "../FileData.h" -#include "../Renderer.h" +#include "../../FileData.h" +#include "../../Renderer.h" class Window; class GuiComponent; class FileData; class ThemeData; -//GameListView needs to know: +//IGameListView needs to know: // What theme data to use // The root FileData for the tree it should explore -class GameListView : public GuiComponent +class IGameListView : public GuiComponent { public: - GameListView(Window* window, FileData* root) : GuiComponent(window), mRoot(root) + IGameListView(Window* window, FileData* root) : GuiComponent(window), mRoot(root) { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); } - virtual ~GameListView() {} + virtual ~IGameListView() {} // Called when a new file is added, a file is removed, a file's metadata changes, or a file's children are sorted. // NOTE: FILE_SORTED is only reported for the topmost FileData, where the sort started. diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp new file mode 100644 index 000000000..f2913b20f --- /dev/null +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -0,0 +1,101 @@ +#include "ISimpleGameListView.h" +#include "../../ThemeData.h" +#include "../../Window.h" +#include "../ViewController.h" + +ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), + mHeaderText(window), mHeaderImage(window), mBackground(window) +{ + mHeaderText.setText("Header"); + mHeaderText.setSize(mSize.x(), 0); + mHeaderText.setPosition(0, 0); + mHeaderText.setCentered(true); + + mHeaderImage.setResize(0, mSize.y() * 0.185f, false); + mHeaderImage.setOrigin(0.5f, 0.0f); + mHeaderImage.setPosition(mSize.x() / 2, 0); + + mBackground.setResize(mSize.x(), mSize.y(), true); + + addChild(&mHeaderText); + addChild(&mBackground); +} + +void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) +{ + const ImageDef& bg = theme->getImage("backgroundImage"); + mBackground.setTiling(bg.tile); + mBackground.setImage(bg.getTexture()); + + const ImageDef& hdr = theme->getImage("headerImage"); + mHeaderImage.setTiling(hdr.tile); + mHeaderImage.setImage(hdr.getTexture()); + + if(mHeaderImage.hasImage()) + { + removeChild(&mHeaderText); + addChild(&mHeaderImage); + }else{ + addChild(&mHeaderText); + removeChild(&mHeaderImage); + } +} + +void ISimpleGameListView::onFileChanged(FileData* file, FileChangeType change) +{ + // we could be tricky here to be efficient; + // but this shouldn't happen very often so we'll just always repopulate + FileData* cursor = getCursor(); + populateList(cursor->getParent()->getChildren()); + setCursor(cursor); +} + +bool ISimpleGameListView::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + if(config->isMappedTo("a", input)) + { + FileData* cursor = getCursor(); + if(cursor->getType() == GAME) + { + launch(cursor); + }else{ + // it's a folder + if(cursor->getChildren().size() > 0) + { + mCursorStack.push(cursor); + populateList(cursor->getChildren()); + } + } + + return true; + }else if(config->isMappedTo("b", input)) + { + if(mCursorStack.size()) + { + populateList(mCursorStack.top()->getParent()->getChildren()); + setCursor(mCursorStack.top()); + mCursorStack.pop(); + getTheme()->playSound("backSound"); + }else{ + onFocusLost(); + mWindow->getViewController()->goToSystemSelect(); + } + + return true; + }else if(config->isMappedTo("right", input)) + { + onFocusLost(); + mWindow->getViewController()->goToNextGameList(); + return true; + }else if(config->isMappedTo("left", input)) + { + onFocusLost(); + mWindow->getViewController()->goToPrevGameList(); + return true; + } + } + + return IGameListView::input(config, input); +} diff --git a/src/views/gamelist/ISimpleGameListView.h b/src/views/gamelist/ISimpleGameListView.h new file mode 100644 index 000000000..41f269bd2 --- /dev/null +++ b/src/views/gamelist/ISimpleGameListView.h @@ -0,0 +1,36 @@ +#pragma once + +#include "IGameListView.h" + +#include "../../components/TextComponent.h" +#include "../../components/ImageComponent.h" + +class ISimpleGameListView : public IGameListView +{ +public: + ISimpleGameListView(Window* window, FileData* root); + virtual ~ISimpleGameListView() {} + + // Called when a new file is added, a file is removed, a file's metadata changes, or a file's children are sorted. + // NOTE: FILE_SORTED is only reported for the topmost FileData, where the sort started. + // Since sorts are recursive, that FileData's children probably changed too. + virtual void onFileChanged(FileData* file, FileChangeType change); + + // Called whenever the theme changes. + virtual void onThemeChanged(const std::shared_ptr& theme); + + virtual FileData* getCursor() = 0; + virtual void setCursor(FileData*) = 0; + + virtual bool input(InputConfig* config, Input input) override; + +protected: + virtual void populateList(const std::vector& files) = 0; + virtual void launch(FileData* game) = 0; + + TextComponent mHeaderText; + ImageComponent mHeaderImage; + ImageComponent mBackground; + + std::stack mCursorStack; +}; From 93f850df7527f7a4fe359e021c59ba966a4e1954 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 22 Dec 2013 16:56:11 -0600 Subject: [PATCH 120/386] Maybe fix the Linux compile errors --- src/components/ImageGridComponent.h | 4 ++-- src/components/TextListComponent.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index f9e73ce94..3e01c8914 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -24,7 +24,7 @@ public: void clear(); void setCursor(const T& select); - void setCursor(typename const std::vector::const_iterator& it); + void setCursor(typename std::vector::const_iterator& it); inline const T& getSelected() const { return mEntries.at(mCursor).object; } inline const std::vector& getList() const { return mEntries; } @@ -173,7 +173,7 @@ void ImageGridComponent::setCursor(const T& obj) } template -void ImageGridComponent::setCursor(typename const std::vector::const_iterator& it) +void ImageGridComponent::setCursor(typename std::vector::const_iterator& it) { assert(it != mEntries.end()); mCursor = it - mEntries.begin(); diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index c63c50050..45c709cc7 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -49,7 +49,7 @@ public: inline const std::vector& getList() const { return mRowVector; } void setCursor(const T& select); - void setCursor(typename const std::vector::const_iterator& it); + void setCursor(typename std::vector::const_iterator& it); void stopScrolling(); inline bool isScrolling() const { return mScrollDir != 0; } @@ -378,7 +378,7 @@ void TextListComponent::setCursor(const T& obj) template -void TextListComponent::setCursor(typename const std::vector::const_iterator& it) +void TextListComponent::setCursor(typename std::vector::const_iterator& it) { assert(it != mRowVector.end()); mCursor = it - mRowVector.begin(); From 4df8fc9af0101867a153446140a73b3341a4cf96 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 22 Dec 2013 19:42:10 -0600 Subject: [PATCH 121/386] Fix bad dimming during sleep (again...) --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp index 2eef78f66..0f6524b6c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -240,6 +240,7 @@ int main(int argc, char* argv[]) { sleeping = true; timeSinceLastEvent = 0; + Renderer::setMatrix(Eigen::Affine3f::Identity()); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000A0); } From 120f9a4e7bd107e53b00077813ef60ffc2373312 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 23 Dec 2013 18:31:37 -0600 Subject: [PATCH 122/386] Fix accidentally making the grid view the default (woops) --- src/views/ViewController.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 20d4814f9..dc737fb06 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -145,7 +145,8 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste else view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); - view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); + // uncomment for experimental "image grid" view + //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); view->setTheme(system->getTheme()); }else{ From b6577e630d6278fadd6434e745a16be652a4368e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 23 Dec 2013 20:22:15 -0600 Subject: [PATCH 123/386] Hopefully fixed the "black screen" bug. At least for input configuration. --- src/views/ViewController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index dc737fb06..ddb09f383 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -11,7 +11,7 @@ #include "../animations/LambdaAnimation.h" ViewController::ViewController(Window* window) - : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(1), mLockInput(false) + : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0), mLockInput(false) { // slot 1 so the fade carries over setAnimation(new LambdaAnimation([&] (float t) { mFadeOpacity = lerp(1.0f, 0.0f, t); }, 900), nullptr, false, 1); From 6f442556c082fac778f456b560f868cd3c3712d9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 24 Dec 2013 11:50:26 -0600 Subject: [PATCH 124/386] Refactored SystemListView directly into ViewController. Made system views match up with their gamelist views. Pressing "back" on a gamelist view now takes you to the correct system view. --- CMakeLists.txt | 2 - src/SystemData.h | 19 +++ src/components/GuiInputConfig.cpp | 2 +- src/main.cpp | 2 +- src/views/SystemListView.cpp | 79 ------------- src/views/SystemListView.h | 23 ---- src/views/SystemView.cpp | 26 ++++ src/views/SystemView.h | 2 + src/views/ViewController.cpp | 131 ++++++++++----------- src/views/ViewController.h | 12 +- src/views/gamelist/ISimpleGameListView.cpp | 2 +- 11 files changed, 118 insertions(+), 182 deletions(-) delete mode 100644 src/views/SystemListView.cpp delete mode 100644 src/views/SystemListView.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a23c16793..dafd0fd26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,7 +198,6 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h @@ -277,7 +276,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp diff --git a/src/SystemData.h b/src/SystemData.h index ca6e5bed0..901b3756d 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -39,6 +39,25 @@ public: static std::vector sSystemVector; + inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.begin(), sSystemVector.end(), this); }; + inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.rbegin(), sSystemVector.rend(), this); }; + + inline SystemData* getNext() const + { + auto it = getIterator(); + it++; + if(it == sSystemVector.end()) it = sSystemVector.begin(); + return *it; + } + + inline SystemData* getPrev() const + { + auto it = getRevIterator(); + it++; + if(it == sSystemVector.rend()) it = sSystemVector.rbegin(); + return *it; + } + private: std::string mName; std::string mFullName; diff --git a/src/components/GuiInputConfig.cpp b/src/components/GuiInputConfig.cpp index c09fbad05..b57cfac52 100644 --- a/src/components/GuiInputConfig.cpp +++ b/src/components/GuiInputConfig.cpp @@ -38,7 +38,7 @@ bool GuiInputConfig::input(InputConfig* config, Input input) mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(mTargetConfig->getPlayerNum() + 1))); }else{ mWindow->getInputManager()->writeConfig(); - mWindow->getViewController()->goToSystemSelect(); + mWindow->getViewController()->goToStart(); } delete this; return true; diff --git a/src/main.cpp b/src/main.cpp index 0f6524b6c..2a43f2e18 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -172,7 +172,7 @@ int main(int argc, char* argv[]) //choose which GUI to open depending on if an input configuration already exists if(fs::exists(InputManager::getConfigPath())) { - window.getViewController()->goToSystemSelect(); + window.getViewController()->goToStart(); }else{ window.pushGui(new GuiDetectDevice(&window)); } diff --git a/src/views/SystemListView.cpp b/src/views/SystemListView.cpp deleted file mode 100644 index 424fdc43a..000000000 --- a/src/views/SystemListView.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "SystemListView.h" -#include "../Renderer.h" -#include "../SystemData.h" -#include "../animations/MoveCameraAnimation.h" -#include "../Window.h" -#include "ViewController.h" - -SystemListView::SystemListView(Window* window) : GuiComponent(window), mCamera(Eigen::Affine3f::Identity()), mCurrentSystem(NULL) -{ - setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - - goToSystem(SystemData::sSystemVector.at(0)); -} - -void SystemListView::goToSystem(SystemData* system) -{ - std::shared_ptr view = getSystemView(system); - mCurrentView = view; - mCurrentSystem = system; - setAnimation(new MoveCameraAnimation(mCamera, view->getPosition())); -} - - -std::shared_ptr SystemListView::getSystemView(SystemData* system) -{ - auto exists = mSystemViews.find(system); - if(exists != mSystemViews.end()) - return exists->second; - - const std::vector& sysVec = SystemData::sSystemVector; - int id = std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); - - std::shared_ptr view = std::shared_ptr(new SystemView(mWindow, system)); - view->setPosition(id * (float)Renderer::getScreenWidth(), 0); - - mSystemViews[system] = view; - - return view; -} - -bool SystemListView::input(InputConfig* config, Input input) -{ - if(input.value != 0) - { - int id = std::find(SystemData::sSystemVector.begin(), SystemData::sSystemVector.end(), mCurrentSystem) - SystemData::sSystemVector.begin(); - if(config->isMappedTo("left", input)) - { - id--; - if(id < 0) - id += SystemData::sSystemVector.size(); - goToSystem(SystemData::sSystemVector.at(id)); - return true; - } - if(config->isMappedTo("right", input)) - { - id = (id + 1) % SystemData::sSystemVector.size(); - goToSystem(SystemData::sSystemVector.at(id)); - return true; - } - if(config->isMappedTo("a", input)) - { - mWindow->getViewController()->goToGameList(mCurrentSystem); - return true; - } - } - - return GuiComponent::input(config, input); -} - -void SystemListView::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = mCamera * getTransform() * parentTrans; - - // TODO: clipping - for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) - { - it->second->render(trans); - } -} diff --git a/src/views/SystemListView.h b/src/views/SystemListView.h deleted file mode 100644 index 7fe685c89..000000000 --- a/src/views/SystemListView.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "SystemView.h" - -class SystemListView : public GuiComponent -{ -public: - SystemListView(Window* window); - - void goToSystem(SystemData* system); - - bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& parentTrans) override; - -private: - Eigen::Affine3f mCamera; - - std::shared_ptr mCurrentView; - SystemData* mCurrentSystem; - std::shared_ptr getSystemView(SystemData* system); - - std::map< SystemData*, std::shared_ptr > mSystemViews; -}; diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index b1f0a5902..e1501d140 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -2,6 +2,8 @@ #include "../SystemData.h" #include "../Renderer.h" #include "../Log.h" +#include "../Window.h" +#include "ViewController.h" SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window), mSystem(system), @@ -47,3 +49,27 @@ void SystemView::updateData() mImage.setImage(mSystem->getTheme()->getImage("systemImage").getTexture()); } + +bool SystemView::input(InputConfig* config, Input input) +{ + if(input.value != 0) + { + if(config->isMappedTo("left", input)) + { + mWindow->getViewController()->goToSystemView(mSystem->getPrev()); + return true; + } + if(config->isMappedTo("right", input)) + { + mWindow->getViewController()->goToSystemView(mSystem->getNext()); + return true; + } + if(config->isMappedTo("a", input)) + { + mWindow->getViewController()->goToGameList(mSystem); + return true; + } + } + + return GuiComponent::input(config, input); +} diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 762591cac..a926285c0 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -14,6 +14,8 @@ public: void updateData(); + bool input(InputConfig* config, Input input) override; + private: SystemData* mSystem; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index ddb09f383..fc84b8e94 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -15,58 +15,39 @@ ViewController::ViewController(Window* window) { // slot 1 so the fade carries over setAnimation(new LambdaAnimation([&] (float t) { mFadeOpacity = lerp(1.0f, 0.0f, t); }, 900), nullptr, false, 1); - mState.viewing = START_SCREEN; + mState.viewing = NOTHING; } -void ViewController::goToSystemSelect() +void ViewController::goToStart() +{ + // TODO + /* mState.viewing = START_SCREEN; + mCurrentView.reset(); + playViewTransition(); */ + goToSystemView(SystemData::sSystemVector.at(0)); +} + +void ViewController::goToSystemView(SystemData* system) { mState.viewing = SYSTEM_SELECT; - mCurrentView = getSystemListView(); + mCurrentView = getSystemView(system); playViewTransition(); } -SystemData* getSystemCyclic(SystemData* from, bool reverse) -{ - std::vector& sysVec = SystemData::sSystemVector; - - if(reverse) - { - auto it = std::find(sysVec.rbegin(), sysVec.rend(), from); - assert(it != sysVec.rend()); - it++; - if(it == sysVec.rend()) - it = sysVec.rbegin(); - return *it; - }else{ - auto it = std::find(sysVec.begin(), sysVec.end(), from); - assert(it != sysVec.end()); - it++; - if(it == sysVec.end()) - it = sysVec.begin(); - return *it; - } -} - void ViewController::goToNextGameList() { assert(mState.viewing == GAME_LIST); - - SystemData* system = mState.data.system; - if(system == NULL) - return; - - goToGameList(getSystemCyclic(system, false)); + SystemData* system = getState().getSystem(); + assert(system); + goToGameList(system->getNext()); } void ViewController::goToPrevGameList() { assert(mState.viewing == GAME_LIST); - - SystemData* system = mState.data.system; - if(system == NULL) - return; - - goToGameList(getSystemCyclic(system, true)); + SystemData* system = getState().getSystem(); + assert(system); + goToGameList(system->getPrev()); } void ViewController::goToGameList(SystemData* system) @@ -80,7 +61,10 @@ void ViewController::goToGameList(SystemData* system) void ViewController::playViewTransition() { - setAnimation(new MoveCameraAnimation(mCamera, mCurrentView->getPosition())); + Eigen::Vector3f target(Eigen::Vector3f::Identity()); + if(mCurrentView) + target = mCurrentView->getPosition(); + setAnimation(new MoveCameraAnimation(mCamera, target)); } void ViewController::onFileChanged(FileData* file, FileChangeType change) @@ -126,32 +110,27 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste //if we didn't, make it, remember it, and return it std::shared_ptr view; - if(system != NULL) + //decide type + bool detailed = false; + std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); + for(auto it = files.begin(); it != files.end(); it++) { - //decide type - bool detailed = false; - std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); - for(auto it = files.begin(); it != files.end(); it++) + if(!(*it)->getThumbnailPath().empty()) { - if(!(*it)->getThumbnailPath().empty()) - { - detailed = true; - break; - } + detailed = true; + break; } - - if(detailed) - view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); - else - view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); - - // uncomment for experimental "image grid" view - //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); - - view->setTheme(system->getTheme()); - }else{ - LOG(LogError) << "null system"; // should eventually return an "all games" gamelist view } + + if(detailed) + view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); + else + view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); + + // uncomment for experimental "image grid" view + //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); + + view->setTheme(system->getTheme()); std::vector& sysVec = SystemData::sSystemVector; int id = std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); @@ -161,15 +140,18 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste return view; } -std::shared_ptr ViewController::getSystemListView() +std::shared_ptr ViewController::getSystemView(SystemData* system) { - if(!mSystemListView) - { - mSystemListView = std::shared_ptr(new SystemListView(mWindow)); - mSystemListView->setPosition(0, (float)Renderer::getScreenHeight()); - } + //if we already made one, return that one + auto exists = mSystemViews.find(system); + if(exists != mSystemViews.end()) + return exists->second; - return mSystemListView; + //if we didn't, make it, remember it, and return it + std::shared_ptr view = std::shared_ptr(new SystemView(mWindow, system)); + view->setPosition((system->getIterator() - SystemData::sSystemVector.begin()) * (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mSystemViews[system] = view; + return view; } @@ -211,8 +193,12 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f viewStart = trans.inverse().translation(); Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); - // draw systemlist - if(mSystemListView) mSystemListView->render(trans); + // draw systemviews + for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) + { + // should do clipping + it->second->render(trans); + } // draw gamelists for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) @@ -238,6 +224,7 @@ void ViewController::preload() { for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { + getSystemView(*it); getGameListView(*it); } } @@ -248,13 +235,17 @@ void ViewController::reloadGameListView(IGameListView* view) { if(it->second.get() == view) { + bool isCurrent = (mCurrentView == it->second); SystemData* system = it->first; FileData* cursor = view->getCursor(); mGameListViews.erase(it); std::shared_ptr newView = getGameListView(system); newView->setCursor(cursor); - mCurrentView = newView; + + if(isCurrent) + mCurrentView = newView; + break; } } diff --git a/src/views/ViewController.h b/src/views/ViewController.h index c9f82363e..a924d9f58 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -1,7 +1,7 @@ #pragma once #include "gamelist/IGameListView.h" -#include "SystemListView.h" +#include "SystemView.h" class SystemData; @@ -22,8 +22,9 @@ public: void goToNextGameList(); void goToPrevGameList(); void goToGameList(SystemData* system); - void goToSystemSelect(); - + void goToSystemView(SystemData* system); + void goToStart(); + void onFileChanged(FileData* file, FileChangeType change); // Plays a nice launch effect and launches the game at the end of it. @@ -36,6 +37,7 @@ public: enum ViewMode { + NOTHING, START_SCREEN, SYSTEM_SELECT, GAME_LIST @@ -60,11 +62,11 @@ public: private: void playViewTransition(); std::shared_ptr getGameListView(SystemData* system); - std::shared_ptr getSystemListView(); + std::shared_ptr getSystemView(SystemData* system); std::shared_ptr mCurrentView; std::map< SystemData*, std::shared_ptr > mGameListViews; - std::shared_ptr mSystemListView; + std::map< SystemData*, std::shared_ptr > mSystemViews; Eigen::Affine3f mCamera; float mFadeOpacity; diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index f2913b20f..1f986644a 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -80,7 +80,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) getTheme()->playSound("backSound"); }else{ onFocusLost(); - mWindow->getViewController()->goToSystemSelect(); + mWindow->getViewController()->goToSystemView(getCursor()->getSystem()); } return true; From 7f46e506886e95835df1a3846979b34bbf756f9a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 30 Dec 2013 17:23:34 -0600 Subject: [PATCH 125/386] First part of the theming system rewrite. --- CMakeLists.txt | 1 + src/SystemData.cpp | 9 +- src/ThemeData.cpp | 300 ++++++++++---------- src/ThemeData.h | 174 ++++++++---- src/ThemeData_applicators.cpp | 135 +++++++++ src/components/GuiFastSelect.cpp | 9 +- src/components/GuiMenu.cpp | 11 +- src/components/ImageComponent.h | 2 + src/components/TextComponent.cpp | 6 - src/components/TextComponent.h | 2 - src/components/TextListComponent.h | 69 ++--- src/views/SystemView.cpp | 16 +- src/views/gamelist/BasicGameListView.cpp | 3 +- src/views/gamelist/BasicGameListView.h | 2 + src/views/gamelist/DetailedGameListView.cpp | 20 +- src/views/gamelist/DetailedGameListView.h | 6 +- src/views/gamelist/GridGameListView.h | 2 + src/views/gamelist/IGameListView.h | 1 + src/views/gamelist/ISimpleGameListView.cpp | 12 +- 19 files changed, 492 insertions(+), 288 deletions(-) create mode 100644 src/ThemeData_applicators.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index dafd0fd26..5f01347c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -233,6 +233,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData_applicators.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp diff --git a/src/SystemData.cpp b/src/SystemData.cpp index e7055d510..187b223e8 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -47,7 +47,14 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mRootFolder->sort(FileSorts::SortTypes.at(0)); mTheme = std::make_shared(); - mTheme->loadFile(getThemePath()); + try + { + mTheme->loadFile(getThemePath()); + } catch(ThemeException& e) + { + LOG(LogError) << e.what(); + mTheme = std::make_shared(); // reset to empty + } } SystemData::~SystemData() diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 229dd18fb..89169779d 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -4,81 +4,125 @@ #include "Sound.h" #include "resources/TextureResource.h" #include "Log.h" -#include -#include #include "pugiXML/pugixml.hpp" +#include -// Defaults -std::map ThemeData::sDefaultFonts = boost::assign::map_list_of - ("listFont", FontDef(0.045f, "")) - ("descriptionFont", FontDef(0.035f, "")) - ("fastSelectLetterFont", FontDef(0.15f, "")); +std::map< std::string, std::map > ThemeData::sElementMap = boost::assign::map_list_of + ("image", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) + ("path", PATH) + ("tile", BOOLEAN)) + ("text", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("text", STRING) + ("color", COLOR) + ("fontPath", PATH) + ("fontSize", FLOAT) + ("center", BOOLEAN)) + ("textlist", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("selectorColor", COLOR) + ("selectedColor", COLOR) + ("primaryColor", COLOR) + ("secondaryColor", COLOR) + ("fontPath", PATH) + ("fontSize", FLOAT)) + ("sound", boost::assign::map_list_of + ("path", PATH)); -std::map ThemeData::sDefaultColors = boost::assign::map_list_of - ("listPrimaryColor", 0x0000FFFF) - ("listSecondaryColor", 0x00FF00FF) - ("listSelectorColor", 0x000000FF) - ("listSelectedColor", 0x00000000) - ("descriptionColor", 0x48474DFF) - ("fastSelectLetterColor", 0xFFFFFFFF) - ("fastSelectTextColor", 0xDDDDDDFF); +namespace fs = boost::filesystem; -std::map ThemeData::sDefaultImages = boost::assign::map_list_of - ("backgroundImage", ImageDef("", true)) - ("headerImage", ImageDef("", false)) - ("infoBackgroundImage", ImageDef("", false)) - ("verticalDividerImage", ImageDef("", false)) - ("fastSelectBackgroundImage", ImageDef(":/button.png", false)) - ("systemImage", ImageDef("", false)); +#define MINIMUM_THEME_VERSION 3 +#define CURRENT_THEME_VERSION 3 -std::map ThemeData::sDefaultSounds = boost::assign::map_list_of - ("scrollSound", SoundDef("")) - ("gameSelectSound", SoundDef("")) - ("backSound", SoundDef("")) - ("menuOpenSound", SoundDef("")) - ("menuCloseSound", SoundDef("")); - - - -const std::shared_ptr& ThemeData::getDefault() -{ - static const std::shared_ptr def = std::shared_ptr(new ThemeData()); - return def; -} +// still TODO: +// * how to do ? ThemeData::ThemeData() { - setDefaults(); - - std::string defaultDir = getHomePath() + "/.emulationstation/es_theme_default.xml"; - if(boost::filesystem::exists(defaultDir)) - loadFile(defaultDir); + mVersion = 0; } -void ThemeData::setDefaults() +void ThemeData::loadFile(const std::string& path) { - mFontMap.clear(); - mImageMap.clear(); - mColorMap.clear(); - mSoundMap.clear(); + ThemeException error; + error.setFile(path); - mFontMap = sDefaultFonts; - mImageMap = sDefaultImages; - mColorMap = sDefaultColors; - mSoundMap = sDefaultSounds; + mPath = path; + + if(!fs::exists(path)) + throw error << "Missing file!"; + + mVersion = 0; + mViews.clear(); + + pugi::xml_document doc; + pugi::xml_parse_result res = doc.load_file(path.c_str()); + if(!res) + throw error << "XML parsing error: \n " << res.description(); + + pugi::xml_node root = doc.child("theme"); + if(!root) + throw error << "Missing tag!"; + + // parse version + mVersion = root.child("version").text().as_float(-404); + if(mVersion == -404) + throw error << " tag missing!\n It's either out of date or you need to add " << CURRENT_THEME_VERSION << " inside your tag."; + + + if(mVersion < MINIMUM_THEME_VERSION) + throw error << "Theme is version " << mVersion << ". Minimum supported version is " << MINIMUM_THEME_VERSION << "."; + + // parse views + for(pugi::xml_node node = root.child("view"); node; node = node.next_sibling("view")) + { + if(!node.attribute("name")) + throw error << "View missing \"name\" attribute!"; + + ThemeView view = parseView(node); + + if(view.elements.size() > 0) + mViews[node.attribute("name").as_string()] = view; + } } -unsigned int getHexColor(const char* str, unsigned int defaultColor) +ThemeData::ThemeView ThemeData::parseView(const pugi::xml_node& root) { + ThemeView view; + ThemeException error; + error.setFile(mPath.string()); + + for(pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) + { + if(!node.attribute("name")) + throw error << "Element of type \"" << node.name() << "\" missing \"name\" attribute!"; + + auto elemTypeIt = sElementMap.find(node.name()); + if(elemTypeIt == sElementMap.end()) + throw error << "Unknown element of type \"" << node.name() << "\"!"; + + ThemeElement element = parseElement(node, elemTypeIt->second); + + view.elements[node.attribute("name").as_string()] = element; + } + + return view; +} + +unsigned int getHexColor(const char* str) +{ + ThemeException error; if(!str) - return defaultColor; + throw error << "Empty color"; size_t len = strlen(str); if(len != 6 && len != 8) - { - LOG(LogError) << "Invalid theme color \"" << str << "\" (must be 6 or 8 characters)"; - return defaultColor; - } + throw error << "Invalid color (bad length, \"" << str << "\" - must be 6 or 8)"; unsigned int val; std::stringstream ss; @@ -91,13 +135,12 @@ unsigned int getHexColor(const char* str, unsigned int defaultColor) return val; } -std::string resolvePath(const char* in, const std::string& relative) +std::string resolvePath(const char* in, const fs::path& relative) { if(!in || in[0] == '\0') return in; - boost::filesystem::path relPath(relative); - relPath = relPath.parent_path(); + fs::path relPath = relative.parent_path(); boost::filesystem::path path(in); @@ -114,102 +157,63 @@ std::string resolvePath(const char* in, const std::string& relative) return path.generic_string(); } -void ThemeData::loadFile(const std::string& themePath) + +ThemeData::ThemeElement ThemeData::parseElement(const pugi::xml_node& root, const std::map& typeMap) { - if(themePath.empty() || !boost::filesystem::exists(themePath)) - return; + ThemeException error; + error.setFile(mPath.string()); - pugi::xml_document doc; - pugi::xml_parse_result result = doc.load_file(themePath.c_str()); - if(!result) + ThemeElement element; + element.extra = root.attribute("extra").as_bool(false); + + for(pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) { - LOG(LogWarning) << "Could not parse theme file \"" << themePath << "\":\n " << result.description(); - return; - } + auto typeIt = typeMap.find(node.name()); + if(typeIt == typeMap.end()) + throw error << "Unknown property type \"" << node.name() << "\" (for element of type " << root.name() << ")."; - pugi::xml_node root = doc.child("theme"); - - // Fonts - for(auto it = mFontMap.begin(); it != mFontMap.end(); it++) - { - pugi::xml_node node = root.child(it->first.c_str()); - if(node) + switch(typeIt->second) { - std::string path = resolvePath(node.child("path").text().as_string(it->second.path.c_str()), themePath); - if(!boost::filesystem::exists(path)) - { - LOG(LogWarning) << "Font \"" << path << "\" doesn't exist!"; - path = it->second.path; - } + case NORMALIZED_PAIR: + { + std::string str = std::string(node.text().as_string()); - float size = node.child("size").text().as_float(it->second.size); - mFontMap[it->first] = FontDef(size, path); - root.remove_child(node); + size_t divider = str.find(' '); + if(divider == std::string::npos) + throw error << "invalid normalized pair (\"" << str.c_str() << "\")"; + + std::string first = str.substr(0, divider); + std::string second = str.substr(divider, std::string::npos); + + Eigen::Vector2f val(atof(first.c_str()), atof(second.c_str())); + + element.properties[node.name()] = val; + break; + } + case STRING: + element.properties[node.name()] = std::string(node.text().as_string()); + break; + case PATH: + { + std::string path = resolvePath(node.text().as_string(), mPath.string()); + if(!fs::exists(path)) + LOG(LogWarning) << " Warning: theme \"" << mPath << "\" - could not find file \"" << node.text().get() << "\" (resolved to \"" << path << "\")"; + element.properties[node.name()] = path; + break; + } + case COLOR: + element.properties[node.name()] = getHexColor(node.text().as_string()); + break; + case FLOAT: + element.properties[node.name()] = node.text().as_float(); + break; + case BOOLEAN: + element.properties[node.name()] = node.text().as_bool(); + break; + default: + throw error << "Unknown ElementPropertyType for " << root.attribute("name").as_string() << " property " << node.name(); } } - // Images - for(auto it = mImageMap.begin(); it != mImageMap.end(); it++) - { - pugi::xml_node node = root.child(it->first.c_str()); - if(node) - { - std::string path = resolvePath(node.child("path").text().as_string(it->second.path.c_str()), themePath); - if(!boost::filesystem::exists(path)) - { - LOG(LogWarning) << "Image \"" << path << "\" doesn't exist!"; - path = it->second.path; - } - - bool tile = node.child("tile").text().as_bool(it->second.tile); - mImageMap[it->first] = ImageDef(path, tile); - root.remove_child(node); - } - } - - // Colors - for(auto it = mColorMap.begin(); it != mColorMap.end(); it++) - { - pugi::xml_node node = root.child(it->first.c_str()); - if(node) - { - mColorMap[it->first] = getHexColor(node.text().as_string(NULL), it->second); - root.remove_child(node); - } - } - - // Sounds - for(auto it = mSoundMap.begin(); it != mSoundMap.end(); it++) - { - pugi::xml_node node = root.child(it->first.c_str()); - if(node) - { - std::string path = resolvePath(node.text().as_string(it->second.path.c_str()), themePath); - if(!boost::filesystem::exists(path)) - { - LOG(LogWarning) << "Sound \"" << path << "\" doesn't exist!"; - path = it->second.path; - } - - mSoundMap[it->first] = SoundDef(path); - root.remove_child(node); - } - } - - if(root.begin() != root.end()) - { - std::stringstream ss; - ss << "Unused theme identifiers:\n"; - for(auto it = root.children().begin(); it != root.children().end(); it++) - { - ss << " " << it->name() << "\n"; - } - - LOG(LogWarning) << ss.str(); - } -} - -void ThemeData::playSound(const std::string& identifier) const -{ - mSoundMap.at(identifier).get()->play(); + return element; } diff --git a/src/ThemeData.h b/src/ThemeData.h index 572e6c63e..cf2cfb897 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -1,82 +1,146 @@ #pragma once +#include +#include #include #include #include -#include "resources/Font.h" -#include "resources/TextureResource.h" -#include "Renderer.h" -#include "AudioManager.h" -#include "Sound.h" +#include +#include +#include +#include "pugiXML/pugixml.hpp" +#include "GuiComponent.h" -struct FontDef +template +class TextListComponent; + +class Sound; +class ImageComponent; +class NinePatchComponent; +class TextComponent; +class Window; + +namespace ThemeFlags { - FontDef() {} - FontDef(float sz, const std::string& p) : path(p), size(sz) {} + enum PropertyFlags : unsigned int + { + PATH = 1, + POSITION = 2, + SIZE = 4, + ORIGIN = 8, + COLOR = 16, + FONT_PATH = 32, + FONT_SIZE = 64, + TILING = 128, + SOUND = 256, + CENTER = 512, + TEXT = 1024 + }; +} - std::string path; - float size; +class ThemeException : public std::exception +{ +protected: + std::string msg; - inline const std::shared_ptr& get() const { if(!font) font = Font::get((int)(size * Renderer::getScreenHeight()), path); return font; } +public: + virtual const char* what() const throw() { return msg.c_str(); } -private: - mutable std::shared_ptr font; + template + friend ThemeException& operator<<(ThemeException& e, T msg); + + inline void setFile(const std::string& filename) { *this << "Error loading theme from \"" << filename << "\":\n "; } }; -struct ImageDef +template +ThemeException& operator<<(ThemeException& e, T appendMsg) { - ImageDef() {} - ImageDef(const std::string& p, bool t) : path(p), tile(t) {} - - std::string path; - bool tile; - - inline const std::shared_ptr& getTexture() const { if(!texture && !path.empty()) texture = TextureResource::get(path); return texture; } - -private: - mutable std::shared_ptr texture; -}; - -struct SoundDef -{ - SoundDef() {} - SoundDef(const std::string& p) : path(p) { sound = std::shared_ptr(new Sound(path)); AudioManager::getInstance()->registerSound(sound); } - - std::string path; - - inline const std::shared_ptr& get() const { return sound; } - -private: - std::shared_ptr sound; -}; + std::stringstream ss; + ss << e.msg << appendMsg; + e.msg = ss.str(); + return e; +} class ThemeData { +private: + + class ThemeElement + { + public: + bool extra; + std::string type; + + std::map< std::string, boost::variant > properties; + + template + T get(const std::string& prop) { return boost::get(properties.at(prop)); } + + inline bool has(const std::string& prop) { return (properties.find(prop) != properties.end()); } + }; + + class ThemeView + { + public: + ThemeView() : mExtrasDirty(true) {} + virtual ~ThemeView() { for(auto it = mExtras.begin(); it != mExtras.end(); it++) delete *it; } + + std::map elements; + + const std::vector& getExtras(Window* window); + + private: + bool mExtrasDirty; + std::vector mExtras; + }; + public: - static const std::shared_ptr& getDefault(); ThemeData(); - void setDefaults(); + // throws ThemeException void loadFile(const std::string& path); - inline const FontDef& getFontDef(const std::string& identifier) const { return mFontMap.at(identifier); } - inline std::shared_ptr getFont(const std::string& identifier) const { return mFontMap.at(identifier).get(); } - inline const ImageDef& getImage(const std::string& identifier) const { return mImageMap.at(identifier); } - inline unsigned int getColor(const std::string& identifier) const { return mColorMap.at(identifier); } - void playSound(const std::string& identifier) const; + enum ElementPropertyType + { + NORMALIZED_PAIR, + PATH, + STRING, + COLOR, + FLOAT, + BOOLEAN + }; - inline void setFont(const std::string& identifier, FontDef def) { mFontMap[identifier] = def; } - inline void setColor(const std::string& identifier, unsigned int color) { mColorMap[identifier] = color; } + void renderExtras(const std::string& view, Window* window, const Eigen::Affine3f& transform); + + void applyToImage(const std::string& view, const std::string& element, ImageComponent* image, unsigned int properties); + void applyToNinePatch(const std::string& view, const std::string& element, NinePatchComponent* patch, unsigned int properties); + void applyToText(const std::string& view, const std::string& element, TextComponent* text, unsigned int properties); + + template + void applyToTextList(const std::string& view, const std::string& element, TextListComponent* list, unsigned int properties); + + void playSound(const std::string& name); private: - static std::map sDefaultImages; - static std::map sDefaultColors; - static std::map sDefaultFonts; - static std::map sDefaultSounds; + static std::map< std::string, std::map > sElementMap; - std::map mImageMap; - std::map mColorMap; - std::map mFontMap; - std::map< std::string, SoundDef > mSoundMap; + boost::filesystem::path mPath; + float mVersion; + + ThemeView parseView(const pugi::xml_node& view); + ThemeElement parseElement(const pugi::xml_node& element, const std::map& typeMap); + + ThemeElement* getElement(const std::string& viewName, const std::string& elementName); + + std::map mViews; + + std::map< std::string, std::shared_ptr > mSoundCache; }; + + +template +void ThemeData::applyToTextList(const std::string& view, const std::string& element, TextListComponent* list, unsigned int properties) +{ + +} diff --git a/src/ThemeData_applicators.cpp b/src/ThemeData_applicators.cpp new file mode 100644 index 000000000..83e4d6aa6 --- /dev/null +++ b/src/ThemeData_applicators.cpp @@ -0,0 +1,135 @@ +#include "ThemeData.h" + +#include "Renderer.h" +#include "components/ImageComponent.h" +#include "components/NinePatchComponent.h" +#include "components/TextComponent.h" +#include "Sound.h" +#include "Log.h" + +using namespace ThemeFlags; + +Eigen::Vector2f getScale(GuiComponent* comp) +{ + if(comp && comp->getParent()) + return comp->getParent()->getSize(); + + return Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); +} + +ThemeData::ThemeElement* ThemeData::getElement(const std::string& viewName, const std::string& elementName) +{ + auto viewIt = mViews.find(viewName); + if(viewIt == mViews.end()) + return NULL; + + auto elemIt = viewIt->second.elements.find(elementName); + if(elemIt == viewIt->second.elements.end()) + return NULL; + + return &elemIt->second; +} + +void ThemeData::applyToImage(const std::string& viewName, const std::string& elementName, ImageComponent* image, unsigned int properties) +{ + LOG(LogInfo) << " req image [" << viewName << "." << elementName << "] (flags: " << properties << ")"; + + ThemeElement* elem = getElement(viewName, elementName); + if(!elem) + { + LOG(LogInfo) << " (missing)"; + return; + } + + Eigen::Vector2f scale = getScale(image); + + if(properties & POSITION && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + image->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if(properties & ThemeFlags::SIZE && elem->has("size")) + image->setResize(elem->get("size").cwiseProduct(scale), true); + + if(properties & ORIGIN && elem->has("origin")) + image->setOrigin(elem->get("origin")); + + if(properties & PATH && elem->has("path")) + image->setImage(elem->get("path")); + + if(properties & TILING && elem->has("tile")) + image->setTiling(elem->get("tile")); +} + +void ThemeData::applyToNinePatch(const std::string& viewName, const std::string& elementName, NinePatchComponent* patch, unsigned int properties) +{ + ThemeElement* elem = getElement(viewName, elementName); + if(!elem) + return; + + Eigen::Vector2f scale = getScale(patch); + + if(properties & POSITION && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + patch->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if(properties & PATH && elem->has("path")) + patch->setImagePath(elem->get("path")); + + if(properties & ThemeFlags::SIZE && elem->has("size")) + patch->setSize(elem->get("size").cwiseProduct(scale)); +} + +void ThemeData::applyToText(const std::string& viewName, const std::string& elementName, TextComponent* text, unsigned int properties) +{ + ThemeElement* elem = getElement(viewName, elementName); + if(!elem) + return; + + Eigen::Vector2f scale = getScale(text); + + if(properties & POSITION && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + text->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if(properties & ThemeFlags::SIZE && elem->has("size")) + text->setSize(elem->get("size").cwiseProduct(scale)); + + if(properties & COLOR && elem->has("color")) + text->setColor(elem->get("color")); + + if(properties & CENTER && elem->has("center")) + text->setCentered(elem->get("center")); + + if(properties & TEXT && elem->has("text")) + text->setText(elem->get("text")); + + // TODO - fonts +} + +void ThemeData::playSound(const std::string& elementName) +{ + ThemeElement* elem = getElement("common", elementName); + if(!elem) + return; + + if(elem->has("path")) + { + const std::string path = elem->get("path"); + auto cacheIt = mSoundCache.find(path); + if(cacheIt != mSoundCache.end()) + { + cacheIt->second->play(); + return; + } + + std::shared_ptr sound = std::shared_ptr(new Sound(path)); + sound->play(); + mSoundCache[path] = sound; + } +} diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index 2df321dea..78914057e 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -12,20 +12,23 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.6f); const std::shared_ptr& theme = mGameList->getTheme(); + using namespace ThemeFlags; - mBackground.setImagePath(theme->getImage("fastSelectBackgroundImage").path); + theme->applyToNinePatch("fastSelect", "background", &mBackground, PATH); mBackground.fitTo(mSize); addChild(&mBackground); mLetterText.setSize(mSize.x(), mSize.y() * 0.75f); mLetterText.setCentered(true); - mLetterText.setFromTheme(theme, "fastSelectLetterFont", "fastSelectLetterColor"); + theme->applyToText("fastSelect", "letter", &mLetterText, FONT_PATH | COLOR); + // TODO - set font size addChild(&mLetterText); mSortText.setPosition(0, mSize.y() * 0.75f); mSortText.setSize(mSize.x(), mSize.y() * 0.25f); mSortText.setCentered(true); - mSortText.setFromTheme(theme, "descriptionFont", "fastSelectTextColor"); + theme->applyToText("fastSelect", "subtext", &mSortText, FONT_PATH | COLOR); + // TODO - set font size addChild(&mSortText); mSortId = 0; // TODO diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index da4884a3d..5a48fd57d 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -39,11 +39,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/ addChild(&mBackground); mTheme = std::make_shared(); - mTheme->setFont("listFont", FontDef(0.09f, mTheme->getFontDef("listFont").path)); - mTheme->setColor("listSelectorColor", 0xBBBBBBFF); - mTheme->setColor("listPrimaryColor", 0x0000FFFF); - mTheme->setColor("listSecondaryColor", 0xFF0000FF); - mList.setTheme(mTheme); + using namespace ThemeFlags; + mTheme->applyToTextList< std::function >("common", "menu", &mList, FONT_PATH | COLOR); + mList.setSelectorColor(0xBBBBBBFF); + mList.setColor(0, 0x0000FFFF); + mList.setColor(1, 0xFF0000FF); + // TODO - set font size to 0.09f addChild(&mList); } diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index ce3dd9c3c..725723f61 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -23,8 +23,10 @@ public: void setImage(const char* image, size_t length); //Loads image from memory. void setImage(const std::shared_ptr& texture); //Use an already existing texture. void setOrigin(float originX, float originY); //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) + inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } void setTiling(bool tile); //Enables or disables tiling. Must be called before loading an image or resizing will be weird. void setResize(float width, float height, bool allowUpscale); + inline void setResize(Eigen::Vector2f size, bool allowUpscale) { setResize(size.x(), size.y(), allowUpscale); } void setColorShift(unsigned int color); void setFlipX(bool flip); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index c3ae71ba2..62337433a 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -138,9 +138,3 @@ std::string TextComponent::getValue() const { return mText; } - -void TextComponent::setFromTheme(const std::shared_ptr& theme, const std::string& fontIdentifier, const std::string& colorIdentifier) -{ - setFont(theme->getFont(fontIdentifier)); - setColor(theme->getColor(colorIdentifier)); -} diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 0b73d88e9..1c3410293 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -28,8 +28,6 @@ public: std::shared_ptr getFont() const; - void setFromTheme(const std::shared_ptr& theme, const std::string& fontIdentifier, const std::string& colorIdentifier); - private: void calculateExtent(); diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 45c709cc7..c89946c71 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -13,13 +13,6 @@ #include "../ThemeData.h" #include -#define THEME_FONT "listFont" -#define THEME_SELECTOR_COLOR "listSelectorColor" -#define THEME_HIGHLIGHTED_COLOR "listSelectedColor" -#define THEME_SCROLL_SOUND "listScrollSound" -static const int THEME_COLOR_ID_COUNT = 2; -static const char* const THEME_ENTRY_COLOR[THEME_COLOR_ID_COUNT] = { "listPrimaryColor", "listSecondaryColor" }; - //A graphical list. Supports multiple colors for rows and scrolling. template class TextListComponent : public GuiComponent @@ -54,16 +47,28 @@ public: void stopScrolling(); inline bool isScrolling() const { return mScrollDir != 0; } - void setTheme(const std::shared_ptr& theme); inline void setCentered(bool centered) { mCentered = centered; } - enum CursorState { + enum CursorState + { CURSOR_STOPPED, CURSOR_SCROLLING }; inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } + inline void setFont(const std::shared_ptr& font) + { + mFont = font; + for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) + it->textCache.reset(); + } + + inline void setSelectorColor(unsigned int color) { mSelectorColor = color; } + inline void setSelectedColor(unsigned int color) { mSelectedColor = color; } + inline void setScrollSound(const std::shared_ptr& sound) { mScrollSound = sound; } + inline void setColor(unsigned int id, unsigned int color) { mColors[id] = color; } + private: static const int MARQUEE_DELAY = 900; static const int MARQUEE_SPEED = 16; @@ -81,13 +86,19 @@ private: int mMarqueeOffset; int mMarqueeTime; - std::shared_ptr mTheme; bool mCentered; std::vector mRowVector; int mCursor; std::function mCursorChangedCallback; + + std::shared_ptr mFont; + unsigned int mSelectorColor; + unsigned int mSelectedColor; + std::shared_ptr mScrollSound; + static const unsigned int COLOR_ID_COUNT = 2; + unsigned int mColors[COLOR_ID_COUNT]; }; template @@ -103,7 +114,11 @@ TextListComponent::TextListComponent(Window* window) : mCentered = true; - mTheme = ThemeData::getDefault(); + mFont = Font::get(FONT_SIZE_MEDIUM); + mSelectorColor = 0x000000FF; + mSelectedColor = 0; + mColors[0] = 0x0000FFFF; + mColors[1] = 0x00FF00FF; } template @@ -116,7 +131,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - std::shared_ptr font = mTheme->getFont(THEME_FONT); + std::shared_ptr& font = mFont; const int cutoff = 0; const int entrySize = font->getHeight() + 5; @@ -157,7 +172,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(mCursor == i) { Renderer::setMatrix(trans); - Renderer::drawRect(0, (int)y, (int)getSize().x(), font->getHeight(), mTheme->getColor(THEME_SELECTOR_COLOR)); + Renderer::drawRect(0, (int)y, (int)getSize().x(), font->getHeight(), mSelectorColor); } ListRow& row = mRowVector.at((unsigned int)i); @@ -165,10 +180,10 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) float x = (float)(mCursor == i ? -mMarqueeOffset : 0); unsigned int color; - if(mCursor == i && mTheme->getColor(THEME_HIGHLIGHTED_COLOR)) - color = mTheme->getColor(THEME_HIGHLIGHTED_COLOR); + if(mCursor == i && mSelectedColor) + color = mSelectedColor; else - color = mTheme->getColor(THEME_ENTRY_COLOR[row.colorId]); + color = mColors[row.colorId]; if(!row.textCache) row.textCache = std::unique_ptr(font->buildTextCache(row.name, 0, 0, 0x000000FF)); @@ -273,7 +288,7 @@ void TextListComponent::update(int deltaTime) //if we're not scrolling and this object's text goes outside our size, marquee it! std::string text = getSelectedName(); - Eigen::Vector2f textSize = mTheme->getFont(THEME_FONT)->sizeText(text); + Eigen::Vector2f textSize = mFont->sizeText(text); //it's long enough to marquee if(textSize.x() - mMarqueeOffset > getSize().x() - 12) @@ -311,18 +326,16 @@ void TextListComponent::scroll() } onCursorChanged(CURSOR_SCROLLING); - mTheme->playSound("scrollSound"); + + if(mScrollSound) + mScrollSound->play(); } //list management stuff template void TextListComponent::add(const std::string& name, const T& obj, unsigned int color) { - if(color >= THEME_COLOR_ID_COUNT) - { - LOG(LogError) << "Invalid row color Id (" << color << ")"; - color = 0; - } + assert(color < COLOR_ID_COUNT); ListRow row = {name, obj, color}; mRowVector.push_back(row); @@ -392,14 +405,4 @@ void TextListComponent::onCursorChanged(CursorState state) mCursorChangedCallback(state); } -template -void TextListComponent::setTheme(const std::shared_ptr& theme) -{ - mTheme = theme; - - // invalidate text caches in case font changed - for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) - it->textCache.reset(); -} - #endif diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index e1501d140..a215ad59b 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -35,19 +35,23 @@ SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window void SystemView::updateData() { + using namespace ThemeFlags; + + mHeaderImage.setImage(""); + mSystem->getTheme()->applyToImage("common", "header", &mHeaderImage, PATH); + // header - if(mSystem->getTheme()->getImage("headerImage").path.empty()) + if(mHeaderImage.hasImage()) { + // use image + mHeaderText.setText(""); + }else{ // use text mHeaderImage.setImage(""); mHeaderText.setText(mSystem->getFullName()); - }else{ - // use image - mHeaderText.setText(""); - mHeaderImage.setImage(mSystem->getTheme()->getImage("headerImage").getTexture()); } - mImage.setImage(mSystem->getTheme()->getImage("systemImage").getTexture()); + mSystem->getTheme()->applyToImage("common", "system", &mImage, PATH); } bool SystemView::input(InputConfig* config, Input input) diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index b1663ff55..7f165c5b7 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -18,7 +18,8 @@ BasicGameListView::BasicGameListView(Window* window, FileData* root) void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) { ISimpleGameListView::onThemeChanged(theme); - mList.setTheme(theme); + using namespace ThemeFlags; + theme->applyToTextList(getName(), "gamelist", &mList, POSITION | ThemeFlags::SIZE | COLOR | SOUND); } void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) diff --git a/src/views/gamelist/BasicGameListView.h b/src/views/gamelist/BasicGameListView.h index 347934629..d88135e8f 100644 --- a/src/views/gamelist/BasicGameListView.h +++ b/src/views/gamelist/BasicGameListView.h @@ -16,6 +16,8 @@ public: virtual FileData* getCursor() override; virtual void setCursor(FileData* file) override; + virtual const char* getName() const override { return "basic"; } + protected: virtual void populateList(const std::vector& files) override; virtual void launch(FileData* game) override; diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 06bf730d5..aff14d0bd 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -5,19 +5,10 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), - mImage(window), mInfoBackground(window), mDivider(window) + mImage(window) { mHeaderImage.setPosition(mSize.x() * 0.25f, 0); - mInfoBackground.setPosition(0, mSize.y() * 0.5f); - mInfoBackground.setOrigin(0, 0.5f); - mInfoBackground.setResize(mSize.x() * 0.5f, mSize.y(), true); - addChild(&mInfoBackground); - - mDivider.setPosition(mSize.x() * 0.5f, mSize.y() * 0.5f); - mDivider.setOrigin(0.5f, 0.5f); - addChild(&mDivider); - const float padding = 0.01f; mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); @@ -49,13 +40,8 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them if(mHeaderImage.getPosition().y() + mHeaderImage.getSize().y() > mImage.getPosition().y()) mHeaderImage.setResize(0, mSize.y() * 0.185f, true); - mDescription.setFont(theme->getFont("descriptionFont")); - mDescription.setColor(theme->getColor("descriptionColor")); - mInfoBackground.setImage(theme->getImage("infoBackgroundImage").getTexture()); - mInfoBackground.setTiling(theme->getImage("infoBackgroundImage").tile); - - mDivider.setImage(theme->getImage("verticalDividerImage").getTexture()); - mDivider.setResize((float)mDivider.getTextureSize().x(), mSize.y(), true); + using namespace ThemeFlags; + theme->applyToText("detailed", "description", &mDescription, POSITION | FONT_PATH | FONT_SIZE); } void DetailedGameListView::updateInfoPanel() diff --git a/src/views/gamelist/DetailedGameListView.h b/src/views/gamelist/DetailedGameListView.h index 7e6405244..a2c08901c 100644 --- a/src/views/gamelist/DetailedGameListView.h +++ b/src/views/gamelist/DetailedGameListView.h @@ -10,6 +10,8 @@ public: virtual void onThemeChanged(const std::shared_ptr& theme) override; + virtual const char* getName() const override { return "detailed"; } + protected: virtual void launch(FileData* game) override; @@ -17,9 +19,7 @@ private: void updateInfoPanel(); ImageComponent mImage; - ImageComponent mInfoBackground; - ImageComponent mDivider; - + ScrollableContainer mDescContainer; TextComponent mDescription; }; diff --git a/src/views/gamelist/GridGameListView.h b/src/views/gamelist/GridGameListView.h index 42db55ede..df9771b83 100644 --- a/src/views/gamelist/GridGameListView.h +++ b/src/views/gamelist/GridGameListView.h @@ -17,6 +17,8 @@ public: virtual bool input(InputConfig* config, Input input) override; + virtual const char* getName() const override { return "grid"; } + protected: virtual void populateList(const std::vector& files) override; virtual void launch(FileData* game) override; diff --git a/src/views/gamelist/IGameListView.h b/src/views/gamelist/IGameListView.h index 14abab01d..a2ec8b5ab 100644 --- a/src/views/gamelist/IGameListView.h +++ b/src/views/gamelist/IGameListView.h @@ -36,6 +36,7 @@ public: virtual bool input(InputConfig* config, Input input) override; + virtual const char* getName() const = 0; protected: FileData* mRoot; std::shared_ptr mTheme; diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 1f986644a..fb678d1ee 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -23,14 +23,10 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) { - const ImageDef& bg = theme->getImage("backgroundImage"); - mBackground.setTiling(bg.tile); - mBackground.setImage(bg.getTexture()); - - const ImageDef& hdr = theme->getImage("headerImage"); - mHeaderImage.setTiling(hdr.tile); - mHeaderImage.setImage(hdr.getTexture()); - + using namespace ThemeFlags; + theme->applyToImage("common", "background", &mBackground, PATH | TILING); + theme->applyToImage("common", "header", &mHeaderImage, PATH); + if(mHeaderImage.hasImage()) { removeChild(&mHeaderText); From 8bc33ce309c3633d392b87b38b461d86595b7744 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 30 Dec 2013 21:48:28 -0600 Subject: [PATCH 126/386] Better "common" view. Added tag. --- src/ThemeData.cpp | 222 +++++++++++++-------- src/ThemeData.h | 33 ++- src/ThemeData_applicators.cpp | 21 +- src/views/gamelist/ISimpleGameListView.cpp | 4 +- 4 files changed, 179 insertions(+), 101 deletions(-) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 89169779d..f8a4d9b9f 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -39,81 +39,7 @@ namespace fs = boost::filesystem; #define MINIMUM_THEME_VERSION 3 #define CURRENT_THEME_VERSION 3 -// still TODO: -// * how to do ? - -ThemeData::ThemeData() -{ - mVersion = 0; -} - -void ThemeData::loadFile(const std::string& path) -{ - ThemeException error; - error.setFile(path); - - mPath = path; - - if(!fs::exists(path)) - throw error << "Missing file!"; - - mVersion = 0; - mViews.clear(); - - pugi::xml_document doc; - pugi::xml_parse_result res = doc.load_file(path.c_str()); - if(!res) - throw error << "XML parsing error: \n " << res.description(); - - pugi::xml_node root = doc.child("theme"); - if(!root) - throw error << "Missing tag!"; - - // parse version - mVersion = root.child("version").text().as_float(-404); - if(mVersion == -404) - throw error << " tag missing!\n It's either out of date or you need to add " << CURRENT_THEME_VERSION << " inside your tag."; - - - if(mVersion < MINIMUM_THEME_VERSION) - throw error << "Theme is version " << mVersion << ". Minimum supported version is " << MINIMUM_THEME_VERSION << "."; - - // parse views - for(pugi::xml_node node = root.child("view"); node; node = node.next_sibling("view")) - { - if(!node.attribute("name")) - throw error << "View missing \"name\" attribute!"; - - ThemeView view = parseView(node); - - if(view.elements.size() > 0) - mViews[node.attribute("name").as_string()] = view; - } -} - -ThemeData::ThemeView ThemeData::parseView(const pugi::xml_node& root) -{ - ThemeView view; - ThemeException error; - error.setFile(mPath.string()); - - for(pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) - { - if(!node.attribute("name")) - throw error << "Element of type \"" << node.name() << "\" missing \"name\" attribute!"; - - auto elemTypeIt = sElementMap.find(node.name()); - if(elemTypeIt == sElementMap.end()) - throw error << "Unknown element of type \"" << node.name() << "\"!"; - - ThemeElement element = parseElement(node, elemTypeIt->second); - - view.elements[node.attribute("name").as_string()] = element; - } - - return view; -} - +// helper unsigned int getHexColor(const char* str) { ThemeException error; @@ -135,6 +61,7 @@ unsigned int getHexColor(const char* str) return val; } +// helper std::string resolvePath(const char* in, const fs::path& relative) { if(!in || in[0] == '\0') @@ -158,12 +85,130 @@ std::string resolvePath(const char* in, const fs::path& relative) } -ThemeData::ThemeElement ThemeData::parseElement(const pugi::xml_node& root, const std::map& typeMap) + +ThemeData::ThemeData() +{ + mVersion = 0; +} + +void ThemeData::loadFile(const std::string& path) +{ + mPaths.push_back(path); + + ThemeException error; + error.setFiles(mPaths); + + if(!fs::exists(path)) + throw error << "File does not exist!"; + + mVersion = 0; + mViews.clear(); + + pugi::xml_document doc; + pugi::xml_parse_result res = doc.load_file(path.c_str()); + if(!res) + throw error << "XML parsing error: \n " << res.description(); + + pugi::xml_node root = doc.child("theme"); + if(!root) + throw error << "Missing tag!"; + + // parse version + mVersion = root.child("version").text().as_float(-404); + if(mVersion == -404) + throw error << " tag missing!\n It's either out of date or you need to add " << CURRENT_THEME_VERSION << " inside your tag."; + + if(mVersion < MINIMUM_THEME_VERSION) + throw error << "Theme is version " << mVersion << ". Minimum supported version is " << MINIMUM_THEME_VERSION << "."; + + parseIncludes(root); + parseViews(root); +} + + +void ThemeData::parseIncludes(const pugi::xml_node& root) { ThemeException error; - error.setFile(mPath.string()); + error.setFiles(mPaths); + + for(pugi::xml_node node = root.child("include"); node; node = node.next_sibling("include")) + { + const char* relPath = node.text().get(); + std::string path = resolvePath(relPath, mPaths.back()); + if(!ResourceManager::getInstance()->fileExists(path)) + throw error << "Included file \"" << relPath << "\" not found! (resolved to \"" << path << "\")"; + + error << " from included file \"" << relPath << "\":\n "; + + mPaths.push_back(path); + + pugi::xml_document includeDoc; + pugi::xml_parse_result result = includeDoc.load_file(path.c_str()); + if(!result) + throw error << "Error parsing file: \n " << result.description(); + + pugi::xml_node root = includeDoc.child("theme"); + if(!root) + throw error << "Missing tag!"; + + parseIncludes(root); + parseViews(root); + + mPaths.pop_back(); + } +} + +void ThemeData::parseViews(const pugi::xml_node& root) +{ + ThemeException error; + error.setFiles(mPaths); + + pugi::xml_node common = root.find_child_by_attribute("view", "name", "common"); + + // parse views + for(pugi::xml_node node = root.child("view"); node; node = node.next_sibling("view")) + { + if(!node.attribute("name")) + throw error << "View missing \"name\" attribute!"; + + const char* viewKey = node.attribute("name").as_string(); + ThemeView& view = mViews.insert(std::make_pair(viewKey, ThemeView())).first->second; + + // load common first + if(common && node != common) + parseView(common, view); + + parseView(node, view); + } +} + +void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) +{ + ThemeException error; + error.setFiles(mPaths); + + for(pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) + { + if(!node.attribute("name")) + throw error << "Element of type \"" << node.name() << "\" missing \"name\" attribute!"; + + auto elemTypeIt = sElementMap.find(node.name()); + if(elemTypeIt == sElementMap.end()) + throw error << "Unknown element of type \"" << node.name() << "\"!"; + + const char* elemKey = node.attribute("name").as_string(); + + parseElement(node, elemTypeIt->second, + view.elements.insert(std::make_pair(elemKey, ThemeElement())).first->second); + } +} + + +void ThemeData::parseElement(const pugi::xml_node& root, const std::map& typeMap, ThemeElement& element) +{ + ThemeException error; + error.setFiles(mPaths); - ThemeElement element; element.extra = root.attribute("extra").as_bool(false); for(pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) @@ -195,9 +240,16 @@ ThemeData::ThemeElement ThemeData::parseElement(const pugi::xml_node& root, cons break; case PATH: { - std::string path = resolvePath(node.text().as_string(), mPath.string()); - if(!fs::exists(path)) - LOG(LogWarning) << " Warning: theme \"" << mPath << "\" - could not find file \"" << node.text().get() << "\" (resolved to \"" << path << "\")"; + std::string path = resolvePath(node.text().as_string(), mPaths.back().string()); + if(!ResourceManager::getInstance()->fileExists(path)) + { + std::stringstream ss; + ss << " Warning " << error.msg; // "from theme yadda yadda, included file yadda yadda + ss << "could not find file \"" << node.text().get() << "\" "; + if(node.text().get() != path) + ss << "(which resolved to \"" << path << "\") "; + LOG(LogWarning) << ss.str(); + } element.properties[node.name()] = path; break; } @@ -214,6 +266,10 @@ ThemeData::ThemeElement ThemeData::parseElement(const pugi::xml_node& root, cons throw error << "Unknown ElementPropertyType for " << root.attribute("name").as_string() << " property " << node.name(); } } - - return element; } + +ThemeData::ThemeView::~ThemeView() +{ + for(auto it = mExtras.begin(); it != mExtras.end(); it++) + delete *it; +} \ No newline at end of file diff --git a/src/ThemeData.h b/src/ThemeData.h index cf2cfb897..d1eccc01b 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -40,16 +41,21 @@ namespace ThemeFlags class ThemeException : public std::exception { -protected: +public: std::string msg; -public: virtual const char* what() const throw() { return msg.c_str(); } template friend ThemeException& operator<<(ThemeException& e, T msg); - inline void setFile(const std::string& filename) { *this << "Error loading theme from \"" << filename << "\":\n "; } + inline void setFiles(const std::deque& deque) + { + *this << "from theme \"" << deque.front().string() << "\"\n"; + for(auto it = deque.begin() + 1; it != deque.end(); it++) + *this << " (from included file \"" << (*it).string() << "\")\n"; + *this << " "; + } }; template @@ -81,17 +87,17 @@ private: class ThemeView { + private: + bool mExtrasDirty; + std::vector mExtras; + public: ThemeView() : mExtrasDirty(true) {} - virtual ~ThemeView() { for(auto it = mExtras.begin(); it != mExtras.end(); it++) delete *it; } + virtual ~ThemeView(); std::map elements; const std::vector& getExtras(Window* window); - - private: - bool mExtrasDirty; - std::vector mExtras; }; public: @@ -122,14 +128,19 @@ public: void playSound(const std::string& name); +private: + void applyPosAndSize(ThemeElement* elem, GuiComponent* comp, unsigned int properties); + private: static std::map< std::string, std::map > sElementMap; - boost::filesystem::path mPath; + std::deque mPaths; float mVersion; - ThemeView parseView(const pugi::xml_node& view); - ThemeElement parseElement(const pugi::xml_node& element, const std::map& typeMap); + void parseIncludes(const pugi::xml_node& themeRoot); + void parseViews(const pugi::xml_node& themeRoot); + void parseView(const pugi::xml_node& viewNode, ThemeView& view); + void parseElement(const pugi::xml_node& elementNode, const std::map& typeMap, ThemeElement& element); ThemeElement* getElement(const std::string& viewName, const std::string& elementName); diff --git a/src/ThemeData_applicators.cpp b/src/ThemeData_applicators.cpp index 83e4d6aa6..1e2b6c17f 100644 --- a/src/ThemeData_applicators.cpp +++ b/src/ThemeData_applicators.cpp @@ -9,6 +9,7 @@ using namespace ThemeFlags; + Eigen::Vector2f getScale(GuiComponent* comp) { if(comp && comp->getParent()) @@ -17,6 +18,20 @@ Eigen::Vector2f getScale(GuiComponent* comp) return Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); } +void ThemeData::applyPosAndSize(ThemeElement* elem, GuiComponent* comp, unsigned int properties) +{ + Eigen::Vector2f scale = getScale(comp); + + if(properties & POSITION && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + comp->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if(properties & ThemeFlags::SIZE && elem->has("size")) + comp->setSize(elem->get("size").cwiseProduct(scale)); +} + ThemeData::ThemeElement* ThemeData::getElement(const std::string& viewName, const std::string& elementName) { auto viewIt = mViews.find(viewName); @@ -76,11 +91,7 @@ void ThemeData::applyToNinePatch(const std::string& viewName, const std::string& patch->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); } - if(properties & PATH && elem->has("path")) - patch->setImagePath(elem->get("path")); - - if(properties & ThemeFlags::SIZE && elem->has("size")) - patch->setSize(elem->get("size").cwiseProduct(scale)); + applyPosAndSize(elem, patch, properties); } void ThemeData::applyToText(const std::string& viewName, const std::string& elementName, TextComponent* text, unsigned int properties) diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index fb678d1ee..082ac118b 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -24,8 +24,8 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) { using namespace ThemeFlags; - theme->applyToImage("common", "background", &mBackground, PATH | TILING); - theme->applyToImage("common", "header", &mHeaderImage, PATH); + theme->applyToImage(getName(), "background", &mBackground, PATH | TILING); + theme->applyToImage(getName(), "header", &mHeaderImage, PATH); if(mHeaderImage.hasImage()) { From e6d0da998b844aadca541f9d69af5d890a82fe3f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 31 Dec 2013 23:39:22 -0600 Subject: [PATCH 127/386] Theme applicators have become the virtual method GuiComponent::applyTheme(theme, view, element, properties). Applying fonts works now. --- CMakeLists.txt | 1 - src/GuiComponent.cpp | 18 +++ src/GuiComponent.h | 5 + src/ThemeData.cpp | 50 ++++++- src/ThemeData.h | 40 +++--- src/ThemeData_applicators.cpp | 146 -------------------- src/components/GuiFastSelect.cpp | 6 +- src/components/GuiMenu.cpp | 2 +- src/components/ImageComponent.cpp | 35 +++++ src/components/ImageComponent.h | 2 + src/components/NinePatchComponent.cpp | 15 ++ src/components/NinePatchComponent.h | 2 + src/components/TextComponent.cpp | 22 +++ src/components/TextComponent.h | 2 + src/components/TextListComponent.h | 24 ++++ src/resources/Font.cpp | 19 +++ src/resources/Font.h | 4 + src/views/SystemView.cpp | 4 +- src/views/gamelist/BasicGameListView.cpp | 2 +- src/views/gamelist/DetailedGameListView.cpp | 3 +- src/views/gamelist/ISimpleGameListView.cpp | 6 +- 21 files changed, 230 insertions(+), 178 deletions(-) delete mode 100644 src/ThemeData_applicators.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f01347c1..dafd0fd26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -233,7 +233,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData_applicators.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 9f5f6f1f1..8889fc5af 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -3,6 +3,7 @@ #include "Log.h" #include "Renderer.h" #include "animations/AnimationController.h" +#include "ThemeData.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()) @@ -225,3 +226,20 @@ void GuiComponent::stopAnimation(unsigned char slot) mAnimationMap[slot] = NULL; } } + +void GuiComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, ""); + + using namespace ThemeFlags; + if(properties & POSITION && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if(properties & ThemeFlags::SIZE && elem->has("size")) + setSize(elem->get("size").cwiseProduct(scale)); +} diff --git a/src/GuiComponent.h b/src/GuiComponent.h index be58769ee..63aedd43c 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -8,6 +8,7 @@ class Window; class Animation; class AnimationController; +class ThemeData; class GuiComponent { @@ -66,6 +67,10 @@ public: virtual void onFocusGained() {}; virtual void onFocusLost() {}; + // Default implementation just handles and tags as normalized float pairs. + // You probably want to keep this behavior for any derived classes as well as add your own. + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties); + protected: void renderChildren(const Eigen::Affine3f& transform) const; diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index f8a4d9b9f..5a7a084e9 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -209,6 +209,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapsecond.elements.find(element); + if(elemIt == viewIt->second.elements.end()) return NULL; + + if(elemIt->second.type != expectedType && !expectedType.empty()) + { + LOG(LogWarning) << " requested mismatched theme type for [" << view << "." << element << "] - expected \"" + << expectedType << "\", got \"" << elemIt->second.type << "\""; + return NULL; + } + + return &elemIt->second; +} + +void ThemeData::playSound(const std::string& elementName) +{ + const ThemeElement* elem = getElement("common", elementName, "sound"); + if(!elem) + return; + + if(elem->has("path")) + { + const std::string path = elem->get("path"); + auto cacheIt = mSoundCache.find(path); + if(cacheIt != mSoundCache.end()) + { + cacheIt->second->play(); + return; + } + + std::shared_ptr sound = std::shared_ptr(new Sound(path)); + sound->play(); + mSoundCache[path] = sound; + } +} diff --git a/src/ThemeData.h b/src/ThemeData.h index d1eccc01b..cf1e187ec 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -69,7 +69,7 @@ ThemeException& operator<<(ThemeException& e, T appendMsg) class ThemeData { -private: +public: class ThemeElement { @@ -80,11 +80,12 @@ private: std::map< std::string, boost::variant > properties; template - T get(const std::string& prop) { return boost::get(properties.at(prop)); } + T get(const std::string& prop) const { return boost::get(properties.at(prop)); } - inline bool has(const std::string& prop) { return (properties.find(prop) != properties.end()); } + inline bool has(const std::string& prop) const { return (properties.find(prop) != properties.end()); } }; +private: class ThemeView { private: @@ -119,17 +120,10 @@ public: void renderExtras(const std::string& view, Window* window, const Eigen::Affine3f& transform); - void applyToImage(const std::string& view, const std::string& element, ImageComponent* image, unsigned int properties); - void applyToNinePatch(const std::string& view, const std::string& element, NinePatchComponent* patch, unsigned int properties); - void applyToText(const std::string& view, const std::string& element, TextComponent* text, unsigned int properties); - - template - void applyToTextList(const std::string& view, const std::string& element, TextListComponent* list, unsigned int properties); - void playSound(const std::string& name); -private: - void applyPosAndSize(ThemeElement* elem, GuiComponent* comp, unsigned int properties); + // If expectedType is an empty string, will do no type checking. + const ThemeElement* getElement(const std::string& view, const std::string& element, const std::string& expectedType) const; private: static std::map< std::string, std::map > sElementMap; @@ -142,16 +136,24 @@ private: void parseView(const pugi::xml_node& viewNode, ThemeView& view); void parseElement(const pugi::xml_node& elementNode, const std::map& typeMap, ThemeElement& element); - ThemeElement* getElement(const std::string& viewName, const std::string& elementName); - std::map mViews; std::map< std::string, std::shared_ptr > mSoundCache; }; -template -void ThemeData::applyToTextList(const std::string& view, const std::string& element, TextListComponent* list, unsigned int properties) -{ - -} +// okay ideas for applying themes to GuiComponents: +// 1. ThemeData::applyToImage(component, args) +// NO, BECAUSE: +// - for templated types (TextListComponent) have to include the whole template in a header +// - inconsistent definitions if mixing templated types (some in a .cpp, some in a .h/.inl) +// 2. template ThemeData::apply(component, args) with specialized templates +// NO, BECAUSE: +// - doesn't solve the first drawback +// - can't customize arguments for specific types +// 3. GuiComponent::applyTheme(theme, args) - WINNER +// NO, BECAUSE: +// - can't access private members of ThemeData +// - can't this be solved with enough getters? +// - theme->hasElement and theme->getProperty will require 2x as many map lookups (4 vs 2) +// - why not just return a const ThemeElement... \ No newline at end of file diff --git a/src/ThemeData_applicators.cpp b/src/ThemeData_applicators.cpp deleted file mode 100644 index 1e2b6c17f..000000000 --- a/src/ThemeData_applicators.cpp +++ /dev/null @@ -1,146 +0,0 @@ -#include "ThemeData.h" - -#include "Renderer.h" -#include "components/ImageComponent.h" -#include "components/NinePatchComponent.h" -#include "components/TextComponent.h" -#include "Sound.h" -#include "Log.h" - -using namespace ThemeFlags; - - -Eigen::Vector2f getScale(GuiComponent* comp) -{ - if(comp && comp->getParent()) - return comp->getParent()->getSize(); - - return Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); -} - -void ThemeData::applyPosAndSize(ThemeElement* elem, GuiComponent* comp, unsigned int properties) -{ - Eigen::Vector2f scale = getScale(comp); - - if(properties & POSITION && elem->has("pos")) - { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - comp->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); - } - - if(properties & ThemeFlags::SIZE && elem->has("size")) - comp->setSize(elem->get("size").cwiseProduct(scale)); -} - -ThemeData::ThemeElement* ThemeData::getElement(const std::string& viewName, const std::string& elementName) -{ - auto viewIt = mViews.find(viewName); - if(viewIt == mViews.end()) - return NULL; - - auto elemIt = viewIt->second.elements.find(elementName); - if(elemIt == viewIt->second.elements.end()) - return NULL; - - return &elemIt->second; -} - -void ThemeData::applyToImage(const std::string& viewName, const std::string& elementName, ImageComponent* image, unsigned int properties) -{ - LOG(LogInfo) << " req image [" << viewName << "." << elementName << "] (flags: " << properties << ")"; - - ThemeElement* elem = getElement(viewName, elementName); - if(!elem) - { - LOG(LogInfo) << " (missing)"; - return; - } - - Eigen::Vector2f scale = getScale(image); - - if(properties & POSITION && elem->has("pos")) - { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - image->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); - } - - if(properties & ThemeFlags::SIZE && elem->has("size")) - image->setResize(elem->get("size").cwiseProduct(scale), true); - - if(properties & ORIGIN && elem->has("origin")) - image->setOrigin(elem->get("origin")); - - if(properties & PATH && elem->has("path")) - image->setImage(elem->get("path")); - - if(properties & TILING && elem->has("tile")) - image->setTiling(elem->get("tile")); -} - -void ThemeData::applyToNinePatch(const std::string& viewName, const std::string& elementName, NinePatchComponent* patch, unsigned int properties) -{ - ThemeElement* elem = getElement(viewName, elementName); - if(!elem) - return; - - Eigen::Vector2f scale = getScale(patch); - - if(properties & POSITION && elem->has("pos")) - { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - patch->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); - } - - applyPosAndSize(elem, patch, properties); -} - -void ThemeData::applyToText(const std::string& viewName, const std::string& elementName, TextComponent* text, unsigned int properties) -{ - ThemeElement* elem = getElement(viewName, elementName); - if(!elem) - return; - - Eigen::Vector2f scale = getScale(text); - - if(properties & POSITION && elem->has("pos")) - { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - text->setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); - } - - if(properties & ThemeFlags::SIZE && elem->has("size")) - text->setSize(elem->get("size").cwiseProduct(scale)); - - if(properties & COLOR && elem->has("color")) - text->setColor(elem->get("color")); - - if(properties & CENTER && elem->has("center")) - text->setCentered(elem->get("center")); - - if(properties & TEXT && elem->has("text")) - text->setText(elem->get("text")); - - // TODO - fonts -} - -void ThemeData::playSound(const std::string& elementName) -{ - ThemeElement* elem = getElement("common", elementName); - if(!elem) - return; - - if(elem->has("path")) - { - const std::string path = elem->get("path"); - auto cacheIt = mSoundCache.find(path); - if(cacheIt != mSoundCache.end()) - { - cacheIt->second->play(); - return; - } - - std::shared_ptr sound = std::shared_ptr(new Sound(path)); - sound->play(); - mSoundCache[path] = sound; - } -} diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index 78914057e..d200f7477 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -14,20 +14,20 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo const std::shared_ptr& theme = mGameList->getTheme(); using namespace ThemeFlags; - theme->applyToNinePatch("fastSelect", "background", &mBackground, PATH); + mBackground.applyTheme(theme, "fastSelect", "background", PATH); mBackground.fitTo(mSize); addChild(&mBackground); mLetterText.setSize(mSize.x(), mSize.y() * 0.75f); mLetterText.setCentered(true); - theme->applyToText("fastSelect", "letter", &mLetterText, FONT_PATH | COLOR); + mLetterText.applyTheme(theme, "fastSelect", "letter", FONT_PATH | COLOR); // TODO - set font size addChild(&mLetterText); mSortText.setPosition(0, mSize.y() * 0.75f); mSortText.setSize(mSize.x(), mSize.y() * 0.25f); mSortText.setCentered(true); - theme->applyToText("fastSelect", "subtext", &mSortText, FONT_PATH | COLOR); + mSortText.applyTheme(theme, "fastSelect", "subtext", FONT_PATH | COLOR); // TODO - set font size addChild(&mSortText); diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index 5a48fd57d..396a39b5f 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -40,7 +40,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/ mTheme = std::make_shared(); using namespace ThemeFlags; - mTheme->applyToTextList< std::function >("common", "menu", &mList, FONT_PATH | COLOR); + mList.applyTheme(mTheme, "common", "menu", FONT_PATH | COLOR); mList.setSelectorColor(0xBBBBBBFF); mList.setColor(0, 0x0000FFFF); mList.setColor(1, 0xFF0000FF); diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 41e39502e..f28cde28d 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -4,6 +4,7 @@ #include #include "../Log.h" #include "../Renderer.h" +#include "../ThemeData.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -243,3 +244,37 @@ void ImageComponent::copyScreen() resize(); } + +void ImageComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + LOG(LogInfo) << " req image [" << view << "." << element << "] (flags: " << properties << ")"; + + using namespace ThemeFlags; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "image"); + if(!elem) + { + LOG(LogInfo) << " (missing)"; + return; + } + + Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + if(properties & POSITION && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if(properties & ThemeFlags::SIZE && elem->has("size")) + setResize(elem->get("size").cwiseProduct(scale), true); + + if(properties & ORIGIN && elem->has("origin")) + setOrigin(elem->get("origin")); + + if(properties & PATH && elem->has("path")) + setImage(elem->get("path")); + + if(properties & TILING && elem->has("tile")) + setTiling(elem->get("tile")); +} diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index 725723f61..f3e6532c6 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -41,6 +41,8 @@ public: void render(const Eigen::Affine3f& parentTrans) override; + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + private: Eigen::Vector2f mTargetSize; Eigen::Vector2f mOrigin; diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index 4fdc62a30..8cda3e697 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -2,6 +2,7 @@ #include "../Window.h" #include "../Log.h" #include "../Renderer.h" +#include "../ThemeData.h" NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), mEdgeColor(edgeColor), mCenterColor(centerColor), @@ -193,3 +194,17 @@ void NinePatchComponent::setCenterColor(unsigned int centerColor) mCenterColor = centerColor; updateColors(); } + +void NinePatchComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + GuiComponent::applyTheme(theme, view, element, properties); + + using namespace ThemeFlags; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "ninepatch"); + if(!elem) + return; + + if(properties & PATH && elem->has("path")) + setImagePath(elem->get("path")); +} diff --git a/src/components/NinePatchComponent.h b/src/components/NinePatchComponent.h index fad6feb65..471490cd4 100644 --- a/src/components/NinePatchComponent.h +++ b/src/components/NinePatchComponent.h @@ -18,6 +18,8 @@ public: void setEdgeColor(unsigned int edgeColor); void setCenterColor(unsigned int centerColor); + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + private: Eigen::Vector2f getCornerSize() const; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 62337433a..090b6281f 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -138,3 +138,25 @@ std::string TextComponent::getValue() const { return mText; } + +void TextComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + GuiComponent::applyTheme(theme, view, element, properties); + + using namespace ThemeFlags; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "text"); + if(!elem) + return; + + if(properties & COLOR && elem->has("color")) + setColor(elem->get("color")); + + if(properties & CENTER && elem->has("center")) + setCentered(elem->get("center")); + + if(properties & TEXT && elem->has("text")) + setText(elem->get("text")); + + setFont(Font::getFromTheme(elem, properties, mFont)); +} diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 1c3410293..e9906f67b 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -28,6 +28,8 @@ public: std::shared_ptr getFont() const; + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + private: void calculateExtent(); diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index c89946c71..00c62ca8f 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -24,6 +24,7 @@ public: bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; + void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; struct ListRow { @@ -405,4 +406,27 @@ void TextListComponent::onCursorChanged(CursorState state) mCursorChangedCallback(state); } +template +void TextListComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + GuiComponent::applyTheme(theme, view, element, properties); + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "textlist"); + + using namespace ThemeFlags; + if(properties & COLOR) + { + if(elem->has("selectorColor")) + setSelectorColor(elem->get("selectorColor")); + if(elem->has("selectedColor")) + setSelectedColor(elem->get("selectedColor")); + if(elem->has("primaryColor")) + setColor(0, elem->get("primaryColor")); + if(elem->has("secondaryColor")) + setColor(1, elem->get("secondaryColor")); + } + + setFont(Font::getFromTheme(elem, properties, mFont)); +} + #endif diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index f4e671980..bbbc88ae8 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -553,3 +553,22 @@ void TextCache::setColor(unsigned int color) { Renderer::buildGLColorArray(const_cast(colors), color, vertCount); } + +std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) +{ + using namespace ThemeFlags; + if(!(properties & FONT_PATH) && !(properties & FONT_SIZE)) + return orig; + + std::shared_ptr font; + int size = (orig ? orig->mSize : FONT_SIZE_MEDIUM); + std::string path = (orig ? orig->mPath : getDefaultPath()); + + float sh = (float)Renderer::getScreenHeight(); + if(properties & FONT_SIZE && elem->has("fontSize")) + size = (int)(sh * elem->get("fontSize")); + if(properties & FONT_PATH && elem->has("fontPath")) + path = elem->get("fontPath"); + + return get(size, path); +} diff --git a/src/resources/Font.h b/src/resources/Font.h index d04f25083..8cc3f501b 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -8,6 +8,7 @@ #include FT_FREETYPE_H #include #include "ResourceManager.h" +#include "../ThemeData.h" class TextCache; @@ -69,6 +70,9 @@ public: int getSize() const; static std::string getDefaultPath(); + + static std::shared_ptr getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig); + private: static int getDpiX(); static int getDpiY(); diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index a215ad59b..6a69bd308 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -38,7 +38,7 @@ void SystemView::updateData() using namespace ThemeFlags; mHeaderImage.setImage(""); - mSystem->getTheme()->applyToImage("common", "header", &mHeaderImage, PATH); + mHeaderImage.applyTheme(mSystem->getTheme(), "system", "header", PATH); // header if(mHeaderImage.hasImage()) @@ -51,7 +51,7 @@ void SystemView::updateData() mHeaderText.setText(mSystem->getFullName()); } - mSystem->getTheme()->applyToImage("common", "system", &mImage, PATH); + mImage.applyTheme(mSystem->getTheme(), "system", "system", PATH); } bool SystemView::input(InputConfig* config, Input input) diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index 7f165c5b7..dfa670767 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -19,7 +19,7 @@ void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) { ISimpleGameListView::onThemeChanged(theme); using namespace ThemeFlags; - theme->applyToTextList(getName(), "gamelist", &mList, POSITION | ThemeFlags::SIZE | COLOR | SOUND); + mList.applyTheme(theme, getName(), "gamelist", POSITION | ThemeFlags::SIZE | COLOR | SOUND | FONT_PATH | FONT_SIZE); } void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index aff14d0bd..adcc47ece 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -26,6 +26,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mDescContainer.setAutoScroll((int)(1600 + mDescContainer.getSize().x()), 0.025f); addChild(&mDescContainer); + mDescription.setFont(Font::get(FONT_SIZE_SMALL)); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescContainer.addChild(&mDescription); @@ -41,7 +42,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mHeaderImage.setResize(0, mSize.y() * 0.185f, true); using namespace ThemeFlags; - theme->applyToText("detailed", "description", &mDescription, POSITION | FONT_PATH | FONT_SIZE); + mDescription.applyTheme(theme, getName(), "description", POSITION | FONT_PATH | FONT_SIZE | COLOR); } void DetailedGameListView::updateInfoPanel() diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 082ac118b..5b92351f7 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -24,9 +24,9 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) { using namespace ThemeFlags; - theme->applyToImage(getName(), "background", &mBackground, PATH | TILING); - theme->applyToImage(getName(), "header", &mHeaderImage, PATH); - + mBackground.applyTheme(theme, getName(), "background", PATH | TILING); + mHeaderImage.applyTheme(theme, getName(), "header", PATH); + if(mHeaderImage.hasImage()) { removeChild(&mHeaderText); From 8a52866ca6b0e9f903c967e3489a28803703bc92 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 3 Jan 2014 08:26:39 -0600 Subject: [PATCH 128/386] Added support for theme "extras". Fixed a few crashes (e.g. TextListComponent::applyTheme). --- CMakeLists.txt | 2 + src/GuiComponent.cpp | 2 + src/ThemeData.cpp | 59 ++++++++++++++++++--- src/ThemeData.h | 30 +++++++---- src/ThemeDumper.cpp | 2 + src/ThemeDumper.h | 13 +++++ src/components/GuiMenu.cpp | 8 +-- src/components/ImageComponent.cpp | 3 +- src/components/TextListComponent.h | 2 + src/views/gamelist/DetailedGameListView.cpp | 2 + src/views/gamelist/ISimpleGameListView.cpp | 8 +-- src/views/gamelist/ISimpleGameListView.h | 2 + 12 files changed, 108 insertions(+), 25 deletions(-) create mode 100644 src/ThemeDumper.cpp create mode 100644 src/ThemeDumper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index dafd0fd26..7e740736c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeDumper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h @@ -233,6 +234,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeDumper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 8889fc5af..8cea223d5 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -232,6 +232,8 @@ void GuiComponent::applyTheme(const std::shared_ptr& theme, const std Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); const ThemeData::ThemeElement* elem = theme->getElement(view, element, ""); + if(!elem) + return; using namespace ThemeFlags; if(properties & POSITION && elem->has("pos")) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 5a7a084e9..9d26d0aed 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -7,6 +7,9 @@ #include "pugiXML/pugixml.hpp" #include +#include "components/ImageComponent.h" +#include "components/TextComponent.h" + std::map< std::string, std::map > ThemeData::sElementMap = boost::assign::map_list_of ("image", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) @@ -31,6 +34,9 @@ std::map< std::string, std::map > T ("secondaryColor", COLOR) ("fontPath", PATH) ("fontSize", FLOAT)) + ("container", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR)) ("sound", boost::assign::map_list_of ("path", PATH)); @@ -211,7 +217,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::map ThemeData::makeExtras(const std::shared_ptr& theme, const std::string& view, Window* window) +{ + std::vector comps; + + auto viewIt = theme->mViews.find(view); + if(viewIt == theme->mViews.end()) + return comps; + + for(auto it = viewIt->second.elements.begin(); it != viewIt->second.elements.end(); it++) + { + if(it->second.extra) + { + GuiComponent* comp = NULL; + const std::string& t = it->second.type; + if(t == "image") + comp = new ImageComponent(window); + else if(t == "text") + comp = new TextComponent(window); + + comp->applyTheme(theme, view, it->first, ThemeFlags::ALL); + comps.push_back(comp); + } + } + + return comps; +} + +void ThemeExtras::setExtras(const std::vector& extras) +{ + // delete old extras (if any) + for(auto it = mExtras.begin(); it != mExtras.end(); it++) + delete *it; + + mExtras = extras; + for(auto it = mExtras.begin(); it != mExtras.end(); it++) + addChild(*it); +} + +ThemeExtras::~ThemeExtras() +{ + for(auto it = mExtras.begin(); it != mExtras.end(); it++) + delete *it; +} diff --git a/src/ThemeData.h b/src/ThemeData.h index cf1e187ec..9f8a24a0f 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -35,7 +35,9 @@ namespace ThemeFlags TILING = 128, SOUND = 256, CENTER = 512, - TEXT = 1024 + TEXT = 1024, + + ALL = 0xFFFFFFFF }; } @@ -67,6 +69,20 @@ ThemeException& operator<<(ThemeException& e, T appendMsg) return e; } +class ThemeExtras : public GuiComponent +{ +public: + ThemeExtras(Window* window) : GuiComponent(window) {}; + + // will take ownership of the components within extras (delete them in destructor or when setExtras is called again) + void setExtras(const std::vector& extras); + + virtual ~ThemeExtras(); + +private: + std::vector mExtras; +}; + class ThemeData { public: @@ -88,17 +104,8 @@ public: private: class ThemeView { - private: - bool mExtrasDirty; - std::vector mExtras; - public: - ThemeView() : mExtrasDirty(true) {} - virtual ~ThemeView(); - std::map elements; - - const std::vector& getExtras(Window* window); }; public: @@ -125,6 +132,8 @@ public: // If expectedType is an empty string, will do no type checking. const ThemeElement* getElement(const std::string& view, const std::string& element, const std::string& expectedType) const; + static std::vector makeExtras(const std::shared_ptr& theme, const std::string& view, Window* window); + private: static std::map< std::string, std::map > sElementMap; @@ -141,7 +150,6 @@ private: std::map< std::string, std::shared_ptr > mSoundCache; }; - // okay ideas for applying themes to GuiComponents: // 1. ThemeData::applyToImage(component, args) // NO, BECAUSE: diff --git a/src/ThemeDumper.cpp b/src/ThemeDumper.cpp new file mode 100644 index 000000000..e7ec37ad4 --- /dev/null +++ b/src/ThemeDumper.cpp @@ -0,0 +1,2 @@ +#include "ThemeDumper.h" + diff --git a/src/ThemeDumper.h b/src/ThemeDumper.h new file mode 100644 index 000000000..efd7a374b --- /dev/null +++ b/src/ThemeDumper.h @@ -0,0 +1,13 @@ +#pragma once + +#include "ThemeData.h" + +// Should be able to: +// 1. Take a list of "tests" to run. +// a. Each test works by calling setTheme on a theme with a "fake" theme that records all getElement() access. +// 2. Results can be output to a text file, OR compared with a loaded theme to create warnings about potentially unused elements. + +class ThemeDumper +{ + +}; diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index 396a39b5f..e766c4810 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -35,16 +35,18 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/ mList.setPosition(mSize.x() * 0.175f, mSize.y() * 0.05f); mList.setSize(mSize.x() * 0.65f, mSize.y() * 0.9f); + using namespace ThemeFlags; + mBackground.applyTheme(mTheme, "menu", "background", PATH); mBackground.fitTo(Eigen::Vector2f(mList.getSize().x(), mSize.y()), Eigen::Vector3f(mList.getPosition().x(), 0, 0)); addChild(&mBackground); mTheme = std::make_shared(); - using namespace ThemeFlags; - mList.applyTheme(mTheme, "common", "menu", FONT_PATH | COLOR); + + mList.setFont(Font::get((int)(0.09f * Renderer::getScreenHeight()))); + mList.applyTheme(mTheme, "menu", "menulist", FONT_PATH | COLOR); mList.setSelectorColor(0xBBBBBBFF); mList.setColor(0, 0x0000FFFF); mList.setColor(1, 0xFF0000FF); - // TODO - set font size to 0.09f addChild(&mList); } diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index f28cde28d..972016ff9 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -269,7 +269,8 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if(properties & ThemeFlags::SIZE && elem->has("size")) setResize(elem->get("size").cwiseProduct(scale), true); - if(properties & ORIGIN && elem->has("origin")) + // position + size also implies origin + if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) setOrigin(elem->get("origin")); if(properties & PATH && elem->has("path")) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 00c62ca8f..d074d852b 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -412,6 +412,8 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c GuiComponent::applyTheme(theme, view, element, properties); const ThemeData::ThemeElement* elem = theme->getElement(view, element, "textlist"); + if(!elem) + return; using namespace ThemeFlags; if(properties & COLOR) diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index adcc47ece..f905fcc00 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -42,6 +42,8 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mHeaderImage.setResize(0, mSize.y() * 0.185f, true); using namespace ThemeFlags; + mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); + mDescContainer.applyTheme(theme, getName(), "infoPanel", POSITION | ThemeFlags::SIZE); mDescription.applyTheme(theme, getName(), "description", POSITION | FONT_PATH | FONT_SIZE | COLOR); } diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 5b92351f7..448d415f0 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -4,7 +4,7 @@ #include "../ViewController.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), - mHeaderText(window), mHeaderImage(window), mBackground(window) + mHeaderText(window), mHeaderImage(window), mBackground(window), mThemeExtras(window) { mHeaderText.setText("Header"); mHeaderText.setSize(mSize.x(), 0); @@ -19,14 +19,16 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame addChild(&mHeaderText); addChild(&mBackground); + addChild(&mThemeExtras); } void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) { using namespace ThemeFlags; mBackground.applyTheme(theme, getName(), "background", PATH | TILING); - mHeaderImage.applyTheme(theme, getName(), "header", PATH); - + mHeaderImage.applyTheme(theme, getName(), "header", POSITION | ThemeFlags::SIZE | PATH); + mThemeExtras.setExtras(ThemeData::makeExtras(theme, getName(), mWindow)); + if(mHeaderImage.hasImage()) { removeChild(&mHeaderText); diff --git a/src/views/gamelist/ISimpleGameListView.h b/src/views/gamelist/ISimpleGameListView.h index 41f269bd2..b4dcf2c8a 100644 --- a/src/views/gamelist/ISimpleGameListView.h +++ b/src/views/gamelist/ISimpleGameListView.h @@ -32,5 +32,7 @@ protected: ImageComponent mHeaderImage; ImageComponent mBackground; + ThemeExtras mThemeExtras; + std::stack mCursorStack; }; From 8d1ac3087e37debf73d86c00971485cd701ee561 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 3 Jan 2014 10:40:36 -0600 Subject: [PATCH 129/386] Changed the sound cache to be part of the Sound class instead of ThemeData. --- src/Sound.cpp | 29 ++++++++++++++++++++++ src/Sound.h | 11 +++++++- src/ThemeData.cpp | 28 +++++++-------------- src/ThemeData.h | 6 ++--- src/components/GuiMenu.cpp | 10 +++++--- src/components/TextListComponent.h | 4 +++ src/views/ViewController.cpp | 3 --- src/views/gamelist/BasicGameListView.cpp | 2 +- src/views/gamelist/IGameListView.cpp | 2 +- src/views/gamelist/ISimpleGameListView.cpp | 4 ++- 10 files changed, 65 insertions(+), 34 deletions(-) diff --git a/src/Sound.cpp b/src/Sound.cpp index 64bf9c86b..cf540091f 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -2,6 +2,35 @@ #include "AudioManager.h" #include "Log.h" #include "Settings.h" +#include "ThemeData.h" + +std::map< std::string, std::shared_ptr > Sound::sMap; + +std::shared_ptr Sound::get(const std::string& path) +{ + auto it = sMap.find(path); + if(it != sMap.end()) + return it->second; + + std::shared_ptr sound = std::shared_ptr(new Sound(path)); + AudioManager::getInstance()->registerSound(sound); + sMap[path] = sound; + return sound; +} + +std::shared_ptr Sound::getFromTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element) +{ + LOG(LogInfo) << " req sound [" << view << "." << element << "]"; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "sound"); + if(!elem || !elem->has("path")) + { + LOG(LogInfo) << " (missing)"; + return get(""); + } + + return get(elem->get("path")); +} Sound::Sound(const std::string & path) : mSampleData(NULL), mSamplePos(0), mSampleLength(0), playing(false) { diff --git a/src/Sound.h b/src/Sound.h index 51cac2f9f..2eb430ce0 100644 --- a/src/Sound.h +++ b/src/Sound.h @@ -2,8 +2,11 @@ #define _SOUND_H_ #include +#include +#include #include "SDL_audio.h" +class ThemeData; class Sound { @@ -15,7 +18,9 @@ class Sound bool playing; public: - Sound(const std::string & path = ""); + static std::shared_ptr get(const std::string& path); + static std::shared_ptr getFromTheme(const std::shared_ptr& theme, const std::string& view, const std::string& elem); + ~Sound(); void init(); @@ -32,6 +37,10 @@ public: void setPosition(Uint32 newPosition); Uint32 getLength() const; Uint32 getLengthMS() const; + +private: + Sound(const std::string & path = ""); + static std::map< std::string, std::shared_ptr > sMap; }; #endif diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 9d26d0aed..32696e952 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -33,7 +33,8 @@ std::map< std::string, std::map > T ("primaryColor", COLOR) ("secondaryColor", COLOR) ("fontPath", PATH) - ("fontSize", FLOAT)) + ("fontSize", FLOAT) + ("scrollSound", PATH)) ("container", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR)) @@ -300,28 +301,17 @@ const ThemeData::ThemeElement* ThemeData::getElement(const std::string& view, co return &elemIt->second; } -void ThemeData::playSound(const std::string& elementName) +const std::shared_ptr& ThemeData::getDefault() { - const ThemeElement* elem = getElement("common", elementName, "sound"); - if(!elem) - return; - - if(elem->has("path")) + static std::shared_ptr theme = nullptr; + if(theme == nullptr) { - const std::string path = elem->get("path"); - auto cacheIt = mSoundCache.find(path); - if(cacheIt != mSoundCache.end()) - { - cacheIt->second->play(); - return; - } - - std::shared_ptr sound = std::shared_ptr(new Sound(path)); - sound->play(); - mSoundCache[path] = sound; + theme = std::shared_ptr(new ThemeData()); + theme->loadFile(getHomePath() + "/.emulationstation/es_theme_default.xml"); } -} + return theme; +} std::vector ThemeData::makeExtras(const std::shared_ptr& theme, const std::string& view, Window* window) { diff --git a/src/ThemeData.h b/src/ThemeData.h index 9f8a24a0f..561dcf910 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -127,13 +127,13 @@ public: void renderExtras(const std::string& view, Window* window, const Eigen::Affine3f& transform); - void playSound(const std::string& name); - // If expectedType is an empty string, will do no type checking. const ThemeElement* getElement(const std::string& view, const std::string& element, const std::string& expectedType) const; static std::vector makeExtras(const std::shared_ptr& theme, const std::string& view, Window* window); + static const std::shared_ptr& getDefault(); + private: static std::map< std::string, std::map > sElementMap; @@ -146,8 +146,6 @@ private: void parseElement(const pugi::xml_node& elementNode, const std::map& typeMap, ThemeElement& element); std::map mViews; - - std::map< std::string, std::shared_ptr > mSoundCache; }; // okay ideas for applying themes to GuiComponents: diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index e766c4810..696162ced 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -35,19 +35,21 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/ mList.setPosition(mSize.x() * 0.175f, mSize.y() * 0.05f); mList.setSize(mSize.x() * 0.65f, mSize.y() * 0.9f); + mTheme = ThemeData::getDefault(); + using namespace ThemeFlags; mBackground.applyTheme(mTheme, "menu", "background", PATH); mBackground.fitTo(Eigen::Vector2f(mList.getSize().x(), mSize.y()), Eigen::Vector3f(mList.getPosition().x(), 0, 0)); addChild(&mBackground); - mTheme = std::make_shared(); - mList.setFont(Font::get((int)(0.09f * Renderer::getScreenHeight()))); - mList.applyTheme(mTheme, "menu", "menulist", FONT_PATH | COLOR); + mList.applyTheme(mTheme, "menu", "menulist", FONT_PATH | COLOR | SOUND); mList.setSelectorColor(0xBBBBBBFF); mList.setColor(0, 0x0000FFFF); mList.setColor(1, 0xFF0000FF); + Sound::getFromTheme(mTheme, "menu", "menuOpen")->play(); + addChild(&mList); } @@ -57,7 +59,7 @@ bool GuiMenu::input(InputConfig* config, Input input) { if(config->isMappedTo("b", input) || config->isMappedTo("menu", input)) { - mTheme->playSound("menuCloseSound"); + Sound::getFromTheme(mTheme, "menu", "menuClose")->play(); delete this; return true; }else if(config->isMappedTo("a", input) && mList.getList().size() > 0) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index d074d852b..97e55e4ff 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -69,6 +69,7 @@ public: inline void setSelectedColor(unsigned int color) { mSelectedColor = color; } inline void setScrollSound(const std::shared_ptr& sound) { mScrollSound = sound; } inline void setColor(unsigned int id, unsigned int color) { mColors[id] = color; } + inline void setSound(const std::shared_ptr& sound) { mScrollSound = sound; } private: static const int MARQUEE_DELAY = 900; @@ -429,6 +430,9 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c } setFont(Font::getFromTheme(elem, properties, mFont)); + + if(properties & SOUND && elem->has("scrollSound")) + setSound(Sound::get(elem->get("scrollSound"))); } #endif diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index fc84b8e94..7f6bcf922 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -83,8 +83,6 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) return; } - game->getSystem()->getTheme()->playSound("gameSelectSound"); - Eigen::Affine3f origCamera = mCamera; origCamera.translation() = -mCurrentView->getPosition(); @@ -165,7 +163,6 @@ bool ViewController::input(InputConfig* config, Input input) { // open menu mWindow->pushGui(new GuiMenu(mWindow)); - ThemeData().playSound("menuOpenSound"); return true; } diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index dfa670767..d7fbf6bfd 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -19,7 +19,7 @@ void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) { ISimpleGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mList.applyTheme(theme, getName(), "gamelist", POSITION | ThemeFlags::SIZE | COLOR | SOUND | FONT_PATH | FONT_SIZE); + mList.applyTheme(theme, getName(), "gamelist", ALL); } void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index 26e1fabd4..096db00ce 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -21,7 +21,7 @@ bool IGameListView::input(InputConfig* config, Input input) onFileChanged(file, FILE_REMOVED); //tell the view delete file; //free it })); - mTheme->playSound("menuOpenSound"); + Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); return true; }else if(config->isMappedTo("select", input) && input.value != 0) { diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 448d415f0..3ef3cbcd2 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -2,6 +2,7 @@ #include "../../ThemeData.h" #include "../../Window.h" #include "../ViewController.h" +#include "../../Sound.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window), mThemeExtras(window) @@ -57,6 +58,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) FileData* cursor = getCursor(); if(cursor->getType() == GAME) { + Sound::getFromTheme(getTheme(), getName(), "launch")->play(); launch(cursor); }else{ // it's a folder @@ -75,7 +77,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) populateList(mCursorStack.top()->getParent()->getChildren()); setCursor(mCursorStack.top()); mCursorStack.pop(); - getTheme()->playSound("backSound"); + Sound::getFromTheme(getTheme(), getName(), "back")->play(); }else{ onFocusLost(); mWindow->getViewController()->goToSystemView(getCursor()->getSystem()); From 5a84bc03ea44dafc374fbe0ac2aae3c89fa85c07 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 6 Jan 2014 13:27:34 -0600 Subject: [PATCH 130/386] Rewrote the theming documentation. --- THEMES.md | 399 ++++++++++++++++++++++++++++++---------------- src/ThemeData.cpp | 4 + 2 files changed, 264 insertions(+), 139 deletions(-) diff --git a/THEMES.md b/THEMES.md index e9fca7010..a787436cf 100644 --- a/THEMES.md +++ b/THEMES.md @@ -1,156 +1,277 @@ Themes ====== -EmulationStation allows each system to have its own "theme." A theme is a collection of resources defined in an XML document. +EmulationStation allows each system to have its own "theme." A theme is a collection **views** that define some **elements**, each with their own **properties**. -Themes are loaded like this: -1. Initialize to default values. -2. If `$HOME/.emulationstation/es_theme_default.xml` exists, load it. -3. If there is a `theme.xml` present in the root of a system's `path` directory, load it. +Simple Example +============== - IF NOT, If `$HOME/.emulationstation/%SYSTEMNAME%/theme.xml` exists, load it. - -Example -======= +Here is a very simple theme that changes the description text's color: ``` - 0000FF - 00FF00 - - - ./../all_themes/font.ttf - 0.045 - - - - ./../all_themes/font.ttf - 0.035 - - - - ./theme/background.png - true - - - - ./theme/logo.png - false - - - ./../all_themes/scrollSound.wav + 3 + + + 00FF00 + + + 0.5 0.5 + 0.5 0.5 + 0.8 0.8 + ./my_art/my_awesome_image.jpg + + ``` -Themes must be enclosed in a `` tag. - -All paths automatically expand `./` to the folder containing the theme.xml. - -All paths automatically expand `~/` to the home directory ($HOME on Linux, %HOMEPATH% on Windows). - -Stuff you can define -==================== - -Fonts -===== - -Fonts are defined like so: -``` - - - ./some/path/here.ttf - - 0.035 - -``` - - -`` - Default size: 0.045. - -`` - Default size: 0.035. - -`` - Default size: 0.15. - -Colors -====== - -Colors are defined in hex, like this: - -`00FF00FF` - -or - -`00FF00` - -(without the alpha channel specified - will assume FF) - - -`` - Default: 0000FFFF. - -`` - Default: 00FF00FF. - -`` - Default: 000000FF. - -`` - Default: 00000000. - -`` - Default: 48474DFF. - -`` - Default: FFFFFFFF. - -`` - Default: DDDDDDFF. - -Images -====== - -Images are defined like this: -``` - - ./some/path/here.png - - true - -``` -Pretty much any image format is supported. - - -`` - No default. - -`` - No default. - -`` - No default. - -`` - No default. - -`` - No default. Large image, shown in the system select menu. - -`` - Nine patch. Default is the "button.png" resource. - -Sounds -====== - -Sounds are defined like this: - -`./some/path/here.wav` - -Only .wav files are supported. - - -`` - No default. Played when a list scrolls. - -`` - No default. Played when a game is launched. - -`` - No default. Played when leaving a folder in the game list. - -`` - No default. Played when the menu is opened. - -`` - No default. Played when the menu is closed. - - -Nine Patches +How it works ============ -EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). +Everything must be inside a `` tag. + +**The `` tag *must* be specified**. This is the version of the theming system the theme was designed for. The current version is 3. + + + +A *view* can be thought of as a particular "screen" within EmulationStation. Views are defined like this: + +``` + + ... define elements here ... + +``` + + + +An *element* is a particular visual element, such as an image or a piece of text. You can either modify an element that already exists for a particular view (as is done in the "description" example), like this: + +``` + + ... define properties here ... + +``` + +Or, you can create your own elements by adding `extra="true"` (as is done in the "my_image" example) like this: + +``` + + ... define properties here ... + +``` + +"Extra" elements will be drawn in the order they are defined. When they get drawn relative to the pre-existing elements depends on the view. Make sure "extra" element names do not clash with existing names. + + + +*Properties* control how a particular *element* looks - for example, its position, size, image path, etc. There different types of properties that determine what kinds of values you can use - you can read about them below in the "Reference" section. Properties are defined like this: + +``` + ValueHere +``` + + + + +Advanced Features +================= + +### The `` tag + +You can include theme files within theme files, similar to `#include` in C (though the mechanism is different, the effect is the same). Example: + +`~/.emulationstation/all_themes.xml`: +``` + + 3 + + + ./all_themes/myfont.ttf + 00FF00 + + + +``` + +`~/.emulationstation/snes/theme.xml`: +``` + + 3 + ./../all_themes.xml + + + FF0000 + + + +``` + +Is equivalent to this `snes/theme.xml`: +``` + + 3 + + + ./all_themes/myfont.ttf + FF0000 + + + +``` + +Notice that properties that were not specified got merged (``) and the `snes/theme.xml` could overwrite the included files' values (``). Also notice the included file still needed the `` tag. + + + +### The "common" view + +Sometimes you want to apply the same values to the same element across many views. The "common" view is one way to do this. + +``` + + 3 + + + ./snes_art/snes_header.png + + + + + ./snes_art/snes_header_detailed.png + + + +``` + +Is equivalent to: +``` + + 3 + + + ./snes_art/snes_header.png + + + + + ./snes_art/snes_header_detailed.png + + + + + ./snes_art/snes_header.png + + + + + ./snes_art/snes_header.png + + + ... and any other view that might try to look up "header" ... + +``` + +Notice that you can still override the "common" view in a specific view definition (as shown in the "detailed" view). + +You probably should not use the "common" view for element positioning. You also should not use it to create "extra" elements. + + +Reference +========= + +## Views, their elements, and accepted properties: + +#### basic + * image name="background" - PATH | TILING + * image name="header" - POSITION | SIZE | PATH + * textlist name="gamelist" - ALL + +#### detailed + * image name="background" - PATH | TILING + * image name="header" - POSITION | SIZE | PATH + * textlist name="gamelist" - ALL + * image name="gameimage" - POSITION | SIZE + * container name="infoPanel" - POSITION | SIZE + * text name="description" - POSITION | FONT_PATH | FONT_SIZE | COLOR + +#### grid + * image name="background" - PATH | TILING + * image name="header" - POSITION | SIZE | PATH + +#### system + * image name="header" - PATH + * image name="system" - PATH + +#### menu + * ninepatch name="background" - PATH + * textlist name="menulist" - FONT_PATH | COLOR | SOUND + * sound name="menuOpen" - PATH + * sound name="menuClose" - PATH + +#### fastSelect + * ninepatch name="background" - PATH + * text name="letter" - FONT_PATH | COLOR + * text name="subtext" - FONT_PATH | COLOR + + +## Types of elements and their properties: + +#### image + * `pos` - type: NORMALIZED_PAIR. + * `size` - type: NORMALIZED_PAIR. + * `origin` - type: NORMALIZED_PAIR. + * `path` - type: PATH. + * `tile` - type: BOOLEAN. + +#### text + * `pos` - type: NORMALIZED_PAIR. + * `size` - type: NORMALIZED_PAIR. + * `text` - type: STRING. + * `color` - type: COLOR. + * `fontPath` - type: PATH. + * `fontSize` - type: FLOAT. + * `center` - type: BOOLEAN. + +#### textlist + * `pos` - type: NORMALIZED_PAIR. + * `size` - type: NORMALIZED_PAIR. + * `selectorColor` - type: COLOR. + * `selectedColor` - type: COLOR. + * `primaryColor` - type: COLOR. + * `secondaryColor` - type: COLOR. + * `fontPath` - type: PATH. + * `fontSize` - type: FLOAT. + * `scrollSound` - type: PATH. + +#### container + * `pos` - type: NORMALIZED_PAIR. + * `size` - type: NORMALIZED_PAIR. + +#### ninepatch + * `pos` - type: NORMALIZED_PAIR. + * `size` - type: NORMALIZED_PAIR. + * `path` - type: PATH. + +A quick word on the "ninepatch" type - EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). + +#### sound + * `path` - type: PATH. + + +*Note that a view may choose to only make only certain properties on a particular element themable.* + + +## Types of properties: + +* NORMALIZED_PAIR - two decimals, in the range [0..1]. For example, `0.25 0.5`. +* PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` or `%HOMEPATH%`, depending on platform). If the first character is a `.`, it will be expanded to the theme file's directory. +* BOOLEAN - `true`/`1` or `false`/`0`. +* COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). +* FLOAT - a decimal. +* STRING - a string of text. + + -Aloshi http://www.aloshi.com diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 32696e952..b885877ce 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -38,6 +38,10 @@ std::map< std::string, std::map > T ("container", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR)) + ("ninepatch", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("path", PATH)) ("sound", boost::assign::map_list_of ("path", PATH)); From 81a994164552185d94703d381453865a4570b38e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 7 Jan 2014 16:57:30 -0600 Subject: [PATCH 131/386] Added an error if the tag is missing. Made SystemView more themable (added a ThemeExtras component, made theming on pre-existing elements less restrictive). --- THEMES.md | 4 +- src/SystemData.cpp | 6 +++ src/main.cpp | 105 +++++++++++++++++++-------------------- src/views/SystemView.cpp | 10 ++-- src/views/SystemView.h | 1 + 5 files changed, 67 insertions(+), 59 deletions(-) diff --git a/THEMES.md b/THEMES.md index a787436cf..196e0d03b 100644 --- a/THEMES.md +++ b/THEMES.md @@ -200,8 +200,8 @@ Reference * image name="header" - POSITION | SIZE | PATH #### system - * image name="header" - PATH - * image name="system" - PATH + * image name="header" - ALL + * image name="system" - ALL #### menu * ninepatch name="background" - PATH diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 187b223e8..a0ee45567 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -238,6 +238,12 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) //actually read the file pugi::xml_node systemList = doc.child("systemList"); + if(!systemList) + { + LOG(LogError) << "es_systems.cfg is missing the tag!"; + return false; + } + for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { std::string name, fullname, path, cmd; diff --git a/src/main.cpp b/src/main.cpp index 2a43f2e18..013919bb4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,62 +24,59 @@ bool scrape_cmdline = false; bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height) { - if(argc > 1) + for(int i = 1; i < argc; i++) { - for(int i = 1; i < argc; i++) + if(strcmp(argv[i], "-w") == 0) { - if(strcmp(argv[i], "-w") == 0) - { - *width = atoi(argv[i + 1]); - i++; //skip the argument value - }else if(strcmp(argv[i], "-h") == 0) - { - *height = atoi(argv[i + 1]); - i++; //skip the argument value - }else if(strcmp(argv[i], "--gamelist-only") == 0) - { - Settings::getInstance()->setBool("PARSEGAMELISTONLY", true); - }else if(strcmp(argv[i], "--ignore-gamelist") == 0) - { - Settings::getInstance()->setBool("IGNOREGAMELIST", true); - }else if(strcmp(argv[i], "--draw-framerate") == 0) - { - Settings::getInstance()->setBool("DRAWFRAMERATE", true); - }else if(strcmp(argv[i], "--no-exit") == 0) - { - Settings::getInstance()->setBool("DONTSHOWEXIT", true); - }else if(strcmp(argv[i], "--debug") == 0) - { - Settings::getInstance()->setBool("DEBUG", true); - Log::setReportingLevel(LogDebug); - }else if(strcmp(argv[i], "--dimtime") == 0) - { - Settings::getInstance()->setInt("DIMTIME", atoi(argv[i + 1]) * 1000); - i++; //skip the argument value - }else if(strcmp(argv[i], "--windowed") == 0) - { - Settings::getInstance()->setBool("WINDOWED", true); - }else if(strcmp(argv[i], "--scrape") == 0) - { - scrape_cmdline = true; - }else if(strcmp(argv[i], "--help") == 0) - { - std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n"; - std::cout << "Command line arguments:\n"; - std::cout << "-w [width in pixels] set screen width\n"; - std::cout << "-h [height in pixels] set screen height\n"; - std::cout << "--gamelist-only skip automatic game detection, only read from gamelist.xml\n"; - std::cout << "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n"; - std::cout << "--draw-framerate display the framerate\n"; - std::cout << "--no-exit don't show the exit option in the menu\n"; - std::cout << "--debug even more logging\n"; - std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 30, use 0 for never)\n"; - std::cout << "--scrape scrape using command line interface\n"; - std::cout << "--windowed not fullscreen\n"; - std::cout << "--help summon a sentient, angry tuba\n\n"; - std::cout << "More information available in README.md.\n"; - return false; //exit after printing help - } + *width = atoi(argv[i + 1]); + i++; //skip the argument value + }else if(strcmp(argv[i], "-h") == 0) + { + *height = atoi(argv[i + 1]); + i++; //skip the argument value + }else if(strcmp(argv[i], "--gamelist-only") == 0) + { + Settings::getInstance()->setBool("PARSEGAMELISTONLY", true); + }else if(strcmp(argv[i], "--ignore-gamelist") == 0) + { + Settings::getInstance()->setBool("IGNOREGAMELIST", true); + }else if(strcmp(argv[i], "--draw-framerate") == 0) + { + Settings::getInstance()->setBool("DRAWFRAMERATE", true); + }else if(strcmp(argv[i], "--no-exit") == 0) + { + Settings::getInstance()->setBool("DONTSHOWEXIT", true); + }else if(strcmp(argv[i], "--debug") == 0) + { + Settings::getInstance()->setBool("DEBUG", true); + Log::setReportingLevel(LogDebug); + }else if(strcmp(argv[i], "--dimtime") == 0) + { + Settings::getInstance()->setInt("DIMTIME", atoi(argv[i + 1]) * 1000); + i++; //skip the argument value + }else if(strcmp(argv[i], "--windowed") == 0) + { + Settings::getInstance()->setBool("WINDOWED", true); + }else if(strcmp(argv[i], "--scrape") == 0) + { + scrape_cmdline = true; + }else if(strcmp(argv[i], "--help") == 0) + { + std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n"; + std::cout << "Command line arguments:\n"; + std::cout << "-w [width in pixels] set screen width\n"; + std::cout << "-h [height in pixels] set screen height\n"; + std::cout << "--gamelist-only skip automatic game detection, only read from gamelist.xml\n"; + std::cout << "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n"; + std::cout << "--draw-framerate display the framerate\n"; + std::cout << "--no-exit don't show the exit option in the menu\n"; + std::cout << "--debug even more logging\n"; + std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 30, use 0 for never)\n"; + std::cout << "--scrape scrape using command line interface\n"; + std::cout << "--windowed not fullscreen, should be used in conjunction with -w and -h\n"; + std::cout << "--help summon a sentient, angry tuba\n\n"; + std::cout << "More information available in README.md.\n"; + return false; //exit after printing help } } diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 6a69bd308..33b8f5093 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -10,7 +10,8 @@ SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window mHeaderImage(window), mHeaderText(window), - mImage(window) + mImage(window), + mExtras(window) { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -26,6 +27,7 @@ SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window mImage.setPosition(mSize.x() / 2, mSize.y() * 0.6f); mImage.setResize(0, mSize.y() * 0.8f, false); + addChild(&mExtras); addChild(&mImage); addChild(&mHeaderText); addChild(&mHeaderImage); @@ -37,8 +39,10 @@ void SystemView::updateData() { using namespace ThemeFlags; + mExtras.setExtras(ThemeData::makeExtras(mSystem->getTheme(), "system", mWindow)); + mHeaderImage.setImage(""); - mHeaderImage.applyTheme(mSystem->getTheme(), "system", "header", PATH); + mHeaderImage.applyTheme(mSystem->getTheme(), "system", "header", ALL); // header if(mHeaderImage.hasImage()) @@ -51,7 +55,7 @@ void SystemView::updateData() mHeaderText.setText(mSystem->getFullName()); } - mImage.applyTheme(mSystem->getTheme(), "system", "system", PATH); + mImage.applyTheme(mSystem->getTheme(), "system", "system", ALL); } bool SystemView::input(InputConfig* config, Input input) diff --git a/src/views/SystemView.h b/src/views/SystemView.h index a926285c0..9fd4c25d4 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -22,4 +22,5 @@ private: TextComponent mHeaderText; ImageComponent mHeaderImage; ImageComponent mImage; + ThemeExtras mExtras; }; From 997751f56a4dacaaeff2cca0da6da9aae3942481 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 9 Jan 2014 17:13:52 -0600 Subject: [PATCH 132/386] Fixed draw order for extra elements. --- src/ThemeData.cpp | 12 ++++++++---- src/ThemeData.h | 20 ++------------------ 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index b885877ce..8d68dec20 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -211,6 +211,9 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) parseElement(node, elemTypeIt->second, view.elements.insert(std::make_pair(elemKey, ThemeElement())).first->second); + + if(std::find(view.orderedKeys.begin(), view.orderedKeys.end(), elemKey) == view.orderedKeys.end()) + view.orderedKeys.push_back(elemKey); } } @@ -325,18 +328,19 @@ std::vector ThemeData::makeExtras(const std::shared_ptrmViews.end()) return comps; - for(auto it = viewIt->second.elements.begin(); it != viewIt->second.elements.end(); it++) + for(auto it = viewIt->second.orderedKeys.begin(); it != viewIt->second.orderedKeys.end(); it++) { - if(it->second.extra) + ThemeElement& elem = viewIt->second.elements.at(*it); + if(elem.extra) { GuiComponent* comp = NULL; - const std::string& t = it->second.type; + const std::string& t = elem.type; if(t == "image") comp = new ImageComponent(window); else if(t == "text") comp = new TextComponent(window); - comp->applyTheme(theme, view, it->first, ThemeFlags::ALL); + comp->applyTheme(theme, view, *it, ThemeFlags::ALL); comps.push_back(comp); } } diff --git a/src/ThemeData.h b/src/ThemeData.h index 561dcf910..dc9e81bbe 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -73,12 +73,11 @@ class ThemeExtras : public GuiComponent { public: ThemeExtras(Window* window) : GuiComponent(window) {}; + virtual ~ThemeExtras(); // will take ownership of the components within extras (delete them in destructor or when setExtras is called again) void setExtras(const std::vector& extras); - virtual ~ThemeExtras(); - private: std::vector mExtras; }; @@ -106,6 +105,7 @@ private: { public: std::map elements; + std::vector orderedKeys; }; public: @@ -147,19 +147,3 @@ private: std::map mViews; }; - -// okay ideas for applying themes to GuiComponents: -// 1. ThemeData::applyToImage(component, args) -// NO, BECAUSE: -// - for templated types (TextListComponent) have to include the whole template in a header -// - inconsistent definitions if mixing templated types (some in a .cpp, some in a .h/.inl) -// 2. template ThemeData::apply(component, args) with specialized templates -// NO, BECAUSE: -// - doesn't solve the first drawback -// - can't customize arguments for specific types -// 3. GuiComponent::applyTheme(theme, args) - WINNER -// NO, BECAUSE: -// - can't access private members of ThemeData -// - can't this be solved with enough getters? -// - theme->hasElement and theme->getProperty will require 2x as many map lookups (4 vs 2) -// - why not just return a const ThemeElement... \ No newline at end of file From b7b2998720f3cec5302d6e0677ac0ad8debf0673 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 14:24:07 -0600 Subject: [PATCH 133/386] Added center theme option for TextListComponent. --- THEMES.md | 1 + src/ThemeData.cpp | 3 ++- src/components/TextListComponent.h | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/THEMES.md b/THEMES.md index 196e0d03b..b472a41d3 100644 --- a/THEMES.md +++ b/THEMES.md @@ -243,6 +243,7 @@ Reference * `fontPath` - type: PATH. * `fontSize` - type: FLOAT. * `scrollSound` - type: PATH. + * `center` - type: BOOLEAN. #### container * `pos` - type: NORMALIZED_PAIR. diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 8d68dec20..d345253fb 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -34,7 +34,8 @@ std::map< std::string, std::map > T ("secondaryColor", COLOR) ("fontPath", PATH) ("fontSize", FLOAT) - ("scrollSound", PATH)) + ("scrollSound", PATH) + ("center", BOOLEAN)) ("container", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR)) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 97e55e4ff..4c4279a38 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -433,6 +433,9 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c if(properties & SOUND && elem->has("scrollSound")) setSound(Sound::get(elem->get("scrollSound"))); + + if(properties & CENTER && elem->has("center")) + mCentered = elem->get("center"); } #endif From 330f20f375ae7097bccf867e68b954b641fb3743 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 14:41:23 -0600 Subject: [PATCH 134/386] Added Ctrl-R shortcut to reload current gamelist view if in debug mode. --- THEMES.md | 2 ++ src/SystemData.cpp | 23 ++++++++++++++--------- src/SystemData.h | 3 +++ src/views/ViewController.cpp | 5 ++++- src/views/ViewController.h | 2 +- src/views/gamelist/IGameListView.cpp | 11 +++++++++++ 6 files changed, 35 insertions(+), 11 deletions(-) diff --git a/THEMES.md b/THEMES.md index b472a41d3..a85846650 100644 --- a/THEMES.md +++ b/THEMES.md @@ -77,6 +77,8 @@ Or, you can create your own elements by adding `extra="true"` (as is done in the Advanced Features ================= +It is recommended that if you are writing a theme you launch EmulationStation with the `--debug` and `--windowed` switches. This way you can read error messages without having to check the log file. You can also reload the current gamelist view with `Ctrl-R` if `--debug` is specified. + ### The `` tag You can include theme files within theme files, similar to `#include` in C (though the mechanism is different, the effect is the same). Example: diff --git a/src/SystemData.cpp b/src/SystemData.cpp index a0ee45567..486c809ee 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -46,15 +46,7 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mRootFolder->sort(FileSorts::SortTypes.at(0)); - mTheme = std::make_shared(); - try - { - mTheme->loadFile(getThemePath()); - } catch(ThemeException& e) - { - LOG(LogError) << e.what(); - mTheme = std::make_shared(); // reset to empty - } + loadTheme(); } SystemData::~SystemData() @@ -384,3 +376,16 @@ unsigned int SystemData::getGameCount() const { return mRootFolder->getFilesRecursive(GAME).size(); } + +void SystemData::loadTheme() +{ + mTheme = std::make_shared(); + try + { + mTheme->loadFile(getThemePath()); + } catch(ThemeException& e) + { + LOG(LogError) << e.what(); + mTheme = std::make_shared(); // reset to empty + } +} diff --git a/src/SystemData.h b/src/SystemData.h index 901b3756d..149a3afd4 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -58,6 +58,9 @@ public: return *it; } + // Load or re-load theme. + void loadTheme(); + private: std::string mName; std::string mFullName; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 7f6bcf922..d0b4dc8af 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -226,7 +226,7 @@ void ViewController::preload() } } -void ViewController::reloadGameListView(IGameListView* view) +void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) { for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { @@ -237,6 +237,9 @@ void ViewController::reloadGameListView(IGameListView* view) FileData* cursor = view->getCursor(); mGameListViews.erase(it); + if(reloadTheme) + system->loadTheme(); + std::shared_ptr newView = getGameListView(system); newView->setCursor(cursor); diff --git a/src/views/ViewController.h b/src/views/ViewController.h index a924d9f58..b2225275e 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -16,7 +16,7 @@ public: // If a basic view detected a metadata change, it can request to recreate // the current gamelist view (as it may change to be detailed). - void reloadGameListView(IGameListView* gamelist); + void reloadGameListView(IGameListView* gamelist, bool reloadTheme = false); // Navigation. void goToNextGameList(); diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index 096db00ce..3e8574db5 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -4,9 +4,11 @@ #include "../../components/GuiMenu.h" #include "../../components/GuiFastSelect.h" #include "../ViewController.h" +#include "../../Settings.h" bool IGameListView::input(InputConfig* config, Input input) { + // F3 to open metadata editor if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_F3 && input.value != 0) { // open metadata editor @@ -23,6 +25,15 @@ bool IGameListView::input(InputConfig* config, Input input) })); Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); return true; + + // Ctrl-R to reload a view when debugging + }else if(Settings::getInstance()->getBool("DEBUG") && config->getDeviceId() == DEVICE_KEYBOARD && + (SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)) && input.id == SDLK_r && input.value != 0) + { + LOG(LogDebug) << "reloading view"; + mWindow->getViewController()->reloadGameListView(this, true); + return true; + // select opens the fast select GUI }else if(config->isMappedTo("select", input) && input.value != 0) { // open fast select From 2862171dab57d514fcb01da2f58c2d8819c2c182 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 14:58:03 -0600 Subject: [PATCH 135/386] Fix creating default theme when default theme file is not present. --- src/ThemeData.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index d345253fb..02f3e5406 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -315,7 +315,19 @@ const std::shared_ptr& ThemeData::getDefault() if(theme == nullptr) { theme = std::shared_ptr(new ThemeData()); - theme->loadFile(getHomePath() + "/.emulationstation/es_theme_default.xml"); + + const std::string path = getHomePath() + "/.emulationstation/es_theme_default.xml"; + if(fs::exists(path)) + { + try + { + theme->loadFile(path); + } catch(ThemeException& e) + { + LOG(LogError) << e.what(); + theme = std::shared_ptr(new ThemeData()); //reset to empty + } + } } return theme; From 92a66787367bd4816d8e2eb37138f3c3ba5e72f1 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 16:01:28 -0600 Subject: [PATCH 136/386] Added DIMTIME slider to settings. Sliders now show their exact value + a unit suffix to the right of the slider. --- src/components/GuiSettingsMenu.cpp | 21 ++++++-- src/components/GuiSettingsMenu.h | 1 + src/components/SliderComponent.cpp | 57 ++++++++++++++++++--- src/components/SliderComponent.h | 15 +++++- src/views/gamelist/DetailedGameListView.cpp | 4 +- 5 files changed, 85 insertions(+), 13 deletions(-) diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index 0b2ea8feb..f2287b647 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -7,13 +7,14 @@ #include "../scrapers/GamesDBScraper.h" GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 6)), + mList(window, Eigen::Vector2i(2, 7)), mBox(mWindow, ":/frame.png", 0x444444FF), mDrawFramerateSwitch(window), - mVolumeSlider(window, 0, 100, 1), + mVolumeSlider(window, 0, 100, 1, "%"), mDisableSoundsSwitch(window, false), mScraperOptList(window), mScrapeRatingsSwitch(window), + mDimSlider(window, 0, 60, 1, "s"), mSaveButton(window) { loadStates(); @@ -80,10 +81,20 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mScrapeRatingsSwitch, true, ComponentListComponent::AlignCenter); + // dim time label + label = new TextComponent(mWindow); + label->setText("Dim after: "); + label->setColor(0x0000FFFF); + mLabels.push_back(label); + mList.setEntry(Vector2i(0, 5), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); + + // dim slider + mList.setEntry(Vector2i(1, 5), Vector2i(1, 1), &mDimSlider, true, ComponentListComponent::AlignCenter); + //save button mSaveButton.setText("SAVE", 0x00FF00FF); mSaveButton.setPressedFunc([this] () { applyStates(); delete this; }); - mList.setEntry(Vector2i(0, 5), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter, Matrix(false, true)); + mList.setEntry(Vector2i(0, 6), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter, Matrix(false, true)); //center list mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); @@ -126,6 +137,8 @@ void GuiSettingsMenu::loadStates() mDisableSoundsSwitch.setState(s->getBool("DISABLESOUNDS")); mScrapeRatingsSwitch.setState(s->getBool("ScrapeRatings")); + + mDimSlider.setValue((float)(s->getInt("DIMTIME") / 1000)); } void GuiSettingsMenu::applyStates() @@ -142,5 +155,7 @@ void GuiSettingsMenu::applyStates() s->setBool("ScrapeRatings", mScrapeRatingsSwitch.getState()); + s->setInt("DIMTIME", (int)(mDimSlider.getValue() * 1000)); + s->saveFile(); } diff --git a/src/components/GuiSettingsMenu.h b/src/components/GuiSettingsMenu.h index a55258f90..bd0d726fe 100644 --- a/src/components/GuiSettingsMenu.h +++ b/src/components/GuiSettingsMenu.h @@ -33,6 +33,7 @@ private: SwitchComponent mDisableSoundsSwitch; OptionListComponent< std::shared_ptr > mScraperOptList; SwitchComponent mScrapeRatingsSwitch; + SliderComponent mDimSlider; ButtonComponent mSaveButton; std::vector mLabels; diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 68a1e17b1..902ab17c2 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -1,9 +1,11 @@ #include "SliderComponent.h" #include #include "../Renderer.h" +#include "../resources/Font.h" +#include "../Log.h" -SliderComponent::SliderComponent(Window* window, float min, float max, float increment) : GuiComponent(window), - mMin(min), mMax(max), mIncrement(increment), mMoveRate(0), mRepeatWaitTimer(0) +SliderComponent::SliderComponent(Window* window, float min, float max, float increment, const std::string& suffix) : GuiComponent(window), + mMin(min), mMax(max), mIncrement(increment), mMoveRate(0), mRepeatWaitTimer(0), mSuffix(suffix) { assert((min - max) != 0); @@ -12,7 +14,7 @@ SliderComponent::SliderComponent(Window* window, float min, float max, float inc //calculate move scale mMoveScale = ((max - min) * 0.0007f) / increment; - setSize(128, 32); + setSize(196, 32); } bool SliderComponent::input(InputConfig* config, Input input) @@ -58,6 +60,8 @@ void SliderComponent::update(int deltaTime) if(mValue > mMax) mValue = mMax; + onValueChanged(); + if(mRepeatWaitTimer < 450) mRepeatWaitTimer += deltaTime; } @@ -70,30 +74,71 @@ void SliderComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); + float width = mSize.x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0); + //render line const int lineWidth = 2; - Renderer::drawRect(0, (int)mSize.y() / 2 - lineWidth / 2, (int)mSize.x(), lineWidth, 0x000000CC); + Renderer::drawRect(0, (int)mSize.y() / 2 - lineWidth / 2, (int)width, lineWidth, 0x000000CC); //render left end const int capWidth = (int)(mSize.x() * 0.03f); Renderer::drawRect(0, 0, capWidth, (int)mSize.y(), 0x000000CC); //render right end - Renderer::drawRect((int)mSize.x() - capWidth, 0, capWidth, (int)mSize.y(), 0x000000CC); + Renderer::drawRect((int)width - capWidth, 0, capWidth, (int)mSize.y(), 0x000000CC); //render our value - const int lineLength = (int)mSize.x() - capWidth; + const int lineLength = (int)width - capWidth; Renderer::drawRect((int)(((mValue + mMin) / mMax) * lineLength), 0, capWidth, (int)mSize.y(), 0x0000FFFF); + // suffix + if(mValueCache) + mFont->renderTextCache(mValueCache.get()); + GuiComponent::renderChildren(trans); } void SliderComponent::setValue(float value) { mValue = value; + onValueChanged(); } float SliderComponent::getValue() { return mValue; } + +void SliderComponent::onSizeChanged() +{ + if(!mSuffix.empty()) + { + mFont = Font::get((int)(mSize.y() * 0.7f)); + onValueChanged(); + } +} + +void SliderComponent::onValueChanged() +{ + if(mFont) + { + std::stringstream ss; + ss << std::fixed; + ss.precision(0); + ss << mValue; + ss << mSuffix; + const std::string val = ss.str(); + + ss.str(""); + ss.clear(); + ss << std::fixed; + ss.precision(0); + ss << mMax; + ss << mSuffix; + const std::string max = ss.str(); + + float w = mFont->sizeText(max).x(); + mValueCache = std::shared_ptr(mFont->buildTextCache(val, mSize.x() - w, 0, 0x000000FF)); + mValueCache->metrics.size[0] = w; // fudge the width + } +} diff --git a/src/components/SliderComponent.h b/src/components/SliderComponent.h index 2cfb55e42..d39ef6cbf 100644 --- a/src/components/SliderComponent.h +++ b/src/components/SliderComponent.h @@ -2,11 +2,14 @@ #include "../GuiComponent.h" +class TextCache; +class Font; + class SliderComponent : public GuiComponent { public: - //Minimum value (far left of the slider), maximum value (far right of the slider), increment size (how much just pressing L/R moves by). - SliderComponent(Window* window, float min, float max, float increment); + //Minimum value (far left of the slider), maximum value (far right of the slider), increment size (how much just pressing L/R moves by), unit to display (optional). + SliderComponent(Window* window, float min, float max, float increment, const std::string& suffix = ""); void setValue(float val); float getValue(); @@ -15,12 +18,20 @@ public: void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; + void onSizeChanged() override; + private: + void onValueChanged(); + float mMin, mMax; float mValue; float mIncrement; float mMoveScale; int mRepeatWaitTimer; + std::string mSuffix; + std::shared_ptr mFont; + std::shared_ptr mValueCache; + float mMoveRate; }; diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index f905fcc00..7276c35dd 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -38,8 +38,8 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mHeaderImage.setResize(mSize.x() * 0.5f, 0, true); BasicGameListView::onThemeChanged(theme); - if(mHeaderImage.getPosition().y() + mHeaderImage.getSize().y() > mImage.getPosition().y()) - mHeaderImage.setResize(0, mSize.y() * 0.185f, true); + //if(mHeaderImage.getPosition().y() + mHeaderImage.getSize().y() > mImage.getPosition().y()) + // mHeaderImage.setResize(0, mSize.y() * 0.185f, true); using namespace ThemeFlags; mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); From b35d365dc8c88eabb807ebb873840441012b03b6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 17:45:47 -0600 Subject: [PATCH 137/386] Removed the allowUpscale option for ImageComponent::setResize. Added ImageComponent::setMaxSize(size). Added "maxSize" theming option for ImageComponent. --- THEMES.md | 1 + src/ThemeData.cpp | 1 + src/components/GuiGameScraper.cpp | 4 +- src/components/ImageComponent.cpp | 90 ++++++++++++--------- src/components/ImageComponent.h | 10 ++- src/components/ImageGridComponent.h | 6 +- src/views/SystemView.cpp | 4 +- src/views/gamelist/DetailedGameListView.cpp | 21 ++--- src/views/gamelist/ISimpleGameListView.cpp | 4 +- 9 files changed, 78 insertions(+), 63 deletions(-) diff --git a/THEMES.md b/THEMES.md index a85846650..d98273c44 100644 --- a/THEMES.md +++ b/THEMES.md @@ -222,6 +222,7 @@ Reference #### image * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. + * `maxSize` - type: NORMALIZED_PAIR. * `origin` - type: NORMALIZED_PAIR. * `path` - type: PATH. * `tile` - type: BOOLEAN. diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 02f3e5406..75bc7e63f 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -14,6 +14,7 @@ std::map< std::string, std::map > T ("image", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("maxSize", NORMALIZED_PAIR) ("origin", NORMALIZED_PAIR) ("path", PATH) ("tile", BOOLEAN)) diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index ed804338d..7c631534e 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -63,8 +63,8 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentListComponent::AlignLeft); mResultThumbnail.setOrigin(0.5f, 0.5f); - mResultThumbnail.setResize(colWidth, mResultInfo.getSize().y(), false); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mResultThumbnail, false, ComponentListComponent::AlignCenter); + mResultThumbnail.setMaxSize(colWidth, mResultInfo.getSize().y() + mResultName.getSize().y()); + mList.setEntry(Vector2i(1, 1), Vector2i(1, 2), &mResultThumbnail, false, ComponentListComponent::AlignCenter); //y = 3 is a spacer row diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 972016ff9..59e8ca50e 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -20,10 +20,10 @@ Eigen::Vector2f ImageComponent::getCenter() const mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } -ImageComponent::ImageComponent(Window* window, float offsetX, float offsetY, std::string path, float targetWidth, float targetHeight, bool allowUpscale) : GuiComponent(window), - mTiled(false), mAllowUpscale(allowUpscale), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(targetWidth, targetHeight), mColorShift(0xFFFFFFFF) +ImageComponent::ImageComponent(Window* window, const Eigen::Vector2f& pos, const std::string& path) : GuiComponent(window), + mTiled(false), mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) { - setPosition(offsetX, offsetY); + setPosition(pos.x(), pos.y()); if(!path.empty()) setImage(path); @@ -38,35 +38,44 @@ void ImageComponent::resize() if(!mTexture) return; - mSize << (float)getTextureSize().x(), (float)getTextureSize().y(); - - //(we don't resize tiled images) - if(!mTiled && (mTargetSize.x() || mTargetSize.y())) - { - Eigen::Vector2f resizeScale(Eigen::Vector2f::Zero()); - - if(mTargetSize.x() && (mAllowUpscale || mSize.x() > mTargetSize.x())) - { - resizeScale[0] = mTargetSize.x() / mSize.x(); - } - if(mTargetSize.y() && (mAllowUpscale || mSize.y() > mTargetSize.y())) - { - resizeScale[1] = mTargetSize.y() / mSize.y(); - } - - if(resizeScale.x() && !resizeScale.y()) - resizeScale[1] = resizeScale.x(); - if(resizeScale[1] && !resizeScale.x()) - resizeScale[0] = resizeScale.y(); - - if(resizeScale.x()) - mSize[0] = (mSize.x() * resizeScale.x()); - if(resizeScale.y()) - mSize[1] = (mSize.y() * resizeScale.y()); - } + const Eigen::Vector2f textureSize((float)getTextureSize().x(), (float)getTextureSize().y()); if(mTiled) + { mSize = mTargetSize; + }else{ + if(mTargetIsMax) + { + mSize = textureSize; + + Eigen::Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); + + if(resizeScale.x() < resizeScale.y()) + { + mSize[0] *= resizeScale.x(); + mSize[1] *= resizeScale.x(); + }else{ + mSize[0] *= resizeScale.y(); + mSize[1] *= resizeScale.y(); + } + + }else{ + // if both components are set, we just stretch + // if no components are set, we don't resize at all + mSize = mTargetSize.isZero() ? textureSize : mTargetSize; + + // if only one component is set, we resize in a way that maintains aspect ratio + if(!mTargetSize.x() && mTargetSize.y()) + { + mSize[0] = (mTargetSize.y() / mSize.y()) * mSize.x(); + mSize[1] = mTargetSize.y(); + }else if(mTargetSize.x() && !mTargetSize.y()) + { + mSize[0] = mTargetSize.x(); + mSize[1] = (mTargetSize.x() / mSize.x()) * mSize.y(); + } + } + } } void ImageComponent::setImage(std::string path) @@ -104,16 +113,20 @@ void ImageComponent::setTiling(bool tile) { mTiled = tile; - if(mTiled) - mAllowUpscale = false; - resize(); } -void ImageComponent::setResize(float width, float height, bool allowUpscale) +void ImageComponent::setResize(float width, float height) { mTargetSize << width, height; - mAllowUpscale = allowUpscale; + mTargetIsMax = false; + resize(); +} + +void ImageComponent::setMaxSize(float width, float height) +{ + mTargetSize << width, height; + mTargetIsMax = true; resize(); } @@ -266,8 +279,13 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); } - if(properties & ThemeFlags::SIZE && elem->has("size")) - setResize(elem->get("size").cwiseProduct(scale), true); + if(properties & ThemeFlags::SIZE) + { + if(elem->has("size")) + setResize(elem->get("size").cwiseProduct(scale)); + else if(elem->has("maxSize")) + setMaxSize(elem->get("maxSize").cwiseProduct(scale)); + } // position + size also implies origin if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index f3e6532c6..196ee9e0f 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -15,7 +15,7 @@ public: //Creates a new GuiImage at the given location. If given an image, it will be loaded. If maxWidth and/or maxHeight are nonzero, the image will be //resized to fit. If only one axis is specified, the other will be set in accordance with the image's aspect ratio. If allowUpscale is false, //the image will only be downscaled, never upscaled (the image's size must surpass at least one nonzero bound). - ImageComponent(Window* window, float offsetX = 0.0f, float offsetY = 0.0f, std::string path = "", float maxWidth = 0, float maxHeight = 0, bool allowUpscale = false); + ImageComponent(Window* window, const Eigen::Vector2f& pos = Eigen::Vector2f::Zero(), const std::string& path = ""); virtual ~ImageComponent(); void copyScreen(); //Copy the entire screen into a texture for us to use. @@ -25,8 +25,10 @@ public: void setOrigin(float originX, float originY); //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } void setTiling(bool tile); //Enables or disables tiling. Must be called before loading an image or resizing will be weird. - void setResize(float width, float height, bool allowUpscale); - inline void setResize(Eigen::Vector2f size, bool allowUpscale) { setResize(size.x(), size.y(), allowUpscale); } + void setResize(float width, float height); + inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } + void setMaxSize(float width, float height); + inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } void setColorShift(unsigned int color); void setFlipX(bool flip); @@ -47,7 +49,7 @@ private: Eigen::Vector2f mTargetSize; Eigen::Vector2f mOrigin; - bool mAllowUpscale, mTiled, mFlipX, mFlipY; + bool mTiled, mFlipX, mFlipY, mTargetIsMax; void resize(); void buildImageArray(int x, int y, GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); //writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index 3e01c8914..0b99ae43a 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -317,7 +317,7 @@ void ImageGridComponent::buildImages() image.setPosition((squareSize.x() + padding.x()) * (x + 0.5f) + offset.x(), (squareSize.y() + padding.y()) * (y + 0.5f) + offset.y()); image.setOrigin(0.5f, 0.5f); - image.setResize(squareSize.x(), squareSize.y(), true); + image.setResize(squareSize.x(), squareSize.y()); image.setImage(""); } } @@ -357,10 +357,10 @@ void ImageGridComponent::updateImages() if(i == mCursor) { image.setColorShift(0xFFFFFFFF); - image.setResize(squareSize.x() + getPadding().x() * 0.95f, squareSize.y() + getPadding().y() * 0.95f, true); + image.setResize(squareSize.x() + getPadding().x() * 0.95f, squareSize.y() + getPadding().y() * 0.95f); }else{ image.setColorShift(0xAAAAAABB); - image.setResize(squareSize.x(), squareSize.y(), true); + image.setResize(squareSize.x(), squareSize.y()); } image.setImage(mEntries.at(i).texture); diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 33b8f5093..d6d54695f 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -17,7 +17,7 @@ SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window mHeaderImage.setOrigin(0.5f, 0.0f); mHeaderImage.setPosition(mSize.x() / 2, 0); - mHeaderImage.setResize(0, mSize.y() * 0.2f, true); + mHeaderImage.setResize(0, mSize.y() * 0.2f); mHeaderText.setPosition(0, 6); mHeaderText.setSize(mSize.x(), 0); @@ -25,7 +25,7 @@ SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window mImage.setOrigin(0.5f, 0.5f); mImage.setPosition(mSize.x() / 2, mSize.y() * 0.6f); - mImage.setResize(0, mSize.y() * 0.8f, false); + mImage.setResize(0, mSize.y() * 0.8f); addChild(&mExtras); addChild(&mImage); diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 7276c35dd..f1842406b 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -16,13 +16,13 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setCentered(false); mList.setCursorChangedCallback([&](TextListComponent::CursorState state) { updateInfoPanel(); }); - mImage.setOrigin(0.5f, 0.0f); - mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y()); - mImage.setResize(mSize.x() * (0.50f - 2*padding), 0, false); + mImage.setOrigin(0.5f, 0.5f); + mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y() + mSize.y() * 0.2125f); + mImage.setMaxSize(mSize.x() * (0.50f - 2*padding), mSize.y() * 0.425f); addChild(&mImage); - mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.2f); - mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), 0); + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); + mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll((int)(1600 + mDescContainer.getSize().x()), 0.025f); addChild(&mDescContainer); @@ -35,12 +35,8 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : void DetailedGameListView::onThemeChanged(const std::shared_ptr& theme) { - mHeaderImage.setResize(mSize.x() * 0.5f, 0, true); BasicGameListView::onThemeChanged(theme); - //if(mHeaderImage.getPosition().y() + mHeaderImage.getSize().y() > mImage.getPosition().y()) - // mHeaderImage.setResize(0, mSize.y() * 0.185f, true); - using namespace ThemeFlags; mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); mDescContainer.applyTheme(theme, getName(), "infoPanel", POSITION | ThemeFlags::SIZE); @@ -57,12 +53,9 @@ void DetailedGameListView::updateInfoPanel() mDescription.setText(""); }else{ mImage.setImage(file->metadata.get("image")); - - mDescContainer.setPosition(mDescContainer.getPosition().x(), mImage.getPosition().y() + mImage.getSize().y() * 1.02f); - mDescContainer.setSize(mDescContainer.getSize().x(), mSize.y() - mDescContainer.getPosition().y()); - mDescContainer.resetAutoScrollTimer(); - + mDescription.setText(file->metadata.get("desc")); + mDescContainer.resetAutoScrollTimer(); } } diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 3ef3cbcd2..80921943d 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -12,11 +12,11 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame mHeaderText.setPosition(0, 0); mHeaderText.setCentered(true); - mHeaderImage.setResize(0, mSize.y() * 0.185f, false); + mHeaderImage.setResize(0, mSize.y() * 0.185f); mHeaderImage.setOrigin(0.5f, 0.0f); mHeaderImage.setPosition(mSize.x() / 2, 0); - mBackground.setResize(mSize.x(), mSize.y(), true); + mBackground.setResize(mSize.x(), mSize.y()); addChild(&mHeaderText); addChild(&mBackground); From a83ce289e066ef4f0f4ba9b2fd895e3216ffe0b9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 18:05:37 -0600 Subject: [PATCH 138/386] Make new resizing algorithm actually work properly. --- src/components/ImageComponent.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 59e8ca50e..f6ed0f06a 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -67,13 +67,15 @@ void ImageComponent::resize() // if only one component is set, we resize in a way that maintains aspect ratio if(!mTargetSize.x() && mTargetSize.y()) { - mSize[0] = (mTargetSize.y() / mSize.y()) * mSize.x(); + mSize[0] = (mTargetSize.y() / textureSize.y()) * textureSize.x(); mSize[1] = mTargetSize.y(); }else if(mTargetSize.x() && !mTargetSize.y()) { mSize[0] = mTargetSize.x(); - mSize[1] = (mTargetSize.x() / mSize.x()) * mSize.y(); + mSize[1] = (mTargetSize.x() / textureSize.x()) * textureSize.y(); } + + LOG(LogInfo) << "resized to: " << mSize.x() << ", " << mSize.y(); } } } From 8b688d3913115df766b6b63574ea23e866e4ce17 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 18:28:50 -0600 Subject: [PATCH 139/386] Made description size themable. --- src/views/gamelist/DetailedGameListView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index f1842406b..5b02511ce 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -40,7 +40,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them using namespace ThemeFlags; mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); mDescContainer.applyTheme(theme, getName(), "infoPanel", POSITION | ThemeFlags::SIZE); - mDescription.applyTheme(theme, getName(), "description", POSITION | FONT_PATH | FONT_SIZE | COLOR); + mDescription.applyTheme(theme, getName(), "description", POSITION | ThemeFlags::SIZE | FONT_PATH | FONT_SIZE | COLOR); } void DetailedGameListView::updateInfoPanel() From 5b5e99c3660e56bc42c4bb36041fb6210ad6edb0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 10 Jan 2014 19:18:51 -0600 Subject: [PATCH 140/386] Removed "infoPanel" element. Faked it so the element looks like it has no container. --- THEMES.md | 27 +++++++++------------ src/components/ScrollableContainer.cpp | 5 +++- src/views/gamelist/DetailedGameListView.cpp | 7 ++++-- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/THEMES.md b/THEMES.md index d98273c44..4bcd23048 100644 --- a/THEMES.md +++ b/THEMES.md @@ -194,8 +194,7 @@ Reference * image name="header" - POSITION | SIZE | PATH * textlist name="gamelist" - ALL * image name="gameimage" - POSITION | SIZE - * container name="infoPanel" - POSITION | SIZE - * text name="description" - POSITION | FONT_PATH | FONT_SIZE | COLOR + * text name="description" - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR #### grid * image name="background" - PATH | TILING @@ -217,6 +216,16 @@ Reference * text name="subtext" - FONT_PATH | COLOR +## Types of properties: + +* NORMALIZED_PAIR - two decimals, in the range [0..1]. For example, `0.25 0.5`. +* PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` or `%HOMEPATH%`, depending on platform). If the first character is a `.`, it will be expanded to the theme file's directory. +* BOOLEAN - `true`/`1` or `false`/`0`. +* COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). +* FLOAT - a decimal. +* STRING - a string of text. + + ## Types of elements and their properties: #### image @@ -248,10 +257,6 @@ Reference * `scrollSound` - type: PATH. * `center` - type: BOOLEAN. -#### container - * `pos` - type: NORMALIZED_PAIR. - * `size` - type: NORMALIZED_PAIR. - #### ninepatch * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. @@ -266,16 +271,6 @@ A quick word on the "ninepatch" type - EmulationStation borrows the concept of " *Note that a view may choose to only make only certain properties on a particular element themable.* -## Types of properties: - -* NORMALIZED_PAIR - two decimals, in the range [0..1]. For example, `0.25 0.5`. -* PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` or `%HOMEPATH%`, depending on platform). If the first character is a `.`, it will be expanded to the theme file's directory. -* BOOLEAN - `true`/`1` or `false`/`0`. -* COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). -* FLOAT - a decimal. -* STRING - a string of text. - - -Aloshi http://www.aloshi.com diff --git a/src/components/ScrollableContainer.cpp b/src/components/ScrollableContainer.cpp index 73a4a6ab2..87e948c78 100644 --- a/src/components/ScrollableContainer.cpp +++ b/src/components/ScrollableContainer.cpp @@ -80,7 +80,10 @@ void ScrollableContainer::update(int deltaTime) Eigen::Vector2f contentSize = getContentSize(); if(mScrollPos.x() + getSize().x() > contentSize.x()) mScrollPos[0] = (double)contentSize.x() - getSize().x(); - if(mScrollPos.y() + getSize().y() > contentSize.y()) + + if(contentSize.y() < getSize().y()) + mScrollPos[1] = 0; + else if(mScrollPos.y() + getSize().y() > contentSize.y()) mScrollPos[1] = (double)contentSize.y() - getSize().y(); GuiComponent::update(deltaTime); diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 5b02511ce..4cafd64d3 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -39,8 +39,10 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them using namespace ThemeFlags; mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); - mDescContainer.applyTheme(theme, getName(), "infoPanel", POSITION | ThemeFlags::SIZE); - mDescription.applyTheme(theme, getName(), "description", POSITION | ThemeFlags::SIZE | FONT_PATH | FONT_SIZE | COLOR); + + mDescContainer.applyTheme(theme, getName(), "description", POSITION | ThemeFlags::SIZE); + mDescription.setSize(mDescContainer.getSize().x(), 0); + mDescription.applyTheme(theme, getName(), "description", FONT_PATH | FONT_SIZE | COLOR); } void DetailedGameListView::updateInfoPanel() @@ -56,6 +58,7 @@ void DetailedGameListView::updateInfoPanel() mDescription.setText(file->metadata.get("desc")); mDescContainer.resetAutoScrollTimer(); + mDescContainer.setScrollPos(Eigen::Vector2d(0, 0)); } } From 3f1fcf2400a859731545db33d14bfed36a885fec Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 19 Jan 2014 12:23:01 -0600 Subject: [PATCH 141/386] Changed texture wrap mode to be determined as part of texture creation. Should hopefully fix some of the weird artifacts at certain resolutions. --- src/ThemeData.h | 7 ++- src/components/ImageComponent.cpp | 57 ++++++++-------------- src/components/ImageComponent.h | 8 ++- src/resources/TextureResource.cpp | 54 ++++++++------------ src/resources/TextureResource.h | 10 ++-- src/views/gamelist/ISimpleGameListView.cpp | 2 +- 6 files changed, 51 insertions(+), 87 deletions(-) diff --git a/src/ThemeData.h b/src/ThemeData.h index dc9e81bbe..899926d8b 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -32,10 +32,9 @@ namespace ThemeFlags COLOR = 16, FONT_PATH = 32, FONT_SIZE = 64, - TILING = 128, - SOUND = 256, - CENTER = 512, - TEXT = 1024, + SOUND = 128, + CENTER = 256, + TEXT = 512, ALL = 0xFFFFFFFF }; diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index f6ed0f06a..8d6b68d15 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -21,7 +21,7 @@ Eigen::Vector2f ImageComponent::getCenter() const } ImageComponent::ImageComponent(Window* window, const Eigen::Vector2f& pos, const std::string& path) : GuiComponent(window), - mTiled(false), mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) + mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) { setPosition(pos.x(), pos.y()); @@ -40,7 +40,7 @@ void ImageComponent::resize() const Eigen::Vector2f textureSize((float)getTextureSize().x(), (float)getTextureSize().y()); - if(mTiled) + if(mTexture->isTiled()) { mSize = mTargetSize; }else{ @@ -74,50 +74,41 @@ void ImageComponent::resize() mSize[0] = mTargetSize.x(); mSize[1] = (mTargetSize.x() / textureSize.x()) * textureSize.y(); } - - LOG(LogInfo) << "resized to: " << mSize.x() << ", " << mSize.y(); } } } -void ImageComponent::setImage(std::string path) +void ImageComponent::setImage(std::string path, bool tile) { if(path.empty() || !ResourceManager::getInstance()->fileExists(path)) mTexture.reset(); else - mTexture = TextureResource::get(path); + mTexture = TextureResource::get(path, tile); resize(); } +void ImageComponent::setImage(const char* path, size_t length, bool tile) +{ + mTexture.reset(); + + mTexture = TextureResource::get("", tile); + mTexture->initFromMemory(path, length); + + resize(); +} + void ImageComponent::setImage(const std::shared_ptr& texture) { mTexture = texture; resize(); } -void ImageComponent::setImage(const char* path, size_t length) -{ - mTexture.reset(); - - mTexture = TextureResource::get(""); - mTexture->initFromMemory(path, length); - - resize(); -} - void ImageComponent::setOrigin(float originX, float originY) { mOrigin << originX, originY; } -void ImageComponent::setTiling(bool tile) -{ - mTiled = tile; - - resize(); -} - void ImageComponent::setResize(float width, float height) { mTargetSize << width, height; @@ -157,7 +148,7 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) GLfloat points[12], texs[12]; GLubyte colors[6*4]; - if(mTiled) + if(mTexture->isTiled()) { float xCount = mSize.x() / getTextureSize().x(); float yCount = mSize.y() / getTextureSize().y(); @@ -250,16 +241,6 @@ bool ImageComponent::hasImage() return (bool)mTexture; } -void ImageComponent::copyScreen() -{ - mTexture.reset(); - - mTexture = TextureResource::get(""); - mTexture->initFromScreen(); - - resize(); -} - void ImageComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { LOG(LogInfo) << " req image [" << view << "." << element << "] (flags: " << properties << ")"; @@ -294,8 +275,8 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s setOrigin(elem->get("origin")); if(properties & PATH && elem->has("path")) - setImage(elem->get("path")); - - if(properties & TILING && elem->has("tile")) - setTiling(elem->get("tile")); + { + bool tile = (elem->has("tile") && elem->get("tile")); + setImage(elem->get("path"), tile); + } } diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index 196ee9e0f..be17ac0cc 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -18,13 +18,11 @@ public: ImageComponent(Window* window, const Eigen::Vector2f& pos = Eigen::Vector2f::Zero(), const std::string& path = ""); virtual ~ImageComponent(); - void copyScreen(); //Copy the entire screen into a texture for us to use. - void setImage(std::string path); //Loads the image at the given filepath. - void setImage(const char* image, size_t length); //Loads image from memory. + void setImage(std::string path, bool tile = false); //Loads the image at the given filepath. + void setImage(const char* image, size_t length, bool tile = false); //Loads image from memory. void setImage(const std::shared_ptr& texture); //Use an already existing texture. void setOrigin(float originX, float originY); //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } - void setTiling(bool tile); //Enables or disables tiling. Must be called before loading an image or resizing will be weird. void setResize(float width, float height); inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } void setMaxSize(float width, float height); @@ -49,7 +47,7 @@ private: Eigen::Vector2f mTargetSize; Eigen::Vector2f mOrigin; - bool mTiled, mFlipX, mFlipY, mTargetIsMax; + bool mFlipX, mFlipY, mTargetIsMax; void resize(); void buildImageArray(int x, int y, GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); //writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index f53f75360..97f1a6bd0 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -5,10 +5,10 @@ #include "../ImageIO.h" #include "../Renderer.h" -std::map< std::string, std::weak_ptr > TextureResource::sTextureMap; +std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; -TextureResource::TextureResource(const std::string& path) : - mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()) +TextureResource::TextureResource(const std::string& path, bool tile) : + mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()), mTile(tile) { reload(ResourceManager::getInstance()); } @@ -52,34 +52,13 @@ void TextureResource::initFromResource(const ResourceData data) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); mTextureSize << width, height; } -void TextureResource::initFromScreen() -{ - deinit(); - - int width = Renderer::getScreenWidth(); - int height = Renderer::getScreenHeight(); - - glGenTextures(1, &mTextureID); - glBindTexture(GL_TEXTURE_2D, mTextureID); - - glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, width, height, 0); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - - mTextureSize[0] = height; - mTextureSize[1] = height; -} - void TextureResource::initFromMemory(const char* data, size_t length) { deinit(); @@ -102,6 +81,7 @@ void TextureResource::initFromMemory(const char* data, size_t length) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); @@ -122,6 +102,11 @@ Eigen::Vector2i TextureResource::getSize() const return mTextureSize; } +bool TextureResource::isTiled() const +{ + return mTile; +} + void TextureResource::bind() const { if(mTextureID != 0) @@ -131,28 +116,27 @@ void TextureResource::bind() const } -std::shared_ptr TextureResource::get(const std::string& path) +std::shared_ptr TextureResource::get(const std::string& path, bool tile) { std::shared_ptr& rm = ResourceManager::getInstance(); if(path.empty()) { - std::shared_ptr tex(new TextureResource("")); - rm->addReloadable(tex); //make sure we're deinitialized even though we do nothing on reinitialization + std::shared_ptr tex(new TextureResource("", tile)); + rm->addReloadable(tex); //make sure we get properly deinitialized even though we do nothing on reinitialization return tex; } - auto foundTexture = sTextureMap.find(path); + TextureKeyType key(path, tile); + auto foundTexture = sTextureMap.find(key); if(foundTexture != sTextureMap.end()) { if(!foundTexture->second.expired()) - { return foundTexture->second.lock(); - } } - std::shared_ptr tex = std::shared_ptr(new TextureResource(path)); - sTextureMap[path] = std::weak_ptr(tex); + std::shared_ptr tex = std::shared_ptr(new TextureResource(path, tile)); + sTextureMap[key] = std::weak_ptr(tex); rm->addReloadable(tex); return tex; } diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index 0b4006ee1..64f4036b6 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -10,21 +10,21 @@ class TextureResource : public IReloadable { public: - static std::shared_ptr get(const std::string& path); + static std::shared_ptr get(const std::string& path, bool tile = false); virtual ~TextureResource(); void unload(std::shared_ptr& rm) override; void reload(std::shared_ptr& rm) override; + bool isTiled() const; Eigen::Vector2i getSize() const; void bind() const; - void initFromScreen(); void initFromMemory(const char* image, size_t length); private: - TextureResource(const std::string& path); + TextureResource(const std::string& path, bool tile); void initFromPath(); void initFromResource(const ResourceData data); @@ -33,6 +33,8 @@ private: Eigen::Vector2i mTextureSize; GLuint mTextureID; const std::string mPath; + const bool mTile; - static std::map< std::string, std::weak_ptr > sTextureMap; + typedef std::pair TextureKeyType; + static std::map< TextureKeyType, std::weak_ptr > sTextureMap; }; diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 80921943d..e9c8707ee 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -26,7 +26,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) { using namespace ThemeFlags; - mBackground.applyTheme(theme, getName(), "background", PATH | TILING); + mBackground.applyTheme(theme, getName(), "background", PATH); mHeaderImage.applyTheme(theme, getName(), "header", POSITION | ThemeFlags::SIZE | PATH); mThemeExtras.setExtras(ThemeData::makeExtras(theme, getName(), mWindow)); From 640493e0a652ae9a77cd50af92e788a51e963340 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 19 Jan 2014 16:06:13 -0600 Subject: [PATCH 142/386] Added more metadata to the detailed gamelist view. --- src/ThemeData.cpp | 6 + src/components/DateTimeComponent.cpp | 16 +++ src/components/DateTimeComponent.h | 2 + src/components/RatingComponent.cpp | 4 +- src/views/gamelist/DetailedGameListView.cpp | 137 +++++++++++++++++++- src/views/gamelist/DetailedGameListView.h | 17 ++- 6 files changed, 176 insertions(+), 6 deletions(-) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 75bc7e63f..0eb9d9795 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -44,6 +44,12 @@ std::map< std::string, std::map > T ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("path", PATH)) + ("datetime", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("color", COLOR) + ("fontPath", PATH) + ("fontSize", FLOAT)) ("sound", boost::assign::map_list_of ("path", PATH)); diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index d501d666b..8c8d81492 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -289,3 +289,19 @@ void DateTimeComponent::setFont(std::shared_ptr font) updateTextCache(); } + +void DateTimeComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + GuiComponent::applyTheme(theme, view, element, properties); + + using namespace ThemeFlags; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "datetime"); + if(!elem) + return; + + if(properties & COLOR && elem->has("color")) + setColor(elem->get("color")); + + setFont(Font::getFromTheme(elem, properties, mFont)); +} diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index bccb1a99b..13b5a5424 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -28,6 +28,8 @@ public: void setColor(unsigned int color); void setFont(std::shared_ptr font); + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + private: std::shared_ptr getFont() const; diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 25c97d482..c49b6336f 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -4,8 +4,8 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { - mFilledTexture = TextureResource::get(":/star_filled.png"); - mUnfilledTexture = TextureResource::get(":/star_unfilled.png"); + mFilledTexture = TextureResource::get(":/star_filled.png", true); + mUnfilledTexture = TextureResource::get(":/star_unfilled.png", true); mValue = 0.5f; mSize << 64 * 5.0f, 64; updateVertices(); diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 4cafd64d3..ddd29d117 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -5,9 +5,12 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), - mImage(window) + mImage(window), + + mLblRating(window), mLblReleaseDate(window), mLblLastPlayed(window), mLblPlayCount(window), + mRating(window), mReleaseDate(window), mLastPlayed(window), mPlayCount(window) { - mHeaderImage.setPosition(mSize.x() * 0.25f, 0); + //mHeaderImage.setPosition(mSize.x() * 0.25f, 0); const float padding = 0.01f; @@ -16,11 +19,27 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setCentered(false); mList.setCursorChangedCallback([&](TextListComponent::CursorState state) { updateInfoPanel(); }); + // image mImage.setOrigin(0.5f, 0.5f); mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y() + mSize.y() * 0.2125f); - mImage.setMaxSize(mSize.x() * (0.50f - 2*padding), mSize.y() * 0.425f); + mImage.setMaxSize(mSize.x() * (0.50f - 2*padding), mSize.y() * 0.4f); addChild(&mImage); + // metadata labels + values + mLblRating.setText("Rating: "); + addChild(&mLblRating); + addChild(&mRating); + mLblReleaseDate.setText("Released: "); + addChild(&mLblReleaseDate); + addChild(&mReleaseDate); + mLblLastPlayed.setText("Last played: "); + addChild(&mLblLastPlayed); + mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + addChild(&mLastPlayed); + mLblPlayCount.setText("Play count: "); + addChild(&mLblPlayCount); + addChild(&mPlayCount); + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll((int)(1600 + mDescContainer.getSize().x()), 0.025f); @@ -30,6 +49,9 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mDescription.setSize(mDescContainer.getSize().x(), 0); mDescContainer.addChild(&mDescription); + + initMDLabels(); + initMDValues(); updateInfoPanel(); } @@ -40,11 +62,96 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them using namespace ThemeFlags; mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); + initMDLabels(); + std::vector labels = getMDLabels(); + assert(labels.size() == 4); + const char* lblElements[4] = { + "md_lbl_rating", "md_lbl_releasedate", "md_lbl_lastplayed", "md_lbl_playcount" + }; + + for(unsigned int i = 0; i < labels.size(); i++) + { + labels[i]->applyTheme(theme, getName(), lblElements[i], ALL ^ ThemeFlags::TEXT); + } + + + initMDValues(); + std::vector values = getMDValues(); + assert(values.size() == 4); + const char* valElements[4] = { + "md_rating", "md_releasedate", "md_lastplayed", "md_playcount" + }; + + for(unsigned int i = 0; i < values.size(); i++) + { + values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); + } + mDescContainer.applyTheme(theme, getName(), "description", POSITION | ThemeFlags::SIZE); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "description", FONT_PATH | FONT_SIZE | COLOR); } +void DetailedGameListView::initMDLabels() +{ + using namespace Eigen; + + std::vector components = getMDLabels(); + + const unsigned int colCount = 2; + const unsigned int rowCount = components.size() / 2; + + Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); + + const float colSize = (mSize.x() * 0.48f) / colCount; + const float rowPadding = 0.01f * mSize.y(); + + for(unsigned int i = 0; i < components.size(); i++) + { + const unsigned int row = i % rowCount; + Vector3f pos(0.0f, 0.0f, 0.0f); + if(row == 0) + { + pos = start + Vector3f(colSize * (i / rowCount), 0, 0); + }else{ + // work from the last component + GuiComponent* lc = components[i-1]; + pos = lc->getPosition() + Vector3f(0, lc->getSize().y() + rowPadding, 0); + } + + components[i]->setFont(Font::get(FONT_SIZE_SMALL)); + components[i]->setPosition(pos); + } +} + +void DetailedGameListView::initMDValues() +{ + using namespace Eigen; + + std::vector labels = getMDLabels(); + std::vector values = getMDValues(); + + std::shared_ptr defaultFont = Font::get(FONT_SIZE_SMALL); + mRating.setSize(defaultFont->getHeight() * 5.0f, (float)defaultFont->getHeight()); + mReleaseDate.setFont(defaultFont); + mLastPlayed.setFont(defaultFont); + mPlayCount.setFont(defaultFont); + + float bottom = 0.0f; + for(unsigned int i = 0; i < labels.size(); i++) + { + const float heightDiff = (labels[i]->getSize().y() - values[i]->getSize().y()) / 2; + values[i]->setPosition(labels[i]->getPosition() + Vector3f(labels[i]->getSize().x(), heightDiff, 0)); + + float testBot = values[i]->getPosition().y() + values[i]->getSize().y(); + if(testBot > bottom) + bottom = testBot; + } + + mDescContainer.setPosition(mDescContainer.getPosition().x(), bottom + mSize.y() * 0.01f); + mDescContainer.setSize(mDescContainer.getSize().x(), mSize.y() - mDescContainer.getPosition().y()); +} + void DetailedGameListView::updateInfoPanel() { FileData* file = (mList.getList().size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); @@ -55,6 +162,10 @@ void DetailedGameListView::updateInfoPanel() mDescription.setText(""); }else{ mImage.setImage(file->metadata.get("image")); + mRating.setValue(file->metadata.get("rating")); + mReleaseDate.setValue(file->metadata.get("releasedate")); + mLastPlayed.setValue(file->metadata.get("lastplayed")); + mPlayCount.setValue(file->metadata.get("playcount")); mDescription.setText(file->metadata.get("desc")); mDescContainer.resetAutoScrollTimer(); @@ -70,3 +181,23 @@ void DetailedGameListView::launch(FileData* game) mWindow->getViewController()->launch(game, target); } + +std::vector DetailedGameListView::getMDLabels() +{ + std::vector ret; + ret.push_back(&mLblRating); + ret.push_back(&mLblReleaseDate); + ret.push_back(&mLblLastPlayed); + ret.push_back(&mLblPlayCount); + return ret; +} + +std::vector DetailedGameListView::getMDValues() +{ + std::vector ret; + ret.push_back(&mRating); + ret.push_back(&mReleaseDate); + ret.push_back(&mLastPlayed); + ret.push_back(&mPlayCount); + return ret; +} diff --git a/src/views/gamelist/DetailedGameListView.h b/src/views/gamelist/DetailedGameListView.h index a2c08901c..7ba89dfca 100644 --- a/src/views/gamelist/DetailedGameListView.h +++ b/src/views/gamelist/DetailedGameListView.h @@ -2,6 +2,8 @@ #include "BasicGameListView.h" #include "../../components/ScrollableContainer.h" +#include "../../components/RatingComponent.h" +#include "../../components/DateTimeComponent.h" class DetailedGameListView : public BasicGameListView { @@ -18,8 +20,21 @@ protected: private: void updateInfoPanel(); + void initMDLabels(); + void initMDValues(); + ImageComponent mImage; - + + TextComponent mLblRating, mLblReleaseDate, mLblLastPlayed, mLblPlayCount; + + RatingComponent mRating; + DateTimeComponent mReleaseDate; + DateTimeComponent mLastPlayed; + TextComponent mPlayCount; + + std::vector getMDLabels(); + std::vector getMDValues(); + ScrollableContainer mDescContainer; TextComponent mDescription; }; From 43972c5be93f9d8661aef106a225cb85b00851b0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 19 Jan 2014 17:22:26 -0600 Subject: [PATCH 143/386] Added developer, publisher, genre, and number of players metadata. Updated TheGamesDB scraper to retrieve said metadata, still need to do the archive.vg scraper. TextComponent now abbreviates text if the component's size is single-line and the text is too long. DateTimeComponent now correctly updates its size. --- src/MetaData.cpp | 20 ++++---- src/components/DateTimeComponent.cpp | 1 + src/components/TextComponent.cpp | 26 +++++++++-- src/scrapers/GamesDBScraper.cpp | 5 ++ src/views/gamelist/DetailedGameListView.cpp | 52 +++++++++++++++++---- src/views/gamelist/DetailedGameListView.h | 6 ++- 6 files changed, 90 insertions(+), 20 deletions(-) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 4a782f5bc..575ea65b2 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -8,14 +8,18 @@ MetaDataDecl gameDecls[] = { - {"name", MD_STRING, "", false}, - {"desc", MD_MULTILINE_STRING, "", false}, - {"image", MD_IMAGE_PATH, "", false}, - {"thumbnail", MD_IMAGE_PATH, "", false}, - {"rating", MD_RATING, "0", false}, - {"releasedate", MD_DATE, "0", false}, - {"playcount", MD_INT, "0", true}, - {"lastplayed", MD_TIME, "0", true} + {"name", MD_STRING, "", false}, + {"desc", MD_MULTILINE_STRING, "", false}, + {"image", MD_IMAGE_PATH, "", false}, + {"thumbnail", MD_IMAGE_PATH, "", false}, + {"rating", MD_RATING, "0", false}, + {"releasedate", MD_DATE, "0", false}, + {"developer", MD_STRING, "unknown", false}, + {"publisher", MD_STRING, "unknown", false}, + {"genre", MD_STRING, "unknown", false}, + {"players", MD_INT, "1", false}, + {"playcount", MD_INT, "0", true}, + {"lastplayed", MD_TIME, "0", true} }; const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index 8c8d81492..41d299dd8 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -245,6 +245,7 @@ void DateTimeComponent::updateTextCache() const std::string dispString = getDisplayString(mode); std::shared_ptr font = getFont(); mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); + setSize(mTextCache->metrics.size); //set up cursor positions mCursorBoxes.clear(); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 090b6281f..4b0b00073 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -80,8 +80,6 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(font && !mText.empty()) { - Renderer::setMatrix(trans); - if(mCentered) { const Eigen::Vector2f& textSize = mTextCache->metrics.size; @@ -90,6 +88,8 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f centeredTrans = trans; centeredTrans = centeredTrans.translate(Eigen::Vector3f(pos.x(), pos.y(), 0)); Renderer::setMatrix(centeredTrans); + }else{ + Renderer::setMatrix(trans); } font->renderTextCache(mTextCache.get()); @@ -118,7 +118,27 @@ void TextComponent::onTextChanged() calculateExtent(); std::shared_ptr f = getFont(); - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); + const bool wrap = (mSize.y() == 0 || (int)mSize.y() > f->getHeight()); + Eigen::Vector2f size = f->sizeText(mText); + if(!wrap && mSize.x() && mText.size() && size.x() > mSize.x()) + { + // abbreviate text + const std::string abbrev = ".."; + Eigen::Vector2f abbrevSize = f->sizeText(abbrev); + + std::string text = mText; + while(text.size() && size.x() + abbrevSize.x() > mSize.x()) + { + text.erase(text.size() - 1, 1); + size = f->sizeText(text); + } + + text.append(abbrev); + + mTextCache = std::shared_ptr(f->buildTextCache(text, 0, 0, (mColor >> 8 << 8) | mOpacity)); + }else{ + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); + } } void TextComponent::onColorChanged() diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 16d40a571..6367a64b2 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -106,6 +106,11 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s boost::posix_time::ptime rd = string_to_ptime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"); mdl.back().setTime("releasedate", rd); + mdl.back().set("developer", game.child("Developer").text().get()); + mdl.back().set("publisher", game.child("Publisher").text().get()); + mdl.back().set("genre", game.child("Genres").first_child().text().get()); + mdl.back().set("players", game.child("Players").text().get()); + if(Settings::getInstance()->getBool("ScrapeRatings") && game.child("Rating")) { float ratingVal = (game.child("Rating").text().as_int() / 10.0f); diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index ddd29d117..8b2da5a68 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -7,8 +7,11 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mDescContainer(window), mDescription(window), mImage(window), - mLblRating(window), mLblReleaseDate(window), mLblLastPlayed(window), mLblPlayCount(window), - mRating(window), mReleaseDate(window), mLastPlayed(window), mPlayCount(window) + mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), + mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), + + mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), + mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) { //mHeaderImage.setPosition(mSize.x() * 0.25f, 0); @@ -32,6 +35,18 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mLblReleaseDate.setText("Released: "); addChild(&mLblReleaseDate); addChild(&mReleaseDate); + mLblDeveloper.setText("Developer: "); + addChild(&mLblDeveloper); + addChild(&mDeveloper); + mLblPublisher.setText("Publisher: "); + addChild(&mLblPublisher); + addChild(&mPublisher); + mLblGenre.setText("Genre: "); + addChild(&mLblGenre); + addChild(&mGenre); + mLblPlayers.setText("Players: "); + addChild(&mLblPlayers); + addChild(&mPlayers); mLblLastPlayed.setText("Last played: "); addChild(&mLblLastPlayed); mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); @@ -64,9 +79,10 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them initMDLabels(); std::vector labels = getMDLabels(); - assert(labels.size() == 4); - const char* lblElements[4] = { - "md_lbl_rating", "md_lbl_releasedate", "md_lbl_lastplayed", "md_lbl_playcount" + assert(labels.size() == 8); + const char* lblElements[8] = { + "md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher", + "md_lbl_genre", "md_lbl_players", "md_lbl_lastplayed", "md_lbl_playcount" }; for(unsigned int i = 0; i < labels.size(); i++) @@ -77,9 +93,10 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them initMDValues(); std::vector values = getMDValues(); - assert(values.size() == 4); - const char* valElements[4] = { - "md_rating", "md_releasedate", "md_lastplayed", "md_playcount" + assert(values.size() == 8); + const char* valElements[8] = { + "md_rating", "md_releasedate", "md_developer", "md_publisher", + "md_genre", "md_players", "md_lastplayed", "md_playcount" }; for(unsigned int i = 0; i < values.size(); i++) @@ -134,14 +151,21 @@ void DetailedGameListView::initMDValues() std::shared_ptr defaultFont = Font::get(FONT_SIZE_SMALL); mRating.setSize(defaultFont->getHeight() * 5.0f, (float)defaultFont->getHeight()); mReleaseDate.setFont(defaultFont); + mDeveloper.setFont(defaultFont); + mPublisher.setFont(defaultFont); + mGenre.setFont(defaultFont); + mPlayers.setFont(defaultFont); mLastPlayed.setFont(defaultFont); mPlayCount.setFont(defaultFont); float bottom = 0.0f; + + const float colSize = (mSize.x() * 0.48f) / 2; for(unsigned int i = 0; i < labels.size(); i++) { const float heightDiff = (labels[i]->getSize().y() - values[i]->getSize().y()) / 2; values[i]->setPosition(labels[i]->getPosition() + Vector3f(labels[i]->getSize().x(), heightDiff, 0)); + values[i]->setSize(colSize - labels[i]->getSize().x(), values[i]->getSize().y()); float testBot = values[i]->getPosition().y() + values[i]->getSize().y(); if(testBot > bottom) @@ -164,6 +188,10 @@ void DetailedGameListView::updateInfoPanel() mImage.setImage(file->metadata.get("image")); mRating.setValue(file->metadata.get("rating")); mReleaseDate.setValue(file->metadata.get("releasedate")); + mDeveloper.setValue(file->metadata.get("developer")); + mPublisher.setValue(file->metadata.get("publisher")); + mGenre.setValue(file->metadata.get("genre")); + mPlayers.setValue(file->metadata.get("players")); mLastPlayed.setValue(file->metadata.get("lastplayed")); mPlayCount.setValue(file->metadata.get("playcount")); @@ -187,6 +215,10 @@ std::vector DetailedGameListView::getMDLabels() std::vector ret; ret.push_back(&mLblRating); ret.push_back(&mLblReleaseDate); + ret.push_back(&mLblDeveloper); + ret.push_back(&mLblPublisher); + ret.push_back(&mLblGenre); + ret.push_back(&mLblPlayers); ret.push_back(&mLblLastPlayed); ret.push_back(&mLblPlayCount); return ret; @@ -197,6 +229,10 @@ std::vector DetailedGameListView::getMDValues() std::vector ret; ret.push_back(&mRating); ret.push_back(&mReleaseDate); + ret.push_back(&mDeveloper); + ret.push_back(&mPublisher); + ret.push_back(&mGenre); + ret.push_back(&mPlayers); ret.push_back(&mLastPlayed); ret.push_back(&mPlayCount); return ret; diff --git a/src/views/gamelist/DetailedGameListView.h b/src/views/gamelist/DetailedGameListView.h index 7ba89dfca..28756e698 100644 --- a/src/views/gamelist/DetailedGameListView.h +++ b/src/views/gamelist/DetailedGameListView.h @@ -25,10 +25,14 @@ private: ImageComponent mImage; - TextComponent mLblRating, mLblReleaseDate, mLblLastPlayed, mLblPlayCount; + TextComponent mLblRating, mLblReleaseDate, mLblDeveloper, mLblPublisher, mLblGenre, mLblPlayers, mLblLastPlayed, mLblPlayCount; RatingComponent mRating; DateTimeComponent mReleaseDate; + TextComponent mDeveloper; + TextComponent mPublisher; + TextComponent mGenre; + TextComponent mPlayers; DateTimeComponent mLastPlayed; TextComponent mPlayCount; From 5606a07f8883133895bd2f7b8a1cae303495655b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 19 Jan 2014 17:37:08 -0600 Subject: [PATCH 144/386] Ratings are now themable. --- src/ThemeData.cpp | 5 +++++ src/components/RatingComponent.cpp | 16 ++++++++++++++++ src/components/RatingComponent.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 0eb9d9795..e59937180 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -50,6 +50,11 @@ std::map< std::string, std::map > T ("color", COLOR) ("fontPath", PATH) ("fontSize", FLOAT)) + ("rating", boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("filledPath", PATH) + ("unfilledPath", PATH)) ("sound", boost::assign::map_list_of ("path", PATH)); diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index c49b6336f..f5aa705a9 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -111,3 +111,19 @@ bool RatingComponent::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } + +void RatingComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + GuiComponent::applyTheme(theme, view, element, properties); + + using namespace ThemeFlags; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "rating"); + if(!elem) + return; + + if(properties & PATH && elem->has("filledPath")) + mFilledTexture = TextureResource::get(elem->get("filledPath"), true); + if(properties & PATH && elem->has("unfilledPath")) + mUnfilledTexture = TextureResource::get(elem->get("unfilledPath"), true); +} diff --git a/src/components/RatingComponent.h b/src/components/RatingComponent.h index bf2ce2071..5a40e741b 100644 --- a/src/components/RatingComponent.h +++ b/src/components/RatingComponent.h @@ -15,6 +15,9 @@ public: void render(const Eigen::Affine3f& parentTrans); void onSizeChanged() override; + + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + private: void updateVertices(); From 45592544c15e9224e1d02e682e4e96a7d6221642 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 19 Jan 2014 18:59:04 -0600 Subject: [PATCH 145/386] Renamed some theme elements to be more consistent. Heavily updated the theming documentation. --- THEMES.md | 199 +++++++++++++++----- src/components/GuiFastSelect.cpp | 2 +- src/components/GuiMenu.cpp | 4 +- src/views/gamelist/DetailedGameListView.cpp | 6 +- src/views/gamelist/ISimpleGameListView.cpp | 5 +- 5 files changed, 157 insertions(+), 59 deletions(-) diff --git a/THEMES.md b/THEMES.md index 4bcd23048..72d99e5f7 100644 --- a/THEMES.md +++ b/THEMES.md @@ -182,43 +182,111 @@ You probably should not use the "common" view for element positioning. You also Reference ========= -## Views, their elements, and accepted properties: +## Views, their elements, and themable properties: #### basic - * image name="background" - PATH | TILING - * image name="header" - POSITION | SIZE | PATH - * textlist name="gamelist" - ALL +* `image name="background"` - ALL + - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). +* `text name="headerText"` - ALL + - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. +* `image name="header"` - ALL + - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. +* `textlist name="gamelist"` - ALL + - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Centered by default. + +--- #### detailed - * image name="background" - PATH | TILING - * image name="header" - POSITION | SIZE | PATH - * textlist name="gamelist" - ALL - * image name="gameimage" - POSITION | SIZE - * text name="description" - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR +* `image name="background"` - ALL + - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). +* `text name="headerText"` - ALL + - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. +* `image name="header"` - ALL + - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. +* `textlist name="gamelist"` - ALL + - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Left aligned by default. + +* Metadata + * Labels + * `text name="md_lbl_rating"` - ALL + * `text name="md_lbl_releasedate"` - ALL + * `text name="md_lbl_developer"` - ALL + * `text name="md_lbl_publisher"` - ALL + * `text name="md_lbl_genre"` - ALL + * `text name="md_lbl_players"` - ALL + * `text name="md_lbl_lastplayed"` - ALL + * `text name="md_lbl_playcount"` - ALL + + * Values + * All values will follow to the right of their labels if a position isn't specified. + + * `image name="md_image"` - POSITION | SIZE + - Path is the `image` metadata for the currently selected game. + * `rating name="md_rating"` - ALL + - The `rating` metadata. + * `datetime name="md_releasedate"` - ALL + - The `releasedate` metadata. + * `text name="md_developer"` - ALL + - The `developer` metadata. + * `text name="md_publisher"` - ALL + - The `publisher` metadata. + * `text name="md_genre"` - ALL + - The `genre` metadata. + * `text name="md_players"` - ALL + - The `players` metadata (number of players the game supports). + * `datetime name="md_lastplayed"` - ALL + - The `lastplayed` metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). + * `text name="md_playcount"` - ALL + - The `playcount` metadata (number of times the game has been played). + * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR + - Text is the `desc` metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. + +--- #### grid - * image name="background" - PATH | TILING - * image name="header" - POSITION | SIZE | PATH +* `image name="background"` - ALL + - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). +* `text name="headerText"` - ALL + - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. +* `image name="header"` - ALL + - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. + +--- #### system - * image name="header" - ALL - * image name="system" - ALL +* `text name="headerText"` - ALL + - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. +* `image name="header"` - ALL + - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. +* image name="system" - ALL + - A large image representing the system (usually a picture of the system itself). -#### menu - * ninepatch name="background" - PATH - * textlist name="menulist" - FONT_PATH | COLOR | SOUND - * sound name="menuOpen" - PATH - * sound name="menuClose" - PATH +--- #### fastSelect - * ninepatch name="background" - PATH - * text name="letter" - FONT_PATH | COLOR - * text name="subtext" - FONT_PATH | COLOR +* `ninepatch name="windowBackground"` - PATH + - Fit around the fast select UI as a background. +* `text name="letter"` - FONT_PATH | COLOR + - The big letter that shows what letter you'll jump to when you let go of the fast select button. +* `text name="subtext"` - FONT_PATH | COLOR + - The text that displays the current sort mode. + +--- + +#### menu +* `ninepatch name="windowBackground"` - PATH + - Background for the menu. Fit from top-left corner at (0.175, 0.05) to bottom-right corner at (0.825, 0.95). +* `textlist name="menulist"` - FONT_PATH | COLOR | SOUND + - The list of menu options. `primaryColor` is for most options, `secondaryColor` is for the "shutdown" option. +* `sound name="menuOpen"` - PATH + - Played when the menu opens. +* `sound name="menuClose"` - PATH + - Played when the menu closes. ## Types of properties: -* NORMALIZED_PAIR - two decimals, in the range [0..1]. For example, `0.25 0.5`. +* NORMALIZED_PAIR - two decimals, in the range [0..1], delimited by a space. For example, `0.25 0.5`. Most commonly used for position (x and y coordinates) and size (width and height). * PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` or `%HOMEPATH%`, depending on platform). If the first character is a `.`, it will be expanded to the theme file's directory. * BOOLEAN - `true`/`1` or `false`/`0`. * COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). @@ -228,47 +296,76 @@ Reference ## Types of elements and their properties: +Common to almost all elements is a `pos` and `size` property of the NORMALIZED_PAIR type. They are normalized in terms of their "parent" object's size; 99% of the time, this is just the size of the screen. In this case, `0 0` would correspond to the top left corner, and `1 1` the bottom right corner (a positive Y value points further down). `pos` almost always refers to the top left corner of your element. You *can* use numbers outside of the [0..1] range if you want to place an element partially or completely off-screen. + +The order you define properties in does not matter. + +Remember, you do *not* need to specify every property! + #### image - * `pos` - type: NORMALIZED_PAIR. - * `size` - type: NORMALIZED_PAIR. - * `maxSize` - type: NORMALIZED_PAIR. - * `origin` - type: NORMALIZED_PAIR. - * `path` - type: PATH. - * `tile` - type: BOOLEAN. + +Can be created as an extra. + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. +* `maxSize` - type: NORMALIZED_PAIR. + - The image will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis (e.g. with a game's image metadata). +* `origin` - type: NORMALIZED_PAIR. + - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. +* `path` - type: PATH. + - Path to the image file. Most common extensions are supported (including .jpg, .png, and unanimated .gif). +* `tile` - type: BOOLEAN. + - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. #### text - * `pos` - type: NORMALIZED_PAIR. - * `size` - type: NORMALIZED_PAIR. - * `text` - type: STRING. - * `color` - type: COLOR. - * `fontPath` - type: PATH. - * `fontSize` - type: FLOAT. - * `center` - type: BOOLEAN. + +Can be created as an extra. + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. +* `text` - type: STRING. +* `color` - type: COLOR. +* `fontPath` - type: PATH. + - Path to a truetype font (.ttf). +* `fontSize` - type: FLOAT. + - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). +* `center` - type: BOOLEAN. + - If true, center the text on the x-axis. #### textlist - * `pos` - type: NORMALIZED_PAIR. - * `size` - type: NORMALIZED_PAIR. - * `selectorColor` - type: COLOR. - * `selectedColor` - type: COLOR. - * `primaryColor` - type: COLOR. - * `secondaryColor` - type: COLOR. - * `fontPath` - type: PATH. - * `fontSize` - type: FLOAT. - * `scrollSound` - type: PATH. - * `center` - type: BOOLEAN. + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. +* `selectorColor` - type: COLOR. + - Color of the "selector bar." +* `selectedColor` - type: COLOR. + - Color of the highlighted entry text. +* `primaryColor` - type: COLOR. + - Primary color; what this means depends on the text list. For example, for game lists, it is the color of a game. +* `secondaryColor` - type: COLOR. + - Secondary color; what this means depends on the text list. For example, for game lists, it is the color of a folder. +* `fontPath` - type: PATH. +* `fontSize` - type: FLOAT. +* `scrollSound` - type: PATH. + - Sound that is played when the list is scrolled. +* `center` - type: BOOLEAN. + - True to center, false to left-align. #### ninepatch - * `pos` - type: NORMALIZED_PAIR. - * `size` - type: NORMALIZED_PAIR. - * `path` - type: PATH. -A quick word on the "ninepatch" type - EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. +* `path` - type: PATH. + +EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). #### sound - * `path` - type: PATH. + +* `path` - type: PATH. + - Path to the sound file. Only .wav files are currently supported. -*Note that a view may choose to only make only certain properties on a particular element themable.* +*Note that a view may choose to only make only certain properties on a particular element themable!* diff --git a/src/components/GuiFastSelect.cpp b/src/components/GuiFastSelect.cpp index d200f7477..cecf73cfc 100644 --- a/src/components/GuiFastSelect.cpp +++ b/src/components/GuiFastSelect.cpp @@ -14,7 +14,7 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo const std::shared_ptr& theme = mGameList->getTheme(); using namespace ThemeFlags; - mBackground.applyTheme(theme, "fastSelect", "background", PATH); + mBackground.applyTheme(theme, "fastSelect", "windowBackground", PATH); mBackground.fitTo(mSize); addChild(&mBackground); diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index 696162ced..5c6f2e437 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -38,15 +38,15 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/ mTheme = ThemeData::getDefault(); using namespace ThemeFlags; - mBackground.applyTheme(mTheme, "menu", "background", PATH); + mBackground.applyTheme(mTheme, "menu", "windowBackground", PATH); mBackground.fitTo(Eigen::Vector2f(mList.getSize().x(), mSize.y()), Eigen::Vector3f(mList.getPosition().x(), 0, 0)); addChild(&mBackground); mList.setFont(Font::get((int)(0.09f * Renderer::getScreenHeight()))); - mList.applyTheme(mTheme, "menu", "menulist", FONT_PATH | COLOR | SOUND); mList.setSelectorColor(0xBBBBBBFF); mList.setColor(0, 0x0000FFFF); mList.setColor(1, 0xFF0000FF); + mList.applyTheme(mTheme, "menu", "menulist", FONT_PATH | COLOR | SOUND); Sound::getFromTheme(mTheme, "menu", "menuOpen")->play(); diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 8b2da5a68..256a6dd0d 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -75,7 +75,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mImage.applyTheme(theme, getName(), "gameimage", POSITION | ThemeFlags::SIZE); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE); initMDLabels(); std::vector labels = getMDLabels(); @@ -104,9 +104,9 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); } - mDescContainer.applyTheme(theme, getName(), "description", POSITION | ThemeFlags::SIZE); + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); mDescription.setSize(mDescContainer.getSize().x(), 0); - mDescription.applyTheme(theme, getName(), "description", FONT_PATH | FONT_SIZE | COLOR); + mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR); } void DetailedGameListView::initMDLabels() diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index e9c8707ee..c0febefe6 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -26,8 +26,9 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) { using namespace ThemeFlags; - mBackground.applyTheme(theme, getName(), "background", PATH); - mHeaderImage.applyTheme(theme, getName(), "header", POSITION | ThemeFlags::SIZE | PATH); + mBackground.applyTheme(theme, getName(), "background", ALL); + mHeaderImage.applyTheme(theme, getName(), "header", ALL); + mHeaderText.applyTheme(theme, getName(), "headerText", ALL); mThemeExtras.setExtras(ThemeData::makeExtras(theme, getName(), mWindow)); if(mHeaderImage.hasImage()) From 9a9ec3d855fd5f5e07a1a1c20f942b4c99bd2228 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 19 Jan 2014 19:12:52 -0600 Subject: [PATCH 146/386] Fixed some formatting. --- THEMES.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/THEMES.md b/THEMES.md index 72d99e5f7..ba4b7fea4 100644 --- a/THEMES.md +++ b/THEMES.md @@ -9,7 +9,7 @@ Simple Example Here is a very simple theme that changes the description text's color: -``` +```xml 3 @@ -37,7 +37,7 @@ Everything must be inside a `` tag. A *view* can be thought of as a particular "screen" within EmulationStation. Views are defined like this: -``` +```xml ... define elements here ... @@ -47,7 +47,7 @@ A *view* can be thought of as a particular "screen" within EmulationStation. Vi An *element* is a particular visual element, such as an image or a piece of text. You can either modify an element that already exists for a particular view (as is done in the "description" example), like this: -``` +```xml ... define properties here ... @@ -55,7 +55,7 @@ An *element* is a particular visual element, such as an image or a piece of text Or, you can create your own elements by adding `extra="true"` (as is done in the "my_image" example) like this: -``` +```xml ... define properties here ... @@ -67,7 +67,7 @@ Or, you can create your own elements by adding `extra="true"` (as is done in the *Properties* control how a particular *element* looks - for example, its position, size, image path, etc. There different types of properties that determine what kinds of values you can use - you can read about them below in the "Reference" section. Properties are defined like this: -``` +```xml ValueHere ``` @@ -84,7 +84,7 @@ It is recommended that if you are writing a theme you launch EmulationStation wi You can include theme files within theme files, similar to `#include` in C (though the mechanism is different, the effect is the same). Example: `~/.emulationstation/all_themes.xml`: -``` +```xml 3 @@ -97,7 +97,7 @@ You can include theme files within theme files, similar to `#include` in C (thou ``` `~/.emulationstation/snes/theme.xml`: -``` +```xml 3 ./../all_themes.xml @@ -110,7 +110,7 @@ You can include theme files within theme files, similar to `#include` in C (thou ``` Is equivalent to this `snes/theme.xml`: -``` +```xml 3 @@ -130,7 +130,7 @@ Notice that properties that were not specified got merged (``) and the Sometimes you want to apply the same values to the same element across many views. The "common" view is one way to do this. -``` +```xml 3 @@ -147,7 +147,7 @@ Sometimes you want to apply the same values to the same element across many view ``` Is equivalent to: -``` +```xml 3 @@ -221,25 +221,25 @@ Reference * All values will follow to the right of their labels if a position isn't specified. * `image name="md_image"` - POSITION | SIZE - - Path is the `image` metadata for the currently selected game. + - Path is the "image" metadata for the currently selected game. * `rating name="md_rating"` - ALL - - The `rating` metadata. + - The "rating" metadata. * `datetime name="md_releasedate"` - ALL - - The `releasedate` metadata. + - The "releasedate" metadata. * `text name="md_developer"` - ALL - - The `developer` metadata. + - The "developer" metadata. * `text name="md_publisher"` - ALL - - The `publisher` metadata. + - The "publisher" metadata. * `text name="md_genre"` - ALL - - The `genre` metadata. + - The "genre" metadata. * `text name="md_players"` - ALL - - The `players` metadata (number of players the game supports). + - The "players" metadata (number of players the game supports). * `datetime name="md_lastplayed"` - ALL - - The `lastplayed` metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). + - The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). * `text name="md_playcount"` - ALL - - The `playcount` metadata (number of times the game has been played). + - The "playcount" metadata (number of times the game has been played). * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR - - Text is the `desc` metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. + - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. --- @@ -368,6 +368,7 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice *Note that a view may choose to only make only certain properties on a particular element themable!* +[*Check out the "official" themes for some more examples!*](http://aloshi.com/emulationstation#themes) -Aloshi http://www.aloshi.com From ddcc43b9303a3ca891aba817fce1fee5ffbb52a7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 20 Jan 2014 12:23:39 -0600 Subject: [PATCH 147/386] Made rating component size work a bit better. Send an onFileChanged(FILE_METADATA_CHANGED) when a game is launched to catch stat changes. Updated documentation. --- THEMES.md | 27 +++++++++++++++++++++++---- src/components/RatingComponent.cpp | 5 +++++ src/views/ViewController.cpp | 6 +++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/THEMES.md b/THEMES.md index ba4b7fea4..878e01574 100644 --- a/THEMES.md +++ b/THEMES.md @@ -299,8 +299,8 @@ Reference Common to almost all elements is a `pos` and `size` property of the NORMALIZED_PAIR type. They are normalized in terms of their "parent" object's size; 99% of the time, this is just the size of the screen. In this case, `0 0` would correspond to the top left corner, and `1 1` the bottom right corner (a positive Y value points further down). `pos` almost always refers to the top left corner of your element. You *can* use numbers outside of the [0..1] range if you want to place an element partially or completely off-screen. The order you define properties in does not matter. - Remember, you do *not* need to specify every property! +*Note that a view may choose to only make only certain properties on a particular element themable!* #### image @@ -308,10 +308,11 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. + - If only one axis is specified (and the other is zero), the other will be automatically calculated in accordance with the image's aspect ratio. * `maxSize` - type: NORMALIZED_PAIR. - The image will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis (e.g. with a game's image metadata). * `origin` - type: NORMALIZED_PAIR. - - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. + - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `path` - type: PATH. - Path to the image file. Most common extensions are supported (including .jpg, .png, and unanimated .gif). * `tile` - type: BOOLEAN. @@ -323,6 +324,7 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. + - You should only set this if you want your text to behave like a "textbox" - that is, your text is multi-line and should wrap. * `text` - type: STRING. * `color` - type: COLOR. * `fontPath` - type: PATH. @@ -359,14 +361,31 @@ Can be created as an extra. EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). +#### rating + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. + - Only one value is actually used. The other value should be zero. (e.g. specify width OR height, but not both. This is done to maintain the aspect ratio.) +* `filledPath` - type: PATH. + - Path to the "filled star" image. Image must be square (width equals height). +* `unfilledPath` - type: PATH. + - Path to the "unfilled star" image. Image must be square (width equals height). + +#### datetime + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. + - You should probably not set this. Leave it to `fontSize`. +* `color` - type: COLOR. +* `fontPath` - type: PATH. +* `fontSize` - type: FLOAT. + #### sound * `path` - type: PATH. - Path to the sound file. Only .wav files are currently supported. -*Note that a view may choose to only make only certain properties on a particular element themable!* - [*Check out the "official" themes for some more examples!*](http://aloshi.com/emulationstation#themes) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index f5aa705a9..a3f061fbb 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -34,6 +34,11 @@ std::string RatingComponent::getValue() const void RatingComponent::onSizeChanged() { + if(mSize.y() == 0) + mSize[1] = mSize.x() / 5.0f; + else if(mSize.x() == 0) + mSize[0] = mSize.y() * 5.0f; + updateVertices(); } diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index d0b4dc8af..9763ec034 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -69,10 +69,9 @@ void ViewController::playViewTransition() void ViewController::onFileChanged(FileData* file, FileChangeType change) { - for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) - { + auto it = mGameListViews.find(file->getSystem()); + if(it != mGameListViews.end()) it->second->onFileChanged(file, change); - } } void ViewController::launch(FileData* game, Eigen::Vector3f center) @@ -95,6 +94,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) mCamera = origCamera; mLockInput = false; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), nullptr, true); + this->onFileChanged(game, FILE_METADATA_CHANGED); }); } From 49130464bac23f35a45c025fc11aa6fc5c3d2186 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 20 Jan 2014 19:33:24 -0600 Subject: [PATCH 148/386] Added developer and genre to the archive.vg scraper. Renamed the "Play count:" label to "Times played:". --- src/scrapers/TheArchiveScraper.cpp | 7 +++++++ src/views/gamelist/DetailedGameListView.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 2429bf448..a1c5a7bfa 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -50,6 +50,13 @@ std::vector TheArchiveScraper::parseReq(ScraperSearchParams params //Archive.search does not return ratings + mdl.back().set("developer", game.child("developer").text().get()); + + std::string genre = game.child("genre").text().get(); + size_t search = genre.find_last_of(" > "); + genre = genre.substr(search == std::string::npos ? 0 : search, std::string::npos); + mdl.back().set("genre", genre); + pugi::xml_node image = game.child("box_front"); pugi::xml_node thumbnail = game.child("box_front_small"); diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 256a6dd0d..d79ba5e6d 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -51,7 +51,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : addChild(&mLblLastPlayed); mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); addChild(&mLastPlayed); - mLblPlayCount.setText("Play count: "); + mLblPlayCount.setText("Times played: "); addChild(&mLblPlayCount); addChild(&mPlayCount); From fa8e60b7b5935bf1fc64db42e061d1fe00003cc1 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 21 Jan 2014 20:43:33 -0600 Subject: [PATCH 149/386] Changed "center" property of textlist to "alignment". TextListComponent can now be aligned either left, right, or center. --- THEMES.md | 4 +- src/ThemeData.cpp | 2 +- src/ThemeData.h | 2 +- src/components/TextComponent.cpp | 2 +- src/components/TextListComponent.h | 51 ++++++++++++++++----- src/views/gamelist/DetailedGameListView.cpp | 2 +- 6 files changed, 46 insertions(+), 17 deletions(-) diff --git a/THEMES.md b/THEMES.md index 878e01574..3dc3953f7 100644 --- a/THEMES.md +++ b/THEMES.md @@ -331,8 +331,8 @@ Can be created as an extra. - Path to a truetype font (.ttf). * `fontSize` - type: FLOAT. - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). -* `center` - type: BOOLEAN. - - If true, center the text on the x-axis. +* `alignment` - type: STRING. + - Valid values are "left", "center", or "right". Controls alignment on the X axis. #### textlist diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index e59937180..5ed8b82f8 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -36,7 +36,7 @@ std::map< std::string, std::map > T ("fontPath", PATH) ("fontSize", FLOAT) ("scrollSound", PATH) - ("center", BOOLEAN)) + ("alignment", STRING)) ("container", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR)) diff --git a/src/ThemeData.h b/src/ThemeData.h index 899926d8b..e459ec6a4 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -33,7 +33,7 @@ namespace ThemeFlags FONT_PATH = 32, FONT_SIZE = 64, SOUND = 128, - CENTER = 256, + ALIGNMENT = 256, TEXT = 512, ALL = 0xFFFFFFFF diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 4b0b00073..d89b9990a 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -172,7 +172,7 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st if(properties & COLOR && elem->has("color")) setColor(elem->get("color")); - if(properties & CENTER && elem->has("center")) + if(properties & ALIGNMENT && elem->has("center")) setCentered(elem->get("center")); if(properties & TEXT && elem->has("text")) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 4c4279a38..a9da7893b 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -48,14 +48,21 @@ public: void stopScrolling(); inline bool isScrolling() const { return mScrollDir != 0; } - inline void setCentered(bool centered) { mCentered = centered; } - enum CursorState { CURSOR_STOPPED, CURSOR_SCROLLING }; + enum Alignment + { + ALIGN_LEFT, + ALIGN_CENTER, + ALIGN_RIGHT + }; + + inline void setAlignment(Alignment align) { mAlignment = align; } + inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } inline void setFont(const std::shared_ptr& font) @@ -88,7 +95,7 @@ private: int mMarqueeOffset; int mMarqueeTime; - bool mCentered; + Alignment mAlignment; std::vector mRowVector; int mCursor; @@ -114,7 +121,7 @@ TextListComponent::TextListComponent(Window* window) : mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; - mCentered = true; + mAlignment = ALIGN_CENTER; mFont = Font::get(FONT_SIZE_MEDIUM); mSelectorColor = 0x000000FF; @@ -179,8 +186,6 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) ListRow& row = mRowVector.at((unsigned int)i); - float x = (float)(mCursor == i ? -mMarqueeOffset : 0); - unsigned int color; if(mCursor == i && mSelectedColor) color = mSelectedColor; @@ -192,10 +197,24 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) row.textCache->setColor(color); - Eigen::Vector3f offset(x, y, 0); + Eigen::Vector3f offset(0, y, 0); - if(mCentered) - offset[0] += (mSize.x() - row.textCache->metrics.size.x()) / 2; + switch(mAlignment) + { + case ALIGN_LEFT: + offset[0] = 0; + break; + case ALIGN_CENTER: + offset[0] = (mSize.x() - row.textCache->metrics.size.x()) / 2; + break; + case ALIGN_RIGHT: + offset[0] = (mSize.x() - row.textCache->metrics.size.x()); + break; + } + + if(offset[0] < 0) + offset[0] = 0; + offset[0] += (float)(mCursor == i ? -mMarqueeOffset : 0); Eigen::Affine3f drawTrans = trans; drawTrans.translate(offset); @@ -434,8 +453,18 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c if(properties & SOUND && elem->has("scrollSound")) setSound(Sound::get(elem->get("scrollSound"))); - if(properties & CENTER && elem->has("center")) - mCentered = elem->get("center"); + if(properties & ALIGNMENT && elem->has("alignment")) + { + const std::string& str = elem->get("alignment"); + if(str == "left") + setAlignment(ALIGN_LEFT); + else if(str == "center") + setAlignment(ALIGN_CENTER); + else if(str == "right") + setAlignment(ALIGN_RIGHT); + else + LOG(LogError) << "Unknown TextListComponent alignment \"" << str << "\"!"; + } } #endif diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index d79ba5e6d..522e67564 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -19,7 +19,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); mList.setSize(mSize.x() * (0.50f - 2*padding), mList.getSize().y()); - mList.setCentered(false); + mList.setAlignment(TextListComponent::ALIGN_LEFT); mList.setCursorChangedCallback([&](TextListComponent::CursorState state) { updateInfoPanel(); }); // image From ea009315e9076a8216b40d093e13c91fe48660d5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 21 Jan 2014 21:10:49 -0600 Subject: [PATCH 150/386] Added horizontal margins to textlist. Updated and corrected documentation (center -> alignment for textlist, not text!). --- THEMES.md | 10 ++++--- src/ThemeData.cpp | 3 +- src/components/TextListComponent.h | 46 +++++++++++++++++++----------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/THEMES.md b/THEMES.md index 3dc3953f7..903a385e8 100644 --- a/THEMES.md +++ b/THEMES.md @@ -331,8 +331,8 @@ Can be created as an extra. - Path to a truetype font (.ttf). * `fontSize` - type: FLOAT. - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). -* `alignment` - type: STRING. - - Valid values are "left", "center", or "right". Controls alignment on the X axis. +* `center` - type: BOOLEAN. + - True to center, false to left-align. #### textlist @@ -350,8 +350,10 @@ Can be created as an extra. * `fontSize` - type: FLOAT. * `scrollSound` - type: PATH. - Sound that is played when the list is scrolled. -* `center` - type: BOOLEAN. - - True to center, false to left-align. +* `alignment` - type: STRING. + - Valid values are "left", "center", or "right". Controls alignment on the X axis. +* `horizontalMargin` - type: FLOAT. + - Horizontal offset for text from the alignment point. If `alignment` is "left", offsets the text to the right. If `alignment` is "right", offsets text to the left. No effect if `alignment` is "center". Given as a percentage of the element's parent's width (same unit as `size`'s X value). #### ninepatch diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 5ed8b82f8..6481b1918 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -36,7 +36,8 @@ std::map< std::string, std::map > T ("fontPath", PATH) ("fontSize", FLOAT) ("scrollSound", PATH) - ("alignment", STRING)) + ("alignment", STRING) + ("horizontalMargin", FLOAT)) ("container", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR)) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index a9da7893b..fd12f1f40 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -96,6 +96,7 @@ private: int mMarqueeTime; Alignment mAlignment; + float mHorizontalMargin; std::vector mRowVector; int mCursor; @@ -121,6 +122,7 @@ TextListComponent::TextListComponent(Window* window) : mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; + mHorizontalMargin = 0; mAlignment = ALIGN_CENTER; mFont = Font::get(FONT_SIZE_MEDIUM); @@ -202,20 +204,25 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) switch(mAlignment) { case ALIGN_LEFT: - offset[0] = 0; + offset[0] = mHorizontalMargin; break; case ALIGN_CENTER: offset[0] = (mSize.x() - row.textCache->metrics.size.x()) / 2; + if(offset[0] < 0) + offset[0] = 0; break; case ALIGN_RIGHT: offset[0] = (mSize.x() - row.textCache->metrics.size.x()); + offset[0] -= mHorizontalMargin; + if(offset[0] < 0) + offset[0] = 0; + break; } - if(offset[0] < 0) - offset[0] = 0; - offset[0] += (float)(mCursor == i ? -mMarqueeOffset : 0); - + if(mCursor == i) + offset[0] -= mMarqueeOffset; + Eigen::Affine3f drawTrans = trans; drawTrans.translate(offset); Renderer::setMatrix(drawTrans); @@ -312,7 +319,7 @@ void TextListComponent::update(int deltaTime) Eigen::Vector2f textSize = mFont->sizeText(text); //it's long enough to marquee - if(textSize.x() - mMarqueeOffset > getSize().x() - 12) + if(textSize.x() - mMarqueeOffset > getSize().x() - 12 - (mAlignment != ALIGN_CENTER ? mHorizontalMargin : 0)) { mMarqueeTime += deltaTime; while(mMarqueeTime > MARQUEE_SPEED) @@ -453,17 +460,24 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c if(properties & SOUND && elem->has("scrollSound")) setSound(Sound::get(elem->get("scrollSound"))); - if(properties & ALIGNMENT && elem->has("alignment")) + if(properties & ALIGNMENT) { - const std::string& str = elem->get("alignment"); - if(str == "left") - setAlignment(ALIGN_LEFT); - else if(str == "center") - setAlignment(ALIGN_CENTER); - else if(str == "right") - setAlignment(ALIGN_RIGHT); - else - LOG(LogError) << "Unknown TextListComponent alignment \"" << str << "\"!"; + if(elem->has("alignment")) + { + const std::string& str = elem->get("alignment"); + if(str == "left") + setAlignment(ALIGN_LEFT); + else if(str == "center") + setAlignment(ALIGN_CENTER); + else if(str == "right") + setAlignment(ALIGN_RIGHT); + else + LOG(LogError) << "Unknown TextListComponent alignment \"" << str << "\"!"; + } + if(elem->has("horizontalMargin")) + { + mHorizontalMargin = elem->get("horizontalMargin") * (mParent ? mParent->getSize().x() : (float)Renderer::getScreenWidth()); + } } } From dd0c37ac2370aacbd845b6608858c461b11b69a6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 22 Jan 2014 17:12:38 -0600 Subject: [PATCH 151/386] Fix DateTimeComponent relative display for days. --- src/components/DateTimeComponent.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index 41d299dd8..3bfc884e8 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -213,7 +213,8 @@ std::string DateTimeComponent::getDisplayString(DisplayMode mode) const if(dur < hours(24)) return std::to_string((long long)dur.hours()) + " hour" + (dur < hours(2) ? "" : "s") + " ago"; - return std::to_string((long long)(ptime() + dur).date().day_count().as_number()); + long long days = (long long)(dur.hours() / 24); + return std::to_string(days) + " day" + (days < 2 ? "" : "s") + " ago"; } break; } From 305e91c9f8fb88453419412cdbef04fee7f50ee4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 22 Jan 2014 17:40:31 -0600 Subject: [PATCH 152/386] Fixed detailed view launch animation targetting wrong point when game image is not at origin 0.5 0.5. Tweaked launch animation to zoom a little faster so that images that the camera doesn't overstep the bounds of the UI when the image is closer to the edge. --- src/animations/LaunchAnimation.h | 2 +- src/views/gamelist/DetailedGameListView.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/animations/LaunchAnimation.h b/src/animations/LaunchAnimation.h index 3072a5f37..11dc29ce6 100644 --- a/src/animations/LaunchAnimation.h +++ b/src/animations/LaunchAnimation.h @@ -40,7 +40,7 @@ public: { cameraOut = Eigen::Affine3f::Identity(); - float zoom = lerp(1.0, 3.0, t*t); + float zoom = lerp(1.0, 4.25f, t*t); cameraOut.scale(Eigen::Vector3f(zoom, zoom, 1)); const float sw = (float)Renderer::getScreenWidth() / zoom; diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 522e67564..0717a4281 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -205,7 +205,7 @@ void DetailedGameListView::launch(FileData* game) { Eigen::Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); if(mImage.hasImage()) - target = mImage.getPosition(); + target << mImage.getCenter().x(), mImage.getCenter().y(), 0; mWindow->getViewController()->launch(game, target); } From 8eb980012799ec141c803e90c2bb10da4cdd4b51 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 23 Jan 2014 15:30:32 -0600 Subject: [PATCH 153/386] Added color tag to ImageComponent (for colorshift). Changed TextComponent's truncation from ".." to "...". Updated documentation. --- README.md | 13 ++++++++----- THEMES.md | 7 ++++++- src/ThemeData.cpp | 3 ++- src/components/ImageComponent.cpp | 3 +++ src/components/TextComponent.cpp | 2 +- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 150cc64f2..ab63d066f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ I found a bug! I have a problem! - First, try to check the [issue list](https://github.com/Aloshi/EmulationStation/issues?state=open) for some entries that might match your problem. Make sure to check closed issues too! - If you're running EmulationStation on a on Raspberry Pi and have problems with config file changes not taking effect, content missing after editing, etc., check if your SD card is corrupted (see issues [#78](https://github.com/Aloshi/EmulationStation/issues/78) and [#107](https://github.com/Aloshi/EmulationStation/issues/107)). You can do this with free tools like [h2testw](http://www.heise.de/download/h2testw.html) or [F3](http://oss.digirati.com.br/f3/). - Try to update to the latest version of EmulationStation using git (you might need to delete your `es_input.cfg` and `es_settings.cfg` after that to reset them to default values): -``` +```bash cd EmulationStation git pull export CXX=g++-4.7 @@ -31,12 +31,12 @@ EmulationStation has a few dependencies. For building, you'll need SDL2, Boost ( **On Linux:** All of this be easily installed with apt-get: -``` +```bash sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl-dev ttf-dejavu libasound2-dev ``` Unless you're on the Raspberry Pi, you'll also need OpenGL: -``` +```bash sudo apt-get install libgl1-mesa-dev ``` @@ -121,7 +121,7 @@ The order EmulationStation displays systems reflects the order you define them i Here's an example es_systems.cfg: -``` +```xml @@ -144,6 +144,9 @@ All systems must be contained within the tag.--> snesemulator %ROM% + + + 42 ``` @@ -165,7 +168,7 @@ The gamelist.xml for a system defines metadata for a system's games, such as a n If a file named gamelist.xml is found in the root of a system's search directory OR within `~/.emulationstation/%NAME%/`, game metadata will be loaded from it. This allows you to define images, descriptions, and different names for files. Note that only standard ASCII characters are supported for text (if you see a weird [X] symbol, you're probably using unicode!). Images will be automatically resized to fit within the left column of the screen. Smaller images will load faster, so try to keep your resolution low. An example gamelist.xml: -``` +```xml /home/pi/ROMs/nes/mm2.nes diff --git a/THEMES.md b/THEMES.md index 903a385e8..f708c9a62 100644 --- a/THEMES.md +++ b/THEMES.md @@ -317,6 +317,8 @@ Can be created as an extra. - Path to the image file. Most common extensions are supported (including .jpg, .png, and unanimated .gif). * `tile` - type: BOOLEAN. - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. +* `color` - type: COLOR. + - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. #### text @@ -324,7 +326,10 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. - - You should only set this if you want your text to behave like a "textbox" - that is, your text is multi-line and should wrap. + - Possible combinations: + - `0 0` - automatically size so text fits on one line (expanding horizontally). + - `w 0` - automatically wrap text so it doesn't go beyond `w` (expanding vertically). + - `w h` - works like a "text box." If `h` is non-zero and `h` <= `fontSize` (implying it should be a single line of text), text that goes beyond `w` will be truncated with an elipses (...). * `text` - type: STRING. * `color` - type: COLOR. * `fontPath` - type: PATH. diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 6481b1918..08f3b9244 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -17,7 +17,8 @@ std::map< std::string, std::map > T ("maxSize", NORMALIZED_PAIR) ("origin", NORMALIZED_PAIR) ("path", PATH) - ("tile", BOOLEAN)) + ("tile", BOOLEAN) + ("color", COLOR)) ("text", boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 8d6b68d15..abb37134a 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -279,4 +279,7 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s bool tile = (elem->has("tile") && elem->get("tile")); setImage(elem->get("path"), tile); } + + if(properties & COLOR && elem->has("color")) + setColorShift(elem->get("color")); } diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index d89b9990a..83b073c64 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -123,7 +123,7 @@ void TextComponent::onTextChanged() if(!wrap && mSize.x() && mText.size() && size.x() > mSize.x()) { // abbreviate text - const std::string abbrev = ".."; + const std::string abbrev = "..."; Eigen::Vector2f abbrevSize = f->sizeText(abbrev); std::string text = mText; From 3ceeca968fe3c6ac5414ea10a543c925c2a266ef Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 24 Jan 2014 16:21:10 -0600 Subject: [PATCH 154/386] Updated/added comments. --- src/ThemeData.h | 2 -- src/animations/LambdaAnimation.h | 1 + src/components/AsyncReqComponent.h | 30 ++++++++++--------- src/components/DateTimeComponent.h | 11 +++++-- src/components/ImageComponent.cpp | 6 +--- src/components/ImageComponent.h | 45 ++++++++++++++++++++--------- src/components/NinePatchComponent.h | 15 ++++++++-- src/components/RatingComponent.h | 11 +++++-- src/components/SliderComponent.h | 1 + src/components/SwitchComponent.h | 2 ++ src/components/TextComponent.h | 7 ++++- src/components/TextEditComponent.h | 1 + src/platform.h | 2 +- src/resources/Font.h | 4 +++ src/resources/TextureResource.h | 3 ++ src/views/ViewController.h | 1 + src/views/gamelist/IGameListView.h | 5 +--- 17 files changed, 101 insertions(+), 46 deletions(-) diff --git a/src/ThemeData.h b/src/ThemeData.h index e459ec6a4..19743636f 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -124,8 +124,6 @@ public: BOOLEAN }; - void renderExtras(const std::string& view, Window* window, const Eigen::Affine3f& transform); - // If expectedType is an empty string, will do no type checking. const ThemeElement* getElement(const std::string& view, const std::string& element, const std::string& expectedType) const; diff --git a/src/animations/LambdaAnimation.h b/src/animations/LambdaAnimation.h index d3888c2f1..27c5c1dc3 100644 --- a/src/animations/LambdaAnimation.h +++ b/src/animations/LambdaAnimation.h @@ -2,6 +2,7 @@ #include "Animation.h" +// Useful for simple one-off animations, you can supply the animation's apply(t) method right in the constructor as a lambda. class LambdaAnimation : public Animation { public: diff --git a/src/components/AsyncReqComponent.h b/src/components/AsyncReqComponent.h index dd7417b0a..a239ad3f9 100644 --- a/src/components/AsyncReqComponent.h +++ b/src/components/AsyncReqComponent.h @@ -5,20 +5,24 @@ #include #include -/* Usage example: - std::shared_ptr httpreq = std::make_shared("cdn.garcya.us", "/wp-content/uploads/2010/04/TD250.jpg"); - AsyncReqComponent* req = new AsyncReqComponent(mWindow, httpreq, - [] (std::shared_ptr r) - { - LOG(LogInfo) << "Request completed"; - LOG(LogInfo) << " error, if any: " << r->getErrorMsg(); - }, [] () - { - LOG(LogInfo) << "Request canceled"; - }); +/* + Used to asynchronously run an HTTP request. + Displays a simple animation on the UI to show the application hasn't frozen. Can be canceled by the user pressing B. - mWindow->pushGui(req); - //we can forget about req, since it will always delete itself + Usage example: + std::shared_ptr httpreq = std::make_shared("cdn.garcya.us", "/wp-content/uploads/2010/04/TD250.jpg"); + AsyncReqComponent* req = new AsyncReqComponent(mWindow, httpreq, + [] (std::shared_ptr r) + { + LOG(LogInfo) << "Request completed"; + LOG(LogInfo) << " error, if any: " << r->getErrorMsg(); + }, [] () + { + LOG(LogInfo) << "Request canceled"; + }); + + mWindow->pushGui(req); + //we can forget about req, since it will always delete itself */ class AsyncReqComponent : public GuiComponent diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index 13b5a5424..0fd5274fc 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -4,9 +4,11 @@ #include #include "../resources/Font.h" +// Used to enter or display a specific point in time. class DateTimeComponent : public GuiComponent { public: + // Display mode will initialize to DISP_DATE. DateTimeComponent(Window* window); void setValue(const std::string& val) override; @@ -23,10 +25,15 @@ public: DISP_RELATIVE_TO_NOW }; + // Set how the point in time will be displayed: + // * DISP_DATE - only display the date. + // * DISP_DATE_TIME - display both the date and the time on that date. + // * DISP_RELATIVE_TO_NOW - intelligently display the point in time relative to right now (e.g. "5 secs ago", "3 minutes ago", "1 day ago". Automatically updates as time marches on. + // The initial value is DISP_DATE. void setDisplayMode(DisplayMode mode); - void setColor(unsigned int color); - void setFont(std::shared_ptr font); + void setColor(unsigned int color); // Text color. + void setFont(std::shared_ptr font); // Font to display with. Default is Font::get(FONT_SIZE_MEDIUM). virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index abb37134a..cb5c32723 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -20,13 +20,9 @@ Eigen::Vector2f ImageComponent::getCenter() const mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } -ImageComponent::ImageComponent(Window* window, const Eigen::Vector2f& pos, const std::string& path) : GuiComponent(window), +ImageComponent::ImageComponent(Window* window) : GuiComponent(window), mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) { - setPosition(pos.x(), pos.y()); - - if(!path.empty()) - setImage(path); } ImageComponent::~ImageComponent() diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index be17ac0cc..2e7b8576b 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -12,29 +12,43 @@ class ImageComponent : public GuiComponent { public: - //Creates a new GuiImage at the given location. If given an image, it will be loaded. If maxWidth and/or maxHeight are nonzero, the image will be - //resized to fit. If only one axis is specified, the other will be set in accordance with the image's aspect ratio. If allowUpscale is false, - //the image will only be downscaled, never upscaled (the image's size must surpass at least one nonzero bound). - ImageComponent(Window* window, const Eigen::Vector2f& pos = Eigen::Vector2f::Zero(), const std::string& path = ""); + ImageComponent(Window* window); virtual ~ImageComponent(); - void setImage(std::string path, bool tile = false); //Loads the image at the given filepath. - void setImage(const char* image, size_t length, bool tile = false); //Loads image from memory. - void setImage(const std::shared_ptr& texture); //Use an already existing texture. - void setOrigin(float originX, float originY); //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) + //Loads the image at the given filepath. Will tile if tile is true (retrieves texture as tiling, creates vertices accordingly). + void setImage(std::string path, bool tile = false); + //Loads an image from memory. + void setImage(const char* image, size_t length, bool tile = false); + //Use an already existing texture. + void setImage(const std::shared_ptr& texture); + + //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) + void setOrigin(float originX, float originY); inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } + + // Resize the image to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. + // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. + // Can be set before or after an image is loaded. + // setMaxSize() and setResize() are mutually exclusive. void setResize(float width, float height); inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } + + // Resize the image to be as large as possible but fit within a box of this size. + // Can be set before or after an image is loaded. + // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. void setMaxSize(float width, float height); inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } + + // Multiply all pixels in the image by this color when rendering. void setColorShift(unsigned int color); - void setFlipX(bool flip); - void setFlipY(bool flip); + void setFlipX(bool flip); // Mirror on the X axis. + void setFlipY(bool flip); // Mirror on the Y axis. - //You can get the rendered size of the ImageComponent with getSize(). + // Returns the size of the current texture, or (0, 0) if none is loaded. May be different than drawn size (use getSize() for that). Eigen::Vector2i getTextureSize() const; + // Returns the center point of the image (takes origin into account). Eigen::Vector2f getCenter() const; bool hasImage(); @@ -49,9 +63,14 @@ private: bool mFlipX, mFlipY, mTargetIsMax; + // Calculates the correct mSize from our resizing information (set by setResize/setMaxSize). + // Used internally whenever the resizing parameters or texture change. void resize(); - void buildImageArray(int x, int y, GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); //writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position - void drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* colors, unsigned int count = 6); //draws the given set of points and texture coordinates, number of coordinate pairs may be specified (default 6) + + // Writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position. + void buildImageArray(int x, int y, GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); + // Draws the given set of points and texture coordinates, number of coordinate pairs may be specified. + void drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* colors, unsigned int count = 6); unsigned int mColorShift; diff --git a/src/components/NinePatchComponent.h b/src/components/NinePatchComponent.h index 471490cd4..aebbcd1eb 100644 --- a/src/components/NinePatchComponent.h +++ b/src/components/NinePatchComponent.h @@ -3,6 +3,17 @@ #include "../GuiComponent.h" #include "../resources/TextureResource.h" +// Display an image in a way so that edges don't get too distorted no matter the final size. Useful for UI elements like backgrounds, buttons, etc. +// This is accomplished by splitting an image into 9 pieces: +// ___________ +// |_1_|_2_|_3_| +// |_4_|_5_|_6_| +// |_7_|_8_|_9_| + +// Corners (1, 3, 7, 9) will not be stretched at all. +// Borders (2, 4, 6, 8) will be stretched along one axis (2 and 8 horizontally, 4 and 6 vertically). +// The center (5) will be stretched. + class NinePatchComponent : public GuiComponent { public: @@ -15,8 +26,8 @@ public: void fitTo(Eigen::Vector2f size, Eigen::Vector3f position = Eigen::Vector3f::Zero(), Eigen::Vector2f padding = Eigen::Vector2f::Zero()); void setImagePath(const std::string& path); - void setEdgeColor(unsigned int edgeColor); - void setCenterColor(unsigned int centerColor); + void setEdgeColor(unsigned int edgeColor); // Apply a color shift to the "edge" parts of the ninepatch. + void setCenterColor(unsigned int centerColor); // Apply a color shift to the "center" part of the ninepatch. virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; diff --git a/src/components/RatingComponent.h b/src/components/RatingComponent.h index 5a40e741b..4b5da45c2 100644 --- a/src/components/RatingComponent.h +++ b/src/components/RatingComponent.h @@ -3,13 +3,18 @@ #include "../GuiComponent.h" #include "../resources/TextureResource.h" +// Used to visually display/edit some sort of "score" - e.g. 5/10, 3/5, etc. +// setSize(x, y) works a little differently than you might expect: +// * (0, y != 0) - x will be automatically calculated (5*y). +// * (x != 0, 0) - y will be automatically calculated (x/5). +// * (x != 0, y != 0) - you better be sure x = y*5 class RatingComponent : public GuiComponent { public: RatingComponent(Window* window); std::string getValue() const override; - void setValue(const std::string& value) override; + void setValue(const std::string& value) override; // Should be a normalized float (in the range [0..1]) - if it's not, it will be clamped. bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans); @@ -29,7 +34,7 @@ private: Eigen::Vector2f tex; } mVertices[12]; - std::shared_ptr mFilledTexture; - std::shared_ptr mUnfilledTexture; + std::shared_ptr mFilledTexture; // Must be square (width == height)! + std::shared_ptr mUnfilledTexture; // Must be square (width == height)! }; diff --git a/src/components/SliderComponent.h b/src/components/SliderComponent.h index d39ef6cbf..b5e82c5f7 100644 --- a/src/components/SliderComponent.h +++ b/src/components/SliderComponent.h @@ -5,6 +5,7 @@ class TextCache; class Font; +// Used to display/edit a value between some min and max values. class SliderComponent : public GuiComponent { public: diff --git a/src/components/SwitchComponent.h b/src/components/SwitchComponent.h index 13ab441fb..b3fcaac05 100644 --- a/src/components/SwitchComponent.h +++ b/src/components/SwitchComponent.h @@ -2,6 +2,8 @@ #include "../GuiComponent.h" +// A very simple "on/off" switch. +// Should hopefully be switched to use images instead of text in the future. class SwitchComponent : public GuiComponent { public: diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index e9906f67b..ad786d548 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -6,6 +6,11 @@ class ThemeData; +// Used to display text. +// TextComponent::setSize(x, y) works a little differently than most components: +// * (0, 0) - will automatically calculate a size that fits the text on one line (expand horizontally) +// * (x != 0, 0) - wrap text so that it does not reach beyond x. Will automatically calculate a vertical size (expand vertically). +// * (x != 0, y <= fontHeight) - will truncate text so it fits within this box. class TextComponent : public GuiComponent { public: @@ -16,7 +21,7 @@ public: void onSizeChanged() override; void setText(const std::string& text); void setColor(unsigned int color); - void setCentered(bool center); //Default is uncentered. + void setCentered(bool center); // Will horizontally center text. Default is false. void render(const Eigen::Affine3f& parentTrans) override; diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index d9117597a..9746ca95f 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -6,6 +6,7 @@ class Font; class TextCache; +// Used to enter text. class TextEditComponent : public GuiComponent { public: diff --git a/src/platform.h b/src/platform.h index 011d7b81a..a0bb68251 100644 --- a/src/platform.h +++ b/src/platform.h @@ -1,4 +1,4 @@ -//the Makefiles define these via command line +//the Makefile defines one of these: //#define USE_OPENGL_ES //#define USE_OPENGL_DESKTOP diff --git a/src/resources/Font.h b/src/resources/Font.h index 8cc3f501b..a9a1d3e82 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -98,6 +98,10 @@ private: const std::string mPath; }; +// Used to store a sort of "pre-rendered" string. +// When a TextCache is constructed (Font::buildTextCache()), the vertices and texture coordinates of the string are calculated and stored in the TextCache object. +// Rendering a TextCache (Font::renderTextCache) every frame is MUCH faster than calling Font::drawText() and its variants. +// Keep in mind you still need the Font object to render a TextCache (as the Font holds the OpenGL texture), and if a Font changes your TextCache may become invalid. class TextCache { public: diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index 64f4036b6..2ec75e43f 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -7,6 +7,8 @@ #include "../platform.h" #include GLHEADER +// An OpenGL texture. +// Automatically recreates the texture with renderer deinit/reinit. class TextureResource : public IReloadable { public: @@ -21,6 +23,7 @@ public: Eigen::Vector2i getSize() const; void bind() const; + // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). void initFromMemory(const char* image, size_t length); private: diff --git a/src/views/ViewController.h b/src/views/ViewController.h index b2225275e..fdb6332d1 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -5,6 +5,7 @@ class SystemData; +// Used to smoothly transition the camera between multiple views (e.g. from system to system, from gamelist to gamelist). class ViewController : public GuiComponent { public: diff --git a/src/views/gamelist/IGameListView.h b/src/views/gamelist/IGameListView.h index a2ec8b5ab..b2229dfd7 100644 --- a/src/views/gamelist/IGameListView.h +++ b/src/views/gamelist/IGameListView.h @@ -8,10 +8,7 @@ class GuiComponent; class FileData; class ThemeData; -//IGameListView needs to know: -// What theme data to use -// The root FileData for the tree it should explore - +// This is an interface that defines the minimum for a GameListView. class IGameListView : public GuiComponent { public: From 253ea2b5d3debc6d3a1b20a82248c7ac2822e4eb Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 24 Jan 2014 18:10:13 -0600 Subject: [PATCH 155/386] Metadata now fades out while scrolling. TextListComponent::isScrolling() now only returns true if the key has been held down long enough for scrolling to really start. Fixed opacity for RatingComponent and DateTimeComponent. Exposed some more of AnimationController. --- src/GuiComponent.cpp | 17 +++++++++++ src/GuiComponent.h | 3 ++ src/animations/AnimationController.h | 3 ++ src/components/DateTimeComponent.cpp | 2 ++ src/components/RatingComponent.cpp | 4 +++ src/components/TextListComponent.h | 2 +- src/views/gamelist/DetailedGameListView.cpp | 32 +++++++++++++++++++-- 7 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 8cea223d5..816a09234 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -227,6 +227,23 @@ void GuiComponent::stopAnimation(unsigned char slot) } } +bool GuiComponent::isAnimationPlaying(unsigned char slot) const +{ + return mAnimationMap[slot] != NULL; +} + +bool GuiComponent::isAnimationReversed(unsigned char slot) const +{ + assert(mAnimationMap[slot] != NULL); + return mAnimationMap[slot]->isReversed(); +} + +int GuiComponent::getAnimationTime(unsigned char slot) const +{ + assert(mAnimationMap[slot] != NULL); + return mAnimationMap[slot]->getTime(); +} + void GuiComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); diff --git a/src/GuiComponent.h b/src/GuiComponent.h index 63aedd43c..0a0276638 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -53,6 +53,9 @@ public: GuiComponent* getChild(unsigned int i) const; // animation will be automatically deleted when it completes or is stopped. + bool isAnimationPlaying(unsigned char slot) const; + bool isAnimationReversed(unsigned char slot) const; + int getAnimationTime(unsigned char slot) const; void setAnimation(Animation* animation, std::function finishedCallback = nullptr, bool reverse = false, unsigned char slot = 0); void stopAnimation(unsigned char slot); diff --git a/src/animations/AnimationController.h b/src/animations/AnimationController.h index de28f62a5..91a086b9b 100644 --- a/src/animations/AnimationController.h +++ b/src/animations/AnimationController.h @@ -15,6 +15,9 @@ public: // Returns true if the animation is complete. bool update(int deltaTime); + inline bool isReversed() const { return mReverse; } + inline int getTime() const { return mTime; } + private: Animation* mAnimation; std::function mFinishedCallback; diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index 3bfc884e8..a705612ac 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -142,6 +142,8 @@ void DateTimeComponent::render(const Eigen::Affine3f& parentTrans) if(mTextCache) { std::shared_ptr font = getFont(); + + mTextCache->setColor((mColor & 0xFFFFFF00) | getOpacity()); font->renderTextCache(mTextCache.get()); if(mEditing) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index a3f061fbb..f52baaf61 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -82,6 +82,8 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4ub(255, 255, 255, getOpacity()); + glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); @@ -100,6 +102,8 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); + glColor4ub(255, 255, 255, 255); + renderChildren(trans); } diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index fd12f1f40..b3f23f1b9 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -46,7 +46,7 @@ public: void setCursor(typename std::vector::const_iterator& it); void stopScrolling(); - inline bool isScrolling() const { return mScrollDir != 0; } + inline bool isScrolling() const { return mScrollDir != 0 && mScrollAccumulator >= 0; } enum CursorState { diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 0717a4281..7eefa51c9 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -1,6 +1,7 @@ #include "DetailedGameListView.h" #include "../../Window.h" #include "../ViewController.h" +#include "../../animations/LambdaAnimation.h" DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), @@ -180,10 +181,12 @@ void DetailedGameListView::updateInfoPanel() { FileData* file = (mList.getList().size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); + bool fadingOut; if(file == NULL) { - mImage.setImage(""); - mDescription.setText(""); + //mImage.setImage(""); + //mDescription.setText(""); + fadingOut = true; }else{ mImage.setImage(file->metadata.get("image")); mRating.setValue(file->metadata.get("rating")); @@ -198,6 +201,31 @@ void DetailedGameListView::updateInfoPanel() mDescription.setText(file->metadata.get("desc")); mDescContainer.resetAutoScrollTimer(); mDescContainer.setScrollPos(Eigen::Vector2d(0, 0)); + fadingOut = false; + } + + std::vector comps = getMDValues(); + comps.push_back(&mImage); + comps.push_back(&mDescription); + std::vector labels = getMDLabels(); + comps.insert(comps.end(), labels.begin(), labels.end()); + + for(auto it = comps.begin(); it != comps.end(); it++) + { + GuiComponent* comp = *it; + // an animation is playing + // then animate if reverse != fadingOut + // an animation is not playing + // then animate if opacity != our target opacity + if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || + (!comp->isAnimationPlaying(0) && comp->getOpacity() != (fadingOut ? 0 : 255))) + { + auto func = [comp](float t) + { + comp->setOpacity((unsigned char)(lerp(0.0f, 1.0f, t)*255)); + }; + comp->setAnimation(new LambdaAnimation(func, 150), nullptr, fadingOut); + } } } From 420dc912e0a4df5d9b1b62d69eff8e4d1206833f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 24 Jan 2014 18:29:53 -0600 Subject: [PATCH 156/386] If no keyboard input config is found, load a default. (Previously would only load the keyboard default if *no* input configs were found.) --- src/InputManager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 6ab7e4e58..ee24ccc01 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -228,6 +228,7 @@ void InputManager::loadConfig() pugi::xml_node root = doc.child("inputList"); + bool loadedKeyboard = false; for(pugi::xml_node node = root.child("inputConfig"); node; node = node.next_sibling("inputConfig")) { std::string type = node.attribute("type").as_string(); @@ -235,6 +236,7 @@ void InputManager::loadConfig() if(type == "keyboard") { getInputConfigByDevice(DEVICE_KEYBOARD)->loadFromXML(node, mNumPlayers); + loadedKeyboard = true; mNumPlayers++; }else if(type == "joystick") { @@ -265,9 +267,9 @@ void InputManager::loadConfig() delete[] configuredDevice; - if(mNumPlayers == 0) + if(!loadedKeyboard) { - LOG(LogInfo) << "No input configs loaded. Loading default keyboard config."; + LOG(LogInfo) << "No keyboard input found. Loading default keyboard config."; loadDefaultConfig(); } From 612b196b111aab89612a4941b5b18c44fc7fdcbc Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 24 Jan 2014 19:25:15 -0600 Subject: [PATCH 157/386] Added the ability to theme multiple elements of the same type simultaneously. --- THEMES.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++ src/ThemeData.cpp | 25 +++++++++++++++------- 2 files changed, 71 insertions(+), 8 deletions(-) diff --git a/THEMES.md b/THEMES.md index f708c9a62..f062f07a2 100644 --- a/THEMES.md +++ b/THEMES.md @@ -179,6 +179,60 @@ Notice that you can still override the "common" view in a specific view definiti You probably should not use the "common" view for element positioning. You also should not use it to create "extra" elements. + +### Theming more than one elements at once + +You can theme multiple elements *of the same type* simultaneously. The `name` attribute actually works as a list (delimited by any characters of ` \t\n,` - that is, whitespace and commas). This is useful if you want to, say, apply the same color to all the metadata labels: + +```xml + + 3 + + + + 48474D + + + +``` + +Is equivalent to: +```xml + + 3 + + + 48474D + + + 48474D + + + 48474D + + + 48474D + + + 48474D + + + 48474D + + + 48474D + + + 48474D + + + +``` + +Just remember, *this only works if the elements have the same type!* + + Reference ========= diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 08f3b9244..6182499c0 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -222,13 +222,22 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) if(elemTypeIt == sElementMap.end()) throw error << "Unknown element of type \"" << node.name() << "\"!"; - const char* elemKey = node.attribute("name").as_string(); + const char* delim = " \t\n,"; + const std::string nameAttr = node.attribute("name").as_string(); + size_t prevOff = nameAttr.find_first_not_of(delim, 0); + size_t off = nameAttr.find_first_of(delim, prevOff); + while(off != std::string::npos || prevOff != std::string::npos) + { + std::string elemKey = nameAttr.substr(prevOff, off - prevOff); + prevOff = nameAttr.find_first_not_of(delim, off); + off = nameAttr.find_first_of(delim, prevOff); + + parseElement(node, elemTypeIt->second, + view.elements.insert(std::make_pair(elemKey, ThemeElement())).first->second); - parseElement(node, elemTypeIt->second, - view.elements.insert(std::make_pair(elemKey, ThemeElement())).first->second); - - if(std::find(view.orderedKeys.begin(), view.orderedKeys.end(), elemKey) == view.orderedKeys.end()) - view.orderedKeys.push_back(elemKey); + if(std::find(view.orderedKeys.begin(), view.orderedKeys.end(), elemKey) == view.orderedKeys.end()) + view.orderedKeys.push_back(elemKey); + } } } @@ -255,7 +264,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::map Date: Fri, 24 Jan 2014 19:27:11 -0600 Subject: [PATCH 158/386] Fixed some formatting. --- THEMES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/THEMES.md b/THEMES.md index f062f07a2..dfaec05b9 100644 --- a/THEMES.md +++ b/THEMES.md @@ -182,13 +182,13 @@ You probably should not use the "common" view for element positioning. You also ### Theming more than one elements at once -You can theme multiple elements *of the same type* simultaneously. The `name` attribute actually works as a list (delimited by any characters of ` \t\n,` - that is, whitespace and commas). This is useful if you want to, say, apply the same color to all the metadata labels: +You can theme multiple elements *of the same type* simultaneously. The `name` attribute actually works as a list (delimited by any characters of `\t\n ,` - that is, whitespace and commas). This is useful if you want to, say, apply the same color to all the metadata labels: ```xml 3 - + 48474D From 4ef5f64ff3f3793ce42458d49a4ad76d563f7bc1 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 25 Jan 2014 17:34:29 -0600 Subject: [PATCH 159/386] Added on-screen help system. Very intrusive right now. You can turn it off in the Settings menu until that gets worked out. --- CMakeLists.txt | 8 + data/ResourceUtil.cpp | 18 +- data/Resources.h | 18 ++ data/converted/help_a_png.cpp | 371 +++++++++++++++++++++ data/converted/help_b_png.cpp | 378 ++++++++++++++++++++++ data/converted/help_dpad_png.cpp | 367 +++++++++++++++++++++ data/converted/help_left_right_png.cpp | 336 +++++++++++++++++++ data/converted/help_menu_png.cpp | 351 ++++++++++++++++++++ data/converted/help_up_down_png.cpp | 337 +++++++++++++++++++ data/resources/help/a.png | Bin 0 -> 3635 bytes data/resources/help/b.png | Bin 0 -> 3708 bytes data/resources/help/dpad.png | Bin 0 -> 3592 bytes data/resources/help/left_right.png | Bin 0 -> 3288 bytes data/resources/help/menu.png | Bin 0 -> 3431 bytes data/resources/help/up_down.png | Bin 0 -> 3292 bytes src/GuiComponent.cpp | 14 + src/GuiComponent.h | 8 + src/Settings.cpp | 1 + src/Window.cpp | 31 +- src/Window.h | 4 + src/components/AsyncReqComponent.cpp | 7 + src/components/AsyncReqComponent.h | 1 + src/components/ButtonComponent.cpp | 12 +- src/components/ButtonComponent.h | 5 +- src/components/ComponentListComponent.cpp | 36 +++ src/components/ComponentListComponent.h | 2 + src/components/GuiGameScraper.cpp | 29 +- src/components/GuiGameScraper.h | 3 + src/components/GuiMetaDataEd.cpp | 13 +- src/components/GuiMetaDataEd.h | 2 + src/components/GuiScraperStart.cpp | 9 +- src/components/GuiScraperStart.h | 2 + src/components/GuiSettingsMenu.cpp | 28 +- src/components/GuiSettingsMenu.h | 3 + src/components/HelpComponent.cpp | 92 ++++++ src/components/HelpComponent.h | 33 ++ src/components/RatingComponent.cpp | 7 + src/components/RatingComponent.h | 2 + src/components/SliderComponent.cpp | 7 + src/components/SliderComponent.h | 2 + src/components/SwitchComponent.cpp | 7 + src/components/SwitchComponent.h | 2 + src/components/TextEditComponent.cpp | 20 +- src/components/TextEditComponent.h | 2 + src/views/SystemView.cpp | 7 + src/views/SystemView.h | 2 + src/views/ViewController.cpp | 14 + src/views/ViewController.h | 2 + src/views/gamelist/BasicGameListView.cpp | 10 + src/views/gamelist/BasicGameListView.h | 2 + src/views/gamelist/GridGameListView.cpp | 9 + src/views/gamelist/GridGameListView.h | 2 + 52 files changed, 2590 insertions(+), 26 deletions(-) create mode 100644 data/converted/help_a_png.cpp create mode 100644 data/converted/help_b_png.cpp create mode 100644 data/converted/help_dpad_png.cpp create mode 100644 data/converted/help_left_right_png.cpp create mode 100644 data/converted/help_menu_png.cpp create mode 100644 data/converted/help_up_down_png.cpp create mode 100644 data/resources/help/a.png create mode 100644 data/resources/help/b.png create mode 100644 data/resources/help/dpad.png create mode 100644 data/resources/help/left_right.png create mode 100644 data/resources/help/menu.png create mode 100644 data/resources/help/up_down.png create mode 100644 src/components/HelpComponent.cpp create mode 100644 src/components/HelpComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e740736c..0a5088342 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,6 +164,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h @@ -243,6 +244,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp @@ -292,6 +294,12 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_glow_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_a_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_b_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_menu_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_up_down_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_left_right_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 2364250b1..66c0b55a8 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 8; +const size_t res2hNrOfFiles = 14; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/button.png", button_png_size, button_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, @@ -11,7 +11,13 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/star_filled.png", star_filled_png_size, star_filled_png_data}, {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, {":/textbox.png", textbox_png_size, textbox_png_data}, - {":/textbox_glow.png", textbox_glow_png_size, textbox_glow_png_data} + {":/textbox_glow.png", textbox_glow_png_size, textbox_glow_png_data}, + {":/help/a.png", help_a_png_size, help_a_png_data}, + {":/help/b.png", help_b_png_size, help_b_png_data}, + {":/help/dpad.png", help_dpad_png_size, help_dpad_png_data}, + {":/help/left_right.png", help_left_right_png_size, help_left_right_png_data}, + {":/help/menu.png", help_menu_png_size, help_menu_png_data}, + {":/help/up_down.png", help_up_down_png_size, help_up_down_png_data} }; res2hMapType::value_type mapTemp[] = { @@ -22,7 +28,13 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/star_filled.png", res2hFiles[4]), std::make_pair(":/star_unfilled.png", res2hFiles[5]), std::make_pair(":/textbox.png", res2hFiles[6]), - std::make_pair(":/textbox_glow.png", res2hFiles[7]) + std::make_pair(":/textbox_glow.png", res2hFiles[7]), + std::make_pair(":/help/a.png", res2hFiles[8]), + std::make_pair(":/help/b.png", res2hFiles[9]), + std::make_pair(":/help/dpad.png", res2hFiles[10]), + std::make_pair(":/help/left_right.png", res2hFiles[11]), + std::make_pair(":/help/menu.png", res2hFiles[12]), + std::make_pair(":/help/up_down.png", res2hFiles[13]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index efc90b41b..76e620430 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -29,6 +29,24 @@ extern const unsigned char textbox_png_data[]; extern const size_t textbox_glow_png_size; extern const unsigned char textbox_glow_png_data[]; +extern const size_t help_a_png_size; +extern const unsigned char help_a_png_data[]; + +extern const size_t help_b_png_size; +extern const unsigned char help_b_png_data[]; + +extern const size_t help_dpad_png_size; +extern const unsigned char help_dpad_png_data[]; + +extern const size_t help_left_right_png_size; +extern const unsigned char help_left_right_png_data[]; + +extern const size_t help_menu_png_size; +extern const unsigned char help_menu_png_data[]; + +extern const size_t help_up_down_png_size; +extern const unsigned char help_up_down_png_data[]; + struct Res2hEntry { const std::string relativeFileName; const size_t size; diff --git a/data/converted/help_a_png.cpp b/data/converted/help_a_png.cpp new file mode 100644 index 000000000..ad62421b4 --- /dev/null +++ b/data/converted/help_a_png.cpp @@ -0,0 +1,371 @@ +//this file was auto-generated from "a.png" by res2h + +#include "../Resources.h" + +const size_t help_a_png_size = 3635; +const unsigned char help_a_png_data[3635] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x4e,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0xcf,0x67,0x1c, + 0x61,0x18,0xc7,0x3f,0xdb,0x44,0x4e,0xa5,0x26,0xf4, + 0x5a,0x32,0x4a,0x28,0x4b,0x19,0x4a,0x28,0xbd,0x6c, + 0x4f,0xa1,0x94,0xce,0xa5,0x94,0x52,0xe6,0x94,0x53, + 0x2e,0x6f,0xfe,0x80,0x92,0x4d,0x09,0x21,0x94,0xb9, + 0x45,0x29,0xb5,0x4b,0x69,0x95,0x1c,0x46,0x69,0xb5, + 0x4a,0x99,0xd0,0x4b,0xaa,0x95,0xce,0x92,0x6a,0xb5, + 0x4a,0x26,0xa9,0x54,0x48,0xa5,0xde,0x5e,0x76,0xd6, + 0x64,0x7f,0xe5,0xfd,0x31,0xbb,0x11,0xf2,0xf0,0xd8, + 0x35,0x33,0x3b,0xef,0xf7,0x3b,0xef,0xf3,0x6b,0x9e, + 0x67,0x4b,0x52,0x4a,0x4e,0xb2,0x9c,0xe1,0x84,0xcb, + 0x29,0x81,0x53,0x02,0x96,0x32,0xda,0xed,0x60,0xa9, + 0x54,0x32,0xbd,0x5f,0x19,0xb8,0x09,0x78,0xc0,0x05, + 0xe0,0x72,0xee,0xdc,0x1f,0xe0,0x33,0xf0,0x11,0x78, + 0x0b,0x3c,0x07,0x7e,0x9a,0x2c,0x72,0x28,0xf0,0x48, + 0x29,0x3b,0x54,0x53,0x2e,0x02,0x8b,0xc0,0x26,0x20, + 0x35,0xf5,0x1d,0x30,0x0b,0x9c,0xd5,0x25,0xd0,0xc2, + 0x6a,0x41,0x60,0x1c,0x58,0x02,0xf6,0x0d,0x80,0xb7, + 0xeb,0x0f,0x20,0x00,0x46,0x86,0x45,0xe0,0x1e,0xb0, + 0x53,0x00,0xf0,0x76,0x5d,0x6f,0x9a,0xdf,0xc0,0x08, + 0x8c,0x00,0xcb,0x03,0x00,0x9e,0xd7,0x3d,0xe0,0xd6, + 0x20,0x08,0x8c,0x03,0xaf,0x06,0x0c,0x3e,0xaf,0xf3, + 0x45,0x12,0x18,0x03,0x5e,0x0e,0x11,0x7c,0xa6,0x73, + 0x45,0x11,0x30,0x36,0x1b,0x21,0x84,0xf4,0x7d,0xdf, + 0x94,0xc0,0x01,0x70,0xc3,0x96,0x40,0x60,0x0a,0xde, + 0x75,0x5d,0x29,0xa5,0x94,0x49,0x92,0xd8,0xec,0xc2, + 0x0e,0x70,0xc9,0x94,0xc0,0xb8,0x4d,0xb4,0x11,0x42, + 0xc8,0x4c,0x2c,0x76,0x41,0x02,0x6f,0x4c,0x09,0x2c, + 0xd9,0xd8,0x70,0x92,0x24,0x2d,0x02,0xb5,0x5a,0xcd, + 0xd6,0x1f,0x6e,0xeb,0x12,0x98,0xb0,0x49,0x52,0xbe, + 0xef,0xcb,0x76,0x71,0x1c,0xc7,0x86,0xc0,0xa7,0x2c, + 0xd1,0xe5,0xb1,0xf6,0x2b,0xe6,0x66,0x9b,0xd1,0xc7, + 0x48,0x7c,0xdf,0x67,0x6d,0x6d,0xed,0xb0,0x33,0x05, + 0x81,0x4d,0xdd,0x36,0x09,0x4c,0xf7,0x0d,0x49,0xb9, + 0x1d,0x18,0x03,0xb6,0x4c,0x9f,0x96,0xe3,0x38,0x52, + 0x4a,0x29,0x85,0x10,0x32,0x0c,0xc3,0xd6,0x0e,0x58, + 0x3a,0xb3,0x04,0xea,0xaa,0x26,0x74,0xcd,0x66,0xa1, + 0xcc,0x79,0x1d,0xc7,0xe9,0x30,0x25,0xcf,0xf3,0x6c, + 0x08,0xec,0x02,0x23,0x2a,0x04,0xee,0xdb,0x3a,0x6f, + 0x18,0x86,0x5d,0x9d,0x39,0x7f,0xdc,0x50,0xa7,0x54, + 0x08,0x3c,0x33,0x5d,0xc0,0xf3,0xbc,0x8e,0xb0,0x99, + 0x0f,0xa7,0x69,0x9a,0xda,0x3a,0xf3,0x8c,0x0a,0x81, + 0x75,0xd3,0x05,0xc2,0x30,0xec,0xb0,0xf5,0x2c,0xa1, + 0x65,0x12,0x04,0x81,0x0d,0x81,0x65,0x15,0x02,0x5b, + 0xa6,0xce,0x9b,0xa6,0xa9,0xac,0x56,0xab,0x1d,0xe7, + 0xa2,0x28,0x6a,0x11,0x88,0xe3,0xd8,0x86,0xc0,0x63, + 0x15,0x02,0x07,0x26,0x37,0x0f,0x82,0x40,0x4a,0x29, + 0xa5,0xeb,0xba,0x3d,0xcf,0x65,0xd2,0xed,0x1a,0x45, + 0x7d,0xa1,0x42,0x60,0xcf,0xe4,0xe6,0x71,0x1c,0xf7, + 0x7d,0xba,0x69,0x9a,0xb6,0x08,0x74,0xdb,0x25,0x45, + 0x7d,0xaa,0x42,0xe0,0x97,0xa9,0xf3,0xaa,0x4a,0x9a, + 0xa6,0xa6,0x04,0x1e,0xe5,0xb1,0x8e,0xf6,0xc8,0x7a, + 0xdf,0x81,0xf3,0xba,0x99,0x77,0x7b,0x7b,0x9b,0x85, + 0x85,0x85,0x9e,0xd7,0x38,0x8e,0x83,0x10,0xa2,0xf5, + 0xdd,0xf7,0x7d,0xea,0xf5,0xba,0x6e,0x46,0xfe,0xaa, + 0x92,0x89,0x9f,0xe8,0x3e,0x99,0x34,0x4d,0x95,0x62, + 0x7c,0x1c,0xc7,0xb6,0x05,0xde,0x1d,0x15,0x13,0x9a, + 0x31,0x71,0xde,0x4a,0xa5,0xa2,0x55,0x62,0x1b,0x3a, + 0xf3,0xa4,0x0a,0x81,0xb2,0xce,0x4d,0xa3,0x28,0x52, + 0xae,0x73,0xb2,0x3a,0x29,0x13,0x21,0x84,0x0e,0xf8, + 0x4d,0x9d,0x72,0x7a,0x5d,0xe7,0xad,0x4b,0xa7,0x44, + 0xa8,0xd5,0x6a,0xa6,0x05,0xde,0xa2,0x4e,0x39,0xbd, + 0xa2,0xe2,0x51,0x61,0x18,0x02,0xd0,0x68,0x34,0x94, + 0xbd,0x30,0xef,0xb8,0xae,0xeb,0xea,0x94,0xd9,0x2b, + 0xaa,0xe5,0x34,0xc0,0xb9,0x7e,0xaf,0x93,0x95,0x4a, + 0xe5,0x50,0x76,0x4d,0x92,0x44,0x06,0x41,0x70,0xa4, + 0x4d,0x7b,0x9e,0x27,0xab,0xd5,0x6a,0x47,0x58,0x15, + 0x42,0x1c,0xf5,0xdb,0x55,0x93,0x57,0xca,0xb9,0x5e, + 0x36,0xdf,0x4f,0xa2,0x28,0xea,0x0a,0x42,0x45,0x7a, + 0x04,0x82,0x03,0x60,0xca,0x84,0xc0,0x18,0xb0,0x71, + 0x0c,0xfd,0xa0,0x76,0x7d,0x68,0xd3,0x56,0xb9,0x5a, + 0x50,0x03,0xd7,0x54,0x1b,0x4d,0x73,0xb6,0x6a,0x6c, + 0xcd,0x1e,0x13,0xf8,0xbd,0xb6,0x19,0x83,0x55,0x6f, + 0xf4,0xc1,0x90,0xc1,0xef,0x03,0xd7,0x8b,0xee,0x4e, + 0xcf,0x0f,0x09,0xfc,0x6e,0x2f,0xf0,0x45,0xcc,0x07, + 0x02,0xd3,0x72,0x5b,0x51,0x37,0x8e,0x9a,0x11,0x14, + 0x31,0xe0,0x28,0x03,0xef,0x07,0x00,0x3e,0x54,0x19, + 0x37,0x15,0x35,0x62,0x02,0xb8,0xdb,0xec,0x98,0xd9, + 0x02,0x5f,0x05,0xae,0x0c,0x7b,0x46,0x96,0x97,0xe9, + 0x66,0xd3,0x69,0x57,0x03,0xf4,0xb7,0x66,0x6d,0x53, + 0x36,0x99,0x52,0x66,0x5a,0xea,0x06,0xd8,0x62,0xcc, + 0x9a,0x35,0xc5,0x26,0x9b,0x9d,0xed,0x89,0xe6,0xe7, + 0x6f,0xe0,0x1f,0xf0,0x01,0xf8,0x0b,0xbc,0x06,0xbe, + 0x98,0x2e,0x90,0xc7,0x5c,0x3a,0xfd,0xb3,0xc7,0x29, + 0x01,0x3b,0xf9,0x3f,0x00,0x4f,0xc6,0x21,0x9b,0xf7, + 0xe9,0xfd,0x97,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_b_png.cpp b/data/converted/help_b_png.cpp new file mode 100644 index 000000000..4b768c68b --- /dev/null +++ b/data/converted/help_b_png.cpp @@ -0,0 +1,378 @@ +//this file was auto-generated from "b.png" by res2h + +#include "../Resources.h" + +const size_t help_b_png_size = 3708; +const unsigned char help_b_png_data[3708] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x97,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0x4f,0x68,0x13, + 0x41,0x14,0xc6,0x7f,0x9b,0x4d,0x37,0x6d,0x48,0x49, + 0xcc,0xc9,0x93,0x10,0x10,0x3c,0x15,0x0c,0x05,0x41, + 0x51,0x84,0x82,0xa0,0x78,0xf2,0xcf,0x49,0x10,0x84, + 0x40,0x41,0xe8,0xa9,0xbd,0x78,0x10,0x4f,0x85,0x82, + 0x58,0x28,0x58,0x85,0x1e,0x02,0xde,0x95,0x1c,0x84, + 0xa2,0x17,0x8b,0x62,0x51,0xf4,0x60,0x05,0x51,0x94, + 0x8a,0x45,0x51,0xea,0xb1,0x62,0x49,0xba,0x9b,0xa4, + 0xe3,0xc1,0x6d,0xba,0xd9,0x24,0x9b,0x99,0xfd,0x93, + 0xb6,0xd0,0x0f,0xde,0x61,0x93,0xd9,0xd9,0xef,0xcb, + 0xbc,0x7d,0xef,0xcd,0x9b,0x68,0x42,0x08,0xf6,0x32, + 0x62,0xec,0x71,0xec,0x0b,0xd8,0x17,0x10,0x10,0xf1, + 0x76,0x1f,0x6a,0x9a,0xe6,0x77,0xbe,0x21,0xe0,0x02, + 0x30,0x0c,0x1c,0x02,0x8e,0x3a,0xbe,0x5b,0x07,0xbe, + 0x00,0x9f,0x80,0x45,0xe0,0x31,0xf0,0xdb,0xcf,0x43, + 0x9a,0x02,0x8f,0x10,0xa2,0xc5,0x14,0x71,0x18,0x98, + 0x06,0xbe,0x03,0x42,0xd1,0x5e,0x01,0xe3,0x40,0x4a, + 0x55,0x40,0x83,0x6b,0x00,0x01,0x59,0x60,0x06,0x30, + 0x7d,0x10,0x77,0xdb,0x2a,0x30,0x0a,0xe8,0xbd,0x12, + 0x50,0x00,0xd6,0x42,0x20,0xee,0xb6,0x8f,0xb6,0xfb, + 0x45,0x26,0x40,0x07,0xee,0x46,0x40,0xdc,0x69,0x65, + 0xe0,0x72,0x14,0x02,0xb2,0xc0,0xf3,0x88,0xc9,0x3b, + 0x6d,0x2a,0x4c,0x01,0x06,0xf0,0xac,0x87,0xe4,0xb7, + 0xec,0x46,0x37,0x01,0x5a,0x3b,0xc2,0x6d,0xc2,0xe8, + 0x5d,0x60,0xcc,0xfd,0x61,0x2e,0x16,0x23,0x17,0x93, + 0x4f,0x25,0x2b,0x9b,0x9b,0xac,0x6c,0x6e,0xaa,0x04, + 0x9c,0x3a,0x70,0xd1,0x0e,0xb9,0x6d,0xc3,0xa8,0x8c, + 0x80,0x51,0x60,0xae,0xed,0x9b,0x6c,0x18,0x4c,0xf4, + 0xf7,0x2b,0x8b,0x28,0x9a,0x26,0x45,0xcb,0x62,0x4d, + 0x2e,0x60,0xfc,0x01,0x4e,0xd8,0xf9,0x43,0x39,0x0f, + 0x64,0x65,0xa2,0xcd,0x48,0x3c,0x2e,0x56,0xd3,0x69, + 0x51,0xc9,0x64,0x44,0x25,0x93,0x11,0xf3,0xa9,0x54, + 0xcb,0x98,0x82,0x61,0x34,0x8d,0x79,0x35,0x38,0x28, + 0x32,0x9a,0x26,0xeb,0x4a,0x2f,0xfd,0xbe,0x03,0x33, + 0xb2,0xfe,0x3a,0x91,0x48,0x78,0x0a,0x00,0x44,0x5e, + 0xd7,0x1b,0x63,0xbc,0xc6,0x75,0xb0,0x2b,0xed,0x04, + 0x78,0xad,0x7d,0x0e,0xb8,0x1e,0x66,0xdd,0xb2,0x54, + 0xaf,0x53,0xaa,0x56,0x1b,0xd7,0x23,0xf1,0xb8,0x8a, + 0xfb,0xdd,0x6a,0x97,0xe8,0xbc,0xee,0x1e,0xb7,0xa3, + 0x4f,0xa8,0x78,0x57,0xab,0xb5,0x04,0x02,0x49,0x1c, + 0x01,0xce,0xcb,0x0a,0x30,0x9c,0x4b,0xb6,0x8b,0x70, + 0x55,0x56,0xc0,0x71,0xfb,0x05,0x0e,0x1d,0x39,0x7d, + 0xdb,0x0b,0xd6,0x84,0x60,0xc1,0xb5,0x22,0x5d,0x70, + 0xd6,0xed,0x46,0x9d,0x04,0x9c,0x89,0x82,0x7c,0x46, + 0xd3,0xb8,0xd4,0xd7,0xd7,0xb8,0xbe,0xb3,0xb1,0xa1, + 0x3a,0x45,0x0a,0x38,0x26,0x23,0x60,0x28,0x0a,0x01, + 0x93,0x03,0x03,0x64,0xec,0x1c,0x33,0x6d,0x9a,0x4c, + 0x9b,0xa6,0x9f,0x69,0x86,0xbb,0x6e,0x68,0xec,0x1a, + 0xdf,0x37,0x0e,0x68,0x1a,0x23,0xf1,0xed,0xa9,0xf3, + 0xba,0x4e,0x21,0x91,0x20,0x17,0x8b,0x51,0xaa,0x56, + 0x29,0x9a,0xa6,0xaa,0xeb,0xb8,0x5f,0xe6,0xae,0x02, + 0x0e,0x06,0x11,0x90,0xd7,0x75,0xe6,0x53,0xad,0x7b, + 0x94,0xa2,0x65,0xb1,0x54,0xab,0xf1,0xae,0x5e,0x0f, + 0x32,0x7d,0x56,0x46,0x40,0x3a,0x68,0xbc,0xbf,0x59, + 0xa9,0xb4,0x88,0xba,0x64,0x18,0x14,0x0c,0x83,0x59, + 0x5b,0xcc,0xcd,0x4a,0x45,0xb6,0x9c,0xe8,0xcc,0xad, + 0x43,0x26,0x2e,0xab,0x56,0x8e,0x32,0x99,0x18,0x10, + 0xb3,0xc9,0x64,0x63,0xdc,0x6a,0x3a,0x2d,0xf2,0xba, + 0xae,0x5a,0xa1,0x96,0x64,0x32,0xf1,0x7a,0x54,0x81, + 0x7c,0xac,0x5c,0x6e,0xf8,0x7f,0x46,0xd3,0xb8,0x97, + 0x4c,0xaa,0x4e,0xb1,0x2e,0x13,0x85,0x7e,0x45,0x99, + 0x8d,0x4a,0x96,0xd5,0xe4,0x5a,0x17,0x1d,0xa1,0x55, + 0x02,0x3f,0x64,0x04,0x7c,0x89,0x52,0x80,0x7b,0x4f, + 0xa0,0x52,0x8e,0xbb,0xb9,0x75,0xba,0x73,0x71,0x17, + 0xf7,0xb2,0xde,0xca,0x08,0x78,0x11,0x25,0x83,0xbc, + 0xae,0x7b,0xae,0x48,0x17,0xf7,0x91,0x5a,0x81,0x0f, + 0xce,0x1d,0x50,0xd8,0x28,0x24,0x12,0x4d,0xe4,0x9d, + 0x25,0x76,0x17,0x3c,0x52,0x29,0xa7,0x1f,0x28,0x65, + 0x5f,0x87,0x1f,0x7b,0xf9,0xf4,0x6c,0x32,0xd9,0xf4, + 0xfd,0x58,0xb9,0xac,0xf2,0x98,0x16,0x4e,0x5e,0x7b, + 0xe2,0xb4,0xdd,0x2e,0xf4,0x4c,0x6a,0xb9,0x58,0x8c, + 0x91,0x78,0xbc,0xa9,0xce,0x01,0x58,0xa8,0xd5,0x28, + 0x59,0x56,0xc3,0x3d,0x9c,0xe5,0xc4,0xd6,0x2f,0xef, + 0x0c,0xa9,0x12,0x78,0x0a,0x9c,0x53,0xdd,0xd4,0xdf, + 0xf0,0xea,0xcf,0x4c,0x24,0x12,0x4c,0x0e,0x0c,0x28, + 0x45,0x9f,0xa5,0x7a,0x9d,0x85,0x6a,0x95,0xa2,0x23, + 0x94,0x4a,0x76,0x27,0x4e,0x01,0xaf,0x55,0x37,0xf5, + 0x06,0xb0,0xbc,0x03,0xfd,0x20,0xb7,0xdd,0x0f,0xd2, + 0xd8,0x3a,0x19,0x52,0x03,0xd7,0xaf,0x7d,0x73,0xbb, + 0xb1,0x9f,0xce,0xdc,0xf8,0x0e,0x91,0x2f,0xbb,0xce, + 0x18,0x02,0xf5,0x46,0x6f,0xf7,0x98,0xbc,0xd9,0x69, + 0x67,0x18,0xa4,0x3b,0x3d,0xd5,0x23,0xf2,0x7f,0xbd, + 0xb6,0xb5,0x41,0xcf,0x07,0x46,0xfd,0x94,0xdb,0x0a, + 0xb6,0xdc,0xed,0x8c,0x20,0x8c,0x03,0x8e,0x21,0xe0, + 0x4d,0x04,0xe4,0xe7,0x90,0x38,0x6e,0x0a,0xeb,0x88, + 0x09,0xe0,0x1a,0xf0,0x39,0x04,0xe2,0x4f,0xdc,0xdd, + 0x86,0x5e,0x09,0xd8,0xc2,0x79,0xe0,0xa1,0xed,0xbb, + 0xb2,0xa4,0x7f,0xf2,0xff,0x70,0x50,0xb9,0x03,0xe2, + 0xe7,0x7c,0x40,0x05,0xa7,0xed,0xce,0x41,0xd6,0xee, + 0xaf,0x66,0xed,0x16,0x79,0x1d,0x78,0x0f,0x58,0x76, + 0xb5,0xfb,0xd5,0xef,0x03,0xba,0x96,0x12,0x7b,0x09, + 0xfb,0x7f,0x35,0xd8,0x69,0xfc,0x1b,0x00,0xb0,0x50, + 0x70,0xaa,0x70,0x6c,0x2e,0x22,0x00,0x00,0x00,0x00, + 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_dpad_png.cpp b/data/converted/help_dpad_png.cpp new file mode 100644 index 000000000..4e2b39db9 --- /dev/null +++ b/data/converted/help_dpad_png.cpp @@ -0,0 +1,367 @@ +//this file was auto-generated from "dpad.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_png_size = 3592; +const unsigned char help_dpad_png_data[3592] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x23,0x49, + 0x44,0x41,0x54,0x78,0xda,0xd4,0xda,0x4b,0xa8,0x55, + 0x65,0x14,0x07,0xf0,0xdf,0xf1,0x9a,0xaf,0x2e,0x58, + 0x4a,0x3e,0x06,0x69,0x21,0xf9,0x88,0xae,0x24,0x39, + 0x09,0x94,0x9e,0x60,0xa0,0x03,0x8d,0xc4,0xa2,0x44, + 0xd2,0x90,0x1a,0xa4,0xe0,0x20,0xd4,0x8b,0x1a,0x25, + 0x58,0x59,0xe8,0x28,0x14,0x6c,0x60,0xa1,0xe2,0xa0, + 0x24,0xa2,0x41,0x39,0x51,0x84,0x06,0x82,0x10,0xd5, + 0x24,0x03,0x51,0xd0,0x10,0xc5,0x57,0xa5,0x37,0x0d, + 0xdd,0x4d,0xd6,0x8e,0xc3,0xe9,0x9c,0x73,0xf7,0xbe, + 0xee,0x73,0xce,0x3e,0x0b,0xd6,0x60,0x3f,0xce,0xb7, + 0xff,0xff,0xb5,0xf7,0xf7,0xad,0xf5,0xff,0xd6,0xa9, + 0x24,0x49,0xa2,0x9b,0x6d,0x78,0x9e,0x9b,0x2b,0x95, + 0x4a,0xde,0xf1,0x9f,0xc6,0x1c,0xec,0x44,0xe6,0x48, + 0xe5,0x0a,0x6a,0x92,0x24,0x99,0x3d,0xa7,0xbd,0x86, + 0x81,0x00,0xbe,0x0f,0xa3,0x5b,0x82,0xa9,0x05,0x04, + 0x46,0xa3,0x3f,0x80,0x57,0xfb,0x51,0x4c,0x2b,0x3b, + 0x81,0x09,0xd8,0x53,0x07,0x7c,0xea,0xbf,0xe2,0xd9, + 0xb2,0x12,0x78,0x34,0xa2,0x9c,0x0c,0xe2,0x17,0xb0, + 0xba,0x6c,0x04,0x9e,0xc3,0xa9,0x0c,0xe0,0x53,0x1f, + 0xc0,0x07,0x65,0x21,0xb0,0x02,0xd7,0x73,0x80,0xaf, + 0xf6,0xfd,0xe8,0xed,0x14,0x81,0x31,0xd8,0x34,0x44, + 0xe0,0x4d,0x27,0x77,0x3b,0x08,0x4c,0xc6,0xde,0x02, + 0xc0,0xa7,0xfe,0x1b,0x9e,0x6f,0x17,0x81,0xc7,0x70, + 0xac,0x40,0xf0,0xa9,0x5f,0xc4,0x9b,0xf1,0x8c,0x11, + 0x99,0x93,0x6b,0xc6,0xfb,0x46,0x46,0xd6,0x9e,0x89, + 0x4f,0x30,0x0b,0x7f,0xa7,0x01,0x8b,0x07,0x8e,0xcf, + 0xf1,0xe0,0x04,0x7f,0xe0,0x32,0x7a,0xe2,0x5c,0x0f, + 0xfe,0xc2,0x2e,0x4c,0xc7,0xdb,0xb8,0x5d,0x54,0xc9, + 0xb1,0x14,0x1b,0x9b,0x5c,0x9f,0x8d,0x13,0x39,0xa2, + 0x7d,0x0b,0xef,0x36,0x19,0xef,0x4c,0x04,0x6a,0x50, + 0x1b,0x96,0xe1,0x9e,0xf9,0xd8,0x1e,0x49,0xaa,0x9d, + 0xb6,0x0e,0xab,0xee,0x96,0xc0,0x0c,0xbc,0x8f,0xa9, + 0xb1,0x76,0xb7,0xdb,0x3e,0xc5,0xbc,0xa1,0x12,0x18, + 0x8f,0x77,0xf0,0x54,0x07,0xab,0xe5,0x11,0xf8,0x0a, + 0x0f,0xe7,0x25,0x30,0x1c,0x6b,0xb0,0xb2,0x04,0x25, + 0xff,0x03,0xf8,0x1a,0x63,0xf3,0xe8,0x81,0x55,0xd8, + 0xdc,0x42,0x50,0x3d,0x58,0x14,0xf9,0xa4,0x9e,0x8d, + 0xab,0x39,0xee,0xc3,0xe7,0x78,0xb1,0x76,0x65,0xaa, + 0xb7,0x8c,0x2e,0xc6,0x17,0x75,0x52,0xfc,0x79,0x9c, + 0xc6,0x3d,0x0d,0x4a,0xe8,0x87,0x22,0x3b,0xb7,0xd2, + 0xb6,0xc7,0x67,0xdd,0xd0,0x9e,0xc4,0xc9,0x16,0x24, + 0xa9,0x22,0x7d,0x79,0x23,0xf0,0xd3,0x71,0xb8,0xe4, + 0xe0,0x13,0xdc,0x8c,0x40,0xff,0x6f,0xc5,0xf9,0xac, + 0x0b,0xc0,0x57,0x6b,0x8a,0x29,0xd5,0x13,0x6a,0x4b, + 0x17,0x81,0x4f,0xfd,0x27,0xf4,0xf6,0xe0,0x8d,0xac, + 0x69,0xbb,0x64,0x36,0x31,0x5d,0x50,0x7e,0xe8,0xc2, + 0xe8,0x27,0x38,0x1b,0x39,0xc2,0xb2,0x98,0x18,0xdd, + 0x04,0xfe,0x46,0xe4,0x86,0xff,0x6c,0x6d,0x97,0x11, + 0x58,0x52,0xfb,0x3d,0x8d,0xc2,0x87,0x5d,0x02,0xbe, + 0xbf,0xd1,0xa4,0x98,0x14,0x22,0xbb,0xcc,0xe0,0xf7, + 0x0d,0xa6,0xc8,0xfa,0xb0,0xbb,0x5e,0xa2,0x28,0xd8, + 0xfe,0x8c,0xb2,0xe4,0x56,0x83,0xeb,0x7d,0x75,0xd4, + 0xdd,0xf1,0xd8,0x6b,0x1d,0x18,0xac,0x16,0x7a,0x26, + 0x04,0xfb,0x83,0x35,0xe7,0x7f,0xc4,0x91,0x06,0xf5, + 0xce,0xfc,0xd0,0x0e,0xc3,0x32,0x12,0x38,0x1a,0xdb, + 0x31,0x67,0x9a,0x28,0xb2,0x29,0x55,0xc7,0xe7,0x30, + 0x37,0xea,0xb1,0x4c,0xf6,0x4a,0x68,0xde,0xea,0xd7, + 0xb7,0xad,0xc9,0xfd,0xbb,0xf0,0x4f,0x8e,0x4f,0xe1, + 0x48,0x88,0xa4,0x66,0x92,0xb2,0x7a,0xc5,0x79,0x3c, + 0xaf,0x1e,0x38,0x80,0x0d,0x25,0x49,0x58,0xaf,0xc6, + 0xdb,0xcf,0xad,0xc8,0x76,0xe3,0xe3,0x0e,0x83,0xdf, + 0x82,0x43,0x43,0x95,0x94,0x37,0xa2,0x31,0xf1,0x65, + 0x87,0xc0,0x1f,0xc4,0x7b,0x77,0xdb,0xa1,0x39,0x87, + 0xad,0xa1,0x49,0x7b,0xdb,0x08,0xfe,0x38,0x5e,0x2f, + 0x72,0x63,0x6b,0x01,0x1e,0x89,0xad,0x95,0x97,0x43, + 0x81,0xdd,0x89,0x6b,0xb7,0xa3,0x26,0xb9,0x37,0xc7, + 0x78,0x37,0x71,0x29,0x26,0x7e,0xa5,0x2a,0x99,0x9e, + 0x88,0xaa,0xe0,0x02,0xae,0x15,0xad,0x61,0xd3,0xb7, + 0xd5,0x1f,0x83,0x17,0x9d,0xa4,0xbe,0x4d,0x57,0xa6, + 0x76,0x6c,0xee,0xbe,0x84,0xdf,0x0b,0x04,0xbf,0x03, + 0xf7,0xb7,0x7b,0x7b,0xbd,0x0f,0x3f,0x17,0x00,0xfe, + 0xad,0xd8,0x7b,0xed,0x48,0x83,0x63,0x1c,0xbe,0x1f, + 0x22,0xf0,0x2b,0x58,0x58,0x6f,0xde,0x74,0xa2,0xc5, + 0xb4,0x27,0xa7,0xa6,0xf8,0x05,0x4f,0x94,0xad,0xc9, + 0xb7,0x1e,0x57,0x33,0x80,0xff,0xa6,0xa6,0xce,0x29, + 0x55,0x9b,0x75,0x49,0xe4,0x8e,0x46,0xe0,0x3f,0xc2, + 0x7d,0x65,0xee,0x13,0x37,0x9b,0xdc,0xab,0x6b,0x27, + 0x6b,0x59,0x09,0x88,0x28,0x7f,0x17,0xc0,0xaf,0xe2, + 0x85,0x3c,0x3f,0x2e,0x03,0x81,0xb4,0x4c,0xd9,0x1c, + 0xdd,0x1b,0xad,0x22,0x50,0xe9,0xf6,0xbf,0xdb,0xfc, + 0x3b,0x00,0x9b,0x38,0x71,0x5e,0x35,0xd3,0xf7,0xca, + 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, + 0x60,0x82 +}; diff --git a/data/converted/help_left_right_png.cpp b/data/converted/help_left_right_png.cpp new file mode 100644 index 000000000..e999eaeb3 --- /dev/null +++ b/data/converted/help_left_right_png.cpp @@ -0,0 +1,336 @@ +//this file was auto-generated from "left_right.png" by res2h + +#include "../Resources.h" + +const size_t help_left_right_png_size = 3288; +const unsigned char help_left_right_png_data[3288] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0xf3,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0xd9,0xcf,0x8b,0x4d, + 0x61,0x1c,0xc7,0xf1,0xd7,0xb9,0xd7,0x8c,0x30,0x35, + 0x8b,0x49,0x29,0x51,0x16,0x58,0x29,0x5b,0x45,0x36, + 0x4a,0x4a,0xc2,0xce,0xc8,0xc2,0x50,0x36,0x62,0x85, + 0x44,0x93,0x94,0x14,0x26,0xa4,0xd4,0x14,0x0b,0x29, + 0x43,0x44,0x64,0xcf,0x4e,0x29,0x35,0x99,0x9d,0x0d, + 0x33,0x51,0x23,0x7f,0x80,0x1f,0xa5,0xc7,0xe6,0x5c, + 0x9d,0x6e,0xa7,0x71,0xcf,0x75,0xdc,0x7b,0x4e,0x9e, + 0x6f,0x9d,0xcd,0x73,0xce,0xf3,0x3d,0xdf,0xf7,0xf7, + 0xfb,0x3c,0x9f,0xf3,0x7d,0x3a,0x49,0x08,0x41,0x9d, + 0xad,0xa1,0xe6,0x16,0x01,0x22,0x40,0x04,0x88,0x00, + 0x11,0x20,0x02,0xfc,0x17,0xb6,0x18,0xcb,0x8a,0x4e, + 0x0a,0x21,0xe8,0xb2,0x55,0x19,0x2c,0xbb,0x02,0xbb, + 0x70,0xbc,0x87,0x09,0xbb,0x86,0x66,0x59,0xce,0xb6, + 0xe0,0x43,0xea,0xb4,0x57,0x15,0x98,0xc5,0x44,0x19, + 0xc1,0xaf,0xc7,0x4b,0x04,0x5c,0xec,0x31,0x40,0xc0, + 0xa1,0xbf,0x09,0x7e,0x04,0xb7,0x53,0x47,0xfd,0x02, + 0xf8,0x8e,0xcd,0xdd,0xec,0x81,0x45,0x38,0x86,0xb1, + 0x3e,0x8b,0xc7,0x20,0x1e,0x63,0x4d,0xd1,0x89,0x47, + 0x32,0x99,0xef,0x67,0x05,0x5a,0xd7,0x5b,0x0c,0xe7, + 0x3d,0x98,0xe4,0x8c,0xed,0xc6,0x5d,0x0c,0xb5,0x8d, + 0xcf,0xa7,0x9b,0x79,0xa0,0x83,0xac,0xcd,0x61,0x22, + 0x84,0xf0,0x02,0x92,0x24,0x19,0xc5,0xd6,0x02,0x00, + 0xa3,0x39,0xef,0x7f,0x86,0xbd,0xf8,0xb9,0xd0,0xc4, + 0x4d,0x78,0x97,0x93,0xfd,0xa2,0xd7,0x2c,0xf6,0x64, + 0x2a,0x70,0xb3,0x04,0x9f,0x01,0x97,0x16,0xda,0x03, + 0xeb,0x70,0x1e,0x6b,0x2b,0xfc,0x41,0x3d,0x81,0x03, + 0x79,0x00,0x23,0x38,0x85,0x6d,0x35,0xe8,0x0a,0x6e, + 0xa5,0x2b,0xe5,0x37,0x40,0x13,0x47,0x2b,0xa0,0x38, + 0x45,0x94,0xe9,0x29,0x56,0xb7,0x00,0xc6,0x70,0xae, + 0x66,0xbd,0xd9,0x72,0x3c,0xc7,0x50,0x03,0x07,0x6b, + 0xda,0x60,0x6e,0xc0,0x78,0x03,0xd7,0xf1,0xa3,0x86, + 0x00,0x9f,0x70,0xb9,0x81,0x07,0x38,0x59,0xb3,0xe0, + 0xbf,0x62,0x07,0xbe,0xb4,0x54,0x68,0x32,0x4f,0x63, + 0x2b,0x6c,0xfb,0x31,0x93,0x95,0xd1,0x6f,0xb8,0x8a, + 0xa9,0x1a,0x04,0x7f,0x16,0x4f,0xf2,0x3e,0x64,0xf3, + 0x69,0xbf,0xf3,0xaa,0xc2,0xc1,0xdf,0xc3,0x85,0xf6, + 0xae,0x33,0x6b,0x33,0x38,0x83,0x3b,0x58,0xd5,0x76, + 0x6f,0x3a,0x3d,0x1b,0x2c,0xfd,0xc3,0x4b,0x06,0xf0, + 0x19,0xef,0x33,0x63,0x73,0x78,0x53,0x50,0x61,0xda, + 0x8f,0x95,0xaf,0x71,0xb8,0x53,0x07,0xfb,0xd2,0x65, + 0x55,0x95,0x6e,0xf4,0x23,0x56,0x14,0x39,0x0f,0x4c, + 0xe1,0x74,0x85,0x14,0x67,0x67,0xba,0xc4,0x0b,0x1d, + 0xea,0x27,0x71,0xa5,0x22,0x8a,0x33,0xdd,0xed,0xe4, + 0x95,0x78,0xd4,0xc7,0x25,0x34,0x5e,0x46,0x06,0x36, + 0xa6,0x1b,0xf0,0x46,0x8f,0x01,0xee,0x97,0x59,0xc6, + 0xed,0x69,0xc7,0xda,0x2b,0x80,0x87,0x58,0x52,0x26, + 0x40,0x33,0x47,0x72,0xff,0x25,0xc0,0x70,0xa7,0x0f, + 0x26,0xf1,0x2f,0x65,0x04,0x88,0x00,0x11,0x20,0x02, + 0x44,0x80,0x08,0xd0,0x47,0xfb,0x35,0x00,0xaf,0x4a, + 0xca,0x1e,0xa2,0xb2,0x15,0xb6,0x00,0x00,0x00,0x00, + 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_menu_png.cpp b/data/converted/help_menu_png.cpp new file mode 100644 index 000000000..e6d88dba6 --- /dev/null +++ b/data/converted/help_menu_png.cpp @@ -0,0 +1,351 @@ +//this file was auto-generated from "menu.png" by res2h + +#include "../Resources.h" + +const size_t help_menu_png_size = 3431; +const unsigned char help_menu_png_data[3431] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x02,0x82,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0x99,0xbf,0x8b,0x14, + 0x31,0x14,0xc7,0xbf,0xab,0x72,0x95,0x70,0xc4,0xca, + 0xd6,0xfc,0x05,0x07,0x5b,0x5d,0x9f,0x42,0x10,0x0e, + 0x04,0x17,0x41,0xb0,0x9d,0x7f,0x21,0xb5,0x5d,0xae, + 0x16,0x84,0x6c,0x6f,0x93,0x6d,0xb5,0xca,0x16,0x07, + 0x82,0x72,0x90,0x41,0xd9,0x7e,0x07,0xac,0x85,0x6c, + 0x27,0x08,0xca,0xf7,0x0a,0x2f,0x61,0x66,0x6e,0x57, + 0x16,0x5d,0xb9,0x19,0xc8,0x83,0xb7,0xcc,0xe6,0xe7, + 0xfb,0x4c,0x92,0xf7,0x5e,0x98,0x09,0x49,0x8c,0x59, + 0xee,0x60,0xe4,0x52,0x00,0x0a,0x40,0x01,0x28,0x00, + 0x05,0xa0,0x00,0x14,0x80,0x02,0xf0,0x0f,0x72,0x2f, + 0x3d,0x4c,0x26,0x93,0x6d,0xf5,0x53,0x00,0x67,0x00, + 0x1e,0xde,0xa2,0x8d,0xdf,0x00,0xbc,0x07,0xf0,0xa9, + 0x5f,0x41,0xf2,0xf7,0xcf,0x96,0x8c,0xf4,0x04,0xc0, + 0x07,0x00,0x1c,0x90,0x06,0x00,0xa7,0xfb,0x00,0x3c, + 0x05,0xf0,0x7d,0x60,0xc6,0x27,0xfd,0x01,0xe0,0xe5, + 0x9f,0x00,0x4e,0xaf,0x1b,0x71,0xc0,0xfa,0x13,0xc0, + 0xe3,0x6d,0x00,0x77,0x01,0xac,0x06,0x6e,0x7c,0xd2, + 0xaf,0x00,0x8e,0xfa,0x00,0x4f,0x46,0x62,0x7c,0xd2, + 0x17,0x24,0x3b,0x6e,0xf4,0x2c,0x3d,0x54,0x55,0x05, + 0xef,0x3d,0xbc,0xf7,0x50,0x4a,0xc1,0x39,0x87,0x18, + 0x23,0xbc,0xf7,0x90,0x52,0x42,0x6b,0x0d,0xe7,0x1c, + 0x48,0x42,0x6b,0xdd,0x75,0x5b,0xd3,0x29,0xac,0xb5, + 0x30,0xc6,0xc0,0x39,0x07,0x6b,0x2d,0x84,0x10,0x00, + 0x00,0x63,0x0c,0xbc,0xf7,0x30,0xc6,0x40,0x6b,0x0d, + 0x6b,0x6d,0x1e,0xb7,0x3d,0xb7,0x73,0x2e,0x97,0x49, + 0x29,0x3b,0xfd,0x5a,0xf2,0x2c,0x1f,0x84,0xeb,0x15, + 0xe8,0x78,0x1d,0xe7,0x1c,0x49,0xb2,0xaa,0x2a,0x02, + 0xa0,0x52,0x8a,0x24,0x19,0x42,0xa0,0x10,0x82,0x00, + 0xa8,0xb5,0x26,0x49,0x4a,0x29,0x09,0x80,0x42,0x08, + 0xc6,0x18,0x39,0x9d,0x4e,0xf3,0x38,0x21,0x04,0x5a, + 0x6b,0x73,0xfd,0x7a,0xbd,0xee,0xb4,0x49,0xe3,0xa6, + 0x79,0xda,0x73,0xa7,0xff,0xa9,0x9f,0xf7,0xbe,0xbd, + 0x02,0xab,0xfe,0x0a,0x1c,0xb7,0xf1,0xea,0xba,0x06, + 0x00,0xcc,0xe7,0x73,0x00,0xc0,0x72,0xb9,0x04,0x00, + 0x2c,0x16,0x0b,0x6c,0x36,0x9b,0x4e,0x1b,0x29,0x65, + 0x7e,0x7b,0x4d,0xd3,0xe4,0xf2,0xd4,0x7e,0x36,0x9b, + 0x01,0x00,0x36,0x9b,0x4d,0xae,0x4f,0x6d,0xd2,0xb8, + 0x69,0x95,0xda,0xe3,0x26,0x49,0xfd,0x7a,0x72,0xdc, + 0x09,0x64,0x87,0x10,0xa5,0x14,0x84,0x10,0x9d,0x6d, + 0x25,0xa5,0xbc,0x61,0xd0,0x7f,0x89,0xc4,0x87,0x92, + 0xa6,0x69,0x70,0x7e,0x7e,0x3e,0xce,0x5c,0xa8,0xae, + 0x6b,0x28,0xa5,0x6e,0x94,0xa7,0x2d,0x36,0x78,0x80, + 0x74,0x5e,0xfa,0x9e,0xc9,0x18,0xd3,0xd9,0xe3,0xfb, + 0x4a,0xea,0x23,0x84,0xd8,0xfd,0x12,0x5a,0x5e,0xe8, + 0x73,0x3a,0xe1,0x55,0x55,0x31,0x84,0x40,0x92,0x74, + 0xce,0x51,0x4a,0x49,0x63,0x0c,0x49,0x32,0xc6,0x48, + 0xa5,0x14,0xa5,0x94,0xd9,0x5b,0x84,0x10,0xa8,0x94, + 0xca,0x7d,0x63,0x8c,0xb4,0xd6,0x52,0x6b,0x4d,0x6b, + 0x6d,0xf6,0x38,0x5a,0x6b,0xc6,0x18,0x49,0x92,0xc6, + 0x98,0xad,0xe3,0xb6,0xbd,0x59,0x08,0x81,0x5a,0x6b, + 0x1a,0x63,0xb2,0x3d,0xc6,0x98,0xe4,0x85,0x9a,0x7e, + 0x20,0x7b,0x77,0xc8,0x40,0xa3,0x94,0xca,0x06,0xfd, + 0x8d,0x0a,0x21,0xa8,0x94,0xea,0xb8,0xe4,0x9e,0x7e, + 0xec,0x03,0xbc,0x1a,0x59,0x24,0x7e,0xd3,0x07,0x78, + 0x34,0x82,0x44,0xae,0xad,0x27,0xdb,0xb2,0xd1,0xd7, + 0x23,0x31,0xfe,0xed,0xae,0x74,0xfa,0x08,0xc0,0xe5, + 0xc0,0x8d,0x5f,0xa5,0x28,0xbc,0xeb,0x42,0x73,0xff, + 0xd0,0x07,0xfa,0x80,0x7a,0x01,0xe0,0xc1,0x3e,0x57, + 0xca,0x94,0x9d,0x5e,0x0c,0xc4,0xf0,0x4b,0x00,0xcf, + 0xb7,0x85,0x80,0x49,0x32,0x7e,0xc7,0xa5,0xbe,0x7d, + 0xb9,0xbf,0x2d,0xf9,0x02,0xe0,0xd7,0xae,0x18,0x36, + 0x29,0x9f,0x98,0x0a,0x40,0x01,0x28,0x00,0x05,0xa0, + 0x00,0x14,0x80,0x02,0x50,0x00,0xc6,0x2b,0x57,0x03, + 0x00,0x37,0x31,0xc0,0xa1,0xa9,0x5d,0x0e,0xee,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82 +}; diff --git a/data/converted/help_up_down_png.cpp b/data/converted/help_up_down_png.cpp new file mode 100644 index 000000000..fa397aeee --- /dev/null +++ b/data/converted/help_up_down_png.cpp @@ -0,0 +1,337 @@ +//this file was auto-generated from "up_down.png" by res2h + +#include "../Resources.h" + +const size_t help_up_down_png_size = 3292; +const unsigned char help_up_down_png_data[3292] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0xf7,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0xd9,0xcd,0xab,0x4d, + 0x51,0x18,0xc7,0xf1,0xcf,0xbe,0xd7,0x75,0xba,0x22, + 0x6f,0xa5,0x4c,0x18,0xc8,0x80,0x50,0x3a,0x7f,0x00, + 0x61,0xa0,0x0c,0xa4,0x0c,0x95,0x99,0xf8,0x0f,0x94, + 0xdc,0x0c,0xa5,0xe4,0x9a,0x19,0x98,0x18,0x90,0x81, + 0x99,0x0c,0x98,0xc9,0x50,0x4a,0x31,0x91,0x32,0x63, + 0xe0,0xe6,0x35,0x3a,0x2e,0x6a,0x19,0xec,0xbd,0x73, + 0x95,0xce,0xdd,0xeb,0x9c,0x75,0x8e,0x7d,0xb2,0x9e, + 0x7a,0x3a,0x75,0x5a,0xed,0x7e,0xdf,0x67,0xbd,0xec, + 0xb5,0x7f,0x4f,0x11,0x42,0x30,0xc9,0xb1,0x22,0x66, + 0x70,0x51,0x14,0xb1,0xcf,0xdf,0x8f,0xbd,0x98,0x47, + 0xe3,0x4a,0x45,0x15,0x35,0x84,0xd0,0x38,0x23,0xe3, + 0x04,0x7a,0x95,0xf0,0x9b,0x98,0x1d,0x89,0xa6,0x11, + 0x00,0xcc,0xe2,0x5c,0x25,0x7c,0x69,0x3e,0xc4,0xb6, + 0xb6,0x03,0x6c,0xc2,0xf5,0xbf,0x88,0xaf,0xf3,0x05, + 0x0e,0xb4,0x15,0x60,0x67,0x55,0xe5,0xb0,0x4c,0xbe, + 0xc5,0xa9,0xb6,0x01,0x1c,0xc4,0xab,0x06,0xe2,0xeb, + 0xec,0xe1,0x62,0x5b,0x00,0x4e,0xe2,0x6b,0x84,0xf8, + 0xa5,0x79,0x0b,0xab,0xff,0x15,0xc0,0x2a,0x9c,0x1f, + 0x50,0x78,0xdf,0xcd,0x3d,0x0e,0x80,0xcd,0xb8,0x91, + 0x40,0x7c,0x9d,0x2f,0x71,0x68,0x5c,0x00,0xbb,0xf0, + 0x28,0xa1,0xf8,0x3a,0x17,0x70,0x3a,0x16,0xa0,0x88, + 0x79,0x41,0x15,0x45,0xd1,0xc5,0x65,0xec,0xc0,0xb7, + 0xba,0x60,0x58,0x89,0x8d,0xd5,0x6f,0xa3,0xa3,0x1e, + 0x9f,0xf1,0x1e,0xd3,0xd5,0x7f,0xd3,0xf8,0x82,0x6b, + 0x21,0x84,0xf9,0x71,0xbf,0x89,0xf7,0xe0,0x49,0x44, + 0xb5,0xbf,0xe3,0x42,0x0a,0x4d,0x53,0x26,0x3c,0x32, + 0x40,0x06,0xc8,0x00,0x19,0x20,0x03,0x64,0x80,0xff, + 0xc7,0x95,0xe8,0x13,0xef,0x70,0x07,0x4f,0xb1,0xd8, + 0xa0,0x68,0x3f,0xf0,0xb8,0x4d,0x33,0xd0,0xab,0x2e, + 0x77,0x4d,0x6e,0x86,0xf5,0x98,0xb5,0x6d,0x9a,0x81, + 0x35,0x38,0x8a,0x7d,0x0d,0xc7,0xff,0xc4,0x4c,0xf5, + 0x45,0x96,0x37,0x71,0x06,0xc8,0x00,0x19,0x20,0x03, + 0x64,0x80,0x0c,0x30,0xb1,0x11,0x6b,0x6c,0x6d,0xc7, + 0x55,0x74,0xfd,0x69,0x6c,0xcd,0x28,0x8d,0xad,0x4e, + 0xc3,0x47,0x05,0xa5,0x21,0xbc,0xe0,0xb7,0xb1,0x35, + 0x55,0xdd,0xa9,0x6e,0x87,0x10,0xe6,0x1a,0x8b,0x1a, + 0xc0,0xd8,0xda,0x8a,0x7b,0xd2,0x5b,0x8b,0x9f,0x94, + 0x9d,0x9d,0xb1,0x98,0xbb,0xeb,0x71,0x25,0xa1,0xf8, + 0x37,0x38,0x3e,0x50,0x51,0x87,0xb0,0x16,0x3b,0x38, + 0x93,0x40,0xfc,0x33,0xec,0x1e,0x78,0x55,0x0c,0xe9, + 0x8d,0x16,0x38,0x82,0x0f,0x03,0x8a,0x7f,0x80,0x0d, + 0x43,0x2d,0xeb,0x44,0xe6,0x6e,0x17,0xcf,0x23,0x84, + 0x2f,0x2a,0x9b,0x81,0xc3,0xef,0xcb,0x84,0x4d,0xbe, + 0x2d,0xb8,0xdb,0x40,0xfc,0x47,0x9c,0x4d,0x76,0xb0, + 0x24,0x6e,0xb3,0xae,0xc3,0xa5,0x3e,0xe2,0x5f,0xe3, + 0x58,0xd2,0x93,0x71,0x04,0x8d,0xee,0x8e,0xb2,0x8d, + 0xba,0xec,0x66,0x6d,0x2b,0x40,0x1d,0x87,0xab,0xe5, + 0x12,0x70,0xbf,0x9a,0x1d,0x93,0x04,0x40,0xd9,0xb9, + 0x99,0x8b,0x35,0x0f,0x46,0xd6,0x23,0x6b,0x63,0xfc, + 0x1a,0x00,0x7a,0x84,0x45,0x65,0xbc,0xcf,0x3a,0x08, + 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, + 0x60,0x82 +}; diff --git a/data/resources/help/a.png b/data/resources/help/a.png new file mode 100644 index 0000000000000000000000000000000000000000..a8aa1eb2e39feec697a28915ff0e619ad5087c50 GIT binary patch literal 3635 zcmV-34$Se1P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009{Nkl z{V}@{^6=O-Gdu71JMZ&ro@Yx^N=~wz;e^X6fl~sOGTQB6sZ=t(Um3Uwc)$hVa_-z8 z;4|b?L2#f=-1`Iy0^FZ&Gm&1Rv@c^${;FeT6PYzXWEBPs;$+d6L;hFzUG zf80=~R0upXUBL6aj)f5(I$_fn^l}Tc*yNrm3t} zs~zW}C~6Ui$*M9Wzy{$MSY<{V9(^{aUA!3x@nrW2z1*e zMSZG5;FqcMs!E!srUV}4v5xl0df$Qbx|w%-dz*!Yg`U?qj)M@Q_1*V<>h-#AM*gaj ziJ#~`nKVt6VtgFOwguiD6%(2jo>*|!*E2`x*z`1^}la)&4P?$tY|S1M_`S9ngH>yav9QE|AAuI{mZ9DFHkAKLAh0A)EK<{g(g$002ovPDHLk FV1h>YyG8&2 literal 0 HcmV?d00001 diff --git a/data/resources/help/b.png b/data/resources/help/b.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa8097aab5cd311bd129be29f9b096a73f2322e GIT binary patch literal 3708 zcmV-?4ukQDP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000A*NklO*d^wNzBQU5D+{S3Sgg`;)sl9j*PlbY5C|HFa0^XGzgrXOVVo~&91yPiWMN#UpVoAE2q~pPD zy4fU~nf;Tt&=1~WliAtt%e;N>&6{XK2=+2!>~ZW1*cT8G@pd0-n&x-DA>aZq3>*TE zI=)*6z5t(qMc^^;+s{Lq0*?@)#T0QEm$ z=)Dq90M(GIz7!>EjaQDCm^n`{_N^!F=^D4Hfk%VJF~ zVEh42*!e>_4`gMc%}6{hR?}%w$z((&lM(Z&RLhuxVKj|-H8?0TnkMT?Fa5p)GqV0V zkw|z707PEb8)Ll2b+9Y#1bD4|4!9m>-Lh1#Q>s=Q*CX+`iu>Jam*~9i9=D@UsCZYa zwFCl590AVD3NV~Ywu^98R={!l1r8lKecKDxgkZt7B3*FS?M9shoQZ;bM$@>|*Vnkd zv$3H%MG813BVZ^B0h0p*Wb7O>ZJJD*rk`nsyKZRg8s9e#Xc{B&?Wyy+P9c#X7mHD< zRw>s8dz7MOu~e(^u3ir^eO5+5I%vGVS*f&$x?~s>41-x) z%*{$gww&n9twSa*t5%LOnHUhW$z)^PYC0|Qx~^KGmSi&VdQ^dYtXyvRe@4@|mrSZo zu`UyZenpv$N|x2+S{EImRRTX`1bm57fO}7%QjWX1b-HtL7x%K>$_RK7C4;=Kd#*?q z_mNtG56&G>*eE0tP2`;=b{9NSDW@MOWnYIMd-?QiGTHR~Sh=k7m=;c6d*Za+F7!-l zxmb*mc)Y330a&QjC|Op+J)Gsl)-Uf2sSq3ye}q<`}Na8S7e;^%xo1*h%KLDufCX6+Vv9e58|cD4J}?*qD)5_<{ze>K=? a{2KtUP;jbnY%U@I0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009cNkl_4c$%F zj>GAkbN9aPbIv{s)?h!*xBvgO_xG*!|JJD_Nurx=c%GXpl}g_6pT->QMCM543Tl!h znLVeyhJgUS52IUxsRaZ^qd$OG`%z3QJAnzG#K8=h|$fyZ#HK=7$w#GCPq z5t)-~#`{J_)}Dz^FbjXD0gDHY&+*^{f8a8D;#?2@!Y)k5+qhj+$*~k0n_Qob6FH)N z3-2}=?@R=0P#c!vp841wNvfT;4y*2#zzn>Psj+sq+djp-p%NI6ckomPtK|{+3J>Qc zFdS>JvIHgn1Na(a^XP$9*xW);Jy;a^q@IndIqt*fc(Hb6s<(_T#us%`{CS+lJq=3e zhax+-(zeHE-O!%I$rdE3B7J!y@Y8X)Asz{zl}6|7>lS5m-|DJ&nSLT>`$p(WICZBD>7s z_YJ1V`mnoRqA1w@jI!ibgX?{D)ZOveYaJM@7J4QG`-3&-f5edn_0Igz4#P4MI2zkA zXPPLoDOJbkFgNP4O!i7>-s;!4t;zkn@K26U;Yf(2W|Fdc#d$oh9yovvB}rJX#@o-W z$adr74ujuv);FLGmR0Un91m6t<--HB_r zqb9jG$9Ok!DJFiUDw&>$s^9{y6|G^@x78nm7oDWOO;@INZ0^2<-wOo41NXOkd%X`o z7XbdP*n90rgJT@NA0qH8SXgh~bfU$yC#RGr?d{5t@fIB{Mz)Az~% O0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0005=Nkl_!caD1g+!B-6egt96bmUsL}brSDK(j$4KqTGv|)=RKI@jP1r<47H8Vr<-}8gRISAB82b)k|Y_$)&c;dIq!dlz4*D% z#7%gYll`LCEcRq7aI*xT0hboq1M6@eYb*RgJ%Iyx03$esZ8hi$Zlx>bH$W3dE1)<< zl<6r}w*ba)u4cX2ay-XS0|#r`U~a&81K07Rh5(;%xq$~bS+n53Vh6soRA@3!V=HX? zF_V?iZ@7x78U%k9Px3xw^J%~Hs=~qF!-e*)Gix(AgF9H&c5ga88!Y|9O9t>6?=xd_ zcvDbe+K-j5akx_l`_g4qm2UJSRunl8OyP8e6lZ6;#0wqjCvl}BiZk8qg&CBSf}4<_+1Wdw)-5g-CYfC$h>`!xWs WO3EIhvK6)f0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0007lNklxBZfjiKF(aIu4^czZj`4jHh6$^UizNN7}MF~`%3B~gxLKO zT3+aLI^k7SF@!*pbk0#qNn;F2GR8=y6s45eTZ9m(l*)Z$jI`ELYfWoy_BdK=#u!PG z#+a?+w!K*hfm&-CW3oNQnB;|;ejs~y$Uvi%$_D+73L&VJ>bT^de(VFh8d)TM(+7Ao zf<&&ZC)={o*CR3h?XGnC2*BmQjbEiGyz4@9|Ii2efO-Mo!9G{Yl$~A-#PCZ1&$oqu zNiu%NrM`W+zb*L!;McAgHYuN&3P1rU00p1`6o3Ly0LCj<0{}NMz@e#K4(KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0005^Nklc#W8mgBIxcD%?7ef9&fV*rb&h?qo_acU zTJ3({XT9vTe@_uYFv+nZW^hpyvCrR+y_iSiN<|elgwQx6;{bPqEmb zXg~0{O*7D|E_Y3ChV_`WZJL2KIEsA@$N$7k^+lF9aR$f$86X2>fDACP5o>I1$5nLw zX>83Xjjc|@M+K!Jyx_O7HC5fIZif)&8jBjh*xHJF(p!t4l%1Win7iw7C878?I6hEO zhp-kqIFms9GwdFCRSfBk7C3?r1B!ou4MQ#KMCNW6&m)8{Dw~1B@5_WuzAd=hK>SCX zO?I#(ZnLh#r9R?c<5<#@aRiO-j}G8%Kplsx& theme, const std if(properties & ThemeFlags::SIZE && elem->has("size")) setSize(elem->get("size").cwiseProduct(scale)); } + +void GuiComponent::updateHelpPrompts() +{ + if(getParent()) + { + getParent()->updateHelpPrompts(); + return; + } + + std::vector prompts = getHelpPrompts(); + + if(mWindow->peekGui() == this) + mWindow->setHelpPrompts(prompts); +} diff --git a/src/GuiComponent.h b/src/GuiComponent.h index 0a0276638..fe53ad008 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -10,6 +10,8 @@ class Animation; class AnimationController; class ThemeData; +typedef std::pair HelpPrompt; + class GuiComponent { public: @@ -74,6 +76,12 @@ public: // You probably want to keep this behavior for any derived classes as well as add your own. virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties); + // Returns a list of help prompts. + virtual std::vector getHelpPrompts() { return std::vector(); }; + + // Called whenever help prompts change. + void updateHelpPrompts(); + protected: void renderChildren(const Eigen::Affine3f& transform) const; diff --git a/src/Settings.cpp b/src/Settings.cpp index 991723dc9..4665dcf84 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -33,6 +33,7 @@ void Settings::setDefaults() mBoolMap["DEBUG"] = false; mBoolMap["WINDOWED"] = false; mBoolMap["DISABLESOUNDS"] = false; + mBoolMap["DISABLEHELP"] = false; mBoolMap["DisableGamelistWrites"] = false; mBoolMap["ScrapeRatings"] = true; diff --git a/src/Window.cpp b/src/Window.cpp index 6635dca52..f15012c91 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -7,12 +7,14 @@ #include "Settings.h" #include #include "views/ViewController.h" +#include "components/HelpComponent.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true) { mInputManager = new InputManager(this); mViewController = new ViewController(this); + mHelp = new HelpComponent(this); pushGui(mViewController); } @@ -24,12 +26,14 @@ Window::~Window() while(peekGui()) delete peekGui(); + delete mHelp; delete mInputManager; } void Window::pushGui(GuiComponent* gui) { mGuiStack.push_back(gui); + setHelpPrompts(gui->getHelpPrompts()); } void Window::removeGui(GuiComponent* gui) @@ -38,7 +42,11 @@ void Window::removeGui(GuiComponent* gui) { if(*i == gui) { - mGuiStack.erase(i); + i = mGuiStack.erase(i); + + if(i == mGuiStack.end() && mGuiStack.size()) // we just popped the stack and the stack is not empty + setHelpPrompts(mGuiStack.back()->getHelpPrompts()); + return; } } @@ -49,7 +57,7 @@ GuiComponent* Window::peekGui() if(mGuiStack.size() == 0) return NULL; - return mGuiStack.at(mGuiStack.size() - 1); + return mGuiStack.back(); } bool Window::init(unsigned int width, unsigned int height) @@ -72,6 +80,10 @@ bool Window::init(unsigned int width, unsigned int height) mDefaultFonts.push_back(Font::get(FONT_SIZE_LARGE)); } + // update our help because font sizes probably changed + if(peekGui()) + setHelpPrompts(peekGui()->getHelpPrompts()); + return true; } @@ -138,6 +150,8 @@ void Window::render() mGuiStack.at(i)->render(transform); } + mHelp->render(transform); + if(Settings::getInstance()->getBool("DRAWFRAMERATE")) { Renderer::setMatrix(Eigen::Affine3f::Identity()); @@ -167,3 +181,16 @@ void Window::renderLoadingScreen() mDefaultFonts.at(2)->drawCenteredText("LOADING", 0, (Renderer::getScreenHeight() - mDefaultFonts.at(2)->getHeight()) / 2.0f , 0xFFFFFFFF); Renderer::swapBuffers(); } + +void Window::setHelpPrompts(const std::vector& prompts) +{ + mHelp->clearPrompts(); + + std::map seenMap; + for(auto it = prompts.begin(); it != prompts.end(); it++) + { + // only add it if the same icon hasn't already been added + if(seenMap.insert(std::make_pair(it->first, true)).second) + mHelp->addPrompt(it->first, it->second); + } +} diff --git a/src/Window.h b/src/Window.h index d48450806..5621f7baa 100644 --- a/src/Window.h +++ b/src/Window.h @@ -7,6 +7,7 @@ #include "resources/Font.h" class ViewController; +class HelpComponent; class Window { @@ -35,9 +36,12 @@ public: void renderLoadingScreen(); + void setHelpPrompts(const std::vector& prompts); + private: InputManager* mInputManager; ViewController* mViewController; + HelpComponent* mHelp; std::vector mGuiStack; std::vector< std::shared_ptr > mDefaultFonts; diff --git a/src/components/AsyncReqComponent.cpp b/src/components/AsyncReqComponent.cpp index 2f7f3a9ea..ea54c0e03 100644 --- a/src/components/AsyncReqComponent.cpp +++ b/src/components/AsyncReqComponent.cpp @@ -42,3 +42,10 @@ void AsyncReqComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f point(cos(mTime * 0.01f) * 12, sin(mTime * 0.01f) * 12, 0); Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF); } + +std::vector AsyncReqComponent::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("b", "cancel")); + return prompts; +} diff --git a/src/components/AsyncReqComponent.h b/src/components/AsyncReqComponent.h index a239ad3f9..3c10d12cb 100644 --- a/src/components/AsyncReqComponent.h +++ b/src/components/AsyncReqComponent.h @@ -35,6 +35,7 @@ public: void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; + virtual std::vector getHelpPrompts() override; private: std::function)> mSuccessFunc; std::function mCancelFunc; diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 6ae9f5ebd..f5e43e4ba 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -32,9 +32,10 @@ bool ButtonComponent::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -void ButtonComponent::setText(const std::string& text, unsigned int focusedColor, unsigned int unfocusedColor) +void ButtonComponent::setText(const std::string& text, const std::string& helpText, unsigned int focusedColor, unsigned int unfocusedColor) { mText = text; + mHelpText = helpText; mTextColorFocused = focusedColor; mTextColorUnfocused = unfocusedColor; @@ -42,6 +43,8 @@ void ButtonComponent::setText(const std::string& text, unsigned int focusedColor mTextCache = std::unique_ptr(f->buildTextCache(mText, 0, 0, getCurTextColor())); setSize(mTextCache->metrics.size + Eigen::Vector2f(12, 12)); + + updateHelpPrompts(); } void ButtonComponent::onFocusGained() @@ -86,3 +89,10 @@ unsigned int ButtonComponent::getCurTextColor() const else return mTextColorFocused; } + +std::vector ButtonComponent::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("a", mHelpText.empty() ? mText.c_str() : mHelpText.c_str())); + return prompts; +} diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index 5c135fc4a..7db63fb22 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -15,12 +15,14 @@ public: bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; - void setText(const std::string& text, unsigned int focusedTextColor, unsigned int unfocusedTextColor = 0x555555FF); + void setText(const std::string& text, const std::string& helpText, unsigned int focusedTextColor, unsigned int unfocusedTextColor = 0x555555FF); void onSizeChanged() override; void onFocusGained() override; void onFocusLost() override; + virtual std::vector getHelpPrompts() override; + private: std::shared_ptr getFont(); std::function mPressedFunc; @@ -33,6 +35,7 @@ private: unsigned int getCurTextColor() const; std::string mText; + std::string mHelpText; std::unique_ptr mTextCache; NinePatchComponent mBox; }; diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentListComponent.cpp index 8dc894996..53b7dec1e 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentListComponent.cpp @@ -484,4 +484,40 @@ void ComponentListComponent::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i if(to != Eigen::Vector2i(-1, -1)) getCell(to.x(), to.y())->component->onFocusGained(); + + updateHelpPrompts(); +} + +std::vector ComponentListComponent::getHelpPrompts() +{ + std::vector prompts; + if(cursorValid()) + prompts = getSelectedComponent()->getHelpPrompts(); + + bool canScrollVert = true; + bool canScrollHoriz = true; + for(auto it = prompts.begin(); it != prompts.end(); it++) + { + if(it->first == "up/down/left/right") + { + canScrollHoriz = false; + canScrollVert = false; + break; + }else if(it->first == "up/down") + { + canScrollVert = false; + }else if(it->first == "left/right") + { + canScrollHoriz = false; + } + } + + if(canScrollHoriz && canScrollVert) + prompts.push_back(HelpPrompt("up/down/left/right", "move cursor")); + else if(canScrollHoriz) + prompts.push_back(HelpPrompt("left/right", "move cursor")); + else if(canScrollVert) + prompts.push_back(HelpPrompt("up/down", "move cursor")); + + return prompts; } diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentListComponent.h index f5d226dad..8adbd2c67 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentListComponent.h @@ -43,6 +43,8 @@ public: void moveCursor(Eigen::Vector2i dir); + virtual std::vector getHelpPrompts() override; + private: class ComponentEntry { diff --git a/src/components/GuiGameScraper.cpp b/src/components/GuiGameScraper.cpp index 7c631534e..fb6195095 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/components/GuiGameScraper.cpp @@ -41,10 +41,11 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: float sw = (float)Renderer::getScreenWidth(); float sh = (float)Renderer::getScreenHeight(); - float colWidth = sw * 0.35f; - - mList.forceColumnWidth(0, (unsigned int)colWidth); - mList.forceColumnWidth(1, (unsigned int)colWidth); + float listWidth = sw * 0.7f; + float col1Width = listWidth * 0.7f; + float col2Width = listWidth * 0.3f; + mList.forceColumnWidth(0, (unsigned int)col1Width); + mList.forceColumnWidth(1, (unsigned int)col2Width); using namespace Eigen; @@ -57,20 +58,19 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentListComponent::AlignLeft); mResultDesc.setText(params.game->metadata.get("desc")); - mResultDesc.setSize(colWidth, 0); + mResultDesc.setSize(col1Width, 0); mResultInfo.addChild(&mResultDesc); mResultInfo.setSize(mResultDesc.getSize().x(), mResultDesc.getFont()->getHeight() * 3.0f); mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentListComponent::AlignLeft); - mResultThumbnail.setOrigin(0.5f, 0.5f); - mResultThumbnail.setMaxSize(colWidth, mResultInfo.getSize().y() + mResultName.getSize().y()); - mList.setEntry(Vector2i(1, 1), Vector2i(1, 2), &mResultThumbnail, false, ComponentListComponent::AlignCenter); + mResultThumbnail.setMaxSize(col2Width, mResultInfo.getSize().y()); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mResultThumbnail, false, ComponentListComponent::AlignCenter); //y = 3 is a spacer row mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentListComponent::AlignLeft); mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : getCleanFileName(params.game->getPath())); - mSearchText.setSize(colWidth * 2 - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); + mSearchText.setSize(listWidth - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentListComponent::AlignRight); //y = 5 is a spacer row @@ -216,4 +216,15 @@ void GuiGameScraper::updateThumbnail() } mThumbnailReq.reset(); + mList.onPositionChanged(); // a hack to fix the thumbnail position since its size changed +} + +std::vector GuiGameScraper::getHelpPrompts() +{ + std::vector prompts = mList.getHelpPrompts(); + if(getSelectedIndex() != -1) + prompts.push_back(HelpPrompt("a", "accept result")); + + prompts.push_back(HelpPrompt("b", "cancel/skip")); + return prompts; } diff --git a/src/components/GuiGameScraper.h b/src/components/GuiGameScraper.h index 49925fd40..a7fe658ea 100644 --- a/src/components/GuiGameScraper.h +++ b/src/components/GuiGameScraper.h @@ -22,6 +22,9 @@ public: void update(int deltaTime) override; void search(); + + virtual std::vector getHelpPrompts() override; + private: int getSelectedIndex(); void onSearchDone(std::vector results); diff --git a/src/components/GuiMetaDataEd.cpp b/src/components/GuiMetaDataEd.cpp index f3f7d7b39..cb48a0ccd 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/components/GuiMetaDataEd.cpp @@ -29,7 +29,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mHeader.setText(header); //initialize buttons - mDeleteButton.setText("DELETE", mDeleteFunc ? 0xFF0000FF : 0x555555FF); + mDeleteButton.setText("DELETE", "delete file", mDeleteFunc ? 0xFF0000FF : 0x555555FF); if(mDeleteFunc) { std::function deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; @@ -37,10 +37,10 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mDeleteButton.setPressedFunc(pressedFunc); } - mFetchButton.setText("FETCH", 0x00FF00FF); + mFetchButton.setText("FETCH", "download metadata", 0x00FF00FF); mFetchButton.setPressedFunc(std::bind(&GuiMetaDataEd::fetch, this)); - mSaveButton.setText("SAVE", 0x0000FFFF); + mSaveButton.setText("SAVE", "save", 0x0000FFFF); mSaveButton.setPressedFunc([&] { save(); delete this; }); //initialize metadata list @@ -184,3 +184,10 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) return false; } + +std::vector GuiMetaDataEd::getHelpPrompts() +{ + std::vector prompts = mList.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "discard changes")); + return prompts; +} diff --git a/src/components/GuiMetaDataEd.h b/src/components/GuiMetaDataEd.h index 396d2d95c..b1b1b65df 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/components/GuiMetaDataEd.h @@ -18,6 +18,8 @@ public: bool input(InputConfig* config, Input input) override; + virtual std::vector getHelpPrompts() override; + private: void save(); void fetch(); diff --git a/src/components/GuiScraperStart.cpp b/src/components/GuiScraperStart.cpp index 6ef080543..192277d15 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/components/GuiScraperStart.cpp @@ -44,7 +44,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentListComponent::AlignRight); mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentListComponent::AlignLeft); - mStartButton.setText("GO GO GO GO", 0x00FF00FF); + mStartButton.setText("GO GO GO GO", "begin", 0x00FF00FF); mStartButton.setPressedFunc(std::bind(&GuiScraperStart::pressedStart, this)); mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentListComponent::AlignCenter); @@ -116,3 +116,10 @@ bool GuiScraperStart::input(InputConfig* config, Input input) return false; } + +std::vector GuiScraperStart::getHelpPrompts() +{ + std::vector prompts = mList.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "cancel")); + return prompts; +} diff --git a/src/components/GuiScraperStart.h b/src/components/GuiScraperStart.h index 117433f33..764e79318 100644 --- a/src/components/GuiScraperStart.h +++ b/src/components/GuiScraperStart.h @@ -22,6 +22,8 @@ public: bool input(InputConfig* config, Input input) override; + virtual std::vector getHelpPrompts() override; + private: void pressedStart(); void start(); diff --git a/src/components/GuiSettingsMenu.cpp b/src/components/GuiSettingsMenu.cpp index f2287b647..222e47bec 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/components/GuiSettingsMenu.cpp @@ -7,7 +7,7 @@ #include "../scrapers/GamesDBScraper.h" GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 7)), + mList(window, Eigen::Vector2i(2, 8)), mBox(mWindow, ":/frame.png", 0x444444FF), mDrawFramerateSwitch(window), mVolumeSlider(window, 0, 100, 1, "%"), @@ -15,6 +15,7 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mScraperOptList(window), mScrapeRatingsSwitch(window), mDimSlider(window, 0, 60, 1, "s"), + mDisableHelpSwitch(window), mSaveButton(window) { loadStates(); @@ -87,14 +88,20 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), label->setColor(0x0000FFFF); mLabels.push_back(label); mList.setEntry(Vector2i(0, 5), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); - - // dim slider mList.setEntry(Vector2i(1, 5), Vector2i(1, 1), &mDimSlider, true, ComponentListComponent::AlignCenter); + // disable help switch + label = new TextComponent(mWindow); + label->setText("Disable help: "); + label->setColor(0x0000FFFF); + mLabels.push_back(label); + mList.setEntry(Vector2i(0, 6), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, 6), Vector2i(1, 1), &mDisableHelpSwitch, true, ComponentListComponent::AlignCenter); + //save button - mSaveButton.setText("SAVE", 0x00FF00FF); + mSaveButton.setText("SAVE", "apply & save", 0x00FF00FF); mSaveButton.setPressedFunc([this] () { applyStates(); delete this; }); - mList.setEntry(Vector2i(0, 6), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter, Matrix(false, true)); + mList.setEntry(Vector2i(0, 7), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter, Matrix(false, true)); //center list mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); @@ -139,6 +146,8 @@ void GuiSettingsMenu::loadStates() mScrapeRatingsSwitch.setState(s->getBool("ScrapeRatings")); mDimSlider.setValue((float)(s->getInt("DIMTIME") / 1000)); + + mDisableHelpSwitch.setState(s->getBool("DISABLEHELP")); } void GuiSettingsMenu::applyStates() @@ -157,5 +166,14 @@ void GuiSettingsMenu::applyStates() s->setInt("DIMTIME", (int)(mDimSlider.getValue() * 1000)); + s->setBool("DISABLEHELP", mDisableHelpSwitch.getState()); + s->saveFile(); } + +std::vector GuiSettingsMenu::getHelpPrompts() +{ + std::vector prompts = mList.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "discard changes")); + return prompts; +} diff --git a/src/components/GuiSettingsMenu.h b/src/components/GuiSettingsMenu.h index bd0d726fe..154ca2d4b 100644 --- a/src/components/GuiSettingsMenu.h +++ b/src/components/GuiSettingsMenu.h @@ -20,6 +20,8 @@ public: bool input(InputConfig* config, Input input) override; + std::vector getHelpPrompts() override; + private: void loadStates(); void applyStates(); @@ -34,6 +36,7 @@ private: OptionListComponent< std::shared_ptr > mScraperOptList; SwitchComponent mScrapeRatingsSwitch; SliderComponent mDimSlider; + SwitchComponent mDisableHelpSwitch; ButtonComponent mSaveButton; std::vector mLabels; diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp new file mode 100644 index 000000000..1e275f154 --- /dev/null +++ b/src/components/HelpComponent.cpp @@ -0,0 +1,92 @@ +#include "HelpComponent.h" +#include "../Renderer.h" +#include "ImageComponent.h" +#include "../resources/Font.h" +#include "../Settings.h" +#include "../Log.h" +#include + +static const std::map ICON_PATH_MAP = boost::assign::map_list_of + ("up/down", ":/help/up_down.png") + ("left/right", ":/help/left_right.png") + ("up/down/left/right", ":/help/dpad.png") + ("a", ":/help/a.png") + ("b", ":/help/b.png") + ("menu", ":/help/menu.png"); + +HelpComponent::HelpComponent(Window* window) : GuiComponent(window) +{ +} + +void HelpComponent::clearPrompts() +{ + mPrompts.clear(); +} + +void HelpComponent::addPrompt(const char* icon, const char* text) +{ + if(Settings::getInstance()->getBool("DISABLEHELP")) + return; + + Prompt p; + + std::shared_ptr font = getFont(); + + // make the icon + p.icon = std::shared_ptr(new ImageComponent(mWindow)); + p.icon->setResize(0, (float)FONT_SIZE_SMALL); + p.icon->setImage(getIconTexture(icon)); + p.icon->setPosition(0.0f, mPrompts.size() ? mPrompts.back().icon->getPosition().y() + mPrompts.back().icon->getSize().y() + 10 : 0); + p.icon->setOpacity(0xEE); + + // make the text + const float textY = (p.icon->getSize().y() - (float)font->getHeight())/2; + p.textCache = std::shared_ptr(font->buildTextCache(text, p.icon->getSize().x() + 6, textY, 0x888888EE)); + + mPrompts.push_back(p); + + setPosition(0, (float)Renderer::getScreenHeight() - (p.icon->getPosition().y() + p.icon->getSize().y() + 6)); +} + +std::shared_ptr HelpComponent::getFont() const +{ + // font size controls icon height + return Font::get(FONT_SIZE_SMALL); +} + +std::shared_ptr HelpComponent::getIconTexture(const char* name) +{ + auto it = mIconCache.find(name); + if(it != mIconCache.end()) + return it->second; + + auto pathLookup = ICON_PATH_MAP.find(name); + if(pathLookup == ICON_PATH_MAP.end()) + { + LOG(LogError) << "Unknown help icon \"" << name << "\"!"; + return nullptr; + } + if(!ResourceManager::getInstance()->fileExists(pathLookup->second)) + { + LOG(LogError) << "Help icon \"" << name << "\" - corresponding image file \"" << pathLookup->second << "\" misisng!"; + return nullptr; + } + + std::shared_ptr tex = TextureResource::get(pathLookup->second); + mIconCache[std::string(name)] = tex; + return tex; +} + +void HelpComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + + std::shared_ptr font = getFont(); + for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) + { + it->icon->render(trans); + // we actually depend on it->icon->render to call Renderer::setMatrix to draw at the right Y offset (efficiency!) + // if for some reason this breaks in the future, it should be equivalent to translating parentTrans by it->icon->getPosition() + font->renderTextCache(it->textCache.get()); + } +} diff --git a/src/components/HelpComponent.h b/src/components/HelpComponent.h new file mode 100644 index 000000000..10cd185cf --- /dev/null +++ b/src/components/HelpComponent.h @@ -0,0 +1,33 @@ +#pragma once + +#include "../GuiComponent.h" + +class ImageComponent; +class TextureResource; +class TextCache; +class Font; + +class HelpComponent : public GuiComponent +{ +public: + HelpComponent(Window* window); + + void clearPrompts(); + void addPrompt(const char* icon, const char* text); + + void render(const Eigen::Affine3f& parent) override; + +private: + std::shared_ptr getFont() const; + std::shared_ptr getIconTexture(const char* name); + + std::map< std::string, std::shared_ptr > mIconCache; + + struct Prompt + { + std::shared_ptr icon; + std::shared_ptr textCache; + }; + + std::vector mPrompts; +}; diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index f52baaf61..ec2d04535 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -136,3 +136,10 @@ void RatingComponent::applyTheme(const std::shared_ptr& theme, const if(properties & PATH && elem->has("unfilledPath")) mUnfilledTexture = TextureResource::get(elem->get("unfilledPath"), true); } + +std::vector RatingComponent::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("a", "+1 star")); + return prompts; +} diff --git a/src/components/RatingComponent.h b/src/components/RatingComponent.h index 4b5da45c2..125ee5a83 100644 --- a/src/components/RatingComponent.h +++ b/src/components/RatingComponent.h @@ -23,6 +23,8 @@ public: virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + virtual std::vector getHelpPrompts() override; + private: void updateVertices(); diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 902ab17c2..71de88303 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -142,3 +142,10 @@ void SliderComponent::onValueChanged() mValueCache->metrics.size[0] = w; // fudge the width } } + +std::vector SliderComponent::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("left/right", "adjust")); + return prompts; +} diff --git a/src/components/SliderComponent.h b/src/components/SliderComponent.h index b5e82c5f7..a0ee53571 100644 --- a/src/components/SliderComponent.h +++ b/src/components/SliderComponent.h @@ -20,6 +20,8 @@ public: void render(const Eigen::Affine3f& parentTrans) override; void onSizeChanged() override; + + virtual std::vector getHelpPrompts() override; private: void onValueChanged(); diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index dcffca3e5..84a829002 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -45,3 +45,10 @@ void SwitchComponent::setState(bool state) { mState = state; } + +std::vector SwitchComponent::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("a", "toggle")); + return prompts; +} diff --git a/src/components/SwitchComponent.h b/src/components/SwitchComponent.h index b3fcaac05..d096df37b 100644 --- a/src/components/SwitchComponent.h +++ b/src/components/SwitchComponent.h @@ -15,6 +15,8 @@ public: bool getState(); void setState(bool state); + virtual std::vector getHelpPrompts() override; + private: bool mState; }; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index f8b88ea98..bb6fec7a6 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -79,6 +79,7 @@ bool TextEditComponent::input(InputConfig* config, Input input) if(config->isMappedTo("a", input) && mFocused && !mEditing) { mEditing = true; + updateHelpPrompts(); return true; } @@ -87,9 +88,12 @@ bool TextEditComponent::input(InputConfig* config, Input input) if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_RETURN) { if(isMultiline()) + { textInput("\n"); - else + }else{ mEditing = false; + updateHelpPrompts(); + } return true; } @@ -97,6 +101,7 @@ bool TextEditComponent::input(InputConfig* config, Input input) if((config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_ESCAPE) || (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("b", input))) { mEditing = false; + updateHelpPrompts(); return true; } @@ -222,3 +227,16 @@ bool TextEditComponent::isEditing() const { return mEditing; } + +std::vector TextEditComponent::getHelpPrompts() +{ + std::vector prompts; + if(mEditing) + { + prompts.push_back(HelpPrompt("up/down/left/right", "move cursor")); + prompts.push_back(HelpPrompt("b", "stop editing")); + }else{ + prompts.push_back(HelpPrompt("a", "edit")); + } + return prompts; +} diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 9746ca95f..f1875dfba 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -26,6 +26,8 @@ public: bool isEditing() const; + virtual std::vector getHelpPrompts() override; + private: void onTextChanged(); void onCursorChanged(); diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index d6d54695f..11b62abb0 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -81,3 +81,10 @@ bool SystemView::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } + +std::vector SystemView::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("a", "select")); + return prompts; +} diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 9fd4c25d4..89620bf5f 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -16,6 +16,8 @@ public: bool input(InputConfig* config, Input input) override; + std::vector getHelpPrompts() override; + private: SystemData* mSystem; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 9763ec034..51f3855b9 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -31,6 +31,7 @@ void ViewController::goToSystemView(SystemData* system) { mState.viewing = SYSTEM_SELECT; mCurrentView = getSystemView(system); + updateHelpPrompts(); playViewTransition(); } @@ -56,6 +57,7 @@ void ViewController::goToGameList(SystemData* system) mState.data.system = system; mCurrentView = getGameListView(system); + updateHelpPrompts(); playViewTransition(); } @@ -250,3 +252,15 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) } } } + +std::vector ViewController::getHelpPrompts() +{ + std::vector prompts; + if(!mCurrentView) + return prompts; + + prompts = mCurrentView->getHelpPrompts(); + prompts.push_back(HelpPrompt("menu", "open menu")); + + return prompts; +} diff --git a/src/views/ViewController.h b/src/views/ViewController.h index fdb6332d1..5104ef3ec 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -60,6 +60,8 @@ public: inline const State& getState() const { return mState; } + virtual std::vector getHelpPrompts() override; + private: void playViewTransition(); std::shared_ptr getGameListView(SystemData* system); diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index d7fbf6bfd..62fc6e7cb 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -70,3 +70,13 @@ void BasicGameListView::launch(FileData* game) { mWindow->getViewController()->launch(game); } + +std::vector BasicGameListView::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("left/right", "change systems")); + prompts.push_back(HelpPrompt("up/down", "scroll")); + prompts.push_back(HelpPrompt("a", "play")); + prompts.push_back(HelpPrompt("b", "back")); + return prompts; +} diff --git a/src/views/gamelist/BasicGameListView.h b/src/views/gamelist/BasicGameListView.h index d88135e8f..4cd7ef347 100644 --- a/src/views/gamelist/BasicGameListView.h +++ b/src/views/gamelist/BasicGameListView.h @@ -18,6 +18,8 @@ public: virtual const char* getName() const override { return "basic"; } + virtual std::vector getHelpPrompts() override; + protected: virtual void populateList(const std::vector& files) override; virtual void launch(FileData* game) override; diff --git a/src/views/gamelist/GridGameListView.cpp b/src/views/gamelist/GridGameListView.cpp index d6afd601a..42978ee74 100644 --- a/src/views/gamelist/GridGameListView.cpp +++ b/src/views/gamelist/GridGameListView.cpp @@ -54,3 +54,12 @@ void GridGameListView::launch(FileData* game) { mWindow->getViewController()->launch(game); } + +std::vector GridGameListView::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("up/down/left/right", "scroll")); + prompts.push_back(HelpPrompt("a", "launch")); + prompts.push_back(HelpPrompt("b", "back")); + return prompts; +} diff --git a/src/views/gamelist/GridGameListView.h b/src/views/gamelist/GridGameListView.h index df9771b83..7c744e943 100644 --- a/src/views/gamelist/GridGameListView.h +++ b/src/views/gamelist/GridGameListView.h @@ -19,6 +19,8 @@ public: virtual const char* getName() const override { return "grid"; } + virtual std::vector getHelpPrompts() override; + protected: virtual void populateList(const std::vector& files) override; virtual void launch(FileData* game) override; From ac57e111d2e5677489c91af6fe666ca6d586980e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 26 Jan 2014 16:20:21 -0600 Subject: [PATCH 160/386] Work around for boost::assign::map_list_of and gcc --- src/ThemeData.cpp | 50 +++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 6182499c0..02c6531ef 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -10,24 +10,36 @@ #include "components/ImageComponent.h" #include "components/TextComponent.h" -std::map< std::string, std::map > ThemeData::sElementMap = boost::assign::map_list_of - ("image", boost::assign::map_list_of + +// This is a work around for some ambiguity that is introduced in C++11 that boost::assign::map_list_of leave open. +// We use makeMap(actualmap) to implicitly convert the boost::assign::map_list_of's return type to ElementMapType. +// Problem exists with gcc 4.7 and Boost 1.51. Works fine with MSVC2010 without this hack. +typedef std::map ElementMapType; +template +ElementMapType makeMap(const T& mapInit) +{ + ElementMapType m = mapInit; + return m; +} + +std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign::map_list_of + ("image", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("maxSize", NORMALIZED_PAIR) ("origin", NORMALIZED_PAIR) ("path", PATH) ("tile", BOOLEAN) - ("color", COLOR)) - ("text", boost::assign::map_list_of + ("color", COLOR))) + ("text", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("text", STRING) ("color", COLOR) ("fontPath", PATH) ("fontSize", FLOAT) - ("center", BOOLEAN)) - ("textlist", boost::assign::map_list_of + ("center", BOOLEAN))) + ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("selectorColor", COLOR) @@ -38,27 +50,27 @@ std::map< std::string, std::map > T ("fontSize", FLOAT) ("scrollSound", PATH) ("alignment", STRING) - ("horizontalMargin", FLOAT)) - ("container", boost::assign::map_list_of + ("horizontalMargin", FLOAT))) + ("container", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR)) - ("ninepatch", boost::assign::map_list_of + ("size", NORMALIZED_PAIR))) + ("ninepatch", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) - ("path", PATH)) - ("datetime", boost::assign::map_list_of + ("path", PATH))) + ("datetime", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("color", COLOR) ("fontPath", PATH) - ("fontSize", FLOAT)) - ("rating", boost::assign::map_list_of + ("fontSize", FLOAT))) + ("rating", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("filledPath", PATH) - ("unfilledPath", PATH)) - ("sound", boost::assign::map_list_of - ("path", PATH)); + ("unfilledPath", PATH))) + ("sound", makeMap(boost::assign::map_list_of + ("path", PATH))); namespace fs = boost::filesystem; @@ -198,7 +210,7 @@ void ThemeData::parseViews(const pugi::xml_node& root) throw error << "View missing \"name\" attribute!"; const char* viewKey = node.attribute("name").as_string(); - ThemeView& view = mViews.insert(std::make_pair(viewKey, ThemeView())).first->second; + ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; // load common first if(common && node != common) @@ -233,7 +245,7 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) off = nameAttr.find_first_of(delim, prevOff); parseElement(node, elemTypeIt->second, - view.elements.insert(std::make_pair(elemKey, ThemeElement())).first->second); + view.elements.insert(std::pair(elemKey, ThemeElement())).first->second); if(std::find(view.orderedKeys.begin(), view.orderedKeys.end(), elemKey) == view.orderedKeys.end()) view.orderedKeys.push_back(elemKey); From 5c12395442d7771d496a68265ea87ea69eebdc55 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 30 Jan 2014 17:19:32 -0600 Subject: [PATCH 161/386] Fix the crash from writing files when the gamelist.xml contains games that do not exist on the filesystem. Write that ES has cleanly shut down to the log file instead of standard output. --- src/XMLReader.cpp | 6 +++--- src/main.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 7552f159c..af74a993a 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -281,9 +281,9 @@ void updateGamelist(SystemData* system) continue; } - boost::filesystem::path nodePath(pathNode.text().get()); - boost::filesystem::path gamePath((*fit)->getPath()); - if(fs::canonical(nodePath) == fs::canonical(gamePath)) + fs::path nodePath(pathNode.text().get()); + fs::path gamePath((*fit)->getPath()); + if(nodePath == gamePath || (fs::exists(nodePath) && fs::exists(gamePath) && fs::equivalent(nodePath, gamePath))) { // found it root.remove_child(fileNode); diff --git a/src/main.cpp b/src/main.cpp index 013919bb4..5bf88103d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -249,7 +249,7 @@ int main(int argc, char* argv[]) window.deinit(); SystemData::deleteSystems(); - std::cout << "EmulationStation cleanly shutting down...\n"; + LOG(LogInfo) << "EmulationStation cleanly shutting down."; return 0; } From 7699a4f9bee39db675c8795503be0752aa0e2c01 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 7 Feb 2014 20:15:48 -0600 Subject: [PATCH 162/386] First IList implementation --- CMakeLists.txt | 4 +- src/ThemeDumper.cpp | 2 - src/ThemeDumper.h | 13 ---- src/components/IList.cpp | 81 +++++++++++++++++++++ src/components/IList.h | 36 ++++++++++ src/components/ImageGridComponent.h | 66 ++++------------- src/components/TextListComponent.h | 107 ++++++++-------------------- 7 files changed, 159 insertions(+), 150 deletions(-) delete mode 100644 src/ThemeDumper.cpp delete mode 100644 src/ThemeDumper.h create mode 100644 src/components/IList.cpp create mode 100644 src/components/IList.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a5088342..1ba440e90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,7 +155,6 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeDumper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h @@ -165,6 +164,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h @@ -235,7 +235,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeDumper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp @@ -245,6 +244,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp diff --git a/src/ThemeDumper.cpp b/src/ThemeDumper.cpp deleted file mode 100644 index e7ec37ad4..000000000 --- a/src/ThemeDumper.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "ThemeDumper.h" - diff --git a/src/ThemeDumper.h b/src/ThemeDumper.h deleted file mode 100644 index efd7a374b..000000000 --- a/src/ThemeDumper.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "ThemeData.h" - -// Should be able to: -// 1. Take a list of "tests" to run. -// a. Each test works by calling setTheme on a theme with a "fake" theme that records all getElement() access. -// 2. Results can be output to a text file, OR compared with a loaded theme to create warnings about potentially unused elements. - -class ThemeDumper -{ - -}; diff --git a/src/components/IList.cpp b/src/components/IList.cpp new file mode 100644 index 000000000..148cd429e --- /dev/null +++ b/src/components/IList.cpp @@ -0,0 +1,81 @@ +#include "IList.h" + +const IList::ScrollTier IList::SCROLL_SPEED[IList::SCROLL_SPEED_COUNT] = { + {500, 500}, + {2600, 150}, + {0, 100} +}; + +IList::IList() +{ + mScrollTier = 0; + mScrollVelocity = 0; + mScrollTierAccumulator = 0; + mScrollCursorAccumulator = 0; +} + +void IList::listInput(int velocity) +{ + mScrollVelocity = velocity; + mScrollTier = 0; + mScrollTierAccumulator = 0; + mScrollCursorAccumulator = 0; + scroll(mScrollVelocity); +} + +void IList::listUpdate(int deltaTime) +{ + if(mScrollVelocity == 0 || getLength() < 2) + return; + + mScrollCursorAccumulator += deltaTime; + mScrollTierAccumulator += deltaTime; + + while(mScrollCursorAccumulator >= SCROLL_SPEED[mScrollTier].scrollDelay) + { + mScrollCursorAccumulator -= SCROLL_SPEED[mScrollTier].scrollDelay; + scroll(mScrollVelocity); + } + + // are we ready to go even FASTER? + while(mScrollTier < SCROLL_SPEED_COUNT - 1 && mScrollTierAccumulator >= SCROLL_SPEED[mScrollTier].length) + { + mScrollTierAccumulator -= SCROLL_SPEED[mScrollTier].length; + mScrollTier++; + } +} + +void IList::scroll(int amt) +{ + if(mScrollVelocity == 0 || getLength() < 2) + return; + + int cursor = getCursorIndex() + amt; + int absAmt = amt < 0 ? -amt : amt; + + // stop at the end if we've been holding down the button for a long time or + // we're scrolling faster than one item at a time (e.g. page up/down) + // otherwise, loop around + if(mScrollTier > 0 || absAmt > 1) + { + if(cursor < 0) + cursor = 0; + else if(cursor >= getLength()) + cursor = getLength() - 1; + }else{ + if(cursor < 0) + cursor += getLength(); + else if(cursor >= getLength()) + cursor -= getLength(); + } + + if(cursor != getCursorIndex()) + onScroll(absAmt); + + setCursorIndex(cursor); +} + +bool IList::isScrolling() const +{ + return (mScrollVelocity != 0 && mScrollTier > 0); +} diff --git a/src/components/IList.h b/src/components/IList.h new file mode 100644 index 000000000..04417584c --- /dev/null +++ b/src/components/IList.h @@ -0,0 +1,36 @@ +#pragma once + +class IList +{ +public: + IList(); + + bool isScrolling() const; + +protected: + void listInput(int velocity); // a velocity of 0 = stop scrolling + void listUpdate(int deltaTime); + + virtual int getCursorIndex() = 0; + virtual void setCursorIndex(int index) = 0; // (index >= 0 && index < getLength()) is guaranteed to be true + virtual int getLength() = 0; + + void scroll(int amt); + virtual void onScroll(int amt) {}; + +private: + struct ScrollTier + { + int length; // how long we stay on this level before going to the next + int scrollDelay; // how long between scrolls + }; + + static const int SCROLL_SPEED_COUNT = 3; + static const ScrollTier SCROLL_SPEED[SCROLL_SPEED_COUNT]; + + int mScrollTier; + int mScrollVelocity; + + int mScrollTierAccumulator; + int mScrollCursorAccumulator; +}; diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index 0b99ae43a..d2f8529cf 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -1,11 +1,12 @@ #pragma once #include "../GuiComponent.h" +#include "IList.h" #include "../components/ImageComponent.h" #include "../Log.h" template -class ImageGridComponent : public GuiComponent +class ImageGridComponent : public GuiComponent, public IList { public: ImageGridComponent(Window* window); @@ -42,6 +43,11 @@ public: void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; +protected: + virtual int getCursorIndex() { return mCursor; } + virtual void setCursorIndex(int index) { mCursor = index; onCursorChanged(CURSOR_STOPPED); } + virtual int getLength() { return mEntries.size(); } + private: Eigen::Vector2f getSquareSize(std::shared_ptr tex = nullptr) const { @@ -89,18 +95,10 @@ private: void buildImages(); void updateImages(); - static const int SCROLL_DELAY = 507; - static const int SCROLL_TIME = 150; - - void setScrollDir(Eigen::Vector2i dir); - void scroll(); void onCursorChanged(CursorState state); int mCursor; - Eigen::Vector2i mScrollDir; - int mScrollAccumulator; - bool mEntriesDirty; std::vector mEntries; @@ -112,8 +110,6 @@ ImageGridComponent::ImageGridComponent(Window* window) : GuiComponent(window) { mEntriesDirty = true; mCursor = 0; - mScrollDir << 0, 0; - mScrollAccumulator = 0; } template @@ -151,7 +147,6 @@ void ImageGridComponent::clear() { mEntries.clear(); mCursor = 0; - mScrollDir << 0, 0; onCursorChanged(CURSOR_STOPPED); mEntriesDirty = true; } @@ -183,35 +178,8 @@ void ImageGridComponent::setCursor(typename std::vector::const_iterato template void ImageGridComponent::stopScrolling() { - mScrollDir = Eigen::Vector2i::Zero(); -} - -template -void ImageGridComponent::scroll() -{ - if(mEntries.size() == 0) - return; - - int offset = 0; - Eigen::Vector2i size = getGridSize(); - - offset += mScrollDir.x(); - offset += mScrollDir.y() * size.x(); - - mCursor += offset; - if(mCursor < 0) - mCursor += mEntries.size(); - if(mCursor >= (int)mEntries.size()) - mCursor -= mEntries.size(); - - onCursorChanged(CURSOR_SCROLLING); -} - -template -void ImageGridComponent::setScrollDir(Eigen::Vector2i dir) -{ - mScrollDir = dir; - mScrollAccumulator = -SCROLL_DELAY; + listInput(0); + onCursorChanged(CURSOR_STOPPED); } template @@ -231,15 +199,13 @@ bool ImageGridComponent::input(InputConfig* config, Input input) if(dir != Eigen::Vector2i::Zero()) { - setScrollDir(dir); - scroll(); + listInput(dir.x() + dir.y() * getGridSize().x()); return true; } }else{ if(config->isMappedTo("up", input) || config->isMappedTo("down", input) || config->isMappedTo("left", input) || config->isMappedTo("right", input)) { - mScrollDir << 0, 0; - onCursorChanged(CURSOR_STOPPED); + stopScrolling(); } } @@ -249,15 +215,7 @@ bool ImageGridComponent::input(InputConfig* config, Input input) template void ImageGridComponent::update(int deltaTime) { - if(mScrollDir != Eigen::Vector2i::Zero()) - { - mScrollAccumulator += deltaTime; - while(mScrollAccumulator >= SCROLL_TIME) - { - scroll(); - mScrollAccumulator -= SCROLL_TIME; - } - } + listUpdate(deltaTime); } template diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index b3f23f1b9..74246c15f 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -1,6 +1,6 @@ -#ifndef _TEXTLISTCOMPONENT_H_ -#define _TEXTLISTCOMPONENT_H_ +#pragma once +#include "IList.h" #include "../Renderer.h" #include "../resources/Font.h" #include "../GuiComponent.h" @@ -15,7 +15,7 @@ //A graphical list. Supports multiple colors for rows and scrolling. template -class TextListComponent : public GuiComponent +class TextListComponent : public GuiComponent, public IList { public: TextListComponent(Window* window); @@ -46,8 +46,7 @@ public: void setCursor(typename std::vector::const_iterator& it); void stopScrolling(); - inline bool isScrolling() const { return mScrollDir != 0 && mScrollAccumulator >= 0; } - + enum CursorState { CURSOR_STOPPED, @@ -78,20 +77,20 @@ public: inline void setColor(unsigned int id, unsigned int color) { mColors[id] = color; } inline void setSound(const std::shared_ptr& sound) { mScrollSound = sound; } +protected: + // IList implementations + virtual int getCursorIndex() { return mCursor; } + virtual void setCursorIndex(int index) { mCursor = index; onCursorChanged(isScrolling() ? CURSOR_SCROLLING : CURSOR_STOPPED); } + virtual int getLength() { return mRowVector.size(); } + virtual void onScroll(int amt) { if(mScrollSound) mScrollSound->play(); } + private: static const int MARQUEE_DELAY = 900; static const int MARQUEE_SPEED = 16; static const int MARQUEE_RATE = 3; - static const int SCROLL_DELAY = 507; - static const int SCROLL_TIME = 150; - - void scroll(); //helper method, scrolls in whatever direction scrollDir is - void setScrollDir(int val); //helper method, set mScrollDir as well as reset marquee stuff void onCursorChanged(CursorState state); - int mScrollDir, mScrollAccumulator; - int mMarqueeOffset; int mMarqueeTime; @@ -116,9 +115,7 @@ TextListComponent::TextListComponent(Window* window) : GuiComponent(window) { mCursor = 0; - mScrollDir = 0; - mScrollAccumulator = 0; - + mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; @@ -246,28 +243,24 @@ bool TextListComponent::input(InputConfig* config, Input input) { if(config->isMappedTo("down", input)) { - setScrollDir(1); - scroll(); + listInput(1); return true; } if(config->isMappedTo("up", input)) { - setScrollDir(-1); - scroll(); + listInput(-1); return true; } if(config->isMappedTo("pagedown", input)) { - setScrollDir(10); - scroll(); + listInput(10); return true; } if(config->isMappedTo("pageup", input)) { - setScrollDir(-10); - scroll(); + listInput(-10); return true; } }else{ @@ -282,37 +275,12 @@ bool TextListComponent::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -template -void TextListComponent::setScrollDir(int val) -{ - mScrollDir = val; - mMarqueeOffset = 0; - mMarqueeTime = -MARQUEE_DELAY; - mScrollAccumulator = -SCROLL_DELAY; -} - -template -void TextListComponent::stopScrolling() -{ - mScrollAccumulator = 0; - mScrollDir = 0; - onCursorChanged(CURSOR_STOPPED); -} - template void TextListComponent::update(int deltaTime) { - if(mScrollDir != 0) + listUpdate(deltaTime); + if(!isScrolling()) { - mScrollAccumulator += deltaTime; - - while(mScrollAccumulator >= SCROLL_TIME) - { - mScrollAccumulator -= SCROLL_TIME; - scroll(); - } - - }else{ //if we're not scrolling and this object's text goes outside our size, marquee it! std::string text = getSelectedName(); @@ -333,32 +301,6 @@ void TextListComponent::update(int deltaTime) GuiComponent::update(deltaTime); } -template -void TextListComponent::scroll() -{ - mCursor += mScrollDir; - - if(mCursor < 0) - { - if(mScrollDir < -1) - mCursor = 0; - else - mCursor += mRowVector.size(); - } - if(mCursor >= (int)mRowVector.size()) - { - if(mScrollDir > 1) - mCursor = (int)mRowVector.size() - 1; - else - mCursor -= mRowVector.size(); - } - - onCursorChanged(CURSOR_SCROLLING); - - if(mScrollSound) - mScrollSound->play(); -} - //list management stuff template void TextListComponent::add(const std::string& name, const T& obj, unsigned int color) @@ -395,7 +337,6 @@ void TextListComponent::clear() { mRowVector.clear(); mCursor = 0; - mScrollDir = 0; mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; onCursorChanged(CURSOR_STOPPED); @@ -429,10 +370,20 @@ void TextListComponent::setCursor(typename std::vector::const_iterat template void TextListComponent::onCursorChanged(CursorState state) { + mMarqueeOffset = 0; + mMarqueeTime = -MARQUEE_DELAY; + if(mCursorChangedCallback) mCursorChangedCallback(state); } +template +void TextListComponent::stopScrolling() +{ + listInput(0); + onCursorChanged(CURSOR_STOPPED); +} + template void TextListComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { @@ -480,5 +431,3 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c } } } - -#endif From 1aa291ebe76d38ea808ff32bca3f085541bea3e5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 7 Feb 2014 21:45:28 -0600 Subject: [PATCH 163/386] ImageGridComponent & TextListComponent have had common list functionality refactored into IList. --- CMakeLists.txt | 1 - src/components/GuiMenu.cpp | 2 +- src/components/IList.cpp | 81 -------- src/components/IList.h | 216 ++++++++++++++++++-- src/components/ImageGridComponent.h | 127 ++---------- src/components/TextListComponent.h | 174 ++++------------ src/views/gamelist/BasicGameListView.cpp | 8 +- src/views/gamelist/DetailedGameListView.cpp | 4 +- src/views/gamelist/GridGameListView.cpp | 10 +- 9 files changed, 261 insertions(+), 362 deletions(-) delete mode 100644 src/components/IList.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ba440e90..673a4c7ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,7 +244,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp diff --git a/src/components/GuiMenu.cpp b/src/components/GuiMenu.cpp index 5c6f2e437..afd8dbac1 100644 --- a/src/components/GuiMenu.cpp +++ b/src/components/GuiMenu.cpp @@ -62,7 +62,7 @@ bool GuiMenu::input(InputConfig* config, Input input) Sound::getFromTheme(mTheme, "menu", "menuClose")->play(); delete this; return true; - }else if(config->isMappedTo("a", input) && mList.getList().size() > 0) + }else if(config->isMappedTo("a", input) && mList.size() > 0) { mList.getSelected()(); delete this; diff --git a/src/components/IList.cpp b/src/components/IList.cpp deleted file mode 100644 index 148cd429e..000000000 --- a/src/components/IList.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "IList.h" - -const IList::ScrollTier IList::SCROLL_SPEED[IList::SCROLL_SPEED_COUNT] = { - {500, 500}, - {2600, 150}, - {0, 100} -}; - -IList::IList() -{ - mScrollTier = 0; - mScrollVelocity = 0; - mScrollTierAccumulator = 0; - mScrollCursorAccumulator = 0; -} - -void IList::listInput(int velocity) -{ - mScrollVelocity = velocity; - mScrollTier = 0; - mScrollTierAccumulator = 0; - mScrollCursorAccumulator = 0; - scroll(mScrollVelocity); -} - -void IList::listUpdate(int deltaTime) -{ - if(mScrollVelocity == 0 || getLength() < 2) - return; - - mScrollCursorAccumulator += deltaTime; - mScrollTierAccumulator += deltaTime; - - while(mScrollCursorAccumulator >= SCROLL_SPEED[mScrollTier].scrollDelay) - { - mScrollCursorAccumulator -= SCROLL_SPEED[mScrollTier].scrollDelay; - scroll(mScrollVelocity); - } - - // are we ready to go even FASTER? - while(mScrollTier < SCROLL_SPEED_COUNT - 1 && mScrollTierAccumulator >= SCROLL_SPEED[mScrollTier].length) - { - mScrollTierAccumulator -= SCROLL_SPEED[mScrollTier].length; - mScrollTier++; - } -} - -void IList::scroll(int amt) -{ - if(mScrollVelocity == 0 || getLength() < 2) - return; - - int cursor = getCursorIndex() + amt; - int absAmt = amt < 0 ? -amt : amt; - - // stop at the end if we've been holding down the button for a long time or - // we're scrolling faster than one item at a time (e.g. page up/down) - // otherwise, loop around - if(mScrollTier > 0 || absAmt > 1) - { - if(cursor < 0) - cursor = 0; - else if(cursor >= getLength()) - cursor = getLength() - 1; - }else{ - if(cursor < 0) - cursor += getLength(); - else if(cursor >= getLength()) - cursor -= getLength(); - } - - if(cursor != getCursorIndex()) - onScroll(absAmt); - - setCursorIndex(cursor); -} - -bool IList::isScrolling() const -{ - return (mScrollVelocity != 0 && mScrollTier > 0); -} diff --git a/src/components/IList.h b/src/components/IList.h index 04417584c..469f7f06d 100644 --- a/src/components/IList.h +++ b/src/components/IList.h @@ -1,36 +1,210 @@ #pragma once +#include +#include + +enum CursorState +{ + CURSOR_STOPPED, + CURSOR_SCROLLING +}; + +struct ScrollTier +{ + int length; // how long we stay on this level before going to the next + int scrollDelay; // how long between scrolls +}; + +const int SCROLL_SPEED_COUNT = 3; +const ScrollTier SCROLL_SPEED[SCROLL_SPEED_COUNT] = { + {500, 500}, + {2600, 150}, + {0, 100} +}; + +template class IList { public: - IList(); - - bool isScrolling() const; - -protected: - void listInput(int velocity); // a velocity of 0 = stop scrolling - void listUpdate(int deltaTime); - - virtual int getCursorIndex() = 0; - virtual void setCursorIndex(int index) = 0; // (index >= 0 && index < getLength()) is guaranteed to be true - virtual int getLength() = 0; - - void scroll(int amt); - virtual void onScroll(int amt) {}; - -private: - struct ScrollTier + struct Entry { - int length; // how long we stay on this level before going to the next - int scrollDelay; // how long between scrolls + std::string name; + UserData object; + EntryData data; }; - static const int SCROLL_SPEED_COUNT = 3; - static const ScrollTier SCROLL_SPEED[SCROLL_SPEED_COUNT]; +protected: + int mCursor; int mScrollTier; int mScrollVelocity; int mScrollTierAccumulator; int mScrollCursorAccumulator; + + std::vector mEntries; + +public: + IList() + { + mCursor = 0; + mScrollTier = 0; + mScrollVelocity = 0; + mScrollTierAccumulator = 0; + mScrollCursorAccumulator = 0; + } + + bool isScrolling() const + { + return (mScrollVelocity != 0 && mScrollTier > 0); + } + + void stopScrolling() + { + listInput(0); + onCursorChanged(CURSOR_STOPPED); + } + + void clear() + { + mEntries.clear(); + mCursor = 0; + listInput(0); + onCursorChanged(CURSOR_STOPPED); + } + + inline const std::string& getSelectedName() + { + assert(size() > 0); + return mEntries.at(mCursor).name; + } + + inline const UserData& getSelected() const + { + assert(size() > 0); + return mEntries.at(mCursor).object; + } + + void setCursor(typename std::vector::iterator& it) + { + assert(it != mEntries.end()); + mCursor = it - mEntries.begin(); + onCursorChanged(CURSOR_STOPPED); + } + + // returns true if successful (select is in our list), false if not + bool setCursor(const UserData& obj) + { + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).object == obj) + { + mCursor = it - mEntries.begin(); + onCursorChanged(CURSOR_STOPPED); + return true; + } + } + + return false; + } + + // entry management + void add(Entry e) + { + mEntries.push_back(e); + } + + bool remove(const UserData& obj) + { + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if((*it).object == obj) + { + remove(it); + return true; + } + } + + return false; + } + + inline int size() const { return mEntries.size(); } + +protected: + void remove(typename std::vector::iterator& it) + { + if(getCursorIndex() > 0 && it - mEntries.begin() <= getCursorIndex()) + { + setCursorIndex(mCursor - 1); + onCursorChanged(CURSOR_STOPPED); + } + + mEntries.erase(it); + } + + + void listInput(int velocity) // a velocity of 0 = stop scrolling + { + mScrollVelocity = velocity; + mScrollTier = 0; + mScrollTierAccumulator = 0; + mScrollCursorAccumulator = 0; + scroll(mScrollVelocity); + } + + void listUpdate(int deltaTime) + { + if(mScrollVelocity == 0 || size() < 2) + return; + + mScrollCursorAccumulator += deltaTime; + mScrollTierAccumulator += deltaTime; + + while(mScrollCursorAccumulator >= SCROLL_SPEED[mScrollTier].scrollDelay) + { + mScrollCursorAccumulator -= SCROLL_SPEED[mScrollTier].scrollDelay; + scroll(mScrollVelocity); + } + + // are we ready to go even FASTER? + while(mScrollTier < SCROLL_SPEED_COUNT - 1 && mScrollTierAccumulator >= SCROLL_SPEED[mScrollTier].length) + { + mScrollTierAccumulator -= SCROLL_SPEED[mScrollTier].length; + mScrollTier++; + } + } + + void scroll(int amt) + { + if(mScrollVelocity == 0 || size() < 2) + return; + + int cursor = mCursor + amt; + int absAmt = amt < 0 ? -amt : amt; + + // stop at the end if we've been holding down the button for a long time or + // we're scrolling faster than one item at a time (e.g. page up/down) + // otherwise, loop around + if(mScrollTier > 0 || absAmt > 1) + { + if(cursor < 0) + cursor = 0; + else if(cursor >= size()) + cursor = size() - 1; + }else{ + if(cursor < 0) + cursor += size(); + else if(cursor >= size()) + cursor -= size(); + } + + if(cursor != mCursor) + onScroll(absAmt); + + mCursor = cursor; + onCursorChanged((mScrollTier > 0) ? CURSOR_SCROLLING : CURSOR_STOPPED); + } + + virtual void onCursorChanged(const CursorState& state) {} + virtual void onScroll(int amt) {} }; diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index d2f8529cf..012c3e655 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -5,49 +5,25 @@ #include "../components/ImageComponent.h" #include "../Log.h" +struct ImageGridData +{ + std::shared_ptr texture; +}; + template -class ImageGridComponent : public GuiComponent, public IList +class ImageGridComponent : public GuiComponent, public IList { public: ImageGridComponent(Window* window); - struct Entry - { - std::shared_ptr texture; - T object; - - Entry() {} - Entry(std::shared_ptr t, const T& o) : texture(t), object(o) {} - }; - - void add(const std::string& imagePath, const T& obj); - void remove(const T& obj); - void clear(); - - void setCursor(const T& select); - void setCursor(typename std::vector::const_iterator& it); - - inline const T& getSelected() const { return mEntries.at(mCursor).object; } - inline const std::vector& getList() const { return mEntries; } - - enum CursorState { - CURSOR_STOPPED, - CURSOR_SCROLLING - }; - - void stopScrolling(); - + void add(const std::string& name, const std::string& imagePath, const T& obj); + void onSizeChanged() override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; -protected: - virtual int getCursorIndex() { return mCursor; } - virtual void setCursorIndex(int index) { mCursor = index; onCursorChanged(CURSOR_STOPPED); } - virtual int getLength() { return mEntries.size(); } - private: Eigen::Vector2f getSquareSize(std::shared_ptr tex = nullptr) const { @@ -73,7 +49,7 @@ private: // calc biggest square size for(auto it = mEntries.begin(); it != mEntries.end(); it++) { - Eigen::Vector2f chkSize = getSquareSize(it->texture); + Eigen::Vector2f chkSize = getSquareSize(it->data.texture); if(chkSize.x() > squareSize.x()) squareSize[0] = chkSize[0]; if(chkSize.y() > squareSize.y()) @@ -95,13 +71,10 @@ private: void buildImages(); void updateImages(); - void onCursorChanged(CursorState state); - - int mCursor; + virtual void onCursorChanged(const CursorState& state); bool mEntriesDirty; - std::vector mEntries; std::vector mImages; }; @@ -109,79 +82,19 @@ template ImageGridComponent::ImageGridComponent(Window* window) : GuiComponent(window) { mEntriesDirty = true; - mCursor = 0; } template -void ImageGridComponent::add(const std::string& imagePath, const T& obj) +void ImageGridComponent::add(const std::string& name, const std::string& imagePath, const T& obj) { - Entry e(ResourceManager::getInstance()->fileExists(imagePath) ? TextureResource::get(imagePath) : TextureResource::get(":/button.png"), obj); - mEntries.push_back(e); + Entry entry; + entry.name = name; + entry.object = obj; + entry.data.texture = ResourceManager::getInstance()->fileExists(imagePath) ? TextureResource::get(imagePath) : TextureResource::get(":/button.png"); + static_cast*>(this)->add(entry); mEntriesDirty = true; } -template -void ImageGridComponent::remove(const T& obj) -{ - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - { - if((*it).object == obj) - { - if(mCursor > 0 && it - mEntries.begin() >= mCursor) - { - mCursor--; - onCursorChanged(CURSOR_STOPPED); - } - - mEntriesDirty = true; - mEntries.erase(it); - return; - } - } - - LOG(LogError) << "Tried to remove an object we couldn't find"; -} - -template -void ImageGridComponent::clear() -{ - mEntries.clear(); - mCursor = 0; - onCursorChanged(CURSOR_STOPPED); - mEntriesDirty = true; -} - -template -void ImageGridComponent::setCursor(const T& obj) -{ - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - { - if((*it).object == obj) - { - mCursor = it - mEntries.begin(); - onCursorChanged(CURSOR_STOPPED); - return; - } - } - - LOG(LogError) << "Tried to set cursor to object we couldn't find"; -} - -template -void ImageGridComponent::setCursor(typename std::vector::const_iterator& it) -{ - assert(it != mEntries.end()); - mCursor = it - mEntries.begin(); - onCursorChanged(CURSOR_STOPPED); -} - -template -void ImageGridComponent::stopScrolling() -{ - listInput(0); - onCursorChanged(CURSOR_STOPPED); -} - template bool ImageGridComponent::input(InputConfig* config, Input input) { @@ -239,7 +152,7 @@ void ImageGridComponent::render(const Eigen::Affine3f& parentTrans) } template -void ImageGridComponent::onCursorChanged(CursorState state) +void ImageGridComponent::onCursorChanged(const CursorState& state) { updateImages(); } @@ -305,13 +218,13 @@ void ImageGridComponent::updateImages() for(unsigned int img = 0; img < mImages.size(); img++) { ImageComponent& image = mImages.at(img); - if(i >= mEntries.size()) + if(i >= (unsigned int)size()) { image.setImage(""); continue; } - Eigen::Vector2f squareSize = getSquareSize(mEntries.at(i).texture); + Eigen::Vector2f squareSize = getSquareSize(mEntries.at(i).data.texture); if(i == mCursor) { image.setColorShift(0xFFFFFFFF); @@ -321,7 +234,7 @@ void ImageGridComponent::updateImages() image.setResize(squareSize.x(), squareSize.y()); } - image.setImage(mEntries.at(i).texture); + image.setImage(mEntries.at(i).data.texture); i++; } } diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 74246c15f..2af7f703b 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -13,46 +13,26 @@ #include "../ThemeData.h" #include +struct TextListData +{ + unsigned int colorId; + std::shared_ptr textCache; +}; + //A graphical list. Supports multiple colors for rows and scrolling. template -class TextListComponent : public GuiComponent, public IList +class TextListComponent : public GuiComponent, public IList { public: TextListComponent(Window* window); - virtual ~TextListComponent(); - + bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; - struct ListRow - { - std::string name; - T object; - unsigned int colorId; - std::shared_ptr textCache; - }; - void add(const std::string& name, const T& obj, unsigned int colorId); - void remove(const T& obj); - void clear(); - - inline const std::string& getSelectedName() const { return mRowVector.at(mCursor).name; } - inline T getSelected() const { return mRowVector.at(mCursor).object; } - inline const std::vector& getList() const { return mRowVector; } - - void setCursor(const T& select); - void setCursor(typename std::vector::const_iterator& it); - - void stopScrolling(); - enum CursorState - { - CURSOR_STOPPED, - CURSOR_SCROLLING - }; - enum Alignment { ALIGN_LEFT, @@ -67,8 +47,8 @@ public: inline void setFont(const std::shared_ptr& font) { mFont = font; - for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) - it->textCache.reset(); + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + it->data.textCache.reset(); } inline void setSelectorColor(unsigned int color) { mSelectorColor = color; } @@ -78,28 +58,20 @@ public: inline void setSound(const std::shared_ptr& sound) { mScrollSound = sound; } protected: - // IList implementations - virtual int getCursorIndex() { return mCursor; } - virtual void setCursorIndex(int index) { mCursor = index; onCursorChanged(isScrolling() ? CURSOR_SCROLLING : CURSOR_STOPPED); } - virtual int getLength() { return mRowVector.size(); } virtual void onScroll(int amt) { if(mScrollSound) mScrollSound->play(); } + virtual void onCursorChanged(const CursorState& state); private: static const int MARQUEE_DELAY = 900; static const int MARQUEE_SPEED = 16; static const int MARQUEE_RATE = 3; - void onCursorChanged(CursorState state); - int mMarqueeOffset; int mMarqueeTime; Alignment mAlignment; float mHorizontalMargin; - std::vector mRowVector; - int mCursor; - std::function mCursorChangedCallback; std::shared_ptr mFont; @@ -114,8 +86,6 @@ template TextListComponent::TextListComponent(Window* window) : GuiComponent(window) { - mCursor = 0; - mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; @@ -129,11 +99,6 @@ TextListComponent::TextListComponent(Window* window) : mColors[1] = 0x00FF00FF; } -template -TextListComponent::~TextListComponent() -{ -} - template void TextListComponent::render(const Eigen::Affine3f& parentTrans) { @@ -141,6 +106,13 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) std::shared_ptr& font = mFont; + if(size() == 0) + { + Renderer::setMatrix(trans); + font->drawText("The list is empty.", Eigen::Vector2f(0, 0), 0xFF0000FF); + return; + } + const int cutoff = 0; const int entrySize = font->getHeight() + 5; @@ -149,26 +121,20 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) //number of entries that can fit on the screen simultaniously int screenCount = (int)mSize.y() / entrySize; - if((int)mRowVector.size() >= screenCount) + if(size() >= screenCount) { startEntry = mCursor - (int)(screenCount * 0.5); if(startEntry < 0) startEntry = 0; - if(startEntry >= (int)mRowVector.size() - screenCount) - startEntry = mRowVector.size() - screenCount; + if(startEntry >= size() - screenCount) + startEntry = size() - screenCount; } float y = (float)cutoff; - if(mRowVector.size() == 0) - { - font->drawCenteredText("The list is empty.", 0, y, 0xFF0000FF); - return; - } - int listCutoff = startEntry + screenCount; - if(listCutoff > (int)mRowVector.size()) - listCutoff = mRowVector.size(); + if(listCutoff > size()) + listCutoff = size(); Eigen::Vector3f dim(getSize().x(), getSize().y(), 0); dim = trans * dim - trans.translation(); @@ -183,18 +149,18 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) Renderer::drawRect(0, (int)y, (int)getSize().x(), font->getHeight(), mSelectorColor); } - ListRow& row = mRowVector.at((unsigned int)i); + Entry& entry = mEntries.at((unsigned int)i); unsigned int color; if(mCursor == i && mSelectedColor) color = mSelectedColor; else - color = mColors[row.colorId]; + color = mColors[entry.data.colorId]; - if(!row.textCache) - row.textCache = std::unique_ptr(font->buildTextCache(row.name, 0, 0, 0x000000FF)); + if(!entry.data.textCache) + entry.data.textCache = std::unique_ptr(font->buildTextCache(entry.name, 0, 0, 0x000000FF)); - row.textCache->setColor(color); + entry.data.textCache->setColor(color); Eigen::Vector3f offset(0, y, 0); @@ -204,12 +170,12 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) offset[0] = mHorizontalMargin; break; case ALIGN_CENTER: - offset[0] = (mSize.x() - row.textCache->metrics.size.x()) / 2; + offset[0] = (mSize.x() - entry.data.textCache->metrics.size.x()) / 2; if(offset[0] < 0) offset[0] = 0; break; case ALIGN_RIGHT: - offset[0] = (mSize.x() - row.textCache->metrics.size.x()); + offset[0] = (mSize.x() - entry.data.textCache->metrics.size.x()); offset[0] -= mHorizontalMargin; if(offset[0] < 0) offset[0] = 0; @@ -224,7 +190,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) drawTrans.translate(offset); Renderer::setMatrix(drawTrans); - font->renderTextCache(row.textCache.get()); + font->renderTextCache(entry.data.textCache.get()); y += entrySize; } @@ -237,7 +203,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) template bool TextListComponent::input(InputConfig* config, Input input) { - if(mRowVector.size() > 0) + if(size() > 0) { if(input.value != 0) { @@ -279,10 +245,10 @@ template void TextListComponent::update(int deltaTime) { listUpdate(deltaTime); - if(!isScrolling()) + if(!isScrolling() && size() > 0) { //if we're not scrolling and this object's text goes outside our size, marquee it! - std::string text = getSelectedName(); + const std::string& text = mEntries.at((unsigned int)mCursor).name; Eigen::Vector2f textSize = mFont->sizeText(text); @@ -307,68 +273,15 @@ void TextListComponent::add(const std::string& name, const T& obj, unsigned i { assert(color < COLOR_ID_COUNT); - ListRow row = {name, obj, color}; - mRowVector.push_back(row); + Entry entry; + entry.name = name; + entry.object = obj; + entry.data.colorId = color; + static_cast*>(this)->add(entry); } template -void TextListComponent::remove(const T& obj) -{ - for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) - { - if((*it).object == obj) - { - if(mCursor > 0 && it - mRowVector.begin() >= mCursor) - { - mCursor--; - onCursorChanged(CURSOR_STOPPED); - } - - mRowVector.erase(it); - return; - } - } - - LOG(LogError) << "Tried to remove an object we couldn't find"; -} - -template -void TextListComponent::clear() -{ - mRowVector.clear(); - mCursor = 0; - mMarqueeOffset = 0; - mMarqueeTime = -MARQUEE_DELAY; - onCursorChanged(CURSOR_STOPPED); -} - -template -void TextListComponent::setCursor(const T& obj) -{ - for(auto it = mRowVector.begin(); it != mRowVector.end(); it++) - { - if((*it).object == obj) - { - mCursor = it - mRowVector.begin(); - onCursorChanged(CURSOR_STOPPED); - return; - } - } - - LOG(LogError) << "Tried to set cursor to object we couldn't find"; -} - - -template -void TextListComponent::setCursor(typename std::vector::const_iterator& it) -{ - assert(it != mRowVector.end()); - mCursor = it - mRowVector.begin(); - onCursorChanged(CURSOR_STOPPED); -} - -template -void TextListComponent::onCursorChanged(CursorState state) +void TextListComponent::onCursorChanged(const CursorState& state) { mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; @@ -377,13 +290,6 @@ void TextListComponent::onCursorChanged(CursorState state) mCursorChangedCallback(state); } -template -void TextListComponent::stopScrolling() -{ - listInput(0); - onCursorChanged(CURSOR_STOPPED); -} - template void TextListComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index 62fc6e7cb..24a3fa62f 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -53,14 +53,8 @@ FileData* BasicGameListView::getCursor() void BasicGameListView::setCursor(FileData* cursor) { - typedef TextListComponent::ListRow Row; - const std::vector& list = mList.getList(); - auto found = std::find_if(list.begin(), list.end(), [&](const Row& row) { return (row.object == cursor); }); - - if(found != list.end()) + if(!mList.setCursor(cursor)) { - mList.setCursor(found); - }else{ populateList(cursor->getParent()->getChildren()); mList.setCursor(cursor); } diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 7eefa51c9..d4b8f2dda 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -21,7 +21,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); mList.setSize(mSize.x() * (0.50f - 2*padding), mList.getSize().y()); mList.setAlignment(TextListComponent::ALIGN_LEFT); - mList.setCursorChangedCallback([&](TextListComponent::CursorState state) { updateInfoPanel(); }); + mList.setCursorChangedCallback([&](const CursorState& state) { updateInfoPanel(); }); // image mImage.setOrigin(0.5f, 0.5f); @@ -179,7 +179,7 @@ void DetailedGameListView::initMDValues() void DetailedGameListView::updateInfoPanel() { - FileData* file = (mList.getList().size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); + FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); bool fadingOut; if(file == NULL) diff --git a/src/views/gamelist/GridGameListView.cpp b/src/views/gamelist/GridGameListView.cpp index 42978ee74..bebd20c67 100644 --- a/src/views/gamelist/GridGameListView.cpp +++ b/src/views/gamelist/GridGameListView.cpp @@ -20,14 +20,8 @@ FileData* GridGameListView::getCursor() void GridGameListView::setCursor(FileData* file) { - typedef ImageGridComponent::Entry Entry; - auto& list = mGrid.getList(); - auto found = std::find_if(list.begin(), list.end(), [&] (const Entry& e) { return (e.object == file); }); - - if(found != list.end()) + if(!mGrid.setCursor(file)) { - mGrid.setCursor(found); - }else{ populateList(file->getParent()->getChildren()); mGrid.setCursor(file); } @@ -46,7 +40,7 @@ void GridGameListView::populateList(const std::vector& files) mGrid.clear(); for(auto it = files.begin(); it != files.end(); it++) { - mGrid.add((*it)->getThumbnailPath(), *it); + mGrid.add((*it)->getName(), (*it)->getThumbnailPath(), *it); } } From 63749d2d9d5f11c71aa35790599198aa055fec10 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 7 Feb 2014 22:17:24 -0600 Subject: [PATCH 164/386] Scroll after updating tier so isScrolling() returns accurately. --- src/components/IList.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/IList.h b/src/components/IList.h index 469f7f06d..b538a469d 100644 --- a/src/components/IList.h +++ b/src/components/IList.h @@ -160,10 +160,11 @@ protected: mScrollCursorAccumulator += deltaTime; mScrollTierAccumulator += deltaTime; + int scrollCount = 0; while(mScrollCursorAccumulator >= SCROLL_SPEED[mScrollTier].scrollDelay) { mScrollCursorAccumulator -= SCROLL_SPEED[mScrollTier].scrollDelay; - scroll(mScrollVelocity); + scrollCount++; } // are we ready to go even FASTER? @@ -172,6 +173,9 @@ protected: mScrollTierAccumulator -= SCROLL_SPEED[mScrollTier].length; mScrollTier++; } + + for(int i = 0; i < scrollCount; i++) + scroll(mScrollVelocity); } void scroll(int amt) From a592dd4cf53a20cf937ee89f71ef3c2e82b68f5d Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 13 Feb 2014 17:10:28 -0600 Subject: [PATCH 165/386] Added title overlay when scrolling through lists. --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 24 +- data/Resources.h | 3 + data/converted/scroll_gradient_png.cpp | 3771 +++++++++++++++++++ data/resources/scroll_gradient.png | Bin 0 -> 37639 bytes src/components/IList.h | 59 +- src/components/ImageGridComponent.h | 4 +- src/components/TextListComponent.h | 9 +- src/views/gamelist/DetailedGameListView.cpp | 2 +- 9 files changed, 3851 insertions(+), 22 deletions(-) create mode 100644 data/converted/scroll_gradient_png.cpp create mode 100644 data/resources/scroll_gradient.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 673a4c7ac..ac0559374 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,6 +291,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_glow_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_a_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 66c0b55a8..741b21bcd 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,12 +2,13 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 14; +const size_t res2hNrOfFiles = 15; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/button.png", button_png_size, button_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, + {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, {":/star_filled.png", star_filled_png_size, star_filled_png_data}, {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, {":/textbox.png", textbox_png_size, textbox_png_data}, @@ -25,16 +26,17 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/ES_logo_16.png", res2hFiles[1]), std::make_pair(":/ES_logo_32.png", res2hFiles[2]), std::make_pair(":/frame.png", res2hFiles[3]), - std::make_pair(":/star_filled.png", res2hFiles[4]), - std::make_pair(":/star_unfilled.png", res2hFiles[5]), - std::make_pair(":/textbox.png", res2hFiles[6]), - std::make_pair(":/textbox_glow.png", res2hFiles[7]), - std::make_pair(":/help/a.png", res2hFiles[8]), - std::make_pair(":/help/b.png", res2hFiles[9]), - std::make_pair(":/help/dpad.png", res2hFiles[10]), - std::make_pair(":/help/left_right.png", res2hFiles[11]), - std::make_pair(":/help/menu.png", res2hFiles[12]), - std::make_pair(":/help/up_down.png", res2hFiles[13]) + std::make_pair(":/scroll_gradient.png", res2hFiles[4]), + std::make_pair(":/star_filled.png", res2hFiles[5]), + std::make_pair(":/star_unfilled.png", res2hFiles[6]), + std::make_pair(":/textbox.png", res2hFiles[7]), + std::make_pair(":/textbox_glow.png", res2hFiles[8]), + std::make_pair(":/help/a.png", res2hFiles[9]), + std::make_pair(":/help/b.png", res2hFiles[10]), + std::make_pair(":/help/dpad.png", res2hFiles[11]), + std::make_pair(":/help/left_right.png", res2hFiles[12]), + std::make_pair(":/help/menu.png", res2hFiles[13]), + std::make_pair(":/help/up_down.png", res2hFiles[14]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 76e620430..45bc8cfb5 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -17,6 +17,9 @@ extern const unsigned char ES_logo_32_png_data[]; extern const size_t frame_png_size; extern const unsigned char frame_png_data[]; +extern const size_t scroll_gradient_png_size; +extern const unsigned char scroll_gradient_png_data[]; + extern const size_t star_filled_png_size; extern const unsigned char star_filled_png_data[]; diff --git a/data/converted/scroll_gradient_png.cpp b/data/converted/scroll_gradient_png.cpp new file mode 100644 index 000000000..0bbed409e --- /dev/null +++ b/data/converted/scroll_gradient_png.cpp @@ -0,0 +1,3771 @@ +//this file was auto-generated from "scroll_gradient.png" by res2h + +#include "../Resources.h" + +const size_t scroll_gradient_png_size = 37639; +const unsigned char scroll_gradient_png_data[37639] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x00, + 0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x00,0x00,0x5c, + 0x72,0xa8,0x66,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, + 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, + 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, + 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, + 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, + 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x88,0x22,0x49, + 0x44,0x41,0x54,0x78,0xda,0xec,0xbd,0xdb,0x76,0x04, + 0x39,0x8e,0x2b,0x2a,0xf8,0x61,0xff,0xff,0x1f,0xe3, + 0x3c,0x38,0x43,0x02,0x41,0x48,0x11,0x69,0xa7,0xab, + 0xba,0xfb,0x4c,0xaf,0x35,0x53,0x55,0xce,0x5b,0xdc, + 0x44,0x91,0x20,0x01,0x80,0xe4,0xff,0x1b,0x63,0x60, + 0xf3,0x7f,0xe3,0xf0,0xda,0xee,0xff,0xbe,0xde,0x7c, + 0xed,0x6b,0x8c,0x01,0x8e,0x01,0xf4,0xf7,0xcc,0x7f, + 0xe7,0x18,0x5f,0xe8,0x7f,0x7f,0xfd,0x93,0x18,0x03, + 0x5f,0xaf,0xef,0xf8,0x1a,0xfb,0xef,0x39,0xfc,0xf3, + 0xfb,0x3b,0xc2,0xeb,0xd7,0x6f,0x7c,0x7d,0x7f,0xfd, + 0x28,0xbf,0xc3,0xef,0xcf,0x7e,0xe1,0xf5,0x5a,0xfb, + 0x1c,0x5f,0xff,0x84,0xbd,0x46,0xbe,0xfe,0x86,0xef, + 0xf7,0x60,0xfe,0xbe,0x9f,0xdb,0xeb,0x6f,0xd8,0x1f, + 0x67,0xfd,0x8d,0x9b,0x73,0xe5,0x17,0x09,0x00,0xf5, + 0xfa,0xb4,0x6b,0x47,0x82,0xf8,0xfe,0x4d,0x94,0x6b, + 0x34,0xfa,0xb5,0x26,0x41,0x0c,0x60,0xe0,0x3a,0xbe, + 0x72,0x5f,0xc7,0xeb,0xbd,0xeb,0x1e,0xcf,0xf7,0x60, + 0x70,0x7c,0x11,0x03,0xe0,0xeb,0x3e,0x63,0x3e,0x07, + 0xf2,0x7f,0xaf,0xf7,0x73,0x60,0x40,0x3f,0x4f,0x90, + 0xc0,0xeb,0xda,0xcd,0xef,0xfe,0xfe,0xdb,0x18,0xf3, + 0xbf,0xaf,0xd7,0xf8,0xba,0x4a,0xaf,0x67,0x9b,0x63, + 0x00,0x7c,0xfd,0xe2,0x18,0x83,0xaf,0x1f,0xe0,0x7c, + 0xf8,0x39,0xe4,0xe5,0x31,0xf8,0x7a,0xc7,0xf5,0xdf, + 0xdf,0xdf,0xf1,0xfa,0xc4,0x90,0x7f,0xbb,0x7e,0x48, + 0xfe,0xfe,0xba,0x10,0xd7,0xaa,0x5a,0x9f,0xc3,0xb8, + 0xde,0x76,0xbd,0xfb,0x75,0xe0,0x63,0x1e,0xc8,0xf5, + 0xba,0xfe,0x7d,0x5c,0x1f,0xe5,0xeb,0x94,0xd6,0x31, + 0xca,0x01,0xbf,0x6e,0xd9,0xeb,0xbd,0x7c,0x5d,0x89, + 0xf1,0xfd,0xef,0xe3,0xf5,0x10,0xbc,0xfd,0x3f,0xb6, + 0x7f,0xf9,0xfd,0xff,0x90,0x7f,0x21,0xbf,0xce,0x27, + 0xdf,0xb1,0x3b,0x72,0x6e,0x4e,0x08,0x8f,0x8f,0x10, + 0xed,0x95,0x75,0xab,0xc9,0xf0,0x31,0x84,0x63,0x87, + 0xbc,0x80,0xfa,0x18,0xe9,0x1b,0xe9,0x5f,0x40,0xbf, + 0x52,0xec,0xbf,0xd1,0x2e,0x13,0xeb,0xd1,0x22,0x1c, + 0x4e,0xbb,0x1c,0x68,0x47,0x94,0x7e,0x88,0xf3,0x81, + 0x85,0x5d,0x47,0x0e,0x3f,0x34,0xa4,0x63,0x02,0x5f, + 0xa7,0xff,0xfd,0x66,0xb0,0x9e,0x3d,0xdb,0x2d,0x60, + 0xf9,0x46,0x20,0xdf,0x1d,0xc8,0xa7,0xc1,0xd7,0xe2, + 0x85,0xfd,0xb4,0x1d,0xee,0x5c,0xfc,0x1c,0xb6,0xe2, + 0xd6,0xc2,0xf2,0x6b,0x02,0x59,0xe0,0xd7,0xf9,0xea, + 0x12,0x9f,0xff,0x06,0xca,0xe2,0x67,0xbd,0x56,0x72, + 0x81,0x30,0x17,0x39,0xed,0xa9,0x65,0x3d,0x7d,0xc8, + 0xb3,0x47,0x7b,0xae,0xb8,0xae,0xff,0x15,0x2e,0xd7, + 0x33,0x37,0x43,0xdf,0xb5,0x7b,0xfd,0x62,0xb1,0x62, + 0xff,0xc8,0x7d,0x32,0x1c,0xdc,0xbf,0x0c,0x5d,0x0e, + 0x76,0x2c,0x94,0xff,0x8f,0x7a,0xc7,0x9f,0x47,0x8e, + 0xdb,0x43,0xb9,0x6e,0x35,0x8e,0x0b,0x31,0xff,0xfc, + 0x7c,0x8c,0xf4,0xe1,0x27,0xe6,0xf2,0x2f,0x51,0x05, + 0xb6,0x70,0xb9,0x8f,0xca,0x31,0x64,0x71,0x7f,0x29, + 0xaf,0xe7,0x68,0x1e,0x07,0x91,0x6f,0x31,0x75,0xd1, + 0xc8,0x2e,0x86,0xf5,0x3a,0x07,0x4a,0xac,0x9a,0x0f, + 0x31,0xc3,0x95,0x43,0x5f,0x0c,0x98,0x8f,0xf7,0xbc, + 0x0a,0xaf,0xcb,0x80,0x79,0x39,0xe6,0x02,0x97,0x85, + 0x76,0xdd,0x03,0xdd,0xec,0x89,0x6b,0xf1,0xae,0x40, + 0x40,0x3d,0x8e,0x72,0x3e,0x7a,0x68,0xec,0xcf,0xba, + 0xdd,0xe0,0xeb,0x7b,0xa0,0x8b,0xeb,0x4a,0x54,0xae, + 0xa3,0xe3,0xeb,0x7e,0xbe,0x02,0x11,0x98,0x1f,0x24, + 0x0c,0xae,0xe3,0x82,0x44,0xc3,0xd7,0xf7,0x7f,0xef, + 0xda,0x5c,0x0b,0x5c,0xb6,0x88,0x15,0x1d,0x24,0xd0, + 0x40,0xfe,0x93,0x63,0x80,0x1c,0xe4,0x15,0x4a,0xbe, + 0x5f,0xf8,0xfa,0xc4,0x72,0x2d,0x8f,0x1c,0xef,0xdf, + 0xf5,0x7c,0x77,0xe6,0x9b,0x47,0x81,0xf0,0xd0,0x23, + 0xae,0x3b,0x7e,0xe4,0x7c,0x37,0xe1,0x80,0x61,0xa7, + 0xb1,0xcf,0x31,0x05,0x1d,0x70,0x2d,0x2a,0x7d,0x1d, + 0xf5,0x21,0xd5,0x97,0x89,0xd7,0xd3,0x0c,0xd9,0x8e, + 0xf9,0x4e,0xf0,0x64,0x3b,0xce,0xb9,0x08,0x11,0xf6, + 0xe1,0xef,0xa7,0x79,0xbd,0x97,0x28,0x9b,0xb2,0x64, + 0x9c,0xf2,0x1e,0xd9,0x29,0x4b,0xb8,0xb4,0xb8,0x45, + 0xae,0xe3,0x99,0xab,0x9c,0xd7,0x4f,0xea,0xe6,0x55, + 0x16,0xbe,0x1e,0x3f,0x53,0xde,0x22,0x5b,0x3f,0xcb, + 0x2e,0xce,0x75,0xed,0x74,0xa7,0xa4,0x26,0xe9,0x7c, + 0xb8,0x19,0xd1,0x16,0x7c,0x78,0x9a,0xc1,0x1a,0xf3, + 0xe4,0x63,0x1a,0xf4,0xeb,0x07,0xe7,0x72,0x7d,0x05, + 0x99,0x57,0x60,0x20,0x56,0x3a,0x20,0x81,0x82,0xf2, + 0x77,0xd0,0x76,0x08,0x60,0x00,0xb5,0xc8,0xf9,0x7a, + 0x7f,0xa1,0xde,0x3c,0x53,0x18,0xbf,0x48,0xb1,0xf1, + 0x38,0x13,0xe0,0x61,0xbf,0xdb,0xbe,0x9b,0x7d,0xc7, + 0x7e,0x76,0xea,0x7c,0xb3,0xd4,0xc8,0x6f,0xc4,0x6d, + 0x54,0x81,0x6f,0x41,0x39,0xd5,0xc0,0xb0,0xe8,0xbf, + 0x4a,0x09,0xde,0x2c,0xf2,0x56,0x3e,0x5c,0x95,0xf2, + 0xa0,0x2d,0x9f,0xb5,0xa5,0x83,0xd7,0xae,0xcb,0x99, + 0xa7,0x72,0x74,0xb4,0x88,0xbb,0x73,0x04,0x63,0xa9, + 0x01,0xcf,0xea,0xf1,0x3a,0x23,0x5c,0x81,0x6d,0x08, + 0x6a,0xf0,0xda,0xd9,0xed,0x07,0x48,0xc6,0xdf,0x87, + 0x2e,0x64,0x68,0x90,0xa8,0x75,0x3c,0x81,0x5e,0x61, + 0x94,0x82,0x05,0x6b,0x71,0x86,0x6c,0x0b,0xb2,0x78, + 0x89,0x5a,0x92,0x69,0x40,0xe5,0xab,0x4c,0x22,0x50, + 0x4b,0x0b,0xd4,0x72,0x04,0x9e,0xed,0xc4,0x0d,0x0c, + 0xaf,0x6b,0x5a,0xcb,0xae,0x85,0x06,0x84,0x87,0x05, + 0x90,0x47,0x01,0x03,0xaf,0x00,0xfb,0xf5,0x7e,0x35, + 0xfe,0x89,0x8c,0xfe,0xc9,0xb7,0xf2,0xf0,0x57,0xce, + 0x13,0xc0,0xa3,0xaf,0x44,0xc9,0x6d,0x19,0x02,0x0e, + 0x99,0x81,0x06,0x3e,0x0a,0x2e,0x7c,0xb4,0xd2,0xcb, + 0x37,0xf2,0x50,0x84,0xdf,0x02,0x2f,0x6c,0xf0,0x53, + 0x7e,0x88,0x0d,0x55,0x62,0xc6,0x2e,0x0c,0x1b,0x2b, + 0x7b,0x3e,0xa5,0x36,0x65,0xd9,0x1d,0xeb,0xe1,0xb0, + 0xe5,0xd1,0x35,0x38,0xe3,0x95,0xd9,0xb4,0xcc,0x87, + 0x7e,0x44,0x0a,0x7a,0x31,0xec,0xe2,0x7b,0xfc,0x65, + 0xe8,0x33,0xc1,0xef,0xcf,0xcf,0xf2,0x01,0xa9,0x04, + 0xf4,0xdd,0x9a,0x13,0xe6,0xb4,0x1c,0xa3,0x06,0xba, + 0xeb,0x39,0x62,0x05,0xf7,0x10,0xca,0x51,0xb6,0x3b, + 0xff,0xfa,0x3c,0x3b,0xc6,0x41,0xf9,0x7d,0xe0,0x3b, + 0x3b,0x81,0x64,0x55,0x86,0x2a,0xcc,0xdf,0xa5,0x3e, + 0xa5,0xf8,0x4e,0xf3,0xfd,0x37,0x35,0x18,0xe2,0x0a, + 0xac,0x2f,0xf4,0xf8,0x37,0xd5,0xf8,0xdf,0xd4,0xf8, + 0x87,0x8c,0x61,0xa6,0x92,0xb0,0xea,0x15,0xcf,0x7e, + 0x77,0x17,0x27,0xb0,0xc9,0x5c,0xb0,0x79,0x56,0x4b, + 0x0d,0x79,0x4a,0xbb,0xb9,0x39,0xf7,0x92,0x32,0xd3, + 0xfe,0xcf,0x32,0xd1,0x11,0xb6,0xca,0xb9,0x33,0xe9, + 0x02,0x44,0x2d,0x2f,0xb8,0xc1,0x1f,0xda,0x2e,0x4c, + 0xcb,0xa4,0x30,0x17,0x1c,0xa4,0xe6,0x2e,0x75,0xad, + 0x9d,0x3e,0x0c,0x7e,0x2b,0x65,0xca,0xfc,0x33,0xea, + 0xce,0x5c,0x50,0x42,0xb6,0x6a,0xc8,0xc1,0xc2,0x58, + 0x22,0xce,0x0c,0x98,0x13,0x31,0xb8,0x76,0xe1,0x5a, + 0x89,0x0f,0x41,0xfa,0x5f,0x3b,0xf6,0xb5,0x60,0xc0, + 0x59,0x3e,0xac,0x1d,0x9d,0xfb,0x40,0xff,0xca,0x06, + 0xd0,0x6e,0xfd,0x6b,0x63,0xa2,0x67,0x38,0x98,0xad, + 0x2c,0x2c,0xcc,0x77,0xf6,0x1c,0x16,0x58,0x89,0x8a, + 0x91,0xbc,0xa2,0x6e,0x03,0x51,0x89,0x50,0xf8,0x5e, + 0x0b,0xff,0xc2,0x0b,0xf0,0x4a,0x34,0x58,0xc0,0x0d, + 0x52,0x03,0x2b,0x7e,0x8b,0x01,0xf0,0x83,0xef,0x7a, + 0x63,0x37,0x6c,0x6f,0xc1,0x5b,0x3f,0x8c,0xb4,0xc0, + 0xda,0x47,0x51,0x22,0x6f,0x2f,0x75,0x18,0x22,0xc5, + 0xba,0xf9,0xe4,0x3e,0x8b,0xcf,0x25,0x24,0x5a,0x56, + 0x82,0x18,0x14,0x59,0x73,0x18,0x38,0x9c,0x5d,0x0f, + 0xb8,0x05,0xb0,0xcd,0x49,0x83,0x1c,0x01,0xc0,0xee, + 0xc1,0x11,0x77,0xe8,0x66,0x2f,0x72,0x27,0xb8,0x55, + 0x76,0x50,0xdb,0x8d,0x89,0x7a,0x9a,0x18,0x16,0xe8, + 0x20,0x29,0x2e,0x0b,0xe0,0x70,0xed,0xee,0x9c,0x41, + 0x06,0x5e,0x46,0x6b,0x85,0x5e,0xb7,0x03,0x42,0x12, + 0x67,0xda,0x49,0x7f,0x1f,0x37,0x2c,0x18,0x00,0xfd, + 0xe6,0xd0,0x36,0x26,0x26,0x10,0x08,0xab,0xc3,0xe2, + 0x80,0xe1,0xba,0x3e,0xec,0xdd,0x20,0xa6,0x0d,0x89, + 0x83,0x0e,0x15,0xc9,0xf5,0x02,0xf2,0x93,0x34,0xb1, + 0xc5,0x57,0xa0,0xfa,0xfa,0xdd,0xd2,0xc5,0x5d,0x83, + 0x6d,0x5f,0x17,0xee,0xbe,0x8e,0xbf,0x0b,0x3e,0xb9, + 0x6d,0xb4,0x52,0x4f,0x38,0xa0,0xbe,0x01,0xc8,0x11, + 0x2a,0x71,0x6d,0xb7,0xa0,0x9c,0x3b,0xda,0x83,0x0f, + 0xbc,0x71,0xfc,0xc4,0xe6,0x81,0x62,0x41,0xa4,0xd7, + 0x63,0xbb,0x7a,0xb9,0x0c,0x9d,0x0f,0xc0,0xd1,0x25, + 0xf9,0x0a,0xec,0xb2,0x12,0x94,0xd6,0xd1,0xa3,0xc0, + 0x8d,0x94,0x19,0xb1,0x83,0x5b,0xb5,0x53,0x3d,0x90, + 0xb0,0x1e,0xbb,0x3f,0x17,0xe0,0x3d,0x17,0x26,0x24, + 0xfd,0x4d,0x37,0x53,0xde,0x47,0x0b,0xf2,0x6b,0x27, + 0x7c,0x75,0x01,0x86,0x96,0x83,0x6c,0x0f,0x30,0x86, + 0x77,0x6b,0x51,0xae,0x7b,0x79,0xb6,0x59,0x33,0x8d, + 0x9a,0x95,0x78,0x5e,0x27,0xad,0x3c,0xb2,0xfd,0xce, + 0x3c,0x56,0xc9,0x7e,0x08,0x87,0x64,0xb8,0xb2,0x29, + 0x6c,0xae,0xa1,0x04,0x88,0x54,0x82,0xcc,0x08,0x76, + 0xdf,0x05,0x78,0xaf,0x00,0xc0,0x27,0x4a,0x88,0xa7, + 0x78,0x81,0xa5,0x41,0x43,0xae,0x4d,0x7a,0xb8,0x71, + 0x7b,0x40,0xbc,0x05,0xe9,0x80,0x7c,0x7c,0x48,0x75, + 0xf1,0x36,0x1c,0xc6,0x3c,0xa4,0xfd,0x13,0x0e,0x3c, + 0x95,0x54,0x5c,0xa2,0xf9,0xc0,0x7e,0x17,0x6e,0x4f, + 0x73,0x0a,0xdc,0xac,0x35,0x32,0xc2,0xf5,0xf0,0xe8, + 0xce,0x53,0x80,0x47,0x09,0x5c,0x18,0x78,0x7e,0x5f, + 0xb9,0x32,0xa9,0xab,0xf6,0x25,0x05,0xd9,0xf6,0xd2, + 0x50,0xae,0x0f,0x67,0x07,0x64,0xd3,0x66,0xbb,0x42, + 0x00,0x6a,0x0e,0x00,0x19,0x24,0xa0,0xec,0xcc,0xdf, + 0xa9,0x7c,0x1d,0xb0,0xb9,0xd2,0x7b,0x1e,0x9f,0x77, + 0x18,0xaa,0xbf,0x42,0xc7,0x84,0x58,0x5f,0x41,0x85, + 0x57,0xe6,0x45,0x7b,0x52,0xa1,0x81,0x53,0xea,0x2b, + 0x72,0x70,0x97,0xec,0x92,0x76,0x9b,0xae,0xe9,0x2a, + 0x48,0x4b,0x99,0xed,0x39,0xfb,0xfa,0x14,0xd8,0x87, + 0x1f,0x7f,0x03,0x6f,0x5e,0xc1,0x11,0xd7,0xd3,0x8d, + 0xfe,0x16,0xbe,0xe4,0x0f,0xcf,0xe0,0x98,0xc6,0x48, + 0x5b,0x46,0x51,0xe7,0x81,0xf0,0xb3,0xd8,0x23,0xff, + 0x6b,0x5a,0x63,0x2d,0x3d,0xa4,0x35,0xcd,0xb6,0xa2, + 0xc1,0xb1,0x79,0xe8,0xd9,0xd6,0x57,0x9d,0x74,0x19, + 0x1d,0x08,0xb5,0x85,0x46,0x46,0xec,0xcc,0x76,0x4b, + 0x99,0x7f,0x43,0x05,0x21,0x38,0x5a,0xdb,0xba,0x5d, + 0x6f,0x52,0x7f,0x88,0xb2,0x70,0xae,0xa0,0xcb,0xd9, + 0x1d,0xe8,0xdd,0x0e,0xce,0xf7,0x91,0x0a,0x8c,0x72, + 0xd4,0xff,0xb2,0x4c,0xae,0x1c,0xb9,0x3e,0x3f,0x9c, + 0x27,0xa2,0xf8,0x0c,0xaf,0x8e,0xc1,0x95,0x4d,0x30, + 0xd7,0x93,0xb3,0x18,0x98,0xef,0xad,0xe7,0xea,0xb3, + 0x82,0xad,0x4e,0x1b,0xd2,0x0a,0x1e,0x35,0xe0,0x7c, + 0x07,0x2f,0xc3,0x90,0x2c,0x23,0x45,0xc2,0x8c,0x35, + 0x6b,0x9a,0xc3,0x01,0xa8,0x25,0xc0,0xdf,0x80,0x7d, + 0x4f,0x82,0x0b,0x1e,0xb6,0xdb,0x78,0x1e,0x62,0x69, + 0x60,0x12,0x6e,0xa3,0x1a,0x4f,0xa1,0x46,0x27,0xb1, + 0x32,0xb4,0x5e,0x81,0xc0,0x94,0x62,0x30,0x15,0x4a, + 0x1b,0xc8,0x1e,0xa1,0x12,0x62,0x06,0x40,0xdb,0x36, + 0x80,0x1d,0x08,0x5a,0xb3,0x00,0x28,0x02,0x55,0xea, + 0x60,0x59,0x6c,0x03,0x19,0xdb,0x18,0x8e,0xcc,0xb3, + 0xee,0x7a,0x94,0x4c,0x08,0x2b,0x88,0x60,0xd8,0x5c, + 0x03,0x7a,0x3a,0x8c,0xd7,0xe2,0x9a,0xd8,0x80,0xdd, + 0xcb,0x96,0x62,0x8f,0x05,0x96,0x11,0x90,0x01,0xa0, + 0xb5,0x40,0xbd,0x25,0xa6,0xe0,0x1e,0xc0,0xb0,0x5f, + 0x73,0xb6,0xc8,0x46,0xfb,0x24,0xec,0x18,0x70,0x25, + 0x1b,0xad,0x9e,0xdc,0x81,0x88,0xfd,0x5b,0xaf,0xd2, + 0x94,0x31,0xb9,0x65,0x69,0x0b,0x5f,0xc7,0xc7,0x9c, + 0xd2,0x37,0xbc,0x67,0x75,0xc9,0x08,0x05,0x04,0xfa, + 0xd0,0xd5,0xd7,0xef,0x17,0xf0,0x7d,0x08,0xc1,0xe3, + 0x30,0x81,0xf3,0xf7,0x1f,0xe6,0x81,0x23,0x74,0x76, + 0x93,0x76,0x22,0x24,0x73,0x0c,0xc8,0x17,0x36,0xef, + 0x01,0x12,0x52,0x9d,0x31,0x0d,0xd6,0x3b,0xbb,0x2d, + 0xa4,0x19,0xea,0x59,0x4f,0xd7,0x53,0x9b,0xcd,0x41, + 0xf3,0xd2,0x57,0x60,0x4a,0xff,0x65,0x19,0x62,0x3d, + 0xb4,0x1c,0xa9,0x0d,0x06,0x83,0x1e,0xc7,0xf0,0x49, + 0x0a,0x96,0x87,0x0b,0x73,0xdc,0x95,0xb4,0xe2,0xca, + 0x41,0xb5,0x12,0x10,0x3a,0x36,0xc0,0xd6,0x66,0x44, + 0xcb,0xa9,0xc0,0x9e,0x55,0xa1,0x04,0x76,0x6d,0x93, + 0xa1,0xcc,0x19,0x95,0x62,0xc7,0x92,0x31,0x4a,0x6a, + 0x3d,0xeb,0xef,0xb1,0x8e,0x07,0xe8,0xdb,0x08,0x43, + 0x7b,0x2e,0xde,0xc3,0xb1,0x00,0xcb,0x57,0x9d,0x53, + 0xaf,0x79,0x79,0xfe,0x30,0x01,0xc6,0x6b,0xaa,0x70, + 0x26,0x66,0x32,0x63,0x41,0x32,0xe0,0x01,0xad,0xd1, + 0x58,0x36,0xd3,0xaf,0xdf,0x2d,0xed,0x4f,0x66,0x06, + 0xef,0xfe,0xca,0x0f,0x8e,0x0a,0xc8,0xc8,0x35,0xf7, + 0x95,0xf9,0x33,0xac,0x12,0xe7,0x3e,0x5b,0x59,0x53, + 0x9b,0x46,0x78,0x98,0x69,0xe7,0x48,0x28,0x2f,0x23, + 0x04,0x8b,0xf2,0x00,0xac,0xb2,0x00,0x5b,0x5c,0x02, + 0x0e,0x5f,0xca,0xb8,0xac,0x67,0x5d,0x2c,0x33,0x3f, + 0xf4,0xa5,0x43,0xcf,0x14,0xbe,0x77,0x63,0xc2,0xd1, + 0x68,0x47,0xf8,0xa5,0xb1,0xc9,0xb2,0x11,0x57,0xdc, + 0x65,0x48,0xbf,0x5f,0xc6,0x8c,0xb9,0xbb,0xd0,0x08, + 0xf7,0x85,0x5a,0xa1,0x41,0x16,0x2f,0x5b,0x80,0xc7, + 0xb5,0xc0,0x69,0xa3,0xdd,0xc0,0x1a,0xf4,0x21,0x1a, + 0x26,0x81,0xa1,0xe5,0x01,0x0a,0xb1,0xa8,0x86,0x2f, + 0xc3,0x17,0x80,0x35,0xf8,0x74,0x05,0x1c,0x2b,0x29, + 0x0a,0x88,0xab,0x14,0x85,0x21,0xdd,0x0a,0x7f,0xb6, + 0x88,0x30,0x67,0xb1,0x70,0x08,0xf2,0x43,0xa3,0xc0, + 0x7d,0x57,0xdb,0xe7,0x0e,0x3c,0x82,0x6e,0xbc,0xed, + 0xa7,0xff,0x7a,0x30,0x09,0x1b,0x3c,0x91,0x01,0x11, + 0x60,0x4c,0xb6,0xc2,0xfe,0x77,0xe8,0x84,0x70,0x93, + 0xe0,0x70,0x57,0xe8,0x9c,0x66,0x1b,0x69,0xbb,0x31, + 0xcb,0x17,0x43,0xe7,0xc7,0x65,0xf5,0x03,0xa9,0xc8, + 0xe1,0xbe,0xfc,0x82,0x76,0x27,0xae,0x89,0x33,0x99, + 0xa6,0xa4,0x57,0x21,0xd6,0x48,0x23,0xb6,0xc5,0x1d, + 0x5b,0x98,0x95,0x1e,0x35,0x6a,0x5f,0xbf,0xa2,0xde, + 0x9c,0x83,0x2e,0xb3,0x9f,0x3e,0xeb,0xf5,0x1a,0x35, + 0x98,0x9e,0x23,0x08,0x08,0x46,0xc1,0x39,0x64,0x94, + 0x79,0x66,0x2d,0x82,0xb2,0x92,0x3e,0x6e,0xfc,0x0a, + 0x9c,0x3e,0x03,0x50,0x76,0x5f,0x96,0x5a,0x9e,0x21, + 0x4c,0xac,0x48,0x63,0xd7,0xfd,0x15,0x84,0xaf,0x72, + 0x0c,0xfa,0x0c,0xce,0x01,0xa4,0x15,0x20,0x40,0x56, + 0xe0,0xb0,0x4c,0x6c,0xb2,0x6f,0x38,0xd4,0x20,0xcd, + 0x0f,0x05,0x80,0x6d,0xcf,0x0b,0x87,0xbf,0x6c,0x56, + 0x62,0x48,0xdb,0x19,0x77,0xc8,0xcf,0xfd,0x0f,0xf1, + 0x8b,0x21,0x0f,0xe3,0x33,0x9e,0x61,0x6a,0x12,0x84, + 0x8d,0x22,0x82,0x47,0xb5,0x9e,0x4e,0x01,0x94,0x61, + 0x61,0x21,0x64,0x31,0x88,0xb9,0x0c,0x70,0x87,0xb0, + 0x20,0xe1,0x74,0x8b,0x20,0x8b,0x8a,0xfc,0xc1,0x52, + 0xe7,0x51,0xea,0x79,0xb6,0x80,0x66,0x83,0xb5,0xfd, + 0x28,0x20,0x19,0x0e,0xa4,0x36,0x98,0x5c,0x07,0x48, + 0x5d,0xec,0xa9,0x2e,0xc2,0x31,0xf4,0xe8,0xcb,0x31, + 0x7a,0x4a,0x02,0x6d,0x5c,0xa0,0xfe,0xfb,0x7c,0x3b, + 0x8d,0x33,0x84,0x56,0x5e,0xcc,0xf1,0xe8,0xab,0xe4, + 0x99,0x5b,0xbf,0x0c,0xf7,0xbc,0x56,0x2e,0x02,0xef, + 0x17,0x61,0xfb,0xe0,0x10,0x12,0x93,0xa2,0x08,0xb8, + 0xc2,0xdc,0x1a,0xcb,0xc6,0xeb,0x7b,0x09,0xe6,0x8c, + 0xf4,0x8a,0x7b,0x50,0xe2,0xc3,0x4f,0x07,0x81,0xf8, + 0xcb,0xd7,0xdf,0xca,0xea,0xf1,0xeb,0x45,0xcf,0xe3, + 0x16,0x7d,0x93,0xb1,0xe0,0x74,0x42,0xb8,0x2d,0x1d, + 0x32,0x81,0xd6,0x01,0x46,0x9b,0xa7,0x28,0x43,0xe4, + 0xbd,0xae,0xe3,0xa6,0xe3,0x41,0x6e,0x72,0x15,0xee, + 0xb3,0x96,0x82,0x3b,0xf4,0x2e,0x51,0x49,0x8f,0xc3, + 0x9c,0xe2,0xa6,0xdc,0xc1,0x48,0x13,0x00,0xb3,0xb5, + 0x46,0x59,0x48,0xad,0xc5,0x08,0x87,0xe5,0x67,0x7a, + 0xac,0xe0,0x1d,0x19,0xaa,0x1a,0xf2,0x05,0x0a,0x62, + 0x0e,0x1f,0xb1,0x74,0x4b,0xa4,0xd3,0x82,0xb5,0x28, + 0xda,0xe0,0x93,0x1f,0x14,0x2b,0xc5,0x78,0x0e,0x36, + 0x91,0x33,0x43,0x98,0x1c,0xbb,0x99,0x69,0xac,0x49, + 0xc3,0x35,0x73,0x80,0x00,0x72,0xda,0x64,0xe7,0x55, + 0xa5,0x53,0x30,0x11,0x72,0x1d,0xe7,0x05,0x60,0x08, + 0xa9,0x09,0x7a,0x4e,0x23,0x4d,0xac,0xbe,0xc0,0x46, + 0xc9,0x9e,0xae,0xaf,0xfe,0xfa,0xdc,0x42,0xdd,0xbd, + 0xfe,0x41,0xd1,0x80,0x1d,0x02,0xfa,0xce,0xe1,0x68, + 0xba,0xbf,0x03,0xe4,0xee,0xda,0x77,0xbb,0x03,0x78, + 0x14,0x18,0x51,0xe2,0x3d,0x02,0x14,0x80,0x5d,0x76, + 0xc5,0x90,0x70,0x09,0x5a,0x8c,0xf1,0x8c,0x70,0xc4, + 0x70,0x76,0xd7,0x9c,0x3e,0x15,0xcb,0xa3,0x37,0x1d, + 0x61,0x08,0xba,0x0d,0xfd,0xdc,0xce,0x1d,0x23,0x67, + 0x73,0x08,0x51,0x88,0x56,0xe5,0x1a,0x79,0x7f,0x56, + 0x3b,0xe8,0x35,0x96,0x12,0x7e,0x90,0x92,0x23,0x72, + 0xf1,0x12,0x9c,0xe3,0xa3,0xbb,0x64,0xa9,0xc5,0x1d, + 0x12,0x7e,0x81,0x72,0x90,0xf1,0x62,0xab,0xca,0x04, + 0xaa,0x2b,0x83,0x9c,0x19,0xd0,0x5c,0xe4,0x7d,0x8c, + 0x30,0x3a,0x35,0x41,0x1d,0x2a,0x4d,0x2b,0x6c,0x36, + 0x08,0xf1,0x1f,0xa5,0xe5,0xa8,0x13,0x03,0x5f,0xe3, + 0xcf,0xff,0x87,0x0f,0x67,0x0a,0x78,0x14,0x83,0x78, + 0x3a,0x14,0x1c,0x4a,0x17,0x9e,0x76,0x6f,0x6b,0xbd, + 0x79,0x0a,0x8f,0xba,0xbc,0x3c,0xce,0x5c,0xa9,0x31, + 0x42,0x25,0x7c,0xa0,0xec,0xe7,0x4b,0xd9,0xc9,0xfb, + 0x9b,0xef,0x60,0x1b,0x94,0xa8,0x8d,0x31,0xce,0xb4, + 0xa3,0x6c,0x4c,0x1c,0x93,0x0f,0x8f,0xd1,0xd8,0xe7, + 0x19,0xe1,0xb4,0xe0,0x5a,0xda,0x61,0x1e,0xbc,0x7c, + 0x04,0x6e,0x6e,0x76,0xa8,0xed,0xaf,0x57,0xe7,0x04, + 0x09,0x4d,0x28,0x60,0x22,0xa4,0x82,0xec,0x2d,0xc0, + 0x72,0x23,0x20,0x63,0xc5,0x05,0x68,0x34,0xac,0x60, + 0xd4,0x05,0x57,0xbe,0x11,0x43,0x08,0x69,0xc6,0xda, + 0x03,0xa4,0xa5,0x58,0xa9,0x67,0x04,0x5b,0x8f,0xe2, + 0x3a,0x6f,0x54,0xf2,0x7e,0x49,0xe9,0xe8,0xaa,0x21, + 0x5a,0x7e,0x58,0xc9,0x08,0x2b,0x7c,0xca,0x30,0xe9, + 0xcc,0x2c,0xbe,0xc3,0xe4,0xaf,0x02,0xc0,0xaf,0x39, + 0xf5,0x4f,0x57,0x31,0xdf,0xff,0xed,0x13,0x4b,0xf0, + 0x38,0x44,0x8c,0xd1,0xda,0x44,0x7b,0x18,0x30,0x0d, + 0xfd,0x60,0xee,0x08,0x1e,0x67,0x34,0x05,0xc5,0xe1, + 0xe4,0x70,0xbc,0xd6,0x5b,0xf2,0x7e,0x7c,0x99,0x6d, + 0x75,0x86,0x81,0xe7,0x30,0x70,0xc4,0x4d,0xf9,0xd4, + 0x8b,0x01,0x96,0x7a,0xb8,0x30,0xf8,0x6c,0x75,0x31, + 0x65,0x62,0x3e,0x55,0xe8,0x43,0x4a,0x4d,0x62,0xe1, + 0xf5,0x48,0x13,0x32,0xa2,0x13,0xda,0x81,0xb7,0x25, + 0xdb,0x85,0x8d,0x24,0xf2,0xfe,0x8b,0x4c,0xd3,0x8e, + 0x21,0x04,0x7d,0x87,0x57,0x95,0xa6,0x1f,0x7a,0x46, + 0xba,0xf8,0x41,0xc9,0x2c,0xc0,0x1e,0x5c,0x01,0xd3, + 0x5a,0x41,0x62,0x88,0xb5,0x67,0x81,0x14,0x32,0x16, + 0x7d,0xae,0x03,0x72,0x2e,0xbf,0x24,0x03,0xe1,0xdd, + 0xa0,0xf0,0x96,0x08,0x0f,0x75,0x38,0x2e,0xfc,0x36, + 0x7f,0x7c,0x90,0x39,0xd1,0x87,0x83,0xb1,0xa3,0x6d, + 0xa2,0x0d,0xa9,0x3f,0x0f,0x1e,0x73,0x5f,0x8e,0xcb, + 0x7f,0xec,0xfa,0x09,0xbb,0x84,0x03,0x37,0xb3,0xa8, + 0xec,0xd7,0x99,0x27,0xd0,0x30,0xdf,0xb3,0x94,0x2c, + 0x31,0x68,0x52,0xad,0xc5,0x28,0x4a,0x38,0x9e,0x46, + 0x0b,0x06,0xc0,0xd4,0x84,0x28,0x69,0x34,0xb4,0x5b, + 0x3d,0xbf,0x4b,0x1b,0x02,0x18,0x6b,0xbe,0x1f,0xdb, + 0x07,0x8d,0xf1,0xa1,0xa3,0x4e,0xc6,0x71,0x8c,0x4c, + 0xde,0x1f,0x65,0x20,0x00,0x96,0x57,0xb4,0xb1,0x69, + 0xb2,0x35,0x02,0x02,0x9a,0x6a,0x33,0x00,0x1d,0xf3, + 0x8e,0x88,0x12,0x57,0xaf,0x1f,0x33,0x2b,0xeb,0x11, + 0x5a,0xb3,0x2d,0x08,0x91,0xa9,0xa6,0xfc,0x0b,0xf8, + 0xb8,0x1a,0x82,0x1f,0x2f,0x01,0xb0,0x45,0xdf,0xc6, + 0x53,0xf2,0xfe,0xe8,0xea,0x3e,0x23,0xb4,0x32,0xf0, + 0x66,0xf4,0xc9,0x6f,0xe3,0x83,0x50,0xc2,0x46,0x3a, + 0xa9,0xfb,0xe0,0x0e,0x56,0x4b,0x73,0x48,0x3d,0xed, + 0x67,0x28,0x35,0xba,0x7a,0xde,0x9c,0xe0,0x4c,0xa7, + 0x2e,0x55,0x00,0x37,0xdc,0x7f,0x1e,0xc2,0x0c,0x76, + 0xe8,0x25,0x71,0x0c,0xba,0x65,0xe4,0xb6,0xf4,0xb5, + 0x73,0xcf,0xf6,0x22,0xba,0x74,0xa6,0x9c,0x8a,0x8e, + 0xbc,0x68,0xb1,0xe9,0x96,0xfa,0x6e,0x4d,0x0b,0x01, + 0x18,0x65,0x9a,0xaf,0x50,0x67,0x5f,0xc3,0x36,0x40, + 0x05,0xcc,0x36,0xd8,0xac,0xe9,0x35,0xd0,0x2b,0x3d, + 0xb9,0x29,0x98,0x1d,0x12,0x1d,0x83,0xf6,0x47,0x94, + 0xa8,0x1d,0x9e,0xc9,0xe3,0xa0,0x94,0x18,0x0c,0xbd, + 0x13,0xd8,0x5a,0x50,0xc9,0x25,0x25,0xb9,0x95,0x56, + 0xcf,0xa5,0xfe,0xd3,0x33,0x3d,0x4a,0x09,0xf1,0x01, + 0x3a,0xf0,0xcd,0xaa,0x9b,0xe9,0xf4,0x73,0xa5,0x9f, + 0xf2,0xfa,0xa7,0xc8,0xfb,0x87,0xec,0x01,0x63,0x33, + 0xaa,0xcb,0xd0,0x87,0x60,0x46,0xf8,0xd1,0xc0,0xa2, + 0x5d,0x70,0x62,0x38,0x54,0x49,0xc9,0x0e,0x20,0x1a, + 0xe4,0x79,0xeb,0x6f,0x5d,0xad,0x3e,0x30,0xa8,0x02, + 0x21,0x20,0x27,0xc8,0xd7,0x8e,0x5c,0xd3,0xef,0xbd, + 0x03,0x82,0xd1,0x06,0x78,0x5a,0xda,0x5e,0xa7,0xe1, + 0x5a,0xe0,0x44,0x17,0xe3,0x9c,0x35,0x35,0xaa,0xaa, + 0xd9,0x92,0x8a,0xa6,0xb4,0xe6,0xa0,0xeb,0xa2,0x13, + 0xb1,0x5a,0x18,0xe5,0xd8,0x90,0xf7,0x67,0x40,0xd1, + 0xb5,0xbc,0x44,0x41,0x58,0x47,0xa7,0x59,0x15,0xbb, + 0x68,0x04,0x0c,0xd5,0xd9,0xd3,0xee,0x65,0x79,0x22, + 0x8c,0x90,0x30,0xc9,0x49,0xaf,0xee,0x08,0x61,0xbd, + 0x93,0xeb,0xef,0x76,0xf9,0x95,0x03,0x0a,0x09,0x6e, + 0xfa,0xa0,0x94,0x8e,0x10,0xb9,0xcd,0x7e,0xbf,0x7e, + 0xbf,0xf0,0x71,0xbb,0x94,0x81,0x1f,0x06,0x92,0x87, + 0x0b,0x7a,0x30,0x04,0x99,0xf0,0x59,0xee,0x9a,0x76, + 0x6f,0x93,0xf7,0x03,0x44,0x81,0x73,0xab,0xad,0xb2, + 0xcd,0x46,0x50,0xb1,0xd9,0x92,0xf7,0x7b,0x57,0x17, + 0x34,0x3e,0x9f,0xfc,0x17,0x70,0x64,0x55,0xf3,0x98, + 0x72,0x8e,0x09,0x6e,0xcd,0xd9,0x77,0xe6,0x60,0x0b, + 0xcd,0x38,0x5a,0x1f,0x9e,0xfb,0x89,0x28,0x55,0xdc, + 0xbd,0x16,0x9b,0x91,0xf7,0xc9,0x30,0x9b,0x81,0x53, + 0x0d,0xa9,0xfd,0x51,0x56,0x10,0x0c,0x35,0x68,0x15, + 0xbe,0xd6,0xa5,0x31,0x40,0x85,0x24,0x5a,0xf1,0x53, + 0x8b,0x9e,0x09,0xfe,0xa1,0xe2,0x8a,0x76,0x6d,0x66, + 0xa7,0x42,0xef,0x73,0x0a,0xca,0x42,0x3c,0x72,0xce, + 0x15,0x5f,0xad,0x0e,0x15,0x0d,0x61,0x89,0x56,0x12, + 0x6d,0xca,0xb3,0xc8,0xa6,0x07,0x40,0x9f,0xee,0x7c, + 0x7d,0xcf,0xd7,0xcf,0x51,0xbd,0x0f,0x8c,0xe4,0xec, + 0x76,0xbc,0x30,0x08,0xe3,0x0a,0xb3,0xfe,0x24,0xf7, + 0x09,0x5b,0x66,0xb0,0x3a,0xfd,0x26,0xf0,0x23,0x50, + 0xb3,0x57,0x34,0xe8,0x48,0x39,0x6b,0x7d,0x46,0xe7, + 0x9c,0x03,0xb9,0xb7,0x8e,0x5e,0x0a,0x1c,0x4b,0x25, + 0xe6,0xda,0x7d,0x87,0x25,0x94,0xda,0xd5,0x33,0x93, + 0xa0,0x42,0x5e,0x21,0x3f,0x4c,0x00,0x6d,0x2a,0xed, + 0x96,0x81,0x2d,0x4d,0xb1,0x37,0x59,0x11,0xac,0xde, + 0x9e,0xe0,0x37,0x64,0x68,0x89,0x87,0x8c,0x70,0x4b, + 0xde,0x3f,0x00,0x1b,0x6c,0x94,0x6e,0x68,0x06,0xc5, + 0xc4,0xac,0xe4,0x42,0xe7,0x29,0x92,0xe9,0xaf,0x4d, + 0x07,0x2a,0x33,0x47,0xd7,0x1d,0x9a,0x53,0x03,0x7d, + 0x91,0xea,0x48,0xee,0x75,0x0d,0x93,0xc6,0x8c,0x81, + 0xb8,0x80,0x64,0x45,0x0d,0xa4,0x09,0xa2,0xe8,0x05, + 0x38,0x91,0xd7,0x5e,0xd9,0xcd,0xd7,0x3b,0x6b,0xfa, + 0x23,0x1d,0xfd,0x33,0x79,0x3f,0x23,0xdc,0x69,0x33, + 0xb8,0xad,0x22,0xf0,0x60,0x05,0xbc,0x17,0xd2,0xb6, + 0x63,0xc1,0x08,0x45,0xa4,0xa4,0xe2,0x3a,0x67,0x8f, + 0x03,0xd0,0xd6,0x28,0xaa,0xdb,0x6b,0x97,0x45,0x43, + 0xd7,0x72,0xde,0xd0,0x4f,0x9a,0xd8,0x47,0x02,0xb7, + 0x74,0x0f,0xcb,0xc7,0x0a,0xff,0xb2,0x39,0xf1,0x46, + 0xc9,0x68,0x36,0x8c,0x3b,0x0b,0x3c,0x40,0x16,0x72, + 0x07,0xc3,0x71,0x60,0xe3,0x8f,0x80,0x20,0x58,0x00, + 0x56,0x99,0xed,0xb1,0x57,0x93,0xa7,0x96,0x6f,0x10, + 0xb0,0x50,0x33,0x1c,0x69,0x8b,0xb2,0x6c,0x3a,0xb0, + 0x67,0x12,0xb3,0xcb,0x43,0x22,0x4b,0xdd,0x5e,0x28, + 0x7d,0x11,0x20,0x42,0x21,0x17,0x69,0x53,0xa7,0x4e, + 0x38,0xa4,0x81,0x2f,0x36,0x9a,0xf6,0x94,0x5f,0x83, + 0x4b,0xce,0xd7,0x70,0xfc,0xf5,0xa3,0x1d,0x6f,0xfc, + 0x22,0x50,0xe0,0xcd,0x2f,0xfb,0xc1,0x8f,0x9c,0x67, + 0x74,0xce,0x4a,0xc3,0xbc,0x5d,0x7d,0x68,0x58,0x81, + 0x8b,0x8c,0xee,0xd8,0x83,0x65,0x9b,0x39,0x5c,0xa0, + 0xe5,0x05,0x70,0x60,0x48,0xb2,0x73,0xcd,0x70,0x39, + 0xd7,0x58,0x9f,0x19,0x61,0xb7,0x44,0x4a,0x89,0x28, + 0x29,0xfc,0x30,0x94,0xdd,0xc6,0x59,0xd7,0xdb,0x65, + 0xd4,0xb8,0xd4,0xd9,0x9e,0x05,0x69,0xcb,0x71,0xf5, + 0xf6,0x19,0xe4,0xbe,0x6b,0x95,0xc6,0x8c,0x1d,0xc3, + 0xa2,0x9a,0x48,0x8a,0x69,0x9a,0x0c,0xa4,0xc7,0xde, + 0x67,0x13,0xf4,0xbd,0x45,0x74,0xa7,0xd5,0xee,0x5d, + 0x29,0xd0,0xc6,0x9e,0xa5,0x5b,0x03,0x0f,0xa8,0xcc, + 0x69,0x5a,0x03,0x46,0xcd,0x16,0x05,0xbe,0x31,0x80, + 0x86,0xb3,0x76,0xe0,0x97,0x45,0x89,0x99,0x15,0x9d, + 0x91,0xe3,0xfa,0x93,0x41,0xa0,0x67,0x6a,0x58,0x6f, + 0x8e,0xf2,0xf0,0xe1,0x8f,0xec,0x74,0x00,0x79,0xe7, + 0x39,0xc0,0x82,0x57,0x30,0x60,0xfa,0xbd,0xb7,0x7e, + 0x00,0xa2,0x70,0x82,0xf3,0xb0,0x0d,0x52,0x2c,0xab, + 0x01,0xa1,0xc2,0xe0,0xe4,0x78,0x23,0x04,0xb7,0x36, + 0x54,0x17,0x6f,0x0e,0xf3,0x34,0x5a,0xd3,0x17,0x4c, + 0xaa,0x2b,0x17,0x81,0x46,0x27,0xd6,0xd0,0x81,0x4a, + 0x4f,0xbd,0xdb,0x02,0xc6,0x5a,0x24,0xec,0xf8,0xdc, + 0xf2,0x47,0xa8,0x5a,0x81,0x02,0xdb,0x89,0x74,0xf6, + 0x68,0xf2,0xda,0x75,0xca,0x78,0xc9,0x60,0xd3,0x6b, + 0x42,0xf6,0x9c,0xcb,0x95,0xbb,0x57,0x9a,0x8e,0xae, + 0x8d,0x42,0x34,0x0c,0x69,0x0e,0x02,0xab,0xc2,0x9a, + 0x03,0xbf,0x7a,0x7c,0xd0,0x16,0xa8,0x0e,0x15,0xc1, + 0x46,0x89,0x94,0x70,0x6c,0x1a,0x0c,0xed,0xda,0x05, + 0xc9,0x3a,0x2b,0x03,0x30,0xfe,0x91,0x49,0xc0,0x0f, + 0xc1,0x07,0x78,0xfe,0xbe,0xc8,0xb3,0xc1,0x5d,0x27, + 0x42,0x30,0x63,0x16,0x6c,0x7e,0xef,0x56,0x50,0xb4, + 0x29,0x71,0x6c,0x4a,0x64,0x49,0x2d,0xe1,0x97,0xcf, + 0xfa,0x33,0x8b,0x6c,0xe9,0x2a,0x80,0x29,0xf7,0xb4, + 0x16,0x36,0x4f,0x99,0xcc,0x28,0x36,0x58,0x25,0x00, + 0xa6,0x20,0x09,0x1f,0x83,0xe5,0xd8,0x63,0x83,0x6c, + 0x00,0xe0,0x69,0x3a,0x18,0xf6,0x5d,0xda,0x5e,0x27, + 0x4a,0x1b,0xa9,0x4c,0xb3,0xcd,0xe5,0x01,0xbb,0xce, + 0xd4,0x6e,0xc1,0x6a,0x06,0x52,0x80,0x32,0x1f,0xd9, + 0x2d,0xbf,0x63,0xd9,0x74,0x3b,0x56,0x0b,0x9e,0x3e, + 0xa2,0x5c,0xbb,0x1b,0x0b,0xc0,0x9b,0xbf,0x03,0x01, + 0xe3,0xca,0x74,0xe3,0x49,0x08,0xd6,0xbb,0x56,0x68, + 0x55,0x20,0xc3,0xdf,0x22,0x0e,0x4e,0xb4,0xab,0xff, + 0x3c,0x00,0xf0,0xdf,0x88,0x12,0xfc,0xd5,0x81,0x3c, + 0xc2,0xd1,0x42,0xfa,0x8d,0xa4,0x0b,0xff,0x6e,0x50, + 0xda,0x91,0xf4,0x02,0x92,0xfc,0x0d,0x4e,0xf1,0x1e, + 0xdc,0xc0,0xe8,0x2b,0xa5,0x4d,0x35,0x48,0x7d,0x8a, + 0x31,0xfa,0x23,0x54,0x91,0x6d,0x69,0x51,0x98,0xd4, + 0xba,0xd6,0xb3,0x5e,0x05,0x09,0x32,0x6d,0xe4,0x7d, + 0xe5,0x9a,0x4f,0xe6,0x1b,0x3b,0xc3,0x91,0xf6,0xfd, + 0x3d,0x18,0x49,0x14,0x15,0xa0,0xb4,0x81,0xc1,0xe0, + 0xda,0xc5,0x51,0x93,0xdd,0x69,0x82,0x81,0x8d,0x77, + 0x03,0xc2,0x73,0x82,0x14,0xac,0xcd,0x5b,0x91,0xb2, + 0x1b,0x33,0x94,0x14,0x33,0xfd,0x92,0xb6,0x65,0xe9, + 0x3e,0xb0,0x05,0xa4,0xd6,0xda,0x2b,0x19,0xca,0xcb, + 0x16,0x8c,0x75,0x92,0x91,0x66,0x29,0xe7,0x33,0x22, + 0xf3,0x1e,0x5c,0x58,0x8b,0x97,0x9f,0xb7,0x7a,0x00, + 0xbc,0x7b,0xd8,0xf9,0xc7,0x41,0xe3,0x21,0x79,0x5f, + 0x42,0xf7,0x8e,0x03,0x70,0x6a,0x8b,0x25,0x14,0x7e, + 0x37,0x99,0xb7,0x03,0xa2,0x77,0x9b,0x3c,0x76,0x0c, + 0x44,0x60,0xff,0x34,0x36,0x63,0xc8,0xd3,0x25,0xb5, + 0x5c,0x85,0x1d,0xb3,0x6f,0xd9,0x08,0xcc,0x39,0xc7, + 0x32,0xa7,0xd4,0x48,0x69,0xbf,0x77,0xa9,0xd9,0x08, + 0xd3,0x8d,0xa2,0xac,0x8f,0x39,0x74,0x42,0x93,0x6b, + 0x33,0x1a,0x0b,0xbd,0x91,0x39,0xaa,0xfe,0xdf,0x22, + 0xbe,0x0a,0xa6,0x0e,0x69,0x37,0xea,0x56,0xc8,0x1c, + 0x23,0x9b,0x77,0x43,0x6a,0x08,0xd3,0xe5,0xf2,0x32, + 0x6a,0x5f,0xfe,0x1b,0x35,0x40,0x81,0x45,0x26,0x8e, + 0xa3,0x8a,0xb4,0x5c,0x7a,0x07,0x9c,0x6c,0x46,0x56, + 0xa2,0x55,0xc3,0x8d,0x18,0x40,0x42,0xdd,0x9c,0x58, + 0xa4,0x14,0x9b,0x6f,0x24,0x28,0x5d,0x1b,0xb4,0x91, + 0x33,0xdc,0x4a,0x82,0xdd,0x52,0xcb,0x70,0xea,0xdc, + 0xfd,0x93,0xe4,0xfd,0x71,0x09,0x4a,0x3c,0x52,0x26, + 0xd8,0x12,0x7e,0x70,0xa8,0xdb,0x43,0x6a,0x78,0x18, + 0x3d,0xc0,0x86,0xde,0xe7,0x6e,0x7b,0xdc,0x75,0x30, + 0x36,0xec,0xc0,0xd4,0x70,0xd0,0x28,0xc7,0xd4,0x40, + 0x8f,0x31,0x93,0x53,0x47,0xbf,0x03,0x9a,0xd5,0x65, + 0x9a,0x06,0xdb,0x54,0x8b,0x6c,0x58,0x4e,0x41,0x5b, + 0x8c,0xd8,0xf0,0x12,0x34,0x1b,0x42,0x82,0x29,0x5a, + 0x06,0x72,0x91,0x6e,0x96,0xc3,0xd0,0xaa,0x01,0x26, + 0xe2,0xbd,0x1b,0xf1,0x88,0x5d,0x0e,0x56,0x01,0x0d, + 0x81,0xe6,0xa7,0x59,0x0a,0x3a,0x9b,0x02,0x49,0x70, + 0x99,0x63,0xb8,0xf3,0xf2,0xba,0x97,0xd7,0x6c,0x03, + 0xd6,0x75,0x05,0xe7,0x79,0xa7,0x49,0x52,0x55,0x25, + 0xc6,0x60,0x00,0x1d,0x29,0xfa,0x87,0xa3,0xda,0xaf, + 0x91,0x31,0x83,0x2d,0xdf,0xf3,0x3a,0xf5,0xaf,0x4f, + 0x91,0xf7,0xf1,0xf1,0x45,0x7f,0x4b,0xde,0xdf,0xe1, + 0xe7,0xcf,0x3b,0x11,0xfc,0xcd,0x19,0x1f,0x52,0x82, + 0xde,0x63,0x0a,0x59,0x3c,0x37,0x86,0x46,0xab,0x2e, + 0x66,0x2e,0xb3,0xe7,0x13,0x47,0x93,0xec,0x6a,0xa6, + 0x93,0x0f,0x2e,0x02,0x37,0x7e,0x1e,0x2e,0x99,0x05, + 0xaa,0x7f,0x60,0x3e,0x5f,0x0c,0x91,0xf0,0x06,0xb6, + 0xdd,0x85,0xf9,0x28,0x97,0x11,0x75,0x36,0xe0,0xb0, + 0x65,0x7d,0x64,0x2b,0x5e,0xfa,0x75,0xaa,0x1d,0x0f, + 0xa8,0xef,0x21,0x59,0x50,0x77,0xd0,0xfd,0x08,0xea, + 0x1c,0x01,0x7a,0x2f,0xc4,0xc7,0xff,0x4d,0x12,0x6d, + 0x01,0x3a,0x9c,0x70,0x5e,0x55,0x34,0x76,0x62,0x18, + 0x18,0xd8,0x8a,0x5c,0x26,0xa0,0xc4,0xb0,0xdf,0x47, + 0xa5,0x95,0xa3,0xe0,0xfb,0x2b,0xb0,0xcb,0xdd,0xd2, + 0x00,0x4c,0x83,0xa2,0xbf,0xfe,0x56,0x0f,0xf8,0xb7, + 0x95,0x01,0xc6,0x63,0x3f,0x5f,0x8e,0x03,0xd9,0x88, + 0xc7,0xb4,0xfe,0x78,0x94,0xfb,0x81,0xff,0xd0,0xcc, + 0x08,0xe3,0x87,0x38,0x8c,0x14,0xe2,0xd4,0xe4,0x60, + 0x1c,0x84,0x84,0xb0,0x61,0xe0,0xe4,0xfd,0xf2,0xc6, + 0xfa,0xdb,0x6c,0xc8,0x25,0x1f,0xeb,0x07,0x8c,0x96, + 0x4e,0x6f,0x59,0x2f,0x26,0x0b,0xae,0xc7,0xb2,0x01, + 0x37,0x2f,0xbc,0xa0,0x98,0x57,0xda,0x77,0x5f,0xe3, + 0xad,0x3a,0x4b,0x3f,0x75,0xfb,0x14,0x43,0xc8,0x1c, + 0x84,0x39,0xd1,0x08,0x3f,0x97,0x42,0xde,0x6f,0xe7, + 0x4d,0x73,0xdf,0xe1,0xa6,0xf0,0x6a,0x8c,0x45,0x2c, + 0xfe,0x3d,0x4d,0x4c,0xc9,0x53,0x4f,0xd7,0xf2,0x1f, + 0x26,0xe0,0xea,0xba,0x8e,0x1c,0x34,0x15,0x21,0x9b, + 0x20,0x74,0x24,0x90,0x15,0xcc,0x86,0x5c,0xd3,0xf7, + 0x40,0xc0,0x0f,0xa2,0x80,0xcf,0xbc,0x3f,0xb0,0xf9, + 0xe7,0xe1,0x4b,0x71,0xfe,0x45,0x1c,0xdb,0x05,0x29, + 0x0a,0x8f,0x9d,0xc2,0x96,0xa5,0xaa,0x77,0x67,0xc9, + 0xf3,0xeb,0x1c,0x5b,0x5b,0xf3,0x54,0xab,0xba,0xa7, + 0x1e,0x7d,0x47,0x0f,0xe9,0x6f,0xe7,0x1e,0x98,0xa2, + 0x7f,0x12,0xef,0x87,0x9b,0x85,0x62,0x8c,0x43,0x5f, + 0x84,0x87,0x0e,0x01,0x9b,0x0f,0x00,0xea,0xdc,0xfc, + 0x30,0x83,0x64,0x93,0x77,0x9f,0xee,0x3e,0x65,0x11, + 0x23,0x68,0x1c,0xf4,0x4b,0x38,0xb1,0x88,0x16,0x4d, + 0x0b,0xd2,0xd6,0xfd,0x0e,0xd9,0x55,0x98,0x5c,0x2e, + 0x4d,0x4b,0x0a,0xb8,0xf1,0xeb,0xa8,0xd2,0x62,0x69, + 0x33,0x82,0xfb,0x2d,0xa0,0x66,0x78,0x14,0x7a,0x7a, + 0x1f,0x0c,0x17,0xf6,0xa5,0x7c,0x9f,0x96,0x54,0xc0, + 0x6b,0x20,0xa9,0xdc,0xe2,0x95,0x45,0x7c,0x3d,0x5f, + 0xfb,0xf8,0x79,0x80,0x78,0x40,0xde,0xe7,0x4f,0x3f, + 0xcb,0x8d,0x8f,0xe3,0x3b,0x71,0x0d,0x01,0x9c,0xc3, + 0x43,0xee,0x32,0x9e,0x86,0xbc,0x43,0x47,0x23,0x8c, + 0xdb,0xde,0xf4,0x29,0x0c,0x95,0xa6,0x39,0x61,0x53, + 0x80,0xb8,0x5c,0x11,0x7c,0x97,0xa6,0x28,0xad,0x61, + 0xa6,0xfe,0xbf,0x54,0xdf,0x01,0x73,0x0d,0xc7,0xc6, + 0xca,0xa4,0x2b,0xdd,0x00,0x6d,0x3a,0x24,0xa1,0x8d, + 0xcd,0x6d,0x44,0x5a,0x2d,0xf2,0x13,0xe2,0xd8,0x43, + 0x61,0xe3,0x71,0x98,0x69,0xc9,0x08,0x81,0x21,0x65, + 0x00,0x92,0x35,0xad,0xf1,0x87,0xea,0xd1,0xa7,0x13, + 0xb6,0xb0,0xce,0xc3,0xd6,0xd8,0x21,0x6d,0x46,0xa4, + 0xec,0xc8,0x8c,0x8a,0x89,0xe0,0x6e,0x4b,0x91,0x80, + 0x4b,0xfb,0xac,0xd4,0x57,0x58,0x15,0xc5,0xda,0x20, + 0x5e,0x9d,0xa8,0x67,0x01,0xe0,0xc9,0x43,0x4e,0xbc, + 0xf5,0xf9,0x27,0x73,0x3d,0x8f,0xe2,0x0e,0x6e,0x5a, + 0xfc,0x4f,0x95,0x43,0x0e,0xe4,0xfd,0x56,0x40,0xdc, + 0x8a,0x85,0x24,0xe1,0x08,0x3c,0x0c,0x0c,0x7c,0x90, + 0x96,0xf7,0x6b,0x54,0xfc,0x1e,0x80,0x31,0xb6,0x4e, + 0xf1,0xb4,0x0d,0x9e,0xe2,0x04,0x1c,0xca,0xee,0x61, + 0x20,0x99,0x3c,0xe4,0xcd,0xd8,0x58,0x49,0xee,0x5c, + 0x12,0x63,0xd7,0xdf,0x60,0xca,0xdd,0x77,0x34,0x32, + 0x70,0x1b,0xbe,0xe4,0xa8,0x38,0xbb,0x11,0x90,0x6c, + 0xe2,0xc2,0x03,0xd1,0x24,0xb6,0x2e,0x4e,0x06,0x77, + 0x5e,0x3a,0x13,0x5b,0x29,0xa5,0x05,0x11,0x30,0x92, + 0xb0,0x20,0xa1,0x56,0xf4,0x17,0xc3,0x2f,0xf8,0x10, + 0xce,0xc5,0xbb,0x26,0x3f,0x31,0xd0,0xf6,0x9d,0xe9, + 0x8b,0x08,0xd1,0x1b,0x2c,0xc7,0xce,0x32,0xd5,0xc9, + 0x50,0xfe,0x55,0xc0,0x55,0x00,0x43,0x40,0xad,0xc1, + 0xf8,0xbb,0x64,0x1f,0xcf,0xb7,0xf0,0xa7,0x86,0xa1, + 0xf8,0x09,0x2e,0xc8,0xc3,0x02,0xe7,0x41,0xe9,0x67, + 0x43,0xde,0xe7,0x30,0x65,0xe0,0x80,0xea,0x6f,0x5d, + 0x7c,0xef,0xc9,0xfb,0x25,0x08,0x1c,0x87,0x94,0x4b, + 0x65,0xe2,0x92,0x24,0xfb,0x61,0x87,0x26,0x88,0xba, + 0x6d,0x65,0xb0,0x33,0x65,0x11,0xdd,0x03,0xea,0xa4, + 0x11,0x36,0x45,0x72,0xf1,0xaa,0xed,0x74,0x67,0x8a, + 0x79,0x48,0x2f,0x83,0xd6,0xe2,0xd0,0x09,0xbc,0x02, + 0x20,0x06,0xf2,0x3e,0x4b,0x0a,0xce,0x8c,0x7d,0x14, + 0x34,0x6e,0x05,0x83,0x12,0x54,0x88,0xa2,0xd5,0xb0, + 0xba,0x0b,0x2c,0x12,0xe2,0x6e,0x2b,0xd6,0x7d,0x10, + 0x59,0xfe,0x0e,0x71,0x33,0x66,0xb9,0xb2,0x9b,0x5d, + 0xcc,0x7d,0x07,0xe8,0xea,0x11,0x2b,0x20,0xcf,0x82, + 0x80,0x23,0xd8,0xb9,0x4b,0xe0,0x41,0xa5,0x27,0x7f, + 0x25,0x04,0xfd,0xb3,0xb0,0x20,0x1e,0xfc,0xe5,0x0d, + 0x75,0x9f,0x03,0x14,0x4f,0xbb,0xf8,0xe9,0xb3,0xee, + 0x9c,0x8b,0xdb,0x28,0xc2,0xe3,0x6f,0x6e,0x33,0x17, + 0x22,0x2e,0x4c,0xea,0x03,0x08,0x8a,0x4f,0x5d,0xdf, + 0xdd,0x12,0x5e,0x51,0x5a,0x6b,0xac,0xd4,0xce,0x74, + 0x06,0xda,0x7e,0x9f,0x36,0x51,0xee,0xd9,0x87,0xf0, + 0xb8,0xc4,0x51,0x66,0xd6,0xb4,0x2b,0x90,0xf7,0xd9, + 0xaa,0x88,0x46,0xde,0xcf,0xa8,0x4c,0x49,0x63,0x97, + 0x99,0xa5,0x4e,0xdb,0xcd,0xe3,0xa5,0x2c,0xab,0x62, + 0xab,0x8e,0xba,0x63,0x97,0xd2,0xa3,0x63,0x2e,0xec, + 0xe4,0x7d,0xe3,0x48,0xc0,0x02,0xf0,0x65,0x5f,0xf6, + 0x02,0x1f,0xdb,0x45,0xae,0x73,0x00,0x8e,0xf2,0x89, + 0x05,0x41,0x0d,0xdc,0xec,0x4e,0xbe,0x1a,0xbc,0x6c, + 0x92,0xbf,0xc9,0xa9,0x99,0x87,0xec,0x56,0x02,0x9e, + 0xb0,0x45,0x84,0x3f,0x1b,0x05,0xbe,0x43,0xec,0x79, + 0x9f,0xb3,0xbf,0x01,0x0a,0x70,0x07,0xf2,0x3d,0x40, + 0xb6,0xf3,0x5b,0x10,0x46,0xce,0x3c,0x4d,0xcc,0x75, + 0x06,0x5d,0xf0,0xa2,0xc9,0x62,0xd5,0x3c,0x1b,0x26, + 0xf0,0xc1,0x47,0x00,0xa3,0xf4,0x0a,0xc0,0xe6,0xa5, + 0x97,0x13,0x92,0xaa,0x47,0x5f,0x3d,0xfb,0x22,0xf9, + 0x36,0xd4,0xda,0x21,0xa0,0x09,0x79,0x9f,0x23,0xb3, + 0x1d,0xdd,0xf4,0xab,0x78,0x03,0x1a,0xfe,0xd2,0x46, + 0x75,0x5d,0xd4,0x12,0xac,0x9a,0xa1,0x69,0x7f,0x90, + 0x7f,0x21,0x7a,0xef,0x2e,0x8f,0x1e,0xa3,0x11,0x8c, + 0xd8,0x02,0xf0,0x8a,0xa4,0xf4,0x8d,0x78,0x08,0xa1, + 0x88,0x82,0x4d,0x98,0x81,0x1b,0xda,0x33,0x0e,0x53, + 0xef,0x19,0xc2,0xa8,0x54,0xf8,0x94,0x06,0x18,0xb2, + 0x78,0x02,0x84,0x4a,0x32,0x63,0x4a,0xf6,0xd6,0xbf, + 0x09,0x00,0xc4,0x79,0xd1,0x6e,0xec,0xb1,0x1a,0x51, + 0xe3,0x84,0x9e,0xf3,0x1e,0x62,0xbb,0x0b,0x20,0xdc, + 0x5c,0x1d,0x05,0x68,0x4a,0xab,0xea,0x66,0x50,0xe8, + 0x94,0x11,0x30,0xb5,0x0e,0xd0,0x1b,0x12,0xd8,0x47, + 0x8b,0x76,0xde,0x74,0x7b,0x70,0xa2,0x25,0x2d,0x28, + 0xf0,0xf0,0x18,0xa5,0xff,0x3e,0x50,0x3e,0x87,0x4d, + 0xfc,0xb5,0x04,0x59,0xb6,0x51,0x8a,0x02,0x6e,0x77, + 0x1d,0xcc,0x57,0x27,0x85,0x6b,0xba,0x78,0xf0,0xe8, + 0xf3,0xcc,0xec,0x52,0x42,0xe8,0xe4,0x2d,0x2a,0xb8, + 0x57,0x1c,0x7f,0x39,0x47,0x9d,0x93,0x9d,0x3b,0x42, + 0x3d,0x88,0x31,0x9a,0xfd,0xf8,0xe2,0x61,0x74,0x46, + 0x64,0x4b,0x38,0xe1,0xde,0x68,0x3a,0x05,0xc2,0xe0, + 0xc3,0xaa,0x72,0xb2,0x3e,0x07,0xe1,0x9e,0x86,0xf5, + 0x5a,0x62,0x04,0x5d,0x87,0x51,0xc7,0x2c,0x0a,0xc3, + 0xf1,0x4f,0x03,0x00,0x9e,0xa3,0x88,0xdc,0xb6,0xe9, + 0x6e,0x8a,0x11,0x3c,0xc0,0x0b,0x62,0x6c,0xb2,0xc5, + 0x0a,0x6b,0x8f,0x20,0x97,0x1b,0x78,0x93,0x7d,0xa8, + 0xd5,0x6a,0xd4,0xfc,0x0b,0xc6,0x16,0x6c,0xd9,0x46, + 0xa0,0x26,0x7a,0xbd,0x1d,0xc2,0xbc,0xa7,0x84,0x5d, + 0xd1,0x90,0x75,0x46,0x19,0x39,0x39,0xa2,0xe7,0x3a, + 0xc9,0xa3,0x40,0x78,0xf2,0xf5,0xe1,0x73,0x0b,0x33, + 0x93,0xc1,0x4e,0x25,0x8e,0x12,0x64,0xb0,0x09,0xad, + 0xdc,0xb9,0x34,0xb3,0x90,0x67,0xa8,0xe6,0x1f,0x56, + 0x63,0x13,0xa6,0x35,0x80,0xa9,0xbe,0x15,0x9e,0x33, + 0xdb,0x7d,0xaf,0x4c,0x05,0xa8,0x0b,0x5d,0xe2,0x42, + 0x49,0x1e,0x4b,0x7a,0xef,0xf7,0x76,0x23,0x71,0x0e, + 0x66,0xd8,0x42,0x6e,0x41,0x33,0x5d,0x75,0x67,0x25, + 0xc8,0x20,0x52,0xc3,0x57,0xf8,0xfb,0x00,0xc0,0x0f, + 0xbd,0x1b,0x3f,0xe5,0xfb,0x9c,0xc9,0xfb,0xe3,0x90, + 0xdc,0x6f,0xd0,0xdb,0x0c,0x64,0xdd,0xea,0x0f,0x6f, + 0x33,0x15,0xda,0xce,0x99,0x11,0x59,0xc2,0x64,0xaa, + 0x52,0xe9,0x80,0x94,0x98,0xb3,0xea,0x76,0x96,0xd2, + 0x8e,0xe7,0xf1,0x61,0xc8,0x8e,0xd2,0x76,0x6a,0x36, + 0x15,0x61,0x4e,0xe1,0x4f,0x01,0xdb,0x60,0x74,0xd3, + 0x32,0xa4,0xe2,0x81,0xcf,0x4d,0x32,0xd9,0x44,0x30, + 0xa1,0xc1,0x39,0x34,0x5c,0xd8,0x66,0x13,0x64,0x47, + 0x7c,0x8d,0xd5,0xaa,0x6a,0x31,0x42,0xfb,0x0c,0xcc, + 0x49,0x18,0x99,0x02,0xeb,0xa6,0x20,0xc2,0x86,0xed, + 0xc8,0xda,0x7d,0xd0,0xc1,0x06,0x08,0x1d,0xda,0x35, + 0x1a,0x68,0x11,0xbb,0x27,0x0c,0xc8,0xbe,0xae,0x30, + 0x3b,0x31,0xa2,0x38,0x50,0xab,0x9d,0x2b,0xd4,0x27, + 0x52,0xdd,0x9b,0x7f,0x13,0x00,0xf0,0x87,0xef,0x7e, + 0x20,0xf0,0x3e,0xb6,0xe4,0xfd,0xb0,0x53,0xf2,0x50, + 0x2c,0x4c,0x38,0x89,0xbb,0x1d,0x73,0x3c,0x10,0xd8, + 0x43,0x80,0x37,0x1c,0xa4,0xf2,0xe3,0x61,0x53,0xa3, + 0xde,0xfe,0x5c,0x94,0x1a,0xc0,0xa1,0xe4,0x08,0x0e, + 0x22,0x08,0x03,0x7a,0x44,0xb4,0xe4,0x56,0x04,0x9c, + 0x82,0x2e,0x4f,0xf5,0xdb,0xa1,0xc6,0x17,0x8a,0x25, + 0x68,0x09,0x52,0x01,0x30,0x90,0x31,0xcd,0xa0,0x78, + 0xe9,0xcd,0xb5,0x85,0x9e,0xca,0xc2,0xd4,0x50,0xdb, + 0xe0,0x0b,0xf2,0xbd,0x34,0xf2,0x7e,0x11,0x30,0xd1, + 0xce,0x1d,0xf6,0xe4,0xfd,0x31,0x27,0xfa,0x3c,0x4b, + 0x64,0xc1,0x07,0x73,0x2d,0x5a,0x52,0x23,0xb6,0xb7, + 0xc0,0x7e,0xcb,0x53,0xfc,0x1a,0xff,0x29,0xd4,0xf1, + 0x34,0x85,0x20,0x42,0xa3,0xb2,0x49,0xb2,0x79,0x86, + 0xad,0x88,0xf7,0xef,0xe8,0x01,0x6c,0x63,0x43,0xee, + 0x99,0x1f,0xf1,0xc0,0xbb,0x9e,0xa2,0xcf,0x78,0xf0, + 0x5e,0x51,0x18,0x47,0xfe,0x1d,0x8f,0x8a,0x1b,0x40, + 0xca,0x91,0xeb,0x96,0x83,0x51,0x6b,0x0f,0x34,0xb0, + 0xc8,0xba,0xd2,0x48,0xb8,0x29,0xb7,0xc1,0xa2,0x97, + 0x1b,0xc8,0x57,0xd5,0x01,0x40,0x37,0xc7,0x48,0x09, + 0x09,0x6d,0x9c,0x16,0x6b,0xf8,0x66,0xe6,0x14,0x9d, + 0xbc,0x6f,0xf6,0x3b,0x35,0x30,0x15,0xe0,0x8e,0x5c, + 0x53,0x83,0xc6,0x08,0x24,0x3b,0xad,0x88,0x9b,0xc1, + 0x44,0x8e,0x30,0x86,0xb1,0xe9,0x94,0xb0,0xcc,0xeb, + 0x73,0x05,0xed,0xe2,0xa4,0xbb,0x49,0x10,0x87,0x29, + 0x41,0x5a,0x39,0xb5,0xf8,0x11,0x12,0xe8,0xc6,0xd8, + 0x92,0xf7,0x91,0x6f,0x46,0xaf,0xcf,0x5e,0x1d,0x24, + 0x5a,0x56,0x57,0xe4,0xe9,0x2e,0xe1,0x18,0x88,0x92, + 0xf1,0xa8,0x58,0xc6,0xbf,0x1f,0x00,0x5a,0x34,0x78, + 0xe6,0x94,0x73,0x6e,0x0b,0x1e,0x36,0x50,0x3c,0xc9, + 0x50,0xba,0x2f,0x1b,0x43,0x44,0xe1,0xa3,0x11,0xc1, + 0xfd,0xac,0x1b,0x33,0x79,0x3f,0xd6,0xbe,0xf0,0x40, + 0x49,0xdc,0xc0,0x2d,0x09,0x25,0x65,0x5f,0x25,0x17, + 0xd7,0x7c,0xac,0x1d,0x92,0x27,0xa0,0x34,0x59,0xa9, + 0x9b,0xf9,0xe5,0x1a,0x3b,0xdd,0x04,0x5b,0xae,0x5d, + 0xb5,0xfc,0xc8,0xcb,0xe3,0x3e,0x5d,0x0d,0x14,0xa9, + 0x71,0xb4,0xe2,0xc0,0xb1,0x06,0xa4,0x40,0x89,0x40, + 0x64,0xc2,0x50,0xe7,0xbc,0xe1,0xe4,0x7d,0x16,0xa3, + 0xcf,0x54,0x4e,0x8d,0x0a,0xec,0xf1,0x1a,0x32,0x72, + 0x7e,0xc4,0xb2,0x06,0x5b,0x59,0x4e,0xdd,0xfa,0xeb, + 0x10,0x0f,0x7a,0x77,0x8c,0xd5,0x9c,0x05,0x58,0xd3, + 0x9e,0xa4,0x97,0x14,0x08,0x38,0x14,0x86,0x91,0x29, + 0xfe,0x3a,0x00,0x9c,0x86,0x53,0xb8,0xe7,0x9b,0xf3, + 0xcd,0xaf,0xdc,0xe9,0x00,0xf0,0x90,0x20,0xbc,0x35, + 0x7b,0x8c,0xc3,0x1c,0xdf,0x61,0x44,0x76,0x37,0x74, + 0xc4,0x94,0x69,0x8c,0x88,0xa1,0x3b,0x8e,0xc0,0x98, + 0xd6,0xdc,0xe0,0x21,0xec,0x29,0x7a,0xd1,0xf4,0x04, + 0x16,0x9d,0x55,0xca,0x02,0xa4,0xa0,0xc2,0x11,0x89, + 0x33,0x25,0x4b,0x95,0xd6,0x3f,0x0b,0xa7,0xca,0x16, + 0x20,0xaa,0x98,0x26,0xef,0x4c,0x65,0xab,0x66,0xf6, + 0x12,0x5b,0x65,0x8d,0x71,0x05,0xf5,0x2e,0xcf,0x3b, + 0x04,0x80,0x45,0x77,0x2a,0x22,0x9b,0x63,0x04,0x64, + 0x10,0x5f,0x67,0xb7,0xb4,0xa7,0xef,0x97,0x05,0x58, + 0xe2,0x2a,0x35,0xa3,0x5f,0x8e,0x3c,0x2e,0x2b,0x7e, + 0x9d,0x47,0x02,0x87,0x1d,0x1c,0x58,0x26,0x2a,0x68, + 0xd5,0xb0,0x0b,0x1c,0x0d,0x8e,0x42,0x3b,0x9e,0x78, + 0xcd,0xab,0x6c,0xfa,0xe3,0x00,0x80,0xc3,0x5f,0xb1, + 0x47,0xd6,0x4f,0x7e,0xa2,0xa7,0x99,0xed,0x00,0xb4, + 0x9e,0xb2,0x07,0x3e,0xfd,0xf1,0xa3,0xc9,0x08,0xda, + 0x6e,0x5b,0xa4,0xd7,0xc6,0xde,0x94,0x61,0x70,0x83, + 0x88,0x47,0xe6,0x7c,0x57,0x90,0xa9,0x51,0x02,0x16, + 0x60,0x04,0x99,0x06,0xb6,0x99,0x13,0x7b,0xb1,0xed, + 0x1b,0x64,0x47,0x2e,0x03,0x08,0xda,0x2c,0xef,0x95, + 0x15,0xec,0x56,0xe3,0x58,0xbb,0xba,0x7e,0x1a,0x4c, + 0x12,0xdb,0xbb,0x54,0xc4,0xf0,0x51,0x2e,0x72,0x90, + 0xce,0xf6,0x40,0x54,0x8a,0x50,0x14,0x8d,0x46,0xd0, + 0x55,0xc4,0x1c,0xb5,0x5d,0x81,0x13,0x0d,0xc8,0x6b, + 0x25,0x3f,0xb4,0xfe,0xae,0xa9,0x3c,0x46,0x12,0xee, + 0x54,0xd0,0xaf,0x0e,0xb1,0xa9,0x2b,0x19,0xa5,0x93, + 0xe0,0xd8,0x6c,0x1f,0xc3,0xae,0xd9,0x04,0xf4,0x00, + 0xbc,0xbc,0xc0,0xf5,0xbb,0xf8,0x67,0x4b,0x00,0xfe, + 0xea,0xf5,0xfd,0xe4,0x1d,0x1e,0x07,0x11,0xde,0xbc, + 0x85,0xdb,0xa0,0xc3,0x23,0xd9,0x09,0x0f,0x9b,0x03, + 0x26,0xc9,0x8b,0xd1,0x1a,0x66,0xe3,0x0e,0xef,0xd0, + 0xc0,0xb3,0xd3,0x80,0x53,0x65,0x1a,0x1c,0xe8,0x0e, + 0xe4,0x06,0x34,0x0c,0x01,0x92,0x1c,0x8c,0x9a,0x59, + 0x3b,0x85,0x00,0xe6,0xfa,0xe4,0x40,0x22,0x2a,0xda, + 0xf6,0x82,0x9d,0x7c,0xb7,0xd6,0x24,0x7f,0x00,0x9b, + 0x92,0x13,0xd1,0x7f,0x76,0x8d,0xe5,0xeb,0x39,0xf9, + 0x90,0x0f,0x75,0x9d,0x17,0x70,0x73,0x0a,0x92,0x0a, + 0xa6,0x01,0x11,0x26,0xad,0xdf,0x84,0x26,0x4e,0x40, + 0x58,0xc7,0x83,0x22,0xeb,0x6d,0x98,0x0a,0x3c,0x2b, + 0x53,0xf5,0x2e,0xf7,0x70,0x2d,0x4c,0x24,0xb7,0x68, + 0x17,0x21,0x55,0xd6,0x18,0x41,0xb2,0x92,0x9a,0x4e, + 0x20,0x20,0x7f,0xd6,0xef,0x7b,0x23,0x1f,0xe0,0x33, + 0x3c,0xf0,0x53,0x61,0xe6,0x29,0xb3,0xe8,0xb0,0xd3, + 0x73,0x97,0x6d,0x1f,0x33,0x19,0x37,0x6b,0x4e,0xe9, + 0xfe,0xce,0x31,0x40,0x76,0x7b,0xdc,0x25,0x27,0x26, + 0xce,0x81,0x33,0xb4,0x4a,0xdb,0x01,0x6f,0xc3,0x22, + 0xaa,0x18,0x85,0x96,0x04,0x18,0xd9,0x21,0x5c,0xeb, + 0x4d,0xd5,0xf8,0x83,0x91,0xac,0x18,0x23,0x27,0xda, + 0xb9,0xa4,0x6c,0xa8,0xcc,0xff,0xb3,0x06,0x82,0x74, + 0x0b,0x66,0x02,0xce,0x90,0x3e,0xbe,0x16,0x0f,0x32, + 0x27,0x4f,0x89,0x7b,0xb1,0x40,0xd3,0x76,0x1b,0x4b, + 0x7b,0xa0,0x5e,0xa0,0xd5,0x2a,0x74,0xe9,0x37,0x8e, + 0xe0,0xbf,0x3a,0x95,0x84,0x9a,0xa5,0xba,0x72,0x13, + 0x12,0x63,0xf2,0x2a,0x8f,0x68,0x82,0x27,0x72,0x51, + 0xbe,0x6e,0x97,0xc2,0xd3,0x09,0x9b,0x0f,0x95,0x07, + 0xfb,0x97,0x13,0x69,0xe5,0x86,0x67,0xff,0x9e,0x1d, + 0xf1,0x43,0x38,0x8f,0xb1,0x74,0xe1,0x43,0xf4,0xb1, + 0x3c,0xfc,0x94,0x74,0x9f,0x5b,0x4e,0x61,0x6b,0x24, + 0xec,0xa7,0xec,0xee,0x2f,0x25,0x47,0xe1,0x84,0xec, + 0xfd,0x59,0xd4,0xaa,0xde,0x58,0x80,0x43,0x4c,0x33, + 0xd8,0x84,0x7f,0xea,0xc8,0x71,0xaf,0x0b,0x46,0xe4, + 0x35,0xb0,0xd4,0xc4,0x10,0xec,0xa0,0x8a,0xb2,0x53, + 0xee,0x81,0x74,0xfc,0x5f,0x23,0xd1,0x8b,0x23,0x51, + 0x3b,0x27,0xd8,0xcd,0xdc,0x54,0x60,0x70,0x43,0xf5, + 0xa3,0xfa,0x07,0x94,0x59,0x03,0x54,0x54,0x5d,0xc8, + 0xfb,0x3b,0x49,0xf6,0x62,0x56,0x02,0xe3,0x47,0xe0, + 0x05,0xc8,0xa2,0xeb,0x33,0x54,0x8e,0x02,0xeb,0x10, + 0xa7,0xde,0x2b,0xf2,0x7b,0xf8,0x68,0x98,0x64,0x32, + 0xd8,0xd8,0xd4,0x6f,0x0a,0x82,0x3c,0x01,0xe9,0x9e, + 0x24,0xf9,0xbf,0x27,0xef,0xdf,0x3d,0xf4,0xfc,0x40, + 0xa8,0xba,0xf5,0x0f,0x62,0xae,0x95,0x79,0x83,0x57, + 0x5c,0x37,0xd7,0xfb,0xbf,0x81,0xc1,0x21,0x9d,0x37, + 0x98,0x22,0x05,0xde,0x3c,0x39,0xf6,0x9a,0x1e,0x5e, + 0x83,0x1e,0xee,0x0b,0xab,0x52,0x0d,0x13,0x31,0x32, + 0x5a,0x59,0xd9,0x1d,0x5f,0xae,0x1d,0x75,0x90,0xcb, + 0x17,0x4c,0xd1,0xfd,0x40,0xbb,0xce,0xc9,0xd1,0x19, + 0x6a,0xcb,0x55,0x76,0xf1,0x4a,0xde,0x67,0xd3,0x8c, + 0xc7,0xb9,0xbc,0x4b,0x20,0xe8,0x40,0x33,0x2a,0x5e, + 0x55,0x40,0x10,0x59,0x0d,0x41,0x7f,0xb0,0x17,0x51, + 0xc5,0xcb,0xb0,0x93,0xf7,0x25,0x20,0xc9,0x84,0x06, + 0x6d,0x87,0x78,0x4d,0x29,0xc2,0x9c,0x9b,0xa8,0x88, + 0xac,0x30,0x02,0xbf,0x7e,0xb5,0x25,0xfe,0x28,0xc5, + 0x7e,0xd7,0x29,0xf8,0x99,0xab,0x4f,0x62,0xf8,0xe1, + 0x08,0xc5,0xbf,0x8b,0x0f,0x3c,0xbb,0x16,0x8f,0x24, + 0xb6,0xd0,0x17,0xca,0x09,0xb7,0x50,0x8b,0xa7,0xc5, + 0xe5,0x7e,0xd6,0x0a,0xa1,0xa0,0xa1,0xaa,0xdf,0x5b, + 0x53,0x58,0xb5,0xe7,0x5e,0x23,0x69,0x65,0xc0,0x05, + 0x96,0xf4,0x06,0xf3,0x8f,0xe3,0x1d,0x97,0xb4,0xf6, + 0xea,0xb9,0xd3,0xc8,0xfb,0xbc,0x76,0x76,0xc7,0xff, + 0xc8,0xfe,0xfb,0xc3,0x7a,0xe6,0xe8,0x41,0x62,0xf6, + 0xee,0x7d,0xfc,0xbb,0x0d,0xdb,0xa0,0x06,0x3a,0xcb, + 0xb6,0x20,0x8b,0x77,0xe2,0x41,0xe6,0x89,0x3a,0x24, + 0x23,0xa1,0x3b,0x8b,0x34,0xf2,0x91,0x65,0x3b,0x51, + 0x99,0xe0,0x52,0x31,0xaa,0x65,0x17,0x5b,0x8f,0x46, + 0x6b,0x05,0x95,0x55,0xab,0x66,0x28,0x98,0x40,0x71, + 0x2d,0x45,0x3f,0x07,0x02,0xfe,0xa8,0x54,0xb8,0xe3, + 0xb0,0xb3,0x05,0xe0,0xdb,0xcc,0x04,0xdc,0x06,0x1c, + 0x66,0xf2,0xfe,0x2d,0x1b,0x3f,0xfe,0xf8,0x89,0x6c, + 0xe8,0xd2,0x50,0x7c,0x18,0x55,0x36,0xe4,0x7d,0x3e, + 0x02,0x18,0xb3,0xfa,0x2f,0x04,0x62,0xc4,0xa6,0x94, + 0xa2,0xdb,0x73,0xb7,0x0c,0x60,0x64,0xc9,0xb0,0xd1, + 0xf5,0xec,0xa0,0x80,0xdc,0xa6,0x14,0x2a,0x24,0x1b, + 0x4d,0x81,0x89,0x5b,0xfc,0xa5,0x3c,0x13,0x06,0x0e, + 0x76,0x45,0x64,0x86,0xdd,0x9a,0x36,0x9c,0x59,0x55, + 0x91,0x56,0x2c,0xe0,0xdc,0x6d,0xb5,0x8b,0x9a,0xae, + 0x61,0xe7,0x3b,0xbc,0x3e,0xcf,0x9e,0x5b,0x51,0x7e, + 0x1f,0x58,0xe2,0x1e,0x44,0x44,0x15,0xa4,0xad,0xa7, + 0x53,0x81,0x2c,0x4c,0x43,0x7a,0xa7,0x04,0xa3,0x4c, + 0x6e,0xea,0xf9,0x40,0x87,0x91,0xc6,0x9f,0xb6,0x01, + 0x9f,0x38,0x8d,0xe2,0xf8,0xc9,0xda,0xbe,0xe2,0x43, + 0x0c,0x6f,0x8f,0xa9,0xe3,0x7e,0x08,0x30,0xca,0x03, + 0xde,0x96,0x3e,0xdc,0x9c,0x01,0x2a,0x1a,0x9c,0x14, + 0x46,0xbb,0x68,0x10,0x47,0xe3,0xb7,0xd3,0x76,0xf3, + 0x8e,0xc3,0x1d,0x2f,0x3b,0x5a,0xa2,0x7b,0xf5,0xb8, + 0x05,0x4c,0x53,0x11,0x89,0xe0,0x38,0xd4,0xb5,0xf7, + 0xd8,0x29,0x14,0x97,0x58,0x69,0x39,0xb1,0x3d,0x5d, + 0x19,0xec,0x60,0x61,0x2c,0x11,0xc5,0x7e,0x6d,0xf1, + 0xde,0x58,0x86,0x78,0x7c,0x59,0x2e,0xfb,0xef,0x05, + 0xa9,0xa3,0x7c,0xc3,0xd8,0x68,0xc9,0x55,0x92,0x3d, + 0xdc,0x52,0x60,0x4a,0x76,0x7b,0x86,0xb3,0xf8,0x07, + 0xaa,0x81,0x3a,0x65,0xcc,0xe7,0xa6,0x80,0x8a,0x91, + 0x00,0x2d,0x6b,0xf5,0x36,0x28,0x25,0x4c,0x5d,0x03, + 0x3f,0xdf,0x78,0x01,0x96,0x56,0xa2,0x80,0x1b,0x57, + 0xd7,0x44,0x03,0x1c,0xc4,0x65,0x49,0x33,0xab,0x07, + 0x01,0xe0,0x59,0xb1,0xf9,0xb8,0x24,0x7d,0xba,0x1b, + 0x8e,0x77,0xf8,0xfd,0x7b,0xcc,0xef,0x3c,0x53,0x84, + 0x28,0x60,0x9b,0xd3,0x5a,0x36,0x12,0x7a,0xe0,0x8b, + 0x1c,0xda,0x94,0x30,0xf1,0x8a,0x5d,0xe7,0xa3,0xaa, + 0x3d,0xb8,0x53,0x51,0x0b,0x4e,0x49,0xd0,0x76,0xd7, + 0x33,0x27,0x47,0x00,0xb0,0x7b,0x70,0xc4,0x19,0xc8, + 0x4c,0x45,0x6e,0x31,0xa9,0x98,0x3b,0x8e,0x0d,0xe3, + 0xb3,0x32,0xf0,0x74,0x06,0x78,0xa6,0xd8,0x06,0xf7, + 0x0d,0xd6,0xdd,0x9d,0x33,0xc8,0x60,0xcb,0x73,0xaf, + 0x28,0x11,0x0b,0x1f,0xa3,0x7c,0xea,0x12,0x47,0x61, + 0xf7,0x8e,0xec,0xc3,0x99,0x6b,0x0f,0x26,0x6a,0x49, + 0x35,0x52,0x45,0x67,0x6a,0x9f,0x13,0xc9,0x47,0x42, + 0x5c,0xf6,0xca,0x48,0x0e,0xd2,0xaa,0xce,0x52,0x21, + 0x0e,0x99,0xe1,0x07,0xcc,0x46,0x78,0x8e,0x02,0x43, + 0x67,0x25,0xf0,0xc4,0x17,0xe0,0x7e,0x2e,0xff,0xa9, + 0xc4,0x57,0xe8,0x13,0xfd,0xae,0x44,0x30,0x64,0x94, + 0x0f,0xf4,0x3c,0x79,0x83,0x48,0x30,0x28,0xba,0x4a, + 0x25,0x5e,0x1e,0x7c,0xe0,0xcd,0xe3,0x8f,0x0f,0x54, + 0x24,0xef,0x17,0x47,0xd9,0x30,0x9c,0xdb,0x94,0x8d, + 0x2c,0x09,0xda,0x64,0x25,0x18,0x3e,0xb6,0xc6,0x87, + 0x51,0x98,0x5e,0x93,0xb7,0x9f,0x47,0x78,0x50,0x47, + 0x0c,0x18,0xa5,0x03,0xa1,0x53,0x91,0xaa,0x08,0x9c, + 0x6e,0xa6,0xbc,0xcf,0x09,0x7c,0x6b,0x27,0x1c,0x0d, + 0xec,0x62,0xa0,0xef,0x61,0x38,0x39,0x12,0xa3,0xf3, + 0x28,0x45,0x7b,0x23,0xb8,0x4e,0x20,0x2a,0xc7,0xb3, + 0x00,0x9e,0xfe,0x3b,0xf3,0x58,0x25,0xfb,0xe1,0x81, + 0xbc,0x0f,0x6c,0xae,0xa1,0x04,0x88,0x54,0x82,0x2c, + 0x25,0xd0,0xd5,0xc9,0x51,0xa2,0xd4,0xf5,0xf9,0xb7, + 0x7c,0x01,0x38,0xde,0x18,0xc4,0xf9,0x04,0x5e,0xc0, + 0x3e,0x60,0x92,0xdb,0x56,0xe8,0x29,0xeb,0x38,0x00, + 0x6a,0xa7,0x43,0xdb,0xbc,0x21,0xba,0xb0,0xde,0x7a, + 0x17,0x7a,0x9e,0xee,0xe6,0x52,0xa3,0x91,0xf7,0x9b, + 0x83,0x34,0xd0,0x96,0x56,0x2c,0x35,0xb8,0xbf,0xc8, + 0x55,0xae,0x1b,0x4d,0xb3,0x2e,0x36,0x68,0x78,0xba, + 0xef,0xb5,0xc5,0x84,0xad,0xc2,0x52,0x42,0x25,0x59, + 0xd9,0x86,0x17,0x23,0xb0,0xa0,0xe3,0xa8,0xe4,0x23, + 0x13,0xe5,0xd8,0xb6,0xd9,0xe6,0xcc,0xbe,0x73,0x39, + 0x54,0x0b,0x00,0x96,0xca,0xdb,0x04,0x9d,0x4d,0xdd, + 0x61,0x83,0x49,0x0c,0x4b,0xd5,0x21,0x2a,0x7f,0x3a, + 0xd3,0x4f,0xcb,0xbc,0xe6,0x93,0x5a,0x30,0x08,0x54, + 0x32,0xd4,0xd6,0x11,0x9e,0xcd,0x47,0xe0,0x7b,0x42, + 0x11,0xd2,0x52,0xe6,0xa6,0x45,0x15,0x06,0xcf,0xf9, + 0xe6,0x24,0x20,0x7e,0xdc,0x58,0xe3,0xbb,0x11,0xa1, + 0x95,0xdd,0x91,0xa5,0xb9,0x75,0xeb,0xf8,0xc1,0x19, + 0xdc,0x1e,0xa2,0x91,0xf7,0xdb,0x22,0xdb,0x9c,0x4b, + 0xa1,0x85,0xa1,0xed,0xf0,0x7b,0xef,0xaf,0xfe,0xf3, + 0xb8,0x1f,0x36,0xa8,0x6e,0x3b,0x63,0x57,0x3a,0xd4, + 0x21,0x15,0x86,0x6c,0xbd,0xa3,0xea,0x82,0x28,0x97, + 0x73,0xe1,0x01,0x23,0x74,0x2f,0x00,0xf9,0x62,0xda, + 0x1c,0x3b,0x18,0x3c,0x01,0x47,0x09,0x16,0xdf,0xdd, + 0x50,0x05,0x46,0x2b,0xa6,0x5d,0xb2,0x02,0xfa,0x91, + 0x0f,0x53,0x08,0x1a,0xa2,0x61,0x28,0xa6,0xe3,0xc0, + 0xec,0xd7,0xef,0xfc,0x4f,0x16,0xa5,0x18,0x05,0x18, + 0xa4,0x9d,0xb5,0xce,0x29,0xe4,0x8e,0xcd,0x42,0x27, + 0x75,0xe7,0xf6,0x80,0xea,0x22,0x9f,0x48,0x98,0xb1, + 0x66,0x4d,0xd1,0xe4,0x90,0x2e,0x65,0xf0,0x13,0x2e, + 0x00,0x7e,0xb8,0xc4,0x9f,0xea,0x74,0xf3,0x98,0x35, + 0xb3,0x81,0x49,0x78,0x34,0x41,0x3b,0x76,0x58,0x7f, + 0x18,0xdb,0x1c,0xdb,0x92,0xe0,0x4c,0xde,0xc7,0x31, + 0xed,0x67,0xc4,0x0a,0xb8,0xad,0x12,0xc2,0x79,0x81, + 0xe7,0x99,0x67,0x9d,0xbd,0x4f,0x69,0x33,0x15,0x4f, + 0x40,0xc6,0x36,0x86,0x23,0xf3,0x66,0x4b,0xad,0x7e, + 0xf4,0xa8,0xf6,0xe4,0x30,0x24,0xcb,0x85,0x3f,0xf0, + 0x6a,0xfb,0x51,0xe5,0x86,0x51,0x0b,0x08,0x24,0xf4, + 0x7e,0x88,0x3a,0xf0,0xa0,0x2c,0x3a,0xb6,0x96,0x98, + 0x82,0x7b,0x00,0xc3,0x7e,0x4d,0x19,0xf5,0xf5,0x4f, + 0xba,0x3d,0x27,0x2a,0x23,0x38,0x25,0x5c,0x64,0x2c, + 0xb2,0x5c,0x13,0x89,0x21,0x72,0x53,0x65,0xe6,0x14, + 0x24,0x26,0x73,0x4a,0xdf,0xf0,0x9e,0x65,0x75,0x36, + 0xc5,0x5e,0x4b,0x86,0x67,0x66,0xb3,0x5c,0xd7,0xfc, + 0x32,0x26,0x2d,0x6c,0xc0,0xdf,0xce,0xf7,0x3d,0x2b, + 0x03,0xde,0x26,0xef,0x6f,0x7e,0x03,0x8f,0xcb,0x09, + 0x9c,0x92,0x39,0x84,0x85,0xe7,0x58,0x25,0xb6,0x2b, + 0xbd,0xa5,0xdf,0x33,0xc4,0xec,0x66,0x85,0x9b,0xd2, + 0x13,0xdb,0x5a,0xe7,0xb6,0xf6,0x46,0x1b,0x04,0xac, + 0x73,0xde,0x23,0x91,0xf7,0x4b,0x9b,0xef,0x7a,0x68, + 0x6b,0x03,0x06,0x41,0xc2,0x2b,0x4f,0x52,0xb0,0x93, + 0xf7,0x85,0x25,0x67,0xaa,0xbb,0xcc,0x74,0xe4,0x84, + 0x0d,0x50,0x04,0x40,0x53,0x4d,0x83,0x0d,0x58,0x8a, + 0x72,0xd5,0xb5,0x4d,0x86,0x26,0x18,0x45,0xb3,0x38, + 0xd3,0xb6,0x1b,0xf5,0x9a,0xe8,0xfc,0xd0,0x60,0xc5, + 0x5a,0xc6,0xa8,0x7e,0x7b,0xa8,0x99,0xd1,0x6e,0x67, + 0xc1,0x5c,0x75,0x16,0x94,0x80,0x0e,0xee,0x61,0x4d, + 0x15,0xce,0xc4,0x4c,0xe8,0xe8,0x0c,0xe8,0x2f,0x7a, + 0xa3,0x71,0x74,0xf6,0x90,0xfa,0x3a,0x72,0x96,0x1d, + 0x5f,0x3f,0xae,0xe3,0x7f,0x94,0xfc,0xe3,0x4f,0xc2, + 0x4a,0x2b,0xe2,0x79,0x83,0x62,0x3d,0x08,0x7a,0x78, + 0xe7,0xd8,0x1b,0x19,0x67,0x03,0x3d,0x1e,0x66,0xda, + 0x47,0x5c,0x72,0xa3,0xc1,0x90,0x3a,0x14,0x33,0xe7, + 0xbc,0x7b,0x0b,0xa0,0x9c,0x45,0xb5,0xcc,0x46,0x93, + 0xe3,0x52,0x83,0xd1,0x2e,0x6c,0xc3,0xe2,0x27,0x57, + 0xe1,0x6a,0x4c,0xcb,0x3d,0xc4,0xad,0xd0,0x4c,0xbe, + 0x38,0x46,0x7b,0x36,0x6d,0xea,0x6f,0x55,0x28,0xa8, + 0xf0,0xc8,0xd6,0x9b,0xa1,0xa6,0x1d,0xab,0x15,0x8e, + 0x66,0x70,0xda,0x35,0xf6,0xbf,0x77,0x51,0xef,0x80, + 0xcc,0x16,0x23,0x83,0x36,0xff,0xd0,0xf2,0xa0,0x92, + 0x7b,0x7d,0x19,0x96,0x62,0xfe,0xa2,0x08,0x2b,0xed, + 0x98,0xba,0x60,0xe5,0x1a,0xd9,0x90,0xd1,0xb4,0x71, + 0xe3,0x28,0x78,0xc6,0x68,0x18,0x52,0x3d,0xa6,0xaa, + 0x75,0x28,0xdb,0xbf,0x48,0xc3,0x3f,0x2f,0x01,0xf8, + 0xb8,0x09,0xbe,0x15,0xcf,0xde,0xa5,0xf9,0x23,0xec, + 0x6c,0x9f,0x4e,0x47,0x88,0x7d,0x76,0xbe,0xd1,0xd6, + 0x19,0xb8,0x3d,0xbf,0x9b,0x48,0xc2,0xe7,0x9d,0x14, + 0xcf,0x92,0x2a,0xaa,0x2c,0x63,0x3c,0x30,0x51,0x07, + 0x78,0xdc,0xc3,0x21,0xe3,0x4a,0x7d,0x52,0x9d,0x38, + 0x93,0x69,0x4a,0xb7,0x1a,0x67,0xcd,0x14,0xb6,0x82, + 0x24,0x23,0x98,0x7b,0x6a,0x8f,0x1a,0xb5,0xaf,0xef, + 0xe4,0xfd,0x6b,0xd0,0x65,0xa9,0x9d,0x73,0x41,0xf1, + 0xb4,0x5d,0x2e,0x94,0x49,0x50,0x07,0x98,0x40,0xde, + 0x67,0x11,0xd6,0x78,0x2d,0x4c,0xfa,0xb8,0xb1,0x8a, + 0x6b,0xf6,0xc1,0x34,0xdd,0x51,0x97,0x9a,0x6f,0x0f, + 0x13,0x2b,0xd2,0xb8,0xdd,0x0f,0x4a,0x39,0x86,0x22, + 0x13,0xc7,0x8a,0xe5,0x5c,0x41,0xaa,0x64,0x71,0x72, + 0x6f,0xc1,0x60,0x53,0xa4,0x4a,0x46,0xb6,0x06,0x21, + 0x7a,0x08,0x6f,0x05,0x80,0x37,0xc8,0xfb,0xb8,0x5b, + 0x89,0x3b,0x32,0x0d,0xfe,0x2e,0x1b,0xc1,0x1e,0xd2, + 0xad,0xce,0x3f,0x0f,0xb2,0x19,0x8c,0x9b,0x20,0xbc, + 0x69,0xfb,0x65,0x9c,0xcf,0x0a,0x00,0x05,0xc7,0xfc, + 0x61,0x4a,0x24,0x1b,0x6b,0x0d,0x9e,0xb2,0x16,0x1f, + 0x02,0x5e,0x3b,0x1e,0xc4,0x78,0xb3,0xce,0xb2,0x33, + 0x54,0x15,0x18,0x75,0x82,0x8f,0x31,0x7c,0x85,0xa3, + 0x70,0xe5,0xda,0x4e,0xde,0x97,0xba,0xd8,0x53,0x5d, + 0x74,0x0c,0xc5,0x33,0x12,0xed,0x02,0x20,0x64,0x24, + 0xa2,0x19,0x30,0xff,0x7d,0x88,0x26,0x20,0x9c,0x7e, + 0x53,0xcb,0x8b,0x39,0x1e,0x4d,0xf7,0x01,0x94,0xe1, + 0x1e,0x72,0x0c,0x27,0x44,0x15,0x37,0x5f,0x2f,0x16, + 0x84,0xc4,0xa4,0x77,0x1d,0x2a,0x55,0xb6,0xf4,0xff, + 0x41,0x9d,0xb1,0xe8,0x78,0x14,0xa7,0xfe,0x03,0xaa, + 0x1e,0xa5,0xaa,0x2e,0x49,0xf0,0xfc,0xe7,0x25,0xc1, + 0x7e,0xb8,0xba,0x9f,0x68,0x05,0xf0,0x57,0xc7,0xc4, + 0x9b,0x03,0x66,0x26,0xfc,0xdc,0xb5,0x17,0x93,0x60, + 0x83,0xef,0xec,0x25,0xa2,0x6f,0xbf,0x60,0x7f,0x9c, + 0xc4,0x16,0xa2,0xe8,0x99,0x79,0x1a,0x2e,0x09,0x73, + 0x0e,0x64,0xce,0x7d,0xd0,0xc3,0x20,0x48,0x1d,0x93, + 0x69,0x85,0x0b,0xf7,0xda,0xc8,0x86,0x9d,0x8c,0x0d, + 0x0d,0x35,0xa5,0x86,0xaf,0x09,0x3b,0x62,0x2d,0x14, + 0xc5,0xbc,0x64,0xe1,0xf1,0x54,0x29,0x52,0x11,0x19, + 0x36,0xff,0xe3,0xe2,0x07,0x41,0xd6,0xdb,0x84,0x3a, + 0x69,0xa8,0x80,0x25,0x31,0x0a,0xc9,0x9f,0xac,0x0b, + 0x92,0x5a,0x8b,0x6b,0xd2,0x62,0x03,0x4d,0x28,0x98, + 0x2b,0xac,0x34,0xb1,0xb3,0xc3,0xea,0x2f,0x61,0x48, + 0xd6,0xa4,0xea,0x4c,0xe6,0x0e,0xf5,0xf5,0xab,0xc5, + 0xf8,0x1f,0xa6,0x15,0xf0,0x6c,0x0f,0xe7,0x39,0xfd, + 0x78,0x70,0x84,0x1d,0xc6,0xba,0xd1,0x0a,0x48,0x59, + 0x38,0x2c,0x4d,0x7c,0xaa,0x15,0xc0,0x7f,0x52,0x2b, + 0xe0,0xee,0x64,0x3e,0xa8,0x15,0x80,0xff,0xd3,0x0a, + 0xf8,0x37,0xb4,0x02,0xbe,0x7e,0xb5,0x58,0xff,0x2b, + 0xb4,0x02,0x9c,0xf0,0x83,0x7d,0x3d,0xfc,0x8b,0x23, + 0x7d,0xac,0x15,0x80,0xfd,0x1f,0x1f,0x69,0x05,0x58, + 0x35,0xf0,0xb6,0x56,0xc0,0xa9,0xcd,0x3a,0x5c,0x2b, + 0x00,0x67,0x83,0xd6,0xff,0xd3,0x0a,0xa8,0x5a,0x01, + 0xb2,0xf0,0xff,0x5b,0xb4,0x02,0x3e,0x52,0x02,0x38, + 0x23,0xec,0x27,0x49,0xfc,0xdf,0x69,0x05,0xe4,0xe1, + 0x89,0xff,0x5a,0xad,0x00,0xdb,0x69,0xde,0xd6,0x0a, + 0x38,0xd0,0x88,0x1f,0x69,0x05,0x94,0x76,0xd2,0x78, + 0x5b,0x2b,0xc0,0xdd,0x81,0x1e,0x6b,0x05,0x30,0x77, + 0x0d,0xfc,0x3a,0xff,0xab,0x5a,0x01,0x65,0xc1,0x87, + 0xa7,0xf9,0x3f,0x50,0x2b,0xe0,0xeb,0xfd,0x85,0x7a, + 0xf3,0x4c,0xfd,0x43,0x5a,0x01,0x3c,0xec,0x77,0xa7, + 0xf6,0xc2,0x7f,0xbd,0x56,0x80,0xad,0xac,0xcf,0x69, + 0x05,0x70,0x3c,0xd3,0x0a,0xc0,0xbd,0x56,0x40,0x08, + 0x6c,0xa9,0xd4,0x78,0x4b,0x2b,0x00,0x9f,0xd2,0x0a, + 0xe0,0xdb,0x5a,0x01,0xee,0xde,0xf3,0x23,0xad,0x00, + 0xfc,0x67,0x6a,0x05,0x7c,0xbd,0x5f,0x8d,0x7f,0x22, + 0xa3,0xff,0xad,0x56,0xc0,0x9a,0x82,0xfa,0x89,0x56, + 0x00,0x43,0xc0,0xf9,0xb9,0x56,0x00,0xc7,0xff,0x86, + 0x56,0x00,0x46,0xd6,0x0a,0x18,0x55,0x2b,0x20,0x19, + 0x1a,0xd2,0x3e,0x11,0x86,0x98,0xf0,0x1f,0xa3,0x15, + 0x60,0xa9,0xfa,0x03,0xad,0x80,0xd6,0x8c,0xf9,0x1f, + 0xd2,0x0a,0xf8,0x7a,0x7b,0xed,0xfe,0x13,0x35,0xfe, + 0xad,0x56,0x00,0xde,0xd7,0x0a,0xa8,0x0d,0x9d,0x88, + 0x0a,0x47,0xd0,0x7b,0xf3,0xac,0x46,0x1f,0xf8,0x47, + 0x71,0xec,0x0f,0xb4,0x02,0x68,0x4e,0x84,0x1f,0xd5, + 0x0a,0x40,0x9b,0x45,0x4f,0x0b,0xa3,0x7b,0xde,0xff, + 0xf7,0x68,0x05,0xf0,0xff,0xc7,0x5a,0x01,0xbf,0xc4, + 0x00,0xfe,0x8b,0xb4,0x02,0x76,0x38,0xdc,0x56,0x44, + 0x18,0xc3,0x2d,0xd5,0xfe,0x4e,0x2b,0x60,0xfc,0x4e, + 0x2b,0x00,0x1b,0xa0,0xef,0xff,0xb4,0x02,0x5a,0x20, + 0x4c,0x5a,0x01,0xf8,0xb4,0x56,0xc0,0xd8,0x6b,0x05, + 0xd0,0xd1,0xf8,0x7f,0x59,0x2b,0xe0,0xeb,0x77,0x4b, + 0x17,0x77,0x0d,0xb6,0xff,0x7c,0xad,0x80,0x0d,0x40, + 0x8e,0x50,0x89,0xb3,0xb4,0xe4,0x3f,0xa8,0x15,0x40, + 0xfc,0x33,0x5a,0x01,0x1c,0xff,0xa7,0x15,0x40,0x16, + 0x03,0x52,0x3a,0xb1,0x62,0x7c,0x40,0x2b,0x00,0x7b, + 0xad,0x00,0x35,0xed,0xfc,0x4f,0xd0,0x0a,0xf8,0xfa, + 0x64,0x01,0xf0,0x3f,0xad,0x15,0xc0,0x68,0xe1,0x37, + 0xd6,0xd4,0x17,0x47,0xce,0xdd,0x77,0xe7,0xb2,0xeb, + 0x4b,0xbc,0xa3,0x15,0x30,0xde,0xd3,0x0a,0x48,0xca, + 0x42,0xff,0x8d,0x5a,0x01,0xde,0x81,0x18,0xef,0x69, + 0x05,0x14,0x0a,0x8e,0x0c,0x12,0xfc,0x6b,0x5a,0x01, + 0xb4,0x27,0x15,0xc6,0x91,0xfc,0x43,0xad,0x80,0x0f, + 0xb2,0x01,0x3f,0xaf,0x15,0x70,0x04,0xe0,0xfe,0x69, + 0xad,0x80,0x93,0xc7,0x98,0x6b,0x05,0xa0,0x67,0x47, + 0xf1,0x91,0xf9,0xb1,0x56,0x40,0x7d,0x04,0xdf,0xd7, + 0x0a,0x60,0xce,0xe2,0xfe,0x5b,0xb4,0x02,0xf0,0x9f, + 0xaa,0x15,0xc0,0x9f,0x69,0x05,0xa0,0xa7,0xfc,0xf8, + 0x87,0xb4,0x02,0xfe,0x9c,0x0d,0x78,0x1f,0x5c,0xf0, + 0xb0,0xdd,0xf6,0x4f,0x6b,0x05,0xd0,0x92,0x8d,0xff, + 0x24,0xad,0x00,0xb4,0x36,0xdb,0x7b,0x5a,0x01,0x5e, + 0x07,0xff,0xcb,0x5a,0x01,0xe3,0x7f,0x45,0x2b,0x00, + 0xff,0x75,0x5a,0x01,0x5f,0xbf,0x5f,0xc0,0xf7,0x21, + 0xe4,0xbf,0x49,0x2b,0x80,0x01,0xf9,0x7a,0xae,0x15, + 0xc0,0x2d,0xa6,0xc1,0x7a,0x67,0xb7,0x85,0xf4,0x59, + 0x2b,0x80,0x9b,0xda,0xfb,0x3f,0x4f,0x2b,0x80,0x6f, + 0x68,0x05,0x94,0xb9,0x78,0xbf,0x43,0x4f,0xb4,0x02, + 0xd8,0xb3,0xaa,0xbf,0xd1,0x0a,0xa0,0xec,0x45,0x3f, + 0xd3,0x0a,0xe0,0x7f,0x98,0x56,0xc0,0xd7,0xef,0x96, + 0xf6,0x27,0x33,0x83,0xff,0x0c,0xad,0x80,0x27,0x6a, + 0xc2,0x7b,0xad,0x00,0x1c,0x37,0xe1,0x8c,0x0e,0xee, + 0xb5,0x02,0x38,0x12,0xca,0x7b,0xa3,0x15,0xa0,0x49, + 0xc1,0x3f,0xa5,0x15,0xc0,0xae,0x15,0x80,0x37,0xb4, + 0x02,0x0a,0x6f,0xe6,0x27,0x5a,0x01,0x7e,0x01,0xff, + 0x4c,0x2b,0x00,0x6b,0xd0,0xe7,0x87,0x5a,0x01,0xb3, + 0xf0,0xf8,0x0f,0xd1,0x0a,0xf8,0x0c,0x1b,0xf0,0x7f, + 0x52,0x2b,0x80,0x6f,0x6b,0x05,0xc4,0x4e,0x08,0x37, + 0x09,0xce,0x56,0x2b,0xe0,0x34,0xdb,0xf8,0x40,0x2b, + 0x00,0xff,0xa4,0x56,0x40,0xce,0x14,0x92,0x56,0x00, + 0x63,0xb1,0xf5,0xdf,0xab,0x15,0x80,0xff,0x11,0xad, + 0x80,0xcf,0x04,0x80,0x3f,0xd5,0x0a,0xe0,0xbf,0xa4, + 0x15,0x80,0xb7,0xb5,0x02,0xa2,0xfc,0x23,0x36,0x73, + 0x4d,0x9b,0x61,0x04,0x0c,0x3c,0xd2,0x0a,0x68,0x0f, + 0xd3,0xbf,0xa2,0x15,0xd0,0x4d,0x4a,0xba,0x56,0x00, + 0x4b,0xd6,0xf4,0xe7,0x5a,0x01,0xfc,0x3f,0xad,0x80, + 0x77,0xb4,0x02,0x7e,0x16,0x00,0xf8,0xcb,0xd7,0xdf, + 0xca,0xea,0xf1,0xeb,0x45,0xcf,0xe3,0x16,0x7d,0x93, + 0xb1,0x3c,0xd2,0x0a,0xd8,0x97,0x0e,0x99,0x40,0xeb, + 0x00,0xa3,0xcd,0x53,0x94,0x21,0xf2,0x5e,0xd7,0x71, + 0xd3,0xf1,0x20,0x37,0xb9,0x0a,0xf7,0x59,0x4b,0xc1, + 0x1d,0x76,0x8a,0xd2,0x89,0xbc,0x93,0xae,0x09,0x7a, + 0xa9,0x02,0xd3,0x0d,0x28,0xad,0x3b,0xe1,0xc2,0xdb, + 0x05,0x19,0x95,0xd5,0x76,0x4d,0xde,0xb1,0x60,0x03, + 0xad,0xaa,0x21,0x5f,0xa0,0x20,0xe6,0xf0,0x11,0x4b, + 0xb7,0x44,0x3a,0x2d,0x58,0x8b,0xa2,0x0d,0x3e,0xf9, + 0x41,0xb1,0x52,0x8c,0xe7,0x60,0x13,0x39,0x33,0x84, + 0xc9,0xb1,0x9b,0x99,0x46,0xd0,0x0a,0x68,0x63,0x93, + 0x61,0xb2,0xf3,0xaa,0xd2,0x29,0x98,0x08,0xb9,0x8e, + 0xf3,0x02,0x30,0x84,0xd4,0x04,0x3d,0xa7,0x91,0x26, + 0x56,0x5f,0x60,0xa3,0x64,0x4f,0xd7,0x57,0x7f,0xce, + 0x1c,0x74,0xfb,0xfa,0x07,0x45,0x03,0x76,0x08,0xe8, + 0x3b,0x87,0x53,0x84,0x1f,0x79,0x3c,0xb1,0x23,0xd1, + 0x88,0x3f,0x0d,0x8c,0x28,0xf1,0x3e,0x69,0x8e,0x62, + 0x97,0x5d,0x31,0x24,0x5c,0x82,0x16,0x63,0x3c,0x23, + 0x1c,0x31,0x9c,0xdd,0x35,0xa7,0x4f,0x54,0x73,0x91, + 0xda,0x74,0x84,0x21,0xe8,0x36,0xf4,0x73,0x3b,0x77, + 0x8c,0x9c,0xcd,0x21,0x44,0x21,0x5a,0x95,0x6b,0xe4, + 0xfd,0x59,0xed,0xa0,0xd7,0x58,0x4a,0xf8,0xc9,0xaa, + 0x46,0x5c,0xbc,0x04,0xe7,0xf8,0xe8,0x2e,0x59,0x6a, + 0x71,0x87,0x84,0x5f,0xa0,0x1c,0x64,0xbc,0xd8,0xaa, + 0x32,0x81,0xea,0xca,0x20,0x67,0x06,0x34,0x17,0x79, + 0x1f,0x23,0x8c,0x4e,0x4d,0x50,0x87,0x4a,0xd3,0x0a, + 0x9b,0x0d,0x42,0xfc,0x47,0x69,0x39,0xea,0xc4,0xc0, + 0x3f,0xa0,0x08,0x84,0x0f,0x67,0x0a,0x78,0x14,0x83, + 0x8e,0x12,0x5d,0x38,0x94,0x2e,0x3c,0xed,0xde,0xd6, + 0x7a,0xf3,0x14,0x1e,0x75,0x79,0x79,0x9c,0x59,0x06, + 0x8d,0xbd,0x12,0x3e,0x50,0xf6,0xf3,0xa5,0xec,0xe4, + 0xfd,0xcd,0x77,0xb0,0x0d,0x4a,0xd4,0xc6,0x18,0x67, + 0xda,0x51,0x36,0x26,0x8e,0xc9,0x87,0xc7,0x68,0xec, + 0xf3,0x8c,0x70,0x5a,0x70,0x2d,0xed,0x30,0x0f,0x5e, + 0x3e,0x02,0x37,0x37,0x3b,0xd4,0xf6,0xd7,0xab,0x73, + 0x82,0x84,0x26,0x14,0x30,0x11,0x52,0x41,0xf6,0x16, + 0x60,0xb9,0x11,0x90,0xb1,0xe2,0x02,0x34,0x1a,0x56, + 0x30,0xea,0x82,0x2b,0xdf,0x88,0x21,0x84,0x34,0x63, + 0xed,0x89,0xee,0x9e,0x53,0xcf,0x08,0xb6,0x1e,0xc5, + 0x75,0xde,0xa8,0xe4,0x7d,0xb3,0xf6,0x32,0xd5,0x10, + 0x2d,0x3f,0xac,0x64,0x84,0x15,0x3e,0x65,0x98,0x74, + 0x66,0x16,0xdf,0x61,0xf2,0x57,0x01,0xe0,0xd7,0x9c, + 0xfa,0xa7,0xab,0x98,0xef,0xff,0xf6,0x89,0x25,0x78, + 0x1c,0x22,0xee,0x1e,0x8a,0x07,0x18,0x30,0x0d,0xfd, + 0x2c,0x69,0x29,0x8f,0x33,0x9a,0x82,0xe2,0x70,0x72, + 0x38,0x5e,0xeb,0x2d,0x79,0x3f,0xbe,0xcc,0xb6,0x3a, + 0xc3,0xc0,0x73,0x18,0x38,0xe2,0xa6,0x7c,0xea,0xc5, + 0x00,0x4b,0x3d,0x5c,0x18,0x7c,0xb6,0xba,0x98,0x32, + 0x31,0x9f,0x2a,0xf4,0x21,0xa5,0x26,0xb1,0xf0,0x7a, + 0xa4,0x09,0x19,0xd1,0x09,0xed,0xc0,0xdb,0x92,0xed, + 0xc2,0x46,0x12,0x79,0xff,0x45,0xa6,0x69,0xc7,0x10, + 0x82,0xbe,0xc3,0xab,0x4a,0xd3,0x0f,0x3d,0x23,0x5d, + 0xfc,0x50,0xd9,0x35,0xb0,0x07,0x57,0xf5,0xf1,0xd3, + 0x92,0xc9,0xdb,0xd7,0xf6,0x2c,0x90,0x42,0xc6,0xa2, + 0xcf,0x75,0x40,0xce,0xe5,0x97,0x64,0x20,0xbc,0x1b, + 0x14,0xde,0x12,0xe1,0xa1,0x0e,0xc7,0x85,0xdf,0xe6, + 0x8f,0x0f,0x32,0x27,0xfa,0x70,0x30,0x76,0xb4,0x4d, + 0xb4,0x21,0xf5,0xe7,0xc1,0x63,0xee,0xcb,0x71,0xf9, + 0x8f,0x5d,0x3f,0x61,0x97,0x70,0xe0,0x66,0x16,0x95, + 0xfd,0x3a,0xf3,0x04,0x1a,0x6e,0x9c,0x94,0x43,0xb2, + 0xc4,0xa0,0x49,0xb5,0x16,0xa3,0x28,0xe1,0x78,0x1a, + 0x2d,0x18,0x00,0x53,0x13,0xa2,0xa4,0xd1,0xd0,0x6e, + 0xf5,0xfc,0x2e,0x6d,0x08,0x60,0xac,0xf9,0x7e,0x6c, + 0x1f,0x34,0xc6,0x87,0x8e,0x3a,0x19,0xc7,0x31,0x32, + 0x79,0x7f,0x94,0x81,0x00,0x58,0x5e,0xd1,0xc6,0xa6, + 0xc9,0xd6,0x08,0x08,0x68,0x6a,0xf3,0x28,0x24,0xc6, + 0x66,0x90,0xdb,0x64,0xd5,0xae,0x2c,0x64,0x66,0x65, + 0x3d,0x42,0x6b,0xb6,0x05,0x21,0x32,0xd5,0x94,0x7f, + 0x01,0x1f,0x57,0x43,0xf0,0xe3,0x25,0x00,0xb6,0xe8, + 0xdb,0x78,0x4a,0xde,0x1f,0x5d,0xdd,0x67,0x84,0x56, + 0x06,0xde,0x8c,0x3e,0xf9,0x6d,0x7c,0x10,0x4a,0xd8, + 0x48,0x27,0x75,0x1f,0xdc,0xc1,0x6a,0x69,0x0e,0xa9, + 0xa7,0xfd,0x0c,0xa5,0x46,0x57,0xcf,0x9b,0x13,0x9c, + 0xe9,0xd4,0xa5,0x0a,0xe0,0x86,0xfb,0x7f,0xb2,0xaf, + 0xc0,0x0e,0xbd,0x24,0x8e,0x41,0xb7,0x8c,0xdc,0x96, + 0xbe,0x76,0xee,0xd9,0x5e,0x44,0x97,0xce,0x94,0x53, + 0xd1,0x91,0x17,0x2d,0x36,0xdd,0x52,0xdf,0xad,0x69, + 0x21,0x00,0xa3,0x4c,0xf3,0x15,0xea,0xec,0x6b,0xd8, + 0x06,0xa8,0x80,0xd9,0x06,0x9b,0x35,0xbd,0x06,0x7a, + 0xa5,0x27,0x37,0x05,0xb3,0x43,0xa2,0x63,0xd0,0xfe, + 0x88,0x12,0xb5,0xc3,0x33,0x79,0x1c,0x94,0x12,0x83, + 0xa1,0x77,0x02,0x5b,0x0b,0x2a,0xb9,0xa4,0x24,0xb7, + 0xd2,0xea,0xb9,0xd4,0x7f,0x7a,0xa6,0x47,0x29,0x21, + 0x3e,0x40,0x07,0xbe,0x59,0x75,0x33,0x9d,0x7e,0xae, + 0xf4,0x53,0x5e,0xff,0x14,0x79,0xff,0x90,0x3d,0x60, + 0x6c,0x46,0x75,0x93,0x4b,0x30,0x33,0xc2,0x8f,0x06, + 0x16,0xed,0x82,0x13,0xc3,0xa1,0x4a,0x4a,0x76,0x00, + 0xd1,0x20,0xcf,0x5b,0x7f,0xeb,0x6a,0xf5,0x81,0x41, + 0x15,0x08,0x01,0x39,0x41,0xbe,0x76,0xe4,0x9a,0x7e, + 0xef,0x1d,0x90,0xaa,0x6a,0x3b,0xcf,0x1f,0x1e,0x18, + 0x10,0x5b,0xab,0x10,0xb0,0xb2,0x45,0x42,0x15,0x1d, + 0x11,0xfd,0x16,0x40,0xc7,0x95,0x31,0x4a,0x7b,0x16, + 0x3b,0xd3,0xd6,0x51,0x50,0xfb,0x0d,0x79,0x7f,0x06, + 0x14,0x5d,0xcb,0x4b,0x14,0x84,0x75,0x74,0x9a,0x55, + 0xb1,0x8b,0x46,0xc0,0x50,0x9d,0x3d,0xed,0x5e,0x96, + 0x27,0xc2,0x08,0x09,0x93,0x9c,0xf4,0xea,0x8e,0x10, + 0xd6,0x3b,0xb9,0xfe,0x6e,0x97,0x5f,0x39,0xa0,0x90, + 0xe0,0xa6,0x0f,0x4a,0xe9,0x08,0x91,0xdb,0xec,0xf7, + 0xeb,0xf7,0x0b,0x1f,0xb7,0x4b,0x19,0xf8,0x61,0x20, + 0x79,0xc7,0x52,0x90,0xb8,0xfd,0x2c,0x77,0x4d,0xbb, + 0xb7,0xc9,0xfb,0x01,0xa2,0xc0,0xb9,0xd5,0x56,0xd9, + 0x66,0x23,0xa8,0xd8,0x6c,0xc9,0xfb,0xbd,0xab,0x0b, + 0x1a,0x9f,0xaf,0xba,0xdf,0x9e,0x58,0xd5,0x3c,0xa6, + 0x9c,0x63,0x82,0x5b,0x4b,0x92,0x3a,0x07,0xdb,0x22, + 0xbf,0xdd,0xfa,0xf0,0xdc,0x4f,0x44,0xa9,0xe2,0xee, + 0xb5,0xd8,0x8c,0xbc,0x4f,0x86,0xd9,0x0c,0x9c,0x6a, + 0x48,0xed,0x8f,0x56,0xf9,0x76,0xa0,0x06,0xad,0xc2, + 0xd7,0xba,0x34,0x06,0xa8,0x90,0x44,0x2b,0x7e,0x6a, + 0xd1,0x33,0xc1,0x3f,0x54,0x5c,0xd1,0xae,0xcd,0xec, + 0x54,0xe8,0x7d,0x4e,0x41,0x59,0x88,0x47,0xce,0xb9, + 0xe2,0xab,0xd5,0xa1,0xa2,0x21,0x2c,0xd1,0x4a,0xa2, + 0x4d,0x79,0x16,0xd9,0xf4,0x00,0xe8,0xd3,0x9d,0xaf, + 0xef,0xf9,0xfa,0x39,0xaa,0xf7,0x81,0x91,0x9c,0xdd, + 0x8e,0x17,0x06,0x61,0x5c,0x61,0xd6,0x9f,0xe4,0x3e, + 0x61,0xcb,0x0c,0x56,0xa7,0xdf,0x04,0x7e,0x04,0x6a, + 0xf6,0x8a,0x06,0x1d,0x29,0x67,0xad,0xcf,0xe8,0x9c, + 0x73,0x20,0xf7,0xd6,0xd1,0x4b,0x81,0x63,0xa9,0xc4, + 0x5c,0xbb,0xef,0xb0,0x84,0x52,0xbb,0x7a,0x66,0x12, + 0x54,0xc8,0x2b,0xe4,0x87,0x09,0xa0,0x4d,0xa5,0xdd, + 0x32,0xb0,0xa5,0x29,0xf6,0x26,0x2b,0x82,0xd5,0xdb, + 0x13,0xfc,0x86,0x0c,0x2d,0xf1,0x90,0x11,0x6e,0xc9, + 0xfb,0x07,0x60,0x83,0x8d,0xd2,0x0d,0xcd,0xa0,0x98, + 0x98,0x95,0x5c,0xe8,0x3c,0x45,0x32,0xfd,0xb5,0xe9, + 0x40,0x65,0xe6,0xe8,0xba,0x43,0x73,0x6a,0xa0,0x2f, + 0x52,0x1d,0xc9,0xbd,0xae,0x61,0xd2,0x98,0x31,0x10, + 0x17,0x90,0xac,0xa8,0x81,0x34,0x41,0x14,0xbd,0x00, + 0x27,0xf2,0xda,0x2b,0xbb,0xf9,0x7a,0x67,0x4d,0x7f, + 0xa4,0xa3,0x7f,0x26,0xef,0x67,0x84,0x3b,0x6d,0x06, + 0xb7,0x55,0x04,0x1e,0xac,0x80,0xf7,0x42,0xda,0x76, + 0x2c,0x18,0xa1,0x88,0x94,0x54,0x5c,0xe7,0xec,0x71, + 0x00,0xda,0x1a,0x45,0x75,0x7b,0xed,0xb2,0x68,0xe8, + 0x5a,0xce,0x1b,0xfa,0x49,0x13,0xfb,0x48,0xe0,0xd6, + 0x88,0x46,0x1e,0xd8,0x16,0x01,0x43,0x26,0xde,0x28, + 0x19,0xcd,0x86,0x71,0x67,0x81,0x07,0xc8,0x42,0xee, + 0x60,0x38,0x0e,0x6c,0xfc,0x11,0x10,0x04,0x0b,0xc0, + 0x2a,0xb3,0x3d,0xf6,0x6a,0xf2,0xd4,0xf2,0x4d,0x2c, + 0xf4,0x0a,0x3b,0x50,0xda,0xa2,0x2c,0x9b,0x0e,0xec, + 0x99,0xc4,0x50,0xd3,0x92,0x28,0x75,0x7b,0xa1,0xf4, + 0x45,0x80,0x08,0x85,0x5c,0xa4,0x4d,0x9d,0x3a,0xe1, + 0x90,0x06,0xbe,0xd8,0x68,0xda,0x53,0x7e,0x0d,0x2e, + 0x39,0x5f,0xc3,0xf1,0xd7,0x8f,0x76,0xbc,0xf1,0x8b, + 0x40,0x81,0x37,0xbf,0xec,0x07,0x3f,0x72,0x9e,0xd1, + 0x39,0x2b,0x0d,0xf3,0x76,0xf5,0xa1,0x61,0x05,0x2e, + 0x32,0xba,0x63,0x0f,0x96,0x6d,0xe6,0x70,0x81,0x96, + 0x17,0xc0,0x81,0x21,0xc9,0xce,0x35,0x03,0x29,0x43, + 0x1f,0x5a,0x4f,0xf6,0xdd,0x12,0x29,0x25,0xa2,0xa4, + 0xf0,0xc3,0x50,0x76,0x1b,0x67,0x5d,0x6f,0x97,0x51, + 0xe3,0x52,0x67,0x7b,0x16,0xa4,0x2d,0xc7,0xd5,0xdb, + 0x67,0x90,0xfb,0xae,0x55,0x1a,0x33,0x76,0x0c,0x8b, + 0x6a,0x22,0x29,0xa6,0x69,0x32,0x90,0x1e,0x7b,0x9f, + 0x4d,0xd0,0xf7,0x16,0xd1,0x9d,0x56,0xbb,0x77,0xa5, + 0x40,0x1b,0x7b,0x96,0x6e,0x0d,0x3c,0xa0,0x32,0xa7, + 0x69,0x0d,0x18,0x35,0x5b,0x14,0xf8,0xc6,0x00,0x1a, + 0xce,0xda,0x81,0x5f,0x16,0x25,0x66,0x56,0x74,0x46, + 0x8e,0xeb,0x4f,0x06,0x81,0x9e,0xa9,0x61,0xbd,0x39, + 0xca,0xc3,0x87,0x3f,0xb2,0xd3,0x01,0xe4,0x9d,0xe7, + 0x00,0x0b,0x5e,0xc1,0x80,0xe9,0xf7,0xde,0xfa,0x01, + 0x88,0xc2,0x09,0xce,0xc3,0x36,0x48,0xb1,0xac,0x06, + 0x84,0x0a,0x83,0x93,0xe3,0x8d,0x10,0xdc,0xda,0x50, + 0x5d,0xbc,0x39,0xcc,0xd3,0x68,0x4d,0x5f,0x30,0xa9, + 0xae,0x5c,0x04,0x1a,0x9d,0x58,0x43,0x07,0x2a,0x3d, + 0xf5,0x6e,0x0b,0x18,0x6b,0x91,0xb0,0xe3,0x73,0xcb, + 0x1f,0xa1,0x6a,0x05,0x0a,0x6c,0x27,0xd2,0xd9,0xa3, + 0xc9,0x6b,0xd7,0x29,0xe3,0x25,0x83,0x4d,0xaf,0x09, + 0xd9,0x73,0x2e,0x57,0xee,0x5e,0x69,0x3a,0xba,0x36, + 0x0a,0xd1,0x30,0xa4,0x39,0x08,0xac,0x0a,0x6b,0x0e, + 0xfc,0xea,0xf1,0x41,0x5b,0xa0,0x3a,0x54,0x04,0x1b, + 0x25,0x52,0xc2,0xb1,0x69,0x30,0xb4,0x6b,0x17,0x24, + 0xeb,0xac,0x0c,0x78,0xcf,0x1c,0xf4,0x1f,0x8d,0x10, + 0xbf,0xf8,0x0c,0x36,0x3c,0x1b,0xdc,0x75,0x22,0x04, + 0x33,0x66,0xc1,0xe6,0xf7,0x6e,0x05,0x45,0x9b,0x12, + 0xc7,0xa6,0x44,0x96,0xd4,0x12,0x7e,0xf9,0xac,0x3f, + 0xb3,0xc8,0x96,0xae,0x02,0x98,0x72,0x4f,0x6b,0x61, + 0xf3,0x94,0xc9,0x8c,0x62,0x83,0x55,0x02,0x60,0x0a, + 0x92,0xf0,0x31,0x58,0x8e,0x3d,0x36,0xc8,0x06,0x00, + 0x9e,0xa6,0x83,0x61,0xdf,0xa5,0xed,0x75,0xa2,0xb4, + 0x91,0xca,0x34,0xdb,0x5c,0x1e,0xb0,0xeb,0x4c,0xed, + 0x16,0xb0,0x78,0x21,0xae,0xe9,0xb9,0x1a,0x6d,0xcb, + 0xef,0x58,0x36,0xdd,0x8e,0xd5,0x82,0xa7,0x8f,0x28, + 0xd7,0xee,0xc6,0x02,0xf0,0xe6,0xef,0x40,0xc0,0xb8, + 0x32,0xdd,0x78,0x12,0x82,0xf5,0xae,0x15,0x5a,0x15, + 0xc8,0xf0,0xb7,0x88,0x83,0x13,0xed,0xea,0xbf,0x61, + 0x0f,0xfe,0x6f,0x44,0x09,0xfe,0xea,0x40,0x1e,0xe1, + 0x68,0x21,0xfd,0x46,0xd2,0x85,0x7f,0x37,0x28,0xed, + 0x48,0x7a,0x01,0x49,0xfe,0x06,0xa7,0x78,0x0f,0x6e, + 0x60,0xf4,0x95,0xd2,0xa6,0x1a,0xa4,0x3e,0xc5,0x18, + 0xfd,0x11,0xaa,0xc8,0xb6,0xb4,0x28,0x4c,0x6a,0x5d, + 0xeb,0x59,0xaf,0x82,0x04,0x99,0x36,0xf2,0xbe,0x72, + 0xcd,0x27,0xf3,0x8d,0x9d,0xe1,0x48,0xfb,0xfe,0x1e, + 0x8c,0x24,0x8a,0x0a,0x50,0xda,0xc0,0x60,0x70,0xed, + 0xe2,0xa8,0xc9,0xee,0x34,0xc1,0xc0,0xc6,0xbb,0x01, + 0xe1,0x39,0x41,0x0a,0xd6,0xe6,0xad,0x48,0xd9,0x8d, + 0x19,0x4a,0x8a,0x99,0x7e,0x49,0xdb,0xb2,0x74,0x1f, + 0xd8,0x02,0x52,0x6b,0xed,0x95,0x0c,0xe5,0x65,0x0b, + 0xc6,0x3a,0xc9,0x48,0xb3,0x94,0xf3,0x19,0x91,0x79, + 0x0f,0x2e,0xac,0xc5,0xcb,0xcf,0x5b,0x3d,0x00,0xde, + 0x3d,0xec,0xfc,0xe3,0xa0,0xf1,0x90,0xbc,0x2f,0xa1, + 0x7b,0xc7,0x01,0x38,0xb5,0xc5,0x12,0x0a,0xbf,0x9b, + 0xcc,0xdb,0x01,0xd1,0xbb,0x4d,0x1e,0x3b,0x06,0x22, + 0xb0,0x7f,0x1a,0x9b,0x31,0xe4,0xe9,0x92,0x5a,0xae, + 0xc2,0x8e,0xd9,0xb7,0x6c,0x04,0xe6,0x9c,0x63,0x99, + 0x53,0x6a,0xa4,0xb4,0xdf,0xbb,0xd4,0x6c,0x84,0xe9, + 0x46,0x51,0xd6,0xc7,0x1c,0x3a,0xa1,0xc9,0xb5,0x19, + 0x8d,0x85,0xde,0xc8,0x1c,0x55,0xff,0x4f,0xbc,0x7f, + 0xa9,0x83,0xd6,0x5c,0xb2,0xde,0xeb,0x26,0x33,0xc7, + 0xc8,0xe6,0xdd,0x90,0x1a,0xc2,0x74,0xb9,0xbc,0x8c, + 0xda,0x97,0xff,0x46,0x0d,0x50,0x60,0x91,0x89,0xe3, + 0xa8,0x22,0x2d,0x97,0xde,0x01,0x27,0x9b,0x91,0xe6, + 0x04,0x8c,0x2d,0xe0,0x0c,0x74,0x15,0xe0,0x22,0xb7, + 0x1e,0x70,0x8a,0x6b,0x82,0x70,0xe5,0x42,0x26,0x3b, + 0x7f,0x2b,0x09,0x76,0x4b,0x2d,0xc3,0xa9,0x73,0xf7, + 0x4f,0x92,0xf7,0xc7,0x25,0x28,0xf1,0x48,0x99,0x60, + 0x4b,0xf8,0xc1,0xa1,0x6e,0x0f,0xa9,0xe1,0x61,0xf4, + 0x00,0x1b,0x7a,0x9f,0xbb,0xed,0x71,0xd7,0xc1,0xd8, + 0xb0,0x03,0x53,0xc3,0x41,0xa3,0x1c,0x53,0x03,0x3d, + 0xc6,0x4c,0x4e,0x1d,0xfd,0x0e,0x68,0x96,0x4d,0xaa, + 0x39,0x9c,0x73,0xf8,0x94,0xd9,0x30,0xed,0x1b,0x5d, + 0x8c,0xd8,0xf0,0x12,0x34,0x1b,0x42,0x82,0x29,0x5a, + 0x06,0x72,0x91,0x6e,0x96,0xc3,0xd0,0xaa,0x01,0x26, + 0xe2,0xbd,0x1b,0xf1,0x88,0x5d,0x0e,0x56,0x01,0x0d, + 0x81,0xe6,0xa7,0x59,0x0a,0x3a,0x9b,0x02,0x49,0x70, + 0x99,0x63,0xb8,0xf3,0xf2,0xba,0x97,0xd7,0x6c,0x03, + 0xd6,0x75,0x05,0xe7,0x79,0xa7,0x49,0x52,0x55,0x25, + 0xc6,0x60,0x00,0x1d,0x29,0xfa,0x87,0xa3,0xda,0xaf, + 0x91,0x31,0x83,0x2d,0xdf,0xf3,0x3a,0xf5,0xaf,0x4f, + 0x91,0xf7,0xf1,0xf1,0x45,0x7f,0x4b,0xde,0xdf,0xe1, + 0xe7,0xcf,0x3b,0x11,0xfc,0xcd,0x19,0x1f,0x52,0x82, + 0xde,0x63,0x0a,0x59,0x3c,0x37,0x86,0x46,0xab,0x2e, + 0x66,0x2e,0xb3,0xe7,0x13,0x47,0x93,0xec,0x6a,0xa6, + 0x93,0x0f,0x2e,0x02,0x37,0x7e,0x1e,0x2e,0x99,0x05, + 0xaa,0x7f,0x60,0x3e,0x5f,0x0c,0x91,0xf0,0x06,0xb6, + 0xdd,0x85,0xf9,0x28,0x97,0x11,0x75,0x36,0xe0,0xb0, + 0x65,0x7d,0x64,0x2b,0x5e,0xfa,0x75,0xaa,0x1d,0x0f, + 0xa8,0xef,0x21,0x59,0x50,0x77,0xd0,0xfd,0x08,0xea, + 0x1c,0x01,0x7a,0x2f,0xc4,0xc7,0xff,0x4d,0x12,0x6d, + 0x01,0x3a,0x9c,0x70,0x5e,0x55,0x34,0x76,0x62,0x18, + 0x18,0xd8,0x8a,0x5c,0x26,0xa0,0xc4,0xb0,0xdf,0x47, + 0xa5,0x95,0xa3,0xe0,0xfb,0x2b,0xb0,0xcb,0xdd,0xd2, + 0x00,0x4c,0x83,0xa2,0xbf,0xfe,0x56,0x0f,0xf8,0xb7, + 0x95,0x01,0xc6,0x63,0x3f,0x5f,0x8e,0x03,0xd9,0x88, + 0xc7,0xb4,0xfe,0x78,0x94,0xfb,0x81,0xff,0xd0,0xcc, + 0x08,0xe3,0x87,0x38,0x8c,0x14,0xe2,0xd4,0xe4,0x60, + 0x1c,0x84,0x84,0xb0,0x61,0xe0,0xe4,0xfd,0xf2,0xc6, + 0xfa,0xdb,0x6c,0xc8,0x25,0x1f,0xeb,0x07,0x8c,0x96, + 0x4e,0x6f,0x59,0x2f,0x26,0x0b,0xae,0xc7,0xb2,0x01, + 0x37,0x2f,0xbc,0xa0,0x98,0x57,0xda,0x77,0x5f,0xe3, + 0xad,0x3a,0x4b,0x3f,0x75,0xfb,0x14,0x43,0xc8,0x1c, + 0x84,0x39,0xd1,0x08,0x3f,0x97,0x42,0xde,0x6f,0xe7, + 0x4d,0x73,0xdf,0xe1,0xa6,0xf0,0x6a,0x8c,0x45,0x2c, + 0xfe,0x3d,0x4d,0x4c,0xc9,0x53,0x4f,0xd7,0xf2,0x1f, + 0x26,0xe0,0xea,0xba,0x8e,0x1c,0x34,0x15,0x21,0x9b, + 0x20,0x74,0x24,0x90,0x15,0xcc,0x86,0x5c,0xd3,0xf7, + 0x40,0xc0,0x0f,0xa2,0x80,0xcf,0xbc,0x3f,0xb0,0xf9, + 0xe7,0xe1,0x4b,0x71,0xfe,0x45,0x1c,0xdb,0x05,0x29, + 0x0a,0x8f,0x9d,0xc2,0x96,0xa5,0xaa,0x77,0x67,0xc9, + 0xf3,0xeb,0x1c,0x5b,0x5b,0xf3,0x54,0xab,0xba,0xa7, + 0x1e,0x7d,0x47,0x0f,0xe9,0x6f,0xe7,0x1e,0x98,0xa2, + 0x7f,0x12,0xef,0x87,0x9b,0x85,0x62,0x8c,0x43,0x5f, + 0x84,0x87,0x0e,0x01,0x9b,0x0f,0x00,0xea,0xdc,0xfc, + 0x30,0x83,0x64,0x93,0x77,0x9f,0xee,0x3e,0x65,0x11, + 0x23,0x68,0x1c,0xf4,0x4b,0x38,0xb1,0x88,0x16,0x4d, + 0x0b,0xd2,0xd6,0xfd,0x0e,0xd9,0x55,0x98,0x5c,0x2e, + 0x4d,0x4b,0x0a,0xb8,0xf1,0xeb,0xa8,0xd2,0x62,0x69, + 0x33,0x82,0xfb,0x2d,0xa0,0x66,0x78,0x14,0x7a,0x7a, + 0x1f,0x0c,0x17,0xf6,0xa5,0x7c,0x9f,0x96,0x54,0xc0, + 0x6b,0x20,0xa9,0xdc,0xe2,0x95,0x45,0x7c,0x3d,0x5f, + 0xfb,0xf8,0x79,0x80,0x78,0x40,0xde,0xe7,0x4f,0x3f, + 0xcb,0x8d,0x8f,0xe3,0x3b,0x71,0x0d,0x01,0x9c,0xc3, + 0x43,0xee,0x32,0x9e,0x86,0xbc,0x43,0x47,0x23,0x8c, + 0xdb,0xde,0xf4,0x29,0x0c,0x95,0xa6,0x39,0x61,0x53, + 0x80,0xb8,0x5c,0x11,0x7c,0x97,0xa6,0x28,0xad,0x61, + 0xa6,0xfe,0xbf,0x54,0xdf,0x01,0x73,0x0d,0xc7,0xc6, + 0xca,0xa4,0x2b,0xdd,0x00,0x6d,0x3a,0x24,0xa1,0x8d, + 0xcd,0x6d,0x44,0x5a,0x2d,0xf2,0x13,0xe2,0xd8,0x43, + 0x61,0xe3,0x71,0x98,0x69,0xc9,0x08,0x81,0x21,0x65, + 0x00,0x92,0x35,0xad,0xf1,0x87,0xea,0xd1,0xa7,0x13, + 0xb6,0xb0,0xce,0xc3,0xd6,0xd8,0x21,0x6d,0x46,0xa4, + 0xec,0xc8,0x8c,0x8a,0x89,0xe0,0x6e,0x4b,0x91,0x80, + 0x4b,0xfb,0xac,0xd4,0x57,0x58,0x15,0xc5,0xda,0x20, + 0x5e,0x9d,0xa8,0x67,0x01,0xe0,0xc9,0x43,0x4e,0xbc, + 0xf5,0xf9,0x27,0x73,0x3d,0x8f,0xe2,0x0e,0x6e,0x5a, + 0xfc,0x4f,0x95,0x43,0x0e,0xe4,0xfd,0x56,0x40,0xdc, + 0x8a,0x85,0x24,0xe1,0x08,0x3c,0x0c,0x0c,0x7c,0x90, + 0x96,0xf7,0x6b,0x54,0xfc,0x1e,0x80,0x31,0xb6,0x4e, + 0xf1,0xb4,0x0d,0x9e,0xe2,0x04,0x1c,0xca,0xee,0x61, + 0x20,0x99,0x3c,0xe4,0xcd,0xd8,0x58,0x49,0xee,0x5c, + 0x12,0x63,0xd7,0xdf,0x60,0xca,0xdd,0x77,0x34,0x32, + 0x70,0x1b,0xbe,0xe4,0xa8,0x38,0xbb,0x11,0x90,0x6c, + 0xe2,0xc2,0x03,0xd1,0x24,0xb6,0x2e,0x4e,0x06,0x77, + 0x5e,0x3a,0x13,0x5b,0x29,0xa5,0x05,0x11,0x30,0x92, + 0xb0,0x20,0xa1,0x56,0xf4,0x17,0xc3,0x2f,0xf8,0x10, + 0xce,0xc5,0xbb,0x26,0x3f,0x31,0xd0,0xf6,0x9d,0xe9, + 0x8b,0x08,0xd1,0x1b,0x2c,0xc7,0xce,0x32,0xd5,0xc9, + 0x50,0xfe,0x55,0xc0,0x55,0x00,0x43,0x40,0xad,0xc1, + 0xf8,0xbb,0x64,0x1f,0xcf,0xb7,0xf0,0xa7,0x86,0xa1, + 0xf8,0x09,0x2e,0xc8,0xc3,0x02,0xe7,0x41,0xe9,0x67, + 0x43,0xde,0xe7,0x30,0x65,0xe0,0x80,0xea,0x6f,0x5d, + 0x7c,0xef,0xc9,0xfb,0x25,0x08,0x1c,0x87,0x94,0x4b, + 0x65,0xe2,0x92,0x24,0xfb,0x61,0x87,0x26,0x88,0xba, + 0x6d,0x65,0xb0,0x33,0x65,0x11,0xdd,0x03,0xea,0xa4, + 0x11,0x36,0x45,0x72,0xf1,0xaa,0xed,0x74,0x67,0x8a, + 0x79,0x48,0x2f,0x83,0xd6,0xe2,0xd0,0x09,0xbc,0x02, + 0x20,0x06,0xf2,0x3e,0x4b,0x0a,0xce,0x8c,0x7d,0x14, + 0x34,0x6e,0x05,0x83,0x12,0x54,0x88,0xa2,0xd5,0xb0, + 0xba,0x0b,0x2c,0x12,0xe2,0x6e,0x2b,0xd6,0x7d,0x10, + 0x59,0xfe,0x0e,0x71,0x33,0x66,0xb9,0xb2,0x9b,0x5d, + 0xcc,0x7d,0x07,0xe8,0xea,0x11,0x2b,0x20,0xcf,0x82, + 0x80,0x23,0xd8,0xb9,0x4b,0xe0,0x41,0xa5,0x27,0x7f, + 0x25,0x04,0xfd,0xb3,0xb0,0x20,0x1e,0xfc,0xe5,0x0d, + 0x75,0x9f,0x03,0x14,0x4f,0xbb,0xf8,0xe9,0xb3,0xee, + 0x9c,0x8b,0xdb,0x28,0xc2,0xe3,0x6f,0x6e,0x33,0x17, + 0x22,0x2e,0x4c,0xea,0x03,0x08,0x8a,0x4f,0x5d,0xdf, + 0xdd,0x12,0x5e,0x51,0x5a,0x6b,0xac,0xd4,0xce,0x74, + 0x06,0xda,0x7e,0x9f,0x36,0x51,0xee,0xd9,0x87,0xf0, + 0xb8,0xc4,0x51,0x66,0xd6,0xb4,0x2b,0x90,0xf7,0xd9, + 0xaa,0x88,0x46,0xde,0xcf,0xa8,0x4c,0x49,0x63,0x97, + 0x99,0xa5,0x4e,0xdb,0xcd,0xe3,0xa5,0x2c,0xab,0x62, + 0xab,0x8e,0xba,0x63,0x97,0xd2,0xa3,0x63,0x2e,0xec, + 0xe4,0x7d,0xe3,0x48,0xc0,0x02,0xf0,0x65,0x5f,0xf6, + 0x02,0x1f,0xdb,0x45,0xae,0x73,0x00,0x8e,0xf2,0x89, + 0x05,0x41,0x0d,0xdc,0xec,0x4e,0xbe,0x1a,0xbc,0x6c, + 0x92,0xbf,0xc9,0xa9,0x99,0x87,0xec,0x56,0x02,0x9e, + 0xb0,0x45,0x84,0x3f,0x1b,0x05,0xbe,0x43,0xec,0x79, + 0x9f,0xb3,0xbf,0x01,0x0a,0x70,0x07,0xf2,0x3d,0x40, + 0xb6,0xf3,0x5b,0x10,0x46,0xce,0x3c,0x4d,0xcc,0x75, + 0x06,0x5d,0xf0,0xa2,0xc9,0x62,0xd5,0x3c,0x1b,0x26, + 0xf0,0xc1,0x47,0x00,0xa3,0xf4,0x0a,0xc0,0xe6,0xa5, + 0x97,0x13,0x92,0xaa,0x47,0x5f,0x3d,0xfb,0x22,0xf9, + 0x36,0xd4,0xda,0x21,0xa0,0x09,0x79,0x9f,0x23,0xb3, + 0x1d,0xdd,0xf4,0xab,0x78,0x03,0x1a,0xfe,0xd2,0x46, + 0x75,0x5d,0xd4,0x12,0xac,0x9a,0xa1,0x69,0x7f,0x90, + 0x7f,0x21,0x7a,0xef,0x2e,0x8f,0x1e,0xa3,0x11,0x8c, + 0xd8,0x02,0xf0,0x8a,0xa4,0xf4,0x8d,0x78,0x08,0xa1, + 0x88,0x82,0x4d,0x98,0x81,0x1b,0xda,0x33,0x0e,0x53, + 0xef,0x19,0xc2,0xa8,0x54,0xf8,0x94,0x06,0x18,0xb2, + 0x78,0x02,0x84,0x4a,0x32,0x63,0x4a,0xf6,0xd6,0xbf, + 0x09,0x00,0xc4,0x79,0xd1,0x6e,0xec,0xb1,0x1a,0x51, + 0xe3,0x84,0x9e,0xf3,0x1e,0x62,0xbb,0x0b,0x20,0xdc, + 0x5c,0x1d,0x05,0x68,0x4a,0xab,0xea,0x66,0x50,0xe8, + 0x94,0x11,0x30,0xb5,0x0e,0xd0,0x1b,0x12,0xd8,0x47, + 0x8b,0x76,0xde,0x74,0x7b,0x70,0xa2,0x25,0x2d,0x28, + 0xf0,0xf0,0x18,0xa5,0xff,0x3e,0x50,0x3e,0x87,0x4d, + 0xfc,0xb5,0x04,0x59,0xb6,0x51,0x8a,0x02,0x6e,0x77, + 0x1d,0xcc,0x57,0x27,0x85,0x6b,0xba,0x78,0xf0,0xe8, + 0xf3,0xcc,0xec,0x52,0x42,0xe8,0xe4,0x2d,0x2a,0xb8, + 0x57,0x1c,0x7f,0x39,0x47,0x9d,0x93,0x9d,0x3b,0x42, + 0x3d,0x88,0x31,0x9a,0xfd,0xf8,0xe2,0x61,0x74,0x46, + 0x64,0x4b,0x38,0xe1,0xde,0x68,0x3a,0x05,0xc2,0xe0, + 0xc3,0xaa,0x72,0xb2,0x3e,0x07,0xe1,0x9e,0x86,0xf5, + 0x5a,0x62,0x04,0x5d,0x87,0x51,0xc7,0x2c,0x0a,0xc3, + 0xf1,0x4f,0x03,0x00,0x9e,0xa3,0x88,0xdc,0xb6,0xe9, + 0x6e,0x8a,0x11,0x3c,0xc0,0x0b,0x62,0x6c,0xb2,0xc5, + 0x0a,0x6b,0x8f,0x20,0x97,0x1b,0x78,0x93,0x7d,0xa8, + 0xd5,0x6a,0xd4,0xfc,0x0b,0xc6,0x16,0x6c,0xd9,0x46, + 0xa0,0x26,0x7a,0xbd,0x1d,0xc2,0xbc,0xa7,0x84,0x5d, + 0xd1,0x90,0x75,0x46,0x19,0x39,0x39,0xa2,0xe7,0x3a, + 0xc9,0xa3,0x40,0x78,0xf2,0xf5,0xe1,0x73,0x0b,0x33, + 0x93,0xc1,0x4e,0x25,0x8e,0x12,0x64,0xb0,0x09,0xad, + 0xdc,0xb9,0x34,0xb3,0x90,0x67,0xa8,0xe6,0x1f,0x56, + 0x63,0x13,0xa6,0x35,0x80,0xa9,0xbe,0x15,0x9e,0x33, + 0xdb,0x7d,0xaf,0x4c,0x05,0xa8,0x0b,0x5d,0xe2,0x42, + 0x49,0x1e,0x4b,0x7a,0xef,0xf7,0x76,0x23,0x71,0x0e, + 0x66,0xd8,0x42,0x6e,0x41,0x33,0x5d,0x75,0x67,0x25, + 0xc8,0x20,0x52,0xc3,0x57,0xf8,0xfb,0x00,0xc0,0x0f, + 0xbd,0x1b,0x3f,0xe5,0xfb,0x9c,0xc9,0xfb,0xe3,0x90, + 0xdc,0x6f,0xd0,0xdb,0x0c,0x64,0xdd,0xea,0x0f,0x6f, + 0x33,0x15,0xda,0xce,0x99,0x11,0x59,0xc2,0x64,0xaa, + 0x52,0xe9,0x80,0x94,0x98,0xb3,0xea,0x76,0x96,0xd2, + 0x8e,0xe7,0xf1,0x61,0xc8,0x8e,0xd2,0x76,0x6a,0x36, + 0x15,0x61,0x4e,0xe1,0x4f,0x01,0xdb,0x60,0x74,0xd3, + 0x32,0xa4,0xe2,0x81,0xcf,0x4d,0x32,0xd9,0x44,0x30, + 0xa1,0xc1,0x39,0x34,0x5c,0xd8,0x66,0x13,0x64,0x47, + 0x7c,0x8d,0xd5,0xaa,0x6a,0x31,0x42,0xfb,0x0c,0xcc, + 0x49,0x18,0x99,0x02,0xeb,0xa6,0x20,0xc2,0x86,0xed, + 0xc8,0xda,0x7d,0xd0,0xc1,0x06,0x08,0x1d,0xda,0x35, + 0x1a,0x68,0x11,0xbb,0x27,0x0c,0xc8,0xbe,0xae,0x30, + 0x3b,0x31,0xa2,0x38,0x50,0xab,0x9d,0x2b,0xd4,0x27, + 0x52,0xdd,0x9b,0x7f,0x13,0x00,0xf0,0x87,0xef,0x7e, + 0x20,0xf0,0x3e,0xb6,0xe4,0xfd,0xb0,0x53,0xf2,0x50, + 0x2c,0x4c,0x38,0x89,0xbb,0x1d,0x73,0x3c,0x10,0xd8, + 0x43,0x80,0x37,0x1c,0xa4,0xf2,0xe3,0x61,0x53,0xa3, + 0xde,0xfe,0x5c,0x94,0x1a,0xc0,0xa1,0xe4,0x08,0x0e, + 0x22,0x08,0x03,0x7a,0x44,0xb4,0xe4,0x56,0x04,0x9c, + 0x82,0x2e,0x4f,0xf5,0xdb,0xa1,0xc6,0x17,0x8a,0x25, + 0x68,0x09,0x52,0x01,0x30,0x90,0x31,0xcd,0xa0,0x78, + 0xe9,0xcd,0xb5,0x85,0x9e,0xca,0xc2,0xd4,0x50,0xdb, + 0xe0,0x0b,0xf2,0xbd,0x34,0xf2,0x7e,0x11,0x30,0xd1, + 0xce,0x1d,0xf6,0xe4,0xfd,0x31,0x27,0xfa,0x3c,0x4b, + 0x64,0xc1,0x07,0x73,0x2d,0x5a,0x52,0x23,0xb6,0xb7, + 0xc0,0x7e,0xcb,0x53,0xfc,0x1a,0xff,0x29,0xd4,0xf1, + 0x34,0x85,0x20,0x42,0xa3,0xb2,0x49,0xb2,0x79,0x86, + 0xad,0x88,0xf7,0xef,0xe8,0x01,0x6c,0x63,0x43,0xee, + 0x99,0x1f,0xf1,0xc0,0xbb,0x9e,0xa2,0xcf,0x78,0xf0, + 0x5e,0x51,0x18,0x47,0xfe,0x1d,0x8f,0x8a,0x1b,0x40, + 0xca,0x91,0xeb,0x96,0x83,0x51,0x6b,0x0f,0x34,0xb0, + 0xc8,0xba,0xd2,0x48,0xb8,0x29,0xb7,0xc1,0xa2,0x97, + 0x1b,0xc8,0x57,0xd5,0x01,0x40,0x37,0xc7,0x48,0x09, + 0x09,0x6d,0x9c,0x16,0x6b,0xf8,0x66,0xe6,0x14,0x9d, + 0xbc,0x6f,0xf6,0x3b,0x35,0x30,0x15,0xe0,0x8e,0x5c, + 0x53,0x83,0xc6,0x08,0x24,0x3b,0xad,0x88,0x9b,0xc1, + 0x44,0x8e,0x30,0x86,0xb1,0xe9,0x94,0xb0,0xcc,0xeb, + 0x73,0x05,0xed,0xe2,0xa4,0xbb,0x49,0x10,0x87,0x29, + 0x41,0x5a,0x39,0xb5,0xf8,0x11,0x12,0xe8,0xc6,0xd8, + 0x92,0xf7,0x91,0x6f,0x46,0xaf,0xcf,0x5e,0x1d,0x24, + 0x5a,0x56,0x57,0xe4,0xe9,0x2e,0xe1,0x18,0x88,0x92, + 0xf1,0xa8,0x58,0xc6,0xbf,0x1f,0x00,0x5a,0x34,0x78, + 0xe6,0x94,0x73,0x6e,0x0b,0x1e,0x36,0x50,0x3c,0xc9, + 0x50,0xba,0x2f,0x1b,0x43,0x44,0xe1,0xa3,0x11,0xc1, + 0xfd,0xac,0x1b,0x33,0x79,0x3f,0xd6,0xbe,0xf0,0x40, + 0x49,0xdc,0xc0,0x2d,0x09,0x25,0x65,0x5f,0x25,0x17, + 0xd7,0x7c,0xac,0x1d,0x92,0x27,0xa0,0x34,0x59,0xa9, + 0x9b,0xf9,0xe5,0x1a,0x3b,0xdd,0x04,0x5b,0xae,0x5d, + 0xb5,0xfc,0xc8,0xcb,0xe3,0x3e,0x5d,0x0d,0x14,0xa9, + 0x71,0xb4,0xe2,0xc0,0xb1,0x06,0xa4,0x40,0x89,0x40, + 0x64,0xc2,0x50,0xe7,0xbc,0xe1,0xe4,0x7d,0x16,0xa3, + 0xcf,0x54,0x4e,0x8d,0x0a,0xec,0xf1,0x1a,0x32,0x72, + 0x7e,0xc4,0xb2,0x06,0x5b,0x59,0x4e,0xdd,0xfa,0xeb, + 0x10,0x0f,0x7a,0x77,0x8c,0xd5,0x9c,0x05,0x58,0xd3, + 0x9e,0xa4,0x97,0x14,0x08,0x38,0x14,0x86,0x91,0x29, + 0xfe,0x3a,0x00,0x9c,0x86,0x53,0xb8,0xe7,0x9b,0xf3, + 0xcd,0xaf,0xdc,0xe9,0x00,0xf0,0x90,0x20,0xbc,0x35, + 0x7b,0x8c,0xc3,0x1c,0xdf,0x61,0x44,0x76,0x37,0x74, + 0xc4,0x94,0x69,0x8c,0x88,0xa1,0x3b,0x8e,0xc0,0x98, + 0xd6,0xdc,0xe0,0x21,0xec,0x29,0x7a,0xd1,0xf4,0x04, + 0x16,0x9d,0x55,0xca,0x02,0xa4,0xa0,0xc2,0x11,0x89, + 0x33,0x25,0x4b,0x95,0xd6,0x3f,0x0b,0xa7,0xca,0x16, + 0x20,0xaa,0x98,0x26,0xef,0x4c,0x65,0xab,0x66,0xf6, + 0x12,0x5b,0x65,0x8d,0x71,0x05,0xf5,0x2e,0xcf,0x3b, + 0x04,0x80,0x45,0x77,0x2a,0x22,0x9b,0x63,0x04,0x64, + 0x10,0x5f,0x67,0xb7,0xb4,0xa7,0xef,0x97,0x05,0x58, + 0xe2,0x2a,0x35,0xa3,0x5f,0x8e,0x3c,0x2e,0x2b,0x7e, + 0x9d,0x47,0x02,0x87,0x1d,0x1c,0x58,0x26,0x2a,0x68, + 0xd5,0xb0,0x0b,0x1c,0x0d,0x8e,0x42,0x3b,0x9e,0x78, + 0xcd,0xab,0x6c,0xfa,0xe3,0x00,0x80,0xc3,0x5f,0xb1, + 0x47,0xd6,0x4f,0x7e,0xa2,0xa7,0x99,0xed,0x00,0xb4, + 0x9e,0xb2,0x07,0x3e,0xfd,0xf1,0xa3,0xc9,0x08,0xda, + 0x6e,0x5b,0xa4,0xd7,0xc6,0xde,0x94,0x61,0x70,0x83, + 0x88,0x47,0xe6,0x7c,0x57,0x90,0xa9,0x51,0x02,0x16, + 0x60,0x04,0x99,0x06,0xb6,0x99,0x13,0x7b,0xb1,0xed, + 0x1b,0x64,0x47,0x2e,0x03,0x08,0xda,0x2c,0xef,0x95, + 0x15,0xec,0x56,0xe3,0x58,0xbb,0xba,0x7e,0x1a,0x4c, + 0x12,0xdb,0xbb,0x54,0xc4,0xf0,0x51,0x2e,0x72,0x90, + 0xce,0xf6,0x40,0x54,0x8a,0x50,0x14,0x8d,0x46,0xd0, + 0x55,0xc4,0x1c,0xb5,0x5d,0x81,0x13,0x0d,0xc8,0x6b, + 0x25,0x3f,0xb4,0xfe,0xae,0xa9,0x3c,0x46,0x12,0xee, + 0x54,0xd0,0xaf,0x0e,0xb1,0xa9,0x2b,0x19,0xa5,0x93, + 0xe0,0xd8,0x6c,0x1f,0xc3,0xae,0xd9,0x04,0xf4,0x00, + 0xbc,0xbc,0xc0,0xf5,0xbb,0xf8,0x67,0x4b,0x00,0xfe, + 0xea,0xf5,0xfd,0xe4,0x1d,0x1e,0x07,0x11,0xde,0xbc, + 0x85,0xdb,0xa0,0xc3,0x23,0xd9,0x09,0x0f,0x9b,0x03, + 0x26,0xc9,0x8b,0xd1,0x1a,0x66,0xe3,0x0e,0xef,0xd0, + 0xc0,0xb3,0xd3,0x80,0x53,0x65,0x1a,0x1c,0xe8,0x0e, + 0xe4,0x06,0x34,0x0c,0x01,0x92,0x1c,0x8c,0x9a,0x59, + 0x3b,0x85,0x00,0xe6,0xfa,0xe4,0x40,0x22,0x2a,0xda, + 0xf6,0x82,0x9d,0x7c,0xb7,0xd6,0x24,0x7f,0x00,0x9b, + 0x92,0x13,0xd1,0x7f,0x76,0x8d,0xe5,0xeb,0x39,0xf9, + 0x90,0x0f,0x75,0x9d,0x17,0x70,0x73,0x0a,0x92,0x0a, + 0xa6,0x01,0x11,0x26,0xad,0xdf,0x84,0x26,0x4e,0x40, + 0x58,0xc7,0x83,0x22,0xeb,0x6d,0x98,0x0a,0x3c,0x2b, + 0x53,0xf5,0x2e,0xf7,0x70,0x2d,0x4c,0x24,0xb7,0x68, + 0x17,0x21,0x55,0xd6,0x18,0x41,0xb2,0x92,0x9a,0x4e, + 0x20,0x20,0x7f,0xd6,0xef,0x7b,0x23,0x1f,0xe0,0x33, + 0x3c,0xf0,0x53,0x61,0xe6,0x29,0xb3,0xe8,0xb0,0xd3, + 0x73,0x97,0x6d,0x1f,0x33,0x19,0x37,0x6b,0x4e,0xe9, + 0xfe,0xce,0x31,0x40,0x76,0x7b,0xdc,0x25,0x27,0x26, + 0xce,0x81,0x33,0xb4,0x4a,0xdb,0x01,0x6f,0xc3,0x22, + 0xaa,0x18,0x85,0x96,0x04,0x18,0xd9,0x21,0x5c,0xeb, + 0x4d,0xd5,0xf8,0x83,0x91,0xac,0x18,0x23,0x27,0xda, + 0xb9,0xa4,0x6c,0xa8,0xcc,0xff,0xb3,0x06,0x82,0x74, + 0x0b,0x66,0x02,0xce,0x90,0x3e,0xbe,0x16,0x0f,0x32, + 0x27,0x4f,0x89,0x7b,0xb1,0x40,0xd3,0x76,0x1b,0x4b, + 0x7b,0xa0,0x5e,0xa0,0xd5,0x2a,0x74,0xe9,0x37,0x8e, + 0xe0,0xbf,0x3a,0x95,0x84,0x9a,0xa5,0xba,0x72,0x13, + 0x12,0x63,0xf2,0x2a,0x8f,0x68,0x82,0x27,0x72,0x51, + 0xbe,0x6e,0x97,0xc2,0xd3,0x09,0x9b,0x0f,0x95,0x07, + 0xfb,0x97,0x13,0x69,0xe5,0x86,0x67,0xff,0x9e,0x1d, + 0xf1,0x43,0x38,0x8f,0xb1,0x74,0xe1,0x43,0xf4,0xb1, + 0x3c,0xfc,0x94,0x74,0x9f,0x5b,0x4e,0x61,0x6b,0x24, + 0xec,0xa7,0xec,0xee,0x2f,0x25,0x47,0xe1,0x84,0xec, + 0xfd,0x59,0xd4,0xaa,0xde,0x58,0x80,0x43,0x4c,0x33, + 0xd8,0x84,0x7f,0xea,0xc8,0x71,0xaf,0x0b,0x46,0xe4, + 0x35,0xb0,0xd4,0xc4,0x10,0xec,0xa0,0x8a,0xb2,0x53, + 0xee,0x81,0x74,0xfc,0x5f,0x23,0xd1,0x8b,0x23,0x51, + 0x3b,0x27,0xd8,0xcd,0xdc,0x54,0x60,0x70,0x43,0xf5, + 0xa3,0xfa,0x07,0x94,0x59,0x03,0x54,0x54,0x5d,0xc8, + 0xfb,0x3b,0x49,0xf6,0x62,0x56,0x02,0xe3,0x47,0xe0, + 0x05,0xc8,0xa2,0xeb,0x33,0x54,0x8e,0x02,0xeb,0x10, + 0xa7,0xde,0x2b,0xf2,0x7b,0xf8,0x68,0x98,0x64,0x32, + 0xd8,0xd8,0xd4,0x6f,0x0a,0x82,0x3c,0x01,0xe9,0x9e, + 0x24,0xf9,0xbf,0x27,0xef,0xdf,0x3d,0xf4,0xfc,0x40, + 0xa8,0xba,0xf5,0x0f,0x62,0xae,0x95,0x79,0x83,0x57, + 0x5c,0x37,0xd7,0xfb,0xbf,0x81,0xc1,0x21,0x9d,0x37, + 0x98,0x22,0x05,0xde,0x3c,0x39,0xf6,0x9a,0x1e,0x5e, + 0x83,0x1e,0xee,0x0b,0xab,0x52,0x0d,0x13,0x31,0x32, + 0x5a,0x59,0xd9,0x1d,0x5f,0xae,0x1d,0x75,0x90,0xcb, + 0x17,0x4c,0xd1,0xfd,0x40,0xbb,0xce,0xc9,0xd1,0x19, + 0x6a,0xcb,0x55,0x76,0xf1,0x4a,0xde,0x67,0xd3,0x8c, + 0xc7,0xb9,0xbc,0x4b,0x20,0xe8,0x40,0x33,0x2a,0x5e, + 0x55,0x40,0x10,0x59,0x0d,0x41,0x7f,0xb0,0x17,0x51, + 0xc5,0xcb,0xb0,0x93,0xf7,0x25,0x20,0xc9,0x84,0x06, + 0x6d,0x87,0x78,0x4d,0x29,0xc2,0x9c,0x9b,0xa8,0x88, + 0xac,0x30,0x02,0xbf,0x7e,0xb5,0x25,0xfe,0x28,0xc5, + 0x7e,0xd7,0x29,0xf8,0x99,0xab,0x4f,0x62,0xf8,0xe1, + 0x08,0xc5,0xbf,0x8b,0x0f,0x3c,0xbb,0x16,0x8f,0x24, + 0xb6,0xd0,0x17,0xca,0x09,0xb7,0x50,0x8b,0xa7,0xc5, + 0xe5,0x7e,0xd6,0x0a,0xa1,0xa0,0xa1,0xaa,0xdf,0x5b, + 0x53,0x58,0xb5,0xe7,0x5e,0x23,0x69,0x65,0xc0,0x05, + 0x96,0xf4,0x06,0xf3,0x8f,0xe3,0x1d,0x97,0xb4,0xf6, + 0xea,0xb9,0xd3,0xc8,0xfb,0xbc,0x76,0x76,0xc7,0xff, + 0xc8,0xfe,0xfb,0xc3,0x7a,0xe6,0xe8,0x41,0x62,0xf6, + 0xee,0x7d,0xfc,0xbb,0x0d,0xdb,0xa0,0x06,0x3a,0xcb, + 0xb6,0x20,0x8b,0x77,0xe2,0x41,0xe6,0x89,0x3a,0x24, + 0x23,0xa1,0x3b,0x8b,0x34,0xf2,0x91,0x65,0x3b,0x51, + 0x99,0xe0,0x52,0x31,0xaa,0x65,0x17,0x5b,0x8f,0x46, + 0x6b,0x05,0x95,0x55,0xab,0x66,0x28,0x98,0x40,0x71, + 0x2d,0x45,0x3f,0x07,0x02,0xfe,0xa8,0x54,0xb8,0xe3, + 0xb0,0xb3,0x05,0xe0,0xdb,0xcc,0x04,0xdc,0x06,0x1c, + 0x66,0xf2,0xfe,0x2d,0x1b,0x3f,0xfe,0xf8,0x89,0x6c, + 0xe8,0xd2,0x50,0x7c,0x18,0x55,0x36,0xe4,0x7d,0x3e, + 0x02,0x18,0xb3,0xfa,0x2f,0x04,0x62,0xc4,0xa6,0x94, + 0xa2,0xdb,0x73,0xb7,0x0c,0x60,0x64,0xc9,0xb0,0xd1, + 0xf5,0xec,0xa0,0x80,0xdc,0xa6,0x14,0x2a,0x24,0x1b, + 0x4d,0x81,0x89,0x5b,0xfc,0xa5,0x3c,0x13,0x06,0x0e, + 0x76,0x45,0x64,0x86,0xdd,0x9a,0x36,0x9c,0x59,0x55, + 0x91,0x56,0x2c,0xe0,0xdc,0x6d,0xb5,0x8b,0x9a,0xae, + 0x61,0xe7,0x3b,0xbc,0x3e,0xcf,0x9e,0x5b,0x51,0x7e, + 0x1f,0x58,0xe2,0x1e,0x44,0x44,0x15,0xa4,0xad,0xa7, + 0x53,0x81,0x2c,0x4c,0x43,0x7a,0xa7,0x04,0xa3,0x4c, + 0x6e,0xea,0xf9,0x40,0x87,0x91,0xc6,0x9f,0xb6,0x01, + 0x9f,0x38,0x8d,0xe2,0xf8,0xc9,0xda,0xbe,0xe2,0x43, + 0x0c,0x6f,0x8f,0xa9,0xe3,0x7e,0x08,0x30,0xca,0x03, + 0xde,0x96,0x3e,0xdc,0x9c,0x01,0x2a,0x1a,0x9c,0x14, + 0x46,0xbb,0x68,0x10,0x47,0xe3,0xb7,0xd3,0x76,0xf3, + 0x8e,0xc3,0x1d,0x2f,0x3b,0x5a,0xa2,0x7b,0xf5,0xb8, + 0x05,0x4c,0x53,0x11,0x89,0xe0,0x38,0xd4,0xb5,0xf7, + 0xd8,0x29,0x14,0x97,0x58,0x69,0x39,0xb1,0x3d,0x5d, + 0x19,0xec,0x60,0x61,0x2c,0x11,0xc5,0x7e,0x6d,0xf1, + 0xde,0x58,0x86,0x78,0x7c,0x59,0x2e,0xfb,0xef,0x05, + 0xa9,0xa3,0x7c,0xc3,0xd8,0x68,0xc9,0x55,0x92,0x3d, + 0xdc,0x52,0x60,0x4a,0x76,0x7b,0x86,0xb3,0xf8,0x07, + 0xaa,0x81,0x3a,0x65,0xcc,0xe7,0xa6,0x80,0x8a,0x91, + 0x00,0x2d,0x6b,0xf5,0x36,0x28,0x25,0x4c,0x5d,0x03, + 0x3f,0xdf,0x78,0x01,0x96,0x56,0xa2,0x80,0x1b,0x57, + 0xd7,0x44,0x03,0x1c,0xc4,0x65,0x49,0x33,0xab,0x07, + 0x01,0xe0,0x59,0xb1,0xf9,0xb8,0x24,0x7d,0xba,0x1b, + 0x8e,0x77,0xf8,0xfd,0x7b,0xcc,0xef,0x3c,0x53,0x84, + 0x28,0x60,0x9b,0xd3,0x5a,0x36,0x12,0x7a,0xe0,0x8b, + 0x1c,0xda,0x94,0x30,0xf1,0x8a,0x5d,0xe7,0xa3,0xaa, + 0x3d,0xb8,0x53,0x51,0x0b,0x4e,0x49,0xd0,0x76,0xd7, + 0x33,0x27,0x47,0x00,0xb0,0x7b,0x70,0xc4,0x19,0xc8, + 0x4c,0x45,0x6e,0x31,0xa9,0x98,0x3b,0x8e,0x0d,0xe3, + 0xb3,0x32,0xf0,0x74,0x06,0x78,0xa6,0xd8,0x06,0xf7, + 0x0d,0xd6,0xdd,0x9d,0x33,0xc8,0x60,0xcb,0x73,0xaf, + 0x28,0x11,0x0b,0x1f,0xa3,0x7c,0xea,0x12,0x47,0x61, + 0xf7,0x8e,0xec,0xc3,0x99,0x6b,0x0f,0x26,0x6a,0x49, + 0x35,0x52,0x45,0x67,0x6a,0x9f,0x13,0xc9,0x47,0x42, + 0x5c,0xf6,0xca,0x48,0x0e,0xd2,0xaa,0xce,0x52,0x21, + 0x0e,0x99,0xe1,0x07,0xcc,0x46,0x78,0x8e,0x02,0x43, + 0x67,0x25,0xf0,0xc4,0x17,0xe0,0x7e,0x2e,0xff,0xa9, + 0xc4,0x57,0xe8,0x13,0xfd,0xae,0x44,0x30,0x64,0x94, + 0x0f,0xf4,0x3c,0x79,0x83,0x48,0x30,0x28,0xba,0x4a, + 0x25,0x5e,0x1e,0x7c,0xe0,0xcd,0xe3,0x8f,0x0f,0x54, + 0x24,0xef,0x17,0x47,0xd9,0x30,0x9c,0xdb,0x94,0x8d, + 0x2c,0x09,0xda,0x64,0x25,0x18,0x3e,0xb6,0xc6,0x87, + 0x51,0x98,0x5e,0x93,0xb7,0x9f,0x47,0x78,0x50,0x47, + 0x0c,0x18,0xa5,0x03,0xa1,0x53,0x91,0xaa,0x08,0x9c, + 0x6e,0xa6,0xbc,0xcf,0x09,0x7c,0x6b,0x27,0x1c,0x0d, + 0xec,0x62,0xa0,0xef,0x61,0x38,0x39,0x12,0xa3,0xf3, + 0x28,0x45,0x7b,0x23,0xb8,0x4e,0x20,0x2a,0xc7,0xb3, + 0x00,0x9e,0xfe,0x3b,0xf3,0x58,0x25,0xfb,0xe1,0x81, + 0xbc,0x0f,0x6c,0xae,0xa1,0x04,0x88,0x54,0x82,0x2c, + 0x25,0xd0,0xd5,0xc9,0x51,0xa2,0xd4,0xf5,0xf9,0xb7, + 0x7c,0x01,0x38,0xde,0x18,0xc4,0xf9,0x04,0x5e,0xc0, + 0x3e,0x60,0x92,0xdb,0x56,0xe8,0x29,0xeb,0x38,0x00, + 0x6a,0xa7,0x43,0xdb,0xbc,0x21,0xba,0xb0,0xde,0x7a, + 0x17,0x7a,0x9e,0xee,0xe6,0x52,0xa3,0x91,0xf7,0x9b, + 0x83,0x34,0xd0,0x96,0x56,0x2c,0x35,0xb8,0xbf,0xc8, + 0x55,0xae,0x1b,0x4d,0xb3,0x2e,0x36,0x68,0x78,0xba, + 0xef,0xb5,0xc5,0x84,0xad,0xc2,0x52,0x42,0x25,0x59, + 0xd9,0x86,0x17,0x23,0xb0,0xa0,0xe3,0xa8,0xe4,0x23, + 0x13,0xe5,0xd8,0xb6,0xd9,0xe6,0xcc,0xbe,0x73,0x39, + 0x54,0x0b,0x00,0x96,0xca,0xdb,0x04,0x9d,0x4d,0xdd, + 0x61,0x83,0x49,0x0c,0x4b,0xd5,0x21,0x2a,0x7f,0x3a, + 0xd3,0x4f,0xcb,0xbc,0xe6,0x93,0x5a,0x30,0x08,0x54, + 0x32,0xd4,0xd6,0x11,0x9e,0xcd,0x47,0xe0,0x7b,0x42, + 0x11,0xd2,0x52,0xe6,0xa6,0x45,0x15,0x06,0xcf,0xf9, + 0xe6,0x24,0x20,0x7e,0xdc,0x58,0xe3,0xbb,0x11,0xa1, + 0x95,0xdd,0x91,0xa5,0xb9,0x75,0xeb,0xf8,0xc1,0x19, + 0xdc,0x1e,0xa2,0x91,0xf7,0xdb,0x22,0xdb,0x9c,0x4b, + 0xa1,0x85,0xa1,0xed,0xf0,0x7b,0xef,0xaf,0xfe,0xf3, + 0xb8,0x1f,0x36,0xa8,0x6e,0x3b,0x63,0x57,0x3a,0xd4, + 0x21,0x15,0x86,0x6c,0xbd,0xa3,0xea,0x82,0x28,0x97, + 0x73,0xe1,0x01,0x23,0x74,0x2f,0x00,0xf9,0x62,0xda, + 0x1c,0x3b,0x18,0x3c,0x01,0x47,0x09,0x16,0xdf,0xdd, + 0x50,0x05,0x46,0x2b,0xa6,0x5d,0xb2,0x02,0xfa,0x91, + 0x0f,0x53,0x08,0x1a,0xa2,0x61,0x28,0xa6,0xe3,0xc0, + 0xec,0xd7,0xef,0xfc,0x4f,0x16,0xa5,0x18,0x05,0x18, + 0xa4,0x9d,0xb5,0xce,0x29,0xe4,0x8e,0xcd,0x42,0x27, + 0x75,0xe7,0xf6,0x80,0xea,0x22,0x9f,0x48,0x98,0xb1, + 0x66,0x4d,0xd1,0xe4,0x90,0x2e,0x65,0xf0,0x13,0x2e, + 0x00,0x7e,0xb8,0xc4,0x9f,0xea,0x74,0xf3,0x98,0x35, + 0xb3,0x81,0x49,0x78,0x34,0x41,0x3b,0x76,0x58,0x7f, + 0x18,0xdb,0x1c,0xdb,0x92,0xe0,0x4c,0xde,0xc7,0x31, + 0xed,0x67,0xc4,0x0a,0xb8,0xad,0x12,0xc2,0x79,0x81, + 0xe7,0x99,0x67,0x9d,0xbd,0x4f,0x69,0x33,0x15,0x4f, + 0x40,0xc6,0x36,0x86,0x23,0xf3,0x66,0x4b,0xad,0x7e, + 0xf4,0xa8,0xf6,0xe4,0x30,0x24,0xcb,0x85,0x3f,0xf0, + 0x6a,0xfb,0x51,0xe5,0x86,0x51,0x0b,0x08,0x24,0xf4, + 0x7e,0x88,0x3a,0xf0,0xa0,0x2c,0x3a,0xb6,0x96,0x98, + 0x82,0x7b,0x00,0xc3,0x7e,0x4d,0x19,0xf5,0xf5,0x4f, + 0xba,0x3d,0x27,0x2a,0x23,0x38,0x25,0x5c,0x64,0x2c, + 0xb2,0x5c,0x13,0x89,0x21,0x72,0x53,0x65,0xe6,0x14, + 0x24,0x26,0x73,0x4a,0xdf,0xf0,0x9e,0x65,0x75,0x36, + 0xc5,0x5e,0x4b,0x86,0x67,0x66,0xb3,0x5c,0xd7,0xfc, + 0x32,0x26,0x2d,0x6c,0xc0,0xdf,0xce,0xf7,0x3d,0x2b, + 0x03,0xde,0x26,0xef,0x6f,0x7e,0x03,0x8f,0xcb,0x09, + 0x9c,0x92,0x39,0x84,0x85,0xe7,0x58,0x25,0xb6,0x2b, + 0xbd,0xa5,0xdf,0x33,0xc4,0xec,0x66,0x85,0x9b,0xd2, + 0x13,0xdb,0x5a,0xe7,0xb6,0xf6,0x46,0x1b,0x04,0xac, + 0x73,0xde,0x23,0x91,0xf7,0x4b,0x9b,0xef,0x7a,0x68, + 0x6b,0x03,0x06,0x41,0xc2,0x2b,0x4f,0x52,0xb0,0x93, + 0xf7,0x85,0x25,0x67,0xaa,0xbb,0xcc,0x74,0xe4,0x84, + 0x0d,0x50,0x04,0x40,0x53,0x4d,0x83,0x0d,0x58,0x8a, + 0x72,0xd5,0xb5,0x4d,0x86,0x26,0x18,0x45,0xb3,0x38, + 0xd3,0xb6,0x1b,0xf5,0x9a,0xe8,0xfc,0xd0,0x60,0xc5, + 0x5a,0xc6,0xa8,0x7e,0x7b,0xa8,0x99,0xd1,0x6e,0x67, + 0xc1,0x5c,0x75,0x16,0x94,0x80,0x0e,0xee,0x61,0x4d, + 0x15,0xce,0xc4,0x4c,0xe8,0xe8,0x0c,0xe8,0x2f,0x7a, + 0xa3,0x71,0x74,0xf6,0x90,0xfa,0x3a,0x72,0x96,0x1d, + 0x5f,0x3f,0xae,0xe3,0x7f,0x94,0xfc,0xe3,0x4f,0xc2, + 0x4a,0x2b,0xe2,0x79,0x83,0x62,0x3d,0x08,0x7a,0x78, + 0xe7,0xd8,0x1b,0x19,0x67,0x03,0x3d,0x1e,0x66,0xda, + 0x47,0x5c,0x72,0xa3,0xc1,0x90,0x3a,0x14,0x33,0xe7, + 0xbc,0x7b,0x0b,0xa0,0x9c,0x45,0xb5,0xcc,0x46,0x93, + 0xe3,0x52,0x83,0xd1,0x2e,0x6c,0xc3,0xe2,0x27,0x57, + 0xe1,0x6a,0x4c,0xcb,0x3d,0xc4,0xad,0xd0,0x4c,0xbe, + 0x38,0x46,0x7b,0x36,0x6d,0xea,0x6f,0x55,0x28,0xa8, + 0xf0,0xc8,0xd6,0x9b,0xa1,0xa6,0x1d,0xab,0x15,0x8e, + 0x66,0x70,0xda,0x35,0xf6,0xbf,0x77,0x51,0xef,0x80, + 0xcc,0x16,0x23,0x83,0x36,0xff,0xd0,0xf2,0xa0,0x92, + 0x7b,0x7d,0x19,0x96,0x62,0xfe,0xa2,0x08,0x2b,0xed, + 0x98,0xba,0x60,0xe5,0x1a,0xd9,0x90,0xd1,0xb4,0x71, + 0xe3,0x28,0x78,0xc6,0x68,0x18,0x52,0x3d,0xa6,0xaa, + 0x75,0x28,0xdb,0xbf,0x48,0xc3,0x3f,0x2f,0x01,0xf8, + 0xb8,0x09,0xbe,0x15,0xcf,0xde,0xa5,0xf9,0x23,0xec, + 0x6c,0x9f,0x4e,0x47,0x88,0x7d,0x76,0xbe,0xd1,0xd6, + 0x19,0xb8,0x3d,0xbf,0x9b,0x48,0xc2,0xe7,0x9d,0x14, + 0xcf,0x92,0x2a,0xaa,0x2c,0x63,0x3c,0x30,0x51,0x07, + 0x78,0xdc,0xc3,0x21,0xe3,0x4a,0x7d,0x52,0x9d,0x38, + 0x93,0x69,0x4a,0xb7,0x1a,0x67,0xcd,0x14,0xb6,0x82, + 0x24,0x23,0x98,0x7b,0x6a,0x8f,0x1a,0xb5,0xaf,0xef, + 0xe4,0xfd,0x6b,0xd0,0x65,0xa9,0x9d,0x73,0x41,0xf1, + 0xb4,0x5d,0x2e,0x94,0x49,0x50,0x07,0x98,0x40,0xde, + 0x67,0x11,0xd6,0x78,0x2d,0x4c,0xfa,0xb8,0xb1,0x8a, + 0x6b,0xf6,0xc1,0x34,0xdd,0x51,0x97,0x9a,0x6f,0x0f, + 0x13,0x2b,0xd2,0xb8,0xdd,0x0f,0x4a,0x39,0x86,0x22, + 0x13,0xc7,0x8a,0xe5,0x5c,0x41,0xaa,0x64,0x71,0x72, + 0x6f,0xc1,0x60,0x53,0xa4,0x4a,0x46,0xb6,0x06,0x21, + 0x7a,0x08,0x6f,0x05,0x80,0x37,0xc8,0xfb,0xb8,0x5b, + 0x89,0x3b,0x32,0x0d,0xfe,0x2e,0x1b,0xc1,0x1e,0xd2, + 0xad,0xce,0x3f,0x0f,0xb2,0x19,0x8c,0x9b,0x20,0xbc, + 0x69,0xfb,0x65,0x9c,0xcf,0x0a,0x00,0x05,0xc7,0xfc, + 0x61,0x4a,0x24,0x1b,0x6b,0x0d,0x9e,0xb2,0x16,0x1f, + 0x02,0x5e,0x3b,0x1e,0xc4,0x78,0xb3,0xce,0xb2,0x33, + 0x54,0x15,0x18,0x75,0x82,0x8f,0x31,0x7c,0x85,0xa3, + 0x70,0xe5,0xda,0x4e,0xde,0x97,0xba,0xd8,0x53,0x5d, + 0x74,0x0c,0xc5,0x33,0x12,0xed,0x02,0x20,0x64,0x24, + 0xa2,0x19,0x30,0xff,0x7d,0x88,0x26,0x20,0x9c,0x7e, + 0x53,0xcb,0x8b,0x39,0x1e,0x4d,0xf7,0x01,0x94,0xe1, + 0x1e,0x72,0x0c,0x27,0x44,0x15,0x37,0x5f,0x2f,0x16, + 0x84,0xc4,0xa4,0x77,0x1d,0x2a,0x55,0xb6,0xf4,0xff, + 0x41,0x9d,0xb1,0xe8,0x78,0x14,0xa7,0xfe,0x03,0xaa, + 0x1e,0xa5,0xaa,0x2e,0x49,0xf0,0xfc,0xfa,0x31,0x70, + 0xcf,0xdf,0xac,0xc4,0x8f,0x24,0xfb,0xfb,0xe3,0xe2, + 0x9b,0x07,0x7e,0x74,0xe1,0xc0,0xc8,0x95,0xf5,0xd8, + 0xd7,0xa8,0x69,0xda,0xcf,0x85,0x99,0xcb,0x10,0x79, + 0xaf,0xeb,0xb8,0x49,0x33,0xc8,0x4d,0xae,0xc2,0x67, + 0x59,0x0b,0x76,0x5d,0xa2,0x44,0xde,0x39,0xa8,0xf2, + 0x60,0x63,0x69,0x36,0x07,0x6f,0x28,0x0b,0xa9,0xb5, + 0x18,0x3b,0x79,0xff,0x4a,0x8f,0x15,0xbc,0x63,0x52, + 0xc7,0x99,0x9a,0x81,0xa8,0xcc,0x3a,0xb3,0xdf,0x1a, + 0x2a,0x0b,0x1e,0x3a,0x23,0x6d,0x31,0xb2,0x52,0x8c, + 0xe7,0x77,0x8b,0xa8,0xe6,0xe4,0xd8,0xc1,0xfc,0x80, + 0xa5,0x45,0xc3,0x4e,0xde,0x1f,0xc9,0xb9,0x68,0xf2, + 0xf3,0xe5,0x86,0xd3,0x41,0x1d,0x21,0x35,0x41,0xcf, + 0x69,0xa4,0x89,0xd5,0x17,0xd8,0x28,0xd9,0x53,0xbd, + 0x31,0xd2,0x65,0x01,0x74,0x0e,0xe0,0x87,0xe5,0xf7, + 0x67,0xc8,0xfb,0xc7,0x45,0xfa,0xe3,0x6f,0x2d,0x60, + 0xce,0x99,0xbc,0xcf,0x71,0xe0,0x02,0xf0,0xa7,0x81, + 0x11,0x25,0xde,0x27,0x1c,0x11,0xbb,0xec,0x8a,0x21, + 0xe1,0x12,0xb4,0xf8,0x56,0x06,0x91,0xde,0x88,0xaa, + 0xb5,0x2b,0x61,0xee,0x45,0x74,0x89,0x3b,0x18,0x82, + 0xee,0x82,0x13,0x77,0x0f,0x09,0x72,0x36,0x87,0x10, + 0x85,0x4c,0xe4,0x93,0x46,0xde,0x87,0x98,0x59,0x7a, + 0x49,0x33,0xbb,0x00,0xbb,0xe4,0xe8,0xa5,0xcb,0x47, + 0x4b,0xe3,0x57,0xc7,0xac,0xef,0x8e,0xdd,0xb8,0xec, + 0x05,0xca,0xc1,0xe4,0xcc,0xb8,0xca,0x16,0x81,0xea, + 0x0a,0x90,0x98,0x01,0xcd,0x45,0xde,0xb7,0xc9,0x95, + 0xb1,0xe4,0xbb,0x39,0x09,0x5f,0x08,0x45,0x74,0xff, + 0x9c,0x66,0x71,0x2b,0xf8,0x34,0x96,0x02,0x47,0xb5, + 0x93,0x1b,0x1f,0x55,0x04,0xc2,0x87,0x33,0x05,0x3c, + 0x8a,0x41,0xc7,0xb4,0x1b,0x87,0xd2,0x85,0xa7,0xdd, + 0xdb,0x5a,0x6f,0x0e,0xae,0xa1,0x2e,0x2f,0x8f,0x33, + 0x8b,0x74,0xd1,0x2b,0xe1,0xa3,0xf4,0x77,0xba,0x94, + 0x37,0xe4,0x7d,0xa6,0x56,0x5e,0x9a,0xd9,0x9f,0xab, + 0x1c,0x75,0x63,0x12,0x53,0x0f,0x8c,0xc6,0x3e,0xcf, + 0x08,0xa7,0x05,0xd7,0xd2,0x0e,0xf3,0xe0,0xe5,0x23, + 0x70,0x73,0xb3,0x43,0x6d,0x7f,0xbd,0x7a,0x62,0x61, + 0xec,0xcb,0xc0,0x44,0x48,0x05,0x89,0x2c,0x8f,0x4e, + 0x4d,0xd7,0x51,0xda,0x90,0xab,0x14,0xd4,0xf0,0xcc, + 0x6a,0x98,0x39,0xaa,0x74,0x19,0xa8,0x62,0x61,0x28, + 0x60,0xea,0x6a,0x29,0xb2,0x56,0x1a,0x60,0xeb,0x51, + 0x5c,0xe7,0x8d,0x4a,0xde,0xb7,0x71,0x5d,0x53,0x0d, + 0xd1,0xf2,0x83,0x7b,0x84,0x05,0x6e,0x9f,0x36,0x33, + 0x0b,0x74,0x3f,0x05,0x41,0x7a,0x1f,0x81,0x80,0xbf, + 0xe6,0xd4,0x3f,0x5d,0xc5,0x7c,0xff,0xb7,0xf1,0xf6, + 0x71,0x57,0xb9,0xab,0xfb,0xb9,0x3e,0x8c,0xe0,0xd8, + 0x31,0xdc,0xc4,0xa9,0x5c,0x5f,0xa2,0xef,0x9e,0x0f, + 0x95,0x8e,0x39,0x76,0x2d,0xc7,0x4e,0xf7,0xb4,0xbd, + 0xf2,0x50,0xa4,0x78,0x4a,0xda,0xaa,0x86,0x46,0x42, + 0xec,0xc5,0x00,0x4b,0x3d,0x4c,0xcf,0x10,0x80,0xf6, + 0x9d,0x1e,0x7f,0x0a,0x46,0xe0,0x8c,0xcd,0x60,0x82, + 0x79,0xf9,0x33,0xaa,0x79,0x49,0x18,0x71,0xb8,0x29, + 0xd9,0x2e,0x6c,0x24,0xa1,0xcb,0x2f,0x32,0x4d,0x4b, + 0xad,0x93,0xb5,0x3b,0x73,0x36,0x83,0xec,0xce,0x8c, + 0xe2,0x34,0xac,0x7a,0x89,0xec,0xc1,0x55,0x67,0xf3, + 0xb5,0x64,0x4a,0xb6,0x40,0x25,0x98,0x30,0x48,0x8c, + 0xd7,0x68,0xc7,0xb1,0xd3,0x4c,0x9f,0xc4,0xe5,0xfb, + 0x00,0x80,0x1f,0xad,0xfa,0xa7,0x9f,0x65,0x93,0x47, + 0x0f,0xc9,0xe4,0x07,0x72,0x12,0xc6,0x7a,0x1e,0xc7, + 0xcd,0xf7,0xcc,0x5a,0xc2,0xae,0xda,0x46,0xa7,0xc8, + 0xe6,0xca,0x9c,0x87,0x84,0x03,0x37,0xb3,0xa8,0xec, + 0xd7,0xf9,0xa6,0xf5,0xc9,0xa7,0xc9,0x52,0xd2,0xa4, + 0x9a,0x8b,0x51,0x94,0x70,0x98,0xe8,0xb7,0xa3,0x2b, + 0xed,0xa2,0xb6,0xd7,0x34,0x81,0xa7,0xa5,0xe4,0xda, + 0x10,0x58,0x3e,0x76,0x3c,0xc8,0xbe,0x30,0x3e,0x74, + 0xd4,0xc9,0xb8,0x5d,0x3d,0xc2,0x82,0x24,0x4a,0x3e, + 0x61,0xd4,0x62,0x37,0x16,0xe5,0x2e,0xd6,0xc2,0x52, + 0xff,0x75,0x08,0xb8,0x43,0x94,0xb8,0x7a,0xfd,0xcb, + 0x6a,0xad,0x47,0x68,0xcd,0xb6,0x20,0x44,0xa6,0x9a, + 0xf2,0x2f,0xe0,0xe3,0x6a,0x08,0xce,0x8a,0x6b,0x6a, + 0x9a,0xe1,0x01,0x08,0xf8,0xf6,0x82,0xe7,0x9b,0x11, + 0x83,0x63,0x27,0xb7,0xbd,0xae,0xf4,0x7b,0x0a,0xbd, + 0xbb,0xb7,0xf1,0x41,0x28,0xe1,0x61,0x81,0xf3,0x00, + 0xab,0xa5,0x39,0xa4,0x9e,0xf6,0x6f,0xfc,0x01,0x7d, + 0xcf,0x87,0x64,0xa4,0x9b,0x51,0x82,0x39,0x74,0xb3, + 0x25,0x55,0x71,0x1f,0xfa,0x12,0x1c,0x42,0x3c,0xc0, + 0x54,0xaf,0x87,0x13,0x9b,0xf2,0xc8,0x9a,0x3c,0xf1, + 0x99,0x50,0xd1,0x91,0xcb,0x95,0x28,0x6d,0xcc,0x36, + 0x28,0x40,0x34,0x0f,0x3c,0x9d,0xe6,0x2b,0xd4,0xd9, + 0xd7,0xb0,0x0d,0xa2,0xcc,0x78,0xbf,0x91,0x60,0x15, + 0x15,0x61,0x7a,0x8c,0xa9,0xbe,0xf2,0x2c,0x63,0xd0, + 0xfe,0x88,0x12,0xd5,0x99,0x08,0x58,0x13,0x94,0x0c, + 0xdd,0x1f,0xb7,0x4f,0x87,0x83,0xa4,0xa8,0x9b,0x24, + 0x4a,0xab,0x87,0xe6,0x2a,0xac,0xf5,0x3f,0x9a,0x85, + 0x5a,0x99,0xcd,0x20,0x67,0x36,0xf2,0xfb,0x00,0x00, + 0xb5,0x8e,0xfe,0xc1,0x1e,0xbd,0x05,0xdf,0xdf,0x24, + 0xef,0x1f,0xb2,0x07,0x8c,0xcd,0xa8,0x6e,0xca,0x56, + 0x98,0x11,0xfe,0xf6,0xa0,0x6c,0x83,0x13,0xc3,0xa1, + 0x3e,0x27,0xef,0xd3,0x48,0x7b,0xbe,0xe0,0x00,0xd9, + 0x65,0xb1,0xe9,0xb5,0xed,0x80,0xda,0x62,0x2c,0x29, + 0xe2,0x14,0x1b,0x3f,0xab,0x82,0x5f,0xa3,0x2b,0x01, + 0xa7,0xd6,0x6a,0x52,0x2b,0x2e,0x20,0x26,0x4c,0x02, + 0xdb,0xac,0xb9,0x14,0xc8,0x42,0x51,0xc3,0xe2,0x01, + 0xef,0x95,0x9d,0xcd,0xeb,0x10,0xe8,0x9c,0xbf,0x2d, + 0xaa,0x4e,0xde,0x2f,0x8a,0x5d,0x1c,0x95,0x80,0xa1, + 0x3a,0x7b,0xda,0xbd,0x2c,0x4f,0x84,0x11,0x12,0xa6, + 0xf8,0xea,0x6b,0x22,0x87,0x30,0xf6,0xe4,0xf5,0x77, + 0x7b,0xe0,0x94,0x03,0x0a,0x09,0x6e,0x1a,0xb8,0x4b, + 0x47,0x88,0x07,0xf9,0x79,0x54,0x47,0x42,0xfd,0xfd, + 0xaf,0x4f,0x20,0x00,0x18,0x4f,0xa8,0xb1,0xe7,0xb6, + 0xd2,0x93,0x9f,0xe3,0x89,0xbc,0x9f,0xec,0xa5,0x23, + 0x7c,0xfd,0x88,0xbc,0x7f,0xc4,0x33,0x4e,0x86,0x9f, + 0x44,0x08,0x35,0xf7,0xe4,0xfd,0xde,0xd5,0x35,0x17, + 0x9b,0xf2,0x5f,0xc0,0x91,0x55,0xcd,0x63,0xca,0x39, + 0x26,0xb8,0x85,0xe2,0x5f,0xd8,0xbf,0x05,0x9a,0x71, + 0x98,0xbe,0x78,0xf4,0xa4,0xf7,0x9b,0xf0,0x5a,0x4d, + 0x7d,0x08,0x8b,0xcd,0xab,0x24,0xa6,0x29,0x89,0xd0, + 0x44,0x96,0x6b,0x53,0x74,0xf4,0x46,0x15,0x2f,0x82, + 0x64,0x10,0x6a,0x1e,0xc2,0xe0,0xda,0x44,0xdb,0x24, + 0xc1,0x6e,0xde,0xd1,0xc9,0xe1,0xac,0x23,0x07,0x9d, + 0xbc,0x2f,0x41,0x01,0x3a,0x8e,0xbf,0x8e,0xf5,0xd5, + 0xea,0x50,0xd1,0x10,0x96,0x68,0x25,0xd1,0xa6,0x3c, + 0x8b,0x6c,0x7a,0x00,0xf4,0xe9,0x4e,0x35,0x50,0x19, + 0x1a,0x70,0x57,0x94,0xfb,0xfa,0x30,0x02,0xf0,0x03, + 0x44,0x81,0xc3,0x33,0x9f,0x86,0xc1,0xec,0x92,0x02, + 0x32,0x83,0xd5,0xd1,0xc0,0x0d,0xbf,0x03,0x35,0xe9, + 0xbb,0x63,0x30,0xfc,0xb4,0x3a,0x71,0x49,0x4d,0xe1, + 0xd0,0xb1,0xb8,0x13,0x48,0x90,0xf4,0x70,0xa3,0x3d, + 0xb1,0xc3,0x12,0x4a,0xed,0xea,0xa1,0xd1,0x52,0xd7, + 0xd1,0x20,0x3f,0x4c,0x00,0x6d,0x2a,0xed,0x16,0x86, + 0x9e,0xa6,0xd8,0x9b,0xac,0x08,0x56,0x6f,0xcf,0x0d, + 0x09,0x52,0x86,0xf2,0x90,0x11,0x6e,0xc9,0xfb,0x07, + 0x60,0x83,0x4d,0xcc,0x43,0x7d,0x06,0xaa,0x4c,0xb6, + 0x15,0x89,0x85,0x91,0xfc,0x9a,0xd0,0x23,0xaa,0x79, + 0x07,0x5d,0x77,0x48,0x15,0x78,0x9b,0x62,0x40,0xd5, + 0x70,0xa5,0xb9,0x61,0x45,0x21,0xd5,0xd7,0xc2,0x56, + 0x7d,0x03,0x33,0x3a,0x68,0xa2,0xe8,0x05,0x38,0x91, + 0xd7,0x24,0xbb,0xa1,0x22,0xbc,0x92,0x91,0x7d,0x7d, + 0x12,0xf5,0xef,0xc8,0x3e,0xdf,0x0a,0x0a,0x48,0x6b, + 0xe3,0xf8,0x51,0x3c,0x58,0x01,0xef,0x85,0xb4,0x73, + 0x45,0xe2,0x53,0x03,0x34,0x9d,0x4f,0x6c,0x15,0xfe, + 0x83,0xd2,0xff,0xcd,0xb5,0xcb,0xa2,0xa1,0x6b,0x39, + 0x33,0x7f,0x5f,0x13,0xfb,0x40,0x04,0x2d,0x19,0xf2, + 0x98,0x2e,0x33,0x69,0x12,0x64,0xbc,0x52,0x59,0x9b, + 0x90,0x4b,0x90,0xa8,0x04,0x1e,0x84,0xa9,0xc1,0x35, + 0xdd,0xeb,0x16,0x5a,0x21,0x32,0x29,0x36,0x60,0xa9, + 0x2d,0xcc,0x62,0x6e,0xa7,0x26,0x4f,0xd6,0xfb,0x35, + 0x8a,0xb4,0x3e,0x4a,0x4d,0x52,0xd6,0x08,0x4a,0x63, + 0xb0,0x90,0xa1,0xf0,0x32,0x2c,0xcd,0x38,0x2d,0x47, + 0x17,0x7e,0x46,0x21,0x17,0x21,0x3a,0xb5,0x89,0x79, + 0x88,0x3f,0x18,0x4e,0x3a,0x60,0x25,0x15,0x81,0xbb, + 0x70,0xcc,0xa2,0x24,0xa4,0x7d,0xe0,0xaf,0x9f,0xee, + 0xf9,0x7c,0xb2,0xa6,0xf1,0xa1,0x40,0xf2,0xf0,0xa5, + 0x27,0xea,0xc1,0x3c,0xc6,0xa5,0xbd,0x22,0x06,0x53, + 0xef,0x80,0x1b,0x12,0xf0,0x9e,0xbc,0x5f,0x17,0x0c, + 0x6f,0xec,0x8d,0x19,0x68,0xb9,0xa4,0x0c,0x7d,0x74, + 0xbf,0x79,0xe7,0xf1,0xb7,0x94,0x88,0x92,0xc2,0x0f, + 0x43,0xd9,0x6d,0x9c,0x55,0x41,0xc0,0xcb,0xa0,0x83, + 0xa5,0xce,0xf6,0x2c,0x08,0xb5,0x26,0x24,0x8b,0xde, + 0xe0,0xe0,0x46,0x7a,0x8c,0xcc,0x18,0x0c,0x2c,0xaa, + 0xb9,0x95,0x1a,0xab,0x23,0x2e,0x63,0xe9,0x37,0x04, + 0x35,0xaf,0x83,0x43,0x50,0x94,0xfe,0xa0,0x92,0xd4, + 0x49,0x3e,0xb2,0xac,0xcc,0x28,0x96,0xcc,0x60,0x38, + 0x98,0x5c,0x1f,0xdd,0xf7,0xa0,0xb6,0x0c,0xe1,0x2c, + 0x53,0x4b,0x16,0x09,0x36,0x0d,0x02,0x65,0xfa,0x39, + 0xfc,0x0c,0x8d,0xa3,0xaf,0x6b,0xf7,0x63,0x10,0xf0, + 0x99,0x1a,0x16,0x7e,0xb7,0xe0,0xf1,0x5e,0x60,0x00, + 0xef,0x3a,0xfb,0x2c,0x78,0x05,0x03,0xa6,0xdf,0x7b, + 0xeb,0x07,0x20,0x6a,0x0b,0x27,0x60,0x9c,0xac,0x3f, + 0x59,0x56,0x43,0x30,0x91,0x9c,0xe9,0x5b,0x16,0x1c, + 0xc1,0xb8,0x91,0x56,0x84,0x67,0x09,0x16,0x15,0x5c, + 0x96,0xbc,0xa9,0xae,0x60,0x3a,0xcc,0xfa,0xe4,0x19, + 0xc6,0x30,0x55,0x5d,0xc3,0x2c,0x58,0xd3,0xa6,0xb9, + 0x48,0x38,0x82,0xdd,0xd8,0x28,0x73,0x04,0x9a,0x2e, + 0x5f,0x29,0x2b,0x69,0x48,0xf6,0xe8,0xf6,0x08,0xf3, + 0xde,0x31,0xa8,0x3c,0xb7,0xc9,0xbc,0x7a,0x1e,0xde, + 0x19,0x2c,0xc3,0x52,0x12,0x28,0x1c,0x43,0x9a,0xcc, + 0x03,0x56,0x93,0xd0,0xa6,0x27,0x30,0xdc,0x99,0x18, + 0x6b,0xce,0x61,0x2c,0x1d,0x04,0x96,0x33,0x5b,0x3b, + 0x76,0xd1,0x60,0x68,0xd7,0x2e,0x48,0xd6,0x59,0x19, + 0xb0,0x08,0x6f,0x14,0x5d,0xc0,0xd5,0xfe,0xf8,0x3b, + 0x55,0xe0,0x9f,0x80,0x82,0x78,0xfe,0xdd,0x71,0x12, + 0x19,0x77,0x9e,0x03,0x82,0x19,0xb3,0xa6,0xf1,0xdb, + 0x4f,0x16,0x6d,0x4a,0x1c,0x9b,0x12,0x39,0x81,0x58, + 0x61,0x9c,0xb3,0xfe,0xcc,0x22,0x5b,0xba,0x0a,0x60, + 0xca,0x3d,0xad,0x85,0xcd,0x51,0xed,0xa2,0x62,0xc3, + 0xa4,0x5b,0x91,0xc5,0x20,0xe9,0xb3,0x0b,0x45,0x42, + 0xac,0x67,0x25,0x0e,0x00,0x9e,0x1a,0x1b,0xb0,0xef, + 0xd2,0xf6,0x3a,0x51,0xda,0x48,0x65,0x9a,0xcd,0x0d, + 0x64,0x0b,0xd0,0xc6,0xea,0x27,0xb4,0x04,0x49,0xd1, + 0xaf,0x25,0xed,0x77,0x2c,0x9b,0x6e,0xc7,0x6a,0x9b, + 0x83,0x8f,0x28,0xd7,0x69,0xe5,0x05,0xe0,0x2d,0xed, + 0x51,0xb5,0x3d,0x67,0x16,0xed,0x8c,0x30,0x47,0x18, + 0x24,0x2a,0x31,0x1a,0xb1,0x32,0xec,0x98,0x32,0xfa, + 0xd5,0xd7,0xc4,0x8c,0x90,0xb6,0xb8,0x67,0x00,0x1c, + 0xff,0xf0,0xff,0xde,0xdc,0xe2,0x4f,0x5f,0xc3,0xe7, + 0x6f,0x76,0xa5,0x5d,0xfc,0x34,0x90,0xed,0xe6,0xd0, + 0x4b,0xd6,0x00,0x01,0xa7,0x78,0x0f,0x6e,0x60,0xf4, + 0x95,0xd2,0xa6,0x1a,0xa4,0x3e,0xc5,0x18,0xfd,0x11, + 0xaa,0xc8,0xb6,0xb4,0x28,0xba,0x53,0xf0,0x40,0x0c, + 0x78,0x05,0x99,0x36,0xf2,0xbe,0x72,0xcd,0x27,0xf3, + 0x2d,0x50,0x22,0xb5,0x6c,0x8a,0x96,0xa2,0x0a,0xd7, + 0x0b,0x50,0xda,0xc0,0xe0,0xb9,0xd3,0xb2,0xbe,0x4f, + 0xad,0xbe,0x93,0xa4,0xb8,0xcb,0x99,0xab,0x0f,0x08, + 0xc7,0x11,0x71,0x86,0x48,0x76,0x81,0xa1,0xa4,0x18, + 0xa3,0x91,0xf7,0x4b,0x16,0x20,0x26,0x9d,0x0a,0x1b, + 0x72,0x33,0x55,0xc8,0xf1,0xb2,0x05,0x63,0x9d,0x64, + 0xa4,0x59,0xca,0xf9,0x8c,0xc8,0xbc,0x07,0x17,0xd6, + 0xe2,0xe5,0x27,0x05,0x46,0xbe,0x30,0x0e,0x09,0x4c, + 0x5f,0xbf,0x06,0xfd,0xff,0x22,0x68,0xf0,0x10,0x18, + 0xb8,0xe7,0x00,0x9c,0xda,0x62,0xf7,0xbc,0x9e,0x0d, + 0x07,0xee,0x64,0xfd,0xb5,0xc3,0xa7,0xb6,0x6d,0x2c, + 0x93,0x69,0xda,0x1c,0xdf,0x5e,0x99,0x60,0x93,0x47, + 0x8f,0x0e,0x38,0xd5,0xd8,0xc1,0x9c,0x39,0x6d,0xf1, + 0x10,0x9d,0x5d,0x47,0x61,0xba,0x51,0x94,0xf5,0x31, + 0x87,0x4e,0x18,0xe4,0xda,0x68,0x8e,0x5a,0xee,0x41, + 0xec,0xfa,0x7f,0xac,0x4c,0x3c,0x31,0x1a,0xa9,0x5b, + 0x21,0x73,0x8c,0xec,0xe4,0xfd,0x0e,0x35,0x48,0x4b, + 0x12,0xc8,0x25,0x20,0xdb,0x7f,0xa3,0x06,0x28,0x54, + 0x06,0x22,0xb5,0xee,0x9f,0x29,0xf6,0xb5,0xa0,0xbd, + 0x10,0x4b,0xda,0xc2,0x0c,0x20,0xa1,0x6e,0x4e,0x2c, + 0x52,0x8a,0x2d,0x43,0x99,0x4e,0xc9,0xaa,0x6a,0x6c, + 0x12,0xe1,0x8e,0x19,0xc8,0x6f,0xbc,0x35,0x07,0xc0, + 0x23,0x50,0xf3,0x4f,0x94,0x0f,0x10,0x2a,0xe6,0xf3, + 0x8f,0xed,0x08,0x3f,0x88,0x8b,0x6c,0xab,0xa7,0x99, + 0x3b,0x15,0x09,0x1b,0xbc,0x43,0xfa,0xa5,0xa5,0x93, + 0x8e,0x6f,0xcf,0x4e,0xc6,0x70,0xa1,0x99,0xb1,0x01, + 0x88,0xe6,0x23,0x8f,0xbe,0xa5,0x16,0x24,0xde,0x90, + 0x68,0x05,0x8f,0xdc,0x8f,0x00,0xc5,0x56,0x43,0x17, + 0x23,0x0e,0xbc,0x84,0xb1,0xd4,0x75,0xe2,0x39,0x56, + 0x94,0x01,0x4a,0xf5,0xd5,0x6d,0x5b,0x3a,0x2d,0xdb, + 0x11,0x8f,0xa1,0x2d,0x4d,0x18,0x68,0x27,0xab,0x48, + 0x08,0x5b,0xb5,0x3e,0x97,0x75,0x16,0x04,0x97,0xaf, + 0x8c,0xae,0x27,0x51,0x98,0x2d,0xbe,0x4b,0xff,0xff, + 0xd2,0x66,0x04,0xf7,0x04,0x6d,0x55,0x25,0x36,0xc3, + 0xf2,0x52,0x9e,0xe9,0x71,0xb2,0xe1,0x5d,0x18,0x21, + 0xe9,0xd7,0x6a,0xc9,0x10,0x2e,0x0c,0x9d,0x3a,0x78, + 0x6b,0x0e,0x00,0x1f,0x5f,0xf4,0xfc,0x41,0x6c,0xc0, + 0x7b,0x9f,0xe6,0x07,0x62,0x0f,0x6f,0xbe,0x90,0xd9, + 0x4e,0x1a,0xdb,0x74,0x65,0xd5,0xc5,0x3c,0x81,0xff, + 0x25,0x05,0xe7,0x08,0xaa,0xde,0x8f,0xda,0x31,0xdc, + 0xf8,0x79,0xe8,0xe8,0x0c,0xc6,0x92,0xc9,0xaa,0x10, + 0x28,0x63,0x66,0xd0,0x20,0x7d,0xeb,0x2e,0xcc,0xe3, + 0x2f,0x23,0xea,0x1c,0x21,0xcf,0x96,0x95,0xcb,0x85, + 0x31,0x94,0xc1,0xa7,0xcd,0x56,0x54,0x76,0x73,0x16, + 0x8c,0x03,0x53,0x48,0xc8,0xfd,0x08,0x8a,0xff,0xd7, + 0x40,0xef,0x85,0xf8,0xf8,0xbf,0xa4,0xf4,0x1a,0x45, + 0x39,0x96,0x32,0x41,0x55,0x34,0x76,0x63,0xd3,0x2a, + 0xdb,0xc6,0xd2,0xc1,0xb8,0xb2,0xa7,0xfa,0xfb,0xa8, + 0xb4,0x72,0xd4,0x66,0xde,0x90,0x09,0xce,0xa2,0x51, + 0x38,0xea,0xd8,0x3b,0xac,0x10,0xd4,0x71,0x81,0x2b, + 0x30,0xfd,0x19,0x08,0xc8,0x1f,0x2d,0xb7,0x07,0x12, + 0xbf,0x37,0x64,0x23,0xbe,0x75,0x14,0xd1,0xd9,0xe1, + 0xa6,0x99,0x11,0xc6,0x0f,0x81,0x47,0xa7,0xc8,0x00, + 0x3a,0x61,0x87,0x65,0xce,0xbe,0x3b,0xfa,0xc0,0x50, + 0xb9,0xc3,0x08,0x95,0x13,0x0b,0x08,0xf5,0xc8,0xb0, + 0xb4,0xa5,0xd3,0x5b,0xd6,0x8b,0xc9,0x82,0xeb,0xb1, + 0x6c,0xc0,0x4d,0x8c,0xaa,0xd7,0xcf,0x40,0x6a,0xbd, + 0xc6,0x5b,0x75,0x96,0x7e,0xea,0xf6,0x29,0x86,0xc0, + 0x3d,0x7e,0x4c,0x94,0xad,0xbb,0xce,0x06,0x62,0x33, + 0x39,0x5a,0xdd,0x77,0xb8,0x29,0xbc,0x1a,0x63,0x11, + 0x8b,0x7f,0x4f,0x13,0x53,0x4a,0xa5,0x69,0x23,0x88, + 0x29,0x06,0xe5,0xb1,0x65,0xd0,0x54,0x84,0x6c,0x82, + 0xd0,0x91,0x40,0x56,0x30,0x1b,0x06,0xee,0xb2,0x28, + 0x46,0x69,0xe7,0xa2,0x75,0x01,0x3e,0x57,0xd0,0xff, + 0xc8,0x2b,0xf4,0x2e,0xb5,0xc0,0xb3,0xb7,0xc4,0xed, + 0x2e,0x99,0xfe,0xb1,0x73,0xa4,0xfd,0xbd,0x47,0xb1, + 0xa0,0xdb,0x39,0x66,0x6c,0x3a,0x06,0x38,0x66,0x58, + 0x0c,0x9e,0x7a,0xf4,0x1d,0x3d,0xa4,0xbf,0x68,0x8f, + 0xae,0x29,0xfa,0x27,0xf1,0x7e,0xb8,0x59,0x28,0xc6, + 0x38,0xf4,0x45,0x78,0xe8,0x10,0xb0,0xf9,0x00,0x38, + 0xd5,0xd5,0x7d,0x3f,0xd8,0x4a,0x1b,0xa7,0x17,0xa3, + 0xb9,0xe1,0x20,0x5e,0xc2,0x89,0x45,0xb4,0x68,0x5a, + 0x17,0x4a,0xe3,0xce,0xb0,0xaa,0x30,0xb9,0x0c,0x1a, + 0x6d,0xf2,0x13,0x6e,0xfc,0x3a,0xaa,0xb4,0x58,0xaa, + 0xee,0xe1,0x7e,0x0b,0xd2,0xee,0xb8,0x70,0x89,0x3a, + 0xfc,0x53,0x47,0xb2,0xa0,0x82,0xa7,0x57,0x15,0xa4, + 0x60,0x21,0x5e,0x03,0x49,0xe5,0x16,0x9b,0xc7,0x63, + 0xe9,0x9e,0xac,0x26,0xe1,0xd7,0x7b,0x7d,0x38,0xfe, + 0xe8,0xa5,0x3b,0x90,0xee,0xc9,0x46,0x4d,0x8e,0x9f, + 0xc7,0x2a,0x7f,0x9e,0xf1,0xa6,0xf8,0x20,0x9e,0xbe, + 0xe9,0x00,0x35,0x86,0x71,0xdb,0x9b,0x3e,0x45,0xfd, + 0x8b,0x28,0xc9,0x96,0xd4,0x1d,0x89,0xb5,0xaf,0xa5, + 0x29,0xac,0x6f,0xbe,0x9b,0xd2,0xea,0x4d,0xc3,0xa8, + 0xbb,0x39,0xed,0xc4,0xfd,0x47,0x59,0xc1,0x50,0x2c, + 0xd0,0x09,0x4f,0x32,0xb6,0xe8,0xa9,0x27,0x3f,0xa1, + 0xba,0x26,0xc2,0xc6,0xe3,0x30,0xd3,0x92,0x11,0x02, + 0xc3,0x81,0xa9,0xaa,0x83,0x40,0x40,0x05,0x48,0x4a, + 0xca,0x6c,0x9d,0x87,0xad,0xb1,0x43,0xec,0xac,0x50, + 0x76,0x64,0x46,0xc5,0x44,0x70,0xb7,0xa5,0x48,0xc0, + 0xa5,0x7d,0x56,0xea,0x2b,0xac,0x8a,0x62,0x6d,0x10, + 0x85,0xd3,0x00,0xf9,0x3b,0xa7,0x56,0xc1,0x7b,0x25, + 0x00,0xf1,0xd6,0x22,0x79,0x32,0xd7,0xf3,0x68,0x5e, + 0x08,0x0f,0x5a,0xfc,0x4f,0x16,0x30,0xcf,0x55,0xc0, + 0x89,0x40,0xcf,0xe3,0x07,0xcf,0x46,0x52,0x4f,0x05, + 0x41,0x8e,0xbf,0x0d,0x9f,0xdf,0xc1,0x18,0x5b,0xa7, + 0x78,0xda,0x06,0xcf,0xe2,0x04,0xec,0xdd,0xaf,0xba, + 0x7c,0x58,0xd2,0xd4,0x66,0x6c,0xac,0x24,0x77,0x2e, + 0x89,0xb1,0xeb,0x6f,0xd8,0x24,0x55,0xdb,0x50,0xc7, + 0x6d,0xf8,0x92,0xa3,0x12,0xb5,0x60,0xc1,0x4f,0x2f, + 0x3c,0x10,0x6d,0x60,0xe9,0xe2,0x64,0x70,0xe7,0xa5, + 0x33,0x53,0xe1,0x52,0x5a,0x10,0x15,0x23,0x41,0x44, + 0x6e,0xe4,0x00,0x38,0x17,0x16,0x1d,0xfa,0xa5,0x2e, + 0xde,0xb5,0x0b,0x27,0xa3,0xb7,0xe9,0x8b,0x88,0x4b, + 0x4d,0x88,0x05,0x60,0x55,0xfc,0xa7,0x8e,0x33,0x67, + 0xaf,0x0b,0xc8,0x22,0x9f,0xb5,0x49,0xe9,0x51,0x2e, + 0x35,0xe1,0xf7,0x02,0x00,0x9e,0x6f,0xe1,0x4f,0x0d, + 0x43,0x7f,0x54,0x2a,0xdc,0xf4,0xfb,0xc8,0x9b,0x5d, + 0xc6,0xf2,0x72,0x0e,0xef,0xd9,0xf7,0xda,0x7d,0xeb, + 0xe2,0x7b,0x4f,0xde,0x2f,0x41,0x00,0xa7,0x48,0x54, + 0x2a,0x13,0x97,0x24,0xd9,0x0f,0x3b,0xb8,0xa2,0xcf, + 0xbe,0x95,0xc1,0xce,0x94,0x45,0x74,0x0f,0xa8,0x72, + 0xd6,0xd8,0x14,0xc9,0x75,0xc2,0xbc,0x49,0x75,0xd3, + 0xec,0xcd,0xdd,0xf9,0xf6,0x5a,0x65,0x2c,0x80,0x9c, + 0x01,0xa0,0x06,0x18,0xb2,0xa4,0xe0,0xcc,0xd8,0x47, + 0x41,0xe3,0x56,0x30,0x28,0x41,0x85,0x28,0x5a,0x0d, + 0xab,0xbb,0xc0,0x22,0x21,0xee,0xb6,0x62,0xdd,0x07, + 0x91,0xe5,0xef,0x10,0x37,0x63,0x96,0x2b,0x8b,0x11, + 0x05,0x0c,0xdd,0x77,0x80,0xae,0x1e,0xb1,0x02,0xf2, + 0x2c,0x08,0xd8,0xed,0xc2,0xca,0x86,0x04,0x86,0x4e, + 0xcb,0xa5,0xc7,0xc0,0x22,0x64,0xf0,0x67,0x9a,0x80, + 0xf8,0x29,0x1c,0x7f,0x13,0x64,0x68,0x17,0x3f,0x61, + 0x04,0xee,0x9c,0x8b,0xdb,0x28,0xc2,0x23,0xfc,0x7f, + 0xd6,0xbe,0x8f,0x23,0x2e,0x5a,0xac,0x89,0x4f,0x5d, + 0xdf,0xdd,0x12,0x5e,0x51,0x5a,0x6b,0xac,0xd4,0xce, + 0x74,0x06,0x5d,0x7c,0xb6,0xb0,0xe4,0x25,0x20,0x60, + 0xab,0x51,0x88,0xf4,0xad,0x1b,0xf2,0x3e,0xdb,0x14, + 0x71,0x23,0xef,0x67,0xc8,0xa6,0xa4,0xb1,0x95,0x9c, + 0x4b,0x35,0xb0,0x9c,0x34,0x56,0xa5,0x2b,0x77,0x65, + 0xdd,0x69,0x88,0xc9,0x11,0xb9,0x09,0x45,0x62,0x6b, + 0x91,0xf7,0x8d,0x23,0xe1,0x5a,0x0d,0x97,0x7d,0xd9, + 0x0b,0x7c,0x6c,0x17,0xd9,0x95,0x88,0x2b,0xca,0x27, + 0x16,0x04,0x35,0x70,0xb3,0x3b,0xf9,0x6a,0xf0,0xb2, + 0x49,0xfe,0x26,0xa7,0x66,0x1e,0xb2,0x5b,0x09,0xf8, + 0x62,0x02,0x52,0x7e,0x5e,0xe4,0xc6,0x25,0xd6,0xfd, + 0xdd,0x28,0x30,0x9f,0x0e,0xf6,0x3f,0xcd,0x28,0x70, + 0x80,0xcd,0xce,0xc8,0x76,0x7e,0x0b,0xb6,0x3c,0xf8, + 0xb6,0x90,0xc3,0x4d,0x3b,0x1d,0x07,0x4c,0x02,0x1b, + 0x26,0xf0,0xc1,0x47,0x00,0xa3,0xf4,0x0a,0xc0,0xe6, + 0xa5,0x97,0x13,0x92,0x6a,0x07,0x55,0xc7,0xfe,0x23, + 0xf9,0xb6,0xd5,0xda,0xc9,0x41,0x85,0x42,0xde,0xe7, + 0xc8,0xb3,0x10,0x6e,0xfa,0xc5,0x80,0x7f,0x5c,0x4f, + 0x60,0x1b,0xd5,0x75,0x51,0x4b,0xcb,0x38,0xa2,0xa5, + 0xbb,0xfc,0x0b,0xd1,0x7b,0x77,0x79,0xf4,0x18,0x8d, + 0x60,0xc4,0x16,0x80,0x17,0xf1,0x88,0x0d,0x18,0x16, + 0x42,0x11,0x47,0x1b,0x02,0xaa,0x9d,0x1d,0x5a,0xfd, + 0x66,0xf3,0x03,0xa4,0xc1,0xb5,0x0b,0xd3,0x29,0x3b, + 0xb9,0x78,0x02,0x24,0x96,0x52,0xc4,0x94,0xb8,0x73, + 0x87,0x77,0x15,0xae,0xdf,0x70,0x01,0xee,0xec,0x71, + 0xf0,0x1b,0x5e,0x21,0x22,0x1a,0xcf,0x1f,0x1c,0xdc, + 0xad,0x94,0x97,0x68,0xb3,0x93,0x09,0x4b,0xdf,0x61, + 0xec,0xb1,0xfa,0xe8,0x2b,0x1b,0xbd,0x21,0x81,0x7d, + 0xb4,0x68,0x07,0x3d,0x65,0xa6,0xc2,0x96,0x01,0xff, + 0x0a,0x49,0x63,0xb9,0xd1,0xe2,0xc7,0xa6,0x93,0xb6, + 0x10,0x80,0x46,0xde,0x17,0x05,0xdc,0xbd,0xc7,0x91, + 0xd1,0x85,0x46,0x42,0x1c,0x98,0x44,0x5b,0x80,0xde, + 0x0e,0xb4,0xff,0xc6,0x56,0xaf,0x80,0xe6,0xf8,0xcb, + 0x39,0xea,0xdc,0x08,0x34,0xcd,0x03,0x35,0x5c,0x8f, + 0xc6,0xc3,0x70,0x46,0x64,0x58,0x53,0xc0,0xd6,0xaa, + 0x8c,0x41,0xc1,0xaa,0xca,0xc9,0xfa,0x1c,0x84,0x7b, + 0x1a,0xd6,0x6b,0x09,0xc3,0x18,0x9a,0x99,0x33,0x03, + 0xc9,0xc9,0x9e,0xbd,0xeb,0xb7,0x32,0x17,0xe0,0x57, + 0x59,0x3f,0x3e,0xf5,0x45,0xdb,0x97,0x9e,0xe2,0x05, + 0xc4,0xc6,0xcc,0x23,0xe5,0xbd,0x81,0x9f,0xfd,0x6e, + 0xf5,0xc2,0x08,0x78,0xa1,0x77,0xde,0x1a,0x70,0xbc, + 0xe1,0xa0,0x7a,0xbd,0x1d,0xc2,0xbc,0xa7,0x84,0x4c, + 0x88,0xbe,0xc2,0xf2,0xc8,0xc9,0x11,0x3d,0xd7,0xc1, + 0xc6,0xf9,0x18,0x89,0xb2,0xeb,0x16,0x66,0xa7,0xa2, + 0x09,0xd5,0xfe,0x2b,0x26,0x69,0x5b,0x57,0x94,0xd7, + 0xc3,0xcd,0x42,0x9e,0xa1,0x9a,0x7f,0x18,0x52,0x4c, + 0x98,0xd6,0x40,0xf1,0xc9,0xf3,0x43,0xb3,0xdd,0xf7, + 0xca,0x54,0x80,0xba,0xd0,0x25,0x2e,0x94,0xe1,0xca, + 0x92,0xde,0xef,0x00,0x60,0x93,0x38,0x07,0x33,0x6c, + 0x21,0xb7,0xa0,0x99,0xae,0xba,0xb3,0x12,0x64,0x10, + 0xa9,0xe1,0x2b,0x0c,0xc9,0xb8,0xf0,0x52,0x5e,0xcc, + 0xb4,0xbf,0x2b,0x01,0x7e,0xda,0xb2,0x1b,0x63,0xb7, + 0x5a,0x1e,0xc6,0x0e,0x6e,0x20,0xb9,0x3d,0x90,0x75, + 0xab,0x3f,0x8c,0x3d,0x70,0xc7,0xd3,0xa7,0xa5,0x2d, + 0xc3,0xb4,0xc1,0x75,0xd9,0x1a,0x4b,0xeb,0x59,0x75, + 0x3b,0x4b,0x69,0xc7,0x3c,0x3e,0x6c,0xd3,0x44,0xbe, + 0x7b,0xa1,0xe5,0x88,0x4b,0x3f,0xfe,0x6a,0x0d,0x0d, + 0x45,0xbb,0xad,0xfd,0x45,0x63,0xcc,0x69,0xad,0x4b, + 0x0b,0x2a,0x8e,0x50,0x42,0x83,0x73,0x68,0xb8,0x34, + 0x0d,0x7b,0xdd,0x11,0xb1,0x34,0xf5,0x54,0x25,0x09, + 0x36,0xe3,0x03,0xe6,0x24,0x8c,0x4c,0x81,0x75,0x53, + 0x10,0x61,0xc3,0x76,0x64,0xed,0x3e,0xe8,0x60,0x03, + 0x40,0xf3,0x9a,0x34,0x7b,0x16,0xba,0x58,0x68,0xb8, + 0xef,0xec,0x29,0x3b,0x0c,0x08,0x58,0xdf,0xc5,0x62, + 0xe7,0x0a,0xf5,0x89,0x6c,0x9e,0x00,0xd9,0xcb,0xea, + 0x33,0xa2,0xa0,0x7f,0x19,0x15,0x76,0x17,0x67,0x0f, + 0xa0,0x8f,0x9d,0xaf,0x2f,0x8c,0xf7,0xfe,0x1b,0x83, + 0x4f,0x5a,0x9d,0x9d,0xb6,0x15,0x0d,0x3a,0x69,0xbd, + 0xdf,0x56,0x50,0x9e,0xb6,0x1f,0xc3,0x9c,0xf4,0x99, + 0x9b,0x10,0x05,0xa2,0x25,0xb7,0x22,0xe0,0x14,0x74, + 0xd9,0xc9,0xfb,0x85,0x94,0x93,0x86,0x6a,0x0a,0x50, + 0xcf,0x98,0x66,0x50,0xbf,0x87,0xb2,0xc8,0xbc,0x94, + 0x31,0x35,0xd4,0x36,0xf8,0x82,0x7c,0x2f,0x6b,0x2a, + 0xc6,0x32,0xf9,0xa6,0xb1,0x0c,0x7b,0xf2,0xfe,0x98, + 0x13,0x7d,0xb4,0x9c,0x99,0x05,0x1f,0xcc,0x43,0x92, + 0x9a,0x1a,0x81,0xed,0x09,0x84,0xfd,0x96,0xa7,0xf8, + 0x2d,0x8a,0x4f,0xea,0x78,0x9a,0x42,0x10,0xa1,0xd1, + 0x79,0x7c,0x6c,0x06,0xa7,0x55,0x63,0xa8,0x4e,0x8e, + 0x51,0xb2,0xa8,0x7f,0x26,0x00,0xe0,0xfe,0x8f,0xb7, + 0x76,0x7e,0x37,0xb4,0x5c,0xaf,0x71,0xe2,0x97,0xe0, + 0xe9,0xaf,0xd3,0x19,0x20,0x1b,0x78,0xc3,0x23,0x6c, + 0x37,0x97,0x5a,0x6f,0x69,0x03,0xa1,0xb5,0x2b,0x8d, + 0x84,0x9b,0x72,0x1b,0x2c,0x7a,0xb9,0x81,0x7c,0x5e, + 0x0e,0x00,0xba,0x39,0x46,0x4a,0x48,0x68,0xe3,0xb4, + 0x10,0x14,0xf9,0xca,0x29,0x10,0xae,0x4f,0x27,0xef, + 0xd7,0x20,0x08,0xed,0x04,0xa0,0x75,0x74,0x38,0xe4, + 0x41,0x96,0x10,0xc7,0x9d,0xbf,0xc5,0x08,0x63,0x18, + 0xc4,0x16,0x0d,0xa2,0xbb,0x11,0x15,0x5f,0x46,0x46, + 0xa1,0x18,0x17,0x82,0x85,0x57,0x2a,0xb3,0xb2,0x41, + 0xc9,0x94,0xea,0xc6,0x80,0xfe,0x8f,0x8d,0xc8,0x87, + 0x91,0xf7,0x8b,0x18,0xf0,0x40,0x55,0x40,0x52,0x2a, + 0xf5,0x74,0x1e,0x57,0xd3,0x16,0x6a,0xe7,0x62,0x11, + 0x27,0x34,0x0b,0xfc,0x97,0x32,0x80,0x37,0x07,0x63, + 0xf0,0xf9,0x80,0xe3,0xaf,0xc1,0x45,0x31,0xb0,0x2b, + 0x28,0xd2,0x77,0xee,0x67,0xdd,0x18,0x06,0x77,0x76, + 0xb0,0x22,0x7c,0xd8,0x60,0x97,0x01,0xa4,0x36,0x68, + 0x9c,0x4c,0x13,0x52,0x89,0xf4,0xf4,0x69,0x3d,0xf6, + 0xf4,0xb1,0x8e,0xe9,0x56,0xf3,0xcb,0x35,0x76,0x8a, + 0x43,0x4a,0x06,0x53,0x35,0xbb,0x4c,0x30,0x10,0x31, + 0x13,0x14,0xa9,0x71,0xb4,0xe2,0xc0,0xb1,0x06,0xa4, + 0x40,0x89,0x40,0x64,0x82,0x75,0x45,0x8c,0xbc,0x5f, + 0x0a,0x39,0xa4,0x72,0x6a,0x54,0x60,0x8f,0xd7,0x90, + 0x91,0xf3,0x23,0x96,0x35,0xd8,0xca,0x72,0xea,0xd6, + 0x5f,0x87,0x78,0xd0,0x53,0x18,0x8e,0x5a,0xe6,0x60, + 0x4d,0x7b,0x92,0x5e,0x52,0x74,0xdd,0xe8,0xb2,0xdb, + 0x83,0xa6,0x97,0xa0,0x1b,0x0e,0x9e,0x59,0x83,0xfd, + 0x36,0x95,0xe7,0xbb,0xe4,0xfd,0x7d,0xb9,0xfd,0x48, + 0x06,0xfb,0x37,0x2f,0xec,0xe7,0xf8,0x0e,0x23,0xb2, + 0x37,0x07,0x85,0xc3,0xf8,0x61,0xb7,0xbc,0x34,0x20, + 0xed,0x19,0x79,0x5f,0x51,0xb2,0x5a,0x32,0xa9,0xa6, + 0x27,0xb0,0xe8,0xac,0x52,0x16,0x20,0x05,0x15,0x86, + 0xd4,0xda,0x67,0xea,0xa4,0xf5,0xcf,0xc2,0xa9,0xb2, + 0x05,0x88,0x2a,0xa6,0xc9,0x3b,0x53,0xd9,0xaa,0x99, + 0xbd,0xc4,0x56,0x59,0x63,0x5c,0x41,0xbd,0xcb,0xf3, + 0x8e,0x52,0xbe,0x34,0xa7,0x22,0xb2,0x39,0x46,0x40, + 0x06,0xf1,0x75,0x76,0x4b,0x7b,0xfa,0x7e,0x59,0x80, + 0x25,0xae,0x52,0x33,0xfa,0xe5,0xc8,0xe3,0xb2,0xe2, + 0xd7,0x79,0x24,0x70,0xd8,0xc1,0x81,0x65,0xa2,0x82, + 0x06,0x0e,0xba,0xc0,0xd1,0xe0,0x28,0xb4,0xe3,0x89, + 0xd7,0x94,0xc9,0xc6,0x8b,0x68,0xc5,0x75,0x3d,0xf1, + 0x11,0x0c,0xe0,0x66,0xd8,0x13,0x3f,0xf8,0xd8,0x69, + 0x66,0x3b,0x2e,0xb2,0xfd,0xf7,0xf0,0x07,0xc7,0x1c, + 0xf2,0x83,0xb6,0xdb,0x16,0xe9,0xb5,0x63,0x14,0xd8, + 0x87,0x15,0xec,0x32,0x01,0xdd,0xf7,0x8c,0xbc,0xcf, + 0x94,0x2e,0x72,0x74,0xa5,0x9f,0xa6,0x9e,0xcd,0xb1, + 0xb3,0x10,0x44,0x42,0x2e,0x6f,0x40,0xd0,0x42,0xd5, + 0x6f,0xe3,0xf6,0x90,0x5d,0xb7,0x92,0x88,0x90,0xc8, + 0xfb,0x37,0xa0,0x6f,0x95,0x05,0x40,0x33,0xe6,0x80, + 0xa8,0x14,0xa1,0x28,0x1a,0x8d,0x32,0x77,0x50,0x04, + 0x54,0xa9,0x86,0xab,0x68,0x40,0x5e,0x2b,0xf9,0xa1, + 0xf5,0x77,0xbd,0x2c,0x18,0x49,0xb8,0x53,0x41,0xbf, + 0x3a,0xc4,0xa6,0xae,0x64,0x94,0x4e,0x82,0x63,0xb3, + 0x7d,0x0c,0xbb,0x66,0x13,0xd0,0x03,0xf0,0xf2,0x02, + 0xd7,0xef,0x4a,0x0b,0x97,0xbd,0x4c,0xfb,0x78,0x09, + 0xc0,0x5f,0xbd,0xfe,0xa6,0x9c,0xf7,0x3d,0x79,0xff, + 0xf1,0x44,0xe2,0x2d,0xb5,0x9e,0x78,0xd8,0x1c,0x60, + 0x44,0xf5,0x1f,0xfc,0x42,0xa0,0x3b,0xf7,0xe1,0x01, + 0x4d,0x7b,0x93,0xdf,0x08,0x37,0x29,0x58,0x1c,0x6a, + 0x6a,0xe2,0x42,0x7b,0xd7,0x23,0x46,0xab,0x53,0xe6, + 0xfa,0xe4,0x40,0x22,0x2a,0xb5,0x96,0x60,0x27,0xdf, + 0xad,0x35,0xc9,0x1f,0x40,0x6f,0x66,0xa9,0x24,0xbf, + 0x4b,0xe5,0xaf,0xc0,0x82,0xd4,0x9b,0xa1,0xae,0x73, + 0x53,0x30,0x76,0xad,0x3d,0x49,0xb9,0xdb,0x37,0xa1, + 0x89,0x13,0x50,0xc7,0x89,0xb9,0x90,0xfa,0xd2,0x2a, + 0xa4,0xcc,0x26,0xb0,0x74,0xe3,0xea,0xa4,0xa1,0x8e, + 0x14,0x54,0xf2,0x7e,0xb9,0xf0,0x14,0xb9,0xb1,0x32, + 0x28,0xfa,0x7a,0x0d,0x60,0x73,0x47,0x42,0xcc,0x40, + 0xff,0x00,0x04,0xbc,0x83,0xf6,0xf0,0x4e,0xb4,0x78, + 0x37,0x50,0x3c,0x65,0x16,0x1d,0x5e,0xd9,0x5a,0x1a, + 0xe0,0x41,0xa7,0x22,0x36,0x05,0x6b,0xed,0xbc,0xbf, + 0x52,0xdc,0xb2,0x67,0xf2,0x58,0x13,0x52,0xcb,0x3e, + 0x64,0xee,0x78,0x3e,0xa8,0x9d,0x24,0x08,0x65,0xd8, + 0x06,0x1b,0x00,0x73,0x3e,0x64,0x92,0x9f,0x83,0xfe, + 0xa8,0xa5,0xc8,0x89,0x76,0x2e,0x29,0x1b,0x2a,0xf3, + 0xff,0xac,0x81,0x20,0xdd,0x82,0x99,0x80,0x33,0xa4, + 0x8f,0x57,0x0a,0x9c,0x39,0x79,0x4a,0xdc,0x6b,0x1a, + 0x51,0xd3,0xd9,0x18,0x9e,0xa1,0x75,0x8a,0xf2,0x6a, + 0x15,0xba,0xf4,0x1b,0xa3,0xff,0x2a,0x9c,0x37,0x01, + 0x54,0xb6,0x16,0x1c,0x4f,0x5a,0xed,0x8d,0x2a,0x05, + 0x88,0x11,0x98,0x63,0x23,0xd5,0x7b,0xd8,0xb7,0x01, + 0xf9,0x27,0xe1,0xe0,0xfe,0xe5,0x44,0x5a,0xb9,0x13, + 0xdb,0x7b,0xcb,0x8e,0xf8,0x21,0x9c,0xc7,0x58,0xba, + 0xf0,0xe1,0xb7,0x94,0x87,0x9f,0x2a,0xcf,0xbc,0xe5, + 0x14,0x86,0x46,0x02,0xb7,0x60,0xe1,0x78,0x70,0x45, + 0x74,0x01,0xf0,0x40,0x75,0x58,0x59,0xa4,0x9b,0x80, + 0xac,0x9d,0x92,0x4d,0xf8,0x87,0x5d,0x5d,0xc7,0x1f, + 0xba,0xc0,0x6b,0xa0,0x4d,0x5c,0xb2,0x19,0x59,0x54, + 0x24,0x64,0xee,0xee,0x93,0xce,0x2a,0x28,0x36,0xbd, + 0x73,0x82,0xdd,0xcc,0x4d,0xdd,0x01,0x37,0x54,0x3f, + 0xaa,0x7f,0x00,0x16,0xac,0x56,0xc4,0xca,0x54,0xfc, + 0x94,0xcc,0xd6,0x0f,0x18,0xd5,0xac,0x04,0xc6,0x8f, + 0xc0,0x0b,0x90,0x45,0xd7,0x67,0x40,0x71,0x10,0xa5, + 0x0a,0x17,0xd5,0x7b,0x45,0x7e,0x0f,0x1f,0x15,0xfb, + 0xfa,0x95,0xbd,0x94,0x6c,0x21,0x3e,0xbc,0x8b,0x35, + 0xf7,0xf5,0x66,0xf1,0xfc,0x30,0xc9,0xe7,0x2f,0x03, + 0x0a,0x6e,0x1f,0x7a,0x7e,0x20,0x54,0x3d,0x2e,0x38, + 0x1e,0x08,0x83,0xd6,0x8f,0x33,0xf7,0xce,0x3b,0x83, + 0x43,0x40,0x35,0x8c,0x66,0xdd,0xc4,0x37,0xcf,0x86, + 0x31,0xd0,0x4b,0x0d,0x7a,0x23,0xc9,0x15,0xca,0x73, + 0x18,0x3e,0xb8,0x69,0x36,0x36,0xa0,0x4d,0x86,0xe5, + 0x57,0xcd,0xea,0xfc,0x2b,0x93,0xce,0xaa,0x4a,0x5f, + 0x1d,0x3e,0x05,0x6d,0xe7,0xdb,0x90,0xf7,0xd9,0xc6, + 0x3f,0x71,0xa7,0xd0,0xd8,0x41,0xd0,0x81,0x66,0x54, + 0xbc,0xaa,0x80,0x20,0xb2,0x1a,0x82,0xfe,0x68,0xf6, + 0x63,0xe6,0x65,0xd8,0xc9,0xfb,0x12,0x90,0x64,0x42, + 0x83,0xb6,0x43,0xbc,0xa6,0x14,0x3d,0x68,0x53,0x11, + 0x59,0xb0,0x95,0x8c,0xab,0x64,0xc0,0x7c,0xe6,0xbe, + 0xde,0xdf,0xbc,0x9f,0xa4,0xd8,0xef,0x93,0xf7,0xf9, + 0xce,0x92,0x65,0xd2,0xb5,0x7b,0x1f,0xfd,0xc7,0xd3, + 0x83,0xc2,0x1b,0x67,0x13,0xc9,0xfb,0xf7,0xb8,0x45, + 0x55,0xbb,0xe1,0xa6,0x9a,0xe1,0x46,0xb6,0x6c,0x35, + 0xa4,0x19,0x2b,0x76,0xa5,0x83,0xd6,0x13,0x2b,0x1b, + 0xb9,0x4d,0xf8,0x25,0xf3,0x8f,0xe3,0x1d,0x97,0xb4, + 0xf6,0xea,0xb9,0xd3,0xc8,0xfb,0xbc,0x76,0x76,0x8f, + 0xb1,0xec,0x13,0x86,0x15,0x67,0x61,0x1f,0x9f,0x57, + 0x67,0x1e,0x1f,0xff,0x6e,0xc3,0x36,0xe8,0x81,0x8e, + 0x7d,0x71,0x2e,0x07,0x5f,0x0e,0xf7,0x44,0x1d,0x92, + 0x91,0xb0,0xd0,0xea,0x46,0x93,0x1f,0x77,0x7e,0x49, + 0x56,0x26,0xc0,0xb4,0xe9,0xd6,0x1b,0xce,0xd6,0xa3, + 0xc1,0x68,0x82,0x83,0xd2,0xe5,0x18,0xa3,0x82,0x7c, + 0x69,0x3e,0x55,0xd9,0x80,0xf3,0xb3,0xbf,0x07,0x01, + 0x7f,0x4e,0xde,0x77,0xe7,0x5c,0x3c,0xfa,0x4a,0xd4, + 0xdc,0x36,0x04,0x1c,0x66,0xf2,0xfe,0x61,0x46,0xfd, + 0xe7,0x15,0x4c,0x5c,0x13,0x8f,0x45,0x95,0x2a,0x79, + 0x9f,0x8f,0x00,0xc6,0xac,0xfe,0xab,0xb6,0xcf,0xd8, + 0x94,0x52,0x74,0x7b,0xee,0xe3,0x71,0xed,0x90,0x87, + 0x35,0x15,0xc8,0xa3,0x9c,0x63,0x35,0x33,0xa5,0xa6, + 0xc0,0x1b,0x51,0x99,0x52,0x95,0xb3,0xf2,0xd9,0x15, + 0x1c,0x64,0x04,0x57,0x7d,0xb7,0xa6,0xb9,0x17,0x55, + 0x55,0xa4,0x15,0x0b,0x38,0x17,0x87,0x76,0x51,0xd3, + 0x35,0xec,0x7c,0x87,0xd7,0xe7,0xd9,0x73,0x2b,0xca, + 0xef,0x03,0x4b,0xdc,0x83,0x2d,0xc0,0x09,0x3b,0x0f, + 0x26,0xfc,0x06,0xbe,0xfa,0xfe,0x0c,0xb7,0x47,0x70, + 0x16,0xd5,0x3c,0x10,0x1b,0xf0,0xee,0x4b,0xb8,0x0c, + 0x4a,0xd5,0x78,0xf4,0x97,0x01,0x00,0x0f,0x1e,0x76, + 0x1c,0x3f,0x59,0xdb,0x57,0x7c,0x88,0xe1,0x61,0x8b, + 0xa9,0xe3,0x7e,0x08,0xf0,0x9c,0xc2,0x3f,0x18,0x36, + 0x48,0x93,0x62,0x6c,0x8b,0x7a,0x33,0x68,0xd3,0xc9, + 0xfb,0xa3,0xfa,0x4e,0xb0,0x83,0x36,0x3c,0xbb,0xef, + 0x8c,0x31,0x7c,0xfa,0x7b,0xac,0x1e,0xb7,0x80,0x69, + 0x3c,0x14,0x58,0x18,0x11,0x7e,0x6b,0x14,0x8a,0x4b, + 0xac,0xb4,0x9c,0xd8,0x9e,0xae,0x0c,0x76,0xb0,0xb0, + 0x8f,0x57,0xb1,0xe8,0x04,0x2e,0xde,0x1b,0xe7,0x6e, + 0x8a,0x80,0x12,0x2d,0xfb,0xef,0x05,0xa9,0xa3,0x7c, + 0xc3,0x38,0x6b,0xc9,0xbd,0xb2,0x01,0xb8,0xa5,0xc0, + 0x94,0xec,0xf6,0x0c,0x67,0xf1,0x0f,0x94,0x87,0x30, + 0x65,0xcc,0x27,0x58,0x29,0x3a,0x02,0x12,0x75,0x1b, + 0x88,0x6a,0xde,0x92,0xf3,0xbc,0xaf,0x00,0x08,0x7c, + 0x07,0x27,0xc8,0x13,0x8f,0x85,0x9f,0x94,0xa9,0x3f, + 0x59,0xf8,0x05,0x78,0x9c,0xa3,0xbf,0x8b,0x8b,0xa1, + 0x57,0xe4,0x6f,0x26,0x01,0xf9,0xc6,0x0e,0xfa,0x24, + 0xa0,0xf0,0x8c,0xf9,0x9d,0x67,0x8a,0x10,0x05,0x6c, + 0xb7,0x5f,0x6e,0x8c,0x8e,0xc0,0x17,0x39,0x78,0x0c, + 0xc0,0xc4,0x2b,0x76,0x9d,0x8f,0xaa,0xf6,0xe0,0x4e, + 0x45,0x0e,0x4c,0x45,0x41,0xdb,0x3c,0x49,0x62,0x7d, + 0x76,0x3b,0xee,0x47,0x6c,0xc7,0x8d,0x86,0xb8,0xb0, + 0xce,0xea,0x0e,0x6a,0x74,0x5e,0x56,0x06,0x9e,0xce, + 0x00,0xcf,0x14,0xbb,0xa9,0xd8,0x54,0xa3,0x53,0xce, + 0x20,0x83,0x2d,0xcf,0xbd,0x06,0x31,0x16,0xc3,0xc2, + 0xf2,0xa9,0x4b,0x1c,0x85,0x46,0x74,0x1a,0x69,0x38, + 0x93,0x72,0x0c,0xb5,0xa4,0x0a,0x48,0x71,0x53,0xfb, + 0xbc,0x3c,0x01,0x06,0x12,0xe2,0xc2,0xad,0x32,0x92, + 0x83,0xb4,0xaa,0xb3,0x54,0x88,0x43,0x6e,0xf8,0x61, + 0x36,0xc2,0xcb,0xfb,0x4f,0x67,0x25,0x6a,0x09,0x04, + 0x93,0x49,0xfb,0x7a,0x9a,0xb4,0xbf,0x85,0x47,0xe1, + 0x27,0xd1,0xe2,0xee,0x99,0xac,0x33,0xe8,0x38,0x80, + 0xff,0xbc,0x41,0x24,0xc8,0x0c,0x37,0x32,0x90,0xf7, + 0x81,0x37,0x8f,0x3f,0x3e,0x50,0x91,0xbc,0x6f,0xa8, + 0x78,0xef,0x7c,0x60,0x43,0xde,0x47,0xef,0xc5,0xd9, + 0x01,0xf0,0xe8,0x76,0xbb,0xbb,0x5f,0xf4,0x9a,0xbc, + 0xfd,0x3c,0xc2,0x83,0x3a,0x62,0xc0,0x28,0x1d,0x08, + 0x7a,0x7d,0x5c,0x83,0x85,0xd7,0x51,0x50,0xa9,0x36, + 0x2d,0x98,0x10,0xf4,0xf5,0x13,0xc0,0xd9,0x8d,0x92, + 0x5f,0x8b,0x1d,0xa3,0xf3,0x28,0xd7,0xd7,0x24,0xdf, + 0x1e,0x44,0xe5,0x78,0x16,0xc0,0x13,0xa1,0x7b,0x47, + 0x04,0xdb,0x83,0x02,0xc9,0x2c,0xf2,0x3e,0x36,0xe4, + 0x7d,0x48,0x80,0x48,0x25,0xc8,0x52,0x02,0x5d,0x9d, + 0x1c,0x25,0x4a,0xad,0x8e,0x16,0x46,0xe2,0x1f,0x31, + 0x71,0x01,0x38,0x9e,0xb8,0xe8,0x7c,0x12,0x2f,0xe8, + 0xda,0x34,0xb9,0x6d,0x65,0x3e,0xb5,0x38,0xed,0xf9, + 0x37,0xcf,0x3b,0x4e,0xf5,0x3c,0xdf,0x0c,0x87,0x9e, + 0xa7,0xbb,0xb9,0xd4,0x68,0xe4,0x7d,0x77,0x90,0x06, + 0xc2,0xce,0xeb,0xff,0x8e,0x0d,0x26,0xe0,0xa1,0x06, + 0x69,0xe7,0xde,0x34,0x68,0x78,0xb8,0xef,0xa8,0x2d, + 0x26,0x6c,0x15,0x96,0x36,0x66,0x0a,0xca,0x36,0xbc, + 0x18,0x81,0x66,0x78,0x5a,0xe6,0x8a,0x4d,0x94,0x63, + 0xdb,0x66,0x1b,0xe6,0x31,0x70,0x1d,0x5d,0xd1,0x02, + 0x50,0x8d,0xbd,0x46,0xde,0x9f,0xe9,0xfd,0x03,0x03, + 0xf7,0x92,0xaa,0x43,0x54,0xfe,0x74,0xa6,0xbf,0xd2, + 0xa8,0xe5,0x49,0x85,0x7d,0x9f,0x92,0xa1,0xb6,0x8e, + 0xf0,0x6c,0x3e,0x02,0xdf,0x13,0x8a,0x90,0x96,0x32, + 0x3b,0x56,0x83,0x11,0xb1,0xa4,0xab,0x44,0x42,0xc9, + 0x6e,0xd6,0x2d,0xfe,0xea,0x27,0xfe,0x57,0x0e,0xa1, + 0x78,0xf6,0x0e,0x3e,0xe0,0x09,0xde,0x00,0x85,0x3f, + 0x3e,0x03,0x27,0xef,0x6f,0x02,0x54,0x6e,0x13,0x62, + 0x38,0x79,0x9f,0x1b,0x91,0xd1,0xdd,0xf8,0xb0,0xfb, + 0x3a,0xee,0x4e,0x98,0x47,0xe1,0xcf,0xb0,0xd0,0x14, + 0x1c,0x6d,0x3b,0x91,0xc6,0x17,0x3b,0x43,0x06,0x20, + 0xac,0x61,0x84,0xee,0x05,0xc0,0x56,0x0e,0xac,0xcd, + 0x97,0xc1,0x13,0x70,0x08,0xf7,0xfd,0x1a,0xef,0x55, + 0x60,0xb4,0x62,0xda,0x25,0x2b,0x60,0x38,0x72,0x53, + 0x08,0x5a,0x1a,0x86,0x62,0x3a,0x0e,0xcc,0x7e,0xfd, + 0xce,0xff,0x64,0x51,0x8a,0x7d,0x9e,0xbe,0x9e,0xb5, + 0xce,0x29,0xe4,0x8e,0xcd,0x42,0x27,0x75,0xe7,0xf6, + 0x80,0xea,0xf8,0x0c,0x22,0x36,0x2b,0xc1,0x2c,0x9a, + 0x1c,0xd2,0xa5,0x0c,0x82,0xe8,0x6b,0x7d,0xc6,0xbe, + 0xfe,0x62,0xaf,0x7f,0x83,0xbc,0x3f,0x42,0xc0,0xb2, + 0x05,0xf2,0x4e,0x0b,0x91,0x9b,0x9a,0x7b,0xa4,0x04, + 0x2a,0x94,0x04,0x67,0xf2,0x3e,0xee,0x22,0x57,0xc0, + 0x0a,0xb8,0xad,0x12,0x02,0x1c,0x0f,0x9e,0x67,0x9e, + 0x75,0xf6,0x3e,0xa5,0xcd,0x54,0x3c,0x01,0x19,0xdb, + 0x18,0x8e,0xcc,0x9b,0x2d,0x35,0xe5,0xc1,0x45,0xb5, + 0x27,0x87,0x21,0x59,0x65,0xc8,0xf8,0x7a,0x16,0x81, + 0x85,0x0d,0xb8,0xe2,0x52,0x4b,0xb1,0x21,0x29,0xb6, + 0xd0,0x80,0x65,0x81,0x7a,0x4b,0x4c,0xc1,0x3d,0x80, + 0x61,0xbf,0xa6,0x8c,0xfa,0xfa,0x27,0xdd,0x9e,0x13, + 0x95,0x11,0x9c,0x12,0x2e,0x26,0x6d,0x89,0x61,0x78, + 0x03,0x4b,0xa7,0xa3,0x60,0x8c,0x89,0x62,0x48,0xe6, + 0x94,0xbe,0xe1,0x3d,0xcb,0xea,0xec,0xb2,0x1e,0xaf, + 0x75,0x94,0x99,0xcd,0x72,0x5d,0xf3,0xcb,0x98,0xb4, + 0x04,0xa1,0x2b,0xb0,0xc9,0xb1,0xfe,0x11,0x1d,0xf8, + 0x2d,0xf2,0xfe,0xe6,0x93,0x78,0x1c,0x60,0x70,0x0a, + 0x16,0x11,0xdd,0x36,0xac,0x12,0x37,0x2b,0x3d,0xb8, + 0x72,0x6d,0x67,0x85,0x9b,0xd2,0x13,0x77,0x73,0x45, + 0xa1,0xf6,0x46,0xeb,0xc6,0xd5,0x39,0xef,0x04,0xdb, + 0xb3,0xb4,0xf9,0xae,0x87,0x96,0xa3,0xb7,0xc1,0x6a, + 0xf7,0x24,0x4f,0x52,0xb0,0x93,0xf7,0x85,0x25,0x67, + 0xaa,0xbb,0xcc,0x74,0xe4,0x84,0x0d,0x50,0x04,0x40, + 0x53,0x4d,0x83,0x4d,0x07,0xc9,0xe0,0x41,0xc9,0x76, + 0x5d,0x3f,0x6f,0x94,0x8c,0xcb,0xdb,0x6e,0xd4,0x6b, + 0xa2,0x49,0xca,0x60,0xc5,0x5a,0xc6,0xa8,0x7e,0x7b, + 0xa8,0xc6,0x23,0xbb,0x6e,0xc2,0x0a,0x9e,0x16,0x94, + 0x80,0x0e,0xee,0x61,0x4d,0x15,0xce,0xc4,0x4c,0x5c, + 0x8d,0x18,0xd0,0x5f,0xf4,0x46,0xe3,0xe8,0xec,0x21, + 0xed,0xb0,0x50,0xca,0x10,0x65,0x7f,0xd6,0x6c,0xe5, + 0x23,0x01,0x80,0x7f,0x16,0x2c,0x0e,0x45,0x3c,0x6f, + 0x50,0xac,0x87,0xbf,0xfc,0x78,0x34,0xa8,0x8d,0x53, + 0x6f,0xa0,0x47,0xdc,0x07,0x32,0x6c,0x0b,0x8a,0x57, + 0x8d,0x29,0x20,0xc8,0x9c,0xf3,0xde,0xa6,0x14,0x81, + 0x59,0x08,0xd8,0x86,0x5f,0x0d,0x46,0xbb,0x24,0x25, + 0x8b,0x9f,0x5c,0x85,0xab,0x31,0x2d,0xf7,0xb2,0xdb, + 0xb9,0x99,0x7c,0x71,0x8c,0xf6,0x6c,0xda,0xd4,0xdf, + 0xaa,0x50,0x50,0xe1,0x91,0xad,0x37,0x43,0x4d,0x3b, + 0x56,0x2b,0xbc,0x8a,0x63,0x78,0x80,0x5f,0xde,0x82, + 0xae,0xf7,0xb7,0x06,0x7d,0xc0,0xa0,0xcd,0x3f,0xb4, + 0x3c,0xa8,0xe4,0x5e,0x5f,0x86,0xa5,0x98,0xbf,0x28, + 0xc2,0x4a,0x3b,0xa6,0x2e,0x58,0xb9,0x46,0x36,0x64, + 0x34,0x6d,0xdc,0x38,0x0a,0x9e,0x31,0x1a,0x86,0x54, + 0x8f,0xa9,0x6a,0x1d,0xca,0xf6,0x8f,0x6a,0x0b,0x17, + 0x19,0xde,0x7c,0xec,0x0d,0xc8,0x63,0xda,0x8d,0x1f, + 0x44,0x85,0x5f,0x23,0x0d,0x1b,0xca,0xf0,0x59,0x4b, + 0x80,0xb7,0x8b,0xf1,0xed,0x03,0xde,0xb8,0x8e,0xdc, + 0xb3,0x1e,0x11,0xa6,0x05,0xb0,0xea,0xce,0xd1,0x4d, + 0x39,0x10,0x8b,0x9c,0x78,0x6b,0x2d,0x49,0xd0,0x89, + 0x33,0x99,0xa6,0xa4,0x0f,0xd6,0xd4,0x4c,0xe1,0x2c, + 0x49,0xe6,0x59,0x88,0xf4,0xa8,0xa1,0x84,0xa0,0x4e, + 0xde,0x9f,0x22,0xa3,0xb4,0xc5,0x86,0x1a,0x35,0x72, + 0xa7,0x53,0x40,0xb0,0x0d,0x79,0x9f,0x45,0x58,0xe3, + 0xb5,0x30,0x89,0x00,0xf2,0xb1,0x48,0xfb,0xd7,0xcc, + 0x6e,0xed,0xa8,0x4b,0xcd,0xb7,0x87,0x89,0x15,0x69, + 0xec,0xba,0x5f,0xa2,0x27,0xd7,0x0e,0xac,0xcf,0xa0, + 0x8c,0xe5,0x2e,0x5b,0x35,0x16,0xaa,0x73,0x31,0x74, + 0x00,0x83,0x4d,0x91,0x2a,0x19,0xb1,0x03,0xb8,0x1c, + 0x6e,0xe6,0x5e,0x37,0x9d,0xd7,0x75,0x7b,0xe8,0x0d, + 0x78,0xe2,0x93,0xe1,0x80,0x02,0xdf,0x63,0xe7,0x1f, + 0x2f,0x3c,0x76,0x82,0xb4,0x7c,0x76,0x7e,0x3c,0x60, + 0x13,0xbc,0xbd,0x34,0xdc,0xe0,0x7c,0x0c,0x91,0x6a, + 0x33,0x2d,0xc0,0xb0,0xeb,0x59,0x6b,0xf0,0x94,0xb5, + 0x44,0xda,0xae,0x0c,0xab,0x38,0x79,0x3f,0xc6,0x4c, + 0x51,0xb6,0x49,0x67,0x90,0x66,0x17,0x51,0x2a,0x3c, + 0x94,0x80,0x60,0xe4,0x7d,0xa9,0x8b,0x3d,0xd5,0x75, + 0xe4,0x9c,0x02,0xe0,0xd9,0x2f,0x7b,0x4a,0x22,0x69, + 0x0d,0x4a,0x6b,0x6c,0x8d,0xc0,0xa2,0x09,0xb1,0xa0, + 0x95,0x17,0xcb,0xa9,0xc8,0x7d,0x00,0x65,0xb8,0x87, + 0x1c,0xc5,0x1f,0xb1,0x68,0x2c,0x32,0x14,0x0b,0x2a, + 0xc5,0x25,0x28,0xc2,0x74,0x1f,0x42,0xd1,0xff,0x07, + 0x75,0xc6,0xa2,0xe3,0x51,0x9c,0xfa,0x0f,0x28,0xf3, + 0x0f,0x45,0x75,0x49,0xb9,0x21,0x0a,0x4c,0x1b,0xfb, + 0xec,0xeb,0x4f,0xb6,0x69,0x7c,0x2c,0xd9,0xdf,0x1f, + 0x17,0xdf,0x3c,0xf0,0x67,0x2e,0x1c,0xdb,0xe1,0x22, + 0x8c,0x23,0x05,0x26,0x2f,0xc6,0x32,0x44,0xde,0x77, + 0x66,0xee,0xc6,0x10,0x77,0x12,0xd3,0x3c,0x67,0x2d, + 0x2d,0x0d,0x6f,0x95,0x09,0xc2,0x91,0xf3,0x50,0xee, + 0xe4,0x9c,0x63,0x0e,0xde,0x28,0x80,0xb7,0xf1,0x21, + 0xa8,0xac,0x36,0x98,0xd8,0x30,0x7a,0x77,0x61,0x62, + 0x18,0x58,0x13,0x76,0xae,0xe5,0xaf,0x0f,0xf4,0x32, + 0xde,0xe9,0x83,0x4f,0x7e,0x50,0xac,0x14,0xe3,0xf9, + 0xdd,0x22,0xaa,0x39,0x39,0x76,0x30,0x3f,0x60,0x69, + 0xd1,0xb0,0x93,0xf7,0x47,0x74,0x2e,0x1a,0x97,0x74, + 0xd8,0xba,0xe1,0x74,0x50,0x47,0x48,0x4d,0xb0,0x36, + 0x5d,0x37,0xb4,0x7e,0x81,0x8d,0x92,0x3d,0xd5,0x1b, + 0x23,0x5d,0x16,0xd5,0xfe,0x2b,0xb7,0xa2,0xb6,0x61, + 0xbf,0x9e,0x2f,0xe4,0x4f,0xb7,0x07,0xf9,0xbb,0x6f, + 0x7d,0x83,0xbc,0xcf,0x71,0xe0,0x02,0xfc,0x64,0xea, + 0x49,0x08,0x1e,0xa7,0x58,0xd4,0xfb,0xea,0xb6,0x28, + 0xb1,0x07,0x48,0xf1,0xe8,0xf7,0x7b,0xd6,0x71,0xed, + 0x9a,0x44,0x1f,0x18,0x52,0x78,0xaa,0x22,0xe8,0x2e, + 0x38,0x71,0x17,0xb6,0x91,0xcd,0x97,0x10,0xa2,0x90, + 0x89,0x7c,0xba,0x24,0xd8,0x1a,0xa9,0xed,0x02,0x69, + 0xb3,0x0b,0xb0,0x4b,0x8e,0x5e,0xba,0x7c,0xb4,0x34, + 0x7e,0x75,0xcc,0xfa,0xee,0xd8,0x65,0x5b,0x5f,0xa0, + 0x1c,0xac,0x9c,0xe5,0x2a,0x5b,0x04,0xaa,0x2b,0x40, + 0x62,0x06,0x34,0x2b,0x79,0xbf,0x8d,0x4e,0x09,0x79, + 0x9f,0xa3,0xb7,0xe8,0xb4,0x5f,0xd1,0xe3,0x3f,0x16, + 0x88,0x87,0xc0,0x52,0xe0,0xa8,0x76,0x72,0x16,0x11, + 0x89,0x9a,0x79,0xbd,0xa9,0x09,0x88,0x0f,0x67,0x0a, + 0x78,0x94,0x15,0x1c,0xd3,0xee,0x9d,0x8d,0xeb,0xed, + 0xee,0x7d,0x13,0xe4,0x90,0x96,0x97,0x94,0xcf,0xe0, + 0x21,0x49,0x7f,0x70,0x59,0xa2,0x50,0x50,0x26,0xef, + 0x33,0xb5,0xf2,0x30,0x42,0x63,0x8c,0x45,0x47,0xaf, + 0xc8,0x49,0x81,0xe1,0x31,0xc5,0x1e,0xe1,0x6c,0x48, + 0xf9,0x18,0x6e,0xeb,0xd3,0x5c,0xbc,0x51,0x47,0xf7, + 0x48,0xd4,0xf6,0xd7,0xab,0x27,0x16,0xc6,0xbe,0x0c, + 0x4c,0x84,0x4c,0xfc,0xf5,0x16,0x60,0xb9,0x11,0xc0, + 0x42,0xeb,0xe9,0x9a,0x79,0x1a,0x9e,0xd9,0xe8,0xb1, + 0x2a,0x5d,0x06,0xf6,0xe9,0x4c,0xc8,0x0c,0x3f,0x2d, + 0x13,0x5a,0x19,0x02,0x3a,0x1e,0x42,0x48,0xe7,0x87, + 0x0b,0x1f,0x68,0xed,0xce,0x65,0x64,0x82,0x0d,0x79, + 0xdf,0x65,0x66,0xca,0x30,0xe9,0xcc,0x2c,0xd0,0xfd, + 0x14,0x04,0xe9,0x6d,0x70,0x31,0x34,0x93,0x7a,0x05, + 0x80,0x5f,0x73,0xea,0x7f,0xb4,0x8a,0x9f,0xc5,0x0e, + 0xbc,0xfd,0xb5,0x3c,0x26,0xe9,0xe7,0xcf,0x78,0xa2, + 0xcb,0xc6,0xa8,0xaa,0x29,0xe8,0x88,0x42,0x59,0xa7, + 0x63,0xe7,0xd8,0xb5,0x1c,0x3b,0xdd,0xb3,0x3e,0x04, + 0xa7,0x70,0xe3,0x29,0x69,0xab,0x1a,0x1a,0x09,0xb1, + 0x17,0x03,0x2c,0xf5,0x30,0xcd,0xe4,0x53,0x1f,0x2e, + 0xa6,0x4c,0xcc,0xa7,0x0a,0x9d,0xb1,0x19,0x4c,0x30, + 0x2f,0x7f,0x46,0x35,0x2f,0x09,0x23,0x0e,0xc7,0xa7, + 0x62,0xa6,0xcf,0xee,0xb4,0x73,0x2d,0x0e,0xb1,0xc1, + 0x22,0x0a,0xbc,0xb8,0x9f,0xdc,0x1c,0x02,0x48,0x22, + 0xbb,0x33,0xa3,0x38,0x0d,0xb3,0x30,0x04,0x5b,0x70, + 0xd5,0xd9,0x7c,0x2d,0x99,0x92,0x2d,0x90,0x96,0x6a, + 0x6a,0x66,0x4a,0x9f,0xeb,0xc0,0x06,0xdf,0xd7,0x92, + 0xd3,0x4b,0xa8,0x51,0xc1,0xc7,0xab,0x04,0xf8,0x4d, + 0x6d,0xfe,0x64,0x4c,0x87,0xf8,0xcd,0xe7,0x9f,0x7e, + 0x96,0x11,0x9e,0xc4,0x71,0xf3,0x3d,0x0f,0x1b,0x61, + 0x57,0x6d,0xa3,0x53,0x64,0x73,0x65,0x9e,0xa7,0xfd, + 0x4a,0xdd,0xbc,0xcd,0xb2,0x19,0x3d,0x23,0xc6,0x16, + 0x34,0x3c,0x6b,0x27,0x75,0x75,0x72,0x1f,0x0d,0xbc, + 0x16,0xe3,0x22,0xb6,0x8c,0x8d,0x95,0x56,0x53,0xda, + 0x45,0x6d,0xaf,0x69,0x02,0x4f,0x4b,0xc9,0xb5,0x21, + 0xb0,0x7c,0xec,0x78,0x90,0x7d,0x61,0xec,0x6e,0x50, + 0x27,0xe3,0x76,0x66,0xb0,0x13,0x44,0xf7,0x7c,0xc2, + 0xa8,0xc5,0x6e,0x2c,0xca,0x5d,0xac,0x85,0xa5,0xfe, + 0xeb,0x10,0x70,0x04,0xc8,0x2f,0x39,0x74,0x0a,0x6f, + 0xbf,0xce,0xed,0xd7,0x98,0xc4,0xd2,0x0d,0xa2,0x76, + 0x37,0xb4,0x21,0x29,0x0a,0xc4,0xb3,0xe2,0x9a,0x9a, + 0x66,0xa8,0xca,0xd4,0x4c,0xc4,0xb3,0xa7,0x25,0xc0, + 0xad,0x06,0xf6,0xb9,0xdd,0xb5,0x1f,0xdb,0xff,0x1c, + 0xae,0xc0,0x07,0x23,0xc0,0x3c,0x2c,0x70,0x8e,0x07, + 0x46,0xa2,0xa3,0xe1,0x5a,0x45,0x19,0x38,0x2b,0xff, + 0xb3,0x67,0x4b,0xec,0x92,0xf1,0x5e,0x83,0x73,0x0b, + 0xd1,0xef,0xc3,0x0c,0x76,0xe8,0x25,0xf1,0x00,0x53, + 0x65,0xbf,0x5b,0xe0,0xb6,0x89,0x01,0xd7,0x32,0xbb, + 0xae,0x01,0x85,0xeb,0x40,0x6c,0xdc,0xd8,0x6c,0x50, + 0x80,0x68,0x1e,0x78,0x3a,0xcd,0x57,0xa8,0xb3,0x54, + 0x1f,0x3f,0x64,0x5d,0x02,0xf6,0x53,0x28,0x18,0x80, + 0x27,0x5f,0x54,0x5f,0xf9,0xd7,0x77,0xd3,0x46,0xa8, + 0xf5,0xdc,0x87,0xdb,0x7c,0x61,0xf6,0xfd,0xbd,0xfb, + 0xe3,0xf6,0xe9,0x70,0x90,0x14,0x75,0x93,0x44,0x69, + 0xf5,0xd0,0x5c,0x85,0xb5,0xfe,0x47,0xb3,0x50,0x2b, + 0xb3,0x19,0xe4,0x02,0x05,0xa5,0xbd,0x48,0x3b,0xf9, + 0x67,0x01,0x00,0x75,0xd4,0xe2,0xed,0x3d,0x7a,0x8b, + 0x92,0xe1,0x7e,0x99,0x3e,0x44,0xfb,0xb1,0x6b,0xe6, + 0x25,0xd6,0x20,0x33,0x46,0x80,0x06,0x16,0xed,0x40, + 0xc3,0xae,0x4c,0xf4,0x0e,0x79,0x9f,0x75,0xc8,0xae, + 0x3d,0xad,0x80,0xec,0xb2,0xd8,0xf4,0xda,0x7a,0x76, + 0x5d,0x11,0x77,0xca,0xc2,0xde,0x46,0x06,0xc3,0xaf, + 0x9b,0x27,0x1e,0x62,0x6b,0x15,0xd1,0xb3,0x40,0x6a, + 0x6a,0x98,0x04,0xb6,0x59,0x73,0x29,0x90,0x85,0xa2, + 0x86,0x95,0x29,0x9e,0x6b,0xa4,0x85,0xcb,0xe0,0xde, + 0x8c,0x4b,0xd7,0x9c,0xbf,0x2d,0xaa,0x4e,0xde,0x2f, + 0x8a,0x5d,0x3e,0x1a,0xab,0x3a,0x7b,0xda,0xbd,0x2c, + 0x4f,0x84,0x11,0x12,0xa6,0xf8,0x2a,0x29,0x8a,0x42, + 0xb2,0xc5,0x5c,0x7f,0xb7,0x07,0x4e,0x0d,0x5a,0xd6, + 0xfb,0x58,0x02,0x77,0x31,0x1d,0x25,0xf7,0xd9,0x2f, + 0x8a,0xe8,0x79,0x60,0x6f,0x22,0xae,0x91,0xaf,0xa7, + 0xbb,0x3a,0x7e,0x93,0xae,0xe3,0x79,0xd1,0xcf,0x13, + 0x79,0x3f,0xd9,0x4b,0x47,0xf8,0xfa,0x11,0x79,0xff, + 0x88,0x67,0xe0,0xd0,0x22,0x23,0x42,0xa8,0xb9,0x27, + 0xef,0xf7,0xae,0xae,0xb9,0xd8,0x94,0xff,0x02,0x8e, + 0x96,0xe8,0xb7,0x7e,0x07,0x18,0x73,0xb8,0x64,0xe7, + 0x5f,0xb8,0x26,0x0f,0xad,0xb5,0xd5,0x5a,0x46,0xa7, + 0x03,0xc0,0x5a,0x6c,0x46,0xde,0x67,0x32,0x43,0xc5, + 0x7e,0xa1,0xd7,0xfe,0x68,0x55,0x0d,0x00,0xaa,0x4e, + 0x6f,0x2d,0xdf,0x5f,0x60,0x20,0x4f,0x98,0x09,0x6a, + 0xd1,0x83,0x11,0xcd,0x3b,0x22,0x39,0xdc,0x69,0xc8, + 0x49,0x32,0xe1,0x92,0xe3,0x42,0xe7,0x5c,0x5d,0xe4, + 0x7d,0x15,0x0d,0x61,0x89,0x56,0x12,0x6d,0xca,0xe7, + 0xd8,0xf4,0x00,0xe8,0xd3,0x9d,0x6a,0xa0,0x32,0x34, + 0xe0,0xca,0x18,0x77,0xea,0xe0,0xbc,0xde,0xfd,0xf5, + 0x37,0x23,0x39,0x07,0xe8,0x0b,0x79,0x33,0xdd,0x26, + 0x05,0xa1,0x7f,0xbe,0xad,0x87,0xf1,0x78,0xae,0xef, + 0xc1,0x43,0xdd,0x67,0xdf,0x19,0xea,0x44,0xc8,0x4d, + 0xde,0x77,0x2c,0x30,0xee,0xad,0x90,0x10,0x39,0x45, + 0xdb,0xd1,0xa5,0xd0,0x9e,0x68,0x4d,0x2e,0x4b,0x5d, + 0x5b,0x57,0x63,0x0e,0xa4,0x2c,0xd5,0x62,0x16,0xf3, + 0x0b,0x4d,0xb1,0x79,0x16,0x51,0x35,0xf2,0x3e,0xa8, + 0x76,0x6b,0xa7,0xac,0x6e,0x4b,0xde,0x3f,0x00,0x1b, + 0x6c,0x62,0x1e,0xb0,0x92,0xa5,0x33,0x2b,0xb9,0xd0, + 0x79,0xca,0x0e,0xf9,0x72,0xd0,0x29,0xe6,0x1d,0x74, + 0x49,0x35,0x55,0xe0,0x6d,0x8a,0x01,0x55,0xc3,0x95, + 0x06,0xba,0xc5,0xc1,0xae,0xd7,0xc2,0x86,0x0e,0x20, + 0xd5,0x6e,0x4a,0x13,0x45,0x2f,0xc0,0x89,0x05,0x5e, + 0x28,0xe1,0xd7,0x84,0x65,0x11,0x4a,0x20,0xd9,0xd2, + 0xff,0xdc,0x1a,0x6c,0x07,0x8b,0xa4,0x87,0xf4,0x79, + 0x99,0x30,0x9e,0x8c,0xed,0xbf,0x7d,0xc4,0x80,0xa3, + 0xe1,0x72,0xd1,0x50,0xe7,0xec,0x71,0x00,0xda,0x6e, + 0x17,0x0c,0x3d,0x1a,0x22,0x00,0x8c,0x0c,0x4a,0x73, + 0x1d,0x78,0xab,0x23,0x24,0x81,0xd8,0x33,0xf6,0x13, + 0x98,0xae,0x7b,0xbf,0x26,0xde,0xd8,0xb5,0x1a,0x13, + 0x24,0x6a,0xe3,0xa8,0xa1,0xc1,0x57,0x26,0x30,0x99, + 0xee,0x29,0xd1,0xb1,0x01,0x4b,0x6d,0x1d,0xc9,0xde, + 0xa9,0xc9,0x17,0x61,0x15,0x6d,0x83,0x99,0x65,0x58, + 0x71,0xf0,0x45,0x65,0x4f,0x56,0x6f,0xc2,0x0b,0x45, + 0xc7,0x06,0xa7,0x65,0xd0,0xde,0x43,0x21,0x17,0x21, + 0x3a,0xb5,0x55,0x53,0x8f,0xb6,0xcb,0xa0,0x3e,0x23, + 0xda,0x85,0x41,0x93,0x52,0xf7,0x82,0x0d,0xe6,0x58, + 0xb5,0x46,0xaf,0x97,0xa4,0xd9,0x6a,0x4d,0x7e,0xfd, + 0x76,0x69,0xff,0x65,0xfc,0xf8,0xa9,0x32,0x11,0x8f, + 0xf8,0xe2,0x41,0x11,0x23,0x15,0x3b,0xdc,0x8c,0x09, + 0xef,0xc9,0xfb,0x75,0xc1,0x84,0x81,0x8c,0x9c,0xe1, + 0xd0,0x50,0x76,0xb4,0x3e,0x33,0x36,0x94,0xe3,0xb1, + 0xe5,0x25,0xad,0x3d,0xaa,0xe1,0x1f,0xac,0x82,0xa4, + 0x13,0x02,0x54,0xe3,0xca,0x68,0x9a,0xac,0xbd,0x66, + 0x74,0xe4,0x9c,0x23,0x10,0x6f,0x46,0x9d,0x01,0xd8, + 0xce,0x84,0xc3,0xe4,0xc1,0x56,0x9a,0x0c,0xa4,0xc7, + 0xde,0x67,0x13,0xf4,0xbd,0x42,0x2f,0x40,0xaf,0xdd, + 0x79,0x7c,0x2a,0x6a,0xdf,0x1e,0x66,0x14,0x4b,0x66, + 0xd6,0x28,0x36,0x9c,0x93,0xea,0x7b,0x20,0x9d,0x11, + 0xd0,0x70,0xd6,0x0e,0xfc,0x12,0x6c,0x1a,0x04,0x95, + 0xe9,0xd7,0xa9,0xcf,0x90,0xd2,0x60,0x65,0x71,0xdf, + 0x1c,0x0d,0x4e,0x9d,0xb1,0xef,0xb2,0xe4,0xeb,0x77, + 0x2d,0xbe,0x1f,0x34,0xf2,0xf8,0xbb,0x8f,0x83,0x77, + 0x9d,0x7d,0x96,0x56,0x07,0xb7,0xcd,0xbd,0x11,0x91, + 0xe7,0x93,0xc4,0x57,0x9a,0xd7,0x3a,0x97,0xc8,0x8c, + 0x8c,0xb9,0x0a,0x52,0x21,0xd4,0x66,0x38,0x78,0x08, + 0xf9,0xa3,0xc5,0x9c,0x4e,0xef,0x72,0x93,0x4a,0xde, + 0x17,0x3e,0x0c,0x32,0x50,0xe9,0xa9,0x77,0x5b,0xc0, + 0x58,0x8b,0x84,0x21,0x6e,0xb0,0xce,0x11,0xb0,0x80, + 0xca,0x5c,0x6d,0xae,0x80,0xc1,0xd4,0xf7,0x5e,0x29, + 0x7b,0x50,0x79,0x6e,0x93,0x79,0xb5,0x01,0x82,0x96, + 0x5d,0xa1,0x6b,0xa3,0xb0,0x63,0x48,0x33,0x3c,0xb2, + 0x9a,0x84,0xc2,0xa4,0xe3,0xca,0x82,0x96,0x90,0x5b, + 0x26,0x2f,0xcb,0x31,0xb3,0xec,0xd8,0x4b,0xfd,0x88, + 0xa1,0xdb,0x14,0x50,0x09,0x2b,0x03,0x96,0x8c,0x25, + 0x45,0x17,0xd0,0xf4,0x2d,0x2f,0x66,0x23,0xea,0x26, + 0xf9,0xcf,0xdb,0x83,0xe3,0x87,0x6f,0xe5,0xae,0x24, + 0xc8,0xe4,0x7d,0x16,0xbc,0xe6,0x06,0x32,0x2b,0xda, + 0x94,0xd8,0xb6,0xfc,0xf6,0x09,0x44,0x9f,0xe1,0x47, + 0x30,0xb5,0x87,0xa1,0x8d,0x60,0xfd,0x50,0x7b,0x50, + 0x75,0xc6,0x7d,0x13,0x65,0x10,0xac,0xc8,0x76,0x41, + 0x92,0x3d,0xda,0x6d,0xb0,0x41,0x36,0x00,0xf0,0xd4, + 0xd8,0x80,0x7d,0x97,0xb6,0xd7,0x8b,0x16,0x1e,0xeb, + 0x34,0xdb,0x2c,0x5c,0xbc,0x85,0x4f,0xed,0x16,0xac, + 0x66,0x20,0x05,0x28,0x73,0x99,0x33,0x36,0xcb,0xdc, + 0xb1,0x19,0x91,0xe9,0xa5,0x4a,0x9b,0x90,0x2b,0x49, + 0xc6,0x02,0xf0,0x54,0x7b,0x94,0xd4,0x6b,0x75,0x2e, + 0x75,0x93,0x53,0x74,0x9d,0x45,0x18,0xab,0xb5,0x17, + 0x2a,0xc3,0x8e,0x29,0xa3,0x9f,0x91,0x26,0x66,0xd4, + 0x00,0x84,0x22,0x1d,0xb8,0x60,0x02,0x7e,0xca,0x1d, + 0xf8,0x2f,0xb1,0x83,0x11,0x76,0xe8,0x67,0x6f,0xde, + 0x29,0xed,0xbe,0x1d,0x94,0x4e,0xf1,0xc6,0x59,0x86, + 0xe0,0x59,0x9c,0x24,0x6e,0xcc,0xc9,0x90,0x8f,0xeb, + 0x25,0xe3,0xc5,0x27,0x44,0x17,0x96,0x42,0x73,0x13, + 0x24,0x5b,0x0a,0xae,0xc8,0xb4,0x91,0xf7,0x95,0x6b, + 0xbe,0xca,0x73,0x6c,0xf0,0xbc,0xe6,0x4c,0x2f,0xc1, + 0x48,0xa2,0xa8,0x00,0xa5,0x0d,0x0c,0x9e,0x3b,0x2d, + 0xeb,0xfb,0xd4,0xea,0x1b,0x1c,0xdb,0x1e,0x6e,0xc2, + 0x5b,0x6f,0x2c,0x9c,0x20,0x6a,0x39,0x60,0x28,0x29, + 0xc6,0x68,0xe4,0xfd,0x32,0x8d,0x2d,0x26,0x9d,0x28, + 0x39,0x19,0x7b,0x22,0x76,0xe9,0x1f,0x98,0x46,0xa1, + 0xce,0x9b,0x42,0xaf,0x35,0xbc,0x4a,0x7c,0xcd,0x4e, + 0x22,0x20,0x9c,0x14,0x18,0xf9,0xc2,0x38,0x24,0x30, + 0xb9,0x21,0xb3,0x06,0xbb,0xaf,0xbf,0x58,0xab,0xcf, + 0xbe,0xf3,0xa0,0x51,0xcd,0x3d,0x07,0x80,0x6f,0x1e, + 0xe6,0x6e,0x32,0xef,0x34,0x35,0xb7,0x9d,0xbd,0xb9, + 0xb3,0x29,0xf4,0xa7,0x91,0xfb,0xb1,0xe4,0xbd,0x32, + 0xc1,0x26,0x8f,0x1e,0x1d,0x70,0xaa,0xb1,0x23,0xd8, + 0x55,0x85,0x07,0xa0,0xfd,0xde,0xa5,0x66,0x03,0xf5, + 0x14,0x5a,0x4c,0xf2,0xd5,0xd3,0x67,0x90,0x6b,0xa3, + 0x39,0x6a,0xb9,0x07,0xb1,0xeb,0xff,0xb1,0x32,0xf1, + 0x94,0x6f,0x57,0xb6,0x42,0xe6,0x18,0xd9,0xc9,0xfb, + 0xe1,0xde,0xb1,0x88,0x5e,0x76,0x18,0x15,0x6d,0xf8, + 0x57,0x19,0x74,0xf3,0x5c,0x4d,0xf3,0x90,0x34,0x39, + 0x35,0x5c,0x0b,0xba,0x16,0x62,0x88,0xda,0xc2,0x0c, + 0x20,0xa1,0x6e,0x56,0x22,0xb7,0x1e,0x70,0x0a,0x4c, + 0xa7,0x64,0x55,0x35,0x36,0x89,0x70,0xc7,0x0c,0x90, + 0xc0,0xde,0xee,0x11,0xfd,0xf5,0x68,0x35,0xfd,0x19, + 0x79,0x7f,0xf3,0x02,0xde,0x51,0x26,0x38,0xbf,0x86, + 0xb8,0xc8,0xde,0xff,0x9e,0x3c,0x08,0x71,0xe3,0x38, + 0x07,0x74,0x73,0x09,0x2b,0xc5,0x77,0x51,0x8e,0x3b, + 0xa6,0xe0,0x8e,0xbc,0x9f,0x5a,0x96,0xa3,0xb5,0x97, + 0xcb,0xc3,0xc1,0x81,0x96,0x25,0xc1,0x65,0x24,0xc8, + 0x81,0x2d,0x76,0xe2,0x73,0x07,0xe1,0x6a,0xb3,0x66, + 0x08,0xeb,0x91,0x47,0x51,0xaa,0x2d,0xe6,0x20,0xc0, + 0x7e,0xc4,0x63,0x18,0xcd,0x7a,0xb8,0xf6,0x9d,0x7b, + 0x2e,0x50,0xea,0xf3,0x3a,0xd5,0x8f,0x20,0xb8,0x0c, + 0xab,0x95,0xeb,0xbd,0xbc,0x66,0x1b,0x20,0x76,0xe3, + 0x9c,0xe7,0x9d,0x26,0x49,0x55,0x95,0xd8,0x0c,0xcb, + 0xcb,0xfd,0xd3,0xe3,0x64,0xc3,0xbb,0x30,0xb0,0x2b, + 0x63,0xe8,0xde,0x57,0x10,0x0c,0xa2,0x07,0x03,0x72, + 0xb5,0x7c,0xcf,0xd6,0x60,0xff,0xc4,0x78,0xc0,0x1b, + 0x49,0x06,0x1f,0xbc,0xca,0x5f,0xc5,0x9e,0xe7,0x47, + 0xc0,0xb8,0x6b,0xbf,0x9b,0x9a,0xd0,0x6d,0x84,0xc3, + 0x8e,0x97,0x40,0x49,0xe6,0xb4,0x28,0x73,0x6f,0x62, + 0x0d,0x9c,0x40,0xec,0xb6,0x97,0x4e,0x72,0x61,0xa7, + 0x2e,0xf6,0x99,0x9f,0xe5,0xe2,0xd3,0x72,0x2e,0xa4, + 0x7c,0x41,0x82,0x8a,0xf4,0xe4,0x63,0xe6,0x77,0x8d, + 0x18,0x23,0xd5,0xd2,0x02,0x20,0x42,0x3a,0x25,0x4c, + 0xec,0x02,0xb4,0xf9,0xa3,0x32,0x77,0x3f,0x96,0x4c, + 0x58,0x59,0xa6,0x1b,0xd7,0xf6,0x12,0x38,0x41,0x91, + 0x0c,0x37,0x68,0xb6,0xb4,0x23,0x11,0x6a,0x5a,0x11, + 0xf5,0xa0,0x0f,0xc2,0x29,0x62,0x87,0x7c,0x51,0x61, + 0x52,0x68,0xac,0xb2,0x6f,0x10,0x00,0x50,0xe5,0xc6, + 0x38,0xde,0xa6,0x03,0xef,0xb1,0xaf,0xcf,0x27,0x04, + 0x7c,0x06,0x08,0xbe,0x1d,0xb3,0x36,0x79,0xfc,0x23, + 0x4a,0x23,0x0e,0xb0,0x00,0xce,0xd2,0x04,0xd8,0x81, + 0x99,0x28,0x45,0x1f,0x63,0x50,0xdb,0xb7,0x25,0xc7, + 0xa8,0x26,0x96,0x4f,0x42,0x96,0xef,0x6e,0x09,0xb1, + 0x98,0xa3,0xad,0x0f,0x65,0x51,0x46,0x99,0x8f,0x37, + 0x02,0xcc,0xc8,0x2c,0x63,0x95,0x3c,0x9b,0x7a,0x00, + 0x70,0xfa,0x01,0x37,0x06,0x31,0x68,0xe7,0x82,0x80, + 0x77,0x50,0xcd,0x3d,0x54,0x8b,0xdf,0x8c,0x4a,0x1c, + 0x50,0x85,0x02,0x15,0x5a,0x48,0x87,0x6b,0x32,0xf7, + 0x76,0x8e,0xe6,0xf8,0x53,0x32,0x4e,0xa8,0xf9,0x29, + 0x33,0x81,0x49,0xb5,0x17,0x5b,0xf9,0xc8,0xc8,0xe1, + 0x82,0xfc,0x76,0xcd,0x3a,0xe9,0xd2,0x04,0x95,0xc3, + 0xfd,0x12,0x26,0xfd,0xfa,0xd5,0x62,0x7d,0x62,0x12, + 0xf1,0x17,0xad,0x02,0xec,0xab,0xf7,0x3c,0x8e,0xe2, + 0x6c,0x6e,0x3b,0x56,0xfc,0xfe,0x48,0x97,0x0b,0xcb, + 0x4d,0x02,0x80,0xfd,0x1f,0x11,0x2c,0xa6,0xfd,0x61, + 0x68,0xf5,0x21,0xf7,0x51,0x39,0x86,0xac,0x83,0x91, + 0x91,0xc9,0x07,0xe4,0x01,0x18,0x23,0xe8,0x41,0x31, + 0x8b,0x22,0x4d,0x80,0x06,0xf4,0xd1,0x65,0xb4,0x4a, + 0xba,0x82,0x80,0x7c,0xa3,0x08,0x66,0x50,0x76,0x32, + 0xbd,0xdb,0x75,0x5e,0x82,0x22,0x4d,0x70,0xf5,0xc1, + 0x45,0x92,0xeb,0x15,0x08,0xc8,0x90,0x19,0x78,0x35, + 0xa5,0xa3,0xda,0x1b,0xed,0x09,0x96,0x19,0x84,0xb5, + 0x42,0x4b,0xc1,0xa3,0x00,0xea,0xce,0xf0,0x04,0x35, + 0x3b,0x5b,0xde,0x5f,0xeb,0xfb,0x49,0x95,0x6a,0x67, + 0x03,0x8c,0x8d,0xeb,0xbd,0xac,0x03,0xae,0x73,0x23, + 0x5f,0xea,0xc8,0xeb,0x85,0x0f,0xab,0x02,0xe3,0xb1, + 0x35,0xf7,0xb3,0xdd,0x99,0x6f,0x1e,0x45,0xb2,0xbd, + 0xcc,0x46,0x0b,0xfc,0xc8,0xf9,0x6e,0xc2,0x41,0x94, + 0xe3,0xda,0x28,0x66,0x79,0x7a,0xcf,0x20,0x25,0x0e, + 0x34,0xda,0x7e,0x31,0x57,0x25,0x7b,0xe3,0xfc,0x71, + 0xf0,0xe4,0x41,0x9a,0x20,0xec,0xc3,0x6e,0xee,0x49, + 0x34,0xf7,0xed,0x96,0x2b,0xd0,0x8d,0x35,0x82,0x34, + 0xd9,0xec,0xc3,0xb3,0x4e,0x72,0x91,0x4d,0xe2,0x0c, + 0xee,0x56,0x54,0xa6,0x89,0x43,0xde,0xa2,0xa3,0xbd, + 0x65,0x17,0x67,0x19,0xb1,0xa5,0x8d,0xcd,0xba,0xdd, + 0xea,0xf9,0x7a,0xd2,0x16,0x7c,0x78,0x9a,0x11,0x80, + 0xda,0x10,0xf4,0x47,0x1b,0x61,0x36,0x3e,0x04,0x84, + 0xd1,0x34,0x6a,0xa0,0xa0,0xfc,0xbd,0x29,0x2d,0xe1, + 0xdb,0x41,0x49,0x7b,0x47,0x5f,0x9f,0x80,0xfc,0x71, + 0xb7,0x79,0x3f,0x4e,0xb1,0xef,0x7a,0xfc,0x63,0xb3, + 0xbf,0xdf,0x7d,0x7f,0x67,0xef,0x45,0xd8,0xe6,0x61, + 0xf0,0xc2,0x8f,0x2e,0xcc,0x33,0x99,0x2f,0xdb,0x82, + 0x72,0xaa,0xe1,0xb6,0x5f,0x4b,0xa9,0x64,0x73,0xa9, + 0xb9,0xa9,0x7c,0x96,0xe2,0xc5,0xc2,0x99,0x5d,0x9a, + 0x4b,0x29,0xbe,0x9c,0x79,0x6a,0xa1,0x9f,0x36,0xdb, + 0xeb,0x1e,0xd8,0xb2,0xe4,0x4a,0x97,0x26,0x98,0xfe, + 0x06,0x10,0x82,0x0c,0x5e,0x0a,0x3c,0xe8,0x81,0x53, + 0x25,0xd4,0x9b,0x8c,0x66,0x51,0x25,0x16,0x0c,0x44, + 0x07,0x62,0x80,0x0d,0x30,0x8b,0x51,0x44,0x48,0x99, + 0xd5,0x55,0xd4,0xe9,0x97,0xa8,0x25,0x59,0x99,0xeb, + 0xc0,0x92,0x1f,0x2b,0xa5,0x45,0x9b,0x9d,0xb0,0x6c, + 0x27,0x6e,0x60,0xaa,0xf2,0x5c,0xf2,0x4f,0x7b,0xb7, + 0xd6,0x0a,0x8a,0xed,0xac,0x81,0xaa,0x5b,0x67,0xa0, + 0x8f,0x24,0xf5,0x3f,0x2a,0x15,0x78,0x84,0xfb,0xe0, + 0xb3,0xea,0x37,0x76,0x61,0x9a,0xdb,0x32,0x04,0x9c, + 0x3e,0xb7,0x13,0x26,0xce,0x9e,0x66,0x2e,0xb8,0x87, + 0x2a,0x5b,0xea,0xfe,0x98,0xc0,0xa0,0xea,0x05,0xb9, + 0x4a,0x8f,0x48,0x1a,0xd2,0x61,0x42,0xbe,0x09,0xb1, + 0x94,0xd2,0x79,0xf9,0xe8,0x4a,0xdc,0x0c,0x3f,0x18, + 0x0d,0x4f,0x40,0x55,0xf9,0xdd,0xd7,0x47,0xc5,0x0f, + 0x55,0x53,0x60,0xee,0x45,0x5b,0x9c,0x91,0xb9,0x54, + 0xc8,0x68,0xc3,0x35,0xdd,0x1b,0xad,0xee,0xd6,0xb4, + 0x09,0x48,0xf3,0xa2,0x44,0x3d,0x2e,0xbe,0x02,0x63, + 0x6f,0x55,0xae,0x6b,0x98,0x1c,0x80,0x28,0x69,0x7c, + 0xb3,0xfb,0x98,0xd2,0x04,0x5c,0xc6,0xa3,0x88,0xa8, + 0x42,0x33,0x2e,0xb9,0xe6,0x16,0x48,0x76,0x60,0x5c, + 0x82,0x21,0x66,0x0b,0x84,0xf7,0x25,0xc0,0xdf,0x34, + 0x03,0xf0,0xe0,0x61,0xc7,0xe1,0x93,0xe8,0xe8,0x34, + 0x9e,0xfd,0xee,0xbb,0xd2,0x04,0x3b,0x26,0x33,0x23, + 0xcc,0xfb,0x24,0x8e,0x99,0x27,0x1c,0x7c,0x51,0x1b, + 0x8a,0xc1,0x04,0x80,0xa9,0x50,0x86,0x2e,0x40,0x9b, + 0x24,0xbb,0x97,0x26,0x70,0x55,0xb9,0xf9,0x17,0x55, + 0xd1,0x71,0xdf,0xba,0xb4,0x30,0x60,0xf0,0x5b,0x14, + 0x4d,0xa1,0xf3,0x23,0xd8,0xec,0xc3,0x7a,0xb3,0xa3, + 0x4c,0x22,0xc5,0x1b,0x84,0xe2,0x48,0xb4,0x3a,0x12, + 0xb5,0x12,0x5f,0x8b,0xec,0xa2,0x47,0xaf,0xf9,0x86, + 0x65,0xfa,0xb9,0xb3,0x04,0x2b,0xf7,0x86,0xa2,0x6e, + 0x6c,0x5d,0x03,0x90,0xbd,0xf5,0x3b,0x49,0x38,0x2e, + 0x4d,0x80,0x42,0x11,0x86,0x4a,0x8f,0x4b,0xd4,0x6d, + 0x20,0x2a,0x11,0x0a,0x5f,0xce,0x59,0x05,0xbc,0x7c, + 0x10,0x08,0x51,0x46,0xc6,0xc2,0x4f,0x28,0x82,0xb0, + 0xbf,0xc4,0x00,0xf8,0xc1,0x77,0xbd,0xb1,0x1b,0x8e, + 0xed,0x90,0xed,0xa3,0x1f,0x46,0x5a,0x60,0xed,0xa3, + 0x5d,0x9e,0x19,0xf9,0x09,0xad,0x48,0xcb,0x4f,0xa5, + 0x09,0x88,0xb1,0x71,0x0a,0xf0,0x55,0x54,0x73,0x18, + 0x8c,0x38,0x07,0xd0,0x6a,0xcd,0xb1,0xd9,0xc1,0xe7, + 0xe9,0xec,0x67,0x68,0x81,0x03,0x6a,0x18,0x5f,0x70, + 0x77,0x62,0x96,0x0c,0x8b,0x08,0x4e,0xa5,0xac,0x5c, + 0x01,0x65,0xe4,0xcd,0x14,0xdb,0x19,0x89,0xac,0xbb, + 0x3b,0x67,0x90,0x41,0x9b,0xa3,0x4a,0x1d,0xf5,0xab, + 0x65,0x88,0xd1,0xfb,0xf4,0x43,0xe4,0xb8,0x7c,0xb4, + 0x1a,0x18,0x1b,0x1b,0xf8,0xb5,0x31,0x31,0x81,0x40, + 0x70,0x67,0xe3,0x05,0x18,0x52,0xc8,0x06,0xdc,0x95, + 0x6f,0xd6,0x65,0xe8,0xd2,0x04,0xeb,0x7a,0xb9,0x8e, + 0xc0,0x70,0x6c,0xf1,0x09,0x1b,0xf0,0x1d,0xc9,0xce, + 0xdd,0xa0,0x1c,0xc7,0x9b,0x35,0x33,0x7f,0x17,0x7c, + 0x72,0xdb,0x88,0xd1,0x8a,0x1e,0x07,0x80,0x1c,0xa1, + 0x12,0xd7,0x76,0x0b,0xb2,0x74,0x44,0x2b,0xb9,0x1e, + 0x1d,0x3f,0xb1,0x79,0xa0,0x38,0xaa,0x14,0x6c,0xad, + 0x0b,0xa9,0xfc,0x7d,0x2d,0x2f,0xe0,0xe8,0x92,0x7c, + 0xc5,0xd6,0x66,0x1c,0xa3,0xb2,0x5e,0x1e,0xdc,0x8a, + 0xa8,0x5f,0xcf,0x0e,0x6e,0x75,0x71,0xec,0x5c,0xa2, + 0x94,0x0e,0x84,0xaa,0x8d,0xc9,0x90,0x90,0x4e,0x49, + 0x25,0x83,0xd4,0x2e,0x4d,0x20,0x3b,0xe1,0x10,0x05, + 0x1f,0x03,0x38,0x39,0x0e,0xd2,0x04,0x18,0x49,0xb9, + 0x70,0x75,0x2f,0xd1,0x54,0x99,0x10,0xbc,0x1d,0x95, + 0xb8,0x33,0xd3,0x7b,0xc3,0x79,0x8b,0xdc,0xda,0xb0, + 0xd6,0x65,0x71,0x58,0xea,0x13,0x85,0x2e,0x66,0xe3, + 0x43,0x42,0xf4,0x08,0x76,0xdf,0x05,0x78,0xaf,0x00, + 0xc0,0xaf,0xbf,0xe1,0x0d,0xbc,0x20,0xd0,0x74,0xc9, + 0x9d,0x87,0x11,0xc6,0x3d,0x2d,0x80,0xb7,0x20,0x1d, + 0x36,0xd3,0x80,0x48,0x75,0xf1,0xed,0x60,0xf2,0xae, + 0x2f,0xa1,0x75,0x2c,0xaa,0x0d,0x77,0xd0,0x8e,0xd8, + 0xf3,0x06,0xd3,0x98,0x5b,0x0a,0xdc,0xac,0x35,0x32, + 0xc2,0xf5,0x38,0xcc,0x31,0x67,0xca,0x13,0xcd,0x5c, + 0xe4,0xe1,0x7d,0x25,0x8b,0xbe,0x22,0xa7,0xdf,0xa6, + 0xa2,0xe3,0x79,0x20,0x86,0x42,0x5e,0x00,0x0f,0xe5, + 0x1f,0x4c,0x26,0x4b,0xd5,0x8e,0x65,0x67,0x86,0xcd, + 0xec,0x7f,0x7f,0x2f,0x47,0x72,0x14,0x0f,0x28,0x86, + 0x59,0xab,0xb1,0x76,0x28,0x64,0xec,0xb8,0x97,0x0c, + 0x30,0xd6,0xa2,0xd4,0x57,0xdc,0x0b,0xec,0x5e,0xe6, + 0xa7,0x05,0x77,0x99,0xc2,0xa3,0xfa,0xeb,0xf5,0x39, + 0xfb,0xfa,0x14,0xd8,0x87,0x1f,0x7f,0x03,0x6f,0x5e, + 0xc1,0x11,0xd7,0xd3,0x8d,0xfe,0x16,0xbe,0xe4,0x0f, + 0xcf,0xe0,0x98,0xc6,0x48,0x5b,0xa6,0xb8,0x33,0xa4, + 0x59,0x3e,0xec,0x91,0x7f,0x75,0xbb,0x89,0x06,0x99, + 0xc3,0xc4,0xfe,0x05,0x11,0xd9,0x4a,0x13,0xb0,0xad, + 0xaf,0x3a,0xe9,0x32,0x3a,0x10,0x6a,0x0b,0x8d,0x8c, + 0xd8,0x99,0xed,0x96,0x6b,0x87,0x81,0x51,0x00,0xbb, + 0x7c,0x57,0xbf,0xde,0x2c,0xd6,0xc7,0xac,0xd6,0x69, + 0x18,0xd5,0xf1,0xa6,0x75,0x3b,0x28,0xd2,0x04,0x0a, + 0x8c,0xd6,0xc9,0x7f,0x7a,0x26,0x57,0x8e,0x7c,0x54, + 0xa9,0x74,0x91,0xf7,0x2a,0xc4,0x65,0xb1,0x2d,0x1f, + 0xcc,0xf5,0xe4,0x2c,0x06,0x80,0x02,0x0c,0x3a,0xa7, + 0xbf,0x00,0xaf,0xe8,0x29,0x3f,0x8a,0xd5,0xf9,0x8a, + 0xf8,0x1e,0x50,0x1d,0x9f,0x41,0xc2,0x8c,0x35,0x6b, + 0xa2,0x28,0x1b,0x69,0x09,0xf0,0x97,0x93,0xbf,0x7c, + 0xbc,0xe5,0x9f,0x5d,0xef,0x8e,0x43,0x2c,0x0d,0x4c, + 0xc2,0x1b,0x06,0xa5,0x21,0xd4,0xd0,0x65,0xcc,0x18, + 0x37,0xac,0x5e,0xf3,0x06,0x07,0xa0,0xdd,0x95,0x40, + 0x7c,0xd3,0x8d,0x34,0x41,0xe8,0x85,0x81,0x07,0x02, + 0x83,0x6c,0xca,0x8a,0x40,0x95,0x3a,0x78,0x14,0x23, + 0xcb,0x88,0x6d,0x0c,0x47,0xe6,0x8d,0xda,0xaa,0x9c, + 0x76,0xb0,0xd8,0x7b,0xc3,0x90,0x2c,0x4f,0x87,0xf1, + 0x5a,0x5c,0x13,0x1b,0xb0,0x7b,0xd9,0xe9,0x35,0x0b, + 0x2c,0x23,0x20,0x03,0x40,0x90,0xb9,0xfa,0x6e,0x2a, + 0x32,0x85,0x49,0xc0,0xb0,0x5f,0xb3,0x2a,0x07,0x8d, + 0x4a,0x40,0x82,0xcf,0x98,0x98,0xdb,0xdb,0xb2,0xe1, + 0xce,0x20,0x62,0xff,0xd6,0xab,0x34,0x65,0x4c,0x6e, + 0x59,0xda,0xc2,0xcb,0x0c,0x35,0xa6,0xf4,0x0d,0xef, + 0x59,0x5d,0xb2,0xa9,0x39,0x51,0x32,0xbc,0xf5,0x5c, + 0x7c,0xfd,0x7e,0x01,0xdf,0x87,0x10,0x3c,0x0e,0x13, + 0x37,0x14,0x9d,0xc3,0x3c,0x70,0x84,0xce,0x6e,0xd2, + 0xce,0x44,0xdd,0x4d,0xb2,0x55,0xd8,0xbc,0x07,0x48, + 0x48,0x75,0xc6,0x34,0x58,0xef,0xec,0xb6,0x90,0x66, + 0xa8,0x67,0x3d,0x5d,0x4f,0x6d,0xb6,0x20,0x4d,0x50, + 0x2c,0xe8,0x7a,0x80,0x92,0x65,0xa8,0x7a,0x76,0x23, + 0xb5,0xc1,0x10,0xec,0xd5,0x82,0xfc,0x18,0xac,0xaf, + 0x40,0x15,0x1c,0x95,0x98,0x62,0x93,0x8d,0xeb,0x48, + 0x02,0x73,0xa1,0xb5,0x19,0xd1,0x72,0x2a,0xb0,0x67, + 0x55,0x55,0x4b,0x49,0xdb,0x64,0x68,0x8a,0x51,0x9a, + 0x71,0x79,0xdb,0x8d,0x7a,0x4d,0xa8,0xba,0x0f,0xac, + 0x58,0xcb,0xa8,0x32,0x1f,0xda,0x9e,0xdb,0x08,0xbb, + 0x2d,0x00,0x52,0xd5,0x80,0x47,0x95,0x00,0x2b,0x61, + 0x14,0x6b,0xaa,0x70,0x26,0x66,0x32,0x63,0xc1,0x20, + 0x4c,0x8b,0xde,0x68,0x2c,0x9b,0xe9,0xd7,0xef,0x96, + 0xf6,0x27,0x33,0x83,0x1f,0x4a,0x8e,0xbf,0xf5,0x11, + 0xdc,0x9a,0x6b,0xe0,0x41,0xd0,0xc3,0xf6,0xd8,0x71, + 0xdc,0x84,0x33,0x3a,0xc8,0xfc,0xbe,0xc6,0xf5,0xef, + 0x8c,0x7b,0x87,0x21,0x95,0xb2,0x5a,0x44,0x61,0x22, + 0x2e,0x81,0xd1,0x78,0x7d,0x40,0x77,0x35,0xa6,0xa4, + 0xd9,0xa3,0xcf,0xf3,0xc3,0x6a,0xf7,0x21,0xbb,0x31, + 0xd1,0x4d,0x7c,0x87,0x75,0x2d,0x38,0x5c,0xc6,0xaa, + 0x49,0x13,0xcc,0x73,0x57,0x7d,0x3f,0xee,0x5c,0x92, + 0x31,0xb2,0x22,0x12,0xb5,0x42,0x43,0xd1,0x7f,0xf4, + 0x00,0x8f,0x6b,0x81,0xd3,0x46,0xbb,0x81,0x35,0xe8, + 0xe3,0x86,0x24,0xc3,0xac,0xce,0xc7,0xea,0x46,0x38, + 0x0c,0x43,0xa7,0x7b,0x02,0x6b,0xf0,0x89,0x2c,0xdd, + 0x1a,0xba,0xa5,0x77,0x13,0x6f,0x96,0x6e,0x45,0xb3, + 0x10,0x47,0x98,0xb3,0xa8,0x5a,0x0f,0x9f,0x11,0x04, + 0xe1,0x73,0xf1,0x6a,0x1e,0x41,0xb7,0x7b,0x19,0xea, + 0x5f,0x0f,0x26,0x61,0x83,0x27,0x32,0x20,0x02,0xdc, + 0xf3,0x0c,0x77,0x3e,0x40,0x3b,0xc3,0xdf,0xb6,0x9a, + 0xb9,0x2b,0x74,0x4e,0xb3,0x8d,0xb4,0xdd,0xd8,0xa4, + 0x26,0x75,0x7e,0x5c,0x56,0x3f,0x90,0x8a,0x1c,0xee, + 0xcb,0x2f,0x53,0xc3,0xa1,0xe6,0xbb,0x94,0x49,0xd4, + 0x91,0x33,0x05,0xad,0xe1,0xc7,0x1e,0xe2,0x1c,0xc3, + 0x7b,0xd4,0xa8,0x7d,0xfd,0x8a,0x7a,0x2f,0x71,0xcb, + 0xd9,0x4f,0x9f,0xf5,0x3a,0xcd,0x8c,0x23,0x3c,0x47, + 0xea,0x15,0x48,0xc1,0x39,0x64,0x94,0x99,0xaa,0xfa, + 0x73,0x2d,0x4c,0xfa,0xb8,0xb1,0x98,0x87,0x60,0x27, + 0x0b,0xcf,0x52,0xcb,0x73,0x6c,0xfc,0xaa,0xc0,0xce, + 0xf3,0x00,0x4a,0x39,0x56,0x74,0x06,0x41,0xeb,0x46, + 0x71,0x4a,0xbf,0x8f,0x36,0xa8,0x85,0x65,0xc8,0x10, + 0xd7,0xea,0x77,0x29,0xf4,0x99,0x00,0x80,0xe7,0xec, + 0x7d,0xdc,0xad,0xc4,0x1d,0xe7,0xfe,0x89,0x6b,0xee, + 0x6f,0x62,0xc2,0x86,0x7f,0x0f,0x3e,0xfb,0x55,0x8e, + 0x3c,0xcc,0x1c,0x36,0x8a,0x08,0x1e,0xd5,0x7a,0x3a, + 0x05,0x50,0x86,0x85,0x95,0xe4,0xb3,0xb3,0x87,0x20, + 0x70,0x87,0xb0,0x20,0xe1,0x74,0x73,0x58,0xc5,0xf8, + 0xb8,0x35,0x7f,0x30,0x27,0x70,0xa2,0xf3,0xde,0x6d, + 0xb0,0xb6,0x1f,0x05,0x24,0xc3,0x51,0x79,0xaf,0xc9, + 0x75,0x80,0xd4,0xc5,0x9e,0xea,0x22,0x1c,0x43,0x8f, + 0xbe,0x4b,0xa3,0x3f,0x64,0x24,0x14,0xc3,0x13,0xd1, + 0xe2,0x9b,0xd2,0xdd,0x8d,0xd6,0x5c,0xcb,0x8b,0x39, + 0x1e,0x4d,0xb1,0x7d,0x9b,0x2a,0xcb,0x15,0x85,0x45, + 0xc3,0x8e,0xb2,0xcf,0xf4,0xa5,0x8e,0x04,0x47,0x11, + 0x20,0xf2,0x2a,0x57,0x37,0xe1,0xf5,0xbd,0x04,0x73, + 0x46,0x7a,0xc5,0x3d,0x28,0xf1,0xe1,0xa7,0x83,0x40, + 0xfc,0xe5,0xeb,0x6f,0x65,0xf5,0xf8,0xf5,0xa2,0xe7, + 0x71,0x8b,0xbe,0xc9,0x58,0x70,0x3a,0x21,0xdc,0x96, + 0x0e,0x99,0x40,0xeb,0x00,0xa3,0xcd,0x53,0x94,0x21, + 0xf2,0x5e,0xd7,0x71,0xd3,0xf1,0x20,0x37,0xb9,0x0a, + 0xf7,0x59,0x4b,0xc1,0x1d,0x82,0x15,0x1f,0xec,0x93, + 0x47,0x4d,0x25,0xf4,0x52,0xa5,0x40,0x67,0x64,0x6d, + 0xdd,0x25,0x2d,0x03,0xc2,0x61,0xf9,0x99,0x1e,0x2b, + 0x78,0x47,0x86,0xaa,0x86,0x7c,0x81,0x82,0x4b,0x65, + 0xa7,0xc8,0xa6,0x6b,0xa7,0x65,0xd9,0xeb,0xf5,0xc1, + 0xa7,0xe6,0x76,0x5a,0x29,0xc6,0x73,0xb0,0x89,0x9c, + 0x19,0xc2,0xe4,0xd8,0xcd,0x4c,0x63,0x4d,0x1a,0xaa, + 0xda,0x52,0x07,0x39,0x6d,0xb2,0x73,0xea,0x59,0x0a, + 0x26,0x72,0x79,0x0d,0x28,0xa8,0x23,0xa4,0x26,0xe8, + 0x39,0x8d,0x34,0xb1,0xca,0x29,0x14,0x0a,0x6b,0x52, + 0x7d,0x7d,0x6e,0xa1,0xee,0x5e,0xff,0xb4,0x9e,0x18, + 0xdf,0xfe,0x56,0xec,0x0a,0x78,0x9e,0x25,0x8a,0x8f, + 0x44,0x23,0xfe,0x34,0x30,0xa2,0xc4,0x7b,0x04,0x28, + 0x00,0xbb,0xec,0x8a,0x21,0xe1,0x52,0x4b,0xae,0xf1, + 0x8c,0x70,0x94,0x24,0x42,0xaf,0x39,0x7d,0xa2,0x6a, + 0xeb,0xd5,0xa6,0x23,0x0c,0x41,0xb7,0xa1,0x9f,0xdb, + 0xb9,0x63,0xe4,0x6c,0x0e,0x21,0x0a,0xd1,0xaa,0x5c, + 0x23,0xef,0xcf,0x6a,0x07,0xbd,0xc6,0x52,0xc2,0x0f, + 0x52,0x72,0xf4,0x12,0x3d,0xa5,0xa5,0xf1,0x6a,0x62, + 0x5a,0x33,0xab,0x5e,0x98,0x5d,0xc4,0x1e,0xc0,0xa4, + 0xd0,0xe4,0xc6,0xaa,0x17,0x11,0xcb,0x35,0x4d,0x80, + 0xe6,0x22,0xef,0x77,0x95,0x66,0x14,0x2d,0x40,0x36, + 0x04,0x67,0x94,0x7e,0x45,0x8f,0xff,0x28,0x2d,0x47, + 0x9d,0x18,0xf8,0x07,0x44,0x41,0xf1,0xe1,0x4c,0x01, + 0x8f,0x62,0x10,0x4f,0x87,0x82,0x43,0xe9,0xc2,0xd3, + 0xee,0x6d,0xad,0x37,0x4f,0xe1,0x51,0x97,0x97,0xc7, + 0x19,0x22,0xa0,0xd2,0x23,0xcc,0xb7,0x3c,0xb9,0x94, + 0x9d,0xbc,0xbf,0xf9,0x0e,0xb6,0x41,0x89,0xda,0x18, + 0x63,0xb1,0x97,0x82,0x7d,0x37,0xda,0x63,0x8a,0x3d, + 0xc2,0x69,0xc1,0xb5,0xb4,0xc3,0x3c,0x78,0xf9,0x08, + 0xdc,0xdc,0xec,0x4c,0xc2,0x96,0x30,0xe5,0xdd,0x4c, + 0xde,0xbf,0x80,0x41,0xf7,0x01,0x2e,0x97,0x8d,0x9a, + 0xae,0xa3,0x28,0xa4,0xaf,0x52,0x50,0xc3,0x73,0x5d, + 0x70,0xe5,0x1b,0x31,0x84,0x90,0x66,0xac,0x3d,0x40, + 0x5a,0x8a,0x95,0x7a,0x46,0xb0,0xf5,0x28,0xae,0xf3, + 0x46,0x25,0xef,0x97,0x94,0x8e,0xae,0x1a,0xa2,0xe5, + 0x87,0x95,0x8c,0xb0,0xc2,0xa7,0x0c,0x93,0x52,0x0d, + 0x44,0x7e,0x89,0x01,0xfc,0x9a,0x53,0xff,0x74,0x15, + 0xf3,0xfd,0xdf,0x3e,0xb1,0x04,0x8f,0x43,0xc4,0xc8, + 0xc6,0x22,0xdc,0xf5,0x02,0xd0,0xf1,0x78,0x9a,0x8e, + 0xcf,0x62,0xeb,0xa2,0xef,0x9e,0x77,0xea,0x47,0x69, + 0x41,0x8f,0x91,0xc8,0xfb,0xf1,0x65,0xb6,0xd5,0x19, + 0x06,0x9e,0xc3,0xc0,0x11,0x37,0xe5,0x53,0x2f,0x06, + 0x4c,0x7f,0x0f,0xd6,0x9c,0xd4,0x49,0xbb,0x94,0x89, + 0xf9,0x54,0x21,0xb2,0xb6,0x19,0xcb,0xf5,0xc5,0x6c, + 0x85,0x29,0xc6,0x00,0x3e,0xdf,0x8c,0x66,0x10,0x8e, + 0xe4,0xfd,0x17,0x99,0xa6,0x1d,0x43,0x08,0xfa,0x1b, + 0x05,0xe0,0xca,0x0e,0x0c,0x72,0xe0,0xc3,0x6c,0xd6, + 0xc1,0x1e,0x5c,0x01,0xd3,0x5a,0x41,0x62,0x88,0xb5, + 0x67,0x81,0xea,0x58,0x44,0x9f,0xeb,0xa8,0xe2,0xb3, + 0xbf,0x0a,0x00,0x78,0x37,0x28,0xbc,0x25,0xc2,0xc3, + 0xe8,0x9c,0xe5,0x37,0xf0,0x27,0x07,0x99,0x13,0x7d, + 0x38,0x18,0x3b,0xda,0x26,0xda,0x90,0xfa,0xf3,0xe0, + 0x31,0xf7,0xe5,0xb8,0xfc,0xc7,0xae,0x9f,0xb0,0x4b, + 0x38,0x70,0x33,0x8b,0xca,0x7e,0x9d,0x79,0x02,0x0d, + 0xcf,0x62,0xc7,0xc5,0xb2,0x2e,0x68,0x52,0xad,0xc5, + 0x28,0x4a,0x38,0x9e,0x46,0x0b,0x06,0x90,0xec,0xcd, + 0x46,0x49,0xa3,0xa1,0xdd,0xea,0xf9,0x5d,0xda,0x10, + 0x58,0x86,0x1f,0x3c,0xe8,0x3b,0x32,0x3e,0x74,0xd4, + 0xc9,0x38,0x8e,0x91,0xc9,0xfb,0xa3,0x0c,0x04,0xc0, + 0xad,0xd7,0x1a,0xf0,0xc8,0xd6,0x08,0x08,0x68,0xaa, + 0xcd,0x00,0x74,0xcc,0x7b,0xe7,0x34,0x7d,0xf5,0xfa, + 0x31,0xb3,0xb2,0x1e,0xa1,0x8b,0xbe,0xa1,0x10,0x99, + 0x6a,0xca,0xbf,0x80,0x8f,0xab,0x21,0xf8,0xf1,0x12, + 0x00,0x5b,0xf4,0x6d,0x3c,0x25,0xef,0x8f,0xae,0xee, + 0x33,0x42,0x2b,0x03,0x6f,0x46,0x9f,0xfc,0x36,0x3e, + 0x08,0x25,0x6c,0xa4,0x93,0xba,0x0f,0xee,0x60,0xb5, + 0x34,0x87,0xd4,0xd3,0x7e,0x86,0x52,0xa3,0xab,0xe7, + 0xcd,0x09,0xce,0x74,0xea,0x52,0x05,0x70,0xc3,0xfd, + 0xe7,0x21,0xcc,0x6c,0xdd,0xc3,0x9b,0xca,0x6f,0x56, + 0x2d,0xe4,0x30,0xbe,0x3e,0x72,0xcf,0xf6,0x22,0xba, + 0x74,0xa6,0x9c,0x8a,0x8e,0xbc,0x68,0xb1,0xe9,0x96, + 0xfa,0x6e,0xed,0xe2,0x9f,0xa2,0xbf,0xef,0x2d,0xc9, + 0x6b,0xd8,0x06,0xcd,0xf4,0x34,0x03,0xc4,0x30,0x60, + 0x80,0xfd,0x90,0x87,0x90,0xf7,0xc7,0x12,0x2e,0x45, + 0x7c,0x44,0x89,0xda,0xe1,0x99,0x3c,0x0e,0xb2,0xb8, + 0x0e,0xb5,0xde,0x09,0x6c,0x2d,0xb0,0x3a,0xe4,0x56, + 0x33,0x16,0x1d,0x47,0x77,0xc5,0x67,0x88,0xe0,0xca, + 0x8a,0xbc,0x7f,0x6b,0x0e,0x3a,0xd3,0xe9,0xe7,0x4a, + 0x3f,0xe5,0xf5,0x4f,0x91,0xf7,0x0f,0xd9,0x43,0xf2, + 0x4c,0xef,0x1b,0x47,0x3e,0x9e,0x42,0xe0,0xa5,0x37, + 0xbd,0xd2,0x65,0x62,0x38,0x54,0x97,0xb6,0xce,0xd7, + 0x08,0xf2,0xbc,0xf5,0xb7,0xae,0x56,0x1f,0x18,0x54, + 0x81,0x10,0x90,0x13,0xe4,0x6b,0x47,0x8a,0xb2,0x6d, + 0xf7,0x01,0x1b,0x6d,0x80,0xa7,0xa5,0xed,0x75,0x1a, + 0xae,0x05,0x4e,0x74,0x31,0xce,0x59,0x53,0xa3,0xaa, + 0x9a,0x5d,0x6d,0xec,0x35,0xae,0x2c,0x06,0x1d,0x45, + 0x0d,0x6b,0xef,0xfc,0xb4,0x1c,0x73,0x83,0x6e,0x03, + 0x74,0xce,0xdf,0x16,0xd5,0x74,0x20,0x5e,0x9a,0x87, + 0xca,0x49,0xa2,0x11,0x30,0x54,0x67,0x4f,0xbb,0x97, + 0xe5,0x89,0x30,0x42,0xc2,0x24,0x27,0xbd,0xba,0x23, + 0x34,0xeb,0xb2,0x71,0xfd,0xdd,0x2e,0x7f,0x33,0x1f, + 0xd1,0x49,0xc2,0xd7,0x83,0x52,0x3a,0x42,0xe4,0x36, + 0xfb,0xfd,0xfa,0xfd,0xc2,0xc7,0xed,0x52,0x06,0x7e, + 0x18,0x48,0x1e,0x2e,0xe8,0x2e,0xa7,0x9c,0x3f,0xcb, + 0x5d,0xd3,0xee,0x6d,0xf2,0x7e,0x80,0x28,0x70,0x6e, + 0xb5,0x55,0xb6,0xd9,0x08,0x2a,0x36,0x5b,0xf2,0x7e, + 0xef,0xea,0x82,0xc6,0xe7,0x93,0xff,0x02,0x8e,0xac, + 0x6a,0x1e,0x53,0xce,0x31,0xc1,0xad,0x39,0xfb,0x9e, + 0xbd,0xc3,0x66,0x4a,0xce,0x3e,0x9a,0xd6,0x6c,0xc5, + 0xe2,0x4d,0xa0,0xd8,0x5b,0x1b,0x79,0x9f,0xc1,0xea, + 0xa0,0xa5,0x29,0x49,0x87,0x8e,0x2c,0xd7,0xa6,0xe8, + 0xe8,0xe9,0x26,0x2f,0xf5,0x31,0xa7,0x5a,0x91,0x5b, + 0x67,0x54,0xcf,0x46,0x1d,0x60,0x54,0xdb,0x37,0x06, + 0xbe,0x87,0x0a,0xc4,0x16,0x00,0x32,0x05,0x65,0x21, + 0x1e,0x39,0xe7,0x8a,0x40,0x75,0x6f,0xba,0x7e,0x4f, + 0xb5,0x23,0xcc,0xf8,0x61,0x7a,0x20,0x98,0x1e,0x00, + 0x7d,0xba,0xf3,0xf5,0x3d,0x5f,0x3f,0x47,0xf5,0x3e, + 0x30,0x92,0xb3,0xdb,0xf1,0xc2,0x20,0x4c,0xb3,0x92, + 0x62,0xc7,0x4b,0x7a,0x99,0x10,0xb0,0x92,0xf4,0x9b, + 0xc0,0x8f,0x40,0xcd,0x5e,0xd1,0xa0,0x23,0xe5,0xac, + 0xf5,0x19,0x9d,0x73,0x0e,0xe4,0xde,0x3a,0x7a,0x29, + 0x70,0x2c,0x95,0x98,0x6b,0xf7,0x1d,0x96,0x50,0x6a, + 0x57,0xcf,0x4c,0x82,0x0a,0x79,0x85,0xfc,0x30,0x01, + 0xb4,0xa9,0xb4,0x5b,0x06,0xb6,0x34,0xc5,0xde,0x64, + 0x45,0xb0,0x7a,0x7b,0x82,0xdf,0x90,0xa1,0x25,0x1e, + 0x32,0xc2,0x2d,0x79,0xff,0x00,0x6c,0xb0,0x51,0xba, + 0xa1,0x19,0x14,0x13,0xb3,0x92,0x0b,0x9d,0xa7,0x48, + 0xa6,0xbf,0x36,0x1d,0xa8,0xcc,0x1c,0x5d,0x77,0x68, + 0x79,0x20,0xb5,0x45,0xaa,0x23,0xb9,0xd7,0x35,0x4c, + 0x1a,0x33,0x06,0xe2,0x4e,0x63,0xdf,0x11,0xb8,0xe1, + 0x0c,0xa2,0xe8,0x05,0x38,0x91,0xd7,0x5e,0xd9,0xcd, + 0xd7,0x3b,0x6b,0xfa,0x23,0x1d,0xfd,0x33,0x79,0x3f, + 0x23,0xdc,0x69,0x33,0xb8,0xad,0x22,0xf0,0x60,0x05, + 0xbc,0x17,0xd2,0xb6,0x63,0xc1,0x08,0x45,0xa4,0xa4, + 0xe2,0x3a,0x67,0x8f,0x03,0xd0,0xd6,0x28,0xaa,0xdb, + 0x6b,0x97,0x45,0x43,0xd7,0x72,0xde,0xd0,0x4f,0x9a, + 0xd8,0x47,0x02,0xb7,0x74,0x0f,0xcb,0xc7,0xda,0xfc, + 0x95,0xe6,0xc4,0x1b,0x25,0xa3,0xd9,0x30,0xee,0x2c, + 0xf0,0x00,0x59,0xc8,0x1d,0x0c,0xc7,0x81,0x8d,0x3f, + 0x02,0x82,0x60,0x01,0x58,0x65,0xb6,0xc7,0x5e,0x4d, + 0x9e,0x5a,0xbe,0xa9,0xf9,0xa7,0x66,0x38,0xd2,0x16, + 0x65,0xd9,0x74,0xdc,0x50,0x14,0x63,0xd9,0x7d,0x21, + 0x4b,0xdd,0x5e,0x28,0x7d,0x11,0x20,0x42,0x21,0x17, + 0x15,0x17,0xdf,0x61,0x1c,0x42,0x8e,0xac,0x1a,0x84, + 0xfa,0x8c,0x28,0xa9,0x08,0xcc,0xe1,0xf8,0xeb,0x47, + 0x3b,0xde,0xf8,0x45,0xa0,0xc0,0x9b,0x5f,0xf6,0x83, + 0x1f,0x39,0xcf,0xe8,0x9c,0x95,0x86,0x79,0xbb,0xfa, + 0xd0,0xb0,0x02,0x17,0x19,0xdd,0xb1,0x07,0xcb,0x36, + 0x73,0xb8,0x40,0xcb,0x0b,0xe0,0xc0,0x90,0x64,0xe7, + 0x9a,0x81,0x94,0xa1,0x0f,0xad,0x27,0xfb,0x6e,0x89, + 0x94,0x12,0x89,0x73,0xec,0xf5,0xb8,0x21,0x05,0xee, + 0x32,0xeb,0x20,0xa3,0xc6,0xa5,0xce,0xf6,0x2c,0x48, + 0x5b,0x8e,0xab,0xb7,0xcf,0x20,0xf7,0x5d,0xab,0x34, + 0x66,0xec,0x18,0x16,0xd5,0x44,0x52,0x4c,0xd3,0x64, + 0x20,0x3d,0xf6,0x3e,0x9b,0xa0,0xef,0x2d,0xa2,0x3b, + 0xad,0x76,0xef,0x4a,0x81,0x36,0xf6,0x2c,0xdd,0x1a, + 0x78,0x40,0x65,0x4e,0xd3,0x1a,0x30,0x6a,0xb6,0x28, + 0xf0,0x8d,0x01,0x34,0x9c,0xb5,0x03,0xbf,0x2c,0x4a, + 0xcc,0xac,0xe8,0x8c,0x1c,0xd7,0x9f,0x0c,0x02,0x3d, + 0x53,0xc3,0x7a,0x73,0x94,0x87,0x0f,0x7f,0x64,0xa7, + 0x03,0xc8,0x3b,0xcf,0x01,0x16,0xbc,0x82,0x01,0xd3, + 0xef,0xbd,0xf5,0x03,0x10,0x85,0x13,0x9c,0x87,0x6d, + 0x90,0x62,0x59,0x0d,0x08,0x15,0x06,0x27,0xc7,0x1b, + 0x21,0xb8,0x75,0x9f,0xbb,0x74,0xdd,0x98,0xa7,0xd1, + 0x9a,0xbe,0x60,0x52,0x5d,0xc1,0xb4,0x98,0x5d,0x2d, + 0x4f,0x74,0xa0,0xd2,0x53,0xef,0xb6,0x80,0xb1,0x16, + 0xc9,0xc6,0x0f,0x15,0xa5,0x6f,0x2d,0xa0,0xf2,0xf5, + 0xff,0x59,0x53,0x69,0xdb,0x84,0xcb,0x84,0xc2,0xe4, + 0xc7,0x7b,0x4d,0xc8,0x9e,0x73,0xb9,0x72,0xb7,0x5a, + 0x7b,0x35,0x6d,0x14,0xa2,0x61,0x48,0x73,0x10,0x58, + 0x15,0xd6,0x1c,0xf8,0xd5,0xe3,0x03,0x8b,0x33,0xa3, + 0xba,0x31,0xd6,0x51,0x22,0x25,0x1c,0x9b,0x06,0x43, + 0xbb,0x76,0x41,0xb2,0xce,0xca,0x00,0x8c,0xf1,0x2f, + 0xd9,0x83,0xe3,0x0f,0x3f,0x83,0x0d,0xcf,0x06,0x77, + 0x9d,0x08,0xc1,0x8c,0xd9,0xbc,0x7a,0x8f,0xb5,0x3f, + 0x91,0x11,0xc2,0xed,0x44,0x74,0x20,0xef,0x73,0xd6, + 0x9f,0x59,0x64,0x4b,0x57,0x01,0x4c,0xb9,0xa7,0xb5, + 0xb0,0x79,0xca,0x64,0x46,0xb1,0xc1,0x2a,0x01,0x30, + 0x05,0x49,0xf8,0x18,0x2c,0xc7,0x1e,0x1b,0x64,0x03, + 0x00,0x4f,0xd3,0xc1,0xb0,0xef,0xd2,0xf6,0x3a,0x51, + 0xda,0x48,0x65,0x9a,0x6d,0x2e,0x0f,0xd8,0x75,0xa6, + 0x76,0x0b,0x56,0x33,0x90,0x02,0x94,0xf9,0xc8,0x6e, + 0xf9,0x1d,0xcb,0xa6,0xdb,0xb1,0x5a,0xf0,0xf4,0x11, + 0xe5,0xda,0xdd,0x58,0x00,0xde,0xfc,0x1d,0x08,0x18, + 0x57,0xa6,0x1b,0x4f,0x42,0xb0,0xde,0xb5,0x42,0xab, + 0x02,0x19,0xfe,0x16,0x71,0x70,0x76,0x8b,0xd1,0xe7, + 0x01,0x80,0xff,0x46,0x94,0xe0,0xaf,0x0e,0xe4,0x11, + 0x8e,0x16,0xd2,0x6f,0x24,0x5d,0xf8,0x77,0x83,0xd2, + 0x8e,0xa4,0x17,0x90,0xe4,0x6f,0x70,0x8a,0xf7,0xe0, + 0x46,0xf4,0xcc,0x66,0xcb,0x62,0x66,0x7d,0x8a,0x31, + 0xfa,0x23,0x54,0x91,0x6d,0x69,0x51,0x98,0xd4,0xba, + 0xd6,0xb3,0x5e,0x05,0x09,0x32,0x6d,0xe4,0x7d,0xe5, + 0x9a,0x4f,0xe6,0x1b,0x3b,0xc3,0x91,0xf6,0xfd,0x3d, + 0x18,0x49,0x14,0x15,0xa0,0xb4,0x81,0xc1,0xe0,0xda, + 0xc5,0x51,0x93,0xdd,0x69,0x82,0x81,0x8d,0x77,0x03, + 0xc2,0x73,0x82,0x14,0xac,0xcd,0x5b,0x91,0xb2,0x1b, + 0x33,0x94,0x14,0x33,0xfd,0x92,0xb6,0x65,0xe9,0x3e, + 0xb0,0x05,0xa4,0xd6,0xda,0x2b,0x19,0xca,0xcb,0x16, + 0x8c,0x75,0x92,0x91,0x66,0x29,0xe7,0x33,0x22,0xf3, + 0x1e,0x5c,0x58,0x8b,0x97,0x9f,0xb7,0x7a,0x00,0xb7, + 0x16,0xe1,0xfc,0xe3,0xa0,0xf1,0x90,0xbc,0x2f,0xa1, + 0xfb,0xe0,0xb8,0xbd,0xaf,0xfb,0xc3,0x01,0xef,0x26, + 0xf3,0x76,0x40,0xf4,0x6e,0x93,0xc7,0x8e,0x81,0x08, + 0xec,0x9f,0xc6,0x66,0x0c,0x79,0xba,0xa4,0x96,0xab, + 0xb0,0x63,0xf6,0x2d,0x1b,0x81,0x39,0xe7,0x58,0xe6, + 0x94,0x1a,0x29,0xed,0xf7,0x2e,0x35,0x1b,0x61,0xba, + 0x51,0x94,0xf5,0x31,0x87,0x4e,0x68,0x72,0x6d,0x46, + 0x63,0xa1,0x37,0x32,0x47,0xd5,0xff,0x5b,0xc4,0x57, + 0xc1,0xd4,0x21,0xed,0x46,0xdd,0x0a,0x99,0x63,0x64, + 0xf3,0x6e,0x48,0x0d,0x61,0xba,0x5c,0x5e,0x46,0xed, + 0xcb,0x7f,0xa3,0x06,0x28,0xb0,0xc8,0xc4,0x71,0x54, + 0x91,0x96,0x4b,0xef,0x80,0x93,0xcd,0xc8,0x4a,0xb4, + 0x6a,0xb8,0x11,0x03,0x48,0xa8,0x9b,0x13,0x8b,0x94, + 0x62,0xf3,0x8d,0x04,0xa5,0x6b,0x83,0x36,0x72,0x86, + 0x5b,0x49,0xb0,0x5b,0x6a,0x19,0x4e,0x9d,0xbb,0x7f, + 0x92,0xbc,0x3f,0x2e,0x41,0x89,0x47,0xca,0x04,0x5b, + 0xc2,0x0f,0x0e,0x75,0x7b,0x48,0x0d,0x0f,0xa3,0x07, + 0xd8,0xd0,0xfb,0xdc,0x6d,0x8f,0xbb,0x0e,0xc6,0x86, + 0x1d,0x98,0x1a,0x0e,0x1a,0xe5,0x98,0x1a,0xe8,0x31, + 0x66,0x72,0xea,0xe8,0x77,0x40,0xb3,0x6c,0x52,0x52, + 0xab,0x76,0x80,0xab,0xe2,0xd3,0x5a,0xd0,0xd3,0x7a, + 0x0c,0xa9,0xc7,0x7e,0x65,0x43,0x48,0x30,0x45,0xcb, + 0x40,0x2e,0xd2,0xcd,0x72,0x18,0x5a,0x35,0xc0,0x44, + 0xbc,0x77,0x23,0x1e,0xb1,0xcb,0xc1,0x2a,0xa0,0x21, + 0xd0,0xfc,0x34,0x4b,0x41,0x67,0x53,0x20,0x09,0x2e, + 0x73,0x0c,0x77,0x5e,0x5e,0xf7,0xf2,0x9a,0x6d,0xc0, + 0xba,0xae,0xe0,0x3c,0xef,0x34,0x49,0xaa,0xaa,0xc4, + 0x18,0x0c,0xa0,0x23,0x45,0xff,0x70,0x54,0xfb,0x35, + 0x32,0x66,0xb0,0xe5,0x7b,0x38,0xed,0xc1,0x3f,0x43, + 0xde,0xc7,0xc7,0x17,0xfd,0x2d,0x79,0x7f,0x87,0x9f, + 0x3f,0xef,0x44,0xf0,0x37,0x67,0x7c,0x48,0x09,0x7a, + 0x8f,0x29,0x64,0xf1,0xdc,0x18,0x1a,0xad,0xba,0x98, + 0xb9,0xcc,0x9e,0x4f,0x1c,0x4d,0xb2,0xab,0x99,0x4e, + 0x3e,0xb8,0x08,0xdc,0xf8,0x79,0xb8,0x64,0x16,0xa8, + 0xfe,0x81,0xf9,0x7c,0x31,0x44,0xc2,0x1b,0xd8,0x76, + 0x17,0xe6,0xa3,0x5c,0x46,0xd4,0xd9,0x80,0xc3,0x96, + 0xf5,0x91,0xad,0x78,0xe9,0xd7,0xa9,0x76,0x3c,0xa0, + 0xbe,0x87,0x64,0x41,0xdd,0x41,0xf7,0x23,0xa8,0x73, + 0x04,0xe8,0xbd,0x10,0x1f,0xff,0x37,0x49,0xb4,0x05, + 0xe8,0x70,0xc2,0x79,0x55,0xd1,0xd8,0x89,0x61,0x60, + 0x60,0x2b,0x72,0x99,0x80,0x12,0xc3,0x7e,0x1f,0x95, + 0x56,0x8e,0x82,0xef,0xaf,0xc0,0x2e,0x77,0x4b,0x03, + 0x30,0x0d,0x8a,0xfe,0xfa,0x5b,0x3d,0xe0,0xdf,0x56, + 0x06,0x18,0x8f,0xfd,0x7c,0x39,0x0e,0x64,0x23,0x1e, + 0xd3,0xfa,0xe3,0x51,0xee,0x07,0xfe,0x43,0x33,0x23, + 0x8c,0x1f,0xe2,0x30,0x52,0x88,0x53,0x93,0x83,0x71, + 0x10,0x12,0xc2,0x86,0x81,0x93,0xf7,0xcb,0x1b,0xeb, + 0x6f,0xb3,0x21,0x97,0x7c,0xac,0x1f,0x30,0x5a,0x3a, + 0xbd,0x65,0xbd,0x98,0x2c,0xb8,0x1e,0xcb,0x06,0xdc, + 0xbc,0xf0,0x82,0x62,0x5e,0x69,0xdf,0x7d,0x8d,0xb7, + 0xea,0x2c,0xfd,0xd4,0xed,0x53,0x0c,0x21,0x73,0x10, + 0xe6,0x44,0x23,0xfc,0x5c,0x0a,0x79,0xbf,0x9d,0x37, + 0xcd,0x7d,0x87,0x9b,0xc2,0xab,0x31,0x16,0xb1,0xf8, + 0xf7,0x34,0x31,0x25,0x4f,0x3d,0x5d,0xcb,0x7f,0x98, + 0x80,0xab,0xeb,0x3a,0x72,0xd0,0x54,0x84,0x6c,0x82, + 0xd0,0x91,0x40,0x56,0x30,0x1b,0x72,0x4d,0xdf,0x03, + 0x01,0x3f,0x88,0x02,0x3e,0xf3,0xfe,0xc0,0xe6,0x9f, + 0x87,0x2f,0xc5,0xf9,0x17,0x71,0x6c,0x17,0xa4,0x28, + 0x3c,0x76,0x0a,0x5b,0x96,0xaa,0xde,0x9d,0x25,0xcf, + 0xaf,0x73,0x6c,0x6d,0xcd,0x53,0xad,0xea,0x9e,0x7a, + 0xf4,0x1d,0x3d,0xa4,0xbf,0x9d,0x7b,0x60,0x8a,0xfe, + 0x49,0xbc,0x1f,0x6e,0x16,0x8a,0x31,0x0e,0x7d,0x11, + 0x1e,0x3a,0x04,0x6c,0x3e,0x00,0xa8,0x73,0xf3,0xc3, + 0x0c,0x92,0x4d,0xde,0x7d,0xba,0xfb,0x94,0x45,0x8c, + 0xa0,0x71,0xd0,0x2f,0xe1,0xc4,0x22,0x5a,0x34,0x2d, + 0x48,0x5b,0xf7,0x3b,0x64,0x57,0x61,0x72,0xb9,0x34, + 0x2d,0x29,0xe0,0xc6,0xaf,0xa3,0x4a,0x8b,0xa5,0xcd, + 0x08,0xee,0xb7,0x80,0x9a,0xe1,0x51,0xe8,0xe9,0x7d, + 0x30,0x5c,0xd8,0x97,0xf2,0x7d,0x5a,0x52,0x01,0xaf, + 0x81,0xa4,0x72,0x8b,0x57,0x16,0xf1,0xf5,0x7c,0xed, + 0xe3,0xe7,0x01,0xe2,0x01,0x79,0x9f,0x3f,0xfd,0x2c, + 0x37,0x3e,0x8e,0xef,0xc4,0x35,0x04,0x70,0x0e,0x0f, + 0xb9,0xcb,0x78,0x1a,0xf2,0x0e,0x1d,0x8d,0x30,0x6e, + 0x7b,0xd3,0xa7,0x30,0x54,0x9a,0xe6,0x84,0x4d,0x01, + 0xe2,0x72,0x45,0xf0,0x5d,0x9a,0xa2,0xb4,0x86,0x99, + 0xfa,0xff,0x52,0x7d,0x07,0xcc,0x35,0x1c,0x1b,0x2b, + 0x93,0xae,0x74,0x03,0xb4,0xe9,0x90,0x84,0x36,0x36, + 0xb7,0x11,0x69,0xb5,0xc8,0x4f,0x88,0x63,0x0f,0x85, + 0x8d,0xc7,0x61,0xa6,0x25,0x23,0x04,0x86,0x94,0x01, + 0x48,0xd6,0xb4,0xc6,0x1f,0xaa,0x47,0x9f,0x4e,0xd8, + 0xc2,0x3a,0x0f,0x5b,0x63,0x87,0xb4,0x19,0x91,0xb2, + 0x23,0x33,0x2a,0x26,0x82,0xbb,0x2d,0x45,0x02,0x2e, + 0xed,0xb3,0x52,0x5f,0x61,0x55,0x14,0x6b,0x83,0x78, + 0x75,0xa2,0x9e,0x05,0x80,0x27,0x0f,0x39,0xf1,0xd6, + 0xe7,0x9f,0xcc,0xf5,0x3c,0x8a,0x3b,0xb8,0x69,0xf1, + 0x3f,0x55,0x0e,0x39,0x90,0xf7,0x5b,0x01,0x71,0x2b, + 0x16,0x92,0x84,0x23,0xf0,0x30,0x30,0xf0,0x41,0x5a, + 0xde,0xaf,0x51,0xf1,0x7b,0x00,0xc6,0xd8,0x3a,0xc5, + 0xd3,0x36,0x78,0x8a,0x13,0x70,0x28,0xbb,0x87,0x81, + 0x64,0xf2,0x90,0x37,0x63,0x63,0x25,0xb9,0x73,0x49, + 0x8c,0x5d,0x7f,0x83,0x29,0x77,0xdf,0xd1,0xc8,0xc0, + 0x6d,0xf8,0x92,0xa3,0xe2,0xec,0x46,0x40,0xb2,0x89, + 0x0b,0x0f,0x44,0x93,0xd8,0xba,0x38,0x19,0xdc,0x79, + 0xe9,0x4c,0x6c,0xa5,0x94,0x16,0x44,0xc0,0x48,0xc2, + 0x82,0x84,0x5a,0xd1,0x5f,0x0c,0xbf,0xe0,0x43,0x38, + 0x17,0xef,0x9a,0xfc,0xc4,0x40,0xdb,0x77,0xa6,0x2f, + 0x22,0x44,0x6f,0xb0,0x1c,0x3b,0xcb,0x54,0x27,0x43, + 0xf9,0x57,0x01,0x57,0x01,0x0c,0x01,0xb5,0x06,0xe3, + 0xef,0x92,0x7d,0x3c,0xdf,0xc2,0x9f,0x1a,0x86,0xe2, + 0x27,0xb8,0x20,0x0f,0x0b,0x9c,0x07,0xa5,0x9f,0x0d, + 0x79,0x9f,0xc3,0x94,0x81,0x03,0xaa,0xbf,0x75,0xf1, + 0xbd,0x27,0xef,0x97,0x20,0x70,0x1c,0x52,0x2e,0x95, + 0x89,0x4b,0x92,0xec,0x87,0x1d,0x9a,0x20,0xea,0xb6, + 0x95,0xc1,0xce,0x94,0x45,0x74,0x0f,0xa8,0x93,0x46, + 0xd8,0x14,0xc9,0xc5,0xab,0xb6,0xd3,0x9d,0x29,0xe6, + 0x21,0xbd,0x0c,0x5a,0x8b,0x43,0x27,0xf0,0x0a,0x80, + 0x18,0xc8,0xfb,0x2c,0x29,0x38,0x33,0xf6,0x51,0xd0, + 0xb8,0x15,0x0c,0x4a,0x50,0x21,0x8a,0x56,0xc3,0xea, + 0x2e,0xb0,0x48,0x88,0xbb,0xad,0x58,0xf7,0x41,0x64, + 0xf9,0x3b,0xc4,0xcd,0x98,0xe5,0xca,0x6e,0x76,0x31, + 0xf7,0x1d,0xa0,0xab,0x47,0xac,0x80,0x3c,0x0b,0x02, + 0x8e,0x60,0xe7,0x2e,0x81,0x07,0x95,0x9e,0xfc,0x95, + 0x10,0xf4,0xcf,0xc2,0x82,0x78,0xf0,0x97,0x37,0xd4, + 0x7d,0x0e,0x50,0x3c,0xed,0xe2,0xa7,0xcf,0xba,0x73, + 0x2e,0x6e,0xa3,0x08,0x8f,0xbf,0xb9,0xcd,0x5c,0x88, + 0xb8,0x30,0xa9,0x0f,0x20,0x28,0x3e,0x75,0x7d,0x77, + 0x4b,0x78,0x45,0x69,0xad,0xb1,0x52,0x3b,0xd3,0x19, + 0x68,0xfb,0x7d,0xda,0x44,0xb9,0x67,0x1f,0xc2,0xe3, + 0x12,0x47,0x99,0x59,0xd3,0xae,0x40,0xde,0x67,0xab, + 0x22,0x1a,0x79,0x3f,0xa3,0x32,0x25,0x8d,0x5d,0x66, + 0x96,0x3a,0x6d,0x37,0x8f,0x97,0xb2,0xac,0x8a,0xad, + 0x3a,0xea,0x8e,0x5d,0x4a,0x8f,0x8e,0xb9,0xb0,0x93, + 0xf7,0x8d,0x23,0x01,0x0b,0xc0,0x97,0x7d,0xd9,0x0b, + 0x7c,0x6c,0x17,0xb9,0xce,0x01,0x38,0xca,0x27,0x16, + 0x04,0x35,0x70,0xb3,0x3b,0xf9,0x6a,0xf0,0xb2,0x49, + 0xfe,0x26,0xa7,0x66,0x1e,0xb2,0x5b,0x09,0x78,0xc2, + 0x16,0x11,0xfe,0x6c,0x14,0xf8,0x0e,0xb1,0xe7,0x7d, + 0xce,0xfe,0x06,0x28,0xc0,0x1d,0xc8,0xf7,0x00,0xd9, + 0xce,0x6f,0x41,0x18,0x39,0xf3,0x34,0x31,0xd7,0x19, + 0x74,0xc1,0x8b,0x26,0x8b,0x55,0xf3,0x6c,0x98,0xc0, + 0x07,0x1f,0x01,0x8c,0xd2,0x2b,0x00,0x9b,0x97,0x5e, + 0x4e,0x48,0xaa,0x1e,0x7d,0xf5,0xec,0x8b,0xe4,0xdb, + 0x50,0x6b,0x87,0x80,0x26,0xe4,0x7d,0x8e,0xcc,0x76, + 0x74,0xd3,0xaf,0xe2,0x0d,0x68,0xf8,0x4b,0x1b,0xd5, + 0x75,0x51,0x4b,0xb0,0x6a,0x86,0xa6,0xfd,0x41,0xfe, + 0x85,0xe8,0xbd,0xbb,0x3c,0x7a,0x8c,0x46,0x30,0x62, + 0x0b,0xc0,0x2b,0x92,0xd2,0x37,0xe2,0x21,0x84,0x22, + 0x0a,0x36,0x61,0x06,0x6e,0x68,0xcf,0x38,0x4c,0xbd, + 0x67,0x08,0xa3,0x52,0xe1,0x53,0x1a,0x60,0xc8,0xe2, + 0x09,0x10,0x2a,0xc9,0x8c,0x29,0xd9,0x5b,0xff,0x26, + 0x00,0x10,0xe7,0x45,0xbb,0xb1,0xc7,0x6a,0x44,0x8d, + 0x13,0x7a,0xce,0x7b,0x88,0xed,0x2e,0x80,0x70,0x73, + 0x75,0x14,0xa0,0x29,0xad,0xaa,0x9b,0x41,0xa1,0x53, + 0x46,0xc0,0xd4,0x3a,0x40,0x6f,0x48,0x60,0x1f,0x2d, + 0xda,0x79,0xd3,0xed,0xc1,0x89,0x96,0xb4,0xa0,0xc0, + 0xc3,0x63,0x94,0xfe,0xfb,0x40,0xf9,0x1c,0x36,0xf1, + 0xd7,0x12,0x64,0xd9,0x46,0x29,0x0a,0xb8,0xdd,0x75, + 0x30,0x5f,0x9d,0x14,0xae,0xe9,0xe2,0xc1,0xa3,0xcf, + 0x33,0xb3,0x4b,0x09,0xa1,0x93,0xb7,0xa8,0xe0,0x5e, + 0x71,0xfc,0xe5,0x1c,0x75,0x4e,0x76,0xee,0x08,0xf5, + 0x20,0xc6,0x68,0xf6,0xe3,0x8b,0x87,0xd1,0x19,0x91, + 0x2d,0xe1,0x84,0x7b,0xa3,0xe9,0x14,0x08,0x83,0x0f, + 0xab,0xca,0xc9,0xfa,0x1c,0x84,0x7b,0x1a,0xd6,0x6b, + 0x89,0x11,0x74,0x1d,0x46,0x1d,0xb3,0x28,0x0c,0xc7, + 0x3f,0x0d,0x00,0x78,0x8e,0x22,0x72,0xdb,0xa6,0xbb, + 0x29,0x46,0xf0,0x00,0x2f,0x88,0xb1,0xc9,0x16,0x2b, + 0xac,0x3d,0x82,0x5c,0x6e,0xe0,0x4d,0xf6,0xa1,0x56, + 0xab,0x51,0xf3,0x2f,0x18,0x5b,0xb0,0x65,0x1b,0x81, + 0x9a,0xe8,0xf5,0x76,0x08,0xf3,0x9e,0x12,0x76,0x45, + 0x43,0xd6,0x19,0x65,0xe4,0xe4,0x88,0x9e,0xeb,0x24, + 0x8f,0x02,0xe1,0xc9,0xd7,0x87,0xcf,0x2d,0xcc,0x4c, + 0x06,0x3b,0x95,0x38,0x4a,0x90,0xc1,0x26,0xb4,0x72, + 0xe7,0xd2,0xcc,0x42,0x9e,0xa1,0x9a,0x7f,0x58,0x8d, + 0x4d,0x98,0xd6,0x00,0xa6,0xfa,0x56,0x78,0xce,0x6c, + 0xf7,0xbd,0x32,0x15,0xa0,0x2e,0x74,0x89,0x0b,0x25, + 0x79,0x2c,0xe9,0xbd,0xdf,0xdb,0x8d,0xc4,0x39,0x98, + 0x61,0x0b,0xb9,0x05,0xcd,0x74,0xd5,0x9d,0x95,0x20, + 0x83,0x48,0x0d,0x5f,0xe1,0xef,0x03,0x00,0x3f,0xf4, + 0x6e,0xfc,0x94,0xef,0x73,0x26,0xef,0x8f,0x43,0x72, + 0xbf,0x41,0x6f,0x33,0x90,0x75,0xab,0x3f,0xbc,0xcd, + 0x54,0x68,0x3b,0x67,0x46,0x64,0x09,0x93,0xa9,0x4a, + 0xa5,0x03,0x52,0x62,0xce,0xaa,0xdb,0x59,0x4a,0x3b, + 0x9e,0xc7,0x87,0x21,0x3b,0x4a,0xdb,0xa9,0xd9,0x54, + 0x84,0x39,0x85,0x3f,0x05,0x6c,0x83,0xd1,0x4d,0xcb, + 0x90,0x8a,0x07,0x3e,0x37,0xc9,0x64,0x13,0xc1,0x84, + 0x06,0xe7,0xd0,0x70,0x61,0x9b,0x4d,0x90,0x1d,0xf1, + 0x35,0x56,0xab,0xaa,0xc5,0x08,0xed,0x33,0x30,0x27, + 0x61,0x64,0x0a,0xac,0x9b,0x82,0x08,0x1b,0xb6,0x23, + 0x6b,0xf7,0x41,0x07,0x1b,0x20,0x74,0x68,0xd7,0x68, + 0xa0,0x45,0xec,0x9e,0x30,0x20,0xfb,0xba,0xc2,0xec, + 0xc4,0x88,0xe2,0x40,0xad,0x76,0xae,0x50,0x9f,0x48, + 0x75,0x6f,0xfe,0x4d,0x00,0xc0,0x1f,0xbe,0xfb,0x81, + 0xc0,0xfb,0xd8,0x92,0xf7,0xc3,0x4e,0xc9,0x43,0xb1, + 0x30,0xe1,0x24,0xee,0x76,0xcc,0xf1,0x40,0x60,0x0f, + 0x01,0xde,0x70,0x90,0xca,0x8f,0x87,0x4d,0x8d,0x7a, + 0xfb,0x73,0x51,0x6a,0x00,0x87,0x92,0x23,0x38,0x88, + 0x20,0x0c,0xe8,0x11,0xd1,0x92,0x5b,0x11,0x70,0x0a, + 0xba,0x3c,0xd5,0x6f,0x87,0x1a,0x5f,0x28,0x96,0xa0, + 0x25,0x48,0x05,0xc0,0x40,0xc6,0x34,0x83,0xe2,0xa5, + 0x37,0xd7,0x16,0x7a,0x2a,0x0b,0x53,0x43,0x6d,0x83, + 0x2f,0xc8,0xf7,0xd2,0xc8,0xfb,0x45,0xc0,0x44,0x3b, + 0x77,0xd8,0x93,0xf7,0xc7,0x9c,0xe8,0xf3,0x2c,0x91, + 0x05,0x1f,0xcc,0xb5,0x68,0x49,0x8d,0xd8,0xde,0x02, + 0xfb,0x2d,0x4f,0xf1,0x6b,0xfc,0xa7,0x50,0xc7,0xd3, + 0x14,0x82,0x08,0x8d,0xca,0x26,0xc9,0xe6,0x19,0xb6, + 0x22,0xde,0xbf,0xa3,0x07,0xb0,0x8d,0x0d,0xb9,0x67, + 0x7e,0xc4,0x03,0xef,0x7a,0x8a,0x3e,0xe3,0xc1,0x7b, + 0x45,0x61,0x1c,0xf9,0x77,0x3c,0x2a,0x6e,0x00,0x29, + 0x47,0xae,0x5b,0x0e,0x46,0xad,0x3d,0xd0,0xc0,0x22, + 0xeb,0x4a,0x23,0xe1,0xa6,0xdc,0x06,0x8b,0x5e,0x6e, + 0x20,0x5f,0x55,0x07,0x00,0xdd,0x1c,0x23,0x25,0x24, + 0xb4,0x71,0x5a,0xac,0xe1,0x9b,0x99,0x53,0x74,0xf2, + 0xbe,0xd9,0xef,0xd4,0xc0,0x54,0x80,0x3b,0x72,0x4d, + 0x0d,0x1a,0x23,0x90,0xec,0xb4,0x22,0x6e,0x06,0x13, + 0x39,0xc2,0x18,0xc6,0xa6,0x53,0xc2,0x32,0xaf,0xcf, + 0x15,0xb4,0x8b,0x93,0xee,0x26,0x41,0x1c,0xa6,0x04, + 0x69,0xe5,0xd4,0xe2,0x47,0x48,0xa0,0x1b,0x63,0x4b, + 0xde,0x47,0xbe,0x19,0xbd,0x3e,0x7b,0x75,0x90,0x68, + 0x59,0x5d,0x91,0xa7,0xbb,0x84,0x63,0x20,0x4a,0xc6, + 0xa3,0x62,0x19,0xff,0x7e,0x00,0x68,0xd1,0xe0,0x99, + 0x53,0xce,0xb9,0x2d,0x78,0xd8,0x40,0xf1,0x24,0x43, + 0xe9,0xbe,0x6c,0x0c,0x11,0x85,0x8f,0x46,0x04,0xf7, + 0xb3,0x6e,0xcc,0xe4,0xfd,0x58,0xfb,0xc2,0x03,0x25, + 0x71,0x03,0xb7,0x24,0x94,0x94,0x7d,0x95,0x5c,0x5c, + 0xf3,0xb1,0x76,0x48,0x9e,0x80,0xd2,0x64,0xa5,0x6e, + 0xe6,0x97,0x6b,0xec,0x74,0x13,0x6c,0xb9,0x76,0xd5, + 0xf2,0x23,0x2f,0x8f,0xfb,0x74,0x35,0x50,0xa4,0xc6, + 0xd1,0x8a,0x03,0xc7,0x1a,0x90,0x02,0x25,0x02,0x91, + 0x09,0x43,0x9d,0xf3,0x86,0x93,0xf7,0x59,0x8c,0x3e, + 0x53,0x39,0x35,0x2a,0xb0,0xc7,0x6b,0xc8,0xc8,0xf9, + 0x11,0xcb,0x1a,0x6c,0x65,0x39,0x75,0xeb,0xaf,0x43, + 0x3c,0xe8,0xdd,0x31,0x56,0x73,0x16,0x60,0x4d,0x7b, + 0x92,0x5e,0x52,0x20,0xe0,0x50,0x18,0x46,0xa6,0xf8, + 0xeb,0x00,0x70,0x1a,0x4e,0xe1,0x9e,0x6f,0xce,0x37, + 0xbf,0x72,0xa7,0x03,0xc0,0x43,0x82,0xf0,0xd6,0xec, + 0x31,0x0e,0x73,0x7c,0x87,0x11,0xd9,0xdd,0xd0,0x11, + 0x53,0xa6,0x31,0x22,0x86,0xee,0x38,0x02,0x63,0x5a, + 0x73,0x83,0x87,0xb0,0xa7,0xe8,0x45,0xd3,0x13,0x58, + 0x74,0x56,0x29,0x0b,0x90,0x82,0x0a,0x47,0x24,0xce, + 0x94,0x2c,0x55,0x5a,0xff,0x2c,0x9c,0x2a,0x5b,0x80, + 0xa8,0x62,0x9a,0xbc,0x33,0x95,0xad,0x9a,0xd9,0x4b, + 0x6c,0x95,0x35,0xc6,0x15,0xd4,0xbb,0x3c,0xef,0x10, + 0x00,0x16,0xdd,0xa9,0x88,0x6c,0x8e,0x11,0x90,0x41, + 0x7c,0x9d,0xdd,0xd2,0x9e,0xbe,0x5f,0x16,0x60,0x89, + 0xab,0xd4,0x8c,0x7e,0x39,0xf2,0xb8,0xac,0xf8,0x75, + 0x1e,0x09,0x1c,0x76,0x70,0x60,0x99,0xa8,0xa0,0x55, + 0xc3,0x2e,0x70,0x34,0x38,0x0a,0xed,0x78,0xe2,0x35, + 0xaf,0xb2,0xe9,0x8f,0x03,0x00,0x0e,0x7f,0xc5,0x1e, + 0x59,0x3f,0xf9,0x89,0x9e,0x66,0xb6,0x03,0xd0,0x7a, + 0xca,0x1e,0xf8,0xf4,0xc7,0x8f,0x26,0x23,0x68,0xbb, + 0x6d,0x91,0x5e,0x1b,0x7b,0x53,0x86,0xc1,0x0d,0x22, + 0x1e,0x99,0xf3,0x5d,0x41,0xa6,0x46,0x09,0x58,0x80, + 0x11,0x64,0x1a,0xd8,0x66,0x4e,0xec,0xc5,0xb6,0x6f, + 0x90,0x1d,0xb9,0x0c,0x20,0x68,0xb3,0xbc,0x57,0x56, + 0xb0,0x5b,0x8d,0x63,0xed,0xea,0xfa,0x69,0x30,0x49, + 0x6c,0xef,0x52,0x11,0xc3,0x47,0xb9,0xc8,0x41,0x3a, + 0xdb,0x03,0x51,0x29,0x42,0x51,0x34,0x1a,0x41,0x57, + 0x11,0x73,0xd4,0x76,0x05,0x4e,0x34,0x20,0xaf,0x95, + 0xfc,0xd0,0xfa,0xbb,0xa6,0xf2,0x18,0x49,0xb8,0x53, + 0x41,0xbf,0x3a,0xc4,0xa6,0xae,0x64,0x94,0x4e,0x82, + 0x63,0xb3,0x7d,0x0c,0xbb,0x66,0x13,0xd0,0x03,0xf0, + 0xf2,0x02,0xd7,0xef,0xe2,0x9f,0x2d,0x01,0xf8,0xab, + 0xd7,0xf7,0x93,0x77,0x78,0x1c,0x44,0x78,0xf3,0x16, + 0x6e,0x83,0x0e,0x8f,0x64,0x27,0x3c,0x6c,0x0e,0x98, + 0x24,0x2f,0x46,0x6b,0x98,0x8d,0x3b,0xbc,0x43,0x03, + 0xcf,0x4e,0x03,0x4e,0x95,0x69,0x70,0xa0,0x3b,0x90, + 0x1b,0xd0,0x30,0x04,0x48,0x72,0x30,0x6a,0x66,0xed, + 0x14,0x02,0x98,0xeb,0x93,0x03,0x89,0xa8,0x68,0xdb, + 0x0b,0x76,0xf2,0xdd,0x5a,0x93,0xfc,0x01,0x6c,0x4a, + 0x4e,0x44,0xff,0xd9,0x35,0x96,0xaf,0xe7,0xe4,0x43, + 0x3e,0xd4,0x75,0x5e,0xc0,0xcd,0x29,0x48,0x2a,0x98, + 0x06,0x44,0x98,0xb4,0x7e,0x13,0x9a,0x38,0x01,0x61, + 0x1d,0x0f,0x8a,0xac,0xb7,0x61,0x2a,0xf0,0xac,0x4c, + 0xd5,0xbb,0xdc,0xc3,0xb5,0x30,0x91,0xdc,0xa2,0x5d, + 0x84,0x54,0x59,0x63,0x04,0xc9,0x4a,0x6a,0x3a,0x81, + 0x80,0xfc,0x59,0xbf,0xef,0x8d,0x7c,0x80,0xcf,0xf0, + 0xc0,0x4f,0x85,0x99,0xa7,0xcc,0xa2,0xc3,0x4e,0xcf, + 0x5d,0xb6,0x7d,0xcc,0x64,0xdc,0xac,0x39,0xa5,0xfb, + 0x3b,0xc7,0x00,0xd9,0xed,0x71,0x97,0x9c,0x98,0x38, + 0x07,0xce,0xd0,0x2a,0x6d,0x07,0xbc,0x0d,0x8b,0xa8, + 0x62,0x14,0x5a,0x12,0x60,0x64,0x87,0x70,0xad,0x37, + 0x55,0xe3,0x0f,0x46,0xb2,0x62,0x8c,0x9c,0x68,0xe7, + 0x92,0xb2,0xa1,0x32,0xff,0xcf,0x1a,0x08,0xd2,0x2d, + 0x98,0x09,0x38,0x43,0xfa,0xf8,0x5a,0x3c,0xc8,0x9c, + 0x3c,0x25,0xee,0xc5,0x02,0x4d,0xdb,0x6d,0x2c,0xed, + 0x81,0x7a,0x81,0x56,0xab,0xd0,0xa5,0xdf,0x38,0x82, + 0xff,0xea,0x54,0x12,0x6a,0x96,0xea,0xca,0x4d,0x48, + 0x8c,0xc9,0xab,0x3c,0xa2,0x09,0x9e,0xc8,0x45,0xf9, + 0xba,0x5d,0x0a,0x4f,0x27,0x6c,0x3e,0x54,0x1e,0xec, + 0x5f,0x4e,0xa4,0x95,0x1b,0x9e,0xfd,0x7b,0x76,0xc4, + 0x0f,0xe1,0x3c,0xc6,0xd2,0x85,0x0f,0xd1,0xc7,0xf2, + 0xf0,0x53,0xd2,0x7d,0x6e,0x39,0x85,0xad,0x91,0xb0, + 0x9f,0xb2,0xbb,0xbf,0x94,0x1c,0x85,0x13,0xb2,0xf7, + 0x67,0x51,0xab,0x7a,0x63,0x01,0x0e,0x31,0xcd,0x60, + 0x13,0xfe,0xa9,0x23,0xc7,0xbd,0x2e,0x18,0x91,0xd7, + 0xc0,0x52,0x13,0x43,0xb0,0x83,0x2a,0xca,0x4e,0xb9, + 0x07,0xd2,0xf1,0x7f,0x8d,0x44,0x2f,0x8e,0x44,0xed, + 0x9c,0x60,0x37,0x73,0x53,0x81,0xc1,0x0d,0xd5,0x8f, + 0xea,0x1f,0x50,0x66,0x0d,0x50,0x51,0x75,0x21,0xef, + 0xef,0x24,0xd9,0x8b,0x59,0x09,0x8c,0x1f,0x81,0x17, + 0x20,0x8b,0xae,0xcf,0x50,0x39,0x0a,0xac,0x43,0x9c, + 0x7a,0xaf,0xc8,0xef,0xe1,0xa3,0x61,0x92,0xc9,0x60, + 0x63,0x53,0xbf,0x29,0x08,0xf2,0x04,0xa4,0x7b,0x92, + 0xe4,0xff,0x9e,0xbc,0x7f,0xf7,0xd0,0xf3,0x03,0xa1, + 0xea,0xd6,0x3f,0x88,0xb9,0x56,0xe6,0x0d,0x5e,0x71, + 0xdd,0x5c,0xef,0xff,0x06,0x06,0x87,0x74,0xde,0x60, + 0x8a,0x14,0x78,0xf3,0xe4,0xd8,0x6b,0x7a,0x78,0x0d, + 0x7a,0xb8,0x2f,0xac,0x4a,0x35,0x4c,0xc4,0xc8,0x68, + 0x65,0x65,0x77,0x7c,0xb9,0x76,0xd4,0x41,0x2e,0x5f, + 0x30,0x45,0xf7,0x03,0xed,0x3a,0x27,0x47,0x67,0xa8, + 0x2d,0x57,0xd9,0xc5,0x2b,0x79,0x9f,0x4d,0x33,0x1e, + 0xe7,0xf2,0x2e,0x81,0xa0,0x03,0xcd,0xa8,0x78,0x55, + 0x01,0x41,0x64,0x35,0x04,0xfd,0xc1,0x5e,0x44,0x15, + 0x2f,0xc3,0x4e,0xde,0x97,0x80,0x24,0x13,0x1a,0xb4, + 0x1d,0xe2,0x35,0xa5,0x08,0x73,0x6e,0xa2,0x22,0xb2, + 0xc2,0x08,0xfc,0xfa,0xd5,0x96,0xf8,0xa3,0x14,0xfb, + 0x5d,0xa7,0xe0,0x67,0xae,0x3e,0x89,0xe1,0x87,0x23, + 0x14,0xff,0x2e,0x3e,0xf0,0xec,0x5a,0x3c,0x92,0xd8, + 0x42,0x5f,0x28,0x27,0xdc,0x42,0x2d,0x9e,0x16,0x97, + 0xfb,0x59,0x2b,0x84,0x82,0x86,0xaa,0x7e,0x6f,0x4d, + 0x61,0xd5,0x9e,0x7b,0x8d,0xa4,0x95,0x01,0x17,0x58, + 0xd2,0x1b,0xcc,0x3f,0x8e,0x77,0x5c,0xd2,0xda,0xab, + 0xe7,0x4e,0x23,0xef,0xf3,0xda,0xd9,0x1d,0xff,0x23, + 0xfb,0xef,0x0f,0xeb,0x99,0xa3,0x07,0x89,0xd9,0xbb, + 0xf7,0xf1,0xef,0x36,0x6c,0x83,0x1a,0xe8,0x2c,0xdb, + 0x82,0x2c,0xde,0x89,0x07,0x99,0x27,0xea,0x90,0x8c, + 0x84,0xee,0x2c,0xd2,0xc8,0x47,0x96,0xed,0x44,0x65, + 0x82,0x4b,0xc5,0xa8,0x96,0x5d,0x6c,0x3d,0x1a,0xad, + 0x15,0x54,0x56,0xad,0x9a,0xa1,0x60,0x02,0xc5,0xb5, + 0x14,0xfd,0x1c,0x08,0xf8,0xa3,0x52,0xe1,0x8e,0xc3, + 0xce,0x16,0x80,0x6f,0x33,0x13,0x70,0x1b,0x70,0x98, + 0xc9,0xfb,0xb7,0x6c,0xfc,0xf8,0xe3,0x27,0xb2,0xa1, + 0x4b,0x43,0xf1,0x61,0x54,0xd9,0x90,0xf7,0xf9,0x08, + 0x60,0xcc,0xea,0xbf,0x10,0x88,0x11,0x9b,0x52,0x8a, + 0x6e,0xcf,0xdd,0x32,0x80,0x91,0x25,0xc3,0x46,0xd7, + 0xb3,0x83,0x02,0x72,0x9b,0x52,0xa8,0x90,0x6c,0x34, + 0x05,0x26,0x6e,0xf1,0x97,0xf2,0x4c,0x18,0x38,0xd8, + 0x15,0x91,0x19,0x76,0x6b,0xda,0x70,0x66,0x55,0x45, + 0x5a,0xb1,0x80,0x73,0xb7,0xd5,0x2e,0x6a,0xba,0x86, + 0x9d,0xef,0xf0,0xfa,0x3c,0x7b,0x6e,0x45,0xf9,0x7d, + 0x60,0x89,0x7b,0x10,0x11,0x55,0x90,0xb6,0x9e,0x4e, + 0x05,0xb2,0x30,0x0d,0xe9,0x9d,0x12,0x8c,0x32,0xb9, + 0xa9,0xe7,0x03,0x1d,0x46,0x1a,0x7f,0xda,0x06,0x7c, + 0xe2,0x34,0x8a,0xe3,0x27,0x6b,0xfb,0x8a,0x0f,0x31, + 0xbc,0x3d,0xa6,0x8e,0xfb,0x21,0xc0,0x28,0x0f,0x78, + 0x5b,0xfa,0x70,0x73,0x06,0xa8,0x68,0x70,0x52,0x18, + 0xed,0xa2,0x41,0x1c,0x8d,0xdf,0x4e,0xdb,0xcd,0x3b, + 0x0e,0x77,0xbc,0xec,0x68,0x89,0xee,0xd5,0xe3,0x16, + 0x30,0x4d,0x45,0x24,0x82,0xe3,0x50,0xd7,0xde,0x63, + 0xa7,0x50,0x5c,0x62,0xa5,0xe5,0xc4,0xf6,0x74,0x65, + 0xb0,0x83,0x85,0xb1,0x44,0x14,0xfb,0xb5,0xc5,0x7b, + 0x63,0x19,0xe2,0xf1,0x65,0xb9,0xec,0xbf,0x17,0xa4, + 0x8e,0xf2,0x0d,0x63,0xa3,0x25,0x57,0x49,0xf6,0x70, + 0x4b,0x81,0x29,0xd9,0xed,0x19,0xce,0xe2,0x1f,0xa8, + 0x06,0xea,0x94,0x31,0x9f,0x9b,0x02,0x2a,0x46,0x02, + 0xb4,0xac,0xd5,0xdb,0xa0,0x94,0x30,0x75,0x0d,0xfc, + 0x7c,0xe3,0x05,0x58,0x5a,0x89,0x02,0x6e,0x5c,0x5d, + 0x13,0x0d,0x70,0x10,0x97,0x25,0xcd,0xac,0x1e,0x04, + 0x80,0x67,0xc5,0xe6,0xe3,0x92,0xf4,0xe9,0x6e,0x38, + 0xde,0xe1,0xf7,0xef,0x31,0xbf,0xf3,0x4c,0x11,0xa2, + 0x80,0x6d,0x4e,0x6b,0xd9,0x48,0xe8,0x81,0x2f,0x72, + 0x68,0x53,0xc2,0xc4,0x2b,0x76,0x9d,0x8f,0xaa,0xf6, + 0xe0,0x4e,0x45,0x2d,0x38,0x25,0x41,0xdb,0x5d,0xcf, + 0x9c,0x1c,0x01,0xc0,0xee,0xc1,0x11,0x67,0x20,0x33, + 0x15,0xb9,0xc5,0xa4,0x62,0xee,0x38,0x36,0x8c,0xcf, + 0xca,0xc0,0xd3,0x19,0xe0,0x99,0x62,0x1b,0xdc,0x37, + 0x58,0x77,0x77,0xce,0x20,0x83,0x2d,0xcf,0xbd,0xa2, + 0x44,0x2c,0x7c,0x8c,0xf2,0xa9,0x4b,0x1c,0x85,0xdd, + 0x3b,0xb2,0x0f,0x67,0xae,0x3d,0x98,0xa8,0x25,0xd5, + 0x48,0x15,0x9d,0xa9,0x7d,0x4e,0x24,0x1f,0x09,0x71, + 0xd9,0x2b,0x23,0x39,0x48,0xab,0x3a,0x4b,0x85,0x38, + 0x64,0x86,0x1f,0x30,0x1b,0xe1,0x39,0x0a,0x0c,0x9d, + 0x95,0xc0,0x13,0x5f,0x80,0xfb,0xb9,0xfc,0xa7,0x12, + 0x5f,0xa1,0x4f,0xf4,0xbb,0x12,0xc1,0x90,0x51,0x3e, + 0xd0,0xf3,0xe4,0x0d,0x22,0xc1,0xa0,0xe8,0x2a,0x95, + 0x78,0x79,0xf0,0x81,0x37,0x8f,0x3f,0x3e,0x50,0x91, + 0xbc,0x5f,0x1c,0x65,0xc3,0x70,0x6e,0x53,0x36,0xb2, + 0x24,0x68,0x93,0x95,0x60,0xf8,0xd8,0x1a,0x1f,0x46, + 0x61,0x7a,0x4d,0xde,0x7e,0x1e,0xe1,0x41,0x1d,0x31, + 0x60,0x94,0x0e,0x84,0x4e,0x45,0xaa,0x22,0x70,0xba, + 0x99,0xf2,0x3e,0x27,0xf0,0xad,0x9d,0x70,0x34,0xb0, + 0x8b,0x81,0xbe,0x87,0xe1,0xe4,0x48,0x8c,0xce,0xa3, + 0x14,0xed,0x8d,0xe0,0x3a,0x81,0xa8,0x1c,0xcf,0x02, + 0x78,0xfa,0xef,0xcc,0x63,0x95,0xec,0x87,0x07,0xf2, + 0x3e,0xb0,0xb9,0x86,0x12,0x20,0x52,0x09,0xb2,0x94, + 0x40,0x57,0x27,0x47,0x89,0x52,0xd7,0xe7,0xdf,0xf2, + 0x05,0xe0,0x78,0x63,0x10,0xe7,0x13,0x78,0x01,0xfb, + 0x80,0x49,0x6e,0x5b,0xa1,0xa7,0xac,0xe3,0x00,0xa8, + 0x9d,0x0e,0x6d,0xf3,0x86,0xe8,0xc2,0x7a,0xeb,0x5d, + 0xe8,0x79,0xba,0x9b,0x4b,0x8d,0x46,0xde,0x6f,0x0e, + 0xd2,0x40,0x5b,0x5a,0xb1,0xd4,0xe0,0xfe,0x22,0x57, + 0xb9,0x6e,0x34,0xcd,0xba,0xd8,0xa0,0xe1,0xe9,0xbe, + 0xd7,0x16,0x13,0xb6,0x0a,0x4b,0x09,0x95,0x64,0x65, + 0x1b,0x5e,0x8c,0xc0,0x82,0x8e,0xa3,0x92,0x8f,0x4c, + 0x94,0x63,0xdb,0x66,0x9b,0x33,0xfb,0xce,0xe5,0x50, + 0x2d,0x00,0x58,0x2a,0x6f,0x13,0x74,0x36,0x75,0x87, + 0x0d,0x26,0x31,0x2c,0x55,0x87,0xa8,0xfc,0xe9,0x4c, + 0x3f,0x2d,0xf3,0x9a,0x4f,0x6a,0xc1,0x20,0x50,0xc9, + 0x50,0x5b,0x47,0x78,0x36,0x1f,0x81,0xef,0x09,0x45, + 0x48,0x4b,0x99,0x9b,0x16,0x55,0x18,0x3c,0xe7,0x9b, + 0x93,0x80,0xf8,0x71,0x63,0x8d,0xef,0x46,0x84,0x56, + 0x76,0x47,0x96,0xe6,0xd6,0xad,0xe3,0x07,0x67,0x70, + 0x7b,0x88,0x46,0xde,0x6f,0x8b,0x6c,0x73,0x2e,0x85, + 0x16,0x86,0xb6,0xc3,0xef,0xbd,0xbf,0xfa,0xcf,0xe3, + 0x7e,0xd8,0xa0,0xba,0xed,0x8c,0x5d,0xe9,0x50,0x87, + 0x54,0x18,0xb2,0xf5,0x8e,0xaa,0x0b,0xa2,0x5c,0xce, + 0x85,0x07,0x8c,0xd0,0xbd,0x00,0xe4,0x8b,0x69,0x73, + 0xec,0x60,0xf0,0x04,0x1c,0x25,0x58,0x7c,0x77,0x43, + 0x15,0x18,0xad,0x98,0x76,0xc9,0x0a,0xe8,0x47,0x3e, + 0x4c,0x21,0x68,0x88,0x86,0xa1,0x98,0x8e,0x03,0xb3, + 0x5f,0xbf,0xf3,0x3f,0x59,0x94,0x62,0x14,0x60,0x90, + 0x76,0xd6,0x3a,0xa7,0x90,0x3b,0x36,0x0b,0x9d,0xd4, + 0x9d,0xdb,0x03,0xaa,0x8b,0x7c,0x22,0x61,0xc6,0x9a, + 0x35,0x45,0x93,0x43,0xba,0x94,0xc1,0x4f,0xb8,0x00, + 0xf8,0xe1,0x12,0x7f,0xaa,0xd3,0xcd,0x63,0xd6,0xcc, + 0x06,0x26,0xe1,0xd1,0x04,0xed,0xd8,0x61,0xfd,0x61, + 0x6c,0x73,0x6c,0x4b,0x82,0x33,0x79,0x1f,0xc7,0xb4, + 0x9f,0x11,0x2b,0xe0,0xb6,0x4a,0x08,0xe7,0x05,0x9e, + 0x67,0x9e,0x75,0xf6,0x3e,0xa5,0xcd,0x54,0x3c,0x01, + 0x19,0xdb,0x18,0x8e,0xcc,0x9b,0x2d,0xb5,0xfa,0xd1, + 0xa3,0xda,0x93,0xc3,0x90,0x2c,0x17,0xfe,0xc0,0xab, + 0xed,0x47,0x95,0x1b,0x46,0x2d,0x20,0x90,0xd0,0xfb, + 0x21,0xea,0xc0,0x83,0xb2,0xe8,0xd8,0x5a,0x62,0x0a, + 0xee,0x01,0x0c,0xfb,0x35,0x65,0xd4,0xd7,0x3f,0xe9, + 0xf6,0x9c,0xa8,0x8c,0xe0,0x94,0x70,0x91,0xb1,0xc8, + 0x72,0x4d,0x24,0x86,0xc8,0x4d,0x95,0x99,0x53,0x90, + 0x98,0xcc,0x29,0x7d,0xc3,0x7b,0x96,0xd5,0xd9,0x14, + 0x7b,0x2d,0x19,0x9e,0x99,0xcd,0x72,0x5d,0xf3,0xcb, + 0x98,0xb4,0xb0,0x01,0x7f,0x3b,0xdf,0xf7,0xac,0x0c, + 0x78,0x9b,0xbc,0xbf,0xf9,0x0d,0x3c,0x2e,0x27,0x70, + 0x4a,0xe6,0x10,0x16,0x9e,0x63,0x95,0xd8,0xae,0xf4, + 0x96,0x7e,0xcf,0x10,0xb3,0x9b,0x15,0x6e,0x4a,0x4f, + 0x6c,0x6b,0x9d,0xdb,0xda,0x1b,0x6d,0x10,0xb0,0xce, + 0x79,0x8f,0x44,0xde,0x2f,0x6d,0xbe,0xeb,0xa1,0xad, + 0x0d,0x18,0x04,0x09,0xaf,0x3c,0x49,0xc1,0x4e,0xde, + 0x17,0x96,0x9c,0xa9,0xee,0x32,0xd3,0x91,0x13,0x36, + 0x40,0x11,0x00,0x4d,0x35,0x0d,0x36,0x60,0x29,0xca, + 0x55,0xd7,0x36,0x19,0x9a,0x60,0x14,0xcd,0xe2,0x4c, + 0xdb,0x6e,0xd4,0x6b,0xa2,0xf3,0x43,0x83,0x15,0x6b, + 0x19,0xa3,0xfa,0xed,0xa1,0x66,0x46,0xbb,0x9d,0x05, + 0x73,0xd5,0x59,0x50,0x02,0x3a,0xb8,0x87,0x35,0x55, + 0x38,0x13,0x33,0xa1,0xa3,0x33,0xa0,0xbf,0xe8,0x8d, + 0xc6,0xd1,0xd9,0x43,0xea,0xeb,0xc8,0x59,0x76,0x7c, + 0xfd,0xb8,0x8e,0xff,0x51,0xf2,0x8f,0x3f,0x09,0x2b, + 0xad,0x88,0xe7,0x0d,0x8a,0xf5,0x20,0xe8,0xe1,0x9d, + 0x63,0x6f,0x64,0x9c,0x0d,0xf4,0x78,0x98,0x69,0x1f, + 0x71,0xc9,0x8d,0x06,0x43,0xea,0x50,0xcc,0x9c,0xf3, + 0xee,0x2d,0x80,0x72,0x16,0xd5,0x32,0x1b,0x4d,0x8e, + 0x4b,0x0d,0x46,0xbb,0xb0,0x0d,0x8b,0x9f,0x5c,0x85, + 0xab,0x31,0x2d,0xf7,0x10,0xb7,0x42,0x33,0xf9,0xe2, + 0x18,0xed,0xd9,0xb4,0xa9,0xbf,0x55,0xa1,0xa0,0xc2, + 0x23,0x5b,0x6f,0x86,0x9a,0x76,0xac,0x56,0x38,0x9a, + 0xc1,0x69,0xd7,0xd8,0xff,0xde,0x45,0xbd,0x03,0x32, + 0x5b,0x8c,0x0c,0xda,0xfc,0x43,0xcb,0x83,0x4a,0xee, + 0xf5,0x65,0x58,0x8a,0xf9,0x8b,0x22,0xac,0xb4,0x63, + 0xea,0x82,0x95,0x6b,0x64,0x43,0x46,0xd3,0xc6,0x8d, + 0xa3,0xe0,0x19,0xa3,0x61,0x48,0xf5,0x98,0xaa,0xd6, + 0xa1,0x6c,0xff,0x22,0x0d,0xff,0xbc,0x04,0xe0,0xe3, + 0x26,0xf8,0x56,0x3c,0x7b,0x97,0xe6,0x8f,0xb0,0xb3, + 0x7d,0x3a,0x1d,0x21,0xf6,0xd9,0xf9,0x46,0x5b,0x67, + 0xe0,0xf6,0xfc,0x6e,0x22,0x09,0x9f,0x77,0x52,0x3c, + 0x4b,0xaa,0xa8,0xb2,0x8c,0xf1,0xc0,0x44,0x1d,0xe0, + 0x71,0x0f,0x87,0x8c,0x2b,0xf5,0x49,0x75,0xe2,0x4c, + 0xa6,0x29,0xdd,0x6a,0x9c,0x35,0x53,0xd8,0x0a,0x92, + 0x8c,0x60,0xee,0xa9,0x3d,0x6a,0xd4,0xbe,0xbe,0x93, + 0xf7,0xaf,0x41,0x97,0xa5,0x76,0xce,0x05,0xc5,0xd3, + 0x76,0xb9,0x50,0x26,0x41,0x1d,0x60,0x02,0x79,0x9f, + 0x45,0x58,0xe3,0xb5,0x30,0xe9,0xe3,0xc6,0x2a,0xae, + 0xd9,0x07,0xd3,0x74,0x47,0x5d,0x6a,0xbe,0x3d,0x4c, + 0xac,0x48,0xe3,0x76,0x3f,0x28,0xe5,0x18,0x8a,0x4c, + 0x1c,0x2b,0x96,0x73,0x05,0xa9,0x92,0xc5,0xc9,0xbd, + 0x05,0x83,0x4d,0x91,0x2a,0x19,0xd9,0x1a,0x84,0xe8, + 0x21,0xbc,0x15,0x00,0xde,0x20,0xef,0xe3,0x6e,0x25, + 0xee,0xc8,0x34,0xf8,0xbb,0x6c,0x04,0x7b,0x48,0xb7, + 0x3a,0xff,0x3c,0xc8,0x66,0x30,0x6e,0x82,0xf0,0xa6, + 0xed,0x97,0x71,0x3e,0x2b,0x00,0x14,0x1c,0xf3,0x87, + 0x29,0x91,0x6c,0xac,0x35,0x78,0xca,0x5a,0x7c,0x08, + 0x78,0xed,0x78,0x10,0xe3,0xcd,0x3a,0xcb,0xce,0x50, + 0x55,0x60,0xd4,0x09,0x3e,0xc6,0xf0,0x15,0x8e,0xc2, + 0x95,0x6b,0x3b,0x79,0x5f,0xea,0x62,0x4f,0x75,0xd1, + 0x31,0x14,0xcf,0x48,0xb4,0x0b,0x80,0x90,0x91,0x88, + 0x66,0xc0,0xfc,0xf7,0x21,0x9a,0x80,0x70,0xfa,0x4d, + 0x2d,0x2f,0xe6,0x78,0x34,0xdd,0x07,0x50,0x86,0x7b, + 0xc8,0x31,0x9c,0x10,0x55,0xdc,0x7c,0xbd,0x58,0x10, + 0x12,0x93,0xde,0x75,0xa8,0x54,0xd9,0xd2,0xff,0x07, + 0x75,0xc6,0xa2,0xe3,0x51,0x9c,0xfa,0x0f,0xa8,0x7a, + 0x94,0xaa,0xba,0x24,0xc1,0xf3,0xff,0x1b,0x00,0xf9, + 0xb9,0x55,0x48,0x36,0x2a,0xf6,0x5d,0x00,0x00,0x00, + 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/scroll_gradient.png b/data/resources/scroll_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..30cefd57142c5ad6505ca75a64ad737ec14214a2 GIT binary patch literal 37639 zcmeF&<8vil*f9FN!yVh6cw$d%+qN;WZA>z;ZQJ(5wmq@!yz`vrJzvg$aH{SPT~~M2 z>Z)GXTGh3B{rZYfkP}CM#f1d`00@#2B1!-N@ZTvA0D}4#bR0{~{skC&2~8&e01oYc z4j>>s6B_`4mA4cYR#338bGCD`u(KzY6c#47ceFFJv@rz$+}E;{%~h07FnOQ0?uDeo z{S&3_lrTWVN8hhLIDzIMad^()`Y+B|!s=Ui;n1=2J!6!?wD6;v(mkAM~>;w%D4(%S$3k1ND z*#nS44JIT`AEZFQvo8-1&9`3YZUE4I9u5TPmCfj7#1H#IIu%OO0s036d!6HcNQ3;* z0Ro=ULd5_9F`$1|Dups27Xn}~ZfvvShvv+7>|X6f#^r00a+UR16QH20(ZL3`R&v z-2uUA0Ccfib)FlVYUHEu|1y|dTNS2x*1WQ?z9K$>zk3${^#H63VQ(nVAt7q_LG*O z0oR`!%KztQKKUhtg&th4%TuITJ(55ZAopZV{m%Y>awD1-+qSy;_uybfYEVeqa7^9j z)4X55SN+50#h2&(>0zgPk1T*$H$WWXd8dEkUZx0tIvyt2XyY(O{JjP4>z!c!+n}UT zo5pwaeMMA8+Z@JDG%WDV!u zy(a+Rw!^M(feHlfZxOUR?e=xW{~?}B4)8aVjCTM4^hC($RmK|lhd}^dHVNs?f<=g6{?l3jzeJy^0p03HFHe z{i>~qy!J@1hM?>|s?Goy2*D8$njy(rIMC>q25B@1D=p-iq)!3@HIj^YG#p*=n{*tT z1e4M)6=GEhf?HlkFwQU?vGzFb5dd@GduXRPQ({29BJToxlWkL>XObm8H6b*T~w8yG>>b6W$|QLbL`xXvYA9EmolS1 zH+~|1oN^3)?*@+$iV-v%Zcc@hfenpqj^l=1lPXh;GardFtis5_be4LQhLmQfs`0(~ zyEjJM7;KVM5=9c;cLtTR^5XKXayZpH)p3=WGCgIVYB5z7<^3|4h2#p=@+^fjWjtl` zGVao_a`RF<75+kB&5sBu%>kJKdEr9E+&caJ&LLtrW1I$eS`ur7icpsTwn2)z$yIOH z?;WWh1RasQJ3VFiDvxJ`>77kna*-BM^q&#cfP;2(66ZXsPT$fW!jib zb*#&iQ<60*Bq|gu#Lv3et1n8jin~NRG~WUc1&5_5btuKnW2PXpj+9rGH%nkkFlBkU z9;)fft&8yTIz-%hY)dXvv%B^Dvt{f`wmiCyUh#bxK2$z_zLq?Q!)rh_z>`6(!%t!J z{9$vj;~`)eUcXTk)*TQKE;39qOxX>NYn$aMSQPs$h7@Hvq_a=9|8wZ)Pyq!L1qp?; z?5XT!x{_>LF?BJw47beic?cWus_3GxI z%|3?aMp))8f2s#A6S@+7+I@b1@IoVmts+(sXc722H9Demsc~(kPi0>6`~102K4CD| zm`0vnVcBm+8>b$$%u>#n7dOW;Z*vN|3y+MD4jiXX;iJ#M8`>P{I*@XHaM0cLoO{U1 zXvpZlC|$3)WWTh$4BN<=V9lY<)?{&-85j}XQT#j050{g~XuVzOD=#b`VBT~@%3#b8 zr(U&O+fw9K{$zNC#rMePn6uBf&%?3Byrro>!O`0?(lRbTV3(~QvMuaK`epLv`85kD z@h1nGgGU4i255u5J$rhS^hEP>t(!j9uU-g7<+cf82*w0f1^(@;BC!}bkF6qkI!c|2 zo3cajbZg{KS&3sDc{kG2ojz@24EVRM_^5O&%Yc@;?(*~&0ylIN_U zlVbbMS59xmv&PZR+Ri^jZ>Bl1sF9^1X(Nr#N&mf?-PWdi`~BiBY%gmMZr=+lm0?8J z-Xm|S|30Jyvy2{?`F@@QC(eu94UZw#~Sv*9bkI^PN9 zZY93Udd8o}b+UPo{b4Dh{o58ySr*$VgCMh+!Ih1f?n?ZVnU|}JDJVWJ) z{M7u=%yqodG^GCXk8NZN17Q;MsC7eZC8Q=DY_m}Dv5FSe@^|QZb5nJ*p2>(Y&g6=0 zn#qfahOzZnj?Al^uM5c2RiBS_kO$jRp2K0jd~0~(uZ}1`c}{-&saqxY)8S$md=C5rniR2lxou&QV2)Qs zDQ1c0OdN5TsQWYP%8d?z9YOVX=FlFgy@6CncEnroC-%BbbqN#J~f`R#O6R#KLaFa67g z!FqnP*OBqmwiS}yRXeit?wsgX8lR`v86F8!aU&Zj(|3G?#9 z9hn{J)onV~ZI_;1Ox`Kc>bz zR^2Est2*U7_3s5P1XqPO!xs6qKQ~scHvFu5-E!|{H^iTyLV~70;~rv=gdtV-{PZsRIPE>d zsaYTDA0q4?b!TDHyH|U==yTg}Be*KqMv_19CibKHvUsU`P@XAyOTbA;_<{gWy?Zxi zpY}~h6chek6B|n?$pQeLfZ9cu#N&o1Mix{{@7}ok z&z9}Hef&PCdIqkheRm(U-thImg1f}JKSQsc3_iPa*3ax#h|E8JXE^=Ef&o0dHd>1Z zK7Yz4TC=`3Q3%2t>~M8E>JOiFoe@qy8Q6QHfbX2~8S_Ek`qex+83^#p$M&ABO9aJ$nv6Y;SMhybi|tb@)nrezqeomuuw= zv~Ia}y}9fd6OKHzfBNVU{XI)uVj2VX*sh*+dFw{pd|d56Aa{Q7H~YPOe8u{a^h{B1 z*Ks@A%7J2HkS~&4Dn_rFf{nvE{a>+9@J{pvdX&z4X6ez+X20Rfb>LfwC;Eop1%&8| zBl5Er8iVPVe0`YJX7jGo8N7%QZxf7^^eyj&d^8eV>b&DO?=AJ;T7zlsEWezh=6peo z?U{F}IR-FdabA>}^7@Q4hA>kUhhq?s%?NxZ82jTNU`TcAKfew-(#7CkZ9jOs z9cG9JT+fhJbNe26bL{#Xmefr%K@!;0efJ@FAX!X_Se}Ppjee24HsPLX1ED7rrXUTs z;0Td@F^B+PW34q_9Rd{`1{o_31g`DJs!#yPU;p zd@34KtLv^-1d`yZKKEmjL9ZrXB|+Akz}FbmjO~ZDalZMF)GAuq3AaalOpS_L z;EE9n&w6lQ{czV(tQx%tO5ilUk-+PqD^Ft%8@oPj{;0;@HF3pnb__1q-~P0}9PmX> zlapzw1!ALXI${6F)J1BAteun$!Uy(V_Mx~Pn=v?2wyL@+tpASiOvlDNCZ?u`+p)j6 z%oK#u6SEG{YXKKRHD8nTBjTXN27DaOuv1VVgDM90{CC^=&NqpR5h8*RF-9N2ZWCDR z{;21^zHZL_(GB{kk9FA{-2=zh_Onq*{zq;%a0KPM!_Su7OzyQHq)vzT!NUL}!NO(Z z4$n6DETrC9@)y|idep?F*@E8Ri8ysZ+D*#5v9*L9{8&4@SQKO*vK-1=;&8Xtl-@4D z(BvQ+B*suTYsG3Wk7iAl-|0#2dX!Z>^&e9_YNNiOFq77LYMbgjh;Ws_36SeHq>%pcC@M-`iWl<%S)9h^O!a4Us2FMJNBI*B8rH-U)W2l8w3l z;re(=*I$28p#~mWZtYp2w;T>z#+>$pV%(*Ca7(j^CHY~ z!!GX;8V=Ub7YtE96!lWd3s63#akNi4k9Wr`LzFJpcO> zv-<#PdM9;ALR(DnDB!wbh4jl>%b1S0kZrO#zpu{Ycy&oV%Nd6N)D$8nc0S=Mo#rPD zN%BK$y4RJ1>e%{qMmSW4cz?e8NW2uIkw?oMcAX@F{5fGeLT zMp?()s29+iXvByig*QT&hiU{Ru+HvJ0McpzP=TqQ8fe;p&q5iIsAAgWRp z6T%XA2VEh~siyq0a>k_K-JH6C)R!ra5pN@Y83I%g;qbL2Y;qW!(?(L`-k4w$Dl!*) z?~<9wcv)|@Y955^&xE`QoFt>+cqS<;-m|N^Xz1g0kgym1)<7L#Ts=#<#>3;25jbRB zZckyxY%IvU1FV|WV4ttqrn`_ggSz@0LyCqS8DV=$dSR(VJ>t{WRL&4{PqjRfpkg3} zh`a?<)&sP4z!3GvS}V+Wx~$y_N-=y}0)zxD)|-e}S-drJ)Q1SpIC!&XD*t)Ue?d=piJVuztRv!(Xi0c=-b(xW*Cw6@Cg>h(Ro%wo@x(Q*ZZUfp`)L z(*Nf)Tv(5dnvujhj@!ue2hvR>3DQ1GwxJbj@b7Pd;!W9dz(hks5)-EIHhBB6TH;;j zNaDy}?|n)~il-jU{$@caREv}uQ5*@5APqoeFrIRxvX$MvVx!sBHJ`5=LYrNmg0ubvV6RiV7VSOY z2bXJZ9pLWh*ou3+VCeq3u76_fVYH%dqU;ClU6(WYFvbfw2n<2(2p=0$1f=FpAjNRC zzqlTLYTU69@Ek$dN!A4#u{ zzGYk);3by+W}0d&u#v$}K#G}NIl|d(+|gPyB<%Etu(fq9y{J(?f`E~wGWb>)cuv>r zNJ?z{2hxJI(qI8ny&FXsWI413URb12W)7hpv&Utpa_cL3a$HWL<*P9YqVXPMJei>F z9yq80>#gB@kXL8g{<=VuzWyN+HM=I_h0TcYVQ>i|G-rkUvwL9QxukvT>z($~B{blO z(SA_&Wg!xn?AglrY~#XYYQ(2{EG#8!wEG}|#+;9~7SKYz9`c*)_A^puKAHr=Crmx5 zn8;JC{aJ97wwF)`IIksW6y9VWfX50%u9Y%w^f-i2T)OV&nh z-X3W@Fl_5?qIKxsH+cneLk>|gTSTVBfMoT?I?H-CFtBth768FrbU3Pd4G{~?8H!c| z9Vo7>_#N)K6*rKG0az=#J*0g5d3?%8+Q@uuc0X#jAEeMP##Q#VgQzC$B*A-OPQ}*l zxs|yiQ$nu_;MnjZ?1y(fCU<~uH$7;+Z*rP`{MPPVocSxd)1vMq`PEhy4v1}kIl;bCdBQeB!`nukN`Oib^eCQKN{~IepPPsc--WiKr7%iP-j<{`UGzE6!Yc)H z1LV4%EYCQ(cPh%ceJvSz3p)oIvy_j|gc*oE&-Ui)+8g~)ksL)N#y#*jv(v5OV=M(D zA*LKzj@FsK>H-g(g>u(g(<|B4+7ZFp&tzjOFJF!SRor-(dzOz@r-l7@CHBc&V794K zL{LM#L=&UK0s?+8$)$x9uJl`rQV%icuwF4Zv_#&&Ym z?a%;j@`n~t_FDv%>P8o4M%>dVV@7~7LfMC+8Ztba1xEK$5tBd&nbwVRWH!ua-rg_Q zpJpXOS5B~FLOhOB82VL+7zl(&UG0K4IjEYl|!ixk7p*{4#)_-!GB_ z=w$0SG*K$IvUfO4EF!|9?4`H(0eCivwiZx-1}hJQj;P~LYGk3mvxqMfq$`8_#GOi9 zx*#MBMFq6_n}{M5!sH)A{)k)FTb*3ywtgig_+atiC*81QX|4KpZ2;McHP>w12NEqT z+~YEj0iRi-Dqpuw5fxr`+?tV3Ul9juaYh;+hW)DNyb&9T)H>G=ozo_b;TqfkeI2q&?@d zMh=c)i-=SN74%wX_q~*B7!z0c?w{_A`6v04#y2LNbboj#IEpxQ{ zE>Y)_#Y<-u}MtGZYKZG2G^Yw(TFsRthoKx1i@T$D-FBo+w0w! zb7z3Z5od3pI-|jBSBozo-#+lJ7D0)&0+`pobKp)2(Za5RWrujjsx^-#Q%-{wAV#?~ z6CfquwGK9ITi|LhACGMxC zV(LQsQiC2O4D-(epTFtyhj`oragQIo*plcNxs3sRJ8ORw6E-aa1Ae=K_d5lmS59ij z)#I@wqO*L&H=CaD)j}37tybKHOlX&P0 zJw=1tTSbzi`*NhUfakkq@VLT@7<{p^8;{JBH|c~BG}x_zCOC(gOBN(7d)&%aLG!=! zD`PmFg%Ye;aN)Y*ILkk`zjebFBU*Bts*T{2X1EDkf#(0-GF$0?;;{(?h*Crs{A$$k zgwC`PQ_EK!_>C%zMU*F{tVA_N?kXu@)3fJxe?8Mofuwx=xHfG@c~9(j~VDyfnW z82|{VU&9L4YT}rJ=(g{;9%|&{o^EbL{iL_HcaNsIQQjwUh?D}ijA1o-I6}oL=*{RG zj?lyt&aH|Qkm$iUd`1Il9uA!PYLtdy-P+Zt|YE6AiX!KrP$_bE4uShf% z+-5#Nr}#imhQZ-4S=66Eu1tG9RaRFcZ0wa^IuyBswcFxFNd-G^G_~WKa{!s3{GLxW zr013-;E*xDel+-M_;BN=d*WNb*USWHKkP>o`rg8U0e*0Bt>MnW$L-MTy3GhV(HV49 zvYeeJ0|i|5a6OQNp))sCea%gOzluwm-{lQmcmzL~a~8y(BD7_9BjEA8+pioXs?4I7iy zpIlV#WL1ZoD%FnIyR7 zT=JQskXqp1OaG_~$CQPeTlzp;RZZ2Qmz9QXy*VqLGqPj}e51=Xb4T~|B!b6!Eb`7t zR_V1SF5B2k67}ZQe|z@ucNf??lII`)9kb8vfB?)K5WZy24(${cCyiR)x~GOuD&{m) z_HWfe@lGkGsxmD8>`~bUIw1@XjTO>t0)BFl<^7)gDWXMpi?+8SY`E``YB>rDATb5R zvsK-Moz9k^HP=oJEUl3I6e~O*iTV|>V=Eo!Fa1`zpss=OXN_1dtJEC0Gb$|C`S3#N z#2d4RXsh)upCpWU@S!HK@hgOE7sLY(?;V@`WUcZ}=+D$FchiWFy$69mc4#Au*L_g>qXQ+@X0IQ7maLgx4$4iB3r(B42oi-czLq#o?H+4@ z;Td`APX`4*)68SmNhD|%k9K&9d2v+XQ?*wWAS_VT_uOGZG~IGt5}Nl6Lq9SAb|iRW zF1&TbXu9KnYNzXcHTp&l!VgQ7Hr()U+be3}FFE)C$=3 zufqG^?x4KzK-ts)yfqd?2QkCaKDC~N7uwW@>W2wib9vHx&$E@vn9j@YjaP}Rc zQ3o9Hh7JLwg;d3vs3+&(_-nH}vqK-Wj39Kw6o+YH2X5rS0oeuN8_g%SzfgF3;f!qR|G-+u5U1d|C-{^u zS}nZ84Pn}>ise#xb`kVE6d^vRJ&qngyhRBg1e zHpH5j9ulb;qZPCHmvv)gv#k5n$Uv6D>Fx-2G zxmvMf7|QL+1J@0l=a~!l0;Xk|S49}}`Z!s2R?N^$#JztnmRm6iy}?gNVyA(f6%+S| zUW}~y%=AHl2-eteEl@fr;YYfw8M&GAe<)OB(JW9ZZD#nP0j|TYe2K65nh!o|m2VYj zWqw3-5IFH5uL%2d;1}NR8!8uUed;9Q_U0Xc5Wj)IJw+N1)F3hg>E$2R^MpeoN!k?~=fi}j%muW;dy&c*4)9%-LirC_x1Tnwx1jgddl7kej zkyvX-+UF!%sayK;Q}9OA7l8sC!xAtsKQl3{pUn=@vpVe_x!D*ocA|BZgN8t4+*RQj zeIn6}p>-#TwG(GfkQaM}9g@gl)Ph=^P0uK($3rXePjPl)HPd*q(Y>il8#^TD)Sk2V5SUr2V_=23{U{ME zn8f9&6jw5)6=sj9+NQr9ARp+bxgq>T-M)XzForNe);DiyEV)X7)Y$vZR-hlvLr>$I zB@PxwfUiOE-D0s84j&;}h&$VTvcl$dAK*WrUnjmK@0(web^&P2u7~FPxG5L~t=Vc9 zE)Q)b8rlbiiywNc$CfFAVH!ZBK{cnLdDUIunTXSagVt!Tk}%HI_BA@%eQ{+_*E>`O zuNCPXW2YVkRDLO-{}!839mH?a4M0N}u_otl{H!kH5ktLHnW;gnE2F_FO4wPkAsVP& zg}4WFcJ@AWJex}cK2IM$4hRULQMNim)^i6)S7DGcz$r!}XK~H;5wB)?8|M9$O>yy$ z5f7kP;eqk^QR$l8A%Mfz1A%Yf*B%42yjzyY`~Vs8XtRE^pN}_WnyZ9Uw zSBXtZxz<)_Q#$e002SyAX9hME%h!#G#7rq4;Z-Lv?}{hwm8+M#_}%%0BYLNYD=9d= zsNE3_)%f;%j71=&qhhyhO8-1e22v9ATMC-x-%#_fY=Rr%A2D^#yTbQ%JnxClIofiD z)@0`;=a&rR;=94;ADRp0TN?htGAt{>ey1Z2HE?1FY_$u6$mhAg>Xk18oZt0HXCp}! zxhYpBH&hJlg&zuDp%XR1RaA6G-nb`nb2re?xJnl%=+c;Bh#k3tIrgBp(?HDm@ z$RyPYGpbYp2Rc!HXt2*xmDc^*2FRWD35X3Se6!n6Iz0Z*=LnnQIR$TQRrUiPJ}~Tt zR|W{9!Q#aHb*C111C!C(*@yF7|BYhw?__wg0TJ5oMLcLwh_0e0p_}RKnVPC`YP35W zKbs=cs}27FJ>PV;wxTbQ#vY-F2u5L5iE;p~jId`3M1hR$>5D*E+)z$4Fz3hbz30)j z?mc06yO^?lUl8LM_*OFCMkeq(ZYH`|hXu0ue#^Y;UGx9}1GiSb*F!6$j512Z&X0wr zrxj}S6b(zxI$m9za|1(Kls~>dZ?-f--MuyG->x9b3cLqaEJju1c{h{{q+Gp18=j%d z1Gr2lj*9(%#R2H7AK0nLWpu&$x7~rsYWedPYF_=BdBEEUke9nHFzRx+PbE_P* zQE?%i$1w@Sx$-F`62!D!=m|0RXfR=O^6NpY9bfvdvO)D@w2x{LMw3LOdmfJ<2}Y`R zDRMnR@14p07$g<4D=hI<#?1A^-?T7mCgj+B%|l^|sd@=5IpXdL;_%o-;Cae%<)BR4 z;?8LpZ)-|?gma_ZE5je0s0DXaqF$t}a>U<<8vxm#+;Qr?>tP9TtmXKuy0Kk`eoEXzX{OwuS&ncUD1eR}DYxb^P`C9ht3R zrVH~y*w!l4evg2oH1n)3c}o@yd4VDJP|`ay=_=p*(#Hcvvhfi9YpXZKzoCk7AhLVk zaIWiITCV2g)Icx5fUhjh!-IS~FXeaAALKeFwDme@5hRYvribWc6i!mx*V(2n?0@v6 zL(R<^be7+lDd=o^x2K+XX~4HAuIzllW5!`J<2i#vjx@-dX}XHGSq9I|LNeyi*0qkB zAI0z>DxJ1Sg!dSHfw9%r{jW|=#O}5D2p*QD06%af6U-n;Nbii`^x2* zOrXzSz3-R!zAxV|MYHD-WW)>dbU#|b!!ZZvB{W+T*KsW9i{(ORIqLL+%gq#Rnh;Ca zR|=Y?w;9-@RNu9d8Rs3Wnvv=LA?C&Y^VCk2s`PqfDI>3#paLV>%zlmSvBypE%6|fr zG>H9c<~BFp%Lgaf=rbQgbCKF^@E3PAcDB)BpUQp60$Yikzp8@#X3e$}- zy;bx=dTx^=Cm!zO+C963)5_bEA<=)7g+3ksy`0vVhfxvQePe)RU&==*>qmm6R12>8 zBzkio8ELAQRSa%Z&DFt&^^9p*mXqL3qb_}-qyluRz?M16k~^KuYir#v>&HIUO~sUS zJ0vukxzIjybI5^t%87LP@i8Vu!c!KO8{W(V7TD2p%nGrte@%jko zs;2mn>T#knh&wIcOf#op0g%J*hEimB)(F}4m_%TD+=PSf4O8_jDj3)$>Fn;-jQxIqRDvw8U63RXS6L$$6;VDHhIP@7Xg9i)U z2)?T}-+u{a)g8N|mwbYk6Bd=zOJ2Vpk@xwww&z$tUaJoeW`LVfyl*sNB^U%?V5K9mwScbqot&N0cMIj)t6@}Koa2wH~|LHW@y-}f7 zLcwAG+TVi~Tv`w2vMlu{XM!Egsf3HyinN|H0+*#qrKx1CYZy3XFqBv-Je4^_e0Zq% z^GsBXaczTi#QEWFA51XRJ_{?M`GZ#0yBwp}Pl;yd(uA)R!~bg@_L-v*tlPIqkWhx>>EaY?4cd24Ehv^sjlT7O?*MOS=(_PYLV?={cq3 z`?e+I!EVHtRuy2~a%&0p$4vOY8xvjU+_hY zy@FTyFGal&&A~o>?kdHIp2Z!`ks84)3mvw!WVJ4d2(W7O-a!@EO?%=K5npO$2*@Zt+u&#^7C!27s4)_0m zs|vt&@h(3D`}}GGyymaM=(X78SX#gmpW1Xgsy~zNEWlvgnunDb6Z-nC1>6e2zOsZw zhmD3ueYe&EHd0~?#k~tx`6JZ>`D-xjA$C43tNas&Q>`I$&BbrxUh32Yd?2=$VGXAC zKL3r^bhhS@xQ;wssN4b>t0$wJ?O7-E#SVN zC=KAtMGL6kqu={Pa?m45;}3lCtj6f2EAI0&Zwa~Ar18&Kd*hd<@wc;pOl))S5teTR zTWKionT5?g7v-Oa-SJCR>s`J|exzgx`hu_Wr?l$-*JFH+-6+J%Ca@o81N4E#NzUmA_jfm@g*a|HHulTCb!arU{$@3MQ2kNpAI)9p-O{ zIoe>KG^P6pTz}0)bS6~8c$R_9BT!Xw@Aj`l;v_A)%5K#efLE21=;sn2UZY62h;Y$q zMCK##y$IGRMI9NSak2!D)@7uL&A?h1Cm7b>mCsS9g4&|*z!-xUAb3mSDAe=~3QXje z)%~XMo!?%eMZsM`$J}Ac!9*TBb)>W5{0LE0H++`SMk%^XWIBPE#yq6>OqrW(CGsjx zacj=OB**OcPTX!$nUf?UBw9(<2OpXjxyu?-&!gpHI-L+l&&TwdRt{mo`nmWfoh#+c z0jFcc=1{Cy9z>*3a-NA{an%@418KIyNrG98FCs3pm8U_?gnwMNN)LP*9+?-B z>G&&6f-(3^Q=QE)w+(OAfji5YuO$_!S6`127M1(_XRn=^ubJuMW0%b9*W?Q_lB$k|K(_YtKR$oLQKQ-u3v4elb*! zFVSMlVdTK>feNX4BwkY8cZF59T4?o$oB8Hix*3v$c`?xsNTe=&y-yBkK3;d1+9J~3G!IsT+KS?P`RR=;wIV_3 zLbTCmWr5 zzNxfbWk~`kkh#M+J-1$gD)nE5%3$k)@+_j{fNT)XH=g+nM{OEl@xV_+4a#!^(}w%r zR!G(|ciOh#=UFUHO~NMt-L2`ulI2@{udMfl?(r4NYhWYhk|52<(jNnbc@c;qUhy2v9yS1%{KDq`WY> z=a&=}-Vi+epwM;4rO|_3oYPh7BE@Df*nbu{*^` zQYWCe_4B8*Cpe-OX`E+6Vvk{^*wznPH`$Js(KldzZ`-2Usu^kNip}U-R|OnyPEGrE zw#Fh)ai(#gwsbrf^!m4+&DZMElc%;-{rq=>X%hL7k4P+F+#)Pcu}N z5t@TAm|WSSP3GDn>PHHiz{Pd6_fUAcn^+Xv(Kl#=px<){lewv>Njk?oqRbynCjzF2 z$L+#SR=EsH1fyNmhI6S*$XKzJr2(vh=v@HH+clbw7f*9pzrq4PiYxPA?w?RCst|;g z{!c<{uC&;B;fX3bN9PWJHC#~_uZwz%W34H?S4p%tiJhfzF~Sv0pfJT270zU+gLwe- zh|s0M4@8@H6l4gv-tP^(k5;z}x3aYNu-po3`Lr2`=V^lq^YK(JUU~PT{-6+@LfI^? z-B_sZ6^k`xUj%wi{ehe17}w65NPz&3o^xn^$Lv{78iYI7hde__dggXxq~xE6_5sOQ zy#XYnQ*7YW!bDo~kDI8}G;b>V5Jc*&3KtCwlcuJxi{3 zcGy|QLQYU6tTp2M>5ZUvE|&@f9=TF~oh4(VH5S=fCA|AI{youeDCHx~jZ`vLx@Vd-fe>lzx807Dly|?gb|v0E38Tnka&j^=Yd3D`Dc7un-{Rf zd;Y$kdlTEqkmofF{L%CW6}Bg1VjVc!Axp>&^{v(qH-qWmBwnk!KYF#r2I4T&I8E8A zuyMO%!6x`bOmS%#pDS;)3Fmjn)(F1pmwcyRS~=#4etSXo;e*C4$FNjwcyGFf(7`>;JiaJas(fU7Rj>ZoS9C~iK~nk zc)I`j?|=ULpa1^nzyJB~fByTQ|NiH{|M~BK{`;T*{^!5{`R{-J`=9^*=fD5?@Bfed z_m#|{Dh8v|SZO#dJ)m@gt6>}WI~*Yw=})Hme~RQ5S$cS|()aFP zBsw6sMKs!GaeMbSbY75vgiUbTvM^#1YlUi6xr=Ge6zGh&6ZZGXeB^Cd^mX5k&R{C7 zbJ}4C?7AcXg?x(=AEo2`7s)Pa~BYPNfh|EEP z*j8Aorl%xJ2cYBNxM*BldS89G@+x|>^&E1n?_i>J3^U*qHZ~PFDZ14%npAht!3m=e z5_SH{G;^SNW=#eYZ%V);QibRbV}a!PB{>}`-&Fr;k`I}4mM zKct{1QGkEX;R3(zAMdZ0n@0!rwu-klzNnoQrj5Ze9sT^PY^0=UPFK2Nxu?diTZKY* zskQP@F`@JSu_T#kWdFx3LO)osov2BJK#v!eat}#thgRxUdK8gY#ZYTDj z^Qovk)=JNa^FCGcyCxH|CSNG8Q+xM0MA`ImmFU+K#Q)GD0V>iIElRV8jQ*-R`_oPNu&vu_2O z`ekjEz6%6BKL#FUpadCHwsckBd%<>fwA=_%?HUH$0V;|(3$q{X-hn>TVJ3wcih-QY z4dkj0M6am$LOi`HHDPEOw$*zd%p`#{CZO7D7Q9d7YZG!$85+CK&yo6Wx4q(-^?xg9$f6a)NdJi3szamh- zfCgByWTiwyPfQ^LwqDtWJ|d(zum`+K%9=bwKF;i+E0^11_@#@VO1rFBQma|t>75uG{bMWo&z z;hlbiEOMbaA|SS>gO9C6HmrU>l z%QRy|gv7n4&ybdTKTY@s_UHdm}lr(M9fs|`lWQ^hBn3I3X897VGaD!a>|QP(nd8g zx!26J6P$Ds7(U`e7)0ESq3$69nDX5EWN3cvcH?=Z1>W1$*_Y2=bwxM1g16U&6sNts zgN2>M5Gq#yoNw1z9eNmWw&#&p=B)*A-cH@_M>ow0A#r_(A}iJzYC=6@IRS-}e`ui^ z$w|XEx3|STBE~V{Xvng@6lg9NqQ*;P69&?)D zc4$>((4pDkK}=q_-ryqht1Tamkgij)(S4e?Z+_?lU2(tCx`BfhZF!zS5?a7g=x0<2 zXsU}a#%7#oqvQ6r#H#-?gGNWwN$M!A(&rw3*~c1WRMYLJ)tD=4mE`o_Sf+FYOQYAL zqWLNL=lBoQ-6m5BZ}Uip2mU4&ZNKt2N?eh&aZvU6=^_fo^;AsDNdsCuup}039+w$? z^Cf!8MNO<4C|gwBo`sJm9<}XkfWOd4~N3+OY$KC-tym!WCv@2tZlbI5k(Zf4G%aB~8*M;EiFY2Tv&) zz@%oX$u3-J(`|+<(gVJZNk0$3x9KjF8u`r7FCrKvFiEMIuxpvmQCEK34=DJga@WzdCdJ)^C+!Lq4O8t3Rzwz>{4wa$A~X90)b6Z z=G!nC;hJwg1f?njapPq+)t|+)9 zigyYLh)C3jchMJ60wLj6<;AHyXwWzvA}@u7@lm!@@`HA{skOi%ha}Nmh3KT4G3MaW z>(M|1>LM5<2pzv_=bd-C)DwWE9~P{&x#`xBqjTxxFwH5-C84w%`IDW|!IG;Zswk9F z=(=P+KW9zB9>J{D$k_XDm9tLl>vnW8iB6U*Mv&;?GP&I>5r7Ev?%#y0dOWiaAq^32 zyJA-4vDchT76y3zKFPq3pvpF*SDDtI+`rhx!MKq!BuXRGX+rNa`tdyml2crwsiefQ zK&FJ=;t6$C7f196P!-AHcc`$>CBdt}r>E|Mdu%bTq_3e!Ru`i=>b1ey-j=%Jm)DX8 zhk4V@80g77CC<}jo(iOSdp{b+cPyx30=j0%Z`~ZmBwfy^Gb=kqsmOzfeiFsQK->nw zCX-z}FFlH_{ZNT0uuu=fH4TMx+Kb^M{%5sTJ#rCcOH+atorBuWNj|54sDgU#IBe@%6q`5hvIdQ^ z%N-xs*~=EYQ0_MsiMkyB;_qk$`b0lKr4G>3hm20LD#&-1JiR$TjthBWE=R=WqOymm zeY0+go(QwLPJq~g?AOxy#oogyN0R38LK~|KsVZ!{(q~WQ`b*lmE`GmDX!a`7PD3j& zHyxK!2;{br_YLkb&cz{v^!t^T1qcd)OG=MgWd>K)ikw#{x)_TOh}tz5O7;|btDn+T zgc({R1zgEsj)z%b;te@iYzcuRjDlqUOS?izd8rvNe zvZ(ARYayYL2#MP4194)YUuTR?2{4dmn((bSK{3Auc6wLT$v3Q71SnX$gtI9 zu&Ni*xSDMI3>iUgg%&fkjD3tG+0lYe_FjSYvcgzN451mNKnG*9tLJ&PxUQ4>ATKt> zuhWKpG6Yff`LRDpw)nn5$(W7sM__`|4lpq}?BWC4#QW3~(=W$^2Pq5kKU6{sNVTC4 zlINy{)e)gU;mxDrdL)~d0f4WLfr2cPo0LD!SJSMs@ zvIGuDStg#=yXhThL2o1M92HNi8whEV^6!Ke$6!~qsx3R<%X9l{oF7EQ*i!_!>y-(~ z=JoN=GFt}cwJ*msIGsd(-VNrEd?rPGNx+{lQbw&ayF*3sO-KOoO$_k$&Y{?uKyhK* z6j5!!CPKsKpn5gn@M(_T*mfN|Isf(tWkb69 zZih#Z`IdSIpD{!0&d^PZ^Pm?#XvlwRe@|HIpAgQ%4+3bEfIcBlB~Jm)~kmw97O1AVfys!vY>&tiAGG%xL^) zr3@@}l%jBeqj?J}yypgTE$f3S88rJI=pku@te>+Al0mvf`6B<1C&(1A% z#jGZR{*3$7bR_URvS#9KRHv^An81YiAPX49sT5Pi?%=xNjszyQdG;rNF9u8MLFVV8 zS~$;=@s3xdP{osWEeGc8?$Pk%=74|Ke8NdN)bo~t2tL_zJs-dBr zb-gs(z=UvhsUh}S)=vg5U^mZ@MNtmDzyHbi=e{=TME!1z%_U4k8bXDwU6v7v3FW_u zgZ|E95gmFkTm=pms`}AOF|l_fNo>ob4yTKH!EVzkm{D4X`f{FeKa`y|j_cL}ijs41 z5VAA_-q{n6+V|hRTi+!iUO5=fkDd@n>Np?+`=1P&J6H)Xu-x^O>a>_kizsT2E0oa* z!O?=|SItff9;W(A>%c>(i$-`-9;&Pu@)28afu5;+&H_)c)s{( z0?4YASzZo?_v&_++)3@0d;LuE{2>t9dSq%5=I8Y%?F(MZjj-&O_xywo|b=_ z^3d14KVCx);ob%`t)ZVZ8hwqKp`9}WZ#+hHOeN4eI2C3WWlhx9BZ&&r+X_w#FWBz= ziP3G23yB$i<;by31Q%pE1eBoWQesCkyDEaImIjrZ3;v*a&V6w0q{WnKQ4#9q{#{gM zoFMOSRPPPfZi+GudVLGBbR`X&+$sC&2Hm6A`B9Yd$mjlfBf3l1nB}&Nt1tRM@FtwY z^SA>n=NZ2R#X+TkYhke~?72iDUas;lW3VwvpJJ<$ZG=G3*0hwgTjrp;$A3OOx5`n4 z(WR14s&$PcHxxy2D6}=^WtO^NoV>}{c9Vs>!Li;iyP^*Xa#4HV@ue&b6w{*p{mD3fIf93V%2 zs3)R~A&s`{o#uq#Z0f0w z1JodKkY@cIH#;#W;A=r=4b6gdKt*Pp+*7cw?hrv+k7bUWP92t}Dyi}1W&9*HC3~l% z|Hio71~7-JK$$NPdWHJ$QPsDE@kK<;g$l62=pNV@u_ZG>d!#}bj0I0IA4CGQ*O$c3 z1S=x`j&Qce2h*E3#*rfiP#7Bm4qPn^Ed#7~w<>*4W(TOX}`Y4n2v_Qli7LeqYxsvTtj!a8jK z5A#1phbGG-uis*fg}>H%JBm>G%vF#zYZ4>MjeEQfyEeBvvI~~4;vb(U<4k57Jqg~2 z<^uX~%uq&NA6vxK+INc5cEp>k*b1;{TnYmgQD|^l<(|m?hb$OfdyW!>W@bQ;{oM?o z;M1m`{n#(c+nyd$58+W1FD|xb`cyogz|}`eoxG>vWD#d_F~8T`KVbF%GvD9qC%@VX z;I6(K64+OM)AdM)_eFYsogM5iU(i7O{RmA~2PIl8k=i{w8fdWMqr7QqIYHUU^K#Gr zA|{v(Z8$%}h>fMNs0T+WRXMT#b_EUB80@=ub5SdXnpy!GEGI^=i_#q1xmWPg(TXF@ z=oP5UdH`JyG!G*A8${R32VAp+9r^+<63+FdObeX!g4=yEFc2cX3$B3X+IO#z9fR<{ zl)>waJ^@U2$#_Gna1R#qxsliW7x|h1cHZ`@2qv!=&kFozz)xOO4NPPoOVlu#iiV8k ztSUH{nwseEwZ~xen>a@{VSsOR|5gS$Ek`=*fLjWC63+j?ncW~J1T&h9Q)p0egM4$w z39;CWyX&Y1g7Si-7)FT>%uXm3(0l@S%gFBz56}I+Z%YpRJc#f@nsXiToM{$@1a8%= zXA=?CgTdtn*YlgkB{RD0&$hf6f~=U(8n2Y0w+qjugw;@FP)p6^DT0O54|RyFNuVjz z_R?k5e3ePU0J^D82qyIYzS~k6+(2t$O!E%|Cco?36LZkRtC|{#3hrij6xURC1A1# z=FDn2_WH(fyvo{YZNlHkdGX9K#UuZ~y9F1VRovb>Z@%yC8UxWcdG;9vPrjWC@$+bt z)!eP+s)UZ*3N4A<6lRpY1JlpcP3tgBF2QKc6z7o14o`OmL@}~cd^7vx9TfC2u1rMr z!>Ooyw&Xx6&^tRWw<+q{iXUVPB`hY1nMXYUxwfEORCvT@k?!M^;^R9)uG=33{%z<@ zpg;kBP>L&C5LFu#Lr(W>oYR9tJG*g*^)5eUKxgI|~6J?aP* z6Un_Oc2JM+*jH-$4Th^^H2RzlDo|S3L5AE2<38_`pT7`A> zoh^j(KeqH9?D{aQ_6_I|5bmi1zmvv>mof-~i}sU?NSE;U^Dtzd-nwU1gbCBC4iofQg@njBGC-z@WP*;^l>6 zBMT)FIpZ5Wxpk<48>mcizJ5fgq2ysg*ACy<>3JP~wR1x1goEzgSV{v}E=|oy?FTa6 z6W#5{VZ0lzz8wrY@&kTvuRg^$pKe!Abeey%vw8 z|En=52RX7WG~%KwV4Dyzwq`SLnI|>+k1#k$(r(iSll5POL7hm#z2kGDiyFmI zBop67s{;~XfG;{Nf*7x@VnuNGn;UCMq>62h#5yFi6>Qk|NGihNjJwSuR6k9qfys@1C3q zfd<}^{U3Tkg(=;XebPKd^ct<=?8dCt>zpuIOxQtR#RUtz(Ld1^uozgIUgz+`Myrto zqJerO@HnH_nlgaq@S6+J&6cS3dVJ&}@S4-f896Sb@C-LgI;rWu7bp=I=Vf_Q+gy~$Of(0FqWwH?)61h+ zLa3O^i8!FwW@&In%VfPG}Tet%57(bQc(uRcewli!sGeqUKEi=MZ2;^fU(7UZAOo~wnH320#42_$Sk_)YI-?{ zmBg-t?148R0;~eSY!V6w2877Qu5~b(R0!MB2AP4Q`xPI_?Vv4 z9-}FCA{i+!Ce*8qbQ!z!0_0~sY>iCRk2bFcRv+i_m&;`n?Jwb|BIAHs`)hJi&=7)^ z#=SdI{%e>fzxlX9Z)Q&bJtVkCdAr2L0UbFs&Aqb}I^-|$C;<(3?lLp-?BdcJWj`h< zIbmv>NXpkvGfz>G{EDUVmQmO!LQJB1SjumQX#ju6O7a=g=4?)_Z7@A_i0o=S*6ts9L5YoEAPJ&+_l zytH;vkm7myJ6d8`oHU>HW-{k-H$MU#VP~%T|C*k>0a7vP*4}Ok1zuuquL2G{6SP`i zwo(L`p4ibM2Qr&Hh?TB6O=3tCvDfHi44QpE)31tn5t zSr!D2ZEr@%Ed9srh#$NBznqS!sltTo26TLzA?4w<7GE_$T$%959#QamlHlgqLPlAeIPL%Ta1tN zTF4PA8yB?1i$Qy|ti(6Xm_-JBa+f~L)!>23FDlz|1&vxwEVYnWRb(nx;={Ndb-`Q`ToE`!UcH@>&~)44xa1VRT+HaR&~`Y zvSGG`bt*b6x9LjDcv%^P#3i;iQ#hSvE=Mn;tNq;wp@4S55d98TuGSr0iS3rZ#Kp3> z!scI#lZN;;afK{2t<&zK2+t1FREKy@QfzA5)?vVE{fQ851HDyCeL)C>3pUayVhlZ@ z;6EsLmVTKaOB1fley(F%L53Fu-@B(WW<^|dd;bRH?>NjT{;eF@V8HQV69YxSNju`X zm6MSAEwlVVNvZPeCf{6c#6}^t*el8H{Z7u9dPy}?3oK)eH?mnef?K-R0+}$=g#Y zGjjCPt`IT_8qazJ^w;2+bMG&|h>V?SMVAJC7WRa_+5@smzOo&H3jYEW5Y@d=^R$Xi zQ>Xn55+qykOyK3oU;X>N>i;n|Da;^Pz2WXfZLx)KiYjBeNXecNf9gq?i9Bt$i17B! z3L7l(WT|v2W>(+CehU{~KC||!ZvV`cu8V;6_NhHOz%|o5Ngc9zq7ymxDE{~Nv?cE3 z;fRP<7-gb)Q%*Oi=lp>T`74Kb=}ioNIA+C@QdjLBjqqPYHZ_yTHGoka>ncF+{NoQQ zPepf|c=twN|0La9%lsN6NfzF^v|oJ%d!znIG1}w|V@&nu%QEjFxofD3&@`Y)5oBT* z)Aw`?rX;82&r@pwd%?B`RiwjTLq{El5X>~I3Cm4yf1pLPcO)1agL5PG-xWO-od>;9 zOpq#uU4-KJR;_D<*nzI+mjT|%O-teE_-CwZv^pJu3K!@Vri9>>j;So{W9zk8u_uMn z=`l1?U(S)LXTrRtGre=Xic_W-W_cq9b$=99es(Om={(RcV!Rf85T8-JCx+SpWS3(z z+fAyAF1!T!n?cQ>ZOsf)oAHsD=rgjt0SZx!BwsZClz5LJKZ^N~%Hg{deX_I`T|PE-X)CmlJ{%@!ZLD z;cB)HX|D-+V!{km%;!E%QpQ%IdWiPwZjJJ(uDcwi2|h@GE&ibm^A#&wb7p62J=J}2 z>}&0QCvz`(G(MhPSuM%3S|DW3`(~jj=mV;j?CrvwS&U^qmqjaN?b&B7^G$;7_a@;( z%&*sHJDas3KU^@;te?JPIo;{V-NmqSvFX6Jp&N$$>rABnmvICmTWqYx#vW=n1Q*k@ zd5Qe~V9xfAQqvcPgC%xk79rr>sVGCS&;#p^h zDGs5_UdB--xs+PsGThkM``n&!e>-ChjnVPucONaGX&3@lI0x?is}EPW*_X%InWn)3HgWJ?;9Pu zMq-jI%z_XKbCb!QgETznGrI~T$!cg8;Vk|6#wipF$6?;oK!R+ch5V3%*hgg;?4@L& zY+g}kiv*;2Fvz)C1bS6lJw*ZL1p(ECSI_SLMj}muPy;kM3%2Z+N-0KQq`1~hHdI2M zq#&GhWdmKCl3$5vq9mRg%>gn#Oly?Lo9+Q*_X5lT!DN2q4{%kS;8P9Xijc-t3b zk_@(FesqaCd{SYSFL|b7@sn!A(0(2s-tm8PnczN|1xxII|3?1)vS8?K`0WOx66C!6 zkvD4B%7#b%?L#sdc1#ZBYfb@~w&>l!{DJ6Ei7TigAU1XcavvCzE<@XCiWRdiwQTyy^6Pb_Em&?^>qh6XhpgXP9nn7@j10iA^Pt5H~{Hy`M9@*0ed zM|)H6>{Tk!!VEMb@~pE0w91i0?{xSq5V0I&ua@nxek0WuU#zZkTpado_}QjUC}D4v z($w8!ijWL}b=8OIJDKO+oBj2^P#WQRzs;o->*GZd&2%K2KkLeQf4#gztlTc#rMhZS zsK{nsey0hB8CGp!9fb|UqKOMz$((c1dahaKiIDsR*RgRw@xa$oi!mTPYJzj zz?*%uyMTP{mB*V=efO5Pui2H@@}a?XUo`zVODe;fzeCwhlb%eev14g#saMkOKwqkE znhaG}hPy>>Hv8Hc{&L;EbTWC$2LzHo+z%MuV?PzL`Sb`=B{Fn4QAk4oJY%?$sATGb z+Wbj!37KZxMTK9PwpmUz>4N|@n%l3}?fO#= z7lX7lX0QzYW)$+tEK~ZHU~28tkCdLAQ}9;lXi4l@1K}>{+Jss6=VR%0H~~y}1wpmv zjU|ZzL^T!tOEK+?*jCkH^M1AsoXX3^258BurOfo%rKp)~xr-_E|6%nLqgYs;wbU|Y}A9$oV>E!^z$U)N4GV|7i)W|S;lbYZiUPw?% z;)8t(l>Rke3l~qluAQ|wQ5P{6`2^xx`WN}SSy<1|m6Br$h0r0j_Au9Ks*acuoRHHN z6SXV7M09T6R2xgp%v{sW-&tP`O=f?m3)gs8*G*rElJJ4BN+XUIUA!xcPNI@Ylmi z^rjGOobAtb@)8h!l|_!k#K=pL1=kQOkD_b1B;YE`)H7GntK|Oz71_}QFLOdXlC6`%< zGBFF9IQR8skZ?dnqzuw5uXUj`K5t2eV_eLe|Go};{^PJ1+%>f?|K;rA{}Ki%YGEnR zSHQ_u!ZNaCwxV` zY@xrBAbFHHKcTO`dR$%|2idw;Q6jYPvVAxZg+%kyCgYeK6+iAEAagbn1-<4XS%r=R z{UAXCtVY8G6S>_`Nyb8~;Uo?tSIaV7YL-2}DkBQPH(ELE&&&6_96ImP0)xI$}wxWCZD^1Zg~nJ3Gr?-s8dN(Skn#dRA`ytj0QKKBkX}OB@J(~t^pk%to)Ab!bw41lr&(?b zP51v*+qV}WA?559d zL@w(5z1URiolZT57AV#qRX25C7zHMQOn6KEonz;r6UHl^4#UG8}JYGVM>|VK0(9GC+gNzQe&)_)~pTqvWaprAAEL6u{WreC!W#=iEtc{hDZ0P$ zdkUua2g@*!$Jpcmhs0N|iKeJ@g6v>s2|i-cpOkbGnV3(IqCz)2vcS=XND9IJA}4)w zm)4aW3Oh>4$wOGgIkP0=&AhD%nH}BF2u(tvtC&W$$^PCPt43jbeLs5}8~S2FQ(rvV*Lz|2X4-3*TQK?JoXT6>weX9fMus1JCL366Oj z`bID2B^tWAlgf)w*MiWv32jAJ!@aN0f{rKQI$##EJsQ^GYl*-;cXA{xaPaW8HjlU> zaw~g4N_oN zfy+BFO=_y-m!;`ipR-lbLg0zPTVB02;5r7_fI3ZXp)WWQ{zwZRmC8eAR5ep*Pd*4` z6z(IX=xiflJ*%^S-=OzpA()ZsTMAI-7T#xneSdlH8@f=2@WGVCr$44I&JY;W{rdLa z`T!{HY#P;?R-mZazw$6wr~ZRS@n0`pDlG6-CYgFGxn8q6`%R@M`O_Ay26p9gmbG!* zvwKf-3aO-mqiC0kj*m~s86KF5wPLl+RHwx8^i|h5Ai9EKexn01gPRcHa~*{VI@`AS zC^V9cKN)xsrr-m4x7|JP=?O?Y@H58Muif+!%GSpj4#{|=BGts*r}sn)PW+h3Avvgc zz{+$)*x%&#pt7S)OtE~#OH#D>J|*i9;~x0N2;5NGpbgQ)I(CX3Aiu`6%1h1{|O_y0lf zWA!cZ@HY-w{tDwI?KP0*Fdp2HU!(wtzdo>rNz>2|xh$=&(&u7R&RKMm6{mGYRHGGd zqW|oDpkZto;0i}oVE=lFpe%(N-+4Nd;Msf<%jrqi`x8LG^)-5v806mmGF=0LfwfT! zImYhTA~*)S-4kPcl;)R^i&#nVY7?69E!6S+p@j(ilKG4MHhPnfhr_&CO( zKnioc|4HXs(<3fB7rDTyv&4WTJP+GE#~~b6V4L9&n{YJ|-fP zjACPg^s^HVm|AQ-q8+Xz__brb)Hy`cZ>%yxW-5fx^p0?@KYl#krdjv2Rc-TLu}YPd z{ln?v+|_25Lk;xxX&h1k-}-$B64j&puc~|KU1dNS;ln;& zwE4ET)FCjV-@UjHj7jk4UiOqOAwNV|NFoS!8I?m+;sflFzV!w9#XpYWoY~eBC3{s6 zFlupknslbnw&0IJtan`d8~*sYjh-kr%Y;T@dbSI&f9 z`}D}lM5e%}JLa1LC_m$N_%DR6gWMJ|li+)PjXun(yY0vq%&CIoL}d~Pr+exMS^yMDMhxlQl3*95VM9Q$d8 zo!`V-taOsvk37cT4IElo>8Q2`tMjG93n!p1n*nJ%O2;SOj5^E7x87RHz}0>Q4&mR? zZyvlZ_Ktvef!(tO-f21bqpp6lf!QG-wvM@B-y+~eGTL~~6*H=)9sZI7-gOYW)=kT6 z2ugkVRQ84(XT!yziLY`3Z8(Yf#m?T0{IhXbA;btVFmlMCh>Qd*C;?bQ5)Ev20iW<$u%S6wUE|kwbG3z(BLxnz#O|<7>XTbd$6DJZ48Hz5m~FFRD`Z? z0F~?3%y7?NgzoOSxL{oJ-F^|5l)P&w71`a zYpz8M#GxfxiR80XIVIUB!9xZuMnj2kla{5F)~6Ko(|yopk#X{6NdP zoo_lRu96AuaFyv3LuKO5gYnV`Pn-S$bmPUp0NsJ|rnyY2L!wSNt#A>FYZw6L@GC79 zC(9qD=@v9NX+@$i_5M@(8p)9MN{vS$<7b}V6DbFyHZDw$csb<~6#!mXkSP5ldOyg- zthYp@`>8&Ex9en%d2a+o-izJhsWwM?n|!F~?$!yNkQT;LL_$h_XKz;-H?g0UwaPqm zSmv+ZtD>!D1butoBvLi!s=iih%Zahw1@f86B6UrZxUD&&lj|zND!EUibfu%CTE9-O zktD#dJ^u!DTPJ}z|5rfQtq&df!wU5Yq4vmo@&kgh2XFWhXl2q?2$SoMm1zmfsW+TF zTEa2 z;p0{C8JGQL>6`J2I2BCGhBKpHCTi8mZg2h+OT7$qZhUje_7D5F16*f$mrJMz!a?&t zd*Q(|Sg~|FzdZ9#P@w`4%l`w^4Mlds6UVEkgc}lo2Xc!dc33NFrxL#gVhE`nL8qzU z^VhN2miv>dUaoY+$g5#HV{NMt0m-Wp>Ok@$uWPd*->x?uSWM^b4c#3XZ7J?^{ zQ#z)XyusmUcKmNxS0hp`Wf7?8Mcr-E>amj?jJqCBq4@sC3p$9J@`U%+moxm4ux zCdezD!j0uyvEtAisy|fZDEY`CRul1NcRplIBz&ux&u`Exk1+ndUQaOt+-Fx_Y8xOb zi7IUb@k+kw9^x};lAWS;i0~gagnDX_KpVIuWTXxDS`|C#sVYvlT`O1fJ*og62RV3b zl9=-bVjBn)u0G7cB9%Vo>M68_@c2t|A>1Ocp9k~15|TMMMlzccU09v`p3X7mn!2&Y z?Z1o&r3dp3u|9o(%xAV!RVG{M+?EAzNJUP%tl*FXqs74<>utvO-!)$QK*{Vun@JNA zyc2bF?rL2mvjDTkg*J!Dmgi0=R;?}zwr1&?1?4LGh28 z5&SA#Y}7SFmczr($Ya=6CS1;E)grvd8%*ks=>KAN3AYt7#fzTKfb6j4cd~3JIl3Lb z&bT7}*Nf*&2##LC$SWJu$SOrl#6g#wAVyk_0l_uJ$6|9R8cym|urdBH5~Py}v}#(P zv>DXefD*&B4wl5qv=tevM7BY+`F7qbBp~#S(h#dCNVPtMi-|qKN+R0 zu9T7cC0d7txYt0HsDzbRv4y@PJI=d+%d-+zC%#R;v=`m}-?-h~Y&zhl@}xy30EB2`3SKLO6jBCp%all-4iV5Pc~JSppLRJsF*wtVV3H1u7N!@dASq|@prIw^ zYp^c28(Q&iz*f@oqMs{lN!3UDBK-5tKYAvpB&ky%L{l1kP|`So4e$`dDw++buPbC1 z+SmIV8DrP;bbqO88i9>STX6dU-ZZsm0@Y{qj?~P2S_i>lIvuuRKFQ zD;M_387Z8Qlhf4JkR9;hC5EV4-}H@x?J7Cc_7KJE3?nkkkK*cbnLnqnp=Rk)pgBce zp0s#}GkD1^2SDW3tZ6U&Jp9zlrwg|@{Xb7tzgZ-mj><_!jFj`{L1zt%J-6w?C{S4O ztKy&Q$rmKzWW9U3{6^g29h?nBoEf^kR+;s-;R>vbt;w!y?@quCM5%i;Q!4i`0!Cn( z&`0?wB^m0Z$BbR-QAQD|37{U8Z-tz_@r@K^h!VZX(C2Ve@#}?Oh(0AyG=*1GawfXE zB3%jBgpMHa!ypW=no{I~sSwHVs2;xB$v21_(Kk}*rh>W!EAWil|IF&}eVo1n%{^Td z2x(P6g#Tf`p>y>K0TJx9sUL>wcDKK5>EQ?+;NlhA(wJ89<7H-GH~tRtV*2 zlSf?F2le){ko1&~`l?&JZC1q}x)V%-`bp1!eXhkDw=AqjNwF?WmxZ4Es!8+9Kd8*d zR?c7{%QLbd5g0>b7H3=_%2j7}wfsn)N_sf)7L{Ws(%t4 zV9SDHhhvvA^4e_m_OwS)mn$Q3W1zYc^Y{#Bc>la_D4*+pU zS1yUMVg)C+xkWlFpxOSYIhh8r1p)<;fk^1i`E^QhWE9w{)9{m2}WKt6lSSyP9+Bo28 zgtdEP(t6&FQ4ns!L&d^cP6DGd{F~Pv zxQ13Jh>eae3cMXsGTB50J{Z7k;BYVQ{=|lJbLa7jsrybAIS*hhZ@D6Q?8o3>uG06P z+%6p_nb4ZJZJU_)<#979`O!OTFbu383v)Xh^su%eiF&IgNt|7;$#EVBj(ndrOU=G6Nnpl$Zh)I?+D>B z>3^M# zT7$k3Dnr*L2!5xK2vuG>+PVebb~8dcLU99r1xVRw=N4D&0hMGTSlV9`scIHIU6;l@tjcLgo>)s#<1SHt8z zN{!H`;bDi(oX=bXEerP|HW*A}6N?vVOXyW-0eaf`=36#5VYE07LB2Bs zcCl>mZeZnTCF9THPB7GvjZCxMBn@>0{{Q558((JfSL45qMi?JGU; zx<`v{GFW$=LO@>_;LYL{1gQGwv?w01oI2%s6sUGGFX&4g5ds zE>g2F%kwVg#Y#hIw_0vaABnbYP?}4HI%it%&!y$hO|ec;X6*>L)i;r`0O`vI6OFLv zaN>#vqf`GxOJfo7xxvW%ZLE9)$%mA(#aydTV))MvuLPA>MDe!m5rZRW9;BRiWs9gbEHcKEatnq z;vcJpk_%lX!3XACS{2EK@bp3cjqslA4N_OFK+ZWy=vs8~edXi#Tm&c&FvDbVX_6el zOXCJcI>GHgkXS4x2LC_+J-YB-``T0HNaE z1yjXZRj|2@YI#AqUAQ6bO>mD*Dyr$vL-P+_qeb;4TJpH-of;}Q&oH4*NjAU&Vq!x~ zd)^+2(g1cZa&!!bZmb)Sib0;kOc_XO>t3B2U+MTw=MvQ~X6--t-4c(4vNqD*yH6aT Y=T #include +#include +#include "../GuiComponent.h" +#include "ImageComponent.h" +#include "../resources/Font.h" enum CursorState { @@ -18,12 +22,12 @@ struct ScrollTier const int SCROLL_SPEED_COUNT = 3; const ScrollTier SCROLL_SPEED[SCROLL_SPEED_COUNT] = { {500, 500}, - {2600, 150}, - {0, 100} + {5000, 114}, + {0, 8} }; template -class IList +class IList : public GuiComponent { public: struct Entry @@ -42,16 +46,28 @@ protected: int mScrollTierAccumulator; int mScrollCursorAccumulator; + unsigned char mTitleOverlayOpacity; + unsigned int mTitleOverlayColor; + ImageComponent mGradient; + std::shared_ptr mTitleOverlayFont; + std::vector mEntries; public: - IList() + IList(Window* window) : GuiComponent(window), mGradient(window) { mCursor = 0; mScrollTier = 0; mScrollVelocity = 0; mScrollTierAccumulator = 0; mScrollCursorAccumulator = 0; + + mTitleOverlayOpacity = 0x00; + mTitleOverlayColor = 0xFFFFFF00; + mGradient.setImage(":/scroll_gradient.png"); + mGradient.setColorShift(0x000040FF); + mGradient.setOpacity(0); + mTitleOverlayFont = Font::get(FONT_SIZE_LARGE); } bool isScrolling() const @@ -154,12 +170,24 @@ protected: void listUpdate(int deltaTime) { + // update the title overlay opacity + const int dir = (mScrollTier >= SCROLL_SPEED_COUNT - 1) ? 1 : -1; // fade in if scroll tier is >= 1, otherwise fade out + int op = mTitleOverlayOpacity + deltaTime*dir; // we just do a 1-to-1 time -> opacity, no scaling + if(op >= 255) + mTitleOverlayOpacity = 255; + else if(op <= 0) + mTitleOverlayOpacity = 0; + else + mTitleOverlayOpacity = (unsigned char)op; + if(mScrollVelocity == 0 || size() < 2) return; mScrollCursorAccumulator += deltaTime; mScrollTierAccumulator += deltaTime; + // we delay scrolling until after scroll tier has updated so isScrolling() returns accurately during onCursorChanged callbacks + // we don't just do scroll tier first because it would not catch the scrollDelay == tier length case int scrollCount = 0; while(mScrollCursorAccumulator >= SCROLL_SPEED[mScrollTier].scrollDelay) { @@ -174,10 +202,33 @@ protected: mScrollTier++; } + // actually perform the scrolling for(int i = 0; i < scrollCount; i++) scroll(mScrollVelocity); } + void listRenderTitleOverlay(const Eigen::Affine3f& trans) + { + if(size() == 0 || !mTitleOverlayFont || mTitleOverlayOpacity == 0) + return; + + // we don't bother caching this because it's only two letters and will change pretty much every frame if we're scrolling + const std::string text = getSelectedName().size() >= 2 ? getSelectedName().substr(0, 2) : "??"; + + Eigen::Vector2f off = mTitleOverlayFont->sizeText(text); + off[0] = (mSize.x() - off.x()) * 0.7f; + off[1] = (mSize.y() - off.y()) * 0.5f; + + mGradient.setOpacity(mTitleOverlayOpacity); + mGradient.render(trans); + mTitleOverlayFont->drawText(text, off, (mTitleOverlayColor & 0xFFFFFF00) | mTitleOverlayOpacity); // relies on mGradient's render to Renderer::setMatrix(trans) + } + + virtual void onSizeChanged() override + { + mGradient.setResize(mSize); + } + void scroll(int amt) { if(mScrollVelocity == 0 || size() < 2) diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index 012c3e655..6f0d5b8a5 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -11,7 +11,7 @@ struct ImageGridData }; template -class ImageGridComponent : public GuiComponent, public IList +class ImageGridComponent : public IList { public: ImageGridComponent(Window* window); @@ -79,7 +79,7 @@ private: }; template -ImageGridComponent::ImageGridComponent(Window* window) : GuiComponent(window) +ImageGridComponent::ImageGridComponent(Window* window) : IList(window) { mEntriesDirty = true; } diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 2af7f703b..961b411a6 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -3,7 +3,6 @@ #include "IList.h" #include "../Renderer.h" #include "../resources/Font.h" -#include "../GuiComponent.h" #include "../InputManager.h" #include #include @@ -21,7 +20,7 @@ struct TextListData //A graphical list. Supports multiple colors for rows and scrolling. template -class TextListComponent : public GuiComponent, public IList +class TextListComponent : public IList { public: TextListComponent(Window* window); @@ -84,7 +83,7 @@ private: template TextListComponent::TextListComponent(Window* window) : - GuiComponent(window) + IList(window) { mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; @@ -119,7 +118,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) int startEntry = 0; //number of entries that can fit on the screen simultaniously - int screenCount = (int)mSize.y() / entrySize; + int screenCount = (int)(mSize.y() / entrySize + 0.5f); if(size() >= screenCount) { @@ -197,6 +196,8 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) Renderer::popClipRect(); + listRenderTitleOverlay(trans); + GuiComponent::renderChildren(trans); } diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index d4b8f2dda..2c5f31696 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -19,7 +19,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : const float padding = 0.01f; mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); - mList.setSize(mSize.x() * (0.50f - 2*padding), mList.getSize().y()); + mList.setSize(mSize.x() * (0.50f - padding), mList.getSize().y()); mList.setAlignment(TextListComponent::ALIGN_LEFT); mList.setCursorChangedCallback([&](const CursorState& state) { updateInfoPanel(); }); From 816247ac20aed34c3afbcf07ca63737247110c3e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 16 Feb 2014 12:27:58 -0600 Subject: [PATCH 166/386] Changed scroll gradient to a radial gradient and made the display full screen instead of just inside the list. Embedded the OpenSans font as the default font instead of relying on a platform-dependent system default. --- CMakeLists.txt | 1 + README.md | 4 +- data/ResourceUtil.cpp | 26 +- data/Resources.h | 3 + .../opensans_hebrew_condensed_regular_ttf.cpp | 3244 +++++ data/converted/scroll_gradient_png.cpp | 11561 +++++++++++----- .../opensans_hebrew_condensed_regular.ttf | Bin 0 -> 32364 bytes data/resources/scroll_gradient.png | Bin 37639 -> 83384 bytes opensans_license.txt | 15 + src/components/IList.h | 18 +- src/components/TextListComponent.h | 2 + src/resources/Font.cpp | 53 - src/resources/Font.h | 3 +- 13 files changed, 11358 insertions(+), 3572 deletions(-) create mode 100644 data/converted/opensans_hebrew_condensed_regular_ttf.cpp create mode 100644 data/resources/opensans_hebrew_condensed_regular.ttf create mode 100644 opensans_license.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index ac0559374..2e8de9ed9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -300,6 +300,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_up_down_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_left_right_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/README.md b/README.md index ab63d066f..4bd30ce89 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,12 @@ Building EmulationStation uses some C++11 code, which means you'll need to install at least g++-4.7 on Linux, or VS2010 on Windows. For installing and switching to g++-4.7 see [here](http://lektiondestages.blogspot.de/2013/05/installing-and-switching-gccg-versions.html). You can also just use `export CXX=g++-4.7` to explicitly specify the compiler for CMake (make sure you delete your CMake cache files if it's not working). -EmulationStation has a few dependencies. For building, you'll need SDL2, Boost (System, Filesystem, Regex, DateTime), FreeImage, FreeType, Eigen3, and cURL. You'll also need the DejaVu TrueType font on Linux to run ES. +EmulationStation has a few dependencies. For building, you'll need SDL2, Boost (System, Filesystem, Regex, DateTime), FreeImage, FreeType, Eigen3, and cURL. **On Linux:** All of this be easily installed with apt-get: ```bash -sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl-dev ttf-dejavu libasound2-dev +sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl-dev libasound2-dev ``` Unless you're on the Raspberry Pi, you'll also need OpenGL: diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 741b21bcd..05a92a12d 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,12 +2,13 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 15; +const size_t res2hNrOfFiles = 16; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/button.png", button_png_size, button_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, + {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, {":/star_filled.png", star_filled_png_size, star_filled_png_data}, {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, @@ -26,17 +27,18 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/ES_logo_16.png", res2hFiles[1]), std::make_pair(":/ES_logo_32.png", res2hFiles[2]), std::make_pair(":/frame.png", res2hFiles[3]), - std::make_pair(":/scroll_gradient.png", res2hFiles[4]), - std::make_pair(":/star_filled.png", res2hFiles[5]), - std::make_pair(":/star_unfilled.png", res2hFiles[6]), - std::make_pair(":/textbox.png", res2hFiles[7]), - std::make_pair(":/textbox_glow.png", res2hFiles[8]), - std::make_pair(":/help/a.png", res2hFiles[9]), - std::make_pair(":/help/b.png", res2hFiles[10]), - std::make_pair(":/help/dpad.png", res2hFiles[11]), - std::make_pair(":/help/left_right.png", res2hFiles[12]), - std::make_pair(":/help/menu.png", res2hFiles[13]), - std::make_pair(":/help/up_down.png", res2hFiles[14]) + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[4]), + std::make_pair(":/scroll_gradient.png", res2hFiles[5]), + std::make_pair(":/star_filled.png", res2hFiles[6]), + std::make_pair(":/star_unfilled.png", res2hFiles[7]), + std::make_pair(":/textbox.png", res2hFiles[8]), + std::make_pair(":/textbox_glow.png", res2hFiles[9]), + std::make_pair(":/help/a.png", res2hFiles[10]), + std::make_pair(":/help/b.png", res2hFiles[11]), + std::make_pair(":/help/dpad.png", res2hFiles[12]), + std::make_pair(":/help/left_right.png", res2hFiles[13]), + std::make_pair(":/help/menu.png", res2hFiles[14]), + std::make_pair(":/help/up_down.png", res2hFiles[15]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 45bc8cfb5..9edd808ae 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -17,6 +17,9 @@ extern const unsigned char ES_logo_32_png_data[]; extern const size_t frame_png_size; extern const unsigned char frame_png_data[]; +extern const size_t opensans_hebrew_condensed_regular_ttf_size; +extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; + extern const size_t scroll_gradient_png_size; extern const unsigned char scroll_gradient_png_data[]; diff --git a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp new file mode 100644 index 000000000..0fa9cd569 --- /dev/null +++ b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp @@ -0,0 +1,3244 @@ +//this file was auto-generated from "opensans_hebrew_condensed_regular.ttf" by res2h + +#include "../Resources.h" + +const size_t opensans_hebrew_condensed_regular_ttf_size = 32364; +const unsigned char opensans_hebrew_condensed_regular_ttf_data[32364] = { + 0x00,0x01,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x04, + 0x00,0x10,0x44,0x53,0x49,0x47,0x00,0x00,0x00,0x01, + 0x00,0x00,0x7e,0x64,0x00,0x00,0x00,0x08,0x46,0x46, + 0x54,0x4d,0x67,0x93,0xcc,0x09,0x00,0x00,0x79,0x84, + 0x00,0x00,0x00,0x1c,0x47,0x44,0x45,0x46,0x04,0xf1, + 0x03,0x96,0x00,0x00,0x79,0xa0,0x00,0x00,0x00,0x38, + 0x47,0x50,0x4f,0x53,0x27,0x89,0xa7,0x91,0x00,0x00, + 0x79,0xd8,0x00,0x00,0x04,0x6c,0x47,0x53,0x55,0x42, + 0x68,0x95,0x62,0x93,0x00,0x00,0x7e,0x44,0x00,0x00, + 0x00,0x20,0x4f,0x53,0x2f,0x32,0x7f,0xef,0xcd,0xa7, + 0x00,0x00,0x01,0x98,0x00,0x00,0x00,0x60,0x63,0x6d, + 0x61,0x70,0xc6,0x3a,0x2e,0x6a,0x00,0x00,0x06,0xd0, + 0x00,0x00,0x03,0x4e,0x67,0x61,0x73,0x70,0x00,0x00, + 0x00,0x10,0x00,0x00,0x79,0x7c,0x00,0x00,0x00,0x08, + 0x67,0x6c,0x79,0x66,0xd6,0x72,0x55,0xa8,0x00,0x00, + 0x0c,0x98,0x00,0x00,0x63,0x74,0x68,0x65,0x61,0x64, + 0x02,0x27,0x83,0x65,0x00,0x00,0x01,0x1c,0x00,0x00, + 0x00,0x36,0x68,0x68,0x65,0x61,0x0d,0x24,0x05,0x2e, + 0x00,0x00,0x01,0x54,0x00,0x00,0x00,0x24,0x68,0x6d, + 0x74,0x78,0xbf,0x6a,0x52,0x02,0x00,0x00,0x01,0xf8, + 0x00,0x00,0x04,0xd8,0x6c,0x6f,0x63,0x61,0x7b,0x16, + 0x62,0x24,0x00,0x00,0x0a,0x28,0x00,0x00,0x02,0x6e, + 0x6d,0x61,0x78,0x70,0x01,0x7f,0x00,0x43,0x00,0x00, + 0x01,0x78,0x00,0x00,0x00,0x20,0x6e,0x61,0x6d,0x65, + 0x78,0xf3,0xd2,0xfd,0x00,0x00,0x70,0x0c,0x00,0x00, + 0x03,0xa8,0x70,0x6f,0x73,0x74,0xa5,0x58,0x36,0xcf, + 0x00,0x00,0x73,0xb4,0x00,0x00,0x05,0xc8,0x70,0x72, + 0x65,0x70,0x68,0x06,0x8c,0x85,0x00,0x00,0x0a,0x20, + 0x00,0x00,0x00,0x07,0x00,0x01,0x00,0x00,0x00,0x02, + 0x00,0x41,0x97,0x7a,0xdb,0x67,0x5f,0x0f,0x3c,0xf5, + 0x02,0x0b,0x08,0x00,0x00,0x00,0x00,0x00,0xcd,0xc1, + 0x1c,0x70,0x00,0x00,0x00,0x00,0xcd,0xc1,0x1c,0x70, + 0xfe,0x70,0xfd,0xd4,0x07,0x17,0x07,0x73,0x00,0x00, + 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x00,0x00,0x07,0x9a,0xfe,0x00,0x00,0x00, + 0x07,0x65,0xfe,0x70,0xfe,0x92,0x07,0x17,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x36,0x00,0x01,0x00,0x00, + 0x01,0x36,0x00,0x40,0x00,0x07,0x00,0x00,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00, + 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, + 0x03,0x4c,0x01,0x90,0x00,0x03,0x00,0x08,0x05,0x33, + 0x04,0xcc,0x00,0x00,0x00,0x99,0x05,0x33,0x04,0xcc, + 0x00,0x00,0x02,0xcc,0x00,0x32,0x02,0x66,0x00,0x00, + 0x00,0x00,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x08,0x03,0x40,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x4b,0x57,0x4e, + 0x00,0x40,0x00,0x0d,0xfb,0x4b,0x06,0x00,0xfe,0x00, + 0x01,0x9a,0x07,0x9a,0x02,0x00,0x20,0x00,0x00,0x21, + 0x00,0x00,0x00,0x00,0x04,0x46,0x05,0xb6,0x00,0x00, + 0x00,0x20,0x00,0x04,0x02,0xee,0x00,0x00,0x00,0x00, + 0x00,0x00,0x02,0xaa,0x00,0x00,0x02,0x14,0x00,0x00, + 0x01,0xa9,0x00,0x00,0x01,0xe5,0x00,0x87,0x02,0xf9, + 0x00,0x81,0x03,0xb5,0x00,0x26,0x03,0x5e,0x00,0x57, + 0x05,0x2a,0x00,0x54,0x03,0xb7,0x00,0x3f,0x01,0xab, + 0x00,0x81,0x02,0x56,0x00,0x5e,0x02,0x56,0x00,0x4a, + 0x03,0x2d,0x00,0x50,0x03,0x54,0x00,0x4b,0x01,0xd1, + 0x00,0x45,0x02,0x2f,0x00,0x3b,0x01,0xd1,0x00,0x7e, + 0x02,0xef,0x00,0x27,0x03,0x5e,0x00,0x53,0x03,0x5e, + 0x00,0x85,0x03,0x5e,0x00,0x4a,0x03,0x5e,0x00,0x47, + 0x03,0x5e,0x00,0x25,0x03,0x5e,0x00,0x5f,0x03,0x5e, + 0x00,0x5b,0x03,0x5e,0x00,0x41,0x03,0x5e,0x00,0x48, + 0x03,0x5e,0x00,0x4d,0x01,0xd1,0x00,0x7e,0x01,0xd1, + 0x00,0x45,0x03,0x54,0x00,0x4b,0x03,0x54,0x00,0x4b, + 0x03,0x54,0x00,0x49,0x02,0x85,0x00,0x1f,0x05,0x24, + 0x00,0x62,0x03,0x8a,0x00,0x00,0x03,0xb6,0x00,0x95, + 0x03,0x79,0x00,0x66,0x04,0x14,0x00,0x95,0x03,0x30, + 0x00,0x96,0x02,0xfd,0x00,0x96,0x04,0x3f,0x00,0x66, + 0x04,0x2f,0x00,0x96,0x01,0xe3,0x00,0xa6,0x01,0xbc, + 0xff,0x91,0x03,0x80,0x00,0x95,0x02,0xec,0x00,0x96, + 0x05,0xb9,0x00,0x95,0x04,0x81,0x00,0x96,0x04,0x5c, + 0x00,0x66,0x03,0x77,0x00,0x95,0x04,0x5c,0x00,0x66, + 0x03,0x99,0x00,0x96,0x03,0x35,0x00,0x50,0x03,0x00, + 0x00,0x12,0x04,0x22,0x00,0x8b,0x03,0x6c,0x00,0x00, + 0x05,0xbe,0x00,0x0c,0x03,0x1f,0x00,0x0d,0x03,0x09, + 0x00,0x00,0x02,0xd0,0x00,0x34,0x02,0x86,0x00,0xa0, + 0x02,0xef,0x00,0x27,0x02,0x86,0x00,0x41,0x03,0x8c, + 0x00,0x1d,0x03,0x1a,0xff,0xfc,0x04,0x62,0x01,0x89, + 0x03,0x49,0x00,0x46,0x03,0xa6,0x00,0x86,0x02,0xa4, + 0x00,0x58,0x03,0xa6,0x00,0x57,0x03,0x51,0x00,0x58, + 0x01,0xf9,0x00,0x16,0x03,0x25,0x00,0x1d,0x03,0x9d, + 0x00,0x86,0x01,0xa6,0x00,0x7a,0x01,0xa7,0xff,0xea, + 0x03,0x1b,0x00,0x86,0x01,0xa3,0x00,0x86,0x05,0x75, + 0x00,0x86,0x03,0x9d,0x00,0x86,0x03,0x87,0x00,0x57, + 0x03,0xa6,0x00,0x86,0x03,0xa6,0x00,0x57,0x02,0x5a, + 0x00,0x86,0x02,0xad,0x00,0x46,0x02,0x08,0x00,0x27, + 0x03,0x9d,0x00,0x80,0x02,0xe3,0x00,0x06,0x04,0xd9, + 0x00,0x14,0x02,0xea,0x00,0x1c,0x02,0xe3,0x00,0x06, + 0x02,0x5c,0x00,0x35,0x02,0xe1,0x00,0x51,0x03,0x7b, + 0x01,0x7b,0x02,0xe1,0x00,0x50,0x03,0x54,0x00,0x70, + 0x02,0x14,0x00,0x00,0x01,0xe5,0x00,0x87,0x03,0x5e, + 0x00,0xa1,0x03,0x5e,0x00,0x4f,0x04,0x67,0x00,0x71, + 0x03,0x5e,0x00,0x49,0x03,0x7b,0x01,0x7b,0x02,0xf3, + 0x00,0x52,0x04,0x67,0x01,0x36,0x06,0xa3,0x00,0x61, + 0x02,0x64,0x00,0x39,0x03,0xb6,0x00,0x4f,0x03,0x54, + 0x00,0x4b,0x02,0x2f,0x00,0x3b,0x06,0xa3,0x00,0x61, + 0x03,0x86,0xff,0xf9,0x03,0x5e,0x00,0x76,0x03,0x54, + 0x00,0x4b,0x02,0x7e,0x00,0x32,0x02,0x7e,0x00,0x32, + 0x04,0x62,0x01,0x89,0x03,0xa0,0x00,0x82,0x03,0xed, + 0x00,0x79,0x01,0xd1,0x00,0x7e,0x01,0xc1,0x00,0x1f, + 0x02,0x7e,0x00,0x4c,0x02,0x80,0x00,0x43,0x03,0xb6, + 0x00,0x4f,0x05,0xcd,0x00,0x36,0x05,0xcd,0x00,0x36, + 0x05,0xcd,0x00,0x33,0x02,0x85,0x00,0x31,0x03,0x8a, + 0x00,0x00,0x03,0x8a,0x00,0x00,0x03,0x8a,0x00,0x00, + 0x03,0x8a,0x00,0x00,0x03,0x8a,0x00,0x00,0x03,0x8a, + 0x00,0x00,0x04,0xdb,0x00,0x00,0x03,0x79,0x00,0x66, + 0x03,0x30,0x00,0x96,0x03,0x30,0x00,0x96,0x03,0x30, + 0x00,0x96,0x03,0x30,0x00,0x96,0x01,0xe3,0xff,0xd9, + 0x01,0xe3,0x00,0x9e,0x01,0xe3,0xff,0xde,0x01,0xe3, + 0xff,0xf5,0x04,0x14,0x00,0x28,0x04,0x81,0x00,0x96, + 0x04,0x5c,0x00,0x66,0x04,0x5c,0x00,0x66,0x04,0x5c, + 0x00,0x66,0x04,0x5c,0x00,0x66,0x04,0x5c,0x00,0x66, + 0x03,0x54,0x00,0x45,0x04,0x5c,0x00,0x66,0x04,0x22, + 0x00,0x8b,0x04,0x22,0x00,0x8b,0x04,0x22,0x00,0x8b, + 0x04,0x22,0x00,0x8b,0x03,0x09,0x00,0x00,0x03,0x77, + 0x00,0x95,0x03,0x95,0x00,0x86,0x03,0x49,0x00,0x46, + 0x03,0x49,0x00,0x46,0x03,0x49,0x00,0x46,0x03,0x49, + 0x00,0x46,0x03,0x49,0x00,0x46,0x03,0x49,0x00,0x46, + 0x05,0x29,0x00,0x46,0x02,0xa4,0x00,0x58,0x03,0x51, + 0x00,0x58,0x03,0x51,0x00,0x58,0x03,0x51,0x00,0x58, + 0x03,0x51,0x00,0x58,0x01,0xa6,0xff,0xc6,0x01,0xa6, + 0x00,0x71,0x01,0xa6,0xff,0xbf,0x01,0xa6,0xff,0xd7, + 0x03,0x8b,0x00,0x57,0x03,0x9d,0x00,0x86,0x03,0x87, + 0x00,0x57,0x03,0x87,0x00,0x57,0x03,0x87,0x00,0x57, + 0x03,0x87,0x00,0x57,0x03,0x87,0x00,0x57,0x03,0x54, + 0x00,0x4a,0x03,0x87,0x00,0x54,0x03,0x9d,0x00,0x80, + 0x03,0x9d,0x00,0x80,0x03,0x9d,0x00,0x80,0x03,0x9d, + 0x00,0x80,0x02,0xe3,0x00,0x06,0x03,0xa6,0x00,0x86, + 0x02,0xe3,0x00,0x06,0x01,0xa6,0x00,0x87,0x05,0x17, + 0x00,0x66,0x05,0x8a,0x00,0x57,0x03,0x35,0x00,0x50, + 0x02,0xad,0x00,0x46,0x03,0x09,0x00,0x00,0x02,0xd0, + 0x00,0x34,0x02,0x5c,0x00,0x26,0x03,0x5e,0x00,0x45, + 0x04,0x7e,0x01,0x2a,0x04,0x7e,0x01,0x2a,0x04,0x7b, + 0x01,0x44,0x01,0xbe,0x00,0x83,0x04,0x88,0x01,0x6d, + 0x01,0x8a,0x00,0x25,0x04,0x7e,0x01,0x10,0x04,0x85, + 0x00,0xf4,0x00,0x00,0xff,0xba,0x00,0x00,0xfe,0x70, + 0x00,0x00,0xfe,0xb6,0x00,0x00,0xfe,0xbb,0x00,0x00, + 0xff,0xb9,0x00,0x00,0xff,0x14,0x00,0x00,0xff,0x16, + 0x00,0x00,0xff,0x34,0x00,0x00,0xff,0x2f,0x00,0x00, + 0xff,0xb9,0x00,0x00,0xff,0xb9,0x00,0x00,0xff,0x6d, + 0x00,0x00,0xff,0xba,0x00,0x00,0xff,0xcd,0x02,0x2f, + 0x00,0x3b,0x00,0x00,0xff,0xba,0x00,0x00,0xff,0xba, + 0x00,0x00,0xff,0x34,0x03,0x5b,0x00,0x44,0x03,0x2a, + 0x00,0x5d,0x02,0xbb,0x00,0x59,0x02,0xdd,0x00,0x14, + 0x03,0xbc,0x00,0x86,0x01,0xa4,0x00,0x86,0x01,0xe1, + 0x00,0x81,0x03,0xbc,0x00,0x86,0x03,0xa7,0x00,0x5f, + 0x01,0x9e,0x00,0x83,0x02,0xd7,0x00,0x2d,0x02,0xaf, + 0x00,0x2d,0x02,0xa6,0x00,0x2c,0x03,0xbc,0x00,0x86, + 0x03,0xa5,0x00,0x35,0x01,0xa8,0x00,0x58,0x02,0x69, + 0x00,0x28,0x03,0x9e,0x00,0x57,0x03,0x78,0x00,0x41, + 0x03,0xaf,0x00,0x50,0x03,0x87,0x00,0x51,0x02,0xdb, + 0x00,0x03,0x03,0x45,0x00,0x3a,0x03,0x98,0x00,0x8d, + 0x02,0xcf,0x00,0x1d,0x04,0x68,0x00,0x40,0x03,0xb4, + 0x00,0x15,0x01,0x5e,0x00,0x23,0x02,0xab,0x00,0x23, + 0x03,0xef,0x00,0x4e,0x07,0x65,0x00,0x4e,0x01,0x5e, + 0x00,0x23,0x01,0x5e,0x00,0x23,0x01,0xd1,0x00,0x45, + 0x02,0xaa,0x00,0x23,0x02,0xaa,0x00,0x23,0x02,0xff, + 0x00,0x26,0x03,0xa2,0x00,0x78,0x03,0xa2,0x00,0x74, + 0x02,0xfb,0x00,0x91,0x05,0x74,0x00,0x7e,0x07,0x57, + 0x00,0x53,0x02,0x2f,0x00,0x4f,0x02,0x2f,0x00,0x4f, + 0x00,0xf5,0xfe,0xbe,0x05,0x02,0x00,0x8d,0x03,0x5e, + 0x00,0x24,0x05,0x90,0x00,0x0d,0x03,0x9f,0x00,0x16, + 0x03,0x9d,0x00,0x16,0x04,0x68,0x00,0x40,0x04,0x68, + 0x00,0x25,0x04,0x68,0x00,0x40,0x04,0x68,0x00,0x25, + 0x03,0x5b,0x00,0x44,0x03,0x5b,0x00,0x44,0x03,0x5b, + 0x00,0x44,0x03,0x2a,0x00,0x5d,0x02,0xbb,0x00,0x59, + 0x02,0xdd,0x00,0x14,0x03,0xbc,0x00,0x86,0x01,0xa4, + 0xff,0xab,0x01,0xe1,0xff,0xd5,0x03,0xa7,0x00,0x5f, + 0x01,0x9e,0xff,0xd6,0x02,0xd7,0x00,0x2d,0x02,0xaf, + 0x00,0x2d,0x02,0xa6,0x00,0x2b,0x03,0xa5,0x00,0x35, + 0x02,0x69,0x00,0x28,0x03,0x9e,0x00,0x57,0x03,0xaf, + 0x00,0x50,0x03,0x87,0x00,0x51,0x03,0x45,0x00,0x3a, + 0x03,0x98,0x00,0x8d,0x02,0xcf,0x00,0x1d,0x04,0x68, + 0x00,0x40,0x03,0xb4,0x00,0x15,0x01,0xa4,0x00,0x64, + 0x00,0x00,0xff,0x12,0x00,0x00,0x00,0x03,0x00,0x00, + 0x00,0x03,0x00,0x00,0x00,0x1c,0x00,0x01,0x00,0x00, + 0x00,0x00,0x01,0x44,0x00,0x03,0x00,0x01,0x00,0x00, + 0x00,0x1c,0x00,0x04,0x01,0x28,0x00,0x00,0x00,0x46, + 0x00,0x40,0x00,0x05,0x00,0x06,0x00,0x0d,0x00,0x7e, + 0x00,0xff,0x01,0x31,0x01,0x53,0x01,0x61,0x01,0x78, + 0x01,0x7e,0x01,0x92,0x02,0xc7,0x02,0xdd,0x05,0xbe, + 0x05,0xc2,0x05,0xc7,0x05,0xea,0x05,0xf4,0x20,0x14, + 0x20,0x1a,0x20,0x1e,0x20,0x22,0x20,0x26,0x20,0x30, + 0x20,0x3a,0x20,0x44,0x20,0xaa,0x20,0xac,0x21,0x22, + 0xfb,0x02,0xfb,0x36,0xfb,0x3c,0xfb,0x3e,0xfb,0x41, + 0xfb,0x44,0xfb,0x4b,0xff,0xff,0x00,0x00,0x00,0x0d, + 0x00,0x20,0x00,0xa0,0x01,0x31,0x01,0x52,0x01,0x60, + 0x01,0x78,0x01,0x7d,0x01,0x92,0x02,0xc6,0x02,0xd8, + 0x05,0xb0,0x05,0xc1,0x05,0xc7,0x05,0xd0,0x05,0xf3, + 0x20,0x13,0x20,0x18,0x20,0x1c,0x20,0x20,0x20,0x26, + 0x20,0x30,0x20,0x39,0x20,0x44,0x20,0xaa,0x20,0xac, + 0x21,0x22,0xfb,0x01,0xfb,0x2a,0xfb,0x38,0xfb,0x3e, + 0xfb,0x40,0xfb,0x43,0xfb,0x46,0xff,0xff,0xff,0xf6, + 0xff,0xe4,0xff,0xc3,0xff,0x92,0xff,0x72,0xff,0x66, + 0xff,0x50,0xff,0x4c,0xff,0x39,0xfe,0x06,0xfd,0xf6, + 0xfb,0x24,0xfb,0x22,0xfb,0x1e,0xfb,0x16,0xfb,0x0e, + 0xe0,0xf0,0xe0,0xed,0xe0,0xec,0xe0,0xeb,0xe0,0xe8, + 0xe0,0xdf,0xe0,0xd7,0xe0,0xce,0xe0,0x69,0xe0,0x68, + 0xdf,0xf3,0x06,0x15,0x05,0xee,0x05,0xed,0x05,0xec, + 0x05,0xeb,0x05,0xea,0x05,0xe9,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, + 0x02,0x0a,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x04,0x00,0x05,0x00,0x06,0x00,0x07, + 0x00,0x08,0x00,0x09,0x00,0x0a,0x00,0x0b,0x00,0x0c, + 0x00,0x0d,0x00,0x0e,0x00,0x0f,0x00,0x10,0x00,0x11, + 0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15,0x00,0x16, + 0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1a,0x00,0x1b, + 0x00,0x1c,0x00,0x1d,0x00,0x1e,0x00,0x1f,0x00,0x20, + 0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,0x25, + 0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a, + 0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f, + 0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34, + 0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39, + 0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d,0x00,0x3e, + 0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43, + 0x00,0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48, + 0x00,0x49,0x00,0x4a,0x00,0x4b,0x00,0x4c,0x00,0x4d, + 0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52, + 0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56,0x00,0x57, + 0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00,0x5c, + 0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61, + 0x00,0x62,0x00,0x00,0x00,0x87,0x00,0x88,0x00,0x8a, + 0x00,0x8c,0x00,0x94,0x00,0x99,0x00,0x9f,0x00,0xa4, + 0x00,0xa3,0x00,0xa5,0x00,0xa7,0x00,0xa6,0x00,0xa8, + 0x00,0xaa,0x00,0xac,0x00,0xab,0x00,0xad,0x00,0xae, + 0x00,0xb0,0x00,0xaf,0x00,0xb1,0x00,0xb2,0x00,0xb4, + 0x00,0xb6,0x00,0xb5,0x00,0xb7,0x00,0xb9,0x00,0xb8, + 0x00,0xbd,0x00,0xbc,0x00,0xbe,0x00,0xbf,0x01,0x0b, + 0x00,0x73,0x00,0x65,0x00,0x66,0x00,0x6a,0x01,0x0d, + 0x00,0x79,0x00,0xa2,0x00,0x71,0x00,0x6c,0x01,0x15, + 0x00,0x77,0x00,0x6b,0x00,0x00,0x00,0x89,0x00,0x9b, + 0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x00,0x00,0x68, + 0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x6d,0x00,0x7d,0x00,0x00,0x00,0xa9, + 0x00,0xbb,0x00,0x82,0x00,0x64,0x00,0x6f,0x00,0x00, + 0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x6e,0x00,0x7e, + 0x01,0x0e,0x00,0x63,0x00,0x83,0x00,0x86,0x00,0x98, + 0x00,0xc4,0x00,0xc5,0x01,0x03,0x01,0x04,0x01,0x08, + 0x01,0x09,0x01,0x05,0x01,0x06,0x00,0xba,0x00,0x00, + 0x00,0xc2,0x00,0xc8,0x01,0x12,0x01,0x14,0x01,0x10, + 0x01,0x11,0x01,0x16,0x01,0x17,0x01,0x0c,0x00,0x7a, + 0x01,0x07,0x01,0x0a,0x01,0x0f,0x00,0x85,0x00,0x8d, + 0x00,0x84,0x00,0x8e,0x00,0x8b,0x00,0x90,0x00,0x91, + 0x00,0x92,0x00,0x8f,0x00,0x96,0x00,0x97,0x00,0x00, + 0x00,0x95,0x00,0x9d,0x00,0x9e,0x00,0x9c,0x00,0xc3, + 0x00,0xcc,0x00,0xd2,0x00,0x72,0x00,0xce,0x00,0xcf, + 0x00,0xd0,0x00,0x7b,0x00,0xd3,0x00,0xd1,0x00,0xcd, + 0x00,0x00,0xb8,0x01,0xff,0x85,0xb0,0x04,0x8d,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x00,0x2e,0x00,0x66,0x00,0xae, + 0x00,0xf2,0x01,0x44,0x01,0x52,0x01,0x6e,0x01,0x8a, + 0x01,0xaa,0x01,0xc2,0x01,0xd4,0x01,0xe2,0x01,0xf2, + 0x02,0x00,0x02,0x2a,0x02,0x44,0x02,0x76,0x02,0xac, + 0x02,0xd0,0x03,0x02,0x03,0x36,0x03,0x4a,0x03,0x8a, + 0x03,0xc0,0x03,0xda,0x03,0xf6,0x04,0x0c,0x04,0x20, + 0x04,0x34,0x04,0x64,0x04,0xbe,0x04,0xe6,0x05,0x18, + 0x05,0x3c,0x05,0x5e,0x05,0x78,0x05,0x8e,0x05,0xba, + 0x05,0xd2,0x05,0xde,0x05,0xfa,0x06,0x1c,0x06,0x2c, + 0x06,0x56,0x06,0x74,0x06,0x9c,0x06,0xbe,0x06,0xf0, + 0x07,0x18,0x07,0x4a,0x07,0x5e,0x07,0x7c,0x07,0x98, + 0x07,0xd6,0x07,0xf4,0x08,0x0a,0x08,0x22,0x08,0x36, + 0x08,0x44,0x08,0x58,0x08,0x6c,0x08,0x7a,0x08,0x92, + 0x08,0xc6,0x08,0xf4,0x09,0x16,0x09,0x46,0x09,0x70, + 0x09,0x94,0x09,0xee,0x0a,0x14,0x0a,0x2e,0x0a,0x52, + 0x0a,0x70,0x0a,0x7c,0x0a,0xb2,0x0a,0xd4,0x0a,0xf6, + 0x0b,0x28,0x0b,0x5a,0x0b,0x78,0x0b,0xb2,0x0b,0xd4, + 0x0b,0xf8,0x0c,0x14,0x0c,0x46,0x0c,0x64,0x0c,0x94, + 0x0c,0xac,0x0c,0xe0,0x0c,0xee,0x0d,0x1e,0x0d,0x4c, + 0x0d,0x4c,0x0d,0x66,0x0d,0x8e,0x0d,0xbc,0x0d,0xf8, + 0x0e,0x24,0x0e,0x38,0x0e,0x92,0x0e,0xb0,0x0f,0x0a, + 0x0f,0x40,0x0f,0x64,0x0f,0x74,0x0f,0x82,0x0f,0xe4, + 0x0f,0xf2,0x10,0x14,0x10,0x34,0x10,0x60,0x10,0x94, + 0x10,0xaa,0x10,0xd0,0x10,0xec,0x10,0xfc,0x11,0x1a, + 0x11,0x32,0x11,0x52,0x11,0x74,0x11,0xb0,0x11,0xf4, + 0x12,0x4a,0x12,0x7c,0x12,0xb4,0x12,0xec,0x13,0x2a, + 0x13,0x70,0x13,0xae,0x13,0xee,0x14,0x18,0x14,0x54, + 0x14,0x7e,0x14,0xa6,0x14,0xd6,0x15,0x06,0x15,0x24, + 0x15,0x40,0x15,0x64,0x15,0x88,0x15,0xb2,0x15,0xee, + 0x16,0x26,0x16,0x5c,0x16,0x9a,0x16,0xde,0x17,0x1c, + 0x17,0x42,0x17,0x82,0x17,0xb2,0x17,0xe0,0x18,0x14, + 0x18,0x4a,0x18,0x70,0x18,0x94,0x18,0xd8,0x19,0x1e, + 0x19,0x62,0x19,0xae,0x1a,0x00,0x1a,0x4c,0x1a,0x9a, + 0x1a,0xea,0x1b,0x20,0x1b,0x5a,0x1b,0x92,0x1b,0xd2, + 0x1c,0x12,0x1c,0x30,0x1c,0x4c,0x1c,0x70,0x1c,0x94, + 0x1c,0xd4,0x1d,0x14,0x1d,0x48,0x1d,0x7a,0x1d,0xb4, + 0x1d,0xf4,0x1e,0x2e,0x1e,0x50,0x1e,0x92,0x1e,0xc6, + 0x1e,0xfa,0x1f,0x34,0x1f,0x70,0x1f,0xb0,0x1f,0xe2, + 0x20,0x28,0x20,0x34,0x20,0x6a,0x20,0xaa,0x20,0xf2, + 0x21,0x42,0x21,0x70,0x21,0x9c,0x21,0xc8,0x21,0xfa, + 0x22,0x18,0x22,0x34,0x22,0x4e,0x22,0x60,0x22,0x80, + 0x22,0xa4,0x22,0xc8,0x22,0xec,0x23,0x02,0x23,0x30, + 0x23,0x4e,0x23,0x6e,0x23,0x7c,0x23,0x92,0x23,0xb0, + 0x23,0xbe,0x23,0xce,0x23,0xdc,0x23,0xea,0x24,0x08, + 0x24,0x16,0x24,0x24,0x24,0x32,0x24,0x40,0x24,0x4e, + 0x24,0x5e,0x24,0x92,0x24,0xb6,0x24,0xea,0x25,0x06, + 0x25,0x28,0x25,0x34,0x25,0x50,0x25,0x72,0x25,0xa8, + 0x25,0xb8,0x25,0xd4,0x26,0x04,0x26,0x24,0x26,0x44, + 0x26,0x88,0x26,0xa0,0x26,0xcc,0x27,0x0c,0x27,0x38, + 0x27,0x6a,0x27,0xa8,0x27,0xca,0x27,0xf0,0x28,0x24, + 0x28,0x40,0x28,0x74,0x28,0xa8,0x28,0xc0,0x28,0xe6, + 0x28,0xf4,0x29,0x02,0x29,0x14,0x29,0x26,0x29,0x38, + 0x29,0x56,0x29,0x74,0x29,0x92,0x29,0xae,0x29,0xdc, + 0x29,0xee,0x2a,0x12,0x2a,0x74,0x2a,0x8a,0x2a,0x9e, + 0x2a,0xac,0x2a,0xf0,0x2b,0x2a,0x2b,0x56,0x2b,0x8e, + 0x2b,0xba,0x2b,0xf8,0x2c,0x36,0x2c,0x7c,0x2c,0xc2, + 0x2c,0xfe,0x2d,0x3e,0x2d,0x7c,0x2d,0xa8,0x2d,0xe4, + 0x2e,0x08,0x2e,0x32,0x2e,0x48,0x2e,0x6c,0x2e,0xaa, + 0x2e,0xc2,0x2e,0xe6,0x2f,0x1e,0x2f,0x48,0x2f,0x94, + 0x2f,0xc8,0x30,0x10,0x30,0x4a,0x30,0x90,0x30,0xbe, + 0x30,0xfa,0x31,0x1e,0x31,0x5a,0x31,0x96,0x31,0xac, + 0x31,0xba,0x00,0x00,0x00,0x02,0x00,0x87,0xff,0xec, + 0x01,0x5d,0x05,0xb6,0x00,0x03,0x00,0x0a,0x00,0x00, + 0x01,0x23,0x03,0x33,0x02,0x32,0x15,0x14,0x06,0x23, + 0x22,0x01,0x29,0x6e,0x27,0xbd,0xca,0xd6,0x3a,0x31, + 0x6b,0x01,0x91,0x04,0x25,0xfb,0x31,0x7d,0x3e,0x40, + 0x00,0x00,0x00,0x02,0x00,0x81,0x03,0xa6,0x02,0x78, + 0x05,0xb6,0x00,0x03,0x00,0x07,0x00,0x00,0x01,0x23, + 0x03,0x33,0x01,0x23,0x03,0x33,0x01,0x09,0x64,0x24, + 0xa9,0x01,0x2d,0x64,0x24,0xa9,0x03,0xa6,0x02,0x10, + 0xfd,0xf0,0x02,0x10,0x00,0x00,0x00,0x02,0x00,0x26, + 0x00,0x00,0x03,0x8e,0x05,0xb6,0x00,0x1b,0x00,0x1f, + 0x00,0x00,0x01,0x15,0x23,0x03,0x33,0x15,0x23,0x03, + 0x23,0x13,0x23,0x03,0x23,0x13,0x23,0x35,0x33,0x13, + 0x23,0x35,0x33,0x13,0x33,0x03,0x33,0x13,0x33,0x03, + 0x05,0x03,0x33,0x13,0x03,0x8e,0xbe,0x2a,0xb7,0xc7, + 0x37,0x76,0x39,0xd8,0x38,0x73,0x36,0xaf,0xbf,0x2b, + 0xba,0xca,0x33,0x75,0x35,0xdb,0x35,0x71,0x33,0xfe, + 0xa2,0x29,0xd7,0x2c,0x04,0x14,0x79,0xfe,0xa2,0x7d, + 0xfe,0x40,0x01,0xc0,0xfe,0x40,0x01,0xc0,0x7d,0x01, + 0x5e,0x79,0x01,0xa2,0xfe,0x5e,0x01,0xa2,0xfe,0x5e, + 0x79,0xfe,0xa2,0x01,0x5e,0x00,0x00,0x00,0x00,0x03, + 0x00,0x57,0xff,0x89,0x03,0x07,0x06,0x14,0x00,0x1f, + 0x00,0x25,0x00,0x2b,0x00,0x00,0x01,0x06,0x07,0x26, + 0x27,0x11,0x1e,0x01,0x10,0x06,0x07,0x15,0x23,0x35, + 0x26,0x27,0x35,0x1e,0x01,0x17,0x11,0x26,0x27,0x2e, + 0x01,0x34,0x36,0x37,0x35,0x33,0x15,0x16,0x04,0x06, + 0x14,0x16,0x17,0x11,0x12,0x36,0x34,0x26,0x27,0x11, + 0x02,0xee,0x31,0x02,0x77,0x69,0xa1,0x8b,0xa1,0x8b, + 0x5d,0xb6,0x71,0x3c,0x9f,0x4c,0x15,0x24,0x82,0x65, + 0x9f,0x81,0x5d,0x90,0xfe,0xcf,0x4e,0x43,0x4f,0xa6, + 0x54,0x47,0x56,0x05,0x20,0x7b,0x05,0x38,0x06,0xfe, + 0x43,0x43,0x9e,0xfe,0xf9,0xb2,0x13,0xeb,0xe5,0x03, + 0x3d,0x96,0x24,0x2a,0x02,0x01,0xbb,0x08,0x12,0x41, + 0x95,0xfc,0xb4,0x13,0xb2,0xaf,0x06,0x94,0x67,0x9a, + 0x5c,0x25,0x01,0x91,0xfc,0x32,0x66,0x91,0x5d,0x27, + 0xfe,0x75,0x00,0x05,0x00,0x54,0xff,0xed,0x04,0xd6, + 0x05,0xcb,0x00,0x07,0x00,0x0b,0x00,0x14,0x00,0x1c, + 0x00,0x25,0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06, + 0x22,0x26,0x01,0x23,0x01,0x33,0x05,0x22,0x06,0x10, + 0x16,0x32,0x36,0x35,0x10,0x00,0x36,0x32,0x16,0x10, + 0x06,0x22,0x26,0x13,0x22,0x06,0x10,0x16,0x32,0x36, + 0x35,0x10,0x54,0x74,0xe6,0x77,0x7a,0xe4,0x73,0x01, + 0x7d,0x7f,0x02,0x05,0x80,0xfd,0x62,0x34,0x2f,0x2f, + 0x6d,0x30,0x01,0x64,0x75,0xe5,0x76,0x7a,0xe2,0x74, + 0xe5,0x34,0x2e,0x2f,0x6c,0x30,0x04,0xe2,0xe9,0xe8, + 0xfe,0x41,0xef,0xeb,0xfc,0xe0,0x05,0xb6,0x5f,0xa5, + 0xfe,0xa0,0xa5,0xa6,0xb0,0x01,0x54,0xfd,0x43,0xe8, + 0xe7,0xfe,0x3f,0xed,0xeb,0x02,0x35,0xa4,0xfe,0xa0, + 0xa5,0xa5,0xb0,0x01,0x54,0x00,0x00,0x00,0x00,0x03, + 0x00,0x3f,0xff,0xec,0x03,0xb2,0x05,0xcb,0x00,0x20, + 0x00,0x2a,0x00,0x32,0x00,0x00,0x05,0x22,0x26,0x35, + 0x34,0x36,0x37,0x2e,0x01,0x35,0x34,0x36,0x32,0x16, + 0x10,0x06,0x07,0x16,0x12,0x17,0x36,0x37,0x33,0x0e, + 0x01,0x07,0x13,0x23,0x2e,0x01,0x27,0x0e,0x01,0x03, + 0x22,0x06,0x14,0x16,0x17,0x3e,0x01,0x35,0x34,0x02, + 0x06,0x14,0x16,0x33,0x32,0x37,0x03,0x01,0x74,0x91, + 0xa4,0x67,0x7c,0x49,0x30,0x84,0xde,0x84,0x57,0x66, + 0x2d,0xa5,0x10,0x38,0x0a,0x8c,0x07,0x44,0x2d,0xa8, + 0xac,0x0f,0x3b,0x0f,0x46,0x91,0x3b,0x2e,0x33,0x2f, + 0x27,0x3d,0x32,0xe9,0x3e,0x5c,0x4f,0x7d,0x61,0xfa, + 0x14,0xcc,0xb7,0x84,0xc1,0x66,0x80,0x96,0x5d,0x92, + 0xac,0xa3,0xfe,0xf4,0xbe,0x5b,0x4a,0xfe,0xea,0x1a, + 0x72,0xb2,0x6a,0xed,0x4f,0xfe,0xf9,0x19,0x66,0x19, + 0x5e,0x4e,0x05,0x58,0x5b,0xa0,0xa0,0x3c,0x3a,0x8e, + 0x60,0xaf,0xfd,0x23,0x8b,0xde,0x85,0x96,0x01,0xa3, + 0x00,0x00,0x00,0x01,0x00,0x81,0x03,0xa6,0x01,0x2a, + 0x05,0xb6,0x00,0x03,0x00,0x00,0x01,0x23,0x03,0x33, + 0x01,0x09,0x64,0x24,0xa9,0x03,0xa6,0x02,0x10,0x00, + 0x00,0x01,0x00,0x5e,0xfe,0xbc,0x02,0x0b,0x05,0xb6, + 0x00,0x0b,0x00,0x00,0x00,0x02,0x10,0x12,0x17,0x23, + 0x26,0x02,0x10,0x12,0x37,0x33,0x01,0x84,0x8d,0x92, + 0x80,0x81,0x8f,0x9b,0x9c,0x8e,0x83,0x04,0xf3,0xfe, + 0x30,0xfe,0x1f,0xfe,0x2a,0xb0,0xa7,0x01,0xcb,0x02, + 0x05,0x01,0xd7,0xac,0x00,0x00,0x00,0x01,0x00,0x4a, + 0xfe,0xbc,0x01,0xf8,0x05,0xb6,0x00,0x0b,0x00,0x00, + 0x00,0x12,0x10,0x02,0x07,0x23,0x36,0x12,0x10,0x02, + 0x27,0x33,0x01,0x5c,0x9c,0x9b,0x90,0x81,0x82,0x90, + 0x8c,0x88,0x83,0x05,0x0a,0xfe,0x28,0xfd,0xfd,0xfe, + 0x35,0xa8,0xb6,0x01,0xd3,0x01,0xe0,0x01,0xcd,0xc4, + 0x00,0x00,0x00,0x01,0x00,0x50,0x03,0x80,0x02,0xdd, + 0x06,0x14,0x00,0x0e,0x00,0x00,0x01,0x25,0x17,0x07, + 0x17,0x07,0x27,0x07,0x27,0x37,0x27,0x37,0x17,0x03, + 0x33,0x01,0xc8,0x01,0x01,0x14,0xf6,0xa6,0x83,0x73, + 0x75,0x81,0xa0,0xf1,0x18,0xfd,0x1e,0xa0,0x05,0x08, + 0x42,0x92,0x0b,0xe9,0x42,0xf4,0xf6,0x44,0xe9,0x0b, + 0x91,0x41,0x01,0x0c,0x00,0x00,0x00,0x01,0x00,0x4b, + 0x00,0xfa,0x03,0x09,0x04,0xae,0x00,0x0b,0x00,0x00, + 0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21, + 0x11,0x33,0x01,0xe6,0x01,0x23,0xfe,0xdd,0x78,0xfe, + 0xdd,0x01,0x23,0x78,0x03,0x10,0x7b,0xfe,0x65,0x01, + 0x9b,0x7b,0x01,0x9e,0x00,0x01,0x00,0x45,0xfe,0xf8, + 0x01,0x5c,0x00,0xd8,0x00,0x06,0x00,0x00,0x25,0x17, + 0x06,0x07,0x23,0x12,0x37,0x01,0x4e,0x0e,0x3f,0x6b, + 0x6d,0x47,0x1d,0xd8,0x17,0xde,0xeb,0x00,0xff,0xe1, + 0x00,0x01,0x00,0x3b,0x01,0xdf,0x01,0xf4,0x02,0x70, + 0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xf4, + 0xfe,0x47,0x01,0xb9,0x01,0xdf,0x91,0x00,0x00,0x01, + 0x00,0x7e,0xff,0xec,0x01,0x53,0x00,0xe7,0x00,0x06, + 0x00,0x00,0x17,0x22,0x34,0x32,0x15,0x14,0x06,0xe8, + 0x6a,0xd5,0x39,0x14,0xfb,0x7d,0x3f,0x3f,0x00,0x00, + 0x00,0x01,0x00,0x27,0x00,0x00,0x02,0xd1,0x05,0xb6, + 0x00,0x03,0x00,0x00,0x33,0x23,0x01,0x33,0xc0,0x99, + 0x02,0x15,0x95,0x05,0xb6,0x00,0x00,0x00,0x00,0x02, + 0x00,0x53,0xff,0xec,0x03,0x08,0x05,0xcb,0x00,0x07, + 0x00,0x13,0x00,0x00,0x1a,0x01,0x20,0x12,0x10,0x02, + 0x20,0x02,0x01,0x22,0x02,0x10,0x12,0x33,0x32,0x37, + 0x36,0x11,0x10,0x02,0x53,0xaa,0x01,0x66,0xa5,0xaa, + 0xfe,0x96,0xa1,0x01,0x5a,0x65,0x57,0x57,0x65,0x3f, + 0x28,0x56,0x5c,0x04,0x5c,0x01,0x6f,0xfe,0x96,0xfc, + 0xfc,0xfe,0x8f,0x01,0x5f,0x03,0xf5,0xfe,0xe1,0xfd, + 0x74,0xfe,0xe2,0x39,0x78,0x01,0xb4,0x01,0x3f,0x01, + 0x25,0x00,0x00,0x01,0x00,0x85,0x00,0x00,0x02,0x48, + 0x05,0xb6,0x00,0x0b,0x00,0x00,0x21,0x23,0x11,0x34, + 0x37,0x06,0x07,0x06,0x07,0x27,0x01,0x33,0x02,0x48, + 0x99,0x0a,0x20,0x39,0x5f,0x28,0x54,0x01,0x3d,0x86, + 0x03,0xeb,0x76,0xb2,0x2b,0x36,0x5a,0x28,0x61,0x01, + 0x25,0x00,0x00,0x00,0x00,0x01,0x00,0x4a,0x00,0x00, + 0x03,0x03,0x05,0xcb,0x00,0x1e,0x00,0x00,0x13,0x26, + 0x27,0x3e,0x01,0x33,0x32,0x16,0x15,0x14,0x06,0x07, + 0x06,0x07,0x0e,0x01,0x07,0x15,0x21,0x15,0x21,0x35, + 0x01,0x3e,0x01,0x35,0x34,0x26,0x23,0x22,0x06,0xa8, + 0x03,0x52,0x50,0x90,0x5e,0x9e,0xb4,0x3e,0x49,0x36, + 0xa0,0x16,0x67,0x10,0x02,0x0a,0xfd,0x47,0x01,0x1b, + 0x86,0x5e,0x67,0x5a,0x40,0x66,0x04,0xde,0x03,0x64, + 0x4a,0x3c,0xc4,0xa7,0x79,0xd7,0x76,0x61,0xe0,0x1e, + 0x91,0x16,0x08,0x8c,0x77,0x01,0xa4,0xc7,0xe3,0x96, + 0x5a,0x89,0x2c,0x00,0x00,0x01,0x00,0x47,0xff,0xec, + 0x02,0xfc,0x05,0xcb,0x00,0x22,0x00,0x00,0x01,0x32, + 0x16,0x15,0x10,0x07,0x15,0x1e,0x01,0x15,0x14,0x06, + 0x20,0x27,0x35,0x16,0x33,0x32,0x36,0x10,0x26,0x2b, + 0x01,0x35,0x33,0x32,0x36,0x34,0x26,0x23,0x22,0x06, + 0x07,0x27,0x36,0x01,0x8f,0x9b,0xb9,0xf4,0x80,0x8d, + 0xd4,0xfe,0x9b,0x76,0x82,0x97,0x78,0x82,0x9a,0x91, + 0x4d,0x50,0x7d,0x94,0x66,0x5d,0x43,0x6d,0x3d,0x52, + 0x8d,0x05,0xcb,0xbf,0x94,0xfe,0xda,0x53,0x08,0x19, + 0xb9,0x92,0xc1,0xe6,0x3a,0x99,0x4e,0x99,0x01,0x12, + 0x96,0x81,0x9e,0xf6,0x7c,0x2f,0x3a,0x67,0x8a,0x00, + 0x00,0x00,0x00,0x02,0x00,0x25,0x00,0x00,0x03,0x42, + 0x05,0xc1,0x00,0x0a,0x00,0x12,0x00,0x00,0x01,0x33, + 0x15,0x23,0x11,0x23,0x11,0x21,0x35,0x01,0x33,0x03, + 0x11,0x34,0x37,0x23,0x06,0x07,0x03,0x02,0xa8,0x9a, + 0x9a,0x94,0xfe,0x11,0x01,0xd2,0xb1,0x94,0x09,0x07, + 0x23,0x4c,0xf4,0x01,0xca,0x87,0xfe,0xbd,0x01,0x43, + 0x81,0x03,0xfd,0xfc,0x09,0x01,0xe0,0xc7,0x8f,0x62, + 0xb2,0xfd,0xde,0x00,0x00,0x01,0x00,0x5f,0xff,0xec, + 0x03,0x03,0x05,0xb6,0x00,0x1e,0x00,0x00,0x37,0x16, + 0x33,0x32,0x36,0x35,0x34,0x35,0x34,0x26,0x23,0x22, + 0x07,0x27,0x13,0x21,0x15,0x21,0x03,0x36,0x33,0x1e, + 0x01,0x17,0x06,0x07,0x0e,0x01,0x07,0x22,0x27,0x5f, + 0x69,0x6f,0x87,0xa7,0x7e,0x76,0x5c,0x69,0x3e,0x2c, + 0x02,0x1a,0xfe,0x69,0x1f,0x50,0x50,0xab,0xb8,0x02, + 0x02,0x5f,0x2f,0xa1,0x69,0xa8,0x62,0xc6,0x49,0xb0, + 0x9a,0x03,0x04,0x93,0x95,0x1f,0x40,0x02,0x9f,0x8f, + 0xfe,0x3f,0x12,0x02,0xe7,0xb7,0xc7,0x8b,0x46,0x52, + 0x02,0x3d,0x00,0x00,0x00,0x02,0x00,0x5b,0xff,0xec, + 0x03,0x08,0x05,0xca,0x00,0x15,0x00,0x1e,0x00,0x00, + 0x01,0x32,0x16,0x10,0x02,0x23,0x22,0x02,0x11,0x10, + 0x12,0x33,0x32,0x17,0x15,0x26,0x23,0x20,0x03,0x33, + 0x3e,0x01,0x12,0x26,0x22,0x06,0x15,0x14,0x16,0x32, + 0x36,0x01,0xdd,0x8c,0x9f,0xb6,0x9c,0xaa,0xb1,0xe9, + 0xed,0x55,0x34,0x3c,0x4b,0xfe,0xcb,0x11,0x09,0x22, + 0x77,0xdf,0x5d,0xaf,0x6a,0x6b,0xad,0x5e,0x03,0x94, + 0xf3,0xfe,0x4c,0xfe,0xff,0x01,0x48,0x01,0x3a,0x01, + 0xb7,0x01,0xa5,0x15,0x8b,0x16,0xfd,0xb0,0x4e,0x56, + 0xfe,0xd1,0xa9,0x95,0x72,0xbc,0xd5,0xaa,0x00,0x01, + 0x00,0x41,0x00,0x00,0x03,0x12,0x05,0xb5,0x00,0x06, + 0x00,0x00,0x13,0x35,0x21,0x15,0x01,0x23,0x01,0x41, + 0x02,0xd1,0xfe,0x4d,0xa1,0x01,0xb8,0x05,0x27,0x8e, + 0x73,0xfa,0xbe,0x05,0x27,0x00,0x00,0x00,0x00,0x03, + 0x00,0x48,0xff,0xec,0x03,0x17,0x05,0xca,0x00,0x13, + 0x00,0x1c,0x00,0x26,0x00,0x00,0x12,0x36,0x20,0x16, + 0x15,0x14,0x07,0x1e,0x01,0x15,0x14,0x06,0x20,0x26, + 0x35,0x34,0x36,0x37,0x26,0x35,0x24,0x26,0x22,0x06, + 0x14,0x16,0x17,0x3e,0x01,0x00,0x06,0x14,0x16,0x32, + 0x36,0x35,0x34,0x2f,0x01,0x67,0xb9,0x01,0x26,0xb4, + 0xe6,0x8c,0x77,0xc3,0xfe,0xbb,0xc7,0x6f,0x7d,0xcd, + 0x01,0xf9,0x5d,0xa7,0x5c,0x4d,0x62,0x5d,0x54,0xfe, + 0xd7,0x56,0x71,0xbd,0x6e,0xb9,0x26,0x05,0x0a,0xc0, + 0xba,0x9e,0xe7,0x8e,0x5f,0xb4,0x7b,0xaa,0xd9,0xcd, + 0xab,0x83,0xc1,0x52,0x9d,0xd8,0x65,0x74,0x75,0xc9, + 0x83,0x45,0x3c,0x8f,0xfe,0x68,0x99,0xe6,0x88,0x8e, + 0x78,0xa6,0x83,0x1b,0x00,0x00,0x00,0x02,0x00,0x4d, + 0xff,0xec,0x02,0xfa,0x05,0xca,0x00,0x15,0x00,0x1e, + 0x00,0x00,0x01,0x22,0x26,0x10,0x12,0x20,0x12,0x11, + 0x10,0x02,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x12, + 0x13,0x23,0x0e,0x01,0x12,0x26,0x22,0x06,0x10,0x16, + 0x32,0x36,0x35,0x01,0x78,0x8c,0x9f,0xb9,0x01,0x46, + 0xae,0xef,0xeb,0x55,0x3a,0x3d,0x4e,0x99,0xa8,0x0a, + 0x08,0x22,0x77,0x98,0x69,0xab,0x62,0x5b,0xae,0x6d, + 0x02,0x20,0xf6,0x01,0xb3,0x01,0x01,0xfe,0xb9,0xfe, + 0xcc,0xfe,0x50,0xfe,0x4d,0x14,0x8b,0x17,0x01,0x2c, + 0x01,0x24,0x4e,0x56,0x02,0x4f,0xcf,0xaa,0xfe,0xba, + 0xa8,0x9f,0x78,0x00,0x00,0x02,0x00,0x7e,0xff,0xec, + 0x01,0x53,0x04,0x4f,0x00,0x06,0x00,0x0d,0x00,0x00, + 0x12,0x34,0x32,0x15,0x14,0x06,0x23,0x11,0x22,0x34, + 0x32,0x15,0x14,0x06,0x7e,0xd5,0x39,0x32,0x6a,0xd5, + 0x39,0x03,0x55,0xfa,0x7d,0x3e,0x3f,0xfc,0x97,0xfb, + 0x7d,0x3f,0x3f,0x00,0x00,0x00,0x00,0x02,0x00,0x45, + 0xfe,0xf8,0x01,0x5b,0x04,0x4f,0x00,0x06,0x00,0x0d, + 0x00,0x00,0x12,0x32,0x15,0x14,0x06,0x23,0x22,0x13, + 0x17,0x06,0x07,0x23,0x12,0x37,0x7d,0xd6,0x3a,0x31, + 0x6b,0xd0,0x0e,0x3d,0x6c,0x6d,0x49,0x1b,0x04,0x4f, + 0x7d,0x3e,0x40,0xfd,0x83,0x17,0xd8,0xf0,0x01,0x0b, + 0xd4,0x00,0x00,0x01,0x00,0x4b,0x01,0x05,0x03,0x0a, + 0x04,0x9f,0x00,0x06,0x00,0x00,0x09,0x02,0x15,0x01, + 0x35,0x01,0x03,0x0a,0xfd,0xcd,0x02,0x33,0xfd,0x41, + 0x02,0xbf,0x04,0x11,0xfe,0xc2,0xfe,0xc1,0x8f,0x01, + 0x9e,0x61,0x01,0x9b,0x00,0x00,0x00,0x02,0x00,0x4b, + 0x01,0xc3,0x03,0x09,0x03,0xdf,0x00,0x03,0x00,0x07, + 0x00,0x00,0x01,0x21,0x35,0x21,0x11,0x21,0x35,0x21, + 0x03,0x09,0xfd,0x42,0x02,0xbe,0xfd,0x42,0x02,0xbe, + 0x03,0x65,0x7a,0xfd,0xe4,0x7b,0x00,0x01,0x00,0x49, + 0x01,0x05,0x03,0x09,0x04,0x9f,0x00,0x06,0x00,0x00, + 0x01,0x15,0x01,0x35,0x09,0x01,0x35,0x03,0x09,0xfd, + 0x40,0x02,0x34,0xfd,0xcc,0x03,0x04,0x61,0xfe,0x62, + 0x8f,0x01,0x3f,0x01,0x3e,0x8e,0x00,0x02,0x00,0x1f, + 0xff,0xed,0x02,0x52,0x05,0xcb,0x00,0x15,0x00,0x1d, + 0x00,0x00,0x13,0x36,0x20,0x16,0x15,0x14,0x0e,0x02, + 0x1d,0x01,0x23,0x35,0x34,0x36,0x37,0x3e,0x01,0x34, + 0x26,0x22,0x07,0x13,0x32,0x16,0x14,0x06,0x23,0x22, + 0x34,0x1f,0x78,0x01,0x22,0x99,0x3d,0xa5,0x29,0x80, + 0x2e,0x42,0x53,0x31,0x54,0xa9,0x60,0xad,0x32,0x39, + 0x39,0x32,0x6a,0x05,0x76,0x55,0xb3,0xa6,0x74,0x94, + 0xe3,0x6f,0x5b,0x2c,0x39,0x70,0x8e,0x55,0x75,0x83, + 0xc1,0x6b,0x40,0xfb,0xe6,0x3f,0x7c,0x3f,0xfa,0x00, + 0x00,0x00,0x00,0x02,0x00,0x62,0xff,0x50,0x04,0xc6, + 0x05,0xc2,0x00,0x2f,0x00,0x3a,0x00,0x00,0x05,0x22, + 0x00,0x11,0x10,0x00,0x21,0x32,0x16,0x12,0x10,0x02, + 0x23,0x22,0x27,0x23,0x0e,0x01,0x23,0x22,0x26,0x35, + 0x34,0x36,0x33,0x32,0x17,0x03,0x15,0x14,0x16,0x33, + 0x32,0x11,0x10,0x02,0x23,0x22,0x06,0x02,0x15,0x10, + 0x12,0x33,0x32,0x37,0x15,0x06,0x03,0x22,0x06,0x15, + 0x14,0x33,0x32,0x36,0x37,0x13,0x26,0x02,0x7a,0xfe, + 0xfe,0xe6,0x01,0x48,0x01,0x11,0xa1,0xee,0x7c,0x82, + 0x7c,0x99,0x0e,0x09,0x17,0x55,0x42,0x64,0x6f,0x9c, + 0x8c,0x62,0x60,0x14,0x2e,0x2e,0x79,0xd4,0xb2,0x8f, + 0xd8,0x71,0xd9,0xc2,0x94,0x7b,0x79,0x61,0x47,0x4f, + 0x63,0x2e,0x32,0x09,0x0f,0x1f,0xb0,0x01,0x8a,0x01, + 0x6a,0x01,0x9c,0x01,0xe2,0xba,0xfe,0xb4,0xfe,0x2b, + 0xff,0x00,0xb8,0x5d,0x5b,0xbb,0xaf,0xe4,0xfa,0x21, + 0xfe,0x26,0x35,0x55,0x4b,0x01,0x88,0x01,0x18,0x01, + 0x4c,0xc3,0xfe,0xaa,0xdc,0xfe,0xcb,0xfe,0xa4,0x4b, + 0x7a,0x46,0x04,0x70,0xc1,0xb1,0xef,0x9b,0xa5,0x01, + 0x18,0x09,0x00,0x02,0x00,0x00,0x00,0x00,0x03,0x89, + 0x05,0xb7,0x00,0x09,0x00,0x13,0x00,0x00,0x01,0x33, + 0x16,0x01,0x23,0x03,0x21,0x03,0x23,0x00,0x17,0x27, + 0x26,0x27,0x0e,0x03,0x07,0x21,0x01,0x63,0xbd,0x3d, + 0x01,0x2c,0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26, + 0xd9,0x20,0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01, + 0x2d,0x05,0xb7,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24, + 0x04,0xbc,0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4, + 0x30,0x00,0x00,0x03,0x00,0x95,0x00,0x00,0x03,0x69, + 0x05,0xb6,0x00,0x0e,0x00,0x16,0x00,0x1e,0x00,0x00, + 0x13,0x21,0x20,0x11,0x14,0x06,0x07,0x15,0x1e,0x01, + 0x15,0x14,0x06,0x23,0x21,0x13,0x11,0x33,0x32,0x36, + 0x35,0x34,0x23,0x03,0x11,0x33,0x32,0x11,0x34,0x26, + 0x23,0x95,0x01,0x37,0x01,0x7f,0x6e,0x67,0x7c,0x77, + 0xbb,0xa6,0xfe,0x8d,0x96,0xa5,0x76,0x68,0xe3,0xa0, + 0xc4,0xda,0x7b,0x73,0x05,0xb6,0xfe,0x9c,0x8c,0xac, + 0x14,0x08,0x1c,0xaa,0x96,0xc4,0xde,0x05,0x2c,0xfe, + 0x13,0x81,0x88,0xe4,0xfd,0x8c,0xfd,0xd2,0x01,0x22, + 0x82,0x8a,0x00,0x01,0x00,0x66,0xff,0xec,0x03,0x4a, + 0x05,0xcc,0x00,0x13,0x00,0x00,0x05,0x22,0x00,0x10, + 0x12,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x02,0x10, + 0x12,0x33,0x32,0x37,0x15,0x06,0x02,0x44,0xdd,0xfe, + 0xff,0xfd,0xe4,0x8c,0x77,0x3c,0x5f,0x65,0x97,0xad, + 0xb0,0x9b,0x75,0x62,0x58,0x14,0x01,0x89,0x02,0xbf, + 0x01,0x98,0x4a,0x83,0x3f,0xfe,0xb9,0xfd,0xc7,0xfe, + 0xbb,0x34,0x8c,0x35,0x00,0x02,0x00,0x95,0x00,0x00, + 0x03,0xae,0x05,0xb6,0x00,0x07,0x00,0x0f,0x00,0x00, + 0x13,0x21,0x32,0x12,0x10,0x02,0x23,0x21,0x13,0x11, + 0x33,0x20,0x11,0x10,0x02,0x23,0x95,0x01,0x34,0xea, + 0xfb,0xfc,0xf8,0xfe,0xdb,0x9c,0x85,0x01,0x57,0xa7, + 0xa3,0x05,0xb6,0xfe,0x90,0xfd,0x30,0xfe,0x8a,0x05, + 0x2c,0xfb,0x5e,0x02,0x58,0x01,0x21,0x01,0x29,0x00, + 0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00,0x02,0xd2, + 0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x21,0x11,0x21, + 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02,0xd2, + 0xfe,0x5f,0x01,0x88,0xfe,0x78,0x01,0xa1,0xfd,0xc4, + 0x02,0x3c,0x05,0x29,0xfe,0x1a,0x8d,0xfd,0xd8,0x8e, + 0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00, + 0x02,0xd2,0x05,0xb6,0x00,0x09,0x00,0x00,0x01,0x21, + 0x11,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x02,0xd2, + 0xfe,0x5f,0x01,0x89,0xfe,0x77,0x9b,0x02,0x3c,0x05, + 0x29,0xfd,0xdb,0x8d,0xfd,0x89,0x05,0xb6,0x00,0x01, + 0x00,0x66,0xff,0xec,0x03,0xd3,0x05,0xcb,0x00,0x18, + 0x00,0x00,0x01,0x11,0x06,0x23,0x22,0x00,0x10,0x00, + 0x21,0x32,0x17,0x06,0x07,0x26,0x23,0x22,0x02,0x10, + 0x12,0x33,0x32,0x37,0x11,0x23,0x35,0x03,0xd3,0xad, + 0xc0,0xf4,0xfe,0xf4,0x01,0x1d,0x01,0x04,0xaa,0x96, + 0x32,0x0a,0x86,0x78,0xbc,0xca,0xbc,0xaa,0x75,0x57, + 0xd0,0x02,0xf9,0xfd,0x39,0x46,0x01,0x8b,0x02,0xc8, + 0x01,0x8c,0x5d,0x6f,0x14,0x53,0xfe,0xc1,0xfd,0xba, + 0xfe,0xc0,0x1f,0x01,0xd3,0x8e,0x00,0x01,0x00,0x96, + 0x00,0x00,0x03,0x99,0x05,0xb6,0x00,0x0b,0x00,0x00, + 0x21,0x23,0x11,0x21,0x11,0x23,0x11,0x33,0x11,0x21, + 0x11,0x33,0x03,0x99,0x9c,0xfe,0x34,0x9b,0x9b,0x01, + 0xcc,0x9c,0x02,0xb5,0xfd,0x4b,0x05,0xb6,0xfd,0x8d, + 0x02,0x73,0x00,0x00,0x00,0x01,0x00,0xa6,0x00,0x00, + 0x01,0x3c,0x05,0xb6,0x00,0x03,0x00,0x00,0x21,0x23, + 0x11,0x33,0x01,0x3c,0x96,0x96,0x05,0xb6,0x00,0x01, + 0xff,0x91,0xfe,0x7d,0x01,0x2a,0x05,0xb6,0x00,0x0e, + 0x00,0x00,0x01,0x11,0x16,0x06,0x23,0x22,0x23,0x22, + 0x27,0x35,0x16,0x32,0x36,0x35,0x11,0x01,0x2a,0x01, + 0x91,0x80,0x02,0x01,0x51,0x35,0x37,0x85,0x42,0x05, + 0xb6,0xfa,0x49,0xb8,0xc9,0x19,0x8b,0x14,0x71,0x7a, + 0x05,0xbd,0x00,0x00,0x00,0x01,0x00,0x95,0x00,0x00, + 0x03,0x7f,0x05,0xb6,0x00,0x0f,0x00,0x00,0x21,0x23, + 0x11,0x33,0x11,0x36,0x01,0x33,0x01,0x16,0x00,0x17, + 0x23,0x02,0x27,0x07,0x01,0x31,0x9c,0x9c,0x2f,0x01, + 0x64,0xa7,0xfe,0x9b,0x33,0x01,0x00,0x46,0xa9,0xfc, + 0x3a,0x6f,0x05,0xb6,0xfd,0x0a,0x62,0x02,0x94,0xfd, + 0x80,0x6f,0xfd,0xd0,0x97,0x02,0x36,0x80,0x88,0x00, + 0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00,0x02,0xc2, + 0x05,0xb6,0x00,0x05,0x00,0x00,0x25,0x21,0x15,0x21, + 0x11,0x33,0x01,0x31,0x01,0x91,0xfd,0xd4,0x9b,0x8e, + 0x8e,0x05,0xb6,0x00,0x00,0x01,0x00,0x95,0x00,0x00, + 0x05,0x22,0x05,0xb6,0x00,0x17,0x00,0x00,0x21,0x23, + 0x11,0x34,0x37,0x23,0x01,0x23,0x01,0x23,0x16,0x15, + 0x11,0x23,0x11,0x33,0x01,0x16,0x17,0x33,0x36,0x37, + 0x01,0x33,0x05,0x22,0x96,0x0b,0x08,0xfe,0xa1,0xac, + 0xfe,0x9f,0x09,0x0d,0x92,0xeb,0x01,0x21,0x23,0x11, + 0x08,0x0e,0x29,0x01,0x1e,0xf0,0x04,0x0b,0x61,0xa8, + 0xfa,0xec,0x05,0x16,0xb5,0x54,0xfb,0xf3,0x05,0xb6, + 0xfb,0xd7,0x81,0x68,0x55,0x92,0x04,0x2b,0x00,0x01, + 0x00,0x96,0x00,0x00,0x03,0xec,0x05,0xb6,0x00,0x0f, + 0x00,0x00,0x21,0x23,0x01,0x23,0x16,0x15,0x11,0x23, + 0x11,0x33,0x01,0x33,0x26,0x35,0x11,0x33,0x03,0xec, + 0xc2,0xfd,0xf9,0x0a,0x10,0x93,0xc3,0x02,0x04,0x07, + 0x0b,0x93,0x04,0xcc,0x80,0x86,0xfc,0x3a,0x05,0xb6, + 0xfb,0x42,0x97,0x73,0x03,0xb4,0x00,0x00,0x00,0x02, + 0x00,0x66,0xff,0xec,0x03,0xf5,0x05,0xcb,0x00,0x08, + 0x00,0x11,0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x20, + 0x02,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x20,0x12, + 0x11,0x10,0x02,0x30,0xdb,0xea,0xeb,0xfe,0x44,0xe8, + 0x01,0xca,0x94,0x96,0x96,0x01,0x23,0x96,0x05,0xcb, + 0xfe,0x7a,0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c, + 0x02,0xec,0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01, + 0x33,0x01,0x30,0x02,0x60,0x00,0x00,0x00,0x00,0x02, + 0x00,0x95,0x00,0x00,0x03,0x36,0x05,0xb6,0x00,0x09, + 0x00,0x11,0x00,0x00,0x13,0x21,0x32,0x16,0x15,0x10, + 0x21,0x23,0x11,0x23,0x13,0x11,0x33,0x32,0x36,0x10, + 0x26,0x23,0x95,0x01,0x01,0xd5,0xcb,0xfe,0x57,0x5c, + 0x9c,0x9c,0x53,0x93,0x82,0x81,0x88,0x05,0xb6,0xd2, + 0xdc,0xfe,0x3b,0xfd,0xbd,0x05,0x2c,0xfd,0xa1,0x91, + 0x01,0x41,0x8d,0x00,0x00,0x00,0x00,0x02,0x00,0x66, + 0xfe,0xa4,0x03,0xf5,0x05,0xcb,0x00,0x10,0x00,0x19, + 0x00,0x00,0x05,0x22,0x02,0x11,0x10,0x21,0x32,0x12, + 0x11,0x10,0x02,0x07,0x13,0x23,0x03,0x26,0x06,0x03, + 0x22,0x02,0x10,0x12,0x20,0x12,0x11,0x10,0x02,0x2d, + 0xdf,0xe8,0x01,0xca,0xdb,0xea,0x8a,0x84,0xe7,0xbb, + 0xbf,0x07,0x1a,0x03,0x94,0x96,0x96,0x01,0x23,0x96, + 0x14,0x01,0x87,0x01,0x6c,0x02,0xec,0xfe,0x7a,0xfe, + 0x98,0xfe,0xea,0xfe,0x96,0x46,0xfe,0x8d,0x01,0x4b, + 0x01,0x04,0x05,0x51,0xfe,0xcb,0xfd,0xa8,0xfe,0xca, + 0x01,0x33,0x01,0x30,0x02,0x60,0x00,0x02,0x00,0x96, + 0x00,0x00,0x03,0x7b,0x05,0xb6,0x00,0x0d,0x00,0x15, + 0x00,0x00,0x13,0x33,0x32,0x16,0x15,0x14,0x06,0x07, + 0x01,0x23,0x01,0x23,0x11,0x23,0x13,0x11,0x33,0x32, + 0x36,0x10,0x26,0x23,0x96,0xfb,0xd9,0xcd,0x69,0x72, + 0x01,0x1f,0xaa,0xfe,0xfd,0x9d,0x9b,0x9b,0x73,0x79, + 0x7c,0x7e,0x8a,0x05,0xb6,0xcc,0xd1,0x96,0xc2,0x32, + 0xfd,0x71,0x02,0x68,0xfd,0x98,0x05,0x28,0xfd,0xc9, + 0x92,0x01,0x23,0x82,0x00,0x00,0x00,0x01,0x00,0x50, + 0xff,0xec,0x02,0xe9,0x05,0xcb,0x00,0x1d,0x00,0x00, + 0x25,0x32,0x36,0x34,0x26,0x27,0x2e,0x01,0x10,0x36, + 0x20,0x17,0x06,0x07,0x26,0x22,0x06,0x14,0x16,0x17, + 0x1e,0x01,0x15,0x14,0x06,0x20,0x27,0x35,0x1e,0x01, + 0x01,0x6f,0x64,0x7b,0x6e,0x64,0x9f,0x81,0xc7,0x01, + 0x3c,0x7b,0x13,0x24,0x74,0xc5,0x75,0x56,0x8a,0x92, + 0x82,0xcb,0xfe,0xa8,0x76,0x3c,0x9c,0x79,0x90,0xcf, + 0x8b,0x3d,0x59,0xb8,0x01,0x44,0xd6,0x48,0x2d,0x5a, + 0x3e,0x83,0xd0,0x7b,0x4d,0x4f,0xc2,0x89,0xbb,0xde, + 0x3a,0xa0,0x23,0x2a,0x00,0x00,0x00,0x01,0x00,0x12, + 0x00,0x00,0x02,0xec,0x05,0xb6,0x00,0x07,0x00,0x00, + 0x01,0x21,0x11,0x23,0x11,0x21,0x35,0x21,0x02,0xec, + 0xfe,0xe1,0x9b,0xfe,0xe0,0x02,0xda,0x05,0x28,0xfa, + 0xd8,0x05,0x28,0x8e,0x00,0x00,0x00,0x01,0x00,0x8b, + 0xff,0xec,0x03,0x96,0x05,0xb6,0x00,0x0f,0x00,0x00, + 0x01,0x11,0x14,0x02,0x20,0x02,0x35,0x11,0x33,0x11, + 0x14,0x16,0x32,0x36,0x35,0x11,0x03,0x96,0xc4,0xfe, + 0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x05,0xb6,0xfc,0x33, + 0xfc,0xfe,0xff,0x01,0x06,0xf8,0x03,0xcc,0xfc,0x25, + 0xad,0xb3,0xb4,0xad,0x03,0xda,0x00,0x01,0x00,0x00, + 0x00,0x00,0x03,0x6b,0x05,0xb6,0x00,0x0c,0x00,0x00, + 0x21,0x23,0x02,0x03,0x33,0x12,0x13,0x16,0x17,0x36, + 0x37,0x13,0x33,0x02,0x12,0xbb,0x58,0xff,0x9e,0x78, + 0x67,0x21,0x14,0x13,0x16,0xf2,0x9e,0x01,0x75,0x04, + 0x41,0xfd,0xe8,0xfe,0x40,0x96,0xa8,0x8f,0x69,0x04, + 0x1e,0x00,0x00,0x01,0x00,0x0c,0x00,0x00,0x05,0xb0, + 0x05,0xb6,0x00,0x22,0x00,0x00,0x01,0x02,0x03,0x23, + 0x03,0x2e,0x05,0x27,0x0f,0x01,0x06,0x07,0x03,0x23, + 0x02,0x03,0x33,0x12,0x17,0x12,0x17,0x36,0x37,0x13, + 0x33,0x13,0x16,0x17,0x36,0x37,0x13,0x05,0xb0,0x3a, + 0xed,0xc0,0x93,0x05,0x17,0x07,0x11,0x0a,0x11,0x0a, + 0x0c,0x0f,0x2a,0x14,0x90,0xbe,0xda,0x50,0x9d,0x7e, + 0x2a,0x42,0x06,0x1f,0x12,0xc1,0xa8,0xa5,0x2b,0x22, + 0x1e,0x19,0xb8,0x05,0xb6,0xfe,0xe4,0xfb,0x66,0x02, + 0xe5,0x19,0x6c,0x23,0x5a,0x48,0x78,0x4d,0x58,0x5f, + 0xe6,0x72,0xfd,0x1b,0x04,0x32,0x01,0x84,0xfd,0x75, + 0xe9,0xfe,0x8b,0x31,0xe2,0x61,0x03,0xd7,0xfc,0xbb, + 0xdc,0xfa,0xf2,0x76,0x03,0xb3,0x00,0x01,0x00,0x0d, + 0x00,0x00,0x03,0x11,0x05,0xb6,0x00,0x0b,0x00,0x00, + 0x09,0x01,0x23,0x0b,0x01,0x23,0x09,0x01,0x33,0x1b, + 0x01,0x33,0x01,0xf6,0x01,0x1b,0xa2,0xd8,0xea,0xa0, + 0x01,0x3c,0xfe,0xe9,0xa0,0xd1,0xc4,0xa1,0x02,0xf0, + 0xfd,0x10,0x02,0x6f,0xfd,0x91,0x03,0x03,0x02,0xb3, + 0xfd,0xca,0x02,0x36,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x03,0x09,0x05,0xb6,0x00,0x08,0x00,0x00, + 0x21,0x23,0x11,0x01,0x33,0x1b,0x01,0x33,0x01,0x01, + 0xd1,0x9b,0xfe,0xca,0xa4,0xe1,0xe0,0xa4,0xfe,0xc8, + 0x02,0x3c,0x03,0x7a,0xfd,0x48,0x02,0xb8,0xfc,0x8a, + 0x00,0x01,0x00,0x34,0x00,0x00,0x02,0xa7,0x05,0xb6, + 0x00,0x09,0x00,0x00,0x25,0x15,0x21,0x35,0x01,0x21, + 0x35,0x21,0x15,0x01,0x02,0xa7,0xfd,0x8d,0x01,0xb7, + 0xfe,0x52,0x02,0x5d,0xfe,0x45,0x8e,0x8e,0x7a,0x04, + 0xad,0x8f,0x7b,0xfb,0x53,0x00,0x00,0x00,0x00,0x01, + 0x00,0xa0,0xfe,0xbc,0x02,0x45,0x05,0xb6,0x00,0x07, + 0x00,0x00,0x01,0x21,0x11,0x21,0x15,0x21,0x11,0x21, + 0x02,0x45,0xfe,0xec,0x01,0x14,0xfe,0x5b,0x01,0xa5, + 0x05,0x38,0xfa,0x03,0x7f,0x06,0xfa,0x00,0x00,0x01, + 0x00,0x27,0x00,0x00,0x02,0xd1,0x05,0xb6,0x00,0x03, + 0x00,0x00,0x21,0x23,0x01,0x33,0x02,0xd1,0x99,0xfd, + 0xef,0x95,0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0x41, + 0xfe,0xbc,0x01,0xe6,0x05,0xb6,0x00,0x07,0x00,0x00, + 0x01,0x21,0x35,0x21,0x11,0x21,0x35,0x21,0x01,0xe6, + 0xfe,0x5b,0x01,0x15,0xfe,0xeb,0x01,0xa5,0xfe,0xbc, + 0x7f,0x05,0xfd,0x7e,0x00,0x00,0x00,0x01,0x00,0x1d, + 0x02,0xa9,0x03,0x70,0x05,0xb7,0x00,0x06,0x00,0x00, + 0x01,0x23,0x09,0x01,0x23,0x01,0x33,0x03,0x70,0x8f, + 0xfe,0xdf,0xfe,0xea,0x8d,0x01,0x73,0x5a,0x02,0xa9, + 0x02,0x66,0xfd,0x9a,0x03,0x0e,0x00,0x01,0xff,0xfc, + 0xfe,0xe3,0x03,0x1e,0xff,0x48,0x00,0x03,0x00,0x00, + 0x01,0x21,0x35,0x21,0x03,0x1e,0xfc,0xde,0x03,0x22, + 0xfe,0xe3,0x65,0x00,0x00,0x01,0x01,0x89,0x04,0xd9, + 0x02,0xff,0x06,0x21,0x00,0x0a,0x00,0x00,0x01,0x33, + 0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x01, + 0x89,0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21, + 0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60,0x61,0x3d, + 0x00,0x00,0x00,0x02,0x00,0x46,0xff,0xee,0x02,0xc8, + 0x04,0x5c,0x00,0x15,0x00,0x20,0x00,0x00,0x13,0x27, + 0x36,0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06,0x23, + 0x22,0x26,0x10,0x36,0x3f,0x01,0x35,0x34,0x26,0x22, + 0x13,0x35,0x06,0x07,0x0e,0x01,0x15,0x14,0x33,0x32, + 0x36,0xcc,0x3a,0x82,0x01,0x26,0x8e,0x74,0x1a,0x05, + 0x52,0x9f,0x78,0x86,0xbc,0xb0,0x7f,0x48,0xb2,0xfa, + 0x22,0x44,0x76,0x71,0x89,0x5c,0x68,0x03,0x9b,0x6f, + 0x52,0xb6,0xc1,0xfd,0x1b,0x98,0xaa,0xa8,0x01,0x3a, + 0xb3,0x08,0x06,0x56,0x80,0x77,0xfd,0xda,0x6a,0x01, + 0x04,0x06,0x77,0x73,0xc7,0xb3,0x00,0x02,0x00,0x86, + 0xff,0xec,0x03,0x4e,0x06,0x14,0x00,0x0f,0x00,0x19, + 0x00,0x00,0x01,0x07,0x33,0x36,0x20,0x12,0x10,0x02, + 0x20,0x27,0x23,0x06,0x07,0x23,0x11,0x33,0x11,0x15, + 0x14,0x16,0x32,0x36,0x10,0x26,0x22,0x06,0x01,0x1d, + 0x07,0x0a,0x57,0x01,0x31,0xa6,0xa5,0xfe,0xcd,0x59, + 0x0b,0x08,0x0f,0x75,0x97,0x66,0xcf,0x60,0x60,0xd3, + 0x62,0x04,0x48,0x92,0xa4,0xfe,0xe0,0xfd,0xd7,0xfe, + 0xdb,0xa2,0x37,0x57,0x06,0x14,0xfc,0x1b,0x1a,0xd6, + 0xce,0xd7,0x01,0xb7,0xd5,0xc2,0x00,0x00,0x00,0x01, + 0x00,0x58,0xff,0xec,0x02,0x7e,0x04,0x5b,0x00,0x13, + 0x00,0x00,0x05,0x22,0x02,0x11,0x10,0x21,0x32,0x17, + 0x07,0x26,0x23,0x22,0x11,0x14,0x16,0x33,0x32,0x37, + 0x15,0x06,0x01,0xba,0xaf,0xb3,0x01,0x62,0x72,0x52, + 0x32,0x47,0x3c,0xd5,0x6b,0x70,0x4a,0x5c,0x59,0x14, + 0x01,0x1d,0x01,0x14,0x02,0x3e,0x30,0x7c,0x25,0xfe, + 0x4b,0xdc,0xd0,0x2a,0x83,0x2e,0x00,0x02,0x00,0x57, + 0xff,0xec,0x03,0x1f,0x06,0x14,0x00,0x12,0x00,0x1c, + 0x00,0x00,0x21,0x23,0x26,0x27,0x23,0x06,0x20,0x02, + 0x10,0x12,0x33,0x32,0x16,0x17,0x33,0x26,0x27,0x11, + 0x33,0x03,0x35,0x34,0x26,0x22,0x06,0x10,0x16,0x32, + 0x36,0x03,0x1f,0x75,0x0f,0x05,0x09,0x53,0xfe,0xc3, + 0xa6,0xa4,0x99,0x47,0x80,0x29,0x0b,0x05,0x02,0x97, + 0x98,0x67,0xd0,0x5c,0x5f,0xca,0x6a,0x6a,0x2b,0xa9, + 0x01,0x20,0x02,0x27,0x01,0x28,0x54,0x4c,0x4d,0x4a, + 0x01,0xc2,0xfb,0xd7,0x35,0xe2,0xd1,0xdb,0xfe,0x4d, + 0xd8,0xbe,0x00,0x02,0x00,0x58,0xff,0xec,0x02,0xfb, + 0x04,0x5b,0x00,0x10,0x00,0x16,0x00,0x00,0x05,0x22, + 0x02,0x10,0x12,0x33,0x32,0x12,0x1d,0x01,0x21,0x12, + 0x33,0x32,0x37,0x15,0x06,0x13,0x34,0x26,0x23,0x22, + 0x03,0x01,0xdc,0xb9,0xcb,0xb6,0xa9,0x96,0xae,0xfd, + 0xf7,0x06,0xf4,0x72,0x76,0x70,0x01,0x60,0x53,0xad, + 0x10,0x14,0x01,0x25,0x02,0x20,0x01,0x2a,0xfe,0xfb, + 0xdf,0x6a,0xfe,0x62,0x47,0x86,0x44,0x02,0x9a,0x9d, + 0xbb,0xfe,0xa8,0x00,0x00,0x00,0x00,0x01,0x00,0x16, + 0x00,0x00,0x02,0x33,0x06,0x1f,0x00,0x16,0x00,0x00, + 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x0e, + 0x01,0x1d,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x23, + 0x35,0x36,0x37,0x9e,0x76,0x87,0x52,0x46,0x2d,0x33, + 0x2f,0x3f,0x31,0xaf,0xaf,0x96,0x88,0x19,0x6f,0x04, + 0xa1,0xc7,0xb7,0x20,0x7e,0x19,0x02,0x6e,0x8c,0x58, + 0x7e,0xfc,0x38,0x03,0xc8,0x50,0x0b,0x2b,0x00,0x03, + 0x00,0x1d,0xfe,0x14,0x03,0x13,0x04,0x5b,0x00,0x2b, + 0x00,0x34,0x00,0x3f,0x00,0x00,0x25,0x33,0x32,0x16, + 0x15,0x14,0x06,0x23,0x22,0x26,0x35,0x34,0x37,0x2e, + 0x01,0x34,0x36,0x37,0x2e,0x01,0x35,0x34,0x36,0x33, + 0x32,0x17,0x36,0x32,0x17,0x15,0x07,0x1e,0x01,0x15, + 0x14,0x06,0x2b,0x01,0x22,0x27,0x0e,0x01,0x14,0x16, + 0x12,0x26,0x22,0x06,0x14,0x16,0x33,0x32,0x35,0x03, + 0x23,0x22,0x06,0x14,0x16,0x33,0x32,0x36,0x35,0x34, + 0x01,0x84,0x63,0x91,0x9b,0xe7,0xc4,0xa0,0xab,0xd7, + 0x34,0x3d,0x38,0x42,0x4e,0x54,0xa1,0x90,0x3d,0x3c, + 0x0d,0x82,0x77,0x8f,0x1a,0x21,0xa4,0x83,0x08,0x1e, + 0x10,0x2b,0x2c,0x44,0xdc,0x4e,0x96,0x51,0x53,0x4a, + 0x98,0x5e,0x4c,0x61,0x6c,0x64,0x61,0x81,0x91,0xaa, + 0x9a,0x94,0xa7,0xc1,0x99,0x8f,0xcb,0x4e,0x16,0x51, + 0x64,0x4d,0x33,0x26,0xab,0x72,0xb1,0xc7,0x16,0x01, + 0x01,0x60,0x15,0x25,0x81,0x43,0xa4,0xc5,0x04,0x20, + 0x3b,0x4f,0x2e,0x02,0xbb,0x87,0x8a,0xf9,0x7e,0xfd, + 0xfd,0x37,0x73,0xbf,0x65,0x7c,0x6d,0xae,0x00,0x01, + 0x00,0x86,0x00,0x00,0x03,0x1d,0x06,0x14,0x00,0x16, + 0x00,0x00,0x01,0x11,0x14,0x07,0x33,0x3e,0x01,0x33, + 0x32,0x16,0x15,0x11,0x23,0x11,0x34,0x26,0x23,0x22, + 0x06,0x15,0x11,0x23,0x11,0x01,0x1d,0x06,0x0a,0x21, + 0x7f,0x4c,0x8d,0x83,0x98,0x47,0x4f,0x6b,0x67,0x97, + 0x06,0x14,0xfe,0x3b,0x43,0x59,0x4e,0x5a,0xba,0xbc, + 0xfd,0x1b,0x02,0xd0,0x8a,0x7c,0xc9,0xcf,0xfd,0xc2, + 0x06,0x14,0x00,0x00,0x00,0x02,0x00,0x7a,0x00,0x00, + 0x01,0x2d,0x05,0xdf,0x00,0x07,0x00,0x0b,0x00,0x00, + 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x13,0x23, + 0x11,0x33,0x7a,0x32,0x52,0x2f,0x30,0x51,0x32,0xa5, + 0x98,0x98,0x05,0xa4,0x3b,0x3b,0x67,0x3b,0x3b,0xfa, + 0xc3,0x04,0x47,0x00,0x00,0x00,0x00,0x02,0xff,0xea, + 0xfe,0x14,0x01,0x2f,0x05,0xdf,0x00,0x07,0x00,0x14, + 0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x17,0x11,0x10,0x23,0x22,0x27,0x35,0x16,0x33,0x32, + 0x36,0x35,0x11,0x7c,0x32,0x53,0x2e,0x2f,0x51,0x33, + 0xa5,0xdc,0x38,0x23,0x25,0x21,0x2f,0x2a,0x05,0xa4, + 0x3b,0x3b,0x66,0x3c,0x3c,0xf7,0xfb,0x08,0xfe,0xc5, + 0x14,0x85,0x11,0x58,0x5d,0x04,0xf6,0x00,0x00,0x01, + 0x00,0x86,0x00,0x00,0x03,0x10,0x06,0x14,0x00,0x0e, + 0x00,0x00,0x21,0x23,0x11,0x33,0x11,0x07,0x33,0x37, + 0x13,0x33,0x09,0x01,0x23,0x03,0x07,0x01,0x1e,0x98, + 0x98,0x09,0x09,0x3f,0xfc,0xa2,0xfe,0xfc,0x01,0x19, + 0x9f,0xe0,0x73,0x06,0x14,0xfc,0xdd,0xc3,0x75,0x01, + 0xa4,0xfe,0x5d,0xfd,0x5c,0x02,0x2c,0x89,0x00,0x01, + 0x00,0x86,0x00,0x00,0x01,0x1e,0x06,0x14,0x00,0x03, + 0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x1e,0x98,0x98, + 0x06,0x14,0x00,0x01,0x00,0x86,0x00,0x00,0x04,0xf4, + 0x04,0x5b,0x00,0x22,0x00,0x00,0x01,0x17,0x33,0x36, + 0x33,0x32,0x17,0x3e,0x02,0x37,0x36,0x33,0x32,0x16, + 0x15,0x11,0x23,0x11,0x10,0x23,0x22,0x06,0x15,0x11, + 0x23,0x11,0x10,0x23,0x22,0x06,0x15,0x11,0x23,0x11, + 0x01,0x01,0x10,0x0c,0x44,0xa5,0xb4,0x37,0x14,0x17, + 0x33,0x18,0x3f,0x4c,0x83,0x7f,0x97,0x93,0x66,0x5b, + 0x98,0x93,0x65,0x5c,0x97,0x04,0x46,0x94,0xa9,0xbe, + 0x22,0x25,0x3d,0x10,0x2a,0xc4,0xcd,0xfd,0x36,0x02, + 0xca,0x01,0x08,0xb7,0xc0,0xfd,0xa5,0x02,0xca,0x01, + 0x08,0xbd,0xd6,0xfd,0xc1,0x04,0x46,0x00,0x00,0x00, + 0x00,0x01,0x00,0x86,0x00,0x00,0x03,0x1d,0x04,0x5b, + 0x00,0x13,0x00,0x00,0x01,0x17,0x33,0x3e,0x01,0x33, + 0x32,0x16,0x15,0x11,0x23,0x11,0x10,0x23,0x22,0x06, + 0x19,0x01,0x23,0x11,0x01,0x01,0x10,0x0c,0x22,0x82, + 0x4f,0x88,0x85,0x98,0x93,0x7a,0x5b,0x97,0x04,0x46, + 0x94,0x50,0x59,0xb7,0xbe,0xfd,0x1a,0x02,0xd0,0x01, + 0x06,0xdb,0xfe,0xf5,0xfe,0x10,0x04,0x46,0x00,0x02, + 0x00,0x57,0xff,0xec,0x03,0x30,0x04,0x5b,0x00,0x07, + 0x00,0x0f,0x00,0x00,0x1a,0x01,0x20,0x12,0x10,0x02, + 0x20,0x02,0x01,0x22,0x06,0x10,0x16,0x33,0x32,0x10, + 0x57,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01, + 0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x03,0x36,0x01,0x25, + 0xfe,0xd3,0xfd,0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf, + 0xd4,0xfe,0x4c,0xd9,0x03,0x61,0x00,0x02,0x00,0x86, + 0xfe,0x14,0x03,0x4e,0x04,0x58,0x00,0x12,0x00,0x1c, + 0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x23,0x22,0x26, + 0x27,0x23,0x16,0x17,0x11,0x23,0x11,0x33,0x17,0x33, + 0x36,0x03,0x14,0x16,0x32,0x36,0x10,0x26,0x22,0x06, + 0x07,0x02,0x18,0x97,0x9f,0xa3,0x97,0x4f,0x7f,0x27, + 0x0b,0x09,0x01,0x98,0x78,0x16,0x0a,0x51,0x52,0x66, + 0xcf,0x60,0x5d,0xd3,0x64,0x01,0x04,0x58,0xfe,0xdb, + 0xfd,0xe3,0xfe,0xd6,0x53,0x4f,0x67,0x1f,0xfe,0x0c, + 0x06,0x32,0x94,0xa6,0xfd,0xd2,0xe3,0xd6,0xd7,0x01, + 0xb9,0xd3,0xbd,0xcd,0x00,0x00,0x00,0x02,0x00,0x57, + 0xfe,0x14,0x03,0x1f,0x04,0x57,0x00,0x12,0x00,0x1c, + 0x00,0x00,0x25,0x06,0x20,0x02,0x10,0x12,0x33,0x32, + 0x16,0x17,0x33,0x36,0x37,0x33,0x11,0x23,0x11,0x34, + 0x37,0x03,0x35,0x34,0x26,0x22,0x06,0x10,0x16,0x32, + 0x36,0x02,0x89,0x54,0xfe,0xc7,0xa5,0xa5,0x94,0x52, + 0x78,0x2b,0x0a,0x0c,0x07,0x7d,0x97,0x0a,0x0b,0x66, + 0xd0,0x5d,0x5f,0xcb,0x69,0x99,0xad,0x01,0x1f,0x02, + 0x2a,0x01,0x22,0x4c,0x55,0x60,0x30,0xf9,0xce,0x01, + 0xd5,0x3e,0x72,0x01,0x5a,0x2d,0xe1,0xd2,0xdb,0xfe, + 0x45,0xce,0xc4,0x00,0x00,0x00,0x00,0x01,0x00,0x86, + 0x00,0x00,0x02,0x4c,0x04,0x5c,0x00,0x0f,0x00,0x00, + 0x00,0x36,0x32,0x17,0x07,0x26,0x23,0x22,0x06,0x15, + 0x11,0x23,0x11,0x33,0x17,0x33,0x01,0x43,0x67,0x76, + 0x2c,0x19,0x24,0x26,0x57,0x74,0x98,0x7d,0x11,0x07, + 0x03,0xf8,0x64,0x0f,0x95,0x0e,0xde,0xaa,0xfd,0xc2, + 0x04,0x47,0xb9,0x00,0x00,0x00,0x00,0x01,0x00,0x46, + 0xff,0xec,0x02,0x69,0x04,0x5c,0x00,0x25,0x00,0x00, + 0x36,0x16,0x32,0x36,0x35,0x34,0x27,0x2e,0x03,0x27, + 0x26,0x35,0x34,0x37,0x36,0x20,0x17,0x07,0x26,0x22, + 0x06,0x15,0x14,0x1f,0x01,0x1e,0x02,0x17,0x16,0x15, + 0x14,0x06,0x20,0x27,0x35,0x68,0x8b,0x8f,0x58,0x18, + 0x07,0x2e,0x14,0x7e,0x3b,0x7a,0x55,0x57,0x01,0x0f, + 0x68,0x3e,0x5b,0xa0,0x55,0x3c,0x82,0x2b,0x33,0x3c, + 0x10,0x26,0x9f,0xfe,0xd6,0x5a,0xa2,0x2d,0x58,0x42, + 0x32,0x31,0x0f,0x2b,0x0f,0x5a,0x2f,0x61,0x9c,0x7d, + 0x4f,0x4f,0x44,0x76,0x38,0x54,0x44,0x58,0x2e,0x61, + 0x20,0x2a,0x40,0x1f,0x48,0x5b,0x91,0x92,0x3e,0x97, + 0x00,0x00,0x00,0x01,0x00,0x27,0xff,0xec,0x01,0xe7, + 0x05,0x42,0x00,0x14,0x00,0x00,0x01,0x33,0x15,0x23, + 0x11,0x14,0x16,0x32,0x37,0x15,0x06,0x23,0x22,0x26, + 0x35,0x11,0x23,0x35,0x3f,0x01,0x33,0x01,0x25,0xb6, + 0xb6,0x2e,0x6b,0x29,0x33,0x59,0x74,0x5a,0x66,0x6e, + 0x2c,0x64,0x04,0x46,0x7e,0xfd,0x4d,0x59,0x4b,0x11, + 0x7a,0x1c,0xb0,0xc0,0x02,0x6c,0x4d,0x32,0xfb,0x00, + 0x00,0x01,0x00,0x80,0xff,0xec,0x03,0x17,0x04,0x46, + 0x00,0x15,0x00,0x00,0x21,0x23,0x26,0x27,0x23,0x0e, + 0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16, + 0x33,0x32,0x36,0x35,0x11,0x33,0x03,0x17,0x7b,0x08, + 0x0b,0x0a,0x24,0x80,0x4e,0x89,0x84,0x98,0x46,0x4c, + 0x6e,0x68,0x97,0x38,0x5d,0x50,0x59,0xc1,0xcf,0x02, + 0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f,0x00, + 0x00,0x00,0x00,0x01,0x00,0x06,0x00,0x00,0x02,0xdc, + 0x04,0x46,0x00,0x0c,0x00,0x00,0x21,0x23,0x01,0x33, + 0x16,0x17,0x12,0x13,0x33,0x3e,0x01,0x13,0x33,0x01, + 0xca,0xb8,0xfe,0xf4,0x9c,0x10,0x30,0x5c,0x2f,0x07, + 0x0a,0x1b,0xa7,0x9c,0x04,0x46,0x46,0xce,0xfe,0x7c, + 0xfe,0xea,0x4c,0x8d,0x02,0xd5,0x00,0x00,0x00,0x01, + 0x00,0x14,0x00,0x00,0x04,0xc4,0x04,0x46,0x00,0x1a, + 0x00,0x00,0x01,0x06,0x03,0x23,0x03,0x33,0x1a,0x01, + 0x17,0x33,0x36,0x37,0x13,0x33,0x13,0x16,0x17,0x33, + 0x36,0x13,0x33,0x06,0x03,0x23,0x03,0x26,0x27,0x02, + 0x6a,0x1a,0x99,0xbc,0xe7,0x97,0x61,0x3e,0x12,0x06, + 0x14,0x1e,0x7e,0xb4,0x7f,0x11,0x20,0x06,0x07,0xad, + 0x94,0x1c,0xd1,0xbd,0x90,0x14,0x09,0x03,0xa8,0xa9, + 0xfd,0x01,0x04,0x46,0xfe,0x2a,0xfe,0xa2,0x7e,0xb0, + 0x92,0x02,0x70,0xfd,0x8e,0x4a,0xf6,0x5d,0x03,0x55, + 0x82,0xfc,0x3c,0x02,0xeb,0x7e,0x3f,0x00,0x00,0x01, + 0x00,0x1c,0x00,0x00,0x02,0xce,0x04,0x47,0x00,0x0b, + 0x00,0x00,0x09,0x01,0x23,0x0b,0x01,0x23,0x01,0x03, + 0x33,0x1b,0x01,0x33,0x01,0xc3,0x01,0x0b,0x9f,0xbc, + 0xba,0x9d,0x01,0x0d,0xfb,0xa0,0xab,0xac,0x9d,0x02, + 0x2d,0xfd,0xd3,0x01,0xb0,0xfe,0x50,0x02,0x35,0x02, + 0x12,0xfe,0x69,0x01,0x97,0x00,0x00,0x00,0x00,0x01, + 0x00,0x06,0xfe,0x14,0x02,0xdc,0x04,0x46,0x00,0x1a, + 0x00,0x00,0x00,0x06,0x22,0x27,0x35,0x16,0x33,0x32, + 0x36,0x3f,0x01,0x01,0x33,0x13,0x16,0x17,0x33,0x36, + 0x37,0x12,0x37,0x33,0x02,0x03,0x0e,0x02,0x01,0x06, + 0x59,0x6b,0x36,0x2a,0x29,0x3e,0x4c,0x19,0x27,0xfe, + 0xdd,0x9c,0xa0,0x1c,0x16,0x07,0x15,0x18,0x6c,0x2b, + 0x9d,0x86,0x91,0x1c,0x29,0x3b,0xfe,0x40,0x2c,0x11, + 0x84,0x0e,0x61,0x6b,0x95,0x04,0x4a,0xfd,0x6b,0x73, + 0x93,0x8a,0x75,0x01,0xda,0xc2,0xfd,0xf4,0xfd,0xc0, + 0x6a,0x83,0x86,0x00,0x00,0x01,0x00,0x35,0x00,0x00, + 0x02,0x2f,0x04,0x47,0x00,0x09,0x00,0x00,0x25,0x15, + 0x21,0x35,0x01,0x21,0x35,0x21,0x15,0x01,0x02,0x2f, + 0xfe,0x06,0x01,0x47,0xfe,0xce,0x01,0xd6,0xfe,0xbd, + 0x7f,0x7f,0x6b,0x03,0x5c,0x80,0x72,0xfc,0xaa,0x00, + 0x00,0x00,0x00,0x01,0x00,0x51,0xfe,0xbc,0x02,0x90, + 0x05,0xb6,0x00,0x1f,0x00,0x00,0x01,0x11,0x0e,0x01, + 0x07,0x15,0x1e,0x01,0x15,0x11,0x14,0x16,0x17,0x15, + 0x2e,0x01,0x27,0x11,0x34,0x26,0x23,0x35,0x32,0x36, + 0x35,0x11,0x34,0x36,0x37,0x15,0x0e,0x01,0x01,0xc4, + 0x01,0x63,0x6b,0x6b,0x64,0x5a,0x72,0xb3,0xab,0x02, + 0x65,0x7a,0x78,0x67,0xaf,0xb1,0x6a,0x62,0x04,0x6d, + 0xfe,0xc8,0x6f,0x75,0x14,0x09,0x13,0x75,0x6c,0xfe, + 0xde,0x78,0x6d,0x01,0x7c,0x04,0x98,0x98,0x01,0x40, + 0x6f,0x5e,0x78,0x56,0x72,0x01,0x46,0x98,0x97,0x04, + 0x7c,0x01,0x63,0x00,0x00,0x00,0x00,0x01,0x01,0x7b, + 0xfe,0x1b,0x01,0xff,0x06,0x12,0x00,0x03,0x00,0x00, + 0x01,0x23,0x11,0x33,0x01,0xff,0x84,0x84,0xfe,0x1b, + 0x07,0xf7,0x00,0x00,0x00,0x01,0x00,0x50,0xfe,0xbc, + 0x02,0x90,0x05,0xb6,0x00,0x1d,0x00,0x00,0x01,0x11, + 0x14,0x16,0x33,0x15,0x22,0x06,0x15,0x11,0x10,0x05, + 0x35,0x3e,0x01,0x35,0x11,0x34,0x36,0x37,0x35,0x2e, + 0x01,0x35,0x11,0x34,0x26,0x27,0x35,0x04,0x01,0xb1, + 0x65,0x7a,0x73,0x6c,0xfe,0x9f,0x6c,0x62,0x63,0x6b, + 0x6a,0x64,0x62,0x6c,0x01,0x61,0x04,0x83,0xfe,0xba, + 0x6e,0x5a,0x78,0x55,0x78,0xfe,0xc0,0xfe,0xd4,0x08, + 0x7c,0x01,0x65,0x67,0x01,0x3a,0x6d,0x74,0x14,0x09, + 0x13,0x76,0x6f,0x01,0x38,0x68,0x64,0x01,0x7c,0x09, + 0x00,0x01,0x00,0x70,0x02,0x5b,0x03,0x14,0x03,0x4f, + 0x00,0x1c,0x00,0x00,0x01,0x22,0x27,0x2e,0x01,0x27, + 0x22,0x07,0x06,0x07,0x35,0x3e,0x01,0x33,0x1e,0x07, + 0x17,0x16,0x33,0x32,0x37,0x15,0x06,0x02,0x57,0x3c, + 0x41,0x0b,0x86,0x26,0x4e,0x57,0x0c,0x02,0x1c,0x66, + 0x29,0x22,0x26,0x0e,0x1b,0x0b,0x1d,0x08,0x20,0x03, + 0x4a,0x34,0x5d,0x5a,0x4d,0x02,0x5b,0x1c,0x04,0x43, + 0x09,0x45,0x0a,0x01,0x8d,0x19,0x2b,0x03,0x0d,0x04, + 0x0c,0x04,0x0e,0x05,0x0f,0x02,0x27,0x76,0x8a,0x6a, + 0x00,0x00,0x00,0x02,0x00,0x87,0xfe,0x81,0x01,0x5c, + 0x04,0x49,0x00,0x08,0x00,0x0c,0x00,0x00,0x12,0x36, + 0x32,0x16,0x14,0x06,0x23,0x22,0x35,0x13,0x23,0x13, + 0x33,0x87,0x37,0x65,0x39,0x39,0x32,0x6a,0xc9,0xbf, + 0x29,0x6d,0x04,0x09,0x40,0x3f,0x7e,0x3e,0x7e,0xfa, + 0xb5,0x04,0x24,0x00,0x00,0x01,0x00,0xa1,0xff,0xec, + 0x02,0xc7,0x05,0xc9,0x00,0x17,0x00,0x00,0x01,0x07, + 0x26,0x23,0x22,0x06,0x15,0x10,0x33,0x32,0x37,0x15, + 0x06,0x07,0x15,0x23,0x35,0x24,0x10,0x25,0x35,0x33, + 0x15,0x16,0x02,0xc7,0x32,0x4e,0x35,0x6e,0x66,0xd3, + 0x51,0x5a,0x3a,0x5c,0x6e,0xfe,0xe9,0x01,0x17,0x6e, + 0x5c,0x04,0xf5,0x7e,0x24,0xd9,0xd9,0xfe,0x54,0x2d, + 0x86,0x23,0x0b,0xca,0xd0,0x39,0x03,0xed,0x3b,0xac, + 0xa5,0x09,0x00,0x00,0x00,0x01,0x00,0x4f,0x00,0x00, + 0x03,0x17,0x05,0xcb,0x00,0x1e,0x00,0x00,0x13,0x11, + 0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x06, + 0x15,0x11,0x33,0x15,0x23,0x15,0x14,0x07,0x06,0x07, + 0x21,0x15,0x21,0x35,0x36,0x3d,0x01,0x23,0x35,0xec, + 0x8b,0xa1,0x8d,0x6e,0x41,0x55,0x61,0x4f,0x47,0xf7, + 0xf7,0x0b,0x0b,0x67,0x02,0x0e,0xfd,0x3f,0x96,0x9d, + 0x03,0x1c,0x01,0x06,0xda,0xcf,0x53,0x79,0x43,0x75, + 0x7f,0xfe,0xce,0x7d,0x8c,0x4a,0x4a,0xa7,0x4a,0x8e, + 0x82,0x44,0xe4,0xf5,0x7d,0x00,0x00,0x02,0x00,0x71, + 0x01,0x12,0x03,0xf4,0x04,0x93,0x00,0x1a,0x00,0x22, + 0x00,0x00,0x01,0x16,0x10,0x07,0x16,0x17,0x07,0x27, + 0x06,0x20,0x27,0x07,0x27,0x37,0x26,0x10,0x37,0x27, + 0x37,0x17,0x36,0x20,0x17,0x36,0x37,0x17,0x0e,0x01, + 0x26,0x22,0x06,0x14,0x16,0x32,0x36,0x03,0x6e,0x4e, + 0x4e,0x42,0x43,0x54,0x86,0x68,0xfe,0xfb,0x64,0x82, + 0x53,0x83,0x4c,0x4c,0x85,0x53,0x85,0x69,0x01,0x01, + 0x66,0x43,0x42,0x56,0x2c,0x7d,0xa2,0xe6,0xa5,0xa1, + 0xe7,0xa5,0x03,0xbc,0x68,0xfe,0xfb,0x66,0x43,0x42, + 0x52,0x83,0x4b,0x4d,0x83,0x54,0x82,0x67,0x00,0xff, + 0x6a,0x85,0x54,0x86,0x4f,0x4e,0x42,0x43,0x52,0x2d, + 0xd3,0xa8,0xa1,0xe9,0xa1,0xa2,0x00,0x01,0x00,0x49, + 0x00,0x00,0x03,0x13,0x05,0xb6,0x00,0x1b,0x00,0x00, + 0x01,0x15,0x23,0x15,0x33,0x15,0x23,0x11,0x23,0x11, + 0x23,0x35,0x33,0x35,0x22,0x35,0x23,0x35,0x33,0x26, + 0x02,0x27,0x33,0x1b,0x01,0x33,0x02,0x03,0x02,0xe0, + 0xe4,0xe4,0xe4,0x9d,0xe1,0xe1,0x01,0xe0,0xbd,0x28, + 0xa2,0x28,0x9e,0xc8,0xc4,0xa0,0x52,0xa2,0x02,0xa1, + 0x6f,0xb5,0x6f,0xfe,0xf2,0x01,0x0e,0x6f,0xb4,0x01, + 0x6f,0x83,0x02,0x0e,0x84,0xfd,0x32,0x02,0xce,0xfe, + 0xf9,0xfd,0xf2,0x00,0x00,0x02,0x01,0x7b,0xfe,0x1b, + 0x01,0xff,0x06,0x12,0x00,0x03,0x00,0x07,0x00,0x00, + 0x01,0x23,0x11,0x33,0x11,0x23,0x11,0x33,0x01,0xff, + 0x84,0x84,0x84,0x84,0x02,0xf1,0x03,0x21,0xf8,0x09, + 0x03,0x22,0x00,0x00,0x00,0x02,0x00,0x52,0x00,0x36, + 0x02,0x93,0x06,0x14,0x00,0x30,0x00,0x3b,0x00,0x00, + 0x01,0x33,0x1e,0x01,0x17,0x07,0x26,0x22,0x06,0x15, + 0x14,0x17,0x16,0x1f,0x01,0x1e,0x01,0x14,0x06,0x07, + 0x1e,0x01,0x15,0x14,0x06,0x20,0x27,0x35,0x16,0x33, + 0x32,0x36,0x35,0x34,0x2e,0x04,0x35,0x34,0x36,0x37, + 0x26,0x35,0x34,0x3f,0x01,0x36,0x13,0x34,0x26,0x27, + 0x0e,0x01,0x14,0x16,0x1f,0x01,0x36,0x01,0x8f,0x15, + 0x3f,0x5f,0x42,0x2f,0x67,0xa8,0x57,0x17,0x11,0x7c, + 0x3d,0x6b,0x57,0x41,0x38,0x3e,0x38,0xab,0xfe,0xd0, + 0x62,0x69,0x8d,0x56,0x66,0x40,0xa9,0x58,0x4e,0x20, + 0x4b,0x43,0x7e,0x52,0x0e,0x50,0xf5,0x4e,0x79,0x33, + 0x37,0x4e,0x62,0x36,0x4b,0x06,0x14,0x01,0x1a,0x20, + 0x6f,0x38,0x4c,0x41,0x2d,0x1b,0x2e,0x4a,0x25,0x41, + 0x78,0xa9,0x82,0x23,0x2f,0x65,0x42,0x82,0x9b,0x38, + 0x83,0x4a,0x5b,0x47,0x31,0x54,0x63,0x3b,0x4c,0x52, + 0x34,0x4f,0x7a,0x21,0x57,0x8d,0x77,0x49,0x09,0x3f, + 0xfc,0xf5,0x45,0x5f,0x40,0x13,0x54,0x74,0x59,0x34, + 0x1d,0x38,0x00,0x00,0x00,0x02,0x01,0x36,0x05,0x0f, + 0x03,0x31,0x05,0xd2,0x00,0x07,0x00,0x0f,0x00,0x00, + 0x00,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x01,0x66,0x4c,0x2f, + 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, + 0x05,0xd2,0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f, + 0x33,0x34,0x5d,0x00,0x00,0x03,0x00,0x61,0xff,0xec, + 0x06,0x41,0x05,0xcb,0x00,0x10,0x00,0x21,0x00,0x35, + 0x00,0x00,0x01,0x32,0x04,0x12,0x15,0x14,0x02,0x06, + 0x04,0x20,0x24,0x26,0x02,0x10,0x12,0x36,0x24,0x04, + 0x26,0x20,0x0e,0x02,0x15,0x14,0x12,0x04,0x33,0x32, + 0x3e,0x02,0x10,0x26,0x01,0x22,0x26,0x10,0x36,0x33, + 0x32,0x17,0x07,0x26,0x23,0x22,0x06,0x10,0x16,0x33, + 0x32,0x37,0x15,0x06,0x03,0x51,0xcd,0x01,0x5c,0xc7, + 0x79,0xca,0xfe,0xea,0xfe,0xc8,0xfe,0xe4,0xc3,0x70, + 0x7c,0xcd,0x01,0x14,0x02,0x02,0xee,0xfe,0xfa,0xf1, + 0xab,0x64,0xb2,0x01,0x28,0xab,0x85,0xf1,0xab,0x64, + 0x68,0xfe,0x01,0xc1,0xd0,0xde,0xbd,0x80,0x79,0x30, + 0x65,0x60,0x80,0x91,0x83,0x89,0x65,0x6e,0x6b,0x05, + 0xcb,0xcf,0xfe,0xa6,0xc7,0x9a,0xfe,0xe9,0xc8,0x76, + 0x7e,0xd0,0x01,0x11,0x01,0x2c,0x01,0x1a,0xc6,0x74, + 0xd2,0x67,0x69,0xb0,0xed,0x7f,0xb3,0xfe,0xd6,0xa8, + 0x69,0xaf,0xed,0x01,0x03,0xef,0xfc,0xc5,0xec,0x01, + 0xab,0xf9,0x3b,0x6d,0x31,0xb3,0xfe,0xb8,0xa7,0x30, + 0x77,0x30,0x00,0x00,0x00,0x02,0x00,0x39,0x03,0x15, + 0x01,0xf7,0x05,0xc7,0x00,0x17,0x00,0x21,0x00,0x00, + 0x01,0x34,0x26,0x22,0x07,0x26,0x27,0x36,0x32,0x16, + 0x15,0x11,0x23,0x26,0x27,0x0e,0x01,0x23,0x22,0x26, + 0x34,0x36,0x3f,0x01,0x07,0x14,0x33,0x32,0x36,0x3d, + 0x01,0x07,0x0e,0x01,0x01,0x89,0x32,0x77,0x4f,0x1e, + 0x07,0x61,0xcc,0x5e,0x4d,0x0c,0x07,0x2c,0x55,0x36, + 0x4c,0x5b,0x77,0x80,0x59,0xde,0x55,0x41,0x48,0x42, + 0x54,0x48,0x04,0xe2,0x46,0x3f,0x2d,0x45,0x10,0x38, + 0x6f,0x73,0xfe,0x3c,0x3c,0x1f,0x34,0x33,0x67,0xbd, + 0x67,0x09,0x06,0xd7,0x66,0x60,0x55,0x39,0x07,0x09, + 0x39,0x00,0x00,0x02,0x00,0x4f,0x00,0x83,0x03,0x67, + 0x03,0xaf,0x00,0x06,0x00,0x0d,0x00,0x00,0x01,0x03, + 0x13,0x07,0x01,0x35,0x01,0x05,0x03,0x13,0x07,0x01, + 0x35,0x01,0x01,0xdf,0xdb,0xdb,0x6a,0xfe,0xda,0x01, + 0x26,0x01,0xf2,0xda,0xda,0x6a,0xfe,0xda,0x01,0x26, + 0x03,0x73,0xfe,0xa7,0xfe,0xa6,0x3d,0x01,0x89,0x1a, + 0x01,0x89,0x3c,0xfe,0xa7,0xfe,0xa6,0x3d,0x01,0x89, + 0x1a,0x01,0x89,0x00,0x00,0x01,0x00,0x4b,0x00,0xfa, + 0x02,0xfb,0x03,0x10,0x00,0x05,0x00,0x00,0x25,0x23, + 0x11,0x21,0x35,0x21,0x02,0xfb,0x78,0xfd,0xc8,0x02, + 0xb0,0xfa,0x01,0x9b,0x7b,0x00,0x00,0x01,0x00,0x3b, + 0x01,0xdf,0x01,0xf4,0x02,0x70,0x00,0x03,0x00,0x00, + 0x01,0x21,0x35,0x21,0x01,0xf4,0xfe,0x47,0x01,0xb9, + 0x01,0xdf,0x91,0x00,0x00,0x04,0x00,0x61,0xff,0xec, + 0x06,0x41,0x05,0xcb,0x00,0x10,0x00,0x21,0x00,0x2f, + 0x00,0x3a,0x00,0x00,0x01,0x32,0x04,0x12,0x15,0x14, + 0x02,0x06,0x04,0x20,0x24,0x26,0x02,0x10,0x12,0x36, + 0x24,0x04,0x26,0x20,0x0e,0x02,0x15,0x14,0x12,0x04, + 0x33,0x32,0x3e,0x02,0x10,0x26,0x25,0x33,0x20,0x11, + 0x14,0x07,0x17,0x16,0x17,0x23,0x03,0x23,0x11,0x23, + 0x13,0x11,0x33,0x32,0x37,0x3e,0x01,0x35,0x34,0x26, + 0x23,0x03,0x51,0xcd,0x01,0x5c,0xc7,0x79,0xca,0xfe, + 0xea,0xfe,0xc8,0xfe,0xe4,0xc3,0x70,0x7c,0xcd,0x01, + 0x14,0x02,0x02,0xee,0xfe,0xfa,0xf1,0xab,0x64,0xb2, + 0x01,0x28,0xab,0x85,0xf1,0xab,0x64,0x68,0xfc,0xdc, + 0xe3,0x01,0x3b,0x93,0x21,0x3c,0x76,0x9b,0xb1,0x87, + 0x8b,0x8b,0x32,0x2c,0x1b,0x43,0x4a,0x65,0x70,0x05, + 0xcb,0xcf,0xfe,0xa6,0xc7,0x9a,0xfe,0xe9,0xc8,0x76, + 0x7e,0xd0,0x01,0x11,0x01,0x2c,0x01,0x1a,0xc6,0x74, + 0xd2,0x67,0x69,0xb0,0xed,0x7f,0xb3,0xfe,0xd6,0xa8, + 0x69,0xaf,0xed,0x01,0x03,0xef,0x4a,0xfe,0xfb,0xae, + 0x40,0x3d,0x6e,0xdc,0x01,0x62,0xfe,0x9e,0x03,0x0b, + 0xfe,0xc1,0x0a,0x05,0x4f,0x46,0x58,0x43,0x00,0x00, + 0x00,0x01,0xff,0xf9,0x06,0x14,0x03,0x8d,0x06,0x89, + 0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21,0x03,0x8d, + 0xfc,0x6c,0x03,0x94,0x06,0x14,0x75,0x00,0x00,0x02, + 0x00,0x76,0x03,0x5b,0x02,0xe7,0x05,0xcb,0x00,0x08, + 0x00,0x11,0x00,0x00,0x13,0x36,0x20,0x16,0x10,0x06, + 0x20,0x26,0x10,0x25,0x26,0x22,0x06,0x14,0x16,0x32, + 0x36,0x34,0xd0,0x5c,0x01,0x04,0xb7,0xb4,0xfe,0xf5, + 0xb2,0x01,0xc2,0x37,0xa5,0x6f,0x72,0x9f,0x72,0x05, + 0x71,0x5a,0xb1,0xfe,0xf1,0xb0,0xaf,0x01,0x0d,0x09, + 0x3a,0x76,0xa6,0x72,0x72,0xaa,0x00,0x02,0x00,0x4b, + 0x00,0x00,0x03,0x09,0x04,0xae,0x00,0x0b,0x00,0x0f, + 0x00,0x00,0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21, + 0x35,0x21,0x11,0x33,0x01,0x21,0x35,0x21,0x01,0xe6, + 0x01,0x23,0xfe,0xdd,0x78,0xfe,0xdd,0x01,0x23,0x78, + 0x01,0x23,0xfd,0x42,0x02,0xbe,0x03,0x10,0x7b,0xfe, + 0x65,0x01,0x9b,0x7b,0x01,0x9e,0xfb,0x52,0x7b,0x00, + 0x00,0x01,0x00,0x32,0x02,0x4a,0x02,0x29,0x05,0xcb, + 0x00,0x1a,0x00,0x00,0x13,0x35,0x36,0x12,0x36,0x35, + 0x34,0x26,0x23,0x22,0x07,0x26,0x27,0x36,0x33,0x32, + 0x16,0x15,0x14,0x07,0x0e,0x03,0x07,0x21,0x15,0x32, + 0x3d,0xea,0x3f,0x44,0x38,0x54,0x4f,0x30,0x17,0x69, + 0x8a,0x72,0x81,0x39,0x1f,0x77,0x21,0x53,0x0f,0x01, + 0x63,0x02,0x4a,0x68,0x4a,0x01,0x18,0x74,0x4f,0x38, + 0x47,0x54,0x3a,0x1d,0x72,0x7f,0x6f,0x6b,0x58,0x30, + 0x90,0x28,0x62,0x12,0x74,0x00,0x00,0x00,0x00,0x01, + 0x00,0x32,0x02,0x39,0x02,0x2b,0x05,0xcb,0x00,0x22, + 0x00,0x00,0x13,0x33,0x32,0x36,0x34,0x26,0x23,0x22, + 0x07,0x26,0x27,0x36,0x33,0x32,0x16,0x15,0x14,0x06, + 0x07,0x15,0x16,0x15,0x14,0x06,0x22,0x27,0x35,0x16, + 0x33,0x32,0x36,0x34,0x26,0x2b,0x01,0xa9,0x47,0x51, + 0x57,0x45,0x3f,0x52,0x50,0x16,0x2a,0x6c,0x82,0x6e, + 0x81,0x49,0x44,0xa9,0x9b,0xfb,0x5d,0x60,0x71,0x53, + 0x52,0x5f,0x5d,0x49,0x04,0x44,0x52,0x85,0x41,0x4a, + 0x1e,0x3c,0x5f,0x7c,0x6a,0x49,0x67,0x19,0x0a,0x2c, + 0xb0,0x72,0x8b,0x2f,0x7a,0x3b,0x4d,0x96,0x52,0x00, + 0x00,0x00,0x00,0x01,0x01,0x89,0x04,0xd9,0x02,0xfe, + 0x06,0x21,0x00,0x09,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x23,0x35,0x3e,0x01,0x37,0x02,0xfe,0x1d,0xb1, + 0x4a,0x5d,0x34,0x67,0x1e,0x06,0x21,0x13,0x37,0xc1, + 0x3d,0x16,0x45,0xab,0x42,0x00,0x00,0x01,0x00,0x82, + 0xfe,0x14,0x03,0x1a,0x04,0x46,0x00,0x17,0x00,0x00, + 0x21,0x23,0x26,0x27,0x23,0x0e,0x01,0x22,0x26,0x27, + 0x16,0x15,0x11,0x23,0x11,0x33,0x11,0x10,0x33,0x32, + 0x36,0x35,0x11,0x33,0x03,0x1a,0x7c,0x0b,0x08,0x0a, + 0x21,0x72,0x7b,0x39,0x28,0x09,0x99,0x99,0x92,0x6f, + 0x66,0x98,0x5d,0x38,0x51,0x58,0x22,0x32,0x8c,0x8a, + 0xfe,0xea,0x06,0x32,0xfd,0x2e,0xfe,0xfd,0xc0,0xd6, + 0x02,0x3f,0x00,0x01,0x00,0x79,0xfe,0xfc,0x03,0x3b, + 0x06,0x14,0x00,0x0e,0x00,0x00,0x01,0x23,0x11,0x23, + 0x11,0x23,0x11,0x06,0x23,0x22,0x26,0x10,0x12,0x33, + 0x21,0x03,0x3b,0x71,0x97,0x72,0x23,0x2e,0x7f,0x78, + 0x8c,0x94,0x01,0xa2,0xfe,0xfc,0x06,0x98,0xf9,0x68, + 0x03,0x33,0x12,0xf6,0x02,0x02,0x00,0xff,0x00,0x01, + 0x00,0x7e,0x02,0x54,0x01,0x53,0x03,0x4f,0x00,0x06, + 0x00,0x00,0x13,0x22,0x34,0x32,0x15,0x14,0x06,0xe8, + 0x6a,0xd5,0x39,0x02,0x54,0xfb,0x7d,0x3f,0x3f,0x00, + 0x00,0x01,0x00,0x1f,0xfe,0x14,0x01,0x81,0x00,0x00, + 0x00,0x10,0x00,0x00,0x01,0x14,0x06,0x23,0x22,0x27, + 0x35,0x16,0x32,0x36,0x35,0x34,0x27,0x37,0x33,0x07, + 0x16,0x01,0x81,0x83,0x7a,0x40,0x25,0x2d,0x71,0x41, + 0xa3,0x4b,0x6b,0x2e,0x9e,0xfe,0xe7,0x66,0x6d,0x0e, + 0x67,0x0d,0x36,0x31,0x64,0x1a,0x9f,0x66,0x27,0x00, + 0x00,0x01,0x00,0x4c,0x02,0x4a,0x01,0xae,0x05,0xb6, + 0x00,0x0a,0x00,0x00,0x01,0x23,0x11,0x34,0x37,0x0e, + 0x01,0x07,0x27,0x37,0x33,0x01,0xae,0x7a,0x07,0x20, + 0x3c,0x54,0x3f,0xf9,0x69,0x02,0x4a,0x01,0xe1,0xb1, + 0x58,0x20,0x30,0x3f,0x52,0xbf,0x00,0x00,0x00,0x02, + 0x00,0x43,0x03,0x15,0x02,0x3e,0x05,0xc7,0x00,0x07, + 0x00,0x10,0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06, + 0x22,0x26,0x13,0x22,0x15,0x14,0x16,0x32,0x36,0x10, + 0x26,0x43,0x85,0xf0,0x86,0x84,0xf5,0x82,0xfd,0x88, + 0x41,0x90,0x40,0x42,0x05,0x12,0xb5,0xb2,0xfe,0xb3, + 0xb3,0xb4,0x01,0x99,0xf3,0x80,0x76,0x75,0x01,0x00, + 0x74,0x00,0x00,0x02,0x00,0x4f,0x00,0x83,0x03,0x67, + 0x03,0xaf,0x00,0x06,0x00,0x0d,0x00,0x00,0x01,0x15, + 0x01,0x27,0x13,0x03,0x37,0x01,0x15,0x01,0x27,0x13, + 0x03,0x37,0x01,0xdf,0xfe,0xd9,0x69,0xda,0xda,0x69, + 0x02,0xaf,0xfe,0xda,0x6a,0xdb,0xdb,0x6a,0x02,0x26, + 0x1a,0xfe,0x77,0x3d,0x01,0x5a,0x01,0x59,0x3c,0xfe, + 0x77,0x1a,0xfe,0x77,0x3d,0x01,0x5a,0x01,0x59,0x3c, + 0x00,0x04,0x00,0x36,0x00,0x00,0x05,0x52,0x05,0xb6, + 0x00,0x0c,0x00,0x10,0x00,0x1b,0x00,0x21,0x00,0x00, + 0x01,0x23,0x11,0x36,0x37,0x30,0x07,0x0e,0x01,0x07, + 0x27,0x37,0x33,0x03,0x23,0x01,0x33,0x09,0x01,0x33, + 0x11,0x33,0x15,0x23,0x15,0x23,0x35,0x21,0x25,0x11, + 0x36,0x37,0x06,0x03,0x01,0x98,0x7b,0x06,0x01,0x18, + 0x13,0x70,0x14,0x3f,0xf8,0x6a,0x04,0x80,0x02,0xf7, + 0x81,0xfe,0x92,0x01,0x57,0x75,0x68,0x68,0x7a,0xfe, + 0xae,0x01,0x52,0x02,0x02,0x33,0xab,0x02,0x4a,0x01, + 0xe1,0xf5,0x14,0x18,0x13,0x54,0x10,0x52,0xbf,0xfa, + 0x4a,0x05,0xb6,0xfb,0x67,0x02,0x56,0xfd,0xba,0x6c, + 0xc0,0xc0,0x6c,0x01,0x09,0x72,0x29,0x76,0xfe,0xd2, + 0x00,0x03,0x00,0x36,0x00,0x00,0x05,0x72,0x05,0xb6, + 0x00,0x0a,0x00,0x0e,0x00,0x29,0x00,0x00,0x01,0x23, + 0x11,0x34,0x37,0x0e,0x01,0x07,0x27,0x37,0x33,0x03, + 0x23,0x01,0x33,0x01,0x35,0x36,0x12,0x36,0x35,0x34, + 0x26,0x23,0x22,0x07,0x26,0x27,0x36,0x33,0x32,0x16, + 0x15,0x14,0x07,0x0e,0x03,0x07,0x21,0x15,0x01,0x98, + 0x7a,0x07,0x20,0x3c,0x54,0x3f,0xf9,0x69,0x13,0x81, + 0x02,0xf7,0x81,0xfe,0xff,0x3d,0xea,0x3f,0x44,0x38, + 0x53,0x50,0x30,0x17,0x69,0x8a,0x72,0x81,0x39,0x1f, + 0x77,0x21,0x53,0x0f,0x01,0x63,0x02,0x4a,0x01,0xe1, + 0xb1,0x58,0x20,0x30,0x3f,0x52,0xbf,0xfa,0x4a,0x05, + 0xb6,0xfa,0x4b,0x68,0x4a,0x01,0x18,0x74,0x4f,0x38, + 0x47,0x54,0x3a,0x1d,0x72,0x7f,0x6f,0x6b,0x57,0x31, + 0x90,0x28,0x62,0x12,0x74,0x00,0x00,0x04,0x00,0x33, + 0x00,0x00,0x05,0x6e,0x05,0xcb,0x00,0x21,0x00,0x26, + 0x00,0x31,0x00,0x37,0x00,0x00,0x13,0x27,0x36,0x33, + 0x32,0x16,0x15,0x14,0x06,0x07,0x15,0x16,0x15,0x14, + 0x06,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x34,0x26, + 0x2b,0x01,0x35,0x33,0x32,0x36,0x34,0x26,0x23,0x22, + 0x25,0x33,0x00,0x07,0x23,0x09,0x01,0x33,0x11,0x33, + 0x15,0x23,0x15,0x23,0x35,0x21,0x25,0x11,0x36,0x37, + 0x06,0x03,0x73,0x40,0x6d,0x81,0x6f,0x81,0x4a,0x44, + 0xa9,0x9b,0xfb,0x5d,0x61,0x70,0x54,0x52,0x60,0x5d, + 0x49,0x47,0x51,0x57,0x45,0x3f,0x52,0x03,0x6f,0x81, + 0xfd,0x82,0x7a,0x80,0x01,0xff,0x01,0x57,0x75,0x68, + 0x68,0x7a,0xfe,0xae,0x01,0x52,0x02,0x02,0x33,0xab, + 0x05,0x12,0x5a,0x5f,0x7c,0x6a,0x49,0x67,0x19,0x0a, + 0x2c,0xb0,0x72,0x8b,0x2f,0x7a,0x3b,0x4d,0x95,0x53, + 0x68,0x52,0x85,0x41,0x5a,0xfb,0x34,0xea,0x01,0x1d, + 0x02,0x56,0xfd,0xba,0x6c,0xc0,0xc0,0x6c,0x01,0x09, + 0x72,0x29,0x76,0xfe,0xd2,0x00,0x00,0x00,0x00,0x02, + 0x00,0x31,0xfe,0x6b,0x02,0x65,0x04,0x49,0x00,0x07, + 0x00,0x1f,0x00,0x00,0x01,0x32,0x14,0x23,0x22,0x26, + 0x34,0x36,0x13,0x15,0x14,0x0e,0x02,0x07,0x06,0x14, + 0x16,0x32,0x37,0x17,0x06,0x20,0x26,0x35,0x34,0x3e, + 0x03,0x3d,0x01,0x01,0x78,0x6c,0x6c,0x31,0x39,0x3a, + 0x75,0x26,0x4e,0x4f,0x09,0x28,0x53,0xa6,0x64,0x3f, + 0x79,0xfe,0xde,0x99,0x19,0x3f,0x8a,0x29,0x04,0x49, + 0xfb,0x3e,0x7e,0x3f,0xfe,0x5c,0x3b,0x6d,0x71,0x80, + 0x74,0x13,0x58,0xcc,0x6c,0x40,0x75,0x55,0xb4,0xa5, + 0x51,0x6a,0x6f,0xbe,0x70,0x5a,0x2f,0x00,0x00,0x03, + 0x00,0x00,0x00,0x00,0x03,0x89,0x07,0x73,0x00,0x0a, + 0x00,0x14,0x00,0x1e,0x00,0x00,0x13,0x33,0x1e,0x01, + 0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x13,0x33,0x16, + 0x01,0x23,0x03,0x21,0x03,0x23,0x00,0x17,0x27,0x26, + 0x27,0x0e,0x03,0x07,0x21,0xa2,0xbd,0x1d,0x6b,0x31, + 0x5e,0x44,0x5a,0x59,0x21,0xc1,0xbd,0x3d,0x01,0x2c, + 0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9,0x20, + 0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d,0x07, + 0x73,0x43,0xb1,0x3d,0x17,0x38,0x60,0x61,0x3d,0xfe, + 0x56,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24,0x04,0xbc, + 0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30,0x00, + 0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x89,0x07,0x73, + 0x00,0x09,0x00,0x13,0x00,0x1d,0x00,0x00,0x01,0x15, + 0x0e,0x01,0x07,0x23,0x35,0x3e,0x01,0x37,0x03,0x33, + 0x16,0x01,0x23,0x03,0x21,0x03,0x23,0x00,0x17,0x27, + 0x26,0x27,0x0e,0x03,0x07,0x21,0x02,0xde,0x1d,0xb1, + 0x4a,0x5d,0x34,0x67,0x1e,0xbf,0xbd,0x3d,0x01,0x2c, + 0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9,0x20, + 0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d,0x07, + 0x73,0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xfe, + 0x44,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24,0x04,0xbc, + 0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30,0x00, + 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x89, + 0x07,0x73,0x00,0x0e,0x00,0x18,0x00,0x22,0x00,0x00, + 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, + 0x37,0x33,0x1e,0x01,0x17,0x05,0x33,0x16,0x01,0x23, + 0x03,0x21,0x03,0x23,0x00,0x17,0x27,0x26,0x27,0x0e, + 0x03,0x07,0x21,0x02,0xd5,0x56,0x2a,0x39,0x5a,0x86, + 0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41,0xfe,0x8e, + 0xbd,0x3d,0x01,0x2c,0x9d,0x72,0xfe,0x94,0x70,0x9e, + 0x01,0x26,0xd9,0x20,0x13,0x0b,0x10,0x2d,0x16,0x36, + 0x0b,0x01,0x2d,0x06,0x2b,0x24,0x40,0x65,0x97,0x32, + 0x15,0xbd,0x76,0x31,0xaf,0x53,0x89,0xf7,0xfb,0x40, + 0x01,0xdc,0xfe,0x24,0x04,0xbc,0xcc,0x8f,0x55,0x56, + 0x7d,0xca,0x61,0xe4,0x30,0x00,0x00,0x03,0x00,0x00, + 0x00,0x00,0x03,0x89,0x07,0x1d,0x00,0x14,0x00,0x1e, + 0x00,0x28,0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x23, + 0x22,0x07,0x23,0x3e,0x01,0x33,0x32,0x1e,0x01,0x32, + 0x36,0x37,0x33,0x0e,0x01,0x05,0x33,0x16,0x01,0x23, + 0x03,0x21,0x03,0x23,0x00,0x17,0x27,0x26,0x27,0x0e, + 0x03,0x07,0x21,0x02,0x43,0x22,0x4c,0x1b,0x49,0x25, + 0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52,0x3e, + 0x22,0x0b,0x60,0x0a,0x5e,0xfe,0xd4,0xbd,0x3d,0x01, + 0x2c,0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9, + 0x20,0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d, + 0x06,0x2c,0x26,0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c, + 0x3c,0x3e,0x75,0x7c,0x75,0xf7,0xfb,0x40,0x01,0xdc, + 0xfe,0x24,0x04,0xbc,0xcc,0x8f,0x55,0x56,0x7d,0xca, + 0x61,0xe4,0x30,0x00,0x00,0x00,0x00,0x04,0x00,0x00, + 0x00,0x00,0x03,0x89,0x07,0x24,0x00,0x07,0x00,0x0f, + 0x00,0x19,0x00,0x23,0x00,0x00,0x12,0x32,0x16,0x14, + 0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22, + 0x26,0x34,0x03,0x33,0x16,0x01,0x23,0x03,0x21,0x03, + 0x23,0x00,0x17,0x27,0x26,0x27,0x0e,0x03,0x07,0x21, + 0xf8,0x4c,0x2f,0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30, + 0x2f,0x4c,0x30,0xb5,0xbd,0x3d,0x01,0x2c,0x9d,0x72, + 0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9,0x20,0x13,0x0b, + 0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d,0x07,0x24,0x32, + 0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d, + 0xfe,0xc5,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24,0x04, + 0xbc,0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30, + 0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x89,0x06,0xf5, + 0x00,0x12,0x00,0x1a,0x00,0x24,0x00,0x00,0x13,0x34, + 0x36,0x32,0x16,0x15,0x14,0x06,0x07,0x12,0x13,0x23, + 0x03,0x21,0x03,0x23,0x00,0x37,0x26,0x24,0x26,0x22, + 0x06,0x14,0x16,0x32,0x36,0x13,0x03,0x27,0x26,0x27, + 0x0e,0x03,0x07,0xed,0x76,0xbe,0x7a,0x38,0x33,0xc7, + 0x92,0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x2b,0x29, + 0x67,0x01,0x48,0x3d,0x67,0x40,0x3b,0x6a,0x3f,0x25, + 0x5b,0x20,0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x06, + 0x2b,0x5c,0x6e,0x6f,0x58,0x40,0x5e,0x18,0xfc,0xd1, + 0xfd,0xb7,0x01,0xdc,0xfe,0x24,0x04,0xd1,0xa8,0x32, + 0xb2,0x3d,0x3e,0x65,0x3c,0x3d,0xfc,0x76,0x01,0x82, + 0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30,0x00,0x02, + 0x00,0x00,0x00,0x00,0x04,0x7c,0x05,0xb6,0x00,0x0f, + 0x00,0x15,0x00,0x00,0x01,0x03,0x23,0x01,0x21,0x15, + 0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11, + 0x35,0x11,0x23,0x06,0x02,0x07,0x01,0x2a,0x8b,0x9f, + 0x01,0xbe,0x02,0xbe,0xfe,0x60,0x01,0x86,0xfe,0x7a, + 0x01,0xa0,0xfd,0xc4,0x1f,0x35,0x7d,0x1a,0x01,0xdc, + 0xfe,0x24,0x05,0xb6,0x8e,0xfe,0x1a,0x8d,0xfd,0xd8, + 0x8d,0x01,0xdc,0x92,0x02,0xb8,0xb4,0xfe,0x52,0x56, + 0x00,0x00,0x00,0x01,0x00,0x66,0xfe,0x14,0x03,0x4a, + 0x05,0xcc,0x00,0x24,0x00,0x00,0x01,0x22,0x02,0x10, + 0x12,0x33,0x32,0x37,0x15,0x06,0x0f,0x01,0x16,0x15, + 0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x35, + 0x34,0x27,0x37,0x26,0x02,0x11,0x10,0x12,0x33,0x32, + 0x17,0x07,0x26,0x02,0x4a,0x97,0xad,0xb0,0x9b,0x75, + 0x62,0x55,0x86,0x25,0x9e,0x83,0x7a,0x40,0x25,0x2e, + 0x70,0x41,0xa3,0x46,0xb4,0xcc,0xfd,0xe4,0x8c,0x77, + 0x3c,0x5f,0x05,0x3e,0xfe,0xb9,0xfd,0xc7,0xfe,0xbb, + 0x34,0x8c,0x34,0x01,0x52,0x27,0x8c,0x66,0x6d,0x0e, + 0x67,0x0d,0x36,0x31,0x64,0x1a,0x95,0x29,0x01,0x7e, + 0x01,0x32,0x01,0x65,0x01,0x98,0x4a,0x83,0x3f,0x00, + 0x00,0x00,0x00,0x02,0x00,0x96,0x00,0x00,0x02,0xd2, + 0x07,0x73,0x00,0x0a,0x00,0x16,0x00,0x00,0x13,0x33, + 0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x01, + 0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11, + 0x21,0xa3,0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59, + 0x21,0x02,0x2f,0xfe,0x5f,0x01,0x88,0xfe,0x78,0x01, + 0xa1,0xfd,0xc4,0x02,0x3c,0x07,0x73,0x43,0xb1,0x3d, + 0x17,0x38,0x60,0x61,0x3d,0xfd,0xc8,0xfe,0x1a,0x8d, + 0xfd,0xd8,0x8e,0x05,0xb6,0x00,0x00,0x02,0x00,0x96, + 0x00,0x00,0x02,0xd2,0x07,0x73,0x00,0x09,0x00,0x15, + 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, + 0x01,0x37,0x13,0x21,0x11,0x21,0x15,0x21,0x11,0x21, + 0x15,0x21,0x11,0x21,0x02,0xbd,0x1d,0xb1,0x4a,0x5d, + 0x34,0x67,0x1e,0xd1,0xfe,0x5f,0x01,0x88,0xfe,0x78, + 0x01,0xa1,0xfd,0xc4,0x02,0x3c,0x07,0x73,0x13,0x37, + 0xc1,0x3d,0x16,0x45,0xab,0x42,0xfd,0xb6,0xfe,0x1a, + 0x8d,0xfd,0xd8,0x8e,0x05,0xb6,0x00,0x02,0x00,0x96, + 0x00,0x00,0x02,0xd2,0x07,0x73,0x00,0x0e,0x00,0x1a, + 0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23, + 0x35,0x36,0x37,0x33,0x1e,0x01,0x17,0x13,0x21,0x11, + 0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02, + 0xc1,0x56,0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38, + 0x9b,0x15,0x70,0x41,0x11,0xfe,0x5f,0x01,0x88,0xfe, + 0x78,0x01,0xa1,0xfd,0xc4,0x02,0x3c,0x06,0x2b,0x24, + 0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53, + 0xfe,0xe9,0xfe,0x1a,0x8d,0xfd,0xd8,0x8e,0x05,0xb6, + 0x00,0x00,0x00,0x03,0x00,0x96,0x00,0x00,0x02,0xd2, + 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x1b,0x00,0x00, + 0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x13,0x21,0x11,0x21, + 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0xe3,0x4c, + 0x2f,0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c, + 0x30,0xcf,0xfe,0x5f,0x01,0x88,0xfe,0x78,0x01,0xa1, + 0xfd,0xc4,0x02,0x3c,0x07,0x24,0x32,0x5d,0x34,0x33, + 0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfe,0x37,0xfe, + 0x1a,0x8d,0xfd,0xd8,0x8e,0x05,0xb6,0x00,0x00,0x02, + 0xff,0xd9,0x00,0x00,0x01,0x4f,0x07,0x73,0x00,0x0a, + 0x00,0x0e,0x00,0x00,0x03,0x33,0x1e,0x01,0x17,0x15, + 0x23,0x26,0x27,0x26,0x27,0x01,0x23,0x11,0x33,0x27, + 0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21,0x01, + 0x63,0x96,0x96,0x07,0x73,0x43,0xb1,0x3d,0x17,0x38, + 0x60,0x61,0x3d,0xf8,0x9f,0x05,0xb6,0x00,0x00,0x02, + 0x00,0x9e,0x00,0x00,0x02,0x13,0x07,0x73,0x00,0x09, + 0x00,0x0d,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, + 0x35,0x3e,0x01,0x37,0x03,0x23,0x11,0x33,0x02,0x13, + 0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x1b,0x96,0x96, + 0x07,0x73,0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42, + 0xf8,0x8d,0x05,0xb6,0x00,0x02,0xff,0xde,0x00,0x00, + 0x02,0x04,0x07,0x73,0x00,0x0e,0x00,0x12,0x00,0x00, + 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, + 0x37,0x33,0x1e,0x01,0x17,0x03,0x23,0x11,0x33,0x02, + 0x04,0x56,0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38, + 0x9b,0x15,0x70,0x41,0xc8,0x96,0x96,0x06,0x2b,0x24, + 0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53, + 0xf9,0xc0,0x05,0xb6,0x00,0x00,0x00,0x03,0xff,0xf5, + 0x00,0x00,0x01,0xf0,0x07,0x24,0x00,0x07,0x00,0x0f, + 0x00,0x13,0x00,0x00,0x12,0x32,0x16,0x14,0x06,0x22, + 0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22,0x26,0x34, + 0x03,0x23,0x11,0x33,0x25,0x4c,0x2f,0x2f,0x4c,0x30, + 0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30,0x09,0x96,0x96, + 0x07,0x24,0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f, + 0x33,0x34,0x5d,0xf9,0x0e,0x05,0xb6,0x00,0x00,0x02, + 0x00,0x28,0x00,0x00,0x03,0xae,0x05,0xb6,0x00,0x0b, + 0x00,0x17,0x00,0x00,0x13,0x21,0x32,0x12,0x10,0x02, + 0x23,0x21,0x11,0x23,0x35,0x33,0x13,0x11,0x33,0x15, + 0x23,0x11,0x33,0x20,0x11,0x10,0x02,0x23,0x95,0x01, + 0x34,0xeb,0xfa,0xfc,0xf8,0xfe,0xdb,0x6d,0x6d,0x9c, + 0xd3,0xd3,0x85,0x01,0x57,0xa7,0xa3,0x05,0xb6,0xfe, + 0x8e,0xfd,0x34,0xfe,0x88,0x02,0x9c,0x8b,0x02,0x05, + 0xfd,0xfb,0x8b,0xfd,0xee,0x02,0x58,0x01,0x21,0x01, + 0x29,0x00,0x00,0x02,0x00,0x96,0x00,0x00,0x03,0xec, + 0x07,0x1d,0x00,0x14,0x00,0x24,0x00,0x00,0x01,0x22, + 0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e,0x01,0x33, + 0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e,0x01,0x13, + 0x23,0x01,0x23,0x16,0x15,0x11,0x23,0x11,0x33,0x01, + 0x33,0x26,0x35,0x11,0x33,0x02,0xcb,0x22,0x4c,0x1b, + 0x49,0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e, + 0x52,0x3e,0x22,0x0b,0x60,0x0a,0x5e,0xd5,0xc2,0xfd, + 0xf9,0x0a,0x10,0x93,0xc3,0x02,0x04,0x07,0x0b,0x93, + 0x06,0x2c,0x26,0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c, + 0x3c,0x3e,0x75,0x7c,0xf9,0xd4,0x04,0xcc,0x80,0x86, + 0xfc,0x3a,0x05,0xb6,0xfb,0x42,0x97,0x73,0x03,0xb4, + 0x00,0x00,0x00,0x03,0x00,0x66,0xff,0xec,0x03,0xf5, + 0x07,0x73,0x00,0x0a,0x00,0x13,0x00,0x1c,0x00,0x00, + 0x01,0x33,0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26, + 0x27,0x01,0x32,0x12,0x10,0x02,0x20,0x02,0x11,0x10, + 0x05,0x22,0x02,0x10,0x12,0x20,0x12,0x11,0x10,0x01, + 0x0e,0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21, + 0x01,0x22,0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca, + 0x94,0x96,0x96,0x01,0x23,0x96,0x07,0x73,0x43,0xb1, + 0x3d,0x17,0x38,0x60,0x61,0x3d,0xfe,0x6a,0xfe,0x7a, + 0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c,0x02,0xec, + 0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01, + 0x30,0x02,0x60,0x00,0x00,0x03,0x00,0x66,0xff,0xec, + 0x03,0xf5,0x07,0x73,0x00,0x09,0x00,0x12,0x00,0x1b, + 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, + 0x01,0x37,0x03,0x32,0x12,0x10,0x02,0x20,0x02,0x11, + 0x10,0x05,0x22,0x02,0x10,0x12,0x20,0x12,0x11,0x10, + 0x03,0x45,0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x59, + 0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca,0x94,0x96, + 0x96,0x01,0x23,0x96,0x07,0x73,0x13,0x37,0xc1,0x3d, + 0x16,0x45,0xab,0x42,0xfe,0x58,0xfe,0x7a,0xfd,0x2e, + 0xfe,0x79,0x01,0x87,0x01,0x6c,0x02,0xec,0x8e,0xfe, + 0xcb,0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01,0x30,0x02, + 0x60,0x00,0x00,0x03,0x00,0x66,0xff,0xec,0x03,0xf5, + 0x07,0x73,0x00,0x0e,0x00,0x17,0x00,0x20,0x00,0x00, + 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, + 0x37,0x33,0x1e,0x01,0x17,0x05,0x32,0x12,0x10,0x02, + 0x20,0x02,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x20, + 0x12,0x11,0x10,0x03,0x3f,0x56,0x2a,0x39,0x5a,0x86, + 0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41,0xfe,0xf1, + 0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca,0x94,0x96, + 0x96,0x01,0x23,0x96,0x06,0x2b,0x24,0x40,0x65,0x97, + 0x32,0x15,0xbd,0x76,0x31,0xaf,0x53,0x75,0xfe,0x7a, + 0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c,0x02,0xec, + 0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01, + 0x30,0x02,0x60,0x00,0x00,0x00,0x00,0x03,0x00,0x66, + 0xff,0xec,0x03,0xf5,0x07,0x1d,0x00,0x14,0x00,0x1d, + 0x00,0x26,0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x23, + 0x22,0x07,0x23,0x3e,0x01,0x33,0x32,0x1e,0x01,0x32, + 0x36,0x37,0x33,0x0e,0x01,0x07,0x32,0x12,0x10,0x02, + 0x20,0x02,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x20, + 0x12,0x11,0x10,0x02,0xb2,0x22,0x4c,0x1b,0x49,0x25, + 0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52,0x3e, + 0x22,0x0b,0x60,0x0a,0x5e,0xce,0xdb,0xea,0xeb,0xfe, + 0x44,0xe8,0x01,0xca,0x94,0x96,0x96,0x01,0x23,0x96, + 0x06,0x2c,0x26,0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c, + 0x3c,0x3e,0x75,0x7c,0x61,0xfe,0x7a,0xfd,0x2e,0xfe, + 0x79,0x01,0x87,0x01,0x6c,0x02,0xec,0x8e,0xfe,0xcb, + 0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01,0x30,0x02,0x60, + 0x00,0x00,0x00,0x04,0x00,0x66,0xff,0xec,0x03,0xf5, + 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x18,0x00,0x21, + 0x00,0x00,0x00,0x32,0x16,0x14,0x06,0x22,0x26,0x34, + 0x24,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x03,0x32, + 0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05,0x22,0x02, + 0x10,0x12,0x20,0x12,0x11,0x10,0x01,0x66,0x4c,0x2f, + 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, + 0x56,0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca,0x94, + 0x96,0x96,0x01,0x23,0x96,0x07,0x24,0x32,0x5d,0x34, + 0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfe,0xd9, + 0xfe,0x7a,0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c, + 0x02,0xec,0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01, + 0x33,0x01,0x30,0x02,0x60,0x00,0x00,0x01,0x00,0x45, + 0x01,0x54,0x03,0x0c,0x04,0x4f,0x00,0x0f,0x00,0x00, + 0x09,0x01,0x17,0x06,0x07,0x01,0x06,0x07,0x09,0x01, + 0x26,0x27,0x01,0x26,0x27,0x37,0x01,0xa8,0x01,0x0a, + 0x5a,0xb8,0x5d,0x01,0x11,0x04,0x54,0xfe,0xf8,0xfe, + 0xf6,0x4d,0x0c,0x01,0x15,0x8c,0x87,0x59,0x03,0x2d, + 0x01,0x22,0x4b,0xcc,0x65,0xfe,0xd0,0x04,0x48,0x01, + 0x21,0xfe,0xdc,0x44,0x09,0x01,0x32,0x99,0x95,0x4b, + 0x00,0x00,0x00,0x03,0x00,0x66,0xff,0xa0,0x03,0xfe, + 0x06,0x0b,0x00,0x13,0x00,0x1b,0x00,0x22,0x00,0x00, + 0x01,0x16,0x10,0x02,0x23,0x22,0x27,0x07,0x27,0x36, + 0x37,0x26,0x11,0x10,0x21,0x32,0x17,0x37,0x16,0x17, + 0x05,0x22,0x02,0x11,0x14,0x17,0x01,0x26,0x03,0x20, + 0x11,0x34,0x27,0x01,0x16,0x03,0x8a,0x6b,0xeb,0xdd, + 0x97,0x66,0x57,0x6d,0x25,0x4a,0x75,0x01,0xca,0x9a, + 0x6e,0x58,0x02,0x6c,0xfe,0x32,0x94,0x96,0x2e,0x01, + 0xbf,0x46,0x80,0x01,0x26,0x23,0xfe,0x46,0x43,0x04, + 0xf5,0xbd,0xfd,0x3b,0xfe,0x79,0x5f,0xab,0x32,0x48, + 0x94,0xc2,0x01,0x6f,0x02,0xec,0x6e,0xae,0x01,0x33, + 0x9a,0xfe,0xcb,0xfe,0xd5,0xf4,0x8b,0x03,0x72,0x6d, + 0xfb,0x3d,0x02,0x69,0xd1,0x8a,0xfc,0x97,0x5b,0x00, + 0x00,0x02,0x00,0x8b,0xff,0xec,0x03,0x96,0x07,0x73, + 0x00,0x0a,0x00,0x1a,0x00,0x00,0x01,0x33,0x1e,0x01, + 0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x01,0x11,0x14, + 0x02,0x20,0x02,0x35,0x11,0x33,0x11,0x14,0x16,0x32, + 0x36,0x35,0x11,0x00,0xff,0xbd,0x1d,0x6b,0x31,0x5e, + 0x44,0x5a,0x59,0x21,0x02,0x97,0xc4,0xfe,0x81,0xc8, + 0x9c,0x7a,0xe4,0x76,0x07,0x73,0x43,0xb1,0x3d,0x17, + 0x38,0x60,0x61,0x3d,0xfe,0x55,0xfc,0x33,0xfc,0xfe, + 0xff,0x01,0x06,0xf8,0x03,0xcc,0xfc,0x25,0xad,0xb3, + 0xb4,0xad,0x03,0xda,0x00,0x00,0x00,0x02,0x00,0x8b, + 0xff,0xec,0x03,0x96,0x07,0x73,0x00,0x09,0x00,0x19, + 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, + 0x01,0x37,0x01,0x11,0x14,0x02,0x20,0x02,0x35,0x11, + 0x33,0x11,0x14,0x16,0x32,0x36,0x35,0x11,0x03,0x22, + 0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x01,0x30,0xc4, + 0xfe,0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x07,0x73,0x13, + 0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xfe,0x43,0xfc, + 0x33,0xfc,0xfe,0xff,0x01,0x06,0xf8,0x03,0xcc,0xfc, + 0x25,0xad,0xb3,0xb4,0xad,0x03,0xda,0x00,0x00,0x02, + 0x00,0x8b,0xff,0xec,0x03,0x96,0x07,0x73,0x00,0x0e, + 0x00,0x1e,0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06, + 0x07,0x23,0x35,0x36,0x37,0x33,0x1e,0x01,0x1f,0x01, + 0x11,0x14,0x02,0x20,0x02,0x35,0x11,0x33,0x11,0x14, + 0x16,0x32,0x36,0x35,0x11,0x03,0x24,0x56,0x2a,0x39, + 0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41, + 0x72,0xc4,0xfe,0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x06, + 0x2b,0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31, + 0xaf,0x53,0x8a,0xfc,0x33,0xfc,0xfe,0xff,0x01,0x06, + 0xf8,0x03,0xcc,0xfc,0x25,0xad,0xb3,0xb4,0xad,0x03, + 0xda,0x00,0x00,0x03,0x00,0x8b,0xff,0xec,0x03,0x96, + 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x1f,0x00,0x00, + 0x00,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x01,0x11,0x14,0x02, + 0x20,0x02,0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36, + 0x35,0x11,0x01,0x44,0x4c,0x2f,0x2f,0x4c,0x30,0x01, + 0x7f,0x4c,0x30,0x2f,0x4c,0x30,0x01,0x32,0xc4,0xfe, + 0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x07,0x24,0x32,0x5d, + 0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfe, + 0xc4,0xfc,0x33,0xfc,0xfe,0xff,0x01,0x06,0xf8,0x03, + 0xcc,0xfc,0x25,0xad,0xb3,0xb4,0xad,0x03,0xda,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x03,0x09,0x07,0x73, + 0x00,0x09,0x00,0x12,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x23,0x35,0x3e,0x01,0x37,0x03,0x23,0x11,0x01, + 0x33,0x1b,0x01,0x33,0x01,0x02,0x9d,0x1d,0xb1,0x4a, + 0x5d,0x34,0x67,0x1e,0x10,0x9b,0xfe,0xca,0xa4,0xe1, + 0xe0,0xa4,0xfe,0xc8,0x07,0x73,0x13,0x37,0xc1,0x3d, + 0x16,0x45,0xab,0x42,0xf8,0x8d,0x02,0x3c,0x03,0x7a, + 0xfd,0x48,0x02,0xb8,0xfc,0x8a,0x00,0x02,0x00,0x95, + 0x00,0x00,0x03,0x36,0x05,0xb6,0x00,0x0b,0x00,0x13, + 0x00,0x00,0x01,0x33,0x32,0x16,0x10,0x06,0x2b,0x01, + 0x11,0x23,0x11,0x33,0x19,0x01,0x33,0x32,0x36,0x10, + 0x26,0x23,0x01,0x31,0x64,0xd5,0xcc,0xd6,0xd1,0x5e, + 0x9c,0x9c,0x53,0x94,0x81,0x7f,0x8a,0x04,0xb4,0xcf, + 0xfe,0x45,0xe9,0xfe,0xbf,0x05,0xb6,0xfe,0x70,0xfd, + 0xa7,0x8e,0x01,0x3f,0x8c,0x00,0x00,0x00,0x00,0x01, + 0x00,0x86,0xff,0xec,0x03,0x57,0x06,0x1f,0x00,0x2c, + 0x00,0x00,0x33,0x11,0x34,0x37,0x3e,0x01,0x20,0x16, + 0x10,0x0f,0x01,0x06,0x14,0x16,0x1f,0x01,0x1e,0x01, + 0x17,0x14,0x06,0x20,0x27,0x35,0x16,0x32,0x36,0x35, + 0x34,0x26,0x27,0x2e,0x01,0x35,0x34,0x37,0x3e,0x01, + 0x35,0x34,0x23,0x22,0x06,0x15,0x11,0x86,0x03,0x09, + 0xaa,0x01,0x1e,0x9d,0x60,0x09,0x57,0x23,0x3e,0x2f, + 0x4b,0x44,0x01,0xa0,0xfe,0xf5,0x43,0x5b,0xa4,0x54, + 0x32,0x53,0x52,0x43,0x6e,0x29,0x24,0x94,0x54,0x58, + 0x04,0x5f,0x35,0x32,0xa4,0xb5,0x9c,0xfe,0xf6,0x75, + 0x09,0x6c,0x6b,0x48,0x46,0x2e,0x4b,0x8c,0x5b,0x9b, + 0xaf,0x35,0x8d,0x40,0x63,0x5a,0x40,0x65,0x55,0x55, + 0x84,0x4b,0x72,0x6e,0x38,0x59,0x34,0xab,0x7c,0x77, + 0xfb,0x5a,0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xee, + 0x02,0xc8,0x06,0x21,0x00,0x0a,0x00,0x20,0x00,0x2b, + 0x00,0x00,0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26, + 0x27,0x26,0x27,0x13,0x27,0x36,0x20,0x16,0x15,0x11, + 0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f, + 0x01,0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e, + 0x01,0x15,0x14,0x33,0x32,0x36,0x9d,0xbd,0x1d,0x6b, + 0x31,0x5e,0x44,0x5a,0x59,0x21,0x2f,0x3a,0x82,0x01, + 0x26,0x8e,0x74,0x1a,0x05,0x52,0x9f,0x78,0x86,0xbc, + 0xb0,0x7f,0x48,0xb2,0xfa,0x22,0x44,0x76,0x71,0x89, + 0x5c,0x68,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60, + 0x61,0x3d,0xfd,0x8c,0x6f,0x52,0xb6,0xc1,0xfd,0x1b, + 0x98,0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80, + 0x77,0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7, + 0xb3,0x00,0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xee, + 0x02,0xc8,0x06,0x21,0x00,0x09,0x00,0x1f,0x00,0x2a, + 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, + 0x01,0x37,0x01,0x27,0x36,0x20,0x16,0x15,0x11,0x23, + 0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f,0x01, + 0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e,0x01, + 0x15,0x14,0x33,0x32,0x36,0x02,0xaf,0x1d,0xb1,0x4a, + 0x5d,0x34,0x67,0x1e,0xfe,0xd9,0x3a,0x82,0x01,0x26, + 0x8e,0x74,0x1a,0x05,0x52,0x9f,0x78,0x86,0xbc,0xb0, + 0x7f,0x48,0xb2,0xfa,0x22,0x44,0x76,0x71,0x89,0x5c, + 0x68,0x06,0x21,0x13,0x37,0xc1,0x3d,0x16,0x45,0xab, + 0x42,0xfd,0x7a,0x6f,0x52,0xb6,0xc1,0xfd,0x1b,0x98, + 0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80,0x77, + 0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7,0xb3, + 0x00,0x03,0x00,0x46,0xff,0xee,0x02,0xc8,0x06,0x22, + 0x00,0x0e,0x00,0x24,0x00,0x2f,0x00,0x00,0x01,0x23, + 0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36,0x37,0x33, + 0x1e,0x01,0x17,0x01,0x27,0x36,0x20,0x16,0x15,0x11, + 0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f, + 0x01,0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e, + 0x01,0x15,0x14,0x33,0x32,0x36,0x02,0xb8,0x56,0x2a, + 0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70, + 0x41,0xfe,0x14,0x3a,0x82,0x01,0x26,0x8e,0x74,0x1a, + 0x05,0x52,0x9f,0x78,0x86,0xbc,0xb0,0x7f,0x48,0xb2, + 0xfa,0x22,0x44,0x76,0x71,0x89,0x5c,0x68,0x04,0xda, + 0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf, + 0x53,0xfe,0xac,0x6f,0x52,0xb6,0xc1,0xfd,0x1b,0x98, + 0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80,0x77, + 0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7,0xb3, + 0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xee,0x02,0xe0, + 0x05,0xcb,0x00,0x14,0x00,0x2a,0x00,0x35,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e, + 0x01,0x33,0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e, + 0x01,0x01,0x27,0x36,0x20,0x16,0x15,0x11,0x23,0x27, + 0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f,0x01,0x35, + 0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e,0x01,0x15, + 0x14,0x33,0x32,0x36,0x02,0x2c,0x22,0x4c,0x1b,0x49, + 0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52, + 0x3e,0x22,0x0b,0x60,0x0a,0x5e,0xfe,0x54,0x3a,0x82, + 0x01,0x26,0x8e,0x74,0x1a,0x05,0x52,0x9f,0x78,0x86, + 0xbc,0xb0,0x7f,0x48,0xb2,0xfa,0x22,0x44,0x76,0x71, + 0x89,0x5c,0x68,0x04,0xda,0x26,0x16,0x3d,0x7b,0x75, + 0x7c,0x3c,0x3c,0x3c,0x3e,0x75,0x7c,0xfe,0xc1,0x6f, + 0x52,0xb6,0xc1,0xfd,0x1b,0x98,0xaa,0xa8,0x01,0x3a, + 0xb3,0x08,0x06,0x56,0x80,0x77,0xfd,0xda,0x6a,0x01, + 0x04,0x06,0x77,0x73,0xc7,0xb3,0x00,0x04,0x00,0x46, + 0xff,0xee,0x02,0xc8,0x05,0xd2,0x00,0x07,0x00,0x0f, + 0x00,0x25,0x00,0x30,0x00,0x00,0x12,0x32,0x16,0x14, + 0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22, + 0x26,0x34,0x01,0x27,0x36,0x20,0x16,0x15,0x11,0x23, + 0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f,0x01, + 0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e,0x01, + 0x15,0x14,0x33,0x32,0x36,0xd5,0x4c,0x2f,0x2f,0x4c, + 0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30,0xfe,0xd7, + 0x3a,0x82,0x01,0x26,0x8e,0x74,0x1a,0x05,0x52,0x9f, + 0x78,0x86,0xbc,0xb0,0x7f,0x48,0xb2,0xfa,0x22,0x44, + 0x76,0x71,0x89,0x5c,0x68,0x05,0xd2,0x32,0x5d,0x34, + 0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfd,0xfb, + 0x6f,0x52,0xb6,0xc1,0xfd,0x1b,0x98,0xaa,0xa8,0x01, + 0x3a,0xb3,0x08,0x06,0x56,0x80,0x77,0xfd,0xda,0x6a, + 0x01,0x04,0x06,0x77,0x73,0xc7,0xb3,0x00,0x00,0x04, + 0x00,0x46,0xff,0xee,0x02,0xc8,0x06,0x73,0x00,0x07, + 0x00,0x0f,0x00,0x25,0x00,0x30,0x00,0x00,0x12,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x26,0x22,0x06, + 0x14,0x16,0x32,0x36,0x01,0x27,0x36,0x20,0x16,0x15, + 0x11,0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36, + 0x3f,0x01,0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07, + 0x0e,0x01,0x15,0x14,0x33,0x32,0x36,0xce,0x76,0xbe, + 0x7a,0x76,0xc3,0x75,0x01,0x48,0x3d,0x67,0x40,0x3b, + 0x6a,0x3f,0xfe,0xb6,0x3a,0x82,0x01,0x26,0x8e,0x74, + 0x1a,0x05,0x52,0x9f,0x78,0x86,0xbc,0xb0,0x7f,0x48, + 0xb2,0xfa,0x22,0x44,0x76,0x71,0x89,0x5c,0x68,0x06, + 0x05,0x6e,0x6f,0xb6,0x6f,0x6c,0x90,0x3d,0x3e,0x65, + 0x3c,0x3d,0xfe,0x25,0x6f,0x52,0xb6,0xc1,0xfd,0x1b, + 0x98,0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80, + 0x77,0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7, + 0xb3,0x00,0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xec, + 0x04,0xd3,0x04,0x5b,0x00,0x23,0x00,0x29,0x00,0x34, + 0x00,0x00,0x13,0x27,0x36,0x33,0x32,0x17,0x36,0x20, + 0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37,0x15,0x06, + 0x23,0x22,0x26,0x27,0x0e,0x01,0x23,0x22,0x26,0x10, + 0x36,0x3f,0x01,0x35,0x34,0x26,0x23,0x22,0x01,0x34, + 0x26,0x23,0x22,0x03,0x07,0x35,0x06,0x07,0x0e,0x01, + 0x15,0x14,0x33,0x32,0x36,0xcc,0x3a,0x82,0x8a,0xb0, + 0x47,0x58,0x01,0x37,0xaf,0xfd,0xf7,0x09,0xed,0x79, + 0x73,0x6e,0x8d,0x6d,0xa4,0x2d,0x31,0x90,0x66,0x7c, + 0x8a,0xbc,0xb0,0x7f,0x4b,0x4f,0x60,0x03,0x08,0x61, + 0x53,0xab,0x13,0x9c,0x22,0x44,0x77,0x70,0x89,0x5c, + 0x68,0x03,0x9b,0x6f,0x50,0x90,0x91,0xfe,0xfc,0xe0, + 0x6a,0xfe,0x5f,0x48,0x84,0x44,0x72,0x6a,0x73,0x69, + 0xab,0x01,0x39,0xb3,0x08,0x06,0x56,0x7c,0x7b,0xfe, + 0xa8,0x9d,0xb9,0xfe,0xaa,0xce,0x6a,0x01,0x04,0x06, + 0x73,0x77,0xc7,0xb3,0x00,0x01,0x00,0x58,0xfe,0x14, + 0x02,0x7e,0x04,0x5b,0x00,0x22,0x00,0x00,0x01,0x22, + 0x11,0x14,0x16,0x33,0x32,0x37,0x15,0x06,0x0f,0x01, + 0x16,0x15,0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x32, + 0x36,0x35,0x34,0x27,0x37,0x24,0x11,0x10,0x21,0x32, + 0x17,0x07,0x26,0x01,0xc9,0xd5,0x6b,0x70,0x4a,0x5c, + 0x54,0x5d,0x25,0x9e,0x83,0x7a,0x40,0x25,0x2d,0x71, + 0x41,0xa3,0x47,0xfe,0xfa,0x01,0x62,0x72,0x52,0x32, + 0x47,0x03,0xd4,0xfe,0x4b,0xdc,0xd0,0x2a,0x83,0x2b, + 0x03,0x52,0x27,0x8c,0x66,0x6d,0x0e,0x67,0x0d,0x36, + 0x31,0x64,0x1a,0x97,0x46,0x01,0xdf,0x02,0x3e,0x30, + 0x7c,0x25,0x00,0x03,0x00,0x58,0xff,0xec,0x02,0xfb, + 0x06,0x21,0x00,0x0a,0x00,0x1b,0x00,0x21,0x00,0x00, + 0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26, + 0x27,0x01,0x22,0x02,0x10,0x12,0x33,0x32,0x12,0x1d, + 0x01,0x21,0x12,0x33,0x32,0x37,0x15,0x06,0x13,0x34, + 0x26,0x23,0x22,0x03,0xb4,0xbd,0x1d,0x6b,0x31,0x5e, + 0x44,0x5a,0x59,0x21,0x01,0x28,0xb9,0xcb,0xb6,0xa9, + 0x96,0xae,0xfd,0xf7,0x06,0xf4,0x72,0x76,0x70,0x01, + 0x60,0x53,0xad,0x10,0x06,0x21,0x43,0xb1,0x3d,0x17, + 0x38,0x60,0x61,0x3d,0xf9,0xdd,0x01,0x25,0x02,0x20, + 0x01,0x2a,0xfe,0xfb,0xdf,0x6a,0xfe,0x62,0x47,0x86, + 0x44,0x02,0x9a,0x9d,0xbb,0xfe,0xa8,0x00,0x00,0x03, + 0x00,0x58,0xff,0xec,0x02,0xfb,0x06,0x21,0x00,0x09, + 0x00,0x1a,0x00,0x20,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x23,0x35,0x3e,0x01,0x37,0x03,0x22,0x02,0x10, + 0x12,0x33,0x32,0x12,0x1d,0x01,0x21,0x12,0x33,0x32, + 0x37,0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03,0x02, + 0xce,0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x36,0xb9, + 0xcb,0xb6,0xa9,0x96,0xae,0xfd,0xf7,0x06,0xf4,0x72, + 0x76,0x70,0x01,0x60,0x53,0xad,0x10,0x06,0x21,0x13, + 0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xf9,0xcb,0x01, + 0x25,0x02,0x20,0x01,0x2a,0xfe,0xfb,0xdf,0x6a,0xfe, + 0x62,0x47,0x86,0x44,0x02,0x9a,0x9d,0xbb,0xfe,0xa8, + 0x00,0x03,0x00,0x58,0xff,0xec,0x02,0xfb,0x06,0x21, + 0x00,0x0e,0x00,0x1f,0x00,0x25,0x00,0x00,0x01,0x23, + 0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36,0x37,0x33, + 0x1e,0x01,0x17,0x03,0x22,0x02,0x10,0x12,0x33,0x32, + 0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37,0x15,0x06, + 0x13,0x34,0x26,0x23,0x22,0x03,0x02,0xc8,0x56,0x2a, + 0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70, + 0x41,0xec,0xb9,0xcb,0xb6,0xa9,0x96,0xae,0xfd,0xf7, + 0x06,0xf4,0x72,0x76,0x70,0x01,0x60,0x53,0xad,0x10, + 0x04,0xd9,0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76, + 0x31,0xaf,0x53,0xfa,0xfe,0x01,0x25,0x02,0x20,0x01, + 0x2a,0xfe,0xfb,0xdf,0x6a,0xfe,0x62,0x47,0x86,0x44, + 0x02,0x9a,0x9d,0xbb,0xfe,0xa8,0x00,0x00,0x00,0x04, + 0x00,0x58,0xff,0xec,0x02,0xfb,0x05,0xd2,0x00,0x07, + 0x00,0x0f,0x00,0x20,0x00,0x26,0x00,0x00,0x12,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14, + 0x06,0x22,0x26,0x34,0x03,0x22,0x02,0x10,0x12,0x33, + 0x32,0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37,0x15, + 0x06,0x13,0x34,0x26,0x23,0x22,0x03,0xe7,0x4c,0x2f, + 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, + 0x2b,0xb9,0xcb,0xb6,0xa9,0x96,0xae,0xfd,0xf7,0x06, + 0xf4,0x72,0x76,0x70,0x01,0x60,0x53,0xad,0x10,0x05, + 0xd2,0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33, + 0x34,0x5d,0xfa,0x4c,0x01,0x25,0x02,0x20,0x01,0x2a, + 0xfe,0xfb,0xdf,0x6a,0xfe,0x62,0x47,0x86,0x44,0x02, + 0x9a,0x9d,0xbb,0xfe,0xa8,0x00,0x00,0x02,0xff,0xc6, + 0x00,0x00,0x01,0x3c,0x06,0x21,0x00,0x0a,0x00,0x0e, + 0x00,0x00,0x03,0x33,0x1e,0x01,0x17,0x15,0x23,0x26, + 0x27,0x26,0x27,0x01,0x23,0x11,0x33,0x3a,0xbd,0x1d, + 0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21,0x01,0x59,0x98, + 0x98,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60,0x61, + 0x3d,0xf9,0xf1,0x04,0x47,0x00,0x00,0x02,0x00,0x71, + 0x00,0x00,0x01,0xe6,0x06,0x21,0x00,0x09,0x00,0x0d, + 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, + 0x01,0x37,0x03,0x23,0x11,0x33,0x01,0xe6,0x1d,0xb1, + 0x4a,0x5d,0x34,0x67,0x1e,0x0b,0x98,0x98,0x06,0x21, + 0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xf9,0xdf, + 0x04,0x47,0x00,0x02,0xff,0xbf,0x00,0x00,0x01,0xe5, + 0x06,0x21,0x00,0x0e,0x00,0x12,0x00,0x00,0x01,0x23, + 0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36,0x37,0x33, + 0x1e,0x01,0x17,0x03,0x23,0x11,0x33,0x01,0xe5,0x56, + 0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15, + 0x70,0x41,0xc6,0x98,0x98,0x04,0xd9,0x24,0x40,0x65, + 0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53,0xfb,0x12, + 0x04,0x47,0x00,0x00,0x00,0x03,0xff,0xd7,0x00,0x00, + 0x01,0xd2,0x05,0xd2,0x00,0x07,0x00,0x0f,0x00,0x13, + 0x00,0x00,0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34, + 0x24,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x03,0x23, + 0x11,0x33,0x07,0x4c,0x2f,0x2f,0x4c,0x30,0x01,0x7f, + 0x4c,0x30,0x2f,0x4c,0x30,0x08,0x98,0x98,0x05,0xd2, + 0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34, + 0x5d,0xfa,0x60,0x04,0x47,0x00,0x00,0x02,0x00,0x57, + 0xff,0xec,0x03,0x34,0x06,0x18,0x00,0x1b,0x00,0x25, + 0x00,0x00,0x13,0x37,0x16,0x17,0x36,0x37,0x17,0x07, + 0x00,0x11,0x10,0x02,0x23,0x22,0x02,0x10,0x12,0x33, + 0x32,0x17,0x32,0x37,0x26,0x27,0x07,0x27,0x37,0x26, + 0x13,0x22,0x11,0x14,0x16,0x32,0x36,0x35,0x34,0x26, + 0xe7,0x3e,0x60,0x4c,0x9a,0x28,0x39,0xac,0x01,0x14, + 0xbe,0xb5,0xa5,0xc5,0xaf,0xa1,0x8d,0x4f,0x06,0x03, + 0x32,0xa9,0xbe,0x39,0xaa,0x36,0x9b,0xd8,0x71,0xd2, + 0x66,0x75,0x05,0xbb,0x5d,0x36,0x44,0x5f,0x19,0x5b, + 0x6a,0xfe,0xcd,0xfd,0xf6,0xfe,0xf2,0xfe,0xe6,0x01, + 0x10,0x01,0xc9,0x01,0x01,0x79,0x01,0xfd,0xc1,0x74, + 0x5c,0x67,0x30,0xfd,0xb9,0xfe,0x90,0xa4,0xc0,0xbe, + 0xc4,0x95,0xbd,0x00,0x00,0x02,0x00,0x86,0x00,0x00, + 0x03,0x1d,0x05,0xcb,0x00,0x14,0x00,0x28,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e, + 0x01,0x33,0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e, + 0x01,0x05,0x17,0x33,0x3e,0x01,0x33,0x32,0x16,0x15, + 0x11,0x23,0x11,0x10,0x23,0x22,0x06,0x19,0x01,0x23, + 0x11,0x02,0x55,0x22,0x4c,0x1b,0x49,0x25,0x3f,0x13, + 0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52,0x3e,0x22,0x0b, + 0x60,0x0a,0x5e,0xfe,0x60,0x10,0x0c,0x22,0x82,0x4f, + 0x88,0x85,0x98,0x93,0x7a,0x5b,0x97,0x04,0xda,0x26, + 0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c,0x3c,0x3e,0x75, + 0x7c,0x94,0x94,0x50,0x59,0xb7,0xbe,0xfd,0x1a,0x02, + 0xd0,0x01,0x06,0xdb,0xfe,0xf5,0xfe,0x10,0x04,0x46, + 0x00,0x00,0x00,0x03,0x00,0x57,0xff,0xec,0x03,0x30, + 0x06,0x21,0x00,0x0a,0x00,0x12,0x00,0x1a,0x00,0x00, + 0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26, + 0x27,0x02,0x12,0x20,0x12,0x10,0x02,0x20,0x02,0x01, + 0x22,0x06,0x10,0x16,0x33,0x32,0x10,0xbe,0xbd,0x1d, + 0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21,0x67,0xbd,0x01, + 0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01,0x6c,0x6d,0x63, + 0x65,0x6b,0xd0,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38, + 0x60,0x61,0x3d,0xfd,0x27,0x01,0x25,0xfe,0xd3,0xfd, + 0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf,0xd4,0xfe,0x4c, + 0xd9,0x03,0x61,0x00,0x00,0x00,0x00,0x03,0x00,0x57, + 0xff,0xec,0x03,0x30,0x06,0x21,0x00,0x09,0x00,0x11, + 0x00,0x19,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, + 0x35,0x3e,0x01,0x37,0x00,0x12,0x20,0x12,0x10,0x02, + 0x20,0x02,0x01,0x22,0x06,0x10,0x16,0x33,0x32,0x10, + 0x02,0xd2,0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0xfe, + 0x41,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01, + 0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x06,0x21,0x13,0x37, + 0xc1,0x3d,0x16,0x45,0xab,0x42,0xfd,0x15,0x01,0x25, + 0xfe,0xd3,0xfd,0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf, + 0xd4,0xfe,0x4c,0xd9,0x03,0x61,0x00,0x03,0x00,0x57, + 0xff,0xec,0x03,0x30,0x06,0x21,0x00,0x0e,0x00,0x16, + 0x00,0x1e,0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06, + 0x07,0x23,0x35,0x36,0x37,0x33,0x1e,0x01,0x17,0x00, + 0x12,0x20,0x12,0x10,0x02,0x20,0x02,0x01,0x22,0x06, + 0x10,0x16,0x33,0x32,0x10,0x02,0xd8,0x56,0x2a,0x39, + 0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41, + 0xfd,0x7f,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0, + 0x01,0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x04,0xd9,0x24, + 0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53, + 0xfe,0x48,0x01,0x25,0xfe,0xd3,0xfd,0xe6,0xfe,0xd8, + 0x01,0x29,0x02,0xbf,0xd4,0xfe,0x4c,0xd9,0x03,0x61, + 0x00,0x00,0x00,0x03,0x00,0x57,0xff,0xec,0x03,0x30, + 0x05,0xcb,0x00,0x14,0x00,0x1c,0x00,0x24,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e, + 0x01,0x33,0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e, + 0x01,0x00,0x12,0x20,0x12,0x10,0x02,0x20,0x02,0x01, + 0x22,0x06,0x10,0x16,0x33,0x32,0x10,0x02,0x42,0x22, + 0x4c,0x1b,0x49,0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e, + 0x2b,0x5e,0x52,0x3e,0x22,0x0b,0x60,0x0a,0x5e,0xfd, + 0xc9,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01, + 0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x04,0xda,0x26,0x16, + 0x3d,0x7b,0x75,0x7c,0x3c,0x3c,0x3c,0x3e,0x75,0x7c, + 0xfe,0x5c,0x01,0x25,0xfe,0xd3,0xfd,0xe6,0xfe,0xd8, + 0x01,0x29,0x02,0xbf,0xd4,0xfe,0x4c,0xd9,0x03,0x61, + 0x00,0x04,0x00,0x57,0xff,0xec,0x03,0x30,0x05,0xd2, + 0x00,0x07,0x00,0x0f,0x00,0x17,0x00,0x1f,0x00,0x00, + 0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x00,0x12,0x20,0x12, + 0x10,0x02,0x20,0x02,0x01,0x22,0x06,0x10,0x16,0x33, + 0x32,0x10,0xf7,0x4c,0x2f,0x2f,0x4c,0x30,0x01,0x7f, + 0x4c,0x30,0x2f,0x4c,0x30,0xfe,0x40,0xbd,0x01,0x5a, + 0xc2,0xc0,0xfe,0xa7,0xc0,0x01,0x6c,0x6d,0x63,0x65, + 0x6b,0xd0,0x05,0xd2,0x32,0x5d,0x34,0x33,0x5f,0x31, + 0x31,0x5f,0x33,0x34,0x5d,0xfd,0x96,0x01,0x25,0xfe, + 0xd3,0xfd,0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf,0xd4, + 0xfe,0x4c,0xd9,0x03,0x61,0x00,0x00,0x03,0x00,0x4a, + 0x00,0xfd,0x03,0x08,0x04,0xa6,0x00,0x06,0x00,0x0a, + 0x00,0x11,0x00,0x00,0x00,0x34,0x32,0x15,0x14,0x06, + 0x23,0x01,0x21,0x35,0x21,0x01,0x22,0x34,0x32,0x15, + 0x14,0x06,0x01,0x4c,0xb9,0x32,0x2a,0x01,0x5f,0xfd, + 0x42,0x02,0xbe,0xfe,0xa1,0x5d,0xb9,0x32,0x03,0xb8, + 0xee,0x77,0x3b,0x3c,0xfe,0xdc,0x7c,0xfd,0xed,0xee, + 0x76,0x3b,0x3d,0x00,0x00,0x03,0x00,0x54,0xff,0x81, + 0x03,0x33,0x04,0xa6,0x00,0x14,0x00,0x1d,0x00,0x25, + 0x00,0x00,0x25,0x06,0x07,0x27,0x36,0x37,0x26,0x10, + 0x12,0x33,0x32,0x17,0x37,0x16,0x17,0x07,0x16,0x10, + 0x02,0x23,0x22,0x13,0x22,0x06,0x15,0x14,0x17,0x12, + 0x13,0x26,0x03,0x32,0x36,0x35,0x26,0x27,0x01,0x16, + 0x01,0x0f,0x08,0x4b,0x68,0x55,0x10,0x62,0xbc,0xb2, + 0x6e,0x50,0x49,0x11,0x56,0x5c,0x59,0xbf,0xb0,0x6a, + 0x6c,0x6d,0x66,0x1a,0x8c,0xad,0x31,0x4f,0x69,0x6b, + 0x01,0x16,0xfe,0xce,0x2a,0x26,0x0f,0x96,0x35,0xa7, + 0x21,0x97,0x02,0x22,0x01,0x24,0x47,0x92,0x09,0x2b, + 0xbb,0x95,0xfd,0xf1,0xfe,0xd9,0x03,0xe8,0xd6,0xd9, + 0x85,0x7c,0x01,0x15,0x01,0x5c,0x3f,0xfc,0x9f,0xdc, + 0xd6,0x8a,0x5b,0xfd,0x9a,0x31,0x00,0x02,0x00,0x80, + 0xff,0xec,0x03,0x17,0x06,0x21,0x00,0x0a,0x00,0x20, + 0x00,0x00,0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26, + 0x27,0x26,0x27,0x01,0x23,0x26,0x27,0x23,0x0e,0x01, + 0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x33, + 0x32,0x36,0x35,0x11,0x33,0xb8,0xbd,0x1d,0x6b,0x31, + 0x5e,0x44,0x5a,0x59,0x21,0x02,0x5f,0x7b,0x08,0x0b, + 0x0a,0x24,0x80,0x4e,0x89,0x84,0x98,0x46,0x4c,0x6e, + 0x68,0x97,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60, + 0x61,0x3d,0xf9,0xf1,0x38,0x5d,0x50,0x59,0xc1,0xcf, + 0x02,0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f, + 0x00,0x02,0x00,0x80,0xff,0xec,0x03,0x17,0x06,0x21, + 0x00,0x09,0x00,0x1f,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x23,0x35,0x3e,0x01,0x37,0x13,0x23,0x26,0x27, + 0x23,0x0e,0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11, + 0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33,0x02,0xde, + 0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0xf5,0x7b,0x08, + 0x0b,0x0a,0x24,0x80,0x4e,0x89,0x84,0x98,0x46,0x4c, + 0x6e,0x68,0x97,0x06,0x21,0x13,0x37,0xc1,0x3d,0x16, + 0x45,0xab,0x42,0xf9,0xdf,0x38,0x5d,0x50,0x59,0xc1, + 0xcf,0x02,0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02, + 0x3f,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0xff,0xec, + 0x03,0x17,0x06,0x21,0x00,0x0e,0x00,0x24,0x00,0x00, + 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, + 0x37,0x33,0x1e,0x01,0x17,0x13,0x23,0x26,0x27,0x23, + 0x0e,0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14, + 0x16,0x33,0x32,0x36,0x35,0x11,0x33,0x02,0xdb,0x56, + 0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15, + 0x70,0x41,0x3c,0x7b,0x08,0x0b,0x0a,0x24,0x80,0x4e, + 0x89,0x84,0x98,0x46,0x4c,0x6e,0x68,0x97,0x04,0xd9, + 0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf, + 0x53,0xfb,0x12,0x38,0x5d,0x50,0x59,0xc1,0xcf,0x02, + 0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f,0x00, + 0x00,0x03,0x00,0x80,0xff,0xec,0x03,0x17,0x05,0xd2, + 0x00,0x07,0x00,0x0f,0x00,0x25,0x00,0x00,0x00,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14, + 0x06,0x22,0x26,0x34,0x13,0x23,0x26,0x27,0x23,0x0e, + 0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16, + 0x33,0x32,0x36,0x35,0x11,0x33,0x01,0x00,0x4c,0x2f, + 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, + 0xf7,0x7b,0x08,0x0b,0x0a,0x24,0x80,0x4e,0x89,0x84, + 0x98,0x46,0x4c,0x6e,0x68,0x97,0x05,0xd2,0x32,0x5d, + 0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfa, + 0x60,0x38,0x5d,0x50,0x59,0xc1,0xcf,0x02,0xca,0xfd, + 0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f,0x00,0x00,0x00, + 0x00,0x02,0x00,0x06,0xfe,0x14,0x02,0xdc,0x06,0x21, + 0x00,0x09,0x00,0x24,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x23,0x35,0x3e,0x01,0x37,0x02,0x06,0x22,0x27, + 0x35,0x16,0x33,0x32,0x36,0x3f,0x01,0x01,0x33,0x13, + 0x16,0x17,0x33,0x36,0x37,0x12,0x37,0x33,0x02,0x03, + 0x0e,0x02,0x02,0x85,0x1d,0xb1,0x4a,0x5d,0x34,0x67, + 0x1e,0xc3,0x59,0x6b,0x36,0x2a,0x29,0x3e,0x4c,0x19, + 0x27,0xfe,0xdd,0x9c,0xa0,0x1c,0x16,0x07,0x15,0x18, + 0x6c,0x2b,0x9d,0x86,0x91,0x1c,0x29,0x3b,0x06,0x21, + 0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xf8,0x1f, + 0x2c,0x11,0x84,0x0e,0x61,0x6b,0x95,0x04,0x4a,0xfd, + 0x6b,0x73,0x93,0x8a,0x75,0x01,0xda,0xc2,0xfd,0xf4, + 0xfd,0xc0,0x6a,0x83,0x86,0x00,0x00,0x00,0x00,0x02, + 0x00,0x86,0xfe,0x14,0x03,0x4e,0x06,0x14,0x00,0x11, + 0x00,0x1c,0x00,0x00,0x01,0x07,0x33,0x36,0x20,0x12, + 0x10,0x02,0x23,0x22,0x26,0x27,0x23,0x17,0x11,0x23, + 0x11,0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x10,0x26, + 0x22,0x06,0x07,0x01,0x1d,0x07,0x07,0x55,0x01,0x37, + 0xa5,0xa6,0x95,0x50,0x80,0x26,0x09,0x0d,0x9b,0x97, + 0x66,0x6c,0x61,0x60,0x5d,0xd1,0x64,0x01,0x04,0x47, + 0x95,0xa9,0xfe,0xe0,0xfd,0xdc,0xfe,0xd5,0x54,0x4e, + 0x86,0xfe,0x0c,0x08,0x00,0xfc,0x16,0xe3,0xd6,0xd2, + 0x01,0xc3,0xce,0xbd,0xcd,0x00,0x00,0x00,0x00,0x03, + 0x00,0x06,0xfe,0x14,0x02,0xdc,0x05,0xd2,0x00,0x07, + 0x00,0x0f,0x00,0x2a,0x00,0x00,0x12,0x32,0x16,0x14, + 0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22, + 0x26,0x34,0x02,0x06,0x22,0x27,0x35,0x16,0x33,0x32, + 0x36,0x3f,0x01,0x01,0x33,0x13,0x16,0x17,0x33,0x36, + 0x37,0x12,0x37,0x33,0x02,0x03,0x0e,0x02,0xa7,0x4c, + 0x2f,0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c, + 0x30,0xc1,0x59,0x6b,0x36,0x2a,0x29,0x3e,0x4c,0x19, + 0x27,0xfe,0xdd,0x9c,0xa0,0x1c,0x16,0x07,0x15,0x18, + 0x6c,0x2b,0x9d,0x86,0x91,0x1c,0x29,0x3b,0x05,0xd2, + 0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34, + 0x5d,0xf8,0xa0,0x2c,0x11,0x84,0x0e,0x61,0x6b,0x95, + 0x04,0x4a,0xfd,0x6b,0x73,0x93,0x8a,0x75,0x01,0xda, + 0xc2,0xfd,0xf4,0xfd,0xc0,0x6a,0x83,0x86,0x00,0x01, + 0x00,0x87,0x00,0x00,0x01,0x1f,0x04,0x47,0x00,0x03, + 0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x1f,0x98,0x98, + 0x04,0x47,0x00,0x02,0x00,0x66,0xff,0xf6,0x04,0xb9, + 0x05,0xc1,0x00,0x14,0x00,0x1e,0x00,0x00,0x29,0x01, + 0x22,0x06,0x07,0x22,0x02,0x10,0x12,0x33,0x32,0x17, + 0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x01, + 0x22,0x02,0x10,0x12,0x33,0x32,0x37,0x11,0x26,0x04, + 0xb9,0xfe,0x45,0x1f,0x76,0x18,0xf3,0xf8,0xfe,0xf3, + 0x33,0x4f,0x01,0xe0,0xfe,0x5f,0x01,0x86,0xfe,0x7a, + 0x01,0xa1,0xfd,0xa0,0xae,0xa4,0xa4,0xb0,0x17,0x0b, + 0x0c,0x09,0x01,0x01,0x7a,0x02,0xd8,0x01,0x79,0x0b, + 0x8d,0xfe,0x19,0x8d,0xfd,0xd8,0x04,0xa2,0xfe,0xe5, + 0xfd,0x90,0xfe,0xe3,0x01,0x04,0xa6,0x01,0x00,0x00, + 0x00,0x03,0x00,0x57,0xff,0xec,0x05,0x34,0x04,0x5b, + 0x00,0x17,0x00,0x1d,0x00,0x26,0x00,0x00,0x05,0x22, + 0x27,0x06,0x23,0x22,0x02,0x10,0x12,0x20,0x17,0x36, + 0x33,0x32,0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37, + 0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03,0x07,0x35, + 0x10,0x23,0x22,0x06,0x15,0x10,0x20,0x04,0x16,0xd4, + 0x61,0x5b,0xc5,0xaa,0xc0,0xb9,0x01,0x70,0x5d,0x59, + 0xbb,0x95,0xae,0xfd,0xf8,0x07,0xf9,0x6c,0x76,0x71, + 0x02,0x60,0x53,0xad,0x10,0x9d,0xcf,0x6d,0x63,0x01, + 0x9f,0x14,0xc9,0xc9,0x01,0x29,0x02,0x24,0x01,0x22, + 0xc6,0xc6,0xfe,0xfc,0xe0,0x6a,0xfe,0x61,0x46,0x84, + 0x44,0x02,0x9a,0x9e,0xb8,0xfe,0xaa,0x72,0x11,0x01, + 0xaf,0xd4,0xdb,0xfe,0x4b,0x00,0x00,0x00,0x00,0x02, + 0x00,0x50,0xff,0xec,0x02,0xe9,0x07,0x73,0x00,0x0d, + 0x00,0x2b,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, + 0x26,0x27,0x35,0x33,0x16,0x17,0x36,0x37,0x01,0x32, + 0x36,0x34,0x26,0x27,0x2e,0x01,0x10,0x36,0x20,0x17, + 0x06,0x07,0x26,0x22,0x06,0x14,0x16,0x17,0x1e,0x01, + 0x15,0x14,0x06,0x20,0x27,0x35,0x1e,0x01,0x02,0xc9, + 0x3c,0x72,0x18,0x9b,0x41,0x84,0x55,0x37,0x89,0x78, + 0x43,0xfe,0xfc,0x64,0x7b,0x6e,0x64,0x9f,0x81,0xc7, + 0x01,0x3c,0x7b,0x13,0x24,0x74,0xc5,0x75,0x56,0x8a, + 0x92,0x82,0xcb,0xfe,0xa8,0x76,0x3c,0x9c,0x07,0x73, + 0x16,0x4e,0xb2,0x32,0x82,0xb0,0x16,0x30,0x9a,0x92, + 0x38,0xf9,0x06,0x90,0xcf,0x8b,0x3d,0x59,0xb8,0x01, + 0x44,0xd6,0x48,0x2d,0x5a,0x3e,0x83,0xd0,0x7b,0x4d, + 0x4f,0xc2,0x89,0xbb,0xde,0x3a,0xa0,0x23,0x2a,0x00, + 0x00,0x00,0x00,0x02,0x00,0x46,0xff,0xec,0x02,0x73, + 0x06,0x21,0x00,0x0d,0x00,0x33,0x00,0x00,0x01,0x15, + 0x0e,0x01,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x17, + 0x36,0x37,0x00,0x16,0x32,0x36,0x35,0x34,0x27,0x2e, + 0x03,0x27,0x26,0x35,0x34,0x37,0x36,0x20,0x17,0x07, + 0x26,0x22,0x06,0x15,0x14,0x1f,0x01,0x1e,0x02,0x17, + 0x16,0x15,0x14,0x06,0x20,0x27,0x35,0x02,0x73,0x3c, + 0x72,0x18,0x9b,0x41,0x84,0x55,0x37,0x89,0x78,0x43, + 0xfe,0x4b,0x8b,0x8f,0x58,0x18,0x07,0x2e,0x14,0x7e, + 0x3b,0x7a,0x55,0x57,0x01,0x0f,0x68,0x3e,0x5b,0xa0, + 0x55,0x3c,0x82,0x2b,0x33,0x3c,0x10,0x26,0x9f,0xfe, + 0xd6,0x5a,0x06,0x21,0x16,0x4e,0xb2,0x32,0x82,0xb0, + 0x16,0x30,0x9a,0x92,0x38,0xfa,0x81,0x2d,0x58,0x42, + 0x32,0x31,0x0f,0x2b,0x0f,0x5a,0x2f,0x61,0x9c,0x7d, + 0x4f,0x4f,0x44,0x76,0x38,0x54,0x44,0x58,0x2e,0x61, + 0x20,0x2a,0x40,0x1f,0x48,0x5b,0x91,0x92,0x3e,0x97, + 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x09, + 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x18,0x00,0x00, + 0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, + 0x16,0x14,0x06,0x22,0x26,0x34,0x03,0x23,0x11,0x01, + 0x33,0x1b,0x01,0x33,0x01,0xb9,0x4c,0x2f,0x2f,0x4c, + 0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30,0x08,0x9b, + 0xfe,0xca,0xa4,0xe1,0xe0,0xa4,0xfe,0xc8,0x07,0x24, + 0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34, + 0x5d,0xf9,0x0e,0x02,0x3c,0x03,0x7a,0xfd,0x48,0x02, + 0xb8,0xfc,0x8a,0x00,0x00,0x02,0x00,0x34,0x00,0x00, + 0x02,0xa7,0x07,0x73,0x00,0x0d,0x00,0x17,0x00,0x00, + 0x01,0x15,0x0e,0x01,0x07,0x23,0x26,0x27,0x35,0x33, + 0x16,0x17,0x36,0x37,0x13,0x15,0x21,0x35,0x01,0x21, + 0x35,0x21,0x15,0x01,0x02,0x7d,0x3c,0x72,0x18,0x9b, + 0x41,0x84,0x55,0x37,0x89,0x78,0x43,0x80,0xfd,0x8d, + 0x01,0xb7,0xfe,0x52,0x02,0x5d,0xfe,0x45,0x07,0x73, + 0x16,0x4e,0xb2,0x32,0x82,0xb0,0x16,0x30,0x9a,0x92, + 0x38,0xf9,0x1b,0x8e,0x7a,0x04,0xad,0x8f,0x7b,0xfb, + 0x53,0x00,0x00,0x02,0x00,0x26,0x00,0x00,0x02,0x4c, + 0x06,0x21,0x00,0x0d,0x00,0x17,0x00,0x00,0x01,0x15, + 0x0e,0x01,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x17, + 0x36,0x37,0x13,0x15,0x21,0x35,0x01,0x21,0x35,0x21, + 0x15,0x01,0x02,0x4c,0x3c,0x72,0x18,0x9b,0x41,0x84, + 0x55,0x37,0x89,0x78,0x43,0x39,0xfe,0x06,0x01,0x47, + 0xfe,0xce,0x01,0xd6,0xfe,0xbd,0x06,0x21,0x16,0x4e, + 0xb2,0x32,0x82,0xb0,0x16,0x30,0x9a,0x92,0x38,0xfa, + 0x5e,0x7f,0x6b,0x03,0x5c,0x80,0x72,0xfc,0xaa,0x00, + 0x00,0x01,0x00,0x45,0xfe,0x14,0x03,0x11,0x05,0xcb, + 0x00,0x20,0x00,0x00,0x01,0x34,0x36,0x33,0x32,0x17, + 0x07,0x26,0x23,0x22,0x06,0x07,0x15,0x33,0x15,0x23, + 0x02,0x11,0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x33, + 0x32,0x36,0x35,0x11,0x23,0x35,0x37,0x01,0x4f,0x77, + 0x90,0x5e,0x5d,0x32,0x42,0x37,0x44,0x34,0x02,0xc7, + 0xc7,0x01,0x8a,0x8e,0x48,0x46,0x43,0x35,0x4e,0x44, + 0xa2,0xa2,0x04,0x38,0xd1,0xc2,0x29,0x7e,0x1f,0x6c, + 0x83,0x91,0x7f,0xfe,0xc3,0xfd,0x87,0xbf,0xbb,0x11, + 0x88,0x12,0x6f,0x78,0x03,0xc2,0x50,0x34,0x00,0x00, + 0x00,0x01,0x01,0x2a,0x04,0xd9,0x03,0x50,0x06,0x21, + 0x00,0x0e,0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06, + 0x07,0x23,0x35,0x36,0x37,0x33,0x1e,0x01,0x17,0x03, + 0x50,0x56,0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38, + 0x9b,0x15,0x70,0x41,0x04,0xd9,0x24,0x40,0x65,0x97, + 0x32,0x15,0xbd,0x76,0x31,0xaf,0x53,0x00,0x00,0x00, + 0x00,0x01,0x01,0x2a,0x04,0xd9,0x03,0x50,0x06,0x21, + 0x00,0x0d,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, + 0x26,0x27,0x35,0x33,0x16,0x17,0x36,0x37,0x03,0x50, + 0x3c,0x72,0x18,0x9b,0x41,0x84,0x55,0x37,0x89,0x78, + 0x43,0x06,0x21,0x16,0x4e,0xb2,0x32,0x82,0xb0,0x16, + 0x30,0x9a,0x92,0x38,0x00,0x00,0x00,0x01,0x01,0x44, + 0x04,0xdb,0x03,0x34,0x05,0xe4,0x00,0x0b,0x00,0x00, + 0x01,0x22,0x03,0x33,0x1e,0x01,0x32,0x36,0x37,0x33, + 0x0e,0x01,0x02,0x37,0xe5,0x0e,0x62,0x07,0x47,0x8a, + 0x46,0x0b,0x65,0x06,0x84,0x04,0xdb,0x01,0x09,0x4b, + 0x43,0x43,0x4b,0x7e,0x8b,0x00,0x00,0x00,0x00,0x01, + 0x00,0x83,0x05,0x02,0x01,0x3c,0x05,0xdf,0x00,0x07, + 0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x83,0x32,0x59,0x2e,0x30,0x56,0x33,0x05,0xa6,0x39, + 0x39,0x6a,0x3a,0x3a,0x00,0x02,0x01,0x6d,0x04,0xdf, + 0x03,0x1b,0x06,0x73,0x00,0x07,0x00,0x0f,0x00,0x00, + 0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x26, + 0x22,0x06,0x14,0x16,0x32,0x36,0x01,0x6d,0x76,0xbe, + 0x7a,0x76,0xc3,0x75,0x01,0x48,0x3d,0x67,0x40,0x3b, + 0x6a,0x3f,0x06,0x05,0x6e,0x6f,0xb6,0x6f,0x6c,0x90, + 0x3d,0x3e,0x65,0x3c,0x3d,0x00,0x00,0x00,0x00,0x01, + 0x00,0x25,0xfe,0x37,0x01,0x53,0x00,0x00,0x00,0x13, + 0x00,0x00,0x01,0x06,0x22,0x27,0x26,0x35,0x37,0x36, + 0x35,0x34,0x27,0x36,0x37,0x33,0x06,0x07,0x16,0x1f, + 0x01,0x14,0x01,0x42,0x2f,0xa3,0x36,0x15,0x2f,0x34, + 0x26,0x27,0x2a,0x6a,0x5e,0x06,0x23,0x4e,0x29,0xfe, + 0x56,0x1f,0x2a,0x36,0x4c,0x2c,0x26,0x2c,0x20,0x12, + 0x41,0x2c,0x64,0x63,0x50,0x23,0x0d,0x35,0x00,0x00, + 0x00,0x01,0x01,0x10,0x04,0xd8,0x03,0x6d,0x05,0xcb, + 0x00,0x14,0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x23, + 0x22,0x07,0x23,0x3e,0x01,0x33,0x32,0x1e,0x01,0x32, + 0x36,0x37,0x33,0x0e,0x01,0x02,0xb9,0x22,0x4c,0x1b, + 0x49,0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e, + 0x52,0x3e,0x22,0x0b,0x60,0x0a,0x5e,0x04,0xda,0x26, + 0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c,0x3c,0x3e,0x75, + 0x7c,0x00,0x00,0x02,0x00,0xf4,0x04,0xd9,0x03,0x7e, + 0x06,0x21,0x00,0x09,0x00,0x13,0x00,0x00,0x01,0x15, + 0x0e,0x01,0x07,0x23,0x35,0x3e,0x01,0x37,0x21,0x15, + 0x0e,0x01,0x07,0x23,0x35,0x3e,0x01,0x37,0x02,0x4b, + 0x24,0x9d,0x45,0x51,0x2c,0x67,0x18,0x01,0xdf,0x20, + 0x9a,0x4c,0x51,0x2c,0x67,0x18,0x06,0x21,0x12,0x42, + 0xb8,0x3c,0x17,0x3b,0xbe,0x38,0x12,0x3e,0xb4,0x44, + 0x17,0x3b,0xbe,0x38,0x00,0x02,0xff,0xba,0xfd,0xd4, + 0x00,0x49,0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x00, + 0x15,0x32,0x14,0x23,0x22,0x34,0x13,0x32,0x14,0x23, + 0x22,0x34,0x49,0x49,0x46,0x46,0x49,0x49,0x46,0x50, + 0xad,0xad,0xfe,0xd1,0xad,0xad,0x00,0x00,0x00,0x05, + 0xfe,0x70,0xfd,0xd4,0x01,0x6e,0xff,0xb0,0x00,0x05, + 0x00,0x0b,0x00,0x11,0x00,0x17,0x00,0x1d,0x00,0x00, + 0x05,0x32,0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23, + 0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34,0x01,0x32, + 0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34, + 0xfe,0xb6,0x49,0x49,0x46,0x01,0x90,0x49,0x49,0x46, + 0x01,0x6b,0x49,0x49,0x46,0xfe,0x7b,0x49,0x49,0x46, + 0x02,0x11,0x49,0x49,0x46,0x50,0xad,0xad,0xad,0xad, + 0xad,0xad,0xfe,0xd1,0xad,0xad,0xad,0xad,0x00,0x00, + 0x00,0x03,0xfe,0xb6,0xfd,0xd4,0x01,0x49,0xff,0xb0, + 0x00,0x05,0x00,0x09,0x00,0x0f,0x00,0x00,0x05,0x32, + 0x14,0x23,0x22,0x34,0x07,0x21,0x35,0x21,0x13,0x32, + 0x14,0x23,0x22,0x34,0x01,0x00,0x49,0x49,0x46,0x6a, + 0xfe,0x66,0x01,0x9a,0xb0,0x49,0x49,0x46,0x50,0xad, + 0xad,0x7f,0x52,0xfe,0xfe,0xad,0xad,0x00,0x00,0x00, + 0x00,0x03,0xfe,0xbb,0xfd,0xd4,0x01,0x4e,0xff,0xb0, + 0x00,0x05,0x00,0x0d,0x00,0x13,0x00,0x00,0x05,0x32, + 0x14,0x23,0x22,0x34,0x07,0x23,0x15,0x23,0x35,0x23, + 0x35,0x21,0x13,0x32,0x14,0x23,0x22,0x34,0x01,0x05, + 0x49,0x49,0x46,0x6a,0xa4,0x52,0xa4,0x01,0x9a,0xb0, + 0x49,0x49,0x46,0x50,0xad,0xad,0x7f,0xe8,0xe8,0x52, + 0xfe,0xfe,0xad,0xad,0x00,0x01,0xff,0xb9,0xff,0x03, + 0x00,0x48,0xff,0xb0,0x00,0x05,0x00,0x00,0x07,0x32, + 0x14,0x23,0x22,0x34,0x01,0x49,0x49,0x46,0x50,0xad, + 0xad,0x00,0x00,0x02,0xff,0x14,0xff,0x03,0x00,0xed, + 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x00,0x07,0x32, + 0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34, + 0xa6,0x49,0x49,0x46,0x01,0x90,0x49,0x49,0x46,0x50, + 0xad,0xad,0xad,0xad,0x00,0x00,0x00,0x03,0xff,0x16, + 0xfd,0xd4,0x00,0xef,0xff,0xb0,0x00,0x05,0x00,0x0b, + 0x00,0x11,0x00,0x00,0x07,0x32,0x14,0x23,0x22,0x34, + 0x21,0x32,0x14,0x23,0x22,0x34,0x03,0x32,0x14,0x23, + 0x22,0x34,0xa4,0x49,0x49,0x46,0x01,0x90,0x49,0x49, + 0x46,0x60,0x49,0x49,0x46,0x50,0xad,0xad,0xad,0xad, + 0xfe,0xd1,0xad,0xad,0x00,0x00,0x00,0x01,0xff,0x34, + 0xff,0x3a,0x00,0xce,0xff,0x8c,0x00,0x03,0x00,0x00, + 0x17,0x21,0x35,0x21,0xce,0xfe,0x66,0x01,0x9a,0xc6, + 0x52,0x00,0x00,0x00,0x00,0x01,0xff,0x2f,0xfe,0x52, + 0x00,0xc9,0xff,0x8c,0x00,0x07,0x00,0x00,0x17,0x23, + 0x15,0x23,0x35,0x23,0x35,0x21,0xc9,0xa4,0x52,0xa4, + 0x01,0x9a,0xc6,0xe8,0xe8,0x52,0x00,0x01,0xff,0xb9, + 0x05,0x82,0x00,0x48,0x06,0x2f,0x00,0x05,0x00,0x00, + 0x03,0x32,0x14,0x23,0x22,0x34,0x01,0x49,0x49,0x46, + 0x06,0x2f,0xad,0xad,0x00,0x01,0xff,0xb9,0x05,0x82, + 0x00,0x48,0x06,0x2f,0x00,0x05,0x00,0x00,0x03,0x32, + 0x14,0x23,0x22,0x34,0x01,0x49,0x49,0x46,0x06,0x2f, + 0xad,0xad,0x00,0x03,0xff,0x6d,0xfd,0xd4,0x01,0x46, + 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x11,0x00,0x00, + 0x07,0x32,0x14,0x23,0x22,0x34,0x17,0x32,0x14,0x23, + 0x22,0x34,0x17,0x32,0x14,0x23,0x22,0x34,0x4d,0x49, + 0x49,0x46,0xea,0x49,0x49,0x46,0xec,0x49,0x49,0x46, + 0x50,0xad,0xad,0x97,0xad,0xad,0x98,0xad,0xad,0x00, + 0x00,0x00,0x00,0x01,0xff,0xba,0x02,0x73,0x00,0x49, + 0x03,0x20,0x00,0x05,0x00,0x00,0x11,0x32,0x14,0x23, + 0x22,0x34,0x49,0x49,0x46,0x03,0x20,0xad,0xad,0x00, + 0x00,0x01,0xff,0xcd,0xfe,0x03,0x00,0x34,0xff,0x63, + 0x00,0x03,0x00,0x00,0x13,0x23,0x11,0x33,0x34,0x67, + 0x67,0xfe,0x03,0x01,0x60,0x00,0x00,0x00,0x00,0x01, + 0x00,0x3b,0x04,0x78,0x01,0xf4,0x05,0x09,0x00,0x03, + 0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xf4,0xfe,0x47, + 0x01,0xb9,0x04,0x78,0x91,0x00,0x00,0x01,0xff,0xba, + 0x05,0x82,0x00,0x49,0x06,0x2f,0x00,0x05,0x00,0x00, + 0x11,0x32,0x14,0x23,0x22,0x34,0x49,0x49,0x46,0x06, + 0x2f,0xad,0xad,0x00,0x00,0x01,0xff,0xba,0x05,0x6e, + 0x00,0x49,0x06,0x1b,0x00,0x05,0x00,0x00,0x11,0x32, + 0x14,0x23,0x22,0x34,0x49,0x49,0x46,0x06,0x1b,0xad, + 0xad,0x00,0x00,0x01,0xff,0x34,0xfe,0x50,0x00,0xce, + 0xff,0x9e,0x00,0x07,0x00,0x00,0x17,0x23,0x15,0x23, + 0x35,0x23,0x35,0x21,0xce,0xa1,0x5d,0x9c,0x01,0x9a, + 0xc6,0xea,0xea,0x64,0x00,0x01,0x00,0x44,0x00,0x00, + 0x03,0x13,0x05,0x0a,0x00,0x1d,0x00,0x00,0x01,0x11, + 0x14,0x06,0x07,0x06,0x07,0x16,0x12,0x17,0x23,0x01, + 0x0e,0x01,0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x37, + 0x03,0x33,0x13,0x17,0x3e,0x01,0x35,0x11,0x03,0x0f, + 0x0c,0x12,0x26,0x79,0x23,0x84,0x1a,0xab,0xfe,0xd8, + 0x37,0x28,0x95,0x58,0x28,0x3c,0xc4,0xaa,0xc3,0x69, + 0x38,0x28,0x05,0x0a,0xfe,0x2d,0x3c,0x5e,0x37,0x73, + 0x34,0x53,0xfe,0xd1,0x3d,0x02,0xce,0x28,0x8f,0x76, + 0xfe,0x5f,0x01,0xc7,0xd6,0x65,0x2d,0x1c,0x01,0xbf, + 0xfe,0x19,0xe7,0x24,0x85,0x78,0x01,0xad,0x00,0x01, + 0x00,0x5d,0x00,0x00,0x03,0x0a,0x05,0x1e,0x00,0x15, + 0x00,0x00,0x13,0x36,0x32,0x1e,0x03,0x15,0x11,0x33, + 0x15,0x21,0x35,0x21,0x11,0x34,0x27,0x26,0x23,0x22, + 0x0f,0x01,0x5d,0x6b,0xcf,0x80,0x4f,0x2e,0x10,0x66, + 0xfd,0x54,0x01,0xae,0x5c,0x2d,0x43,0x7d,0x4b,0x1b, + 0x05,0x12,0x0c,0x24,0x3e,0x66,0x71,0x4f,0xfc,0xe9, + 0x7f,0x7f,0x03,0x17,0xca,0x28,0x14,0x0a,0x03,0x00, + 0x00,0x01,0x00,0x59,0xff,0xf7,0x02,0x3a,0x05,0x1e, + 0x00,0x22,0x00,0x00,0x21,0x27,0x23,0x07,0x0e,0x03, + 0x07,0x06,0x23,0x22,0x27,0x37,0x14,0x16,0x33,0x32, + 0x36,0x35,0x11,0x34,0x26,0x23,0x22,0x07,0x35,0x36, + 0x32,0x1e,0x03,0x15,0x11,0x01,0xc5,0x15,0x0a,0x0a, + 0x02,0x19,0x15,0x2b,0x17,0x3f,0x47,0x25,0x26,0x13, + 0x31,0x0f,0x84,0x73,0x38,0x54,0x26,0x47,0x43,0x82, + 0x66,0x3a,0x21,0x0a,0xcc,0x1e,0x06,0x3a,0x1c,0x2f, + 0x0c,0x20,0x0a,0x91,0x03,0x08,0xbd,0xbf,0x01,0xbb, + 0x72,0x6a,0x13,0x85,0x12,0x27,0x3d,0x61,0x5c,0x3f, + 0xfc,0x42,0x00,0x00,0x00,0x01,0x00,0x14,0x00,0x00, + 0x02,0xc2,0x05,0x0a,0x00,0x0e,0x00,0x00,0x01,0x15, + 0x06,0x15,0x11,0x23,0x11,0x34,0x36,0x37,0x36,0x3f, + 0x01,0x21,0x35,0x02,0xc2,0xc2,0x97,0x1d,0x14,0x2a, + 0x22,0x0e,0xfe,0x20,0x05,0x0a,0x74,0x46,0xd4,0xfc, + 0x84,0x03,0x7e,0x3a,0x61,0x1d,0x3b,0x11,0x08,0x80, + 0x00,0x02,0x00,0x86,0x00,0x00,0x03,0x3c,0x05,0x1e, + 0x00,0x0e,0x00,0x12,0x00,0x00,0x01,0x32,0x16,0x15, + 0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07,0x35,0x36, + 0x03,0x23,0x11,0x33,0x01,0xbb,0xd5,0xac,0x99,0x19, + 0x3e,0x57,0xb2,0xbd,0xa3,0x0b,0x98,0x98,0x05,0x1e, + 0xa9,0xdd,0xfc,0x68,0x03,0x98,0x52,0x66,0x38,0x14, + 0x1b,0x81,0x1c,0xfa,0xe2,0x03,0x30,0x00,0x00,0x01, + 0x00,0x86,0x00,0x00,0x01,0x1d,0x05,0x0a,0x00,0x03, + 0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x1d,0x97,0x97, + 0x05,0x0a,0x00,0x01,0x00,0x81,0x00,0x00,0x01,0xc2, + 0x05,0x0a,0x00,0x0e,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x06,0x15,0x11,0x23,0x11,0x34,0x12,0x37,0x23, + 0x35,0x01,0xc2,0x32,0x47,0x07,0x03,0x97,0x50,0x43, + 0xba,0x05,0x0a,0x78,0x37,0xd1,0xbe,0x40,0x14,0xfd, + 0x88,0x02,0x2b,0xd1,0x01,0x35,0x59,0x80,0x00,0x01, + 0x00,0x86,0x00,0x00,0x03,0x3c,0x05,0x1e,0x00,0x13, + 0x00,0x00,0x33,0x11,0x32,0x36,0x37,0x36,0x33,0x32, + 0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07, + 0x11,0x86,0x04,0x5b,0x20,0x69,0x4d,0xd5,0xac,0x99, + 0x19,0x3e,0x57,0x7f,0x58,0x05,0x02,0x0d,0x03,0x0c, + 0xa9,0xdd,0xfc,0x68,0x03,0x98,0x52,0x66,0x38,0x14, + 0x0b,0xfb,0x6f,0x00,0x00,0x00,0x00,0x01,0x00,0x5f, + 0xff,0xec,0x03,0x4f,0x05,0x1e,0x00,0x20,0x00,0x00, + 0x01,0x32,0x17,0x16,0x11,0x10,0x07,0x06,0x23,0x22, + 0x27,0x26,0x19,0x01,0x33,0x11,0x10,0x17,0x1e,0x01, + 0x32,0x36,0x37,0x36,0x11,0x10,0x27,0x2e,0x01,0x22, + 0x07,0x35,0x36,0x01,0xe2,0x7c,0x53,0x9e,0x9f,0x5b, + 0x7d,0x7e,0x5b,0xa0,0x9c,0x41,0x20,0x4c,0x60,0x4b, + 0x1f,0x41,0x41,0x1f,0x4c,0x55,0x2f,0x34,0x05,0x1e, + 0x54,0xa1,0xfe,0x5c,0xfe,0x61,0x9f,0x5b,0x5b,0xa0, + 0x01,0x9e,0x02,0x84,0xfd,0x7c,0xfe,0xcc,0x77,0x3a, + 0x32,0x32,0x3a,0x78,0x01,0x33,0x01,0x31,0x7a,0x3a, + 0x32,0x0a,0x81,0x0b,0x00,0x01,0x00,0x83,0x01,0xd2, + 0x01,0x1a,0x05,0x0a,0x00,0x05,0x00,0x00,0x01,0x06, + 0x07,0x23,0x11,0x33,0x01,0x1a,0x6d,0x03,0x27,0x97, + 0x02,0x71,0x9b,0x04,0x03,0x38,0x00,0x01,0x00,0x2d, + 0xfe,0x14,0x02,0x56,0x05,0x1e,0x00,0x0e,0x00,0x00, + 0x13,0x36,0x32,0x1e,0x01,0x17,0x16,0x15,0x11,0x23, + 0x11,0x10,0x23,0x22,0x07,0x2d,0x66,0xac,0x7f,0x51, + 0x19,0x2e,0x99,0xd9,0x5b,0x5c,0x04,0xfc,0x22,0x3d, + 0x67,0x4c,0x88,0xd0,0xfb,0x3e,0x04,0xc2,0x01,0xc0, + 0x28,0x00,0x00,0x01,0x00,0x2d,0xff,0xec,0x02,0x56, + 0x05,0x1e,0x00,0x1e,0x00,0x00,0x13,0x36,0x32,0x1e, + 0x01,0x17,0x16,0x1d,0x01,0x14,0x0e,0x03,0x22,0x27, + 0x35,0x1e,0x01,0x32,0x3e,0x02,0x37,0x36,0x3d,0x01, + 0x10,0x23,0x22,0x07,0x2d,0x66,0xac,0x7f,0x51,0x19, + 0x2e,0x10,0x31,0x4d,0x85,0xbe,0x54,0x4d,0x4b,0x4b, + 0x4b,0x2d,0x1e,0x06,0x0b,0xd7,0x51,0x66,0x04,0xfc, + 0x22,0x3d,0x67,0x4c,0x88,0xd0,0xc6,0x52,0x8e,0x96, + 0x6a,0x44,0x1c,0x89,0x1a,0x07,0x2c,0x4d,0x53,0x34, + 0x55,0x4b,0xc6,0x01,0xc0,0x27,0x00,0x00,0x00,0x01, + 0x00,0x2c,0x00,0x00,0x02,0x81,0x06,0x1c,0x00,0x0f, + 0x00,0x00,0x13,0x21,0x15,0x06,0x02,0x07,0x06,0x03, + 0x23,0x36,0x12,0x37,0x13,0x21,0x11,0x33,0xc3,0x01, + 0xbe,0x1d,0x6c,0x18,0x19,0x46,0x96,0x09,0x4a,0x0a, + 0xa6,0xfe,0x3e,0x97,0x05,0x0e,0x86,0x75,0xfe,0x46, + 0x62,0x88,0xfe,0x91,0x34,0x01,0x82,0x3a,0x02,0x99, + 0x01,0x93,0x00,0x02,0x00,0x86,0x00,0x00,0x03,0x3c, + 0x05,0x1e,0x00,0x08,0x00,0x11,0x00,0x00,0x33,0x11, + 0x36,0x20,0x1e,0x02,0x15,0x11,0x27,0x11,0x34,0x2e, + 0x02,0x22,0x07,0x11,0x86,0xa1,0x01,0x0b,0x90,0x5a, + 0x20,0x98,0x13,0x3c,0x57,0x90,0x50,0x05,0x07,0x17, + 0x22,0x5b,0x8d,0x73,0xfc,0x5f,0x7f,0x03,0x22,0x55, + 0x5f,0x38,0x10,0x0a,0xfb,0xec,0x00,0x01,0x00,0x35, + 0x00,0x00,0x03,0x24,0x05,0x1e,0x00,0x2b,0x00,0x00, + 0x00,0x32,0x1e,0x03,0x17,0x16,0x15,0x11,0x21,0x35, + 0x33,0x11,0x34,0x27,0x26,0x27,0x26,0x22,0x06,0x07, + 0x06,0x0f,0x01,0x03,0x23,0x13,0x3e,0x01,0x2e,0x04, + 0x35,0x33,0x1e,0x01,0x17,0x33,0x3e,0x02,0x01,0xee, + 0x66,0x52,0x35,0x27,0x14,0x06,0x08,0xfe,0x85,0xe4, + 0x13,0x18,0x27,0x18,0x4f,0x50,0x18,0x30,0x11,0x07, + 0x57,0x98,0x4d,0x0a,0x01,0x08,0x0b,0x12,0x0a,0x12, + 0x97,0x06,0x22,0x06,0x09,0x09,0x37,0x37,0x05,0x1e, + 0x21,0x32,0x51,0x4b,0x35,0x52,0x65,0xfc,0xbd,0x7f, + 0x02,0xc4,0xb0,0x3b,0x4a,0x15,0x0d,0x2c,0x20,0x40, + 0x35,0x16,0xfc,0x3d,0x03,0x55,0x73,0x4d,0x3b,0x2f, + 0x3c,0x1f,0x2f,0x01,0x0f,0x6c,0x1b,0x16,0x42,0x2d, + 0x00,0x00,0x00,0x01,0x00,0x58,0xfe,0x14,0x01,0x24, + 0x05,0x0a,0x00,0x0a,0x00,0x00,0x01,0x11,0x23,0x11, + 0x34,0x26,0x2f,0x01,0x33,0x1e,0x01,0x01,0x24,0x98, + 0x1a,0x0d,0x0d,0x99,0x14,0x1f,0x03,0x6e,0xfa,0xa6, + 0x05,0x5a,0x62,0xce,0x36,0x36,0x45,0xf3,0x00,0x00, + 0x00,0x01,0x00,0x28,0x00,0x00,0x01,0xe9,0x05,0x1e, + 0x00,0x1a,0x00,0x00,0x13,0x36,0x32,0x1e,0x03,0x17, + 0x16,0x15,0x11,0x14,0x06,0x0f,0x01,0x21,0x35,0x21, + 0x36,0x35,0x11,0x34,0x27,0x26,0x23,0x22,0x07,0x5b, + 0x4a,0x68,0x54,0x39,0x28,0x17,0x07,0x09,0x15,0x0a, + 0x0b,0xfe,0x69,0x01,0x12,0x18,0x18,0x1d,0x57,0x24, + 0x47,0x05,0x0d,0x11,0x15,0x22,0x3b,0x3a,0x2c,0x40, + 0x6d,0xfd,0xbb,0x4c,0xaa,0x2f,0x2f,0x7f,0x53,0x82, + 0x02,0x88,0x53,0x31,0x3a,0x11,0x00,0x00,0x00,0x02, + 0x00,0x57,0xff,0xec,0x03,0x46,0x05,0x1e,0x00,0x15, + 0x00,0x26,0x00,0x00,0x01,0x32,0x17,0x16,0x17,0x16, + 0x10,0x0e,0x01,0x07,0x06,0x23,0x22,0x27,0x26,0x02, + 0x35,0x10,0x37,0x07,0x35,0x36,0x0e,0x01,0x10,0x1e, + 0x02,0x32,0x36,0x37,0x36,0x11,0x10,0x27,0x2e,0x01, + 0x23,0x07,0x01,0xce,0x7e,0x5b,0x64,0x27,0x14,0x29, + 0x45,0x31,0x5b,0x7e,0x9d,0x67,0x36,0x3d,0x92,0x80, + 0xc9,0x06,0x39,0x21,0x3f,0x4b,0x60,0x4b,0x1f,0x42, + 0x5a,0x1d,0x3f,0x26,0x56,0x05,0x1e,0x5b,0x64,0xd6, + 0x73,0xfe,0xde,0xe6,0x96,0x31,0x5b,0x90,0x4b,0x01, + 0x0a,0xb4,0x01,0x4d,0xbf,0x07,0x81,0x13,0xdb,0xfa, + 0xfe,0xa2,0xd7,0x74,0x31,0x31,0x3a,0x79,0x01,0x32, + 0x01,0x5e,0x75,0x25,0x1d,0x05,0x00,0x01,0x00,0x41, + 0xff,0xcc,0x03,0x54,0x05,0x0a,0x00,0x16,0x00,0x00, + 0x01,0x13,0x36,0x12,0x37,0x36,0x12,0x37,0x33,0x03, + 0x06,0x07,0x06,0x07,0x06,0x07,0x06,0x07,0x35,0x36, + 0x37,0x03,0x33,0x01,0x59,0x5d,0x5d,0x5d,0x15,0x0a, + 0x24,0x09,0x98,0x37,0x16,0x1a,0x3e,0xa9,0x51,0x6b, + 0x45,0xc4,0xc5,0x3c,0xff,0x98,0x02,0xc2,0xfd,0xe9, + 0x3d,0x01,0x06,0xd4,0x61,0x01,0x85,0x61,0xfd,0xc7, + 0xe2,0x65,0xef,0x60,0x2d,0x12,0x0c,0x23,0x80,0x20, + 0x0e,0x04,0x90,0x00,0x00,0x01,0x00,0x50,0xfe,0x14, + 0x03,0x2f,0x05,0x1e,0x00,0x1d,0x00,0x00,0x01,0x22, + 0x26,0x10,0x36,0x33,0x32,0x17,0x16,0x17,0x16,0x15, + 0x11,0x23,0x11,0x10,0x27,0x2e,0x01,0x22,0x06,0x07, + 0x06,0x15,0x10,0x17,0x32,0x17,0x07,0x22,0x01,0x9c, + 0x99,0xb3,0xca,0x9d,0x7e,0x5b,0x64,0x26,0x15,0x98, + 0x43,0x20,0x4c,0x69,0x56,0x17,0x2d,0xc0,0x06,0x10, + 0x1c,0x01,0x01,0xb4,0xd3,0x01,0x9f,0xf8,0x5b,0x64, + 0xd6,0x73,0x91,0xfb,0x8f,0x04,0x71,0x01,0x32,0x79, + 0x39,0x31,0x43,0x33,0x65,0x63,0xfe,0xdc,0x0b,0x02, + 0x77,0x00,0x00,0x00,0x00,0x01,0x00,0x51,0xff,0xec, + 0x03,0x2f,0x05,0x1e,0x00,0x26,0x00,0x00,0x12,0x26, + 0x10,0x36,0x33,0x32,0x17,0x16,0x17,0x16,0x10,0x0e, + 0x01,0x07,0x06,0x23,0x22,0x2f,0x01,0x35,0x16,0x33, + 0x32,0x11,0x10,0x27,0x2e,0x01,0x22,0x06,0x07,0x06, + 0x15,0x14,0x16,0x1f,0x01,0x07,0x27,0xf9,0xa8,0xca, + 0x9d,0x7e,0x5a,0x65,0x25,0x15,0x2b,0x49,0x33,0x5d, + 0x7f,0x76,0x64,0x20,0x85,0x75,0xe7,0x41,0x1f,0x4a, + 0x69,0x57,0x17,0x2d,0x59,0x67,0x16,0x1b,0x15,0x01, + 0xbb,0xd5,0x01,0x97,0xf7,0x5b,0x65,0xd5,0x73,0xfe, + 0xde,0xe6,0x95,0x31,0x5c,0x12,0x05,0x85,0x18,0x02, + 0x15,0x01,0x35,0x76,0x39,0x31,0x44,0x34,0x67,0x62, + 0x8f,0x98,0x04,0x02,0x78,0x02,0x00,0x00,0x00,0x01, + 0x00,0x03,0xfe,0x14,0x02,0x98,0x05,0x0a,0x00,0x10, + 0x00,0x00,0x01,0x11,0x14,0x07,0x0e,0x01,0x07,0x11, + 0x23,0x11,0x03,0x33,0x13,0x3e,0x01,0x35,0x11,0x02, + 0x98,0x3c,0x20,0x7e,0x59,0x9c,0xc6,0xa6,0xbd,0x4e, + 0x4d,0x05,0x0a,0xfe,0x39,0x86,0x6d,0x3a,0x50,0x0d, + 0xfc,0x5b,0x04,0x1a,0x02,0xdc,0xfd,0x29,0x1b,0x82, + 0x73,0x01,0xc7,0x00,0x00,0x00,0x00,0x01,0x00,0x3a, + 0x00,0x00,0x03,0x05,0x05,0x0a,0x00,0x11,0x00,0x00, + 0x29,0x01,0x35,0x21,0x17,0x03,0x01,0x33,0x01,0x36, + 0x1b,0x01,0x33,0x07,0x06,0x02,0x07,0x13,0x02,0xeb, + 0xfd,0x52,0x01,0x54,0xaf,0xb6,0xfe,0xb0,0x9f,0x01, + 0x10,0x4b,0x1c,0x1d,0x98,0x15,0x16,0x4f,0x60,0xc0, + 0x7f,0x04,0x01,0x65,0x03,0x2a,0xfd,0x53,0x52,0x01, + 0x2e,0x01,0x2c,0xd8,0xe8,0xfe,0xf6,0x5e,0xfe,0x6f, + 0x00,0x00,0x00,0x02,0x00,0x8d,0xfe,0x14,0x03,0x59, + 0x05,0x0a,0x00,0x1b,0x00,0x1f,0x00,0x00,0x25,0x15, + 0x23,0x35,0x34,0x3e,0x04,0x37,0x36,0x12,0x37,0x21, + 0x35,0x21,0x15,0x03,0x0e,0x06,0x07,0x06,0x01,0x23, + 0x11,0x33,0x02,0x38,0x95,0x0e,0x09,0x11,0x0c,0x17, + 0x06,0x1b,0x79,0x33,0xfd,0xd2,0x02,0xcc,0xa7,0x03, + 0x1c,0x0a,0x1a,0x0b,0x13,0x0a,0x05,0x0a,0xfe,0xed, + 0x97,0x97,0x16,0x16,0x16,0x2a,0x4e,0x31,0x49,0x31, + 0x57,0x18,0x5e,0x01,0xcc,0xb8,0x80,0x70,0xfd,0x9d, + 0x0b,0x68,0x24,0x60,0x2d,0x52,0x30,0x1f,0x34,0xfd, + 0xd6,0x04,0xe7,0x00,0x00,0x00,0x00,0x01,0x00,0x1d, + 0x00,0x00,0x02,0x4f,0x05,0x1e,0x00,0x0e,0x00,0x00, + 0x13,0x32,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, + 0x22,0x07,0x35,0x36,0xe4,0xd3,0x98,0x98,0x12,0x35, + 0x52,0x89,0x78,0x74,0x05,0x1e,0xa5,0xe1,0xfc,0x68, + 0x03,0x98,0x53,0x60,0x3d,0x14,0x0c,0x82,0x0c,0x00, + 0x00,0x00,0x00,0x01,0x00,0x40,0x00,0x00,0x04,0x2a, + 0x05,0x0a,0x00,0x1c,0x00,0x00,0x21,0x23,0x03,0x33, + 0x13,0x3e,0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06, + 0x07,0x13,0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03, + 0x02,0x07,0x0e,0x02,0x01,0x69,0xbe,0x6b,0x92,0x3b, + 0x66,0x61,0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3, + 0x1b,0x36,0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e, + 0xa8,0x33,0x7e,0xaf,0x05,0x0a,0xfd,0x3a,0x25,0xab, + 0xac,0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe, + 0xba,0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe, + 0xae,0xc3,0x3c,0x53,0x33,0x00,0x00,0x01,0x00,0x15, + 0xff,0xfa,0x03,0x30,0x05,0x1e,0x00,0x21,0x00,0x00, + 0x13,0x32,0x36,0x37,0x36,0x32,0x1e,0x03,0x15,0x11, + 0x23,0x11,0x34,0x27,0x26,0x22,0x07,0x11,0x14,0x06, + 0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x35,0x11, + 0x06,0x07,0x47,0x03,0x55,0x29,0x73,0xe2,0x88,0x4f, + 0x2e,0x0e,0x97,0x62,0x2f,0x82,0x51,0x4f,0x74,0x25, + 0x38,0x30,0x05,0x2d,0x26,0x19,0x3d,0x04,0xff,0x0c, + 0x05,0x0e,0x2c,0x45,0x6b,0x68,0x44,0xfc,0x6a,0x03, + 0x96,0xca,0x28,0x14,0x05,0xfc,0xca,0xcb,0x9c,0x0d, + 0x84,0x09,0x3f,0x3f,0x03,0x89,0x03,0x08,0x00,0x00, + 0x00,0x01,0x00,0x23,0x03,0x29,0x01,0x3a,0x05,0x0a, + 0x00,0x09,0x00,0x00,0x01,0x17,0x06,0x07,0x06,0x07, + 0x23,0x3e,0x01,0x37,0x01,0x2d,0x0d,0x08,0x1e,0x2c, + 0x58,0x6d,0x18,0x27,0x26,0x05,0x0a,0x15,0x1f,0x5c, + 0x85,0xcc,0x53,0xb4,0xda,0x00,0x00,0x00,0x00,0x02, + 0x00,0x23,0x03,0x29,0x02,0x87,0x05,0x0a,0x00,0x09, + 0x00,0x12,0x00,0x00,0x01,0x17,0x06,0x07,0x06,0x07, + 0x23,0x3e,0x01,0x37,0x05,0x06,0x03,0x23,0x36,0x37, + 0x36,0x37,0x33,0x01,0x2d,0x0d,0x08,0x1e,0x2c,0x58, + 0x6d,0x18,0x27,0x26,0x01,0xff,0x31,0x79,0x6e,0x37, + 0x04,0x19,0x11,0xa6,0x05,0x0a,0x15,0x1f,0x5c,0x85, + 0xcc,0x53,0xb4,0xda,0x15,0xb7,0xfe,0xeb,0xdc,0x13, + 0x7d,0x75,0x00,0x00,0x00,0x01,0x00,0x4e,0x01,0xe9, + 0x03,0xa1,0x02,0x67,0x00,0x03,0x00,0x00,0x01,0x21, + 0x35,0x21,0x03,0xa1,0xfc,0xad,0x03,0x53,0x01,0xe9, + 0x7e,0x00,0x00,0x01,0x00,0x4e,0x01,0xe9,0x07,0x17, + 0x02,0x67,0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21, + 0x07,0x17,0xf9,0x37,0x06,0xc9,0x01,0xe9,0x7e,0x00, + 0x00,0x01,0x00,0x23,0x03,0xd6,0x01,0x39,0x05,0xb6, + 0x00,0x06,0x00,0x00,0x13,0x33,0x02,0x07,0x23,0x27, + 0x36,0xcd,0x6c,0x4b,0x19,0xa4,0x0e,0x42,0x05,0xb6, + 0xfe,0xee,0xce,0x17,0xe9,0x00,0x00,0x01,0x00,0x23, + 0x03,0xd6,0x01,0x39,0x05,0xb6,0x00,0x06,0x00,0x00, + 0x01,0x17,0x06,0x07,0x23,0x36,0x37,0x01,0x2b,0x0e, + 0x39,0x70,0x6d,0x47,0x1d,0x05,0xb6,0x16,0xcf,0xfb, + 0xfc,0xe4,0x00,0x01,0x00,0x45,0xfe,0xf8,0x01,0x5c, + 0x00,0xd8,0x00,0x06,0x00,0x00,0x25,0x17,0x06,0x07, + 0x23,0x12,0x37,0x01,0x4e,0x0e,0x3f,0x6b,0x6d,0x47, + 0x1d,0xd8,0x17,0xde,0xeb,0x00,0xff,0xe1,0x00,0x02, + 0x00,0x23,0x03,0xd6,0x02,0x87,0x05,0xb6,0x00,0x06, + 0x00,0x0d,0x00,0x00,0x13,0x33,0x02,0x07,0x23,0x27, + 0x36,0x25,0x33,0x02,0x07,0x23,0x27,0x36,0xcd,0x6c, + 0x4b,0x19,0xa4,0x0e,0x42,0x01,0xb4,0x6e,0x49,0x1c, + 0xa4,0x0e,0x40,0x05,0xb6,0xfe,0xee,0xce,0x17,0xe9, + 0xe0,0xfe,0xf9,0xd9,0x17,0xdd,0x00,0x00,0x00,0x02, + 0x00,0x23,0x03,0xd6,0x02,0x87,0x05,0xb6,0x00,0x06, + 0x00,0x0d,0x00,0x00,0x01,0x17,0x06,0x07,0x23,0x36, + 0x37,0x21,0x17,0x06,0x07,0x23,0x36,0x37,0x01,0x2c, + 0x0e,0x3d,0x6c,0x6e,0x46,0x1f,0x01,0xf1,0x0e,0x3e, + 0x6c,0x6c,0x46,0x1e,0x05,0xb6,0x16,0xd7,0xf3,0xfb, + 0xe5,0x16,0xd8,0xf2,0xf9,0xe7,0x00,0x00,0x00,0x02, + 0x00,0x26,0xfe,0xf8,0x02,0x8a,0x00,0xd7,0x00,0x06, + 0x00,0x0d,0x00,0x00,0x25,0x17,0x06,0x07,0x23,0x36, + 0x37,0x21,0x17,0x06,0x03,0x23,0x12,0x37,0x01,0x2f, + 0x0e,0x3d,0x6c,0x6e,0x46,0x1f,0x01,0xf0,0x0f,0x37, + 0x73,0x6d,0x4a,0x1b,0xd7,0x17,0xd8,0xf0,0xfd,0xe2, + 0x17,0xc5,0xfe,0xfd,0x01,0x19,0xc6,0x00,0x00,0x01, + 0x00,0x78,0x00,0x00,0x03,0x2a,0x06,0x14,0x00,0x0b, + 0x00,0x00,0x01,0x25,0x15,0x25,0x13,0x23,0x13,0x05, + 0x35,0x05,0x03,0x33,0x01,0xf7,0x01,0x33,0xfe,0xcd, + 0x22,0xa5,0x22,0xfe,0xe2,0x01,0x1e,0x22,0xa5,0x04, + 0x6c,0x16,0x89,0x11,0xfb,0xf6,0x04,0x0a,0x11,0x89, + 0x16,0x01,0xa8,0x00,0x00,0x01,0x00,0x74,0x00,0x00, + 0x03,0x2d,0x06,0x14,0x00,0x15,0x00,0x00,0x01,0x25, + 0x15,0x25,0x13,0x03,0x25,0x15,0x25,0x13,0x23,0x13, + 0x05,0x35,0x05,0x03,0x13,0x05,0x35,0x05,0x03,0x33, + 0x01,0xfa,0x01,0x33,0xfe,0xcd,0x16,0x16,0x01,0x33, + 0xfe,0xcd,0x22,0xa5,0x22,0xfe,0xdb,0x01,0x25,0x17, + 0x17,0xfe,0xdb,0x01,0x25,0x22,0xa5,0x04,0x98,0x16, + 0x89,0x11,0xfe,0xdc,0xfe,0xcd,0x11,0x89,0x15,0xfe, + 0x84,0x01,0x7c,0x15,0x89,0x11,0x01,0x33,0x01,0x24, + 0x11,0x89,0x16,0x01,0x7c,0x00,0x00,0x01,0x00,0x91, + 0x01,0xe4,0x02,0x6a,0x03,0xf3,0x00,0x07,0x00,0x00, + 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x91,0x7a, + 0xe5,0x7a,0x7b,0xe3,0x7b,0x03,0x6d,0x86,0x87,0xff, + 0x89,0x89,0x00,0x03,0x00,0x7e,0xff,0xec,0x04,0xf6, + 0x00,0xe7,0x00,0x06,0x00,0x0e,0x00,0x15,0x00,0x00, + 0x17,0x22,0x34,0x32,0x15,0x14,0x06,0x25,0x32,0x16, + 0x14,0x06,0x23,0x22,0x34,0x20,0x32,0x15,0x14,0x06, + 0x23,0x22,0xe8,0x6a,0xd5,0x39,0x01,0xa0,0x32,0x39, + 0x3a,0x31,0x6b,0x01,0xd1,0xd6,0x3a,0x31,0x6b,0x14, + 0xfb,0x7d,0x3f,0x3f,0xfb,0x3e,0x7d,0x40,0xfb,0x7d, + 0x3e,0x40,0x00,0x00,0x00,0x07,0x00,0x53,0xff,0xed, + 0x06,0xf2,0x05,0xcb,0x00,0x07,0x00,0x0c,0x00,0x15, + 0x00,0x1e,0x00,0x26,0x00,0x30,0x00,0x39,0x00,0x00, + 0x12,0x36,0x32,0x16,0x10,0x06,0x22,0x26,0x01,0x33, + 0x02,0x01,0x23,0x03,0x22,0x06,0x10,0x16,0x32,0x36, + 0x35,0x10,0x01,0x32,0x16,0x10,0x06,0x22,0x26,0x35, + 0x10,0x04,0x36,0x32,0x16,0x10,0x06,0x22,0x26,0x01, + 0x22,0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10,0x21, + 0x22,0x06,0x10,0x16,0x32,0x36,0x35,0x10,0x53,0x74, + 0xe6,0x77,0x7a,0xe4,0x73,0x03,0x04,0x80,0x70,0xfe, + 0x6b,0x82,0x17,0x35,0x2e,0x2f,0x6b,0x31,0x02,0x4b, + 0x74,0x77,0x7b,0xe2,0x74,0x02,0x1c,0x74,0xe5,0x77, + 0x7a,0xe3,0x73,0xfe,0xc9,0x35,0x2e,0x2f,0x37,0x35, + 0x31,0x01,0xb3,0x34,0x2e,0x2f,0x6b,0x30,0x04,0xe1, + 0xea,0xe8,0xfe,0x41,0xef,0xea,0x02,0x97,0xfe,0xc5, + 0xfb,0x85,0x05,0x57,0xa4,0xfe,0x9e,0xa5,0xa6,0xb0, + 0x01,0x55,0xfe,0x2a,0xe8,0xfe,0x41,0xed,0xeb,0xdf, + 0x01,0xca,0xe9,0xe9,0xe7,0xfe,0x41,0xee,0xea,0x02, + 0x36,0xa4,0xfe,0x9f,0xa5,0xa8,0xae,0x01,0x54,0xa4, + 0xfe,0x9f,0xa5,0xa5,0xb1,0x01,0x54,0x00,0x00,0x00, + 0x00,0x01,0x00,0x4f,0x00,0x83,0x01,0xdf,0x03,0xaf, + 0x00,0x06,0x00,0x00,0x01,0x03,0x13,0x07,0x01,0x35, + 0x01,0x01,0xdf,0xdb,0xdb,0x6a,0xfe,0xda,0x01,0x26, + 0x03,0x73,0xfe,0xa7,0xfe,0xa6,0x3d,0x01,0x89,0x1a, + 0x01,0x89,0x00,0x00,0x00,0x01,0x00,0x4f,0x00,0x83, + 0x01,0xdf,0x03,0xaf,0x00,0x06,0x00,0x00,0x01,0x15, + 0x01,0x27,0x13,0x03,0x37,0x01,0xdf,0xfe,0xdb,0x6b, + 0xdb,0xdb,0x6b,0x02,0x26,0x1a,0xfe,0x77,0x3d,0x01, + 0x5a,0x01,0x59,0x3c,0x00,0x01,0xfe,0xbe,0x00,0x00, + 0x02,0x36,0x05,0xb6,0x00,0x03,0x00,0x00,0x2b,0x01, + 0x01,0x33,0xc1,0x81,0x02,0xf7,0x81,0x05,0xb6,0x00, + 0x00,0x00,0x00,0x02,0x00,0x8d,0x00,0x00,0x04,0x82, + 0x05,0x0a,0x00,0x18,0x00,0x2d,0x00,0x00,0x13,0x21, + 0x32,0x17,0x1e,0x04,0x15,0x30,0x11,0x23,0x11,0x34, + 0x2e,0x03,0x27,0x26,0x2b,0x01,0x11,0x23,0x01,0x11, + 0x10,0x07,0x0e,0x03,0x2b,0x01,0x11,0x33,0x11,0x33, + 0x32,0x37,0x36,0x37,0x36,0x35,0x11,0x8d,0x01,0x4e, + 0x93,0x66,0x29,0x38,0x1d,0x0e,0x02,0x93,0x10,0x10, + 0x1a,0x23,0x19,0x3c,0x42,0xb7,0x97,0x03,0xf5,0x39, + 0x17,0x53,0x72,0xa9,0x69,0xb9,0x97,0x22,0xbe,0x5e, + 0x56,0x17,0x0b,0x05,0x0a,0x32,0x14,0x52,0x3f,0x78, + 0x46,0x25,0xfd,0xf9,0x01,0xe0,0xa5,0x42,0x31,0x18, + 0x1a,0x05,0x0c,0xfb,0x7c,0x05,0x0a,0xfd,0xa7,0xfe, + 0xf4,0x8b,0x38,0x6f,0x47,0x2c,0x03,0xc0,0xfc,0xc5, + 0x5c,0x54,0xb8,0x53,0x71,0x02,0x59,0x00,0x00,0x01, + 0x00,0x24,0xff,0xec,0x03,0x37,0x05,0xcd,0x00,0x25, + 0x00,0x00,0x13,0x33,0x1a,0x01,0x33,0x32,0x17,0x07, + 0x26,0x23,0x22,0x03,0x21,0x15,0x21,0x07,0x17,0x21, + 0x15,0x21,0x12,0x33,0x32,0x37,0x15,0x06,0x23,0x20, + 0x03,0x23,0x35,0x33,0x26,0x3d,0x01,0x34,0x37,0x23, + 0x24,0x8a,0x18,0xdc,0xa3,0x84,0x6e,0x40,0x5a,0x52, + 0xd6,0x29,0x01,0x3b,0xfe,0xbd,0x02,0x02,0x01,0x1e, + 0xfe,0xea,0x27,0xe3,0x6f,0x60,0x5e,0x75,0xfe,0x92, + 0x36,0x8a,0x83,0x01,0x01,0x83,0x03,0x92,0x01,0x08, + 0x01,0x33,0x49,0x81,0x39,0xfe,0x56,0x6e,0x48,0x68, + 0x6d,0xfe,0x76,0x37,0x93,0x35,0x02,0x1b,0x6d,0x1e, + 0x3a,0x1a,0x29,0x15,0x00,0x02,0x00,0x0d,0x02,0xe5, + 0x05,0x0a,0x05,0xb6,0x00,0x07,0x00,0x18,0x00,0x00, + 0x01,0x23,0x11,0x23,0x11,0x23,0x35,0x21,0x01,0x23, + 0x11,0x37,0x23,0x03,0x23,0x03,0x23,0x17,0x11,0x23, + 0x11,0x33,0x1b,0x01,0x33,0x02,0x0f,0xcc,0x6c,0xca, + 0x02,0x02,0x02,0xfb,0x6c,0x05,0x07,0xc2,0x62,0xbd, + 0x08,0x06,0x68,0xa3,0xb7,0xbd,0xa2,0x05,0x53,0xfd, + 0x92,0x02,0x6e,0x63,0xfd,0x2f,0x01,0xa0,0xa5,0xfd, + 0xbb,0x02,0x48,0xc5,0xfe,0x7d,0x02,0xd1,0xfd,0xc9, + 0x02,0x37,0x00,0x03,0x00,0x16,0x00,0x00,0x03,0x26, + 0x06,0x1f,0x00,0x16,0x00,0x1e,0x00,0x22,0x00,0x00, + 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x0e, + 0x01,0x1d,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x23, + 0x35,0x36,0x37,0x00,0x36,0x32,0x16,0x14,0x06,0x22, + 0x26,0x13,0x23,0x11,0x33,0x9e,0x76,0x87,0x52,0x46, + 0x2d,0x33,0x2f,0x3f,0x31,0xaf,0xaf,0x96,0x88,0x19, + 0x6f,0x01,0xd5,0x32,0x52,0x2f,0x30,0x51,0x32,0xa5, + 0x98,0x98,0x04,0xa1,0xc7,0xb7,0x20,0x7e,0x19,0x02, + 0x6e,0x8c,0x58,0x7e,0xfc,0x38,0x03,0xc8,0x50,0x0b, + 0x2b,0x01,0x56,0x3b,0x3b,0x67,0x3b,0x3b,0xfa,0xc3, + 0x04,0x47,0x00,0x00,0x00,0x02,0x00,0x16,0x00,0x00, + 0x03,0x17,0x06,0x1f,0x00,0x16,0x00,0x1a,0x00,0x00, + 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x0e, + 0x01,0x1d,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x23, + 0x35,0x36,0x37,0x01,0x23,0x11,0x33,0x9e,0x76,0x87, + 0x52,0x46,0x2d,0x33,0x2f,0x3f,0x31,0xaf,0xaf,0x96, + 0x88,0x19,0x6f,0x02,0x79,0x98,0x98,0x04,0xa1,0xc7, + 0xb7,0x20,0x7e,0x19,0x02,0x6e,0x8c,0x58,0x7e,0xfc, + 0x38,0x03,0xc8,0x50,0x0b,0x2b,0xfb,0xb2,0x06,0x14, + 0x00,0x00,0x00,0x02,0x00,0x40,0x00,0x00,0x04,0x3c, + 0x06,0x06,0x00,0x05,0x00,0x22,0x00,0x00,0x01,0x32, + 0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33,0x13,0x3e, + 0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06,0x07,0x13, + 0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03,0x02,0x07, + 0x0e,0x02,0x03,0xf3,0x49,0x49,0x46,0xfd,0xbc,0xbe, + 0x6b,0x92,0x3b,0x66,0x61,0x0f,0x1d,0x8f,0x1d,0x10, + 0x2c,0x4b,0xd3,0x1b,0x36,0x90,0xde,0x7f,0x10,0x34, + 0x90,0x34,0x1e,0xa8,0x33,0x7e,0xaf,0x06,0x06,0xad, + 0xad,0xf9,0xfa,0x05,0x0a,0xfd,0x3a,0x25,0xab,0xac, + 0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe,0xba, + 0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe,0xae, + 0xc3,0x3c,0x53,0x33,0x00,0x00,0x00,0x02,0x00,0x25, + 0x00,0x00,0x04,0x2a,0x05,0xf2,0x00,0x05,0x00,0x22, + 0x00,0x00,0x13,0x32,0x14,0x23,0x22,0x34,0x01,0x23, + 0x03,0x33,0x13,0x3e,0x01,0x37,0x13,0x33,0x03,0x06, + 0x07,0x06,0x07,0x13,0x33,0x32,0x36,0x12,0x37,0x13, + 0x33,0x03,0x02,0x07,0x0e,0x02,0x6b,0x49,0x49,0x46, + 0x01,0x44,0xbe,0x6b,0x92,0x3b,0x66,0x61,0x0f,0x1d, + 0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b,0x36,0x90,0xde, + 0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8,0x33,0x7e,0xaf, + 0x05,0xf2,0xad,0xad,0xfa,0x0e,0x05,0x0a,0xfd,0x3a, + 0x25,0xab,0xac,0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2, + 0x33,0xfe,0xba,0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd, + 0xcd,0xfe,0xae,0xc3,0x3c,0x53,0x33,0x00,0x00,0x00, + 0x00,0x03,0x00,0x40,0x00,0x00,0x04,0x3c,0x06,0x06, + 0x00,0x05,0x00,0x22,0x00,0x28,0x00,0x00,0x01,0x32, + 0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33,0x13,0x3e, + 0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06,0x07,0x13, + 0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03,0x02,0x07, + 0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34,0x03,0xf3, + 0x49,0x49,0x46,0xfd,0xbc,0xbe,0x6b,0x92,0x3b,0x66, + 0x61,0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b, + 0x36,0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8, + 0x33,0x7e,0xaf,0x60,0x49,0x49,0x46,0x06,0x06,0xad, + 0xad,0xf9,0xfa,0x05,0x0a,0xfd,0x3a,0x25,0xab,0xac, + 0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe,0xba, + 0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe,0xae, + 0xc3,0x3c,0x53,0x33,0x02,0x08,0xad,0xad,0x00,0x00, + 0x00,0x03,0x00,0x25,0x00,0x00,0x04,0x2a,0x05,0xf2, + 0x00,0x05,0x00,0x22,0x00,0x28,0x00,0x00,0x13,0x32, + 0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33,0x13,0x3e, + 0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06,0x07,0x13, + 0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03,0x02,0x07, + 0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34,0x6b,0x49, + 0x49,0x46,0x01,0x44,0xbe,0x6b,0x92,0x3b,0x66,0x61, + 0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b,0x36, + 0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8,0x33, + 0x7e,0xaf,0x60,0x49,0x49,0x46,0x05,0xf2,0xad,0xad, + 0xfa,0x0e,0x05,0x0a,0xfd,0x3a,0x25,0xab,0xac,0x01, + 0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe,0xba,0x9b, + 0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe,0xae,0xc3, + 0x3c,0x53,0x33,0x02,0x08,0xad,0xad,0x00,0x00,0x00, + 0x00,0x02,0x00,0x44,0xfe,0xcc,0x03,0x13,0x05,0x0a, + 0x00,0x1d,0x00,0x21,0x00,0x00,0x01,0x11,0x14,0x06, + 0x07,0x06,0x07,0x16,0x12,0x17,0x23,0x01,0x0e,0x01, + 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x37,0x03,0x33, + 0x13,0x17,0x3e,0x01,0x35,0x11,0x13,0x21,0x35,0x21, + 0x03,0x0f,0x0c,0x12,0x26,0x79,0x23,0x84,0x1a,0xab, + 0xfe,0xd8,0x37,0x28,0x95,0x58,0x28,0x3c,0xc4,0xaa, + 0xc3,0x69,0x38,0x28,0x02,0xfe,0x66,0x01,0x9a,0x05, + 0x0a,0xfe,0x2d,0x3c,0x5e,0x37,0x73,0x34,0x53,0xfe, + 0xd1,0x3d,0x02,0xce,0x28,0x8f,0x76,0xfe,0x5f,0x01, + 0xc7,0xd6,0x65,0x2d,0x1c,0x01,0xbf,0xfe,0x19,0xe7, + 0x24,0x85,0x78,0x01,0xad,0xf9,0xc2,0x52,0x00,0x00, + 0x00,0x02,0x00,0x44,0xfd,0xe4,0x03,0x13,0x05,0x0a, + 0x00,0x1d,0x00,0x25,0x00,0x00,0x01,0x11,0x14,0x06, + 0x07,0x06,0x07,0x16,0x12,0x17,0x23,0x01,0x0e,0x01, + 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x37,0x03,0x33, + 0x13,0x17,0x3e,0x01,0x35,0x11,0x03,0x23,0x15,0x23, + 0x35,0x23,0x35,0x21,0x03,0x0f,0x0c,0x12,0x26,0x79, + 0x23,0x84,0x1a,0xab,0xfe,0xd8,0x37,0x28,0x95,0x58, + 0x28,0x3c,0xc4,0xaa,0xc3,0x69,0x38,0x28,0x03,0xa4, + 0x52,0xa4,0x01,0x9a,0x05,0x0a,0xfe,0x2d,0x3c,0x5e, + 0x37,0x73,0x34,0x53,0xfe,0xd1,0x3d,0x02,0xce,0x28, + 0x8f,0x76,0xfe,0x5f,0x01,0xc7,0xd6,0x65,0x2d,0x1c, + 0x01,0xbf,0xfe,0x19,0xe7,0x24,0x85,0x78,0x01,0xad, + 0xf9,0xc2,0xe8,0xe8,0x52,0x00,0x00,0x00,0x00,0x02, + 0x00,0x44,0x00,0x00,0x03,0x13,0x05,0x0a,0x00,0x1d, + 0x00,0x23,0x00,0x00,0x01,0x11,0x14,0x06,0x07,0x06, + 0x07,0x16,0x12,0x17,0x23,0x01,0x0e,0x01,0x15,0x11, + 0x23,0x11,0x34,0x37,0x36,0x37,0x03,0x33,0x13,0x17, + 0x3e,0x01,0x35,0x11,0x01,0x32,0x14,0x23,0x22,0x34, + 0x03,0x0f,0x0c,0x12,0x26,0x79,0x23,0x84,0x1a,0xab, + 0xfe,0xd8,0x37,0x28,0x95,0x58,0x28,0x3c,0xc4,0xaa, + 0xc3,0x69,0x38,0x28,0xfe,0xe7,0x49,0x49,0x46,0x05, + 0x0a,0xfe,0x2d,0x3c,0x5e,0x37,0x73,0x34,0x53,0xfe, + 0xd1,0x3d,0x02,0xce,0x28,0x8f,0x76,0xfe,0x5f,0x01, + 0xc7,0xd6,0x65,0x2d,0x1c,0x01,0xbf,0xfe,0x19,0xe7, + 0x24,0x85,0x78,0x01,0xad,0xfc,0x3d,0xad,0xad,0x00, + 0x00,0x00,0x00,0x02,0x00,0x5d,0x00,0x00,0x03,0x0a, + 0x05,0x1e,0x00,0x15,0x00,0x1b,0x00,0x00,0x13,0x36, + 0x32,0x1e,0x03,0x15,0x11,0x33,0x15,0x21,0x35,0x21, + 0x11,0x34,0x27,0x26,0x23,0x22,0x0f,0x01,0x13,0x32, + 0x14,0x23,0x22,0x34,0x5d,0x6b,0xcf,0x80,0x4f,0x2e, + 0x10,0x66,0xfd,0x54,0x01,0xae,0x5c,0x2d,0x43,0x7d, + 0x4b,0x1b,0xc8,0x49,0x49,0x46,0x05,0x12,0x0c,0x24, + 0x3e,0x66,0x71,0x4f,0xfc,0xe9,0x7f,0x7f,0x03,0x17, + 0xca,0x28,0x14,0x0a,0x03,0xfe,0x4d,0xad,0xad,0x00, + 0x00,0x02,0x00,0x59,0xff,0xf7,0x02,0x3a,0x05,0x1e, + 0x00,0x22,0x00,0x28,0x00,0x00,0x21,0x27,0x23,0x07, + 0x0e,0x03,0x07,0x06,0x23,0x22,0x27,0x37,0x14,0x16, + 0x33,0x32,0x36,0x35,0x11,0x34,0x26,0x23,0x22,0x07, + 0x35,0x36,0x32,0x1e,0x03,0x15,0x11,0x01,0x32,0x14, + 0x23,0x22,0x34,0x01,0xc5,0x15,0x0a,0x0a,0x02,0x19, + 0x15,0x2b,0x17,0x3f,0x47,0x25,0x26,0x13,0x31,0x0f, + 0x84,0x73,0x38,0x54,0x26,0x47,0x43,0x82,0x66,0x3a, + 0x21,0x0a,0xfe,0xbd,0x49,0x49,0x46,0xcc,0x1e,0x06, + 0x3a,0x1c,0x2f,0x0c,0x20,0x0a,0x91,0x03,0x08,0xbd, + 0xbf,0x01,0xbb,0x72,0x6a,0x13,0x85,0x12,0x27,0x3d, + 0x61,0x5c,0x3f,0xfc,0x42,0x02,0xdc,0xad,0xad,0x00, + 0x00,0x02,0x00,0x14,0x00,0x00,0x02,0xc2,0x05,0x0a, + 0x00,0x0e,0x00,0x14,0x00,0x00,0x01,0x15,0x06,0x15, + 0x11,0x23,0x11,0x34,0x36,0x37,0x36,0x3f,0x01,0x21, + 0x35,0x13,0x32,0x14,0x23,0x22,0x34,0x02,0xc2,0xc2, + 0x97,0x1d,0x14,0x2a,0x22,0x0e,0xfe,0x20,0xbb,0x49, + 0x49,0x46,0x05,0x0a,0x74,0x46,0xd4,0xfc,0x84,0x03, + 0x7e,0x3a,0x61,0x1d,0x3b,0x11,0x08,0x80,0xfd,0xd2, + 0xad,0xad,0x00,0x03,0x00,0x86,0x00,0x00,0x03,0x3c, + 0x05,0x1e,0x00,0x0e,0x00,0x12,0x00,0x18,0x00,0x00, + 0x01,0x32,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, + 0x22,0x07,0x35,0x36,0x03,0x11,0x33,0x11,0x13,0x32, + 0x14,0x23,0x22,0x34,0x01,0xbb,0xd5,0xac,0x99,0x19, + 0x3e,0x57,0xb2,0xbd,0xa3,0xa3,0x98,0xc0,0x49,0x49, + 0x46,0x05,0x1e,0xa9,0xdd,0xfc,0x68,0x03,0x98,0x52, + 0x66,0x38,0x14,0x1b,0x81,0x1c,0xfa,0xe2,0x03,0x30, + 0xfc,0xd0,0x02,0xdc,0xad,0xad,0x00,0x02,0xff,0xab, + 0x00,0x00,0x01,0x1d,0x05,0x0a,0x00,0x03,0x00,0x09, + 0x00,0x00,0x33,0x11,0x33,0x11,0x01,0x32,0x14,0x23, + 0x22,0x34,0x86,0x97,0xfe,0xd4,0x49,0x49,0x46,0x05, + 0x0a,0xfa,0xf6,0x02,0xdc,0xad,0xad,0x00,0x00,0x00, + 0x00,0x02,0xff,0xd5,0x00,0x00,0x01,0xc2,0x05,0x0a, + 0x00,0x0e,0x00,0x14,0x00,0x00,0x01,0x15,0x0e,0x01, + 0x07,0x06,0x15,0x11,0x23,0x11,0x34,0x12,0x37,0x23, + 0x35,0x03,0x32,0x14,0x23,0x22,0x34,0x01,0xc2,0x32, + 0x47,0x07,0x03,0x97,0x50,0x43,0xba,0x66,0x49,0x49, + 0x46,0x05,0x0a,0x78,0x37,0xd1,0xbe,0x40,0x14,0xfd, + 0x88,0x02,0x2b,0xd1,0x01,0x35,0x59,0x80,0xfd,0xd2, + 0xad,0xad,0x00,0x02,0x00,0x5f,0xff,0xec,0x03,0x4f, + 0x05,0x1e,0x00,0x20,0x00,0x26,0x00,0x00,0x01,0x32, + 0x17,0x16,0x11,0x10,0x07,0x06,0x23,0x22,0x27,0x26, + 0x19,0x01,0x33,0x11,0x10,0x17,0x1e,0x01,0x32,0x36, + 0x37,0x36,0x11,0x10,0x27,0x2e,0x01,0x22,0x07,0x35, + 0x36,0x13,0x32,0x14,0x23,0x22,0x34,0x01,0xe2,0x7c, + 0x53,0x9e,0x9f,0x5b,0x7d,0x7e,0x5b,0xa0,0x9c,0x41, + 0x20,0x4c,0x60,0x4b,0x1f,0x41,0x41,0x1f,0x4c,0x55, + 0x2f,0x34,0x1d,0x49,0x49,0x46,0x05,0x1e,0x54,0xa1, + 0xfe,0x5c,0xfe,0x61,0x9f,0x5b,0x5b,0xa0,0x01,0x9e, + 0x02,0x84,0xfd,0x7c,0xfe,0xcc,0x77,0x3a,0x32,0x32, + 0x3a,0x78,0x01,0x33,0x01,0x31,0x7a,0x3a,0x32,0x0a, + 0x81,0x0b,0xfd,0xbe,0xad,0xad,0x00,0x02,0xff,0xd6, + 0x01,0xd2,0x01,0x1a,0x05,0x0a,0x00,0x05,0x00,0x0b, + 0x00,0x00,0x01,0x06,0x07,0x23,0x11,0x33,0x03,0x32, + 0x14,0x23,0x22,0x34,0x01,0x1a,0x6d,0x03,0x27,0x97, + 0xfe,0x49,0x49,0x46,0x02,0x71,0x9b,0x04,0x03,0x38, + 0xfe,0xac,0xad,0xad,0x00,0x02,0x00,0x2d,0xfe,0x14, + 0x02,0x56,0x05,0x1e,0x00,0x0e,0x00,0x14,0x00,0x00, + 0x13,0x36,0x32,0x1e,0x01,0x17,0x16,0x15,0x11,0x23, + 0x11,0x10,0x23,0x22,0x07,0x13,0x32,0x14,0x23,0x22, + 0x34,0x2d,0x66,0xac,0x7f,0x51,0x19,0x2e,0x99,0xd9, + 0x5b,0x5c,0xbc,0x49,0x49,0x46,0x04,0xfc,0x22,0x3d, + 0x67,0x4c,0x88,0xd0,0xfb,0x3e,0x04,0xc2,0x01,0xc0, + 0x28,0xfe,0x6e,0xad,0xad,0x00,0x00,0x02,0x00,0x2d, + 0xff,0xec,0x02,0x56,0x05,0x1e,0x00,0x1e,0x00,0x24, + 0x00,0x00,0x13,0x36,0x32,0x1e,0x01,0x17,0x16,0x1d, + 0x01,0x14,0x0e,0x03,0x22,0x27,0x35,0x1e,0x01,0x32, + 0x3e,0x02,0x37,0x36,0x3d,0x01,0x10,0x23,0x22,0x07, + 0x13,0x32,0x14,0x23,0x22,0x34,0x2d,0x66,0xac,0x7f, + 0x51,0x19,0x2e,0x10,0x31,0x4d,0x85,0xbe,0x54,0x4d, + 0x4b,0x4b,0x4b,0x2d,0x1e,0x06,0x0b,0xd7,0x51,0x66, + 0xa8,0x49,0x49,0x46,0x04,0xfc,0x22,0x3d,0x67,0x4c, + 0x88,0xd0,0xc6,0x52,0x8e,0x96,0x6a,0x44,0x1c,0x89, + 0x1a,0x07,0x2c,0x4d,0x53,0x34,0x55,0x4b,0xc6,0x01, + 0xc0,0x27,0xfe,0x6d,0xad,0xad,0x00,0x00,0x00,0x02, + 0x00,0x2b,0x00,0x00,0x02,0x81,0x06,0x1c,0x00,0x0f, + 0x00,0x15,0x00,0x00,0x01,0x15,0x06,0x02,0x07,0x06, + 0x03,0x23,0x36,0x12,0x37,0x13,0x21,0x11,0x33,0x11, + 0x03,0x32,0x14,0x23,0x22,0x34,0x02,0x81,0x1d,0x6c, + 0x18,0x19,0x46,0x96,0x09,0x4a,0x0a,0xa6,0xfe,0x3e, + 0x97,0x52,0x49,0x49,0x46,0x05,0x0e,0x86,0x75,0xfe, + 0x46,0x62,0x88,0xfe,0x91,0x34,0x01,0x82,0x3a,0x02, + 0x99,0x01,0x93,0xfe,0xf2,0xfd,0xce,0xad,0xad,0x00, + 0x00,0x00,0x00,0x02,0x00,0x35,0x00,0x00,0x03,0x24, + 0x05,0x1e,0x00,0x2b,0x00,0x31,0x00,0x00,0x00,0x32, + 0x1e,0x03,0x17,0x16,0x15,0x11,0x21,0x35,0x33,0x11, + 0x34,0x27,0x26,0x27,0x26,0x22,0x06,0x07,0x06,0x0f, + 0x01,0x03,0x23,0x13,0x3e,0x01,0x2e,0x04,0x35,0x33, + 0x1e,0x01,0x17,0x33,0x3e,0x02,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0xee,0x66,0x52,0x35,0x27,0x14,0x06, + 0x08,0xfe,0x85,0xe4,0x13,0x18,0x27,0x18,0x4f,0x50, + 0x18,0x30,0x11,0x07,0x57,0x98,0x4d,0x0a,0x01,0x08, + 0x0b,0x12,0x0a,0x12,0x97,0x06,0x22,0x06,0x09,0x09, + 0x37,0x37,0x42,0x49,0x49,0x46,0x05,0x1e,0x21,0x32, + 0x51,0x4b,0x35,0x52,0x65,0xfc,0xbd,0x7f,0x02,0xc4, + 0xb0,0x3b,0x4a,0x15,0x0d,0x2c,0x20,0x40,0x35,0x16, + 0xfc,0x3d,0x03,0x55,0x73,0x4d,0x3b,0x2f,0x3c,0x1f, + 0x2f,0x01,0x0f,0x6c,0x1b,0x16,0x42,0x2d,0xfd,0xe3, + 0xad,0xad,0x00,0x00,0x00,0x02,0x00,0x28,0x00,0x00, + 0x01,0xe9,0x05,0x1e,0x00,0x1a,0x00,0x20,0x00,0x00, + 0x13,0x36,0x32,0x1e,0x03,0x17,0x16,0x15,0x11,0x14, + 0x06,0x0f,0x01,0x21,0x35,0x21,0x36,0x35,0x11,0x34, + 0x27,0x26,0x23,0x22,0x07,0x13,0x32,0x14,0x23,0x22, + 0x34,0x5b,0x4a,0x68,0x54,0x39,0x28,0x17,0x07,0x09, + 0x15,0x0a,0x0b,0xfe,0x69,0x01,0x12,0x18,0x18,0x1d, + 0x57,0x24,0x47,0x60,0x49,0x49,0x46,0x05,0x0d,0x11, + 0x15,0x22,0x3b,0x3a,0x2c,0x40,0x6d,0xfd,0xbb,0x4c, + 0xaa,0x2f,0x2f,0x7f,0x53,0x82,0x02,0x88,0x53,0x31, + 0x3a,0x11,0xfe,0x53,0xad,0xad,0x00,0x00,0x00,0x03, + 0x00,0x57,0xff,0xec,0x03,0x46,0x05,0x1e,0x00,0x15, + 0x00,0x26,0x00,0x2c,0x00,0x00,0x01,0x32,0x17,0x16, + 0x17,0x16,0x10,0x0e,0x01,0x07,0x06,0x23,0x22,0x27, + 0x26,0x02,0x35,0x10,0x37,0x07,0x35,0x36,0x0e,0x01, + 0x10,0x1e,0x02,0x32,0x36,0x37,0x36,0x11,0x10,0x27, + 0x2e,0x01,0x23,0x07,0x13,0x32,0x14,0x23,0x22,0x34, + 0x01,0xce,0x7e,0x5b,0x64,0x27,0x14,0x29,0x45,0x31, + 0x5b,0x7e,0x9d,0x67,0x36,0x3d,0x92,0x80,0xc9,0x06, + 0x39,0x21,0x3f,0x4b,0x60,0x4b,0x1f,0x42,0x5a,0x1d, + 0x3f,0x26,0x56,0x57,0x49,0x49,0x46,0x05,0x1e,0x5b, + 0x64,0xd6,0x73,0xfe,0xde,0xe6,0x96,0x31,0x5b,0x90, + 0x4b,0x01,0x0a,0xb4,0x01,0x4d,0xbf,0x07,0x81,0x13, + 0xdb,0xfa,0xfe,0xa2,0xd7,0x74,0x31,0x31,0x3a,0x79, + 0x01,0x32,0x01,0x5e,0x75,0x25,0x1d,0x05,0xfe,0x47, + 0xad,0xad,0x00,0x02,0x00,0x50,0xfe,0x14,0x03,0x2f, + 0x05,0x1e,0x00,0x1d,0x00,0x23,0x00,0x00,0x01,0x22, + 0x26,0x10,0x36,0x33,0x32,0x17,0x16,0x17,0x16,0x15, + 0x11,0x23,0x11,0x10,0x27,0x2e,0x01,0x22,0x06,0x07, + 0x06,0x15,0x10,0x17,0x32,0x17,0x07,0x22,0x13,0x32, + 0x14,0x23,0x22,0x34,0x01,0x9c,0x99,0xb3,0xca,0x9d, + 0x7e,0x5b,0x64,0x26,0x15,0x98,0x43,0x20,0x4c,0x69, + 0x56,0x17,0x2d,0xc0,0x06,0x10,0x1c,0x01,0x3a,0x49, + 0x49,0x46,0x01,0xb4,0xd3,0x01,0x9f,0xf8,0x5b,0x64, + 0xd6,0x73,0x91,0xfb,0x8f,0x04,0x71,0x01,0x32,0x79, + 0x39,0x31,0x43,0x33,0x65,0x63,0xfe,0xdc,0x0b,0x02, + 0x77,0x02,0x0c,0xad,0xad,0x00,0x00,0x00,0x00,0x02, + 0x00,0x51,0xff,0xec,0x03,0x2f,0x05,0x1e,0x00,0x26, + 0x00,0x2c,0x00,0x00,0x12,0x26,0x10,0x36,0x33,0x32, + 0x17,0x16,0x17,0x16,0x10,0x0e,0x01,0x07,0x06,0x23, + 0x22,0x2f,0x01,0x35,0x16,0x33,0x32,0x11,0x10,0x27, + 0x2e,0x01,0x22,0x06,0x07,0x06,0x15,0x14,0x16,0x1f, + 0x01,0x07,0x27,0x13,0x32,0x14,0x23,0x22,0x34,0xf9, + 0xa8,0xca,0x9d,0x7e,0x5a,0x65,0x25,0x15,0x2b,0x49, + 0x33,0x5d,0x7f,0x76,0x64,0x20,0x85,0x75,0xe7,0x41, + 0x1f,0x4a,0x69,0x57,0x17,0x2d,0x59,0x67,0x16,0x1b, + 0x15,0x39,0x49,0x49,0x46,0x01,0xbb,0xd5,0x01,0x97, + 0xf7,0x5b,0x65,0xd5,0x73,0xfe,0xde,0xe6,0x95,0x31, + 0x5c,0x12,0x05,0x85,0x18,0x02,0x15,0x01,0x35,0x76, + 0x39,0x31,0x44,0x34,0x67,0x62,0x8f,0x98,0x04,0x02, + 0x78,0x02,0x02,0x0a,0xad,0xad,0x00,0x00,0x00,0x02, + 0x00,0x3a,0x00,0x00,0x03,0x05,0x05,0x0a,0x00,0x11, + 0x00,0x17,0x00,0x00,0x29,0x01,0x35,0x21,0x17,0x03, + 0x01,0x33,0x01,0x36,0x1b,0x01,0x33,0x07,0x06,0x02, + 0x07,0x13,0x01,0x32,0x14,0x23,0x22,0x34,0x02,0xeb, + 0xfd,0x52,0x01,0x54,0xaf,0xb6,0xfe,0xb0,0x9f,0x01, + 0x10,0x4b,0x1c,0x1d,0x98,0x15,0x16,0x4f,0x60,0xc0, + 0xfd,0xbc,0x49,0x49,0x46,0x7f,0x04,0x01,0x65,0x03, + 0x2a,0xfd,0x53,0x52,0x01,0x2e,0x01,0x2c,0xd8,0xe8, + 0xfe,0xf6,0x5e,0xfe,0x6f,0x02,0x37,0xad,0xad,0x00, + 0x00,0x03,0x00,0x8d,0xfe,0x14,0x03,0x59,0x05,0x0a, + 0x00,0x1b,0x00,0x21,0x00,0x25,0x00,0x00,0x25,0x15, + 0x23,0x35,0x34,0x3e,0x04,0x37,0x36,0x12,0x37,0x21, + 0x35,0x21,0x15,0x03,0x0e,0x06,0x07,0x06,0x03,0x32, + 0x14,0x23,0x22,0x34,0x03,0x11,0x33,0x11,0x02,0x38, + 0x95,0x0e,0x09,0x11,0x0c,0x17,0x06,0x1b,0x79,0x33, + 0xfd,0xd2,0x02,0xcc,0xa7,0x03,0x1c,0x0a,0x1a,0x0b, + 0x13,0x0a,0x05,0x0a,0x99,0x49,0x49,0x46,0xcb,0x97, + 0x16,0x16,0x16,0x2a,0x4e,0x31,0x49,0x31,0x57,0x18, + 0x5e,0x01,0xcc,0xb8,0x80,0x70,0xfd,0x9d,0x0b,0x68, + 0x24,0x60,0x2d,0x52,0x30,0x1f,0x34,0x02,0xc4,0xad, + 0xad,0xfb,0x12,0x04,0xe7,0xfb,0x19,0x00,0x00,0x00, + 0x00,0x02,0x00,0x1d,0x00,0x00,0x02,0x4f,0x05,0x1e, + 0x00,0x0e,0x00,0x14,0x00,0x00,0x13,0x32,0x16,0x15, + 0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07,0x35,0x36, + 0x13,0x32,0x14,0x23,0x22,0x34,0xe4,0xd3,0x98,0x98, + 0x12,0x35,0x52,0x89,0x78,0x74,0x66,0x49,0x49,0x46, + 0x05,0x1e,0xa5,0xe1,0xfc,0x68,0x03,0x98,0x53,0x60, + 0x3d,0x14,0x0c,0x82,0x0c,0xfd,0xbe,0xad,0xad,0x00, + 0x00,0x00,0x00,0x02,0x00,0x40,0x00,0x00,0x04,0x2a, + 0x05,0x0a,0x00,0x1c,0x00,0x22,0x00,0x00,0x21,0x23, + 0x03,0x33,0x13,0x3e,0x01,0x37,0x13,0x33,0x03,0x06, + 0x07,0x06,0x07,0x13,0x33,0x32,0x36,0x12,0x37,0x13, + 0x33,0x03,0x02,0x07,0x0e,0x02,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0x69,0xbe,0x6b,0x92,0x3b,0x66,0x61, + 0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b,0x36, + 0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8,0x33, + 0x7e,0xaf,0x60,0x49,0x49,0x46,0x05,0x0a,0xfd,0x3a, + 0x25,0xab,0xac,0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2, + 0x33,0xfe,0xba,0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd, + 0xcd,0xfe,0xae,0xc3,0x3c,0x53,0x33,0x02,0x08,0xad, + 0xad,0x00,0x00,0x02,0x00,0x15,0xff,0xfa,0x03,0x30, + 0x05,0x1e,0x00,0x21,0x00,0x27,0x00,0x00,0x13,0x32, + 0x36,0x37,0x36,0x32,0x1e,0x03,0x15,0x11,0x23,0x11, + 0x34,0x27,0x26,0x22,0x07,0x11,0x14,0x06,0x23,0x22, + 0x27,0x35,0x16,0x33,0x32,0x36,0x35,0x11,0x06,0x07, + 0x01,0x32,0x14,0x23,0x22,0x34,0x47,0x03,0x55,0x29, + 0x73,0xe2,0x88,0x4f,0x2e,0x0e,0x97,0x62,0x2f,0x82, + 0x51,0x4f,0x74,0x25,0x38,0x30,0x05,0x2d,0x26,0x19, + 0x3d,0x01,0x93,0x49,0x49,0x46,0x04,0xff,0x0c,0x05, + 0x0e,0x2c,0x45,0x6b,0x68,0x44,0xfc,0x6a,0x03,0x96, + 0xca,0x28,0x14,0x05,0xfc,0xca,0xcb,0x9c,0x0d,0x84, + 0x09,0x3f,0x3f,0x03,0x89,0x03,0x08,0xfe,0x5e,0xad, + 0xad,0x00,0x00,0x02,0x00,0x64,0x00,0x00,0x01,0x1d, + 0x06,0x06,0x00,0x05,0x00,0x09,0x00,0x00,0x13,0x32, + 0x14,0x23,0x22,0x34,0x13,0x11,0x33,0x11,0xaa,0x49, + 0x49,0x46,0x22,0x97,0x06,0x06,0xad,0xad,0xf9,0xfa, + 0x05,0x0a,0xfa,0xf6,0x00,0x00,0x00,0x01,0xff,0x12, + 0x05,0xa9,0x00,0xe8,0x05,0xfc,0x00,0x03,0x00,0x00, + 0x13,0x21,0x35,0x21,0xe8,0xfe,0x2a,0x01,0xd6,0x05, + 0xa9,0x53,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xc6, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, + 0x00,0x24,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0x00,0x1a,0x00,0x6c,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x02,0x00,0x07,0x00,0x97,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x03,0x00,0x2a,0x00,0xf5,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x1a,0x01,0x56, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x3c, + 0x01,0xeb,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x06, + 0x00,0x1f,0x02,0x68,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x12,0x00,0x1d,0x02,0xc4,0x00,0x03,0x00,0x01, + 0x04,0x09,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x03, + 0x00,0x01,0x04,0x09,0x00,0x01,0x00,0x34,0x00,0x36, + 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x02,0x00,0x0e, + 0x00,0x87,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x03, + 0x00,0x54,0x00,0x9f,0x00,0x03,0x00,0x01,0x04,0x09, + 0x00,0x04,0x00,0x34,0x01,0x20,0x00,0x03,0x00,0x01, + 0x04,0x09,0x00,0x05,0x00,0x78,0x01,0x71,0x00,0x03, + 0x00,0x01,0x04,0x09,0x00,0x06,0x00,0x3e,0x02,0x28, + 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x12,0x00,0x3a, + 0x02,0x88,0x00,0x63,0x00,0x6f,0x00,0x70,0x00,0x79, + 0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, + 0x00,0x20,0x00,0x6d,0x00,0x69,0x00,0x73,0x00,0x73, + 0x00,0x69,0x00,0x6e,0x00,0x67,0x00,0x00,0x63,0x6f, + 0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x6d,0x69, + 0x73,0x73,0x69,0x6e,0x67,0x00,0x00,0x4f,0x00,0x70, + 0x00,0x65,0x00,0x6e,0x00,0x20,0x00,0x53,0x00,0x61, + 0x00,0x6e,0x00,0x73,0x00,0x20,0x00,0x48,0x00,0x65, + 0x00,0x62,0x00,0x72,0x00,0x65,0x00,0x77,0x00,0x20, + 0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64,0x00,0x65, + 0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64,0x00,0x00, + 0x4f,0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73,0x20, + 0x48,0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f,0x6e, + 0x64,0x65,0x6e,0x73,0x65,0x64,0x00,0x00,0x52,0x00, + 0x65,0x00,0x67,0x00,0x75,0x00,0x6c,0x00,0x61,0x00, + 0x72,0x00,0x00,0x52,0x65,0x67,0x75,0x6c,0x61,0x72, + 0x00,0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x30,0x00, + 0x31,0x00,0x3b,0x00,0x55,0x00,0x4b,0x00,0x57,0x00, + 0x4e,0x00,0x3b,0x00,0x4f,0x00,0x70,0x00,0x65,0x00, + 0x6e,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00, + 0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65,0x00, + 0x77,0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64,0x00, + 0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64,0x00, + 0x2d,0x00,0x52,0x00,0x65,0x00,0x67,0x00,0x75,0x00, + 0x6c,0x00,0x61,0x00,0x72,0x00,0x00,0x32,0x2e,0x30, + 0x30,0x31,0x3b,0x55,0x4b,0x57,0x4e,0x3b,0x4f,0x70, + 0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62,0x72, + 0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65, + 0x64,0x2d,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x00, + 0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e,0x00,0x20, + 0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x20, + 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, + 0x00,0x77,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x6e, + 0x00,0x64,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, + 0x00,0x64,0x00,0x00,0x4f,0x70,0x65,0x6e,0x20,0x53, + 0x61,0x6e,0x73,0x20,0x48,0x65,0x62,0x72,0x65,0x77, + 0x20,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65,0x64, + 0x00,0x00,0x56,0x00,0x65,0x00,0x72,0x00,0x73,0x00, + 0x69,0x00,0x6f,0x00,0x6e,0x00,0x20,0x00,0x32,0x00, + 0x2e,0x00,0x30,0x00,0x30,0x00,0x31,0x00,0x3b,0x00, + 0x50,0x00,0x53,0x00,0x20,0x00,0x30,0x00,0x30,0x00, + 0x32,0x00,0x2e,0x00,0x30,0x00,0x30,0x00,0x31,0x00, + 0x3b,0x00,0x68,0x00,0x6f,0x00,0x74,0x00,0x63,0x00, + 0x6f,0x00,0x6e,0x00,0x76,0x00,0x20,0x00,0x31,0x00, + 0x2e,0x00,0x30,0x00,0x2e,0x00,0x37,0x00,0x30,0x00, + 0x3b,0x00,0x6d,0x00,0x61,0x00,0x6b,0x00,0x65,0x00, + 0x6f,0x00,0x74,0x00,0x66,0x00,0x2e,0x00,0x6c,0x00, + 0x69,0x00,0x62,0x00,0x32,0x00,0x2e,0x00,0x35,0x00, + 0x2e,0x00,0x35,0x00,0x38,0x00,0x33,0x00,0x32,0x00, + 0x39,0x00,0x00,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e, + 0x20,0x32,0x2e,0x30,0x30,0x31,0x3b,0x50,0x53,0x20, + 0x30,0x30,0x32,0x2e,0x30,0x30,0x31,0x3b,0x68,0x6f, + 0x74,0x63,0x6f,0x6e,0x76,0x20,0x31,0x2e,0x30,0x2e, + 0x37,0x30,0x3b,0x6d,0x61,0x6b,0x65,0x6f,0x74,0x66, + 0x2e,0x6c,0x69,0x62,0x32,0x2e,0x35,0x2e,0x35,0x38, + 0x33,0x32,0x39,0x00,0x00,0x4f,0x00,0x70,0x00,0x65, + 0x00,0x6e,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73, + 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, + 0x00,0x77,0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64, + 0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64, + 0x00,0x2d,0x00,0x52,0x00,0x65,0x00,0x67,0x00,0x75, + 0x00,0x6c,0x00,0x61,0x00,0x72,0x00,0x00,0x4f,0x70, + 0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62,0x72, + 0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65, + 0x64,0x2d,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x00, + 0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e,0x00,0x20, + 0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x20, + 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, + 0x00,0x77,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x6e, + 0x00,0x64,0x00,0x20,0x00,0x52,0x00,0x65,0x00,0x67, + 0x00,0x75,0x00,0x6c,0x00,0x61,0x00,0x72,0x00,0x00, + 0x4f,0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73,0x20, + 0x48,0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f,0x6e, + 0x64,0x20,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xb5, + 0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x36,0x00,0x00,0x00,0x01,0x00,0x02, + 0x01,0x02,0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x06, + 0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0a,0x00,0x0b, + 0x00,0x0c,0x00,0x0d,0x00,0x0e,0x00,0x0f,0x00,0x10, + 0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15, + 0x00,0x16,0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1a, + 0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e,0x00,0x1f, + 0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24, + 0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29, + 0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e, + 0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33, + 0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38, + 0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d, + 0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42, + 0x00,0x43,0x00,0x44,0x00,0x45,0x00,0x46,0x00,0x47, + 0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00,0x4c, + 0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51, + 0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56, + 0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b, + 0x00,0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60, + 0x00,0x61,0x01,0x03,0x00,0xa3,0x00,0x84,0x00,0x85, + 0x00,0xbd,0x00,0x96,0x00,0xe8,0x00,0x86,0x00,0x8e, + 0x00,0x8b,0x00,0x9d,0x00,0xa9,0x00,0xa4,0x01,0x04, + 0x00,0x8a,0x01,0x05,0x00,0x83,0x00,0x93,0x00,0xf2, + 0x00,0xf3,0x00,0x8d,0x01,0x06,0x00,0x88,0x00,0xc3, + 0x00,0xde,0x00,0xf1,0x00,0x9e,0x00,0xaa,0x00,0xf5, + 0x00,0xf4,0x00,0xf6,0x00,0xa2,0x00,0xad,0x00,0xc9, + 0x00,0xc7,0x00,0xae,0x00,0x62,0x00,0x63,0x00,0x90, + 0x00,0x64,0x00,0xcb,0x00,0x65,0x00,0xc8,0x00,0xca, + 0x00,0xcf,0x00,0xcc,0x00,0xcd,0x00,0xce,0x00,0xe9, + 0x00,0x66,0x00,0xd3,0x00,0xd0,0x00,0xd1,0x00,0xaf, + 0x00,0x67,0x00,0xf0,0x00,0x91,0x00,0xd6,0x00,0xd4, + 0x00,0xd5,0x00,0x68,0x00,0xeb,0x00,0xed,0x00,0x89, + 0x00,0x6a,0x00,0x69,0x00,0x6b,0x00,0x6d,0x00,0x6c, + 0x00,0x6e,0x00,0xa0,0x00,0x6f,0x00,0x71,0x00,0x70, + 0x00,0x72,0x00,0x73,0x00,0x75,0x00,0x74,0x00,0x76, + 0x00,0x77,0x00,0xea,0x00,0x78,0x00,0x7a,0x00,0x79, + 0x00,0x7b,0x00,0x7d,0x00,0x7c,0x00,0xb8,0x00,0xa1, + 0x00,0x7f,0x00,0x7e,0x00,0x80,0x00,0x81,0x00,0xec, + 0x00,0xee,0x00,0xba,0x00,0xd7,0x00,0xb0,0x00,0xb1, + 0x00,0xe4,0x00,0xe5,0x00,0xbb,0x00,0xe6,0x00,0xe7, + 0x00,0xa6,0x00,0xd8,0x00,0xe1,0x00,0xdb,0x00,0xdc, + 0x00,0xdd,0x00,0xe0,0x00,0xd9,0x00,0xdf,0x01,0x07, + 0x01,0x08,0x01,0x09,0x01,0x0a,0x01,0x0b,0x01,0x0c, + 0x01,0x0d,0x01,0x0e,0x01,0x0f,0x01,0x10,0x01,0x11, + 0x01,0x12,0x01,0x13,0x01,0x14,0x01,0x15,0x01,0x16, + 0x01,0x17,0x01,0x18,0x01,0x19,0x01,0x1a,0x01,0x1b, + 0x01,0x1c,0x01,0x1d,0x01,0x1e,0x01,0x1f,0x01,0x20, + 0x01,0x21,0x01,0x22,0x01,0x23,0x01,0x24,0x01,0x25, + 0x01,0x26,0x01,0x27,0x01,0x28,0x01,0x29,0x01,0x2a, + 0x01,0x2b,0x01,0x2c,0x01,0x2d,0x01,0x2e,0x01,0x2f, + 0x01,0x30,0x01,0x31,0x01,0x32,0x01,0x33,0x01,0x34, + 0x01,0x35,0x00,0xb2,0x00,0xb3,0x00,0xb6,0x00,0xb7, + 0x00,0xc4,0x00,0xb4,0x00,0xb5,0x00,0xc5,0x00,0x82, + 0x00,0xc2,0x00,0x87,0x00,0xab,0x00,0xc6,0x00,0xbe, + 0x00,0xbf,0x00,0xbc,0x01,0x36,0x01,0x37,0x00,0x8c, + 0x01,0x38,0x01,0x39,0x01,0x3a,0x01,0x3b,0x01,0x3c, + 0x01,0x3d,0x01,0x3e,0x01,0x3f,0x01,0x40,0x01,0x41, + 0x01,0x42,0x01,0x43,0x01,0x44,0x01,0x45,0x01,0x46, + 0x01,0x47,0x01,0x48,0x01,0x49,0x01,0x4a,0x01,0x4b, + 0x01,0x4c,0x01,0x4d,0x01,0x4e,0x01,0x4f,0x01,0x50, + 0x01,0x51,0x01,0x52,0x01,0x53,0x01,0x54,0x01,0x55, + 0x01,0x56,0x01,0x57,0x02,0x43,0x52,0x07,0x75,0x6e, + 0x69,0x30,0x30,0x41,0x30,0x07,0x75,0x6e,0x69,0x30, + 0x30,0x41,0x44,0x09,0x6f,0x76,0x65,0x72,0x73,0x63, + 0x6f,0x72,0x65,0x07,0x75,0x6e,0x69,0x30,0x30,0x42, + 0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x30,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x42,0x31,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x42,0x32,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x42,0x33,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, + 0x34,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x35,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x42,0x36,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x42,0x37,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x42,0x38,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, + 0x39,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x41,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x42,0x42,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x42,0x43,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x42,0x44,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, + 0x45,0x07,0x75,0x6e,0x69,0x30,0x35,0x43,0x31,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x43,0x32,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x43,0x37,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x30,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, + 0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x32,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x33,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x44,0x34,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, + 0x36,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x37,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x38,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x44,0x39,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x41,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, + 0x42,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x43,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x44,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x44,0x45,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x46,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, + 0x30,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x31,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x45,0x32,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x45,0x33,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x45,0x34,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, + 0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x36,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x45,0x37,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x45,0x38,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x45,0x39,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, + 0x41,0x08,0x67,0x65,0x72,0x65,0x73,0x68,0x68,0x62, + 0x0b,0x67,0x65,0x72,0x73,0x68,0x61,0x79,0x69,0x6d, + 0x68,0x62,0x07,0x75,0x6e,0x69,0x32,0x30,0x41,0x41, + 0x04,0x45,0x75,0x72,0x6f,0x07,0x75,0x6e,0x69,0x46, + 0x42,0x30,0x31,0x07,0x75,0x6e,0x69,0x46,0x42,0x30, + 0x32,0x07,0x75,0x6e,0x69,0x46,0x42,0x32,0x41,0x07, + 0x75,0x6e,0x69,0x46,0x42,0x32,0x42,0x13,0x73,0x68, + 0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68,0x73,0x68, + 0x69,0x6e,0x64,0x6f,0x74,0x68,0x62,0x12,0x73,0x68, + 0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68,0x73,0x69, + 0x6e,0x64,0x6f,0x74,0x68,0x62,0x0b,0x61,0x6c,0x65, + 0x66,0x70,0x61,0x74,0x61,0x68,0x68,0x62,0x0c,0x61, + 0x6c,0x65,0x66,0x71,0x61,0x6d,0x61,0x74,0x73,0x68, + 0x62,0x0c,0x61,0x6c,0x65,0x66,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0b,0x62,0x65,0x74,0x64,0x61, + 0x67,0x65,0x73,0x68,0x68,0x62,0x0d,0x67,0x69,0x6d, + 0x65,0x6c,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, + 0x0d,0x64,0x61,0x6c,0x65,0x74,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0a,0x68,0x65,0x64,0x61,0x67, + 0x65,0x73,0x68,0x68,0x62,0x07,0x75,0x6e,0x69,0x46, + 0x42,0x33,0x35,0x0d,0x7a,0x61,0x79,0x69,0x6e,0x64, + 0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x74,0x65, + 0x74,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b, + 0x79,0x6f,0x64,0x64,0x61,0x67,0x65,0x73,0x68,0x68, + 0x62,0x10,0x66,0x69,0x6e,0x61,0x6c,0x6b,0x61,0x66, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x6b, + 0x61,0x66,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, + 0x0d,0x6c,0x61,0x6d,0x65,0x64,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0b,0x6d,0x65,0x6d,0x64,0x61, + 0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x6e,0x75,0x6e, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0e,0x73, + 0x61,0x6d,0x65,0x6b,0x68,0x64,0x61,0x67,0x65,0x73, + 0x68,0x68,0x62,0x0f,0x66,0x69,0x6e,0x61,0x6c,0x70, + 0x65,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0a, + 0x70,0x65,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, + 0x0d,0x74,0x73,0x61,0x64,0x69,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0b,0x71,0x6f,0x66,0x64,0x61, + 0x67,0x65,0x73,0x68,0x68,0x62,0x0c,0x72,0x65,0x73, + 0x68,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0c, + 0x73,0x68,0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68, + 0x68,0x62,0x0b,0x74,0x61,0x76,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x07,0x75,0x6e,0x69,0x46,0x42, + 0x34,0x42,0x07,0x72,0x61,0x66,0x65,0x68,0x68,0x62, + 0x00,0x01,0x00,0x01,0xff,0xff,0x00,0x0f,0x00,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0xcc,0x6d,0xb1,0x55, + 0x00,0x00,0x00,0x00,0xcd,0x64,0xfe,0x43,0x00,0x00, + 0x00,0x00,0xcd,0xc1,0x1c,0x70,0x00,0x01,0x00,0x00, + 0x00,0x0e,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00, + 0x00,0x02,0x00,0x05,0x00,0x03,0x00,0xd3,0x00,0x01, + 0x00,0xd4,0x00,0xe1,0x00,0x03,0x00,0xe2,0x00,0xe2, + 0x00,0x01,0x00,0xe3,0x00,0xe5,0x00,0x03,0x00,0xe6, + 0x01,0x35,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0a,0x00,0x1e, + 0x00,0x2c,0x00,0x01,0x68,0x65,0x62,0x72,0x00,0x08, + 0x00,0x04,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x01, + 0x00,0x00,0x00,0x01,0x6d,0x61,0x72,0x6b,0x00,0x08, + 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x04, + 0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01, + 0x03,0x78,0x03,0x6e,0x00,0x04,0x03,0x88,0x00,0x0c, + 0x00,0x1b,0x00,0xda,0x00,0xe0,0x00,0xe6,0x00,0xec, + 0x00,0xf2,0x00,0xf8,0x00,0xfe,0x01,0x04,0x01,0x0a, + 0x01,0x10,0x01,0x16,0x01,0x1c,0x01,0x22,0x01,0x28, + 0x01,0x2e,0x01,0x34,0x01,0x3a,0x01,0x40,0x01,0x46, + 0x01,0x4c,0x01,0x52,0x01,0x58,0x01,0x5e,0x01,0x64, + 0x01,0x6a,0x01,0x70,0x01,0x76,0x01,0x7c,0x01,0x82, + 0x01,0x88,0x01,0x8e,0x01,0x94,0x01,0x9a,0x01,0xa0, + 0x01,0xa6,0x01,0xac,0x01,0xb2,0x01,0xb8,0x01,0xbe, + 0x01,0xc4,0x01,0xca,0x01,0xd0,0x01,0xd6,0x01,0xdc, + 0x01,0xe2,0x01,0xe8,0x01,0xee,0x01,0xf4,0x01,0xfa, + 0x02,0x00,0x02,0x06,0x02,0x0c,0x02,0x12,0x02,0x18, + 0x02,0x1e,0x02,0x24,0x02,0x2a,0x02,0x30,0x02,0x36, + 0x02,0x3c,0x02,0x42,0x02,0x48,0x02,0x4e,0x02,0x54, + 0x02,0x5a,0x02,0x60,0x02,0x66,0x02,0x6c,0x02,0x72, + 0x02,0x78,0x02,0x7e,0x02,0x84,0x02,0x8a,0x02,0x90, + 0x02,0x96,0x02,0x9c,0x02,0xa2,0x02,0xa8,0x02,0xae, + 0x02,0xb4,0x02,0xba,0x02,0xc0,0x02,0xc6,0x02,0xcc, + 0x02,0xd2,0x02,0xd8,0x02,0xde,0x02,0xe4,0x02,0xea, + 0x02,0xf0,0x02,0xf6,0x02,0xfc,0x03,0x02,0x03,0x08, + 0x03,0x0e,0x03,0x14,0x03,0x1a,0x03,0x20,0x03,0x26, + 0x03,0x2c,0x03,0x32,0x03,0x38,0x03,0x3e,0x03,0x44, + 0x03,0x4a,0x03,0x50,0x03,0x56,0x03,0x5c,0x00,0x01, + 0x01,0xae,0x00,0x00,0x00,0x01,0x00,0x71,0x04,0x67, + 0x00,0x01,0x01,0x61,0x00,0x6b,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x95,0x00,0x00,0x00,0x01, + 0x00,0x93,0x04,0x67,0x00,0x01,0x01,0x25,0x02,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x5e, + 0x00,0x00,0x00,0x01,0x00,0xc8,0x04,0x67,0x00,0x01, + 0x00,0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0xb1,0x00,0x00,0x00,0x01,0x00,0x57, + 0x04,0x67,0x00,0x01,0x00,0xcf,0x02,0x00,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xde,0x00,0x00, + 0x00,0x01,0x00,0xb4,0x04,0x67,0x00,0x01,0x01,0xde, + 0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0x00,0xd2,0x00,0x00,0x00,0x01,0x00,0xab,0x04,0x67, + 0x00,0x01,0xff,0xf1,0x02,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0x00,0xf1,0x00,0x00,0x00,0x01, + 0x00,0x90,0x04,0x67,0x00,0x01,0x00,0x1b,0x02,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xde, + 0x00,0x00,0x00,0x01,0x00,0xbb,0x04,0x67,0x00,0x01, + 0x01,0xde,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0xd4,0x00,0x00,0x00,0x01,0x00,0x78, + 0x04,0x67,0x00,0x01,0x01,0xd4,0x02,0x00,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xcf,0x00,0x00, + 0x00,0x01,0x00,0xa7,0x04,0x67,0x00,0x01,0x00,0x1c, + 0x02,0xda,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0x00,0x35,0x01,0x68,0x00,0x01,0x00,0x64,0x04,0x67, + 0x00,0x01,0x00,0xe9,0x02,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x58,0x00,0x00,0x00,0x01, + 0x00,0x64,0x04,0x67,0x00,0x01,0x00,0xd5,0x02,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x53, + 0x00,0x00,0x00,0x01,0xff,0xb7,0x04,0x67,0x00,0x01, + 0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0xde,0x00,0x00,0x00,0x01,0x00,0xa7, + 0x04,0x67,0x00,0x01,0x01,0xde,0x02,0x00,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xd3,0x00,0x00, + 0x00,0x01,0x00,0x6b,0x04,0x67,0x00,0x01,0x01,0xd3, + 0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0xff,0x09,0x01,0x6f,0x00,0x01,0x00,0x6b,0x04,0x67, + 0x00,0x01,0x00,0x0d,0x02,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x35,0x00,0x00,0x00,0x01, + 0x00,0x85,0x04,0x67,0x00,0x01,0x00,0xbb,0x02,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xcf, + 0x00,0x00,0x00,0x01,0x00,0xa7,0x04,0x67,0x00,0x01, + 0x01,0xcf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0xbc,0x00,0x00,0x00,0x01,0x00,0x50, + 0x04,0x67,0x00,0x01,0x01,0xf4,0x02,0x44,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x18,0x01,0x6f, + 0x00,0x01,0x00,0x7f,0x04,0x67,0x00,0x01,0x01,0xd8, + 0x02,0xe4,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0xc4,0x00,0x00,0x00,0x01,0x00,0x93,0x04,0x67, + 0x00,0x01,0x01,0xc4,0x02,0xe4,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0xff,0x4c,0x01,0x6f,0x00,0x01, + 0x00,0x38,0x04,0x67,0x00,0x01,0x01,0x6e,0x02,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xa3, + 0x00,0x00,0x00,0x01,0x00,0x7f,0x04,0x67,0x00,0x01, + 0x00,0xa7,0x01,0xab,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0xc6,0x00,0x00,0x00,0x01,0x00,0xa7, + 0x04,0x67,0x00,0x01,0x01,0x9f,0x02,0x26,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x08,0x00,0x00, + 0x00,0x01,0x00,0x50,0x04,0x67,0x00,0x01,0x00,0xf7, + 0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0x02,0x34,0x00,0x00,0x00,0x01,0x00,0x6b,0x04,0x67, + 0x00,0x01,0x02,0x30,0x01,0x2c,0x00,0x01,0x03,0xf3, + 0x04,0x67,0x00,0x01,0x01,0xda,0x00,0x00,0x00,0x01, + 0x00,0x6b,0x04,0x67,0x00,0x01,0x01,0xda,0x02,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01, + 0x00,0xe6,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x02, + 0x00,0xd4,0x00,0xe1,0x00,0x00,0x00,0xe3,0x00,0xe5, + 0x00,0x0e,0x00,0x11,0x00,0x00,0x00,0x46,0x00,0x00, + 0x00,0x4c,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x58, + 0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00, + 0x00,0x6a,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x76, + 0x00,0x01,0x00,0x7c,0x00,0x01,0x00,0x82,0x00,0x00, + 0x00,0x88,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,0x94, + 0x00,0x03,0x00,0x9a,0x00,0x01,0x00,0xa0,0x00,0x00, + 0x00,0xa6,0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01, + 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x6e, + 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00, + 0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01, + 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x6e, + 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00, + 0x04,0x90,0x00,0x01,0x00,0x00,0x04,0x90,0x00,0x01, + 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x02,0x44, + 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00, + 0x04,0x90,0x00,0x01,0x00,0x00,0x04,0x90,0x00,0x01, + 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x0a, + 0x00,0x1c,0x00,0x1e,0x00,0x01,0x68,0x65,0x62,0x72, + 0x00,0x08,0x00,0x04,0x00,0x00,0x00,0x00,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x00 +}; diff --git a/data/converted/scroll_gradient_png.cpp b/data/converted/scroll_gradient_png.cpp index 0bbed409e..53c59587f 100644 --- a/data/converted/scroll_gradient_png.cpp +++ b/data/converted/scroll_gradient_png.cpp @@ -2,12 +2,12 @@ #include "../Resources.h" -const size_t scroll_gradient_png_size = 37639; -const unsigned char scroll_gradient_png_data[37639] = { +const size_t scroll_gradient_png_size = 83384; +const unsigned char scroll_gradient_png_data[83384] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x00, - 0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x00,0x00,0x5c, - 0x72,0xa8,0x66,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x02,0x40, + 0x00,0x00,0x01,0x44,0x08,0x06,0x00,0x00,0x00,0xcf, + 0xe3,0x81,0xbd,0x00,0x00,0x00,0x09,0x70,0x48,0x59, 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, @@ -280,3492 +280,8067 @@ const unsigned char scroll_gradient_png_data[37639] = { 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x88,0x22,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0xbd,0xdb,0x76,0x04, - 0x39,0x8e,0x2b,0x2a,0xf8,0x61,0xff,0xff,0x1f,0xe3, - 0x3c,0x38,0x43,0x02,0x41,0x48,0x11,0x69,0xa7,0xab, - 0xba,0xfb,0x4c,0xaf,0x35,0x53,0x55,0xce,0x5b,0xdc, - 0x44,0x91,0x20,0x01,0x80,0xe4,0xff,0x1b,0x63,0x60, - 0xf3,0x7f,0xe3,0xf0,0xda,0xee,0xff,0xbe,0xde,0x7c, - 0xed,0x6b,0x8c,0x01,0x8e,0x01,0xf4,0xf7,0xcc,0x7f, - 0xe7,0x18,0x5f,0xe8,0x7f,0x7f,0xfd,0x93,0x18,0x03, - 0x5f,0xaf,0xef,0xf8,0x1a,0xfb,0xef,0x39,0xfc,0xf3, - 0xfb,0x3b,0xc2,0xeb,0xd7,0x6f,0x7c,0x7d,0x7f,0xfd, - 0x28,0xbf,0xc3,0xef,0xcf,0x7e,0xe1,0xf5,0x5a,0xfb, - 0x1c,0x5f,0xff,0x84,0xbd,0x46,0xbe,0xfe,0x86,0xef, - 0xf7,0x60,0xfe,0xbe,0x9f,0xdb,0xeb,0x6f,0xd8,0x1f, - 0x67,0xfd,0x8d,0x9b,0x73,0xe5,0x17,0x09,0x00,0xf5, - 0xfa,0xb4,0x6b,0x47,0x82,0xf8,0xfe,0x4d,0x94,0x6b, - 0x34,0xfa,0xb5,0x26,0x41,0x0c,0x60,0xe0,0x3a,0xbe, - 0x72,0x5f,0xc7,0xeb,0xbd,0xeb,0x1e,0xcf,0xf7,0x60, - 0x70,0x7c,0x11,0x03,0xe0,0xeb,0x3e,0x63,0x3e,0x07, - 0xf2,0x7f,0xaf,0xf7,0x73,0x60,0x40,0x3f,0x4f,0x90, - 0xc0,0xeb,0xda,0xcd,0xef,0xfe,0xfe,0xdb,0x18,0xf3, - 0xbf,0xaf,0xd7,0xf8,0xba,0x4a,0xaf,0x67,0x9b,0x63, - 0x00,0x7c,0xfd,0xe2,0x18,0x83,0xaf,0x1f,0xe0,0x7c, - 0xf8,0x39,0xe4,0xe5,0x31,0xf8,0x7a,0xc7,0xf5,0xdf, - 0xdf,0xdf,0xf1,0xfa,0xc4,0x90,0x7f,0xbb,0x7e,0x48, - 0xfe,0xfe,0xba,0x10,0xd7,0xaa,0x5a,0x9f,0xc3,0xb8, - 0xde,0x76,0xbd,0xfb,0x75,0xe0,0x63,0x1e,0xc8,0xf5, - 0xba,0xfe,0x7d,0x5c,0x1f,0xe5,0xeb,0x94,0xd6,0x31, - 0xca,0x01,0xbf,0x6e,0xd9,0xeb,0xbd,0x7c,0x5d,0x89, - 0xf1,0xfd,0xef,0xe3,0xf5,0x10,0xbc,0xfd,0x3f,0xb6, - 0x7f,0xf9,0xfd,0xff,0x90,0x7f,0x21,0xbf,0xce,0x27, - 0xdf,0xb1,0x3b,0x72,0x6e,0x4e,0x08,0x8f,0x8f,0x10, - 0xed,0x95,0x75,0xab,0xc9,0xf0,0x31,0x84,0x63,0x87, - 0xbc,0x80,0xfa,0x18,0xe9,0x1b,0xe9,0x5f,0x40,0xbf, - 0x52,0xec,0xbf,0xd1,0x2e,0x13,0xeb,0xd1,0x22,0x1c, - 0x4e,0xbb,0x1c,0x68,0x47,0x94,0x7e,0x88,0xf3,0x81, - 0x85,0x5d,0x47,0x0e,0x3f,0x34,0xa4,0x63,0x02,0x5f, - 0xa7,0xff,0xfd,0x66,0xb0,0x9e,0x3d,0xdb,0x2d,0x60, - 0xf9,0x46,0x20,0xdf,0x1d,0xc8,0xa7,0xc1,0xd7,0xe2, - 0x85,0xfd,0xb4,0x1d,0xee,0x5c,0xfc,0x1c,0xb6,0xe2, - 0xd6,0xc2,0xf2,0x6b,0x02,0x59,0xe0,0xd7,0xf9,0xea, - 0x12,0x9f,0xff,0x06,0xca,0xe2,0x67,0xbd,0x56,0x72, - 0x81,0x30,0x17,0x39,0xed,0xa9,0x65,0x3d,0x7d,0xc8, - 0xb3,0x47,0x7b,0xae,0xb8,0xae,0xff,0x15,0x2e,0xd7, - 0x33,0x37,0x43,0xdf,0xb5,0x7b,0xfd,0x62,0xb1,0x62, - 0xff,0xc8,0x7d,0x32,0x1c,0xdc,0xbf,0x0c,0x5d,0x0e, - 0x76,0x2c,0x94,0xff,0x8f,0x7a,0xc7,0x9f,0x47,0x8e, - 0xdb,0x43,0xb9,0x6e,0x35,0x8e,0x0b,0x31,0xff,0xfc, - 0x7c,0x8c,0xf4,0xe1,0x27,0xe6,0xf2,0x2f,0x51,0x05, - 0xb6,0x70,0xb9,0x8f,0xca,0x31,0x64,0x71,0x7f,0x29, - 0xaf,0xe7,0x68,0x1e,0x07,0x91,0x6f,0x31,0x75,0xd1, - 0xc8,0x2e,0x86,0xf5,0x3a,0x07,0x4a,0xac,0x9a,0x0f, - 0x31,0xc3,0x95,0x43,0x5f,0x0c,0x98,0x8f,0xf7,0xbc, - 0x0a,0xaf,0xcb,0x80,0x79,0x39,0xe6,0x02,0x97,0x85, - 0x76,0xdd,0x03,0xdd,0xec,0x89,0x6b,0xf1,0xae,0x40, - 0x40,0x3d,0x8e,0x72,0x3e,0x7a,0x68,0xec,0xcf,0xba, - 0xdd,0xe0,0xeb,0x7b,0xa0,0x8b,0xeb,0x4a,0x54,0xae, - 0xa3,0xe3,0xeb,0x7e,0xbe,0x02,0x11,0x98,0x1f,0x24, - 0x0c,0xae,0xe3,0x82,0x44,0xc3,0xd7,0xf7,0x7f,0xef, - 0xda,0x5c,0x0b,0x5c,0xb6,0x88,0x15,0x1d,0x24,0xd0, - 0x40,0xfe,0x93,0x63,0x80,0x1c,0xe4,0x15,0x4a,0xbe, - 0x5f,0xf8,0xfa,0xc4,0x72,0x2d,0x8f,0x1c,0xef,0xdf, - 0xf5,0x7c,0x77,0xe6,0x9b,0x47,0x81,0xf0,0xd0,0x23, - 0xae,0x3b,0x7e,0xe4,0x7c,0x37,0xe1,0x80,0x61,0xa7, - 0xb1,0xcf,0x31,0x05,0x1d,0x70,0x2d,0x2a,0x7d,0x1d, - 0xf5,0x21,0xd5,0x97,0x89,0xd7,0xd3,0x0c,0xd9,0x8e, - 0xf9,0x4e,0xf0,0x64,0x3b,0xce,0xb9,0x08,0x11,0xf6, - 0xe1,0xef,0xa7,0x79,0xbd,0x97,0x28,0x9b,0xb2,0x64, - 0x9c,0xf2,0x1e,0xd9,0x29,0x4b,0xb8,0xb4,0xb8,0x45, - 0xae,0xe3,0x99,0xab,0x9c,0xd7,0x4f,0xea,0xe6,0x55, - 0x16,0xbe,0x1e,0x3f,0x53,0xde,0x22,0x5b,0x3f,0xcb, - 0x2e,0xce,0x75,0xed,0x74,0xa7,0xa4,0x26,0xe9,0x7c, - 0xb8,0x19,0xd1,0x16,0x7c,0x78,0x9a,0xc1,0x1a,0xf3, - 0xe4,0x63,0x1a,0xf4,0xeb,0x07,0xe7,0x72,0x7d,0x05, - 0x99,0x57,0x60,0x20,0x56,0x3a,0x20,0x81,0x82,0xf2, - 0x77,0xd0,0x76,0x08,0x60,0x00,0xb5,0xc8,0xf9,0x7a, - 0x7f,0xa1,0xde,0x3c,0x53,0x18,0xbf,0x48,0xb1,0xf1, - 0x38,0x13,0xe0,0x61,0xbf,0xdb,0xbe,0x9b,0x7d,0xc7, - 0x7e,0x76,0xea,0x7c,0xb3,0xd4,0xc8,0x6f,0xc4,0x6d, - 0x54,0x81,0x6f,0x41,0x39,0xd5,0xc0,0xb0,0xe8,0xbf, - 0x4a,0x09,0xde,0x2c,0xf2,0x56,0x3e,0x5c,0x95,0xf2, - 0xa0,0x2d,0x9f,0xb5,0xa5,0x83,0xd7,0xae,0xcb,0x99, - 0xa7,0x72,0x74,0xb4,0x88,0xbb,0x73,0x04,0x63,0xa9, - 0x01,0xcf,0xea,0xf1,0x3a,0x23,0x5c,0x81,0x6d,0x08, - 0x6a,0xf0,0xda,0xd9,0xed,0x07,0x48,0xc6,0xdf,0x87, - 0x2e,0x64,0x68,0x90,0xa8,0x75,0x3c,0x81,0x5e,0x61, - 0x94,0x82,0x05,0x6b,0x71,0x86,0x6c,0x0b,0xb2,0x78, - 0x89,0x5a,0x92,0x69,0x40,0xe5,0xab,0x4c,0x22,0x50, - 0x4b,0x0b,0xd4,0x72,0x04,0x9e,0xed,0xc4,0x0d,0x0c, - 0xaf,0x6b,0x5a,0xcb,0xae,0x85,0x06,0x84,0x87,0x05, - 0x90,0x47,0x01,0x03,0xaf,0x00,0xfb,0xf5,0x7e,0x35, - 0xfe,0x89,0x8c,0xfe,0xc9,0xb7,0xf2,0xf0,0x57,0xce, - 0x13,0xc0,0xa3,0xaf,0x44,0xc9,0x6d,0x19,0x02,0x0e, - 0x99,0x81,0x06,0x3e,0x0a,0x2e,0x7c,0xb4,0xd2,0xcb, - 0x37,0xf2,0x50,0x84,0xdf,0x02,0x2f,0x6c,0xf0,0x53, - 0x7e,0x88,0x0d,0x55,0x62,0xc6,0x2e,0x0c,0x1b,0x2b, - 0x7b,0x3e,0xa5,0x36,0x65,0xd9,0x1d,0xeb,0xe1,0xb0, - 0xe5,0xd1,0x35,0x38,0xe3,0x95,0xd9,0xb4,0xcc,0x87, - 0x7e,0x44,0x0a,0x7a,0x31,0xec,0xe2,0x7b,0xfc,0x65, - 0xe8,0x33,0xc1,0xef,0xcf,0xcf,0xf2,0x01,0xa9,0x04, - 0xf4,0xdd,0x9a,0x13,0xe6,0xb4,0x1c,0xa3,0x06,0xba, - 0xeb,0x39,0x62,0x05,0xf7,0x10,0xca,0x51,0xb6,0x3b, - 0xff,0xfa,0x3c,0x3b,0xc6,0x41,0xf9,0x7d,0xe0,0x3b, - 0x3b,0x81,0x64,0x55,0x86,0x2a,0xcc,0xdf,0xa5,0x3e, - 0xa5,0xf8,0x4e,0xf3,0xfd,0x37,0x35,0x18,0xe2,0x0a, - 0xac,0x2f,0xf4,0xf8,0x37,0xd5,0xf8,0xdf,0xd4,0xf8, - 0x87,0x8c,0x61,0xa6,0x92,0xb0,0xea,0x15,0xcf,0x7e, - 0x77,0x17,0x27,0xb0,0xc9,0x5c,0xb0,0x79,0x56,0x4b, - 0x0d,0x79,0x4a,0xbb,0xb9,0x39,0xf7,0x92,0x32,0xd3, - 0xfe,0xcf,0x32,0xd1,0x11,0xb6,0xca,0xb9,0x33,0xe9, - 0x02,0x44,0x2d,0x2f,0xb8,0xc1,0x1f,0xda,0x2e,0x4c, - 0xcb,0xa4,0x30,0x17,0x1c,0xa4,0xe6,0x2e,0x75,0xad, - 0x9d,0x3e,0x0c,0x7e,0x2b,0x65,0xca,0xfc,0x33,0xea, - 0xce,0x5c,0x50,0x42,0xb6,0x6a,0xc8,0xc1,0xc2,0x58, - 0x22,0xce,0x0c,0x98,0x13,0x31,0xb8,0x76,0xe1,0x5a, - 0x89,0x0f,0x41,0xfa,0x5f,0x3b,0xf6,0xb5,0x60,0xc0, - 0x59,0x3e,0xac,0x1d,0x9d,0xfb,0x40,0xff,0xca,0x06, - 0xd0,0x6e,0xfd,0x6b,0x63,0xa2,0x67,0x38,0x98,0xad, - 0x2c,0x2c,0xcc,0x77,0xf6,0x1c,0x16,0x58,0x89,0x8a, - 0x91,0xbc,0xa2,0x6e,0x03,0x51,0x89,0x50,0xf8,0x5e, - 0x0b,0xff,0xc2,0x0b,0xf0,0x4a,0x34,0x58,0xc0,0x0d, - 0x52,0x03,0x2b,0x7e,0x8b,0x01,0xf0,0x83,0xef,0x7a, - 0x63,0x37,0x6c,0x6f,0xc1,0x5b,0x3f,0x8c,0xb4,0xc0, - 0xda,0x47,0x51,0x22,0x6f,0x2f,0x75,0x18,0x22,0xc5, - 0xba,0xf9,0xe4,0x3e,0x8b,0xcf,0x25,0x24,0x5a,0x56, - 0x82,0x18,0x14,0x59,0x73,0x18,0x38,0x9c,0x5d,0x0f, - 0xb8,0x05,0xb0,0xcd,0x49,0x83,0x1c,0x01,0xc0,0xee, - 0xc1,0x11,0x77,0xe8,0x66,0x2f,0x72,0x27,0xb8,0x55, - 0x76,0x50,0xdb,0x8d,0x89,0x7a,0x9a,0x18,0x16,0xe8, - 0x20,0x29,0x2e,0x0b,0xe0,0x70,0xed,0xee,0x9c,0x41, - 0x06,0x5e,0x46,0x6b,0x85,0x5e,0xb7,0x03,0x42,0x12, - 0x67,0xda,0x49,0x7f,0x1f,0x37,0x2c,0x18,0x00,0xfd, - 0xe6,0xd0,0x36,0x26,0x26,0x10,0x08,0xab,0xc3,0xe2, - 0x80,0xe1,0xba,0x3e,0xec,0xdd,0x20,0xa6,0x0d,0x89, - 0x83,0x0e,0x15,0xc9,0xf5,0x02,0xf2,0x93,0x34,0xb1, - 0xc5,0x57,0xa0,0xfa,0xfa,0xdd,0xd2,0xc5,0x5d,0x83, - 0x6d,0x5f,0x17,0xee,0xbe,0x8e,0xbf,0x0b,0x3e,0xb9, - 0x6d,0xb4,0x52,0x4f,0x38,0xa0,0xbe,0x01,0xc8,0x11, - 0x2a,0x71,0x6d,0xb7,0xa0,0x9c,0x3b,0xda,0x83,0x0f, - 0xbc,0x71,0xfc,0xc4,0xe6,0x81,0x62,0x41,0xa4,0xd7, - 0x63,0xbb,0x7a,0xb9,0x0c,0x9d,0x0f,0xc0,0xd1,0x25, - 0xf9,0x0a,0xec,0xb2,0x12,0x94,0xd6,0xd1,0xa3,0xc0, - 0x8d,0x94,0x19,0xb1,0x83,0x5b,0xb5,0x53,0x3d,0x90, - 0xb0,0x1e,0xbb,0x3f,0x17,0xe0,0x3d,0x17,0x26,0x24, - 0xfd,0x4d,0x37,0x53,0xde,0x47,0x0b,0xf2,0x6b,0x27, - 0x7c,0x75,0x01,0x86,0x96,0x83,0x6c,0x0f,0x30,0x86, - 0x77,0x6b,0x51,0xae,0x7b,0x79,0xb6,0x59,0x33,0x8d, - 0x9a,0x95,0x78,0x5e,0x27,0xad,0x3c,0xb2,0xfd,0xce, - 0x3c,0x56,0xc9,0x7e,0x08,0x87,0x64,0xb8,0xb2,0x29, - 0x6c,0xae,0xa1,0x04,0x88,0x54,0x82,0xcc,0x08,0x76, - 0xdf,0x05,0x78,0xaf,0x00,0xc0,0x27,0x4a,0x88,0xa7, - 0x78,0x81,0xa5,0x41,0x43,0xae,0x4d,0x7a,0xb8,0x71, - 0x7b,0x40,0xbc,0x05,0xe9,0x80,0x7c,0x7c,0x48,0x75, - 0xf1,0x36,0x1c,0xc6,0x3c,0xa4,0xfd,0x13,0x0e,0x3c, - 0x95,0x54,0x5c,0xa2,0xf9,0xc0,0x7e,0x17,0x6e,0x4f, - 0x73,0x0a,0xdc,0xac,0x35,0x32,0xc2,0xf5,0xf0,0xe8, - 0xce,0x53,0x80,0x47,0x09,0x5c,0x18,0x78,0x7e,0x5f, - 0xb9,0x32,0xa9,0xab,0xf6,0x25,0x05,0xd9,0xf6,0xd2, - 0x50,0xae,0x0f,0x67,0x07,0x64,0xd3,0x66,0xbb,0x42, - 0x00,0x6a,0x0e,0x00,0x19,0x24,0xa0,0xec,0xcc,0xdf, - 0xa9,0x7c,0x1d,0xb0,0xb9,0xd2,0x7b,0x1e,0x9f,0x77, - 0x18,0xaa,0xbf,0x42,0xc7,0x84,0x58,0x5f,0x41,0x85, - 0x57,0xe6,0x45,0x7b,0x52,0xa1,0x81,0x53,0xea,0x2b, - 0x72,0x70,0x97,0xec,0x92,0x76,0x9b,0xae,0xe9,0x2a, - 0x48,0x4b,0x99,0xed,0x39,0xfb,0xfa,0x14,0xd8,0x87, - 0x1f,0x7f,0x03,0x6f,0x5e,0xc1,0x11,0xd7,0xd3,0x8d, - 0xfe,0x16,0xbe,0xe4,0x0f,0xcf,0xe0,0x98,0xc6,0x48, - 0x5b,0x46,0x51,0xe7,0x81,0xf0,0xb3,0xd8,0x23,0xff, - 0x6b,0x5a,0x63,0x2d,0x3d,0xa4,0x35,0xcd,0xb6,0xa2, - 0xc1,0xb1,0x79,0xe8,0xd9,0xd6,0x57,0x9d,0x74,0x19, - 0x1d,0x08,0xb5,0x85,0x46,0x46,0xec,0xcc,0x76,0x4b, - 0x99,0x7f,0x43,0x05,0x21,0x38,0x5a,0xdb,0xba,0x5d, - 0x6f,0x52,0x7f,0x88,0xb2,0x70,0xae,0xa0,0xcb,0xd9, - 0x1d,0xe8,0xdd,0x0e,0xce,0xf7,0x91,0x0a,0x8c,0x72, - 0xd4,0xff,0xb2,0x4c,0xae,0x1c,0xb9,0x3e,0x3f,0x9c, - 0x27,0xa2,0xf8,0x0c,0xaf,0x8e,0xc1,0x95,0x4d,0x30, - 0xd7,0x93,0xb3,0x18,0x98,0xef,0xad,0xe7,0xea,0xb3, - 0x82,0xad,0x4e,0x1b,0xd2,0x0a,0x1e,0x35,0xe0,0x7c, - 0x07,0x2f,0xc3,0x90,0x2c,0x23,0x45,0xc2,0x8c,0x35, - 0x6b,0x9a,0xc3,0x01,0xa8,0x25,0xc0,0xdf,0x80,0x7d, - 0x4f,0x82,0x0b,0x1e,0xb6,0xdb,0x78,0x1e,0x62,0x69, - 0x60,0x12,0x6e,0xa3,0x1a,0x4f,0xa1,0x46,0x27,0xb1, - 0x32,0xb4,0x5e,0x81,0xc0,0x94,0x62,0x30,0x15,0x4a, - 0x1b,0xc8,0x1e,0xa1,0x12,0x62,0x06,0x40,0xdb,0x36, - 0x80,0x1d,0x08,0x5a,0xb3,0x00,0x28,0x02,0x55,0xea, - 0x60,0x59,0x6c,0x03,0x19,0xdb,0x18,0x8e,0xcc,0xb3, - 0xee,0x7a,0x94,0x4c,0x08,0x2b,0x88,0x60,0xd8,0x5c, - 0x03,0x7a,0x3a,0x8c,0xd7,0xe2,0x9a,0xd8,0x80,0xdd, - 0xcb,0x96,0x62,0x8f,0x05,0x96,0x11,0x90,0x01,0xa0, - 0xb5,0x40,0xbd,0x25,0xa6,0xe0,0x1e,0xc0,0xb0,0x5f, - 0x73,0xb6,0xc8,0x46,0xfb,0x24,0xec,0x18,0x70,0x25, - 0x1b,0xad,0x9e,0xdc,0x81,0x88,0xfd,0x5b,0xaf,0xd2, - 0x94,0x31,0xb9,0x65,0x69,0x0b,0x5f,0xc7,0xc7,0x9c, - 0xd2,0x37,0xbc,0x67,0x75,0xc9,0x08,0x05,0x04,0xfa, - 0xd0,0xd5,0xd7,0xef,0x17,0xf0,0x7d,0x08,0xc1,0xe3, - 0x30,0x81,0xf3,0xf7,0x1f,0xe6,0x81,0x23,0x74,0x76, - 0x93,0x76,0x22,0x24,0x73,0x0c,0xc8,0x17,0x36,0xef, - 0x01,0x12,0x52,0x9d,0x31,0x0d,0xd6,0x3b,0xbb,0x2d, - 0xa4,0x19,0xea,0x59,0x4f,0xd7,0x53,0x9b,0xcd,0x41, - 0xf3,0xd2,0x57,0x60,0x4a,0xff,0x65,0x19,0x62,0x3d, - 0xb4,0x1c,0xa9,0x0d,0x06,0x83,0x1e,0xc7,0xf0,0x49, - 0x0a,0x96,0x87,0x0b,0x73,0xdc,0x95,0xb4,0xe2,0xca, - 0x41,0xb5,0x12,0x10,0x3a,0x36,0xc0,0xd6,0x66,0x44, - 0xcb,0xa9,0xc0,0x9e,0x55,0xa1,0x04,0x76,0x6d,0x93, - 0xa1,0xcc,0x19,0x95,0x62,0xc7,0x92,0x31,0x4a,0x6a, - 0x3d,0xeb,0xef,0xb1,0x8e,0x07,0xe8,0xdb,0x08,0x43, - 0x7b,0x2e,0xde,0xc3,0xb1,0x00,0xcb,0x57,0x9d,0x53, - 0xaf,0x79,0x79,0xfe,0x30,0x01,0xc6,0x6b,0xaa,0x70, - 0x26,0x66,0x32,0x63,0x41,0x32,0xe0,0x01,0xad,0xd1, - 0x58,0x36,0xd3,0xaf,0xdf,0x2d,0xed,0x4f,0x66,0x06, - 0xef,0xfe,0xca,0x0f,0x8e,0x0a,0xc8,0xc8,0x35,0xf7, - 0x95,0xf9,0x33,0xac,0x12,0xe7,0x3e,0x5b,0x59,0x53, - 0x9b,0x46,0x78,0x98,0x69,0xe7,0x48,0x28,0x2f,0x23, - 0x04,0x8b,0xf2,0x00,0xac,0xb2,0x00,0x5b,0x5c,0x02, - 0x0e,0x5f,0xca,0xb8,0xac,0x67,0x5d,0x2c,0x33,0x3f, - 0xf4,0xa5,0x43,0xcf,0x14,0xbe,0x77,0x63,0xc2,0xd1, - 0x68,0x47,0xf8,0xa5,0xb1,0xc9,0xb2,0x11,0x57,0xdc, - 0x65,0x48,0xbf,0x5f,0xc6,0x8c,0xb9,0xbb,0xd0,0x08, - 0xf7,0x85,0x5a,0xa1,0x41,0x16,0x2f,0x5b,0x80,0xc7, - 0xb5,0xc0,0x69,0xa3,0xdd,0xc0,0x1a,0xf4,0x21,0x1a, - 0x26,0x81,0xa1,0xe5,0x01,0x0a,0xb1,0xa8,0x86,0x2f, - 0xc3,0x17,0x80,0x35,0xf8,0x74,0x05,0x1c,0x2b,0x29, - 0x0a,0x88,0xab,0x14,0x85,0x21,0xdd,0x0a,0x7f,0xb6, - 0x88,0x30,0x67,0xb1,0x70,0x08,0xf2,0x43,0xa3,0xc0, - 0x7d,0x57,0xdb,0xe7,0x0e,0x3c,0x82,0x6e,0xbc,0xed, - 0xa7,0xff,0x7a,0x30,0x09,0x1b,0x3c,0x91,0x01,0x11, - 0x60,0x4c,0xb6,0xc2,0xfe,0x77,0xe8,0x84,0x70,0x93, - 0xe0,0x70,0x57,0xe8,0x9c,0x66,0x1b,0x69,0xbb,0x31, - 0xcb,0x17,0x43,0xe7,0xc7,0x65,0xf5,0x03,0xa9,0xc8, - 0xe1,0xbe,0xfc,0x82,0x76,0x27,0xae,0x89,0x33,0x99, - 0xa6,0xa4,0x57,0x21,0xd6,0x48,0x23,0xb6,0xc5,0x1d, - 0x5b,0x98,0x95,0x1e,0x35,0x6a,0x5f,0xbf,0xa2,0xde, - 0x9c,0x83,0x2e,0xb3,0x9f,0x3e,0xeb,0xf5,0x1a,0x35, - 0x98,0x9e,0x23,0x08,0x08,0x46,0xc1,0x39,0x64,0x94, - 0x79,0x66,0x2d,0x82,0xb2,0x92,0x3e,0x6e,0xfc,0x0a, - 0x9c,0x3e,0x03,0x50,0x76,0x5f,0x96,0x5a,0x9e,0x21, - 0x4c,0xac,0x48,0x63,0xd7,0xfd,0x15,0x84,0xaf,0x72, - 0x0c,0xfa,0x0c,0xce,0x01,0xa4,0x15,0x20,0x40,0x56, - 0xe0,0xb0,0x4c,0x6c,0xb2,0x6f,0x38,0xd4,0x20,0xcd, - 0x0f,0x05,0x80,0x6d,0xcf,0x0b,0x87,0xbf,0x6c,0x56, - 0x62,0x48,0xdb,0x19,0x77,0xc8,0xcf,0xfd,0x0f,0xf1, - 0x8b,0x21,0x0f,0xe3,0x33,0x9e,0x61,0x6a,0x12,0x84, - 0x8d,0x22,0x82,0x47,0xb5,0x9e,0x4e,0x01,0x94,0x61, - 0x61,0x21,0x64,0x31,0x88,0xb9,0x0c,0x70,0x87,0xb0, - 0x20,0xe1,0x74,0x8b,0x20,0x8b,0x8a,0xfc,0xc1,0x52, - 0xe7,0x51,0xea,0x79,0xb6,0x80,0x66,0x83,0xb5,0xfd, - 0x28,0x20,0x19,0x0e,0xa4,0x36,0x98,0x5c,0x07,0x48, - 0x5d,0xec,0xa9,0x2e,0xc2,0x31,0xf4,0xe8,0xcb,0x31, - 0x7a,0x4a,0x02,0x6d,0x5c,0xa0,0xfe,0xfb,0x7c,0x3b, - 0x8d,0x33,0x84,0x56,0x5e,0xcc,0xf1,0xe8,0xab,0xe4, - 0x99,0x5b,0xbf,0x0c,0xf7,0xbc,0x56,0x2e,0x02,0xef, - 0x17,0x61,0xfb,0xe0,0x10,0x12,0x93,0xa2,0x08,0xb8, - 0xc2,0xdc,0x1a,0xcb,0xc6,0xeb,0x7b,0x09,0xe6,0x8c, - 0xf4,0x8a,0x7b,0x50,0xe2,0xc3,0x4f,0x07,0x81,0xf8, - 0xcb,0xd7,0xdf,0xca,0xea,0xf1,0xeb,0x45,0xcf,0xe3, - 0x16,0x7d,0x93,0xb1,0xe0,0x74,0x42,0xb8,0x2d,0x1d, - 0x32,0x81,0xd6,0x01,0x46,0x9b,0xa7,0x28,0x43,0xe4, - 0xbd,0xae,0xe3,0xa6,0xe3,0x41,0x6e,0x72,0x15,0xee, - 0xb3,0x96,0x82,0x3b,0xf4,0x2e,0x51,0x49,0x8f,0xc3, - 0x9c,0xe2,0xa6,0xdc,0xc1,0x48,0x13,0x00,0xb3,0xb5, - 0x46,0x59,0x48,0xad,0xc5,0x08,0x87,0xe5,0x67,0x7a, - 0xac,0xe0,0x1d,0x19,0xaa,0x1a,0xf2,0x05,0x0a,0x62, - 0x0e,0x1f,0xb1,0x74,0x4b,0xa4,0xd3,0x82,0xb5,0x28, - 0xda,0xe0,0x93,0x1f,0x14,0x2b,0xc5,0x78,0x0e,0x36, - 0x91,0x33,0x43,0x98,0x1c,0xbb,0x99,0x69,0xac,0x49, - 0xc3,0x35,0x73,0x80,0x00,0x72,0xda,0x64,0xe7,0x55, - 0xa5,0x53,0x30,0x11,0x72,0x1d,0xe7,0x05,0x60,0x08, - 0xa9,0x09,0x7a,0x4e,0x23,0x4d,0xac,0xbe,0xc0,0x46, - 0xc9,0x9e,0xae,0xaf,0xfe,0xfa,0xdc,0x42,0xdd,0xbd, - 0xfe,0x41,0xd1,0x80,0x1d,0x02,0xfa,0xce,0xe1,0x68, - 0xba,0xbf,0x03,0xe4,0xee,0xda,0x77,0xbb,0x03,0x78, - 0x14,0x18,0x51,0xe2,0x3d,0x02,0x14,0x80,0x5d,0x76, - 0xc5,0x90,0x70,0x09,0x5a,0x8c,0xf1,0x8c,0x70,0xc4, - 0x70,0x76,0xd7,0x9c,0x3e,0x15,0xcb,0xa3,0x37,0x1d, - 0x61,0x08,0xba,0x0d,0xfd,0xdc,0xce,0x1d,0x23,0x67, - 0x73,0x08,0x51,0x88,0x56,0xe5,0x1a,0x79,0x7f,0x56, - 0x3b,0xe8,0x35,0x96,0x12,0x7e,0x90,0x92,0x23,0x72, - 0xf1,0x12,0x9c,0xe3,0xa3,0xbb,0x64,0xa9,0xc5,0x1d, - 0x12,0x7e,0x81,0x72,0x90,0xf1,0x62,0xab,0xca,0x04, - 0xaa,0x2b,0x83,0x9c,0x19,0xd0,0x5c,0xe4,0x7d,0x8c, - 0x30,0x3a,0x35,0x41,0x1d,0x2a,0x4d,0x2b,0x6c,0x36, - 0x08,0xf1,0x1f,0xa5,0xe5,0xa8,0x13,0x03,0x5f,0xe3, - 0xcf,0xff,0x87,0x0f,0x67,0x0a,0x78,0x14,0x83,0x78, - 0x3a,0x14,0x1c,0x4a,0x17,0x9e,0x76,0x6f,0x6b,0xbd, - 0x79,0x0a,0x8f,0xba,0xbc,0x3c,0xce,0x5c,0xa9,0x31, - 0x42,0x25,0x7c,0xa0,0xec,0xe7,0x4b,0xd9,0xc9,0xfb, - 0x9b,0xef,0x60,0x1b,0x94,0xa8,0x8d,0x31,0xce,0xb4, - 0xa3,0x6c,0x4c,0x1c,0x93,0x0f,0x8f,0xd1,0xd8,0xe7, - 0x19,0xe1,0xb4,0xe0,0x5a,0xda,0x61,0x1e,0xbc,0x7c, - 0x04,0x6e,0x6e,0x76,0xa8,0xed,0xaf,0x57,0xe7,0x04, - 0x09,0x4d,0x28,0x60,0x22,0xa4,0x82,0xec,0x2d,0xc0, - 0x72,0x23,0x20,0x63,0xc5,0x05,0x68,0x34,0xac,0x60, - 0xd4,0x05,0x57,0xbe,0x11,0x43,0x08,0x69,0xc6,0xda, - 0x03,0xa4,0xa5,0x58,0xa9,0x67,0x04,0x5b,0x8f,0xe2, - 0x3a,0x6f,0x54,0xf2,0x7e,0x49,0xe9,0xe8,0xaa,0x21, - 0x5a,0x7e,0x58,0xc9,0x08,0x2b,0x7c,0xca,0x30,0xe9, - 0xcc,0x2c,0xbe,0xc3,0xe4,0xaf,0x02,0xc0,0xaf,0x39, - 0xf5,0x4f,0x57,0x31,0xdf,0xff,0xed,0x13,0x4b,0xf0, - 0x38,0x44,0x8c,0xd1,0xda,0x44,0x7b,0x18,0x30,0x0d, - 0xfd,0x60,0xee,0x08,0x1e,0x67,0x34,0x05,0xc5,0xe1, - 0xe4,0x70,0xbc,0xd6,0x5b,0xf2,0x7e,0x7c,0x99,0x6d, - 0x75,0x86,0x81,0xe7,0x30,0x70,0xc4,0x4d,0xf9,0xd4, - 0x8b,0x01,0x96,0x7a,0xb8,0x30,0xf8,0x6c,0x75,0x31, - 0x65,0x62,0x3e,0x55,0xe8,0x43,0x4a,0x4d,0x62,0xe1, - 0xf5,0x48,0x13,0x32,0xa2,0x13,0xda,0x81,0xb7,0x25, - 0xdb,0x85,0x8d,0x24,0xf2,0xfe,0x8b,0x4c,0xd3,0x8e, - 0x21,0x04,0x7d,0x87,0x57,0x95,0xa6,0x1f,0x7a,0x46, - 0xba,0xf8,0x41,0xc9,0x2c,0xc0,0x1e,0x5c,0x01,0xd3, - 0x5a,0x41,0x62,0x88,0xb5,0x67,0x81,0x14,0x32,0x16, - 0x7d,0xae,0x03,0x72,0x2e,0xbf,0x24,0x03,0xe1,0xdd, - 0xa0,0xf0,0x96,0x08,0x0f,0x75,0x38,0x2e,0xfc,0x36, - 0x7f,0x7c,0x90,0x39,0xd1,0x87,0x83,0xb1,0xa3,0x6d, - 0xa2,0x0d,0xa9,0x3f,0x0f,0x1e,0x73,0x5f,0x8e,0xcb, - 0x7f,0xec,0xfa,0x09,0xbb,0x84,0x03,0x37,0xb3,0xa8, - 0xec,0xd7,0x99,0x27,0xd0,0x30,0xdf,0xb3,0x94,0x2c, - 0x31,0x68,0x52,0xad,0xc5,0x28,0x4a,0x38,0x9e,0x46, - 0x0b,0x06,0xc0,0xd4,0x84,0x28,0x69,0x34,0xb4,0x5b, - 0x3d,0xbf,0x4b,0x1b,0x02,0x18,0x6b,0xbe,0x1f,0xdb, - 0x07,0x8d,0xf1,0xa1,0xa3,0x4e,0xc6,0x71,0x8c,0x4c, - 0xde,0x1f,0x65,0x20,0x00,0x96,0x57,0xb4,0xb1,0x69, - 0xb2,0x35,0x02,0x02,0x9a,0x6a,0x33,0x00,0x1d,0xf3, - 0x8e,0x88,0x12,0x57,0xaf,0x1f,0x33,0x2b,0xeb,0x11, - 0x5a,0xb3,0x2d,0x08,0x91,0xa9,0xa6,0xfc,0x0b,0xf8, - 0xb8,0x1a,0x82,0x1f,0x2f,0x01,0xb0,0x45,0xdf,0xc6, - 0x53,0xf2,0xfe,0xe8,0xea,0x3e,0x23,0xb4,0x32,0xf0, - 0x66,0xf4,0xc9,0x6f,0xe3,0x83,0x50,0xc2,0x46,0x3a, - 0xa9,0xfb,0xe0,0x0e,0x56,0x4b,0x73,0x48,0x3d,0xed, - 0x67,0x28,0x35,0xba,0x7a,0xde,0x9c,0xe0,0x4c,0xa7, - 0x2e,0x55,0x00,0x37,0xdc,0x7f,0x1e,0xc2,0x0c,0x76, - 0xe8,0x25,0x71,0x0c,0xba,0x65,0xe4,0xb6,0xf4,0xb5, - 0x73,0xcf,0xf6,0x22,0xba,0x74,0xa6,0x9c,0x8a,0x8e, - 0xbc,0x68,0xb1,0xe9,0x96,0xfa,0x6e,0x4d,0x0b,0x01, - 0x18,0x65,0x9a,0xaf,0x50,0x67,0x5f,0xc3,0x36,0x40, - 0x05,0xcc,0x36,0xd8,0xac,0xe9,0x35,0xd0,0x2b,0x3d, - 0xb9,0x29,0x98,0x1d,0x12,0x1d,0x83,0xf6,0x47,0x94, - 0xa8,0x1d,0x9e,0xc9,0xe3,0xa0,0x94,0x18,0x0c,0xbd, - 0x13,0xd8,0x5a,0x50,0xc9,0x25,0x25,0xb9,0x95,0x56, - 0xcf,0xa5,0xfe,0xd3,0x33,0x3d,0x4a,0x09,0xf1,0x01, - 0x3a,0xf0,0xcd,0xaa,0x9b,0xe9,0xf4,0x73,0xa5,0x9f, - 0xf2,0xfa,0xa7,0xc8,0xfb,0x87,0xec,0x01,0x63,0x33, - 0xaa,0xcb,0xd0,0x87,0x60,0x46,0xf8,0xd1,0xc0,0xa2, - 0x5d,0x70,0x62,0x38,0x54,0x49,0xc9,0x0e,0x20,0x1a, - 0xe4,0x79,0xeb,0x6f,0x5d,0xad,0x3e,0x30,0xa8,0x02, - 0x21,0x20,0x27,0xc8,0xd7,0x8e,0x5c,0xd3,0xef,0xbd, - 0x03,0x82,0xd1,0x06,0x78,0x5a,0xda,0x5e,0xa7,0xe1, - 0x5a,0xe0,0x44,0x17,0xe3,0x9c,0x35,0x35,0xaa,0xaa, - 0xd9,0x92,0x8a,0xa6,0xb4,0xe6,0xa0,0xeb,0xa2,0x13, - 0xb1,0x5a,0x18,0xe5,0xd8,0x90,0xf7,0x67,0x40,0xd1, - 0xb5,0xbc,0x44,0x41,0x58,0x47,0xa7,0x59,0x15,0xbb, - 0x68,0x04,0x0c,0xd5,0xd9,0xd3,0xee,0x65,0x79,0x22, - 0x8c,0x90,0x30,0xc9,0x49,0xaf,0xee,0x08,0x61,0xbd, - 0x93,0xeb,0xef,0x76,0xf9,0x95,0x03,0x0a,0x09,0x6e, - 0xfa,0xa0,0x94,0x8e,0x10,0xb9,0xcd,0x7e,0xbf,0x7e, - 0xbf,0xf0,0x71,0xbb,0x94,0x81,0x1f,0x06,0x92,0x87, - 0x0b,0x7a,0x30,0x04,0x99,0xf0,0x59,0xee,0x9a,0x76, - 0x6f,0x93,0xf7,0x03,0x44,0x81,0x73,0xab,0xad,0xb2, - 0xcd,0x46,0x50,0xb1,0xd9,0x92,0xf7,0x7b,0x57,0x17, - 0x34,0x3e,0x9f,0xfc,0x17,0x70,0x64,0x55,0xf3,0x98, - 0x72,0x8e,0x09,0x6e,0xcd,0xd9,0x77,0xe6,0x60,0x0b, - 0xcd,0x38,0x5a,0x1f,0x9e,0xfb,0x89,0x28,0x55,0xdc, - 0xbd,0x16,0x9b,0x91,0xf7,0xc9,0x30,0x9b,0x81,0x53, - 0x0d,0xa9,0xfd,0x51,0x56,0x10,0x0c,0x35,0x68,0x15, - 0xbe,0xd6,0xa5,0x31,0x40,0x85,0x24,0x5a,0xf1,0x53, - 0x8b,0x9e,0x09,0xfe,0xa1,0xe2,0x8a,0x76,0x6d,0x66, - 0xa7,0x42,0xef,0x73,0x0a,0xca,0x42,0x3c,0x72,0xce, - 0x15,0x5f,0xad,0x0e,0x15,0x0d,0x61,0x89,0x56,0x12, - 0x6d,0xca,0xb3,0xc8,0xa6,0x07,0x40,0x9f,0xee,0x7c, - 0x7d,0xcf,0xd7,0xcf,0x51,0xbd,0x0f,0x8c,0xe4,0xec, - 0x76,0xbc,0x30,0x08,0xe3,0x0a,0xb3,0xfe,0x24,0xf7, - 0x09,0x5b,0x66,0xb0,0x3a,0xfd,0x26,0xf0,0x23,0x50, - 0xb3,0x57,0x34,0xe8,0x48,0x39,0x6b,0x7d,0x46,0xe7, - 0x9c,0x03,0xb9,0xb7,0x8e,0x5e,0x0a,0x1c,0x4b,0x25, - 0xe6,0xda,0x7d,0x87,0x25,0x94,0xda,0xd5,0x33,0x93, - 0xa0,0x42,0x5e,0x21,0x3f,0x4c,0x00,0x6d,0x2a,0xed, - 0x96,0x81,0x2d,0x4d,0xb1,0x37,0x59,0x11,0xac,0xde, - 0x9e,0xe0,0x37,0x64,0x68,0x89,0x87,0x8c,0x70,0x4b, - 0xde,0x3f,0x00,0x1b,0x6c,0x94,0x6e,0x68,0x06,0xc5, - 0xc4,0xac,0xe4,0x42,0xe7,0x29,0x92,0xe9,0xaf,0x4d, - 0x07,0x2a,0x33,0x47,0xd7,0x1d,0x9a,0x53,0x03,0x7d, - 0x91,0xea,0x48,0xee,0x75,0x0d,0x93,0xc6,0x8c,0x81, - 0xb8,0x80,0x64,0x45,0x0d,0xa4,0x09,0xa2,0xe8,0x05, - 0x38,0x91,0xd7,0x5e,0xd9,0xcd,0xd7,0x3b,0x6b,0xfa, - 0x23,0x1d,0xfd,0x33,0x79,0x3f,0x23,0xdc,0x69,0x33, - 0xb8,0xad,0x22,0xf0,0x60,0x05,0xbc,0x17,0xd2,0xb6, - 0x63,0xc1,0x08,0x45,0xa4,0xa4,0xe2,0x3a,0x67,0x8f, - 0x03,0xd0,0xd6,0x28,0xaa,0xdb,0x6b,0x97,0x45,0x43, - 0xd7,0x72,0xde,0xd0,0x4f,0x9a,0xd8,0x47,0x02,0xb7, - 0x74,0x0f,0xcb,0xc7,0x0a,0xff,0xb2,0x39,0xf1,0x46, - 0xc9,0x68,0x36,0x8c,0x3b,0x0b,0x3c,0x40,0x16,0x72, - 0x07,0xc3,0x71,0x60,0xe3,0x8f,0x80,0x20,0x58,0x00, - 0x56,0x99,0xed,0xb1,0x57,0x93,0xa7,0x96,0x6f,0x10, - 0xb0,0x50,0x33,0x1c,0x69,0x8b,0xb2,0x6c,0x3a,0xb0, - 0x67,0x12,0xb3,0xcb,0x43,0x22,0x4b,0xdd,0x5e,0x28, - 0x7d,0x11,0x20,0x42,0x21,0x17,0x69,0x53,0xa7,0x4e, - 0x38,0xa4,0x81,0x2f,0x36,0x9a,0xf6,0x94,0x5f,0x83, - 0x4b,0xce,0xd7,0x70,0xfc,0xf5,0xa3,0x1d,0x6f,0xfc, - 0x22,0x50,0xe0,0xcd,0x2f,0xfb,0xc1,0x8f,0x9c,0x67, - 0x74,0xce,0x4a,0xc3,0xbc,0x5d,0x7d,0x68,0x58,0x81, - 0x8b,0x8c,0xee,0xd8,0x83,0x65,0x9b,0x39,0x5c,0xa0, - 0xe5,0x05,0x70,0x60,0x48,0xb2,0x73,0xcd,0x70,0x39, - 0xd7,0x58,0x9f,0x19,0x61,0xb7,0x44,0x4a,0x89,0x28, - 0x29,0xfc,0x30,0x94,0xdd,0xc6,0x59,0xd7,0xdb,0x65, - 0xd4,0xb8,0xd4,0xd9,0x9e,0x05,0x69,0xcb,0x71,0xf5, - 0xf6,0x19,0xe4,0xbe,0x6b,0x95,0xc6,0x8c,0x1d,0xc3, - 0xa2,0x9a,0x48,0x8a,0x69,0x9a,0x0c,0xa4,0xc7,0xde, - 0x67,0x13,0xf4,0xbd,0x45,0x74,0xa7,0xd5,0xee,0x5d, - 0x29,0xd0,0xc6,0x9e,0xa5,0x5b,0x03,0x0f,0xa8,0xcc, - 0x69,0x5a,0x03,0x46,0xcd,0x16,0x05,0xbe,0x31,0x80, - 0x86,0xb3,0x76,0xe0,0x97,0x45,0x89,0x99,0x15,0x9d, - 0x91,0xe3,0xfa,0x93,0x41,0xa0,0x67,0x6a,0x58,0x6f, - 0x8e,0xf2,0xf0,0xe1,0x8f,0xec,0x74,0x00,0x79,0xe7, - 0x39,0xc0,0x82,0x57,0x30,0x60,0xfa,0xbd,0xb7,0x7e, - 0x00,0xa2,0x70,0x82,0xf3,0xb0,0x0d,0x52,0x2c,0xab, - 0x01,0xa1,0xc2,0xe0,0xe4,0x78,0x23,0x04,0xb7,0x36, - 0x54,0x17,0x6f,0x0e,0xf3,0x34,0x5a,0xd3,0x17,0x4c, - 0xaa,0x2b,0x17,0x81,0x46,0x27,0xd6,0xd0,0x81,0x4a, - 0x4f,0xbd,0xdb,0x02,0xc6,0x5a,0x24,0xec,0xf8,0xdc, - 0xf2,0x47,0xa8,0x5a,0x81,0x02,0xdb,0x89,0x74,0xf6, - 0x68,0xf2,0xda,0x75,0xca,0x78,0xc9,0x60,0xd3,0x6b, - 0x42,0xf6,0x9c,0xcb,0x95,0xbb,0x57,0x9a,0x8e,0xae, - 0x8d,0x42,0x34,0x0c,0x69,0x0e,0x02,0xab,0xc2,0x9a, - 0x03,0xbf,0x7a,0x7c,0xd0,0x16,0xa8,0x0e,0x15,0xc1, - 0x46,0x89,0x94,0x70,0x6c,0x1a,0x0c,0xed,0xda,0x05, - 0xc9,0x3a,0x2b,0x03,0x30,0xfe,0x91,0x49,0xc0,0x0f, - 0xc1,0x07,0x78,0xfe,0xbe,0xc8,0xb3,0xc1,0x5d,0x27, - 0x42,0x30,0x63,0x16,0x6c,0x7e,0xef,0x56,0x50,0xb4, - 0x29,0x71,0x6c,0x4a,0x64,0x49,0x2d,0xe1,0x97,0xcf, - 0xfa,0x33,0x8b,0x6c,0xe9,0x2a,0x80,0x29,0xf7,0xb4, - 0x16,0x36,0x4f,0x99,0xcc,0x28,0x36,0x58,0x25,0x00, - 0xa6,0x20,0x09,0x1f,0x83,0xe5,0xd8,0x63,0x83,0x6c, - 0x00,0xe0,0x69,0x3a,0x18,0xf6,0x5d,0xda,0x5e,0x27, - 0x4a,0x1b,0xa9,0x4c,0xb3,0xcd,0xe5,0x01,0xbb,0xce, - 0xd4,0x6e,0xc1,0x6a,0x06,0x52,0x80,0x32,0x1f,0xd9, - 0x2d,0xbf,0x63,0xd9,0x74,0x3b,0x56,0x0b,0x9e,0x3e, - 0xa2,0x5c,0xbb,0x1b,0x0b,0xc0,0x9b,0xbf,0x03,0x01, - 0xe3,0xca,0x74,0xe3,0x49,0x08,0xd6,0xbb,0x56,0x68, - 0x55,0x20,0xc3,0xdf,0x22,0x0e,0x4e,0xb4,0xab,0xff, - 0x3c,0x00,0xf0,0xdf,0x88,0x12,0xfc,0xd5,0x81,0x3c, - 0xc2,0xd1,0x42,0xfa,0x8d,0xa4,0x0b,0xff,0x6e,0x50, - 0xda,0x91,0xf4,0x02,0x92,0xfc,0x0d,0x4e,0xf1,0x1e, - 0xdc,0xc0,0xe8,0x2b,0xa5,0x4d,0x35,0x48,0x7d,0x8a, - 0x31,0xfa,0x23,0x54,0x91,0x6d,0x69,0x51,0x98,0xd4, - 0xba,0xd6,0xb3,0x5e,0x05,0x09,0x32,0x6d,0xe4,0x7d, - 0xe5,0x9a,0x4f,0xe6,0x1b,0x3b,0xc3,0x91,0xf6,0xfd, - 0x3d,0x18,0x49,0x14,0x15,0xa0,0xb4,0x81,0xc1,0xe0, - 0xda,0xc5,0x51,0x93,0xdd,0x69,0x82,0x81,0x8d,0x77, - 0x03,0xc2,0x73,0x82,0x14,0xac,0xcd,0x5b,0x91,0xb2, - 0x1b,0x33,0x94,0x14,0x33,0xfd,0x92,0xb6,0x65,0xe9, - 0x3e,0xb0,0x05,0xa4,0xd6,0xda,0x2b,0x19,0xca,0xcb, - 0x16,0x8c,0x75,0x92,0x91,0x66,0x29,0xe7,0x33,0x22, - 0xf3,0x1e,0x5c,0x58,0x8b,0x97,0x9f,0xb7,0x7a,0x00, - 0xbc,0x7b,0xd8,0xf9,0xc7,0x41,0xe3,0x21,0x79,0x5f, - 0x42,0xf7,0x8e,0x03,0x70,0x6a,0x8b,0x25,0x14,0x7e, - 0x37,0x99,0xb7,0x03,0xa2,0x77,0x9b,0x3c,0x76,0x0c, - 0x44,0x60,0xff,0x34,0x36,0x63,0xc8,0xd3,0x25,0xb5, - 0x5c,0x85,0x1d,0xb3,0x6f,0xd9,0x08,0xcc,0x39,0xc7, - 0x32,0xa7,0xd4,0x48,0x69,0xbf,0x77,0xa9,0xd9,0x08, - 0xd3,0x8d,0xa2,0xac,0x8f,0x39,0x74,0x42,0x93,0x6b, - 0x33,0x1a,0x0b,0xbd,0x91,0x39,0xaa,0xfe,0xdf,0x22, - 0xbe,0x0a,0xa6,0x0e,0x69,0x37,0xea,0x56,0xc8,0x1c, - 0x23,0x9b,0x77,0x43,0x6a,0x08,0xd3,0xe5,0xf2,0x32, - 0x6a,0x5f,0xfe,0x1b,0x35,0x40,0x81,0x45,0x26,0x8e, - 0xa3,0x8a,0xb4,0x5c,0x7a,0x07,0x9c,0x6c,0x46,0x56, - 0xa2,0x55,0xc3,0x8d,0x18,0x40,0x42,0xdd,0x9c,0x58, - 0xa4,0x14,0x9b,0x6f,0x24,0x28,0x5d,0x1b,0xb4,0x91, - 0x33,0xdc,0x4a,0x82,0xdd,0x52,0xcb,0x70,0xea,0xdc, - 0xfd,0x93,0xe4,0xfd,0x71,0x09,0x4a,0x3c,0x52,0x26, - 0xd8,0x12,0x7e,0x70,0xa8,0xdb,0x43,0x6a,0x78,0x18, - 0x3d,0xc0,0x86,0xde,0xe7,0x6e,0x7b,0xdc,0x75,0x30, - 0x36,0xec,0xc0,0xd4,0x70,0xd0,0x28,0xc7,0xd4,0x40, - 0x8f,0x31,0x93,0x53,0x47,0xbf,0x03,0x9a,0xd5,0x65, - 0x9a,0x06,0xdb,0x54,0x8b,0x6c,0x58,0x4e,0x41,0x5b, - 0x8c,0xd8,0xf0,0x12,0x34,0x1b,0x42,0x82,0x29,0x5a, - 0x06,0x72,0x91,0x6e,0x96,0xc3,0xd0,0xaa,0x01,0x26, - 0xe2,0xbd,0x1b,0xf1,0x88,0x5d,0x0e,0x56,0x01,0x0d, - 0x81,0xe6,0xa7,0x59,0x0a,0x3a,0x9b,0x02,0x49,0x70, - 0x99,0x63,0xb8,0xf3,0xf2,0xba,0x97,0xd7,0x6c,0x03, - 0xd6,0x75,0x05,0xe7,0x79,0xa7,0x49,0x52,0x55,0x25, - 0xc6,0x60,0x00,0x1d,0x29,0xfa,0x87,0xa3,0xda,0xaf, - 0x91,0x31,0x83,0x2d,0xdf,0xf3,0x3a,0xf5,0xaf,0x4f, - 0x91,0xf7,0xf1,0xf1,0x45,0x7f,0x4b,0xde,0xdf,0xe1, - 0xe7,0xcf,0x3b,0x11,0xfc,0xcd,0x19,0x1f,0x52,0x82, - 0xde,0x63,0x0a,0x59,0x3c,0x37,0x86,0x46,0xab,0x2e, - 0x66,0x2e,0xb3,0xe7,0x13,0x47,0x93,0xec,0x6a,0xa6, - 0x93,0x0f,0x2e,0x02,0x37,0x7e,0x1e,0x2e,0x99,0x05, - 0xaa,0x7f,0x60,0x3e,0x5f,0x0c,0x91,0xf0,0x06,0xb6, - 0xdd,0x85,0xf9,0x28,0x97,0x11,0x75,0x36,0xe0,0xb0, - 0x65,0x7d,0x64,0x2b,0x5e,0xfa,0x75,0xaa,0x1d,0x0f, - 0xa8,0xef,0x21,0x59,0x50,0x77,0xd0,0xfd,0x08,0xea, - 0x1c,0x01,0x7a,0x2f,0xc4,0xc7,0xff,0x4d,0x12,0x6d, - 0x01,0x3a,0x9c,0x70,0x5e,0x55,0x34,0x76,0x62,0x18, - 0x18,0xd8,0x8a,0x5c,0x26,0xa0,0xc4,0xb0,0xdf,0x47, - 0xa5,0x95,0xa3,0xe0,0xfb,0x2b,0xb0,0xcb,0xdd,0xd2, - 0x00,0x4c,0x83,0xa2,0xbf,0xfe,0x56,0x0f,0xf8,0xb7, - 0x95,0x01,0xc6,0x63,0x3f,0x5f,0x8e,0x03,0xd9,0x88, - 0xc7,0xb4,0xfe,0x78,0x94,0xfb,0x81,0xff,0xd0,0xcc, - 0x08,0xe3,0x87,0x38,0x8c,0x14,0xe2,0xd4,0xe4,0x60, - 0x1c,0x84,0x84,0xb0,0x61,0xe0,0xe4,0xfd,0xf2,0xc6, - 0xfa,0xdb,0x6c,0xc8,0x25,0x1f,0xeb,0x07,0x8c,0x96, - 0x4e,0x6f,0x59,0x2f,0x26,0x0b,0xae,0xc7,0xb2,0x01, - 0x37,0x2f,0xbc,0xa0,0x98,0x57,0xda,0x77,0x5f,0xe3, - 0xad,0x3a,0x4b,0x3f,0x75,0xfb,0x14,0x43,0xc8,0x1c, - 0x84,0x39,0xd1,0x08,0x3f,0x97,0x42,0xde,0x6f,0xe7, - 0x4d,0x73,0xdf,0xe1,0xa6,0xf0,0x6a,0x8c,0x45,0x2c, - 0xfe,0x3d,0x4d,0x4c,0xc9,0x53,0x4f,0xd7,0xf2,0x1f, - 0x26,0xe0,0xea,0xba,0x8e,0x1c,0x34,0x15,0x21,0x9b, - 0x20,0x74,0x24,0x90,0x15,0xcc,0x86,0x5c,0xd3,0xf7, - 0x40,0xc0,0x0f,0xa2,0x80,0xcf,0xbc,0x3f,0xb0,0xf9, - 0xe7,0xe1,0x4b,0x71,0xfe,0x45,0x1c,0xdb,0x05,0x29, - 0x0a,0x8f,0x9d,0xc2,0x96,0xa5,0xaa,0x77,0x67,0xc9, - 0xf3,0xeb,0x1c,0x5b,0x5b,0xf3,0x54,0xab,0xba,0xa7, - 0x1e,0x7d,0x47,0x0f,0xe9,0x6f,0xe7,0x1e,0x98,0xa2, - 0x7f,0x12,0xef,0x87,0x9b,0x85,0x62,0x8c,0x43,0x5f, - 0x84,0x87,0x0e,0x01,0x9b,0x0f,0x00,0xea,0xdc,0xfc, - 0x30,0x83,0x64,0x93,0x77,0x9f,0xee,0x3e,0x65,0x11, - 0x23,0x68,0x1c,0xf4,0x4b,0x38,0xb1,0x88,0x16,0x4d, - 0x0b,0xd2,0xd6,0xfd,0x0e,0xd9,0x55,0x98,0x5c,0x2e, - 0x4d,0x4b,0x0a,0xb8,0xf1,0xeb,0xa8,0xd2,0x62,0x69, - 0x33,0x82,0xfb,0x2d,0xa0,0x66,0x78,0x14,0x7a,0x7a, - 0x1f,0x0c,0x17,0xf6,0xa5,0x7c,0x9f,0x96,0x54,0xc0, - 0x6b,0x20,0xa9,0xdc,0xe2,0x95,0x45,0x7c,0x3d,0x5f, - 0xfb,0xf8,0x79,0x80,0x78,0x40,0xde,0xe7,0x4f,0x3f, - 0xcb,0x8d,0x8f,0xe3,0x3b,0x71,0x0d,0x01,0x9c,0xc3, - 0x43,0xee,0x32,0x9e,0x86,0xbc,0x43,0x47,0x23,0x8c, - 0xdb,0xde,0xf4,0x29,0x0c,0x95,0xa6,0x39,0x61,0x53, - 0x80,0xb8,0x5c,0x11,0x7c,0x97,0xa6,0x28,0xad,0x61, - 0xa6,0xfe,0xbf,0x54,0xdf,0x01,0x73,0x0d,0xc7,0xc6, - 0xca,0xa4,0x2b,0xdd,0x00,0x6d,0x3a,0x24,0xa1,0x8d, - 0xcd,0x6d,0x44,0x5a,0x2d,0xf2,0x13,0xe2,0xd8,0x43, - 0x61,0xe3,0x71,0x98,0x69,0xc9,0x08,0x81,0x21,0x65, - 0x00,0x92,0x35,0xad,0xf1,0x87,0xea,0xd1,0xa7,0x13, - 0xb6,0xb0,0xce,0xc3,0xd6,0xd8,0x21,0x6d,0x46,0xa4, - 0xec,0xc8,0x8c,0x8a,0x89,0xe0,0x6e,0x4b,0x91,0x80, - 0x4b,0xfb,0xac,0xd4,0x57,0x58,0x15,0xc5,0xda,0x20, - 0x5e,0x9d,0xa8,0x67,0x01,0xe0,0xc9,0x43,0x4e,0xbc, - 0xf5,0xf9,0x27,0x73,0x3d,0x8f,0xe2,0x0e,0x6e,0x5a, - 0xfc,0x4f,0x95,0x43,0x0e,0xe4,0xfd,0x56,0x40,0xdc, - 0x8a,0x85,0x24,0xe1,0x08,0x3c,0x0c,0x0c,0x7c,0x90, - 0x96,0xf7,0x6b,0x54,0xfc,0x1e,0x80,0x31,0xb6,0x4e, - 0xf1,0xb4,0x0d,0x9e,0xe2,0x04,0x1c,0xca,0xee,0x61, - 0x20,0x99,0x3c,0xe4,0xcd,0xd8,0x58,0x49,0xee,0x5c, - 0x12,0x63,0xd7,0xdf,0x60,0xca,0xdd,0x77,0x34,0x32, - 0x70,0x1b,0xbe,0xe4,0xa8,0x38,0xbb,0x11,0x90,0x6c, - 0xe2,0xc2,0x03,0xd1,0x24,0xb6,0x2e,0x4e,0x06,0x77, - 0x5e,0x3a,0x13,0x5b,0x29,0xa5,0x05,0x11,0x30,0x92, - 0xb0,0x20,0xa1,0x56,0xf4,0x17,0xc3,0x2f,0xf8,0x10, - 0xce,0xc5,0xbb,0x26,0x3f,0x31,0xd0,0xf6,0x9d,0xe9, - 0x8b,0x08,0xd1,0x1b,0x2c,0xc7,0xce,0x32,0xd5,0xc9, - 0x50,0xfe,0x55,0xc0,0x55,0x00,0x43,0x40,0xad,0xc1, - 0xf8,0xbb,0x64,0x1f,0xcf,0xb7,0xf0,0xa7,0x86,0xa1, - 0xf8,0x09,0x2e,0xc8,0xc3,0x02,0xe7,0x41,0xe9,0x67, - 0x43,0xde,0xe7,0x30,0x65,0xe0,0x80,0xea,0x6f,0x5d, - 0x7c,0xef,0xc9,0xfb,0x25,0x08,0x1c,0x87,0x94,0x4b, - 0x65,0xe2,0x92,0x24,0xfb,0x61,0x87,0x26,0x88,0xba, - 0x6d,0x65,0xb0,0x33,0x65,0x11,0xdd,0x03,0xea,0xa4, - 0x11,0x36,0x45,0x72,0xf1,0xaa,0xed,0x74,0x67,0x8a, - 0x79,0x48,0x2f,0x83,0xd6,0xe2,0xd0,0x09,0xbc,0x02, - 0x20,0x06,0xf2,0x3e,0x4b,0x0a,0xce,0x8c,0x7d,0x14, - 0x34,0x6e,0x05,0x83,0x12,0x54,0x88,0xa2,0xd5,0xb0, - 0xba,0x0b,0x2c,0x12,0xe2,0x6e,0x2b,0xd6,0x7d,0x10, - 0x59,0xfe,0x0e,0x71,0x33,0x66,0xb9,0xb2,0x9b,0x5d, - 0xcc,0x7d,0x07,0xe8,0xea,0x11,0x2b,0x20,0xcf,0x82, - 0x80,0x23,0xd8,0xb9,0x4b,0xe0,0x41,0xa5,0x27,0x7f, - 0x25,0x04,0xfd,0xb3,0xb0,0x20,0x1e,0xfc,0xe5,0x0d, - 0x75,0x9f,0x03,0x14,0x4f,0xbb,0xf8,0xe9,0xb3,0xee, - 0x9c,0x8b,0xdb,0x28,0xc2,0xe3,0x6f,0x6e,0x33,0x17, - 0x22,0x2e,0x4c,0xea,0x03,0x08,0x8a,0x4f,0x5d,0xdf, - 0xdd,0x12,0x5e,0x51,0x5a,0x6b,0xac,0xd4,0xce,0x74, - 0x06,0xda,0x7e,0x9f,0x36,0x51,0xee,0xd9,0x87,0xf0, - 0xb8,0xc4,0x51,0x66,0xd6,0xb4,0x2b,0x90,0xf7,0xd9, - 0xaa,0x88,0x46,0xde,0xcf,0xa8,0x4c,0x49,0x63,0x97, - 0x99,0xa5,0x4e,0xdb,0xcd,0xe3,0xa5,0x2c,0xab,0x62, - 0xab,0x8e,0xba,0x63,0x97,0xd2,0xa3,0x63,0x2e,0xec, - 0xe4,0x7d,0xe3,0x48,0xc0,0x02,0xf0,0x65,0x5f,0xf6, - 0x02,0x1f,0xdb,0x45,0xae,0x73,0x00,0x8e,0xf2,0x89, - 0x05,0x41,0x0d,0xdc,0xec,0x4e,0xbe,0x1a,0xbc,0x6c, - 0x92,0xbf,0xc9,0xa9,0x99,0x87,0xec,0x56,0x02,0x9e, - 0xb0,0x45,0x84,0x3f,0x1b,0x05,0xbe,0x43,0xec,0x79, - 0x9f,0xb3,0xbf,0x01,0x0a,0x70,0x07,0xf2,0x3d,0x40, - 0xb6,0xf3,0x5b,0x10,0x46,0xce,0x3c,0x4d,0xcc,0x75, - 0x06,0x5d,0xf0,0xa2,0xc9,0x62,0xd5,0x3c,0x1b,0x26, - 0xf0,0xc1,0x47,0x00,0xa3,0xf4,0x0a,0xc0,0xe6,0xa5, - 0x97,0x13,0x92,0xaa,0x47,0x5f,0x3d,0xfb,0x22,0xf9, - 0x36,0xd4,0xda,0x21,0xa0,0x09,0x79,0x9f,0x23,0xb3, - 0x1d,0xdd,0xf4,0xab,0x78,0x03,0x1a,0xfe,0xd2,0x46, - 0x75,0x5d,0xd4,0x12,0xac,0x9a,0xa1,0x69,0x7f,0x90, - 0x7f,0x21,0x7a,0xef,0x2e,0x8f,0x1e,0xa3,0x11,0x8c, - 0xd8,0x02,0xf0,0x8a,0xa4,0xf4,0x8d,0x78,0x08,0xa1, - 0x88,0x82,0x4d,0x98,0x81,0x1b,0xda,0x33,0x0e,0x53, - 0xef,0x19,0xc2,0xa8,0x54,0xf8,0x94,0x06,0x18,0xb2, - 0x78,0x02,0x84,0x4a,0x32,0x63,0x4a,0xf6,0xd6,0xbf, - 0x09,0x00,0xc4,0x79,0xd1,0x6e,0xec,0xb1,0x1a,0x51, - 0xe3,0x84,0x9e,0xf3,0x1e,0x62,0xbb,0x0b,0x20,0xdc, - 0x5c,0x1d,0x05,0x68,0x4a,0xab,0xea,0x66,0x50,0xe8, - 0x94,0x11,0x30,0xb5,0x0e,0xd0,0x1b,0x12,0xd8,0x47, - 0x8b,0x76,0xde,0x74,0x7b,0x70,0xa2,0x25,0x2d,0x28, - 0xf0,0xf0,0x18,0xa5,0xff,0x3e,0x50,0x3e,0x87,0x4d, - 0xfc,0xb5,0x04,0x59,0xb6,0x51,0x8a,0x02,0x6e,0x77, - 0x1d,0xcc,0x57,0x27,0x85,0x6b,0xba,0x78,0xf0,0xe8, - 0xf3,0xcc,0xec,0x52,0x42,0xe8,0xe4,0x2d,0x2a,0xb8, - 0x57,0x1c,0x7f,0x39,0x47,0x9d,0x93,0x9d,0x3b,0x42, - 0x3d,0x88,0x31,0x9a,0xfd,0xf8,0xe2,0x61,0x74,0x46, - 0x64,0x4b,0x38,0xe1,0xde,0x68,0x3a,0x05,0xc2,0xe0, - 0xc3,0xaa,0x72,0xb2,0x3e,0x07,0xe1,0x9e,0x86,0xf5, - 0x5a,0x62,0x04,0x5d,0x87,0x51,0xc7,0x2c,0x0a,0xc3, - 0xf1,0x4f,0x03,0x00,0x9e,0xa3,0x88,0xdc,0xb6,0xe9, - 0x6e,0x8a,0x11,0x3c,0xc0,0x0b,0x62,0x6c,0xb2,0xc5, - 0x0a,0x6b,0x8f,0x20,0x97,0x1b,0x78,0x93,0x7d,0xa8, - 0xd5,0x6a,0xd4,0xfc,0x0b,0xc6,0x16,0x6c,0xd9,0x46, - 0xa0,0x26,0x7a,0xbd,0x1d,0xc2,0xbc,0xa7,0x84,0x5d, - 0xd1,0x90,0x75,0x46,0x19,0x39,0x39,0xa2,0xe7,0x3a, - 0xc9,0xa3,0x40,0x78,0xf2,0xf5,0xe1,0x73,0x0b,0x33, - 0x93,0xc1,0x4e,0x25,0x8e,0x12,0x64,0xb0,0x09,0xad, - 0xdc,0xb9,0x34,0xb3,0x90,0x67,0xa8,0xe6,0x1f,0x56, - 0x63,0x13,0xa6,0x35,0x80,0xa9,0xbe,0x15,0x9e,0x33, - 0xdb,0x7d,0xaf,0x4c,0x05,0xa8,0x0b,0x5d,0xe2,0x42, - 0x49,0x1e,0x4b,0x7a,0xef,0xf7,0x76,0x23,0x71,0x0e, - 0x66,0xd8,0x42,0x6e,0x41,0x33,0x5d,0x75,0x67,0x25, - 0xc8,0x20,0x52,0xc3,0x57,0xf8,0xfb,0x00,0xc0,0x0f, - 0xbd,0x1b,0x3f,0xe5,0xfb,0x9c,0xc9,0xfb,0xe3,0x90, - 0xdc,0x6f,0xd0,0xdb,0x0c,0x64,0xdd,0xea,0x0f,0x6f, - 0x33,0x15,0xda,0xce,0x99,0x11,0x59,0xc2,0x64,0xaa, - 0x52,0xe9,0x80,0x94,0x98,0xb3,0xea,0x76,0x96,0xd2, - 0x8e,0xe7,0xf1,0x61,0xc8,0x8e,0xd2,0x76,0x6a,0x36, - 0x15,0x61,0x4e,0xe1,0x4f,0x01,0xdb,0x60,0x74,0xd3, - 0x32,0xa4,0xe2,0x81,0xcf,0x4d,0x32,0xd9,0x44,0x30, - 0xa1,0xc1,0x39,0x34,0x5c,0xd8,0x66,0x13,0x64,0x47, - 0x7c,0x8d,0xd5,0xaa,0x6a,0x31,0x42,0xfb,0x0c,0xcc, - 0x49,0x18,0x99,0x02,0xeb,0xa6,0x20,0xc2,0x86,0xed, - 0xc8,0xda,0x7d,0xd0,0xc1,0x06,0x08,0x1d,0xda,0x35, - 0x1a,0x68,0x11,0xbb,0x27,0x0c,0xc8,0xbe,0xae,0x30, - 0x3b,0x31,0xa2,0x38,0x50,0xab,0x9d,0x2b,0xd4,0x27, - 0x52,0xdd,0x9b,0x7f,0x13,0x00,0xf0,0x87,0xef,0x7e, - 0x20,0xf0,0x3e,0xb6,0xe4,0xfd,0xb0,0x53,0xf2,0x50, - 0x2c,0x4c,0x38,0x89,0xbb,0x1d,0x73,0x3c,0x10,0xd8, - 0x43,0x80,0x37,0x1c,0xa4,0xf2,0xe3,0x61,0x53,0xa3, - 0xde,0xfe,0x5c,0x94,0x1a,0xc0,0xa1,0xe4,0x08,0x0e, - 0x22,0x08,0x03,0x7a,0x44,0xb4,0xe4,0x56,0x04,0x9c, - 0x82,0x2e,0x4f,0xf5,0xdb,0xa1,0xc6,0x17,0x8a,0x25, - 0x68,0x09,0x52,0x01,0x30,0x90,0x31,0xcd,0xa0,0x78, - 0xe9,0xcd,0xb5,0x85,0x9e,0xca,0xc2,0xd4,0x50,0xdb, - 0xe0,0x0b,0xf2,0xbd,0x34,0xf2,0x7e,0x11,0x30,0xd1, - 0xce,0x1d,0xf6,0xe4,0xfd,0x31,0x27,0xfa,0x3c,0x4b, - 0x64,0xc1,0x07,0x73,0x2d,0x5a,0x52,0x23,0xb6,0xb7, - 0xc0,0x7e,0xcb,0x53,0xfc,0x1a,0xff,0x29,0xd4,0xf1, - 0x34,0x85,0x20,0x42,0xa3,0xb2,0x49,0xb2,0x79,0x86, - 0xad,0x88,0xf7,0xef,0xe8,0x01,0x6c,0x63,0x43,0xee, - 0x99,0x1f,0xf1,0xc0,0xbb,0x9e,0xa2,0xcf,0x78,0xf0, - 0x5e,0x51,0x18,0x47,0xfe,0x1d,0x8f,0x8a,0x1b,0x40, - 0xca,0x91,0xeb,0x96,0x83,0x51,0x6b,0x0f,0x34,0xb0, - 0xc8,0xba,0xd2,0x48,0xb8,0x29,0xb7,0xc1,0xa2,0x97, - 0x1b,0xc8,0x57,0xd5,0x01,0x40,0x37,0xc7,0x48,0x09, - 0x09,0x6d,0x9c,0x16,0x6b,0xf8,0x66,0xe6,0x14,0x9d, - 0xbc,0x6f,0xf6,0x3b,0x35,0x30,0x15,0xe0,0x8e,0x5c, - 0x53,0x83,0xc6,0x08,0x24,0x3b,0xad,0x88,0x9b,0xc1, - 0x44,0x8e,0x30,0x86,0xb1,0xe9,0x94,0xb0,0xcc,0xeb, - 0x73,0x05,0xed,0xe2,0xa4,0xbb,0x49,0x10,0x87,0x29, - 0x41,0x5a,0x39,0xb5,0xf8,0x11,0x12,0xe8,0xc6,0xd8, - 0x92,0xf7,0x91,0x6f,0x46,0xaf,0xcf,0x5e,0x1d,0x24, - 0x5a,0x56,0x57,0xe4,0xe9,0x2e,0xe1,0x18,0x88,0x92, - 0xf1,0xa8,0x58,0xc6,0xbf,0x1f,0x00,0x5a,0x34,0x78, - 0xe6,0x94,0x73,0x6e,0x0b,0x1e,0x36,0x50,0x3c,0xc9, - 0x50,0xba,0x2f,0x1b,0x43,0x44,0xe1,0xa3,0x11,0xc1, - 0xfd,0xac,0x1b,0x33,0x79,0x3f,0xd6,0xbe,0xf0,0x40, - 0x49,0xdc,0xc0,0x2d,0x09,0x25,0x65,0x5f,0x25,0x17, - 0xd7,0x7c,0xac,0x1d,0x92,0x27,0xa0,0x34,0x59,0xa9, - 0x9b,0xf9,0xe5,0x1a,0x3b,0xdd,0x04,0x5b,0xae,0x5d, - 0xb5,0xfc,0xc8,0xcb,0xe3,0x3e,0x5d,0x0d,0x14,0xa9, - 0x71,0xb4,0xe2,0xc0,0xb1,0x06,0xa4,0x40,0x89,0x40, - 0x64,0xc2,0x50,0xe7,0xbc,0xe1,0xe4,0x7d,0x16,0xa3, - 0xcf,0x54,0x4e,0x8d,0x0a,0xec,0xf1,0x1a,0x32,0x72, - 0x7e,0xc4,0xb2,0x06,0x5b,0x59,0x4e,0xdd,0xfa,0xeb, - 0x10,0x0f,0x7a,0x77,0x8c,0xd5,0x9c,0x05,0x58,0xd3, - 0x9e,0xa4,0x97,0x14,0x08,0x38,0x14,0x86,0x91,0x29, - 0xfe,0x3a,0x00,0x9c,0x86,0x53,0xb8,0xe7,0x9b,0xf3, - 0xcd,0xaf,0xdc,0xe9,0x00,0xf0,0x90,0x20,0xbc,0x35, - 0x7b,0x8c,0xc3,0x1c,0xdf,0x61,0x44,0x76,0x37,0x74, - 0xc4,0x94,0x69,0x8c,0x88,0xa1,0x3b,0x8e,0xc0,0x98, - 0xd6,0xdc,0xe0,0x21,0xec,0x29,0x7a,0xd1,0xf4,0x04, - 0x16,0x9d,0x55,0xca,0x02,0xa4,0xa0,0xc2,0x11,0x89, - 0x33,0x25,0x4b,0x95,0xd6,0x3f,0x0b,0xa7,0xca,0x16, - 0x20,0xaa,0x98,0x26,0xef,0x4c,0x65,0xab,0x66,0xf6, - 0x12,0x5b,0x65,0x8d,0x71,0x05,0xf5,0x2e,0xcf,0x3b, - 0x04,0x80,0x45,0x77,0x2a,0x22,0x9b,0x63,0x04,0x64, - 0x10,0x5f,0x67,0xb7,0xb4,0xa7,0xef,0x97,0x05,0x58, - 0xe2,0x2a,0x35,0xa3,0x5f,0x8e,0x3c,0x2e,0x2b,0x7e, - 0x9d,0x47,0x02,0x87,0x1d,0x1c,0x58,0x26,0x2a,0x68, - 0xd5,0xb0,0x0b,0x1c,0x0d,0x8e,0x42,0x3b,0x9e,0x78, - 0xcd,0xab,0x6c,0xfa,0xe3,0x00,0x80,0xc3,0x5f,0xb1, - 0x47,0xd6,0x4f,0x7e,0xa2,0xa7,0x99,0xed,0x00,0xb4, - 0x9e,0xb2,0x07,0x3e,0xfd,0xf1,0xa3,0xc9,0x08,0xda, - 0x6e,0x5b,0xa4,0xd7,0xc6,0xde,0x94,0x61,0x70,0x83, - 0x88,0x47,0xe6,0x7c,0x57,0x90,0xa9,0x51,0x02,0x16, - 0x60,0x04,0x99,0x06,0xb6,0x99,0x13,0x7b,0xb1,0xed, - 0x1b,0x64,0x47,0x2e,0x03,0x08,0xda,0x2c,0xef,0x95, - 0x15,0xec,0x56,0xe3,0x58,0xbb,0xba,0x7e,0x1a,0x4c, - 0x12,0xdb,0xbb,0x54,0xc4,0xf0,0x51,0x2e,0x72,0x90, - 0xce,0xf6,0x40,0x54,0x8a,0x50,0x14,0x8d,0x46,0xd0, - 0x55,0xc4,0x1c,0xb5,0x5d,0x81,0x13,0x0d,0xc8,0x6b, - 0x25,0x3f,0xb4,0xfe,0xae,0xa9,0x3c,0x46,0x12,0xee, - 0x54,0xd0,0xaf,0x0e,0xb1,0xa9,0x2b,0x19,0xa5,0x93, - 0xe0,0xd8,0x6c,0x1f,0xc3,0xae,0xd9,0x04,0xf4,0x00, - 0xbc,0xbc,0xc0,0xf5,0xbb,0xf8,0x67,0x4b,0x00,0xfe, - 0xea,0xf5,0xfd,0xe4,0x1d,0x1e,0x07,0x11,0xde,0xbc, - 0x85,0xdb,0xa0,0xc3,0x23,0xd9,0x09,0x0f,0x9b,0x03, - 0x26,0xc9,0x8b,0xd1,0x1a,0x66,0xe3,0x0e,0xef,0xd0, - 0xc0,0xb3,0xd3,0x80,0x53,0x65,0x1a,0x1c,0xe8,0x0e, - 0xe4,0x06,0x34,0x0c,0x01,0x92,0x1c,0x8c,0x9a,0x59, - 0x3b,0x85,0x00,0xe6,0xfa,0xe4,0x40,0x22,0x2a,0xda, - 0xf6,0x82,0x9d,0x7c,0xb7,0xd6,0x24,0x7f,0x00,0x9b, - 0x92,0x13,0xd1,0x7f,0x76,0x8d,0xe5,0xeb,0x39,0xf9, - 0x90,0x0f,0x75,0x9d,0x17,0x70,0x73,0x0a,0x92,0x0a, - 0xa6,0x01,0x11,0x26,0xad,0xdf,0x84,0x26,0x4e,0x40, - 0x58,0xc7,0x83,0x22,0xeb,0x6d,0x98,0x0a,0x3c,0x2b, - 0x53,0xf5,0x2e,0xf7,0x70,0x2d,0x4c,0x24,0xb7,0x68, - 0x17,0x21,0x55,0xd6,0x18,0x41,0xb2,0x92,0x9a,0x4e, - 0x20,0x20,0x7f,0xd6,0xef,0x7b,0x23,0x1f,0xe0,0x33, - 0x3c,0xf0,0x53,0x61,0xe6,0x29,0xb3,0xe8,0xb0,0xd3, - 0x73,0x97,0x6d,0x1f,0x33,0x19,0x37,0x6b,0x4e,0xe9, - 0xfe,0xce,0x31,0x40,0x76,0x7b,0xdc,0x25,0x27,0x26, - 0xce,0x81,0x33,0xb4,0x4a,0xdb,0x01,0x6f,0xc3,0x22, - 0xaa,0x18,0x85,0x96,0x04,0x18,0xd9,0x21,0x5c,0xeb, - 0x4d,0xd5,0xf8,0x83,0x91,0xac,0x18,0x23,0x27,0xda, - 0xb9,0xa4,0x6c,0xa8,0xcc,0xff,0xb3,0x06,0x82,0x74, - 0x0b,0x66,0x02,0xce,0x90,0x3e,0xbe,0x16,0x0f,0x32, - 0x27,0x4f,0x89,0x7b,0xb1,0x40,0xd3,0x76,0x1b,0x4b, - 0x7b,0xa0,0x5e,0xa0,0xd5,0x2a,0x74,0xe9,0x37,0x8e, - 0xe0,0xbf,0x3a,0x95,0x84,0x9a,0xa5,0xba,0x72,0x13, - 0x12,0x63,0xf2,0x2a,0x8f,0x68,0x82,0x27,0x72,0x51, - 0xbe,0x6e,0x97,0xc2,0xd3,0x09,0x9b,0x0f,0x95,0x07, - 0xfb,0x97,0x13,0x69,0xe5,0x86,0x67,0xff,0x9e,0x1d, - 0xf1,0x43,0x38,0x8f,0xb1,0x74,0xe1,0x43,0xf4,0xb1, - 0x3c,0xfc,0x94,0x74,0x9f,0x5b,0x4e,0x61,0x6b,0x24, - 0xec,0xa7,0xec,0xee,0x2f,0x25,0x47,0xe1,0x84,0xec, - 0xfd,0x59,0xd4,0xaa,0xde,0x58,0x80,0x43,0x4c,0x33, - 0xd8,0x84,0x7f,0xea,0xc8,0x71,0xaf,0x0b,0x46,0xe4, - 0x35,0xb0,0xd4,0xc4,0x10,0xec,0xa0,0x8a,0xb2,0x53, - 0xee,0x81,0x74,0xfc,0x5f,0x23,0xd1,0x8b,0x23,0x51, - 0x3b,0x27,0xd8,0xcd,0xdc,0x54,0x60,0x70,0x43,0xf5, - 0xa3,0xfa,0x07,0x94,0x59,0x03,0x54,0x54,0x5d,0xc8, - 0xfb,0x3b,0x49,0xf6,0x62,0x56,0x02,0xe3,0x47,0xe0, - 0x05,0xc8,0xa2,0xeb,0x33,0x54,0x8e,0x02,0xeb,0x10, - 0xa7,0xde,0x2b,0xf2,0x7b,0xf8,0x68,0x98,0x64,0x32, - 0xd8,0xd8,0xd4,0x6f,0x0a,0x82,0x3c,0x01,0xe9,0x9e, - 0x24,0xf9,0xbf,0x27,0xef,0xdf,0x3d,0xf4,0xfc,0x40, - 0xa8,0xba,0xf5,0x0f,0x62,0xae,0x95,0x79,0x83,0x57, - 0x5c,0x37,0xd7,0xfb,0xbf,0x81,0xc1,0x21,0x9d,0x37, - 0x98,0x22,0x05,0xde,0x3c,0x39,0xf6,0x9a,0x1e,0x5e, - 0x83,0x1e,0xee,0x0b,0xab,0x52,0x0d,0x13,0x31,0x32, - 0x5a,0x59,0xd9,0x1d,0x5f,0xae,0x1d,0x75,0x90,0xcb, - 0x17,0x4c,0xd1,0xfd,0x40,0xbb,0xce,0xc9,0xd1,0x19, - 0x6a,0xcb,0x55,0x76,0xf1,0x4a,0xde,0x67,0xd3,0x8c, - 0xc7,0xb9,0xbc,0x4b,0x20,0xe8,0x40,0x33,0x2a,0x5e, - 0x55,0x40,0x10,0x59,0x0d,0x41,0x7f,0xb0,0x17,0x51, - 0xc5,0xcb,0xb0,0x93,0xf7,0x25,0x20,0xc9,0x84,0x06, - 0x6d,0x87,0x78,0x4d,0x29,0xc2,0x9c,0x9b,0xa8,0x88, - 0xac,0x30,0x02,0xbf,0x7e,0xb5,0x25,0xfe,0x28,0xc5, - 0x7e,0xd7,0x29,0xf8,0x99,0xab,0x4f,0x62,0xf8,0xe1, - 0x08,0xc5,0xbf,0x8b,0x0f,0x3c,0xbb,0x16,0x8f,0x24, - 0xb6,0xd0,0x17,0xca,0x09,0xb7,0x50,0x8b,0xa7,0xc5, - 0xe5,0x7e,0xd6,0x0a,0xa1,0xa0,0xa1,0xaa,0xdf,0x5b, - 0x53,0x58,0xb5,0xe7,0x5e,0x23,0x69,0x65,0xc0,0x05, - 0x96,0xf4,0x06,0xf3,0x8f,0xe3,0x1d,0x97,0xb4,0xf6, - 0xea,0xb9,0xd3,0xc8,0xfb,0xbc,0x76,0x76,0xc7,0xff, - 0xc8,0xfe,0xfb,0xc3,0x7a,0xe6,0xe8,0x41,0x62,0xf6, - 0xee,0x7d,0xfc,0xbb,0x0d,0xdb,0xa0,0x06,0x3a,0xcb, - 0xb6,0x20,0x8b,0x77,0xe2,0x41,0xe6,0x89,0x3a,0x24, - 0x23,0xa1,0x3b,0x8b,0x34,0xf2,0x91,0x65,0x3b,0x51, - 0x99,0xe0,0x52,0x31,0xaa,0x65,0x17,0x5b,0x8f,0x46, - 0x6b,0x05,0x95,0x55,0xab,0x66,0x28,0x98,0x40,0x71, - 0x2d,0x45,0x3f,0x07,0x02,0xfe,0xa8,0x54,0xb8,0xe3, - 0xb0,0xb3,0x05,0xe0,0xdb,0xcc,0x04,0xdc,0x06,0x1c, - 0x66,0xf2,0xfe,0x2d,0x1b,0x3f,0xfe,0xf8,0x89,0x6c, - 0xe8,0xd2,0x50,0x7c,0x18,0x55,0x36,0xe4,0x7d,0x3e, - 0x02,0x18,0xb3,0xfa,0x2f,0x04,0x62,0xc4,0xa6,0x94, - 0xa2,0xdb,0x73,0xb7,0x0c,0x60,0x64,0xc9,0xb0,0xd1, - 0xf5,0xec,0xa0,0x80,0xdc,0xa6,0x14,0x2a,0x24,0x1b, - 0x4d,0x81,0x89,0x5b,0xfc,0xa5,0x3c,0x13,0x06,0x0e, - 0x76,0x45,0x64,0x86,0xdd,0x9a,0x36,0x9c,0x59,0x55, - 0x91,0x56,0x2c,0xe0,0xdc,0x6d,0xb5,0x8b,0x9a,0xae, - 0x61,0xe7,0x3b,0xbc,0x3e,0xcf,0x9e,0x5b,0x51,0x7e, - 0x1f,0x58,0xe2,0x1e,0x44,0x44,0x15,0xa4,0xad,0xa7, - 0x53,0x81,0x2c,0x4c,0x43,0x7a,0xa7,0x04,0xa3,0x4c, - 0x6e,0xea,0xf9,0x40,0x87,0x91,0xc6,0x9f,0xb6,0x01, - 0x9f,0x38,0x8d,0xe2,0xf8,0xc9,0xda,0xbe,0xe2,0x43, - 0x0c,0x6f,0x8f,0xa9,0xe3,0x7e,0x08,0x30,0xca,0x03, - 0xde,0x96,0x3e,0xdc,0x9c,0x01,0x2a,0x1a,0x9c,0x14, - 0x46,0xbb,0x68,0x10,0x47,0xe3,0xb7,0xd3,0x76,0xf3, - 0x8e,0xc3,0x1d,0x2f,0x3b,0x5a,0xa2,0x7b,0xf5,0xb8, - 0x05,0x4c,0x53,0x11,0x89,0xe0,0x38,0xd4,0xb5,0xf7, - 0xd8,0x29,0x14,0x97,0x58,0x69,0x39,0xb1,0x3d,0x5d, - 0x19,0xec,0x60,0x61,0x2c,0x11,0xc5,0x7e,0x6d,0xf1, - 0xde,0x58,0x86,0x78,0x7c,0x59,0x2e,0xfb,0xef,0x05, - 0xa9,0xa3,0x7c,0xc3,0xd8,0x68,0xc9,0x55,0x92,0x3d, - 0xdc,0x52,0x60,0x4a,0x76,0x7b,0x86,0xb3,0xf8,0x07, - 0xaa,0x81,0x3a,0x65,0xcc,0xe7,0xa6,0x80,0x8a,0x91, - 0x00,0x2d,0x6b,0xf5,0x36,0x28,0x25,0x4c,0x5d,0x03, - 0x3f,0xdf,0x78,0x01,0x96,0x56,0xa2,0x80,0x1b,0x57, - 0xd7,0x44,0x03,0x1c,0xc4,0x65,0x49,0x33,0xab,0x07, - 0x01,0xe0,0x59,0xb1,0xf9,0xb8,0x24,0x7d,0xba,0x1b, - 0x8e,0x77,0xf8,0xfd,0x7b,0xcc,0xef,0x3c,0x53,0x84, - 0x28,0x60,0x9b,0xd3,0x5a,0x36,0x12,0x7a,0xe0,0x8b, - 0x1c,0xda,0x94,0x30,0xf1,0x8a,0x5d,0xe7,0xa3,0xaa, - 0x3d,0xb8,0x53,0x51,0x0b,0x4e,0x49,0xd0,0x76,0xd7, - 0x33,0x27,0x47,0x00,0xb0,0x7b,0x70,0xc4,0x19,0xc8, - 0x4c,0x45,0x6e,0x31,0xa9,0x98,0x3b,0x8e,0x0d,0xe3, - 0xb3,0x32,0xf0,0x74,0x06,0x78,0xa6,0xd8,0x06,0xf7, - 0x0d,0xd6,0xdd,0x9d,0x33,0xc8,0x60,0xcb,0x73,0xaf, - 0x28,0x11,0x0b,0x1f,0xa3,0x7c,0xea,0x12,0x47,0x61, - 0xf7,0x8e,0xec,0xc3,0x99,0x6b,0x0f,0x26,0x6a,0x49, - 0x35,0x52,0x45,0x67,0x6a,0x9f,0x13,0xc9,0x47,0x42, - 0x5c,0xf6,0xca,0x48,0x0e,0xd2,0xaa,0xce,0x52,0x21, - 0x0e,0x99,0xe1,0x07,0xcc,0x46,0x78,0x8e,0x02,0x43, - 0x67,0x25,0xf0,0xc4,0x17,0xe0,0x7e,0x2e,0xff,0xa9, - 0xc4,0x57,0xe8,0x13,0xfd,0xae,0x44,0x30,0x64,0x94, - 0x0f,0xf4,0x3c,0x79,0x83,0x48,0x30,0x28,0xba,0x4a, - 0x25,0x5e,0x1e,0x7c,0xe0,0xcd,0xe3,0x8f,0x0f,0x54, - 0x24,0xef,0x17,0x47,0xd9,0x30,0x9c,0xdb,0x94,0x8d, - 0x2c,0x09,0xda,0x64,0x25,0x18,0x3e,0xb6,0xc6,0x87, - 0x51,0x98,0x5e,0x93,0xb7,0x9f,0x47,0x78,0x50,0x47, - 0x0c,0x18,0xa5,0x03,0xa1,0x53,0x91,0xaa,0x08,0x9c, - 0x6e,0xa6,0xbc,0xcf,0x09,0x7c,0x6b,0x27,0x1c,0x0d, - 0xec,0x62,0xa0,0xef,0x61,0x38,0x39,0x12,0xa3,0xf3, - 0x28,0x45,0x7b,0x23,0xb8,0x4e,0x20,0x2a,0xc7,0xb3, - 0x00,0x9e,0xfe,0x3b,0xf3,0x58,0x25,0xfb,0xe1,0x81, - 0xbc,0x0f,0x6c,0xae,0xa1,0x04,0x88,0x54,0x82,0x2c, - 0x25,0xd0,0xd5,0xc9,0x51,0xa2,0xd4,0xf5,0xf9,0xb7, - 0x7c,0x01,0x38,0xde,0x18,0xc4,0xf9,0x04,0x5e,0xc0, - 0x3e,0x60,0x92,0xdb,0x56,0xe8,0x29,0xeb,0x38,0x00, - 0x6a,0xa7,0x43,0xdb,0xbc,0x21,0xba,0xb0,0xde,0x7a, - 0x17,0x7a,0x9e,0xee,0xe6,0x52,0xa3,0x91,0xf7,0x9b, - 0x83,0x34,0xd0,0x96,0x56,0x2c,0x35,0xb8,0xbf,0xc8, - 0x55,0xae,0x1b,0x4d,0xb3,0x2e,0x36,0x68,0x78,0xba, - 0xef,0xb5,0xc5,0x84,0xad,0xc2,0x52,0x42,0x25,0x59, - 0xd9,0x86,0x17,0x23,0xb0,0xa0,0xe3,0xa8,0xe4,0x23, - 0x13,0xe5,0xd8,0xb6,0xd9,0xe6,0xcc,0xbe,0x73,0x39, - 0x54,0x0b,0x00,0x96,0xca,0xdb,0x04,0x9d,0x4d,0xdd, - 0x61,0x83,0x49,0x0c,0x4b,0xd5,0x21,0x2a,0x7f,0x3a, - 0xd3,0x4f,0xcb,0xbc,0xe6,0x93,0x5a,0x30,0x08,0x54, - 0x32,0xd4,0xd6,0x11,0x9e,0xcd,0x47,0xe0,0x7b,0x42, - 0x11,0xd2,0x52,0xe6,0xa6,0x45,0x15,0x06,0xcf,0xf9, - 0xe6,0x24,0x20,0x7e,0xdc,0x58,0xe3,0xbb,0x11,0xa1, - 0x95,0xdd,0x91,0xa5,0xb9,0x75,0xeb,0xf8,0xc1,0x19, - 0xdc,0x1e,0xa2,0x91,0xf7,0xdb,0x22,0xdb,0x9c,0x4b, - 0xa1,0x85,0xa1,0xed,0xf0,0x7b,0xef,0xaf,0xfe,0xf3, - 0xb8,0x1f,0x36,0xa8,0x6e,0x3b,0x63,0x57,0x3a,0xd4, - 0x21,0x15,0x86,0x6c,0xbd,0xa3,0xea,0x82,0x28,0x97, - 0x73,0xe1,0x01,0x23,0x74,0x2f,0x00,0xf9,0x62,0xda, - 0x1c,0x3b,0x18,0x3c,0x01,0x47,0x09,0x16,0xdf,0xdd, - 0x50,0x05,0x46,0x2b,0xa6,0x5d,0xb2,0x02,0xfa,0x91, - 0x0f,0x53,0x08,0x1a,0xa2,0x61,0x28,0xa6,0xe3,0xc0, - 0xec,0xd7,0xef,0xfc,0x4f,0x16,0xa5,0x18,0x05,0x18, - 0xa4,0x9d,0xb5,0xce,0x29,0xe4,0x8e,0xcd,0x42,0x27, - 0x75,0xe7,0xf6,0x80,0xea,0x22,0x9f,0x48,0x98,0xb1, - 0x66,0x4d,0xd1,0xe4,0x90,0x2e,0x65,0xf0,0x13,0x2e, - 0x00,0x7e,0xb8,0xc4,0x9f,0xea,0x74,0xf3,0x98,0x35, - 0xb3,0x81,0x49,0x78,0x34,0x41,0x3b,0x76,0x58,0x7f, - 0x18,0xdb,0x1c,0xdb,0x92,0xe0,0x4c,0xde,0xc7,0x31, - 0xed,0x67,0xc4,0x0a,0xb8,0xad,0x12,0xc2,0x79,0x81, - 0xe7,0x99,0x67,0x9d,0xbd,0x4f,0x69,0x33,0x15,0x4f, - 0x40,0xc6,0x36,0x86,0x23,0xf3,0x66,0x4b,0xad,0x7e, - 0xf4,0xa8,0xf6,0xe4,0x30,0x24,0xcb,0x85,0x3f,0xf0, - 0x6a,0xfb,0x51,0xe5,0x86,0x51,0x0b,0x08,0x24,0xf4, - 0x7e,0x88,0x3a,0xf0,0xa0,0x2c,0x3a,0xb6,0x96,0x98, - 0x82,0x7b,0x00,0xc3,0x7e,0x4d,0x19,0xf5,0xf5,0x4f, - 0xba,0x3d,0x27,0x2a,0x23,0x38,0x25,0x5c,0x64,0x2c, - 0xb2,0x5c,0x13,0x89,0x21,0x72,0x53,0x65,0xe6,0x14, - 0x24,0x26,0x73,0x4a,0xdf,0xf0,0x9e,0x65,0x75,0x36, - 0xc5,0x5e,0x4b,0x86,0x67,0x66,0xb3,0x5c,0xd7,0xfc, - 0x32,0x26,0x2d,0x6c,0xc0,0xdf,0xce,0xf7,0x3d,0x2b, - 0x03,0xde,0x26,0xef,0x6f,0x7e,0x03,0x8f,0xcb,0x09, - 0x9c,0x92,0x39,0x84,0x85,0xe7,0x58,0x25,0xb6,0x2b, - 0xbd,0xa5,0xdf,0x33,0xc4,0xec,0x66,0x85,0x9b,0xd2, - 0x13,0xdb,0x5a,0xe7,0xb6,0xf6,0x46,0x1b,0x04,0xac, - 0x73,0xde,0x23,0x91,0xf7,0x4b,0x9b,0xef,0x7a,0x68, - 0x6b,0x03,0x06,0x41,0xc2,0x2b,0x4f,0x52,0xb0,0x93, - 0xf7,0x85,0x25,0x67,0xaa,0xbb,0xcc,0x74,0xe4,0x84, - 0x0d,0x50,0x04,0x40,0x53,0x4d,0x83,0x0d,0x58,0x8a, - 0x72,0xd5,0xb5,0x4d,0x86,0x26,0x18,0x45,0xb3,0x38, - 0xd3,0xb6,0x1b,0xf5,0x9a,0xe8,0xfc,0xd0,0x60,0xc5, - 0x5a,0xc6,0xa8,0x7e,0x7b,0xa8,0x99,0xd1,0x6e,0x67, - 0xc1,0x5c,0x75,0x16,0x94,0x80,0x0e,0xee,0x61,0x4d, - 0x15,0xce,0xc4,0x4c,0xe8,0xe8,0x0c,0xe8,0x2f,0x7a, - 0xa3,0x71,0x74,0xf6,0x90,0xfa,0x3a,0x72,0x96,0x1d, - 0x5f,0x3f,0xae,0xe3,0x7f,0x94,0xfc,0xe3,0x4f,0xc2, - 0x4a,0x2b,0xe2,0x79,0x83,0x62,0x3d,0x08,0x7a,0x78, - 0xe7,0xd8,0x1b,0x19,0x67,0x03,0x3d,0x1e,0x66,0xda, - 0x47,0x5c,0x72,0xa3,0xc1,0x90,0x3a,0x14,0x33,0xe7, - 0xbc,0x7b,0x0b,0xa0,0x9c,0x45,0xb5,0xcc,0x46,0x93, - 0xe3,0x52,0x83,0xd1,0x2e,0x6c,0xc3,0xe2,0x27,0x57, - 0xe1,0x6a,0x4c,0xcb,0x3d,0xc4,0xad,0xd0,0x4c,0xbe, - 0x38,0x46,0x7b,0x36,0x6d,0xea,0x6f,0x55,0x28,0xa8, - 0xf0,0xc8,0xd6,0x9b,0xa1,0xa6,0x1d,0xab,0x15,0x8e, - 0x66,0x70,0xda,0x35,0xf6,0xbf,0x77,0x51,0xef,0x80, - 0xcc,0x16,0x23,0x83,0x36,0xff,0xd0,0xf2,0xa0,0x92, - 0x7b,0x7d,0x19,0x96,0x62,0xfe,0xa2,0x08,0x2b,0xed, - 0x98,0xba,0x60,0xe5,0x1a,0xd9,0x90,0xd1,0xb4,0x71, - 0xe3,0x28,0x78,0xc6,0x68,0x18,0x52,0x3d,0xa6,0xaa, - 0x75,0x28,0xdb,0xbf,0x48,0xc3,0x3f,0x2f,0x01,0xf8, - 0xb8,0x09,0xbe,0x15,0xcf,0xde,0xa5,0xf9,0x23,0xec, - 0x6c,0x9f,0x4e,0x47,0x88,0x7d,0x76,0xbe,0xd1,0xd6, - 0x19,0xb8,0x3d,0xbf,0x9b,0x48,0xc2,0xe7,0x9d,0x14, - 0xcf,0x92,0x2a,0xaa,0x2c,0x63,0x3c,0x30,0x51,0x07, - 0x78,0xdc,0xc3,0x21,0xe3,0x4a,0x7d,0x52,0x9d,0x38, - 0x93,0x69,0x4a,0xb7,0x1a,0x67,0xcd,0x14,0xb6,0x82, - 0x24,0x23,0x98,0x7b,0x6a,0x8f,0x1a,0xb5,0xaf,0xef, - 0xe4,0xfd,0x6b,0xd0,0x65,0xa9,0x9d,0x73,0x41,0xf1, - 0xb4,0x5d,0x2e,0x94,0x49,0x50,0x07,0x98,0x40,0xde, - 0x67,0x11,0xd6,0x78,0x2d,0x4c,0xfa,0xb8,0xb1,0x8a, - 0x6b,0xf6,0xc1,0x34,0xdd,0x51,0x97,0x9a,0x6f,0x0f, - 0x13,0x2b,0xd2,0xb8,0xdd,0x0f,0x4a,0x39,0x86,0x22, - 0x13,0xc7,0x8a,0xe5,0x5c,0x41,0xaa,0x64,0x71,0x72, - 0x6f,0xc1,0x60,0x53,0xa4,0x4a,0x46,0xb6,0x06,0x21, - 0x7a,0x08,0x6f,0x05,0x80,0x37,0xc8,0xfb,0xb8,0x5b, - 0x89,0x3b,0x32,0x0d,0xfe,0x2e,0x1b,0xc1,0x1e,0xd2, - 0xad,0xce,0x3f,0x0f,0xb2,0x19,0x8c,0x9b,0x20,0xbc, - 0x69,0xfb,0x65,0x9c,0xcf,0x0a,0x00,0x05,0xc7,0xfc, - 0x61,0x4a,0x24,0x1b,0x6b,0x0d,0x9e,0xb2,0x16,0x1f, - 0x02,0x5e,0x3b,0x1e,0xc4,0x78,0xb3,0xce,0xb2,0x33, - 0x54,0x15,0x18,0x75,0x82,0x8f,0x31,0x7c,0x85,0xa3, - 0x70,0xe5,0xda,0x4e,0xde,0x97,0xba,0xd8,0x53,0x5d, - 0x74,0x0c,0xc5,0x33,0x12,0xed,0x02,0x20,0x64,0x24, - 0xa2,0x19,0x30,0xff,0x7d,0x88,0x26,0x20,0x9c,0x7e, - 0x53,0xcb,0x8b,0x39,0x1e,0x4d,0xf7,0x01,0x94,0xe1, - 0x1e,0x72,0x0c,0x27,0x44,0x15,0x37,0x5f,0x2f,0x16, - 0x84,0xc4,0xa4,0x77,0x1d,0x2a,0x55,0xb6,0xf4,0xff, - 0x41,0x9d,0xb1,0xe8,0x78,0x14,0xa7,0xfe,0x03,0xaa, - 0x1e,0xa5,0xaa,0x2e,0x49,0xf0,0xfc,0xe7,0x25,0xc1, - 0x7e,0xb8,0xba,0x9f,0x68,0x05,0xf0,0x57,0xc7,0xc4, - 0x9b,0x03,0x66,0x26,0xfc,0xdc,0xb5,0x17,0x93,0x60, - 0x83,0xef,0xec,0x25,0xa2,0x6f,0xbf,0x60,0x7f,0x9c, - 0xc4,0x16,0xa2,0xe8,0x99,0x79,0x1a,0x2e,0x09,0x73, - 0x0e,0x64,0xce,0x7d,0xd0,0xc3,0x20,0x48,0x1d,0x93, - 0x69,0x85,0x0b,0xf7,0xda,0xc8,0x86,0x9d,0x8c,0x0d, - 0x0d,0x35,0xa5,0x86,0xaf,0x09,0x3b,0x62,0x2d,0x14, - 0xc5,0xbc,0x64,0xe1,0xf1,0x54,0x29,0x52,0x11,0x19, - 0x36,0xff,0xe3,0xe2,0x07,0x41,0xd6,0xdb,0x84,0x3a, - 0x69,0xa8,0x80,0x25,0x31,0x0a,0xc9,0x9f,0xac,0x0b, - 0x92,0x5a,0x8b,0x6b,0xd2,0x62,0x03,0x4d,0x28,0x98, - 0x2b,0xac,0x34,0xb1,0xb3,0xc3,0xea,0x2f,0x61,0x48, - 0xd6,0xa4,0xea,0x4c,0xe6,0x0e,0xf5,0xf5,0xab,0xc5, - 0xf8,0x1f,0xa6,0x15,0xf0,0x6c,0x0f,0xe7,0x39,0xfd, - 0x78,0x70,0x84,0x1d,0xc6,0xba,0xd1,0x0a,0x48,0x59, - 0x38,0x2c,0x4d,0x7c,0xaa,0x15,0xc0,0x7f,0x52,0x2b, - 0xe0,0xee,0x64,0x3e,0xa8,0x15,0x80,0xff,0xd3,0x0a, - 0xf8,0x37,0xb4,0x02,0xbe,0x7e,0xb5,0x58,0xff,0x2b, - 0xb4,0x02,0x9c,0xf0,0x83,0x7d,0x3d,0xfc,0x8b,0x23, - 0x7d,0xac,0x15,0x80,0xfd,0x1f,0x1f,0x69,0x05,0x58, - 0x35,0xf0,0xb6,0x56,0xc0,0xa9,0xcd,0x3a,0x5c,0x2b, - 0x00,0x67,0x83,0xd6,0xff,0xd3,0x0a,0xa8,0x5a,0x01, - 0xb2,0xf0,0xff,0x5b,0xb4,0x02,0x3e,0x52,0x02,0x38, - 0x23,0xec,0x27,0x49,0xfc,0xdf,0x69,0x05,0xe4,0xe1, - 0x89,0xff,0x5a,0xad,0x00,0xdb,0x69,0xde,0xd6,0x0a, - 0x38,0xd0,0x88,0x1f,0x69,0x05,0x94,0x76,0xd2,0x78, - 0x5b,0x2b,0xc0,0xdd,0x81,0x1e,0x6b,0x05,0x30,0x77, - 0x0d,0xfc,0x3a,0xff,0xab,0x5a,0x01,0x65,0xc1,0x87, - 0xa7,0xf9,0x3f,0x50,0x2b,0xe0,0xeb,0xfd,0x85,0x7a, - 0xf3,0x4c,0xfd,0x43,0x5a,0x01,0x3c,0xec,0x77,0xa7, - 0xf6,0xc2,0x7f,0xbd,0x56,0x80,0xad,0xac,0xcf,0x69, - 0x05,0x70,0x3c,0xd3,0x0a,0xc0,0xbd,0x56,0x40,0x08, - 0x6c,0xa9,0xd4,0x78,0x4b,0x2b,0x00,0x9f,0xd2,0x0a, - 0xe0,0xdb,0x5a,0x01,0xee,0xde,0xf3,0x23,0xad,0x00, - 0xfc,0x67,0x6a,0x05,0x7c,0xbd,0x5f,0x8d,0x7f,0x22, - 0xa3,0xff,0xad,0x56,0xc0,0x9a,0x82,0xfa,0x89,0x56, - 0x00,0x43,0xc0,0xf9,0xb9,0x56,0x00,0xc7,0xff,0x86, - 0x56,0x00,0x46,0xd6,0x0a,0x18,0x55,0x2b,0x20,0x19, - 0x1a,0xd2,0x3e,0x11,0x86,0x98,0xf0,0x1f,0xa3,0x15, - 0x60,0xa9,0xfa,0x03,0xad,0x80,0xd6,0x8c,0xf9,0x1f, - 0xd2,0x0a,0xf8,0x7a,0x7b,0xed,0xfe,0x13,0x35,0xfe, - 0xad,0x56,0x00,0xde,0xd7,0x0a,0xa8,0x0d,0x9d,0x88, - 0x0a,0x47,0xd0,0x7b,0xf3,0xac,0x46,0x1f,0xf8,0x47, - 0x71,0xec,0x0f,0xb4,0x02,0x68,0x4e,0x84,0x1f,0xd5, - 0x0a,0x40,0x9b,0x45,0x4f,0x0b,0xa3,0x7b,0xde,0xff, - 0xf7,0x68,0x05,0xf0,0xff,0xc7,0x5a,0x01,0xbf,0xc4, - 0x00,0xfe,0x8b,0xb4,0x02,0x76,0x38,0xdc,0x56,0x44, - 0x18,0xc3,0x2d,0xd5,0xfe,0x4e,0x2b,0x60,0xfc,0x4e, - 0x2b,0x00,0x1b,0xa0,0xef,0xff,0xb4,0x02,0x5a,0x20, - 0x4c,0x5a,0x01,0xf8,0xb4,0x56,0xc0,0xd8,0x6b,0x05, - 0xd0,0xd1,0xf8,0x7f,0x59,0x2b,0xe0,0xeb,0x77,0x4b, - 0x17,0x77,0x0d,0xb6,0xff,0x7c,0xad,0x80,0x0d,0x40, - 0x8e,0x50,0x89,0xb3,0xb4,0xe4,0x3f,0xa8,0x15,0x40, - 0xfc,0x33,0x5a,0x01,0x1c,0xff,0xa7,0x15,0x40,0x16, - 0x03,0x52,0x3a,0xb1,0x62,0x7c,0x40,0x2b,0x00,0x7b, - 0xad,0x00,0x35,0xed,0xfc,0x4f,0xd0,0x0a,0xf8,0xfa, - 0x64,0x01,0xf0,0x3f,0xad,0x15,0xc0,0x68,0xe1,0x37, - 0xd6,0xd4,0x17,0x47,0xce,0xdd,0x77,0xe7,0xb2,0xeb, - 0x4b,0xbc,0xa3,0x15,0x30,0xde,0xd3,0x0a,0x48,0xca, - 0x42,0xff,0x8d,0x5a,0x01,0xde,0x81,0x18,0xef,0x69, - 0x05,0x14,0x0a,0x8e,0x0c,0x12,0xfc,0x6b,0x5a,0x01, - 0xb4,0x27,0x15,0xc6,0x91,0xfc,0x43,0xad,0x80,0x0f, - 0xb2,0x01,0x3f,0xaf,0x15,0x70,0x04,0xe0,0xfe,0x69, - 0xad,0x80,0x93,0xc7,0x98,0x6b,0x05,0xa0,0x67,0x47, - 0xf1,0x91,0xf9,0xb1,0x56,0x40,0x7d,0x04,0xdf,0xd7, - 0x0a,0x60,0xce,0xe2,0xfe,0x5b,0xb4,0x02,0xf0,0x9f, - 0xaa,0x15,0xc0,0x9f,0x69,0x05,0xa0,0xa7,0xfc,0xf8, - 0x87,0xb4,0x02,0xfe,0x9c,0x0d,0x78,0x1f,0x5c,0xf0, - 0xb0,0xdd,0xf6,0x4f,0x6b,0x05,0xd0,0x92,0x8d,0xff, - 0x24,0xad,0x00,0xb4,0x36,0xdb,0x7b,0x5a,0x01,0x5e, - 0x07,0xff,0xcb,0x5a,0x01,0xe3,0x7f,0x45,0x2b,0x00, - 0xff,0x75,0x5a,0x01,0x5f,0xbf,0x5f,0xc0,0xf7,0x21, - 0xe4,0xbf,0x49,0x2b,0x80,0x01,0xf9,0x7a,0xae,0x15, - 0xc0,0x2d,0xa6,0xc1,0x7a,0x67,0xb7,0x85,0xf4,0x59, - 0x2b,0x80,0x9b,0xda,0xfb,0x3f,0x4f,0x2b,0x80,0x6f, - 0x68,0x05,0x94,0xb9,0x78,0xbf,0x43,0x4f,0xb4,0x02, - 0xd8,0xb3,0xaa,0xbf,0xd1,0x0a,0xa0,0xec,0x45,0x3f, - 0xd3,0x0a,0xe0,0x7f,0x98,0x56,0xc0,0xd7,0xef,0x96, - 0xf6,0x27,0x33,0x83,0xff,0x0c,0xad,0x80,0x27,0x6a, - 0xc2,0x7b,0xad,0x00,0x1c,0x37,0xe1,0x8c,0x0e,0xee, - 0xb5,0x02,0x38,0x12,0xca,0x7b,0xa3,0x15,0xa0,0x49, - 0xc1,0x3f,0xa5,0x15,0xc0,0xae,0x15,0x80,0x37,0xb4, - 0x02,0x0a,0x6f,0xe6,0x27,0x5a,0x01,0x7e,0x01,0xff, - 0x4c,0x2b,0x00,0x6b,0xd0,0xe7,0x87,0x5a,0x01,0xb3, - 0xf0,0xf8,0x0f,0xd1,0x0a,0xf8,0x0c,0x1b,0xf0,0x7f, - 0x52,0x2b,0x80,0x6f,0x6b,0x05,0xc4,0x4e,0x08,0x37, - 0x09,0xce,0x56,0x2b,0xe0,0x34,0xdb,0xf8,0x40,0x2b, - 0x00,0xff,0xa4,0x56,0x40,0xce,0x14,0x92,0x56,0x00, - 0x63,0xb1,0xf5,0xdf,0xab,0x15,0x80,0xff,0x11,0xad, - 0x80,0xcf,0x04,0x80,0x3f,0xd5,0x0a,0xe0,0xbf,0xa4, - 0x15,0x80,0xb7,0xb5,0x02,0xa2,0xfc,0x23,0x36,0x73, - 0x4d,0x9b,0x61,0x04,0x0c,0x3c,0xd2,0x0a,0x68,0x0f, - 0xd3,0xbf,0xa2,0x15,0xd0,0x4d,0x4a,0xba,0x56,0x00, - 0x4b,0xd6,0xf4,0xe7,0x5a,0x01,0xfc,0x3f,0xad,0x80, - 0x77,0xb4,0x02,0x7e,0x16,0x00,0xf8,0xcb,0xd7,0xdf, - 0xca,0xea,0xf1,0xeb,0x45,0xcf,0xe3,0x16,0x7d,0x93, - 0xb1,0x3c,0xd2,0x0a,0xd8,0x97,0x0e,0x99,0x40,0xeb, - 0x00,0xa3,0xcd,0x53,0x94,0x21,0xf2,0x5e,0xd7,0x71, - 0xd3,0xf1,0x20,0x37,0xb9,0x0a,0xf7,0x59,0x4b,0xc1, - 0x1d,0x76,0x8a,0xd2,0x89,0xbc,0x93,0xae,0x09,0x7a, - 0xa9,0x02,0xd3,0x0d,0x28,0xad,0x3b,0xe1,0xc2,0xdb, - 0x05,0x19,0x95,0xd5,0x76,0x4d,0xde,0xb1,0x60,0x03, - 0xad,0xaa,0x21,0x5f,0xa0,0x20,0xe6,0xf0,0x11,0x4b, - 0xb7,0x44,0x3a,0x2d,0x58,0x8b,0xa2,0x0d,0x3e,0xf9, - 0x41,0xb1,0x52,0x8c,0xe7,0x60,0x13,0x39,0x33,0x84, - 0xc9,0xb1,0x9b,0x99,0x46,0xd0,0x0a,0x68,0x63,0x93, - 0x61,0xb2,0xf3,0xaa,0xd2,0x29,0x98,0x08,0xb9,0x8e, - 0xf3,0x02,0x30,0x84,0xd4,0x04,0x3d,0xa7,0x91,0x26, - 0x56,0x5f,0x60,0xa3,0x64,0x4f,0xd7,0x57,0x7f,0xce, - 0x1c,0x74,0xfb,0xfa,0x07,0x45,0x03,0x76,0x08,0xe8, - 0x3b,0x87,0x53,0x84,0x1f,0x79,0x3c,0xb1,0x23,0xd1, - 0x88,0x3f,0x0d,0x8c,0x28,0xf1,0x3e,0x69,0x8e,0x62, - 0x97,0x5d,0x31,0x24,0x5c,0x82,0x16,0x63,0x3c,0x23, - 0x1c,0x31,0x9c,0xdd,0x35,0xa7,0x4f,0x54,0x73,0x91, - 0xda,0x74,0x84,0x21,0xe8,0x36,0xf4,0x73,0x3b,0x77, - 0x8c,0x9c,0xcd,0x21,0x44,0x21,0x5a,0x95,0x6b,0xe4, - 0xfd,0x59,0xed,0xa0,0xd7,0x58,0x4a,0xf8,0xc9,0xaa, - 0x46,0x5c,0xbc,0x04,0xe7,0xf8,0xe8,0x2e,0x59,0x6a, - 0x71,0x87,0x84,0x5f,0xa0,0x1c,0x64,0xbc,0xd8,0xaa, - 0x32,0x81,0xea,0xca,0x20,0x67,0x06,0x34,0x17,0x79, - 0x1f,0x23,0x8c,0x4e,0x4d,0x50,0x87,0x4a,0xd3,0x0a, - 0x9b,0x0d,0x42,0xfc,0x47,0x69,0x39,0xea,0xc4,0xc0, - 0x3f,0xa0,0x08,0x84,0x0f,0x67,0x0a,0x78,0x14,0x83, - 0x8e,0x12,0x5d,0x38,0x94,0x2e,0x3c,0xed,0xde,0xd6, - 0x7a,0xf3,0x14,0x1e,0x75,0x79,0x79,0x9c,0x59,0x06, - 0x8d,0xbd,0x12,0x3e,0x50,0xf6,0xf3,0xa5,0xec,0xe4, - 0xfd,0xcd,0x77,0xb0,0x0d,0x4a,0xd4,0xc6,0x18,0x67, - 0xda,0x51,0x36,0x26,0x8e,0xc9,0x87,0xc7,0x68,0xec, - 0xf3,0x8c,0x70,0x5a,0x70,0x2d,0xed,0x30,0x0f,0x5e, - 0x3e,0x02,0x37,0x37,0x3b,0xd4,0xf6,0xd7,0xab,0x73, - 0x82,0x84,0x26,0x14,0x30,0x11,0x52,0x41,0xf6,0x16, - 0x60,0xb9,0x11,0x90,0xb1,0xe2,0x02,0x34,0x1a,0x56, - 0x30,0xea,0x82,0x2b,0xdf,0x88,0x21,0x84,0x34,0x63, - 0xed,0x89,0xee,0x9e,0x53,0xcf,0x08,0xb6,0x1e,0xc5, - 0x75,0xde,0xa8,0xe4,0x7d,0xb3,0xf6,0x32,0xd5,0x10, - 0x2d,0x3f,0xac,0x64,0x84,0x15,0x3e,0x65,0x98,0x74, - 0x66,0x16,0xdf,0x61,0xf2,0x57,0x01,0xe0,0xd7,0x9c, - 0xfa,0xa7,0xab,0x98,0xef,0xff,0xf6,0x89,0x25,0x78, - 0x1c,0x22,0xee,0x1e,0x8a,0x07,0x18,0x30,0x0d,0xfd, - 0x2c,0x69,0x29,0x8f,0x33,0x9a,0x82,0xe2,0x70,0x72, - 0x38,0x5e,0xeb,0x2d,0x79,0x3f,0xbe,0xcc,0xb6,0x3a, - 0xc3,0xc0,0x73,0x18,0x38,0xe2,0xa6,0x7c,0xea,0xc5, - 0x00,0x4b,0x3d,0x5c,0x18,0x7c,0xb6,0xba,0x98,0x32, - 0x31,0x9f,0x2a,0xf4,0x21,0xa5,0x26,0xb1,0xf0,0x7a, - 0xa4,0x09,0x19,0xd1,0x09,0xed,0xc0,0xdb,0x92,0xed, - 0xc2,0x46,0x12,0x79,0xff,0x45,0xa6,0x69,0xc7,0x10, - 0x82,0xbe,0xc3,0xab,0x4a,0xd3,0x0f,0x3d,0x23,0x5d, - 0xfc,0x50,0xd9,0x35,0xb0,0x07,0x57,0xf5,0xf1,0xd3, - 0x92,0xc9,0xdb,0xd7,0xf6,0x2c,0x90,0x42,0xc6,0xa2, - 0xcf,0x75,0x40,0xce,0xe5,0x97,0x64,0x20,0xbc,0x1b, - 0x14,0xde,0x12,0xe1,0xa1,0x0e,0xc7,0x85,0xdf,0xe6, - 0x8f,0x0f,0x32,0x27,0xfa,0x70,0x30,0x76,0xb4,0x4d, - 0xb4,0x21,0xf5,0xe7,0xc1,0x63,0xee,0xcb,0x71,0xf9, - 0x8f,0x5d,0x3f,0x61,0x97,0x70,0xe0,0x66,0x16,0x95, - 0xfd,0x3a,0xf3,0x04,0x1a,0x6e,0x9c,0x94,0x43,0xb2, - 0xc4,0xa0,0x49,0xb5,0x16,0xa3,0x28,0xe1,0x78,0x1a, - 0x2d,0x18,0x00,0x53,0x13,0xa2,0xa4,0xd1,0xd0,0x6e, - 0xf5,0xfc,0x2e,0x6d,0x08,0x60,0xac,0xf9,0x7e,0x6c, - 0x1f,0x34,0xc6,0x87,0x8e,0x3a,0x19,0xc7,0x31,0x32, - 0x79,0x7f,0x94,0x81,0x00,0x58,0x5e,0xd1,0xc6,0xa6, - 0xc9,0xd6,0x08,0x08,0x68,0x6a,0xf3,0x28,0x24,0xc6, - 0x66,0x90,0xdb,0x64,0xd5,0xae,0x2c,0x64,0x66,0x65, - 0x3d,0x42,0x6b,0xb6,0x05,0x21,0x32,0xd5,0x94,0x7f, - 0x01,0x1f,0x57,0x43,0xf0,0xe3,0x25,0x00,0xb6,0xe8, - 0xdb,0x78,0x4a,0xde,0x1f,0x5d,0xdd,0x67,0x84,0x56, - 0x06,0xde,0x8c,0x3e,0xf9,0x6d,0x7c,0x10,0x4a,0xd8, - 0x48,0x27,0x75,0x1f,0xdc,0xc1,0x6a,0x69,0x0e,0xa9, - 0xa7,0xfd,0x0c,0xa5,0x46,0x57,0xcf,0x9b,0x13,0x9c, - 0xe9,0xd4,0xa5,0x0a,0xe0,0x86,0xfb,0x7f,0xb2,0xaf, - 0xc0,0x0e,0xbd,0x24,0x8e,0x41,0xb7,0x8c,0xdc,0x96, - 0xbe,0x76,0xee,0xd9,0x5e,0x44,0x97,0xce,0x94,0x53, - 0xd1,0x91,0x17,0x2d,0x36,0xdd,0x52,0xdf,0xad,0x69, - 0x21,0x00,0xa3,0x4c,0xf3,0x15,0xea,0xec,0x6b,0xd8, - 0x06,0xa8,0x80,0xd9,0x06,0x9b,0x35,0xbd,0x06,0x7a, - 0xa5,0x27,0x37,0x05,0xb3,0x43,0xa2,0x63,0xd0,0xfe, - 0x88,0x12,0xb5,0xc3,0x33,0x79,0x1c,0x94,0x12,0x83, - 0xa1,0x77,0x02,0x5b,0x0b,0x2a,0xb9,0xa4,0x24,0xb7, - 0xd2,0xea,0xb9,0xd4,0x7f,0x7a,0xa6,0x47,0x29,0x21, - 0x3e,0x40,0x07,0xbe,0x59,0x75,0x33,0x9d,0x7e,0xae, - 0xf4,0x53,0x5e,0xff,0x14,0x79,0xff,0x90,0x3d,0x60, - 0x6c,0x46,0x75,0x93,0x4b,0x30,0x33,0xc2,0x8f,0x06, - 0x16,0xed,0x82,0x13,0xc3,0xa1,0x4a,0x4a,0x76,0x00, - 0xd1,0x20,0xcf,0x5b,0x7f,0xeb,0x6a,0xf5,0x81,0x41, - 0x15,0x08,0x01,0x39,0x41,0xbe,0x76,0xe4,0x9a,0x7e, - 0xef,0x1d,0x90,0xaa,0x6a,0x3b,0xcf,0x1f,0x1e,0x18, - 0x10,0x5b,0xab,0x10,0xb0,0xb2,0x45,0x42,0x15,0x1d, - 0x11,0xfd,0x16,0x40,0xc7,0x95,0x31,0x4a,0x7b,0x16, - 0x3b,0xd3,0xd6,0x51,0x50,0xfb,0x0d,0x79,0x7f,0x06, - 0x14,0x5d,0xcb,0x4b,0x14,0x84,0x75,0x74,0x9a,0x55, - 0xb1,0x8b,0x46,0xc0,0x50,0x9d,0x3d,0xed,0x5e,0x96, - 0x27,0xc2,0x08,0x09,0x93,0x9c,0xf4,0xea,0x8e,0x10, - 0xd6,0x3b,0xb9,0xfe,0x6e,0x97,0x5f,0x39,0xa0,0x90, - 0xe0,0xa6,0x0f,0x4a,0xe9,0x08,0x91,0xdb,0xec,0xf7, - 0xeb,0xf7,0x0b,0x1f,0xb7,0x4b,0x19,0xf8,0x61,0x20, - 0x79,0xc7,0x52,0x90,0xb8,0xfd,0x2c,0x77,0x4d,0xbb, - 0xb7,0xc9,0xfb,0x01,0xa2,0xc0,0xb9,0xd5,0x56,0xd9, - 0x66,0x23,0xa8,0xd8,0x6c,0xc9,0xfb,0xbd,0xab,0x0b, - 0x1a,0x9f,0xaf,0xba,0xdf,0x9e,0x58,0xd5,0x3c,0xa6, - 0x9c,0x63,0x82,0x5b,0x4b,0x92,0x3a,0x07,0xdb,0x22, - 0xbf,0xdd,0xfa,0xf0,0xdc,0x4f,0x44,0xa9,0xe2,0xee, - 0xb5,0xd8,0x8c,0xbc,0x4f,0x86,0xd9,0x0c,0x9c,0x6a, - 0x48,0xed,0x8f,0x56,0xf9,0x76,0xa0,0x06,0xad,0xc2, - 0xd7,0xba,0x34,0x06,0xa8,0x90,0x44,0x2b,0x7e,0x6a, - 0xd1,0x33,0xc1,0x3f,0x54,0x5c,0xd1,0xae,0xcd,0xec, - 0x54,0xe8,0x7d,0x4e,0x41,0x59,0x88,0x47,0xce,0xb9, - 0xe2,0xab,0xd5,0xa1,0xa2,0x21,0x2c,0xd1,0x4a,0xa2, - 0x4d,0x79,0x16,0xd9,0xf4,0x00,0xe8,0xd3,0x9d,0xaf, - 0xef,0xf9,0xfa,0x39,0xaa,0xf7,0x81,0x91,0x9c,0xdd, - 0x8e,0x17,0x06,0x61,0x5c,0x61,0xd6,0x9f,0xe4,0x3e, - 0x61,0xcb,0x0c,0x56,0xa7,0xdf,0x04,0x7e,0x04,0x6a, - 0xf6,0x8a,0x06,0x1d,0x29,0x67,0xad,0xcf,0xe8,0x9c, - 0x73,0x20,0xf7,0xd6,0xd1,0x4b,0x81,0x63,0xa9,0xc4, - 0x5c,0xbb,0xef,0xb0,0x84,0x52,0xbb,0x7a,0x66,0x12, - 0x54,0xc8,0x2b,0xe4,0x87,0x09,0xa0,0x4d,0xa5,0xdd, - 0x32,0xb0,0xa5,0x29,0xf6,0x26,0x2b,0x82,0xd5,0xdb, - 0x13,0xfc,0x86,0x0c,0x2d,0xf1,0x90,0x11,0x6e,0xc9, - 0xfb,0x07,0x60,0x83,0x8d,0xd2,0x0d,0xcd,0xa0,0x98, - 0x98,0x95,0x5c,0xe8,0x3c,0x45,0x32,0xfd,0xb5,0xe9, - 0x40,0x65,0xe6,0xe8,0xba,0x43,0x73,0x6a,0xa0,0x2f, - 0x52,0x1d,0xc9,0xbd,0xae,0x61,0xd2,0x98,0x31,0x10, - 0x17,0x90,0xac,0xa8,0x81,0x34,0x41,0x14,0xbd,0x00, - 0x27,0xf2,0xda,0x2b,0xbb,0xf9,0x7a,0x67,0x4d,0x7f, - 0xa4,0xa3,0x7f,0x26,0xef,0x67,0x84,0x3b,0x6d,0x06, - 0xb7,0x55,0x04,0x1e,0xac,0x80,0xf7,0x42,0xda,0x76, - 0x2c,0x18,0xa1,0x88,0x94,0x54,0x5c,0xe7,0xec,0x71, - 0x00,0xda,0x1a,0x45,0x75,0x7b,0xed,0xb2,0x68,0xe8, - 0x5a,0xce,0x1b,0xfa,0x49,0x13,0xfb,0x48,0xe0,0xd6, - 0x88,0x46,0x1e,0xd8,0x16,0x01,0x43,0x26,0xde,0x28, - 0x19,0xcd,0x86,0x71,0x67,0x81,0x07,0xc8,0x42,0xee, - 0x60,0x38,0x0e,0x6c,0xfc,0x11,0x10,0x04,0x0b,0xc0, - 0x2a,0xb3,0x3d,0xf6,0x6a,0xf2,0xd4,0xf2,0x4d,0x2c, - 0xf4,0x0a,0x3b,0x50,0xda,0xa2,0x2c,0x9b,0x0e,0xec, - 0x99,0xc4,0x50,0xd3,0x92,0x28,0x75,0x7b,0xa1,0xf4, - 0x45,0x80,0x08,0x85,0x5c,0xa4,0x4d,0x9d,0x3a,0xe1, - 0x90,0x06,0xbe,0xd8,0x68,0xda,0x53,0x7e,0x0d,0x2e, - 0x39,0x5f,0xc3,0xf1,0xd7,0x8f,0x76,0xbc,0xf1,0x8b, - 0x40,0x81,0x37,0xbf,0xec,0x07,0x3f,0x72,0x9e,0xd1, - 0x39,0x2b,0x0d,0xf3,0x76,0xf5,0xa1,0x61,0x05,0x2e, - 0x32,0xba,0x63,0x0f,0x96,0x6d,0xe6,0x70,0x81,0x96, - 0x17,0xc0,0x81,0x21,0xc9,0xce,0x35,0x03,0x29,0x43, - 0x1f,0x5a,0x4f,0xf6,0xdd,0x12,0x29,0x25,0xa2,0xa4, - 0xf0,0xc3,0x50,0x76,0x1b,0x67,0x5d,0x6f,0x97,0x51, - 0xe3,0x52,0x67,0x7b,0x16,0xa4,0x2d,0xc7,0xd5,0xdb, - 0x67,0x90,0xfb,0xae,0x55,0x1a,0x33,0x76,0x0c,0x8b, - 0x6a,0x22,0x29,0xa6,0x69,0x32,0x90,0x1e,0x7b,0x9f, - 0x4d,0xd0,0xf7,0x16,0xd1,0x9d,0x56,0xbb,0x77,0xa5, - 0x40,0x1b,0x7b,0x96,0x6e,0x0d,0x3c,0xa0,0x32,0xa7, - 0x69,0x0d,0x18,0x35,0x5b,0x14,0xf8,0xc6,0x00,0x1a, - 0xce,0xda,0x81,0x5f,0x16,0x25,0x66,0x56,0x74,0x46, - 0x8e,0xeb,0x4f,0x06,0x81,0x9e,0xa9,0x61,0xbd,0x39, - 0xca,0xc3,0x87,0x3f,0xb2,0xd3,0x01,0xe4,0x9d,0xe7, - 0x00,0x0b,0x5e,0xc1,0x80,0xe9,0xf7,0xde,0xfa,0x01, - 0x88,0xc2,0x09,0xce,0xc3,0x36,0x48,0xb1,0xac,0x06, - 0x84,0x0a,0x83,0x93,0xe3,0x8d,0x10,0xdc,0xda,0x50, - 0x5d,0xbc,0x39,0xcc,0xd3,0x68,0x4d,0x5f,0x30,0xa9, - 0xae,0x5c,0x04,0x1a,0x9d,0x58,0x43,0x07,0x2a,0x3d, - 0xf5,0x6e,0x0b,0x18,0x6b,0x91,0xb0,0xe3,0x73,0xcb, - 0x1f,0xa1,0x6a,0x05,0x0a,0x6c,0x27,0xd2,0xd9,0xa3, - 0xc9,0x6b,0xd7,0x29,0xe3,0x25,0x83,0x4d,0xaf,0x09, - 0xd9,0x73,0x2e,0x57,0xee,0x5e,0x69,0x3a,0xba,0x36, - 0x0a,0xd1,0x30,0xa4,0x39,0x08,0xac,0x0a,0x6b,0x0e, - 0xfc,0xea,0xf1,0x41,0x5b,0xa0,0x3a,0x54,0x04,0x1b, - 0x25,0x52,0xc2,0xb1,0x69,0x30,0xb4,0x6b,0x17,0x24, - 0xeb,0xac,0x0c,0x78,0xcf,0x1c,0xf4,0x1f,0x8d,0x10, - 0xbf,0xf8,0x0c,0x36,0x3c,0x1b,0xdc,0x75,0x22,0x04, - 0x33,0x66,0xc1,0xe6,0xf7,0x6e,0x05,0x45,0x9b,0x12, - 0xc7,0xa6,0x44,0x96,0xd4,0x12,0x7e,0xf9,0xac,0x3f, - 0xb3,0xc8,0x96,0xae,0x02,0x98,0x72,0x4f,0x6b,0x61, - 0xf3,0x94,0xc9,0x8c,0x62,0x83,0x55,0x02,0x60,0x0a, - 0x92,0xf0,0x31,0x58,0x8e,0x3d,0x36,0xc8,0x06,0x00, - 0x9e,0xa6,0x83,0x61,0xdf,0xa5,0xed,0x75,0xa2,0xb4, - 0x91,0xca,0x34,0xdb,0x5c,0x1e,0xb0,0xeb,0x4c,0xed, - 0x16,0xb0,0x78,0x21,0xae,0xe9,0xb9,0x1a,0x6d,0xcb, - 0xef,0x58,0x36,0xdd,0x8e,0xd5,0x82,0xa7,0x8f,0x28, - 0xd7,0xee,0xc6,0x02,0xf0,0xe6,0xef,0x40,0xc0,0xb8, - 0x32,0xdd,0x78,0x12,0x82,0xf5,0xae,0x15,0x5a,0x15, - 0xc8,0xf0,0xb7,0x88,0x83,0x13,0xed,0xea,0xbf,0x61, - 0x0f,0xfe,0x6f,0x44,0x09,0xfe,0xea,0x40,0x1e,0xe1, - 0x68,0x21,0xfd,0x46,0xd2,0x85,0x7f,0x37,0x28,0xed, - 0x48,0x7a,0x01,0x49,0xfe,0x06,0xa7,0x78,0x0f,0x6e, - 0x60,0xf4,0x95,0xd2,0xa6,0x1a,0xa4,0x3e,0xc5,0x18, - 0xfd,0x11,0xaa,0xc8,0xb6,0xb4,0x28,0x4c,0x6a,0x5d, - 0xeb,0x59,0xaf,0x82,0x04,0x99,0x36,0xf2,0xbe,0x72, - 0xcd,0x27,0xf3,0x8d,0x9d,0xe1,0x48,0xfb,0xfe,0x1e, - 0x8c,0x24,0x8a,0x0a,0x50,0xda,0xc0,0x60,0x70,0xed, - 0xe2,0xa8,0xc9,0xee,0x34,0xc1,0xc0,0xc6,0xbb,0x01, - 0xe1,0x39,0x41,0x0a,0xd6,0xe6,0xad,0x48,0xd9,0x8d, - 0x19,0x4a,0x8a,0x99,0x7e,0x49,0xdb,0xb2,0x74,0x1f, - 0xd8,0x02,0x52,0x6b,0xed,0x95,0x0c,0xe5,0x65,0x0b, - 0xc6,0x3a,0xc9,0x48,0xb3,0x94,0xf3,0x19,0x91,0x79, - 0x0f,0x2e,0xac,0xc5,0xcb,0xcf,0x5b,0x3d,0x00,0xde, - 0x3d,0xec,0xfc,0xe3,0xa0,0xf1,0x90,0xbc,0x2f,0xa1, - 0x7b,0xc7,0x01,0x38,0xb5,0xc5,0x12,0x0a,0xbf,0x9b, - 0xcc,0xdb,0x01,0xd1,0xbb,0x4d,0x1e,0x3b,0x06,0x22, - 0xb0,0x7f,0x1a,0x9b,0x31,0xe4,0xe9,0x92,0x5a,0xae, - 0xc2,0x8e,0xd9,0xb7,0x6c,0x04,0xe6,0x9c,0x63,0x99, - 0x53,0x6a,0xa4,0xb4,0xdf,0xbb,0xd4,0x6c,0x84,0xe9, - 0x46,0x51,0xd6,0xc7,0x1c,0x3a,0xa1,0xc9,0xb5,0x19, - 0x8d,0x85,0xde,0xc8,0x1c,0x55,0xff,0x4f,0xbc,0x7f, - 0xa9,0x83,0xd6,0x5c,0xb2,0xde,0xeb,0x26,0x33,0xc7, - 0xc8,0xe6,0xdd,0x90,0x1a,0xc2,0x74,0xb9,0xbc,0x8c, - 0xda,0x97,0xff,0x46,0x0d,0x50,0x60,0x91,0x89,0xe3, - 0xa8,0x22,0x2d,0x97,0xde,0x01,0x27,0x9b,0x91,0xe6, - 0x04,0x8c,0x2d,0xe0,0x0c,0x74,0x15,0xe0,0x22,0xb7, - 0x1e,0x70,0x8a,0x6b,0x82,0x70,0xe5,0x42,0x26,0x3b, - 0x7f,0x2b,0x09,0x76,0x4b,0x2d,0xc3,0xa9,0x73,0xf7, - 0x4f,0x92,0xf7,0xc7,0x25,0x28,0xf1,0x48,0x99,0x60, - 0x4b,0xf8,0xc1,0xa1,0x6e,0x0f,0xa9,0xe1,0x61,0xf4, - 0x00,0x1b,0x7a,0x9f,0xbb,0xed,0x71,0xd7,0xc1,0xd8, - 0xb0,0x03,0x53,0xc3,0x41,0xa3,0x1c,0x53,0x03,0x3d, - 0xc6,0x4c,0x4e,0x1d,0xfd,0x0e,0x68,0x96,0x4d,0xaa, - 0x39,0x9c,0x73,0xf8,0x94,0xd9,0x30,0xed,0x1b,0x5d, - 0x8c,0xd8,0xf0,0x12,0x34,0x1b,0x42,0x82,0x29,0x5a, - 0x06,0x72,0x91,0x6e,0x96,0xc3,0xd0,0xaa,0x01,0x26, - 0xe2,0xbd,0x1b,0xf1,0x88,0x5d,0x0e,0x56,0x01,0x0d, - 0x81,0xe6,0xa7,0x59,0x0a,0x3a,0x9b,0x02,0x49,0x70, - 0x99,0x63,0xb8,0xf3,0xf2,0xba,0x97,0xd7,0x6c,0x03, - 0xd6,0x75,0x05,0xe7,0x79,0xa7,0x49,0x52,0x55,0x25, - 0xc6,0x60,0x00,0x1d,0x29,0xfa,0x87,0xa3,0xda,0xaf, - 0x91,0x31,0x83,0x2d,0xdf,0xf3,0x3a,0xf5,0xaf,0x4f, - 0x91,0xf7,0xf1,0xf1,0x45,0x7f,0x4b,0xde,0xdf,0xe1, - 0xe7,0xcf,0x3b,0x11,0xfc,0xcd,0x19,0x1f,0x52,0x82, - 0xde,0x63,0x0a,0x59,0x3c,0x37,0x86,0x46,0xab,0x2e, - 0x66,0x2e,0xb3,0xe7,0x13,0x47,0x93,0xec,0x6a,0xa6, - 0x93,0x0f,0x2e,0x02,0x37,0x7e,0x1e,0x2e,0x99,0x05, - 0xaa,0x7f,0x60,0x3e,0x5f,0x0c,0x91,0xf0,0x06,0xb6, - 0xdd,0x85,0xf9,0x28,0x97,0x11,0x75,0x36,0xe0,0xb0, - 0x65,0x7d,0x64,0x2b,0x5e,0xfa,0x75,0xaa,0x1d,0x0f, - 0xa8,0xef,0x21,0x59,0x50,0x77,0xd0,0xfd,0x08,0xea, - 0x1c,0x01,0x7a,0x2f,0xc4,0xc7,0xff,0x4d,0x12,0x6d, - 0x01,0x3a,0x9c,0x70,0x5e,0x55,0x34,0x76,0x62,0x18, - 0x18,0xd8,0x8a,0x5c,0x26,0xa0,0xc4,0xb0,0xdf,0x47, - 0xa5,0x95,0xa3,0xe0,0xfb,0x2b,0xb0,0xcb,0xdd,0xd2, - 0x00,0x4c,0x83,0xa2,0xbf,0xfe,0x56,0x0f,0xf8,0xb7, - 0x95,0x01,0xc6,0x63,0x3f,0x5f,0x8e,0x03,0xd9,0x88, - 0xc7,0xb4,0xfe,0x78,0x94,0xfb,0x81,0xff,0xd0,0xcc, - 0x08,0xe3,0x87,0x38,0x8c,0x14,0xe2,0xd4,0xe4,0x60, - 0x1c,0x84,0x84,0xb0,0x61,0xe0,0xe4,0xfd,0xf2,0xc6, - 0xfa,0xdb,0x6c,0xc8,0x25,0x1f,0xeb,0x07,0x8c,0x96, - 0x4e,0x6f,0x59,0x2f,0x26,0x0b,0xae,0xc7,0xb2,0x01, - 0x37,0x2f,0xbc,0xa0,0x98,0x57,0xda,0x77,0x5f,0xe3, - 0xad,0x3a,0x4b,0x3f,0x75,0xfb,0x14,0x43,0xc8,0x1c, - 0x84,0x39,0xd1,0x08,0x3f,0x97,0x42,0xde,0x6f,0xe7, - 0x4d,0x73,0xdf,0xe1,0xa6,0xf0,0x6a,0x8c,0x45,0x2c, - 0xfe,0x3d,0x4d,0x4c,0xc9,0x53,0x4f,0xd7,0xf2,0x1f, - 0x26,0xe0,0xea,0xba,0x8e,0x1c,0x34,0x15,0x21,0x9b, - 0x20,0x74,0x24,0x90,0x15,0xcc,0x86,0x5c,0xd3,0xf7, - 0x40,0xc0,0x0f,0xa2,0x80,0xcf,0xbc,0x3f,0xb0,0xf9, - 0xe7,0xe1,0x4b,0x71,0xfe,0x45,0x1c,0xdb,0x05,0x29, - 0x0a,0x8f,0x9d,0xc2,0x96,0xa5,0xaa,0x77,0x67,0xc9, - 0xf3,0xeb,0x1c,0x5b,0x5b,0xf3,0x54,0xab,0xba,0xa7, - 0x1e,0x7d,0x47,0x0f,0xe9,0x6f,0xe7,0x1e,0x98,0xa2, - 0x7f,0x12,0xef,0x87,0x9b,0x85,0x62,0x8c,0x43,0x5f, - 0x84,0x87,0x0e,0x01,0x9b,0x0f,0x00,0xea,0xdc,0xfc, - 0x30,0x83,0x64,0x93,0x77,0x9f,0xee,0x3e,0x65,0x11, - 0x23,0x68,0x1c,0xf4,0x4b,0x38,0xb1,0x88,0x16,0x4d, - 0x0b,0xd2,0xd6,0xfd,0x0e,0xd9,0x55,0x98,0x5c,0x2e, - 0x4d,0x4b,0x0a,0xb8,0xf1,0xeb,0xa8,0xd2,0x62,0x69, - 0x33,0x82,0xfb,0x2d,0xa0,0x66,0x78,0x14,0x7a,0x7a, - 0x1f,0x0c,0x17,0xf6,0xa5,0x7c,0x9f,0x96,0x54,0xc0, - 0x6b,0x20,0xa9,0xdc,0xe2,0x95,0x45,0x7c,0x3d,0x5f, - 0xfb,0xf8,0x79,0x80,0x78,0x40,0xde,0xe7,0x4f,0x3f, - 0xcb,0x8d,0x8f,0xe3,0x3b,0x71,0x0d,0x01,0x9c,0xc3, - 0x43,0xee,0x32,0x9e,0x86,0xbc,0x43,0x47,0x23,0x8c, - 0xdb,0xde,0xf4,0x29,0x0c,0x95,0xa6,0x39,0x61,0x53, - 0x80,0xb8,0x5c,0x11,0x7c,0x97,0xa6,0x28,0xad,0x61, - 0xa6,0xfe,0xbf,0x54,0xdf,0x01,0x73,0x0d,0xc7,0xc6, - 0xca,0xa4,0x2b,0xdd,0x00,0x6d,0x3a,0x24,0xa1,0x8d, - 0xcd,0x6d,0x44,0x5a,0x2d,0xf2,0x13,0xe2,0xd8,0x43, - 0x61,0xe3,0x71,0x98,0x69,0xc9,0x08,0x81,0x21,0x65, - 0x00,0x92,0x35,0xad,0xf1,0x87,0xea,0xd1,0xa7,0x13, - 0xb6,0xb0,0xce,0xc3,0xd6,0xd8,0x21,0x6d,0x46,0xa4, - 0xec,0xc8,0x8c,0x8a,0x89,0xe0,0x6e,0x4b,0x91,0x80, - 0x4b,0xfb,0xac,0xd4,0x57,0x58,0x15,0xc5,0xda,0x20, - 0x5e,0x9d,0xa8,0x67,0x01,0xe0,0xc9,0x43,0x4e,0xbc, - 0xf5,0xf9,0x27,0x73,0x3d,0x8f,0xe2,0x0e,0x6e,0x5a, - 0xfc,0x4f,0x95,0x43,0x0e,0xe4,0xfd,0x56,0x40,0xdc, - 0x8a,0x85,0x24,0xe1,0x08,0x3c,0x0c,0x0c,0x7c,0x90, - 0x96,0xf7,0x6b,0x54,0xfc,0x1e,0x80,0x31,0xb6,0x4e, - 0xf1,0xb4,0x0d,0x9e,0xe2,0x04,0x1c,0xca,0xee,0x61, - 0x20,0x99,0x3c,0xe4,0xcd,0xd8,0x58,0x49,0xee,0x5c, - 0x12,0x63,0xd7,0xdf,0x60,0xca,0xdd,0x77,0x34,0x32, - 0x70,0x1b,0xbe,0xe4,0xa8,0x38,0xbb,0x11,0x90,0x6c, - 0xe2,0xc2,0x03,0xd1,0x24,0xb6,0x2e,0x4e,0x06,0x77, - 0x5e,0x3a,0x13,0x5b,0x29,0xa5,0x05,0x11,0x30,0x92, - 0xb0,0x20,0xa1,0x56,0xf4,0x17,0xc3,0x2f,0xf8,0x10, - 0xce,0xc5,0xbb,0x26,0x3f,0x31,0xd0,0xf6,0x9d,0xe9, - 0x8b,0x08,0xd1,0x1b,0x2c,0xc7,0xce,0x32,0xd5,0xc9, - 0x50,0xfe,0x55,0xc0,0x55,0x00,0x43,0x40,0xad,0xc1, - 0xf8,0xbb,0x64,0x1f,0xcf,0xb7,0xf0,0xa7,0x86,0xa1, - 0xf8,0x09,0x2e,0xc8,0xc3,0x02,0xe7,0x41,0xe9,0x67, - 0x43,0xde,0xe7,0x30,0x65,0xe0,0x80,0xea,0x6f,0x5d, - 0x7c,0xef,0xc9,0xfb,0x25,0x08,0x1c,0x87,0x94,0x4b, - 0x65,0xe2,0x92,0x24,0xfb,0x61,0x87,0x26,0x88,0xba, - 0x6d,0x65,0xb0,0x33,0x65,0x11,0xdd,0x03,0xea,0xa4, - 0x11,0x36,0x45,0x72,0xf1,0xaa,0xed,0x74,0x67,0x8a, - 0x79,0x48,0x2f,0x83,0xd6,0xe2,0xd0,0x09,0xbc,0x02, - 0x20,0x06,0xf2,0x3e,0x4b,0x0a,0xce,0x8c,0x7d,0x14, - 0x34,0x6e,0x05,0x83,0x12,0x54,0x88,0xa2,0xd5,0xb0, - 0xba,0x0b,0x2c,0x12,0xe2,0x6e,0x2b,0xd6,0x7d,0x10, - 0x59,0xfe,0x0e,0x71,0x33,0x66,0xb9,0xb2,0x9b,0x5d, - 0xcc,0x7d,0x07,0xe8,0xea,0x11,0x2b,0x20,0xcf,0x82, - 0x80,0x23,0xd8,0xb9,0x4b,0xe0,0x41,0xa5,0x27,0x7f, - 0x25,0x04,0xfd,0xb3,0xb0,0x20,0x1e,0xfc,0xe5,0x0d, - 0x75,0x9f,0x03,0x14,0x4f,0xbb,0xf8,0xe9,0xb3,0xee, - 0x9c,0x8b,0xdb,0x28,0xc2,0xe3,0x6f,0x6e,0x33,0x17, - 0x22,0x2e,0x4c,0xea,0x03,0x08,0x8a,0x4f,0x5d,0xdf, - 0xdd,0x12,0x5e,0x51,0x5a,0x6b,0xac,0xd4,0xce,0x74, - 0x06,0xda,0x7e,0x9f,0x36,0x51,0xee,0xd9,0x87,0xf0, - 0xb8,0xc4,0x51,0x66,0xd6,0xb4,0x2b,0x90,0xf7,0xd9, - 0xaa,0x88,0x46,0xde,0xcf,0xa8,0x4c,0x49,0x63,0x97, - 0x99,0xa5,0x4e,0xdb,0xcd,0xe3,0xa5,0x2c,0xab,0x62, - 0xab,0x8e,0xba,0x63,0x97,0xd2,0xa3,0x63,0x2e,0xec, - 0xe4,0x7d,0xe3,0x48,0xc0,0x02,0xf0,0x65,0x5f,0xf6, - 0x02,0x1f,0xdb,0x45,0xae,0x73,0x00,0x8e,0xf2,0x89, - 0x05,0x41,0x0d,0xdc,0xec,0x4e,0xbe,0x1a,0xbc,0x6c, - 0x92,0xbf,0xc9,0xa9,0x99,0x87,0xec,0x56,0x02,0x9e, - 0xb0,0x45,0x84,0x3f,0x1b,0x05,0xbe,0x43,0xec,0x79, - 0x9f,0xb3,0xbf,0x01,0x0a,0x70,0x07,0xf2,0x3d,0x40, - 0xb6,0xf3,0x5b,0x10,0x46,0xce,0x3c,0x4d,0xcc,0x75, - 0x06,0x5d,0xf0,0xa2,0xc9,0x62,0xd5,0x3c,0x1b,0x26, - 0xf0,0xc1,0x47,0x00,0xa3,0xf4,0x0a,0xc0,0xe6,0xa5, - 0x97,0x13,0x92,0xaa,0x47,0x5f,0x3d,0xfb,0x22,0xf9, - 0x36,0xd4,0xda,0x21,0xa0,0x09,0x79,0x9f,0x23,0xb3, - 0x1d,0xdd,0xf4,0xab,0x78,0x03,0x1a,0xfe,0xd2,0x46, - 0x75,0x5d,0xd4,0x12,0xac,0x9a,0xa1,0x69,0x7f,0x90, - 0x7f,0x21,0x7a,0xef,0x2e,0x8f,0x1e,0xa3,0x11,0x8c, - 0xd8,0x02,0xf0,0x8a,0xa4,0xf4,0x8d,0x78,0x08,0xa1, - 0x88,0x82,0x4d,0x98,0x81,0x1b,0xda,0x33,0x0e,0x53, - 0xef,0x19,0xc2,0xa8,0x54,0xf8,0x94,0x06,0x18,0xb2, - 0x78,0x02,0x84,0x4a,0x32,0x63,0x4a,0xf6,0xd6,0xbf, - 0x09,0x00,0xc4,0x79,0xd1,0x6e,0xec,0xb1,0x1a,0x51, - 0xe3,0x84,0x9e,0xf3,0x1e,0x62,0xbb,0x0b,0x20,0xdc, - 0x5c,0x1d,0x05,0x68,0x4a,0xab,0xea,0x66,0x50,0xe8, - 0x94,0x11,0x30,0xb5,0x0e,0xd0,0x1b,0x12,0xd8,0x47, - 0x8b,0x76,0xde,0x74,0x7b,0x70,0xa2,0x25,0x2d,0x28, - 0xf0,0xf0,0x18,0xa5,0xff,0x3e,0x50,0x3e,0x87,0x4d, - 0xfc,0xb5,0x04,0x59,0xb6,0x51,0x8a,0x02,0x6e,0x77, - 0x1d,0xcc,0x57,0x27,0x85,0x6b,0xba,0x78,0xf0,0xe8, - 0xf3,0xcc,0xec,0x52,0x42,0xe8,0xe4,0x2d,0x2a,0xb8, - 0x57,0x1c,0x7f,0x39,0x47,0x9d,0x93,0x9d,0x3b,0x42, - 0x3d,0x88,0x31,0x9a,0xfd,0xf8,0xe2,0x61,0x74,0x46, - 0x64,0x4b,0x38,0xe1,0xde,0x68,0x3a,0x05,0xc2,0xe0, - 0xc3,0xaa,0x72,0xb2,0x3e,0x07,0xe1,0x9e,0x86,0xf5, - 0x5a,0x62,0x04,0x5d,0x87,0x51,0xc7,0x2c,0x0a,0xc3, - 0xf1,0x4f,0x03,0x00,0x9e,0xa3,0x88,0xdc,0xb6,0xe9, - 0x6e,0x8a,0x11,0x3c,0xc0,0x0b,0x62,0x6c,0xb2,0xc5, - 0x0a,0x6b,0x8f,0x20,0x97,0x1b,0x78,0x93,0x7d,0xa8, - 0xd5,0x6a,0xd4,0xfc,0x0b,0xc6,0x16,0x6c,0xd9,0x46, - 0xa0,0x26,0x7a,0xbd,0x1d,0xc2,0xbc,0xa7,0x84,0x5d, - 0xd1,0x90,0x75,0x46,0x19,0x39,0x39,0xa2,0xe7,0x3a, - 0xc9,0xa3,0x40,0x78,0xf2,0xf5,0xe1,0x73,0x0b,0x33, - 0x93,0xc1,0x4e,0x25,0x8e,0x12,0x64,0xb0,0x09,0xad, - 0xdc,0xb9,0x34,0xb3,0x90,0x67,0xa8,0xe6,0x1f,0x56, - 0x63,0x13,0xa6,0x35,0x80,0xa9,0xbe,0x15,0x9e,0x33, - 0xdb,0x7d,0xaf,0x4c,0x05,0xa8,0x0b,0x5d,0xe2,0x42, - 0x49,0x1e,0x4b,0x7a,0xef,0xf7,0x76,0x23,0x71,0x0e, - 0x66,0xd8,0x42,0x6e,0x41,0x33,0x5d,0x75,0x67,0x25, - 0xc8,0x20,0x52,0xc3,0x57,0xf8,0xfb,0x00,0xc0,0x0f, - 0xbd,0x1b,0x3f,0xe5,0xfb,0x9c,0xc9,0xfb,0xe3,0x90, - 0xdc,0x6f,0xd0,0xdb,0x0c,0x64,0xdd,0xea,0x0f,0x6f, - 0x33,0x15,0xda,0xce,0x99,0x11,0x59,0xc2,0x64,0xaa, - 0x52,0xe9,0x80,0x94,0x98,0xb3,0xea,0x76,0x96,0xd2, - 0x8e,0xe7,0xf1,0x61,0xc8,0x8e,0xd2,0x76,0x6a,0x36, - 0x15,0x61,0x4e,0xe1,0x4f,0x01,0xdb,0x60,0x74,0xd3, - 0x32,0xa4,0xe2,0x81,0xcf,0x4d,0x32,0xd9,0x44,0x30, - 0xa1,0xc1,0x39,0x34,0x5c,0xd8,0x66,0x13,0x64,0x47, - 0x7c,0x8d,0xd5,0xaa,0x6a,0x31,0x42,0xfb,0x0c,0xcc, - 0x49,0x18,0x99,0x02,0xeb,0xa6,0x20,0xc2,0x86,0xed, - 0xc8,0xda,0x7d,0xd0,0xc1,0x06,0x08,0x1d,0xda,0x35, - 0x1a,0x68,0x11,0xbb,0x27,0x0c,0xc8,0xbe,0xae,0x30, - 0x3b,0x31,0xa2,0x38,0x50,0xab,0x9d,0x2b,0xd4,0x27, - 0x52,0xdd,0x9b,0x7f,0x13,0x00,0xf0,0x87,0xef,0x7e, - 0x20,0xf0,0x3e,0xb6,0xe4,0xfd,0xb0,0x53,0xf2,0x50, - 0x2c,0x4c,0x38,0x89,0xbb,0x1d,0x73,0x3c,0x10,0xd8, - 0x43,0x80,0x37,0x1c,0xa4,0xf2,0xe3,0x61,0x53,0xa3, - 0xde,0xfe,0x5c,0x94,0x1a,0xc0,0xa1,0xe4,0x08,0x0e, - 0x22,0x08,0x03,0x7a,0x44,0xb4,0xe4,0x56,0x04,0x9c, - 0x82,0x2e,0x4f,0xf5,0xdb,0xa1,0xc6,0x17,0x8a,0x25, - 0x68,0x09,0x52,0x01,0x30,0x90,0x31,0xcd,0xa0,0x78, - 0xe9,0xcd,0xb5,0x85,0x9e,0xca,0xc2,0xd4,0x50,0xdb, - 0xe0,0x0b,0xf2,0xbd,0x34,0xf2,0x7e,0x11,0x30,0xd1, - 0xce,0x1d,0xf6,0xe4,0xfd,0x31,0x27,0xfa,0x3c,0x4b, - 0x64,0xc1,0x07,0x73,0x2d,0x5a,0x52,0x23,0xb6,0xb7, - 0xc0,0x7e,0xcb,0x53,0xfc,0x1a,0xff,0x29,0xd4,0xf1, - 0x34,0x85,0x20,0x42,0xa3,0xb2,0x49,0xb2,0x79,0x86, - 0xad,0x88,0xf7,0xef,0xe8,0x01,0x6c,0x63,0x43,0xee, - 0x99,0x1f,0xf1,0xc0,0xbb,0x9e,0xa2,0xcf,0x78,0xf0, - 0x5e,0x51,0x18,0x47,0xfe,0x1d,0x8f,0x8a,0x1b,0x40, - 0xca,0x91,0xeb,0x96,0x83,0x51,0x6b,0x0f,0x34,0xb0, - 0xc8,0xba,0xd2,0x48,0xb8,0x29,0xb7,0xc1,0xa2,0x97, - 0x1b,0xc8,0x57,0xd5,0x01,0x40,0x37,0xc7,0x48,0x09, - 0x09,0x6d,0x9c,0x16,0x6b,0xf8,0x66,0xe6,0x14,0x9d, - 0xbc,0x6f,0xf6,0x3b,0x35,0x30,0x15,0xe0,0x8e,0x5c, - 0x53,0x83,0xc6,0x08,0x24,0x3b,0xad,0x88,0x9b,0xc1, - 0x44,0x8e,0x30,0x86,0xb1,0xe9,0x94,0xb0,0xcc,0xeb, - 0x73,0x05,0xed,0xe2,0xa4,0xbb,0x49,0x10,0x87,0x29, - 0x41,0x5a,0x39,0xb5,0xf8,0x11,0x12,0xe8,0xc6,0xd8, - 0x92,0xf7,0x91,0x6f,0x46,0xaf,0xcf,0x5e,0x1d,0x24, - 0x5a,0x56,0x57,0xe4,0xe9,0x2e,0xe1,0x18,0x88,0x92, - 0xf1,0xa8,0x58,0xc6,0xbf,0x1f,0x00,0x5a,0x34,0x78, - 0xe6,0x94,0x73,0x6e,0x0b,0x1e,0x36,0x50,0x3c,0xc9, - 0x50,0xba,0x2f,0x1b,0x43,0x44,0xe1,0xa3,0x11,0xc1, - 0xfd,0xac,0x1b,0x33,0x79,0x3f,0xd6,0xbe,0xf0,0x40, - 0x49,0xdc,0xc0,0x2d,0x09,0x25,0x65,0x5f,0x25,0x17, - 0xd7,0x7c,0xac,0x1d,0x92,0x27,0xa0,0x34,0x59,0xa9, - 0x9b,0xf9,0xe5,0x1a,0x3b,0xdd,0x04,0x5b,0xae,0x5d, - 0xb5,0xfc,0xc8,0xcb,0xe3,0x3e,0x5d,0x0d,0x14,0xa9, - 0x71,0xb4,0xe2,0xc0,0xb1,0x06,0xa4,0x40,0x89,0x40, - 0x64,0xc2,0x50,0xe7,0xbc,0xe1,0xe4,0x7d,0x16,0xa3, - 0xcf,0x54,0x4e,0x8d,0x0a,0xec,0xf1,0x1a,0x32,0x72, - 0x7e,0xc4,0xb2,0x06,0x5b,0x59,0x4e,0xdd,0xfa,0xeb, - 0x10,0x0f,0x7a,0x77,0x8c,0xd5,0x9c,0x05,0x58,0xd3, - 0x9e,0xa4,0x97,0x14,0x08,0x38,0x14,0x86,0x91,0x29, - 0xfe,0x3a,0x00,0x9c,0x86,0x53,0xb8,0xe7,0x9b,0xf3, - 0xcd,0xaf,0xdc,0xe9,0x00,0xf0,0x90,0x20,0xbc,0x35, - 0x7b,0x8c,0xc3,0x1c,0xdf,0x61,0x44,0x76,0x37,0x74, - 0xc4,0x94,0x69,0x8c,0x88,0xa1,0x3b,0x8e,0xc0,0x98, - 0xd6,0xdc,0xe0,0x21,0xec,0x29,0x7a,0xd1,0xf4,0x04, - 0x16,0x9d,0x55,0xca,0x02,0xa4,0xa0,0xc2,0x11,0x89, - 0x33,0x25,0x4b,0x95,0xd6,0x3f,0x0b,0xa7,0xca,0x16, - 0x20,0xaa,0x98,0x26,0xef,0x4c,0x65,0xab,0x66,0xf6, - 0x12,0x5b,0x65,0x8d,0x71,0x05,0xf5,0x2e,0xcf,0x3b, - 0x04,0x80,0x45,0x77,0x2a,0x22,0x9b,0x63,0x04,0x64, - 0x10,0x5f,0x67,0xb7,0xb4,0xa7,0xef,0x97,0x05,0x58, - 0xe2,0x2a,0x35,0xa3,0x5f,0x8e,0x3c,0x2e,0x2b,0x7e, - 0x9d,0x47,0x02,0x87,0x1d,0x1c,0x58,0x26,0x2a,0x68, - 0xd5,0xb0,0x0b,0x1c,0x0d,0x8e,0x42,0x3b,0x9e,0x78, - 0xcd,0xab,0x6c,0xfa,0xe3,0x00,0x80,0xc3,0x5f,0xb1, - 0x47,0xd6,0x4f,0x7e,0xa2,0xa7,0x99,0xed,0x00,0xb4, - 0x9e,0xb2,0x07,0x3e,0xfd,0xf1,0xa3,0xc9,0x08,0xda, - 0x6e,0x5b,0xa4,0xd7,0xc6,0xde,0x94,0x61,0x70,0x83, - 0x88,0x47,0xe6,0x7c,0x57,0x90,0xa9,0x51,0x02,0x16, - 0x60,0x04,0x99,0x06,0xb6,0x99,0x13,0x7b,0xb1,0xed, - 0x1b,0x64,0x47,0x2e,0x03,0x08,0xda,0x2c,0xef,0x95, - 0x15,0xec,0x56,0xe3,0x58,0xbb,0xba,0x7e,0x1a,0x4c, - 0x12,0xdb,0xbb,0x54,0xc4,0xf0,0x51,0x2e,0x72,0x90, - 0xce,0xf6,0x40,0x54,0x8a,0x50,0x14,0x8d,0x46,0xd0, - 0x55,0xc4,0x1c,0xb5,0x5d,0x81,0x13,0x0d,0xc8,0x6b, - 0x25,0x3f,0xb4,0xfe,0xae,0xa9,0x3c,0x46,0x12,0xee, - 0x54,0xd0,0xaf,0x0e,0xb1,0xa9,0x2b,0x19,0xa5,0x93, - 0xe0,0xd8,0x6c,0x1f,0xc3,0xae,0xd9,0x04,0xf4,0x00, - 0xbc,0xbc,0xc0,0xf5,0xbb,0xf8,0x67,0x4b,0x00,0xfe, - 0xea,0xf5,0xfd,0xe4,0x1d,0x1e,0x07,0x11,0xde,0xbc, - 0x85,0xdb,0xa0,0xc3,0x23,0xd9,0x09,0x0f,0x9b,0x03, - 0x26,0xc9,0x8b,0xd1,0x1a,0x66,0xe3,0x0e,0xef,0xd0, - 0xc0,0xb3,0xd3,0x80,0x53,0x65,0x1a,0x1c,0xe8,0x0e, - 0xe4,0x06,0x34,0x0c,0x01,0x92,0x1c,0x8c,0x9a,0x59, - 0x3b,0x85,0x00,0xe6,0xfa,0xe4,0x40,0x22,0x2a,0xda, - 0xf6,0x82,0x9d,0x7c,0xb7,0xd6,0x24,0x7f,0x00,0x9b, - 0x92,0x13,0xd1,0x7f,0x76,0x8d,0xe5,0xeb,0x39,0xf9, - 0x90,0x0f,0x75,0x9d,0x17,0x70,0x73,0x0a,0x92,0x0a, - 0xa6,0x01,0x11,0x26,0xad,0xdf,0x84,0x26,0x4e,0x40, - 0x58,0xc7,0x83,0x22,0xeb,0x6d,0x98,0x0a,0x3c,0x2b, - 0x53,0xf5,0x2e,0xf7,0x70,0x2d,0x4c,0x24,0xb7,0x68, - 0x17,0x21,0x55,0xd6,0x18,0x41,0xb2,0x92,0x9a,0x4e, - 0x20,0x20,0x7f,0xd6,0xef,0x7b,0x23,0x1f,0xe0,0x33, - 0x3c,0xf0,0x53,0x61,0xe6,0x29,0xb3,0xe8,0xb0,0xd3, - 0x73,0x97,0x6d,0x1f,0x33,0x19,0x37,0x6b,0x4e,0xe9, - 0xfe,0xce,0x31,0x40,0x76,0x7b,0xdc,0x25,0x27,0x26, - 0xce,0x81,0x33,0xb4,0x4a,0xdb,0x01,0x6f,0xc3,0x22, - 0xaa,0x18,0x85,0x96,0x04,0x18,0xd9,0x21,0x5c,0xeb, - 0x4d,0xd5,0xf8,0x83,0x91,0xac,0x18,0x23,0x27,0xda, - 0xb9,0xa4,0x6c,0xa8,0xcc,0xff,0xb3,0x06,0x82,0x74, - 0x0b,0x66,0x02,0xce,0x90,0x3e,0xbe,0x16,0x0f,0x32, - 0x27,0x4f,0x89,0x7b,0xb1,0x40,0xd3,0x76,0x1b,0x4b, - 0x7b,0xa0,0x5e,0xa0,0xd5,0x2a,0x74,0xe9,0x37,0x8e, - 0xe0,0xbf,0x3a,0x95,0x84,0x9a,0xa5,0xba,0x72,0x13, - 0x12,0x63,0xf2,0x2a,0x8f,0x68,0x82,0x27,0x72,0x51, - 0xbe,0x6e,0x97,0xc2,0xd3,0x09,0x9b,0x0f,0x95,0x07, - 0xfb,0x97,0x13,0x69,0xe5,0x86,0x67,0xff,0x9e,0x1d, - 0xf1,0x43,0x38,0x8f,0xb1,0x74,0xe1,0x43,0xf4,0xb1, - 0x3c,0xfc,0x94,0x74,0x9f,0x5b,0x4e,0x61,0x6b,0x24, - 0xec,0xa7,0xec,0xee,0x2f,0x25,0x47,0xe1,0x84,0xec, - 0xfd,0x59,0xd4,0xaa,0xde,0x58,0x80,0x43,0x4c,0x33, - 0xd8,0x84,0x7f,0xea,0xc8,0x71,0xaf,0x0b,0x46,0xe4, - 0x35,0xb0,0xd4,0xc4,0x10,0xec,0xa0,0x8a,0xb2,0x53, - 0xee,0x81,0x74,0xfc,0x5f,0x23,0xd1,0x8b,0x23,0x51, - 0x3b,0x27,0xd8,0xcd,0xdc,0x54,0x60,0x70,0x43,0xf5, - 0xa3,0xfa,0x07,0x94,0x59,0x03,0x54,0x54,0x5d,0xc8, - 0xfb,0x3b,0x49,0xf6,0x62,0x56,0x02,0xe3,0x47,0xe0, - 0x05,0xc8,0xa2,0xeb,0x33,0x54,0x8e,0x02,0xeb,0x10, - 0xa7,0xde,0x2b,0xf2,0x7b,0xf8,0x68,0x98,0x64,0x32, - 0xd8,0xd8,0xd4,0x6f,0x0a,0x82,0x3c,0x01,0xe9,0x9e, - 0x24,0xf9,0xbf,0x27,0xef,0xdf,0x3d,0xf4,0xfc,0x40, - 0xa8,0xba,0xf5,0x0f,0x62,0xae,0x95,0x79,0x83,0x57, - 0x5c,0x37,0xd7,0xfb,0xbf,0x81,0xc1,0x21,0x9d,0x37, - 0x98,0x22,0x05,0xde,0x3c,0x39,0xf6,0x9a,0x1e,0x5e, - 0x83,0x1e,0xee,0x0b,0xab,0x52,0x0d,0x13,0x31,0x32, - 0x5a,0x59,0xd9,0x1d,0x5f,0xae,0x1d,0x75,0x90,0xcb, - 0x17,0x4c,0xd1,0xfd,0x40,0xbb,0xce,0xc9,0xd1,0x19, - 0x6a,0xcb,0x55,0x76,0xf1,0x4a,0xde,0x67,0xd3,0x8c, - 0xc7,0xb9,0xbc,0x4b,0x20,0xe8,0x40,0x33,0x2a,0x5e, - 0x55,0x40,0x10,0x59,0x0d,0x41,0x7f,0xb0,0x17,0x51, - 0xc5,0xcb,0xb0,0x93,0xf7,0x25,0x20,0xc9,0x84,0x06, - 0x6d,0x87,0x78,0x4d,0x29,0xc2,0x9c,0x9b,0xa8,0x88, - 0xac,0x30,0x02,0xbf,0x7e,0xb5,0x25,0xfe,0x28,0xc5, - 0x7e,0xd7,0x29,0xf8,0x99,0xab,0x4f,0x62,0xf8,0xe1, - 0x08,0xc5,0xbf,0x8b,0x0f,0x3c,0xbb,0x16,0x8f,0x24, - 0xb6,0xd0,0x17,0xca,0x09,0xb7,0x50,0x8b,0xa7,0xc5, - 0xe5,0x7e,0xd6,0x0a,0xa1,0xa0,0xa1,0xaa,0xdf,0x5b, - 0x53,0x58,0xb5,0xe7,0x5e,0x23,0x69,0x65,0xc0,0x05, - 0x96,0xf4,0x06,0xf3,0x8f,0xe3,0x1d,0x97,0xb4,0xf6, - 0xea,0xb9,0xd3,0xc8,0xfb,0xbc,0x76,0x76,0xc7,0xff, - 0xc8,0xfe,0xfb,0xc3,0x7a,0xe6,0xe8,0x41,0x62,0xf6, - 0xee,0x7d,0xfc,0xbb,0x0d,0xdb,0xa0,0x06,0x3a,0xcb, - 0xb6,0x20,0x8b,0x77,0xe2,0x41,0xe6,0x89,0x3a,0x24, - 0x23,0xa1,0x3b,0x8b,0x34,0xf2,0x91,0x65,0x3b,0x51, - 0x99,0xe0,0x52,0x31,0xaa,0x65,0x17,0x5b,0x8f,0x46, - 0x6b,0x05,0x95,0x55,0xab,0x66,0x28,0x98,0x40,0x71, - 0x2d,0x45,0x3f,0x07,0x02,0xfe,0xa8,0x54,0xb8,0xe3, - 0xb0,0xb3,0x05,0xe0,0xdb,0xcc,0x04,0xdc,0x06,0x1c, - 0x66,0xf2,0xfe,0x2d,0x1b,0x3f,0xfe,0xf8,0x89,0x6c, - 0xe8,0xd2,0x50,0x7c,0x18,0x55,0x36,0xe4,0x7d,0x3e, - 0x02,0x18,0xb3,0xfa,0x2f,0x04,0x62,0xc4,0xa6,0x94, - 0xa2,0xdb,0x73,0xb7,0x0c,0x60,0x64,0xc9,0xb0,0xd1, - 0xf5,0xec,0xa0,0x80,0xdc,0xa6,0x14,0x2a,0x24,0x1b, - 0x4d,0x81,0x89,0x5b,0xfc,0xa5,0x3c,0x13,0x06,0x0e, - 0x76,0x45,0x64,0x86,0xdd,0x9a,0x36,0x9c,0x59,0x55, - 0x91,0x56,0x2c,0xe0,0xdc,0x6d,0xb5,0x8b,0x9a,0xae, - 0x61,0xe7,0x3b,0xbc,0x3e,0xcf,0x9e,0x5b,0x51,0x7e, - 0x1f,0x58,0xe2,0x1e,0x44,0x44,0x15,0xa4,0xad,0xa7, - 0x53,0x81,0x2c,0x4c,0x43,0x7a,0xa7,0x04,0xa3,0x4c, - 0x6e,0xea,0xf9,0x40,0x87,0x91,0xc6,0x9f,0xb6,0x01, - 0x9f,0x38,0x8d,0xe2,0xf8,0xc9,0xda,0xbe,0xe2,0x43, - 0x0c,0x6f,0x8f,0xa9,0xe3,0x7e,0x08,0x30,0xca,0x03, - 0xde,0x96,0x3e,0xdc,0x9c,0x01,0x2a,0x1a,0x9c,0x14, - 0x46,0xbb,0x68,0x10,0x47,0xe3,0xb7,0xd3,0x76,0xf3, - 0x8e,0xc3,0x1d,0x2f,0x3b,0x5a,0xa2,0x7b,0xf5,0xb8, - 0x05,0x4c,0x53,0x11,0x89,0xe0,0x38,0xd4,0xb5,0xf7, - 0xd8,0x29,0x14,0x97,0x58,0x69,0x39,0xb1,0x3d,0x5d, - 0x19,0xec,0x60,0x61,0x2c,0x11,0xc5,0x7e,0x6d,0xf1, - 0xde,0x58,0x86,0x78,0x7c,0x59,0x2e,0xfb,0xef,0x05, - 0xa9,0xa3,0x7c,0xc3,0xd8,0x68,0xc9,0x55,0x92,0x3d, - 0xdc,0x52,0x60,0x4a,0x76,0x7b,0x86,0xb3,0xf8,0x07, - 0xaa,0x81,0x3a,0x65,0xcc,0xe7,0xa6,0x80,0x8a,0x91, - 0x00,0x2d,0x6b,0xf5,0x36,0x28,0x25,0x4c,0x5d,0x03, - 0x3f,0xdf,0x78,0x01,0x96,0x56,0xa2,0x80,0x1b,0x57, - 0xd7,0x44,0x03,0x1c,0xc4,0x65,0x49,0x33,0xab,0x07, - 0x01,0xe0,0x59,0xb1,0xf9,0xb8,0x24,0x7d,0xba,0x1b, - 0x8e,0x77,0xf8,0xfd,0x7b,0xcc,0xef,0x3c,0x53,0x84, - 0x28,0x60,0x9b,0xd3,0x5a,0x36,0x12,0x7a,0xe0,0x8b, - 0x1c,0xda,0x94,0x30,0xf1,0x8a,0x5d,0xe7,0xa3,0xaa, - 0x3d,0xb8,0x53,0x51,0x0b,0x4e,0x49,0xd0,0x76,0xd7, - 0x33,0x27,0x47,0x00,0xb0,0x7b,0x70,0xc4,0x19,0xc8, - 0x4c,0x45,0x6e,0x31,0xa9,0x98,0x3b,0x8e,0x0d,0xe3, - 0xb3,0x32,0xf0,0x74,0x06,0x78,0xa6,0xd8,0x06,0xf7, - 0x0d,0xd6,0xdd,0x9d,0x33,0xc8,0x60,0xcb,0x73,0xaf, - 0x28,0x11,0x0b,0x1f,0xa3,0x7c,0xea,0x12,0x47,0x61, - 0xf7,0x8e,0xec,0xc3,0x99,0x6b,0x0f,0x26,0x6a,0x49, - 0x35,0x52,0x45,0x67,0x6a,0x9f,0x13,0xc9,0x47,0x42, - 0x5c,0xf6,0xca,0x48,0x0e,0xd2,0xaa,0xce,0x52,0x21, - 0x0e,0x99,0xe1,0x07,0xcc,0x46,0x78,0x8e,0x02,0x43, - 0x67,0x25,0xf0,0xc4,0x17,0xe0,0x7e,0x2e,0xff,0xa9, - 0xc4,0x57,0xe8,0x13,0xfd,0xae,0x44,0x30,0x64,0x94, - 0x0f,0xf4,0x3c,0x79,0x83,0x48,0x30,0x28,0xba,0x4a, - 0x25,0x5e,0x1e,0x7c,0xe0,0xcd,0xe3,0x8f,0x0f,0x54, - 0x24,0xef,0x17,0x47,0xd9,0x30,0x9c,0xdb,0x94,0x8d, - 0x2c,0x09,0xda,0x64,0x25,0x18,0x3e,0xb6,0xc6,0x87, - 0x51,0x98,0x5e,0x93,0xb7,0x9f,0x47,0x78,0x50,0x47, - 0x0c,0x18,0xa5,0x03,0xa1,0x53,0x91,0xaa,0x08,0x9c, - 0x6e,0xa6,0xbc,0xcf,0x09,0x7c,0x6b,0x27,0x1c,0x0d, - 0xec,0x62,0xa0,0xef,0x61,0x38,0x39,0x12,0xa3,0xf3, - 0x28,0x45,0x7b,0x23,0xb8,0x4e,0x20,0x2a,0xc7,0xb3, - 0x00,0x9e,0xfe,0x3b,0xf3,0x58,0x25,0xfb,0xe1,0x81, - 0xbc,0x0f,0x6c,0xae,0xa1,0x04,0x88,0x54,0x82,0x2c, - 0x25,0xd0,0xd5,0xc9,0x51,0xa2,0xd4,0xf5,0xf9,0xb7, - 0x7c,0x01,0x38,0xde,0x18,0xc4,0xf9,0x04,0x5e,0xc0, - 0x3e,0x60,0x92,0xdb,0x56,0xe8,0x29,0xeb,0x38,0x00, - 0x6a,0xa7,0x43,0xdb,0xbc,0x21,0xba,0xb0,0xde,0x7a, - 0x17,0x7a,0x9e,0xee,0xe6,0x52,0xa3,0x91,0xf7,0x9b, - 0x83,0x34,0xd0,0x96,0x56,0x2c,0x35,0xb8,0xbf,0xc8, - 0x55,0xae,0x1b,0x4d,0xb3,0x2e,0x36,0x68,0x78,0xba, - 0xef,0xb5,0xc5,0x84,0xad,0xc2,0x52,0x42,0x25,0x59, - 0xd9,0x86,0x17,0x23,0xb0,0xa0,0xe3,0xa8,0xe4,0x23, - 0x13,0xe5,0xd8,0xb6,0xd9,0xe6,0xcc,0xbe,0x73,0x39, - 0x54,0x0b,0x00,0x96,0xca,0xdb,0x04,0x9d,0x4d,0xdd, - 0x61,0x83,0x49,0x0c,0x4b,0xd5,0x21,0x2a,0x7f,0x3a, - 0xd3,0x4f,0xcb,0xbc,0xe6,0x93,0x5a,0x30,0x08,0x54, - 0x32,0xd4,0xd6,0x11,0x9e,0xcd,0x47,0xe0,0x7b,0x42, - 0x11,0xd2,0x52,0xe6,0xa6,0x45,0x15,0x06,0xcf,0xf9, - 0xe6,0x24,0x20,0x7e,0xdc,0x58,0xe3,0xbb,0x11,0xa1, - 0x95,0xdd,0x91,0xa5,0xb9,0x75,0xeb,0xf8,0xc1,0x19, - 0xdc,0x1e,0xa2,0x91,0xf7,0xdb,0x22,0xdb,0x9c,0x4b, - 0xa1,0x85,0xa1,0xed,0xf0,0x7b,0xef,0xaf,0xfe,0xf3, - 0xb8,0x1f,0x36,0xa8,0x6e,0x3b,0x63,0x57,0x3a,0xd4, - 0x21,0x15,0x86,0x6c,0xbd,0xa3,0xea,0x82,0x28,0x97, - 0x73,0xe1,0x01,0x23,0x74,0x2f,0x00,0xf9,0x62,0xda, - 0x1c,0x3b,0x18,0x3c,0x01,0x47,0x09,0x16,0xdf,0xdd, - 0x50,0x05,0x46,0x2b,0xa6,0x5d,0xb2,0x02,0xfa,0x91, - 0x0f,0x53,0x08,0x1a,0xa2,0x61,0x28,0xa6,0xe3,0xc0, - 0xec,0xd7,0xef,0xfc,0x4f,0x16,0xa5,0x18,0x05,0x18, - 0xa4,0x9d,0xb5,0xce,0x29,0xe4,0x8e,0xcd,0x42,0x27, - 0x75,0xe7,0xf6,0x80,0xea,0x22,0x9f,0x48,0x98,0xb1, - 0x66,0x4d,0xd1,0xe4,0x90,0x2e,0x65,0xf0,0x13,0x2e, - 0x00,0x7e,0xb8,0xc4,0x9f,0xea,0x74,0xf3,0x98,0x35, - 0xb3,0x81,0x49,0x78,0x34,0x41,0x3b,0x76,0x58,0x7f, - 0x18,0xdb,0x1c,0xdb,0x92,0xe0,0x4c,0xde,0xc7,0x31, - 0xed,0x67,0xc4,0x0a,0xb8,0xad,0x12,0xc2,0x79,0x81, - 0xe7,0x99,0x67,0x9d,0xbd,0x4f,0x69,0x33,0x15,0x4f, - 0x40,0xc6,0x36,0x86,0x23,0xf3,0x66,0x4b,0xad,0x7e, - 0xf4,0xa8,0xf6,0xe4,0x30,0x24,0xcb,0x85,0x3f,0xf0, - 0x6a,0xfb,0x51,0xe5,0x86,0x51,0x0b,0x08,0x24,0xf4, - 0x7e,0x88,0x3a,0xf0,0xa0,0x2c,0x3a,0xb6,0x96,0x98, - 0x82,0x7b,0x00,0xc3,0x7e,0x4d,0x19,0xf5,0xf5,0x4f, - 0xba,0x3d,0x27,0x2a,0x23,0x38,0x25,0x5c,0x64,0x2c, - 0xb2,0x5c,0x13,0x89,0x21,0x72,0x53,0x65,0xe6,0x14, - 0x24,0x26,0x73,0x4a,0xdf,0xf0,0x9e,0x65,0x75,0x36, - 0xc5,0x5e,0x4b,0x86,0x67,0x66,0xb3,0x5c,0xd7,0xfc, - 0x32,0x26,0x2d,0x6c,0xc0,0xdf,0xce,0xf7,0x3d,0x2b, - 0x03,0xde,0x26,0xef,0x6f,0x7e,0x03,0x8f,0xcb,0x09, - 0x9c,0x92,0x39,0x84,0x85,0xe7,0x58,0x25,0xb6,0x2b, - 0xbd,0xa5,0xdf,0x33,0xc4,0xec,0x66,0x85,0x9b,0xd2, - 0x13,0xdb,0x5a,0xe7,0xb6,0xf6,0x46,0x1b,0x04,0xac, - 0x73,0xde,0x23,0x91,0xf7,0x4b,0x9b,0xef,0x7a,0x68, - 0x6b,0x03,0x06,0x41,0xc2,0x2b,0x4f,0x52,0xb0,0x93, - 0xf7,0x85,0x25,0x67,0xaa,0xbb,0xcc,0x74,0xe4,0x84, - 0x0d,0x50,0x04,0x40,0x53,0x4d,0x83,0x0d,0x58,0x8a, - 0x72,0xd5,0xb5,0x4d,0x86,0x26,0x18,0x45,0xb3,0x38, - 0xd3,0xb6,0x1b,0xf5,0x9a,0xe8,0xfc,0xd0,0x60,0xc5, - 0x5a,0xc6,0xa8,0x7e,0x7b,0xa8,0x99,0xd1,0x6e,0x67, - 0xc1,0x5c,0x75,0x16,0x94,0x80,0x0e,0xee,0x61,0x4d, - 0x15,0xce,0xc4,0x4c,0xe8,0xe8,0x0c,0xe8,0x2f,0x7a, - 0xa3,0x71,0x74,0xf6,0x90,0xfa,0x3a,0x72,0x96,0x1d, - 0x5f,0x3f,0xae,0xe3,0x7f,0x94,0xfc,0xe3,0x4f,0xc2, - 0x4a,0x2b,0xe2,0x79,0x83,0x62,0x3d,0x08,0x7a,0x78, - 0xe7,0xd8,0x1b,0x19,0x67,0x03,0x3d,0x1e,0x66,0xda, - 0x47,0x5c,0x72,0xa3,0xc1,0x90,0x3a,0x14,0x33,0xe7, - 0xbc,0x7b,0x0b,0xa0,0x9c,0x45,0xb5,0xcc,0x46,0x93, - 0xe3,0x52,0x83,0xd1,0x2e,0x6c,0xc3,0xe2,0x27,0x57, - 0xe1,0x6a,0x4c,0xcb,0x3d,0xc4,0xad,0xd0,0x4c,0xbe, - 0x38,0x46,0x7b,0x36,0x6d,0xea,0x6f,0x55,0x28,0xa8, - 0xf0,0xc8,0xd6,0x9b,0xa1,0xa6,0x1d,0xab,0x15,0x8e, - 0x66,0x70,0xda,0x35,0xf6,0xbf,0x77,0x51,0xef,0x80, - 0xcc,0x16,0x23,0x83,0x36,0xff,0xd0,0xf2,0xa0,0x92, - 0x7b,0x7d,0x19,0x96,0x62,0xfe,0xa2,0x08,0x2b,0xed, - 0x98,0xba,0x60,0xe5,0x1a,0xd9,0x90,0xd1,0xb4,0x71, - 0xe3,0x28,0x78,0xc6,0x68,0x18,0x52,0x3d,0xa6,0xaa, - 0x75,0x28,0xdb,0xbf,0x48,0xc3,0x3f,0x2f,0x01,0xf8, - 0xb8,0x09,0xbe,0x15,0xcf,0xde,0xa5,0xf9,0x23,0xec, - 0x6c,0x9f,0x4e,0x47,0x88,0x7d,0x76,0xbe,0xd1,0xd6, - 0x19,0xb8,0x3d,0xbf,0x9b,0x48,0xc2,0xe7,0x9d,0x14, - 0xcf,0x92,0x2a,0xaa,0x2c,0x63,0x3c,0x30,0x51,0x07, - 0x78,0xdc,0xc3,0x21,0xe3,0x4a,0x7d,0x52,0x9d,0x38, - 0x93,0x69,0x4a,0xb7,0x1a,0x67,0xcd,0x14,0xb6,0x82, - 0x24,0x23,0x98,0x7b,0x6a,0x8f,0x1a,0xb5,0xaf,0xef, - 0xe4,0xfd,0x6b,0xd0,0x65,0xa9,0x9d,0x73,0x41,0xf1, - 0xb4,0x5d,0x2e,0x94,0x49,0x50,0x07,0x98,0x40,0xde, - 0x67,0x11,0xd6,0x78,0x2d,0x4c,0xfa,0xb8,0xb1,0x8a, - 0x6b,0xf6,0xc1,0x34,0xdd,0x51,0x97,0x9a,0x6f,0x0f, - 0x13,0x2b,0xd2,0xb8,0xdd,0x0f,0x4a,0x39,0x86,0x22, - 0x13,0xc7,0x8a,0xe5,0x5c,0x41,0xaa,0x64,0x71,0x72, - 0x6f,0xc1,0x60,0x53,0xa4,0x4a,0x46,0xb6,0x06,0x21, - 0x7a,0x08,0x6f,0x05,0x80,0x37,0xc8,0xfb,0xb8,0x5b, - 0x89,0x3b,0x32,0x0d,0xfe,0x2e,0x1b,0xc1,0x1e,0xd2, - 0xad,0xce,0x3f,0x0f,0xb2,0x19,0x8c,0x9b,0x20,0xbc, - 0x69,0xfb,0x65,0x9c,0xcf,0x0a,0x00,0x05,0xc7,0xfc, - 0x61,0x4a,0x24,0x1b,0x6b,0x0d,0x9e,0xb2,0x16,0x1f, - 0x02,0x5e,0x3b,0x1e,0xc4,0x78,0xb3,0xce,0xb2,0x33, - 0x54,0x15,0x18,0x75,0x82,0x8f,0x31,0x7c,0x85,0xa3, - 0x70,0xe5,0xda,0x4e,0xde,0x97,0xba,0xd8,0x53,0x5d, - 0x74,0x0c,0xc5,0x33,0x12,0xed,0x02,0x20,0x64,0x24, - 0xa2,0x19,0x30,0xff,0x7d,0x88,0x26,0x20,0x9c,0x7e, - 0x53,0xcb,0x8b,0x39,0x1e,0x4d,0xf7,0x01,0x94,0xe1, - 0x1e,0x72,0x0c,0x27,0x44,0x15,0x37,0x5f,0x2f,0x16, - 0x84,0xc4,0xa4,0x77,0x1d,0x2a,0x55,0xb6,0xf4,0xff, - 0x41,0x9d,0xb1,0xe8,0x78,0x14,0xa7,0xfe,0x03,0xaa, - 0x1e,0xa5,0xaa,0x2e,0x49,0xf0,0xfc,0xfa,0x31,0x70, - 0xcf,0xdf,0xac,0xc4,0x8f,0x24,0xfb,0xfb,0xe3,0xe2, - 0x9b,0x07,0x7e,0x74,0xe1,0xc0,0xc8,0x95,0xf5,0xd8, - 0xd7,0xa8,0x69,0xda,0xcf,0x85,0x99,0xcb,0x10,0x79, - 0xaf,0xeb,0xb8,0x49,0x33,0xc8,0x4d,0xae,0xc2,0x67, - 0x59,0x0b,0x76,0x5d,0xa2,0x44,0xde,0x39,0xa8,0xf2, - 0x60,0x63,0x69,0x36,0x07,0x6f,0x28,0x0b,0xa9,0xb5, - 0x18,0x3b,0x79,0xff,0x4a,0x8f,0x15,0xbc,0x63,0x52, - 0xc7,0x99,0x9a,0x81,0xa8,0xcc,0x3a,0xb3,0xdf,0x1a, - 0x2a,0x0b,0x1e,0x3a,0x23,0x6d,0x31,0xb2,0x52,0x8c, - 0xe7,0x77,0x8b,0xa8,0xe6,0xe4,0xd8,0xc1,0xfc,0x80, - 0xa5,0x45,0xc3,0x4e,0xde,0x1f,0xc9,0xb9,0x68,0xf2, - 0xf3,0xe5,0x86,0xd3,0x41,0x1d,0x21,0x35,0x41,0xcf, - 0x69,0xa4,0x89,0xd5,0x17,0xd8,0x28,0xd9,0x53,0xbd, - 0x31,0xd2,0x65,0x01,0x74,0x0e,0xe0,0x87,0xe5,0xf7, - 0x67,0xc8,0xfb,0xc7,0x45,0xfa,0xe3,0x6f,0x2d,0x60, - 0xce,0x99,0xbc,0xcf,0x71,0xe0,0x02,0xf0,0xa7,0x81, - 0x11,0x25,0xde,0x27,0x1c,0x11,0xbb,0xec,0x8a,0x21, - 0xe1,0x12,0xb4,0xf8,0x56,0x06,0x91,0xde,0x88,0xaa, - 0xb5,0x2b,0x61,0xee,0x45,0x74,0x89,0x3b,0x18,0x82, - 0xee,0x82,0x13,0x77,0x0f,0x09,0x72,0x36,0x87,0x10, - 0x85,0x4c,0xe4,0x93,0x46,0xde,0x87,0x98,0x59,0x7a, - 0x49,0x33,0xbb,0x00,0xbb,0xe4,0xe8,0xa5,0xcb,0x47, - 0x4b,0xe3,0x57,0xc7,0xac,0xef,0x8e,0xdd,0xb8,0xec, - 0x05,0xca,0xc1,0xe4,0xcc,0xb8,0xca,0x16,0x81,0xea, - 0x0a,0x90,0x98,0x01,0xcd,0x45,0xde,0xb7,0xc9,0x95, - 0xb1,0xe4,0xbb,0x39,0x09,0x5f,0x08,0x45,0x74,0xff, - 0x9c,0x66,0x71,0x2b,0xf8,0x34,0x96,0x02,0x47,0xb5, - 0x93,0x1b,0x1f,0x55,0x04,0xc2,0x87,0x33,0x05,0x3c, - 0x8a,0x41,0xc7,0xb4,0x1b,0x87,0xd2,0x85,0xa7,0xdd, - 0xdb,0x5a,0x6f,0x0e,0xae,0xa1,0x2e,0x2f,0x8f,0x33, - 0x8b,0x74,0xd1,0x2b,0xe1,0xa3,0xf4,0x77,0xba,0x94, - 0x37,0xe4,0x7d,0xa6,0x56,0x5e,0x9a,0xd9,0x9f,0xab, - 0x1c,0x75,0x63,0x12,0x53,0x0f,0x8c,0xc6,0x3e,0xcf, - 0x08,0xa7,0x05,0xd7,0xd2,0x0e,0xf3,0xe0,0xe5,0x23, - 0x70,0x73,0xb3,0x43,0x6d,0x7f,0xbd,0x7a,0x62,0x61, - 0xec,0xcb,0xc0,0x44,0x48,0x05,0x89,0x2c,0x8f,0x4e, - 0x4d,0xd7,0x51,0xda,0x90,0xab,0x14,0xd4,0xf0,0xcc, - 0x6a,0x98,0x39,0xaa,0x74,0x19,0xa8,0x62,0x61,0x28, - 0x60,0xea,0x6a,0x29,0xb2,0x56,0x1a,0x60,0xeb,0x51, - 0x5c,0xe7,0x8d,0x4a,0xde,0xb7,0x71,0x5d,0x53,0x0d, - 0xd1,0xf2,0x83,0x7b,0x84,0x05,0x6e,0x9f,0x36,0x33, - 0x0b,0x74,0x3f,0x05,0x41,0x7a,0x1f,0x81,0x80,0xbf, - 0xe6,0xd4,0x3f,0x5d,0xc5,0x7c,0xff,0xb7,0xf1,0xf6, - 0x71,0x57,0xb9,0xab,0xfb,0xb9,0x3e,0x8c,0xe0,0xd8, - 0x31,0xdc,0xc4,0xa9,0x5c,0x5f,0xa2,0xef,0x9e,0x0f, - 0x95,0x8e,0x39,0x76,0x2d,0xc7,0x4e,0xf7,0xb4,0xbd, - 0xf2,0x50,0xa4,0x78,0x4a,0xda,0xaa,0x86,0x46,0x42, - 0xec,0xc5,0x00,0x4b,0x3d,0x4c,0xcf,0x10,0x80,0xf6, - 0x9d,0x1e,0x7f,0x0a,0x46,0xe0,0x8c,0xcd,0x60,0x82, - 0x79,0xf9,0x33,0xaa,0x79,0x49,0x18,0x71,0xb8,0x29, - 0xd9,0x2e,0x6c,0x24,0xa1,0xcb,0x2f,0x32,0x4d,0x4b, - 0xad,0x93,0xb5,0x3b,0x73,0x36,0x83,0xec,0xce,0x8c, - 0xe2,0x34,0xac,0x7a,0x89,0xec,0xc1,0x55,0x67,0xf3, - 0xb5,0x64,0x4a,0xb6,0x40,0x25,0x98,0x30,0x48,0x8c, - 0xd7,0x68,0xc7,0xb1,0xd3,0x4c,0x9f,0xc4,0xe5,0xfb, - 0x00,0x80,0x1f,0xad,0xfa,0xa7,0x9f,0x65,0x93,0x47, - 0x0f,0xc9,0xe4,0x07,0x72,0x12,0xc6,0x7a,0x1e,0xc7, - 0xcd,0xf7,0xcc,0x5a,0xc2,0xae,0xda,0x46,0xa7,0xc8, - 0xe6,0xca,0x9c,0x87,0x84,0x03,0x37,0xb3,0xa8,0xec, - 0xd7,0xf9,0xa6,0xf5,0xc9,0xa7,0xc9,0x52,0xd2,0xa4, - 0x9a,0x8b,0x51,0x94,0x70,0x98,0xe8,0xb7,0xa3,0x2b, - 0xed,0xa2,0xb6,0xd7,0x34,0x81,0xa7,0xa5,0xe4,0xda, - 0x10,0x58,0x3e,0x76,0x3c,0xc8,0xbe,0x30,0x3e,0x74, - 0xd4,0xc9,0xb8,0x5d,0x3d,0xc2,0x82,0x24,0x4a,0x3e, - 0x61,0xd4,0x62,0x37,0x16,0xe5,0x2e,0xd6,0xc2,0x52, - 0xff,0x75,0x08,0xb8,0x43,0x94,0xb8,0x7a,0xfd,0xcb, - 0x6a,0xad,0x47,0x68,0xcd,0xb6,0x20,0x44,0xa6,0x9a, - 0xf2,0x2f,0xe0,0xe3,0x6a,0x08,0xce,0x8a,0x6b,0x6a, - 0x9a,0xe1,0x01,0x08,0xf8,0xf6,0x82,0xe7,0x9b,0x11, - 0x83,0x63,0x27,0xb7,0xbd,0xae,0xf4,0x7b,0x0a,0xbd, - 0xbb,0xb7,0xf1,0x41,0x28,0xe1,0x61,0x81,0xf3,0x00, - 0xab,0xa5,0x39,0xa4,0x9e,0xf6,0x6f,0xfc,0x01,0x7d, - 0xcf,0x87,0x64,0xa4,0x9b,0x51,0x82,0x39,0x74,0xb3, - 0x25,0x55,0x71,0x1f,0xfa,0x12,0x1c,0x42,0x3c,0xc0, - 0x54,0xaf,0x87,0x13,0x9b,0xf2,0xc8,0x9a,0x3c,0xf1, - 0x99,0x50,0xd1,0x91,0xcb,0x95,0x28,0x6d,0xcc,0x36, - 0x28,0x40,0x34,0x0f,0x3c,0x9d,0xe6,0x2b,0xd4,0xd9, - 0xd7,0xb0,0x0d,0xa2,0xcc,0x78,0xbf,0x91,0x60,0x15, - 0x15,0x61,0x7a,0x8c,0xa9,0xbe,0xf2,0x2c,0x63,0xd0, - 0xfe,0x88,0x12,0xd5,0x99,0x08,0x58,0x13,0x94,0x0c, - 0xdd,0x1f,0xb7,0x4f,0x87,0x83,0xa4,0xa8,0x9b,0x24, - 0x4a,0xab,0x87,0xe6,0x2a,0xac,0xf5,0x3f,0x9a,0x85, - 0x5a,0x99,0xcd,0x20,0x67,0x36,0xf2,0xfb,0x00,0x00, - 0xb5,0x8e,0xfe,0xc1,0x1e,0xbd,0x05,0xdf,0xdf,0x24, - 0xef,0x1f,0xb2,0x07,0x8c,0xcd,0xa8,0x6e,0xca,0x56, - 0x98,0x11,0xfe,0xf6,0xa0,0x6c,0x83,0x13,0xc3,0xa1, - 0x3e,0x27,0xef,0xd3,0x48,0x7b,0xbe,0xe0,0x00,0xd9, - 0x65,0xb1,0xe9,0xb5,0xed,0x80,0xda,0x62,0x2c,0x29, - 0xe2,0x14,0x1b,0x3f,0xab,0x82,0x5f,0xa3,0x2b,0x01, - 0xa7,0xd6,0x6a,0x52,0x2b,0x2e,0x20,0x26,0x4c,0x02, - 0xdb,0xac,0xb9,0x14,0xc8,0x42,0x51,0xc3,0xe2,0x01, - 0xef,0x95,0x9d,0xcd,0xeb,0x10,0xe8,0x9c,0xbf,0x2d, - 0xaa,0x4e,0xde,0x2f,0x8a,0x5d,0x1c,0x95,0x80,0xa1, - 0x3a,0x7b,0xda,0xbd,0x2c,0x4f,0x84,0x11,0x12,0xa6, - 0xf8,0xea,0x6b,0x22,0x87,0x30,0xf6,0xe4,0xf5,0x77, - 0x7b,0xe0,0x94,0x03,0x0a,0x09,0x6e,0x1a,0xb8,0x4b, - 0x47,0x88,0x07,0xf9,0x79,0x54,0x47,0x42,0xfd,0xfd, - 0xaf,0x4f,0x20,0x00,0x18,0x4f,0xa8,0xb1,0xe7,0xb6, - 0xd2,0x93,0x9f,0xe3,0x89,0xbc,0x9f,0xec,0xa5,0x23, - 0x7c,0xfd,0x88,0xbc,0x7f,0xc4,0x33,0x4e,0x86,0x9f, - 0x44,0x08,0x35,0xf7,0xe4,0xfd,0xde,0xd5,0x35,0x17, - 0x9b,0xf2,0x5f,0xc0,0x91,0x55,0xcd,0x63,0xca,0x39, - 0x26,0xb8,0x85,0xe2,0x5f,0xd8,0xbf,0x05,0x9a,0x71, - 0x98,0xbe,0x78,0xf4,0xa4,0xf7,0x9b,0xf0,0x5a,0x4d, - 0x7d,0x08,0x8b,0xcd,0xab,0x24,0xa6,0x29,0x89,0xd0, - 0x44,0x96,0x6b,0x53,0x74,0xf4,0x46,0x15,0x2f,0x82, - 0x64,0x10,0x6a,0x1e,0xc2,0xe0,0xda,0x44,0xdb,0x24, - 0xc1,0x6e,0xde,0xd1,0xc9,0xe1,0xac,0x23,0x07,0x9d, - 0xbc,0x2f,0x41,0x01,0x3a,0x8e,0xbf,0x8e,0xf5,0xd5, - 0xea,0x50,0xd1,0x10,0x96,0x68,0x25,0xd1,0xa6,0x3c, - 0x8b,0x6c,0x7a,0x00,0xf4,0xe9,0x4e,0x35,0x50,0x19, - 0x1a,0x70,0x57,0x94,0xfb,0xfa,0x30,0x02,0xf0,0x03, - 0x44,0x81,0xc3,0x33,0x9f,0x86,0xc1,0xec,0x92,0x02, - 0x32,0x83,0xd5,0xd1,0xc0,0x0d,0xbf,0x03,0x35,0xe9, - 0xbb,0x63,0x30,0xfc,0xb4,0x3a,0x71,0x49,0x4d,0xe1, - 0xd0,0xb1,0xb8,0x13,0x48,0x90,0xf4,0x70,0xa3,0x3d, - 0xb1,0xc3,0x12,0x4a,0xed,0xea,0xa1,0xd1,0x52,0xd7, - 0xd1,0x20,0x3f,0x4c,0x00,0x6d,0x2a,0xed,0x16,0x86, - 0x9e,0xa6,0xd8,0x9b,0xac,0x08,0x56,0x6f,0xcf,0x0d, - 0x09,0x52,0x86,0xf2,0x90,0x11,0x6e,0xc9,0xfb,0x07, - 0x60,0x83,0x4d,0xcc,0x43,0x7d,0x06,0xaa,0x4c,0xb6, - 0x15,0x89,0x85,0x91,0xfc,0x9a,0xd0,0x23,0xaa,0x79, - 0x07,0x5d,0x77,0x48,0x15,0x78,0x9b,0x62,0x40,0xd5, - 0x70,0xa5,0xb9,0x61,0x45,0x21,0xd5,0xd7,0xc2,0x56, - 0x7d,0x03,0x33,0x3a,0x68,0xa2,0xe8,0x05,0x38,0x91, - 0xd7,0x24,0xbb,0xa1,0x22,0xbc,0x92,0x91,0x7d,0x7d, - 0x12,0xf5,0xef,0xc8,0x3e,0xdf,0x0a,0x0a,0x48,0x6b, - 0xe3,0xf8,0x51,0x3c,0x58,0x01,0xef,0x85,0xb4,0x73, - 0x45,0xe2,0x53,0x03,0x34,0x9d,0x4f,0x6c,0x15,0xfe, - 0x83,0xd2,0xff,0xcd,0xb5,0xcb,0xa2,0xa1,0x6b,0x39, - 0x33,0x7f,0x5f,0x13,0xfb,0x40,0x04,0x2d,0x19,0xf2, - 0x98,0x2e,0x33,0x69,0x12,0x64,0xbc,0x52,0x59,0x9b, - 0x90,0x4b,0x90,0xa8,0x04,0x1e,0x84,0xa9,0xc1,0x35, - 0xdd,0xeb,0x16,0x5a,0x21,0x32,0x29,0x36,0x60,0xa9, - 0x2d,0xcc,0x62,0x6e,0xa7,0x26,0x4f,0xd6,0xfb,0x35, - 0x8a,0xb4,0x3e,0x4a,0x4d,0x52,0xd6,0x08,0x4a,0x63, - 0xb0,0x90,0xa1,0xf0,0x32,0x2c,0xcd,0x38,0x2d,0x47, - 0x17,0x7e,0x46,0x21,0x17,0x21,0x3a,0xb5,0x89,0x79, - 0x88,0x3f,0x18,0x4e,0x3a,0x60,0x25,0x15,0x81,0xbb, - 0x70,0xcc,0xa2,0x24,0xa4,0x7d,0xe0,0xaf,0x9f,0xee, - 0xf9,0x7c,0xb2,0xa6,0xf1,0xa1,0x40,0xf2,0xf0,0xa5, - 0x27,0xea,0xc1,0x3c,0xc6,0xa5,0xbd,0x22,0x06,0x53, - 0xef,0x80,0x1b,0x12,0xf0,0x9e,0xbc,0x5f,0x17,0x0c, - 0x6f,0xec,0x8d,0x19,0x68,0xb9,0xa4,0x0c,0x7d,0x74, - 0xbf,0x79,0xe7,0xf1,0xb7,0x94,0x88,0x92,0xc2,0x0f, - 0x43,0xd9,0x6d,0x9c,0x55,0x41,0xc0,0xcb,0xa0,0x83, - 0xa5,0xce,0xf6,0x2c,0x08,0xb5,0x26,0x24,0x8b,0xde, - 0xe0,0xe0,0x46,0x7a,0x8c,0xcc,0x18,0x0c,0x2c,0xaa, - 0xb9,0x95,0x1a,0xab,0x23,0x2e,0x63,0xe9,0x37,0x04, - 0x35,0xaf,0x83,0x43,0x50,0x94,0xfe,0xa0,0x92,0xd4, - 0x49,0x3e,0xb2,0xac,0xcc,0x28,0x96,0xcc,0x60,0x38, - 0x98,0x5c,0x1f,0xdd,0xf7,0xa0,0xb6,0x0c,0xe1,0x2c, - 0x53,0x4b,0x16,0x09,0x36,0x0d,0x02,0x65,0xfa,0x39, - 0xfc,0x0c,0x8d,0xa3,0xaf,0x6b,0xf7,0x63,0x10,0xf0, - 0x99,0x1a,0x16,0x7e,0xb7,0xe0,0xf1,0x5e,0x60,0x00, - 0xef,0x3a,0xfb,0x2c,0x78,0x05,0x03,0xa6,0xdf,0x7b, - 0xeb,0x07,0x20,0x6a,0x0b,0x27,0x60,0x9c,0xac,0x3f, - 0x59,0x56,0x43,0x30,0x91,0x9c,0xe9,0x5b,0x16,0x1c, - 0xc1,0xb8,0x91,0x56,0x84,0x67,0x09,0x16,0x15,0x5c, - 0x96,0xbc,0xa9,0xae,0x60,0x3a,0xcc,0xfa,0xe4,0x19, - 0xc6,0x30,0x55,0x5d,0xc3,0x2c,0x58,0xd3,0xa6,0xb9, - 0x48,0x38,0x82,0xdd,0xd8,0x28,0x73,0x04,0x9a,0x2e, - 0x5f,0x29,0x2b,0x69,0x48,0xf6,0xe8,0xf6,0x08,0xf3, - 0xde,0x31,0xa8,0x3c,0xb7,0xc9,0xbc,0x7a,0x1e,0xde, - 0x19,0x2c,0xc3,0x52,0x12,0x28,0x1c,0x43,0x9a,0xcc, - 0x03,0x56,0x93,0xd0,0xa6,0x27,0x30,0xdc,0x99,0x18, - 0x6b,0xce,0x61,0x2c,0x1d,0x04,0x96,0x33,0x5b,0x3b, - 0x76,0xd1,0x60,0x68,0xd7,0x2e,0x48,0xd6,0x59,0x19, - 0xb0,0x08,0x6f,0x14,0x5d,0xc0,0xd5,0xfe,0xf8,0x3b, - 0x55,0xe0,0x9f,0x80,0x82,0x78,0xfe,0xdd,0x71,0x12, - 0x19,0x77,0x9e,0x03,0x82,0x19,0xb3,0xa6,0xf1,0xdb, - 0x4f,0x16,0x6d,0x4a,0x1c,0x9b,0x12,0x39,0x81,0x58, - 0x61,0x9c,0xb3,0xfe,0xcc,0x22,0x5b,0xba,0x0a,0x60, - 0xca,0x3d,0xad,0x85,0xcd,0x51,0xed,0xa2,0x62,0xc3, - 0xa4,0x5b,0x91,0xc5,0x20,0xe9,0xb3,0x0b,0x45,0x42, - 0xac,0x67,0x25,0x0e,0x00,0x9e,0x1a,0x1b,0xb0,0xef, - 0xd2,0xf6,0x3a,0x51,0xda,0x48,0x65,0x9a,0xcd,0x0d, - 0x64,0x0b,0xd0,0xc6,0xea,0x27,0xb4,0x04,0x49,0xd1, - 0xaf,0x25,0xed,0x77,0x2c,0x9b,0x6e,0xc7,0x6a,0x9b, - 0x83,0x8f,0x28,0xd7,0x69,0xe5,0x05,0xe0,0x2d,0xed, - 0x51,0xb5,0x3d,0x67,0x16,0xed,0x8c,0x30,0x47,0x18, - 0x24,0x2a,0x31,0x1a,0xb1,0x32,0xec,0x98,0x32,0xfa, - 0xd5,0xd7,0xc4,0x8c,0x90,0xb6,0xb8,0x67,0x00,0x1c, - 0xff,0xf0,0xff,0xde,0xdc,0xe2,0x4f,0x5f,0xc3,0xe7, - 0x6f,0x76,0xa5,0x5d,0xfc,0x34,0x90,0xed,0xe6,0xd0, - 0x4b,0xd6,0x00,0x01,0xa7,0x78,0x0f,0x6e,0x60,0xf4, - 0x95,0xd2,0xa6,0x1a,0xa4,0x3e,0xc5,0x18,0xfd,0x11, - 0xaa,0xc8,0xb6,0xb4,0x28,0xba,0x53,0xf0,0x40,0x0c, - 0x78,0x05,0x99,0x36,0xf2,0xbe,0x72,0xcd,0x27,0xf3, - 0x2d,0x50,0x22,0xb5,0x6c,0x8a,0x96,0xa2,0x0a,0xd7, - 0x0b,0x50,0xda,0xc0,0xe0,0xb9,0xd3,0xb2,0xbe,0x4f, - 0xad,0xbe,0x93,0xa4,0xb8,0xcb,0x99,0xab,0x0f,0x08, - 0xc7,0x11,0x71,0x86,0x48,0x76,0x81,0xa1,0xa4,0x18, - 0xa3,0x91,0xf7,0x4b,0x16,0x20,0x26,0x9d,0x0a,0x1b, - 0x72,0x33,0x55,0xc8,0xf1,0xb2,0x05,0x63,0x9d,0x64, - 0xa4,0x59,0xca,0xf9,0x8c,0xc8,0xbc,0x07,0x17,0xd6, - 0xe2,0xe5,0x27,0x05,0x46,0xbe,0x30,0x0e,0x09,0x4c, - 0x5f,0xbf,0x06,0xfd,0xff,0x22,0x68,0xf0,0x10,0x18, - 0xb8,0xe7,0x00,0x9c,0xda,0x62,0xf7,0xbc,0x9e,0x0d, - 0x07,0xee,0x64,0xfd,0xb5,0xc3,0xa7,0xb6,0x6d,0x2c, - 0x93,0x69,0xda,0x1c,0xdf,0x5e,0x99,0x60,0x93,0x47, - 0x8f,0x0e,0x38,0xd5,0xd8,0xc1,0x9c,0x39,0x6d,0xf1, - 0x10,0x9d,0x5d,0x47,0x61,0xba,0x51,0x94,0xf5,0x31, - 0x87,0x4e,0x18,0xe4,0xda,0x68,0x8e,0x5a,0xee,0x41, - 0xec,0xfa,0x7f,0xac,0x4c,0x3c,0x31,0x1a,0xa9,0x5b, - 0x21,0x73,0x8c,0xec,0xe4,0xfd,0x0e,0x35,0x48,0x4b, - 0x12,0xc8,0x25,0x20,0xdb,0x7f,0xa3,0x06,0x28,0x54, - 0x06,0x22,0xb5,0xee,0x9f,0x29,0xf6,0xb5,0xa0,0xbd, - 0x10,0x4b,0xda,0xc2,0x0c,0x20,0xa1,0x6e,0x4e,0x2c, - 0x52,0x8a,0x2d,0x43,0x99,0x4e,0xc9,0xaa,0x6a,0x6c, - 0x12,0xe1,0x8e,0x19,0xc8,0x6f,0xbc,0x35,0x07,0xc0, - 0x23,0x50,0xf3,0x4f,0x94,0x0f,0x10,0x2a,0xe6,0xf3, - 0x8f,0xed,0x08,0x3f,0x88,0x8b,0x6c,0xab,0xa7,0x99, - 0x3b,0x15,0x09,0x1b,0xbc,0x43,0xfa,0xa5,0xa5,0x93, - 0x8e,0x6f,0xcf,0x4e,0xc6,0x70,0xa1,0x99,0xb1,0x01, - 0x88,0xe6,0x23,0x8f,0xbe,0xa5,0x16,0x24,0xde,0x90, - 0x68,0x05,0x8f,0xdc,0x8f,0x00,0xc5,0x56,0x43,0x17, - 0x23,0x0e,0xbc,0x84,0xb1,0xd4,0x75,0xe2,0x39,0x56, - 0x94,0x01,0x4a,0xf5,0xd5,0x6d,0x5b,0x3a,0x2d,0xdb, - 0x11,0x8f,0xa1,0x2d,0x4d,0x18,0x68,0x27,0xab,0x48, - 0x08,0x5b,0xb5,0x3e,0x97,0x75,0x16,0x04,0x97,0xaf, - 0x8c,0xae,0x27,0x51,0x98,0x2d,0xbe,0x4b,0xff,0xff, - 0xd2,0x66,0x04,0xf7,0x04,0x6d,0x55,0x25,0x36,0xc3, - 0xf2,0x52,0x9e,0xe9,0x71,0xb2,0xe1,0x5d,0x18,0x21, - 0xe9,0xd7,0x6a,0xc9,0x10,0x2e,0x0c,0x9d,0x3a,0x78, - 0x6b,0x0e,0x00,0x1f,0x5f,0xf4,0xfc,0x41,0x6c,0xc0, - 0x7b,0x9f,0xe6,0x07,0x62,0x0f,0x6f,0xbe,0x90,0xd9, - 0x4e,0x1a,0xdb,0x74,0x65,0xd5,0xc5,0x3c,0x81,0xff, - 0x25,0x05,0xe7,0x08,0xaa,0xde,0x8f,0xda,0x31,0xdc, - 0xf8,0x79,0xe8,0xe8,0x0c,0xc6,0x92,0xc9,0xaa,0x10, - 0x28,0x63,0x66,0xd0,0x20,0x7d,0xeb,0x2e,0xcc,0xe3, - 0x2f,0x23,0xea,0x1c,0x21,0xcf,0x96,0x95,0xcb,0x85, - 0x31,0x94,0xc1,0xa7,0xcd,0x56,0x54,0x76,0x73,0x16, - 0x8c,0x03,0x53,0x48,0xc8,0xfd,0x08,0x8a,0xff,0xd7, - 0x40,0xef,0x85,0xf8,0xf8,0xbf,0xa4,0xf4,0x1a,0x45, - 0x39,0x96,0x32,0x41,0x55,0x34,0x76,0x63,0xd3,0x2a, - 0xdb,0xc6,0xd2,0xc1,0xb8,0xb2,0xa7,0xfa,0xfb,0xa8, - 0xb4,0x72,0xd4,0x66,0xde,0x90,0x09,0xce,0xa2,0x51, - 0x38,0xea,0xd8,0x3b,0xac,0x10,0xd4,0x71,0x81,0x2b, - 0x30,0xfd,0x19,0x08,0xc8,0x1f,0x2d,0xb7,0x07,0x12, - 0xbf,0x37,0x64,0x23,0xbe,0x75,0x14,0xd1,0xd9,0xe1, - 0xa6,0x99,0x11,0xc6,0x0f,0x81,0x47,0xa7,0xc8,0x00, - 0x3a,0x61,0x87,0x65,0xce,0xbe,0x3b,0xfa,0xc0,0x50, - 0xb9,0xc3,0x08,0x95,0x13,0x0b,0x08,0xf5,0xc8,0xb0, - 0xb4,0xa5,0xd3,0x5b,0xd6,0x8b,0xc9,0x82,0xeb,0xb1, - 0x6c,0xc0,0x4d,0x8c,0xaa,0xd7,0xcf,0x40,0x6a,0xbd, - 0xc6,0x5b,0x75,0x96,0x7e,0xea,0xf6,0x29,0x86,0xc0, - 0x3d,0x7e,0x4c,0x94,0xad,0xbb,0xce,0x06,0x62,0x33, - 0x39,0x5a,0xdd,0x77,0xb8,0x29,0xbc,0x1a,0x63,0x11, - 0x8b,0x7f,0x4f,0x13,0x53,0x4a,0xa5,0x69,0x23,0x88, - 0x29,0x06,0xe5,0xb1,0x65,0xd0,0x54,0x84,0x6c,0x82, - 0xd0,0x91,0x40,0x56,0x30,0x1b,0x06,0xee,0xb2,0x28, - 0x46,0x69,0xe7,0xa2,0x75,0x01,0x3e,0x57,0xd0,0xff, - 0xc8,0x2b,0xf4,0x2e,0xb5,0xc0,0xb3,0xb7,0xc4,0xed, - 0x2e,0x99,0xfe,0xb1,0x73,0xa4,0xfd,0xbd,0x47,0xb1, - 0xa0,0xdb,0x39,0x66,0x6c,0x3a,0x06,0x38,0x66,0x58, - 0x0c,0x9e,0x7a,0xf4,0x1d,0x3d,0xa4,0xbf,0x68,0x8f, - 0xae,0x29,0xfa,0x27,0xf1,0x7e,0xb8,0x59,0x28,0xc6, - 0x38,0xf4,0x45,0x78,0xe8,0x10,0xb0,0xf9,0x00,0x38, - 0xd5,0xd5,0x7d,0x3f,0xd8,0x4a,0x1b,0xa7,0x17,0xa3, - 0xb9,0xe1,0x20,0x5e,0xc2,0x89,0x45,0xb4,0x68,0x5a, - 0x17,0x4a,0xe3,0xce,0xb0,0xaa,0x30,0xb9,0x0c,0x1a, - 0x6d,0xf2,0x13,0x6e,0xfc,0x3a,0xaa,0xb4,0x58,0xaa, - 0xee,0xe1,0x7e,0x0b,0xd2,0xee,0xb8,0x70,0x89,0x3a, - 0xfc,0x53,0x47,0xb2,0xa0,0x82,0xa7,0x57,0x15,0xa4, - 0x60,0x21,0x5e,0x03,0x49,0xe5,0x16,0x9b,0xc7,0x63, - 0xe9,0x9e,0xac,0x26,0xe1,0xd7,0x7b,0x7d,0x38,0xfe, - 0xe8,0xa5,0x3b,0x90,0xee,0xc9,0x46,0x4d,0x8e,0x9f, - 0xc7,0x2a,0x7f,0x9e,0xf1,0xa6,0xf8,0x20,0x9e,0xbe, - 0xe9,0x00,0x35,0x86,0x71,0xdb,0x9b,0x3e,0x45,0xfd, - 0x8b,0x28,0xc9,0x96,0xd4,0x1d,0x89,0xb5,0xaf,0xa5, - 0x29,0xac,0x6f,0xbe,0x9b,0xd2,0xea,0x4d,0xc3,0xa8, - 0xbb,0x39,0xed,0xc4,0xfd,0x47,0x59,0xc1,0x50,0x2c, - 0xd0,0x09,0x4f,0x32,0xb6,0xe8,0xa9,0x27,0x3f,0xa1, - 0xba,0x26,0xc2,0xc6,0xe3,0x30,0xd3,0x92,0x11,0x02, - 0xc3,0x81,0xa9,0xaa,0x83,0x40,0x40,0x05,0x48,0x4a, - 0xca,0x6c,0x9d,0x87,0xad,0xb1,0x43,0xec,0xac,0x50, - 0x76,0x64,0x46,0xc5,0x44,0x70,0xb7,0xa5,0x48,0xc0, - 0xa5,0x7d,0x56,0xea,0x2b,0xac,0x8a,0x62,0x6d,0x10, - 0x85,0xd3,0x00,0xf9,0x3b,0xa7,0x56,0xc1,0x7b,0x25, - 0x00,0xf1,0xd6,0x22,0x79,0x32,0xd7,0xf3,0x68,0x5e, - 0x08,0x0f,0x5a,0xfc,0x4f,0x16,0x30,0xcf,0x55,0xc0, - 0x89,0x40,0xcf,0xe3,0x07,0xcf,0x46,0x52,0x4f,0x05, - 0x41,0x8e,0xbf,0x0d,0x9f,0xdf,0xc1,0x18,0x5b,0xa7, - 0x78,0xda,0x06,0xcf,0xe2,0x04,0xec,0xdd,0xaf,0xba, - 0x7c,0x58,0xd2,0xd4,0x66,0x6c,0xac,0x24,0x77,0x2e, - 0x89,0xb1,0xeb,0x6f,0xd8,0x24,0x55,0xdb,0x50,0xc7, - 0x6d,0xf8,0x92,0xa3,0x12,0xb5,0x60,0xc1,0x4f,0x2f, - 0x3c,0x10,0x6d,0x60,0xe9,0xe2,0x64,0x70,0xe7,0xa5, - 0x33,0x53,0xe1,0x52,0x5a,0x10,0x15,0x23,0x41,0x44, - 0x6e,0xe4,0x00,0x38,0x17,0x16,0x1d,0xfa,0xa5,0x2e, - 0xde,0xb5,0x0b,0x27,0xa3,0xb7,0xe9,0x8b,0x88,0x4b, - 0x4d,0x88,0x05,0x60,0x55,0xfc,0xa7,0x8e,0x33,0x67, - 0xaf,0x0b,0xc8,0x22,0x9f,0xb5,0x49,0xe9,0x51,0x2e, - 0x35,0xe1,0xf7,0x02,0x00,0x9e,0x6f,0xe1,0x4f,0x0d, - 0x43,0x7f,0x54,0x2a,0xdc,0xf4,0xfb,0xc8,0x9b,0x5d, - 0xc6,0xf2,0x72,0x0e,0xef,0xd9,0xf7,0xda,0x7d,0xeb, - 0xe2,0x7b,0x4f,0xde,0x2f,0x41,0x00,0xa7,0x48,0x54, - 0x2a,0x13,0x97,0x24,0xd9,0x0f,0x3b,0xb8,0xa2,0xcf, - 0xbe,0x95,0xc1,0xce,0x94,0x45,0x74,0x0f,0xa8,0x72, - 0xd6,0xd8,0x14,0xc9,0x75,0xc2,0xbc,0x49,0x75,0xd3, - 0xec,0xcd,0xdd,0xf9,0xf6,0x5a,0x65,0x2c,0x80,0x9c, - 0x01,0xa0,0x06,0x18,0xb2,0xa4,0xe0,0xcc,0xd8,0x47, - 0x41,0xe3,0x56,0x30,0x28,0x41,0x85,0x28,0x5a,0x0d, - 0xab,0xbb,0xc0,0x22,0x21,0xee,0xb6,0x62,0xdd,0x07, - 0x91,0xe5,0xef,0x10,0x37,0x63,0x96,0x2b,0x8b,0x11, - 0x05,0x0c,0xdd,0x77,0x80,0xae,0x1e,0xb1,0x02,0xf2, - 0x2c,0x08,0xd8,0xed,0xc2,0xca,0x86,0x04,0x86,0x4e, - 0xcb,0xa5,0xc7,0xc0,0x22,0x64,0xf0,0x67,0x9a,0x80, - 0xf8,0x29,0x1c,0x7f,0x13,0x64,0x68,0x17,0x3f,0x61, - 0x04,0xee,0x9c,0x8b,0xdb,0x28,0xc2,0x23,0xfc,0x7f, - 0xd6,0xbe,0x8f,0x23,0x2e,0x5a,0xac,0x89,0x4f,0x5d, - 0xdf,0xdd,0x12,0x5e,0x51,0x5a,0x6b,0xac,0xd4,0xce, - 0x74,0x06,0x5d,0x7c,0xb6,0xb0,0xe4,0x25,0x20,0x60, - 0xab,0x51,0x88,0xf4,0xad,0x1b,0xf2,0x3e,0xdb,0x14, - 0x71,0x23,0xef,0x67,0xc8,0xa6,0xa4,0xb1,0x95,0x9c, - 0x4b,0x35,0xb0,0x9c,0x34,0x56,0xa5,0x2b,0x77,0x65, - 0xdd,0x69,0x88,0xc9,0x11,0xb9,0x09,0x45,0x62,0x6b, - 0x91,0xf7,0x8d,0x23,0xe1,0x5a,0x0d,0x97,0x7d,0xd9, - 0x0b,0x7c,0x6c,0x17,0xd9,0x95,0x88,0x2b,0xca,0x27, - 0x16,0x04,0x35,0x70,0xb3,0x3b,0xf9,0x6a,0xf0,0xb2, - 0x49,0xfe,0x26,0xa7,0x66,0x1e,0xb2,0x5b,0x09,0xf8, - 0x62,0x02,0x52,0x7e,0x5e,0xe4,0xc6,0x25,0xd6,0xfd, - 0xdd,0x28,0x30,0x9f,0x0e,0xf6,0x3f,0xcd,0x28,0x70, - 0x80,0xcd,0xce,0xc8,0x76,0x7e,0x0b,0xb6,0x3c,0xf8, - 0xb6,0x90,0xc3,0x4d,0x3b,0x1d,0x07,0x4c,0x02,0x1b, - 0x26,0xf0,0xc1,0x47,0x00,0xa3,0xf4,0x0a,0xc0,0xe6, - 0xa5,0x97,0x13,0x92,0x6a,0x07,0x55,0xc7,0xfe,0x23, - 0xf9,0xb6,0xd5,0xda,0xc9,0x41,0x85,0x42,0xde,0xe7, - 0xc8,0xb3,0x10,0x6e,0xfa,0xc5,0x80,0x7f,0x5c,0x4f, - 0x60,0x1b,0xd5,0x75,0x51,0x4b,0xcb,0x38,0xa2,0xa5, - 0xbb,0xfc,0x0b,0xd1,0x7b,0x77,0x79,0xf4,0x18,0x8d, - 0x60,0xc4,0x16,0x80,0x17,0xf1,0x88,0x0d,0x18,0x16, - 0x42,0x11,0x47,0x1b,0x02,0xaa,0x9d,0x1d,0x5a,0xfd, - 0x66,0xf3,0x03,0xa4,0xc1,0xb5,0x0b,0xd3,0x29,0x3b, - 0xb9,0x78,0x02,0x24,0x96,0x52,0xc4,0x94,0xb8,0x73, - 0x87,0x77,0x15,0xae,0xdf,0x70,0x01,0xee,0xec,0x71, - 0xf0,0x1b,0x5e,0x21,0x22,0x1a,0xcf,0x1f,0x1c,0xdc, - 0xad,0x94,0x97,0x68,0xb3,0x93,0x09,0x4b,0xdf,0x61, - 0xec,0xb1,0xfa,0xe8,0x2b,0x1b,0xbd,0x21,0x81,0x7d, - 0xb4,0x68,0x07,0x3d,0x65,0xa6,0xc2,0x96,0x01,0xff, - 0x0a,0x49,0x63,0xb9,0xd1,0xe2,0xc7,0xa6,0x93,0xb6, - 0x10,0x80,0x46,0xde,0x17,0x05,0xdc,0xbd,0xc7,0x91, - 0xd1,0x85,0x46,0x42,0x1c,0x98,0x44,0x5b,0x80,0xde, - 0x0e,0xb4,0xff,0xc6,0x56,0xaf,0x80,0xe6,0xf8,0xcb, - 0x39,0xea,0xdc,0x08,0x34,0xcd,0x03,0x35,0x5c,0x8f, - 0xc6,0xc3,0x70,0x46,0x64,0x58,0x53,0xc0,0xd6,0xaa, - 0x8c,0x41,0xc1,0xaa,0xca,0xc9,0xfa,0x1c,0x84,0x7b, - 0x1a,0xd6,0x6b,0x09,0xc3,0x18,0x9a,0x99,0x33,0x03, - 0xc9,0xc9,0x9e,0xbd,0xeb,0xb7,0x32,0x17,0xe0,0x57, - 0x59,0x3f,0x3e,0xf5,0x45,0xdb,0x97,0x9e,0xe2,0x05, - 0xc4,0xc6,0xcc,0x23,0xe5,0xbd,0x81,0x9f,0xfd,0x6e, - 0xf5,0xc2,0x08,0x78,0xa1,0x77,0xde,0x1a,0x70,0xbc, - 0xe1,0xa0,0x7a,0xbd,0x1d,0xc2,0xbc,0xa7,0x84,0x4c, - 0x88,0xbe,0xc2,0xf2,0xc8,0xc9,0x11,0x3d,0xd7,0xc1, - 0xc6,0xf9,0x18,0x89,0xb2,0xeb,0x16,0x66,0xa7,0xa2, - 0x09,0xd5,0xfe,0x2b,0x26,0x69,0x5b,0x57,0x94,0xd7, - 0xc3,0xcd,0x42,0x9e,0xa1,0x9a,0x7f,0x18,0x52,0x4c, - 0x98,0xd6,0x40,0xf1,0xc9,0xf3,0x43,0xb3,0xdd,0xf7, - 0xca,0x54,0x80,0xba,0xd0,0x25,0x2e,0x94,0xe1,0xca, - 0x92,0xde,0xef,0x00,0x60,0x93,0x38,0x07,0x33,0x6c, - 0x21,0xb7,0xa0,0x99,0xae,0xba,0xb3,0x12,0x64,0x10, - 0xa9,0xe1,0x2b,0x0c,0xc9,0xb8,0xf0,0x52,0x5e,0xcc, - 0xb4,0xbf,0x2b,0x01,0x7e,0xda,0xb2,0x1b,0x63,0xb7, - 0x5a,0x1e,0xc6,0x0e,0x6e,0x20,0xb9,0x3d,0x90,0x75, - 0xab,0x3f,0x8c,0x3d,0x70,0xc7,0xd3,0xa7,0xa5,0x2d, - 0xc3,0xb4,0xc1,0x75,0xd9,0x1a,0x4b,0xeb,0x59,0x75, - 0x3b,0x4b,0x69,0xc7,0x3c,0x3e,0x6c,0xd3,0x44,0xbe, - 0x7b,0xa1,0xe5,0x88,0x4b,0x3f,0xfe,0x6a,0x0d,0x0d, - 0x45,0xbb,0xad,0xfd,0x45,0x63,0xcc,0x69,0xad,0x4b, - 0x0b,0x2a,0x8e,0x50,0x42,0x83,0x73,0x68,0xb8,0x34, - 0x0d,0x7b,0xdd,0x11,0xb1,0x34,0xf5,0x54,0x25,0x09, - 0x36,0xe3,0x03,0xe6,0x24,0x8c,0x4c,0x81,0x75,0x53, - 0x10,0x61,0xc3,0x76,0x64,0xed,0x3e,0xe8,0x60,0x03, - 0x40,0xf3,0x9a,0x34,0x7b,0x16,0xba,0x58,0x68,0xb8, - 0xef,0xec,0x29,0x3b,0x0c,0x08,0x58,0xdf,0xc5,0x62, - 0xe7,0x0a,0xf5,0x89,0x6c,0x9e,0x00,0xd9,0xcb,0xea, - 0x33,0xa2,0xa0,0x7f,0x19,0x15,0x76,0x17,0x67,0x0f, - 0xa0,0x8f,0x9d,0xaf,0x2f,0x8c,0xf7,0xfe,0x1b,0x83, - 0x4f,0x5a,0x9d,0x9d,0xb6,0x15,0x0d,0x3a,0x69,0xbd, - 0xdf,0x56,0x50,0x9e,0xb6,0x1f,0xc3,0x9c,0xf4,0x99, - 0x9b,0x10,0x05,0xa2,0x25,0xb7,0x22,0xe0,0x14,0x74, - 0xd9,0xc9,0xfb,0x85,0x94,0x93,0x86,0x6a,0x0a,0x50, - 0xcf,0x98,0x66,0x50,0xbf,0x87,0xb2,0xc8,0xbc,0x94, - 0x31,0x35,0xd4,0x36,0xf8,0x82,0x7c,0x2f,0x6b,0x2a, - 0xc6,0x32,0xf9,0xa6,0xb1,0x0c,0x7b,0xf2,0xfe,0x98, - 0x13,0x7d,0xb4,0x9c,0x99,0x05,0x1f,0xcc,0x43,0x92, - 0x9a,0x1a,0x81,0xed,0x09,0x84,0xfd,0x96,0xa7,0xf8, - 0x2d,0x8a,0x4f,0xea,0x78,0x9a,0x42,0x10,0xa1,0xd1, - 0x79,0x7c,0x6c,0x06,0xa7,0x55,0x63,0xa8,0x4e,0x8e, - 0x51,0xb2,0xa8,0x7f,0x26,0x00,0xe0,0xfe,0x8f,0xb7, - 0x76,0x7e,0x37,0xb4,0x5c,0xaf,0x71,0xe2,0x97,0xe0, - 0xe9,0xaf,0xd3,0x19,0x20,0x1b,0x78,0xc3,0x23,0x6c, - 0x37,0x97,0x5a,0x6f,0x69,0x03,0xa1,0xb5,0x2b,0x8d, - 0x84,0x9b,0x72,0x1b,0x2c,0x7a,0xb9,0x81,0x7c,0x5e, - 0x0e,0x00,0xba,0x39,0x46,0x4a,0x48,0x68,0xe3,0xb4, - 0x10,0x14,0xf9,0xca,0x29,0x10,0xae,0x4f,0x27,0xef, - 0xd7,0x20,0x08,0xed,0x04,0xa0,0x75,0x74,0x38,0xe4, - 0x41,0x96,0x10,0xc7,0x9d,0xbf,0xc5,0x08,0x63,0x18, - 0xc4,0x16,0x0d,0xa2,0xbb,0x11,0x15,0x5f,0x46,0x46, - 0xa1,0x18,0x17,0x82,0x85,0x57,0x2a,0xb3,0xb2,0x41, - 0xc9,0x94,0xea,0xc6,0x80,0xfe,0x8f,0x8d,0xc8,0x87, - 0x91,0xf7,0x8b,0x18,0xf0,0x40,0x55,0x40,0x52,0x2a, - 0xf5,0x74,0x1e,0x57,0xd3,0x16,0x6a,0xe7,0x62,0x11, - 0x27,0x34,0x0b,0xfc,0x97,0x32,0x80,0x37,0x07,0x63, - 0xf0,0xf9,0x80,0xe3,0xaf,0xc1,0x45,0x31,0xb0,0x2b, - 0x28,0xd2,0x77,0xee,0x67,0xdd,0x18,0x06,0x77,0x76, - 0xb0,0x22,0x7c,0xd8,0x60,0x97,0x01,0xa4,0x36,0x68, - 0x9c,0x4c,0x13,0x52,0x89,0xf4,0xf4,0x69,0x3d,0xf6, - 0xf4,0xb1,0x8e,0xe9,0x56,0xf3,0xcb,0x35,0x76,0x8a, - 0x43,0x4a,0x06,0x53,0x35,0xbb,0x4c,0x30,0x10,0x31, - 0x13,0x14,0xa9,0x71,0xb4,0xe2,0xc0,0xb1,0x06,0xa4, - 0x40,0x89,0x40,0x64,0x82,0x75,0x45,0x8c,0xbc,0x5f, - 0x0a,0x39,0xa4,0x72,0x6a,0x54,0x60,0x8f,0xd7,0x90, - 0x91,0xf3,0x23,0x96,0x35,0xd8,0xca,0x72,0xea,0xd6, - 0x5f,0x87,0x78,0xd0,0x53,0x18,0x8e,0x5a,0xe6,0x60, - 0x4d,0x7b,0x92,0x5e,0x52,0x74,0xdd,0xe8,0xb2,0xdb, - 0x83,0xa6,0x97,0xa0,0x1b,0x0e,0x9e,0x59,0x83,0xfd, - 0x36,0x95,0xe7,0xbb,0xe4,0xfd,0x7d,0xb9,0xfd,0x48, - 0x06,0xfb,0x37,0x2f,0xec,0xe7,0xf8,0x0e,0x23,0xb2, - 0x37,0x07,0x85,0xc3,0xf8,0x61,0xb7,0xbc,0x34,0x20, - 0xed,0x19,0x79,0x5f,0x51,0xb2,0x5a,0x32,0xa9,0xa6, - 0x27,0xb0,0xe8,0xac,0x52,0x16,0x20,0x05,0x15,0x86, - 0xd4,0xda,0x67,0xea,0xa4,0xf5,0xcf,0xc2,0xa9,0xb2, - 0x05,0x88,0x2a,0xa6,0xc9,0x3b,0x53,0xd9,0xaa,0x99, - 0xbd,0xc4,0x56,0x59,0x63,0x5c,0x41,0xbd,0xcb,0xf3, - 0x8e,0x52,0xbe,0x34,0xa7,0x22,0xb2,0x39,0x46,0x40, - 0x06,0xf1,0x75,0x76,0x4b,0x7b,0xfa,0x7e,0x59,0x80, - 0x25,0xae,0x52,0x33,0xfa,0xe5,0xc8,0xe3,0xb2,0xe2, - 0xd7,0x79,0x24,0x70,0xd8,0xc1,0x81,0x65,0xa2,0x82, - 0x06,0x0e,0xba,0xc0,0xd1,0xe0,0x28,0xb4,0xe3,0x89, - 0xd7,0x94,0xc9,0xc6,0x8b,0x68,0xc5,0x75,0x3d,0xf1, - 0x11,0x0c,0xe0,0x66,0xd8,0x13,0x3f,0xf8,0xd8,0x69, - 0x66,0x3b,0x2e,0xb2,0xfd,0xf7,0xf0,0x07,0xc7,0x1c, - 0xf2,0x83,0xb6,0xdb,0x16,0xe9,0xb5,0x63,0x14,0xd8, - 0x87,0x15,0xec,0x32,0x01,0xdd,0xf7,0x8c,0xbc,0xcf, - 0x94,0x2e,0x72,0x74,0xa5,0x9f,0xa6,0x9e,0xcd,0xb1, - 0xb3,0x10,0x44,0x42,0x2e,0x6f,0x40,0xd0,0x42,0xd5, - 0x6f,0xe3,0xf6,0x90,0x5d,0xb7,0x92,0x88,0x90,0xc8, - 0xfb,0x37,0xa0,0x6f,0x95,0x05,0x40,0x33,0xe6,0x80, - 0xa8,0x14,0xa1,0x28,0x1a,0x8d,0x32,0x77,0x50,0x04, - 0x54,0xa9,0x86,0xab,0x68,0x40,0x5e,0x2b,0xf9,0xa1, - 0xf5,0x77,0xbd,0x2c,0x18,0x49,0xb8,0x53,0x41,0xbf, - 0x3a,0xc4,0xa6,0xae,0x64,0x94,0x4e,0x82,0x63,0xb3, - 0x7d,0x0c,0xbb,0x66,0x13,0xd0,0x03,0xf0,0xf2,0x02, - 0xd7,0xef,0x4a,0x0b,0x97,0xbd,0x4c,0xfb,0x78,0x09, - 0xc0,0x5f,0xbd,0xfe,0xa6,0x9c,0xf7,0x3d,0x79,0xff, - 0xf1,0x44,0xe2,0x2d,0xb5,0x9e,0x78,0xd8,0x1c,0x60, - 0x44,0xf5,0x1f,0xfc,0x42,0xa0,0x3b,0xf7,0xe1,0x01, - 0x4d,0x7b,0x93,0xdf,0x08,0x37,0x29,0x58,0x1c,0x6a, - 0x6a,0xe2,0x42,0x7b,0xd7,0x23,0x46,0xab,0x53,0xe6, - 0xfa,0xe4,0x40,0x22,0x2a,0xb5,0x96,0x60,0x27,0xdf, - 0xad,0x35,0xc9,0x1f,0x40,0x6f,0x66,0xa9,0x24,0xbf, - 0x4b,0xe5,0xaf,0xc0,0x82,0xd4,0x9b,0xa1,0xae,0x73, - 0x53,0x30,0x76,0xad,0x3d,0x49,0xb9,0xdb,0x37,0xa1, - 0x89,0x13,0x50,0xc7,0x89,0xb9,0x90,0xfa,0xd2,0x2a, - 0xa4,0xcc,0x26,0xb0,0x74,0xe3,0xea,0xa4,0xa1,0x8e, - 0x14,0x54,0xf2,0x7e,0xb9,0xf0,0x14,0xb9,0xb1,0x32, - 0x28,0xfa,0x7a,0x0d,0x60,0x73,0x47,0x42,0xcc,0x40, - 0xff,0x00,0x04,0xbc,0x83,0xf6,0xf0,0x4e,0xb4,0x78, - 0x37,0x50,0x3c,0x65,0x16,0x1d,0x5e,0xd9,0x5a,0x1a, - 0xe0,0x41,0xa7,0x22,0x36,0x05,0x6b,0xed,0xbc,0xbf, - 0x52,0xdc,0xb2,0x67,0xf2,0x58,0x13,0x52,0xcb,0x3e, - 0x64,0xee,0x78,0x3e,0xa8,0x9d,0x24,0x08,0x65,0xd8, - 0x06,0x1b,0x00,0x73,0x3e,0x64,0x92,0x9f,0x83,0xfe, - 0xa8,0xa5,0xc8,0x89,0x76,0x2e,0x29,0x1b,0x2a,0xf3, - 0xff,0xac,0x81,0x20,0xdd,0x82,0x99,0x80,0x33,0xa4, - 0x8f,0x57,0x0a,0x9c,0x39,0x79,0x4a,0xdc,0x6b,0x1a, - 0x51,0xd3,0xd9,0x18,0x9e,0xa1,0x75,0x8a,0xf2,0x6a, - 0x15,0xba,0xf4,0x1b,0xa3,0xff,0x2a,0x9c,0x37,0x01, - 0x54,0xb6,0x16,0x1c,0x4f,0x5a,0xed,0x8d,0x2a,0x05, - 0x88,0x11,0x98,0x63,0x23,0xd5,0x7b,0xd8,0xb7,0x01, - 0xf9,0x27,0xe1,0xe0,0xfe,0xe5,0x44,0x5a,0xb9,0x13, - 0xdb,0x7b,0xcb,0x8e,0xf8,0x21,0x9c,0xc7,0x58,0xba, - 0xf0,0xe1,0xb7,0x94,0x87,0x9f,0x2a,0xcf,0xbc,0xe5, - 0x14,0x86,0x46,0x02,0xb7,0x60,0xe1,0x78,0x70,0x45, - 0x74,0x01,0xf0,0x40,0x75,0x58,0x59,0xa4,0x9b,0x80, - 0xac,0x9d,0x92,0x4d,0xf8,0x87,0x5d,0x5d,0xc7,0x1f, - 0xba,0xc0,0x6b,0xa0,0x4d,0x5c,0xb2,0x19,0x59,0x54, - 0x24,0x64,0xee,0xee,0x93,0xce,0x2a,0x28,0x36,0xbd, - 0x73,0x82,0xdd,0xcc,0x4d,0xdd,0x01,0x37,0x54,0x3f, - 0xaa,0x7f,0x00,0x16,0xac,0x56,0xc4,0xca,0x54,0xfc, - 0x94,0xcc,0xd6,0x0f,0x18,0xd5,0xac,0x04,0xc6,0x8f, - 0xc0,0x0b,0x90,0x45,0xd7,0x67,0x40,0x71,0x10,0xa5, - 0x0a,0x17,0xd5,0x7b,0x45,0x7e,0x0f,0x1f,0x15,0xfb, - 0xfa,0x95,0xbd,0x94,0x6c,0x21,0x3e,0xbc,0x8b,0x35, - 0xf7,0xf5,0x66,0xf1,0xfc,0x30,0xc9,0xe7,0x2f,0x03, - 0x0a,0x6e,0x1f,0x7a,0x7e,0x20,0x54,0x3d,0x2e,0x38, - 0x1e,0x08,0x83,0xd6,0x8f,0x33,0xf7,0xce,0x3b,0x83, - 0x43,0x40,0x35,0x8c,0x66,0xdd,0xc4,0x37,0xcf,0x86, - 0x31,0xd0,0x4b,0x0d,0x7a,0x23,0xc9,0x15,0xca,0x73, - 0x18,0x3e,0xb8,0x69,0x36,0x36,0xa0,0x4d,0x86,0xe5, - 0x57,0xcd,0xea,0xfc,0x2b,0x93,0xce,0xaa,0x4a,0x5f, - 0x1d,0x3e,0x05,0x6d,0xe7,0xdb,0x90,0xf7,0xd9,0xc6, - 0x3f,0x71,0xa7,0xd0,0xd8,0x41,0xd0,0x81,0x66,0x54, - 0xbc,0xaa,0x80,0x20,0xb2,0x1a,0x82,0xfe,0x68,0xf6, - 0x63,0xe6,0x65,0xd8,0xc9,0xfb,0x12,0x90,0x64,0x42, - 0x83,0xb6,0x43,0xbc,0xa6,0x14,0x3d,0x68,0x53,0x11, - 0x59,0xb0,0x95,0x8c,0xab,0x64,0xc0,0x7c,0xe6,0xbe, - 0xde,0xdf,0xbc,0x9f,0xa4,0xd8,0xef,0x93,0xf7,0xf9, - 0xce,0x92,0x65,0xd2,0xb5,0x7b,0x1f,0xfd,0xc7,0xd3, - 0x83,0xc2,0x1b,0x67,0x13,0xc9,0xfb,0xf7,0xb8,0x45, - 0x55,0xbb,0xe1,0xa6,0x9a,0xe1,0x46,0xb6,0x6c,0x35, - 0xa4,0x19,0x2b,0x76,0xa5,0x83,0xd6,0x13,0x2b,0x1b, - 0xb9,0x4d,0xf8,0x25,0xf3,0x8f,0xe3,0x1d,0x97,0xb4, - 0xf6,0xea,0xb9,0xd3,0xc8,0xfb,0xbc,0x76,0x76,0x8f, - 0xb1,0xec,0x13,0x86,0x15,0x67,0x61,0x1f,0x9f,0x57, - 0x67,0x1e,0x1f,0xff,0x6e,0xc3,0x36,0xe8,0x81,0x8e, - 0x7d,0x71,0x2e,0x07,0x5f,0x0e,0xf7,0x44,0x1d,0x92, - 0x91,0xb0,0xd0,0xea,0x46,0x93,0x1f,0x77,0x7e,0x49, - 0x56,0x26,0xc0,0xb4,0xe9,0xd6,0x1b,0xce,0xd6,0xa3, - 0xc1,0x68,0x82,0x83,0xd2,0xe5,0x18,0xa3,0x82,0x7c, - 0x69,0x3e,0x55,0xd9,0x80,0xf3,0xb3,0xbf,0x07,0x01, - 0x7f,0x4e,0xde,0x77,0xe7,0x5c,0x3c,0xfa,0x4a,0xd4, - 0xdc,0x36,0x04,0x1c,0x66,0xf2,0xfe,0x61,0x46,0xfd, - 0xe7,0x15,0x4c,0x5c,0x13,0x8f,0x45,0x95,0x2a,0x79, - 0x9f,0x8f,0x00,0xc6,0xac,0xfe,0xab,0xb6,0xcf,0xd8, - 0x94,0x52,0x74,0x7b,0xee,0xe3,0x71,0xed,0x90,0x87, - 0x35,0x15,0xc8,0xa3,0x9c,0x63,0x35,0x33,0xa5,0xa6, - 0xc0,0x1b,0x51,0x99,0x52,0x95,0xb3,0xf2,0xd9,0x15, - 0x1c,0x64,0x04,0x57,0x7d,0xb7,0xa6,0xb9,0x17,0x55, - 0x55,0xa4,0x15,0x0b,0x38,0x17,0x87,0x76,0x51,0xd3, - 0x35,0xec,0x7c,0x87,0xd7,0xe7,0xd9,0x73,0x2b,0xca, - 0xef,0x03,0x4b,0xdc,0x83,0x2d,0xc0,0x09,0x3b,0x0f, - 0x26,0xfc,0x06,0xbe,0xfa,0xfe,0x0c,0xb7,0x47,0x70, - 0x16,0xd5,0x3c,0x10,0x1b,0xf0,0xee,0x4b,0xb8,0x0c, - 0x4a,0xd5,0x78,0xf4,0x97,0x01,0x00,0x0f,0x1e,0x76, - 0x1c,0x3f,0x59,0xdb,0x57,0x7c,0x88,0xe1,0x61,0x8b, - 0xa9,0xe3,0x7e,0x08,0xf0,0x9c,0xc2,0x3f,0x18,0x36, - 0x48,0x93,0x62,0x6c,0x8b,0x7a,0x33,0x68,0xd3,0xc9, - 0xfb,0xa3,0xfa,0x4e,0xb0,0x83,0x36,0x3c,0xbb,0xef, - 0x8c,0x31,0x7c,0xfa,0x7b,0xac,0x1e,0xb7,0x80,0x69, - 0x3c,0x14,0x58,0x18,0x11,0x7e,0x6b,0x14,0x8a,0x4b, - 0xac,0xb4,0x9c,0xd8,0x9e,0xae,0x0c,0x76,0xb0,0xb0, - 0x8f,0x57,0xb1,0xe8,0x04,0x2e,0xde,0x1b,0xe7,0x6e, - 0x8a,0x80,0x12,0x2d,0xfb,0xef,0x05,0xa9,0xa3,0x7c, - 0xc3,0x38,0x6b,0xc9,0xbd,0xb2,0x01,0xb8,0xa5,0xc0, - 0x94,0xec,0xf6,0x0c,0x67,0xf1,0x0f,0x94,0x87,0x30, - 0x65,0xcc,0x27,0x58,0x29,0x3a,0x02,0x12,0x75,0x1b, - 0x88,0x6a,0xde,0x92,0xf3,0xbc,0xaf,0x00,0x08,0x7c, - 0x07,0x27,0xc8,0x13,0x8f,0x85,0x9f,0x94,0xa9,0x3f, - 0x59,0xf8,0x05,0x78,0x9c,0xa3,0xbf,0x8b,0x8b,0xa1, - 0x57,0xe4,0x6f,0x26,0x01,0xf9,0xc6,0x0e,0xfa,0x24, - 0xa0,0xf0,0x8c,0xf9,0x9d,0x67,0x8a,0x10,0x05,0x6c, - 0xb7,0x5f,0x6e,0x8c,0x8e,0xc0,0x17,0x39,0x78,0x0c, - 0xc0,0xc4,0x2b,0x76,0x9d,0x8f,0xaa,0xf6,0xe0,0x4e, - 0x45,0x0e,0x4c,0x45,0x41,0xdb,0x3c,0x49,0x62,0x7d, - 0x76,0x3b,0xee,0x47,0x6c,0xc7,0x8d,0x86,0xb8,0xb0, - 0xce,0xea,0x0e,0x6a,0x74,0x5e,0x56,0x06,0x9e,0xce, - 0x00,0xcf,0x14,0xbb,0xa9,0xd8,0x54,0xa3,0x53,0xce, - 0x20,0x83,0x2d,0xcf,0xbd,0x06,0x31,0x16,0xc3,0xc2, - 0xf2,0xa9,0x4b,0x1c,0x85,0x46,0x74,0x1a,0x69,0x38, - 0x93,0x72,0x0c,0xb5,0xa4,0x0a,0x48,0x71,0x53,0xfb, - 0xbc,0x3c,0x01,0x06,0x12,0xe2,0xc2,0xad,0x32,0x92, - 0x83,0xb4,0xaa,0xb3,0x54,0x88,0x43,0x6e,0xf8,0x61, - 0x36,0xc2,0xcb,0xfb,0x4f,0x67,0x25,0x6a,0x09,0x04, - 0x93,0x49,0xfb,0x7a,0x9a,0xb4,0xbf,0x85,0x47,0xe1, - 0x27,0xd1,0xe2,0xee,0x99,0xac,0x33,0xe8,0x38,0x80, - 0xff,0xbc,0x41,0x24,0xc8,0x0c,0x37,0x32,0x90,0xf7, - 0x81,0x37,0x8f,0x3f,0x3e,0x50,0x91,0xbc,0x6f,0xa8, - 0x78,0xef,0x7c,0x60,0x43,0xde,0x47,0xef,0xc5,0xd9, - 0x01,0xf0,0xe8,0x76,0xbb,0xbb,0x5f,0xf4,0x9a,0xbc, - 0xfd,0x3c,0xc2,0x83,0x3a,0x62,0xc0,0x28,0x1d,0x08, - 0x7a,0x7d,0x5c,0x83,0x85,0xd7,0x51,0x50,0xa9,0x36, - 0x2d,0x98,0x10,0xf4,0xf5,0x13,0xc0,0xd9,0x8d,0x92, - 0x5f,0x8b,0x1d,0xa3,0xf3,0x28,0xd7,0xd7,0x24,0xdf, - 0x1e,0x44,0xe5,0x78,0x16,0xc0,0x13,0xa1,0x7b,0x47, - 0x04,0xdb,0x83,0x02,0xc9,0x2c,0xf2,0x3e,0x36,0xe4, - 0x7d,0x48,0x80,0x48,0x25,0xc8,0x52,0x02,0x5d,0x9d, - 0x1c,0x25,0x4a,0xad,0x8e,0x16,0x46,0xe2,0x1f,0x31, - 0x71,0x01,0x38,0x9e,0xb8,0xe8,0x7c,0x12,0x2f,0xe8, - 0xda,0x34,0xb9,0x6d,0x65,0x3e,0xb5,0x38,0xed,0xf9, - 0x37,0xcf,0x3b,0x4e,0xf5,0x3c,0xdf,0x0c,0x87,0x9e, - 0xa7,0xbb,0xb9,0xd4,0x68,0xe4,0x7d,0x77,0x90,0x06, - 0xc2,0xce,0xeb,0xff,0x8e,0x0d,0x26,0xe0,0xa1,0x06, - 0x69,0xe7,0xde,0x34,0x68,0x78,0xb8,0xef,0xa8,0x2d, - 0x26,0x6c,0x15,0x96,0x36,0x66,0x0a,0xca,0x36,0xbc, - 0x18,0x81,0x66,0x78,0x5a,0xe6,0x8a,0x4d,0x94,0x63, - 0xdb,0x66,0x1b,0xe6,0x31,0x70,0x1d,0x5d,0xd1,0x02, - 0x50,0x8d,0xbd,0x46,0xde,0x9f,0xe9,0xfd,0x03,0x03, - 0xf7,0x92,0xaa,0x43,0x54,0xfe,0x74,0xa6,0xbf,0xd2, - 0xa8,0xe5,0x49,0x85,0x7d,0x9f,0x92,0xa1,0xb6,0x8e, - 0xf0,0x6c,0x3e,0x02,0xdf,0x13,0x8a,0x90,0x96,0x32, - 0x3b,0x56,0x83,0x11,0xb1,0xa4,0xab,0x44,0x42,0xc9, - 0x6e,0xd6,0x2d,0xfe,0xea,0x27,0xfe,0x57,0x0e,0xa1, - 0x78,0xf6,0x0e,0x3e,0xe0,0x09,0xde,0x00,0x85,0x3f, - 0x3e,0x03,0x27,0xef,0x6f,0x02,0x54,0x6e,0x13,0x62, - 0x38,0x79,0x9f,0x1b,0x91,0xd1,0xdd,0xf8,0xb0,0xfb, - 0x3a,0xee,0x4e,0x98,0x47,0xe1,0xcf,0xb0,0xd0,0x14, - 0x1c,0x6d,0x3b,0x91,0xc6,0x17,0x3b,0x43,0x06,0x20, - 0xac,0x61,0x84,0xee,0x05,0xc0,0x56,0x0e,0xac,0xcd, - 0x97,0xc1,0x13,0x70,0x08,0xf7,0xfd,0x1a,0xef,0x55, - 0x60,0xb4,0x62,0xda,0x25,0x2b,0x60,0x38,0x72,0x53, - 0x08,0x5a,0x1a,0x86,0x62,0x3a,0x0e,0xcc,0x7e,0xfd, - 0xce,0xff,0x64,0x51,0x8a,0x7d,0x9e,0xbe,0x9e,0xb5, - 0xce,0x29,0xe4,0x8e,0xcd,0x42,0x27,0x75,0xe7,0xf6, - 0x80,0xea,0xf8,0x0c,0x22,0x36,0x2b,0xc1,0x2c,0x9a, - 0x1c,0xd2,0xa5,0x0c,0x82,0xe8,0x6b,0x7d,0xc6,0xbe, - 0xfe,0x62,0xaf,0x7f,0x83,0xbc,0x3f,0x42,0xc0,0xb2, - 0x05,0xf2,0x4e,0x0b,0x91,0x9b,0x9a,0x7b,0xa4,0x04, - 0x2a,0x94,0x04,0x67,0xf2,0x3e,0xee,0x22,0x57,0xc0, - 0x0a,0xb8,0xad,0x12,0x02,0x1c,0x0f,0x9e,0x67,0x9e, - 0x75,0xf6,0x3e,0xa5,0xcd,0x54,0x3c,0x01,0x19,0xdb, - 0x18,0x8e,0xcc,0x9b,0x2d,0x35,0xe5,0xc1,0x45,0xb5, - 0x27,0x87,0x21,0x59,0x65,0xc8,0xf8,0x7a,0x16,0x81, - 0x85,0x0d,0xb8,0xe2,0x52,0x4b,0xb1,0x21,0x29,0xb6, - 0xd0,0x80,0x65,0x81,0x7a,0x4b,0x4c,0xc1,0x3d,0x80, - 0x61,0xbf,0xa6,0x8c,0xfa,0xfa,0x27,0xdd,0x9e,0x13, - 0x95,0x11,0x9c,0x12,0x2e,0x26,0x6d,0x89,0x61,0x78, - 0x03,0x4b,0xa7,0xa3,0x60,0x8c,0x89,0x62,0x48,0xe6, - 0x94,0xbe,0xe1,0x3d,0xcb,0xea,0xec,0xb2,0x1e,0xaf, - 0x75,0x94,0x99,0xcd,0x72,0x5d,0xf3,0xcb,0x98,0xb4, - 0x04,0xa1,0x2b,0xb0,0xc9,0xb1,0xfe,0x11,0x1d,0xf8, - 0x2d,0xf2,0xfe,0xe6,0x93,0x78,0x1c,0x60,0x70,0x0a, - 0x16,0x11,0xdd,0x36,0xac,0x12,0x37,0x2b,0x3d,0xb8, - 0x72,0x6d,0x67,0x85,0x9b,0xd2,0x13,0x77,0x73,0x45, - 0xa1,0xf6,0x46,0xeb,0xc6,0xd5,0x39,0xef,0x04,0xdb, - 0xb3,0xb4,0xf9,0xae,0x87,0x96,0xa3,0xb7,0xc1,0x6a, - 0xf7,0x24,0x4f,0x52,0xb0,0x93,0xf7,0x85,0x25,0x67, - 0xaa,0xbb,0xcc,0x74,0xe4,0x84,0x0d,0x50,0x04,0x40, - 0x53,0x4d,0x83,0x4d,0x07,0xc9,0xe0,0x41,0xc9,0x76, - 0x5d,0x3f,0x6f,0x94,0x8c,0xcb,0xdb,0x6e,0xd4,0x6b, - 0xa2,0x49,0xca,0x60,0xc5,0x5a,0xc6,0xa8,0x7e,0x7b, - 0xa8,0xc6,0x23,0xbb,0x6e,0xc2,0x0a,0x9e,0x16,0x94, - 0x80,0x0e,0xee,0x61,0x4d,0x15,0xce,0xc4,0x4c,0x5c, - 0x8d,0x18,0xd0,0x5f,0xf4,0x46,0xe3,0xe8,0xec,0x21, - 0xed,0xb0,0x50,0xca,0x10,0x65,0x7f,0xd6,0x6c,0xe5, - 0x23,0x01,0x80,0x7f,0x16,0x2c,0x0e,0x45,0x3c,0x6f, - 0x50,0xac,0x87,0xbf,0xfc,0x78,0x34,0xa8,0x8d,0x53, - 0x6f,0xa0,0x47,0xdc,0x07,0x32,0x6c,0x0b,0x8a,0x57, - 0x8d,0x29,0x20,0xc8,0x9c,0xf3,0xde,0xa6,0x14,0x81, - 0x59,0x08,0xd8,0x86,0x5f,0x0d,0x46,0xbb,0x24,0x25, - 0x8b,0x9f,0x5c,0x85,0xab,0x31,0x2d,0xf7,0xb2,0xdb, - 0xb9,0x99,0x7c,0x71,0x8c,0xf6,0x6c,0xda,0xd4,0xdf, - 0xaa,0x50,0x50,0xe1,0x91,0xad,0x37,0x43,0x4d,0x3b, - 0x56,0x2b,0xbc,0x8a,0x63,0x78,0x80,0x5f,0xde,0x82, - 0xae,0xf7,0xb7,0x06,0x7d,0xc0,0xa0,0xcd,0x3f,0xb4, - 0x3c,0xa8,0xe4,0x5e,0x5f,0x86,0xa5,0x98,0xbf,0x28, - 0xc2,0x4a,0x3b,0xa6,0x2e,0x58,0xb9,0x46,0x36,0x64, - 0x34,0x6d,0xdc,0x38,0x0a,0x9e,0x31,0x1a,0x86,0x54, - 0x8f,0xa9,0x6a,0x1d,0xca,0xf6,0x8f,0x6a,0x0b,0x17, - 0x19,0xde,0x7c,0xec,0x0d,0xc8,0x63,0xda,0x8d,0x1f, - 0x44,0x85,0x5f,0x23,0x0d,0x1b,0xca,0xf0,0x59,0x4b, - 0x80,0xb7,0x8b,0xf1,0xed,0x03,0xde,0xb8,0x8e,0xdc, - 0xb3,0x1e,0x11,0xa6,0x05,0xb0,0xea,0xce,0xd1,0x4d, - 0x39,0x10,0x8b,0x9c,0x78,0x6b,0x2d,0x49,0xd0,0x89, - 0x33,0x99,0xa6,0xa4,0x0f,0xd6,0xd4,0x4c,0xe1,0x2c, - 0x49,0xe6,0x59,0x88,0xf4,0xa8,0xa1,0x84,0xa0,0x4e, - 0xde,0x9f,0x22,0xa3,0xb4,0xc5,0x86,0x1a,0x35,0x72, - 0xa7,0x53,0x40,0xb0,0x0d,0x79,0x9f,0x45,0x58,0xe3, - 0xb5,0x30,0x89,0x00,0xf2,0xb1,0x48,0xfb,0xd7,0xcc, - 0x6e,0xed,0xa8,0x4b,0xcd,0xb7,0x87,0x89,0x15,0x69, - 0xec,0xba,0x5f,0xa2,0x27,0xd7,0x0e,0xac,0xcf,0xa0, - 0x8c,0xe5,0x2e,0x5b,0x35,0x16,0xaa,0x73,0x31,0x74, - 0x00,0x83,0x4d,0x91,0x2a,0x19,0xb1,0x03,0xb8,0x1c, - 0x6e,0xe6,0x5e,0x37,0x9d,0xd7,0x75,0x7b,0xe8,0x0d, - 0x78,0xe2,0x93,0xe1,0x80,0x02,0xdf,0x63,0xe7,0x1f, - 0x2f,0x3c,0x76,0x82,0xb4,0x7c,0x76,0x7e,0x3c,0x60, - 0x13,0xbc,0xbd,0x34,0xdc,0xe0,0x7c,0x0c,0x91,0x6a, - 0x33,0x2d,0xc0,0xb0,0xeb,0x59,0x6b,0xf0,0x94,0xb5, - 0x44,0xda,0xae,0x0c,0xab,0x38,0x79,0x3f,0xc6,0x4c, - 0x51,0xb6,0x49,0x67,0x90,0x66,0x17,0x51,0x2a,0x3c, - 0x94,0x80,0x60,0xe4,0x7d,0xa9,0x8b,0x3d,0xd5,0x75, - 0xe4,0x9c,0x02,0xe0,0xd9,0x2f,0x7b,0x4a,0x22,0x69, - 0x0d,0x4a,0x6b,0x6c,0x8d,0xc0,0xa2,0x09,0xb1,0xa0, - 0x95,0x17,0xcb,0xa9,0xc8,0x7d,0x00,0x65,0xb8,0x87, - 0x1c,0xc5,0x1f,0xb1,0x68,0x2c,0x32,0x14,0x0b,0x2a, - 0xc5,0x25,0x28,0xc2,0x74,0x1f,0x42,0xd1,0xff,0x07, - 0x75,0xc6,0xa2,0xe3,0x51,0x9c,0xfa,0x0f,0x28,0xf3, - 0x0f,0x45,0x75,0x49,0xb9,0x21,0x0a,0x4c,0x1b,0xfb, - 0xec,0xeb,0x4f,0xb6,0x69,0x7c,0x2c,0xd9,0xdf,0x1f, - 0x17,0xdf,0x3c,0xf0,0x67,0x2e,0x1c,0xdb,0xe1,0x22, - 0x8c,0x23,0x05,0x26,0x2f,0xc6,0x32,0x44,0xde,0x77, - 0x66,0xee,0xc6,0x10,0x77,0x12,0xd3,0x3c,0x67,0x2d, - 0x2d,0x0d,0x6f,0x95,0x09,0xc2,0x91,0xf3,0x50,0xee, - 0xe4,0x9c,0x63,0x0e,0xde,0x28,0x80,0xb7,0xf1,0x21, - 0xa8,0xac,0x36,0x98,0xd8,0x30,0x7a,0x77,0x61,0x62, - 0x18,0x58,0x13,0x76,0xae,0xe5,0xaf,0x0f,0xf4,0x32, - 0xde,0xe9,0x83,0x4f,0x7e,0x50,0xac,0x14,0xe3,0xf9, - 0xdd,0x22,0xaa,0x39,0x39,0x76,0x30,0x3f,0x60,0x69, - 0xd1,0xb0,0x93,0xf7,0x47,0x74,0x2e,0x1a,0x97,0x74, - 0xd8,0xba,0xe1,0x74,0x50,0x47,0x48,0x4d,0xb0,0x36, - 0x5d,0x37,0xb4,0x7e,0x81,0x8d,0x92,0x3d,0xd5,0x1b, - 0x23,0x5d,0x16,0xd5,0xfe,0x2b,0xb7,0xa2,0xb6,0x61, - 0xbf,0x9e,0x2f,0xe4,0x4f,0xb7,0x07,0xf9,0xbb,0x6f, - 0x7d,0x83,0xbc,0xcf,0x71,0xe0,0x02,0xfc,0x64,0xea, - 0x49,0x08,0x1e,0xa7,0x58,0xd4,0xfb,0xea,0xb6,0x28, - 0xb1,0x07,0x48,0xf1,0xe8,0xf7,0x7b,0xd6,0x71,0xed, - 0x9a,0x44,0x1f,0x18,0x52,0x78,0xaa,0x22,0xe8,0x2e, - 0x38,0x71,0x17,0xb6,0x91,0xcd,0x97,0x10,0xa2,0x90, - 0x89,0x7c,0xba,0x24,0xd8,0x1a,0xa9,0xed,0x02,0x69, - 0xb3,0x0b,0xb0,0x4b,0x8e,0x5e,0xba,0x7c,0xb4,0x34, - 0x7e,0x75,0xcc,0xfa,0xee,0xd8,0x65,0x5b,0x5f,0xa0, - 0x1c,0xac,0x9c,0xe5,0x2a,0x5b,0x04,0xaa,0x2b,0x40, - 0x62,0x06,0x34,0x2b,0x79,0xbf,0x8d,0x4e,0x09,0x79, - 0x9f,0xa3,0xb7,0xe8,0xb4,0x5f,0xd1,0xe3,0x3f,0x16, - 0x88,0x87,0xc0,0x52,0xe0,0xa8,0x76,0x72,0x16,0x11, - 0x89,0x9a,0x79,0xbd,0xa9,0x09,0x88,0x0f,0x67,0x0a, - 0x78,0x94,0x15,0x1c,0xd3,0xee,0x9d,0x8d,0xeb,0xed, - 0xee,0x7d,0x13,0xe4,0x90,0x96,0x97,0x94,0xcf,0xe0, - 0x21,0x49,0x7f,0x70,0x59,0xa2,0x50,0x50,0x26,0xef, - 0x33,0xb5,0xf2,0x30,0x42,0x63,0x8c,0x45,0x47,0xaf, - 0xc8,0x49,0x81,0xe1,0x31,0xc5,0x1e,0xe1,0x6c,0x48, - 0xf9,0x18,0x6e,0xeb,0xd3,0x5c,0xbc,0x51,0x47,0xf7, - 0x48,0xd4,0xf6,0xd7,0xab,0x27,0x16,0xc6,0xbe,0x0c, - 0x4c,0x84,0x4c,0xfc,0xf5,0x16,0x60,0xb9,0x11,0xc0, - 0x42,0xeb,0xe9,0x9a,0x79,0x1a,0x9e,0xd9,0xe8,0xb1, - 0x2a,0x5d,0x06,0xf6,0xe9,0x4c,0xc8,0x0c,0x3f,0x2d, - 0x13,0x5a,0x19,0x02,0x3a,0x1e,0x42,0x48,0xe7,0x87, - 0x0b,0x1f,0x68,0xed,0xce,0x65,0x64,0x82,0x0d,0x79, - 0xdf,0x65,0x66,0xca,0x30,0xe9,0xcc,0x2c,0xd0,0xfd, - 0x14,0x04,0xe9,0x6d,0x70,0x31,0x34,0x93,0x7a,0x05, - 0x80,0x5f,0x73,0xea,0x7f,0xb4,0x8a,0x9f,0xc5,0x0e, - 0xbc,0xfd,0xb5,0x3c,0x26,0xe9,0xe7,0xcf,0x78,0xa2, - 0xcb,0xc6,0xa8,0xaa,0x29,0xe8,0x88,0x42,0x59,0xa7, - 0x63,0xe7,0xd8,0xb5,0x1c,0x3b,0xdd,0xb3,0x3e,0x04, - 0xa7,0x70,0xe3,0x29,0x69,0xab,0x1a,0x1a,0x09,0xb1, - 0x17,0x03,0x2c,0xf5,0x30,0xcd,0xe4,0x53,0x1f,0x2e, - 0xa6,0x4c,0xcc,0xa7,0x0a,0x9d,0xb1,0x19,0x4c,0x30, - 0x2f,0x7f,0x46,0x35,0x2f,0x09,0x23,0x0e,0xc7,0xa7, - 0x62,0xa6,0xcf,0xee,0xb4,0x73,0x2d,0x0e,0xb1,0xc1, - 0x22,0x0a,0xbc,0xb8,0x9f,0xdc,0x1c,0x02,0x48,0x22, - 0xbb,0x33,0xa3,0x38,0x0d,0xb3,0x30,0x04,0x5b,0x70, - 0xd5,0xd9,0x7c,0x2d,0x99,0x92,0x2d,0x90,0x96,0x6a, - 0x6a,0x66,0x4a,0x9f,0xeb,0xc0,0x06,0xdf,0xd7,0x92, - 0xd3,0x4b,0xa8,0x51,0xc1,0xc7,0xab,0x04,0xf8,0x4d, - 0x6d,0xfe,0x64,0x4c,0x87,0xf8,0xcd,0xe7,0x9f,0x7e, - 0x96,0x11,0x9e,0xc4,0x71,0xf3,0x3d,0x0f,0x1b,0x61, - 0x57,0x6d,0xa3,0x53,0x64,0x73,0x65,0x9e,0xa7,0xfd, - 0x4a,0xdd,0xbc,0xcd,0xb2,0x19,0x3d,0x23,0xc6,0x16, - 0x34,0x3c,0x6b,0x27,0x75,0x75,0x72,0x1f,0x0d,0xbc, - 0x16,0xe3,0x22,0xb6,0x8c,0x8d,0x95,0x56,0x53,0xda, - 0x45,0x6d,0xaf,0x69,0x02,0x4f,0x4b,0xc9,0xb5,0x21, - 0xb0,0x7c,0xec,0x78,0x90,0x7d,0x61,0xec,0x6e,0x50, - 0x27,0xe3,0x76,0x66,0xb0,0x13,0x44,0xf7,0x7c,0xc2, - 0xa8,0xc5,0x6e,0x2c,0xca,0x5d,0xac,0x85,0xa5,0xfe, - 0xeb,0x10,0x70,0x04,0xc8,0x2f,0x39,0x74,0x0a,0x6f, - 0xbf,0xce,0xed,0xd7,0x98,0xc4,0xd2,0x0d,0xa2,0x76, - 0x37,0xb4,0x21,0x29,0x0a,0xc4,0xb3,0xe2,0x9a,0x9a, - 0x66,0xa8,0xca,0xd4,0x4c,0xc4,0xb3,0xa7,0x25,0xc0, - 0xad,0x06,0xf6,0xb9,0xdd,0xb5,0x1f,0xdb,0xff,0x1c, - 0xae,0xc0,0x07,0x23,0xc0,0x3c,0x2c,0x70,0x8e,0x07, - 0x46,0xa2,0xa3,0xe1,0x5a,0x45,0x19,0x38,0x2b,0xff, - 0xb3,0x67,0x4b,0xec,0x92,0xf1,0x5e,0x83,0x73,0x0b, - 0xd1,0xef,0xc3,0x0c,0x76,0xe8,0x25,0xf1,0x00,0x53, - 0x65,0xbf,0x5b,0xe0,0xb6,0x89,0x01,0xd7,0x32,0xbb, - 0xae,0x01,0x85,0xeb,0x40,0x6c,0xdc,0xd8,0x6c,0x50, - 0x80,0x68,0x1e,0x78,0x3a,0xcd,0x57,0xa8,0xb3,0x54, - 0x1f,0x3f,0x64,0x5d,0x02,0xf6,0x53,0x28,0x18,0x80, - 0x27,0x5f,0x54,0x5f,0xf9,0xd7,0x77,0xd3,0x46,0xa8, - 0xf5,0xdc,0x87,0xdb,0x7c,0x61,0xf6,0xfd,0xbd,0xfb, - 0xe3,0xf6,0xe9,0x70,0x90,0x14,0x75,0x93,0x44,0x69, - 0xf5,0xd0,0x5c,0x85,0xb5,0xfe,0x47,0xb3,0x50,0x2b, - 0xb3,0x19,0xe4,0x02,0x05,0xa5,0xbd,0x48,0x3b,0xf9, - 0x67,0x01,0x00,0x75,0xd4,0xe2,0xed,0x3d,0x7a,0x8b, - 0x92,0xe1,0x7e,0x99,0x3e,0x44,0xfb,0xb1,0x6b,0xe6, - 0x25,0xd6,0x20,0x33,0x46,0x80,0x06,0x16,0xed,0x40, - 0xc3,0xae,0x4c,0xf4,0x0e,0x79,0x9f,0x75,0xc8,0xae, - 0x3d,0xad,0x80,0xec,0xb2,0xd8,0xf4,0xda,0x7a,0x76, - 0x5d,0x11,0x77,0xca,0xc2,0xde,0x46,0x06,0xc3,0xaf, - 0x9b,0x27,0x1e,0x62,0x6b,0x15,0xd1,0xb3,0x40,0x6a, - 0x6a,0x98,0x04,0xb6,0x59,0x73,0x29,0x90,0x85,0xa2, - 0x86,0x95,0x29,0x9e,0x6b,0xa4,0x85,0xcb,0xe0,0xde, - 0x8c,0x4b,0xd7,0x9c,0xbf,0x2d,0xaa,0x4e,0xde,0x2f, - 0x8a,0x5d,0x3e,0x1a,0xab,0x3a,0x7b,0xda,0xbd,0x2c, - 0x4f,0x84,0x11,0x12,0xa6,0xf8,0x2a,0x29,0x8a,0x42, - 0xb2,0xc5,0x5c,0x7f,0xb7,0x07,0x4e,0x0d,0x5a,0xd6, - 0xfb,0x58,0x02,0x77,0x31,0x1d,0x25,0xf7,0xd9,0x2f, - 0x8a,0xe8,0x79,0x60,0x6f,0x22,0xae,0x91,0xaf,0xa7, - 0xbb,0x3a,0x7e,0x93,0xae,0xe3,0x79,0xd1,0xcf,0x13, - 0x79,0x3f,0xd9,0x4b,0x47,0xf8,0xfa,0x11,0x79,0xff, - 0x88,0x67,0xe0,0xd0,0x22,0x23,0x42,0xa8,0xb9,0x27, - 0xef,0xf7,0xae,0xae,0xb9,0xd8,0x94,0xff,0x02,0x8e, - 0x96,0xe8,0xb7,0x7e,0x07,0x18,0x73,0xb8,0x64,0xe7, - 0x5f,0xb8,0x26,0x0f,0xad,0xb5,0xd5,0x5a,0x46,0xa7, - 0x03,0xc0,0x5a,0x6c,0x46,0xde,0x67,0x32,0x43,0xc5, - 0x7e,0xa1,0xd7,0xfe,0x68,0x55,0x0d,0x00,0xaa,0x4e, - 0x6f,0x2d,0xdf,0x5f,0x60,0x20,0x4f,0x98,0x09,0x6a, - 0xd1,0x83,0x11,0xcd,0x3b,0x22,0x39,0xdc,0x69,0xc8, - 0x49,0x32,0xe1,0x92,0xe3,0x42,0xe7,0x5c,0x5d,0xe4, - 0x7d,0x15,0x0d,0x61,0x89,0x56,0x12,0x6d,0xca,0xe7, - 0xd8,0xf4,0x00,0xe8,0xd3,0x9d,0x6a,0xa0,0x32,0x34, - 0xe0,0xca,0x18,0x77,0xea,0xe0,0xbc,0xde,0xfd,0xf5, - 0x37,0x23,0x39,0x07,0xe8,0x0b,0x79,0x33,0xdd,0x26, - 0x05,0xa1,0x7f,0xbe,0xad,0x87,0xf1,0x78,0xae,0xef, - 0xc1,0x43,0xdd,0x67,0xdf,0x19,0xea,0x44,0xc8,0x4d, - 0xde,0x77,0x2c,0x30,0xee,0xad,0x90,0x10,0x39,0x45, - 0xdb,0xd1,0xa5,0xd0,0x9e,0x68,0x4d,0x2e,0x4b,0x5d, - 0x5b,0x57,0x63,0x0e,0xa4,0x2c,0xd5,0x62,0x16,0xf3, - 0x0b,0x4d,0xb1,0x79,0x16,0x51,0x35,0xf2,0x3e,0xa8, - 0x76,0x6b,0xa7,0xac,0x6e,0x4b,0xde,0x3f,0x00,0x1b, - 0x6c,0x62,0x1e,0xb0,0x92,0xa5,0x33,0x2b,0xb9,0xd0, - 0x79,0xca,0x0e,0xf9,0x72,0xd0,0x29,0xe6,0x1d,0x74, - 0x49,0x35,0x55,0xe0,0x6d,0x8a,0x01,0x55,0xc3,0x95, - 0x06,0xba,0xc5,0xc1,0xae,0xd7,0xc2,0x86,0x0e,0x20, - 0xd5,0x6e,0x4a,0x13,0x45,0x2f,0xc0,0x89,0x05,0x5e, - 0x28,0xe1,0xd7,0x84,0x65,0x11,0x4a,0x20,0xd9,0xd2, - 0xff,0xdc,0x1a,0x6c,0x07,0x8b,0xa4,0x87,0xf4,0x79, - 0x99,0x30,0x9e,0x8c,0xed,0xbf,0x7d,0xc4,0x80,0xa3, - 0xe1,0x72,0xd1,0x50,0xe7,0xec,0x71,0x00,0xda,0x6e, - 0x17,0x0c,0x3d,0x1a,0x22,0x00,0x8c,0x0c,0x4a,0x73, - 0x1d,0x78,0xab,0x23,0x24,0x81,0xd8,0x33,0xf6,0x13, - 0x98,0xae,0x7b,0xbf,0x26,0xde,0xd8,0xb5,0x1a,0x13, - 0x24,0x6a,0xe3,0xa8,0xa1,0xc1,0x57,0x26,0x30,0x99, - 0xee,0x29,0xd1,0xb1,0x01,0x4b,0x6d,0x1d,0xc9,0xde, - 0xa9,0xc9,0x17,0x61,0x15,0x6d,0x83,0x99,0x65,0x58, - 0x71,0xf0,0x45,0x65,0x4f,0x56,0x6f,0xc2,0x0b,0x45, - 0xc7,0x06,0xa7,0x65,0xd0,0xde,0x43,0x21,0x17,0x21, - 0x3a,0xb5,0x55,0x53,0x8f,0xb6,0xcb,0xa0,0x3e,0x23, - 0xda,0x85,0x41,0x93,0x52,0xf7,0x82,0x0d,0xe6,0x58, - 0xb5,0x46,0xaf,0x97,0xa4,0xd9,0x6a,0x4d,0x7e,0xfd, - 0x76,0x69,0xff,0x65,0xfc,0xf8,0xa9,0x32,0x11,0x8f, - 0xf8,0xe2,0x41,0x11,0x23,0x15,0x3b,0xdc,0x8c,0x09, - 0xef,0xc9,0xfb,0x75,0xc1,0x84,0x81,0x8c,0x9c,0xe1, - 0xd0,0x50,0x76,0xb4,0x3e,0x33,0x36,0x94,0xe3,0xb1, - 0xe5,0x25,0xad,0x3d,0xaa,0xe1,0x1f,0xac,0x82,0xa4, - 0x13,0x02,0x54,0xe3,0xca,0x68,0x9a,0xac,0xbd,0x66, - 0x74,0xe4,0x9c,0x23,0x10,0x6f,0x46,0x9d,0x01,0xd8, - 0xce,0x84,0xc3,0xe4,0xc1,0x56,0x9a,0x0c,0xa4,0xc7, - 0xde,0x67,0x13,0xf4,0xbd,0x42,0x2f,0x40,0xaf,0xdd, - 0x79,0x7c,0x2a,0x6a,0xdf,0x1e,0x66,0x14,0x4b,0x66, - 0xd6,0x28,0x36,0x9c,0x93,0xea,0x7b,0x20,0x9d,0x11, - 0xd0,0x70,0xd6,0x0e,0xfc,0x12,0x6c,0x1a,0x04,0x95, - 0xe9,0xd7,0xa9,0xcf,0x90,0xd2,0x60,0x65,0x71,0xdf, - 0x1c,0x0d,0x4e,0x9d,0xb1,0xef,0xb2,0xe4,0xeb,0x77, - 0x2d,0xbe,0x1f,0x34,0xf2,0xf8,0xbb,0x8f,0x83,0x77, - 0x9d,0x7d,0x96,0x56,0x07,0xb7,0xcd,0xbd,0x11,0x91, - 0xe7,0x93,0xc4,0x57,0x9a,0xd7,0x3a,0x97,0xc8,0x8c, - 0x8c,0xb9,0x0a,0x52,0x21,0xd4,0x66,0x38,0x78,0x08, - 0xf9,0xa3,0xc5,0x9c,0x4e,0xef,0x72,0x93,0x4a,0xde, - 0x17,0x3e,0x0c,0x32,0x50,0xe9,0xa9,0x77,0x5b,0xc0, - 0x58,0x8b,0x84,0x21,0x6e,0xb0,0xce,0x11,0xb0,0x80, - 0xca,0x5c,0x6d,0xae,0x80,0xc1,0xd4,0xf7,0x5e,0x29, - 0x7b,0x50,0x79,0x6e,0x93,0x79,0xb5,0x01,0x82,0x96, - 0x5d,0xa1,0x6b,0xa3,0xb0,0x63,0x48,0x33,0x3c,0xb2, - 0x9a,0x84,0xc2,0xa4,0xe3,0xca,0x82,0x96,0x90,0x5b, - 0x26,0x2f,0xcb,0x31,0xb3,0xec,0xd8,0x4b,0xfd,0x88, - 0xa1,0xdb,0x14,0x50,0x09,0x2b,0x03,0x96,0x8c,0x25, - 0x45,0x17,0xd0,0xf4,0x2d,0x2f,0x66,0x23,0xea,0x26, - 0xf9,0xcf,0xdb,0x83,0xe3,0x87,0x6f,0xe5,0xae,0x24, - 0xc8,0xe4,0x7d,0x16,0xbc,0xe6,0x06,0x32,0x2b,0xda, - 0x94,0xd8,0xb6,0xfc,0xf6,0x09,0x44,0x9f,0xe1,0x47, - 0x30,0xb5,0x87,0xa1,0x8d,0x60,0xfd,0x50,0x7b,0x50, - 0x75,0xc6,0x7d,0x13,0x65,0x10,0xac,0xc8,0x76,0x41, - 0x92,0x3d,0xda,0x6d,0xb0,0x41,0x36,0x00,0xf0,0xd4, - 0xd8,0x80,0x7d,0x97,0xb6,0xd7,0x8b,0x16,0x1e,0xeb, - 0x34,0xdb,0x2c,0x5c,0xbc,0x85,0x4f,0xed,0x16,0xac, - 0x66,0x20,0x05,0x28,0x73,0x99,0x33,0x36,0xcb,0xdc, - 0xb1,0x19,0x91,0xe9,0xa5,0x4a,0x9b,0x90,0x2b,0x49, - 0xc6,0x02,0xf0,0x54,0x7b,0x94,0xd4,0x6b,0x75,0x2e, - 0x75,0x93,0x53,0x74,0x9d,0x45,0x18,0xab,0xb5,0x17, - 0x2a,0xc3,0x8e,0x29,0xa3,0x9f,0x91,0x26,0x66,0xd4, - 0x00,0x84,0x22,0x1d,0xb8,0x60,0x02,0x7e,0xca,0x1d, - 0xf8,0x2f,0xb1,0x83,0x11,0x76,0xe8,0x67,0x6f,0xde, - 0x29,0xed,0xbe,0x1d,0x94,0x4e,0xf1,0xc6,0x59,0x86, - 0xe0,0x59,0x9c,0x24,0x6e,0xcc,0xc9,0x90,0x8f,0xeb, - 0x25,0xe3,0xc5,0x27,0x44,0x17,0x96,0x42,0x73,0x13, - 0x24,0x5b,0x0a,0xae,0xc8,0xb4,0x91,0xf7,0x95,0x6b, - 0xbe,0xca,0x73,0x6c,0xf0,0xbc,0xe6,0x4c,0x2f,0xc1, - 0x48,0xa2,0xa8,0x00,0xa5,0x0d,0x0c,0x9e,0x3b,0x2d, - 0xeb,0xfb,0xd4,0xea,0x1b,0x1c,0xdb,0x1e,0x6e,0xc2, - 0x5b,0x6f,0x2c,0x9c,0x20,0x6a,0x39,0x60,0x28,0x29, - 0xc6,0x68,0xe4,0xfd,0x32,0x8d,0x2d,0x26,0x9d,0x28, - 0x39,0x19,0x7b,0x22,0x76,0xe9,0x1f,0x98,0x46,0xa1, - 0xce,0x9b,0x42,0xaf,0x35,0xbc,0x4a,0x7c,0xcd,0x4e, - 0x22,0x20,0x9c,0x14,0x18,0xf9,0xc2,0x38,0x24,0x30, - 0xb9,0x21,0xb3,0x06,0xbb,0xaf,0xbf,0x58,0xab,0xcf, - 0xbe,0xf3,0xa0,0x51,0xcd,0x3d,0x07,0x80,0x6f,0x1e, - 0xe6,0x6e,0x32,0xef,0x34,0x35,0xb7,0x9d,0xbd,0xb9, - 0xb3,0x29,0xf4,0xa7,0x91,0xfb,0xb1,0xe4,0xbd,0x32, - 0xc1,0x26,0x8f,0x1e,0x1d,0x70,0xaa,0xb1,0x23,0xd8, - 0x55,0x85,0x07,0xa0,0xfd,0xde,0xa5,0x66,0x03,0xf5, - 0x14,0x5a,0x4c,0xf2,0xd5,0xd3,0x67,0x90,0x6b,0xa3, - 0x39,0x6a,0xb9,0x07,0xb1,0xeb,0xff,0xb1,0x32,0xf1, - 0x94,0x6f,0x57,0xb6,0x42,0xe6,0x18,0xd9,0xc9,0xfb, - 0xe1,0xde,0xb1,0x88,0x5e,0x76,0x18,0x15,0x6d,0xf8, - 0x57,0x19,0x74,0xf3,0x5c,0x4d,0xf3,0x90,0x34,0x39, - 0x35,0x5c,0x0b,0xba,0x16,0x62,0x88,0xda,0xc2,0x0c, - 0x20,0xa1,0x6e,0x56,0x22,0xb7,0x1e,0x70,0x0a,0x4c, - 0xa7,0x64,0x55,0x35,0x36,0x89,0x70,0xc7,0x0c,0x90, - 0xc0,0xde,0xee,0x11,0xfd,0xf5,0x68,0x35,0xfd,0x19, - 0x79,0x7f,0xf3,0x02,0xde,0x51,0x26,0x38,0xbf,0x86, - 0xb8,0xc8,0xde,0xff,0x9e,0x3c,0x08,0x71,0xe3,0x38, - 0x07,0x74,0x73,0x09,0x2b,0xc5,0x77,0x51,0x8e,0x3b, - 0xa6,0xe0,0x8e,0xbc,0x9f,0x5a,0x96,0xa3,0xb5,0x97, - 0xcb,0xc3,0xc1,0x81,0x96,0x25,0xc1,0x65,0x24,0xc8, - 0x81,0x2d,0x76,0xe2,0x73,0x07,0xe1,0x6a,0xb3,0x66, - 0x08,0xeb,0x91,0x47,0x51,0xaa,0x2d,0xe6,0x20,0xc0, - 0x7e,0xc4,0x63,0x18,0xcd,0x7a,0xb8,0xf6,0x9d,0x7b, - 0x2e,0x50,0xea,0xf3,0x3a,0xd5,0x8f,0x20,0xb8,0x0c, - 0xab,0x95,0xeb,0xbd,0xbc,0x66,0x1b,0x20,0x76,0xe3, - 0x9c,0xe7,0x9d,0x26,0x49,0x55,0x95,0xd8,0x0c,0xcb, - 0xcb,0xfd,0xd3,0xe3,0x64,0xc3,0xbb,0x30,0xb0,0x2b, - 0x63,0xe8,0xde,0x57,0x10,0x0c,0xa2,0x07,0x03,0x72, - 0xb5,0x7c,0xcf,0xd6,0x60,0xff,0xc4,0x78,0xc0,0x1b, - 0x49,0x06,0x1f,0xbc,0xca,0x5f,0xc5,0x9e,0xe7,0x47, - 0xc0,0xb8,0x6b,0xbf,0x9b,0x9a,0xd0,0x6d,0x84,0xc3, - 0x8e,0x97,0x40,0x49,0xe6,0xb4,0x28,0x73,0x6f,0x62, - 0x0d,0x9c,0x40,0xec,0xb6,0x97,0x4e,0x72,0x61,0xa7, - 0x2e,0xf6,0x99,0x9f,0xe5,0xe2,0xd3,0x72,0x2e,0xa4, - 0x7c,0x41,0x82,0x8a,0xf4,0xe4,0x63,0xe6,0x77,0x8d, - 0x18,0x23,0xd5,0xd2,0x02,0x20,0x42,0x3a,0x25,0x4c, - 0xec,0x02,0xb4,0xf9,0xa3,0x32,0x77,0x3f,0x96,0x4c, - 0x58,0x59,0xa6,0x1b,0xd7,0xf6,0x12,0x38,0x41,0x91, - 0x0c,0x37,0x68,0xb6,0xb4,0x23,0x11,0x6a,0x5a,0x11, - 0xf5,0xa0,0x0f,0xc2,0x29,0x62,0x87,0x7c,0x51,0x61, - 0x52,0x68,0xac,0xb2,0x6f,0x10,0x00,0x50,0xe5,0xc6, - 0x38,0xde,0xa6,0x03,0xef,0xb1,0xaf,0xcf,0x27,0x04, - 0x7c,0x06,0x08,0xbe,0x1d,0xb3,0x36,0x79,0xfc,0x23, - 0x4a,0x23,0x0e,0xb0,0x00,0xce,0xd2,0x04,0xd8,0x81, - 0x99,0x28,0x45,0x1f,0x63,0x50,0xdb,0xb7,0x25,0xc7, - 0xa8,0x26,0x96,0x4f,0x42,0x96,0xef,0x6e,0x09,0xb1, - 0x98,0xa3,0xad,0x0f,0x65,0x51,0x46,0x99,0x8f,0x37, - 0x02,0xcc,0xc8,0x2c,0x63,0x95,0x3c,0x9b,0x7a,0x00, - 0x70,0xfa,0x01,0x37,0x06,0x31,0x68,0xe7,0x82,0x80, - 0x77,0x50,0xcd,0x3d,0x54,0x8b,0xdf,0x8c,0x4a,0x1c, - 0x50,0x85,0x02,0x15,0x5a,0x48,0x87,0x6b,0x32,0xf7, - 0x76,0x8e,0xe6,0xf8,0x53,0x32,0x4e,0xa8,0xf9,0x29, - 0x33,0x81,0x49,0xb5,0x17,0x5b,0xf9,0xc8,0xc8,0xe1, - 0x82,0xfc,0x76,0xcd,0x3a,0xe9,0xd2,0x04,0x95,0xc3, - 0xfd,0x12,0x26,0xfd,0xfa,0xd5,0x62,0x7d,0x62,0x12, - 0xf1,0x17,0xad,0x02,0xec,0xab,0xf7,0x3c,0x8e,0xe2, - 0x6c,0x6e,0x3b,0x56,0xfc,0xfe,0x48,0x97,0x0b,0xcb, - 0x4d,0x02,0x80,0xfd,0x1f,0x11,0x2c,0xa6,0xfd,0x61, - 0x68,0xf5,0x21,0xf7,0x51,0x39,0x86,0xac,0x83,0x91, - 0x91,0xc9,0x07,0xe4,0x01,0x18,0x23,0xe8,0x41,0x31, - 0x8b,0x22,0x4d,0x80,0x06,0xf4,0xd1,0x65,0xb4,0x4a, - 0xba,0x82,0x80,0x7c,0xa3,0x08,0x66,0x50,0x76,0x32, - 0xbd,0xdb,0x75,0x5e,0x82,0x22,0x4d,0x70,0xf5,0xc1, - 0x45,0x92,0xeb,0x15,0x08,0xc8,0x90,0x19,0x78,0x35, - 0xa5,0xa3,0xda,0x1b,0xed,0x09,0x96,0x19,0x84,0xb5, - 0x42,0x4b,0xc1,0xa3,0x00,0xea,0xce,0xf0,0x04,0x35, - 0x3b,0x5b,0xde,0x5f,0xeb,0xfb,0x49,0x95,0x6a,0x67, - 0x03,0x8c,0x8d,0xeb,0xbd,0xac,0x03,0xae,0x73,0x23, - 0x5f,0xea,0xc8,0xeb,0x85,0x0f,0xab,0x02,0xe3,0xb1, - 0x35,0xf7,0xb3,0xdd,0x99,0x6f,0x1e,0x45,0xb2,0xbd, - 0xcc,0x46,0x0b,0xfc,0xc8,0xf9,0x6e,0xc2,0x41,0x94, - 0xe3,0xda,0x28,0x66,0x79,0x7a,0xcf,0x20,0x25,0x0e, - 0x34,0xda,0x7e,0x31,0x57,0x25,0x7b,0xe3,0xfc,0x71, - 0xf0,0xe4,0x41,0x9a,0x20,0xec,0xc3,0x6e,0xee,0x49, - 0x34,0xf7,0xed,0x96,0x2b,0xd0,0x8d,0x35,0x82,0x34, - 0xd9,0xec,0xc3,0xb3,0x4e,0x72,0x91,0x4d,0xe2,0x0c, - 0xee,0x56,0x54,0xa6,0x89,0x43,0xde,0xa2,0xa3,0xbd, - 0x65,0x17,0x67,0x19,0xb1,0xa5,0x8d,0xcd,0xba,0xdd, - 0xea,0xf9,0x7a,0xd2,0x16,0x7c,0x78,0x9a,0x11,0x80, - 0xda,0x10,0xf4,0x47,0x1b,0x61,0x36,0x3e,0x04,0x84, - 0xd1,0x34,0x6a,0xa0,0xa0,0xfc,0xbd,0x29,0x2d,0xe1, - 0xdb,0x41,0x49,0x7b,0x47,0x5f,0x9f,0x80,0xfc,0x71, - 0xb7,0x79,0x3f,0x4e,0xb1,0xef,0x7a,0xfc,0x63,0xb3, - 0xbf,0xdf,0x7d,0x7f,0x67,0xef,0x45,0xd8,0xe6,0x61, - 0xf0,0xc2,0x8f,0x2e,0xcc,0x33,0x99,0x2f,0xdb,0x82, - 0x72,0xaa,0xe1,0xb6,0x5f,0x4b,0xa9,0x64,0x73,0xa9, - 0xb9,0xa9,0x7c,0x96,0xe2,0xc5,0xc2,0x99,0x5d,0x9a, - 0x4b,0x29,0xbe,0x9c,0x79,0x6a,0xa1,0x9f,0x36,0xdb, - 0xeb,0x1e,0xd8,0xb2,0xe4,0x4a,0x97,0x26,0x98,0xfe, - 0x06,0x10,0x82,0x0c,0x5e,0x0a,0x3c,0xe8,0x81,0x53, - 0x25,0xd4,0x9b,0x8c,0x66,0x51,0x25,0x16,0x0c,0x44, - 0x07,0x62,0x80,0x0d,0x30,0x8b,0x51,0x44,0x48,0x99, - 0xd5,0x55,0xd4,0xe9,0x97,0xa8,0x25,0x59,0x99,0xeb, - 0xc0,0x92,0x1f,0x2b,0xa5,0x45,0x9b,0x9d,0xb0,0x6c, - 0x27,0x6e,0x60,0xaa,0xf2,0x5c,0xf2,0x4f,0x7b,0xb7, - 0xd6,0x0a,0x8a,0xed,0xac,0x81,0xaa,0x5b,0x67,0xa0, - 0x8f,0x24,0xf5,0x3f,0x2a,0x15,0x78,0x84,0xfb,0xe0, - 0xb3,0xea,0x37,0x76,0x61,0x9a,0xdb,0x32,0x04,0x9c, - 0x3e,0xb7,0x13,0x26,0xce,0x9e,0x66,0x2e,0xb8,0x87, - 0x2a,0x5b,0xea,0xfe,0x98,0xc0,0xa0,0xea,0x05,0xb9, - 0x4a,0x8f,0x48,0x1a,0xd2,0x61,0x42,0xbe,0x09,0xb1, - 0x94,0xd2,0x79,0xf9,0xe8,0x4a,0xdc,0x0c,0x3f,0x18, - 0x0d,0x4f,0x40,0x55,0xf9,0xdd,0xd7,0x47,0xc5,0x0f, - 0x55,0x53,0x60,0xee,0x45,0x5b,0x9c,0x91,0xb9,0x54, - 0xc8,0x68,0xc3,0x35,0xdd,0x1b,0xad,0xee,0xd6,0xb4, - 0x09,0x48,0xf3,0xa2,0x44,0x3d,0x2e,0xbe,0x02,0x63, - 0x6f,0x55,0xae,0x6b,0x98,0x1c,0x80,0x28,0x69,0x7c, - 0xb3,0xfb,0x98,0xd2,0x04,0x5c,0xc6,0xa3,0x88,0xa8, - 0x42,0x33,0x2e,0xb9,0xe6,0x16,0x48,0x76,0x60,0x5c, - 0x82,0x21,0x66,0x0b,0x84,0xf7,0x25,0xc0,0xdf,0x34, - 0x03,0xf0,0xe0,0x61,0xc7,0xe1,0x93,0xe8,0xe8,0x34, - 0x9e,0xfd,0xee,0xbb,0xd2,0x04,0x3b,0x26,0x33,0x23, - 0xcc,0xfb,0x24,0x8e,0x99,0x27,0x1c,0x7c,0x51,0x1b, - 0x8a,0xc1,0x04,0x80,0xa9,0x50,0x86,0x2e,0x40,0x9b, - 0x24,0xbb,0x97,0x26,0x70,0x55,0xb9,0xf9,0x17,0x55, - 0xd1,0x71,0xdf,0xba,0xb4,0x30,0x60,0xf0,0x5b,0x14, - 0x4d,0xa1,0xf3,0x23,0xd8,0xec,0xc3,0x7a,0xb3,0xa3, - 0x4c,0x22,0xc5,0x1b,0x84,0xe2,0x48,0xb4,0x3a,0x12, - 0xb5,0x12,0x5f,0x8b,0xec,0xa2,0x47,0xaf,0xf9,0x86, - 0x65,0xfa,0xb9,0xb3,0x04,0x2b,0xf7,0x86,0xa2,0x6e, - 0x6c,0x5d,0x03,0x90,0xbd,0xf5,0x3b,0x49,0x38,0x2e, - 0x4d,0x80,0x42,0x11,0x86,0x4a,0x8f,0x4b,0xd4,0x6d, - 0x20,0x2a,0x11,0x0a,0x5f,0xce,0x59,0x05,0xbc,0x7c, - 0x10,0x08,0x51,0x46,0xc6,0xc2,0x4f,0x28,0x82,0xb0, - 0xbf,0xc4,0x00,0xf8,0xc1,0x77,0xbd,0xb1,0x1b,0x8e, - 0xed,0x90,0xed,0xa3,0x1f,0x46,0x5a,0x60,0xed,0xa3, - 0x5d,0x9e,0x19,0xf9,0x09,0xad,0x48,0xcb,0x4f,0xa5, - 0x09,0x88,0xb1,0x71,0x0a,0xf0,0x55,0x54,0x73,0x18, - 0x8c,0x38,0x07,0xd0,0x6a,0xcd,0xb1,0xd9,0xc1,0xe7, - 0xe9,0xec,0x67,0x68,0x81,0x03,0x6a,0x18,0x5f,0x70, - 0x77,0x62,0x96,0x0c,0x8b,0x08,0x4e,0xa5,0xac,0x5c, - 0x01,0x65,0xe4,0xcd,0x14,0xdb,0x19,0x89,0xac,0xbb, - 0x3b,0x67,0x90,0x41,0x9b,0xa3,0x4a,0x1d,0xf5,0xab, - 0x65,0x88,0xd1,0xfb,0xf4,0x43,0xe4,0xb8,0x7c,0xb4, - 0x1a,0x18,0x1b,0x1b,0xf8,0xb5,0x31,0x31,0x81,0x40, - 0x70,0x67,0xe3,0x05,0x18,0x52,0xc8,0x06,0xdc,0x95, - 0x6f,0xd6,0x65,0xe8,0xd2,0x04,0xeb,0x7a,0xb9,0x8e, - 0xc0,0x70,0x6c,0xf1,0x09,0x1b,0xf0,0x1d,0xc9,0xce, - 0xdd,0xa0,0x1c,0xc7,0x9b,0x35,0x33,0x7f,0x17,0x7c, - 0x72,0xdb,0x88,0xd1,0x8a,0x1e,0x07,0x80,0x1c,0xa1, - 0x12,0xd7,0x76,0x0b,0xb2,0x74,0x44,0x2b,0xb9,0x1e, - 0x1d,0x3f,0xb1,0x79,0xa0,0x38,0xaa,0x14,0x6c,0xad, - 0x0b,0xa9,0xfc,0x7d,0x2d,0x2f,0xe0,0xe8,0x92,0x7c, - 0xc5,0xd6,0x66,0x1c,0xa3,0xb2,0x5e,0x1e,0xdc,0x8a, - 0xa8,0x5f,0xcf,0x0e,0x6e,0x75,0x71,0xec,0x5c,0xa2, - 0x94,0x0e,0x84,0xaa,0x8d,0xc9,0x90,0x90,0x4e,0x49, - 0x25,0x83,0xd4,0x2e,0x4d,0x20,0x3b,0xe1,0x10,0x05, - 0x1f,0x03,0x38,0x39,0x0e,0xd2,0x04,0x18,0x49,0xb9, - 0x70,0x75,0x2f,0xd1,0x54,0x99,0x10,0xbc,0x1d,0x95, - 0xb8,0x33,0xd3,0x7b,0xc3,0x79,0x8b,0xdc,0xda,0xb0, - 0xd6,0x65,0x71,0x58,0xea,0x13,0x85,0x2e,0x66,0xe3, - 0x43,0x42,0xf4,0x08,0x76,0xdf,0x05,0x78,0xaf,0x00, - 0xc0,0xaf,0xbf,0xe1,0x0d,0xbc,0x20,0xd0,0x74,0xc9, - 0x9d,0x87,0x11,0xc6,0x3d,0x2d,0x80,0xb7,0x20,0x1d, - 0x36,0xd3,0x80,0x48,0x75,0xf1,0xed,0x60,0xf2,0xae, - 0x2f,0xa1,0x75,0x2c,0xaa,0x0d,0x77,0xd0,0x8e,0xd8, - 0xf3,0x06,0xd3,0x98,0x5b,0x0a,0xdc,0xac,0x35,0x32, - 0xc2,0xf5,0x38,0xcc,0x31,0x67,0xca,0x13,0xcd,0x5c, - 0xe4,0xe1,0x7d,0x25,0x8b,0xbe,0x22,0xa7,0xdf,0xa6, - 0xa2,0xe3,0x79,0x20,0x86,0x42,0x5e,0x00,0x0f,0xe5, - 0x1f,0x4c,0x26,0x4b,0xd5,0x8e,0x65,0x67,0x86,0xcd, - 0xec,0x7f,0x7f,0x2f,0x47,0x72,0x14,0x0f,0x28,0x86, - 0x59,0xab,0xb1,0x76,0x28,0x64,0xec,0xb8,0x97,0x0c, - 0x30,0xd6,0xa2,0xd4,0x57,0xdc,0x0b,0xec,0x5e,0xe6, - 0xa7,0x05,0x77,0x99,0xc2,0xa3,0xfa,0xeb,0xf5,0x39, - 0xfb,0xfa,0x14,0xd8,0x87,0x1f,0x7f,0x03,0x6f,0x5e, - 0xc1,0x11,0xd7,0xd3,0x8d,0xfe,0x16,0xbe,0xe4,0x0f, - 0xcf,0xe0,0x98,0xc6,0x48,0x5b,0xa6,0xb8,0x33,0xa4, - 0x59,0x3e,0xec,0x91,0x7f,0x75,0xbb,0x89,0x06,0x99, - 0xc3,0xc4,0xfe,0x05,0x11,0xd9,0x4a,0x13,0xb0,0xad, - 0xaf,0x3a,0xe9,0x32,0x3a,0x10,0x6a,0x0b,0x8d,0x8c, - 0xd8,0x99,0xed,0x96,0x6b,0x87,0x81,0x51,0x00,0xbb, - 0x7c,0x57,0xbf,0xde,0x2c,0xd6,0xc7,0xac,0xd6,0x69, - 0x18,0xd5,0xf1,0xa6,0x75,0x3b,0x28,0xd2,0x04,0x0a, - 0x8c,0xd6,0xc9,0x7f,0x7a,0x26,0x57,0x8e,0x7c,0x54, - 0xa9,0x74,0x91,0xf7,0x2a,0xc4,0x65,0xb1,0x2d,0x1f, - 0xcc,0xf5,0xe4,0x2c,0x06,0x80,0x02,0x0c,0x3a,0xa7, - 0xbf,0x00,0xaf,0xe8,0x29,0x3f,0x8a,0xd5,0xf9,0x8a, - 0xf8,0x1e,0x50,0x1d,0x9f,0x41,0xc2,0x8c,0x35,0x6b, - 0xa2,0x28,0x1b,0x69,0x09,0xf0,0x97,0x93,0xbf,0x7c, - 0xbc,0xe5,0x9f,0x5d,0xef,0x8e,0x43,0x2c,0x0d,0x4c, - 0xc2,0x1b,0x06,0xa5,0x21,0xd4,0xd0,0x65,0xcc,0x18, - 0x37,0xac,0x5e,0xf3,0x06,0x07,0xa0,0xdd,0x95,0x40, - 0x7c,0xd3,0x8d,0x34,0x41,0xe8,0x85,0x81,0x07,0x02, - 0x83,0x6c,0xca,0x8a,0x40,0x95,0x3a,0x78,0x14,0x23, - 0xcb,0x88,0x6d,0x0c,0x47,0xe6,0x8d,0xda,0xaa,0x9c, - 0x76,0xb0,0xd8,0x7b,0xc3,0x90,0x2c,0x4f,0x87,0xf1, - 0x5a,0x5c,0x13,0x1b,0xb0,0x7b,0xd9,0xe9,0x35,0x0b, - 0x2c,0x23,0x20,0x03,0x40,0x90,0xb9,0xfa,0x6e,0x2a, - 0x32,0x85,0x49,0xc0,0xb0,0x5f,0xb3,0x2a,0x07,0x8d, - 0x4a,0x40,0x82,0xcf,0x98,0x98,0xdb,0xdb,0xb2,0xe1, - 0xce,0x20,0x62,0xff,0xd6,0xab,0x34,0x65,0x4c,0x6e, - 0x59,0xda,0xc2,0xcb,0x0c,0x35,0xa6,0xf4,0x0d,0xef, - 0x59,0x5d,0xb2,0xa9,0x39,0x51,0x32,0xbc,0xf5,0x5c, - 0x7c,0xfd,0x7e,0x01,0xdf,0x87,0x10,0x3c,0x0e,0x13, - 0x37,0x14,0x9d,0xc3,0x3c,0x70,0x84,0xce,0x6e,0xd2, - 0xce,0x44,0xdd,0x4d,0xb2,0x55,0xd8,0xbc,0x07,0x48, - 0x48,0x75,0xc6,0x34,0x58,0xef,0xec,0xb6,0x90,0x66, - 0xa8,0x67,0x3d,0x5d,0x4f,0x6d,0xb6,0x20,0x4d,0x50, - 0x2c,0xe8,0x7a,0x80,0x92,0x65,0xa8,0x7a,0x76,0x23, - 0xb5,0xc1,0x10,0xec,0xd5,0x82,0xfc,0x18,0xac,0xaf, - 0x40,0x15,0x1c,0x95,0x98,0x62,0x93,0x8d,0xeb,0x48, - 0x02,0x73,0xa1,0xb5,0x19,0xd1,0x72,0x2a,0xb0,0x67, - 0x55,0x55,0x4b,0x49,0xdb,0x64,0x68,0x8a,0x51,0x9a, - 0x71,0x79,0xdb,0x8d,0x7a,0x4d,0xa8,0xba,0x0f,0xac, - 0x58,0xcb,0xa8,0x32,0x1f,0xda,0x9e,0xdb,0x08,0xbb, - 0x2d,0x00,0x52,0xd5,0x80,0x47,0x95,0x00,0x2b,0x61, - 0x14,0x6b,0xaa,0x70,0x26,0x66,0x32,0x63,0xc1,0x20, - 0x4c,0x8b,0xde,0x68,0x2c,0x9b,0xe9,0xd7,0xef,0x96, - 0xf6,0x27,0x33,0x83,0x1f,0x4a,0x8e,0xbf,0xf5,0x11, - 0xdc,0x9a,0x6b,0xe0,0x41,0xd0,0xc3,0xf6,0xd8,0x71, - 0xdc,0x84,0x33,0x3a,0xc8,0xfc,0xbe,0xc6,0xf5,0xef, - 0x8c,0x7b,0x87,0x21,0x95,0xb2,0x5a,0x44,0x61,0x22, - 0x2e,0x81,0xd1,0x78,0x7d,0x40,0x77,0x35,0xa6,0xa4, - 0xd9,0xa3,0xcf,0xf3,0xc3,0x6a,0xf7,0x21,0xbb,0x31, - 0xd1,0x4d,0x7c,0x87,0x75,0x2d,0x38,0x5c,0xc6,0xaa, - 0x49,0x13,0xcc,0x73,0x57,0x7d,0x3f,0xee,0x5c,0x92, - 0x31,0xb2,0x22,0x12,0xb5,0x42,0x43,0xd1,0x7f,0xf4, - 0x00,0x8f,0x6b,0x81,0xd3,0x46,0xbb,0x81,0x35,0xe8, - 0xe3,0x86,0x24,0xc3,0xac,0xce,0xc7,0xea,0x46,0x38, - 0x0c,0x43,0xa7,0x7b,0x02,0x6b,0xf0,0x89,0x2c,0xdd, - 0x1a,0xba,0xa5,0x77,0x13,0x6f,0x96,0x6e,0x45,0xb3, - 0x10,0x47,0x98,0xb3,0xa8,0x5a,0x0f,0x9f,0x11,0x04, - 0xe1,0x73,0xf1,0x6a,0x1e,0x41,0xb7,0x7b,0x19,0xea, - 0x5f,0x0f,0x26,0x61,0x83,0x27,0x32,0x20,0x02,0xdc, - 0xf3,0x0c,0x77,0x3e,0x40,0x3b,0xc3,0xdf,0xb6,0x9a, - 0xb9,0x2b,0x74,0x4e,0xb3,0x8d,0xb4,0xdd,0xd8,0xa4, - 0x26,0x75,0x7e,0x5c,0x56,0x3f,0x90,0x8a,0x1c,0xee, - 0xcb,0x2f,0x53,0xc3,0xa1,0xe6,0xbb,0x94,0x49,0xd4, - 0x91,0x33,0x05,0xad,0xe1,0xc7,0x1e,0xe2,0x1c,0xc3, - 0x7b,0xd4,0xa8,0x7d,0xfd,0x8a,0x7a,0x2f,0x71,0xcb, - 0xd9,0x4f,0x9f,0xf5,0x3a,0xcd,0x8c,0x23,0x3c,0x47, - 0xea,0x15,0x48,0xc1,0x39,0x64,0x94,0x99,0xaa,0xfa, - 0x73,0x2d,0x4c,0xfa,0xb8,0xb1,0x98,0x87,0x60,0x27, - 0x0b,0xcf,0x52,0xcb,0x73,0x6c,0xfc,0xaa,0xc0,0xce, - 0xf3,0x00,0x4a,0x39,0x56,0x74,0x06,0x41,0xeb,0x46, - 0x71,0x4a,0xbf,0x8f,0x36,0xa8,0x85,0x65,0xc8,0x10, - 0xd7,0xea,0x77,0x29,0xf4,0x99,0x00,0x80,0xe7,0xec, - 0x7d,0xdc,0xad,0xc4,0x1d,0xe7,0xfe,0x89,0x6b,0xee, - 0x6f,0x62,0xc2,0x86,0x7f,0x0f,0x3e,0xfb,0x55,0x8e, - 0x3c,0xcc,0x1c,0x36,0x8a,0x08,0x1e,0xd5,0x7a,0x3a, - 0x05,0x50,0x86,0x85,0x95,0xe4,0xb3,0xb3,0x87,0x20, - 0x70,0x87,0xb0,0x20,0xe1,0x74,0x73,0x58,0xc5,0xf8, - 0xb8,0x35,0x7f,0x30,0x27,0x70,0xa2,0xf3,0xde,0x6d, - 0xb0,0xb6,0x1f,0x05,0x24,0xc3,0x51,0x79,0xaf,0xc9, - 0x75,0x80,0xd4,0xc5,0x9e,0xea,0x22,0x1c,0x43,0x8f, - 0xbe,0x4b,0xa3,0x3f,0x64,0x24,0x14,0xc3,0x13,0xd1, - 0xe2,0x9b,0xd2,0xdd,0x8d,0xd6,0x5c,0xcb,0x8b,0x39, - 0x1e,0x4d,0xb1,0x7d,0x9b,0x2a,0xcb,0x15,0x85,0x45, - 0xc3,0x8e,0xb2,0xcf,0xf4,0xa5,0x8e,0x04,0x47,0x11, - 0x20,0xf2,0x2a,0x57,0x37,0xe1,0xf5,0xbd,0x04,0x73, - 0x46,0x7a,0xc5,0x3d,0x28,0xf1,0xe1,0xa7,0x83,0x40, - 0xfc,0xe5,0xeb,0x6f,0x65,0xf5,0xf8,0xf5,0xa2,0xe7, - 0x71,0x8b,0xbe,0xc9,0x58,0x70,0x3a,0x21,0xdc,0x96, - 0x0e,0x99,0x40,0xeb,0x00,0xa3,0xcd,0x53,0x94,0x21, - 0xf2,0x5e,0xd7,0x71,0xd3,0xf1,0x20,0x37,0xb9,0x0a, - 0xf7,0x59,0x4b,0xc1,0x1d,0x82,0x15,0x1f,0xec,0x93, - 0x47,0x4d,0x25,0xf4,0x52,0xa5,0x40,0x67,0x64,0x6d, - 0xdd,0x25,0x2d,0x03,0xc2,0x61,0xf9,0x99,0x1e,0x2b, - 0x78,0x47,0x86,0xaa,0x86,0x7c,0x81,0x82,0x4b,0x65, - 0xa7,0xc8,0xa6,0x6b,0xa7,0x65,0xd9,0xeb,0xf5,0xc1, - 0xa7,0xe6,0x76,0x5a,0x29,0xc6,0x73,0xb0,0x89,0x9c, - 0x19,0xc2,0xe4,0xd8,0xcd,0x4c,0x63,0x4d,0x1a,0xaa, - 0xda,0x52,0x07,0x39,0x6d,0xb2,0x73,0xea,0x59,0x0a, - 0x26,0x72,0x79,0x0d,0x28,0xa8,0x23,0xa4,0x26,0xe8, - 0x39,0x8d,0x34,0xb1,0xca,0x29,0x14,0x0a,0x6b,0x52, - 0x7d,0x7d,0x6e,0xa1,0xee,0x5e,0xff,0xb4,0x9e,0x18, - 0xdf,0xfe,0x56,0xec,0x0a,0x78,0x9e,0x25,0x8a,0x8f, - 0x44,0x23,0xfe,0x34,0x30,0xa2,0xc4,0x7b,0x04,0x28, - 0x00,0xbb,0xec,0x8a,0x21,0xe1,0x52,0x4b,0xae,0xf1, - 0x8c,0x70,0x94,0x24,0x42,0xaf,0x39,0x7d,0xa2,0x6a, - 0xeb,0xd5,0xa6,0x23,0x0c,0x41,0xb7,0xa1,0x9f,0xdb, - 0xb9,0x63,0xe4,0x6c,0x0e,0x21,0x0a,0xd1,0xaa,0x5c, - 0x23,0xef,0xcf,0x6a,0x07,0xbd,0xc6,0x52,0xc2,0x0f, - 0x52,0x72,0xf4,0x12,0x3d,0xa5,0xa5,0xf1,0x6a,0x62, - 0x5a,0x33,0xab,0x5e,0x98,0x5d,0xc4,0x1e,0xc0,0xa4, - 0xd0,0xe4,0xc6,0xaa,0x17,0x11,0xcb,0x35,0x4d,0x80, - 0xe6,0x22,0xef,0x77,0x95,0x66,0x14,0x2d,0x40,0x36, - 0x04,0x67,0x94,0x7e,0x45,0x8f,0xff,0x28,0x2d,0x47, - 0x9d,0x18,0xf8,0x07,0x44,0x41,0xf1,0xe1,0x4c,0x01, - 0x8f,0x62,0x10,0x4f,0x87,0x82,0x43,0xe9,0xc2,0xd3, - 0xee,0x6d,0xad,0x37,0x4f,0xe1,0x51,0x97,0x97,0xc7, - 0x19,0x22,0xa0,0xd2,0x23,0xcc,0xb7,0x3c,0xb9,0x94, - 0x9d,0xbc,0xbf,0xf9,0x0e,0xb6,0x41,0x89,0xda,0x18, - 0x63,0xb1,0x97,0x82,0x7d,0x37,0xda,0x63,0x8a,0x3d, - 0xc2,0x69,0xc1,0xb5,0xb4,0xc3,0x3c,0x78,0xf9,0x08, - 0xdc,0xdc,0xec,0x4c,0xc2,0x96,0x30,0xe5,0xdd,0x4c, - 0xde,0xbf,0x80,0x41,0xf7,0x01,0x2e,0x97,0x8d,0x9a, - 0xae,0xa3,0x28,0xa4,0xaf,0x52,0x50,0xc3,0x73,0x5d, - 0x70,0xe5,0x1b,0x31,0x84,0x90,0x66,0xac,0x3d,0x40, - 0x5a,0x8a,0x95,0x7a,0x46,0xb0,0xf5,0x28,0xae,0xf3, - 0x46,0x25,0xef,0x97,0x94,0x8e,0xae,0x1a,0xa2,0xe5, - 0x87,0x95,0x8c,0xb0,0xc2,0xa7,0x0c,0x93,0x52,0x0d, - 0x44,0x7e,0x89,0x01,0xfc,0x9a,0x53,0xff,0x74,0x15, - 0xf3,0xfd,0xdf,0x3e,0xb1,0x04,0x8f,0x43,0xc4,0xc8, - 0xc6,0x22,0xdc,0xf5,0x02,0xd0,0xf1,0x78,0x9a,0x8e, - 0xcf,0x62,0xeb,0xa2,0xef,0x9e,0x77,0xea,0x47,0x69, - 0x41,0x8f,0x91,0xc8,0xfb,0xf1,0x65,0xb6,0xd5,0x19, - 0x06,0x9e,0xc3,0xc0,0x11,0x37,0xe5,0x53,0x2f,0x06, - 0x4c,0x7f,0x0f,0xd6,0x9c,0xd4,0x49,0xbb,0x94,0x89, - 0xf9,0x54,0x21,0xb2,0xb6,0x19,0xcb,0xf5,0xc5,0x6c, - 0x85,0x29,0xc6,0x00,0x3e,0xdf,0x8c,0x66,0x10,0x8e, - 0xe4,0xfd,0x17,0x99,0xa6,0x1d,0x43,0x08,0xfa,0x1b, - 0x05,0xe0,0xca,0x0e,0x0c,0x72,0xe0,0xc3,0x6c,0xd6, - 0xc1,0x1e,0x5c,0x01,0xd3,0x5a,0x41,0x62,0x88,0xb5, - 0x67,0x81,0xea,0x58,0x44,0x9f,0xeb,0xa8,0xe2,0xb3, - 0xbf,0x0a,0x00,0x78,0x37,0x28,0xbc,0x25,0xc2,0xc3, - 0xe8,0x9c,0xe5,0x37,0xf0,0x27,0x07,0x99,0x13,0x7d, - 0x38,0x18,0x3b,0xda,0x26,0xda,0x90,0xfa,0xf3,0xe0, - 0x31,0xf7,0xe5,0xb8,0xfc,0xc7,0xae,0x9f,0xb0,0x4b, - 0x38,0x70,0x33,0x8b,0xca,0x7e,0x9d,0x79,0x02,0x0d, - 0xcf,0x62,0xc7,0xc5,0xb2,0x2e,0x68,0x52,0xad,0xc5, - 0x28,0x4a,0x38,0x9e,0x46,0x0b,0x06,0x90,0xec,0xcd, - 0x46,0x49,0xa3,0xa1,0xdd,0xea,0xf9,0x5d,0xda,0x10, - 0x58,0x86,0x1f,0x3c,0xe8,0x3b,0x32,0x3e,0x74,0xd4, - 0xc9,0x38,0x8e,0x91,0xc9,0xfb,0xa3,0x0c,0x04,0xc0, - 0xad,0xd7,0x1a,0xf0,0xc8,0xd6,0x08,0x08,0x68,0xaa, - 0xcd,0x00,0x74,0xcc,0x7b,0xe7,0x34,0x7d,0xf5,0xfa, - 0x31,0xb3,0xb2,0x1e,0xa1,0x8b,0xbe,0xa1,0x10,0x99, - 0x6a,0xca,0xbf,0x80,0x8f,0xab,0x21,0xf8,0xf1,0x12, - 0x00,0x5b,0xf4,0x6d,0x3c,0x25,0xef,0x8f,0xae,0xee, - 0x33,0x42,0x2b,0x03,0x6f,0x46,0x9f,0xfc,0x36,0x3e, - 0x08,0x25,0x6c,0xa4,0x93,0xba,0x0f,0xee,0x60,0xb5, - 0x34,0x87,0xd4,0xd3,0x7e,0x86,0x52,0xa3,0xab,0xe7, - 0xcd,0x09,0xce,0x74,0xea,0x52,0x05,0x70,0xc3,0xfd, - 0xe7,0x21,0xcc,0x6c,0xdd,0xc3,0x9b,0xca,0x6f,0x56, - 0x2d,0xe4,0x30,0xbe,0x3e,0x72,0xcf,0xf6,0x22,0xba, - 0x74,0xa6,0x9c,0x8a,0x8e,0xbc,0x68,0xb1,0xe9,0x96, - 0xfa,0x6e,0xed,0xe2,0x9f,0xa2,0xbf,0xef,0x2d,0xc9, - 0x6b,0xd8,0x06,0xcd,0xf4,0x34,0x03,0xc4,0x30,0x60, - 0x80,0xfd,0x90,0x87,0x90,0xf7,0xc7,0x12,0x2e,0x45, - 0x7c,0x44,0x89,0xda,0xe1,0x99,0x3c,0x0e,0xb2,0xb8, - 0x0e,0xb5,0xde,0x09,0x6c,0x2d,0xb0,0x3a,0xe4,0x56, - 0x33,0x16,0x1d,0x47,0x77,0xc5,0x67,0x88,0xe0,0xca, - 0x8a,0xbc,0x7f,0x6b,0x0e,0x3a,0xd3,0xe9,0xe7,0x4a, - 0x3f,0xe5,0xf5,0x4f,0x91,0xf7,0x0f,0xd9,0x43,0xf2, - 0x4c,0xef,0x1b,0x47,0x3e,0x9e,0x42,0xe0,0xa5,0x37, - 0xbd,0xd2,0x65,0x62,0x38,0x54,0x97,0xb6,0xce,0xd7, - 0x08,0xf2,0xbc,0xf5,0xb7,0xae,0x56,0x1f,0x18,0x54, - 0x81,0x10,0x90,0x13,0xe4,0x6b,0x47,0x8a,0xb2,0x6d, - 0xf7,0x01,0x1b,0x6d,0x80,0xa7,0xa5,0xed,0x75,0x1a, - 0xae,0x05,0x4e,0x74,0x31,0xce,0x59,0x53,0xa3,0xaa, - 0x9a,0x5d,0x6d,0xec,0x35,0xae,0x2c,0x06,0x1d,0x45, - 0x0d,0x6b,0xef,0xfc,0xb4,0x1c,0x73,0x83,0x6e,0x03, - 0x74,0xce,0xdf,0x16,0xd5,0x74,0x20,0x5e,0x9a,0x87, - 0xca,0x49,0xa2,0x11,0x30,0x54,0x67,0x4f,0xbb,0x97, - 0xe5,0x89,0x30,0x42,0xc2,0x24,0x27,0xbd,0xba,0x23, - 0x34,0xeb,0xb2,0x71,0xfd,0xdd,0x2e,0x7f,0x33,0x1f, - 0xd1,0x49,0xc2,0xd7,0x83,0x52,0x3a,0x42,0xe4,0x36, - 0xfb,0xfd,0xfa,0xfd,0xc2,0xc7,0xed,0x52,0x06,0x7e, - 0x18,0x48,0x1e,0x2e,0xe8,0x2e,0xa7,0x9c,0x3f,0xcb, - 0x5d,0xd3,0xee,0x6d,0xf2,0x7e,0x80,0x28,0x70,0x6e, - 0xb5,0x55,0xb6,0xd9,0x08,0x2a,0x36,0x5b,0xf2,0x7e, - 0xef,0xea,0x82,0xc6,0xe7,0x93,0xff,0x02,0x8e,0xac, - 0x6a,0x1e,0x53,0xce,0x31,0xc1,0xad,0x39,0xfb,0x9e, - 0xbd,0xc3,0x66,0x4a,0xce,0x3e,0x9a,0xd6,0x6c,0xc5, - 0xe2,0x4d,0xa0,0xd8,0x5b,0x1b,0x79,0x9f,0xc1,0xea, - 0xa0,0xa5,0x29,0x49,0x87,0x8e,0x2c,0xd7,0xa6,0xe8, - 0xe8,0xe9,0x26,0x2f,0xf5,0x31,0xa7,0x5a,0x91,0x5b, - 0x67,0x54,0xcf,0x46,0x1d,0x60,0x54,0xdb,0x37,0x06, - 0xbe,0x87,0x0a,0xc4,0x16,0x00,0x32,0x05,0x65,0x21, - 0x1e,0x39,0xe7,0x8a,0x40,0x75,0x6f,0xba,0x7e,0x4f, - 0xb5,0x23,0xcc,0xf8,0x61,0x7a,0x20,0x98,0x1e,0x00, - 0x7d,0xba,0xf3,0xf5,0x3d,0x5f,0x3f,0x47,0xf5,0x3e, - 0x30,0x92,0xb3,0xdb,0xf1,0xc2,0x20,0x4c,0xb3,0x92, - 0x62,0xc7,0x4b,0x7a,0x99,0x10,0xb0,0x92,0xf4,0x9b, - 0xc0,0x8f,0x40,0xcd,0x5e,0xd1,0xa0,0x23,0xe5,0xac, - 0xf5,0x19,0x9d,0x73,0x0e,0xe4,0xde,0x3a,0x7a,0x29, - 0x70,0x2c,0x95,0x98,0x6b,0xf7,0x1d,0x96,0x50,0x6a, - 0x57,0xcf,0x4c,0x82,0x0a,0x79,0x85,0xfc,0x30,0x01, - 0xb4,0xa9,0xb4,0x5b,0x06,0xb6,0x34,0xc5,0xde,0x64, - 0x45,0xb0,0x7a,0x7b,0x82,0xdf,0x90,0xa1,0x25,0x1e, - 0x32,0xc2,0x2d,0x79,0xff,0x00,0x6c,0xb0,0x51,0xba, - 0xa1,0x19,0x14,0x13,0xb3,0x92,0x0b,0x9d,0xa7,0x48, - 0xa6,0xbf,0x36,0x1d,0xa8,0xcc,0x1c,0x5d,0x77,0x68, - 0x79,0x20,0xb5,0x45,0xaa,0x23,0xb9,0xd7,0x35,0x4c, - 0x1a,0x33,0x06,0xe2,0x4e,0x63,0xdf,0x11,0xb8,0xe1, - 0x0c,0xa2,0xe8,0x05,0x38,0x91,0xd7,0x5e,0xd9,0xcd, - 0xd7,0x3b,0x6b,0xfa,0x23,0x1d,0xfd,0x33,0x79,0x3f, - 0x23,0xdc,0x69,0x33,0xb8,0xad,0x22,0xf0,0x60,0x05, - 0xbc,0x17,0xd2,0xb6,0x63,0xc1,0x08,0x45,0xa4,0xa4, - 0xe2,0x3a,0x67,0x8f,0x03,0xd0,0xd6,0x28,0xaa,0xdb, - 0x6b,0x97,0x45,0x43,0xd7,0x72,0xde,0xd0,0x4f,0x9a, - 0xd8,0x47,0x02,0xb7,0x74,0x0f,0xcb,0xc7,0xda,0xfc, - 0x95,0xe6,0xc4,0x1b,0x25,0xa3,0xd9,0x30,0xee,0x2c, - 0xf0,0x00,0x59,0xc8,0x1d,0x0c,0xc7,0x81,0x8d,0x3f, - 0x02,0x82,0x60,0x01,0x58,0x65,0xb6,0xc7,0x5e,0x4d, - 0x9e,0x5a,0xbe,0xa9,0xf9,0xa7,0x66,0x38,0xd2,0x16, - 0x65,0xd9,0x74,0xdc,0x50,0x14,0x63,0xd9,0x7d,0x21, - 0x4b,0xdd,0x5e,0x28,0x7d,0x11,0x20,0x42,0x21,0x17, - 0x15,0x17,0xdf,0x61,0x1c,0x42,0x8e,0xac,0x1a,0x84, - 0xfa,0x8c,0x28,0xa9,0x08,0xcc,0xe1,0xf8,0xeb,0x47, - 0x3b,0xde,0xf8,0x45,0xa0,0xc0,0x9b,0x5f,0xf6,0x83, - 0x1f,0x39,0xcf,0xe8,0x9c,0x95,0x86,0x79,0xbb,0xfa, - 0xd0,0xb0,0x02,0x17,0x19,0xdd,0xb1,0x07,0xcb,0x36, - 0x73,0xb8,0x40,0xcb,0x0b,0xe0,0xc0,0x90,0x64,0xe7, - 0x9a,0x81,0x94,0xa1,0x0f,0xad,0x27,0xfb,0x6e,0x89, - 0x94,0x12,0x89,0x73,0xec,0xf5,0xb8,0x21,0x05,0xee, - 0x32,0xeb,0x20,0xa3,0xc6,0xa5,0xce,0xf6,0x2c,0x48, - 0x5b,0x8e,0xab,0xb7,0xcf,0x20,0xf7,0x5d,0xab,0x34, - 0x66,0xec,0x18,0x16,0xd5,0x44,0x52,0x4c,0xd3,0x64, - 0x20,0x3d,0xf6,0x3e,0x9b,0xa0,0xef,0x2d,0xa2,0x3b, - 0xad,0x76,0xef,0x4a,0x81,0x36,0xf6,0x2c,0xdd,0x1a, - 0x78,0x40,0x65,0x4e,0xd3,0x1a,0x30,0x6a,0xb6,0x28, - 0xf0,0x8d,0x01,0x34,0x9c,0xb5,0x03,0xbf,0x2c,0x4a, - 0xcc,0xac,0xe8,0x8c,0x1c,0xd7,0x9f,0x0c,0x02,0x3d, - 0x53,0xc3,0x7a,0x73,0x94,0x87,0x0f,0x7f,0x64,0xa7, - 0x03,0xc8,0x3b,0xcf,0x01,0x16,0xbc,0x82,0x01,0xd3, - 0xef,0xbd,0xf5,0x03,0x10,0x85,0x13,0x9c,0x87,0x6d, - 0x90,0x62,0x59,0x0d,0x08,0x15,0x06,0x27,0xc7,0x1b, - 0x21,0xb8,0x75,0x9f,0xbb,0x74,0xdd,0x98,0xa7,0xd1, - 0x9a,0xbe,0x60,0x52,0x5d,0xc1,0xb4,0x98,0x5d,0x2d, - 0x4f,0x74,0xa0,0xd2,0x53,0xef,0xb6,0x80,0xb1,0x16, - 0xc9,0xc6,0x0f,0x15,0xa5,0x6f,0x2d,0xa0,0xf2,0xf5, - 0xff,0x59,0x53,0x69,0xdb,0x84,0xcb,0x84,0xc2,0xe4, - 0xc7,0x7b,0x4d,0xc8,0x9e,0x73,0xb9,0x72,0xb7,0x5a, - 0x7b,0x35,0x6d,0x14,0xa2,0x61,0x48,0x73,0x10,0x58, - 0x15,0xd6,0x1c,0xf8,0xd5,0xe3,0x03,0x8b,0x33,0xa3, - 0xba,0x31,0xd6,0x51,0x22,0x25,0x1c,0x9b,0x06,0x43, - 0xbb,0x76,0x41,0xb2,0xce,0xca,0x00,0x8c,0xf1,0x2f, - 0xd9,0x83,0xe3,0x0f,0x3f,0x83,0x0d,0xcf,0x06,0x77, - 0x9d,0x08,0xc1,0x8c,0xd9,0xbc,0x7a,0x8f,0xb5,0x3f, - 0x91,0x11,0xc2,0xed,0x44,0x74,0x20,0xef,0x73,0xd6, - 0x9f,0x59,0x64,0x4b,0x57,0x01,0x4c,0xb9,0xa7,0xb5, - 0xb0,0x79,0xca,0x64,0x46,0xb1,0xc1,0x2a,0x01,0x30, - 0x05,0x49,0xf8,0x18,0x2c,0xc7,0x1e,0x1b,0x64,0x03, - 0x00,0x4f,0xd3,0xc1,0xb0,0xef,0xd2,0xf6,0x3a,0x51, - 0xda,0x48,0x65,0x9a,0x6d,0x2e,0x0f,0xd8,0x75,0xa6, - 0x76,0x0b,0x56,0x33,0x90,0x02,0x94,0xf9,0xc8,0x6e, - 0xf9,0x1d,0xcb,0xa6,0xdb,0xb1,0x5a,0xf0,0xf4,0x11, - 0xe5,0xda,0xdd,0x58,0x00,0xde,0xfc,0x1d,0x08,0x18, - 0x57,0xa6,0x1b,0x4f,0x42,0xb0,0xde,0xb5,0x42,0xab, - 0x02,0x19,0xfe,0x16,0x71,0x70,0x76,0x8b,0xd1,0xe7, - 0x01,0x80,0xff,0x46,0x94,0xe0,0xaf,0x0e,0xe4,0x11, - 0x8e,0x16,0xd2,0x6f,0x24,0x5d,0xf8,0x77,0x83,0xd2, - 0x8e,0xa4,0x17,0x90,0xe4,0x6f,0x70,0x8a,0xf7,0xe0, - 0x46,0xf4,0xcc,0x66,0xcb,0x62,0x66,0x7d,0x8a,0x31, - 0xfa,0x23,0x54,0x91,0x6d,0x69,0x51,0x98,0xd4,0xba, - 0xd6,0xb3,0x5e,0x05,0x09,0x32,0x6d,0xe4,0x7d,0xe5, - 0x9a,0x4f,0xe6,0x1b,0x3b,0xc3,0x91,0xf6,0xfd,0x3d, - 0x18,0x49,0x14,0x15,0xa0,0xb4,0x81,0xc1,0xe0,0xda, - 0xc5,0x51,0x93,0xdd,0x69,0x82,0x81,0x8d,0x77,0x03, - 0xc2,0x73,0x82,0x14,0xac,0xcd,0x5b,0x91,0xb2,0x1b, - 0x33,0x94,0x14,0x33,0xfd,0x92,0xb6,0x65,0xe9,0x3e, - 0xb0,0x05,0xa4,0xd6,0xda,0x2b,0x19,0xca,0xcb,0x16, - 0x8c,0x75,0x92,0x91,0x66,0x29,0xe7,0x33,0x22,0xf3, - 0x1e,0x5c,0x58,0x8b,0x97,0x9f,0xb7,0x7a,0x00,0xb7, - 0x16,0xe1,0xfc,0xe3,0xa0,0xf1,0x90,0xbc,0x2f,0xa1, - 0xfb,0xe0,0xb8,0xbd,0xaf,0xfb,0xc3,0x01,0xef,0x26, - 0xf3,0x76,0x40,0xf4,0x6e,0x93,0xc7,0x8e,0x81,0x08, - 0xec,0x9f,0xc6,0x66,0x0c,0x79,0xba,0xa4,0x96,0xab, - 0xb0,0x63,0xf6,0x2d,0x1b,0x81,0x39,0xe7,0x58,0xe6, - 0x94,0x1a,0x29,0xed,0xf7,0x2e,0x35,0x1b,0x61,0xba, - 0x51,0x94,0xf5,0x31,0x87,0x4e,0x68,0x72,0x6d,0x46, - 0x63,0xa1,0x37,0x32,0x47,0xd5,0xff,0x5b,0xc4,0x57, - 0xc1,0xd4,0x21,0xed,0x46,0xdd,0x0a,0x99,0x63,0x64, - 0xf3,0x6e,0x48,0x0d,0x61,0xba,0x5c,0x5e,0x46,0xed, - 0xcb,0x7f,0xa3,0x06,0x28,0xb0,0xc8,0xc4,0x71,0x54, - 0x91,0x96,0x4b,0xef,0x80,0x93,0xcd,0xc8,0x4a,0xb4, - 0x6a,0xb8,0x11,0x03,0x48,0xa8,0x9b,0x13,0x8b,0x94, - 0x62,0xf3,0x8d,0x04,0xa5,0x6b,0x83,0x36,0x72,0x86, - 0x5b,0x49,0xb0,0x5b,0x6a,0x19,0x4e,0x9d,0xbb,0x7f, - 0x92,0xbc,0x3f,0x2e,0x41,0x89,0x47,0xca,0x04,0x5b, - 0xc2,0x0f,0x0e,0x75,0x7b,0x48,0x0d,0x0f,0xa3,0x07, - 0xd8,0xd0,0xfb,0xdc,0x6d,0x8f,0xbb,0x0e,0xc6,0x86, - 0x1d,0x98,0x1a,0x0e,0x1a,0xe5,0x98,0x1a,0xe8,0x31, - 0x66,0x72,0xea,0xe8,0x77,0x40,0xb3,0x6c,0x52,0x52, - 0xab,0x76,0x80,0xab,0xe2,0xd3,0x5a,0xd0,0xd3,0x7a, - 0x0c,0xa9,0xc7,0x7e,0x65,0x43,0x48,0x30,0x45,0xcb, - 0x40,0x2e,0xd2,0xcd,0x72,0x18,0x5a,0x35,0xc0,0x44, - 0xbc,0x77,0x23,0x1e,0xb1,0xcb,0xc1,0x2a,0xa0,0x21, - 0xd0,0xfc,0x34,0x4b,0x41,0x67,0x53,0x20,0x09,0x2e, - 0x73,0x0c,0x77,0x5e,0x5e,0xf7,0xf2,0x9a,0x6d,0xc0, - 0xba,0xae,0xe0,0x3c,0xef,0x34,0x49,0xaa,0xaa,0xc4, - 0x18,0x0c,0xa0,0x23,0x45,0xff,0x70,0x54,0xfb,0x35, - 0x32,0x66,0xb0,0xe5,0x7b,0x38,0xed,0xc1,0x3f,0x43, - 0xde,0xc7,0xc7,0x17,0xfd,0x2d,0x79,0x7f,0x87,0x9f, - 0x3f,0xef,0x44,0xf0,0x37,0x67,0x7c,0x48,0x09,0x7a, - 0x8f,0x29,0x64,0xf1,0xdc,0x18,0x1a,0xad,0xba,0x98, - 0xb9,0xcc,0x9e,0x4f,0x1c,0x4d,0xb2,0xab,0x99,0x4e, - 0x3e,0xb8,0x08,0xdc,0xf8,0x79,0xb8,0x64,0x16,0xa8, - 0xfe,0x81,0xf9,0x7c,0x31,0x44,0xc2,0x1b,0xd8,0x76, - 0x17,0xe6,0xa3,0x5c,0x46,0xd4,0xd9,0x80,0xc3,0x96, - 0xf5,0x91,0xad,0x78,0xe9,0xd7,0xa9,0x76,0x3c,0xa0, - 0xbe,0x87,0x64,0x41,0xdd,0x41,0xf7,0x23,0xa8,0x73, - 0x04,0xe8,0xbd,0x10,0x1f,0xff,0x37,0x49,0xb4,0x05, - 0xe8,0x70,0xc2,0x79,0x55,0xd1,0xd8,0x89,0x61,0x60, - 0x60,0x2b,0x72,0x99,0x80,0x12,0xc3,0x7e,0x1f,0x95, - 0x56,0x8e,0x82,0xef,0xaf,0xc0,0x2e,0x77,0x4b,0x03, - 0x30,0x0d,0x8a,0xfe,0xfa,0x5b,0x3d,0xe0,0xdf,0x56, - 0x06,0x18,0x8f,0xfd,0x7c,0x39,0x0e,0x64,0x23,0x1e, - 0xd3,0xfa,0xe3,0x51,0xee,0x07,0xfe,0x43,0x33,0x23, - 0x8c,0x1f,0xe2,0x30,0x52,0x88,0x53,0x93,0x83,0x71, - 0x10,0x12,0xc2,0x86,0x81,0x93,0xf7,0xcb,0x1b,0xeb, - 0x6f,0xb3,0x21,0x97,0x7c,0xac,0x1f,0x30,0x5a,0x3a, - 0xbd,0x65,0xbd,0x98,0x2c,0xb8,0x1e,0xcb,0x06,0xdc, - 0xbc,0xf0,0x82,0x62,0x5e,0x69,0xdf,0x7d,0x8d,0xb7, - 0xea,0x2c,0xfd,0xd4,0xed,0x53,0x0c,0x21,0x73,0x10, - 0xe6,0x44,0x23,0xfc,0x5c,0x0a,0x79,0xbf,0x9d,0x37, - 0xcd,0x7d,0x87,0x9b,0xc2,0xab,0x31,0x16,0xb1,0xf8, - 0xf7,0x34,0x31,0x25,0x4f,0x3d,0x5d,0xcb,0x7f,0x98, - 0x80,0xab,0xeb,0x3a,0x72,0xd0,0x54,0x84,0x6c,0x82, - 0xd0,0x91,0x40,0x56,0x30,0x1b,0x72,0x4d,0xdf,0x03, - 0x01,0x3f,0x88,0x02,0x3e,0xf3,0xfe,0xc0,0xe6,0x9f, - 0x87,0x2f,0xc5,0xf9,0x17,0x71,0x6c,0x17,0xa4,0x28, - 0x3c,0x76,0x0a,0x5b,0x96,0xaa,0xde,0x9d,0x25,0xcf, - 0xaf,0x73,0x6c,0x6d,0xcd,0x53,0xad,0xea,0x9e,0x7a, - 0xf4,0x1d,0x3d,0xa4,0xbf,0x9d,0x7b,0x60,0x8a,0xfe, - 0x49,0xbc,0x1f,0x6e,0x16,0x8a,0x31,0x0e,0x7d,0x11, - 0x1e,0x3a,0x04,0x6c,0x3e,0x00,0xa8,0x73,0xf3,0xc3, - 0x0c,0x92,0x4d,0xde,0x7d,0xba,0xfb,0x94,0x45,0x8c, - 0xa0,0x71,0xd0,0x2f,0xe1,0xc4,0x22,0x5a,0x34,0x2d, - 0x48,0x5b,0xf7,0x3b,0x64,0x57,0x61,0x72,0xb9,0x34, - 0x2d,0x29,0xe0,0xc6,0xaf,0xa3,0x4a,0x8b,0xa5,0xcd, - 0x08,0xee,0xb7,0x80,0x9a,0xe1,0x51,0xe8,0xe9,0x7d, - 0x30,0x5c,0xd8,0x97,0xf2,0x7d,0x5a,0x52,0x01,0xaf, - 0x81,0xa4,0x72,0x8b,0x57,0x16,0xf1,0xf5,0x7c,0xed, - 0xe3,0xe7,0x01,0xe2,0x01,0x79,0x9f,0x3f,0xfd,0x2c, - 0x37,0x3e,0x8e,0xef,0xc4,0x35,0x04,0x70,0x0e,0x0f, - 0xb9,0xcb,0x78,0x1a,0xf2,0x0e,0x1d,0x8d,0x30,0x6e, - 0x7b,0xd3,0xa7,0x30,0x54,0x9a,0xe6,0x84,0x4d,0x01, - 0xe2,0x72,0x45,0xf0,0x5d,0x9a,0xa2,0xb4,0x86,0x99, - 0xfa,0xff,0x52,0x7d,0x07,0xcc,0x35,0x1c,0x1b,0x2b, - 0x93,0xae,0x74,0x03,0xb4,0xe9,0x90,0x84,0x36,0x36, - 0xb7,0x11,0x69,0xb5,0xc8,0x4f,0x88,0x63,0x0f,0x85, - 0x8d,0xc7,0x61,0xa6,0x25,0x23,0x04,0x86,0x94,0x01, - 0x48,0xd6,0xb4,0xc6,0x1f,0xaa,0x47,0x9f,0x4e,0xd8, - 0xc2,0x3a,0x0f,0x5b,0x63,0x87,0xb4,0x19,0x91,0xb2, - 0x23,0x33,0x2a,0x26,0x82,0xbb,0x2d,0x45,0x02,0x2e, - 0xed,0xb3,0x52,0x5f,0x61,0x55,0x14,0x6b,0x83,0x78, - 0x75,0xa2,0x9e,0x05,0x80,0x27,0x0f,0x39,0xf1,0xd6, - 0xe7,0x9f,0xcc,0xf5,0x3c,0x8a,0x3b,0xb8,0x69,0xf1, - 0x3f,0x55,0x0e,0x39,0x90,0xf7,0x5b,0x01,0x71,0x2b, - 0x16,0x92,0x84,0x23,0xf0,0x30,0x30,0xf0,0x41,0x5a, - 0xde,0xaf,0x51,0xf1,0x7b,0x00,0xc6,0xd8,0x3a,0xc5, - 0xd3,0x36,0x78,0x8a,0x13,0x70,0x28,0xbb,0x87,0x81, - 0x64,0xf2,0x90,0x37,0x63,0x63,0x25,0xb9,0x73,0x49, - 0x8c,0x5d,0x7f,0x83,0x29,0x77,0xdf,0xd1,0xc8,0xc0, - 0x6d,0xf8,0x92,0xa3,0xe2,0xec,0x46,0x40,0xb2,0x89, - 0x0b,0x0f,0x44,0x93,0xd8,0xba,0x38,0x19,0xdc,0x79, - 0xe9,0x4c,0x6c,0xa5,0x94,0x16,0x44,0xc0,0x48,0xc2, - 0x82,0x84,0x5a,0xd1,0x5f,0x0c,0xbf,0xe0,0x43,0x38, - 0x17,0xef,0x9a,0xfc,0xc4,0x40,0xdb,0x77,0xa6,0x2f, - 0x22,0x44,0x6f,0xb0,0x1c,0x3b,0xcb,0x54,0x27,0x43, - 0xf9,0x57,0x01,0x57,0x01,0x0c,0x01,0xb5,0x06,0xe3, - 0xef,0x92,0x7d,0x3c,0xdf,0xc2,0x9f,0x1a,0x86,0xe2, - 0x27,0xb8,0x20,0x0f,0x0b,0x9c,0x07,0xa5,0x9f,0x0d, - 0x79,0x9f,0xc3,0x94,0x81,0x03,0xaa,0xbf,0x75,0xf1, - 0xbd,0x27,0xef,0x97,0x20,0x70,0x1c,0x52,0x2e,0x95, - 0x89,0x4b,0x92,0xec,0x87,0x1d,0x9a,0x20,0xea,0xb6, - 0x95,0xc1,0xce,0x94,0x45,0x74,0x0f,0xa8,0x93,0x46, - 0xd8,0x14,0xc9,0xc5,0xab,0xb6,0xd3,0x9d,0x29,0xe6, - 0x21,0xbd,0x0c,0x5a,0x8b,0x43,0x27,0xf0,0x0a,0x80, - 0x18,0xc8,0xfb,0x2c,0x29,0x38,0x33,0xf6,0x51,0xd0, - 0xb8,0x15,0x0c,0x4a,0x50,0x21,0x8a,0x56,0xc3,0xea, - 0x2e,0xb0,0x48,0x88,0xbb,0xad,0x58,0xf7,0x41,0x64, - 0xf9,0x3b,0xc4,0xcd,0x98,0xe5,0xca,0x6e,0x76,0x31, - 0xf7,0x1d,0xa0,0xab,0x47,0xac,0x80,0x3c,0x0b,0x02, - 0x8e,0x60,0xe7,0x2e,0x81,0x07,0x95,0x9e,0xfc,0x95, - 0x10,0xf4,0xcf,0xc2,0x82,0x78,0xf0,0x97,0x37,0xd4, - 0x7d,0x0e,0x50,0x3c,0xed,0xe2,0xa7,0xcf,0xba,0x73, - 0x2e,0x6e,0xa3,0x08,0x8f,0xbf,0xb9,0xcd,0x5c,0x88, - 0xb8,0x30,0xa9,0x0f,0x20,0x28,0x3e,0x75,0x7d,0x77, - 0x4b,0x78,0x45,0x69,0xad,0xb1,0x52,0x3b,0xd3,0x19, - 0x68,0xfb,0x7d,0xda,0x44,0xb9,0x67,0x1f,0xc2,0xe3, - 0x12,0x47,0x99,0x59,0xd3,0xae,0x40,0xde,0x67,0xab, - 0x22,0x1a,0x79,0x3f,0xa3,0x32,0x25,0x8d,0x5d,0x66, - 0x96,0x3a,0x6d,0x37,0x8f,0x97,0xb2,0xac,0x8a,0xad, - 0x3a,0xea,0x8e,0x5d,0x4a,0x8f,0x8e,0xb9,0xb0,0x93, - 0xf7,0x8d,0x23,0x01,0x0b,0xc0,0x97,0x7d,0xd9,0x0b, - 0x7c,0x6c,0x17,0xb9,0xce,0x01,0x38,0xca,0x27,0x16, - 0x04,0x35,0x70,0xb3,0x3b,0xf9,0x6a,0xf0,0xb2,0x49, - 0xfe,0x26,0xa7,0x66,0x1e,0xb2,0x5b,0x09,0x78,0xc2, - 0x16,0x11,0xfe,0x6c,0x14,0xf8,0x0e,0xb1,0xe7,0x7d, - 0xce,0xfe,0x06,0x28,0xc0,0x1d,0xc8,0xf7,0x00,0xd9, - 0xce,0x6f,0x41,0x18,0x39,0xf3,0x34,0x31,0xd7,0x19, - 0x74,0xc1,0x8b,0x26,0x8b,0x55,0xf3,0x6c,0x98,0xc0, - 0x07,0x1f,0x01,0x8c,0xd2,0x2b,0x00,0x9b,0x97,0x5e, - 0x4e,0x48,0xaa,0x1e,0x7d,0xf5,0xec,0x8b,0xe4,0xdb, - 0x50,0x6b,0x87,0x80,0x26,0xe4,0x7d,0x8e,0xcc,0x76, - 0x74,0xd3,0xaf,0xe2,0x0d,0x68,0xf8,0x4b,0x1b,0xd5, - 0x75,0x51,0x4b,0xb0,0x6a,0x86,0xa6,0xfd,0x41,0xfe, - 0x85,0xe8,0xbd,0xbb,0x3c,0x7a,0x8c,0x46,0x30,0x62, - 0x0b,0xc0,0x2b,0x92,0xd2,0x37,0xe2,0x21,0x84,0x22, - 0x0a,0x36,0x61,0x06,0x6e,0x68,0xcf,0x38,0x4c,0xbd, - 0x67,0x08,0xa3,0x52,0xe1,0x53,0x1a,0x60,0xc8,0xe2, - 0x09,0x10,0x2a,0xc9,0x8c,0x29,0xd9,0x5b,0xff,0x26, - 0x00,0x10,0xe7,0x45,0xbb,0xb1,0xc7,0x6a,0x44,0x8d, - 0x13,0x7a,0xce,0x7b,0x88,0xed,0x2e,0x80,0x70,0x73, - 0x75,0x14,0xa0,0x29,0xad,0xaa,0x9b,0x41,0xa1,0x53, - 0x46,0xc0,0xd4,0x3a,0x40,0x6f,0x48,0x60,0x1f,0x2d, - 0xda,0x79,0xd3,0xed,0xc1,0x89,0x96,0xb4,0xa0,0xc0, - 0xc3,0x63,0x94,0xfe,0xfb,0x40,0xf9,0x1c,0x36,0xf1, - 0xd7,0x12,0x64,0xd9,0x46,0x29,0x0a,0xb8,0xdd,0x75, - 0x30,0x5f,0x9d,0x14,0xae,0xe9,0xe2,0xc1,0xa3,0xcf, - 0x33,0xb3,0x4b,0x09,0xa1,0x93,0xb7,0xa8,0xe0,0x5e, - 0x71,0xfc,0xe5,0x1c,0x75,0x4e,0x76,0xee,0x08,0xf5, - 0x20,0xc6,0x68,0xf6,0xe3,0x8b,0x87,0xd1,0x19,0x91, - 0x2d,0xe1,0x84,0x7b,0xa3,0xe9,0x14,0x08,0x83,0x0f, - 0xab,0xca,0xc9,0xfa,0x1c,0x84,0x7b,0x1a,0xd6,0x6b, - 0x89,0x11,0x74,0x1d,0x46,0x1d,0xb3,0x28,0x0c,0xc7, - 0x3f,0x0d,0x00,0x78,0x8e,0x22,0x72,0xdb,0xa6,0xbb, - 0x29,0x46,0xf0,0x00,0x2f,0x88,0xb1,0xc9,0x16,0x2b, - 0xac,0x3d,0x82,0x5c,0x6e,0xe0,0x4d,0xf6,0xa1,0x56, - 0xab,0x51,0xf3,0x2f,0x18,0x5b,0xb0,0x65,0x1b,0x81, - 0x9a,0xe8,0xf5,0x76,0x08,0xf3,0x9e,0x12,0x76,0x45, - 0x43,0xd6,0x19,0x65,0xe4,0xe4,0x88,0x9e,0xeb,0x24, - 0x8f,0x02,0xe1,0xc9,0xd7,0x87,0xcf,0x2d,0xcc,0x4c, - 0x06,0x3b,0x95,0x38,0x4a,0x90,0xc1,0x26,0xb4,0x72, - 0xe7,0xd2,0xcc,0x42,0x9e,0xa1,0x9a,0x7f,0x58,0x8d, - 0x4d,0x98,0xd6,0x00,0xa6,0xfa,0x56,0x78,0xce,0x6c, - 0xf7,0xbd,0x32,0x15,0xa0,0x2e,0x74,0x89,0x0b,0x25, - 0x79,0x2c,0xe9,0xbd,0xdf,0xdb,0x8d,0xc4,0x39,0x98, - 0x61,0x0b,0xb9,0x05,0xcd,0x74,0xd5,0x9d,0x95,0x20, - 0x83,0x48,0x0d,0x5f,0xe1,0xef,0x03,0x00,0x3f,0xf4, - 0x6e,0xfc,0x94,0xef,0x73,0x26,0xef,0x8f,0x43,0x72, - 0xbf,0x41,0x6f,0x33,0x90,0x75,0xab,0x3f,0xbc,0xcd, - 0x54,0x68,0x3b,0x67,0x46,0x64,0x09,0x93,0xa9,0x4a, - 0xa5,0x03,0x52,0x62,0xce,0xaa,0xdb,0x59,0x4a,0x3b, - 0x9e,0xc7,0x87,0x21,0x3b,0x4a,0xdb,0xa9,0xd9,0x54, - 0x84,0x39,0x85,0x3f,0x05,0x6c,0x83,0xd1,0x4d,0xcb, - 0x90,0x8a,0x07,0x3e,0x37,0xc9,0x64,0x13,0xc1,0x84, - 0x06,0xe7,0xd0,0x70,0x61,0x9b,0x4d,0x90,0x1d,0xf1, - 0x35,0x56,0xab,0xaa,0xc5,0x08,0xed,0x33,0x30,0x27, - 0x61,0x64,0x0a,0xac,0x9b,0x82,0x08,0x1b,0xb6,0x23, - 0x6b,0xf7,0x41,0x07,0x1b,0x20,0x74,0x68,0xd7,0x68, - 0xa0,0x45,0xec,0x9e,0x30,0x20,0xfb,0xba,0xc2,0xec, - 0xc4,0x88,0xe2,0x40,0xad,0x76,0xae,0x50,0x9f,0x48, - 0x75,0x6f,0xfe,0x4d,0x00,0xc0,0x1f,0xbe,0xfb,0x81, - 0xc0,0xfb,0xd8,0x92,0xf7,0xc3,0x4e,0xc9,0x43,0xb1, - 0x30,0xe1,0x24,0xee,0x76,0xcc,0xf1,0x40,0x60,0x0f, - 0x01,0xde,0x70,0x90,0xca,0x8f,0x87,0x4d,0x8d,0x7a, - 0xfb,0x73,0x51,0x6a,0x00,0x87,0x92,0x23,0x38,0x88, - 0x20,0x0c,0xe8,0x11,0xd1,0x92,0x5b,0x11,0x70,0x0a, - 0xba,0x3c,0xd5,0x6f,0x87,0x1a,0x5f,0x28,0x96,0xa0, - 0x25,0x48,0x05,0xc0,0x40,0xc6,0x34,0x83,0xe2,0xa5, - 0x37,0xd7,0x16,0x7a,0x2a,0x0b,0x53,0x43,0x6d,0x83, - 0x2f,0xc8,0xf7,0xd2,0xc8,0xfb,0x45,0xc0,0x44,0x3b, - 0x77,0xd8,0x93,0xf7,0xc7,0x9c,0xe8,0xf3,0x2c,0x91, - 0x05,0x1f,0xcc,0xb5,0x68,0x49,0x8d,0xd8,0xde,0x02, - 0xfb,0x2d,0x4f,0xf1,0x6b,0xfc,0xa7,0x50,0xc7,0xd3, - 0x14,0x82,0x08,0x8d,0xca,0x26,0xc9,0xe6,0x19,0xb6, - 0x22,0xde,0xbf,0xa3,0x07,0xb0,0x8d,0x0d,0xb9,0x67, - 0x7e,0xc4,0x03,0xef,0x7a,0x8a,0x3e,0xe3,0xc1,0x7b, - 0x45,0x61,0x1c,0xf9,0x77,0x3c,0x2a,0x6e,0x00,0x29, - 0x47,0xae,0x5b,0x0e,0x46,0xad,0x3d,0xd0,0xc0,0x22, - 0xeb,0x4a,0x23,0xe1,0xa6,0xdc,0x06,0x8b,0x5e,0x6e, - 0x20,0x5f,0x55,0x07,0x00,0xdd,0x1c,0x23,0x25,0x24, - 0xb4,0x71,0x5a,0xac,0xe1,0x9b,0x99,0x53,0x74,0xf2, - 0xbe,0xd9,0xef,0xd4,0xc0,0x54,0x80,0x3b,0x72,0x4d, - 0x0d,0x1a,0x23,0x90,0xec,0xb4,0x22,0x6e,0x06,0x13, - 0x39,0xc2,0x18,0xc6,0xa6,0x53,0xc2,0x32,0xaf,0xcf, - 0x15,0xb4,0x8b,0x93,0xee,0x26,0x41,0x1c,0xa6,0x04, - 0x69,0xe5,0xd4,0xe2,0x47,0x48,0xa0,0x1b,0x63,0x4b, - 0xde,0x47,0xbe,0x19,0xbd,0x3e,0x7b,0x75,0x90,0x68, - 0x59,0x5d,0x91,0xa7,0xbb,0x84,0x63,0x20,0x4a,0xc6, - 0xa3,0x62,0x19,0xff,0x7e,0x00,0x68,0xd1,0xe0,0x99, - 0x53,0xce,0xb9,0x2d,0x78,0xd8,0x40,0xf1,0x24,0x43, - 0xe9,0xbe,0x6c,0x0c,0x11,0x85,0x8f,0x46,0x04,0xf7, - 0xb3,0x6e,0xcc,0xe4,0xfd,0x58,0xfb,0xc2,0x03,0x25, - 0x71,0x03,0xb7,0x24,0x94,0x94,0x7d,0x95,0x5c,0x5c, - 0xf3,0xb1,0x76,0x48,0x9e,0x80,0xd2,0x64,0xa5,0x6e, - 0xe6,0x97,0x6b,0xec,0x74,0x13,0x6c,0xb9,0x76,0xd5, - 0xf2,0x23,0x2f,0x8f,0xfb,0x74,0x35,0x50,0xa4,0xc6, - 0xd1,0x8a,0x03,0xc7,0x1a,0x90,0x02,0x25,0x02,0x91, - 0x09,0x43,0x9d,0xf3,0x86,0x93,0xf7,0x59,0x8c,0x3e, - 0x53,0x39,0x35,0x2a,0xb0,0xc7,0x6b,0xc8,0xc8,0xf9, - 0x11,0xcb,0x1a,0x6c,0x65,0x39,0x75,0xeb,0xaf,0x43, - 0x3c,0xe8,0xdd,0x31,0x56,0x73,0x16,0x60,0x4d,0x7b, - 0x92,0x5e,0x52,0x20,0xe0,0x50,0x18,0x46,0xa6,0xf8, - 0xeb,0x00,0x70,0x1a,0x4e,0xe1,0x9e,0x6f,0xce,0x37, - 0xbf,0x72,0xa7,0x03,0xc0,0x43,0x82,0xf0,0xd6,0xec, - 0x31,0x0e,0x73,0x7c,0x87,0x11,0xd9,0xdd,0xd0,0x11, - 0x53,0xa6,0x31,0x22,0x86,0xee,0x38,0x02,0x63,0x5a, - 0x73,0x83,0x87,0xb0,0xa7,0xe8,0x45,0xd3,0x13,0x58, - 0x74,0x56,0x29,0x0b,0x90,0x82,0x0a,0x47,0x24,0xce, - 0x94,0x2c,0x55,0x5a,0xff,0x2c,0x9c,0x2a,0x5b,0x80, - 0xa8,0x62,0x9a,0xbc,0x33,0x95,0xad,0x9a,0xd9,0x4b, - 0x6c,0x95,0x35,0xc6,0x15,0xd4,0xbb,0x3c,0xef,0x10, - 0x00,0x16,0xdd,0xa9,0x88,0x6c,0x8e,0x11,0x90,0x41, - 0x7c,0x9d,0xdd,0xd2,0x9e,0xbe,0x5f,0x16,0x60,0x89, - 0xab,0xd4,0x8c,0x7e,0x39,0xf2,0xb8,0xac,0xf8,0x75, - 0x1e,0x09,0x1c,0x76,0x70,0x60,0x99,0xa8,0xa0,0x55, - 0xc3,0x2e,0x70,0x34,0x38,0x0a,0xed,0x78,0xe2,0x35, - 0xaf,0xb2,0xe9,0x8f,0x03,0x00,0x0e,0x7f,0xc5,0x1e, - 0x59,0x3f,0xf9,0x89,0x9e,0x66,0xb6,0x03,0xd0,0x7a, - 0xca,0x1e,0xf8,0xf4,0xc7,0x8f,0x26,0x23,0x68,0xbb, - 0x6d,0x91,0x5e,0x1b,0x7b,0x53,0x86,0xc1,0x0d,0x22, - 0x1e,0x99,0xf3,0x5d,0x41,0xa6,0x46,0x09,0x58,0x80, - 0x11,0x64,0x1a,0xd8,0x66,0x4e,0xec,0xc5,0xb6,0x6f, - 0x90,0x1d,0xb9,0x0c,0x20,0x68,0xb3,0xbc,0x57,0x56, - 0xb0,0x5b,0x8d,0x63,0xed,0xea,0xfa,0x69,0x30,0x49, - 0x6c,0xef,0x52,0x11,0xc3,0x47,0xb9,0xc8,0x41,0x3a, - 0xdb,0x03,0x51,0x29,0x42,0x51,0x34,0x1a,0x41,0x57, - 0x11,0x73,0xd4,0x76,0x05,0x4e,0x34,0x20,0xaf,0x95, - 0xfc,0xd0,0xfa,0xbb,0xa6,0xf2,0x18,0x49,0xb8,0x53, - 0x41,0xbf,0x3a,0xc4,0xa6,0xae,0x64,0x94,0x4e,0x82, - 0x63,0xb3,0x7d,0x0c,0xbb,0x66,0x13,0xd0,0x03,0xf0, - 0xf2,0x02,0xd7,0xef,0xe2,0x9f,0x2d,0x01,0xf8,0xab, - 0xd7,0xf7,0x93,0x77,0x78,0x1c,0x44,0x78,0xf3,0x16, - 0x6e,0x83,0x0e,0x8f,0x64,0x27,0x3c,0x6c,0x0e,0x98, - 0x24,0x2f,0x46,0x6b,0x98,0x8d,0x3b,0xbc,0x43,0x03, - 0xcf,0x4e,0x03,0x4e,0x95,0x69,0x70,0xa0,0x3b,0x90, - 0x1b,0xd0,0x30,0x04,0x48,0x72,0x30,0x6a,0x66,0xed, - 0x14,0x02,0x98,0xeb,0x93,0x03,0x89,0xa8,0x68,0xdb, - 0x0b,0x76,0xf2,0xdd,0x5a,0x93,0xfc,0x01,0x6c,0x4a, - 0x4e,0x44,0xff,0xd9,0x35,0x96,0xaf,0xe7,0xe4,0x43, - 0x3e,0xd4,0x75,0x5e,0xc0,0xcd,0x29,0x48,0x2a,0x98, - 0x06,0x44,0x98,0xb4,0x7e,0x13,0x9a,0x38,0x01,0x61, - 0x1d,0x0f,0x8a,0xac,0xb7,0x61,0x2a,0xf0,0xac,0x4c, - 0xd5,0xbb,0xdc,0xc3,0xb5,0x30,0x91,0xdc,0xa2,0x5d, - 0x84,0x54,0x59,0x63,0x04,0xc9,0x4a,0x6a,0x3a,0x81, - 0x80,0xfc,0x59,0xbf,0xef,0x8d,0x7c,0x80,0xcf,0xf0, - 0xc0,0x4f,0x85,0x99,0xa7,0xcc,0xa2,0xc3,0x4e,0xcf, - 0x5d,0xb6,0x7d,0xcc,0x64,0xdc,0xac,0x39,0xa5,0xfb, - 0x3b,0xc7,0x00,0xd9,0xed,0x71,0x97,0x9c,0x98,0x38, - 0x07,0xce,0xd0,0x2a,0x6d,0x07,0xbc,0x0d,0x8b,0xa8, - 0x62,0x14,0x5a,0x12,0x60,0x64,0x87,0x70,0xad,0x37, - 0x55,0xe3,0x0f,0x46,0xb2,0x62,0x8c,0x9c,0x68,0xe7, - 0x92,0xb2,0xa1,0x32,0xff,0xcf,0x1a,0x08,0xd2,0x2d, - 0x98,0x09,0x38,0x43,0xfa,0xf8,0x5a,0x3c,0xc8,0x9c, - 0x3c,0x25,0xee,0xc5,0x02,0x4d,0xdb,0x6d,0x2c,0xed, - 0x81,0x7a,0x81,0x56,0xab,0xd0,0xa5,0xdf,0x38,0x82, - 0xff,0xea,0x54,0x12,0x6a,0x96,0xea,0xca,0x4d,0x48, - 0x8c,0xc9,0xab,0x3c,0xa2,0x09,0x9e,0xc8,0x45,0xf9, - 0xba,0x5d,0x0a,0x4f,0x27,0x6c,0x3e,0x54,0x1e,0xec, - 0x5f,0x4e,0xa4,0x95,0x1b,0x9e,0xfd,0x7b,0x76,0xc4, - 0x0f,0xe1,0x3c,0xc6,0xd2,0x85,0x0f,0xd1,0xc7,0xf2, - 0xf0,0x53,0xd2,0x7d,0x6e,0x39,0x85,0xad,0x91,0xb0, - 0x9f,0xb2,0xbb,0xbf,0x94,0x1c,0x85,0x13,0xb2,0xf7, - 0x67,0x51,0xab,0x7a,0x63,0x01,0x0e,0x31,0xcd,0x60, - 0x13,0xfe,0xa9,0x23,0xc7,0xbd,0x2e,0x18,0x91,0xd7, - 0xc0,0x52,0x13,0x43,0xb0,0x83,0x2a,0xca,0x4e,0xb9, - 0x07,0xd2,0xf1,0x7f,0x8d,0x44,0x2f,0x8e,0x44,0xed, - 0x9c,0x60,0x37,0x73,0x53,0x81,0xc1,0x0d,0xd5,0x8f, - 0xea,0x1f,0x50,0x66,0x0d,0x50,0x51,0x75,0x21,0xef, - 0xef,0x24,0xd9,0x8b,0x59,0x09,0x8c,0x1f,0x81,0x17, - 0x20,0x8b,0xae,0xcf,0x50,0x39,0x0a,0xac,0x43,0x9c, - 0x7a,0xaf,0xc8,0xef,0xe1,0xa3,0x61,0x92,0xc9,0x60, - 0x63,0x53,0xbf,0x29,0x08,0xf2,0x04,0xa4,0x7b,0x92, - 0xe4,0xff,0x9e,0xbc,0x7f,0xf7,0xd0,0xf3,0x03,0xa1, - 0xea,0xd6,0x3f,0x88,0xb9,0x56,0xe6,0x0d,0x5e,0x71, - 0xdd,0x5c,0xef,0xff,0x06,0x06,0x87,0x74,0xde,0x60, - 0x8a,0x14,0x78,0xf3,0xe4,0xd8,0x6b,0x7a,0x78,0x0d, - 0x7a,0xb8,0x2f,0xac,0x4a,0x35,0x4c,0xc4,0xc8,0x68, - 0x65,0x65,0x77,0x7c,0xb9,0x76,0xd4,0x41,0x2e,0x5f, - 0x30,0x45,0xf7,0x03,0xed,0x3a,0x27,0x47,0x67,0xa8, - 0x2d,0x57,0xd9,0xc5,0x2b,0x79,0x9f,0x4d,0x33,0x1e, - 0xe7,0xf2,0x2e,0x81,0xa0,0x03,0xcd,0xa8,0x78,0x55, - 0x01,0x41,0x64,0x35,0x04,0xfd,0xc1,0x5e,0x44,0x15, - 0x2f,0xc3,0x4e,0xde,0x97,0x80,0x24,0x13,0x1a,0xb4, - 0x1d,0xe2,0x35,0xa5,0x08,0x73,0x6e,0xa2,0x22,0xb2, - 0xc2,0x08,0xfc,0xfa,0xd5,0x96,0xf8,0xa3,0x14,0xfb, - 0x5d,0xa7,0xe0,0x67,0xae,0x3e,0x89,0xe1,0x87,0x23, - 0x14,0xff,0x2e,0x3e,0xf0,0xec,0x5a,0x3c,0x92,0xd8, - 0x42,0x5f,0x28,0x27,0xdc,0x42,0x2d,0x9e,0x16,0x97, - 0xfb,0x59,0x2b,0x84,0x82,0x86,0xaa,0x7e,0x6f,0x4d, - 0x61,0xd5,0x9e,0x7b,0x8d,0xa4,0x95,0x01,0x17,0x58, - 0xd2,0x1b,0xcc,0x3f,0x8e,0x77,0x5c,0xd2,0xda,0xab, - 0xe7,0x4e,0x23,0xef,0xf3,0xda,0xd9,0x1d,0xff,0x23, - 0xfb,0xef,0x0f,0xeb,0x99,0xa3,0x07,0x89,0xd9,0xbb, - 0xf7,0xf1,0xef,0x36,0x6c,0x83,0x1a,0xe8,0x2c,0xdb, - 0x82,0x2c,0xde,0x89,0x07,0x99,0x27,0xea,0x90,0x8c, - 0x84,0xee,0x2c,0xd2,0xc8,0x47,0x96,0xed,0x44,0x65, - 0x82,0x4b,0xc5,0xa8,0x96,0x5d,0x6c,0x3d,0x1a,0xad, - 0x15,0x54,0x56,0xad,0x9a,0xa1,0x60,0x02,0xc5,0xb5, - 0x14,0xfd,0x1c,0x08,0xf8,0xa3,0x52,0xe1,0x8e,0xc3, - 0xce,0x16,0x80,0x6f,0x33,0x13,0x70,0x1b,0x70,0x98, - 0xc9,0xfb,0xb7,0x6c,0xfc,0xf8,0xe3,0x27,0xb2,0xa1, - 0x4b,0x43,0xf1,0x61,0x54,0xd9,0x90,0xf7,0xf9,0x08, - 0x60,0xcc,0xea,0xbf,0x10,0x88,0x11,0x9b,0x52,0x8a, - 0x6e,0xcf,0xdd,0x32,0x80,0x91,0x25,0xc3,0x46,0xd7, - 0xb3,0x83,0x02,0x72,0x9b,0x52,0xa8,0x90,0x6c,0x34, - 0x05,0x26,0x6e,0xf1,0x97,0xf2,0x4c,0x18,0x38,0xd8, - 0x15,0x91,0x19,0x76,0x6b,0xda,0x70,0x66,0x55,0x45, - 0x5a,0xb1,0x80,0x73,0xb7,0xd5,0x2e,0x6a,0xba,0x86, - 0x9d,0xef,0xf0,0xfa,0x3c,0x7b,0x6e,0x45,0xf9,0x7d, - 0x60,0x89,0x7b,0x10,0x11,0x55,0x90,0xb6,0x9e,0x4e, - 0x05,0xb2,0x30,0x0d,0xe9,0x9d,0x12,0x8c,0x32,0xb9, - 0xa9,0xe7,0x03,0x1d,0x46,0x1a,0x7f,0xda,0x06,0x7c, - 0xe2,0x34,0x8a,0xe3,0x27,0x6b,0xfb,0x8a,0x0f,0x31, - 0xbc,0x3d,0xa6,0x8e,0xfb,0x21,0xc0,0x28,0x0f,0x78, - 0x5b,0xfa,0x70,0x73,0x06,0xa8,0x68,0x70,0x52,0x18, - 0xed,0xa2,0x41,0x1c,0x8d,0xdf,0x4e,0xdb,0xcd,0x3b, - 0x0e,0x77,0xbc,0xec,0x68,0x89,0xee,0xd5,0xe3,0x16, - 0x30,0x4d,0x45,0x24,0x82,0xe3,0x50,0xd7,0xde,0x63, - 0xa7,0x50,0x5c,0x62,0xa5,0xe5,0xc4,0xf6,0x74,0x65, - 0xb0,0x83,0x85,0xb1,0x44,0x14,0xfb,0xb5,0xc5,0x7b, - 0x63,0x19,0xe2,0xf1,0x65,0xb9,0xec,0xbf,0x17,0xa4, - 0x8e,0xf2,0x0d,0x63,0xa3,0x25,0x57,0x49,0xf6,0x70, - 0x4b,0x81,0x29,0xd9,0xed,0x19,0xce,0xe2,0x1f,0xa8, - 0x06,0xea,0x94,0x31,0x9f,0x9b,0x02,0x2a,0x46,0x02, - 0xb4,0xac,0xd5,0xdb,0xa0,0x94,0x30,0x75,0x0d,0xfc, - 0x7c,0xe3,0x05,0x58,0x5a,0x89,0x02,0x6e,0x5c,0x5d, - 0x13,0x0d,0x70,0x10,0x97,0x25,0xcd,0xac,0x1e,0x04, - 0x80,0x67,0xc5,0xe6,0xe3,0x92,0xf4,0xe9,0x6e,0x38, - 0xde,0xe1,0xf7,0xef,0x31,0xbf,0xf3,0x4c,0x11,0xa2, - 0x80,0x6d,0x4e,0x6b,0xd9,0x48,0xe8,0x81,0x2f,0x72, - 0x68,0x53,0xc2,0xc4,0x2b,0x76,0x9d,0x8f,0xaa,0xf6, - 0xe0,0x4e,0x45,0x2d,0x38,0x25,0x41,0xdb,0x5d,0xcf, - 0x9c,0x1c,0x01,0xc0,0xee,0xc1,0x11,0x67,0x20,0x33, - 0x15,0xb9,0xc5,0xa4,0x62,0xee,0x38,0x36,0x8c,0xcf, - 0xca,0xc0,0xd3,0x19,0xe0,0x99,0x62,0x1b,0xdc,0x37, - 0x58,0x77,0x77,0xce,0x20,0x83,0x2d,0xcf,0xbd,0xa2, - 0x44,0x2c,0x7c,0x8c,0xf2,0xa9,0x4b,0x1c,0x85,0xdd, - 0x3b,0xb2,0x0f,0x67,0xae,0x3d,0x98,0xa8,0x25,0xd5, - 0x48,0x15,0x9d,0xa9,0x7d,0x4e,0x24,0x1f,0x09,0x71, - 0xd9,0x2b,0x23,0x39,0x48,0xab,0x3a,0x4b,0x85,0x38, - 0x64,0x86,0x1f,0x30,0x1b,0xe1,0x39,0x0a,0x0c,0x9d, - 0x95,0xc0,0x13,0x5f,0x80,0xfb,0xb9,0xfc,0xa7,0x12, - 0x5f,0xa1,0x4f,0xf4,0xbb,0x12,0xc1,0x90,0x51,0x3e, - 0xd0,0xf3,0xe4,0x0d,0x22,0xc1,0xa0,0xe8,0x2a,0x95, - 0x78,0x79,0xf0,0x81,0x37,0x8f,0x3f,0x3e,0x50,0x91, - 0xbc,0x5f,0x1c,0x65,0xc3,0x70,0x6e,0x53,0x36,0xb2, - 0x24,0x68,0x93,0x95,0x60,0xf8,0xd8,0x1a,0x1f,0x46, - 0x61,0x7a,0x4d,0xde,0x7e,0x1e,0xe1,0x41,0x1d,0x31, - 0x60,0x94,0x0e,0x84,0x4e,0x45,0xaa,0x22,0x70,0xba, - 0x99,0xf2,0x3e,0x27,0xf0,0xad,0x9d,0x70,0x34,0xb0, - 0x8b,0x81,0xbe,0x87,0xe1,0xe4,0x48,0x8c,0xce,0xa3, - 0x14,0xed,0x8d,0xe0,0x3a,0x81,0xa8,0x1c,0xcf,0x02, - 0x78,0xfa,0xef,0xcc,0x63,0x95,0xec,0x87,0x07,0xf2, - 0x3e,0xb0,0xb9,0x86,0x12,0x20,0x52,0x09,0xb2,0x94, - 0x40,0x57,0x27,0x47,0x89,0x52,0xd7,0xe7,0xdf,0xf2, - 0x05,0xe0,0x78,0x63,0x10,0xe7,0x13,0x78,0x01,0xfb, - 0x80,0x49,0x6e,0x5b,0xa1,0xa7,0xac,0xe3,0x00,0xa8, - 0x9d,0x0e,0x6d,0xf3,0x86,0xe8,0xc2,0x7a,0xeb,0x5d, - 0xe8,0x79,0xba,0x9b,0x4b,0x8d,0x46,0xde,0x6f,0x0e, - 0xd2,0x40,0x5b,0x5a,0xb1,0xd4,0xe0,0xfe,0x22,0x57, - 0xb9,0x6e,0x34,0xcd,0xba,0xd8,0xa0,0xe1,0xe9,0xbe, - 0xd7,0x16,0x13,0xb6,0x0a,0x4b,0x09,0x95,0x64,0x65, - 0x1b,0x5e,0x8c,0xc0,0x82,0x8e,0xa3,0x92,0x8f,0x4c, - 0x94,0x63,0xdb,0x66,0x9b,0x33,0xfb,0xce,0xe5,0x50, - 0x2d,0x00,0x58,0x2a,0x6f,0x13,0x74,0x36,0x75,0x87, - 0x0d,0x26,0x31,0x2c,0x55,0x87,0xa8,0xfc,0xe9,0x4c, - 0x3f,0x2d,0xf3,0x9a,0x4f,0x6a,0xc1,0x20,0x50,0xc9, - 0x50,0x5b,0x47,0x78,0x36,0x1f,0x81,0xef,0x09,0x45, - 0x48,0x4b,0x99,0x9b,0x16,0x55,0x18,0x3c,0xe7,0x9b, - 0x93,0x80,0xf8,0x71,0x63,0x8d,0xef,0x46,0x84,0x56, - 0x76,0x47,0x96,0xe6,0xd6,0xad,0xe3,0x07,0x67,0x70, - 0x7b,0x88,0x46,0xde,0x6f,0x8b,0x6c,0x73,0x2e,0x85, - 0x16,0x86,0xb6,0xc3,0xef,0xbd,0xbf,0xfa,0xcf,0xe3, - 0x7e,0xd8,0xa0,0xba,0xed,0x8c,0x5d,0xe9,0x50,0x87, - 0x54,0x18,0xb2,0xf5,0x8e,0xaa,0x0b,0xa2,0x5c,0xce, - 0x85,0x07,0x8c,0xd0,0xbd,0x00,0xe4,0x8b,0x69,0x73, - 0xec,0x60,0xf0,0x04,0x1c,0x25,0x58,0x7c,0x77,0x43, - 0x15,0x18,0xad,0x98,0x76,0xc9,0x0a,0xe8,0x47,0x3e, - 0x4c,0x21,0x68,0x88,0x86,0xa1,0x98,0x8e,0x03,0xb3, - 0x5f,0xbf,0xf3,0x3f,0x59,0x94,0x62,0x14,0x60,0x90, - 0x76,0xd6,0x3a,0xa7,0x90,0x3b,0x36,0x0b,0x9d,0xd4, - 0x9d,0xdb,0x03,0xaa,0x8b,0x7c,0x22,0x61,0xc6,0x9a, - 0x35,0x45,0x93,0x43,0xba,0x94,0xc1,0x4f,0xb8,0x00, - 0xf8,0xe1,0x12,0x7f,0xaa,0xd3,0xcd,0x63,0xd6,0xcc, - 0x06,0x26,0xe1,0xd1,0x04,0xed,0xd8,0x61,0xfd,0x61, - 0x6c,0x73,0x6c,0x4b,0x82,0x33,0x79,0x1f,0xc7,0xb4, - 0x9f,0x11,0x2b,0xe0,0xb6,0x4a,0x08,0xe7,0x05,0x9e, - 0x67,0x9e,0x75,0xf6,0x3e,0xa5,0xcd,0x54,0x3c,0x01, - 0x19,0xdb,0x18,0x8e,0xcc,0x9b,0x2d,0xb5,0xfa,0xd1, - 0xa3,0xda,0x93,0xc3,0x90,0x2c,0x17,0xfe,0xc0,0xab, - 0xed,0x47,0x95,0x1b,0x46,0x2d,0x20,0x90,0xd0,0xfb, - 0x21,0xea,0xc0,0x83,0xb2,0xe8,0xd8,0x5a,0x62,0x0a, - 0xee,0x01,0x0c,0xfb,0x35,0x65,0xd4,0xd7,0x3f,0xe9, - 0xf6,0x9c,0xa8,0x8c,0xe0,0x94,0x70,0x91,0xb1,0xc8, - 0x72,0x4d,0x24,0x86,0xc8,0x4d,0x95,0x99,0x53,0x90, - 0x98,0xcc,0x29,0x7d,0xc3,0x7b,0x96,0xd5,0xd9,0x14, - 0x7b,0x2d,0x19,0x9e,0x99,0xcd,0x72,0x5d,0xf3,0xcb, - 0x98,0xb4,0xb0,0x01,0x7f,0x3b,0xdf,0xf7,0xac,0x0c, - 0x78,0x9b,0xbc,0xbf,0xf9,0x0d,0x3c,0x2e,0x27,0x70, - 0x4a,0xe6,0x10,0x16,0x9e,0x63,0x95,0xd8,0xae,0xf4, - 0x96,0x7e,0xcf,0x10,0xb3,0x9b,0x15,0x6e,0x4a,0x4f, - 0x6c,0x6b,0x9d,0xdb,0xda,0x1b,0x6d,0x10,0xb0,0xce, - 0x79,0x8f,0x44,0xde,0x2f,0x6d,0xbe,0xeb,0xa1,0xad, - 0x0d,0x18,0x04,0x09,0xaf,0x3c,0x49,0xc1,0x4e,0xde, - 0x17,0x96,0x9c,0xa9,0xee,0x32,0xd3,0x91,0x13,0x36, - 0x40,0x11,0x00,0x4d,0x35,0x0d,0x36,0x60,0x29,0xca, - 0x55,0xd7,0x36,0x19,0x9a,0x60,0x14,0xcd,0xe2,0x4c, - 0xdb,0x6e,0xd4,0x6b,0xa2,0xf3,0x43,0x83,0x15,0x6b, - 0x19,0xa3,0xfa,0xed,0xa1,0x66,0x46,0xbb,0x9d,0x05, - 0x73,0xd5,0x59,0x50,0x02,0x3a,0xb8,0x87,0x35,0x55, - 0x38,0x13,0x33,0xa1,0xa3,0x33,0xa0,0xbf,0xe8,0x8d, - 0xc6,0xd1,0xd9,0x43,0xea,0xeb,0xc8,0x59,0x76,0x7c, - 0xfd,0xb8,0x8e,0xff,0x51,0xf2,0x8f,0x3f,0x09,0x2b, - 0xad,0x88,0xe7,0x0d,0x8a,0xf5,0x20,0xe8,0xe1,0x9d, - 0x63,0x6f,0x64,0x9c,0x0d,0xf4,0x78,0x98,0x69,0x1f, - 0x71,0xc9,0x8d,0x06,0x43,0xea,0x50,0xcc,0x9c,0xf3, - 0xee,0x2d,0x80,0x72,0x16,0xd5,0x32,0x1b,0x4d,0x8e, - 0x4b,0x0d,0x46,0xbb,0xb0,0x0d,0x8b,0x9f,0x5c,0x85, - 0xab,0x31,0x2d,0xf7,0x10,0xb7,0x42,0x33,0xf9,0xe2, - 0x18,0xed,0xd9,0xb4,0xa9,0xbf,0x55,0xa1,0xa0,0xc2, - 0x23,0x5b,0x6f,0x86,0x9a,0x76,0xac,0x56,0x38,0x9a, - 0xc1,0x69,0xd7,0xd8,0xff,0xde,0x45,0xbd,0x03,0x32, - 0x5b,0x8c,0x0c,0xda,0xfc,0x43,0xcb,0x83,0x4a,0xee, - 0xf5,0x65,0x58,0x8a,0xf9,0x8b,0x22,0xac,0xb4,0x63, - 0xea,0x82,0x95,0x6b,0x64,0x43,0x46,0xd3,0xc6,0x8d, - 0xa3,0xe0,0x19,0xa3,0x61,0x48,0xf5,0x98,0xaa,0xd6, - 0xa1,0x6c,0xff,0x22,0x0d,0xff,0xbc,0x04,0xe0,0xe3, - 0x26,0xf8,0x56,0x3c,0x7b,0x97,0xe6,0x8f,0xb0,0xb3, - 0x7d,0x3a,0x1d,0x21,0xf6,0xd9,0xf9,0x46,0x5b,0x67, - 0xe0,0xf6,0xfc,0x6e,0x22,0x09,0x9f,0x77,0x52,0x3c, - 0x4b,0xaa,0xa8,0xb2,0x8c,0xf1,0xc0,0x44,0x1d,0xe0, - 0x71,0x0f,0x87,0x8c,0x2b,0xf5,0x49,0x75,0xe2,0x4c, - 0xa6,0x29,0xdd,0x6a,0x9c,0x35,0x53,0xd8,0x0a,0x92, - 0x8c,0x60,0xee,0xa9,0x3d,0x6a,0xd4,0xbe,0xbe,0x93, - 0xf7,0xaf,0x41,0x97,0xa5,0x76,0xce,0x05,0xc5,0xd3, - 0x76,0xb9,0x50,0x26,0x41,0x1d,0x60,0x02,0x79,0x9f, - 0x45,0x58,0xe3,0xb5,0x30,0xe9,0xe3,0xc6,0x2a,0xae, - 0xd9,0x07,0xd3,0x74,0x47,0x5d,0x6a,0xbe,0x3d,0x4c, - 0xac,0x48,0xe3,0x76,0x3f,0x28,0xe5,0x18,0x8a,0x4c, - 0x1c,0x2b,0x96,0x73,0x05,0xa9,0x92,0xc5,0xc9,0xbd, - 0x05,0x83,0x4d,0x91,0x2a,0x19,0xd9,0x1a,0x84,0xe8, - 0x21,0xbc,0x15,0x00,0xde,0x20,0xef,0xe3,0x6e,0x25, - 0xee,0xc8,0x34,0xf8,0xbb,0x6c,0x04,0x7b,0x48,0xb7, - 0x3a,0xff,0x3c,0xc8,0x66,0x30,0x6e,0x82,0xf0,0xa6, - 0xed,0x97,0x71,0x3e,0x2b,0x00,0x14,0x1c,0xf3,0x87, - 0x29,0x91,0x6c,0xac,0x35,0x78,0xca,0x5a,0x7c,0x08, - 0x78,0xed,0x78,0x10,0xe3,0xcd,0x3a,0xcb,0xce,0x50, - 0x55,0x60,0xd4,0x09,0x3e,0xc6,0xf0,0x15,0x8e,0xc2, - 0x95,0x6b,0x3b,0x79,0x5f,0xea,0x62,0x4f,0x75,0xd1, - 0x31,0x14,0xcf,0x48,0xb4,0x0b,0x80,0x90,0x91,0x88, - 0x66,0xc0,0xfc,0xf7,0x21,0x9a,0x80,0x70,0xfa,0x4d, - 0x2d,0x2f,0xe6,0x78,0x34,0xdd,0x07,0x50,0x86,0x7b, - 0xc8,0x31,0x9c,0x10,0x55,0xdc,0x7c,0xbd,0x58,0x10, - 0x12,0x93,0xde,0x75,0xa8,0x54,0xd9,0xd2,0xff,0x07, - 0x75,0xc6,0xa2,0xe3,0x51,0x9c,0xfa,0x0f,0xa8,0x7a, - 0x94,0xaa,0xba,0x24,0xc1,0xf3,0xff,0x1b,0x00,0xf9, - 0xb9,0x55,0x48,0x36,0x2a,0xf6,0x5d,0x00,0x00,0x00, - 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x01,0x3a,0xd3,0x49, + 0x44,0x41,0x54,0x78,0xda,0xa4,0xbd,0x4d,0x92,0x24, + 0x49,0xcf,0xa4,0xe7,0x16,0x55,0x43,0x11,0x72,0xc1, + 0x39,0x00,0x17,0x3c,0x13,0xc9,0xab,0xf1,0x1e,0x3c, + 0x13,0x17,0x3c,0xc0,0x70,0x31,0xb3,0xe0,0x54,0x82, + 0x8b,0x4e,0xcf,0x46,0xa8,0xeb,0xa3,0x40,0xd4,0xd7, + 0x22,0xaf,0xbc,0xdd,0x55,0x99,0x11,0xfe,0x63,0x06, + 0x03,0x14,0x0a,0xd5,0x73,0xce,0xf9,0x3f,0xcf,0x39, + 0xff,0xcb,0x39,0xe7,0xbf,0x55,0xd5,0x75,0xff,0x73, + 0xce,0xb9,0xbe,0xff,0xbb,0xaa,0xea,0x3a,0xe7,0x5c, + 0xe7,0x9c,0xeb,0xeb,0xeb,0xeb,0x3a,0xe7,0xbc,0xfd, + 0xdc,0xfd,0x33,0xfd,0x9f,0xfb,0x77,0xaa,0xaa,0xfa, + 0xcf,0xf7,0xcf,0xd6,0xdf,0xed,0x9f,0x7f,0x7f,0xf7, + 0x75,0x5d,0xd7,0xeb,0xf5,0xfa,0xf9,0xcc,0xfe,0x7b, + 0xf0,0x79,0x17,0x5d,0x4b,0xff,0x1d,0xbd,0xd7,0xfb, + 0xef,0xf4,0x77,0xbf,0xff,0xbe,0x5e,0xaf,0xd7,0xdb, + 0xbd,0xb7,0xeb,0x7c,0xdc,0x1f,0x7d,0x5f,0xfb,0xb9, + 0xc7,0xf3,0xea,0x7f,0xd7,0xaf,0x43,0x3e,0xbb,0xcc, + 0xb5,0x9d,0xfb,0xc3,0xda,0x73,0xbb,0xaa,0xea,0x7a, + 0xbd,0x5e,0x6f,0xdf,0x73,0x3f,0xbf,0xef,0xe7,0xf9, + 0xf8,0x2c,0x79,0x86,0xd5,0xbf,0xbf,0xaf,0x81,0xfe, + 0xa1,0xe6,0x3a,0x4b,0x3f,0x53,0xde,0x51,0xc1,0xf3, + 0xff,0xf9,0xfb,0xfb,0x1a,0xef,0xf5,0x70,0x5f,0xf7, + 0xfd,0x2e,0xf4,0x79,0xeb,0xb5,0xdf,0xdf,0x25,0xd7, + 0x8c,0xef,0xca,0xac,0xcd,0x72,0xeb,0xf5,0x5e,0x87, + 0xf8,0x12,0xe1,0x9f,0xef,0xfb,0x88,0xd7,0xad,0xd7, + 0xda,0xae,0x2d,0xad,0x2f,0xfb,0x0c,0xfb,0x33,0x3f, + 0xe7,0xd4,0xd7,0xd7,0x97,0xfd,0x39,0x5d,0x5f,0xfa, + 0xb9,0x6e,0x4f,0x4d,0xf7,0xd0,0xf7,0xab,0xec,0xe5, + 0xb7,0xdf,0xbd,0xaf,0xa9,0xbf,0x67,0x5a,0x6f,0xfa, + 0x77,0xfd,0x33,0xfb,0xb5,0xbd,0x5e,0xaf,0xc7,0xfd, + 0xa7,0xf7,0x4c,0xef,0x40,0xee,0xfd,0xb8,0xe7,0x7d, + 0xaf,0x07,0xb7,0x04,0xcc,0xe7,0x1c,0x7a,0x9e,0xfd, + 0x9a,0x25,0xce,0x1d,0xbd,0x4e,0x8d,0x8f,0x6d,0xbd, + 0x9c,0xfe,0xbc,0xdd,0x3b,0x6a,0xd7,0x76,0xdc,0x3b, + 0x95,0x3f,0x3b,0xe6,0x1c,0xb0,0xef,0x47,0xe3,0xca, + 0xbf,0x61,0xe3,0xe0,0xbb,0xe8,0xcf,0xd4,0xc4,0x87, + 0xeb,0xf5,0x7a,0x9d,0xfe,0xce,0x75,0x3b,0xa6,0x35, + 0xf0,0x1d,0x0f,0xdd,0x67,0x9f,0xbe,0x7e,0xfa,0xf3, + 0xea,0xd7,0xe4,0xf6,0x6e,0x7f,0x1e,0x43,0x6c,0x7b, + 0xbb,0xff,0xfe,0x0c,0xfa,0xb3,0x71,0xbf,0xdb,0xc2, + 0xb9,0xdd,0x73,0xf7,0x3b,0xd6,0x35,0x76,0xdf,0x2f, + 0xbd,0x6b,0xdd,0x8b,0x6e,0x1d,0x98,0x7d,0x70,0xfa, + 0xba,0xe8,0xb1,0xf4,0xfb,0xef,0x5c,0x2c,0x3b,0xf4, + 0x5c,0xee,0xfb,0xd2,0xbd,0xd6,0xd6,0xfe,0xe3,0xbe, + 0xdb,0x33,0x3d,0x7a,0xf6,0xeb,0xde,0xd2,0xef,0x93, + 0xfd,0x7a,0x20,0xbe,0xfd,0x8f,0xd7,0x75,0xfd,0x3f, + 0xe7,0x9c,0xf3,0x7f,0x9d,0x73,0xfe,0xd7,0xaa,0xfa, + 0xaf,0xb0,0x71,0x8a,0x82,0xee,0x7d,0x08,0x84,0xe0, + 0x51,0x29,0xa8,0x7e,0xff,0xfd,0xe3,0xa0,0x7d,0xbd, + 0x5e,0xa7,0xbe,0xff,0x31,0x2f,0xe2,0x3e,0xf3,0x2b, + 0x04,0x45,0x3a,0x98,0xca,0x1c,0xe6,0x6f,0x7f,0x67, + 0x36,0xdc,0x23,0x19,0x70,0x9f,0x69,0x16,0x52,0x99, + 0x03,0xf8,0xe7,0x10,0x87,0xe0,0x6b,0x13,0x0b,0x3d, + 0x94,0xd3,0xbd,0xca,0x22,0xc0,0x64,0x44,0x13,0xcf, + 0x7e,0xdd,0xba,0x01,0x25,0x00,0xd2,0x7a,0x28,0x0d, + 0x2c,0x12,0x20,0x8b,0x0e,0xd3,0xf6,0x7c,0xf5,0xb9, + 0x1c,0x49,0x02,0xec,0xb5,0x69,0xc2,0xec,0xde,0x55, + 0x4a,0x26,0x5c,0xd2,0x1f,0xde,0xf7,0xb4,0xc6,0xdc, + 0xbb,0xa8,0x74,0x80,0x98,0x03,0xff,0xe7,0xe7,0xe9, + 0x90,0x1d,0xfe,0x29,0x08,0x96,0x36,0xd1,0xa0,0x6b, + 0xbb,0x7f,0xbe,0x07,0x51,0xf7,0xbe,0xe9,0xbb,0x74, + 0xfd,0x6c,0x12,0x39,0x58,0x1f,0x6e,0xbf,0xbe,0x5d, + 0x63,0x0f,0x96,0x26,0xf9,0x7c,0x24,0x50,0x6e,0x0d, + 0xa5,0x6b,0xfa,0x7e,0x0f,0x6f,0x07,0xb3,0x8b,0x15, + 0xb4,0x17,0xfb,0x29,0xe0,0x0a,0x49,0x4a,0xb2,0xf4, + 0x9e,0xf4,0x70,0xef,0x87,0xb4,0xee,0x3b,0x4d,0x50, + 0xdc,0x41,0xaa,0xd7,0xfb,0x5d,0xe8,0x9d,0xc5,0xbb, + 0x39,0xe1,0x3e,0xfb,0x41,0x7f,0x4c,0x8c,0x3a,0x3d, + 0x19,0x80,0xef,0x39,0x94,0x6c,0x7d,0xaf,0xc7,0xa3, + 0xef,0x55,0x13,0x38,0x73,0xd0,0x62,0x32,0xda,0x93, + 0x09,0xb3,0x37,0x8f,0xae,0x37,0x4d,0x3e,0x21,0x6e, + 0x1f,0xf7,0x9e,0x5f,0xaf,0xd7,0x31,0x05,0xfd,0x5b, + 0x12,0x64,0x8a,0xd6,0x93,0x12,0xca,0x90,0xac,0x1e, + 0xb7,0x0f,0x5d,0x62,0xa1,0xef,0xc7,0xc5,0x88,0xfb, + 0xbd,0x40,0x11,0x76,0x1c,0xf8,0x70,0x6f,0xa1,0x3b, + 0x66,0x68,0xa1,0xf4,0x7d,0x8d,0x27,0xe4,0x0a,0xb8, + 0x1e,0xd3,0x5a,0xd1,0x64,0x5b,0x7e,0xe7,0x7f,0x3a, + 0xe7,0xfc,0xdf,0xbf,0xcf,0x39,0xff,0xed,0xba,0xae, + 0xff,0x7a,0xce,0xf9,0xaf,0x26,0x73,0xb6,0x28,0x4b, + 0xaa,0xa8,0xe5,0x06,0xca,0x55,0xe7,0x94,0x1c,0xe9, + 0x21,0xe4,0x92,0x1b,0x45,0x56,0x74,0xa1,0xdc,0x07, + 0xb8,0x79,0xb1,0x36,0x51,0xeb,0xc9,0xca,0x74,0x1d, + 0x66,0xd3,0x94,0x43,0x1b,0x14,0x1c,0x90,0xbf,0x7f, + 0x24,0x1e,0xfa,0x3b,0x77,0x55,0xdc,0x16,0xae,0x45, + 0xae,0x86,0xe7,0x44,0x09,0xd3,0xcf,0x7b,0x83,0xc5, + 0x56,0xba,0xd1,0x5a,0x00,0x79,0x24,0x75,0x0e,0xd5, + 0xba,0x7f,0xbe,0xa3,0x64,0x01,0x31,0xb2,0x09,0x61, + 0xbf,0xbf,0xe1,0x60,0x2a,0x3a,0xc4,0xfb,0xe7,0x2f, + 0x90,0x9f,0xd2,0x83,0xd5,0x1c,0x6e,0xf6,0xbb,0xa6, + 0x04,0xd3,0x55,0xf2,0x6e,0x7d,0xba,0x0a,0x69,0x42, + 0x66,0xa8,0x48,0xd1,0x04,0xda,0xa0,0xb6,0x6f,0xdf, + 0xa1,0xc9,0x8d,0xfb,0x1e,0x45,0x58,0x4c,0x92,0x1e, + 0x11,0x23,0x17,0x38,0x29,0xb9,0xa1,0x98,0x72,0xce, + 0xb9,0xfe,0xfc,0xf9,0x33,0x26,0x2c,0xf0,0xac,0x0e, + 0x5d,0x27,0x54,0x97,0x88,0xac,0x75,0xa4,0xe6,0x46, + 0x87,0x13,0xca,0x66,0xd0,0x82,0x43,0xf7,0xc8,0xf9, + 0x09,0xa3,0x7e,0xfa,0xb3,0x2e,0xc6,0x28,0xca,0xa3, + 0x09,0xa4,0x49,0xb0,0x8e,0x39,0xac,0xec,0x45,0x85, + 0xe4,0xf6,0xb8,0x3d,0xd5,0x9f,0x03,0xec,0x87,0xb7, + 0x03,0xd5,0xc4,0x3d,0x97,0xef,0xbe,0x5d,0x7b,0x47, + 0x1b,0x29,0x61,0xb8,0xdf,0x5b,0x7f,0x27,0xee,0x5a, + 0xfb,0xda,0x31,0x71,0xfd,0x04,0x24,0xf6,0x38,0x74, + 0x9a,0x10,0xa7,0xfb,0x40,0xef,0xbf,0x73,0x3f,0x7b, + 0xfd,0x1e,0x87,0x60,0x29,0x9a,0xf8,0xfd,0x33,0xf4, + 0x8e,0x8e,0x2b,0x34,0x3a,0x02,0x49,0xef,0xd4,0x21, + 0x55,0x8a,0x70,0x99,0x33,0xe6,0x00,0x6a,0xf7,0x76, + 0x7b,0x66,0x8f,0x62,0x02,0xa4,0x49,0x9e,0x8b,0x29, + 0xe7,0xfd,0x90,0xea,0xd7,0xf5,0xdf,0x7e,0xbb,0x03, + 0xc1,0x41,0xc9,0x6e,0x21,0xa6,0x40,0xe5,0x2a,0xfe, + 0x74,0x50,0xa5,0x56,0x8f,0x7c,0xe7,0xfa,0xef,0xdc, + 0xa6,0x54,0xe8,0xda,0x1d,0x0c,0x9a,0x5c,0xb8,0x20, + 0xed,0x5a,0x39,0xdf,0x0b,0x2e,0x1d,0xb6,0xa5,0x0b, + 0xd4,0x05,0xca,0xbe,0xb0,0x7b,0xb2,0x62,0x60,0x77, + 0x44,0x9f,0xc2,0x01,0x53,0x21,0xd8,0x96,0x6e,0x56, + 0x87,0xe0,0xb8,0xf7,0x45,0x07,0xd8,0xfd,0x3c,0xe8, + 0x00,0xbe,0x7f,0x57,0xd7,0x98,0x4b,0x74,0x53,0x42, + 0x02,0x9b,0xa3,0xa6,0xb6,0x91,0x26,0x67,0x21,0xa1, + 0x2f,0x08,0x64,0xb6,0x95,0xea,0x82,0x3a,0x3c,0xbf, + 0x4a,0x87,0xb7,0xbb,0x37,0x2d,0x20,0x52,0xb2,0x31, + 0xed,0xd7,0xfe,0x7e,0x74,0xdf,0xd3,0x9e,0x75,0x89, + 0x22,0xb5,0x82,0x1c,0x62,0x41,0xc8,0xcb,0xa6,0xd5, + 0xa2,0x2d,0xf1,0xf4,0xdc,0x4c,0xfb,0xbc,0x4c,0xa0, + 0xa4,0xe0,0x18,0xbf,0x43,0x29,0x02,0x5a,0xa5,0x6b, + 0x10,0x37,0xc9,0x4a,0xa5,0x76,0x90,0x8b,0x37,0xda, + 0x5e,0x72,0xeb,0xb4,0x21,0xa5,0x27,0xbd,0xc7,0x56, + 0x9c,0x62,0xdb,0xa5,0xad,0xe5,0x74,0x58,0x97,0xb6, + 0x53,0x0c,0x42,0x7d,0xa8,0x65,0xf4,0x6f,0x88,0xb3, + 0xf1,0xa1,0x08,0x25,0xba,0xff,0x8e,0x12,0xe1,0xef, + 0xe7,0x75,0xa6,0xf6,0xa4,0xc4,0xdd,0xba,0x13,0x32, + 0x78,0x16,0x27,0x20,0xae,0x27,0x14,0x87,0x6f,0xc9, + 0x56,0x8b,0x99,0x07,0xe2,0x1e,0x9e,0x6f,0x1d,0xb9, + 0x91,0x22,0xa6,0x7a,0x42,0x03,0xe8,0xd2,0xe3,0x7c, + 0xd3,0x77,0x23,0xb1,0xf3,0x50,0x7c,0x09,0x94,0x17, + 0xdb,0x86,0xa5,0xb3,0x58,0xce,0xac,0xe3,0x50,0xce, + 0xfb,0xef,0xc2,0x75,0xbc,0xbd,0xb7,0x9e,0xd0,0x87, + 0xb6,0xf4,0x3f,0xcf,0x2e,0x3c,0xa8,0x4a,0x3d,0x7f, + 0x87,0x8c,0x50,0xa2,0xa3,0xff,0x23,0xce,0x90,0x6b, + 0x3f,0x40,0xd5,0xe5,0x02,0x71,0x41,0x35,0x1b,0x5b, + 0x23,0xca,0x71,0x5a,0x06,0xe3,0x72,0x41,0x5e,0xf9, + 0x01,0x0e,0xe5,0x80,0x83,0xa2,0x52,0x72,0x00,0xdf, + 0x51,0x70,0x28,0x55,0x78,0xe9,0xe5,0x0e,0x63,0x97, + 0x34,0x75,0x14,0xca,0x5d,0x5f,0x7b,0xc6,0x0f,0xce, + 0x52,0x5b,0x80,0x75,0x1f,0xac,0x0e,0x31,0x72,0xed, + 0xb6,0xfe,0x3e,0x5d,0xe5,0x3d,0x25,0xa0,0xba,0x8e, + 0xa8,0x25,0xd7,0xf9,0x5b,0x9a,0x8c,0xca,0xe6,0x2c, + 0x87,0x8a,0x99,0xaa,0xb4,0x88,0x63,0xe6,0x36,0xfd, + 0xbf,0x67,0x47,0x4d,0x89,0x97,0xfb,0x0e,0x6c,0x95, + 0x42,0xf5,0xfa,0xf8,0xde,0xfb,0x73,0x1c,0xdc,0x4e, + 0x6d,0x94,0x1e,0x58,0x36,0xdc,0xa0,0xe9,0x59,0xa4, + 0x3d,0x4d,0xe8,0x09,0x71,0x4b,0xf4,0xb0,0x49,0x2d, + 0x33,0x49,0x76,0xaa,0xff,0xcf,0xa1,0x0d,0x1b,0x64, + 0xea,0x3e,0x84,0x74,0x8f,0x39,0x9e,0x8d,0x3e,0x8a, + 0xd7,0xeb,0x55,0x14,0xf7,0xcc,0xff,0xd7,0xd7,0xd7, + 0x57,0x29,0x3a,0x68,0x9e,0x4d,0x29,0xb2,0x9d,0xda, + 0xbd,0x0e,0xd9,0x4b,0x74,0x37,0x59,0x6f,0x8f,0x35, + 0xb9,0x41,0xa3,0x1d,0x7a,0x6c,0x62,0x6f,0x85,0x44, + 0xb4,0xe8,0x9c,0x21,0xf4,0x93,0xe2,0x6d,0x8b,0x51, + 0x45,0x7c,0x93,0xe9,0x1d,0x39,0x64,0xf5,0x02,0x6e, + 0x29,0xad,0x4f,0x77,0x5f,0xfd,0x7b,0xbe,0xbe,0xbe, + 0xaa,0xb5,0x7c,0xdf,0x8a,0x16,0xfd,0x0e,0xbd,0x86, + 0xa9,0xa8,0x82,0xb8,0xe6,0xfe,0xbf,0x28,0x66,0x28, + 0xed,0xc2,0x24,0x5c,0xab,0x58,0x37,0x80,0x2b,0x97, + 0x5b,0x2f,0x01,0xa5,0x45,0xea,0xcb,0x6f,0x17,0x30, + 0x36,0x41,0x6d,0x80,0xb4,0x8b,0x36,0x30,0xdd,0x58, + 0xe0,0xcb,0x60,0xd2,0xe5,0x5e,0xdc,0xc4,0x4d,0xd1, + 0xe0,0x67,0x92,0xa5,0xb7,0x56,0x95,0xb9,0xfe,0x0a, + 0x08,0x4e,0x4d,0xc8,0x94,0xd9,0x3c,0x05,0x99,0x75, + 0x4c,0x3a,0xa8,0x25,0x12,0x48,0x8a,0xe5,0x20,0xef, + 0xef,0x4d,0xf4,0x38,0x88,0x1d,0x37,0xca,0x7c,0x6e, + 0x85,0xf5,0x50,0x82,0x04,0x21,0xc1,0x9a,0x78,0x5a, + 0xb0,0x5e,0xca,0x6c,0x3a,0xfb,0x0e,0xa8,0xe5,0x44, + 0xe4,0xf0,0xc4,0x59,0xa2,0x9f,0x77,0xf7,0x42,0x3c, + 0x8d,0xbe,0x11,0x13,0x92,0x42,0xe8,0x10,0xb5,0x11, + 0xf4,0xd9,0xeb,0x3b,0x48,0xed,0x37,0xe2,0x07,0xc9, + 0xfb,0xc2,0xef,0xd3,0xb5,0xd7,0xf9,0x4b,0x74,0x7d, + 0x1b,0xa2,0x35,0x15,0x16,0xd4,0x52,0x71,0x28,0x8e, + 0x92,0xe8,0x03,0xc4,0xde,0x91,0xef,0x32,0x07,0xdb, + 0xa1,0x83,0xa1,0xdf,0x4f,0x4b,0xb4,0xb5,0x85,0x78, + 0x94,0xbc,0xec,0x92,0xbd,0xef,0x44,0xc8,0xb6,0x4e, + 0x1c,0xfd,0xc0,0x5d,0x9b,0x1b,0x50,0x21,0x14,0xa7, + 0x25,0x51,0x45,0xad,0x04,0x53,0x8c,0x3d,0x5a,0x4b, + 0x5a,0xa9,0x9b,0x67,0xda,0xf7,0xf5,0x5b,0xcb,0x4b, + 0x7f,0xb7,0x23,0xdc,0x8a,0x7e,0xf5,0xef,0x56,0x04, + 0xce,0x71,0x67,0x1a,0x0f,0xd3,0xa1,0x3a,0xd5,0xdb, + 0x61,0x0e,0x79,0x72,0x7c,0x95,0x8e,0x4a,0xe9,0xe1, + 0x7e,0x23,0x80,0x00,0x94,0x1d,0xa2,0x88,0x38,0x64, + 0xa9,0x23,0x30,0xb4,0x9f,0x08,0x09,0xd1,0x42,0xae, + 0xa3,0x82,0x09,0x65,0x4b,0xcf,0xc1,0xc4,0xb3,0x72, + 0xcf,0xbc,0x23,0x55,0x7a,0xb6,0xde,0xd7,0xf1,0xf5, + 0xf5,0x75,0xa8,0x93,0x70,0x5f,0x4b,0x1f,0x92,0xb8, + 0x3b,0x09,0x8a,0x06,0xca,0x9e,0xae,0xbb,0x55,0x06, + 0xd4,0x81,0x72,0xef,0xfa,0x45,0xd5,0xa9,0xcb,0xa8, + 0xfa,0x97,0x75,0xa8,0xc9,0x1d,0xf6,0x8a,0x80,0x38, + 0x64,0xc9,0x25,0x03,0xa1,0x1a,0x2c,0x87,0x26,0x69, + 0xd6,0x9e,0x0e,0x18,0xad,0x5a,0x42,0xa5,0x57,0x09, + 0x62,0xbe,0x7b,0xfe,0xdb,0xd6,0x5c,0x80,0x21,0x0b, + 0x12,0xc2,0xc4,0x7a,0x45,0xe4,0x83,0x7e,0xaf,0x1f, + 0xe6,0x84,0x8e,0xc1,0xb3,0xab,0x90,0x7d,0x97,0xab, + 0xba,0x5c,0x55,0xe9,0xaa,0x07,0xe0,0x2f,0x54,0x4a, + 0xb6,0x1d,0x7f,0x2a,0x25,0x6b,0xf4,0xfc,0xee,0x77, + 0x17,0x5a,0x29,0x91,0xfb,0xd6,0xae,0xa5,0x52,0xcb, + 0x44,0x10,0xcf,0xd2,0xe4,0x5e,0x50,0x36,0xfd,0xfe, + 0x5a,0x70,0x5a,0x1e,0x89,0xc0,0x77,0xa0,0x28,0xb7, + 0x4e,0x08,0x65,0x09,0xc9,0xef,0xdb,0x77,0x7e,0x5f, + 0x6f,0x75,0x14,0xe9,0xfe,0xef,0xaf,0xaf,0xaf,0xb7, + 0xe7,0x41,0xad,0x63,0xda,0x1b,0x54,0xbd,0x3b,0xce, + 0x9b,0xfe,0xef,0xbe,0x06,0x45,0x22,0x02,0x6f,0xce, + 0xa2,0x4f,0x7f,0xfe,0xfc,0xa1,0x62,0xa2,0x7f,0x3e, + 0x16,0x74,0x5a,0xad,0x3b,0x14,0x91,0xaa,0xd8,0x6d, + 0x3b,0x1f,0x90,0xe0,0x0d,0x4b,0xbe,0xb4,0xa8,0x83, + 0x36,0x4f,0xc1,0xde,0x7b,0xb4,0xbb,0x1d,0x32,0xd7, + 0x11,0x75,0x40,0x56,0x2b,0x20,0x89,0x35,0xa0,0xf5, + 0x6f,0xe7,0x4a,0xe3,0xc6,0xfc,0xc4,0x06,0x3d,0x38, + 0x1d,0x8f,0xd0,0x9d,0x4d,0x8a,0xaa,0xdc,0xc9,0x28, + 0xec,0xbd,0x02,0xd4,0x09,0xd1,0xb4,0xce,0x17,0x9d, + 0xda,0xc4,0x72,0xa8,0x63,0x7c,0xea,0xf7,0xab,0x67, + 0xa1,0x99,0x58,0x7d,0x8b,0xfd,0x72,0x7e,0x55,0x48, + 0xa2,0x6b,0x40,0x30,0x23,0xc2,0x4b,0x28,0x9c,0x43, + 0x99,0x1d,0x62,0x2f,0xf7,0x58,0xd3,0x35,0xb8,0x78, + 0x9a,0x50,0xdc,0xd7,0x04,0x79,0x11,0xb9,0x6b,0x43, + 0x3e,0x34,0x01,0xae,0xe8,0xa2,0x02,0xa1,0xef,0x2d, + 0xe1,0xd2,0xc4,0xc3,0xc1,0x99,0x5a,0x41,0xdf,0xbf, + 0x47,0x81,0x8f,0x0e,0x6f,0x73,0x88,0x57,0x5a,0x24, + 0xd0,0xae,0x89,0x13,0x69,0x6e,0xb3,0x13,0x1c,0x79, + 0xc1,0x74,0xcf,0x7d,0x30,0x69,0x9b,0xc2,0x41,0xc8, + 0x06,0xba,0xa6,0x16,0x43,0xa5,0x44,0x83,0xda,0x0c, + 0x74,0x5f,0xfd,0xfb,0x94,0xe4,0xad,0xaf,0x52,0xab, + 0x76,0x0d,0x3a,0x40,0xc8,0x2c,0x5a,0x57,0xad,0x02, + 0x7a,0x4c,0x15,0x6a,0x70,0xd7,0xe0,0xd6,0xdf,0xff, + 0xfd,0x3e,0x6f,0x94,0xc3,0x5d,0x87,0x41,0x2c,0xcb, + 0x21,0x37,0xee,0xfb,0xd3,0x61,0x36,0x4c,0xe5,0x94, + 0x3b,0xbc,0x5c,0xb2,0x04,0x05,0x4d,0x3a,0x0c,0xeb, + 0x1b,0x31,0xbb,0x93,0x9c,0xb8,0xef,0x29,0x21,0x4c, + 0x41,0xd0,0xf0,0x23,0xf0,0xfa,0xe9,0x3b,0x0c,0x01, + 0xfd,0x91,0xa4,0xd1,0x7a,0x4e,0x64,0x76,0x83,0x12, + 0x3d,0x12,0x4c,0x68,0x2d,0x3d,0xee,0xf3,0xf5,0x7a, + 0xf5,0x64,0xcd,0xa2,0x72,0x52,0x54,0xd6,0xd0,0x52, + 0x50,0x98,0xbf,0xd2,0x41,0xa0,0x07,0x71,0x3f,0xf4, + 0x5d,0xcc,0x20,0x5a,0xc0,0xfd,0x5d,0xba,0xfe,0x1d, + 0xa1,0x9f,0x38,0x9e,0x13,0xa1,0x9b,0x68,0x0e,0xfa, + 0xd9,0xc4,0x1d,0x4d,0x1c,0x4f,0x49,0x06,0xca,0x3d, + 0x2f,0xe5,0x8c,0x29,0xc9,0xbd,0x27,0x48,0xda,0x7a, + 0x24,0x9a,0x46,0x48,0x18,0x4a,0x08,0xc8,0xd8,0xd1, + 0x70,0x43,0x44,0xda,0x8a,0xa5,0x22,0x62,0x4a,0xe0, + 0xd3,0xde,0x4b,0x89,0x98,0xcb,0x0d,0x06,0x24,0xbf, + 0x5c,0xb7,0xe7,0x7e,0xe6,0xfd,0x1e,0x06,0xda,0x81, + 0x2d,0xae,0xa7,0xe7,0xdf,0x3f,0xe7,0xb7,0xcb,0xf0, + 0xdd,0x46,0xd6,0xf6,0x01,0x64,0x6f,0x69,0x5a,0x69, + 0x0a,0x32,0xb5,0x09,0xf8,0x1f,0x04,0xc9,0x9a,0x7a, + 0x82,0x0a,0x71,0x0e,0xc4,0xa9,0x32,0x1a,0x40,0x17, + 0x05,0x33,0x5d,0xd8,0x5a,0x41,0x04,0xed,0x97,0xa2, + 0xfb,0x49,0xdc,0x1e,0x78,0xe6,0x89,0x24,0x5c,0x81, + 0x7b,0x52,0x81,0x93,0x51,0xa0,0x61,0x51,0x14,0x70, + 0xa8,0x1d,0xd6,0xe1,0xf1,0xb4,0xa6,0x88,0x24,0xe8, + 0xee,0x9d,0x88,0xec,0x43,0xd5,0x52,0x81,0xa4,0x7d, + 0xfd,0xfa,0xf5,0xcb,0x4e,0xb2,0x41,0x6b,0xa5,0x54, + 0xef,0x86,0x3e,0xdb,0x8d,0xee,0xd3,0x01,0x26,0x2d, + 0xae,0x22,0xfd,0xa0,0x34,0xa9,0xe5,0xde,0x99,0xfe, + 0xae,0x06,0x7b,0x42,0x86,0x06,0x9e,0xd1,0x7a,0x74, + 0x1f,0x88,0xb1,0x13,0x72,0xfa,0x16,0x3b,0xdc,0x38, + 0x74,0x40,0x4b,0x70,0xfc,0x59,0x0f,0x7c,0x5d,0xa7, + 0x74,0x00,0xb4,0x8a,0xf5,0x50,0xf2,0x1f,0xa6,0x0e, + 0xcf,0x84,0xf2,0x48,0xdb,0xf7,0x0c,0xc4,0xf4,0xb7, + 0xcf,0x75,0xda,0x58,0xbd,0x2d,0x96,0xb8,0x41,0xaa, + 0x33,0x63,0xd6,0x5c,0x7d,0x7d,0x7d,0x9d,0x61,0x68, + 0xe2,0x04,0xde,0x0f,0x8d,0xc1,0x17,0x8d,0x3f,0x7f, + 0x3f,0xeb,0x72,0x63,0xdc,0x4a,0xa6,0x75,0x85,0xed, + 0x65,0xa6,0xaf,0xb4,0x0d,0x24,0xc9,0x0e,0xb6,0xa2, + 0xdc,0x74,0x73,0xbf,0x06,0x13,0x27,0xaa,0x4f,0x64, + 0x49,0xd2,0x53,0x4a,0xc8,0xd7,0xb6,0xa2,0xe3,0x51, + 0x5e,0x46,0x7f,0xa7,0xb7,0x99,0x4c,0xe1,0x51,0xa0, + 0x29,0xf4,0xf6,0x4c,0xa5,0x15,0x59,0x6e,0x92,0x4c, + 0xdb,0x6e,0x8e,0x8a,0x42,0x7b,0x98,0xe2,0xa2,0x12, + 0xce,0xcd,0x94,0xb5,0x25,0xc6,0x13,0x59,0x7b,0x6a, + 0x45,0xbe,0xfa,0xa1,0xee,0x7a,0x76,0x02,0x63,0x56, + 0x48,0x10,0xc6,0x2f,0x4f,0xb0,0x6a,0x20,0x3d,0xd5, + 0xb6,0x92,0x48,0x30,0xbb,0xd9,0xd8,0x96,0xdf,0x43, + 0x95,0xec,0xb6,0x12,0x55,0xa8,0x78,0x6a,0x2b,0x2c, + 0xf5,0x8b,0x90,0xe8,0x76,0x57,0xe5,0xa9,0xca,0xdf, + 0x12,0xdc,0x89,0x37,0xe2,0x5a,0x73,0xd0,0xde,0x72, + 0x07,0x54,0xac,0xca,0x54,0xeb,0x89,0xae,0x13,0x3e, + 0x3f,0xa1,0x7f,0x16,0x42,0xd6,0x00,0x3e,0x41,0xee, + 0xba,0xee,0x93,0x66,0xcc,0x56,0x18,0xb1,0x55,0xe2, + 0x95,0x5a,0x33,0xd4,0x22,0x30,0x13,0x20,0x3f,0xd7, + 0xa2,0x90,0xb8,0x41,0x23,0x3b,0xe9,0xd7,0x26,0x74, + 0xba,0x76,0x12,0x09,0x39,0xc5,0x81,0xd0,0x06,0xb7, + 0xed,0xd8,0xc4,0x39,0xa2,0x9f,0xd3,0x64,0x8d,0xfe, + 0x97,0x9e,0x6d,0x47,0xbb,0x1c,0x31,0x3d,0x8d,0xfe, + 0xcb,0x7d,0xf6,0xf6,0xa0,0xe5,0x84,0xb9,0xc3,0xf7, + 0xfb,0x80,0x29,0x42,0x80,0x0d,0xe7,0x6c,0x83,0x0a, + 0x8d,0xa4,0x7c,0x77,0xad,0x0e,0x09,0x9e,0x26,0x89, + 0x06,0xc4,0x22,0xd2,0x1a,0x5c,0x4c,0xe9,0xf1,0x26, + 0x91,0xc7,0x43,0xa2,0x5f,0xe1,0x20,0xa6,0xa9,0xd4, + 0x0a,0xb1,0xbe,0x68,0x0f,0x87,0xc4,0xbc,0xa0,0x05, + 0x94,0xd0,0xb1,0x47,0x21,0xd6,0x45,0x6b,0x69,0x5d, + 0x43,0xb2,0x51,0x21,0x49,0x46,0x54,0x89,0x50,0xdd, + 0x1b,0xf1,0xa3,0x3d,0x29,0x1c,0x4b,0xcc,0x17,0x24, + 0xf6,0x3a,0x7e,0x2b,0x52,0x6f,0x52,0x2c,0xd0,0xf3, + 0x46,0xa9,0x06,0x54,0xa8,0xbf,0x9c,0x46,0xcd,0xd4, + 0x9e,0x4a,0x55,0x05,0x40,0x6f,0xe3,0xc5,0x53,0xd0, + 0x74,0xfd,0xe4,0x05,0xfc,0x5e,0xc4,0x0e,0x27,0x08, + 0xde,0x8d,0xc8,0x2e,0xda,0x55,0x8f,0x3f,0x77,0x99, + 0xad,0xd3,0x87,0x31,0xcf,0x19,0x05,0x0d,0x09,0xad, + 0xe9,0x30,0x74,0xd2,0xb5,0xa1,0x44,0xd4,0x1d,0xe0, + 0x09,0x31,0x0a,0x3d,0xf9,0x1a,0x50,0x0e,0xe2,0xe2, + 0xbc,0xa1,0x37,0xa2,0x47,0x52,0x03,0x8c,0x5c,0x89, + 0x83,0x41,0xc1,0xf3,0x16,0xf6,0xd3,0xd6,0x14,0xac, + 0x97,0x72,0x08,0x94,0xe1,0x3d,0xc5,0x83,0x64,0xfa, + 0xcc,0xb0,0xa7,0xde,0xda,0x26,0x21,0xd8,0xbd,0xbd, + 0x0f,0x93,0x24,0x96,0xdb,0x13,0x7d,0x28,0xc0,0xa1, + 0x4d,0x6e,0x9c,0xb4,0x07,0x94,0xa1,0x4d,0xa1,0xed, + 0xa7,0xd2,0x44,0xe3,0xe6,0x51,0xc9,0x54,0x5a,0x49, + 0x22,0xa1,0x9f,0x81,0x89,0x48,0x8a,0x23,0xa1,0x18, + 0xc0,0x76,0xd2,0x95,0x55,0xd9,0xe3,0x44,0x4d,0xbb, + 0x76,0x97,0xc4,0xd8,0x96,0x9f,0x26,0x60,0x69,0x20, + 0x45,0x39,0x8c,0x21,0xe1,0xac,0x74,0xa0,0x90,0x42, + 0xbe,0x72,0x5b,0x60,0x9a,0xea,0x6d,0x8d,0x05,0x11, + 0xbc,0x1a,0xe8,0x12,0x6b,0x3e,0x26,0xe9,0x87,0x25, + 0x9e,0x4e,0x2a,0x70,0xa8,0x0d,0x6f,0x62,0x38,0x21, + 0xd1,0x23,0x5f,0x93,0x92,0x20,0x8a,0x91,0xfd,0xf3, + 0x1d,0xff,0xc5,0x9d,0x4d,0x13,0xe5,0x44,0xdf,0x47, + 0x38,0x8f,0x71,0x12,0x92,0xb4,0x76,0x2e,0x99,0xb8, + 0x4d,0x9a,0x78,0xa4,0x5f,0x66,0x12,0xbc,0x98,0x28, + 0x4e,0xb5,0xe6,0x96,0x73,0xf4,0xea,0x59,0x66,0x3a, + 0xc4,0x86,0xc3,0x31,0x42,0xdf,0x2a,0x18,0xa8,0xc1, + 0x26,0x6d,0xf2,0x00,0xaf,0x17,0x04,0xa5,0x0a,0x44, + 0xac,0x9a,0x7a,0xb0,0xe6,0xfe,0xcb,0xd9,0x2a,0x5c, + 0x61,0x34,0xf4,0x32,0x12,0x01,0x34,0x31,0x44,0x9b, + 0xd4,0xf5,0xa8,0x65,0x33,0x55,0x40,0xeb,0x2a,0x55, + 0x46,0x69,0x53,0x24,0xf5,0x67,0x53,0x9d,0xd7,0x40, + 0xe4,0x26,0xc1,0x4a,0xdb,0xbf,0x56,0xc2,0x70,0x20, + 0xd1,0xd7,0x80,0x34,0x56,0x82,0xf6,0xbf,0x93,0x2f, + 0xdb,0x3a,0x21,0x64,0x88,0x10,0x99,0xe2,0xd2,0x5a, + 0x0f,0x80,0xda,0x04,0xbe,0xef,0x6b,0xaa,0x7e,0x9d, + 0xfa,0xec,0xef,0x83,0x0e,0x84,0xd9,0x3a,0xa2,0x50, + 0x8e,0x1b,0xe0,0xb8,0x16,0x0b,0x0e,0xda,0x23,0x31, + 0x81,0x3f,0x73,0xf7,0xb3,0xfa,0xe7,0x7e,0x27,0xd0, + 0x56,0xd0,0xf7,0x5f,0x4d,0x11,0xfe,0x2d,0xa9,0xa2, + 0x83,0xd1,0xb5,0x17,0x87,0x24,0x46,0xdf,0x9d,0x45, + 0xed,0x06,0xce,0x41,0x75,0xc2,0xbc,0x4b,0xc8,0x00, + 0xf9,0xac,0xa0,0xcf,0xf3,0xe0,0x7e,0x29,0xb1,0x58, + 0x87,0x56,0x3a,0x67,0x85,0xd0,0xf4,0xd4,0xe6,0xed, + 0xc9,0xd9,0x90,0x08,0xd9,0xbf,0xeb,0xeb,0x83,0xda, + 0xe4,0xdb,0xee,0x81,0x7e,0x67,0xd0,0xb1,0xb2,0xa4, + 0xe4,0xce,0x97,0x72,0x7b,0x3f,0x70,0xd5,0x0a,0x92, + 0x81,0xa8,0x57,0xb6,0x1d,0x30,0xa1,0x04,0x44,0xd1, + 0x38,0x12,0x15,0x76,0x28,0x6d,0xe8,0x62,0x94,0xee, + 0x53,0xd2,0xe7,0x72,0xe7,0xa4,0x26,0x13,0xfd,0x3d, + 0xa4,0x76,0xee,0x27,0xb1,0xa7,0x9f,0x6b,0x86,0x6f, + 0x56,0xb4,0x2f,0x28,0x26,0x77,0x61,0xde,0x3b,0x2e, + 0xfd,0xee,0x4f,0x4f,0x2b,0x14,0x47,0xb0,0xd2,0x9f, + 0xbb,0xab,0xd4,0x70,0x53,0x95,0x5e,0x46,0x1a,0xbb, + 0x0c,0x2f,0x30,0x71,0x54,0x6c,0x10,0x70,0xaa,0xd4, + 0xa9,0xa2,0x76,0x9e,0x50,0xa9,0xb7,0xe9,0x36,0x5d, + 0x1a,0x0b,0x77,0xdf,0x63,0x78,0x30,0x96,0xf0,0xe7, + 0x26,0x14,0x1c,0xe7,0x85,0xda,0x6b,0xc1,0x8a,0x22, + 0x2a,0x4d,0x27,0xf4,0x4b,0xee,0xb9,0x60,0x9d,0x60, + 0x1b,0x95,0xb8,0x47,0x1a,0x9c,0xd2,0xc4,0x41,0xf2, + 0x65,0x23,0xae,0x54,0x6a,0xc9,0xb9,0xf5,0xd1,0xd7, + 0x66,0x9f,0x42,0x21,0x51,0xc4,0x89,0x30,0xec,0xb8, + 0x57,0x8e,0xdb,0xe2,0x78,0x45,0xba,0xb6,0x34,0xe1, + 0xd7,0x9f,0x5d,0x72,0x6c,0x2a,0x69,0xec,0x04,0x91, + 0xc1,0xb5,0xd5,0x05,0xb5,0xb3,0xc0,0x0b,0x28,0x7e, + 0x47,0x6f,0x05,0x3a,0xf5,0x74,0x27,0x8d,0xef,0x0e, + 0x8a,0x8e,0x34,0x27,0xeb,0x0c,0x83,0x2e,0x10,0x3f, + 0xc3,0x16,0x20,0xdd,0x92,0xc2,0x11,0x90,0xe5,0xb3, + 0xea,0x7b,0x1d,0x9c,0x84,0x78,0xb7,0x35,0x79,0x52, + 0x41,0xea,0x78,0x47,0x90,0x08,0x1d,0x98,0x4a,0xb2, + 0xfc,0x0c,0xe1,0x8d,0xdc,0x03,0x02,0xc4,0x55,0x2a, + 0x67,0x5d,0xd0,0xf6,0xef,0xa1,0xf8,0xd9,0x45,0x1b, + 0x8d,0x2f,0xe4,0x09,0x08,0x8d,0x95,0x31,0x70,0x5c, + 0x9d,0xfe,0x3b,0x7a,0x0d,0x83,0x7f,0x9e,0xe5,0xa6, + 0xd4,0xbf,0xde,0x4d,0x14,0x8f,0x0e,0x90,0x95,0xcf, + 0x80,0x16,0x3a,0xdb,0xa3,0x87,0x3d,0xc8,0x2d,0xee, + 0x98,0x14,0xd7,0x5d,0xe2,0xd8,0x39,0x44,0xa2,0x39, + 0xf4,0xb3,0xce,0xa8,0xc3,0x63,0xba,0x3f,0x75,0xce, + 0x79,0x48,0x1c,0xf4,0xbf,0x0b,0xda,0x6a,0x67,0x13, + 0x3b,0xcc,0x1e,0xc4,0xf7,0xde,0x3f,0xfe,0x37,0x05, + 0x18,0xd7,0x37,0x75,0x10,0xa9,0xcb,0x56,0x5d,0x00, + 0x9c,0xbc,0x99,0xc2,0xd4,0xc2,0xca,0xc8,0x30,0x65, + 0xc2,0x03,0x47,0xa9,0x92,0x5a,0xad,0x9a,0x35,0x36, + 0xd5,0xcd,0x38,0x9e,0x08,0x9c,0x13,0x87,0xf4,0x10, + 0x07,0xa6,0x26,0xa5,0x5b,0x67,0x71,0xa1,0x0b,0xc3, + 0xd8,0x52,0xd8,0xe4,0x27,0xb5,0x91,0x60,0xca,0x66, + 0x84,0x43,0xb5,0x82,0x27,0x74,0xce,0x5d,0xbb,0xf3, + 0x4f,0xa3,0xf7,0x43,0x15,0x24,0x91,0xd8,0x1d,0xd2, + 0x76,0x27,0x95,0xce,0x84,0x51,0x0d,0x64,0x3b,0xdf, + 0xc6,0xa1,0x15,0x4a,0x52,0x1e,0xda,0xbf,0x35,0x25, + 0x0b,0xce,0x8c,0x38,0xf9,0x8b,0x19,0x35,0xf1,0xb7, + 0x6b,0x94,0x7b,0xac,0x69,0x5f,0xd1,0x3e,0x9e,0x6c, + 0x41,0x40,0x47,0x65,0xd5,0x0e,0xa7,0x35,0xe9,0xae, + 0x2b,0x8d,0xf1,0x27,0x9e,0xdd,0x64,0xfc,0xb9,0x4c, + 0xe2,0xde,0xf4,0x6d,0x36,0x6d,0x7a,0x59,0xaf,0xc9, + 0x7e,0xa1,0x6b,0xcc,0x5c,0x37,0xe1,0x98,0x26,0xd9, + 0x54,0x57,0x26,0xe8,0x2a,0xbd,0x1d,0xfc,0xc0,0xcd, + 0x79,0x7b,0x36,0x9a,0xa8,0xa8,0x8d,0x85,0x1b,0xbb, + 0x0e,0xdc,0xb1,0x72,0x36,0x17,0x8e,0x28,0x2c,0xdf, + 0xfd,0x73,0xa8,0x19,0xbd,0xa0,0x87,0x76,0x8f,0xb4, + 0xef,0xcf,0x20,0x7d,0xf1,0x78,0x06,0xb7,0x67,0x97, + 0x41,0x9c,0x8e,0x2b,0x44,0x82,0x3a,0x75,0xd2,0xda, + 0x21,0xf3,0xe6,0x07,0x61,0x77,0xf8,0x0e,0xeb,0xe6, + 0x40,0xc9,0x82,0x7b,0x0f,0xfa,0x3d,0x9a,0x50,0xd3, + 0xa4,0x26,0x25,0x7b,0x13,0x85,0xa6,0xaf,0x4d,0x35, + 0x05,0x0e,0xbc,0x4f,0xdd,0x7b,0x27,0x71,0x84,0x28, + 0x8e,0xfc,0xa0,0x86,0xda,0x0a,0x58,0x20,0x1c,0xb6, + 0x5c,0xd4,0x8b,0x6d,0x50,0x7e,0xfc,0x3d,0xe0,0x20, + 0x8c,0xba,0x35,0xd4,0x66,0x4b,0x63,0xdb,0xf4,0x3b, + 0x7d,0x21,0xfd,0xfa,0xf5,0x2b,0x6a,0x3a,0x74,0x1d, + 0x8b,0x0e,0xbd,0xde,0xbf,0x07,0x63,0xbf,0x95,0xc6, + 0xfb,0x95,0xe3,0x44,0xed,0x2d,0x22,0x79,0xe9,0x01, + 0xaf,0x70,0xa0,0xbe,0x23,0x4a,0x7e,0x94,0xc4,0x67, + 0xf8,0x24,0x0f,0xc8,0xd9,0xb4,0x97,0x5c,0x50,0x7b, + 0x70,0x9f,0x1c,0xa2,0x42,0xd3,0x65,0x24,0x4a,0x29, + 0xc4,0x53,0x12,0xdd,0xb3,0xad,0x19,0x09,0x02,0x11, + 0xa5,0x6c,0x5c,0x15,0x8b,0xca,0xb4,0x11,0xe6,0x6a, + 0x15,0xf0,0x44,0x3e,0x7c,0x70,0x81,0xc0,0x72,0x45, + 0x93,0xb8,0xba,0x02,0x51,0x9d,0x20,0xea,0x7e,0x1f, + 0xd7,0x42,0x33,0x27,0xd9,0x57,0x4c,0x01,0x8e,0xfe, + 0xce,0xdd,0xe3,0x34,0x42,0xee,0x7e,0x8f,0x8a,0x0c, + 0xe3,0xf9,0x74,0x25,0x3e,0x83,0x48,0x15,0x54,0x7f, + 0x7f,0xfd,0x77,0x82,0x33,0xb9,0x6d,0x11,0x86,0xd6, + 0x2f,0x4a,0x1f,0x24,0x2a,0x80,0xb4,0xb6,0x6b,0x99, + 0x54,0x57,0x8a,0xe9,0xad,0x55,0x8a,0x9f,0xe3,0x64, + 0x23,0x5c,0x4b,0xdd,0x25,0x15,0xca,0x81,0x32,0xfb, + 0xc6,0x6a,0x6d,0xf5,0x58,0x16,0x88,0xdb,0xe8,0x2f, + 0x49,0xc5,0x74,0xff,0x4c,0x95,0x1a,0x20,0x9e,0x48, + 0x90,0x6d,0x29,0xe7,0xd5,0x95,0xce,0x9a,0xd0,0xf6, + 0x7f,0x0c,0xf2,0x90,0x38,0xef,0x54,0xb4,0x10,0x5d, + 0xe2,0xca,0x16,0x51,0x35,0x25,0xeb,0x44,0x33,0x49, + 0x89,0x0d,0x90,0xfd,0x2f,0x40,0xe0,0x0b,0x8a,0x15, + 0x6c,0xbb,0x51,0xb1,0xe1,0xa6,0xa3,0x09,0xb8,0x39, + 0xe7,0xd4,0xef,0x44,0xfc,0x6a,0x70,0xd8,0xe3,0xef, + 0x1d,0x4c,0xec,0x60,0xe4,0xf4,0x70,0x41,0xbd,0xf6, + 0x31,0xdd,0x32,0xa9,0xfc,0x86,0x56,0x45,0x6c,0x9b, + 0xb8,0x6a,0xeb,0x4e,0xdc,0x54,0x88,0x89,0xaa,0x69, + 0xa7,0x11,0xa4,0xbd,0x73,0x07,0x33,0xa6,0x1e,0x6c, + 0x20,0x72,0x95,0x0b,0xc6,0x4e,0x7e,0x7f,0xaa,0x8c, + 0x55,0xe9,0x38,0x2d,0x1c,0x22,0x8a,0xbb,0x04,0x07, + 0x5a,0x01,0x49,0x42,0x3e,0x26,0xc9,0x6e,0x53,0xa8, + 0xba,0x6c,0x40,0x7e,0xc8,0xf1,0x1e,0x13,0x4d,0xf7, + 0x6c,0x13,0x2a,0x33,0xb5,0x64,0xa9,0xc5,0xa6,0xff, + 0x38,0x05,0x5c,0x87,0x50,0x92,0x7a,0xb3,0xae,0x31, + 0xd7,0xae,0xe9,0x28,0xa6,0x1e,0x4a,0xa9,0xc8,0x49, + 0xa4,0xfe,0xe6,0xa1,0xb4,0x1a,0x61,0x4f,0x3f,0x93, + 0x5a,0x42,0x06,0x01,0x7b,0xa0,0x27,0x54,0x11,0x1b, + 0xd4,0xeb,0x4a,0x81,0xd1,0xac,0xab,0x33,0xc5,0x1b, + 0x47,0x9a,0xd5,0x96,0x5b,0x92,0xec,0x57,0x34,0xc9, + 0xc5,0x41,0xc3,0xe5,0x3b,0xb4,0xe7,0x14,0x15,0xa1, + 0x35,0x77,0x81,0x42,0xae,0x0e,0xc6,0x28,0x52,0x20, + 0x46,0xd2,0x27,0xed,0x0d,0x72,0x59,0xef,0xbf,0x1b, + 0x7c,0x18,0x9d,0x7b,0xfb,0x03,0xc1,0x6a,0x48,0xfd, + 0xca,0x3f,0x4c,0xd6,0x44,0x39,0x95,0x69,0x1a,0xab, + 0x4f,0xad,0x35,0x5a,0xd3,0x83,0x9f,0x98,0x1d,0xb5, + 0xef,0xad,0x28,0x5d,0x2f,0xc4,0x5f,0xbc,0x8c,0x0f, + 0x5c,0x0f,0xa7,0x40,0x03,0x29,0x27,0x89,0x10,0xae, + 0x37,0x21,0xa3,0x6f,0xf7,0xe2,0xda,0x52,0x2e,0xc1, + 0xef,0xef,0x6d,0x43,0x37,0x69,0xc8,0x51,0x75,0x64, + 0x34,0xb5,0xe5,0x1c,0x27,0xe8,0xf7,0x44,0x9a,0x4a, + 0x89,0x4e,0x57,0x9d,0x34,0x01,0xa1,0x88,0x74,0xd8, + 0x7a,0xdb,0xd8,0x6e,0x73,0x23,0x6c,0x61,0x9c,0xb5, + 0x36,0xed,0xae,0x7e,0x40,0x90,0xd3,0xfd,0x04,0x5b, + 0xc3,0x81,0x51,0x9d,0x33,0xe5,0xfa,0xc6,0x04,0x47, + 0x07,0x89,0xf6,0x47,0xbf,0x7a,0xe2,0x66,0xa4,0xcf, + 0x12,0x13,0x56,0xfc,0x2c,0x22,0x42,0x5e,0xc2,0xf4, + 0xef,0xe8,0x0f,0xf1,0x84,0x88,0xd7,0xa3,0x09,0xc8, + 0xa4,0x40,0x0a,0xa2,0x5c,0x35,0xc0,0xac,0x28,0x0f, + 0xa0,0xc9,0x13,0xf4,0xf8,0x6b,0x3a,0xc0,0x45,0x6e, + 0x3f,0x26,0xd7,0xd7,0x62,0x2a,0x45,0x03,0xaf,0x21, + 0x1a,0x22,0x7c,0xde,0xf6,0x53,0xd1,0x21,0x9d,0x38, + 0x73,0x44,0xa0,0x74,0x0a,0xbf,0x93,0x39,0x72,0xe2, + 0x1a,0x51,0x8b,0x9a,0xe0,0xea,0x20,0x33,0x61,0xb9, + 0x87,0xed,0xe7,0x4e,0x42,0xaf,0x95,0x23,0x45,0x88, + 0x95,0x69,0x9b,0x9d,0x54,0x81,0xba,0x96,0xce,0xbf, + 0x1f,0x9d,0x4d,0x2a,0x9d,0x05,0x81,0x51,0xfa,0x7d, + 0x0c,0x55,0xb8,0x96,0x97,0xd9,0x9b,0xc7,0x21,0x64, + 0x42,0x45,0x38,0x01,0xe5,0xaa,0x60,0x09,0x52,0x4e, + 0x07,0xc9,0x92,0x7e,0xb8,0x4a,0x8f,0xad,0x48,0xc7, + 0x9b,0xac,0xaa,0xe3,0x6c,0x0f,0x7a,0xd2,0x02,0xdd, + 0x80,0xe3,0x92,0xb1,0xc4,0x37,0x09,0x71,0xf4,0x98, + 0xe4,0xe4,0x61,0x74,0x4a,0x6b,0x51,0xb9,0x4a,0x0e, + 0x1d,0xbf,0x40,0xeb,0xe7,0x3c,0x39,0x13,0x13,0x65, + 0x84,0x38,0x4f,0x1f,0x19,0x01,0x2b,0x4f,0x29,0x25, + 0x44,0x64,0x08,0xad,0x08,0x6b,0x12,0x6d,0x75,0xc9, + 0xa6,0x24,0x41,0xd7,0xdf,0xfc,0x53,0x55,0xd7,0x6f, + 0x80,0x5a,0x7f,0x04,0xa7,0x74,0x24,0x4f,0x09,0x7a, + 0x93,0x05,0xc5,0x87,0xd5,0xdf,0x34,0x45,0xb0,0x41, + 0x62,0x90,0x57,0x42,0xfc,0x25,0x09,0x0c,0x0f,0x13, + 0x4d,0xc7,0x87,0x49,0xbe,0x56,0xc6,0xc3,0xc6,0x26, + 0x5f,0x26,0x43,0x2d,0x22,0x2f,0x6e,0xc6,0x61,0x27, + 0x4d,0x21,0x37,0x1e,0xaa,0xa8,0x90,0xeb,0x1d,0x2b, + 0xf2,0x33,0x69,0x38,0x39,0xce,0x8f,0xab,0x62,0x1d, + 0xf2,0xe7,0xc6,0x2a,0x4d,0xb5,0x92,0xda,0x11,0xe5, + 0x2a,0x7f,0x85,0x9c,0xd3,0xd4,0x44,0xe7,0x65,0x85, + 0x80,0x5c,0x70,0x7d,0xf6,0x3e,0x26,0x32,0x2f,0x09, + 0x42,0x26,0x1e,0x98,0x9b,0x1a,0x01,0x8b,0x99,0x91, + 0xb0,0xac,0x99,0x2a,0x29,0xa6,0x3b,0x4e,0xd0,0xc6, + 0xf6,0x25,0xf1,0x15,0x36,0x81,0xca,0x71,0x06,0xa8, + 0xb8,0x71,0x60,0x9b,0x23,0x42,0x93,0xa7,0x5f,0xff, + 0x6f,0x90,0x15,0x78,0x24,0x5a,0x03,0x8a,0xae,0x13, + 0x3c,0x8e,0x5b,0xa2,0x9c,0xb2,0xb7,0xd7,0xe1,0x9e, + 0x9f,0x0a,0xab,0xa6,0x24,0xa2,0x25,0xd4,0xc7,0xbd, + 0x8f,0x36,0x1d,0x93,0x44,0xe6,0x7e,0x50,0x99,0x30, + 0xbd,0x76,0x08,0xfd,0xb8,0x7f,0x57,0xb9,0x73,0x3d, + 0xe9,0x73,0x67,0x82,0x7a,0x90,0xe9,0x3d,0xdd,0x08, + 0xc0,0xc6,0xfb,0xa9,0x15,0x4f,0xe4,0xcd,0xe5,0x78, + 0x56,0x98,0xc0,0x11,0xc2,0xe5,0x04,0x14,0x1d,0xda, + 0xd4,0x51,0xd9,0x8e,0x82,0xe8,0xfb,0xed,0x48,0x99, + 0x50,0x0e,0x0e,0xec,0x63,0xe4,0xc6,0x24,0x61,0x4a, + 0xd3,0xc9,0x79,0x3c,0x47,0x27,0xf8,0x68,0xac,0x47, + 0x8e,0x76,0x84,0xee,0xd8,0xda,0x93,0x43,0x42,0x9c, + 0xba,0x34,0x8a,0xba,0xdd,0x6f,0x91,0xaa,0xfe,0xec, + 0x9c,0x48,0xec,0x39,0xe7,0x5f,0x2f,0xb0,0xad,0xcb, + 0x72,0xda,0xe4,0x1b,0x11,0x40,0x3a,0xfc,0xdd,0x81, + 0x30,0x09,0x04,0x76,0x0b,0x88,0xcd,0xb4,0x8d,0xd3, + 0x98,0x31,0xe3,0x91,0x91,0xdb,0x40,0x07,0x83,0x1b, + 0x47,0x06,0xd8,0xbd,0xe0,0x3e,0x49,0x28,0xb2,0x02, + 0x6f,0xa2,0x26,0x41,0x45,0x6a,0x87,0x50,0x6b,0x26, + 0x05,0xf2,0xce,0x45,0xfa,0xe6,0x8e,0xd5,0x50,0xc5, + 0xc6,0xbe,0x33,0x25,0xad,0x2a,0x3b,0x3f,0xb5,0x8f, + 0x1c,0xaa,0xe3,0x36,0xec,0x15,0xfc,0x95,0x5a,0xb0, + 0x8d,0x0e,0xe9,0x8e,0x3b,0x43,0x9c,0x03,0x4a,0x48, + 0x40,0xb4,0xac,0x12,0x6f,0x46,0x2b,0xb4,0xdb,0x92, + 0xc1,0x21,0x89,0x7f,0xfe,0xfc,0xb9,0xe8,0x19,0x82, + 0x8f,0x14,0x5a,0x3b,0x4c,0x07,0x7b,0x4a,0x1e,0x86, + 0xc1,0x0a,0xe2,0xe4,0x58,0xaf,0xa7,0x4e,0x8c,0x4c, + 0x3a,0x45,0x2e,0x49,0x03,0xc9,0xfc,0xc7,0xc8,0x7c, + 0x9a,0x66,0x19,0xd6,0x72,0xd2,0xd6,0xa2,0xe4,0xf9, + 0x31,0xea,0xee,0x8a,0xa8,0xd6,0xa6,0xaa,0x85,0x38, + 0x6b,0x2d,0xf8,0x59,0x35,0xf8,0x34,0x15,0x59,0xfb, + 0x4c,0xf6,0x3e,0x1a,0x43,0xb5,0x00,0x21,0x9f,0x40, + 0xf5,0x17,0x4c,0x16,0x45,0xd3,0x7b,0x26,0xde,0x09, + 0xf1,0x7c,0xcc,0xdf,0xd5,0xc6,0x9b,0x6d,0xe9,0xdb, + 0x56,0xc9,0x0f,0x71,0x6a,0x29,0x11,0xb2,0x41,0x1c, + 0x30,0x45,0xe5,0x89,0xf3,0x46,0x85,0x9f,0x22,0x2b, + 0x8d,0x90,0x5c,0x4e,0x46,0x83,0xc4,0x79,0x95,0x96, + 0xe1,0x0a,0x26,0x5d,0x83,0x8e,0x47,0xd6,0xa5,0x0d, + 0xf4,0xbd,0x25,0x29,0x10,0x68,0xcb,0x59,0x34,0xf5, + 0x37,0xb9,0x58,0x3b,0x97,0x72,0x67,0x17,0x91,0x5e, + 0x60,0x32,0x0c,0x04,0xa8,0x2f,0x06,0x6d,0xad,0x1c, + 0xdc,0x54,0x91,0x7b,0xd1,0x7a,0xa9,0x24,0xa1,0xbf, + 0xbd,0xb6,0x5e,0x9d,0xb8,0xca,0xda,0xb8,0x41,0xaf, + 0x50,0xb1,0xa9,0xe5,0x62,0x32,0x76,0x82,0x26,0x47, + 0x8e,0x54,0x42,0x11,0x1c,0x2a,0x97,0x1c,0xe9,0x95, + 0x9b,0xa1,0x6e,0xeb,0x8a,0x56,0x85,0x36,0x48,0x99, + 0xe9,0xac,0x2e,0x7f,0x8f,0x1e,0x40,0x5b,0xd1,0xc4, + 0xd0,0xbe,0xb1,0xcf,0x80,0xda,0xa6,0x21,0xf9,0xa9, + 0x69,0x1a,0x49,0x0f,0x92,0xcd,0xe4,0xa2,0x3b,0x5c, + 0xa6,0xe9,0x2c,0xe0,0x84,0x4c,0x3d,0x7c,0x3c,0xfc, + 0x53,0x91,0x44,0x24,0xe7,0xa9,0x05,0x95,0xda,0xb8, + 0x1b,0x9d,0x10,0x17,0x6b,0xd2,0x14,0x98,0x6b,0xa9, + 0x9b,0x58,0x17,0x79,0x0f,0xc4,0x67,0x71,0x08,0x53, + 0x6a,0xab,0x0b,0x1a,0x7c,0x26,0xf4,0xcb,0xa1,0x1a, + 0x8e,0xbf,0xd7,0xdd,0xd1,0x07,0xc5,0xfb,0x13,0x2c, + 0x09,0x12,0x9a,0x63,0xb9,0x3f,0xae,0x5d,0xd6,0x0f, + 0x30,0xd7,0x6e,0xa2,0xf6,0x51,0x10,0x3f,0x74,0x13, + 0x81,0x0a,0xd2,0xd8,0xa9,0x2d,0xe7,0x66,0x0e,0xc5, + 0xa5,0x1d,0xc7,0xbf,0x60,0x6a,0xca,0x9d,0x1d,0x4e, + 0x99,0x5d,0xce,0x9b,0x72,0x6d,0x51,0x7d,0xee,0x2d, + 0xb6,0x3e,0x78,0x4f,0x8a,0x02,0xd1,0xf5,0x98,0xe4, + 0xa2,0x00,0x2d,0x2c,0x6a,0x1d,0xbb,0xb8,0xdd,0x6d, + 0x49,0x88,0xf3,0x0b,0xed,0xf0,0xb7,0x7b,0x51,0xe2, + 0x79,0xe7,0xf4,0xc8,0xe7,0x3e,0x90,0x38,0x5d,0x03, + 0xa9,0xd5,0xef,0x86,0x64,0x7e,0x03,0xb9,0xaa,0x86, + 0x7e,0xbd,0xe5,0xdc,0xf4,0x0d,0xe8,0x2a,0x53,0x3d, + 0x4c,0xa7,0xe0,0xd8,0xb3,0xe8,0x14,0xf8,0x1c,0x64, + 0x39,0x65,0xcb,0x26,0x80,0x93,0x12,0xb4,0x35,0x6e, + 0xbb,0x0f,0x79,0x1a,0x79,0x27,0xa0,0xc2,0x25,0x73, + 0xd4,0xaa,0xa3,0x8a,0x28,0x25,0x77,0x81,0x67,0x44, + 0x87,0x1f,0xbd,0x93,0x0a,0xe6,0x99,0xa9,0xd2,0x1c, + 0x1d,0xe9,0x21,0x80,0x45,0xb3,0x4f,0x4a,0x26,0xf5, + 0x77,0x27,0x1d,0x23,0x37,0x9d,0xe6,0xb8,0x40,0x6e, + 0x4c,0x3d,0x6d,0x6a,0x37,0x51,0xa3,0xc3,0x00,0x53, + 0x95,0x0e,0x7d,0x7c,0xfb,0x48,0xff,0xfc,0xf9,0x73, + 0x25,0x88,0x3b,0x21,0xa7,0x29,0xd1,0x21,0x0f,0x32, + 0x42,0x6c,0xfb,0xbe,0x91,0x64,0x11,0xc7,0xa3,0x29, + 0x20,0x25,0x4e,0x91,0xe3,0x3c,0x29,0x19,0xda,0x1d, + 0xa8,0x93,0x72,0xb6,0x7b,0xaf,0xfd,0x81,0x7f,0x5f, + 0xff,0x71,0x83,0x10,0x81,0x60,0xdf,0xab,0xec,0x33, + 0xdd,0x93,0xec,0xa9,0x03,0x07,0x66,0x4f,0x10,0x7e, + 0x12,0xb5,0x49,0x25,0x59,0x0f,0x05,0xd0,0x19,0x3b, + 0x80,0x7a,0xfe,0x10,0xa0,0x35,0x91,0xb9,0xcf,0x89, + 0xae,0xf7,0xe3,0x26,0x3b,0x53,0xeb,0x48,0x13,0x00, + 0x97,0x9c,0x40,0xd1,0x87,0x5c,0x19,0xe0,0x4d,0x15, + 0xb4,0x11,0x51,0x0e,0xe0,0x32,0x64,0x5e,0x6a,0xd3, + 0x74,0xf2,0x31,0x14,0x90,0x07,0xf6,0x39,0x79,0x9a, + 0xd9,0xeb,0x52,0x7d,0x20,0xbd,0x56,0x73,0xc0,0xdb, + 0xe7,0x48,0x1e,0x66,0xee,0xbe,0x35,0xf9,0x20,0x55, + 0x71,0x48,0x50,0x1f,0xad,0x29,0x91,0xf1,0x38,0x1a, + 0x33,0xa8,0xe8,0x27,0x12,0x78,0x2a,0x4a,0x34,0x3e, + 0x5f,0x86,0xb4,0xfe,0x4a,0x55,0x53,0xaa,0x22,0xdd, + 0xcf,0xa7,0x24,0xc5,0x8d,0x6f,0x26,0xd9,0x72,0x97, + 0x80,0x25,0x43,0xd3,0xc9,0xae,0x20,0xf1,0x7b,0xf4, + 0xda,0xc4,0xdb,0x27,0x56,0xa4,0xe6,0x1a,0x69,0xa4, + 0xfb,0x67,0x8c,0xda,0x54,0x02,0x2e,0xa1,0x8b,0xc9, + 0x0f,0x05,0x3e,0xd7,0x16,0xe8,0x7e,0x61,0x3a,0xd2, + 0x4e,0xd6,0x27,0xae,0x6d,0x41,0x0a,0xd8,0x0e,0xf9, + 0x12,0x98,0x34,0x7a,0xbd,0xd1,0x46,0xba,0xdb,0x3c, + 0xc1,0xf4,0xb2,0xa8,0x5d,0x73,0xbb,0x97,0x13,0x74, + 0x4c,0xdc,0x26,0x4d,0xae,0xfe,0xfc,0xf9,0xf3,0xa6, + 0x4d,0x41,0x2d,0x10,0x82,0xab,0xe5,0x5a,0x6b,0x42, + 0xff,0x92,0x33,0x3d,0x15,0x0d,0x9a,0x9c,0xf6,0xb1, + 0x7d,0x85,0xab,0x53,0x5b,0xcb,0x25,0x2b,0xbd,0xed, + 0xd7,0x47,0xe8,0xdb,0x3f,0x0f,0x15,0x5e,0x42,0x86, + 0xa8,0xad,0x38,0xb5,0x9c,0x68,0xdf,0x49,0xfc,0x78, + 0x1b,0xef,0xa7,0xa2,0x22,0x05,0x6f,0x48,0xf0,0x1e, + 0xd6,0x18,0xf4,0x4f,0x6f,0x0f,0x8b,0xce,0x57,0x7d, + 0x90,0x84,0xfe,0xb4,0x36,0x3b,0xcc,0xef,0x62,0x20, + 0xb5,0x4d,0xa9,0xdd,0xec,0xb8,0x8f,0xca,0x49,0x84, + 0x62,0xa2,0xdc,0x3a,0x72,0x16,0x11,0xee,0x7e,0x88, + 0xff,0xa6,0x6d,0x62,0xd5,0xd2,0x4a,0x6d,0x36,0xe2, + 0x30,0xba,0xfb,0x74,0x43,0x0f,0x53,0x9c,0x4d,0x6b, + 0xee,0x62,0xd7,0x04,0x74,0x27,0xa0,0xf6,0x6e,0x12, + 0xf4,0x0d,0x87,0x39,0xd5,0x98,0x96,0x57,0xe3,0xe2, + 0x79,0xb7,0x21,0x12,0x8d,0xbb,0xd8,0xd2,0x86,0xb5, + 0x54,0xae,0x65,0x37,0x14,0xb5,0x57,0x58,0x73,0x95, + 0x86,0x5f,0x92,0x09,0x2d,0x51,0x6f,0x08,0x04,0xf9, + 0x9d,0xec,0x2d,0xa6,0x49,0x0d,0x97,0x05,0xbb,0x4c, + 0x2d,0xe9,0x77,0xf4,0xc3,0x2d,0xc1,0xca,0xe9,0xa0, + 0xa2,0x16,0x10,0x6d,0x86,0x54,0x95,0x26,0xae,0x8f, + 0xa2,0x19,0xe4,0x17,0x93,0x5a,0x0f,0x6e,0x63,0x4c, + 0xe6,0x7b,0xe4,0xc1,0xe5,0x50,0x24,0x20,0xc4,0x39, + 0x3d,0x90,0xa2,0xa9,0x10,0x87,0xf0,0x90,0xb3,0xba, + 0x12,0x87,0x0d,0x89,0xba,0xc8,0x5b,0xee,0x7e,0x57, + 0x7d,0x8d,0x04,0xf1,0xb6,0x87,0xde,0x86,0xb6,0x66, + 0x17,0xa8,0xd6,0x68,0x09,0xe2,0x6c,0x4b,0xc2,0xc1, + 0x5c,0x9b,0x89,0x95,0x0b,0xc4,0x0e,0x53,0x0b,0x93, + 0x26,0x27,0x82,0x8d,0x41,0xd4,0x12,0x4a,0xdc,0x27, + 0xb7,0x5e,0x26,0x29,0x05,0xd5,0xc1,0x4a,0x15,0x98, + 0x43,0x3d,0x40,0x3b,0x26,0x26,0x48,0xb4,0x57,0x87, + 0x24,0xf2,0x6d,0xbf,0xdc,0x88,0xc5,0x86,0x84,0xad, + 0x6b,0xf9,0x6e,0xef,0x36,0x84,0xe6,0x6c,0x5a,0xfe, + 0xe6,0x70,0x3c,0xd4,0xf6,0x33,0xb1,0xf4,0xb8,0xe7, + 0x66,0xde,0xfd,0x99,0x8c,0x99,0x2f,0x19,0x9b,0xd7, + 0xbd,0x7d,0x0b,0xff,0xb9,0x9f,0xb9,0x5b,0x53,0x50, + 0x95,0x97,0xaa,0x5b,0x1b,0xe4,0xff,0x04,0x54,0xfc, + 0x68,0xcb,0x28,0x21,0x1e,0xae,0x3d,0xe2,0x46,0xad, + 0x9d,0x9b,0x41,0x88,0x91,0x87,0x80,0xeb,0xd4,0xa1, + 0x70,0x2d,0xf0,0xcb,0x8b,0x1e,0x56,0x47,0x12,0xd5, + 0x69,0x5d,0x5b,0xb3,0xfd,0x9a,0x12,0xc1,0x58,0xf7, + 0x62,0x32,0x29,0xa6,0x36,0x90,0x49,0x6e,0x0a,0xd6, + 0xa8,0x45,0x51,0x86,0xef,0x2b,0x27,0xa1,0xa0,0xef, + 0x77,0x68,0xfd,0xc6,0x0e,0x4b,0x32,0x65,0x57,0x2e, + 0x9d,0xee,0x93,0x97,0x3b,0xe4,0x42,0x55,0x54,0xa1, + 0x15,0x50,0x14,0xc4,0x2e,0xa3,0xd0,0xdc,0x2b,0xa4, + 0x81,0xc8,0x66,0xdb,0x52,0xee,0x81,0xf5,0x8a,0x1f, + 0x0c,0x0e,0x9d,0x1e,0x47,0x91,0xc1,0x25,0x24,0x45, + 0x16,0x55,0xd8,0x70,0xa3,0x36,0xfc,0x85,0x81,0x2b, + 0x41,0x63,0xbf,0x05,0xbd,0xe8,0x72,0xc8,0x05,0x79, + 0xfa,0x38,0x54,0xc5,0x65,0xf9,0xa4,0x40,0x9d,0x5a, + 0x57,0xc9,0x5c,0x15,0x54,0x9f,0x31,0x71,0xbb,0x82, + 0x13,0xb4,0x73,0x88,0xa7,0xf7,0xa7,0x62,0x8e,0x6d, + 0x87,0xd4,0xd0,0xce,0x44,0x71,0x45,0x51,0xa6,0xae, + 0x0b,0xb4,0x88,0x9c,0x98,0xe3,0x05,0x22,0x6f,0x1d, + 0x35,0x6c,0xbe,0x38,0xd6,0x7f,0x8b,0xd4,0xa7,0xc9, + 0x28,0xf3,0x12,0x2f,0x2f,0x12,0x70,0x4c,0xbc,0x93, + 0xbb,0x78,0x71,0x06,0xa4,0xf4,0x79,0x13,0xbf,0x40, + 0x89,0x8e,0xdb,0x04,0x2e,0x25,0x5f,0xdd,0xa4,0x54, + 0x05,0x21,0xb7,0x83,0x14,0x02,0xbd,0xbf,0xbd,0xb7, + 0x0f,0xf6,0x74,0x34,0x76,0x35,0x9b,0xb1,0xa8,0x28, + 0x50,0x84,0x71,0x20,0x87,0xd6,0x80,0xac,0x97,0x26, + 0xc0,0x4e,0x54,0x34,0x11,0x5f,0x03,0x75,0xa2,0xe0, + 0x50,0xfa,0x39,0x03,0xe8,0xbe,0x20,0xf1,0x4d,0x83, + 0x03,0x05,0x05,0x04,0xfa,0x0c,0x06,0x32,0x3c,0x99, + 0x10,0x93,0x45,0x90,0x0a,0x2d,0x46,0x5e,0xed,0x7d, + 0x5d,0x8e,0x8b,0x45,0x93,0xd6,0xae,0xdd,0xee,0x7c, + 0xcc,0x9c,0x0d,0x94,0x43,0xbf,0x1c,0x57,0x2c,0xb4, + 0xd7,0x1f,0x1d,0x88,0x3e,0x8c,0x44,0xba,0x5a,0x53, + 0xb2,0xe6,0xf8,0x6e,0xc6,0xd3,0xee,0x81,0xa8,0xd1, + 0xe1,0xa5,0xc8,0x74,0x28,0xc4,0x5e,0xb6,0xaf,0x4e, + 0x70,0x69,0xe0,0xd0,0x8c,0xe2,0x60,0x04,0xd7,0x26, + 0x5b,0x09,0x0d,0xe2,0xd0,0x4f,0xb6,0xbe,0x65,0xfd, + 0x30,0x72,0x10,0x9d,0x06,0x81,0xd4,0x2a,0x70,0x5a, + 0x2c,0x66,0x7a,0xc2,0x89,0xf6,0xe1,0xc8,0x3b,0xc8, + 0x7e,0xa3,0xd2,0xf3,0xfd,0xf3,0x02,0x55,0x16,0xdc, + 0x7f,0xa5,0x16,0x44,0x0f,0xe4,0xc4,0x9d,0x72,0xf7, + 0xd6,0x0f,0xbb,0x5e,0xfd,0x51,0xbb,0x31,0x89,0x1f, + 0x26,0xc6,0x3e,0x41,0xdf,0xe9,0x1d,0xa8,0x4a,0xb7, + 0xe1,0x58,0x54,0xa8,0x12,0x4a,0xe1,0x70,0x4a,0x7c, + 0x52,0xfb,0xe6,0xfb,0xfb,0x2b,0xa9,0x13,0x77,0x03, + 0xe2,0xad,0x91,0xa2,0x4b,0xbe,0x1c,0xb2,0x49,0x13, + 0x12,0x62,0x02,0x19,0xdb,0x6b,0x46,0x99,0x3c,0xb6, + 0xdf,0x26,0xb4,0xc7,0xb5,0x96,0xa6,0x44,0x21,0x59, + 0xe3,0x84,0xe9,0xae,0xf8,0x39,0x8b,0xca,0xdd,0x26, + 0x26,0x53,0x32,0xf7,0xbe,0x45,0xcb,0x26,0x36,0xee, + 0x77,0xef,0x64,0x9b,0xc8,0xdf,0xf4,0xde,0x95,0x67, + 0x25,0xed,0xb7,0x1a,0x10,0xfb,0x0a,0xad,0x1a,0xab, + 0x41,0xd5,0x93,0xbf,0x1b,0x05,0xd3,0xf6,0x5c,0xe7, + 0x46,0x4e,0xb2,0x24,0x61,0x6f,0x21,0x7a,0x96,0xbc, + 0x17,0x27,0x97,0xf6,0x34,0xdd,0x9c,0x86,0x12,0x34, + 0xfe,0x39,0x01,0xc1,0x84,0xb8,0x39,0x37,0x03,0x97, + 0x7c,0x82,0xc6,0x13,0xae,0x87,0x61,0x90,0x66,0x1c, + 0x8e,0x71,0x9e,0x79,0xc4,0x0f,0x73,0x3e,0x84,0xc4, + 0xdb,0x4b,0x06,0xdd,0x79,0x80,0xb7,0x56,0xaa,0xf3, + 0xce,0xeb,0x90,0xd0,0xe1,0x70,0x96,0xbf,0xdd,0xef, + 0x6f,0x43,0x14,0x5a,0x07,0x3c,0xa3,0x43,0x11,0x61, + 0x68,0xf7,0x52,0x5c,0x55,0x60,0x3c,0x56,0x1e,0x15, + 0x3e,0x98,0xaa,0x59,0x18,0x6c,0x10,0x58,0x7a,0x3b, + 0xd8,0x5d,0x32,0x33,0x79,0xa2,0xa5,0x8a,0x03,0xd0, + 0xa0,0x02,0xf8,0xae,0x02,0xe2,0x60,0x83,0x32,0x8d, + 0x43,0x06,0x88,0x92,0x50,0xb2,0x38,0x3d,0x96,0x7e, + 0xc7,0xc1,0xb7,0x44,0xae,0x25,0xe1,0xc0,0x7e,0x9f, + 0x24,0x90,0x49,0xbd,0xe5,0x24,0xa8,0xe8,0xd6,0xa0, + 0xea,0x41,0xf4,0xa9,0xb5,0x60,0x40,0x58,0xce,0x90, + 0xd4,0xa8,0xe2,0x3e,0x38,0x66,0x7d,0x8d,0x91,0xde, + 0x53,0x9a,0xba,0x22,0xb3,0xe1,0x8d,0xc8,0x9a,0xab, + 0xcc,0x34,0x98,0x68,0x32,0x3c,0x89,0x9b,0xb9,0x80, + 0x4b,0x6a,0xdd,0x93,0xe0,0x22,0x1d,0xc4,0xc4,0xcb, + 0x30,0xfe,0x62,0x27,0xa1,0xae,0x8e,0x48,0xbc,0x01, + 0x8c,0xfa,0xed,0x6e,0xf8,0x3b,0x30,0xec,0x11,0x09, + 0xd0,0x06,0x75,0x3f,0x64,0x9f,0x22,0xa8,0xee,0x43, + 0x77,0x46,0x79,0x85,0xaa,0x51,0x94,0x74,0x77,0xa8, + 0x6d,0x1f,0x84,0x0d,0xdf,0x5a,0x4d,0xc0,0x3b,0x3a, + 0x61,0x3c,0xfa,0x38,0xc3,0xed,0xae,0x5f,0x43,0xc6, + 0xa5,0x7d,0x2f,0x4d,0xef,0xf5,0x1b,0x11,0xb3,0x0a, + 0xc7,0x77,0xbb,0x8e,0x5a,0x49,0xa9,0x55,0xe7,0x0c, + 0x5c,0x61,0x80,0xc5,0x12,0xb9,0x9d,0x39,0xea,0xc5, + 0xca,0xd2,0xa4,0x67,0x54,0x93,0xd8,0x67,0xda,0xb7, + 0xa0,0xbf,0xe6,0xe2,0xf1,0xd1,0xbd,0xac,0xef,0x29, + 0xed,0x67,0xa7,0xa8,0xed,0x8a,0x19,0x8a,0xa7,0x6e, + 0x1d,0x4d,0x13,0x79,0x9d,0x44,0x4e,0x32,0x24,0xf7, + 0x3f,0xbf,0xce,0x39,0xff,0xc7,0x75,0x5d,0xff,0xf9, + 0xba,0xae,0xff,0x8f,0x5e,0xfe,0x0d,0x71,0x6d,0x1f, + 0xe0,0x74,0x88,0x6a,0x56,0xed,0x46,0x2c,0x1d,0xea, + 0x43,0x2d,0xb1,0x04,0x91,0x2b,0x7c,0xec,0x5a,0x25, + 0x4e,0xa0,0x8f,0x20,0x52,0x1a,0x07,0x9f,0xfc,0x52, + 0x4c,0x70,0x7a,0xc8,0x84,0xc3,0x42,0x7a,0xac,0x6c, + 0x35,0xf0,0x24,0x74,0x29,0x79,0xe5,0x48,0x26,0x4d, + 0x1a,0x23,0x45,0xa8,0x9e,0xfa,0xb7,0xf4,0x40,0x45, + 0xe2,0x78,0x77,0x75,0x08,0x09,0x5b,0x85,0x43,0x31, + 0xad,0xbd,0x4a,0xd6,0x09,0xfd,0x1e,0x9c,0x77,0x19, + 0xa1,0x9e,0xe4,0xa3,0x93,0x0e,0x4c,0x6d,0xdd,0x98, + 0xf7,0x4f,0x84,0x77,0x84,0xad,0xd3,0x7e,0xfb,0x24, + 0x59,0x9e,0x02,0xe2,0xa6,0xc2,0x06,0x14,0x63,0x34, + 0x3b,0x24,0xf4,0x95,0x10,0x28,0xfd,0x73,0x27,0x7a, + 0xa8,0xd7,0x10,0xd0,0x99,0x43,0xd3,0x25,0x7d,0x3d, + 0x2c,0x12,0xbd,0xfb,0xbb,0x0e,0x15,0x54,0xfa,0x79, + 0x24,0xbe,0xa8,0x6b,0xac,0x17,0x10,0xca,0x11,0x72, + 0x48,0xfb,0xfb,0x5f,0x79,0x34,0xb4,0x8b,0x2e,0xa6, + 0x58,0xed,0x14,0x9c,0x93,0xaa,0xb6,0xb9,0xf7,0x33, + 0x4c,0xf2,0xa6,0x04,0xf2,0xc0,0xda,0x38,0xa4,0x1c, + 0xdc,0x93,0x0d,0xf3,0xbe,0x0f,0x14,0xa8,0x07,0x92, + 0xd6,0x03,0xe8,0xc7,0xdb,0x35,0xc8,0x33,0x3b,0xe0, + 0xaf,0x76,0x78,0x9b,0xd9,0xeb,0x3d,0xa0,0x7f,0x75, + 0x5c,0x6b,0xfe,0x82,0x51,0xf7,0x0b,0xc6,0xc9,0xbb, + 0xa8,0xa1,0xec,0xdd,0x03,0x1c,0x99,0x03,0x6b,0xfe, + 0xb8,0xb5,0xa7,0xcf,0x4e,0xce,0x01,0x32,0x7e,0x3d, + 0xfd,0x5d,0xcb,0xbf,0x1f,0x87,0x9a,0xba,0xaa,0xc0, + 0x3d,0x13,0x23,0x0b,0x72,0x06,0x0d,0xc3,0xff,0xa1, + 0xaa,0xfe,0xcb,0x6b,0x62,0xfa,0xf7,0x43,0x26,0x55, + 0xb7,0x44,0xa8,0x9c,0xe0,0xdd,0xa0,0x4d,0x83,0xc9, + 0x89,0x69,0x5d,0x91,0xa3,0xfa,0xe3,0x50,0x23,0xce, + 0xce,0x44,0x06,0x37,0xc9,0x47,0x14,0x75,0x53,0xf1, + 0x36,0x6a,0xdd,0xa4,0x03,0x85,0x0e,0x0b,0xb5,0xb3, + 0xd0,0x03,0x1b,0x26,0x7a,0xca,0xf1,0x2a,0x1c,0xf2, + 0xa3,0xcf,0x94,0xcc,0x6a,0xcd,0x7d,0x54,0x68,0x57, + 0x58,0xc3,0x51,0x9a,0xaa,0xd8,0x48,0x2e,0x5c,0x41, + 0x70,0x33,0xf5,0xfb,0x6f,0x54,0xc5,0xb5,0xe7,0x5a, + 0xff,0xbe,0x02,0x52,0xd7,0xd1,0x95,0xa2,0xaa,0x47, + 0xb7,0x02,0xa1,0x07,0x26,0xe9,0x8c,0x6d,0x31,0xa3, + 0x7a,0x7c,0x7d,0xf3,0x77,0x0a,0xa6,0x85,0x22,0x7a, + 0x68,0x0c,0x20,0xad,0x50,0xdf,0xc6,0xc9,0x3d,0x91, + 0x11,0xe9,0x73,0x92,0x6e,0xcf,0x46,0x8c,0x90,0x46, + 0xf5,0x89,0xe7,0xb4,0xd9,0xf3,0xa1,0xd8,0x2a,0x7d, + 0x47,0x6e,0x1d,0x19,0x14,0xb1,0xb4,0xe8,0x73,0xf7, + 0x77,0xb7,0x50,0x13,0xea,0x2b,0xe8,0x5e,0xa5,0xeb, + 0x6e,0x3c,0xa7,0x8b,0x92,0xf4,0xd4,0x9d,0x52,0x6e, + 0x09,0xc9,0x4c,0x4c,0xfe,0x66,0x49,0xf0,0xce,0x24, + 0xbd,0xa8,0x56,0x7f,0x19,0xfe,0x5f,0x12,0x86,0x55, + 0x6f,0x47,0xa7,0xce,0x4d,0x4e,0xf6,0xc9,0xcf,0x32, + 0xad,0x4b,0x9a,0xda,0x4b,0xc2,0x9d,0x7a,0x9f,0x1d, + 0x95,0x4d,0xd3,0x4c,0x9b,0x69,0xb1,0xc9,0x7e,0x87, + 0x9c,0xe3,0xdb,0x24,0xae,0x9b,0x84,0xc5,0xd8,0x4b, + 0xc5,0x97,0x8a,0x4c,0x4e,0xdc,0xd9,0x7b,0x02,0x97, + 0xba,0x52,0x5d,0x87,0xcf,0xc4,0x9a,0x64,0x80,0xfd, + 0x6f,0xf7,0x42,0xab,0xc6,0xcd,0xd8,0x5a,0x5a,0xe0, + 0x81,0xbf,0xf1,0x38,0x28,0x27,0xb1,0xbc,0xa4,0x02, + 0xbc,0x99,0x0a,0xeb,0x2f,0xcf,0xb5,0xac,0x5c,0x8f, + 0x1a,0x94,0x77,0x6b,0xb3,0xf9,0xbb,0x63,0x3b,0x40, + 0xfe,0xe5,0x92,0x25,0xea,0xc3,0x86,0xf1,0x71,0x22, + 0xe0,0xd5,0xc4,0xd7,0x22,0x05,0xcf,0x8d,0x67,0x8b, + 0x13,0x79,0xec,0xbc,0x97,0xb0,0x01,0xcb,0x89,0xe5, + 0xdd,0xcf,0xd0,0xa9,0x16,0xd3,0x73,0x57,0x64,0x87, + 0x50,0x9f,0xa1,0x85,0x5b,0xe9,0xe0,0xa3,0x04,0xcf, + 0x11,0xfb,0x03,0xdf,0xe1,0xed,0xf0,0x49,0xea,0xd2, + 0xc2,0xcf,0xc1,0x56,0x95,0xe9,0x6b,0x3f,0x78,0x2b, + 0x49,0x34,0x90,0x12,0x2e,0xc7,0x7f,0x99,0x7e,0x97, + 0xf4,0x7c,0xa6,0x58,0x90,0x62,0xc3,0xf4,0x73,0x89, + 0x3c,0xb9,0xd4,0xfa,0x7a,0x53,0x82,0xbe,0xa5,0x12, + 0xf4,0xa0,0x4b,0xad,0x3b,0x45,0xc5,0xdd,0x21,0x3a, + 0x24,0x54,0x45,0x09,0x85,0xdb,0xcf,0x64,0xe6,0xec, + 0x5a,0xc7,0x03,0x22,0xf7,0x16,0xdb,0x34,0x46,0xa8, + 0xa5,0x8e,0x21,0xa0,0x57,0x48,0x84,0xdf,0xf8,0x49, + 0xe6,0xb3,0x29,0x6e,0x17,0x4d,0x2e,0x75,0x45,0x78, + 0x83,0xd4,0xc5,0x96,0xb7,0x92,0xf2,0x81,0x23,0xf4, + 0x70,0xb4,0x97,0xef,0x21,0x40,0x20,0x3a,0xb1,0x9b, + 0x75,0x54,0x8e,0x03,0xd4,0xbf,0x57,0x12,0x26,0x74, + 0xa0,0x27,0x1a,0x42,0xea,0xb0,0xe8,0x3b,0xeb,0x84, + 0x73,0x68,0xc3,0x5a,0x9e,0x9d,0x9a,0x27,0x27,0x52, + 0xf7,0x84,0x74,0x43,0x91,0x53,0x9b,0xd8,0x90,0x26, + 0xde,0x52,0x72,0x4a,0xb1,0xeb,0xf7,0x22,0x50,0x55, + 0x70,0x5a,0xae,0x30,0xe1,0x51,0x29,0x90,0x53,0xb5, + 0x42,0x07,0x44,0x20,0x3c,0x15,0x8c,0xec,0xd2,0xc4, + 0xda,0x63,0xfa,0xc8,0x99,0x48,0xd2,0x3d,0x26,0xd1, + 0x26,0x27,0xf5,0x3e,0xb5,0x3f,0x2e,0x33,0xaa,0xbb, + 0xe5,0xea,0x50,0x22,0x3a,0x29,0x13,0x3b,0x33,0x52, + 0x15,0x38,0x4b,0xde,0x66,0x86,0x27,0x53,0x14,0x78, + 0x93,0x9b,0xfa,0xc5,0xc6,0x9d,0x93,0xfe,0x12,0x7a, + 0xbc,0x0d,0x88,0x0c,0x7a,0x8c,0xa9,0x3f,0x99,0xdb, + 0x2c,0x4e,0x24,0x54,0x37,0x9c,0xd3,0x29,0x21,0xa2, + 0x3e,0x19,0x03,0x0f,0x95,0x5c,0xb9,0x8a,0x26,0x6d, + 0xfa,0x56,0xe1,0xd5,0x24,0x6d,0x41,0x82,0x93,0xd0, + 0xb6,0x45,0xb4,0x87,0x82,0xeb,0x07,0xfc,0xbc,0x0b, + 0xb8,0x0f,0x2b,0xa4,0x94,0x9e,0xf9,0xb4,0xde,0x3a, + 0xe4,0xae,0x09,0x0f,0x25,0xb0,0xd7,0xbb,0xa4,0xc4, + 0x76,0xcc,0xbe,0x17,0x05,0x27,0x3d,0x8f,0x8d,0x5a, + 0xb4,0x0a,0x29,0xc2,0xa1,0x51,0xce,0xbf,0x4c,0x13, + 0x92,0x4b,0x84,0x1f,0x8d,0x36,0xcf,0xa1,0x58,0xec, + 0xfe,0x4e,0x7f,0x4f,0x91,0xe1,0xe0,0x8f,0x56,0xda, + 0x62,0x73,0xfc,0x10,0xe5,0x69,0xba,0x36,0x65,0x7f, + 0x86,0xca,0x7f,0x73,0x5e,0x5f,0xfd,0x3b,0x9c,0xd0, + 0xa5,0xb6,0x98,0x1c,0x8f,0xa7,0xc9,0x73,0xbc,0x09, + 0x46,0xf6,0xc7,0xf3,0xf5,0xf5,0xf5,0x36,0x02,0xdf, + 0xd5,0x95,0x9d,0x96,0x1c,0x48,0x11,0x20,0xaf,0xc8, + 0xf9,0xb6,0x39,0xfe,0x57,0xe3,0x1a,0x1e,0x28,0xf4, + 0x4f,0x28,0xf4,0x5c,0x6b,0xf7,0xcd,0xbf,0xcc,0xf9, + 0x9a,0x25,0x2e,0x9d,0xfc,0x39,0xa9,0x60,0x3f,0x7c, + 0xdd,0x1c,0xd7,0x2b,0x59,0xc8,0xfc,0xa6,0xbe,0xbb, + 0x06,0x89,0xc9,0x5b,0xc8,0x09,0x25,0xa5,0x00,0x3b, + 0xc9,0xec,0xb7,0x11,0xc9,0x47,0xe0,0x4e,0x0a,0xc2, + 0x34,0x6a,0xa9,0x44,0x2b,0xd2,0x44,0x70,0x19,0xa8, + 0x9b,0xe2,0x70,0xd9,0xef,0xe4,0x80,0x3d,0xfd,0xa3, + 0x19,0xf6,0xc4,0xab,0x9a,0xc4,0xbb,0xd2,0x61,0xd6, + 0xd1,0x31,0x15,0x93,0xfa,0x44,0xcb,0x88,0x0e,0x54, + 0xd7,0x46,0xa3,0xc4,0xda,0xb5,0xea,0x20,0xc9,0x28, + 0xf5,0x83,0xe9,0xd5,0xa6,0x9b,0x74,0x70,0xc9,0x1b, + 0x54,0xe9,0x45,0xa2,0x9a,0xc4,0x6f,0x02,0xab,0x01, + 0xb4,0x41,0x71,0x50,0xfe,0x54,0x24,0x90,0xf4,0x82, + 0x5b,0x0b,0xf0,0x39,0x35,0xb5,0x7b,0x83,0x40,0xa9, + 0xfd,0xf9,0xd6,0x82,0x8b,0xed,0x97,0xa9,0xbd,0xdd, + 0x13,0x4b,0x5a,0x23,0x94,0x78,0x29,0x1f,0x21,0xed, + 0x87,0x04,0xcd,0x83,0x99,0x72,0x4f,0x32,0x4f,0x42, + 0xbd,0xe8,0xbd,0xf6,0x43,0x3d,0x91,0xbd,0x95,0x04, + 0x9d,0xde,0x41,0x27,0xf5,0x86,0xfb,0x79,0xb3,0xc2, + 0x08,0xaa,0xe5,0x87,0x12,0xdf,0xdb,0x00,0xf3,0xeb, + 0xeb,0xeb,0xfa,0xf5,0xeb,0x17,0x21,0xcd,0xc7,0x5d, + 0xe3,0x77,0x5c,0x39,0x1d,0x85,0xa1,0x84,0x26,0x25, + 0xa7,0x52,0x38,0x12,0x27,0x0a,0x15,0x93,0x6f,0x7b, + 0x06,0x45,0xe7,0x82,0x4e,0x0e,0x59,0x70,0xd8,0x7b, + 0x75,0x89,0x56,0x4a,0x52,0x54,0x6b,0x48,0x9f,0x89, + 0x43,0xa1,0x35,0x99,0x9e,0xec,0x63,0x5c,0x61,0x34, + 0xdc,0xf3,0x15,0x1c,0x1d,0x1e,0xdd,0x0b,0x20,0xc5, + 0x57,0xe2,0x90,0xa5,0xef,0x31,0xc5,0xe3,0xcf,0xfa, + 0xa6,0x98,0xa0,0x45,0x89,0x6b,0x1b,0xba,0xbf,0xa3, + 0x78,0xf0,0xfb,0x02,0x3d,0x16,0x15,0x38,0x23,0xc4, + 0x61,0x9a,0x86,0x71,0x0a,0x9f,0x9b,0x2c,0x92,0x02, + 0x14,0xdd,0xf0,0x74,0x98,0x29,0xe4,0xea,0xcc,0xfd, + 0x8c,0x97,0x4b,0x4d,0x48,0x95,0xb6,0xd0,0xdc,0xe4, + 0x4f,0xe2,0xeb,0xd0,0xf5,0x13,0x24,0x4e,0xdf,0x4b, + 0x19,0xb0,0x43,0x02,0x48,0xe8,0xb0,0xeb,0x88,0x18, + 0x67,0x63,0xe4,0x65,0x4d,0x48,0xdb,0x84,0x56,0x39, + 0x14,0x85,0x0c,0x5e,0xdd,0x46,0xba,0x49,0xd4,0x7d, + 0x2d,0xf6,0x1e,0xfa,0x3d,0x45,0x95,0xac,0x36,0xc8, + 0x2f,0x4a,0x9f,0x6f,0xe2,0x86,0x0c,0xfa,0x19,0xf8, + 0x6e,0x93,0xa5,0xc2,0xd4,0xda,0x99,0x26,0xed,0xa6, + 0x40,0xb0,0xf4,0xa6,0xab,0xed,0xef,0xa4,0xa4,0x6f, + 0x32,0x1b,0x1d,0x48,0xe1,0x98,0x04,0xb9,0x36,0xe3, + 0x9d,0x80,0xb8,0x18,0x96,0xe4,0xf3,0x1d,0xa2,0xd0, + 0xfe,0xfc,0x74,0x8b,0x0f,0xd7,0x16,0x10,0xf7,0xeb, + 0xb7,0xc4,0x86,0x78,0x16,0x74,0x78,0xa6,0x98,0xa1, + 0x08,0x01,0x88,0xb2,0xa6,0x09,0x39,0xb4,0x49,0xd0, + 0x83,0x8d,0x44,0xec,0xfa,0xe7,0x3b,0xb7,0xf5,0x3b, + 0xf1,0x50,0x3f,0x3d,0xbd,0xae,0xfb,0x59,0x11,0x12, + 0xf6,0x7a,0xbd,0xaa,0x8b,0x4e,0x2a,0xe2,0xeb,0x10, + 0x2d,0xfa,0xf3,0x24,0xca,0x08,0x88,0x72,0x42,0x0e, + 0x6d,0xa1,0x9d,0x7e,0x97,0x5a,0xb3,0x81,0xe7,0xe2, + 0xce,0x86,0x03,0xf4,0x0d,0x9c,0x16,0x4b,0x7e,0x6c, + 0x86,0x73,0xe9,0x50,0xbc,0x37,0xfe,0xd6,0x1d,0x63, + 0x93,0x61,0x6b,0xe0,0xb7,0xfe,0x20,0x6b,0x74,0x06, + 0x80,0xea,0xf9,0x71,0x53,0xab,0x97,0xd8,0x77,0x90, + 0x30,0xa5,0x8b,0xaf,0xaf,0x21,0x88,0x55,0x7a,0x61, + 0x69,0x61,0x80,0x96,0x41,0x85,0x39,0x7e,0x6c,0x1d, + 0xb9,0xca,0x5d,0x11,0x29,0x87,0x44,0x38,0x54,0x09, + 0x5c,0xd5,0xaf,0x65,0x80,0x1a,0x17,0x75,0x87,0x32, + 0xa7,0x69,0x1d,0x1a,0xef,0x4b,0x09,0xa7,0x42,0xf2, + 0x9d,0xe8,0xbb,0x49,0xf6,0xd4,0xfe,0x22,0x8d,0xf8, + 0xf7,0x96,0x0f,0x04,0x88,0x72,0x8e,0xe5,0x34,0xc1, + 0xd4,0x51,0x03,0x21,0x1c,0x5b,0x6e,0x84,0xf1,0x49, + 0x7a,0xfb,0xcc,0x76,0x7d,0x65,0xa6,0xd1,0xf0,0x39, + 0x0b,0x61,0xbc,0x06,0xbf,0x2b,0xfb,0xd9,0x64,0x59, + 0x31,0x70,0x0d,0xca,0x21,0xab,0xce,0xac,0x32,0xa8, + 0x8a,0x63,0xa5,0xdc,0xed,0x29,0x26,0x7e,0x0c,0xf1, + 0x44,0xae,0xa7,0x9d,0x44,0x39,0x2d,0x90,0x49,0xbc, + 0x73,0x23,0x47,0x4f,0x7b,0x84,0xf8,0x69,0x5a,0xf0, + 0x4c,0x88,0xeb,0x7d,0x1f,0xcd,0xf5,0xbd,0x2e,0x33, + 0x48,0x31,0xdd,0x87,0x14,0x4a,0x0f,0xf1,0x44,0xd2, + 0x96,0xe9,0xed,0x80,0x6f,0x82,0x7a,0x2d,0xd4,0xad, + 0x51,0x64,0xd3,0xb4,0x95,0x6a,0xa8,0x70,0xeb,0x62, + 0xa7,0x72,0xfc,0x2e,0xb1,0xf5,0xa9,0xc4,0x1b,0xa2, + 0xa4,0x39,0x4c,0xd9,0x3e,0x38,0x92,0x62,0x3d,0x54, + 0xba,0x46,0xb4,0xf5,0x6c,0x62,0xb2,0xbd,0x0e,0x9a, + 0x3a,0xa5,0x96,0xec,0x2d,0xa4,0x6b,0x12,0xca,0x0a, + 0xa3,0xf1,0xd4,0x7a,0x89,0x31,0x7c,0xf2,0x1b,0xbc, + 0x5b,0x73,0xc9,0x9f,0x12,0x38,0x4a,0x6e,0x8f,0x14, + 0x25,0xdc,0x09,0x5d,0x32,0x9d,0x9d,0x4a,0x31,0xdd, + 0x24,0x4b,0x95,0xda,0xdd,0x90,0x6c,0x3e,0x2c,0x3a, + 0x92,0x07,0xa5,0xc6,0xa3,0x69,0x52,0x56,0xd7,0xcf, + 0x2b,0x89,0x11,0x4e,0x55,0x1f,0x65,0x5c,0xe4,0x16, + 0x4d,0x9f,0x75,0xb7,0x63,0x28,0x93,0x24,0xc6,0x3f, + 0x24,0x33,0x8f,0x51,0xef,0x7e,0x5d,0x70,0xd8,0xd8, + 0x60,0x07,0x42,0x55,0x44,0x14,0x2d,0xb8,0xd7,0x68, + 0xcb,0x40,0xd5,0x29,0x4c,0x5f,0xd9,0x9e,0xbc,0x4b, + 0x26,0x61,0x74,0xb9,0x82,0xc1,0x2d,0xc2,0x84,0xf4, + 0x9c,0x13,0xa9,0x30,0x39,0xcb,0x9b,0xcd,0x50,0xae, + 0xe5,0xd8,0x83,0x0f,0x25,0x79,0xa1,0xc5,0x58,0x17, + 0x90,0xd7,0x27,0xad,0xa2,0x16,0x1c,0xa6,0xde,0x65, + 0x4d,0x01,0x48,0x13,0x3b,0x4a,0x44,0x1a,0x79,0x1e, + 0xc9,0xa6,0x4e,0x25,0xb7,0x1d,0xee,0x58,0x3d,0x4d, + 0xe2,0x7d,0xed,0x50,0x57,0x8f,0xa8,0x47,0xf2,0x3f, + 0x4d,0x4e,0x2d,0x10,0xb0,0xb1,0x62,0x24,0x0e,0x56, + 0xaf,0x40,0x27,0x12,0xb6,0x8b,0x1f,0x7d,0x48,0xe1, + 0x7a,0x9f,0x0c,0x1b,0x5b,0x83,0xe0,0x73,0x54,0xba, + 0x76,0x89,0xd7,0x20,0xeb,0x0a,0xf7,0xb6,0x49,0x68, + 0x6d,0xac,0xd0,0x49,0x44,0x6a,0xc1,0x13,0x92,0x68, + 0x12,0x1d,0x44,0x60,0xdd,0xbe,0x75,0x03,0x1c,0x1b, + 0xd3,0x66,0x22,0x13,0xd3,0x3e,0xd4,0x38,0xa1,0xe4, + 0x6c,0x2a,0x7c,0x13,0x17,0xd5,0x15,0x94,0xae,0x5a, + 0x72,0x87,0x3f,0x79,0x8c,0xb9,0x73,0x05,0xf6,0x07, + 0x72,0x35,0xdd,0x5a,0x4f,0xad,0x5b,0x3d,0xe7,0xa6, + 0x04,0x9b,0xe8,0x1d,0x26,0x91,0x2a,0x57,0x04,0xb8, + 0xf7,0xe3,0x62,0x94,0x13,0xea,0xa5,0xe4,0x71,0x2a, + 0x92,0xa8,0x50,0x30,0xfc,0xbc,0x0a,0x2d,0xbe,0x22, + 0x7b,0x9d,0x57,0xb8,0x99,0x34,0xdd,0x55,0x69,0x9c, + 0xdc,0xf5,0x5c,0x9d,0x47,0x57,0x5a,0xec,0xa4,0xe1, + 0xa3,0xe8,0xc6,0xc4,0x49,0xa2,0xf1,0x5b,0x82,0xda, + 0xfb,0x0b,0xd4,0xea,0x3c,0x70,0x26,0x88,0xbc,0x6d, + 0x5b,0x5f,0xca,0xbf,0xd1,0x56,0x0c,0xa9,0x2a,0xd3, + 0xe2,0x70,0x15,0xf9,0x64,0x7e,0xe9,0x38,0x0f,0x00, + 0x17,0xbf,0x7d,0xc7,0x3d,0xfd,0xe2,0xae,0xa3,0x27, + 0xb2,0x66,0x4d,0x51,0x95,0x76,0x4d,0x44,0x7a,0xfa, + 0xae,0xc0,0x85,0x79,0x4b,0x00,0x15,0xba,0xbd,0xc0, + 0x72,0xc2,0x49,0x0c,0xb8,0xfd,0xe1,0xae,0x8d,0x2a, + 0x5a,0xf7,0xfb,0x90,0xc8,0x95,0xe3,0x82,0x51,0x90, + 0xa6,0x77,0x40,0xbc,0x20,0x59,0xab,0xa5,0x3a,0x4e, + 0xe9,0xf0,0x77,0x9f,0xa5,0x63,0xba,0xa4,0xca,0x4c, + 0x95,0x6a,0xb3,0x1c,0x79,0x1b,0x4f,0xdf,0xe8,0x7c, + 0xa5,0x20,0x9e,0xee,0x3f,0x5c,0x1f,0x8e,0xfd,0x4f, + 0x3c,0x06,0x37,0xc1,0x47,0x49,0x90,0xb4,0x94,0x6b, + 0x4a,0x0e,0x7b,0x52,0x9c,0xbc,0xb0,0xfa,0x9e,0x0c, + 0x85,0x66,0x0d,0xc4,0xf7,0x22,0x61,0x5a,0x42,0x1d, + 0xfa,0x35,0x06,0xe4,0xaf,0x82,0x5a,0x77,0x41,0xcb, + 0xbb,0xdc,0xc8,0x7c,0x9f,0xaa,0x72,0x44,0xdd,0xad, + 0xbd,0xcf,0x76,0xb2,0xca,0xac,0x1b,0x32,0x8d,0xad, + 0x6d,0x8b,0x7a,0x83,0xdc,0x4c,0xfe,0x9a,0xee,0xda, + 0x49,0x36,0xc4,0xa1,0x40,0xdb,0xa1,0x9a,0xe4,0x15, + 0x98,0xf4,0xd2,0x92,0x97,0x9f,0x3b,0xaf,0xd5,0xb7, + 0x8d,0xbc,0x36,0x93,0x83,0x84,0xfe,0x7d,0x5f,0x3b, + 0x5d,0x21,0x5f,0x91,0xe7,0x57,0xba,0x38,0x17,0x6c, + 0x12,0x4f,0x27,0x41,0xb6,0xc4,0xe7,0x99,0xec,0x0d, + 0x1c,0xa4,0xe5,0xc4,0xe6,0xd2,0x4b,0xb8,0x06,0x1d, + 0x08,0xb0,0x0c,0x40,0x61,0xc0,0x44,0x2e,0x4b,0xad, + 0x13,0xad,0x00,0x49,0x24,0x4f,0x2a,0x70,0xac,0x24, + 0xd4,0x16,0xa3,0x07,0x42,0xa3,0x10,0x5b,0xe4,0xd3, + 0x42,0xfa,0x29,0x50,0x11,0x12,0xda,0x50,0x7f,0xfe, + 0xfc,0xa1,0x77,0x94,0xe4,0xd9,0x0b,0x0e,0xaf,0x0a, + 0x32,0xf0,0x15,0xc8,0x7e,0x18,0x70,0xfb,0xf7,0x01, + 0xd4,0x6b,0x0f,0x62,0x19,0x51,0x8d,0xe3,0xe2,0x97, + 0xe8,0xcd,0x28,0x77,0x45,0xd7,0x5f,0x72,0x2d,0x77, + 0xed,0x0a,0xf5,0xba,0x21,0xde,0x81,0x70,0x41,0x7e, + 0x7e,0x17,0xfc,0xcf,0x6c,0x11,0x90,0xa0,0xeb,0x16, + 0xa8,0xaa,0xb7,0x9a,0xa4,0x0f,0x57,0xd7,0xbb,0x45, + 0xc4,0x5b,0xa2,0x01,0xfa,0x2f,0x25,0x2d,0xa3,0x9f, + 0xdf,0x6d,0xce,0xea,0xae,0xb5,0x65,0x2d,0x79,0x52, + 0x1b,0x11,0x06,0x3e,0xf4,0x7b,0x22,0x7a,0x6d,0x0a, + 0x80,0x52,0x39,0x8d,0x10,0x0b,0x1f,0xe8,0x1b,0x7d, + 0xc7,0xfd,0xac,0x4d,0x32,0xaf,0xb1,0xb4,0x28,0x79, + 0x75,0x1e,0x7b,0x69,0xb2,0xd7,0xc9,0x87,0xb8,0xf5, + 0xb1,0xf0,0x19,0xab,0x30,0xd5,0x4b,0xe6,0xd5,0x15, + 0xb8,0x77,0x18,0x83,0x52,0xb2,0x9b,0x12,0x7e,0x10, + 0x41,0x8d,0xda,0x72,0x4e,0xeb,0x67,0x33,0x1a,0x4f, + 0xe0,0x42,0x90,0x3c,0x28,0xa7,0x17,0x15,0x92,0x5a, + 0x3b,0xb9,0x4c,0xb2,0x21,0x13,0xe2,0xd4,0xcf,0x92, + 0x4e,0x5b,0x98,0xde,0x4b,0x9a,0x44,0xd6,0x44,0x93, + 0x5a,0x55,0x49,0xd5,0xdf,0xa0,0xc2,0x84,0xd2,0x61, + 0xf7,0xe1,0x45,0xd0,0x78,0x42,0x86,0x40,0x94,0xee, + 0xf1,0x7b,0x5a,0x01,0x39,0xf4,0x27,0x24,0x60,0x05, + 0xa6,0x89,0x51,0xc7,0xc0,0x55,0x2e,0x81,0xa8,0x77, + 0x01,0xbb,0x3f,0xf6,0x8d,0x5d,0xcb,0x67,0xf2,0x4b, + 0x71,0x95,0xa9,0xcb,0x94,0x97,0x8a,0xbf,0x64,0xa5, + 0x80,0x64,0x6b,0x87,0x2a,0x10,0xb9,0xf9,0x62,0x9d, + 0x9c,0xda,0x24,0xbc,0xad,0xa7,0x9e,0x36,0x63,0x69, + 0xcf,0x38,0x69,0x8e,0xd0,0x26,0xd3,0x04,0xc7,0x91, + 0xea,0x94,0xcb,0x44,0x41,0x09,0xb4,0x2e,0xde,0xae, + 0x09,0x4c,0x45,0x23,0x8f,0x0d,0x92,0xdd,0x89,0xbf, + 0xa1,0x89,0xcf,0xca,0x34,0xb7,0xb7,0xff,0xa8,0x45, + 0xda,0xcd,0x55,0x13,0xb7,0x48,0x79,0x4e,0x3d,0x91, + 0x49,0xfc,0x0f,0xaa,0xf2,0x86,0x89,0x41,0x6b,0x60, + 0xa8,0xf6,0x1a,0xc4,0xef,0xbb,0x9e,0x7a,0x46,0x35, + 0x20,0x78,0x78,0x1d,0x12,0xf4,0x1f,0x86,0xa7,0x30, + 0x91,0xfa,0x40,0x6e,0x2e,0xd0,0xc6,0x01,0x4f,0xa3, + 0x22,0x44,0x37,0x99,0x44,0xd2,0x58,0x7f,0xd2,0x83, + 0x0a,0x71,0x62,0x23,0xfd,0x51,0x01,0x85,0x43,0x04, + 0x38,0xc4,0x9a,0x38,0x64,0x40,0xc8,0x3d,0xb5,0x95, + 0xdd,0xbd,0x39,0x29,0x86,0xc5,0x50,0x02,0x3d,0x43, + 0xd2,0xff,0xb2,0xef,0xc5,0xe9,0x09,0x11,0x82,0x3c, + 0x59,0x37,0xa4,0xc4,0x4d,0x05,0x17,0x03,0xbf,0xcc, + 0x12,0xe6,0x81,0x5f,0x87,0x22,0xb9,0x49,0xcc,0x97, + 0x92,0xf4,0xa9,0xcd,0x65,0xc6,0xe8,0xed,0xa0,0x13, + 0x4d,0x49,0xf7,0xe4,0x4c,0xcf,0x3b,0xdd,0x83,0xf7, + 0x9f,0xff,0xa6,0x6a,0x72,0x0a,0x6e,0x5b,0x98,0x4b, + 0x5b,0x0e,0xfa,0x80,0x36,0x2c,0xfb,0x89,0xcc,0x44, + 0xd0,0x23,0x8c,0x29,0x47,0xe7,0xdb,0x2d,0xe9,0x54, + 0x5b,0x7e,0x93,0x46,0x82,0x4b,0x38,0xfa,0xc7,0x40, + 0xdb,0xa3,0xf4,0x3b,0x5c,0x12,0x95,0x92,0xa7,0xc0, + 0xa9,0xa2,0x31,0x7e,0x1a,0xcf,0xb6,0x63,0xe2,0xbd, + 0x72,0x71,0x32,0x05,0x9b,0x03,0xcf,0xf5,0xc8,0x09, + 0x81,0x9b,0x38,0x05,0x93,0x1f,0xd6,0x44,0xd8,0x0c, + 0x09,0xc5,0x98,0xa8,0x4c,0x89,0xfd,0xd7,0xd7,0x57, + 0x51,0x2f,0x7d,0xba,0x57,0xe2,0xbc,0x90,0x97,0xdc, + 0x62,0x4f,0x26,0xa5,0xe3,0x28,0xa4,0x49,0xbc,0x20, + 0x9a,0x1e,0x4d,0x08,0x95,0x6b,0x29,0x24,0x72,0xf4, + 0x94,0x00,0x52,0x31,0xd3,0xbe,0xfb,0x38,0xa4,0x6d, + 0xb0,0x43,0x71,0xcf,0xe6,0x4c,0x3c,0x26,0x69,0xa7, + 0x9e,0xc5,0x21,0xf5,0xf8,0x59,0xa8,0x8e,0x8b,0x6c, + 0x10,0x9c,0x17,0x55,0x70,0x8f,0x3f,0x34,0xfd,0xd8, + 0xa7,0x8a,0xd2,0xa8,0xb7,0x7a,0x39,0xf5,0x1b,0x48, + 0x7e,0x5e,0xae,0xdd,0x0e,0x96,0x15,0x6f,0xd3,0x61, + 0xe2,0x13,0x69,0xf5,0x6c,0xae,0x7f,0x54,0xd1,0x8f, + 0x79,0x27,0x75,0x19,0xbf,0xb5,0xcb,0xe8,0xc5,0xe8, + 0xa4,0x9c,0xb4,0x1d,0xe9,0x3e,0xec,0x68,0xbc,0x4b, + 0x98,0xc3,0xa8,0xf8,0x63,0x6a,0xa9,0xc5,0xa0,0x63, + 0xa6,0x3a,0x1f,0x5e,0x61,0x8b,0xb6,0xda,0x47,0x7b, + 0x6a,0xa2,0x50,0x4c,0xad,0x74,0x9d,0x14,0xd7,0x69, + 0xc2,0x0b,0xc6,0xfd,0xc3,0x74,0xf8,0x43,0xfe,0x40, + 0x50,0xc0,0x33,0x4d,0xf2,0xfd,0x20,0x48,0x06,0xf2, + 0x7b,0x33,0xa4,0x34,0x55,0x0d,0xf1,0x37,0xca,0x05, + 0x46,0x67,0x6c,0xe8,0xc4,0x07,0xa9,0x92,0x96,0x80, + 0x51,0x44,0x7c,0x9b,0x60,0x4f,0x82,0xe4,0x44,0x84, + 0x8e,0x54,0x5d,0x0b,0x88,0x5e,0x05,0xf0,0x68,0x01, + 0xdc,0x1d,0x11,0xa4,0xd4,0x83,0x25,0xef,0xb1,0x34, + 0x82,0xaf,0xa8,0xcd,0x04,0x07,0xba,0x16,0x9f,0xb6, + 0x95,0x5c,0x80,0xa2,0xeb,0x77,0xe4,0xfa,0x6f,0x27, + 0xe9,0x07,0x94,0xef,0x94,0x45,0xdd,0x73,0x02,0x81, + 0xc9,0x9a,0xb8,0x0f,0x10,0x14,0x90,0xe8,0xdc,0x02, + 0x6c,0x25,0x67,0xe6,0xd6,0xb2,0xc1,0xa0,0x73,0x19, + 0xb2,0x2d,0xa0,0x7f,0x0f,0xb4,0x61,0x39,0x3a,0x6d, + 0xa7,0xb5,0x26,0xfe,0x41,0x47,0x4e,0xf4,0x5e,0x09, + 0x41,0x98,0x12,0x6c,0x6a,0x33,0xb9,0xea,0x38,0xb5, + 0xda,0x03,0x5a,0x90,0x90,0x8b,0xf4,0x0e,0x7e,0xf8, + 0x77,0xc2,0x3b,0x7a,0x7b,0x2f,0x0a,0xf3,0x27,0xc4, + 0xb0,0x93,0xa0,0xa9,0xcd,0x22,0xc5,0x40,0x4d,0xe8, + 0x8c,0xa2,0x47,0xc3,0x73,0xaa,0xe4,0x85,0x77,0x99, + 0x29,0x47,0x98,0x1c,0x7c,0x54,0xd0,0xaa,0x64,0xae, + 0x48,0x1c,0xa1,0x98,0xaa,0x68,0x6c,0xda,0xa9,0x16, + 0x29,0xd1,0xa9,0x27,0xa9,0xe2,0x6b,0xcb,0x13,0x6c, + 0x32,0x1e,0x95,0x54,0xe0,0x0d,0x82,0xf5,0x76,0x9f, + 0x3a,0x7d,0x66,0x78,0x96,0x31,0xf6,0x53,0x50,0x25, + 0x72,0xba,0xf2,0xe3,0x88,0x83,0xe4,0xce,0x57,0x13, + 0x63,0x1f,0xbc,0xac,0x49,0x7a,0x45,0x5d,0x13,0x26, + 0x32,0xf7,0x05,0x1e,0x98,0xae,0x05,0xeb,0x78,0x62, + 0x53,0x0c,0x18,0x3a,0x14,0x23,0xe2,0x0c,0x68,0x6a, + 0xc9,0x1a,0xf9,0x67,0x0a,0x6c,0x22,0xcc,0x52,0xf5, + 0x9e,0xfa,0x85,0x4a,0x28,0x75,0xa6,0x99,0x14,0x48, + 0xa9,0x67,0x19,0x88,0x63,0x45,0x68,0x02,0x5d,0xeb, + 0x14,0x38,0x1f,0xbd,0xc2,0x27,0x6f,0x62,0x64,0xf3, + 0xa7,0x64,0x6c,0x78,0xb6,0xe4,0xa9,0x85,0xed,0x3c, + 0xf2,0xcd,0x99,0xd0,0x83,0x00,0xe1,0x63,0x05,0xee, + 0x12,0xc9,0x4d,0x8f,0xfe,0x7e,0xe7,0xb7,0xc7,0x0b, + 0x71,0x08,0xc8,0x53,0x6e,0x3a,0x0c,0xd3,0xf3,0xda, + 0xc0,0xbb,0xee,0x3b,0xa7,0xe9,0x2e,0xf7,0x6c,0x94, + 0xec,0x9a,0xa6,0xb9,0xa8,0xed,0x47,0xc8,0x8f,0x19, + 0xc7,0x7e,0xdb,0xe4,0x0a,0xf3,0x3a,0x82,0xb8,0x6b, + 0x13,0xa5,0xd6,0x03,0xc1,0xd0,0x81,0x07,0x45,0xad, + 0x83,0xb7,0xef,0xee,0xff,0x38,0x0f,0x32,0xd7,0x2e, + 0x4e,0x48,0x1e,0x48,0x0a,0x5c,0x06,0x21,0x70,0x6b, + 0xe1,0x6d,0x4c,0x3d,0x21,0xcc,0x30,0xac,0x51,0x1b, + 0xc9,0x0c,0xfd,0xf9,0x61,0x9f,0xd5,0x15,0xa6,0x2a, + 0xf5,0xb0,0x73,0x32,0x03,0x8e,0x06,0xe0,0xb8,0x93, + 0xc0,0xdd,0x79,0x0b,0x68,0x6e,0x8d,0xd1,0x1a,0xea, + 0x7e,0x7b,0x80,0x04,0xa5,0xa4,0x0d,0x75,0xc0,0x52, + 0x35,0xef,0xa4,0x57,0x16,0xc5,0x30,0x4e,0x41,0x93, + 0x60,0xe0,0x44,0x70,0x0e,0x6a,0xc6,0x28,0x9c,0x4a, + 0x85,0xab,0xee,0x67,0x40,0x29,0x3f,0x9a,0x44,0x4b, + 0xb1,0x36,0x25,0x28,0x30,0xd0,0x63,0x11,0x5f,0x42, + 0x67,0x80,0x5b,0x18,0xe9,0x05,0x5b,0x63,0xe9,0x89, + 0xbf,0xe4,0xfe,0xfe,0xd7,0xeb,0xf5,0xfa,0xdf,0xaf, + 0x6f,0x37,0x78,0x65,0xdd,0xab,0x6e,0x4e,0x10,0x74, + 0x7a,0x7b,0xb9,0xea,0xc1,0xb2,0xf9,0xc7,0x11,0x66, + 0x85,0x4c,0x4b,0x3a,0x38,0x29,0x49,0xc1,0x07,0x47, + 0x24,0x64,0x9a,0x54,0x08,0xad,0x97,0xb8,0x69,0xa8, + 0x5a,0xb8,0xff,0xdc,0xdd,0x47,0xca,0x68,0xd3,0xc6, + 0x73,0x95,0x91,0x81,0xf7,0x63,0x6f,0xdb,0x21,0x82, + 0x8e,0x70,0xa9,0xd2,0x05,0xee,0x79,0x24,0xbe,0x8c, + 0x38,0x7d,0x27,0x2f,0x2b,0x1c,0xc9,0x0c,0x2d,0x45, + 0x5b,0x19,0x6a,0x35,0x12,0xae,0xaf,0xdc,0x98,0x2d, + 0x91,0x2d,0x61,0x22,0xb1,0x86,0x0d,0x6c,0xdb,0x6b, + 0x03,0xbf,0xa3,0x3e,0x31,0x36,0x4c,0x53,0x2a,0x2e, + 0x21,0xde,0x8c,0xce,0xeb,0x84,0xc5,0x65,0x84,0x54, + 0x3f,0x49,0xf8,0x5d,0xa1,0x91,0x10,0x24,0x83,0xce, + 0xbe,0x29,0xc7,0xea,0x67,0xa6,0x40,0xee,0x38,0x45, + 0xf2,0xbd,0xc9,0x56,0x22,0xdd,0xc7,0xa1,0xc4,0x70, + 0x72,0x7e,0xd7,0x77,0xd9,0xd6,0xdf,0x59,0xc4,0x1e, + 0x6c,0x9d,0xa9,0x30,0x24,0xc4,0x8e,0xe3,0x9e,0x8f, + 0x7b,0x1e,0x66,0xad,0x9c,0x80,0xce,0x1f,0x38,0x20, + 0x0f,0x1c,0xb8,0x27,0x14,0x0b,0xc7,0xbd,0x87,0x7e, + 0xed,0xf2,0x99,0x07,0x68,0x0d,0x07,0x26,0x32,0x0f, + 0x18,0x3d,0xd3,0x7b,0x3a,0x90,0x14,0x1d,0xf3,0x1e, + 0x0e,0xbc,0x1b,0xb2,0x6b,0x38,0xee,0x5c,0x0b,0x2d, + 0xd2,0x63,0xd6,0xf2,0x81,0xc2,0xea,0x40,0x1b,0x9e, + 0xd6,0xfc,0x01,0x99,0x96,0x03,0x67,0xee,0x81,0xb3, + 0xeb,0x40,0xec,0x3c,0xc4,0x1f,0x22,0x71,0x50,0x6a, + 0xa7,0xea,0xf7,0x1b,0xa4,0xf8,0x9c,0x73,0xfe,0xd3, + 0x39,0xe7,0xbf,0xfc,0x26,0x54,0x63,0x12,0xd6,0x9b, + 0x90,0x85,0xc4,0x9d,0x70,0x2d,0xa2,0xe4,0xb1,0x95, + 0x12,0x10,0x67,0x1e,0xa7,0xb6,0x09,0x90,0xf0,0xd8, + 0xf6,0x8a,0x51,0x3b,0x7d,0x3c,0x0b,0xa7,0x5b,0xd4, + 0x61,0xd7,0xc9,0x18,0x36,0xe9,0xe5,0x74,0xd5,0x62, + 0x51,0xbd,0xa4,0x77,0x53,0x64,0xeb,0x60,0x7a,0xd0, + 0x45,0xd3,0x4f,0xae,0xc5,0xa1,0x53,0x72,0x1d,0xc9, + 0xe9,0x23,0xb8,0x8e,0x04,0x9f,0xa6,0x3d,0xd2,0x77, + 0x10,0xe1,0xd9,0x99,0xc4,0x12,0x87,0x49,0xdf,0x65, + 0xaa,0x96,0x48,0x11,0x1c,0x12,0x82,0x5a,0x40,0xaf, + 0x8f,0x35,0xe0,0xd4,0xd2,0x2f,0x90,0x78,0xe8,0xd5, + 0xbb,0x4b,0xf4,0x3e,0x70,0x77,0xaf,0xa6,0x48,0x1c, + 0x2b,0x25,0x22,0x60,0x3a,0x0d,0xad,0x49,0xa5,0x99, + 0xfa,0xff,0x2e,0x6e,0x68,0xf2,0x9f,0x2c,0x69,0x02, + 0x9f,0x2d,0xc9,0x75,0x9c,0x94,0x88,0x25,0x34,0x09, + 0xaa,0xf3,0x33,0x21,0x0f,0x8a,0x02,0x13,0x27,0xa4, + 0xbf,0xa7,0xee,0x23,0x96,0xe2,0xaf,0xe3,0x07,0x29, + 0xf7,0xa5,0xc7,0x7f,0x67,0xe5,0xa2,0x3c,0x28,0xf7, + 0x9e,0x7b,0x32,0x61,0x08,0xc3,0x07,0x12,0xe3,0xa2, + 0x43,0x52,0xf9,0x2b,0x32,0x9d,0xeb,0xf8,0x1f,0x6f, + 0xd7,0x69,0x34,0x89,0x0e,0x8c,0x67,0x9f,0xa4,0x9c, + 0xac,0xa8,0x56,0xf7,0xe7,0x12,0xa7,0x82,0x47,0xd2, + 0xf0,0xcd,0xdf,0x3b,0xa0,0x92,0xef,0xb8,0x4b,0x3f, + 0x4a,0xc9,0xca,0x11,0xa2,0x67,0xa7,0xbf,0x7f,0x5b, + 0x7a,0xa4,0x6e,0x42,0x42,0x97,0x1b,0x7d,0xe1,0xc0, + 0x99,0xe7,0x92,0xa0,0xaa,0xaa,0x63,0x12,0xf5,0x82, + 0xa4,0x26,0x7e,0x7e,0x52,0xa0,0x36,0xd3,0xc5,0x67, + 0xd2,0xa9,0x33,0xeb,0xf9,0x90,0xe2,0x3d,0xb8,0x32, + 0xf8,0x29,0xb0,0xe9,0xd0,0x26,0xe2,0xd3,0x15,0xd4, + 0x1e,0x13,0xec,0x9f,0xa6,0x78,0x3e,0x68,0x47,0x44, + 0x31,0xab,0x4f,0xac,0x05,0x36,0xd5,0xaa,0x1e,0x68, + 0x2e,0x58,0x4e,0x82,0x5b,0xc1,0x51,0xd9,0xb6,0x1d, + 0xdc,0x48,0x3d,0x71,0x93,0xe8,0x90,0x1a,0xe0,0xc9, + 0x22,0x1f,0x26,0x40,0xd1,0x8a,0x26,0xde,0xc2,0x5a, + 0xaa,0xd4,0xba,0x4c,0xfd,0x5f,0x33,0x72,0x5b,0xa4, + 0x14,0xac,0xbd,0x76,0x90,0x53,0xb7,0x3a,0x12,0x0a, + 0xf3,0x93,0xd6,0x13,0x05,0x23,0xd7,0xee,0x05,0x53, + 0xdf,0x07,0x6f,0x84,0x90,0x90,0xab,0x8d,0xae,0x4f, + 0xeb,0x52,0xc7,0xf4,0xc3,0x1e,0x43,0xa4,0x44,0xd4, + 0x81,0xfb,0x68,0xfb,0x6a,0xed,0x26,0xed,0x8e,0xf0, + 0x3c,0x62,0x9b,0x75,0x1a,0x4c,0x18,0x20,0xfb,0xb7, + 0xb6,0x9b,0xf2,0x4f,0x5c,0x8c,0x20,0xe1,0x37,0xa7, + 0x54,0xac,0xa4,0x6d,0xd7,0x46,0x52,0xae,0x8c,0xae, + 0x5b,0x51,0xb4,0xaf,0xe9,0xf9,0x5e,0x46,0xa0,0xd3, + 0x20,0xe6,0x45,0x62,0x81,0xdf,0xed,0xe7,0x4a,0xde, + 0x8d,0x24,0x1c,0x97,0xcc,0x8d,0xdd,0xb0,0x8b,0x7c, + 0x7e,0xc1,0x9a,0x40,0x09,0x80,0x7e,0x9f,0xfa,0x9c, + 0xa8,0xb5,0x46,0x3c,0x37,0x92,0x88,0x00,0xa4,0xab, + 0x00,0xcd,0x5e,0x8d,0xd9,0xab,0xd0,0xaa,0xc6,0x5b, + 0x48,0xfc,0x6b,0x23,0x34,0xea,0xde,0x4f,0x2b,0x34, + 0x2a,0x25,0xf6,0x89,0xf6,0xe1,0x92,0x85,0x44,0x4a, + 0x4e,0xe2,0x87,0xfa,0xb9,0xd4,0x7e,0x72,0x54,0x00, + 0xd7,0xea,0xde,0x78,0x6c,0x3a,0x83,0x62,0xd7,0x0e, + 0xd6,0x22,0xf9,0xe5,0x64,0xae,0xf5,0x26,0x5d,0x7b, + 0x68,0x21,0x34,0x68,0x5b,0x2d,0x7a,0xb8,0x27,0x85, + 0xc9,0x29,0xe8,0xa6,0x07,0xe0,0x5a,0x01,0x54,0x71, + 0x27,0xc6,0xf8,0xc4,0xab,0x09,0x22,0x5f,0x09,0x2d, + 0x2b,0x58,0x9c,0xa4,0xe1,0x63,0xab,0xcc,0x89,0x84, + 0xa6,0x5a,0x3c,0xe9,0x1e,0x49,0xef,0xc2,0xdd,0xd3, + 0x5d,0xd9,0x6c,0xc8,0x75,0x0e,0x11,0x49,0xd7,0xdf, + 0xa7,0xb6,0xcc,0xe1,0x52,0x84,0x3e,0xb8,0x9e,0x70, + 0xfb,0xdd,0x4a,0x9c,0x9e,0x3e,0x9d,0x45,0x1c,0x0f, + 0x9a,0x1c,0xec,0x31,0x49,0xdf,0x95,0xe1,0x86,0x4d, + 0x5c,0x8c,0xbe,0xc6,0x6a,0xc3,0x75,0x72,0xdf,0x0f, + 0x09,0x5c,0xfa,0xf7,0x37,0x42,0xaf,0x4b,0xe0,0xa6, + 0x62,0xe1,0x13,0x45,0xf1,0x50,0x4c,0xc5,0x36,0xf3, + 0x46,0xd0,0x34,0x25,0x64,0xc2,0xab,0x21,0x14,0xf7, + 0x61,0xaa,0x08,0xa8,0x42,0x25,0xae,0x95,0x79,0xce, + 0x35,0x89,0x3c,0xf6,0x77,0xe1,0x10,0x39,0x12,0xaa, + 0x85,0xc3,0xa1,0x94,0xeb,0x21,0x72,0x13,0x35,0x90, + 0x51,0x89,0xe3,0x68,0x05,0x4f,0xdf,0xe0,0x80,0x41, + 0x30,0x36,0xb5,0x9c,0x69,0xad,0x10,0x07,0x29,0xa0, + 0x58,0x36,0x99,0x22,0xe2,0xfc,0xd0,0x3a,0x8c,0x7c, + 0x98,0xd0,0x62,0x4e,0xe8,0x76,0x6c,0x67,0x52,0x91, + 0xaf,0x05,0x84,0x9e,0x11,0x81,0xa3,0x36,0x02,0x05, + 0x74,0x5e,0xbb,0x6b,0x4f,0x6e,0x06,0x9f,0x00,0x0b, + 0x0e,0x61,0xd7,0x29,0x71,0x47,0xfe,0xa6,0x18,0x9a, + 0x54,0xe1,0xdd,0xf9,0xf3,0xea,0xcf,0x82,0xbc,0x76, + 0xe8,0x0b,0x2f,0x20,0xd9,0x0e,0x0a,0x97,0x24,0x44, + 0x57,0xa2,0x6c,0xfa,0xb8,0xf9,0x94,0xb0,0x24,0x54, + 0x44,0xff,0x90,0x2c,0x2c,0x14,0x96,0x54,0x5e,0x81, + 0x53,0xa8,0xdc,0x90,0xcd,0xdc,0x67,0x98,0xe7,0x5b, + 0xf0,0x72,0x23,0x89,0x56,0x84,0x10,0x6d,0x12,0x70, + 0xc1,0xe4,0x18,0x4c,0x2c,0x58,0x12,0x76,0xe7,0x2c, + 0x4d,0x48,0x54,0x68,0x21,0x3c,0x92,0x9f,0xbe,0x91, + 0x37,0xa4,0x40,0xe0,0x7f,0x25,0x2f,0xae,0x22,0xe4, + 0xe3,0x9e,0x82,0x19,0x92,0xdd,0x82,0xb5,0x3f,0x16, + 0x07,0x8e,0x5f,0x45,0xc8,0x6a,0x7b,0x2e,0xe5,0x82, + 0xbc,0xd9,0x87,0xf6,0x20,0x37,0x7e,0x4d,0x94,0x60, + 0x3e,0x6c,0x34,0x26,0x5f,0xbf,0xc4,0x7b,0x9b,0x24, + 0xf8,0x8d,0x77,0xda,0xc3,0x73,0xac,0x3e,0x21,0x0d, + 0x5e,0x5e,0x5f,0x67,0xe3,0x7b,0x26,0xf1,0xeb,0x61, + 0x8b,0x61,0xa6,0x93,0x52,0xfb,0x0d,0x27,0xb6,0x60, + 0xfa,0x74,0xeb,0x47,0xf6,0xb0,0xc2,0x00,0x44,0xb3, + 0x1c,0x12,0x45,0x83,0x13,0x46,0x0b,0xad,0x02,0x0a, + 0x86,0xfc,0xc7,0x30,0x40,0xf9,0x38,0xc8,0x26,0x55, + 0x7b,0xa7,0xef,0x46,0xfa,0x3a,0x8a,0x8a,0x3b,0x24, + 0xee,0x62,0x8d,0x2d,0xa7,0x3d,0xb6,0x12,0x55,0x74, + 0x16,0x4c,0x9d,0xc7,0x48,0xa8,0xae,0x03,0x15,0x52, + 0x87,0x02,0x92,0x68,0x27,0x84,0x58,0x84,0x3c,0xa5, + 0x82,0x82,0xc0,0x00,0xd2,0xa4,0x12,0x9e,0x1c,0xc5, + 0xe0,0xd1,0x92,0x29,0x75,0x45,0x1c,0xba,0x34,0x09, + 0x20,0xea,0x7b,0x02,0xcb,0x2c,0x4b,0x1b,0xe9,0x3f, + 0xfb,0xdb,0x6d,0x44,0x07,0x17,0xd1,0x03,0x54,0x19, + 0xeb,0x5e,0xed,0xa4,0x29,0x0a,0x98,0x9a,0xb1,0x1c, + 0x01,0x8a,0x0e,0xe9,0xb3,0xc8,0x4e,0x40,0xdd,0xde, + 0x83,0x35,0x41,0x84,0xea,0x75,0x11,0x75,0x99,0x6d, + 0xe2,0xe1,0x10,0x37,0x25,0x70,0x2a,0x4a,0x79,0x36, + 0x34,0xe2,0x09,0x5c,0x99,0x47,0xc2,0xe5,0xec,0x22, + 0xb4,0x6a,0xd1,0xe7,0x99,0x3c,0x6f,0x48,0x4a,0x3d, + 0x54,0x5c,0x15,0xf4,0x61,0x2a,0xb4,0x65,0x46,0x4f, + 0x21,0x77,0x2f,0x0e,0xd6,0x9d,0x88,0xcc,0xca,0xff, + 0xea,0x6b,0x5c,0x7f,0xdf,0x09,0x6e,0x69,0xa2,0x37, + 0x09,0x63,0x06,0x13,0xd8,0x51,0xd2,0x3e,0xe9,0x8a, + 0x50,0xf0,0xdf,0x54,0x9f,0x4e,0xd7,0x69,0x13,0x9c, + 0x08,0x69,0xa5,0x24,0x3e,0x3d,0x8b,0xc4,0x59,0xba, + 0x89,0x2e,0x93,0x1e,0xd9,0x92,0xeb,0xe3,0x0c,0x17, + 0x0f,0x89,0xb7,0xc2,0xf3,0x28,0xe5,0x1d,0x0d,0x22, + 0xa8,0x13,0x5f,0xc7,0x3a,0xc4,0x3b,0x3d,0x15,0x72, + 0x38,0x97,0xc9,0xbf,0xe3,0x92,0xf3,0x7b,0xa0,0x41, + 0x79,0x1f,0x4e,0x97,0xc6,0xdc,0xd3,0xdb,0xdf,0xdd, + 0x9c,0x33,0xe5,0xe4,0x90,0x62,0xbe,0x52,0x09,0xd4, + 0xa1,0x5c,0xf6,0xe2,0x71,0x89,0xbc,0xfb,0x8e,0xd4, + 0x32,0xd1,0x6b,0xf9,0xbe,0xe6,0x02,0x92,0x79,0x29, + 0xb1,0xdc,0xf1,0x7e,0xb6,0xce,0xe7,0x06,0xf5,0x3a, + 0xd4,0x0a,0x4f,0x2e,0x03,0xa2,0xec,0x7d,0xc8,0x12, + 0xc6,0xd8,0x32,0x1d,0x57,0x48,0x7d,0x7d,0x7d,0x9d, + 0xad,0xeb,0xbc,0x6b,0x29,0x25,0xeb,0x18,0x12,0x46, + 0x76,0x6d,0xc0,0xfe,0xae,0x89,0xd7,0x93,0x9e,0xf7, + 0x06,0x81,0x7e,0x9c,0xdb,0xa6,0x1d,0xe0,0x32,0x3f, + 0x8b,0x58,0xb8,0xcc,0x6d,0xb0,0x8a,0x28,0xe0,0xa4, + 0xac,0xdc,0x6d,0xd3,0x18,0x62,0x13,0xc0,0xb2,0xd5, + 0x4a,0xba,0x97,0x64,0x34,0x47,0xd5,0x83,0x0a,0x0a, + 0x4e,0x23,0xe5,0x53,0x65,0xe8,0x5e,0x96,0x4e,0xd3, + 0xdd,0x64,0x3c,0x5d,0x40,0x54,0x91,0xa5,0xde,0x6c, + 0xf2,0x97,0x01,0xd1,0xb4,0x84,0xa2,0xa2,0xa7,0xd9, + 0x86,0x5b,0xd5,0xd7,0x86,0x83,0x6f,0xfb,0xf3,0x16, + 0x91,0x3c,0xbb,0x06,0x75,0xb2,0xcc,0x25,0x26,0xb4, + 0x96,0xee,0x6a,0x0e,0x0c,0x60,0x6d,0xbf,0x1e,0xa0, + 0xfb,0x34,0xd9,0xd6,0x03,0xa9,0x55,0x00,0x36,0x1c, + 0x97,0xa8,0x49,0x44,0x42,0x80,0xb7,0xee,0x92,0x1e, + 0x7e,0xda,0xc2,0x4c,0x2e,0xd0,0x1d,0x61,0x54,0x0d, + 0x1d,0x67,0x86,0xe9,0xd6,0xde,0x44,0x6e,0x4c,0xc5, + 0xca,0x50,0xe1,0x55,0xf3,0xb1,0x1a,0xf5,0x73,0xf4, + 0xb3,0x04,0x6d,0x7e,0xb4,0x90,0x74,0xf8,0x23,0x89, + 0xbf,0xa9,0x89,0x2e,0x20,0x05,0x16,0xe1,0x4d,0xfc, + 0x87,0x0e,0x05,0x25,0x8e,0x0d,0x20,0xdf,0x76,0xcd, + 0x53,0x91,0x01,0x1e,0x6a,0x51,0x67,0x2b,0x50,0x0b, + 0xa2,0x46,0x18,0x3c,0xc7,0x72,0x2d,0x49,0x2d,0xaa, + 0x5d,0xdc,0x73,0xe7,0x13,0x24,0x4d,0xd6,0x2a,0x88, + 0xec,0x59,0x5c,0x5c,0x9a,0x38,0x88,0xf4,0x1c,0x3a, + 0x11,0x1c,0xd6,0x77,0x2a,0x10,0xaf,0x69,0x18,0x41, + 0x0b,0x78,0xe9,0xec,0x44,0x73,0xdd,0xa1,0x85,0x6f, + 0xcf,0xaa,0x64,0xa9,0xa4,0x71,0xd0,0xe9,0x06,0xba, + 0xce,0xd1,0xb6,0xe5,0xae,0x03,0x42,0x9a,0xb3,0x6c, + 0x46,0xf9,0x5f,0x89,0x90,0x94,0x0e,0x2d,0x80,0xfa, + 0xdf,0x2a,0xb8,0x4d,0xff,0x34,0x8d,0xac,0xbb,0xb6, + 0x90,0x23,0xb5,0xf5,0x80,0xee,0xc6,0x61,0x9d,0xb1, + 0xde,0xc5,0xe6,0x79,0xb5,0xb0,0x32,0x88,0x32,0xdc, + 0x4e,0x97,0x87,0xa6,0xad,0x2e,0x50,0x64,0x4e,0x07, + 0x4b,0x9a,0x04,0x33,0xc1,0xd8,0x6d,0x9e,0x4a,0x07, + 0x1d,0x65,0xd7,0x13,0xa9,0x96,0xd4,0xa9,0x55,0xc8, + 0x8b,0x82,0xaf,0x83,0x9b,0x43,0xfb,0x29,0x89,0x62, + 0x56,0xe0,0x63,0x54,0x78,0xb7,0x35,0x11,0x40,0x75, + 0x84,0xde,0xbd,0x8b,0x4e,0x80,0x74,0x05,0x85,0x6b, + 0xad,0x91,0x13,0x74,0xf3,0xc1,0x8a,0x3c,0xb5,0x9e, + 0x9c,0x5d,0x46,0x4b,0x87,0x90,0x19,0x38,0x88,0xde, + 0x5a,0x53,0x89,0x33,0xb3,0xf1,0x0e,0xa4,0x36,0x19, + 0x25,0x71,0x1b,0x47,0x68,0xfa,0x1d,0x6d,0x4d,0x91, + 0xdf,0xd6,0x34,0x31,0xe2,0x74,0x97,0x92,0x9c,0x80, + 0xf9,0x7f,0x2b,0xb4,0x18,0x0a,0x8f,0x5a,0x10,0x60, + 0x91,0x84,0x3b,0x11,0xec,0x75,0xdd,0xc1,0x73,0x7f, + 0xb4,0xa6,0x9d,0x8f,0x98,0xb1,0x8c,0xa9,0xbb,0x30, + 0x33,0x31,0x81,0x86,0x40,0x6c,0xc2,0xa1,0x85,0x4d, + 0x92,0xbd,0x20,0xe1,0x40,0x17,0xcb,0xc9,0xe4,0x79, + 0x5a,0xd3,0xa1,0xf5,0xfb,0x50,0xef,0x77,0xc4,0xea, + 0xd0,0x86,0x46,0x3b,0x0f,0x48,0xe2,0x89,0xa3,0xfb, + 0x10,0xf7,0x1b,0x68,0x2b,0x2e,0x76,0xd9,0x84,0x89, + 0xda,0xe3,0x3d,0x29,0x4c,0xed,0x76,0x67,0x6f,0xe3, + 0x0a,0x09,0x4a,0x9c,0xc9,0xee,0xea,0x43,0x9e,0xd1, + 0x5b,0x81,0x29,0xf1,0xb5,0x5e,0xf7,0xa6,0x70,0xfe, + 0x33,0x43,0x9f,0x77,0xad,0xea,0xfa,0xa9,0xf7,0x96, + 0x12,0x61,0xa9,0x7a,0x30,0x70,0xe0,0x48,0xbc,0x73, + 0xc2,0x48,0x2e,0x41,0xd2,0x00,0xd8,0x5f,0xa4,0x54, + 0xc4,0xa3,0x3a,0x2d,0xa1,0x5f,0xc1,0xed,0x96,0x7c, + 0x50,0xaa,0xb7,0x73,0x26,0x38,0x30,0xe9,0x20,0x11, + 0x84,0x4f,0xe8,0x9c,0x41,0xd6,0x8a,0x5a,0x4b,0x40, + 0x46,0x2b,0xc7,0x63,0x48,0xa4,0x49,0xb7,0xc6,0x94, + 0x17,0x65,0x9e,0x7d,0x75,0xa1,0x45,0x09,0x0a,0x15, + 0xa6,0xa0,0x6a,0x20,0xf7,0x15,0x8d,0x6f,0x4b,0x82, + 0x84,0x5a,0x3e,0x0e,0x8d,0x0c,0x81,0xb2,0x1c,0x07, + 0x23,0x1c,0xdc,0xe5,0xf8,0x09,0xae,0xe5,0x41,0x0a, + 0xe3,0x4d,0x94,0x70,0x4d,0x46,0x4e,0xe8,0x2f,0xd9, + 0xdf,0x90,0x11,0xe9,0x04,0x59,0x4f,0xaa,0xd2,0x93, + 0xa8,0x6a,0xe7,0x3d,0x39,0x91,0xd4,0x69,0x7f,0x0a, + 0xc2,0x53,0x1b,0x68,0x5e,0x03,0x7a,0x9a,0xa8,0x51, + 0x45,0x6f,0x20,0x78,0xe2,0x94,0x9f,0x5c,0xa3,0x6d, + 0x99,0x29,0xe2,0x9e,0x78,0x32,0x50,0x1c,0xd7,0x84, + 0xea,0x12,0x62,0xea,0x34,0xbe,0x68,0xfa,0x27,0x14, + 0xdd,0x15,0x10,0x52,0x9b,0x88,0x4e,0x96,0x48,0x84, + 0xc4,0xa7,0x04,0x2b,0x59,0x40,0x01,0x9a,0x51,0xce, + 0x02,0xe5,0x4e,0x1c,0x37,0x53,0xd8,0x57,0x18,0x1c, + 0x31,0x3f,0x5f,0x53,0x4b,0x70,0xea,0x86,0xa8,0xa6, + 0x5f,0x42,0x18,0xa9,0x68,0x1f,0x10,0xf3,0x18,0xdf, + 0x8c,0xba,0x35,0xb5,0xcd,0x46,0xee,0x55,0xa7,0x92, + 0xbc,0x7d,0xae,0xd3,0x85,0x18,0xd0,0x06,0x24,0x37, + 0x4d,0x22,0x6d,0x02,0xa7,0x6f,0xb2,0xb7,0x55,0x55, + 0x49,0x37,0x19,0x78,0x4d,0x97,0x6b,0xfd,0x05,0x8b, + 0x08,0x0b,0x3f,0x42,0xdb,0xab,0x92,0xa8,0x1c,0xa9, + 0x59,0xea,0x67,0x6d,0x5b,0x13,0x9d,0xf8,0x2c,0xf7, + 0x8b,0x53,0x49,0x66,0x31,0x5a,0x54,0xa4,0x27,0x78, + 0xb2,0x71,0xa9,0x12,0xad,0x8d,0x7b,0x3b,0x69,0x21, + 0x29,0x44,0x0a,0xd3,0x80,0xd1,0x2b,0x2c,0x58,0x34, + 0xd8,0xb6,0x96,0x3b,0x30,0xcc,0xa1,0x8f,0xa8,0xa0, + 0x73,0xe1,0x06,0x28,0x17,0x0f,0x4d,0x0d,0x94,0xbd, + 0x9a,0xa6,0x36,0xd2,0x5b,0xc6,0xe2,0xf5,0x05,0xae, + 0x45,0xb5,0xf4,0x70,0x3d,0x4f,0x6d,0x92,0x49,0x35, + 0x3e,0x09,0x33,0xf6,0x84,0x9d,0x4c,0x80,0xff,0xe6, + 0x9f,0x74,0x58,0x52,0x0c,0x12,0xbe,0x41,0x6c,0xe3, + 0x51,0x0c,0xeb,0x09,0x15,0x25,0x89,0x2e,0xa1,0x4d, + 0xd3,0x4e,0xda,0x72,0x4a,0xdc,0x92,0x60,0x7d,0x63, + 0x51,0x55,0xd3,0x0a,0xaf,0xa0,0xf4,0x5d,0x94,0x14, + 0x52,0x51,0xe2,0xda,0xce,0x6e,0xff,0x11,0x82,0x41, + 0xbe,0x89,0x9f,0xa8,0xea,0x6f,0x24,0x41,0x52,0xe1, + 0x4d,0xed,0xf1,0x34,0x89,0x47,0xbc,0x44,0xb2,0xb2, + 0x11,0x01,0x58,0xe2,0x6d,0x5a,0xf4,0x3b,0x21,0x77, + 0x69,0x22,0xdb,0xc5,0xb2,0x6e,0xf9,0x32,0x09,0xce, + 0x4e,0x45,0x98,0x8b,0xdf,0xd3,0xe4,0xb5,0x76,0x6e, + 0x3e,0xb1,0xca,0xd1,0xcf,0xfc,0xbe,0x97,0x72,0x03, + 0x0b,0x44,0x8a,0xff,0xb9,0xe6,0xa0,0xa7,0x51,0xa9, + 0x77,0x1e,0x02,0xea,0x35,0x3d,0xc8,0x34,0xeb,0x4f, + 0x59,0x1e,0x05,0x48,0x43,0x10,0x7e,0x64,0xa4,0x0e, + 0xd2,0x9e,0x32,0x4e,0x9d,0x42,0x30,0x0b,0xcc,0x1d, + 0xd0,0xc4,0xb5,0xb0,0x3e,0x2b,0x50,0xc1,0x8d,0xa3, + 0xa2,0xe4,0x5f,0x43,0x95,0x95,0x42,0x9a,0xcb,0x1e, + 0x7e,0xa9,0x29,0xa5,0xe3,0xf7,0xa8,0x4a,0xb1,0xa2, + 0x23,0x6e,0xfa,0xce,0x4d,0x2b,0x98,0xf6,0x85,0xed, + 0xf5,0x86,0x0a,0xfd,0xd1,0x6b,0x76,0x6d,0x59,0x83, + 0x7e,0xd5,0x90,0x94,0xdb,0xbf,0x77,0x1a,0x23,0xa6, + 0xba,0x7b,0xe3,0xf9,0xa4,0xc9,0xaa,0xe6,0x3a,0x7e, + 0x51,0xa2,0xe6,0x3c,0x9e,0x36,0x05,0x84,0x98,0x44, + 0x3e,0xfc,0xc6,0x26,0x84,0xb4,0x57,0x82,0x09,0xb1, + 0xba,0xcc,0x84,0x97,0x7e,0xa7,0x99,0x40,0x2b,0x49, + 0x44,0xc6,0xff,0xdd,0xbf,0xd7,0x93,0xaa,0x94,0x58, + 0xea,0xbe,0x01,0xbb,0x90,0x6e,0xc9,0x31,0xc6,0x3b, + 0xa7,0xed,0xe4,0xa6,0x30,0x8d,0xee,0x4f,0xa5,0xca, + 0xd7,0x24,0x67,0x8f,0xf7,0x2f,0x05,0x04,0x8e,0x49, + 0x13,0x47,0xcb,0x68,0x3e,0x5d,0x40,0xd2,0xad,0x50, + 0x4c,0x54,0x6f,0x2b,0x50,0x8b,0xd9,0xb4,0x56,0x6d, + 0x12,0x14,0x7c,0xee,0xc8,0x7f,0x6f,0x24,0xe3,0xbb, + 0xee,0x83,0xec,0xe3,0x02,0x9e,0xa4,0xdb,0x87,0xe5, + 0x12,0x76,0x2d,0x34,0x87,0x76,0x6f,0x29,0xf2,0xaa, + 0x5a,0x48,0xc3,0x1e,0xb3,0xda,0x48,0xf7,0xba,0xea, + 0x71,0x4f,0x8c,0x78,0x2d,0xca,0xb7,0x49,0x72,0x74, + 0xfd,0x38,0xc4,0x8d,0x12,0xc8,0x45,0x5b,0xef,0x91, + 0x6c,0x93,0x35,0x90,0xeb,0xa4,0xf4,0xb8,0xec,0x50, + 0x79,0x1a,0x5e,0x78,0x9b,0xa2,0xde,0x30,0xb7,0x55, + 0xf9,0x72,0x22,0x18,0x99,0xc3,0x37,0xea,0x24,0xfc, + 0x2d,0x81,0xed,0xba,0x7e,0x7c,0xa5,0x8a,0xd0,0x25, + 0x5d,0x58,0x74,0x88,0x86,0xa9,0xa8,0xc7,0x41,0xd2, + 0x17,0xfd,0x54,0x6d,0x07,0x8e,0x4d,0x91,0x53,0xae, + 0x81,0xf5,0xad,0x22,0xb2,0x41,0x22,0x6c,0x62,0x41, + 0x86,0xae,0x29,0xd3,0x9f,0xdc,0x7e,0xe9,0x5e,0x9c, + 0x56,0x91,0x26,0x7c,0x3a,0x1e,0x2b,0x6d,0x45,0x6c, + 0x0b,0xea,0x35,0xf7,0xbd,0xf9,0x49,0xf6,0xaf,0xeb, + 0x09,0xde,0xb9,0xe5,0x6f,0x38,0xae,0x4f,0xe0,0xd1, + 0x55,0x6a,0x0f,0x75,0x14,0x67,0xc9,0xbb,0x2b,0x7d, + 0xd6,0x8b,0x16,0xb4,0xe5,0xc0,0x4c,0x89,0x13,0x4d, + 0x80,0x51,0xc2,0x92,0x7c,0x98,0x88,0xc0,0x39,0x99, + 0xa6,0x86,0x22,0xe1,0xad,0x65,0xd4,0xc1,0x30,0x57, + 0xb1,0x3b,0x7e,0xa3,0x43,0x23,0x7a,0xc1,0xd2,0x13, + 0x57,0xf2,0xa1,0x73,0xde,0x5b,0x4a,0x56,0x1e,0xac, + 0x6a,0x6a,0x41,0x0e,0x4f,0x9a,0x3b,0x6f,0x6a,0xd2, + 0x81,0xa8,0x5d,0x93,0xe7,0x5f,0xe0,0x16,0x15,0xb5, + 0x36,0xf5,0x5e,0x53,0x12,0x94,0xb8,0x53,0x9a,0x04, + 0x6d,0x92,0x23,0xa2,0x67,0x24,0x01,0xd5,0x4d,0x67, + 0xc2,0xc5,0x56,0xd2,0x3a,0x73,0x7c,0xd2,0xc9,0xa6, + 0xc7,0x89,0x5d,0x12,0x5a,0xd2,0xa5,0x61,0x12,0x7f, + 0xad,0x27,0x00,0x26,0x76,0x46,0xde,0x1a,0x15,0xd9, + 0xd3,0x79,0xec,0x40,0x08,0x8d,0x49,0x13,0xda,0xab, + 0xad,0x78,0x2d,0x68,0x68,0xf8,0x60,0x92,0x5f,0x20, + 0x8d,0x3d,0x45,0xa8,0xaa,0xea,0x9f,0x31,0xf8,0x04, + 0x9f,0x3a,0x09,0x69,0x82,0xf8,0xf5,0x62,0x13,0x3a, + 0x93,0x12,0x07,0xd1,0x3b,0xb0,0x24,0x5b,0x82,0xc3, + 0xdc,0x42,0xa3,0x51,0xbc,0x50,0x29,0x3f,0x60,0xe2, + 0xa9,0xb7,0x18,0xc6,0xee,0x8b,0x7e,0x77,0x33,0x0d, + 0x16,0x7e,0xaf,0x16,0x0b,0xda,0x21,0x2f,0x3a,0x3e, + 0x4b,0x2e,0xd1,0x96,0xac,0x3c,0xb9,0x81,0x93,0xa5, + 0x02,0x25,0x46,0xc9,0x3a,0x65,0x0a,0x26,0x3a,0xfd, + 0x62,0x94,0xba,0xd7,0x5e,0x61,0x02,0xa9,0x22,0xf9, + 0xba,0x4f,0x1b,0x06,0xfe,0x48,0xe4,0x49,0xb8,0xe7, + 0x49,0xeb,0x3a,0xad,0x8b,0x60,0x41,0x83,0x09,0x7d, + 0x78,0x27,0xae,0x5d,0xf2,0x28,0x16,0x74,0x3f,0xa6, + 0x04,0x79,0xeb,0x9d,0xa7,0xf1,0xc2,0xb5,0xb1,0x1d, + 0x81,0x92,0x74,0x99,0xcc,0x14,0xd3,0xa1,0x02,0x83, + 0x3e,0x07,0x1c,0xa9,0xc7,0xb1,0x65,0x37,0x12,0x3f, + 0x28,0x5e,0xdf,0xca,0xc0,0xa7,0xd9,0x2e,0x3c,0x50, + 0x61,0xb5,0xca,0x30,0x31,0xb9,0x4e,0xce,0xa2,0x7f, + 0xc6,0x9d,0xf5,0x5d,0xdd,0xf6,0x3b,0x17,0x58,0x87, + 0xf4,0xcf,0x9e,0x44,0x04,0x25,0xfe,0x1e,0x8d,0xbd, + 0xaf,0xd7,0xab,0xbe,0xbe,0xbe,0x0e,0x1c,0x54,0x3f, + 0x63,0xdd,0xf4,0xfd,0x64,0xcd,0x41,0x07,0x65,0x5a, + 0x3b,0xad,0x98,0x3d,0x50,0xd4,0x9d,0xbe,0x1e,0xb7, + 0x09,0x93,0x9c,0xa3,0x27,0x15,0xd3,0xee,0x1e,0x89, + 0x3a,0xa1,0xb2,0x06,0xc3,0xe7,0x25,0x9f,0xc2,0x9f, + 0xaf,0xec,0xbf,0xeb,0xda,0x72,0x69,0x2f,0x7f,0xa3, + 0x9e,0x4e,0x5e,0xe1,0xe7,0xb3,0x55,0x5a,0x41,0x51, + 0xf4,0x64,0x61,0x91,0xde,0x8d,0xb3,0x50,0x49,0xdd, + 0x22,0x98,0x6e,0x7c,0x47,0x80,0xa6,0x2c,0xd1,0x65, + 0x74,0xe9,0x40,0x74,0x3d,0x5e,0x82,0x31,0x15,0x72, + 0x73,0xc2,0x84,0x84,0x0a,0x11,0x72,0x02,0x15,0xa3, + 0x45,0x17,0x92,0x4a,0xa7,0x64,0x8e,0x05,0xf7,0x5e, + 0xf0,0xa2,0x5c,0xc5,0xe5,0xbc,0xc7,0x70,0x12,0x6a, + 0x6a,0x9d,0x4d,0xde,0x6b,0x20,0x9d,0x8f,0xd0,0xe6, + 0x06,0x49,0x69,0x9b,0xa5,0x14,0xcd,0x19,0x24,0xee, + 0xcb,0x71,0x42,0x2e,0xf0,0xe1,0x72,0xf2,0xee,0x34, + 0x09,0x96,0x5a,0x89,0x8a,0x1a,0x84,0x8a,0xa2,0x42, + 0xa5,0x8f,0xad,0x27,0xf7,0xfc,0x42,0x1b,0xb7,0x36, + 0x3c,0x8b,0xc4,0x1b,0x02,0x6e,0x48,0xb5,0x51,0x75, + 0x3b,0x76,0x3b,0xf1,0x22,0xae,0x20,0x0a,0x48,0xbc, + 0x08,0x87,0x02,0x10,0xca,0x43,0x13,0x36,0x2a,0x75, + 0xd0,0x35,0x62,0x08,0x39,0xa4,0x3d,0x6b,0x90,0x6b, + 0x8b,0x14,0x51,0x41,0x13,0x24,0x3d,0xca,0xad,0x81, + 0x81,0x54,0x5b,0x4e,0x5b,0xeb,0xfe,0xdf,0xaf,0x5f, + 0xbf,0xde,0x0a,0xa5,0xc9,0x63,0xcc,0xc5,0xb6,0xd4, + 0x12,0x4b,0x05,0x16,0xe9,0x8e,0x91,0x78,0xa6,0x43, + 0x39,0xfb,0x74,0x58,0xda,0x4b,0xda,0x32,0x54,0xdf, + 0xc4,0x6e,0xd3,0xe1,0x38,0x21,0x7d,0xba,0x6a,0x92, + 0xee,0x70,0x92,0x01,0x14,0xdb,0x5c,0x1b,0xc6,0x15, + 0x6a,0x4e,0x8d,0xde,0x20,0xad,0xb8,0x1e,0x8d,0x00, + 0xe5,0xa8,0x60,0xae,0x6d,0xc0,0x1b,0xe9,0x09,0xe4, + 0xe5,0x9a,0x8a,0x1c,0xda,0xb7,0x4a,0x4d,0x70,0x67, + 0x24,0xfc,0xb9,0x25,0x4b,0x03,0x07,0xaa,0xa8,0xab, + 0xd4,0x7f,0x3f,0xf1,0x9e,0x34,0x7e,0x99,0xe7,0x51, + 0x1b,0x54,0xfb,0xfe,0xef,0xdf,0x2e,0x9b,0x77,0xa2, + 0x4a,0xd4,0x63,0x5d,0x64,0xc1,0xe3,0xb8,0x9c,0x56, + 0x35,0xc6,0x34,0x2f,0x66,0xba,0x06,0x2e,0xa3,0x24, + 0x2a,0x55,0x6d,0x8f,0x96,0xd8,0x06,0x39,0x6a,0x46, + 0x79,0x8f,0x6c,0x17,0xb2,0x78,0xd4,0x79,0x20,0xc2, + 0xe3,0xa4,0xb0,0x39,0xa0,0x32,0x94,0x80,0x3e,0x84, + 0xc8,0xae,0xe0,0xff,0x15,0x02,0xae,0x25,0xe5,0x05, + 0x0e,0x8a,0xf5,0x3a,0x83,0xeb,0x4a,0xe4,0xe4,0x34, + 0x09,0x83,0x2d,0x43,0xdd,0xc4,0xf2,0x0c,0xde,0x38, + 0x01,0xb4,0x56,0xc0,0xdf,0xa6,0x12,0x3f,0x4d,0x93, + 0xb9,0xd4,0x3a,0x26,0xde,0x99,0x0b,0x6c,0xa4,0x16, + 0xee,0xee,0xdf,0x49,0x15,0x90,0xd7,0x57,0xaa,0x04, + 0xdd,0x48,0xbe,0xfb,0xf9,0x61,0x1a,0x11,0x63,0x03, + 0xdd,0xc7,0x22,0xb1,0x8c,0x81,0x9e,0x60,0x7d,0x35, + 0xa8,0x4c,0xa6,0xcf,0xfd,0xf7,0x15,0x35,0xe9,0xef, + 0xdc,0x20,0x57,0x6f,0x55,0x3b,0xa0,0xe9,0x3f,0x9f, + 0x19,0x0c,0x2e,0xef,0x44,0xe0,0x50,0x95,0xdf,0x0d, + 0x43,0x9d,0xbf,0x5c,0x47,0xa7,0xc0,0x2f,0xd1,0x3a, + 0x76,0xdf,0x82,0x89,0x14,0x67,0x00,0x81,0x2a,0x27, + 0x58,0x99,0x0e,0x67,0x17,0x9b,0x34,0xb6,0x2e,0xce, + 0x9f,0xc7,0x33,0x50,0x33,0x55,0xf3,0x5c,0x9d,0x50, + 0xa0,0xf5,0xdc,0xea,0xf7,0xea,0xd0,0x7f,0x99,0x1e, + 0x3d,0xd3,0x39,0xa9,0xa8,0x93,0x49,0xae,0x8e,0x39, + 0x47,0x0e,0xb5,0x89,0x37,0xf7,0x46,0xef,0x23,0xed, + 0x41,0x48,0x1e,0x0f,0xa0,0xe0,0x27,0x75,0x08,0x12, + 0xd1,0xdf,0x21,0x71,0x66,0xff,0x1d,0x57,0xf8,0x4c, + 0xd3,0xa1,0xfd,0x73,0x5e,0x74,0x60,0x6e,0x26,0xb3, + 0x54,0x7a,0x9c,0x0e,0xa9,0x2d,0x4b,0xea,0x02,0x12, + 0xf5,0xc5,0x62,0x61,0xd1,0x51,0x3b,0xa1,0x5a,0xfd, + 0xda,0xe9,0x90,0x74,0xfa,0x04,0x69,0xd2,0xc0,0xb5, + 0x79,0x28,0x18,0xa7,0x16,0x41,0x97,0x69,0x9f,0x84, + 0xef,0x34,0x89,0x70,0x9e,0x63,0x84,0x8e,0x38,0xb7, + 0x74,0x82,0x3c,0x8d,0xf6,0xc7,0x23,0xab,0x76,0xbe, + 0x2d,0x0e,0xe1,0x92,0xcc,0xbd,0x36,0x6d,0xbc,0x09, + 0x0d,0x54,0xd4,0x8d,0x60,0x79,0x37,0x19,0xe8,0x92, + 0xbf,0xce,0xcf,0xba,0xc0,0x9b,0x8b,0xd6,0xa7,0xfb, + 0xee,0x7b,0xa2,0xce,0xb5,0x24,0x1d,0xe2,0x43,0x2d, + 0xd5,0xe4,0x41,0xe6,0xae,0xcd,0x24,0xb9,0xbd,0x02, + 0xaf,0x24,0xe1,0xb0,0xb1,0xb7,0x80,0xc9,0x8f,0x07, + 0x69,0x19,0x04,0x14,0x4b,0x38,0x4a,0x6f,0x3f,0xdf, + 0x78,0x56,0x93,0xbe,0xcd,0x45,0xc8,0xc8,0x94,0x7c, + 0x19,0x2e,0x91,0x22,0x99,0x31,0xbe,0xe8,0x1e,0x4d, + 0xc4,0xec,0xfe,0x1d,0xee,0xda,0x5a,0x7b,0xb1,0x26, + 0x3e,0x61,0x40,0x5d,0x62,0xec,0xd5,0x41,0x05,0x9a, + 0x14,0x02,0x4e,0xca,0x95,0x04,0x19,0x13,0x0f,0x0d, + 0xf8,0x47,0xe5,0x50,0x31,0xd2,0x81,0x49,0xbc,0x1f, + 0x23,0xeb,0x60,0x11,0x78,0xb7,0x5e,0x1c,0xf7,0x64, + 0xd2,0x31,0x52,0x03,0x5c,0x57,0x94,0x51,0xfc,0xbf, + 0xe3,0xc1,0xd4,0xae,0xa1,0xd6,0x0e,0xb4,0x67,0x1f, + 0xcf,0x34,0xf9,0xe5,0xa9,0xf8,0xac,0x13,0xf7,0x0d, + 0x48,0x62,0x74,0x5a,0x4f,0x14,0x08,0xda,0xc7,0xe4, + 0x95,0x47,0x54,0x04,0x45,0xb7,0x37,0x14,0x01,0x5b, + 0xa4,0xba,0xc5,0x90,0x3e,0xd4,0xe9,0xe7,0x24,0x25, + 0x64,0x57,0x15,0x4f,0x32,0xf9,0x53,0x45,0x47,0x30, + 0x20,0x05,0xf2,0x0e,0xb3,0x2d,0x09,0xcb,0x31,0xd8, + 0xaa,0x68,0xd7,0xa4,0x4b,0x32,0x8d,0x36,0xde,0xc8, + 0x88,0x4b,0x68,0x48,0x00,0xd0,0x25,0x04,0x00,0x1d, + 0x6b,0xbb,0xa9,0x08,0x75,0x70,0x9a,0x2d,0xd4,0x7a, + 0xbc,0x3c,0x7b,0xbf,0x80,0xf0,0x56,0x29,0x59,0x02, + 0xdf,0xa5,0x4a,0x09,0x8e,0x06,0xce,0x3e,0xf5,0x60, + 0xa6,0x29,0x7e,0x0e,0x9e,0x3f,0x7f,0xfe,0xd8,0x43, + 0x89,0x0e,0x49,0x22,0x22,0x12,0x9c,0x6d,0x34,0x76, + 0xec,0x88,0x3c,0x09,0x30,0xc2,0x81,0xf0,0xb8,0x5e, + 0xc7,0x8b,0x0a,0x63,0xa4,0x75,0x8b,0xd5,0x5d,0x60, + 0x2b,0xe2,0xa6,0xa3,0x68,0x0f,0x38,0xf2,0xb1,0xf3, + 0x26,0x4b,0xed,0xb3,0xc9,0x26,0x23,0xa0,0x2e,0xfa, + 0x5d,0xd5,0x5a,0x7f,0x57,0xe2,0x3d,0xd1,0xc1,0x67, + 0x26,0x06,0x1f,0xef,0x43,0xd1,0x3c,0x93,0xdc,0x3f, + 0x7c,0xb5,0x1c,0x77,0x52,0x13,0xd7,0x70,0xb8,0x58, + 0xe2,0xba,0xee,0x4d,0x8d,0x3f,0xa9,0x5d,0x23,0xef, + 0xd9,0x92,0xd7,0x5d,0x21,0xec,0x8a,0xad,0x7e,0x00, + 0x69,0x1c,0x4a,0xa2,0xb6,0x7a,0x60,0xa6,0xa2,0x17, + 0x78,0x1d,0x95,0xfc,0xab,0x34,0x8e,0xea,0x7e,0x4b, + 0xed,0x2a,0x67,0x81,0x14,0xc8,0xf8,0x31,0x3e,0x91, + 0xea,0xb1,0x3e,0x63,0x43,0x60,0x7e,0xfc,0xd9,0x46, + 0xd5,0x58,0x69,0x24,0x6e,0xf2,0x39,0x91,0xc6,0x13, + 0xc0,0xe1,0xa4,0x09,0x26,0x3e,0xad,0x4b,0xec,0x61, + 0xa2,0xf5,0x31,0x0e,0x3f,0x24,0xd3,0x16,0x7c,0x50, + 0xe3,0x6f,0x37,0x95,0xeb,0x62,0xfc,0x6b,0x43,0xd0, + 0xea,0x37,0xaf,0x13,0x3b,0x5b,0x2b,0x09,0xf5,0xca, + 0x4a,0xd3,0x33,0x8e,0x04,0xed,0xb8,0x2a,0x34,0x9e, + 0x4e,0x09,0x1a,0x21,0x4e,0x53,0x16,0xee,0x90,0x8d, + 0x84,0x94,0x5c,0xc1,0x49,0x79,0x42,0xc3,0x08,0xe6, + 0xa5,0xc4,0x2c,0x88,0xee,0xc5,0x00,0xeb,0x36,0x07, + 0x4d,0xa0,0xe8,0x86,0xbe,0x75,0x6a,0x26,0x2b,0x06, + 0x12,0xd1,0x9a,0x92,0xd7,0x0b,0x54,0x71,0x49,0xa5, + 0xb9,0x5f,0x13,0x25,0x5f,0xae,0xef,0x7d,0x81,0x9d, + 0x8b,0xf2,0xba,0xa0,0xed,0x5a,0x4e,0xe0,0x4d,0xf9, + 0x62,0x53,0x92,0x9f,0x02,0x90,0x83,0x6c,0x08,0xea, + 0x86,0x77,0xfc,0x33,0x9a,0x3d,0xf1,0xe3,0x42,0x2b, + 0xe2,0x81,0xd0,0xa4,0xa4,0x62,0xfb,0x4f,0x92,0xf2, + 0x77,0x01,0x36,0x4d,0xbc,0x35,0xfe,0x59,0x7d,0xb7, + 0x69,0x70,0xf2,0x2d,0x4d,0x74,0x39,0xeb,0x00,0xe7, + 0x4d,0xe6,0x44,0x36,0x45,0x0b,0xa7,0x92,0x46,0x59, + 0x9f,0x48,0x9d,0x90,0xe7,0x20,0x75,0x81,0xd6,0x2e, + 0xc6,0x5b,0x2d,0x4d,0xc7,0x55,0x40,0x1f,0x52,0xbc, + 0xc1,0x03,0x35,0xbc,0xa7,0x51,0xf3,0xc7,0x4d,0xec, + 0x9a,0x35,0x53,0xdb,0xd6,0xa7,0xee,0x41,0x17,0x77, + 0x37,0x45,0xe3,0x46,0x1d,0xda,0x15,0x39,0xc9,0xb0, + 0x99,0x90,0x34,0xa0,0x6e,0xd4,0xa6,0x35,0x35,0xb4, + 0x81,0x2a,0x71,0xde,0xdc,0xd8,0xbf,0x7b,0x3e,0x09, + 0x30,0x70,0x94,0x0a,0x87,0x3c,0x4d,0x00,0x08,0x7d, + 0x8e,0x14,0xcb,0x45,0x7c,0xab,0x30,0xdd,0xf8,0x5e, + 0xd8,0x68,0x76,0xed,0x14,0x17,0xa9,0x2a,0x75,0x0f, + 0xd5,0x55,0xc6,0x89,0x88,0x46,0x04,0x65,0xa7,0xc0, + 0xeb,0x50,0xa8,0x4d,0xeb,0xe6,0xfe,0x00,0x68,0x07, + 0x20,0x84,0x38,0x05,0x77,0x45,0x07,0x06,0xa5,0xca, + 0x4a,0x8e,0xdb,0x6a,0x94,0x98,0xa6,0xe7,0x12,0xf1, + 0x8d,0x5a,0x02,0x83,0xf4,0xba,0xe3,0x25,0xe0,0xf8, + 0x29,0x3d,0x0b,0x77,0x3f,0x97,0xd1,0x2f,0x72,0xef, + 0xdb,0xc9,0xb2,0xeb,0xda,0x0c,0x48,0x4c,0xd2,0x14, + 0x1a,0x15,0x84,0x13,0x51,0x1d,0x0e,0x26,0x32,0x7a, + 0x7d,0x5c,0x13,0x8d,0x7a,0xdf,0xda,0x38,0x0e,0x11, + 0x32,0x07,0xe7,0x47,0x12,0xf0,0x6a,0x4d,0x90,0x2a, + 0x2a,0x40,0x53,0x2d,0xa2,0xb1,0x68,0x75,0x5c,0x0b, + 0x3b,0x07,0xe4,0xd7,0x24,0x21,0xb5,0x34,0xb5,0x46, + 0xe3,0xb6,0x92,0xc4,0x3c,0x12,0x13,0xc3,0x8f,0xa1, + 0xd6,0x74,0x91,0x0c,0x03,0x29,0x6c,0xbb,0x76,0x0d, + 0x5d,0xdf,0xc5,0x82,0x7a,0x6f,0xa8,0x54,0xf2,0x68, + 0xa2,0x83,0xbe,0x55,0xf1,0x89,0x40,0x5d,0x41,0xb3, + 0xcd,0xee,0xc7,0xfb,0x00,0x82,0x91,0xe7,0xea,0xeb, + 0x4b,0x63,0x76,0xe2,0xfe,0x24,0x0f,0x48,0x92,0x66, + 0x11,0x5e,0x8c,0x3d,0x88,0xa1,0x58,0xac,0x44,0xab, + 0x20,0xe4,0x99,0xa4,0x39,0xdc,0xb5,0xea,0x64,0x95, + 0xd9,0x27,0xee,0x70,0x67,0xe1,0xbe,0xe7,0xb8,0x3b, + 0xc5,0x51,0x94,0x80,0x70,0xeb,0xd6,0xe9,0xe8,0x38, + 0x39,0x19,0x25,0xeb,0x7f,0x5a,0xf4,0xf4,0xf5,0x90, + 0xbc,0xe3,0x02,0x07,0xee,0x81,0xf0,0x2b,0x10,0x63, + 0x84,0x3d,0x1f,0x96,0x58,0x6f,0x2d,0x30,0x55,0x55, + 0x74,0xed,0x11,0x5d,0x28,0x54,0xdd,0x3b,0xf8,0x71, + 0xe2,0x9a,0x2c,0x8c,0x25,0x1f,0x15,0x80,0xd3,0x1c, + 0x48,0xd5,0x12,0xb5,0xa3,0x36,0x7c,0x9c,0xce,0x52, + 0x4f,0x1c,0x09,0xd7,0x23,0x27,0x74,0xcb,0x4d,0x89, + 0xa5,0xa4,0x4e,0xc5,0x0d,0x21,0xd1,0x7b,0x5b,0x4b, + 0x89,0xe0,0x4c,0x55,0x1e,0xa9,0x68,0x83,0x67,0x4f, + 0xfa,0xbe,0x87,0x09,0xa0,0x0b,0x3c,0x7a,0xd0,0x80, + 0x09,0x69,0x85,0x2a,0xef,0x91,0xb4,0x2b,0xef,0xc0, + 0xd8,0x3f,0xd4,0x15,0x44,0xd0,0x48,0x3c,0xae,0x1f, + 0x6c,0xc9,0xc6,0xe4,0x32,0x04,0x6d,0xd7,0x8b,0x1e, + 0xe4,0xef,0xd1,0x83,0xab,0x7f,0xa6,0x98,0x39,0x56, + 0x68,0x1d,0xd8,0x76,0x74,0x4f,0x12,0xae,0xbd,0x5a, + 0xf5,0xca,0xeb,0x8b,0x0e,0x5c,0x42,0xa1,0xa6,0xcf, + 0x0a,0x15,0xe2,0xaa,0x38,0x52,0x7e,0x52,0x47,0x14, + 0x53,0xf2,0x26,0x36,0x2f,0x0f,0x6f,0xb6,0x84,0xc0, + 0xa9,0xb8,0xa2,0x90,0x69,0x35,0x99,0xa8,0x41,0x38, + 0xb6,0x40,0x9b,0xe9,0xcd,0x30,0x97,0x10,0x59,0xa7, + 0x97,0x36,0x4d,0x54,0xba,0xb8,0x9a,0x90,0x0d,0x87, + 0x1e,0xbb,0xf8,0x68,0xd6,0x48,0xf5,0xe7,0xd1,0xf9, + 0x77,0xce,0x8a,0xc7,0xd9,0x68,0xb8,0x38,0x47,0x7b, + 0x61,0x30,0x6b,0x5e,0x71,0x60,0x1c,0x47,0xe8,0xbb, + 0x7d,0x55,0xc4,0x0b,0x25,0xe4,0x9b,0xd0,0x13,0xed, + 0x42,0x68,0x22,0x49,0x82,0x91,0x4e,0x31,0x3f,0x69, + 0xfb,0x91,0xe9,0x73,0xb2,0xfc,0x70,0x42,0xb4,0x66, + 0xff,0x15,0xf1,0x77,0xa6,0xe2,0x6a,0x42,0xc9,0x3a, + 0x0a,0x64,0xd6,0x6d,0x19,0xc9,0x83,0x07,0x02,0xf5, + 0x5a,0x70,0x4e,0x46,0x04,0x84,0x5a,0x27,0xce,0x89, + 0x7c,0xf2,0xfd,0x4a,0x19,0x7d,0x72,0x9c,0x27,0xde, + 0x80,0x9a,0xd3,0x4d,0x5c,0x21,0x81,0xd4,0x2d,0x61, + 0xd0,0x1d,0xca,0x09,0x7a,0xa4,0x4a,0xda,0x1d,0x20, + 0xe9,0xe0,0xf6,0xb1,0xa3,0x90,0x9b,0x43,0x55,0xc4, + 0xc4,0xf1,0xb8,0x58,0xff,0xa8,0x86,0x03,0x02,0x61, + 0x6d,0x97,0xcc,0x10,0x8c,0x4f,0x6b,0x06,0x4c,0x2a, + 0x49,0xd9,0x17,0xf3,0x86,0x30,0xc2,0x5c,0x43,0x90, + 0x4c,0x2d,0x31,0xeb,0x27,0x36,0x29,0xf7,0xa6,0xaa, + 0x3b,0xed,0x19,0xe5,0x93,0x4c,0xe3,0xae,0x46,0xa5, + 0xbb,0x88,0x8b,0x32,0x7d,0x16,0x25,0x29,0x64,0x0b, + 0x70,0x19,0x72,0x73,0xff,0xdf,0x3d,0xba,0x2f,0xd7, + 0x54,0xda,0x6a,0x75,0xfc,0x3a,0xe5,0xf5,0x51,0x41, + 0x15,0xda,0xf4,0x56,0xc1,0x79,0x91,0xa4,0x95,0x13, + 0x66,0x75,0xa2,0x8e,0xd4,0xb6,0xd9,0xbc,0x7b,0x58, + 0xbf,0x15,0x10,0xe1,0xc9,0x30,0xb7,0x5c,0x32,0xea, + 0x5a,0x13,0x26,0x49,0x7e,0x8b,0x8b,0x69,0x14,0x5a, + 0x51,0xdb,0x24,0x5f,0xb1,0x30,0x3f,0x26,0x22,0x72, + 0xa5,0xb5,0x98,0xe4,0x44,0x9c,0xe9,0xb4,0x6b,0x81, + 0xa5,0x38,0x4e,0xed,0x1b,0x47,0x24,0x06,0xc3,0x5c, + 0x54,0xaa,0x0e,0xf6,0x10,0x35,0x71,0x6e,0x52,0x32, + 0xd1,0x15,0xfb,0x93,0xc8,0xe2,0x80,0xf8,0x22,0x32, + 0xac,0x1c,0x38,0xb2,0xe7,0xe8,0xa8,0xb6,0x31,0x8a, + 0xb6,0x49,0xf8,0x34,0xfd,0x4d,0x1e,0x7a,0x2e,0x69, + 0xfc,0xa1,0xf4,0xb8,0x1e,0x67,0xf2,0x13,0x71,0x13, + 0x41,0x60,0xfa,0x78,0x4d,0x28,0xc4,0x74,0xd0,0x0d, + 0xed,0x9c,0xbf,0x22,0x73,0x0d,0xd5,0x65,0xd2,0x95, + 0x19,0xdb,0x4c,0x1a,0x24,0x06,0xf8,0xdb,0x8e,0x1f, + 0x27,0xfd,0x0f,0x47,0x12,0x26,0x03,0x47,0x72,0xef, + 0x4d,0xc4,0xc4,0x41,0x19,0x1a,0x5b,0x59,0x6e,0xa1, + 0xc1,0x3a,0xa2,0xa9,0xb6,0x0a,0xe8,0x5a,0xec,0x2f, + 0xd3,0xb4,0x17,0x40,0xba,0xe9,0xb0,0x2f,0x7a,0xe7, + 0xa9,0x1a,0x22,0x55,0x5f,0xf3,0x1c,0x6c,0xe2,0xa3, + 0x7c,0x0c,0x45,0x01,0xc2,0x78,0x3b,0x5a,0x15,0xe8, + 0xde,0x14,0x45,0xf6,0x72,0xd0,0x7f,0x6a,0xa9,0x0d, + 0xc6,0xa3,0x8f,0xc4,0xe5,0x7a,0x27,0x27,0x4f,0xad, + 0xd6,0x07,0x7c,0x6d,0x88,0xa2,0x3f,0x09,0x91,0xf9, + 0x2e,0x4b,0x76,0x4d,0xed,0x22,0x4a,0xc0,0x95,0xfc, + 0x9c,0x90,0xa4,0x06,0xbb,0x3f,0x92,0x5a,0x8d,0x37, + 0xc6,0x55,0x3e,0x22,0xdf,0x6e,0x42,0x68,0xd3,0xde, + 0xd5,0xf5,0x18,0xe2,0x66,0x39,0x01,0xba,0xae,0xda, + 0x0f,0xb1,0x3f,0x92,0x87,0xf5,0xdd,0xb9,0xa2,0xc2, + 0x59,0x0c,0xb9,0xc3,0x35,0x59,0x4e,0x50,0x8b,0x46, + 0x5a,0x96,0xc8,0x4f,0xd2,0x29,0xd0,0x4d,0x4c,0x5a, + 0x0c,0x05,0x8c,0x6d,0x3c,0xa7,0x77,0xe6,0x3e,0xdb, + 0x90,0x8f,0x3f,0xe2,0xd1,0x4d,0xd3,0xb2,0x80,0x7a, + 0x16,0x25,0xef,0x43,0x42,0xa5,0xeb,0xee,0x72,0x93, + 0x94,0xfa,0x3f,0xa3,0x03,0x17,0x0d,0x51,0x93,0x6f, + 0x18,0x70,0x81,0x1f,0xef,0xd0,0x15,0xa5,0xaf,0x74, + 0xa8,0x6b,0x7b,0x83,0x5c,0xc5,0x27,0x37,0x56,0x57, + 0xb5,0xa5,0x07,0x79,0x43,0x5b,0x29,0x89,0x82,0xaa, + 0x76,0x84,0x2d,0xa9,0x1a,0xa0,0x8d,0x0f,0x63,0x90, + 0xb5,0xe5,0x42,0xa4,0x8a,0xce,0x18,0xb5,0x16,0xc1, + 0xa6,0x5a,0x19,0xc0,0xe1,0x54,0xa9,0x82,0xd7,0x67, + 0xd0,0x83,0x48,0x73,0x50,0x77,0x87,0x0a,0x4e,0x3c, + 0x00,0xa9,0xb4,0x28,0x41,0x9e,0xc4,0x35,0x13,0x8c, + 0xde,0x74,0xa2,0x0a,0xec,0x33,0x2a,0xa9,0x5b,0xd3, + 0x7a,0x74,0x5a,0x38,0xf2,0x7b,0x34,0x79,0xf2,0xe0, + 0x5e,0xb8,0x69,0x3e,0x97,0xa8,0x98,0xe7,0x16,0xb5, + 0x7c,0x74,0x4a,0x69,0xd2,0xc0,0x51,0xeb,0x8a,0x2b, + 0x68,0x2a,0x6d,0x7a,0xfa,0xdd,0xb7,0x4b,0xc6,0xda, + 0xf1,0x80,0x48,0x0e,0xd2,0xcb,0xa4,0x04,0xd7,0xba, + 0x49,0x40,0x7e,0xda,0x4d,0x34,0xba,0x9c,0x84,0x13, + 0x5d,0x2b,0x49,0xa5,0x0b,0xe0,0xbd,0x75,0x3e,0xc8, + 0xe3,0x90,0x06,0x3e,0xc2,0x5b,0xa2,0xa5,0x07,0xc5, + 0xf7,0xa4,0x62,0x11,0x32,0x3e,0x4d,0x17,0x91,0x07, + 0x9e,0x3b,0xf0,0x68,0xa2,0xea,0x13,0x6e,0x93,0xfb, + 0x2e,0xa2,0x17,0xb8,0x96,0x9c,0xa1,0x4b,0x54,0xfa, + 0x0c,0x49,0x14,0x90,0x83,0x0a,0x72,0x13,0x6e,0x90, + 0x82,0xec,0x29,0x2a,0x75,0x25,0x16,0x68,0x78,0x4d, + 0x07,0xbc,0x3b,0x67,0x48,0x34,0x36,0xc9,0x95,0x84, + 0x18,0x8d,0xbc,0x5d,0x3d,0x3b,0xa1,0xd0,0xa9,0xc1, + 0x8e,0xe6,0x4a,0x6d,0x32,0xc7,0xc1,0x9a,0x0c,0x6f, + 0x03,0xff,0x32,0xf2,0x8d,0x29,0x9f,0xa0,0x21,0x86, + 0xeb,0xba,0xfe,0xb1,0xc2,0x08,0x07,0xc3,0x63,0xd3, + 0x2f,0x12,0x9c,0x68,0xb1,0x9b,0x14,0x9e,0x81,0x27, + 0x33,0xde,0x94,0x13,0x51,0x74,0x55,0xbd,0x43,0x49, + 0x06,0x51,0xc2,0x4a,0x62,0x8e,0xa9,0x25,0x36,0xc0, + 0xef,0x65,0x2a,0x80,0x9a,0xaa,0x4e,0xad,0x92,0x1c, + 0x12,0x67,0x78,0x3c,0x95,0xf8,0x1c,0x8e,0xbc,0x18, + 0xee,0x71,0xaa,0x00,0x2c,0xda,0xe4,0x50,0xc6,0xa9, + 0xdf,0x0e,0xed,0xbd,0xc7,0x9f,0x4f,0x6b,0x43,0x91, + 0xc7,0x89,0x5f,0xe4,0x36,0x5c,0x90,0xd9,0x8f,0x82, + 0x94,0xca,0x17,0x9a,0xc8,0xe0,0xee,0xbb,0x26,0x73, + 0xe2,0x70,0xdf,0x45,0x02,0x9b,0x04,0x21,0x9b,0xd6, + 0x55,0x1c,0x06,0x08,0x0a,0xc8,0xf6,0x7e,0x12,0xb9, + 0xd1,0xc5,0x99,0x2d,0xd9,0x12,0xe2,0x44,0xc9,0x67, + 0xcc,0xc2,0x66,0x06,0xed,0xbd,0xdf,0xb1,0xda,0x37, + 0x38,0x11,0x42,0xd9,0x43,0x24,0x18,0xa8,0xb1,0xef, + 0x0c,0x08,0xdc,0x8f,0x90,0x20,0x1c,0x82,0x56,0x68, + 0xcf,0x7d,0x07,0xb4,0xe6,0x4f,0x68,0xad,0x9e,0x50, + 0x14,0x1c,0x78,0xe6,0xc7,0x0c,0x86,0xfc,0xdc,0x43, + 0x4a,0x18,0xa6,0xf8,0x72,0x8b,0x0a,0xc2,0xfe,0x3e, + 0x83,0xc8,0xe0,0xb5,0x68,0x4f,0x1f,0x28,0x4c,0x1d, + 0xc2,0x74,0xdc,0x7b,0x9a,0x06,0x15,0x9c,0xb8,0x5f, + 0xe2,0x0b,0x82,0xa8,0xe5,0x43,0x64,0x90,0xf6,0xb3, + 0xbb,0x2f,0x67,0x49,0xd1,0x62,0xf4,0x99,0x6c,0x8e, + 0xfa,0x1a,0xe8,0x23,0xee,0xa4,0x0f,0x37,0x10,0xfc, + 0x71,0x2f,0xa7,0x96,0xb6,0x7e,0x47,0x27,0x57,0x6b, + 0x3c,0xf8,0xf5,0xeb,0x97,0x6d,0x6b,0xfe,0x70,0x80, + 0xa6,0xe9,0x8e,0x54,0x31,0x51,0xf0,0x58,0xa2,0x3c, + 0x63,0x85,0xe6,0xaa,0x47,0x53,0x9d,0xd4,0xc6,0xa3, + 0x86,0xa6,0x7b,0x92,0xab,0x76,0x9a,0xc2,0x4a,0x8b, + 0xdc,0xb5,0x9e,0x26,0xa2,0xf7,0xa6,0x52,0x48,0x59, + 0x36,0xb4,0xda,0xe2,0x78,0x3b,0x25,0x4f,0x8a,0x4a, + 0x51,0xe2,0x92,0x48,0xde,0x6a,0x86,0xeb,0x46,0x86, + 0x03,0x6f,0xc4,0xa1,0x47,0xe5,0x26,0x22,0xb4,0x3a, + 0x70,0xbd,0xe7,0xbe,0xee,0xda,0xef,0x56,0x93,0xe0, + 0x7f,0x40,0xf4,0x44,0x1a,0xa4,0x64,0x51,0x0f,0x10, + 0xda,0xc0,0x2e,0xc9,0x10,0x33,0x4e,0x44,0x3d,0x6f, + 0x82,0xa8,0xd3,0xe3,0x72,0x28,0x58,0x5a,0x37,0x5d, + 0xf1,0xba,0x11,0xed,0xdf,0x38,0x31,0x01,0x5e,0xc6, + 0x9e,0x7b,0x72,0xb3,0x4e,0x2d,0xf3,0xcd,0xc1,0x48, + 0x87,0xdc,0x42,0x47,0xec,0xcd,0xe0,0x14,0x0a,0x9e, + 0x8b,0x8c,0x3f,0x5d,0xeb,0x30,0x25,0x51,0xfa,0x5d, + 0x8a,0x0a,0x39,0x5b,0x14,0x32,0xb4,0x74,0x48,0x09, + 0x91,0xea,0xa9,0x8d,0x48,0x6d,0xad,0x2b,0x4c,0x91, + 0x06,0xae,0x4e,0x22,0x8c,0x57,0x5f,0x07,0x6e,0xac, + 0xda,0xb4,0x72,0xd7,0x0a,0xf6,0xce,0xec,0x34,0x24, + 0x2c,0x56,0x40,0x97,0x26,0xe6,0x48,0x3f,0x6e,0xe8, + 0x26,0x44,0x49,0x17,0x25,0x44,0x07,0x24,0xf9,0x51, + 0xe4,0x10,0xf0,0x10,0xce,0x81,0x9a,0x40,0x0a,0x42, + 0x76,0x06,0xb2,0xb3,0x5d,0x5f,0x49,0xa2,0x60,0xdb, + 0x12,0x9c,0xc8,0xcf,0x2a,0xbe,0xeb,0x12,0x3d,0xa7, + 0xfd,0xd4,0x85,0x8e,0xef,0x7f,0x77,0xb1,0xf5,0xa5, + 0x2f,0x99,0x1c,0xb8,0xdd,0x02,0x48,0x9c,0x07,0x7d, + 0x79,0xae,0xe7,0xec,0x36,0x33,0xb1,0xda,0xe9,0xc0, + 0x08,0xbc,0xa1,0xda,0xb4,0xc3,0x54,0x53,0xc8,0x6d, + 0x84,0x34,0x06,0xee,0x5a,0x4f,0x03,0xcb,0xbf,0x88, + 0x07,0x61,0x78,0x06,0x45,0xae,0xee,0xa4,0x40,0x9a, + 0x20,0xdc,0xf4,0x6c,0xb5,0x0d,0x24,0xb2,0xf9,0x8f, + 0xa0,0xa9,0xe3,0x9d,0xfd,0xfb,0x64,0x83,0xac,0xa6, + 0x41,0x52,0xbb,0x4d,0xc9,0xec,0xea,0x6f,0x95,0xda, + 0xdd,0xe1,0xdd,0x5a,0x84,0x44,0x61,0x6e,0x40,0x62, + 0xd2,0xe8,0xe9,0xc3,0xb1,0xdd,0xa0,0x6f,0x15,0x14, + 0x51,0x1f,0xad,0x2b,0x4a,0x98,0xf5,0x3b,0x2f,0x43, + 0x4e,0x4c,0xc9,0x41,0x77,0x74,0xd7,0x7b,0xa6,0x11, + 0x5a,0x87,0x24,0xa6,0x75,0xbf,0xa9,0x88,0x93,0x8a, + 0xf5,0xa4,0xb9,0x32,0xf1,0x21,0x82,0xf8,0xdb,0x38, + 0xea,0x4f,0x48,0x9c,0xe3,0x5f,0x39,0x01,0xc4,0xfe, + 0x98,0xa1,0x8a,0x7e,0x20,0x9e,0x49,0x9d,0xb9,0x13, + 0x58,0xc1,0xfa,0xa1,0x02,0x2a,0x56,0x21,0x01,0x45, + 0x4e,0x98,0xda,0xca,0x90,0x9b,0x3d,0xa1,0xb7,0x66, + 0xbd,0x39,0x94,0x80,0x34,0x72,0xa2,0x3b,0xb9,0x26, + 0x35,0x8e,0x1f,0x94,0xda,0xdb,0x13,0x3f,0x27,0x38, + 0xac,0x3f,0x8a,0xdb,0xc1,0xb1,0xc0,0x76,0x27,0x36, + 0x68,0x7f,0xd0,0xd9,0x89,0xd3,0x6e,0x6e,0xb4,0x3f, + 0xd9,0x4b,0x91,0x00,0x25,0xed,0xf9,0xdb,0xa9,0xa0, + 0xff,0xae,0xe3,0x1e,0xea,0x82,0x70,0x5e,0x6e,0x13, + 0xb7,0x34,0x01,0x18,0xce,0x81,0xc0,0x14,0x85,0xa8, + 0x56,0xff,0x4a,0x2d,0x80,0x6d,0x46,0x98,0x88,0xa4, + 0x6a,0x58,0xaa,0x07,0x3c,0x05,0xcc,0xc1,0xc9,0xf6, + 0xb1,0xd9,0x9c,0x04,0xfd,0x07,0x3c,0x9f,0xa8,0x49, + 0x90,0x50,0x1b,0x72,0x0c,0x27,0x9e,0x06,0x69,0xf9, + 0x38,0x98,0x95,0x92,0xa8,0xe4,0xad,0x96,0x6c,0x37, + 0x12,0x69,0x90,0x10,0x21,0x5d,0xb4,0x4a,0x84,0x6c, + 0xe6,0x95,0xab,0x6a,0xd1,0x05,0xa9,0x0d,0x2c,0x1a, + 0x90,0x14,0xd4,0xed,0x20,0x44,0xec,0xeb,0xeb,0xab, + 0xba,0xab,0xf9,0xd4,0x92,0xd3,0x04,0x8f,0x04,0xc9, + 0x2e,0x99,0x30,0x4b,0x2d,0xbf,0xc4,0x09,0x9a,0xcc, + 0x12,0xd5,0x9c,0xd5,0x91,0x88,0x07,0x61,0xd3,0x9a, + 0xaa,0xc5,0xa9,0x75,0x4c,0x41,0xae,0x27,0x55,0xd7, + 0xbb,0xf9,0xe8,0x83,0xc0,0x4c,0x53,0x61,0xd7,0xbb, + 0xda,0xf5,0xc3,0x1a,0x23,0x55,0xdd,0x9b,0x36,0xa1, + 0x93,0xe7,0xdf,0x7c,0x6e,0xb0,0x14,0xd9,0x20,0xe7, + 0x45,0x88,0x93,0x1c,0x54,0x76,0x6c,0x58,0x8c,0x44, + 0x53,0x7b,0xa0,0x52,0xeb,0x9d,0x90,0x0a,0x42,0xab, + 0x92,0x1d,0x44,0x42,0xdd,0x68,0xd2,0x8c,0x3e,0xeb, + 0x5a,0xca,0x37,0x0c,0xc9,0x2d,0x0a,0xec,0x6d,0x06, + 0x40,0x26,0xa4,0x96,0xf6,0x93,0x2b,0xc6,0x92,0x89, + 0xad,0xbb,0x9e,0xfe,0x7c,0x3a,0x32,0xeb,0xe4,0x66, + 0x14,0xb9,0x55,0xf1,0xce,0x04,0x4c,0x84,0xbd,0x6b, + 0x93,0x36,0xd7,0x65,0xa1,0x73,0xcc,0x25,0x82,0xd3, + 0x99,0x05,0x93,0xd0,0x23,0x15,0x84,0x12,0x4d,0xa7, + 0x32,0x9d,0x8a,0xa1,0x57,0x82,0xa4,0xb4,0x9a,0x31, + 0xd9,0xdb,0xaa,0xda,0x24,0x7f,0x9c,0x4f,0x4c,0x0d, + 0x29,0x60,0x43,0x90,0xb2,0xc4,0x2d,0x98,0x48,0x59, + 0x71,0x1d,0x9c,0xfa,0xf4,0xfd,0x45,0x0e,0xa6,0x23, + 0xe2,0xf1,0xc6,0xa3,0x85,0xb8,0x3a,0x17,0x90,0x71, + 0x93,0x72,0x37,0xa9,0x59,0x2b,0xa3,0xde,0x40,0x88, + 0x95,0x12,0x3f,0xba,0x7e,0x27,0x34,0xe6,0xd4,0x99, + 0x41,0x21,0xba,0xa6,0xe9,0x3c,0xad,0x6a,0xc9,0xde, + 0x84,0xa4,0xd7,0x13,0xba,0xb3,0x19,0x27,0xa7,0xb6, + 0x2d,0xfd,0xae,0xab,0x98,0x83,0x1e,0x4e,0xd1,0xb3, + 0x21,0x24,0x31,0xf1,0x71,0x0c,0x34,0x8c,0xe8,0x95, + 0x9b,0xd6,0x20,0xf8,0xb9,0xa3,0x28,0xaa,0x57,0xa4, + 0x31,0x82,0x10,0x4e,0x12,0x59,0x4d,0xc9,0x8b,0x24, + 0xbd,0xce,0x5b,0xec,0xf1,0xf9,0xc9,0x1a,0xe1,0xfe, + 0xb9,0x3f,0x7f,0xfe,0xbc,0x89,0x53,0x4e,0xfc,0x29, + 0x22,0xca,0x53,0x8c,0x54,0x02,0x7b,0x6a,0x09,0x76, + 0xe4,0x23,0x24,0x56,0x35,0xb4,0x2e,0x2a,0x4d,0x94, + 0x12,0x0f,0x70,0xd3,0xbe,0x70,0x48,0x2a,0xfc,0xbd, + 0x1d,0x69,0x77,0x31,0xd8,0xc5,0x4e,0x77,0x98,0x26, + 0xa4,0x42,0xd1,0x56,0x29,0x70,0x4a,0x0d,0x8e,0x43, + 0xc1,0x5e,0x0b,0xc2,0xfb,0xe3,0x67,0xb7,0x09,0xb9, + 0x6b,0x17,0xba,0x33,0x2a,0x0d,0xf7,0x90,0xa4,0x48, + 0x47,0xc8,0x07,0xc2,0xf4,0x23,0x59,0x4b,0x52,0x13, + 0x6e,0xad,0xa9,0x0f,0xa8,0x5b,0x4f,0x2e,0xe9,0x74, + 0xc3,0x31,0x49,0xa9,0x3d,0x81,0x15,0x54,0x28,0x38, + 0xe4,0x91,0x10,0xde,0x57,0x82,0x4c,0x75,0xca,0x4a, + 0x59,0xf7,0x6e,0x61,0x3a,0x61,0x39,0x1a,0x55,0x4e, + 0x92,0xe1,0xe9,0xd0,0x51,0x83,0xcd,0x54,0xc5,0x6a, + 0xcb,0x64,0x09,0xcb,0x57,0xea,0xbf,0x2a,0x07,0xc3, + 0xc0,0x83,0x95,0xaa,0x21,0x37,0x45,0x34,0x99,0xb6, + 0xb9,0xef,0x09,0x55,0x4f,0x51,0xb5,0x92,0x46,0xd3, + 0x7b,0xb2,0xba,0x69,0x4f,0x0d,0x3c,0x02,0x44,0x09, + 0x13,0x4f,0xc1,0x8c,0x34,0x47,0x9b,0x0e,0x0d,0x16, + 0x43,0x20,0x2f,0x37,0x4e,0xe9,0x9e,0x03,0xb4,0x8a, + 0xe8,0x79,0x56,0x4a,0x68,0xb5,0x0d,0x07,0xc2,0x7f, + 0xe3,0xa4,0x58,0x3b,0x10,0x88,0x53,0x65,0xa7,0xd4, + 0x7a,0x62,0x45,0x95,0x6e,0x98,0xea,0xa0,0x31,0x77, + 0x9b,0x6c,0xd8,0x20,0x03,0x49,0x41,0x5f,0x03,0x0b, + 0x44,0xd6,0x26,0x34,0xd0,0x06,0x2a,0x87,0x8e,0x25, + 0x6f,0x32,0x13,0x20,0xbb,0x11,0x6b,0x7c,0x5e,0x2e, + 0x11,0x1a,0x0e,0x78,0x4c,0x44,0xa9,0x0d,0x6b,0xda, + 0x83,0xf5,0xf5,0xf5,0x55,0xc1,0x8f,0xb1,0x36,0x43, + 0x14,0x84,0xee,0x03,0x8a,0x51,0x24,0xf1,0xe0,0xd4, + 0x7a,0xb5,0xe5,0x45,0x6d,0x8c,0x1e,0xb7,0x82,0xcc, + 0x04,0x5e,0xab,0xac,0x35,0x8b,0xb0,0xde,0x05,0x1d, + 0x4d,0xc9,0xba,0xc9,0x27,0xa5,0x49,0xf4,0xf5,0x4c, + 0x42,0xa0,0x01,0xe5,0x45,0x5b,0x1c,0x77,0xbf,0xa0, + 0x06,0x7e,0x4d,0x03,0x20,0x61,0x10,0xa9,0xa8,0x30, + 0x4f,0x13,0xde,0x43,0xe7,0x82,0x12,0x43,0x44,0x81, + 0x20,0x91,0x29,0x88,0x17,0x95,0x78,0xbc,0xfa,0x8e, + 0xd2,0x54,0x2a,0x5d,0xef,0x6f,0x9a,0x52,0x99,0x88, + 0xbb,0x46,0xe1,0xb9,0xa8,0x1a,0xdd,0x54,0x53,0x03, + 0xfc,0x59,0x5b,0xbe,0x11,0x5d,0xe3,0xfd,0x19,0x8e, + 0x8b,0x94,0x50,0x29,0xe5,0x25,0x6d,0xdb,0x05,0x0e, + 0xbd,0xd1,0x9f,0xbf,0x03,0xd8,0x72,0xb1,0x15,0xf5, + 0xc2,0x5d,0x15,0x6d,0xde,0x41,0x39,0xc7,0xf9,0x9e, + 0xf4,0xe8,0x06,0x4e,0xbc,0x8d,0x74,0x5d,0x01,0x9d, + 0x2a,0xb8,0xc7,0x22,0xbe,0x85,0xa2,0x10,0x9d,0x9b, + 0x34,0x99,0xfb,0xd1,0xc8,0x6d,0x4a,0xd6,0xdc,0x74, + 0xc8,0x50,0x1d,0xd5,0x86,0x70,0x1e,0x92,0xef,0xf8, + 0xf7,0xce,0x04,0xd2,0xad,0x71,0x31,0x1c,0xac,0xc9, + 0xa4,0x90,0x92,0xb1,0x7e,0x4d,0x6e,0x4c,0x36,0x25, + 0x01,0x2e,0x79,0xa6,0xef,0x9b,0xda,0x1d,0x64,0x7e, + 0x3c,0x69,0x92,0x38,0x61,0xd1,0xf6,0x77,0x34,0xd5, + 0x84,0xbc,0x1f,0x79,0x9e,0x67,0x9a,0x4c,0x6b,0xa4, + 0xff,0x33,0xb5,0xe2,0xfa,0x84,0x0f,0xf1,0x4c,0xbe, + 0xff,0xec,0x84,0x76,0x40,0x7d,0x7d,0x7d,0x9d,0xa0, + 0xc4,0x7e,0xa0,0x15,0xff,0x76,0x8d,0xda,0x12,0xbc, + 0x27,0x9a,0x40,0x39,0xfe,0x00,0x4a,0x7b,0x74,0xaf, + 0xfe,0xeb,0x95,0x6b,0x27,0x24,0x8f,0x89,0xd5,0x6f, + 0x13,0x66,0x3a,0xcd,0x46,0xc8,0xa0,0xee,0xc9,0xfe, + 0xae,0x86,0x31,0x6e,0x7b,0x1d,0x84,0xe0,0xe9,0xcf, + 0x5e,0x32,0x49,0x37,0x14,0xab,0x8f,0x02,0xe0,0x7e, + 0x6e,0x74,0x4f,0x64,0x34,0xae,0xef,0x63,0xc3,0xc7, + 0x83,0x35,0x44,0x13,0x7d,0x54,0x7c,0x9d,0x0d,0xf5, + 0xc2,0xc5,0x4a,0xfd,0x8c,0xa9,0x55,0x1f,0x10,0x60, + 0x1b,0x03,0xd3,0x39,0xe8,0xd0,0xf1,0xaa,0xba,0x5e, + 0x49,0x61,0x39,0x89,0x35,0xa5,0x4c,0x6b,0x90,0x19, + 0xc7,0x83,0xbe,0x1b,0x5a,0xa6,0x0c,0x35,0x69,0x8b, + 0x50,0xb5,0x9d,0x04,0x06,0x1d,0xaa,0x94,0xb8,0x50, + 0x94,0xe5,0x4e,0xcf,0x49,0xe1,0x43,0xd7,0x76,0x48, + 0x55,0x0a,0x64,0xfb,0x8f,0x45,0x4a,0x28,0x4e,0x22, + 0xfb,0xde,0xd7,0x45,0x6d,0xce,0x6b,0x20,0xe3,0x9a, + 0x00,0x14,0xdb,0x1b,0x69,0x1d,0x4c,0x90,0x39,0xd9, + 0x01,0x04,0x44,0xb0,0xe8,0x7a,0x1d,0xf7,0x80,0x8c, + 0x22,0x4d,0x15,0x42,0xfe,0x75,0x08,0x71,0x3b,0x64, + 0x68,0x22,0x5c,0x4e,0x93,0x8b,0x13,0x07,0x84,0x2a, + 0x47,0xf3,0x7e,0xad,0x3d,0xc4,0xc0,0x07,0x4c,0x49, + 0xb7,0x2d,0x0a,0x68,0x7f,0x13,0x5a,0xe4,0xae,0x23, + 0x90,0xd4,0x2d,0xe7,0xc7,0x09,0x41,0xba,0x64,0x6e, + 0xe0,0x45,0xd5,0x35,0xd8,0x24,0xc8,0xf4,0x4f,0xa5, + 0x69,0x97,0xce,0x9d,0x4b,0x08,0xd5,0x65,0x74,0xcb, + 0x74,0x02,0x32,0x54,0xe8,0x15,0xd6,0x4c,0xb4,0x98, + 0x49,0xed,0xe0,0x69,0x12,0x8e,0xf6,0xfe,0xf6,0x5c, + 0x99,0x5a,0xef,0x84,0x76,0x38,0x3e,0xe8,0xc4,0x73, + 0x82,0xfb,0x29,0x37,0x8d,0x44,0x9c,0x15,0x42,0xe1, + 0x5d,0xa1,0x77,0xab,0x30,0x27,0xfd,0x3c,0xc7,0xb5, + 0xbc,0x82,0x34,0xc5,0x06,0xa1,0xb9,0xc0,0x4f,0x91, + 0x10,0x76,0x25,0x38,0x87,0x01,0x81,0x9a,0xf8,0x8a, + 0x6e,0x28,0x44,0x06,0x07,0xd0,0x0d,0x82,0xce,0x1c, + 0x50,0x81,0xae,0x04,0xa2,0x28,0x5a,0x4e,0x6e,0xf0, + 0x45,0x28,0x06,0x1c,0xd4,0x24,0x09,0x3f,0xba,0xc4, + 0x92,0x58,0x13,0x65,0x7b,0x0e,0x06,0xd3,0x56,0x08, + 0x55,0x52,0x69,0x71,0x38,0x06,0x3b,0x8d,0x2b,0x6f, + 0xfb,0xef,0x0a,0xa9,0x06,0x0e,0x81,0xdd,0x78,0xee, + 0x7d,0x28,0xe1,0x9c,0xb8,0x1f,0xa9,0xcd,0x46,0xc8, + 0x03,0x89,0x90,0xf5,0x6b,0x12,0xd4,0xa8,0x36,0x63, + 0xc9,0x7d,0x93,0xd0,0xf3,0x02,0xb7,0x75,0xa7,0x59, + 0x51,0x5a,0x65,0xd2,0x75,0x2f,0x34,0x8c,0x2a,0xbc, + 0x0f,0xd4,0xa7,0xba,0x78,0xbc,0xd6,0xb6,0x42,0x60, + 0xb2,0xa6,0x16,0x36,0x27,0x45,0x09,0x3d,0x70,0x50, + 0x2a,0x21,0x1b,0xee,0x60,0xbd,0x0c,0xb1,0x38,0x55, + 0x73,0x9f,0x70,0x44,0x94,0xec,0x7c,0xff,0x77,0x4b, + 0x0e,0x90,0xfc,0xdc,0x7d,0xb4,0x48,0x78,0xed,0x7e, + 0xff,0x09,0xd5,0x25,0x44,0xd2,0x10,0xb0,0x57,0x12, + 0x12,0x8e,0xcf,0x35,0x1c,0xde,0x76,0x62,0xcc,0x70, + 0xf3,0x68,0x42,0xca,0xee,0x57,0x42,0x88,0xc9,0x0c, + 0x34,0xac,0x83,0x4a,0x36,0x42,0xc0,0x69,0x24,0xdb, + 0x24,0xf4,0xf8,0x83,0xe4,0x14,0xb9,0x7d,0x90,0xec, + 0x46,0x61,0x48,0xb2,0xad,0x49,0x3c,0x4a,0x57,0xdc, + 0xa5,0x7d,0xa9,0x83,0x3b,0xdf,0x6b,0xb0,0x36,0xc9, + 0xb8,0x20,0x3f,0x96,0xb2,0x40,0xef,0x49,0xd7,0xa4, + 0x70,0x7d,0xca,0x9c,0xa3,0x95,0x38,0x4c,0x6e,0xe2, + 0x8a,0x12,0x16,0xed,0xa4,0x04,0xea,0x81,0x45,0x5d, + 0x68,0xa0,0xc6,0xbd,0x47,0xd7,0xce,0x4d,0xc8,0x79, + 0x28,0x6c,0x57,0x08,0xf8,0x6f,0xd3,0x47,0x7b,0xeb, + 0x73,0xaa,0xde,0x48,0x87,0xdb,0x29,0xd8,0xe8,0x0b, + 0x9e,0xb2,0xfc,0x4f,0xd8,0xdf,0x7d,0x01,0x80,0xf9, + 0x20,0x06,0xe8,0x69,0x4c,0x9e,0x5c,0x9e,0x03,0x2f, + 0x04,0x17,0x5d,0x82,0x1f,0x5d,0xf5,0x75,0xc3,0xc5, + 0x93,0x01,0xe4,0x44,0x14,0x27,0xf4,0xc3,0x2d,0x28, + 0xf3,0x99,0x8f,0xa0,0xae,0xef,0x7a,0xe8,0x33,0x93, + 0xe0,0x65,0xe4,0xf1,0xf4,0x75,0x75,0x3f,0x07,0x48, + 0x66,0x0a,0xa6,0xda,0x8a,0x84,0x31,0x35,0xf8,0x76, + 0x93,0x45,0xaa,0x4a,0x69,0xb6,0xd7,0x69,0xb2,0x18, + 0xc4,0xa3,0x08,0xc6,0xd5,0xf7,0x91,0x5a,0xbe,0x84, + 0xfc,0xc9,0x1e,0xa8,0x85,0xda,0xee,0x23,0x99,0x9d, + 0xd4,0x96,0xef,0xf5,0xb8,0x44,0x12,0x91,0x67,0xe3, + 0x90,0x1f,0x17,0x1f,0x28,0x06,0xb8,0xc9,0x43,0xc3, + 0xbd,0x3b,0xe9,0x39,0xc1,0x9a,0x48,0xa6,0xc0,0xc7, + 0xa1,0x4d,0x94,0x24,0xff,0xbb,0x1c,0xce,0x47,0xad, + 0x96,0x20,0xfe,0x79,0x7a,0xc5,0x2d,0xcf,0xcd,0xb6, + 0x81,0xf4,0x97,0x03,0x69,0xfd,0x40,0xfb,0x33,0xb5, + 0x97,0x48,0x88,0xf1,0xed,0xcf,0x5d,0x0b,0xcb,0xc4, + 0xa1,0xa3,0x05,0xe7,0x25,0x22,0x86,0xb2,0xae,0x8e, + 0x33,0xd2,0xd6,0x64,0xe2,0xbe,0x96,0xd4,0x46,0x25, + 0xc4,0x34,0x69,0xae,0xf5,0x76,0x9f,0x4b,0x12,0x9d, + 0xe1,0xb7,0x59,0x1f,0x47,0x7e,0xf6,0x21,0x3e,0x39, + 0x09,0x81,0x6a,0x0c,0x74,0xe2,0x95,0x69,0x0f,0x9a, + 0xe4,0xf5,0xa4,0x42,0x67,0xa9,0x71,0xb7,0x41,0x4e, + 0xad,0xb0,0x62,0xd2,0xd6,0xeb,0xe4,0xf5,0x69,0x12, + 0x70,0x8b,0x2a,0xa6,0x89,0xd6,0xd7,0x27,0x70,0x39, + 0x29,0x3e,0x3a,0x24,0x85,0x2a,0x19,0xf2,0x15,0x52, + 0xae,0x07,0x41,0x89,0xe4,0x84,0xec,0x5e,0xc2,0x30, + 0x26,0xed,0xc8,0xdb,0x95,0x16,0x5f,0xa8,0x36,0xec, + 0x9f,0x39,0x7f,0xad,0x94,0x8d,0x87,0x4d,0xb4,0xf6, + 0x68,0x21,0xd4,0x41,0x61,0xc2,0x09,0x65,0xa3,0x6a, + 0x8f,0xa0,0x60,0x15,0x36,0x24,0xd2,0xe8,0x94,0x08, + 0xa7,0x31,0x59,0x77,0x8f,0xb4,0x6e,0x1c,0x3f,0xa7, + 0x27,0x3f,0x93,0x98,0x18,0xbc,0x23,0x24,0x52,0x6a, + 0xe2,0xe6,0xde,0x55,0x27,0x57,0x4e,0x95,0x8d,0x39, + 0x28,0x1c,0x1f,0xe1,0xb1,0x86,0x3a,0x49,0x5f,0xc9, + 0xf2,0x93,0x5d,0x41,0xe8,0xdb,0xeb,0xc1,0xd4,0xf5, + 0x83,0xc6,0xea,0xce,0xc1,0xed,0x69,0x4c,0x16,0x8c, + 0x3a,0xa9,0xd5,0xf6,0x36,0x32,0x3f,0xb5,0x63,0x28, + 0x10,0x1a,0xfd,0x25,0xdb,0x36,0xd6,0xaa,0x97,0xf6, + 0x28,0x25,0x59,0xf7,0xe4,0xa2,0x8b,0x11,0xbd,0x4d, + 0x11,0xb8,0x0c,0x45,0x55,0x77,0x32,0x96,0x26,0x74, + 0x99,0x50,0xcd,0xd0,0xf6,0xb7,0x50,0xb5,0x54,0xf0, + 0xa8,0x2b,0x07,0xe8,0x00,0x15,0x8e,0xd1,0xec,0x39, + 0x4d,0x90,0x92,0xc1,0x37,0x21,0x7c,0x3a,0xd1,0x45, + 0xd3,0x6a,0xda,0x92,0xee,0x96,0x2c,0x13,0x87,0x96, + 0x7c,0xf1,0x7a,0x0b,0xc8,0x4d,0xed,0xea,0xfb,0xe8, + 0xe0,0x84,0xda,0x87,0xa4,0x29,0xb7,0x84,0xde,0xea, + 0xf7,0x38,0x1d,0x38,0x4a,0xfc,0x5c,0xb7,0x27,0x49, + 0xc0,0x38,0x74,0xca,0xc9,0xd4,0x6c,0x26,0x30,0xd3, + 0x99,0xe7,0x10,0x4d,0xcd,0x21,0x7e,0x03,0x34,0x6c, + 0x13,0x1c,0x42,0x7e,0x12,0xcc,0x44,0x09,0x89,0x41, + 0x36,0xca,0xfd,0x6e,0xef,0xe1,0xa7,0xd1,0xcb,0x44, + 0x84,0x52,0x8e,0x4b,0x7a,0x70,0xa6,0xe2,0x28,0x67, + 0xf0,0x47,0x86,0x95,0xfa,0xe2,0x1d,0x3c,0xea,0xd8, + 0xea,0x8a,0xfe,0x0c,0xa2,0x6c,0xce,0x08,0xb5,0xdc, + 0xb5,0x6f,0x17,0x89,0x5b,0xc0,0xe1,0x1a,0x1e,0x49, + 0x91,0x5b,0x37,0x83,0xa6,0x4d,0xd1,0xa1,0xb7,0xad, + 0x16,0xfa,0x3d,0x1a,0xb4,0xe2,0x71,0x50,0xf4,0x24, + 0x05,0x10,0xcc,0x72,0x28,0x63,0x0f,0xd2,0xf7,0xe1, + 0xd5,0x49,0xc7,0xee,0xf9,0x93,0x9b,0x31,0xb5,0xb3, + 0x28,0x80,0x9a,0xc3,0xba,0xa6,0xa4,0x9f,0x38,0x4e, + 0x29,0xb0,0xb8,0x03,0xfb,0x46,0x98,0x48,0x07,0x48, + 0x0f,0x4c,0xb2,0x0e,0x98,0x44,0x46,0xf5,0xb3,0x54, + 0x64,0x73,0x6a,0x0f,0xb8,0x04,0x41,0x51,0xa2,0x2d, + 0xe7,0x04,0x94,0xd5,0x4f,0x08,0xe6,0xba,0x27,0xcf, + 0x04,0xbb,0xab,0x05,0x06,0x89,0x9d,0x76,0x34,0x0a, + 0x8a,0x81,0x03,0x07,0xd9,0x83,0xc4,0x2c,0xfb,0xe2, + 0x00,0x0a,0xf9,0xf3,0x7b,0xf2,0x2e,0x91,0xd4,0x4d, + 0x84,0x7a,0xb5,0xcb,0x90,0x35,0x75,0xa6,0x44,0x9b, + 0x2a,0xfd,0x8e,0x62,0x50,0xa1,0x62,0x14,0xe2,0x8f, + 0x69,0xe3,0x1c,0x92,0x8c,0x30,0xeb,0xe9,0xa4,0xfb, + 0x4d,0x48,0xa6,0xb3,0x0d,0xe9,0x28,0x90,0x4b,0x90, + 0x68,0x3f,0x29,0x21,0x9c,0x34,0xf3,0xf4,0xb9,0x36, + 0x64,0x1d,0x51,0xb0,0x1b,0x71,0x4b,0x9d,0x06,0x39, + 0xbf,0xce,0x64,0x95,0xe4,0x10,0x44,0x4a,0x92,0x7a, + 0xe2,0x65,0x68,0x05,0xce,0x7a,0xe4,0xb1,0x2e,0xe5, + 0x2c,0x3d,0x74,0x8e,0xf6,0xef,0x7c,0x7d,0x90,0x4d, + 0xd1,0xc4,0x51,0x25,0xc2,0xd9,0x86,0x95,0x1e,0x82, + 0x78,0x24,0xad,0xe9,0xa1,0x3c,0x41,0x61,0x3d,0x5b, + 0xd7,0x0c,0xfa,0x9a,0xa7,0x79,0x2c,0x02,0x42,0xed, + 0x23,0xe2,0x33,0x25,0xe2,0x99,0x69,0x37,0x96,0xe3, + 0x9f,0x6c,0x32,0xde,0xd0,0xcf,0x1e,0x33,0x75,0x4a, + 0x56,0x89,0x37,0x93,0xcc,0x35,0x93,0x11,0x2b,0x54, + 0xc8,0x36,0x08,0x25,0x62,0xb6,0x09,0xa2,0x16,0x89, + 0x49,0xca,0xc2,0x64,0xee,0xab,0xad,0x3a,0x0d,0x38, + 0xbd,0xea,0xd6,0xd6,0x61,0xe3,0x49,0x91,0x24,0x00, + 0x4e,0x18,0xba,0x96,0xc3,0xc5,0x0a,0xbb,0x36,0x49, + 0x55,0x19,0xff,0xc4,0x43,0x6b,0xcf,0xa6,0x73,0x74, + 0x36,0x87,0xd1,0x47,0x68,0x64,0x22,0x34,0x3b,0x3b, + 0x95,0x64,0x25,0xb3,0x31,0x40,0xee,0x63,0xe7,0x5d, + 0xb3,0x2b,0x71,0x7c,0x80,0x58,0x59,0x93,0x47,0xe1, + 0x7b,0x77,0x1c,0x3d,0xa7,0xd0,0x45,0x7e,0x42,0x23, + 0x69,0x9c,0x1c,0x0c,0x29,0x51,0xb4,0xf3,0x02,0x3d, + 0x32,0x1a,0x51,0x77,0x08,0x91,0xfe,0xe1,0xe2,0x20, + 0x9c,0xd6,0x09,0xf2,0x45,0x27,0x19,0x03,0x2d,0x42, + 0x92,0x18,0xa8,0xa2,0xb9,0xaa,0xe2,0x3e,0x89,0xcc, + 0x26,0x23,0xcf,0x89,0x82,0x91,0x5a,0xe3,0x0e,0xdd, + 0xfa,0xe6,0xf9,0xac,0x15,0xa3,0x5d,0xc7,0xe1,0xf2, + 0x12,0x05,0xb6,0x8d,0x9f,0x7c,0xb9,0x52,0xa7,0xa8, + 0x25,0x2f,0x45,0x32,0x15,0x44,0x32,0x1f,0x8a,0x3d, + 0xec,0xf2,0x4c,0x02,0x87,0x49,0x33,0xe8,0xcd,0xb2, + 0x8b,0x60,0xf0,0xd4,0x93,0x9f,0x46,0xb7,0x3f,0xe5, + 0xfa,0x68,0xb5,0x3e,0x8c,0xbd,0xda,0x03,0xf8,0x26, + 0x85,0xa5,0x8a,0x36,0x04,0x0b,0x4a,0x1c,0x6a,0xca, + 0x5c,0x35,0xc1,0x12,0xa8,0xb2,0x80,0x20,0x8b,0xd7, + 0xb3,0x18,0x45,0x7c,0xf8,0xa8,0x29,0xc1,0x98,0x88, + 0x77,0xf4,0xf7,0x97,0x99,0x66,0xd2,0x00,0x11,0x16, + 0x32,0x06,0xb7,0x4d,0xfb,0xcc,0xc1,0xb5,0x1d,0xb1, + 0xe9,0x52,0x01,0x2e,0xd8,0xa5,0x89,0x21,0x13,0x68, + 0x2a,0x4d,0xa5,0x00,0xff,0xab,0x06,0xd7,0xf4,0x0a, + 0x82,0x90,0x45,0x22,0x6a,0x69,0x72,0x6d,0xa3,0x0a, + 0x1e,0xc6,0x7b,0x1f,0x2a,0xcf,0x29,0xc8,0xc9,0xbe, + 0x4a,0x64,0xd9,0xf4,0x9e,0x71,0x3d,0x13,0x99,0x93, + 0x3c,0xc1,0xfa,0x5a,0x51,0x9d,0xa0,0x2d,0x4a,0x30, + 0x28,0xc8,0x77,0xe7,0xf8,0x38,0x84,0x41,0xbc,0x37, + 0x23,0xd6,0x17,0x11,0xd5,0x4f,0x92,0x1c,0xd7,0xea, + 0x4c,0xf1,0x50,0xa7,0xf6,0xc4,0x76,0x28,0xa9,0x7d, + 0x63,0x3b,0x57,0x7d,0xe9,0x28,0xe1,0x9a,0xf6,0xc0, + 0x05,0x9e,0x7e,0xee,0x50,0xa6,0xc2,0x28,0x4c,0x5c, + 0xd5,0x94,0x68,0xab,0x58,0x9f,0x5e,0xcb,0x24,0xfe, + 0xa7,0xd7,0xbb,0x51,0xb7,0x87,0xeb,0x76,0xad,0x38, + 0x14,0x45,0x4d,0x24,0xec,0x41,0x4c,0xb8,0xc8,0x07, + 0x91,0xd0,0x59,0x55,0xb1,0x36,0xf4,0x92,0x1a,0xcc, + 0x9c,0x6d,0xc1,0x0f,0xd4,0x8b,0x94,0x90,0x4e,0xb6, + 0x46,0x09,0x28,0xb0,0xfb,0xc7,0x75,0x7b,0x74,0xda, + 0xec,0x35,0x1d,0xce,0x5d,0x34,0x2e,0x09,0xa8,0x4d, + 0xe3,0xc8,0x44,0x3c,0x4d,0xd9,0xd9,0x94,0x49,0x2f, + 0x48,0x5c,0x35,0x8d,0xf7,0xa5,0xaa,0x84,0x7c,0x73, + 0x1c,0xe4,0xec,0x0e,0xc9,0xd4,0x8f,0x34,0x2a,0xc1, + 0x51,0x01,0xd5,0x7d,0x8f,0x5b,0xc4,0x2e,0x41,0x20, + 0x44,0x8d,0x88,0xdb,0xb4,0x60,0xb5,0xf5,0xd6,0x02, + 0x4d,0x99,0xd6,0x05,0xf9,0x12,0x15,0xc9,0xd2,0x9b, + 0xec,0xbe,0x80,0x43,0x86,0x24,0x69,0x17,0x18,0x75, + 0x62,0x4d,0x47,0xcc,0x83,0xf1,0x69,0xe9,0xa1,0x2c, + 0x6d,0xd0,0xd2,0x84,0xad,0x7b,0x10,0x0d,0xfc,0x93, + 0x38,0x52,0xad,0xca,0xcd,0x46,0x38,0xd2,0xad,0xf5, + 0x0a,0xd5,0xb1,0x0b,0x04,0xd6,0xd7,0xca,0x09,0x7d, + 0x26,0xde,0x80,0xe9,0xef,0x3f,0x26,0xbc,0xfa,0xc4, + 0x95,0x5a,0x5b,0xf4,0x7f,0x77,0x36,0x19,0x2a,0xc0, + 0xb8,0x19,0xfd,0x25,0x59,0x01,0x39,0x00,0x4b,0x91, + 0xb2,0x05,0x5f,0x4f,0x6e,0xd1,0xb7,0xe1,0xdd,0x3b, + 0x09,0x31,0xa6,0x06,0x84,0x1c,0x91,0x1e,0x87,0xb6, + 0x1b,0xe4,0xd0,0xbe,0xbf,0xee,0x35,0x68,0xa6,0xb3, + 0x4a,0x27,0x81,0xa8,0x28,0x74,0xc9,0x21,0xa1,0x4d, + 0x1a,0x07,0x92,0x5e,0x9a,0xfe,0x99,0x6b,0x73,0x53, + 0x72,0xe5,0x14,0xce,0x8d,0x41,0x77,0xa5,0xf1,0xf7, + 0x60,0x57,0x81,0xe8,0x97,0x0a,0x08,0xa7,0xa4,0x65, + 0xd2,0xcc,0xe9,0x86,0xd4,0x93,0x01,0x6e,0x72,0x61, + 0x77,0xa3,0xec,0xce,0x9b,0x6b,0xf2,0x4a,0xd3,0xef, + 0x9f,0xe4,0x4d,0x12,0x5a,0xb6,0xf0,0x24,0x7b,0x9c, + 0x53,0xa1,0x45,0x89,0x7b,0x22,0xa8,0x62,0x9f,0xeb, + 0xba,0x7e,0x38,0x40,0x8e,0x9d,0x6f,0x8d,0xc9,0xc8, + 0x84,0x33,0x1d,0xf4,0xdb,0xea,0x51,0x03,0x74,0x82, + 0xfa,0xb4,0x0d,0xe7,0x10,0x8e,0x24,0xc4,0x48,0x9c, + 0x9c,0x6d,0xd6,0xed,0x1e,0x2a,0x3d,0x9b,0xa4,0x04, + 0x3d,0xb5,0x26,0x28,0xb0,0xb9,0x44,0x43,0x4d,0x04, + 0x85,0xa3,0x13,0x59,0xfe,0x7a,0xed,0xc1,0x37,0x2c, + 0x06,0xd8,0xb4,0x81,0x3a,0x0f,0x86,0x5c,0xc6,0x4d, + 0x0f,0x1f,0x93,0x33,0x57,0xd5,0x24,0xe2,0x28,0xb5, + 0xd6,0xc2,0x41,0x3e,0xea,0xcb,0xb8,0x20,0xe4,0xf8, + 0x6c,0x0b,0x93,0xda,0x78,0xcd,0x83,0x36,0x0d,0x56, + 0x64,0x2e,0xf1,0x22,0x0e,0x4f,0x42,0x51,0x9c,0xa9, + 0xb1,0x4b,0x88,0x09,0x71,0x4d,0x01,0x52,0x89,0xec, + 0xb4,0x76,0xb5,0x4d,0xd1,0xbe,0xf7,0x6c,0x95,0x5f, + 0xc3,0x7b,0xb9,0xdf,0xf7,0x49,0xad,0x00,0x73,0x58, + 0x9f,0xe1,0x5d,0xff,0x6c,0x49,0xfd,0xfd,0xfe,0x2c, + 0xfb,0x84,0x57,0x40,0x53,0x4f,0x88,0x05,0x96,0x17, + 0xe3,0xb8,0x12,0x12,0x13,0xab,0xaa,0x8e,0x08,0x69, + 0x46,0xde,0x96,0x7b,0xe7,0x8e,0x1f,0x3a,0x78,0x96, + 0xe1,0xbe,0xa6,0xfd,0x78,0xde,0x1f,0x28,0xc6,0xf3, + 0xce,0x67,0x71,0xdc,0x27,0x77,0xc6,0x99,0x98,0x76, + 0xf4,0x8c,0x39,0xe7,0x1c,0x45,0x1f,0x3a,0xb5,0x22, + 0xa1,0x40,0x97,0x08,0x45,0xf6,0xef,0x51,0x7e,0x98, + 0x9b,0xf2,0x22,0x94,0xc3,0x09,0xde,0x2a,0xbf,0xa8, + 0x4f,0xe6,0x4d,0xbe,0x79,0xc4,0xf9,0xd1,0x69,0xae, + 0x4d,0xeb,0x7b,0xd1,0xfa,0x2b,0x27,0xf2,0x99,0x86, + 0x9b,0x48,0x68,0xd8,0xa1,0xf7,0x1b,0x7b,0xab,0x17, + 0x55,0x30,0xa9,0xe7,0x9f,0xbc,0x38,0x26,0x5f,0xb0, + 0x24,0xf9,0x3e,0xb5,0xce,0x26,0x8e,0x8b,0x72,0x90, + 0xd2,0xf4,0x54,0x6a,0x39,0x25,0x99,0x75,0xba,0x2e, + 0x80,0xaf,0x71,0x24,0x3b,0x71,0x6a,0x26,0x18,0x70, + 0x32,0x17,0x85,0x6a,0xa3,0x52,0x02,0xea,0xb4,0x52, + 0x7a,0xf5,0xe7,0x84,0xaa,0x1c,0xc7,0x86,0xaa,0x3e, + 0xf2,0x88,0x72,0xeb,0x68,0xb2,0xdd,0x00,0xaf,0x99, + 0x98,0xe4,0x24,0x38,0x75,0xd2,0x6d,0x72,0xc8,0x94, + 0x83,0xe5,0xa9,0xb2,0x95,0x2a,0x8a,0x9c,0xaf,0x1f, + 0x55,0x64,0x0a,0x0c,0x84,0xe8,0x05,0xde,0x45,0x25, + 0xae,0x51,0xe2,0x6c,0xc9,0x7d,0x17,0x21,0x6d,0x01, + 0xa1,0x88,0x30,0x3f,0x4d,0x4b,0xd2,0xb8,0xbc,0x6b, + 0x9d,0x08,0x8a,0x84,0xb0,0x39,0x4d,0xa5,0x4a,0x4b, + 0xaa,0x12,0xe2,0x2c,0xd3,0x60,0xb7,0xb6,0xd1,0x45, + 0x24,0xf8,0x86,0xf2,0xa0,0x54,0xff,0x20,0xe2,0xb6, + 0x6a,0x11,0x25,0x4e,0x51,0x4f,0x7c,0x75,0x92,0x2d, + 0xf0,0xca,0x46,0x3e,0x90,0xfe,0x79,0x27,0xb1,0x92, + 0x76,0x4c,0xe7,0x62,0x3a,0x5b,0x9a,0x84,0x42,0x9b, + 0xf6,0x46,0xa5,0x44,0x75,0x81,0xf6,0x4f,0xe8,0x5b, + 0xe4,0xa9,0x5d,0xc6,0x4f,0x0b,0x90,0xf6,0x48,0xc8, + 0x4d,0x9c,0xa3,0x69,0x2a,0x95,0xba,0x27,0x0b,0xcb, + 0x0f,0x8c,0x97,0xf4,0x2c,0xe9,0xf7,0x86,0x21,0x84, + 0xd5,0x64,0xe1,0xb6,0xbd,0xb9,0xf0,0x58,0x9b,0xfc, + 0xc2,0x7e,0xde,0xf9,0xcb,0xe9,0xba,0x90,0x2a,0x2b, + 0x05,0x25,0xcd,0x6a,0xa1,0x32,0xae,0x01,0x31,0x19, + 0xfb,0x86,0x97,0x78,0x39,0xd1,0xf4,0x55,0x78,0xd8, + 0x95,0x16,0xa2,0x7b,0x29,0x34,0xb5,0xa2,0xed,0x2f, + 0xd7,0xd2,0x22,0xf2,0xe7,0xc4,0x67,0x30,0xaa,0xb2, + 0x04,0x65,0x97,0xd1,0x5c,0xc2,0xde,0xbe,0x21,0x80, + 0xd6,0x34,0xf6,0x9e,0x78,0x53,0x97,0x21,0x9e,0x53, + 0x52,0x75,0x19,0xaf,0x2f,0xf7,0x4e,0x48,0xd4,0x70, + 0x1a,0x81,0x55,0x44,0x41,0xc7,0x1e,0x29,0x91,0xea, + 0xd7,0xa8,0xa3,0x9f,0x6a,0x35,0xf1,0x5d,0xa5,0x57, + 0x48,0xe8,0x2b,0xb4,0x3b,0x4b,0xdf,0x0d,0xac,0x6f, + 0x2b,0x34,0xd6,0x0b,0x86,0x7e,0x1d,0xb4,0x7f,0x24, + 0x98,0x54,0x92,0x88,0x77,0x81,0xea,0xfe,0xdd,0x6f, + 0x1e,0x5b,0xd1,0xe1,0x4c,0x55,0x7f,0x12,0x3c,0x9b, + 0xd6,0x8c,0xdb,0x6b,0x93,0x46,0x89,0xb6,0x76,0x6e, + 0x63,0x53,0xd7,0x16,0xa4,0x44,0xd1,0xc4,0xab,0x4a, + 0x8e,0xd9,0xae,0xf5,0xe7,0xae,0x47,0xda,0x97,0x95, + 0x6c,0x48,0xfa,0x38,0x3f,0x7c,0x77,0x05,0xa9,0x08, + 0x3c,0x3c,0x7a,0xb1,0x79,0xa3,0x35,0xaa,0xa3,0x35, + 0x71,0x85,0x1c,0x42,0x6a,0x62,0x24,0xa9,0x9f,0x93, + 0xd8,0x5e,0x19,0x24,0x10,0xb9,0x43,0xae,0x80,0xa5, + 0xb6,0xa1,0xf3,0xf8,0xd2,0xe7,0x42,0x1e,0x7a,0x70, + 0xc8,0x57,0x28,0x30,0x46,0x5e,0x29,0x7c,0x47,0x91, + 0x18,0xad,0x23,0x9b,0x2b,0xe2,0x41,0x88,0x08,0xf9, + 0x64,0x91,0x07,0x57,0x4f,0x44,0xa7,0x76,0x18,0x75, + 0x39,0x66,0x20,0xa8,0x1e,0xc9,0x37,0xb5,0xda,0x89, + 0x2f,0x47,0x1c,0x34,0x40,0xa2,0x1f,0x89,0xb7,0x9e, + 0x19,0xaf,0xc0,0x37,0x41,0xc1,0xbe,0xc1,0xd0,0x6e, + 0x6c,0xf9,0xd0,0x21,0xd9,0xd1,0x06,0x0a,0x96,0xa4, + 0x30,0x9c,0xb2,0xc0,0xce,0x6b,0xd0,0x51,0xc3,0x73, + 0x4e,0x29,0xd9,0xb2,0x6b,0x32,0xe8,0xe4,0xd0,0x64, + 0xd6,0x18,0x12,0x3b,0xdb,0xaf,0x4e,0xaa,0x95,0xe9, + 0x7b,0x52,0x0b,0xce,0x24,0x6d,0x6f,0x15,0xaa,0xcb, + 0xec,0xf5,0xfa,0x65,0x61,0xd6,0xb4,0xc9,0x95,0x67, + 0xd4,0x15,0xa3,0x5d,0x92,0x43,0x15,0x6b,0xf2,0xc4, + 0x99,0x36,0xe5,0x07,0x9b,0x77,0x44,0xf2,0x88,0xc4, + 0x1b,0x26,0x98,0x2c,0xf7,0x88,0x1c,0xad,0x75,0x2d, + 0x69,0x82,0x31,0x19,0xc0,0x2e,0xfe,0x29,0x47,0x5a, + 0x5d,0x54,0xd8,0x1d,0x4d,0x89,0xed,0x57,0xe0,0x9e, + 0x45,0xb2,0xb6,0x43,0x21,0x12,0xb9,0x72,0xfb,0x3e, + 0x94,0xf0,0x6f,0xd6,0xd9,0x23,0xa1,0xa1,0xe7,0x62, + 0xb8,0x6c,0xb5,0xa9,0x68,0xdd,0x3e,0x0f,0xc5,0xe0, + 0x38,0x01,0xe6,0xd0,0x8b,0xd4,0xa2,0xd5,0xa2,0x0c, + 0xd6,0x6d,0x4d,0x86,0xbe,0x74,0xf0,0x50,0x72,0xe4, + 0x0a,0x33,0xd0,0x8c,0x2b,0x7a,0x76,0x86,0xc2,0x50, + 0x8e,0x18,0xaf,0x71,0xd9,0x25,0x63,0x94,0x5c,0xba, + 0xc4,0x48,0x8b,0xf3,0x49,0xe8,0x95,0x92,0x4e,0x57, + 0x48,0x9a,0x78,0x11,0x09,0xef,0xf7,0x19,0x35,0x71, + 0x63,0x28,0xf6,0x8b,0xc7,0x1c,0x4a,0x4b,0x4c,0x85, + 0xf7,0x84,0xec,0x2c,0x78,0x3f,0x56,0x7f,0xc9,0xb5, + 0x0a,0x37,0xb6,0x32,0xee,0x39,0x4d,0xed,0xed,0x5f, + 0xbf,0x7e,0xd9,0xf8,0xa0,0x3a,0x69,0x2f,0x5a,0xf4, + 0xd3,0xe4,0xc8,0x26,0x03,0x9e,0x60,0xaa,0x49,0x98, + 0x8c,0x48,0x50,0x0b,0x42,0x34,0x26,0x50,0xbd,0xfa, + 0x99,0x9c,0x81,0x75,0x3c,0x74,0xe3,0x26,0x9d,0xb2, + 0x7e,0x3a,0x4c,0x04,0x06,0x76,0x13,0x07,0x65,0xda, + 0x05,0x35,0xf5,0x6f,0x07,0x48,0xb0,0x4c,0xd2,0x5a, + 0x41,0x00,0xef,0x11,0x64,0x4d,0x80,0x2d,0x37,0x19, + 0x07,0x30,0x6d,0x44,0x79,0x5c,0xe0,0x82,0x16,0x48, + 0xa5,0xea,0xc4,0x05,0x87,0x90,0x30,0x27,0xd1,0xcc, + 0x32,0xf0,0xfb,0xea,0xf0,0x98,0xb4,0x4e,0x68,0xba, + 0x86,0x06,0x0b,0x06,0x33,0xcf,0x9a,0x12,0x25,0x48, + 0x7e,0x4a,0x35,0x95,0xa6,0x8a,0x96,0x12,0x14,0xe7, + 0xc7,0x44,0x81,0x35,0x05,0xe6,0x0d,0x3f,0x21,0xb5, + 0x36,0xfb,0x35,0xc8,0x7a,0x29,0x42,0x2a,0x42,0xe1, + 0x56,0x3a,0x11,0x93,0x26,0xb3,0x52,0x8b,0x50,0x7f, + 0x34,0x4c,0x32,0xd6,0x86,0x8f,0xe8,0x62,0x98,0xb6, + 0xeb,0x0d,0x27,0x69,0xb4,0x64,0x48,0x2d,0xeb,0x20, + 0x28,0x88,0x89,0x4d,0xd2,0x3d,0xea,0xff,0x6d,0x88, + 0xd7,0xb6,0x7d,0x91,0x3c,0xe4,0x52,0x2c,0x99,0xd0, + 0x4b,0xf7,0xef,0xbd,0xbd,0x3f,0x4d,0x48,0xea,0x1e, + 0xd8,0x14,0x71,0x0e,0x49,0xdb,0x24,0x9c,0xb4,0x86, + 0x08,0xcd,0x4a,0xc9,0x8e,0x43,0xa5,0x16,0xc5,0xa9, + 0x1d,0x48,0xd9,0x50,0x38,0xe8,0xf7,0xef,0xe4,0x45, + 0xa7,0x9d,0x37,0x39,0x45,0x17,0x89,0x9c,0x78,0x65, + 0x1d,0x01,0x42,0xae,0x0f,0x55,0x77,0x34,0x26,0x4f, + 0x6a,0x97,0x9b,0xca,0x22,0xb8,0x88,0x13,0xe2,0x50, + 0x09,0x1a,0xa7,0x11,0x4e,0xca,0x54,0x55,0x59,0x38, + 0x3d,0x78,0x47,0x9e,0xd6,0x0d,0xe2,0x60,0x61,0x40, + 0x42,0xec,0xdf,0x6d,0xde,0x43,0x3f,0x48,0x1c,0x21, + 0x16,0x90,0xba,0x51,0x77,0x46,0xdb,0x86,0xe6,0xb0, + 0x5c,0x39,0x7c,0x93,0xfa,0x2b,0x55,0xe2,0xae,0xfd, + 0xd9,0x09,0xf1,0x8e,0xb8,0x6a,0x3e,0x87,0x0c,0x26, + 0xcb,0xb5,0x27,0x9a,0x51,0xe6,0x05,0x5a,0x4e,0x95, + 0x0e,0xb1,0x24,0xd8,0x96,0x60,0xf5,0x49,0x0b,0xa6, + 0x5d,0x73,0x2d,0x92,0x83,0x4a,0x81,0x8b,0xda,0x29, + 0xf7,0xef,0x29,0xd2,0xb9,0x20,0xf9,0xbb,0x3d,0x61, + 0x3d,0xbd,0x74,0xa2,0x4b,0xb9,0x44,0xe4,0x09,0x76, + 0xbd,0x0f,0x95,0x95,0xf2,0x98,0x5c,0x80,0x74,0x56, + 0x29,0xb4,0xb6,0xee,0xa4,0x46,0x8b,0x2b,0x87,0x3a, + 0x08,0x19,0xb6,0x28,0x56,0xea,0xf3,0xd5,0x76,0xbd, + 0xe1,0xa7,0x54,0x6a,0x97,0x10,0xa7,0xa9,0xed,0xcd, + 0x4a,0x2d,0xd5,0x29,0x51,0x72,0xc9,0x51,0x4f,0x44, + 0xfa,0xfe,0x00,0x75,0xe4,0x82,0x76,0x6d,0xb9,0x73, + 0x41,0x13,0x98,0x81,0x6b,0x45,0x49,0x6a,0x69,0x8b, + 0xda,0x99,0xf8,0x6a,0x2b,0x95,0xd0,0x46,0xb7,0xc7, + 0xf5,0x7b,0xee,0x43,0x99,0xc6,0xbe,0x53,0xfb,0xd0, + 0x9d,0x39,0x49,0x4b,0x29,0x59,0x28,0xd1,0x39,0xe7, + 0x5a,0xca,0x26,0x01,0x28,0x93,0xec,0x57,0x4a,0xfe, + 0x36,0x26,0xe8,0x93,0x0d,0x8f,0x6b,0x49,0x11,0x2f, + 0x8a,0xce,0x2d,0xea,0x48,0x69,0xcb,0x9d,0x50,0x69, + 0xba,0xfe,0x97,0x73,0x26,0xdf,0x20,0x0b,0xf0,0xb3, + 0xe4,0x2e,0x5c,0x83,0x8a,0xea,0xe8,0xc3,0xa4,0x15, + 0x05,0x8d,0x81,0x2b,0x81,0x77,0xb2,0x66,0x48,0x52, + 0xeb,0x1a,0x64,0xd3,0x62,0xa7,0x96,0x00,0x11,0xf2, + 0x5c,0x4f,0xd7,0xb5,0x1b,0x95,0xf7,0x44,0x12,0xed, + 0xaa,0x78,0x6c,0x92,0xa3,0x6b,0xd8,0x64,0xb5,0x59, + 0xec,0xa1,0x25,0x57,0x53,0x5f,0xde,0xb5,0x09,0xdc, + 0xe2,0x4e,0xba,0x4d,0x93,0x47,0xd3,0xfd,0x5c,0x7f, + 0xfd,0xfa,0x75,0x05,0x1e,0x85,0xb6,0x3b,0x3e,0x4e, + 0x70,0x54,0xaa,0xde,0x11,0x52,0x5d,0x4b,0x78,0x32, + 0x8e,0x74,0x50,0x36,0x55,0xdb,0x8e,0x0c,0x99,0x5a, + 0xcc,0x3d,0x51,0x29,0xaf,0x8e,0x87,0xef,0x1b,0xda, + 0x61,0x9a,0xc4,0x44,0x58,0xda,0xbd,0xd3,0x24,0x4e, + 0xb9,0x48,0x0a,0x7b,0xa2,0x15,0xab,0x5c,0xe2,0x2a, + 0x48,0x25,0x5b,0x1b,0x94,0xa9,0x55,0xc9,0x45,0xc8, + 0xb9,0x2c,0xc9,0x1a,0x50,0x74,0xb4,0x1c,0xd0,0x76, + 0x98,0xb6,0xb2,0x09,0xed,0x54,0xd9,0x04,0xc3,0xc9, + 0x1a,0x79,0x3f,0x66,0xff,0x51,0xb2,0x86,0xe6,0xd9, + 0x6e,0xa0,0x02,0x5a,0x1d,0x35,0xa8,0x1f,0x5b,0x5a, + 0x43,0x42,0x89,0xf5,0xda,0x08,0xe9,0x4d,0x84,0x6b, + 0x38,0x70,0x2d,0xbf,0x48,0xb9,0x4c,0x89,0xb3,0x33, + 0x11,0x96,0xc3,0x59,0xe9,0x9e,0xf5,0x3a,0xa9,0xd2, + 0x33,0x61,0xe3,0x66,0x20,0x71,0x23,0x0e,0xd2,0x68, + 0xec,0x72,0x85,0x82,0x26,0xa6,0x7a,0x3f,0x64,0x05, + 0x33,0x0c,0x42,0x91,0x7c,0x01,0x9a,0x64,0x9f,0x73, + 0xae,0xdf,0x09,0xa9,0x71,0x84,0xe6,0xd4,0x0f,0x4c, + 0xbe,0x61,0x94,0xa5,0x3a,0xdd,0x83,0x25,0xf4,0x17, + 0xdb,0x5f,0x94,0x41,0x27,0xf8,0x31,0x64,0xc1,0xab, + 0x45,0xa7,0xad,0xb7,0x89,0x3d,0x4f,0xe3,0xc6,0x0e, + 0x3e,0xa6,0x1e,0x2b,0x99,0xab,0x3a,0x61,0xab,0x04, + 0xc1,0xba,0x6b,0xee,0x5c,0x2c,0xf7,0x7c,0xc9,0x07, + 0xae,0x5f,0x06,0x48,0x9b,0x23,0x77,0x08,0x50,0x85, + 0x18,0x98,0x36,0x2a,0xc1,0x0e,0x09,0x4b,0x7d,0x79, + 0x82,0x97,0x5d,0x25,0xa2,0x92,0xf3,0xe9,0x33,0xbb, + 0x6d,0xc8,0xb0,0x96,0x6b,0x0a,0x1a,0x2e,0xb8,0x0f, + 0xfd,0xf4,0x9a,0x64,0x17,0xa8,0x72,0x76,0xcf,0x63, + 0x4b,0x4c,0x4e,0x6b,0x5c,0x39,0x0a,0xd4,0xba,0x76, + 0x6d,0x6c,0xd1,0x2e,0xea,0x7b,0xe2,0x67,0x5c,0x59, + 0xb9,0x46,0x09,0xb5,0xfc,0xfe,0x79,0x6b,0xe6,0x19, + 0x0a,0xc1,0xea,0xa3,0xf3,0xa1,0x2d,0x64,0x4d,0x3f, + 0xe5,0xc0,0x4a,0x36,0x1a,0x6f,0x76,0x00,0x93,0x08, + 0x2d,0x8d,0x8f,0xd3,0x77,0xba,0x81,0x09,0x8a,0x3d, + 0x6a,0x4b,0x30,0xb8,0xd8,0xdb,0x22,0x45,0x4d,0x6c, + 0x5b,0x11,0x75,0x94,0x7f,0xe8,0xcc,0x58,0x9d,0x44, + 0xc3,0x64,0xa1,0x93,0xec,0x22,0xfa,0xf3,0xa0,0x44, + 0x19,0xf4,0xc0,0x30,0xd9,0x77,0x89,0xc1,0xbd,0xff, + 0xaf,0xa7,0xf9,0xac,0x7b,0xff,0xd6,0x46,0x62,0xf1, + 0x8e,0xd6,0x6b,0xa4,0x69,0xa4,0x1d,0xa3,0xf3,0x73, + 0xc4,0x46,0x28,0x16,0x48,0x09,0x31,0x22,0x7f,0xb4, + 0x7e,0x9f,0x4b,0x54,0xf0,0x41,0xb1,0xa0,0xae,0x89, + 0x43,0x84,0x1f,0x14,0x0d,0x9a,0xb8,0xd2,0x0a,0x62, + 0xf2,0x69,0x9a,0xda,0x56,0x4e,0x9e,0x7e,0x40,0x82, + 0x22,0x4c,0x46,0x49,0x9b,0xd3,0x2b,0xb9,0x3c,0xf9, + 0xb1,0xb6,0x62,0x88,0x09,0x96,0x24,0xb3,0x44,0x22, + 0x3a,0x07,0x92,0x58,0x39,0x03,0x48,0x42,0x18,0xc8, + 0x01,0x78,0xc3,0xc6,0x5f,0xf6,0x91,0x6b,0x22,0x58, + 0x13,0xf2,0xa7,0x5c,0x10,0xe2,0xf8,0x68,0xf2,0x93, + 0x04,0x26,0x29,0x01,0xd4,0x96,0x58,0x27,0x5f,0xeb, + 0x3d,0x93,0x90,0x99,0x13,0xcd,0xbb,0xda,0x84,0xdd, + 0x26,0x99,0xea,0xcf,0x22,0xe9,0x13,0x85,0x84,0x4e, + 0x51,0x15,0x84,0x72,0x95,0xe7,0x93,0xdc,0x9a,0x05, + 0xa5,0x49,0xca,0xba,0x8f,0xc0,0xd2,0x8d,0x4f,0x97, + 0x49,0xdb,0x8a,0xeb,0xa0,0xc1,0x54,0x45,0xe3,0x82, + 0x64,0x86,0x43,0x52,0x49,0x33,0xa6,0xb4,0x45,0x34, + 0xf1,0x3f,0x0c,0xba,0x53,0xd4,0xda,0x37,0x08,0x4c, + 0x0d,0xbc,0x0a,0xe4,0xa4,0xb8,0x89,0x3d,0x30,0x84, + 0xad,0x94,0xe8,0x50,0xfb,0x63,0x28,0x20,0xeb,0x6f, + 0xb9,0x1d,0x8e,0x8e,0xe0,0xb8,0x9b,0x90,0x74,0x16, + 0x39,0xa1,0x53,0xcb,0x3e,0x25,0xff,0x94,0xd4,0x10, + 0xd5,0x42,0x51,0xb3,0xd4,0x4e,0x4d,0x71,0xd4,0xf1, + 0x44,0x4d,0xb2,0xf7,0x51,0xeb,0xa8,0x9f,0x21,0x34, + 0x7c,0x33,0xd1,0x06,0x82,0xde,0x58,0x9a,0x62,0x45, + 0xa2,0x35,0x3d,0x8b,0x8e,0xa0,0x53,0x7b,0x51,0xee, + 0x05,0xdf,0xbb,0x72,0x07,0x9d,0x1b,0x41,0x40,0xe5, + 0x1e,0x1a,0x5b,0x44,0xcb,0xe8,0xeb,0xe7,0xd5,0xcf, + 0xb0,0x34,0xa6,0x9d,0xaa,0xec,0xe9,0xe1,0x90,0x91, + 0x1c,0xe9,0x4e,0xa4,0x71,0x3c,0x7d,0x90,0x9b,0xd6, + 0x14,0x25,0x2d,0x4b,0xa6,0x7b,0x6d,0x89,0x58,0x1a, + 0x94,0x95,0x88,0xb9,0xe1,0x16,0xdd,0xcf,0xed,0x3e, + 0x80,0x40,0xa7,0x04,0x51,0x99,0xe0,0x75,0x95,0x02, + 0xf3,0x6a,0x9c,0x79,0x42,0x1c,0x88,0x27,0xe4,0x64, + 0xce,0x37,0xd7,0xb1,0x25,0xd5,0x77,0x49,0x00,0x6d, + 0x59,0x6e,0xc8,0xb5,0xa4,0x03,0x04,0x1c,0xad,0xc7, + 0x1a,0xed,0x92,0xfb,0x8e,0x67,0xe0,0xa6,0x40,0xc8, + 0x1f,0x67,0x91,0x4c,0xd4,0x60,0x54,0xf8,0x26,0x8a, + 0x36,0x25,0x2c,0x90,0xdc,0xd5,0x65,0xf4,0x96,0x28, + 0x58,0xba,0x35,0xe6,0x26,0xaa,0x4c,0x6c,0x18,0xd7, + 0x01,0xa9,0x3b,0x53,0x32,0x07,0x95,0xe7,0x4f,0x32, + 0x94,0x84,0x2d,0xf5,0xb3,0x1b,0x5a,0x57,0x4b,0x1d, + 0x92,0x5a,0x14,0x4e,0x95,0xe2,0x86,0xe3,0xbe,0x48, + 0x0b,0x2b,0x4a,0x3b,0x04,0x2d,0xa8,0x0a,0x49,0x02, + 0x72,0xe6,0x92,0x22,0xbc,0xb6,0xdc,0x87,0x04,0x6d, + 0xe4,0x91,0x24,0x8b,0x1b,0xf7,0xce,0x6f,0xa2,0xb7, + 0x9a,0x9f,0x6e,0x0a,0x66,0xa5,0x21,0xf4,0xe7,0x0b, + 0xfa,0x57,0xd7,0xa4,0xc2,0x4f,0xeb,0x78,0xd2,0x6a, + 0x73,0x49,0x83,0x43,0x9b,0x42,0xfb,0x07,0xe3,0xc2, + 0x56,0xdb,0x08,0xae,0x27,0x4e,0xc7,0x39,0x1b,0x21, + 0x2a,0xfc,0x86,0xc2,0x20,0x15,0xd7,0x2b,0x10,0xc4, + 0x51,0x01,0xdc,0x19,0xae,0x9f,0xf9,0x72,0x90,0x16, + 0x25,0x23,0xee,0x29,0xeb,0xc6,0x4c,0x7c,0x91,0xe4, + 0xfd,0x93,0x1e,0x56,0x42,0x9d,0x36,0x9b,0x3c,0x8d, + 0xe5,0x2e,0x54,0x91,0x23,0x2f,0x44,0xbf,0xe7,0xcf, + 0x9f,0x3f,0xab,0xa9,0x30,0x07,0xf9,0x0f,0x55,0x7f, + 0xec,0xd7,0xea,0xc4,0x8b,0xeb,0xc1,0x6a,0x70,0x49, + 0x2d,0x20,0x4d,0xe2,0xe8,0xc0,0x83,0x0a,0xbb,0x12, + 0x31,0x3a,0x71,0x54,0x1c,0x89,0x32,0x21,0x48,0x6e, + 0xbc,0x5f,0xf9,0x13,0x80,0x92,0x15,0xf0,0x6e,0x1e, + 0xef,0x4d,0x45,0xd7,0x48,0xaa,0x3d,0xad,0x5f,0x47, + 0xdc,0x4c,0x5c,0x05,0x4d,0x38,0x9c,0x16,0x54,0x58, + 0xa3,0xb5,0x39,0x68,0x1d,0x57,0x85,0x82,0x23,0xd9, + 0xde,0x4c,0xc9,0x66,0x82,0xcd,0x53,0xb0,0x4c,0xc9, + 0xd0,0x96,0xa7,0xe8,0x02,0xb3,0xda,0x58,0x24,0xa1, + 0x3c,0xc7,0x67,0x49,0x89,0xb4,0xe3,0x7e,0x91,0x41, + 0x65,0x42,0x9b,0xa7,0xb6,0xf9,0x05,0xe2,0x7d,0xfa, + 0x77,0xdb,0xef,0x4d,0xeb,0xc3,0x15,0xc5,0x77,0xdb, + 0x24,0x15,0xc4,0x46,0xa8,0xd2,0xc5,0xaa,0xa2,0x04, + 0xc2,0xa1,0xe6,0x93,0x17,0x1c,0xc9,0x2b,0x04,0x7e, + 0x10,0xb6,0x96,0x48,0x5f,0x27,0xa0,0x4c,0xe8,0xa7, + 0x05,0xf7,0x89,0x85,0x6c,0x32,0x83,0x55,0xc0,0x42, + 0xb9,0x3c,0x2e,0xc9,0x72,0x67,0x09,0x11,0xc6,0xb7, + 0xde,0x9f,0xd4,0xee,0xd4,0xf3,0x66,0x92,0x72,0x71, + 0x71,0x3a,0xa1,0xbf,0x43,0x8b,0x1f,0xdf,0xa1,0x5b, + 0xe3,0xe7,0x9c,0x7a,0x5d,0xc3,0x7c,0xbf,0x93,0xfe, + 0x4e,0xbc,0x8f,0x65,0xd2,0x52,0x40,0xe6,0x8b,0x89, + 0x98,0xfb,0x3e,0x63,0xd8,0x87,0x55,0xf5,0x74,0x70, + 0xa4,0xe9,0x24,0xea,0x07,0x27,0xa2,0xf7,0xaf,0x5f, + 0xbf,0x8a,0x6c,0x12,0x74,0x33,0x90,0x91,0xe0,0x66, + 0x14,0x5a,0x0f,0xee,0xe4,0x31,0x93,0x48,0xda,0x9d, + 0x54,0x3b,0x4d,0x73,0xf5,0x8c,0x5b,0xd5,0x5c,0xa9, + 0x4d,0xe0,0xd6,0x11,0xa8,0xee,0xba,0x36,0xd9,0x63, + 0x7a,0xad,0x57,0xe9,0x20,0x68,0x46,0x04,0x66,0xab, + 0xa0,0xfa,0xbd,0x69,0x2a,0xe9,0xbb,0x24,0xe4,0x30, + 0xf0,0x0b,0x6a,0x08,0x12,0x35,0x54,0xc8,0xe5,0x2a, + 0x53,0x73,0x48,0x15,0x99,0xed,0x12,0x6a,0x76,0x0b, + 0x06,0x52,0x32,0x1a,0x84,0xff,0xec,0x44,0x93,0x20, + 0x48,0x76,0xc2,0xab,0x91,0xb0,0xad,0xdf,0x17,0x4d, + 0x85,0xe9,0x83,0xa2,0x8a,0x71,0x4a,0x8c,0xa4,0x6d, + 0x55,0xdb,0x62,0xed,0x5a,0x8a,0x4a,0xaa,0xea,0xb3, + 0x23,0x25,0x5f,0xc3,0x74,0xdf,0x2d,0x76,0x19,0x68, + 0x00,0x89,0xc8,0x5b,0x94,0x4c,0x5c,0x46,0x4d,0x3a, + 0xc4,0x1b,0x4c,0x1c,0x88,0x9c,0x1c,0x08,0xdf,0x95, + 0xd0,0x1c,0xb7,0xd7,0x74,0xf2,0x0a,0x28,0x19,0x95, + 0xf6,0xf7,0x16,0x01,0x77,0xfa,0x64,0x29,0xf6,0xb8, + 0x98,0x96,0x3c,0xe4,0x88,0xe2,0xd1,0x13,0xb7,0xad, + 0xd9,0x2f,0x75,0x54,0xe0,0xfb,0xa2,0xfb,0x80,0x9b, + 0xfe,0x4b,0xe7,0xdd,0x84,0xdc,0x6d,0xd1,0xb7,0x94, + 0x98,0xb8,0x16,0x6d,0xea,0x70,0x4c,0x28,0x53,0x12, + 0x3e,0x7d,0x2d,0x9c,0x70,0xd7,0xc6,0x88,0x2e,0x1b, + 0x4e,0x02,0x69,0x13,0xdf,0x27,0xf9,0x1f,0x0d,0x13, + 0x36,0x31,0x91,0x71,0x63,0xdc,0x4e,0xa4,0x2b,0xb1, + 0x63,0x5d,0xcf,0xd8,0x21,0x08,0x3d,0x1b,0xef,0xfc, + 0x94,0xe9,0xa5,0xba,0x6b,0xd7,0x16,0x8f,0x4b,0x20, + 0x68,0x63,0x2a,0xc7,0x68,0xc3,0xa7,0xea,0xc9,0x4d, + 0xaa,0x0e,0x12,0xe9,0x55,0x37,0xbf,0x3c,0xb7,0x07, + 0xca,0x43,0x10,0xb1,0x0b,0x62,0x37,0x2a,0x02,0xe6, + 0x9d,0x05,0x49,0x6e,0xe2,0xe0,0x60,0x92,0x16,0xa0, + 0xd7,0x0a,0xb6,0x0a,0x63,0xb5,0x9f,0xfc,0xe1,0xdc, + 0xa4,0x59,0x78,0xce,0x51,0xc3,0x25,0xa9,0xea,0x6e, + 0x50,0x51,0x80,0xb9,0xab,0x59,0x41,0x90,0xc0,0xde, + 0xd8,0x2e,0x9b,0x10,0x0f,0xd3,0x3e,0xab,0xef,0xf7, + 0xfe,0xd6,0xd6,0xa2,0x00,0xeb,0xb8,0x75,0x12,0x6f, + 0x4a,0xf9,0x60,0x93,0x4a,0xb4,0x5b,0xaf,0xe6,0x20, + 0xab,0xa9,0x4d,0xae,0xaf,0xce,0x4c,0xaf,0x56,0x52, + 0xc6,0x4f,0x36,0x09,0xe1,0x80,0x29,0x42,0x2f,0x5c, + 0x6b,0x90,0x44,0x6f,0x7b,0x1c,0x75,0xd5,0x3c,0xb5, + 0x3f,0x05,0x05,0x2f,0x42,0xb2,0xd3,0x94,0x71,0x8f, + 0x85,0xf0,0x7e,0x9d,0x4f,0x65,0x94,0x2d,0xa1,0xe9, + 0xa3,0x84,0xc4,0x6f,0x10,0x89,0x30,0xbd,0x67,0xbf, + 0xc3,0xb8,0x2d,0xb8,0x58,0x56,0xa6,0x98,0x4d,0x92, + 0x09,0x1f,0xb5,0x23,0xd3,0xfe,0x73,0x62,0x92,0xca, + 0xe9,0x13,0xe4,0x1a,0xc5,0x95,0x37,0xc8,0x4e,0xf0, + 0xb7,0x1b,0x87,0x1a,0x26,0x1a,0xc5,0xaf,0xd7,0xeb, + 0xf5,0xbf,0x55,0xd5,0x7f,0xbe,0xae,0xeb,0xbf,0x6f, + 0x13,0x08,0xb7,0xe0,0x27,0xef,0x22,0x5a,0x40,0x1b, + 0xef,0x2e,0x82,0x1d,0x15,0xce,0x9a,0xaa,0xbe,0xad, + 0xba,0xac,0x0b,0x02,0x2d,0xe0,0xd5,0x34,0x86,0xaa, + 0xfb,0x95,0x26,0x16,0x42,0x02,0x19,0x05,0x09,0xd5, + 0x9c,0x92,0x78,0x0c,0x94,0xd0,0x28,0xd7,0xc0,0x18, + 0xd4,0xd9,0xc0,0x43,0xef,0x91,0x64,0xc9,0x69,0x7d, + 0x0c,0x1b,0xb4,0xe0,0xfa,0x23,0x79,0x98,0xd6,0x4b, + 0xaa,0xea,0xa5,0xc5,0xb4,0x1a,0xa5,0x56,0xd1,0xca, + 0xfe,0xb3,0x93,0x16,0x8a,0xfc,0xfb,0xcf,0xb3,0x77, + 0xd5,0x1f,0x49,0xbf,0x3b,0xb2,0xba,0xe3,0x00,0x85, + 0x01,0x85,0xf1,0x5d,0x38,0x74,0x35,0xac,0x73,0x3c, + 0xe4,0xd2,0xbb,0x18,0x92,0x33,0xfb,0x3e,0xc5,0x47, + 0x2a,0x11,0xff,0x0f,0x05,0xbf,0x25,0xb1,0xff,0x24, + 0xbe,0x93,0xac,0xfb,0x33,0x71,0x55,0xee,0x9f,0x49, + 0x7e,0x61,0x57,0x9b,0x10,0x33,0xf1,0x33,0x4d,0x87, + 0x5d,0x6e,0x4a,0x8a,0xae,0xaf,0x7b,0x4f,0x42,0x35, + 0x7f,0xe0,0x7e,0x0f,0x3d,0x6b,0x40,0x23,0x0e,0xa0, + 0xd4,0x07,0x74,0x79,0x8e,0x39,0xa8,0xdd,0x7b,0x3c, + 0x40,0xda,0x3d,0x9b,0x7b,0xbc,0x9a,0x61,0x6c,0x4b, + 0x5e,0xed,0xcf,0x19,0xd7,0x80,0xb7,0xe7,0xd9,0xae, + 0xf7,0x98,0xf5,0xe8,0xde,0xc9,0x31,0xef,0xfe,0x98, + 0xbd,0xe3,0xee,0xd1,0x3f,0xf8,0xcb,0xbb,0x9c,0xcb, + 0x3d,0x1e,0xc3,0xd7,0x3a,0xa6,0xd5,0x7f,0x20,0xf6, + 0x3a,0x83,0xe0,0x63,0x80,0x07,0x9a,0x36,0xb4,0xbf, + 0x6f,0x8a,0xdd,0x03,0xe7,0xf3,0x81,0x38,0x7e,0xe0, + 0xcc,0x3f,0x70,0x36,0xf4,0x67,0xfd,0x9f,0xae,0xeb, + 0xfa,0x7f,0x5f,0x00,0xaf,0x91,0x9b,0xf5,0xca,0xa4, + 0x33,0x25,0x19,0x1b,0x71,0x22,0xaa,0xae,0x5d,0x3f, + 0xf6,0xcf,0x9f,0x3f,0x49,0x54,0xaf,0xa6,0xd1,0x38, + 0x97,0xe9,0x26,0xc3,0x57,0x25,0x78,0xba,0x83,0x4b, + 0xc9,0x9a,0x7a,0xe8,0x25,0x5e,0xce,0xa6,0x15,0xd8, + 0xab,0x27,0x53,0xd1,0x3e,0xa0,0xf7,0x09,0x8a,0x9d, + 0xde,0xa1,0x6b,0x71,0x01,0x5f,0xa4,0xd2,0xf7,0x10, + 0x34,0x3b,0xe9,0xfe,0x5c,0xe0,0x47,0x14,0x12,0x45, + 0xdb,0xfa,0xea,0xbe,0x43,0xf4,0xf9,0x4e,0x77,0xc3, + 0xad,0x93,0xaf,0xaf,0xaf,0xd2,0xf6,0xb0,0x08,0x69, + 0x56,0xa8,0x12,0xcb,0x25,0xa4,0xdb,0x96,0x41,0xe7, + 0x9b,0x90,0x4c,0xbe,0x90,0x27,0x4b,0x45,0x17,0x37, + 0x09,0x69,0x9f,0x88,0x52,0xae,0xd7,0x64,0x9a,0x3c, + 0xed,0xb1,0x54,0x94,0x24,0xc9,0xfc,0x89,0x9f,0xa2, + 0x02,0x8f,0xfa,0x8c,0x26,0x19,0x88,0x96,0x24,0xd6, + 0xa6,0x22,0x6d,0xad,0xbc,0x94,0xd8,0x97,0x22,0x95, + 0x6e,0x2a,0x95,0x8a,0x47,0x27,0xd6,0xe8,0x38,0x36, + 0x84,0xae,0xd3,0xde,0xd9,0x22,0xa4,0x83,0xaa,0x72, + 0x01,0x7a,0x5f,0x34,0x49,0x4c,0x09,0x30,0xb5,0x6a, + 0x9c,0x94,0x03,0x75,0x0f,0xa6,0xa2,0x17,0xe2,0xad, + 0x2b,0x34,0xca,0x78,0xa6,0x5d,0xc9,0x68,0x77,0x8a, + 0xa3,0x49,0x87,0x0a,0x84,0x0b,0x3f,0xf2,0xcb,0x9c, + 0x26,0x85,0xa5,0xfb,0x60,0xb9,0x4a,0x5a,0xc8,0x11, + 0x6f,0x10,0x12,0xee,0xda,0x58,0x5b,0x84,0xf7,0x65, + 0x87,0xa0,0x52,0xab,0x9b,0xd0,0xad,0x89,0x73,0xf8, + 0x66,0x86,0xea,0x3e,0x94,0x7a,0x92,0xd4,0x8f,0x24, + 0xa8,0x39,0x25,0x25,0xd3,0xc5,0x51,0xcb,0x21,0x5d, + 0x0f,0x8d,0xcd,0x12,0xfc,0x46,0x36,0x17,0x9b,0x2a, + 0x76,0x23,0x75,0xee,0x5e,0xb8,0x23,0x16,0xbb,0x83, + 0x8c,0x08,0x64,0xc9,0xd9,0x1a,0x9e,0xa9,0x33,0x8b, + 0x2b,0xe2,0xcc,0x24,0xff,0x27,0xda,0xe0,0x81,0x27, + 0x52,0x84,0x5e,0x99,0xc3,0x6d,0x3c,0xa0,0x5d,0x1b, + 0x95,0x0c,0xfe,0x26,0x18,0xdf,0xbd,0x4b,0x27,0x56, + 0x48,0xef,0x31,0x6d,0x8d,0xf0,0xfc,0x4a,0x27,0x05, + 0x4d,0x42,0x1c,0x05,0xf6,0xba,0x57,0xd7,0x54,0x70, + 0x7c,0x82,0xf8,0x28,0xd7,0xe5,0x32,0xc4,0x44,0x4a, + 0x82,0x92,0x29,0x62,0xd2,0xc8,0x21,0xe1,0xbe,0x54, + 0x40,0xb9,0x56,0xe9,0x42,0x91,0xb7,0x36,0xed,0x0c, + 0x27,0xca,0x4a,0x28,0xa0,0x26,0x08,0x2e,0xe6,0xa8, + 0x11,0xea,0x70,0x48,0x16,0xb5,0x21,0x5c,0x0b,0xc8, + 0xad,0x2b,0x2a,0x66,0xa9,0x7d,0x0c,0xad,0xc1,0x72, + 0x67,0x40,0x2f,0x20,0x1c,0xe7,0x66,0x52,0x49,0xee, + 0xd7,0x73,0x5f,0x3f,0xd1,0x01,0x36,0x16,0x4c,0xa9, + 0x40,0xfc,0x84,0xb8,0xde,0xdf,0x95,0x26,0x3d,0xe9, + 0xa0,0x1d,0x38,0x9c,0x2b,0xee,0x91,0x93,0x03,0x70, + 0x03,0x15,0xa6,0x35,0x4e,0xc6,0xb3,0x6f,0xef,0xe2, + 0x1b,0x20,0xc0,0x22,0xc0,0x25,0x5c,0x1f,0x8a,0x92, + 0x8e,0x88,0xbc,0xb1,0x0e,0xc2,0xf6,0x2d,0xbc,0xef, + 0x4a,0xd3,0x66,0x44,0xdd,0x01,0x2b,0x93,0x77,0xd4, + 0x8b,0x5e,0xb0,0x8e,0xdf,0x39,0x9e,0x80,0x3e,0xbc, + 0x24,0x89,0x3d,0xf9,0x95,0xb8,0x4d,0xfd,0x09,0x3a, + 0xb1,0x50,0x8a,0x5c,0xcb,0xfa,0x53,0x9f,0xd2,0xb5, + 0x82,0xba,0x71,0x2a,0xd9,0x5c,0xe8,0x01,0xec,0x14, + 0x88,0x53,0x22,0x71,0x19,0xc2,0x23,0xf5,0x7b,0xd3, + 0x81,0xbd,0x21,0xd9,0x25,0x9f,0x1e,0xdd,0xa0,0x14, + 0xbc,0xa9,0xf2,0xef,0x49,0x30,0x4d,0xba,0x19,0x4d, + 0x0e,0x4a,0x8a,0x2a,0xb5,0x12,0x35,0x41,0x22,0x2d, + 0x17,0x37,0xea,0x99,0x46,0xf6,0xf5,0xbb,0xd3,0x88, + 0xf0,0x44,0x5c,0xdd,0x1c,0x80,0xae,0x55,0x9c,0xda, + 0x4a,0x1d,0x81,0x22,0xe5,0x56,0x7a,0xd7,0x37,0xb7, + 0x86,0xd6,0xd2,0x14,0x00,0x53,0xc0,0xee,0xfb,0x75, + 0xfa,0x3d,0xf5,0x8f,0x4a,0xa3,0xeb,0x34,0xb5,0x49, + 0xc9,0xe7,0xb5,0xf4,0x39,0xea,0x93,0x4a,0xba,0xd6, + 0x88,0xbf,0xa7,0x09,0x02,0x14,0x43,0x76,0x0d,0x38, + 0x32,0xb2,0xea,0x8a,0xa5,0x09,0xd5,0xa1,0x68,0xa9, + 0x34,0x99,0xea,0x10,0x4c,0x87,0xf0,0xba,0x02,0x63, + 0x40,0xfe,0x0b,0x62,0x79,0x99,0x09,0xa3,0xa2,0x77, + 0xec,0x12,0x8e,0x89,0xbb,0x32,0x71,0xcc,0x28,0x7e, + 0xf5,0xe7,0x00,0xb2,0x1f,0xb5,0xd9,0x13,0x60,0x71, + 0x52,0x50,0xd0,0x6c,0x12,0x8b,0xa8,0x49,0x95,0x90, + 0x90,0xc5,0xc4,0xed,0x04,0x26,0xd4,0x24,0x85,0x90, + 0xf6,0xd2,0x65,0x86,0x5a,0xd2,0xba,0xdd,0xb6,0xd7, + 0x09,0x95,0x4d,0xed,0x74,0x3d,0xa7,0x7f,0xd3,0xc2, + 0xf8,0x84,0x48,0xe4,0x94,0x9c,0xef,0x43,0x72,0x93, + 0xf8,0x38,0x82,0x6e,0x70,0x2d,0x26,0xc8,0xda,0x26, + 0x2b,0x29,0x43,0xed,0xa6,0x69,0xa9,0x9a,0xdc,0x10, + 0xfa,0x88,0x90,0x9a,0x46,0xf1,0x3a,0x0a,0xe4,0xa6, + 0xc4,0xfa,0xa1,0x11,0x54,0xb2,0x1f,0xcf,0x3c,0xc1, + 0xc8,0x8e,0x9f,0xe4,0xb8,0x16,0xa9,0x2d,0xe8,0x90, + 0x09,0x58,0xbc,0x95,0x7c,0xd6,0x12,0x24,0x3f,0x04, + 0x32,0xfb,0x7c,0x9d,0x62,0xf7,0xfd,0x63,0x4d,0xa5, + 0xd9,0xa2,0x42,0xb2,0x86,0x1f,0xdc,0x1e,0x6a,0xf3, + 0x39,0x04,0x0b,0xc6,0x66,0xcb,0xc1,0xf6,0x49,0xb2, + 0xdd,0x1c,0x66,0x76,0x6d,0x68,0xd2,0xd0,0x2b,0x26, + 0x42,0x6c,0xdc,0x73,0xd3,0x3d,0x9c,0xb4,0x3d,0x54, + 0x21,0x56,0xa7,0x80,0x92,0xb2,0x7a,0xf2,0x67,0x9a, + 0x7e,0x97,0x78,0x02,0xd3,0x10,0x04,0xb5,0xf8,0xfb, + 0xe7,0x51,0x95,0x79,0xb7,0x3c,0x3b,0x8f,0xc0,0xc5, + 0x49,0x51,0x01,0x3f,0xa1,0x45,0x58,0x8e,0x23,0xd3, + 0x8b,0x1b,0xe5,0x72,0xa8,0x62,0x30,0x49,0x31,0xe8, + 0xf7,0x0a,0x42,0x72,0x5c,0x8b,0xd7,0x29,0x4c,0x27, + 0xc5,0x64,0x8d,0x8b,0xfa,0xf9,0x26,0x61,0x1f,0x39, + 0x59,0xfd,0x33,0xee,0xcf,0x55,0x95,0xe2,0xbe,0x0f, + 0x21,0x91,0xb3,0x6a,0xca,0xaa,0x5c,0xdd,0xef,0x99, + 0x92,0x00,0x8a,0x6d,0xee,0x1c,0x50,0x85,0xf2,0xa9, + 0xd8,0x48,0x67,0x0d,0x01,0x0a,0xa9,0xdd,0xbc,0xed, + 0x86,0x38,0x4d,0x21,0xa3,0xf4,0xfc,0x78,0x86,0xae, + 0xd3,0x91,0x78,0x7d,0x54,0x80,0x2c,0xc9,0xe3,0x05, + 0x7c,0x27,0x42,0xe8,0x0f,0x74,0x79,0x8e,0xb1,0x56, + 0x79,0x7c,0xf6,0x2b,0xb5,0x37,0x9c,0x37,0x4b,0x52, + 0xeb,0x4d,0x8b,0xa3,0x57,0x15,0x5a,0xe5,0x3b,0xd4, + 0x84,0xf8,0x38,0x44,0x62,0x4d,0x92,0xe4,0x74,0x70, + 0xa6,0xc5,0xef,0x16,0xc7,0x94,0x59,0x52,0xc5,0x3a, + 0x71,0x10,0x12,0x83,0x7d,0x5a,0x6c,0xa9,0x12,0x4c, + 0xad,0x0e,0x4a,0x40,0xb6,0xe3,0xf9,0xa1,0x0f,0x6c, + 0xbd,0xc7,0x9c,0x12,0x72,0x72,0x3f,0xd7,0xa4,0x61, + 0x93,0x88,0xbb,0x67,0xe6,0xda,0x06,0x84,0x54,0xd0, + 0x04,0x8a,0x6b,0x1b,0x12,0x3a,0x48,0x1c,0x10,0x5a, + 0x77,0xce,0xc6,0xc4,0x91,0x8f,0x49,0x15,0x55,0x85, + 0x16,0xa7,0x31,0x78,0xd3,0x52,0xa9,0xd4,0xe6,0x05, + 0xde,0x8b,0x1e,0xba,0xe5,0xb8,0x30,0xc3,0xb5,0x5e, + 0x49,0xf9,0x3c,0x04,0x7d,0x1d,0x9f,0xbf,0x52,0xb1, + 0x41,0x89,0x37,0x71,0x78,0x9c,0xbe,0xd4,0xe4,0x2d, + 0x44,0x08,0xe5,0x70,0x6d,0x05,0x28,0xd2,0xbd,0x06, + 0x2a,0x08,0xcd,0x15,0xb4,0x44,0xae,0x6b,0x70,0x2b, + 0x57,0x2e,0x08,0xd9,0x07,0x29,0xdf,0x86,0xee,0x6d, + 0xd3,0xb6,0x04,0x4a,0x45,0xa5,0x29,0xe2,0x24,0x00, + 0xa8,0x6e,0xf7,0x53,0x12,0xf3,0xc9,0x84,0x13,0x71, + 0x8e,0x12,0x2d,0x41,0x93,0xa3,0x24,0x7f,0x71,0x0d, + 0x62,0xb0,0xaa,0x2a,0xed,0xb4,0x83,0x26,0x37,0x75, + 0x68,0x87,0xba,0xe7,0x55,0x3a,0x61,0x4c,0xad,0x68, + 0x45,0x9f,0x48,0x95,0x5a,0x65,0x5e,0x12,0xad,0x45, + 0xcf,0x4c,0x75,0x51,0xa0,0x78,0x34,0xbd,0xb3,0x4f, + 0xa6,0x9d,0x5f,0xae,0x8a,0xd5,0x03,0x81,0xda,0x3f, + 0x5b,0x2b,0x09,0xb5,0xa7,0xdf,0x8c,0xe1,0x6d,0xcc, + 0xf0,0x08,0x81,0x71,0x0f,0xc2,0x21,0x28,0x3a,0x4e, + 0xa8,0x7d,0x59,0x07,0xd1,0x2e,0xda,0x7c,0xd8,0x3a, + 0x73,0x44,0x56,0x12,0x72,0x24,0x25,0xea,0xde,0x3a, + 0x23,0x04,0x41,0x13,0xce,0x04,0x89,0x4e,0x2d,0x0b, + 0x17,0x84,0x8c,0xf8,0x60,0x99,0x43,0x27,0xf2,0x47, + 0x1c,0x72,0x35,0xe9,0xba,0xd0,0x7d,0x3a,0x48,0x36, + 0x89,0x78,0xb9,0xa0,0xaf,0xe4,0xe5,0xa9,0xc2,0xa2, + 0xc4,0x7e,0x6a,0x0d,0xa5,0xd6,0x28,0x05,0x46,0x07, + 0x71,0xbb,0x71,0xea,0x4d,0x3f,0xbf,0x8b,0x01,0x4e, + 0xa4,0xe0,0x80,0xfc,0x59,0xb5,0xe8,0x54,0x35,0x4e, + 0xc1,0x29,0x91,0x9c,0xb5,0xb0,0x72,0x49,0x9c,0xa2, + 0x7f,0x09,0x5d,0x82,0x6b,0x7a,0xd3,0x26,0x4b,0x49, + 0x13,0xb5,0x32,0xf5,0x00,0x49,0xca,0xc8,0x69,0xf2, + 0xf5,0x16,0x54,0xbd,0x8c,0x97,0x5f,0x17,0xe5,0x74, + 0x89,0x05,0x8d,0xc0,0xeb,0x9a,0x77,0x63,0xd9,0x13, + 0x42,0x43,0x5a,0x6c,0x14,0x6f,0x6e,0x2d,0x9f,0x14, + 0x5b,0x5c,0xbb,0x9f,0xf6,0x6a,0x12,0x89,0x1d,0x68, + 0x1a,0x95,0x28,0x0e,0x7a,0xf6,0x4d,0x44,0xf9,0xcb, + 0x93,0xce,0x2b,0x29,0x22,0x53,0x6c,0x0a,0x1c,0xcd, + 0x9f,0x33,0x93,0xd0,0x9b,0x84,0x5a,0xb9,0xfd,0xe5, + 0x0c,0x50,0x69,0xea,0x73,0x81,0xd6,0xbd,0xbd,0x17, + 0xa2,0x72,0x0c,0x3a,0x82,0xb8,0x8f,0x74,0xdf,0xbb, + 0xd1,0xfb,0x29,0x36,0x4f,0x67,0xde,0x39,0xe7,0xb2, + 0x53,0x60,0xee,0x41,0x24,0x27,0xdf,0xd4,0xa3,0x75, + 0xee,0xb3,0x54,0x51,0x19,0x56,0xba,0x5e,0x4f,0x25, + 0x92,0xa7,0x23,0x6e,0x4f,0x7e,0x66,0x8e,0xa0,0xa5, + 0x15,0x99,0xfe,0xbb,0x1e,0xfc,0x94,0xb0,0x0d,0xea, + 0xb2,0x35,0x1d,0x72,0xee,0x77,0xa9,0xd7,0xa9,0xfa, + 0x21,0x01,0x19,0x71,0x4c,0xfb,0xd2,0x4d,0x42,0xa5, + 0x4b,0x82,0x68,0xa9,0x2f,0xdd,0x82,0x66,0x4d,0xdc, + 0x30,0xd2,0x60,0x1a,0x34,0x34,0x2a,0x6d,0x30,0xd3, + 0x3b,0x7f,0x54,0x29,0x6a,0x3d,0x32,0x25,0x2a,0xa9, + 0x6a,0x91,0xf6,0x42,0x25,0x3d,0x0d,0x5a,0xa7,0x3f, + 0x4a,0xa5,0x6d,0x3c,0x1f,0x5a,0x26,0xc8,0xf5,0x71, + 0x68,0x6d,0x17,0x8d,0xdc,0x78,0x3c,0xb5,0x3d,0x56, + 0x2a,0xf0,0x97,0xfa,0xf6,0x93,0x14,0xc6,0x80,0x12, + 0x46,0xeb,0x8d,0x41,0x12,0xe0,0x6d,0xfa,0x6b,0xdb, + 0x32,0x68,0xeb,0xbb,0x12,0x2a,0x29,0x68,0x72,0x25, + 0xbd,0x34,0x32,0x29,0x76,0xa4,0xfd,0x80,0x56,0xa0, + 0xa8,0x61,0x5f,0x5b,0xa6,0x10,0xa4,0xc4,0xba,0x48, + 0x17,0x2a,0x29,0x94,0x9b,0x2a,0x9b,0x08,0xdd,0x56, + 0xe1,0xd8,0xa1,0x28,0xa1,0x65,0x7d,0xa5,0x49,0xad, + 0x84,0xa2,0x11,0x6a,0x9c,0xba,0x0d,0x4e,0xd3,0x8d, + 0x5a,0x37,0x1b,0xee,0xca,0x16,0xb5,0x98,0xf6,0x90, + 0xfb,0x4e,0xda,0xe7,0x93,0x38,0x22,0xc5,0x68,0x1d, + 0xc8,0x09,0x22,0x85,0xd6,0x6a,0x88,0xce,0x1f,0x9a, + 0x68,0xdb,0xfa,0x06,0x26,0x85,0x7e,0x17,0xcb,0xdd, + 0x3f,0x34,0x8d,0xfd,0x46,0x21,0x48,0x30,0xe6,0xd4, + 0x8e,0xd9,0xaa,0x7b,0x92,0xe9,0x5c,0xfa,0xbd,0x85, + 0x42,0xf4,0x5b,0xd0,0x91,0xcf,0xae,0xc9,0xfd,0xdc, + 0x1d,0xc0,0xae,0x05,0xb2,0x69,0x71,0x85,0xcc,0x1e, + 0x51,0x08,0x87,0x60,0x51,0x5b,0x30,0x6d,0xa4,0x74, + 0xad,0xee,0xa0,0x73,0xc1,0x80,0xb8,0x39,0xcb,0x69, + 0x00,0x47,0x10,0xad,0x24,0x68,0xe8,0x5a,0x6f,0xda, + 0x3f,0x77,0x88,0x51,0xd7,0x60,0x72,0x3e,0x50,0xfd, + 0x3e,0x40,0x21,0x76,0xd4,0xa4,0x81,0x56,0x4c,0x25, + 0x37,0x70,0x42,0x31,0x93,0x8a,0xf2,0x05,0x6a,0xd7, + 0x9d,0x4b,0x92,0x82,0xa8,0xaa,0x56,0xbb,0xf5,0x26, + 0x68,0x81,0x95,0x28,0x18,0xaa,0xd5,0x37,0x02,0xf0, + 0xa6,0xed,0xb8,0x51,0x6d,0x25,0x54,0x36,0x0d,0x59, + 0x6c,0x5a,0xba,0x90,0x00,0x57,0x42,0x38,0xc3,0xbb, + 0x19,0x7d,0x09,0x7b,0x51,0x40,0x68,0xb4,0x2b,0xdc, + 0x26,0xd5,0x77,0x37,0x5c,0x12,0x0e,0x0e,0x9c,0xf0, + 0x09,0xe2,0xa5,0xe5,0xf6,0xbd,0x43,0x32,0x55,0xd0, + 0xd6,0x11,0xa2,0xa7,0x36,0x93,0xdb,0x43,0xfa,0x8c, + 0x08,0x31,0x74,0x71,0x24,0x55,0xf4,0x9a,0x88,0xea, + 0x9e,0xa6,0xe2,0x59,0xa5,0x45,0x16,0x45,0x5e,0x19, + 0x0b,0x23,0x44,0xe1,0xdd,0x00,0x87,0x5c,0x17,0xfa, + 0xb8,0xa9,0xb8,0xa6,0xe3,0xf0,0x29,0x65,0x23,0x01, + 0x13,0x8e,0xe6,0x40,0x1c,0xcb,0x44,0x11,0xd9,0x1a, + 0xa7,0xba,0x4e,0xcb,0x44,0x20,0x5f,0x78,0x9f,0x4d, + 0x36,0x3d,0x35,0xb5,0x2a,0xab,0xea,0xfa,0x4d,0x53, + 0x38,0x89,0x1c,0x4d,0xec,0xfc,0x81,0xa3,0x31,0x9a, + 0x8a,0x26,0xa2,0x69,0x0a,0xb6,0xcb,0xe4,0xa9,0x0c, + 0x47,0xa9,0xb4,0x1d,0xe5,0x50,0x0e,0xf2,0xc0,0x72, + 0xd7,0x4d,0xd9,0x78,0xaa,0x0a,0xe9,0x9e,0xb5,0x9a, + 0x51,0x14,0xc5,0xb5,0x6d,0x06,0x3e,0x87,0xf3,0xa3, + 0x72,0x6e,0xf5,0xd7,0xa4,0x4d,0x94,0x92,0x40,0xe0, + 0x72,0x54,0x5f,0x80,0x04,0xbf,0xf6,0x83,0x7d,0x33, + 0xb9,0xf7,0x7a,0xbd,0xca,0x1d,0xa4,0x54,0xc9,0x91, + 0xab,0x39,0x91,0x9b,0xd5,0xe5,0xbb,0x5f,0x2f,0x21, + 0x38,0xea,0x0d,0x66,0xb4,0xac,0x62,0xd2,0x04,0x2a, + 0xb6,0x0f,0xa5,0x5b,0xe2,0x14,0x39,0x8e,0x80,0x12, + 0xdb,0x87,0xc9,0x0f,0xd4,0x9c,0xe9,0x6b,0xbb,0xc7, + 0x09,0xaa,0x3e,0x9d,0x09,0xea,0x54,0x11,0xa6,0x82, + 0x67,0xe2,0x2b,0xe9,0x35,0xdf,0x7c,0x91,0x9e,0xa7, + 0x6e,0x2b,0xf5,0x72,0x0a,0x6e,0x90,0xc4,0x7f,0x7d, + 0x7d,0x9d,0xd4,0xc6,0xb8,0x1a,0x01,0xb3,0x07,0xe1, + 0xbe,0x87,0x5f,0xaf,0xd7,0x91,0x24,0xbe,0x07,0xce, + 0x43,0x6d,0x49,0x9a,0x3e,0xbd,0x1a,0x01,0x78,0x2a, + 0xa4,0xa6,0x82,0x67,0xa3,0x05,0xa3,0xd7,0xdb,0xdf, + 0xb7,0xdb,0x07,0x2d,0x66,0x1e,0x13,0xa7,0x4e,0x3a, + 0x87,0xa4,0x05,0x7a,0xcc,0xfa,0x3d,0x86,0xef,0x72, + 0x36,0x46,0xa0,0xd3,0x35,0x6a,0xb1,0x06,0xd6,0x48, + 0x71,0xb0,0x28,0x79,0x73,0x29,0xc9,0x77,0x02,0x16, + 0xdc,0xe1,0x7e,0x09,0xe9,0x9d,0x0a,0xf5,0xc9,0x8c, + 0x38,0x4d,0x63,0x86,0xb3,0xbf,0x2e,0x11,0x78,0xec, + 0xfb,0x5e,0xc9,0xec,0xe9,0xfb,0x69,0xbf,0x6f,0xb8, + 0xae,0x81,0xfa,0xf0,0xf3,0x87,0xaf,0x24,0x20,0x47, + 0x62,0x7d,0xc9,0x8b,0x23,0x55,0x20,0x01,0x06,0x46, + 0x8d,0x02,0x25,0xea,0x75,0x31,0x31,0xfa,0x1d,0x25, + 0x6a,0x39,0x84,0x65,0x91,0x85,0xc6,0xac,0x9b,0xe0, + 0x54,0xb3,0x09,0x56,0x56,0x08,0xd4,0x4a,0x33,0x09, + 0xcb,0xca,0x85,0xf7,0x0e,0xfa,0xce,0x78,0x95,0xaa, + 0x2e,0xd7,0x93,0xa6,0x6a,0xa9,0x67,0xb4,0x4e,0x42, + 0xde,0x71,0xc4,0x0c,0xba,0x52,0x8a,0x44,0x29,0x1f, + 0xa8,0x6b,0x5e,0xf4,0xde,0x70,0x92,0x6b,0xb8,0x98, + 0x80,0x5a,0x90,0xe8,0x55,0x82,0xbd,0x27,0xbe,0x83, + 0xe3,0x76,0x84,0xf5,0x1f,0xcd,0x67,0x83,0x08,0xe9, + 0x5b,0xeb,0x85,0xd6,0x92,0x24,0xb6,0x94,0xd4,0x5d, + 0x8e,0x57,0xd6,0x2d,0x21,0x92,0x3f,0x5e,0xe2,0x2b, + 0x69,0xf2,0xd8,0xf9,0x42,0xea,0x01,0x76,0xfb,0x90, + 0xf5,0x9f,0xb9,0xff,0xf7,0xbd,0x7e,0x4b,0xab,0xc1, + 0xc9,0xac,0x98,0xda,0x92,0x0e,0x15,0x72,0x22,0xa1, + 0xb7,0xda,0xb4,0xf2,0xa5,0xdc,0x1a,0xe8,0x2d,0x81, + 0xa4,0xcd,0xe4,0x0a,0x1f,0x68,0x5d,0x15,0xad,0xbd, + 0x94,0x6c,0x5f,0x99,0x58,0x4b,0xb1,0xdb,0x39,0x7d, + 0xdb,0xea,0xdf,0x71,0x30,0x88,0xc0,0x3f,0xb4,0xec, + 0x6b,0xb2,0x2c,0x48,0x64,0xee,0x89,0x9f,0xe7,0xee, + 0x53,0x69,0x11,0xce,0x3c,0x94,0x50,0xe5,0x14,0x5f, + 0x5d,0x02,0xaf,0x00,0x82,0x6b,0xf3,0x4e,0xc9,0x17, + 0x71,0x21,0x37,0x6d,0x35,0x9a,0x54,0x06,0xb2,0xbc, + 0x35,0xec,0xd5,0xef,0x22,0x53,0x51,0xd2,0xb6,0x22, + 0x0a,0xc4,0x56,0x9a,0x80,0xce,0x0c,0xa5,0x6f,0x7c, + 0xd2,0x62,0xa4,0x6b,0x7f,0xbd,0x5e,0x4f,0x12,0x34, + 0x05,0x3d,0x4d,0x3c,0xc2,0x83,0x2e,0xd7,0x83,0x4b, + 0xd0,0x59,0xaa,0xee,0x06,0x0f,0xa1,0x37,0x3b,0x01, + 0xa3,0x21,0x13,0x33,0xef,0x84,0x2e,0xb9,0xef,0xdb, + 0x98,0xb8,0xd1,0x14,0x5b,0x42,0x57,0x74,0x02,0xc4, + 0x21,0x29,0xa9,0x82,0x9b,0x16,0x84,0x0b,0xf4,0xfd, + 0xfd,0xa4,0x7b,0x70,0x55,0x18,0xad,0x99,0x3b,0x12, + 0x9b,0xc4,0xaa,0x1c,0xdf,0x8a,0x82,0x82,0x69,0x67, + 0xd1,0xf7,0x8d,0xee,0xd6,0x5b,0xe5,0x62,0x68,0x51, + 0x44,0xb1,0xae,0x64,0x5f,0x01,0xed,0xa0,0xda,0x20, + 0x9f,0x1a,0xd4,0x36,0xad,0x0d,0x52,0xf3,0x4d,0xae, + 0xd6,0xed,0x1d,0x97,0x4e,0x3e,0x4d,0x05,0x82,0x19, + 0xb3,0xad,0x66,0xc6,0x5a,0x0e,0xfa,0x27,0x65,0xf2, + 0x04,0xb3,0x3b,0x6e,0xcf,0x35,0xe8,0x67,0xa5,0xf7, + 0x2d,0xc9,0x7b,0x25,0x94,0x8d,0x8a,0x02,0x07,0xb9, + 0xab,0x1b,0xbc,0xe3,0x23,0x76,0x04,0x17,0xd4,0x79, + 0xad,0x27,0x61,0x4a,0x9e,0xd3,0xc4,0x66,0x52,0xde, + 0x75,0x6d,0x7f,0xe2,0x1d,0x05,0xa5,0xe6,0xf4,0x1e, + 0x47,0xc7,0x7b,0x87,0x4c,0x6f,0x29,0x15,0x2a,0xbf, + 0x40,0x89,0x9c,0x9b,0x3c,0x4b,0xed,0x9e,0x1e,0xc3, + 0xc8,0xbf,0x4a,0x5f,0x86,0x13,0xfa,0xa5,0x16,0x28, + 0x15,0x86,0x7a,0x7d,0x34,0x8d,0xe5,0xd6,0x1d,0xdd, + 0x5b,0x1a,0x64,0x48,0xbf,0xeb,0x62,0x55,0x98,0x6a, + 0x1b,0x2d,0x98,0xc8,0x56,0xca,0x75,0x3e,0x88,0xfb, + 0x93,0x5a,0xeb,0x30,0x31,0x67,0xe3,0x7a,0x4b,0x4c, + 0xff,0x91,0x56,0x98,0x78,0x17,0x69,0xe1,0x4e,0xb0, + 0x69,0x82,0x1b,0xdd,0x46,0xeb,0x84,0x2c,0x50,0xe6, + 0x8d,0xbc,0x8d,0xae,0x6e,0xaa,0xc1,0xf9,0x93,0x83, + 0x2a,0xf1,0x0b,0x5c,0x70,0x9c,0x34,0x7a,0xa4,0x3a, + 0x2d,0x4a,0x1e,0xfb,0xe7,0x77,0xab,0x05,0x77,0x20, + 0xb7,0x6c,0xbf,0xa8,0x85,0xa1,0xaa,0xaf,0x69,0xa2, + 0x8a,0x44,0xc6,0x34,0xf3,0x76,0xcf,0x67,0x33,0xd1, + 0x93,0xc4,0xd9,0x36,0xa2,0x62,0xc4,0x95,0xa2,0xf7, + 0x6a,0xde,0x65,0xc1,0x7a,0x2d,0xe0,0x4f,0xe0,0x74, + 0xd6,0x24,0x42,0xa9,0xc9,0x5e,0xd0,0xb4,0x79,0xf3, + 0x98,0x53,0x84,0xd3,0xb4,0x5c,0x2b,0xb5,0xae,0x1c, + 0xfa,0xd5,0x11,0x0d,0x43,0x94,0xb7,0x1c,0x9f,0x4d, + 0xf5,0xd9,0xb9,0x45,0xa4,0x50,0x9c,0x08,0xcc,0x54, + 0xb1,0xeb,0x44,0x15,0x21,0x5c,0x97,0xd8,0x7b,0x4c, + 0x15,0x66,0xd0,0xe3,0xb2,0x88,0x1a,0xf9,0xdc,0x39, + 0x55,0xdd,0x44,0x1c,0x86,0x7b,0x2d,0x3a,0x14,0x54, + 0x99,0xde,0x24,0xe8,0x35,0x1c,0x06,0x2e,0x36,0x17, + 0xa0,0x2e,0x35,0x29,0xe8,0x4e,0x42,0x9e,0x8e,0xe4, + 0x9c,0x54,0xd3,0x1d,0xa2,0xe7,0x54,0x97,0x43,0x82, + 0xeb,0x2c,0x36,0x30,0x3e,0x51,0xd1,0x4e,0x5c,0xcb, + 0x74,0xf6,0xb9,0xe2,0x3a,0x09,0x8d,0x0e,0x7c,0xd8, + 0xc8,0xf1,0x73,0xf2,0x24,0xee,0x3c,0x1b,0x26,0x79, + 0x1d,0xe2,0x56,0x7a,0x76,0x91,0xd2,0xf9,0xe4,0xba, + 0xee,0x9e,0x19,0x4c,0x25,0x46,0x13,0x54,0xe2,0xcb, + 0x4e,0x1d,0x27,0x4d,0x96,0x14,0xbd,0xbd,0xd7,0x4a, + 0x4a,0x1e,0x5f,0xdd,0x4c,0xcf,0x41,0x62,0xe1,0x01, + 0xd7,0xa6,0x27,0x39,0xb5,0xc3,0xf4,0x3b,0xee,0x83, + 0x60,0x12,0x64,0xdc,0x78,0xc1,0x6c,0x38,0x42,0x1a, + 0xe0,0x0c,0x71,0xb8,0xa6,0x40,0xe0,0x02,0x93,0xe3, + 0x18,0x6d,0x89,0x8c,0xd4,0xca,0x4b,0x9b,0x2b,0x29, + 0x61,0x6a,0xdf,0x7a,0x23,0x2d,0x30,0xa9,0x7b,0x83, + 0x3e,0x46,0x4d,0x09,0x09,0x05,0x69,0x32,0x81,0x25, + 0x7e,0x83,0xb3,0xd8,0x08,0x6d,0xa1,0x82,0x24,0x97, + 0x04,0x21,0x91,0xa3,0x43,0xb6,0x29,0xfa,0x7b,0x46, + 0x50,0x10,0x35,0x84,0xfa,0xb3,0xd4,0xc4,0xa9,0x8b, + 0xf0,0xb9,0xff,0x39,0x4d,0x9f,0x44,0xf4,0x55,0xbd, + 0xa0,0x0f,0xe1,0xe4,0x88,0xc2,0x7c,0x42,0x96,0x26, + 0x84,0x8e,0x82,0x95,0xdb,0xeb,0xd2,0x9e,0x89,0xda, + 0x40,0x0b,0x98,0xfc,0xed,0xf9,0xf5,0x11,0x64,0x47, + 0xb0,0x5c,0x88,0xd4,0x95,0x72,0x33,0x34,0x38,0x13, + 0xec,0xef,0x46,0xe4,0x13,0xf9,0xd8,0x4d,0x6e,0x9a, + 0xa4,0x9b,0xa6,0x2a,0x0b,0x0e,0x95,0x72,0x88,0x60, + 0x47,0x78,0x41,0x59,0x1d,0x51,0xa0,0x8d,0x2c,0x86, + 0x72,0x6f,0xd2,0xf9,0xd2,0x9f,0xe9,0xe4,0x19,0x69, + 0xcc,0x40,0xc7,0x62,0x37,0xb5,0xa8,0x1c,0x42,0xe1, + 0x92,0x09,0xf2,0xe2,0xfa,0x04,0x55,0xa3,0xbd,0x93, + 0x26,0x86,0x87,0xd6,0xf4,0x83,0x9b,0x43,0x7b,0x64, + 0xb2,0xc8,0xd8,0x68,0xa6,0x25,0xfd,0xbe,0xc0,0x39, + 0xaa,0x2d,0x27,0x75,0xc1,0xe5,0xd3,0x77,0xff,0xb3, + 0xd7,0x5f,0x6a,0xfe,0x97,0x0e,0xf1,0xb4,0xf0,0xd2, + 0xc3,0x56,0xa7,0x6d,0xfd,0x79,0x32,0xec,0xec,0xc1, + 0x24,0x29,0x91,0x12,0x27,0xc1,0x3d,0xa8,0x69,0x3a, + 0x69,0x9a,0x62,0xd3,0xeb,0x9e,0x2c,0x38,0x88,0xf7, + 0x34,0x55,0x3c,0x00,0xaf,0xe3,0x67,0xa7,0x3e,0xf7, + 0x96,0xbc,0x78,0x05,0x5d,0x17,0x33,0xf1,0xb0,0xb2, + 0x48,0x48,0x5c,0x08,0x52,0x2b,0x76,0x55,0x4c,0x22, + 0xa6,0x37,0xb8,0xda,0x06,0x5c,0xd7,0x8b,0x77,0x2d, + 0xb7,0xbe,0x0e,0x93,0x7f,0xcd,0x64,0x5e,0x4a,0x23, + 0xbc,0xd4,0x01,0xa3,0xa4,0xbc,0x27,0xc7,0xce,0x44, + 0xb3,0x13,0x6c,0xa9,0x25,0x46,0x88,0x4f,0x4a,0x78, + 0xdc,0x14,0x1c,0x71,0x43,0x36,0x31,0x60,0xf3,0x67, + 0x93,0xc7,0x57,0x42,0x55,0x1d,0x62,0x48,0x09,0xda, + 0x22,0x21,0xaa,0x34,0xf1,0xf9,0x06,0x05,0x99,0xf5, + 0xab,0x3c,0x2c,0x9a,0xf0,0xd4,0x76,0x97,0x16,0x2b, + 0x13,0xb2,0x1e,0x12,0xc7,0x9a,0xc8,0xae,0x1b,0xdf, + 0x36,0x42,0xdf,0x5d,0x2b,0xaa,0x23,0xef,0x90,0x70, + 0xdb,0x42,0x49,0xa6,0x50,0x6b,0x4a,0xa4,0x5d,0xcb, + 0xc6,0x0d,0x73,0x28,0xba,0xab,0x09,0x9c,0x43,0xa5, + 0xf4,0x9a,0xbb,0xd0,0x62,0x4a,0xe8,0x9c,0x9e,0x16, + 0xe9,0xb9,0x51,0xc2,0x92,0xba,0x0c,0x9b,0x0e,0x48, + 0x6a,0x7b,0x6e,0xe2,0xb1,0x6b,0xc9,0xd2,0xbb,0x48, + 0x34,0x08,0xc7,0x31,0x9a,0x92,0x95,0x89,0x3a,0xb2, + 0x6d,0xe5,0x4e,0xcf,0x83,0x92,0xe1,0xdf,0x1b,0xf2, + 0x90,0x0b,0xa6,0xc9,0x01,0x77,0x2b,0x4b,0x9f,0x20, + 0xd7,0xcd,0x64,0x17,0x4d,0xa7,0x84,0x44,0xea,0xc1, + 0x42,0x27,0x5e,0xc3,0x14,0x18,0x74,0xd2,0x64,0xd2, + 0x3d,0xd9,0xb4,0x14,0x9a,0x5d,0x43,0x91,0xa1,0xa9, + 0xfb,0x33,0x17,0x98,0x15,0x7d,0x20,0x3e,0xc1,0x02, + 0x01,0x28,0x27,0xd8,0xf8,0xeb,0xd7,0x2f,0xdd,0x28, + 0x28,0x7c,0xb8,0xe1,0xdd,0xb8,0x71,0x62,0x07,0x5f, + 0xa7,0x31,0xcd,0x34,0x99,0x91,0xa6,0x8e,0xa6,0x0a, + 0x88,0x90,0x33,0x6a,0x43,0xa6,0xf6,0xa1,0x4b,0xe0, + 0xc2,0xba,0x7b,0x8c,0xcb,0x26,0x48,0x3b,0xf9,0x83, + 0xd1,0x34,0x1b,0x25,0x20,0x4e,0xd4,0xd3,0x79,0xee, + 0x4d,0x87,0x24,0x8d,0x24,0x2f,0xda,0x6b,0x58,0x35, + 0x92,0x66,0x8e,0x89,0x19,0xf7,0xf5,0x9f,0x84,0x1a, + 0x93,0xa5,0x82,0x3b,0x44,0xd4,0x16,0x45,0x2d,0x2b, + 0x9c,0x39,0x6f,0x55,0x9d,0x8e,0xd6,0x48,0x7b,0xff, + 0x67,0x62,0x26,0x59,0x3b,0x98,0xc2,0xcd,0x7e,0xf7, + 0x90,0x90,0x3e,0xac,0x00,0xdc,0x64,0x8c,0x4e,0x58, + 0x39,0xbe,0x0d,0x9d,0x01,0x90,0xe0,0x9f,0x44,0x5d, + 0xa0,0x51,0xf6,0x16,0x0b,0x8f,0xbe,0x77,0xda,0xa7, + 0xe4,0x1a,0xe0,0xda,0x61,0x89,0xfe,0xe1,0x12,0x72, + 0xf5,0x15,0x74,0xe8,0x64,0x3a,0x0b,0x61,0x1a,0x54, + 0xd7,0x59,0x9d,0x7f,0xfe,0xd1,0x98,0x7e,0x0c,0x72, + 0x77,0x12,0x7a,0xe4,0x26,0xe2,0x68,0xb8,0x06,0xce, + 0x42,0x37,0x49,0xf6,0x98,0xda,0xd3,0x29,0x45,0xda, + 0xaf,0xa1,0xe8,0xb7,0x76,0x2c,0x84,0x96,0xdf,0x1d, + 0xab,0x4d,0x32,0xe9,0x62,0x43,0xff,0xd9,0xd7,0x84, + 0x46,0x50,0x4f,0x0f,0x84,0x93,0x8a,0xda,0x2b,0x0e, + 0x46,0x0e,0x6d,0x86,0xe8,0xbe,0xab,0xba,0x02,0x69, + 0xc4,0xf9,0x62,0x41,0xb0,0x28,0xb6,0xa6,0x24,0x6b, + 0xcd,0x8a,0x25,0x20,0xd9,0x36,0x99,0x13,0xbe,0xa3, + 0xa9,0x20,0xda,0xc0,0x93,0x06,0x43,0x22,0xca,0x4d, + 0x8b,0x83,0xd8,0xf6,0x53,0x6f,0x3a,0xe9,0x76,0xb8, + 0xea,0x88,0x84,0xdf,0x48,0xa4,0xac,0xa1,0x7b,0x95, + 0x50,0x31,0x57,0x9d,0x51,0x2b,0x01,0x36,0xd2,0x65, + 0x08,0xab,0x04,0xbb,0x17,0x8d,0xfa,0x3b,0x21,0x3a, + 0x25,0xbc,0x92,0x28,0x61,0xe2,0x3d,0xa5,0x36,0x92, + 0x72,0x1f,0xa8,0x72,0xee,0xad,0xb1,0xa9,0x82,0x72, + 0xdc,0x9a,0x09,0x42,0xdf,0x22,0x41,0xd2,0x42,0x2c, + 0x37,0x21,0x46,0x88,0xc8,0xc6,0x06,0x86,0xa0,0x7a, + 0x75,0xb7,0x9f,0x0c,0x74,0xcd,0x73,0x88,0x15,0xb0, + 0x4e,0xaa,0xc1,0xb3,0xf8,0x69,0xad,0x7f,0x2b,0x3c, + 0xa3,0xe5,0x8c,0xd9,0xdf,0x15,0x5a,0x12,0xa4,0xd7, + 0x52,0xc1,0x76,0xa4,0x88,0xb3,0xa1,0x93,0x81,0x2e, + 0xf6,0x51,0x1c,0x73,0x36,0x37,0x74,0x30,0xab,0xf2, + 0x36,0xc5,0xd1,0xe4,0x45,0x98,0x6c,0x2f,0xb4,0x2d, + 0x95,0x0e,0x46,0xb7,0xef,0x93,0xc4,0x00,0x4d,0x18, + 0x6f,0xba,0x09,0x1b,0x6d,0x3b,0x12,0x3d,0x4c,0xc3, + 0x43,0xae,0x18,0x4a,0xc5,0xbd,0x4e,0x87,0xa6,0xf3, + 0xd8,0x0d,0xc2,0xb8,0x44,0x67,0x73,0x76,0x38,0xa1, + 0xca,0x94,0x7b,0x6c,0xcc,0x51,0x27,0xf9,0x8c,0xa4, + 0xe7,0x57,0x55,0xd7,0x6f,0xd5,0x64,0x49,0x48,0xc7, + 0x14,0x8c,0x14,0x59,0x21,0x21,0x45,0xad,0x26,0x9b, + 0x12,0x65,0x91,0x4e,0xc0,0x56,0xd1,0x53,0x1f,0x60, + 0x57,0xb9,0x54,0x3e,0x06,0xf5,0xd5,0x1d,0xba,0xe3, + 0x04,0xbd,0x3e,0xe1,0x4f,0x4c,0x50,0xa6,0xeb,0x5d, + 0xf7,0x2a,0x63,0xe1,0xe5,0x85,0x48,0xd8,0x94,0x14, + 0x2e,0xb8,0x51,0x57,0xaa,0xe0,0xdc,0x3d,0x88,0x26, + 0x05,0xa2,0x2d,0xca,0x43,0x98,0xda,0x32,0x00,0x43, + 0x93,0x08,0x1a,0x8d,0xdd,0xd2,0xa4,0x62,0x05,0x41, + 0x40,0x7a,0x2e,0x35,0xa1,0x1f,0x53,0x9f,0xde,0xc9, + 0xea,0xbb,0xc9,0x40,0x59,0x0f,0xd1,0x15,0x9e,0x0e, + 0x48,0x72,0x92,0xbe,0xff,0x73,0x30,0xac,0x5d,0x0f, + 0x48,0x5c,0x5e,0x60,0x6d,0xac,0x9e,0x01,0xad,0xfc, + 0xf9,0xaa,0xc9,0xf9,0x7a,0xb2,0x49,0x68,0x87,0xf4, + 0x03,0xd9,0xe0,0xa5,0x5e,0x27,0x1d,0x00,0xad,0x58, + 0x3a,0x01,0xa1,0x76,0xa6,0x9c,0x16,0x29,0x01,0x21, + 0xce,0x43,0xfb,0x08,0x0e,0x0d,0x57,0xa9,0x27,0xae, + 0x95,0xd5,0x3c,0xba,0xff,0xdc,0xec,0xe7,0x87,0xae, + 0xce,0x84,0xaa,0x52,0x2b,0x6e,0xab,0xe9,0xe4,0x7e, + 0x4f,0x28,0x10,0x0e,0xc9,0xfa,0x41,0x27,0x84,0x33, + 0x76,0x28,0xd1,0xbe,0xd1,0xa7,0x6f,0xf5,0xe3,0x07, + 0xf2,0xe2,0x74,0x8b,0xf4,0xf3,0xbe,0x65,0x1c,0xce, + 0xd4,0xfe,0x99,0xb8,0x3c,0xe4,0xbd,0xd5,0xcf,0xb7, + 0xa5,0xe1,0x38,0x26,0x13,0xae,0x23,0x32,0x99,0x19, + 0x27,0x44,0x4e,0x0d,0x9a,0x37,0x0a,0xd7,0x81,0x2a, + 0x11,0x91,0x58,0x49,0x60,0xcf,0x26,0xe1,0x7c,0x8b, + 0x87,0xa9,0x8f,0x47,0xca,0x9a,0x13,0xca,0x33,0xf5, + 0xf9,0x1d,0x94,0xbe,0x49,0x22,0xe8,0x90,0x77,0x49, + 0x56,0x3a,0x74,0x27,0xee,0x8a,0x12,0xe5,0xa8,0x0a, + 0x4f,0x44,0xb6,0x34,0x52,0x3c,0x4d,0xdd,0x50,0x82, + 0x40,0xf0,0x12,0xb1,0xec,0xf5,0x10,0x1c,0x24,0x08, + 0x62,0x55,0xa0,0x3f,0x47,0xd6,0x12,0xf4,0x8c,0x93, + 0x7e,0x11,0x20,0x8f,0xb5,0x71,0xa4,0xee,0x68,0x4e, + 0x52,0x27,0x4d,0x95,0xe9,0x44,0x4c,0xa4,0x36,0xad, + 0x7b,0x16,0x7d,0xaa,0x2b,0xf0,0xcd,0x70,0x80,0x20, + 0x11,0xdf,0xb5,0xd2,0xee,0xc9,0x84,0x43,0xb8,0xa6, + 0x84,0x55,0xae,0xa7,0xa8,0xfa,0xd5,0x75,0x3d,0xa8, + 0x27,0x57,0x48,0x3c,0x2d,0xe7,0xcf,0x1d,0x84,0x49, + 0xc3,0xa7,0x7f,0xc1,0x76,0x6f,0x53,0x22,0x34,0x91, + 0x32,0x13,0x1a,0x97,0xf6,0x1f,0x89,0x6d,0x26,0x41, + 0xc1,0x0d,0xe2,0x66,0x90,0x9d,0xa2,0xbf,0x9b,0x7c, + 0xc4,0x5c,0x4c,0x51,0xff,0xc4,0x30,0xb2,0x4d,0x87, + 0x72,0x81,0x58,0xe1,0x78,0x36,0x4c,0xe3,0xeb,0x8e, + 0x47,0x34,0xb5,0xc0,0x36,0xb4,0x08,0x2a,0xf8,0xa7, + 0xf6,0x3d,0x91,0x7b,0x29,0x01,0x04,0xed,0x30,0x44, + 0x5e,0x92,0x8c,0x07,0x51,0x04,0x36,0x32,0x2f,0x13, + 0x05,0x20,0x91,0xa9,0x07,0xb4,0x39,0xc6,0xa0,0x34, + 0xc4,0x44,0xd7,0x99,0xf6,0xb1,0x5e,0x9f,0x4a,0x17, + 0xa4,0x69,0xef,0x87,0x19,0xea,0x74,0xf3,0x2a,0xd8, + 0xe5,0x12,0x06,0x0a,0x8c,0xe9,0xc5,0x24,0xd8,0x91, + 0xb8,0x25,0x14,0x90,0xa9,0x6d,0xe7,0x3e,0x7f,0x18, + 0xa5,0x1e,0x37,0x0b,0x2d,0x38,0x07,0x91,0xba,0xdf, + 0xbb,0x45,0xff,0x26,0x18,0x73,0x23,0x3e,0xf9,0x37, + 0x68,0x54,0xf2,0x98,0x21,0xb4,0x2e,0x21,0x50,0x66, + 0x3a,0xa9,0xd4,0x3b,0x4d,0x61,0xe6,0xd4,0xe6,0x4c, + 0x89,0xc3,0xf2,0xf0,0x20,0xf1,0xca,0x82,0x11,0xd8, + 0x02,0xc8,0x9b,0xda,0x13,0x0f,0x33,0xd5,0x44,0x6e, + 0xd5,0xdf,0x03,0x21,0xb5,0x87,0x05,0x83,0x91,0xb5, + 0xaf,0xc4,0x39,0xd0,0x04,0x4b,0x93,0x71,0x33,0x3e, + 0x8c,0x87,0x13,0xb5,0xbf,0x7b,0x32,0x42,0x63,0xe4, + 0x13,0x62,0x38,0x69,0x4a,0x11,0x29,0x5a,0x12,0xd7, + 0x9e,0x0c,0xd5,0x56,0x84,0x55,0xd0,0xa6,0x72,0xe8, + 0x31,0x68,0x38,0x15,0x1d,0x1e,0xda,0x7e,0xd2,0xf8, + 0xe2,0xf8,0x62,0xa6,0x38,0x88,0x44,0xfa,0x3e,0x4d, + 0x96,0x6c,0x26,0x44,0x7d,0x1a,0x5b,0x85,0xae,0x75, + 0x14,0x78,0x24,0x57,0x2a,0xc2,0x5c,0x01,0x3a,0x49, + 0x1f,0x5c,0xe0,0x03,0x39,0x89,0x25,0xea,0x01,0x98, + 0x48,0xbb,0x5a,0xa0,0xb9,0x7d,0xe9,0x90,0xec,0xa4, + 0x59,0xe6,0xf6,0x94,0x4b,0xf2,0xb7,0xbc,0x14,0x97, + 0x48,0x6b,0x4c,0xbc,0x27,0x41,0x1d,0xca,0xea,0x92, + 0x0e,0x3a,0x73,0xa4,0x15,0xfd,0x98,0xfc,0x9b,0x10, + 0xf8,0x4e,0x4d,0xd0,0x73,0xba,0x9f,0x7d,0xb4,0x9f, + 0xd2,0x5a,0x48,0xb1,0xdf,0x51,0x4e,0x68,0xdd,0xb8, + 0x35,0x42,0xe7,0xd7,0x8b,0xa0,0x35,0x37,0x8a,0x99, + 0x0e,0xd0,0x41,0xfb,0xc1,0xc1,0xaa,0x96,0xf7,0xd1, + 0x13,0x18,0x72,0x93,0x75,0x36,0x00,0x2e,0x38,0xa5, + 0x6a,0x4c,0xa1,0xb6,0x34,0xee,0xe7,0x14,0x95,0xb5, + 0x6a,0x22,0x28,0xb8,0xdd,0x4f,0x0c,0x16,0x93,0xba, + 0x6d,0x1a,0x61,0xa7,0x7b,0x75,0x7a,0x0e,0xa4,0xec, + 0xe9,0x78,0x04,0xa9,0xfa,0x74,0x2d,0x48,0x98,0x3c, + 0x9a,0xaa,0x8c,0x95,0xc0,0x18,0x1d,0xd2,0x4e,0x04, + 0xcb,0x11,0x76,0x27,0x2e,0x11,0xa1,0x94,0x1f,0xde, + 0x8b,0x1d,0xdf,0x74,0xd2,0x11,0x7d,0x7d,0xd3,0xfa, + 0x71,0x07,0x91,0xab,0xee,0x1d,0x6f,0x85,0x12,0xd4, + 0xbe,0xe6,0x37,0xda,0x27,0x26,0xf9,0xaa,0xee,0x25, + 0x35,0x09,0x8f,0x4d,0x55,0x9d,0x8a,0x71,0x26,0xc4, + 0x2d,0x71,0x05,0xd5,0xc3,0xeb,0x13,0x44,0xd9,0xf1, + 0x12,0x82,0x01,0x66,0x25,0x94,0x46,0xb9,0x83,0xa9, + 0x7d,0x01,0x89,0x9a,0x75,0x3e,0xef,0x86,0x94,0xd4, + 0x3a,0xd9,0xec,0x0f,0x1d,0x99,0x4f,0xad,0x08,0x98, + 0x84,0xb4,0xff,0x2d,0xeb,0xd8,0x09,0x29,0x5a,0x89, + 0x08,0x42,0x29,0x1c,0xb2,0x04,0x3c,0xad,0xcd,0xcf, + 0xb9,0x04,0xaa,0x4c,0x22,0x5b,0x60,0x04,0x8c,0xc5, + 0xdd,0x80,0xb4,0xd4,0x84,0x76,0x2c,0xf6,0x29,0x9e, + 0x61,0x32,0xb0,0x30,0xf2,0x9b,0x16,0x82,0x88,0xee, + 0x5a,0x6a,0x2a,0x98,0xb7,0x45,0xc7,0x84,0x2e,0x91, + 0xdc,0xc5,0x86,0x13,0x48,0x0a,0xf0,0x93,0x3f,0xe7, + 0xcb,0x4d,0xb6,0x24,0x41,0xc4,0x80,0x8c,0x44,0x5d, + 0x90,0x49,0x08,0xce,0xb8,0xbc,0xe2,0x82,0xd0,0xfe, + 0x6f,0xe8,0x53,0xba,0x6c,0xb8,0x54,0x34,0x09,0x12, + 0xb1,0x22,0x5e,0x03,0xf5,0xd4,0x53,0x06,0x3f,0x09, + 0x66,0x4d,0x8b,0x89,0x12,0x0d,0x7a,0x2f,0x5d,0xff, + 0xc6,0x69,0x6b,0x38,0x25,0x4d,0xc7,0x89,0x70,0x24, + 0x73,0x92,0xe8,0x17,0x24,0x23,0xf2,0x79,0x52,0xdb, + 0x83,0x04,0x0b,0x13,0xfc,0xac,0x9f,0x0d,0x6d,0x2d, + 0x3a,0x09,0x0b,0x90,0x86,0x4a,0x07,0xe2,0x86,0x13, + 0x95,0xaa,0x58,0xb2,0xcf,0x80,0xe0,0x58,0x43,0x3f, + 0xdf,0x16,0x2b,0xea,0xe0,0xdc,0x13,0x98,0x29,0x48, + 0x88,0xd4,0x43,0xa5,0xc3,0xbc,0x73,0x96,0x36,0x42, + 0x7d,0x04,0x9b,0x3b,0x49,0x82,0xf4,0xec,0x03,0xc7, + 0xab,0x3e,0x49,0xc6,0xd3,0xe8,0x3c,0xc5,0x10,0x97, + 0x00,0xa8,0xb6,0x97,0x5b,0xf3,0xba,0xae,0x1c,0xf1, + 0xd9,0x51,0x0d,0x12,0xe7,0xc9,0x55,0xfe,0xca,0x21, + 0xec,0xd7,0x48,0xfc,0xa7,0x44,0xac,0x76,0xc9,0x2b, + 0x25,0xb0,0x84,0x8e,0x6e,0x92,0xa9,0x8e,0xca,0x6d, + 0xda,0x83,0x69,0x58,0x86,0x62,0xcc,0xa7,0x45,0x51, + 0x12,0xcc,0xd5,0xf1,0xfa,0x69,0x78,0x87,0xe2,0x43, + 0x42,0x8c,0xa8,0x10,0xd8,0x8a,0x7e,0x52,0xd1,0xdd, + 0xcf,0xfc,0x49,0xfa,0x24,0x75,0x00,0x74,0x4d,0xb8, + 0x3d,0xdb,0x75,0x78,0x34,0xc7,0xd0,0x62,0x3d,0xb5, + 0x14,0x27,0x54,0x29,0x15,0xf9,0x1d,0x3d,0xbe,0xae, + 0xeb,0x9f,0x31,0xf8,0x3b,0x20,0x4e,0x5e,0x1d,0x29, + 0x73,0x9d,0x7a,0x7b,0x34,0x4e,0x4f,0x3d,0x4f,0xfa, + 0x6c,0xb7,0x08,0x53,0xa5,0xbe,0x19,0xf5,0x26,0x55, + 0x4c,0x25,0xfe,0x6d,0x7c,0xbb,0xe8,0xe5,0x24,0x02, + 0x9c,0x43,0xb1,0x5a,0x6b,0xaf,0x12,0x93,0xde,0x79, + 0x48,0xa5,0x56,0x19,0x8d,0x28,0x12,0x89,0x71,0xd3, + 0xb7,0x4d,0x81,0x9a,0x5a,0x46,0x21,0x41,0xb5,0x3c, + 0x06,0x48,0x8c,0xe8,0x9e,0xb1,0xda,0xa4,0xaa,0x2f, + 0x25,0x5c,0xc6,0x96,0xa3,0x3a,0x3f,0x22,0xf1,0x6e, + 0x26,0xfe,0x87,0x56,0xe3,0x8e,0xd3,0xa3,0x88,0x69, + 0x6a,0x79,0x25,0x3e,0x8c,0x4a,0x0d,0x84,0xd1,0x6d, + 0xfb,0xb9,0xd3,0xba,0x70,0x45,0xc8,0xd4,0x42,0x4e, + 0x15,0x9d,0xdb,0xcb,0x9f,0x70,0x67,0xda,0xfa,0x38, + 0x53,0xdb,0x2d,0x8d,0x8a,0xc3,0x35,0xbe,0x11,0x34, + 0x03,0x11,0xfc,0x40,0x0c,0x2d,0x77,0x5d,0x8b,0x29, + 0x3b,0x1c,0xbd,0xd7,0x11,0x61,0x31,0x4b,0x3e,0xce, + 0x44,0xf9,0x1e,0xd1,0x37,0x88,0xd8,0xa1,0x43,0xdf, + 0x14,0x99,0x67,0x3a,0x2b,0xda,0x3a,0x3f,0x9a,0xb8, + 0xb9,0xef,0x72,0xb2,0x2b,0xc0,0xbb,0x71,0xa4,0xe4, + 0x88,0xe6,0xf6,0xe7,0xd5,0xb9,0xdf,0x34,0xf8,0x32, + 0x0c,0x1a,0x4c,0xe8,0xe2,0x46,0x6d,0xba,0xce,0x39, + 0x47,0x86,0x7f,0xec,0xf8,0x3a,0xbd,0x0f,0xfa,0x8e, + 0xa4,0xd7,0x97,0xdc,0x1d,0xb6,0x1a,0x52,0x8b,0xee, + 0xcf,0xcf,0x03,0x26,0x52,0xf4,0x30,0x7c,0xf3,0x18, + 0x0e,0x08,0xef,0xd9,0xae,0xc5,0xf0,0xfe,0xdf,0xbd, + 0xc0,0xd4,0xcc,0x0d,0xaa,0xd9,0x22,0xd2,0x34,0xc8, + 0xcc,0xc7,0x16,0x8e,0x1e,0x5a,0x1b,0x01,0xb0,0x2d, + 0x14,0xb7,0x1d,0xa7,0x74,0x68,0xc1,0x86,0xa8,0x3b, + 0xc0,0xe0,0xb6,0xcd,0xe3,0x1c,0xdc,0x09,0xba,0xdc, + 0x8c,0x18,0xa7,0x4a,0x34,0x21,0x30,0x09,0x7a,0x4c, + 0x28,0x93,0x32,0xef,0xdd,0xfb,0x4f,0x9b,0x67,0x01, + 0x01,0x57,0xba,0xef,0x94,0xc8,0xa6,0x56,0x89,0x0a, + 0x9b,0x4d,0x64,0xec,0x24,0x78,0x48,0x95,0x60,0x10, + 0x91,0xac,0x80,0xf4,0x95,0x72,0x7d,0x1c,0xea,0x18, + 0xbe,0xa3,0x26,0x38,0x9b,0x10,0xa4,0xb4,0x5e,0xef, + 0x9b,0xd4,0x36,0x08,0xa9,0xff,0x6e,0x92,0x7f,0x31, + 0x73,0xed,0xa3,0xef,0x6f,0x3c,0x1e,0xf0,0xd0,0x1a, + 0xd1,0xb6,0xb0,0xae,0x1e,0xdc,0xaa,0xe1,0x9f,0xba, + 0x06,0x9f,0x39,0x57,0x9c,0xb8,0xfd,0xa7,0xf6,0x09, + 0x93,0x45,0x85,0x6b,0x19,0x91,0xb4,0xc3,0xd6,0x11, + 0x7b,0x4a,0x2e,0x37,0xe8,0x08,0xad,0xe3,0x60,0xb2, + 0x19,0xf9,0x3d,0xf4,0x2e,0x9d,0x16,0x58,0x7b,0xff, + 0x35,0xc5,0xb8,0xc0,0x59,0xaa,0x8d,0xf9,0xa8,0x3b, + 0x87,0xa6,0xc2,0x42,0x9f,0xa3,0x23,0xf9,0x4f,0x6b, + 0xd5,0xa1,0x64,0x06,0x41,0xae,0x84,0x54,0xb9,0x96, + 0x2e,0xed,0x95,0x24,0x08,0x4c,0x5d,0xa1,0xb4,0xc7, + 0xbb,0x98,0x65,0x92,0x11,0x20,0x5a,0x49,0xa2,0x00, + 0xa4,0x16,0x1d,0x21,0xc4,0xf2,0xd9,0xe5,0xf6,0xe7, + 0x8f,0x0e,0x50,0x52,0xc7,0xa5,0x97,0xb1,0x99,0xc0, + 0x72,0xd5,0x5b,0x1b,0x31,0x8c,0x6d,0x01,0xa7,0x18, + 0xea,0x94,0x9f,0x53,0x4b,0x85,0x92,0xbb,0x29,0xb0, + 0xa5,0x29,0x01,0x42,0xb1,0xda,0x02,0xae,0x0f,0x04, + 0xa0,0xb0,0x0a,0x4f,0x87,0xd9,0xa6,0x27,0x0a,0xb0, + 0x6d,0x75,0xe8,0xdb,0x5d,0x6f,0x40,0x56,0x6a,0x38, + 0x60,0x1f,0x3d,0xe3,0xb4,0xc9,0x37,0x04,0x68,0xa9, + 0x12,0x93,0x9f,0x93,0xba,0x9a,0x8f,0x55,0x98,0x43, + 0xfc,0x7b,0x10,0xec,0x6b,0x74,0x39,0xa2,0x5b,0xee, + 0xd0,0x9b,0x0a,0x00,0xe5,0x02,0xb9,0x40,0xa6,0xaa, + 0xe3,0x6e,0xe2,0x66,0x48,0x6e,0x2a,0x21,0x6c,0x0e, + 0x8d,0xd2,0xf5,0x29,0xce,0xe7,0x11,0xb1,0x90,0x24, + 0xaa,0xeb,0x0a,0x55,0xda,0x6f,0xed,0x5d,0xbf,0x4d, + 0x94,0xa5,0x64,0x24,0x0d,0x2d,0x10,0x0a,0xd7,0x5b, + 0x6d,0x43,0x35,0xbf,0x31,0xf4,0xac,0x01,0x35,0xaf, + 0x8d,0x47,0x19,0xd8,0xbf,0xac,0x3c,0xca,0x1c,0x39, + 0xdf,0x7c,0xde,0x63,0x70,0xc5,0xb5,0xb5,0xd3,0x94, + 0x15,0xb5,0x63,0x82,0xcd,0x06,0x1e,0xf6,0x84,0xb6, + 0xba,0x3f,0x98,0xb4,0x5e,0xa6,0x6e,0x05,0x21,0xd3, + 0x54,0xc4,0x53,0xdb,0xca,0xa1,0xae,0x9b,0xe4,0x60, + 0x52,0x27,0xde,0x90,0x75,0x53,0x61,0xd3,0xd1,0x9e, + 0x50,0xec,0xa3,0xde,0x9c,0x4c,0x93,0x6d,0xdf,0x45, + 0x25,0xea,0x4a,0x4f,0xb4,0x88,0x2f,0xea,0x5a,0xd8, + 0xbd,0x18,0x9c,0xe8,0x04,0x2e,0x61,0x9e,0x94,0xde, + 0x8d,0x15,0xc8,0x8b,0x84,0xc4,0x6a,0xc9,0x33,0x89, + 0xed,0x16,0x17,0xd8,0x35,0xb1,0x9a,0x64,0xd9,0x69, + 0x02,0x8d,0x26,0x90,0xe8,0xc1,0x5e,0x40,0xec,0x25, + 0x93,0x56,0x72,0xd8,0x26,0x21,0x3a,0x42,0x9c,0xd2, + 0x44,0x01,0x05,0x87,0xc0,0x8b,0xb1,0x72,0xec,0x49, + 0x81,0x78,0x0a,0x4c,0x89,0x4c,0x99,0xfa,0xf5,0x13, + 0x4f,0xcc,0x55,0x64,0xae,0xfa,0x4d,0x1b,0xdc,0x8d, + 0x7b,0x6a,0xdb,0x28,0xd9,0x8c,0xb8,0xf7,0x44,0xad, + 0xc9,0x29,0xf9,0xbc,0x44,0x3f,0x28,0x11,0x2f,0x27, + 0xfb,0x0c,0x57,0xe5,0x4b,0x30,0x2c,0x42,0x25,0xdd, + 0xfd,0x3b,0xb4,0xe6,0x32,0x23,0xe9,0xa1,0x7a,0x2c, + 0x67,0x8e,0x49,0x3d,0x7a,0x68,0x85,0x74,0x81,0xc3, + 0xb1,0x4d,0xb0,0x35,0xd0,0xec,0xa8,0x8c,0xf8,0x7e, + 0xc5,0xb5,0x07,0x49,0x5c,0x9f,0x5e,0x9b,0x2a,0xee, + 0x2b,0x25,0x6d,0x1d,0xad,0x71,0x5c,0x98,0x64,0x9e, + 0xab,0x16,0x0e,0x5a,0x24,0xd2,0xfe,0xeb,0x53,0x41, + 0xe6,0xcf,0x70,0x9f,0x13,0x9a,0x3b,0x39,0x6f,0xbb, + 0x38,0xe8,0xa6,0x03,0x43,0xfb,0x22,0x1a,0xb0,0x26, + 0x95,0x5e,0x2a,0xfc,0x68,0x1d,0xd2,0x9a,0x9b,0x9e, + 0x6b,0x42,0x14,0x89,0x1e,0x00,0xef,0xd3,0xa1,0xa6, + 0x96,0x58,0x3d,0xa1,0x19,0x6e,0xc0,0x68,0x2a,0xc6, + 0xe8,0xd9,0xe9,0x7b,0xd6,0xe4,0x9c,0xa6,0xb7,0x36, + 0x03,0x3a,0xee,0xf7,0xf4,0xcf,0x12,0x45,0x82,0xf8, + 0xa4,0xca,0x03,0x24,0x8e,0xee,0xd6,0xd4,0x96,0xe2, + 0xc2,0x6f,0xea,0xed,0x51,0x10,0x81,0x49,0x9b,0x9a, + 0x16,0xc8,0xa4,0xcb,0xe2,0x44,0x0c,0x53,0x8f,0x91, + 0x7c,0x79,0xee,0xcf,0xfa,0xf5,0xeb,0x57,0xa5,0x9b, + 0x97,0x1e,0xf2,0xca,0xfb,0x2b,0x6d,0xd6,0xc4,0x55, + 0xa1,0x7b,0x73,0xc9,0x94,0xbb,0xb6,0x29,0xa3,0x75, + 0x81,0x95,0x24,0xdc,0x27,0x13,0x55,0x12,0xb9,0x72, + 0x2d,0x23,0x6d,0x99,0x7e,0x72,0xc8,0x41,0x3f,0xd9, + 0x11,0x79,0x4b,0xc7,0xa2,0xe9,0xb9,0x03,0x9a,0xf5, + 0x56,0xe9,0x4c,0xa3,0xa8,0x7f,0xc3,0xe7,0x72,0x6b, + 0x5c,0xb9,0x3b,0xee,0xdd,0x7e,0xaa,0x87,0xa5,0xc5, + 0x09,0x19,0x3f,0x4e,0x49,0x9f,0x21,0x18,0x17,0x21, + 0xc1,0x43,0x02,0x5c,0x64,0x3c,0xf9,0xc9,0x73,0x5c, + 0xa8,0x32,0x53,0xeb,0xe1,0xfe,0xfe,0x93,0xf6,0x6e, + 0x48,0xe8,0x7f,0x6c,0x28,0x54,0xbc,0x4d,0x5b,0x4e, + 0xf7,0xcf,0xd1,0xba,0xe9,0x9c,0x0d,0x88,0xa5,0x3f, + 0x7c,0x13,0xe0,0x9b,0x1d,0x42,0xd2,0x48,0xb4,0x2f, + 0xf0,0x2f,0x1f,0xdc,0x96,0xce,0x91,0x30,0xc8,0xdb, + 0xe3,0x3b,0x12,0xef,0x84,0xda,0x72,0x5f,0x5f,0x5f, + 0x67,0x12,0xce,0x33,0x56,0x17,0xe9,0xf0,0x7a,0xe3, + 0x74,0xf4,0x6b,0x95,0x84,0xfc,0xed,0xfd,0x74,0x7e, + 0x93,0x69,0x03,0x1f,0x97,0xc4,0x9a,0x16,0xf0,0x49, + 0xad,0xfc,0xa9,0x1d,0x96,0xc6,0xf9,0x9d,0xd8,0xe8, + 0x05,0x76,0x24,0x29,0x01,0xd1,0x78,0x46,0x3a,0x5a, + 0xa9,0xd8,0x53,0x14,0x48,0x75,0xbe,0xa8,0xa3,0xe2, + 0xbc,0x09,0xd3,0x1e,0x04,0xfe,0xe6,0x21,0x5e,0x51, + 0xbf,0xce,0x2e,0x7a,0x48,0x82,0xc1,0xe9,0xb9,0x05, + 0x6d,0xb5,0x7a,0xa5,0xa0,0xe5,0x5a,0x4e,0xc9,0x87, + 0xc5,0x2d,0x0a,0xa7,0x53,0x30,0xf1,0x2c,0x5c,0x35, + 0xe6,0xa6,0x42,0x52,0xb5,0x9e,0xac,0x38,0x26,0x2e, + 0xc0,0xd4,0x87,0x24,0x8d,0x92,0x49,0x40,0x6b,0xaa, + 0x00,0xce,0x39,0xd7,0xaf,0x5f,0xbf,0x56,0xe4,0xb0, + 0x0d,0xf9,0x2e,0x55,0x2b,0x81,0xa7,0xe1,0xf4,0x1c, + 0x46,0x1f,0x32,0xb5,0xae,0x70,0x7d,0x6b,0x3a,0x48, + 0x69,0xa4,0x34,0xc1,0xbe,0x5b,0x12,0x3a,0x25,0x80, + 0xca,0x5f,0xea,0x95,0x05,0xb4,0x50,0x0b,0x2a,0x9e, + 0x47,0x7f,0x79,0x92,0x45,0x70,0xbd,0x71,0x35,0x6c, + 0xfc,0x5b,0x1b,0x94,0xd4,0xba,0x31,0x7c,0x8b,0xba, + 0x82,0x28,0x63,0x68,0x3b,0xd4,0x84,0x30,0xba,0x51, + 0xed,0x89,0xec,0xbc,0xe1,0xa9,0x50,0xdb,0x35,0xb5, + 0xab,0x86,0xe2,0xab,0xd2,0x20,0x05,0x71,0xb1,0xa0, + 0x0a,0x5e,0xf1,0x18,0xdd,0xbb,0x75,0x1c,0x35,0x45, + 0x76,0x12,0x22,0xb9,0x41,0x6a,0x93,0xde,0xcf,0xa4, + 0x98,0x9e,0x90,0x23,0xb2,0xd3,0x20,0x64,0xb6,0x1f, + 0x9e,0x8e,0xf3,0xf4,0x01,0x57,0x0b,0x0b,0xad,0xd4, + 0x36,0xa1,0x41,0x8a,0x24,0x70,0xeb,0x10,0x47,0x6d, + 0x4f,0xdf,0xf7,0x95,0x26,0x21,0x27,0xe4,0x49,0xf7, + 0x59,0x52,0x9e,0x77,0x32,0x05,0x5b,0x23,0x55,0x47, + 0x43,0x49,0xa4,0xe8,0x69,0xad,0xa4,0xdf,0xa5,0x58, + 0xb1,0xe1,0x22,0x25,0xb4,0xd0,0x90,0xfa,0x2d,0xad, + 0x21,0x89,0x63,0xfe,0xbe,0xc0,0x3f,0x64,0x52,0xc1, + 0x24,0x31,0x2d,0xaa,0xf4,0x9c,0xb4,0x3f,0x2d,0xae, + 0x49,0x01,0x38,0x19,0xde,0x6d,0x82,0x2b,0x55,0x00, + 0xdb,0xa4,0x23,0x4c,0xa7,0xd5,0x06,0x06,0x9e,0xaa, + 0x66,0xa7,0xe0,0x4a,0x95,0x17,0x90,0x08,0xab,0x73, + 0xad,0x3a,0x9a,0xe4,0x08,0xb4,0x28,0x12,0x15,0xac, + 0x4d,0xdc,0xb3,0xee,0x55,0x84,0x56,0xd3,0x0e,0x2a, + 0x5e,0xc0,0xe5,0x8f,0x67,0x43,0xd2,0xef,0xe1,0x30, + 0xae,0x5e,0x71,0x0e,0xed,0xcf,0x9a,0x0a,0x02,0x4a, + 0x30,0x9d,0xb4,0xc0,0xc4,0x0b,0x81,0xfb,0xab,0x81, + 0x1b,0x55,0x03,0xb7,0xac,0x96,0xfb,0x72,0x54,0x52, + 0x76,0xf7,0x33,0x05,0xda,0xc9,0x60,0x71,0x4a,0x54, + 0x53,0x8b,0x38,0xc5,0x18,0xd3,0x6e,0x3c,0xa9,0xd5, + 0xa9,0x89,0xbb,0x31,0x9b,0xbc,0xc0,0xc7,0xee,0x0c, + 0xad,0x98,0x07,0xca,0xa0,0x53,0x47,0x4e,0xc3,0x85, + 0x44,0x55,0x6f,0x23,0x5b,0xbd,0x1f,0x87,0x62,0x19, + 0x2d,0xa2,0x63,0x8a,0x8d,0xb7,0x29,0xb2,0x3e,0x6d, + 0x7a,0x89,0xd5,0x48,0xb0,0x58,0x78,0xbb,0xc7,0xe1, + 0xac,0x78,0x9b,0xd2,0xea,0x76,0x12,0x89,0x8e,0x30, + 0x75,0x0c,0x52,0xe1,0x4c,0x2d,0xa0,0xe9,0x8c,0xd9, + 0xd2,0x14,0xa4,0x0d,0x73,0x0c,0xea,0x7b,0xa8,0xd5, + 0xa3,0xf1,0x3c,0xb5,0x99,0xb6,0x86,0xcd,0x17,0x98, + 0xdc,0x02,0x97,0xe9,0x4c,0x46,0xb2,0xa9,0xa0,0x99, + 0x3a,0x3a,0xe9,0x1c,0x0d,0x66,0xd2,0xd7,0xc4,0x65, + 0xd4,0xb5,0x96,0x28,0x0f,0x9b,0x2e,0x92,0x55,0x82, + 0x4e,0xd9,0x72,0xef,0x57,0x6f,0x2f,0x54,0x37,0xb3, + 0xfe,0x8e,0x7b,0x00,0x4e,0x3e,0x7d,0x73,0x08,0x7f, + 0xe2,0xff,0xb1,0xd1,0x4a,0x98,0x3e,0xbb,0x0b,0xde, + 0x25,0xc3,0xbd,0x49,0x34,0xd2,0xc1,0x9a,0xae,0x0f, + 0x4b,0x87,0x5b,0xe2,0x8a,0xdc,0xc9,0x02,0x55,0x0a, + 0x53,0xf0,0xa2,0x56,0x25,0x55,0xa4,0x49,0x32,0xdf, + 0x55,0x8f,0x5a,0x41,0x82,0x91,0xa7,0xed,0x63,0x9b, + 0xe7,0x3b,0xea,0x50,0xf5,0x16,0xd2,0xc4,0xb3,0x20, + 0xd1,0x34,0x87,0x6e,0x4d,0xc6,0xb5,0x64,0x8c,0x49, + 0x22,0x78,0x6e,0xdd,0x90,0x5a,0xf5,0xa6,0x9a,0x35, + 0xc9,0x4d,0x4d,0x02,0x7a,0xda,0x52,0x71,0x6d,0xdc, + 0x49,0x18,0x93,0xa6,0x43,0x43,0x80,0x9e,0x7c,0xbc, + 0x2c,0x1f,0x00,0x48,0xe7,0x45,0x93,0x54,0x54,0xbc, + 0xf4,0xfd,0xe5,0x86,0x40,0xdc,0x3b,0x4a,0xff,0x4e, + 0x89,0x24,0x25,0xf2,0x4a,0x2c,0x75,0x32,0x12,0x3d, + 0xe6,0xd0,0x24,0x4d,0x42,0x7b,0x13,0x27,0x10,0x0a, + 0xbb,0x4a,0xe8,0x38,0xb5,0x75,0xa7,0x16,0xca,0x86, + 0xb4,0x9c,0xb8,0x36,0x24,0x89,0xe1,0xd6,0x86,0x49, + 0x50,0x37,0x66,0xad,0xf6,0xf9,0x11,0xf2,0x45,0x05, + 0x1b,0xed,0x6b,0x7a,0x1f,0x69,0x3f,0x26,0x73,0x71, + 0x83,0xa8,0xd4,0x46,0x28,0xb3,0x17,0x88,0x03,0x5a, + 0xe9,0x38,0x9b,0xce,0x3b,0xd0,0x1a,0x34,0x6f,0xd4, + 0xe1,0x03,0x5a,0x16,0x79,0xbf,0x09,0x8d,0x52,0xae, + 0xdd,0x83,0x2a,0x32,0x05,0x13,0x42,0x1d,0x26,0xd8, + 0x7c,0x3a,0x54,0x53,0x22,0x33,0x4d,0x4d,0x38,0x42, + 0xa6,0x92,0x35,0x29,0x00,0xab,0x7e,0x0b,0x11,0xd4, + 0xe8,0x90,0x9a,0x78,0x0c,0x09,0x6e,0xdb,0x20,0x6c, + 0x5d,0x6e,0x20,0x7d,0xa7,0x53,0xc2,0xdd,0xe8,0x35, + 0x4d,0xce,0xe1,0x69,0x7c,0x9e,0x8c,0x32,0xbf,0x2b, + 0x9a,0xfa,0x94,0x33,0x33,0x8d,0x73,0xf6,0x7f,0x7e, + 0xfd,0xfa,0x85,0x7a,0x42,0xc1,0xdf,0xa6,0xa8,0xa2, + 0xdc,0x0a,0x7e,0xea,0x7d,0xf6,0x64,0x32,0x90,0x4e, + 0x0b,0x3c,0x98,0xc6,0x0a,0xca,0x48,0xe0,0x63,0x3b, + 0x22,0xf9,0xb1,0xa5,0x60,0xe2,0x5a,0x22,0x54,0xe8, + 0x26,0xa7,0xf3,0x74,0xa0,0xba,0x6b,0x9c,0xf6,0x35, + 0xb5,0x4c,0x92,0xa6,0xd8,0xa2,0x3d,0xbc,0xf2,0xa1, + 0x4a,0xdc,0x29,0x97,0xc4,0x0c,0x7b,0xb0,0xa6,0x62, + 0x22,0x24,0x64,0xb5,0x41,0x2d,0x44,0x2d,0xdf,0x5e, + 0x8f,0x43,0x1a,0xe9,0x99,0xe8,0xd4,0x6d,0x4a,0x42, + 0x27,0x3b,0x13,0xf7,0xce,0x5d,0x1b,0x5b,0xc5,0x33, + 0x55,0xb8,0xd5,0x15,0x36,0xc1,0x8b,0x0e,0x65,0x58, + 0xd2,0xb9,0x13,0x44,0x6f,0x31,0x91,0xd4,0xc4,0x27, + 0x4d,0x35,0x87,0x3f,0xab,0xed,0xd4,0xe1,0x46,0x94, + 0x38,0x9d,0x4b,0xd4,0xb1,0xa0,0x35,0x7e,0xdb,0xff, + 0x50,0xeb,0xce,0xc5,0x5e,0xb2,0xfe,0x98,0x24,0x10, + 0x48,0xec,0x52,0xff,0x6e,0x23,0xa1,0x32,0xd1,0x40, + 0x5c,0x21,0xf5,0x72,0x2f,0xf0,0x32,0x4a,0xc6,0x09, + 0xed,0x71,0xad,0x1c,0x22,0xf0,0x6e,0x5d,0x6b,0x49, + 0x61,0x99,0xa0,0xfc,0x69,0xec,0x17,0x8c,0x46,0x2a, + 0x8d,0xa1,0x53,0xff,0x9f,0x4c,0x22,0x37,0x95,0x84, + 0x6a,0x69,0x90,0x5f,0xda,0xf4,0xbc,0x26,0x94,0x25, + 0x05,0x7c,0x9a,0x88,0x53,0x88,0x36,0x18,0x3c,0xc6, + 0x6a,0xab,0xcb,0xed,0x4f,0x41,0x89,0xdc,0xe0,0x27, + 0x54,0x51,0x6d,0x46,0x26,0xe7,0xe2,0x14,0x14,0x75, + 0xcd,0x1b,0x48,0xdb,0xa1,0x50,0xe5,0xac,0x46,0x14, + 0x15,0x92,0x8d,0x5c,0x09,0x9e,0x0e,0xda,0x23,0x45, + 0xc9,0x6b,0x12,0x3e,0x33,0x04,0xf3,0x4a,0x23,0xc0, + 0x72,0x0f,0xb5,0x41,0x5f,0x07,0x81,0xb8,0x1f,0x9d, + 0x9f,0x4b,0xc6,0xda,0x6f,0xde,0x4e,0x1f,0x79,0xbf, + 0xde,0xa7,0xc8,0xaa,0x7b,0x75,0x2d,0x3c,0x03,0xd3, + 0x21,0x57,0x7d,0x6a,0x6a,0x9a,0x2a,0xba,0x9a,0xef, + 0x56,0x98,0x6a,0xad,0xc4,0x55,0xd0,0x3d,0x4d,0xaa, + 0xcd,0xa9,0xba,0x77,0xb1,0x63,0x52,0x41,0xa7,0x62, + 0x74,0xd2,0x4b,0x1b,0x2a,0x76,0x37,0x5a,0x5f,0x53, + 0xbc,0xa3,0x83,0x7d,0x6a,0xf7,0x24,0xc4,0x22,0x69, + 0x1f,0xb9,0xa4,0x2b,0x9d,0x63,0x49,0xc7,0x0d,0xec, + 0x78,0x6a,0x98,0xa4,0xc4,0x77,0xb0,0x69,0x65,0x85, + 0xe9,0xc7,0x38,0x16,0xae,0x7c,0xb1,0xa9,0xa8,0x4c, + 0x2d,0xa7,0xe9,0xde,0x12,0xff,0xd5,0xdd,0xcb,0xf0, + 0x8c,0x2c,0x65,0x84,0x3c,0x08,0x69,0x2a,0x2c,0x21, + 0xd0,0x9a,0xf0,0xbd,0x89,0x20,0xbe,0x5e,0xff,0x5a, + 0x61,0xa4,0x6c,0x2b,0x41,0xd9,0x93,0xdd,0xfd,0x94, + 0xbd,0x29,0x32,0x33,0x55,0xe0,0x53,0x0f,0x38,0x91, + 0xe1,0x36,0x2d,0x34,0x6a,0x41,0x50,0x6b,0x81,0xb8, + 0x27,0x13,0x9c,0x3a,0x3d,0x97,0x49,0xca,0x3b,0xa0, + 0x2d,0x31,0xf9,0xd3,0x4c,0x9d,0x60,0x56,0x82,0xd6, + 0x49,0x75,0x34,0x55,0x86,0xa4,0xaf,0xa1,0xef,0x44, + 0xc8,0x91,0xb5,0x55,0x11,0x9e,0xda,0x53,0xd3,0xef, + 0xa7,0x3f,0xa3,0x09,0x0e,0xea,0x9b,0xd3,0xef,0xf5, + 0xc3,0xcb,0x04,0x9d,0x4a,0xd5,0x72,0xf2,0xc5,0xbb, + 0x39,0x2c,0xfd,0x67,0x54,0x8e,0x3e,0xc1,0xe1,0x66, + 0x8f,0xd5,0xdf,0xda,0x06,0xb4,0x96,0x49,0x25,0xf1, + 0xc7,0x0d,0xca,0x2b,0x68,0xc7,0x5b,0x12,0x45,0x7b, + 0x75,0x31,0x4d,0x56,0xa9,0x1d,0xae,0x48,0x4c,0xf0, + 0xf5,0x7b,0x5b,0x63,0x24,0xcc,0xa7,0x7b,0x48,0x0e, + 0xac,0xa2,0x75,0xa6,0xad,0x5f,0xb7,0x8e,0x1d,0x1a, + 0x0b,0xa2,0x84,0xb5,0x41,0xcc,0x26,0x0e,0xe5,0x76, + 0xba,0xce,0x99,0x0d,0x4f,0x7c,0x90,0xa4,0x56,0x9f, + 0x8c,0xb0,0xd3,0xe1,0x9d,0xb8,0x6d,0x0e,0xb9,0x99, + 0xf4,0xda,0xc8,0x82,0xa5,0x93,0xd7,0x53,0xa2,0x05, + 0x93,0x5f,0xb1,0x5d,0xbe,0x05,0x0d,0xb6,0x89,0xce, + 0xd6,0x8a,0x89,0x90,0xae,0x84,0x2c,0x91,0x88,0xee, + 0x46,0xac,0x73,0xe3,0xf7,0x37,0x51,0x42,0xf4,0xfd, + 0x3b,0x44,0xca,0x25,0x6f,0xaf,0x3e,0x4e,0xe7,0xda, + 0x3e,0x0e,0xd6,0x9c,0x0e,0xe2,0x80,0x66,0x54,0x6a, + 0xa9,0xa4,0x2a,0x3f,0xf1,0x06,0x7a,0xd6,0x1b,0xf8, + 0x15,0x78,0x60,0x92,0xc5,0xc6,0xd6,0x0a,0x24,0x78, + 0xd6,0xd4,0x66,0xe1,0x4e,0x2d,0xb6,0xe4,0x59,0x36, + 0x71,0x00,0xa6,0x4a,0x23,0x4d,0x86,0xd0,0xf3,0xd9, + 0x1e,0x60,0xc9,0xdb,0x2d,0x7d,0x46,0xea,0xa5,0xa7, + 0xbe,0xb8,0x5b,0x23,0x53,0x60,0x4f,0x0e,0xc2,0x0e, + 0xe9,0xfa,0x4e,0x2e,0x1e,0x7d,0xf3,0x05,0xf7,0x00, + 0xaf,0x6f,0x50,0x3e,0x8d,0x0a,0xc6,0x4e,0x17,0x2b, + 0x05,0x09,0xe7,0xc1,0xa3,0x5c,0x27,0x40,0xbc,0x6c, + 0xa0,0xbb,0x7f,0xef,0xfb,0x99,0x54,0x0a,0xc6,0x29, + 0xe9,0x20,0x35,0x76,0x42,0x2f,0x2f,0xe3,0x0d,0xb7, + 0x44,0x43,0xcb,0xa1,0x37,0xae,0x25,0xea,0x38,0x8f, + 0x9b,0x96,0x2e,0xf5,0x38,0x40,0x7b,0xe9,0x4a,0x48, + 0x12,0xb5,0x4e,0xc8,0x8b,0x31,0xa1,0xf3,0x82,0x62, + 0x55,0x9a,0x92,0x4a,0xc3,0x06,0xae,0xd5,0x9b,0x54, + 0x8c,0x37,0x09,0x8a,0x22,0xd3,0xda,0xb2,0xd3,0xa9, + 0x1f,0x42,0xf4,0x1d,0x92,0x93,0xee,0x93,0x44,0x7f, + 0x37,0x49,0xdf,0x7d,0x2d,0x86,0x83,0x56,0x8a,0xc4, + 0xb8,0x44,0xe9,0x93,0x33,0xc0,0x25,0xf2,0x92,0xa8, + 0xd4,0x94,0xb0,0x92,0x91,0xf2,0xb2,0x35,0xbb,0x42, + 0xd2,0x28,0xd6,0xd3,0x3d,0xd3,0xf9,0xf6,0x81,0x01, + 0xb2,0x5d,0xa7,0xae,0xf0,0x70,0x71,0xe2,0x77,0xd2, + 0xc0,0xa1,0x03,0x49,0x16,0x4c,0xd1,0xc5,0x4c,0x93, + 0x56,0x8e,0x64,0x97,0xe0,0xd0,0xa9,0x27,0xbe,0xe1, + 0x93,0x4c,0xa2,0x5b,0xfd,0xe7,0xc2,0x88,0x5e,0x6d, + 0x90,0x09,0x5d,0xa4,0x49,0x81,0x57,0x83,0x99,0x43, + 0x1d,0x1c,0x17,0x81,0x16,0xc1,0x34,0xc5,0x47,0x9c, + 0x0c,0x6d,0x9b,0x10,0xb2,0xe2,0x78,0x25,0x1a,0xa5, + 0x4d,0xbf,0xbe,0x08,0xbe,0xd4,0x6b,0xd7,0xf7,0x49, + 0x3c,0x28,0xf7,0x99,0x01,0x0d,0x2c,0x58,0xa3,0x48, + 0xb2,0xfb,0x24,0x81,0x24,0xa8,0x9f,0xd0,0xa2,0xd0, + 0x62,0x44,0x4e,0x40,0x9a,0x08,0xdb,0x4c,0x33,0xc2, + 0xfa,0x2c,0xba,0xe6,0x01,0x3a,0x2f,0x17,0x50,0x1d, + 0xf9,0x7a,0x53,0xc9,0x6f,0x2a,0xd9,0xa0,0x40,0x4c, + 0x1a,0x3b,0x34,0x01,0xf2,0xe6,0x41,0x15,0x14,0x8b, + 0xed,0x84,0x4d,0x5f,0x3b,0xc7,0xfc,0xb2,0xec,0x97, + 0x93,0xf6,0x5a,0xff,0xbc,0x56,0x75,0xd7,0xd7,0xd7, + 0xd7,0x49,0xc8,0xb6,0x7b,0xbe,0x2e,0x6e,0xa5,0x69, + 0x3d,0x67,0xea,0x79,0x19,0xdf,0x30,0x9a,0xec,0x4c, + 0xaa,0xf9,0xfd,0x7e,0xfa,0xf4,0x99,0xd3,0xef,0xd9, + 0x90,0xf2,0xd3,0x21,0x9a,0x0a,0x54,0x77,0xe6,0x74, + 0x4d,0x26,0x9d,0x6c,0xdb,0x70,0x6f,0xa6,0x69,0xe4, + 0xcd,0xba,0x76,0xd3,0x7d,0xc9,0xb1,0x7d,0x1a,0xb2, + 0x00,0x99,0x8b,0x43,0x53,0x50,0xd2,0x92,0x3d,0x9b, + 0xa4,0x8c,0xc8,0xd7,0x8b,0xf3,0xfe,0xe7,0xfd,0xdf, + 0xd3,0x8d,0x53,0xeb,0x30,0x9d,0xcd,0xd7,0xf5,0x0f, + 0x2f,0xf4,0x53,0xf4,0x52,0xaf,0xed,0x37,0xbd,0x50, + 0xba,0x21,0x15,0xb0,0xda,0xb4,0x95,0xd2,0xe2,0x48, + 0xb0,0x1f,0x99,0xa7,0x51,0xb6,0xb7,0xc9,0x4a,0x69, + 0xd3,0xd2,0x44,0xda,0x44,0xfe,0x72,0x9c,0xa7,0xfe, + 0x3b,0xfd,0x25,0x6d,0x46,0x7c,0x83,0x1a,0xea,0x38, + 0xbd,0xe0,0x12,0x08,0x08,0xb6,0x8e,0x9f,0x55,0x89, + 0x50,0x4c,0x44,0xde,0xa9,0xd7,0xbc,0x68,0x33,0xb9, + 0x56,0x57,0x25,0x55,0xd3,0x0d,0x11,0xff,0xd3,0xd6, + 0xa6,0x49,0xc6,0x68,0x9c,0xfc,0x6d,0xf2,0x41,0xa5, + 0x02,0x00,0xb2,0xae,0x29,0x20,0x7e,0x9a,0xb8,0x3b, + 0x92,0xbc,0x59,0x4f,0xb5,0x38,0x24,0x8a,0x54,0x82, + 0xfb,0x3e,0x44,0x48,0xe9,0x9a,0x3d,0xe4,0x12,0x57, + 0x28,0x0d,0x02,0x6c,0x5b,0x25,0x1a,0x60,0xdd,0xf7, + 0xb9,0xe1,0x87,0xfb,0x20,0xd4,0xbf,0x37,0xd7,0x36, + 0x19,0x9f,0xa2,0x81,0x6a,0x9b,0x96,0x39,0x54,0xcd, + 0x9f,0xf7,0x4a,0x62,0x6c,0x91,0x74,0x95,0x3e,0x12, + 0x76,0x34,0xa8,0xd1,0x81,0x29,0xcb,0xb3,0x71,0x6a, + 0xd7,0xc4,0x28,0x71,0xa8,0xee,0x9f,0x4d,0x45,0x29, + 0xad,0x07,0x4a,0xb4,0x16,0x84,0xfd,0xad,0xd9,0x2d, + 0x22,0x06,0x9b,0xf1,0xf2,0x29,0xb6,0x6c,0x44,0x11, + 0x27,0xea,0x46,0x6a,0xed,0x7f,0xd2,0x12,0x84,0x6b, + 0xfc,0x79,0x8f,0x94,0xac,0x50,0x42,0x08,0x67,0xb9, + 0x33,0xd4,0xb5,0xeb,0x8d,0x68,0x18,0x03,0xea,0xff, + 0x48,0xe6,0x86,0x58,0x7b,0x73,0xfe,0x4e,0x12,0x8c, + 0x7c,0x4b,0x80,0x26,0x0f,0xaf,0x61,0x34,0x7e,0x24, + 0xe2,0x25,0xf8,0x90,0x1c,0x86,0x93,0x72,0xf0,0xb4, + 0xf8,0x5d,0x6b,0xcd,0x55,0xbd,0x1b,0xc2,0x9a,0x4e, + 0x46,0x4c,0x52,0x01,0xe9,0xde,0x95,0xc3,0xd1,0x89, + 0xc2,0x93,0x15,0x48,0x0f,0x0a,0xdb,0x51,0x7f,0x42, + 0x67,0xa6,0x1e,0xb3,0x7b,0x26,0x6e,0x11,0x39,0x63, + 0x4c,0x42,0x72,0xe8,0xbe,0xb6,0xd9,0xfb,0x65,0xc6, + 0x2b,0xdd,0x7b,0xb9,0x75,0x53,0xf4,0xbb,0x09,0xd1, + 0xbc,0x40,0x52,0xdd,0x5d,0x77,0x0a,0x48,0xca,0xdb, + 0xb8,0x93,0xa3,0x3f,0x7f,0xfe,0xa4,0x71,0xe0,0xa2, + 0xc0,0xa7,0x1c,0x11,0x45,0x10,0x93,0x82,0xb4,0x43, + 0xea,0x20,0xc1,0x7e,0xb4,0x0c,0x48,0x55,0xd5,0xb5, + 0xb0,0x37,0xd7,0x31,0xf0,0x6c,0x6c,0x82,0x35,0xad, + 0xd1,0x70,0x38,0xdc,0xef,0xe0,0x50,0x2b,0xa8,0x13, + 0x65,0xbb,0x26,0x8d,0xde,0xf7,0x07,0x3a,0x53,0x16, + 0xe9,0x99,0xda,0x08,0x41,0x4b,0xcc,0x6a,0xe8,0x6c, + 0x38,0x8f,0x29,0x2e,0xf4,0xc4,0x62,0x42,0x58,0x6e, + 0x54,0x8b,0xde,0x4b,0x2a,0xe8,0xb6,0xca,0xe0,0x20, + 0x62,0x37,0x16,0x5e,0x37,0x7a,0x40,0x7a,0x45,0x5a, + 0x24,0x6d,0xb8,0x6f,0x34,0x69,0x08,0xcf,0xc8,0x25, + 0x06,0x3f,0x09,0xae,0x4b,0xfa,0xdc,0x73,0xee,0xfb, + 0xd9,0x25,0x8f,0x1b,0xd5,0x64,0x52,0xb7,0x27,0xb4, + 0x32,0xed,0x25,0x9a,0xe8,0x94,0xef,0x78,0xd3,0x74, + 0x4a,0xe8,0xd4,0xa6,0xd8,0x21,0xfe,0xd5,0x94,0x0c, + 0xd2,0x79,0x4a,0x6d,0xdf,0x74,0x6d,0xaf,0xa4,0xc3, + 0x40,0x24,0xa8,0x49,0x25,0xd9,0x9d,0xb8,0x1b,0xfd, + 0x99,0x81,0x28,0x66,0x27,0x11,0xa6,0x97,0xac,0xbe, + 0x66,0x53,0x5f,0x7c,0x53,0x4d,0xa4,0x56,0x09,0x7c, + 0xee,0xc8,0x17,0xd0,0x9e,0xa8,0x12,0xe8,0x36,0xa4, + 0x5b,0xfa,0x7c,0x12,0x37,0xdc,0x90,0xd5,0x12,0xfc, + 0xea,0x5c,0x8f,0xb7,0x1e,0x2c,0xfa,0xbe,0x5d,0x15, + 0x94,0x26,0x1a,0x88,0x5b,0xa0,0xa2,0x9b,0x1d,0xe6, + 0x4d,0xd5,0x13,0x05,0x16,0xe1,0xc2,0xd4,0xd4,0x43, + 0x4f,0x2d,0xae,0xae,0xa1,0xb4,0x29,0x2e,0xdc,0x3a, + 0x23,0x9f,0xbe,0xd4,0x3a,0x03,0x31,0xcd,0xea,0xeb, + 0xab,0xbf,0x53,0x0d,0x2c,0xdf,0xc4,0xe8,0x1a,0xb8, + 0x29,0x63,0xcb,0xd6,0x4d,0xe9,0x7c,0x2a,0xb0,0x46, + 0x6d,0x6c,0x6d,0x75,0x76,0x9d,0x2e,0xc3,0x1f,0x79, + 0xfb,0xee,0x5f,0xbf,0x7e,0xd5,0x82,0x57,0x57,0x2a, + 0x7b,0xb0,0xe5,0x13,0x26,0x34,0xce,0x4d,0x81,0x26, + 0x24,0x58,0xda,0x38,0x0e,0x21,0x29,0xc7,0x31,0xeb, + 0x93,0x92,0x34,0x61,0x98,0x4c,0xa3,0x83,0xb9,0x6f, + 0x05,0x63,0x5d,0x87,0x44,0xd9,0xe7,0x22,0x28,0xbc, + 0xdb,0x67,0x55,0x55,0xd7,0x9f,0x3f,0x7f,0x1e,0xf4, + 0x0b,0x7d,0x2e,0x49,0x4f,0x6c,0x4b,0xab,0x70,0x2d, + 0xa3,0x89,0xd3,0xb2,0xe1,0x4a,0xea,0x73,0x4a,0x86, + 0xbc,0x74,0x9e,0xb9,0x73,0x99,0x38,0x5b,0xdb,0xe4, + 0x6e,0x23,0x3e,0x3a,0x21,0x4d,0xca,0x5b,0xdd,0xb4, + 0xc1,0xc9,0xe2,0x66,0x8b,0x98,0xd3,0xa8,0xfd,0x34, + 0x35,0x7a,0xff,0xcc,0xef,0x0f,0x46,0xdb,0x6b,0x53, + 0xb9,0x4d,0x3e,0x28,0x53,0x86,0xb8,0xfd,0xd9,0x10, + 0x70,0xea,0x3f,0x32,0xe9,0x35,0x6d,0x00,0x17,0x80, + 0xe1,0x77,0x9c,0xda,0xef,0x68,0x0b,0x01,0xca,0xce, + 0xc8,0x37,0x91,0x77,0x50,0x53,0xe5,0x9d,0xb8,0x21, + 0x4e,0x25,0x3a,0x3d,0xcb,0x8d,0x5c,0xfb,0x10,0x68, + 0xd2,0xa1,0x60,0x11,0x26,0xd7,0xbe,0x49,0xad,0x2d, + 0x3a,0x44,0x9a,0xc2,0x2e,0xa2,0x4d,0x5a,0x75,0x86, + 0xb5,0x54,0x90,0x44,0x55,0xa8,0xd4,0x13,0x61,0xb8, + 0x74,0x6d,0x77,0x3d,0xa0,0x41,0x68,0xae,0x16,0x95, + 0x70,0x6d,0x39,0x39,0x24,0x84,0x47,0x22,0x8b,0xae, + 0x8a,0xeb,0xf7,0xe0,0x5a,0xb9,0xf2,0xdf,0x27,0x25, + 0xd4,0x9b,0x56,0x8a,0xe3,0x98,0x38,0xae,0x8c,0x99, + 0xd2,0x3b,0xe9,0x40,0x51,0xce,0x86,0xe3,0x92,0x75, + 0x85,0x63,0xf5,0x15,0xa3,0x3d,0x41,0x15,0xb8,0x6b, + 0x27,0xa4,0x22,0x63,0x9b,0x94,0xa6,0x84,0x66,0x40, + 0xac,0x6c,0x5b,0x64,0xa3,0xa3,0xb5,0x89,0xf7,0x93, + 0x80,0xe2,0x94,0x3c,0x10,0xca,0x06,0x6d,0xf3,0xba, + 0x91,0xc2,0x69,0x2f,0xb8,0x01,0x9b,0xf4,0x5d,0x2d, + 0x26,0x9c,0xe5,0x74,0x62,0x44,0x61,0xe0,0x3b,0x1f, + 0x68,0x8c,0xa3,0x90,0x24,0xd4,0x68,0xe3,0xdf,0xb9, + 0xd1,0x68,0xa3,0x0e,0x81,0x1b,0xb0,0x21,0x6a,0x4d, + 0xda,0x9f,0x09,0x19,0xd2,0xc2,0x9e,0xd0,0xb1,0xce, + 0x75,0xea,0xf7,0xfb,0x4a,0x8b,0x75,0x82,0x3a,0x37, + 0x2d,0x09,0x62,0xd8,0x2b,0xaa,0xd1,0x7d,0xb0,0x92, + 0xe2,0xa5,0x7b,0x88,0x69,0x03,0x3a,0xad,0x96,0x8d, + 0x5f,0xd1,0xd4,0x17,0x77,0x63,0xc9,0xc9,0x51,0x7d, + 0x52,0x5d,0x75,0x0b,0x9e,0x5a,0x80,0x1b,0x21,0x3b, + 0x9a,0xc4,0x80,0xac,0x79,0x35,0xad,0x76,0x99,0xa9, + 0x8f,0x64,0xe8,0xe9,0x46,0xb1,0x5d,0xf5,0x22,0x1c, + 0x8c,0x9a,0x60,0xfd,0x61,0x22,0xa1,0x5c,0x45,0x92, + 0x36,0x7a,0x12,0xff,0x4c,0xef,0x31,0x05,0x7d,0x7a, + 0x7f,0x34,0xfa,0x9f,0x82,0x75,0x42,0x2e,0xa7,0x96, + 0x8b,0x1b,0x8b,0x26,0x04,0x4d,0xd7,0x8a,0x4e,0xae, + 0xe8,0xde,0xa1,0xf6,0x85,0x49,0xa0,0xba,0xb6,0xcf, + 0x06,0x3d,0x7e,0xd3,0x0c,0x5a,0x1c,0x36,0x18,0x28, + 0x35,0xe1,0x22,0x01,0xc3,0xbe,0x46,0x07,0xce,0x46, + 0x6d,0x5b,0xd0,0xc0,0xf7,0x79,0x20,0xec,0x49,0x37, + 0x6d,0x53,0xcc,0x24,0x95,0x76,0x97,0x98,0x76,0x74, + 0x93,0xa6,0x99,0x3a,0x82,0xf6,0x49,0x02,0x4a,0xfb, + 0x50,0x8b,0x9a,0x84,0x96,0x4d,0x24,0x60,0x17,0xcf, + 0x12,0xf1,0x9b,0xf6,0x67,0x92,0x10,0x09,0x85,0xad, + 0x6d,0x2f,0xba,0xf5,0x45,0x43,0x18,0x94,0x0c,0x6e, + 0x63,0xdd,0x76,0xb4,0x9c,0xde,0x4f,0x6a,0xd3,0xb9, + 0xef,0x24,0x24,0x4b,0xed,0x3d,0xd2,0x5e,0xdc,0xdc, + 0x1b,0xd9,0x63,0x0c,0xf1,0xb6,0xdc,0x1a,0x71,0x94, + 0x06,0x17,0x73,0x5e,0xa9,0x9f,0x26,0x5e,0x52,0x98, + 0x18,0x2c,0xbd,0x53,0x6a,0xd2,0x06,0x9a,0x58,0xf5, + 0x1b,0x05,0x52,0xe2,0x30,0xb9,0x16,0x4b,0xef,0x8b, + 0x4f,0xfa,0x37,0x03,0x52,0x51,0x44,0xcc,0x76,0x7e, + 0x58,0x89,0x14,0x7e,0xff,0x9e,0x8c,0xe5,0x16,0x2d, + 0x98,0xd4,0xf6,0x4a,0xea,0xd8,0x9b,0x67,0xbe,0x41, + 0x8e,0x28,0x01,0xfc,0xe4,0x9e,0x17,0x9b,0xbe,0x88, + 0xf7,0x40,0x81,0x48,0xf9,0x39,0x13,0xc7,0x8a,0x4c, + 0xff,0x28,0xf1,0x5e,0x20,0x27,0xf6,0xdf,0x3b,0x47, + 0xc9,0x1d,0x92,0x5d,0x2f,0xc8,0xa8,0x8a,0xd7,0xdf, + 0x18,0x36,0x4e,0x92,0xf2,0xe6,0x00,0x2a,0x37,0x02, + 0xee,0x5a,0x01,0x30,0xfa,0xdd,0x05,0x0d,0xc7,0x04, + 0x9d,0xfe,0x5b,0x38,0x16,0xe5,0x12,0x14,0xba,0x36, + 0xd3,0x66,0x19,0xf7,0x50,0x6f,0x83,0xdf,0x5a,0x4a, + 0x24,0x4e,0x17,0x86,0x25,0x56,0xa3,0xef,0x94,0xd8, + 0xc2,0xda,0x2b,0x68,0xb1,0xd4,0x74,0x28,0x18,0xfe, + 0x0a,0xc6,0x83,0x41,0x73,0x25,0xb5,0x4a,0x8a,0x46, + 0xe1,0x53,0xab,0x77,0xb2,0x57,0x21,0x9a,0x41,0x32, + 0xcb,0x4e,0xa3,0xdd,0x74,0x38,0x0e,0x4a,0xe4,0x35, + 0x0d,0x7a,0x24,0x41,0xcb,0x85,0x0d,0x4c,0x6d,0x26, + 0xc0,0x5c,0x21,0xaf,0x89,0x17,0x14,0x37,0xb5,0xa5, + 0xa0,0x24,0x41,0xdf,0x49,0xc3,0x4e,0xd7,0x90,0xaa, + 0xe6,0x87,0xb6,0x7f,0x11,0x12,0x46,0x42,0x86,0x29, + 0xe1,0xa3,0x33,0x86,0x92,0xdf,0x17,0xc1,0xff,0xa4, + 0x01,0x32,0x6d,0x08,0xd5,0xd3,0x98,0x46,0xf5,0xa8, + 0x8f,0x49,0x23,0xe8,0x93,0x2b,0x7d,0x5a,0xa4,0x14, + 0xf0,0x1d,0xa2,0x44,0xfc,0x24,0x42,0x8d,0x48,0x7f, + 0x46,0xa1,0x48,0x77,0xb0,0x93,0x76,0x88,0x22,0x70, + 0x5a,0xb9,0x4d,0x62,0x5d,0x8a,0xd8,0x74,0x35,0x59, + 0xaa,0x9e,0x52,0x92,0x49,0x70,0xa6,0x7b,0x57,0xc9, + 0xcf,0xe7,0x13,0x57,0xf0,0x37,0xd1,0xaa,0x77,0x0e, + 0x49,0x6d,0x78,0x55,0xd3,0x5a,0x32,0xeb,0xbc,0xa0, + 0x87,0x5f,0x13,0xdf,0x2d,0xa9,0xe7,0xa6,0xe7,0xb0, + 0x35,0xa7,0x4d,0x55,0x9b,0x13,0x53,0x9c,0x0e,0xa5, + 0x4f,0x0e,0xcf,0xa4,0xd5,0xd5,0xf5,0x75,0xc8,0x16, + 0xc0,0xad,0x9f,0x8d,0x1e,0x13,0xc4,0xa7,0x28,0x14, + 0x18,0x3e,0x2b,0x7a,0xa9,0x39,0xe3,0xe0,0xf4,0xec, + 0x42,0x3b,0x83,0x12,0x90,0x49,0x7c,0xb4,0x08,0xbd, + 0xd9,0x20,0x1e,0x13,0x1a,0x1c,0xd6,0xc0,0x88,0x00, + 0xbb,0xa1,0x0a,0x67,0x80,0x9c,0x5a,0xcf,0x24,0x08, + 0x78,0x17,0x28,0x77,0x2c,0xb9,0xad,0x75,0x40,0x14, + 0xd3,0xb5,0xe5,0xfe,0xba,0x5d,0x9a,0x8a,0x22,0x42, + 0xe6,0x27,0x7d,0xa7,0x54,0x18,0x09,0xea,0x97,0xd0, + 0xa8,0xb7,0x42,0x7d,0x6b,0x8c,0x4a,0xea,0xde,0x09, + 0x35,0xa1,0xc4,0x34,0x25,0x38,0xf4,0xae,0x53,0xd2, + 0x47,0x92,0x39,0xa9,0x0d,0x9a,0x3a,0x2c,0xa9,0x5d, + 0xb6,0xd9,0x27,0x3f,0x3a,0x40,0x54,0x49,0x4d,0x06, + 0x7f,0x64,0x2b,0xb0,0x19,0x8d,0x4e,0x9a,0x2d,0x13, + 0x31,0x6d,0xb3,0x80,0x27,0x47,0xec,0x29,0x8b,0x0c, + 0xa3,0xed,0x95,0xfa,0xba,0xa9,0x4d,0xb2,0xd5,0xe1, + 0xd9,0x20,0x2e,0xf4,0xbe,0x68,0x51,0x39,0x3e,0x48, + 0x22,0xfd,0xa6,0x31,0x57,0x32,0x86,0xa4,0xc4,0xd6, + 0xf9,0xf7,0x10,0x1f,0x8a,0xaa,0xee,0xcd,0x74,0x99, + 0x3b,0x78,0x02,0x2c,0x5c,0x13,0x29,0x6f,0x3b,0xc5, + 0xb3,0x99,0x84,0xe9,0xae,0xdb,0x93,0x6c,0xfc,0x34, + 0x04,0x90,0x60,0xfa,0x50,0x51,0xc7,0xd1,0xf5,0x0d, + 0xda,0x07,0x87,0x42,0x4d,0x05,0x0a,0x09,0x8d,0x26, + 0x82,0x66,0x3a,0x50,0x04,0x15,0x39,0x6e,0x2f,0x98, + 0xfe,0x7f,0x74,0xeb,0x9e,0x10,0x49,0x72,0x7d,0x27, + 0x13,0xc9,0xb4,0xbf,0x13,0x87,0x64,0x43,0x02,0x57, + 0xd4,0xaf,0x8f,0x21,0xeb,0xf4,0x14,0xf1,0x2c,0x3e, + 0x71,0xfe,0xa6,0xf7,0xe1,0x10,0x1c,0x29,0xd2,0xde, + 0x38,0x43,0xca,0x23,0x4a,0xea,0xcf,0xee,0xf0,0xbf, + 0x73,0xa5,0x85,0xbc,0xc6,0x1b,0xf7,0xcb,0x71,0x77, + 0x12,0xb9,0x37,0xb5,0x93,0x93,0x30,0x2c,0xbd,0x47, + 0xd0,0x5b,0x9a,0xa8,0x06,0x47,0x8b,0xef,0x29,0x01, + 0xa0,0x3d,0x37,0xb5,0xcc,0xc2,0xf3,0xe4,0x59,0xf6, + 0x01,0x91,0xff,0x46,0x6c,0x4f,0x4a,0x28,0x13,0xff, + 0xca,0xfd,0x77,0xff,0xcc,0xf4,0x0e,0xa9,0x78,0x77, + 0x02,0xb0,0x2f,0x27,0xd7,0x3e,0x65,0xb3,0x29,0x78, + 0x3a,0x3d,0x0d,0xf7,0x39,0xa9,0x27,0xba,0x4d,0x7a, + 0x12,0xe7,0xc2,0x90,0x47,0x23,0xa7,0xe8,0x0a,0xde, + 0x3e,0xd4,0xee,0x23,0xab,0x08,0x9a,0xfc,0xa2,0xe7, + 0xe7,0x7a,0xc8,0x09,0xbe,0xa5,0x69,0x0e,0xea,0xa7, + 0x0f,0xe3,0xdb,0x63,0x32,0xa7,0xd5,0xb3,0xde,0x9f, + 0x6c,0xd0,0x4a,0xe8,0x89,0xe3,0x10,0xb5,0xaa,0xa8, + 0x80,0xec,0xb7,0x52,0x78,0xa6,0x20,0x91,0x54,0x5e, + 0x43,0x2b,0xe7,0xd1,0xb6,0x48,0x49,0x09,0xb5,0x26, + 0x12,0x97,0x63,0xba,0x17,0x22,0x9d,0x18,0x44,0xb0, + 0x06,0x3f,0x26,0x2b,0xe5,0xa0,0xd3,0x3c,0xee,0xdd, + 0x39,0xbe,0x5b,0x33,0xae,0xac,0x49,0xb4,0x34,0xf1, + 0xef,0xe8,0xc0,0x48,0x13,0x96,0x30,0x59,0x84,0xb6, + 0x27,0xc0,0x01,0xac,0xc9,0x1e,0xc7,0xbd,0xc3,0xa9, + 0x20,0x24,0x54,0xc5,0xac,0xb5,0x8f,0x6c,0x51,0xdc, + 0xd4,0xd7,0xc0,0x7b,0xb2,0x3f,0xdf,0x13,0x7f,0xe2, + 0x06,0xa6,0x98,0x38,0x28,0x22,0x97,0x56,0xdd,0xd3, + 0x41,0x04,0x07,0xa7,0x45,0xcf,0x5d,0x65,0x4f,0x9f, + 0x03,0x9e,0x55,0x65,0x0e,0xc0,0xda,0xc6,0x10,0x5a, + 0x5f,0x89,0xf3,0xe4,0xf8,0x8c,0x93,0x5d,0xc7,0x27, + 0xed,0xf6,0x09,0x95,0xd9,0x0c,0x16,0x39,0x73,0x5a, + 0xa2,0x34,0x38,0x7d,0xb4,0x4f,0x78,0x48,0x8e,0xbb, + 0xfa,0xb7,0x36,0x1f,0x3d,0x39,0x86,0x16,0x69,0xe9, + 0x19,0xe0,0x8a,0x81,0x97,0x83,0x16,0x87,0x07,0x15, + 0x3d,0x3a,0x3e,0x99,0x00,0xa3,0x07,0xec,0x88,0x87, + 0xd3,0xc6,0x71,0x64,0x3b,0x47,0x2e,0x4c,0x10,0xe2, + 0x64,0xd1,0xa0,0x2d,0x1f,0xd2,0x26,0x48,0x30,0x33, + 0xb5,0xce,0x92,0x5c,0x3c,0x1d,0xd0,0x93,0x44,0x3b, + 0x1d,0x2c,0x1a,0x10,0x75,0x34,0x3b,0xa1,0x4c,0x13, + 0xd7,0x65,0x6b,0xea,0x9a,0x0e,0x96,0x94,0xb0,0xdd, + 0x56,0x14,0x69,0x34,0x3e,0x8d,0x54,0x12,0x67,0xa0, + 0x73,0x6c,0xb6,0xd5,0xfc,0xb6,0x6d,0xd0,0x5d,0xbb, + 0x37,0xdc,0x90,0x89,0xd3,0xe2,0xda,0x66,0x3d,0xf1, + 0x76,0xc4,0xde,0x89,0x87,0x30,0x41,0xe7,0x43,0x4e, + 0x86,0x89,0xde,0x56,0xe0,0x71,0x7b,0xe0,0x4c,0xa3, + 0xff,0xa9,0x6d,0xaf,0x4e,0xe9,0x34,0xc5,0xaa,0xad, + 0x82,0xd0,0x66,0x2d,0x17,0x94,0x37,0x36,0x3a,0x5a, + 0x44,0x4c,0x87,0x2c,0xf9,0x20,0x3a,0x9e,0xdf,0x27, + 0xde,0x85,0xae,0xa5,0x9c,0x44,0x0a,0x07,0x01,0xc4, + 0xc8,0x63,0xd9,0xda,0x28,0x7c,0xb2,0x07,0x1c,0xe7, + 0x64,0x8b,0x78,0xa4,0x42,0x78,0xc3,0x67,0x24,0xf4, + 0x2f,0x14,0xd9,0x38,0xd0,0xa2,0x31,0x09,0x3c,0xf6, + 0x2c,0x85,0x82,0x3e,0x77,0xe3,0xdb,0xe5,0x38,0x55, + 0x64,0xbd,0x44,0x31,0xe4,0x02,0x49,0x0d,0x32,0xa7, + 0x9d,0xc6,0xef,0xa7,0xe9,0x65,0xfd,0x33,0x2d,0x70, + 0x29,0x57,0xe9,0x7b,0xf3,0x67,0xdf,0x50,0x76,0x34, + 0x2d,0x02,0x42,0x0f,0x26,0xd5,0x5b,0x07,0x7b,0x81, + 0x6e,0xc5,0x3a,0x93,0x9d,0x7a,0x85,0x64,0x35,0x91, + 0xaa,0x7f,0xd5,0x92,0xa1,0x85,0x9f,0x32,0xde,0xc9, + 0x03,0x67,0xc3,0x47,0x80,0x4c,0xbf,0xa6,0x43,0x25, + 0x71,0x5f,0xa6,0xbe,0xb3,0xf2,0x5d,0xc0,0x27,0x29, + 0xf2,0x3c,0x12,0x69,0x6e,0xc9,0xa3,0x58,0xf1,0x78, + 0xb6,0xc8,0xa1,0x98,0xe4,0x15,0x8d,0xdd,0xbb,0x76, + 0xc7,0x27,0xa4,0x5b,0xaa,0x78,0x13,0x07,0x60,0x23, + 0x20,0xd8,0x7f,0x47,0x79,0x17,0x4e,0xeb,0x26,0x71, + 0xb6,0x5c,0x2b,0x24,0xb5,0xbe,0x9d,0x0b,0x38,0x69, + 0xfa,0x38,0xd2,0xe6,0x66,0x94,0x36,0x88,0xa2,0x46, + 0xde,0x9b,0x21,0x20,0xd7,0x94,0x3c,0x6d,0x63,0xc9, + 0xf4,0xbe,0x6f,0xab,0x8c,0xe0,0xf5,0x56,0x01,0xe9, + 0x2b,0xfa,0xfc,0xb0,0x57,0x0b,0xd6,0xac,0x9d,0x5e, + 0x4a,0x53,0x7c,0x21,0xa1,0x8e,0xf7,0xae,0xe8,0x18, + 0x1d,0xb8,0x1b,0x7e,0x12,0xa1,0x4f,0x1b,0x9e,0x98, + 0x4b,0x20,0x37,0xad,0x64,0x47,0x17,0x20,0xb1,0x56, + 0xda,0xdf,0xc9,0x11,0x3d,0xf1,0xfc,0x5c,0xa2,0xe9, + 0xd6,0x38,0xc5,0x0e,0xb7,0x2f,0x1d,0x12,0x36,0xa1, + 0x2e,0xa9,0xd3,0xb1,0xe1,0x6c,0x4e,0xef,0xd9,0xed, + 0xed,0xb4,0x06,0x3f,0x6d,0xbf,0xbb,0xdf,0x9b,0xbc, + 0xeb,0x28,0x61,0x7f,0xa5,0xe0,0xa0,0xc4,0xb7,0x0d, + 0x3f,0x22,0x55,0x9b,0xa9,0xcd,0x96,0x5e,0x04,0x1c, + 0x4a,0xce,0x04,0xb2,0x36,0x2d,0x92,0x4f,0x2a,0xd4, + 0x89,0xc9,0xae,0xe4,0xe8,0x7e,0x48,0xd0,0xc2,0x98, + 0x08,0xe6,0x5a,0xc1,0x4f,0xc8,0x59,0xba,0x47,0x81, + 0x01,0x6b,0xb3,0xa8,0x53,0xeb,0x21,0x79,0xc1,0xa4, + 0x2a,0x3e,0x4d,0x69,0x6c,0xd6,0xd2,0xc2,0x3c,0xb4, + 0x26,0xef,0xb0,0x84,0x3c,0x86,0x42,0xa0,0x68,0x22, + 0x0b,0xd0,0x39,0x44,0x79,0x5c,0x3b,0xc6,0xc1,0xcf, + 0x0e,0xe1,0x81,0xe9,0x4b,0xcb,0xc1,0x6a,0xc9,0x49, + 0x51,0xe0,0xd4,0x56,0xcf,0xc2,0x9f,0xab,0xf4,0xde, + 0xa8,0x2d,0xe2,0x5a,0xba,0x26,0xf1,0xd2,0x71,0xf7, + 0x48,0xe4,0x75,0x08,0x82,0x4b,0x94,0xee,0x84,0x60, + 0x93,0x8c,0xd2,0xcf,0xc9,0x7a,0xab,0x4d,0x0b,0x64, + 0x33,0xc6,0x9c,0xd0,0x74,0x81,0xea,0x6b,0x6a,0xb9, + 0x51,0x40,0x4f,0xe8,0x71,0x5b,0x1b,0x35,0x21,0x13, + 0xfd,0x19,0x6d,0xec,0x85,0xc2,0x81,0xe9,0xd6,0x68, + 0xf4,0x18,0x74,0xe2,0x91,0x5d,0x1d,0x7b,0x2b,0x92, + 0x39,0x4d,0xb5,0x6e,0x27,0x37,0x2f,0xd0,0x44,0x73, + 0xb1,0x31,0x15,0xd4,0x34,0xa1,0xab,0xea,0xe4,0x49, + 0xe7,0xce,0x15,0x84,0x12,0xe3,0x2a,0x75,0x34,0x26, + 0x9a,0xc4,0x30,0x68,0xb1,0x42,0xb9,0x12,0x20,0x30, + 0xa1,0x63,0xc9,0x8c,0x99,0xb8,0x3f,0x29,0x09,0x9e, + 0x3a,0x0e,0x2f,0x5a,0x14,0x1b,0x8e,0xc8,0x16,0xf6, + 0x4d,0x4c,0xef,0x0f,0x36,0xd2,0x86,0xc7,0x13,0x2b, + 0x0e,0x0a,0x5c,0x5b,0x65,0x4f,0xc8,0x72,0x6b,0x4b, + 0x78,0x76,0xed,0x2f,0xa9,0x34,0x6a,0x5a,0x54,0x29, + 0xb9,0x4c,0xd0,0xa5,0x43,0x33,0x88,0x2f,0xe3,0x1c, + 0xb2,0x3f,0x59,0x6c,0xae,0x8d,0xb0,0x95,0xa6,0x4f, + 0x06,0x7c,0xae,0x0d,0x49,0x49,0x8e,0xbe,0x98,0x09, + 0x41,0x70,0x93,0x3f,0xe9,0xa0,0x4d,0xb0,0x3e,0xac, + 0xc7,0x72,0x01,0xe0,0xd3,0xcf,0x4c,0x09,0x82,0xbe, + 0x63,0x12,0x8a,0xeb,0x87,0x49,0x6a,0xfd,0x76,0xbe, + 0x4f,0x42,0x70,0xe9,0xfb,0x65,0xd4,0xf7,0x47,0x0b, + 0x48,0xd5,0x83,0xdb,0xda,0xaf,0xaf,0xaf,0xaf,0x9f, + 0x91,0xf7,0xa9,0x0d,0x4f,0xca,0xe1,0x3d,0x71,0x49, + 0x28,0x98,0x26,0x91,0x9b,0x77,0x37,0xb5,0xfa,0x1c, + 0x87,0x2d,0x4c,0x67,0xd5,0x76,0x7c,0xd7,0xbd,0x9b, + 0x60,0x92,0xfc,0x40,0x06,0x9c,0x6b,0x79,0xfa,0xae, + 0x44,0x1b,0xd8,0xa0,0xee,0x1b,0xe4,0x6d,0x83,0xf2, + 0x13,0xda,0x22,0xba,0x2e,0x65,0x9e,0x55,0xd1,0x84, + 0x9a,0x8b,0x2f,0xc9,0xbe,0x03,0x38,0x9d,0x45,0x09, + 0x7e,0x2a,0xb0,0x29,0x29,0xe9,0xb1,0x77,0x42,0xbb, + 0x53,0xa2,0x3b,0x25,0x1f,0x84,0xfe,0x4e,0xc8,0xf9, + 0xa7,0xe7,0x77,0x42,0x9c,0x12,0xd2,0x45,0xf1,0x8e, + 0xba,0x2e,0xfd,0x67,0xee,0x35,0xdf,0x65,0x6d,0xcc, + 0x7b,0x79,0x13,0xdf,0xfd,0x9d,0xa0,0xfe,0xad,0xbf, + 0xc7,0xf4,0x32,0x5c,0x52,0xb1,0xe5,0xd9,0xe8,0x62, + 0x4c,0x0f,0x6b,0x82,0xb3,0xb7,0x0a,0xa3,0x04,0x11, + 0x6f,0x26,0xc9,0x92,0xf3,0xf2,0x16,0x46,0x4c,0xbf, + 0x93,0xc4,0xee,0xd2,0x3d,0x4d,0x3d,0x55,0x33,0xad, + 0x14,0x11,0x13,0xb8,0x87,0x32,0x5e,0x4b,0x88,0x6a, + 0xa8,0x86,0x85,0x53,0xce,0x76,0xaa,0xa1,0x34,0x59, + 0xb1,0x0d,0x6e,0x53,0xb0,0xd8,0xb4,0x0d,0xa6,0xbe, + 0xb6,0xb6,0x4a,0xba,0x9a,0xb4,0xb3,0xa4,0x80,0xf7, + 0x5c,0x93,0x5d,0x4c,0xd8,0x1b,0x95,0x26,0x2d,0x09, + 0xa9,0x72,0x44,0xd8,0x41,0xb6,0x3e,0xc9,0x41,0xd4, + 0x27,0xa4,0x46,0x77,0xff,0xfd,0x8f,0xa7,0x2a,0xde, + 0x4c,0xea,0x44,0x2f,0x2d,0x31,0xbe,0x3d,0x4e,0x59, + 0xf6,0xfe,0x5c,0x85,0xf1,0x45,0xe7,0xeb,0xa1,0x10, + 0x3d,0x41,0xf7,0x3a,0x31,0xe5,0xde,0x65,0xba,0xd7, + 0x89,0x9b,0xb6,0x18,0x85,0x76,0xf1,0xd0,0x3a,0xd7, + 0xeb,0xf3,0xd8,0x4c,0x8b,0x4d,0xa4,0x5d,0xa7,0x03, + 0x94,0xe2,0xd9,0xa4,0x45,0xe7,0x9e,0x99,0x11,0xbf, + 0x23,0x13,0xd9,0xb1,0x50,0xa6,0x7d,0x4f,0xf7,0xac, + 0x71,0xd4,0x69,0xe0,0xdd,0x07,0xf5,0x77,0xab,0xf2, + 0xf4,0x84,0xed,0x36,0xf4,0xdc,0x9c,0xc5,0x93,0x81, + 0xb0,0x8b,0x1b,0xdb,0x7b,0xff,0xf4,0x99,0x07,0x24, + 0x75,0x0d,0x70,0xb4,0xfa,0xf5,0xe8,0x3b,0xec,0x71, + 0x54,0x8a,0x8c,0x43,0x31,0x2c,0xb9,0x01,0xbc,0x28, + 0x29,0x49,0x87,0x44,0xd2,0xde,0x48,0x02,0x6b,0xfa, + 0x3b,0x54,0xc1,0x6c,0xb2,0xf5,0xc9,0xa2,0x61,0xc3, + 0xb1,0xe9,0x8b,0x70,0x62,0xc0,0x77,0x50,0x21,0xb5, + 0xb7,0x12,0xb4,0x4d,0xfc,0x9e,0xbf,0x49,0xe8,0xe4, + 0xf3,0xca,0x98,0x58,0x56,0x9a,0x92,0xd8,0x24,0x92, + 0x4e,0x29,0x9a,0x44,0xf5,0x5c,0x2b,0x89,0x92,0xeb, + 0x0d,0xc1,0x8d,0x48,0x7b,0xaa,0x8f,0x61,0xf8,0x3d, + 0x36,0x69,0xed,0x56,0x12,0xfa,0x1d,0xc9,0xe6,0x62, + 0x63,0x19,0xa0,0x55,0xe2,0xc6,0xf9,0x7c,0x43,0xe4, + 0x4f,0x7b,0xb0,0x27,0x87,0x26,0x39,0xaa,0x49,0xb5, + 0x3a,0xa1,0x95,0xae,0xfd,0x91,0xde,0x95,0xe3,0xe1, + 0xb8,0xd6,0xc9,0x56,0x2f,0x05,0xae,0xfd,0x4d,0x49, + 0x7a,0x43,0xa6,0xfd,0x7e,0x26,0x95,0xaa,0x4f,0x0a, + 0xc6,0xc6,0xb3,0xad,0x16,0x13,0x69,0x49,0x0d,0x7b, + 0x44,0x5d,0xe4,0xf3,0x47,0x9b,0x16,0xe5,0x22,0xe9, + 0xf5,0x6f,0xe2,0x54,0x42,0xd5,0x87,0x89,0x4a,0x34, + 0xfa,0x72,0x8a,0xef,0x69,0xd2,0x6b,0x52,0xc5,0x4f, + 0x49,0xfa,0xd4,0x36,0x75,0xfb,0x72,0xf2,0x16,0x74, + 0x68,0xc2,0xa6,0x5b,0x91,0x62,0x2d,0x21,0xbc,0x29, + 0xe1,0x4a,0x06,0xa5,0x84,0x86,0x42,0x01,0xef,0xbc, + 0xd0,0xea,0x13,0xf7,0x83,0x09,0xd8,0x98,0xdc,0x1b, + 0x86,0x44,0xa9,0xa8,0x4d,0x77,0x23,0x97,0x4e,0xba, + 0x65,0x4a,0xb6,0xfa,0xfd,0x29,0x8a,0x77,0xff,0xdd, + 0x6f,0xdd,0x2c,0x1b,0x09,0xf1,0x4f,0x5b,0x55,0x53, + 0xef,0x75,0x0a,0xfc,0xa9,0x8f,0xee,0x38,0x39,0xd3, + 0xe1,0x9e,0x04,0x0f,0x87,0x60,0x8a,0x15,0x3f,0x24, + 0x26,0x0f,0x44,0x4b,0x3d,0xb4,0x5c,0x65,0x35,0xa1, + 0x64,0x9f,0xb4,0xea,0x9c,0x1e,0x0a,0xfd,0x7b,0xe2, + 0x8a,0x4c,0x89,0xe8,0x27,0xd5,0xe2,0xf2,0x00,0xf8, + 0xf9,0x2c,0xf5,0x3b,0xdb,0x5c,0x6f,0xf2,0x71,0x4b, + 0x07,0xc3,0x54,0xed,0xf5,0xe4,0xd2,0x7c,0x46,0xb9, + 0x35,0xa3,0x68,0x8c,0x7b,0x3e,0x8e,0x77,0x90,0x2a, + 0xf5,0x4f,0x6c,0x37,0xcc,0x3b,0xae,0xd4,0x6e,0xa1, + 0xa9,0x11,0x3d,0xc4,0x9c,0x95,0x44,0x5a,0x3f,0x4e, + 0x8f,0xe5,0x46,0xc7,0xb6,0x82,0x99,0xed,0x3b,0x0e, + 0x55,0xde,0x8a,0xac,0x5c,0xcd,0x97,0x29,0x24,0x7d, + 0x4e,0xb3,0x26,0xb6,0xf8,0x34,0x59,0xbc,0x9a,0x8b, + 0xf7,0x94,0x5c,0x6b,0x01,0xf6,0x09,0x52,0x36,0xed, + 0xdd,0xeb,0xba,0xae,0x5f,0xbf,0x7e,0xbd,0xf9,0x1f, + 0xb9,0xbd,0x36,0xe9,0x65,0xf5,0x03,0xaa,0x7b,0x9c, + 0x11,0x7f,0x66,0x53,0xf0,0x4d,0x89,0x20,0xe9,0x9a, + 0x51,0xbc,0x98,0xa6,0x46,0x93,0x7e,0x4f,0x7f,0xef, + 0x9b,0x24,0x49,0xf7,0x6d,0xf2,0x4a,0x9b,0xd0,0xad, + 0xe4,0x02,0x90,0x62,0xac,0xc6,0x24,0x47,0x30,0x9e, + 0x78,0x99,0x13,0x7a,0x95,0xce,0xc6,0x0d,0xf0,0x40, + 0x62,0xb9,0x5d,0x87,0xcb,0xed,0x01,0xfd,0x1c,0x8d, + 0x0b,0xee,0x0c,0x49,0x1a,0x4b,0x29,0x59,0xfa,0x49, + 0x80,0x5c,0x2f,0x35,0x65,0xb4,0x13,0xfc,0x3a,0x99, + 0x52,0x4e,0x7c,0x9c,0x4d,0xef,0x7b,0xca,0xe4,0x29, + 0xc9,0x72,0x63,0x73,0x1b,0x38,0x7e,0xbb,0x80,0xf5, + 0xe7,0x5c,0xb5,0x64,0x82,0x73,0x0c,0x64,0xe9,0x3b, + 0xa6,0xe0,0xb1,0xf1,0xae,0x4a,0x87,0xd8,0xa6,0xc2, + 0xa1,0xa4,0xcf,0x05,0x8f,0x61,0x9c,0x3b,0xc2,0xac, + 0x0e,0xbe,0x4c,0x6d,0xa4,0xe4,0xdb,0xe3,0xaa,0x63, + 0x92,0xf8,0xff,0x04,0xb6,0xdd,0xea,0x63,0x10,0x02, + 0xb5,0x21,0x93,0x6f,0xd7,0x68,0x42,0x99,0x88,0x13, + 0x20,0x7c,0x89,0x68,0x01,0xe0,0xcc,0x55,0x27,0x82, + 0x2e,0x05,0xae,0x44,0x96,0x0c,0xeb,0xe3,0xed,0xe0, + 0x22,0xa1,0xcf,0xd4,0xf6,0xa1,0xc3,0x30,0xe5,0x1e, + 0x97,0x88,0xbb,0x11,0xff,0x87,0x5c,0xbc,0x0d,0x42, + 0xf9,0xb8,0x8f,0x4d,0xe2,0x43,0x07,0x1e,0x8d,0x38, + 0x3b,0x1d,0xa7,0xdb,0x0c,0x74,0x13,0x5b,0xa6,0x75, + 0x43,0xd3,0x93,0x54,0xb8,0xa6,0x51,0xf2,0x94,0x40, + 0x4c,0x86,0xbb,0x49,0x54,0x72,0x3a,0xb7,0x7a,0x3b, + 0xbe,0xaf,0x83,0x8e,0x06,0x4d,0x07,0xff,0xb4,0x7f, + 0x3f,0x99,0xa8,0x9a,0x12,0x5f,0x3a,0xf0,0x7b,0xdb, + 0x7d,0x63,0xdc,0x2d,0x34,0x84,0xe3,0xce,0x71,0xb2, + 0x2d,0x71,0x49,0xf1,0x44,0x7f,0xa1,0xbd,0x90,0x92, + 0xd8,0x89,0xda,0xb2,0xa5,0x8a,0x3c,0x92,0xce,0x8d, + 0x48,0x12,0x90,0xb2,0x6a,0x03,0x25,0x2a,0xdc,0x46, + 0x0b,0x7a,0x43,0xec,0x4a,0x64,0xc6,0xbe,0x40,0x9c, + 0xf1,0xd9,0xa0,0x21,0x54,0x26,0x13,0x8f,0x22,0x59, + 0x69,0x0a,0x65,0x82,0x66,0xe9,0x80,0xde,0x4c,0x26, + 0x74,0xae,0x0c,0x65,0xdd,0xf7,0xe7,0x68,0x75,0x99, + 0xda,0x47,0x53,0x65,0x40,0x76,0x1e,0x34,0x1e,0x3c, + 0x11,0xa7,0xb7,0x1a,0x2f,0x74,0x10,0x26,0xb3,0xd7, + 0xc4,0x3f,0x71,0xbc,0x35,0xd2,0x55,0x49,0x9b,0x6e, + 0x9a,0x32,0x74,0xda,0x13,0x26,0x61,0xad,0xd4,0x06, + 0x98,0x92,0xd8,0x94,0xb4,0x75,0x5b,0x01,0x7a,0x2e, + 0x01,0x09,0x2b,0xed,0xbb,0x87,0x76,0x60,0x6d,0x24, + 0x0a,0xb6,0x24,0x4a,0x42,0xe3,0xe0,0xde,0x6b,0xb2, + 0xb8,0xe9,0x09,0x9d,0x5b,0x83,0xb4,0x0e,0x53,0x0b, + 0xd6,0xb4,0x83,0xec,0x77,0xe8,0x41,0x3d,0x99,0xc7, + 0x6e,0xdb,0x7a,0x4a,0x5e,0xd7,0x3f,0xef,0xd7,0x46, + 0x52,0x0a,0x09,0xd9,0x9d,0x5a,0xf9,0x13,0xef,0x30, + 0xad,0x2f,0xb7,0xf6,0x5d,0x1c,0xa6,0x78,0x46,0x67, + 0x0f,0xed,0xb3,0x89,0xe4,0x4d,0x09,0xf8,0xd4,0x06, + 0x77,0xc8,0x4d,0x6a,0xe7,0x6d,0x62,0x09,0x4d,0x4d, + 0x27,0x71,0x4d,0x77,0xef,0x89,0xdc,0x4c,0xf1,0x84, + 0xd4,0xd9,0x81,0x1e,0x52,0x69,0xff,0x38,0x10,0x62, + 0x4b,0x89,0x48,0x03,0x4e,0x34,0x91,0x4d,0xe8,0xbd, + 0x0e,0x84,0xb8,0x09,0xe6,0x17,0x65,0xe0,0x53,0x3b, + 0x6a,0xd2,0xb8,0xa1,0x8c,0xb9,0x25,0x29,0x35,0x1d, + 0x7a,0xc0,0x47,0x21,0x37,0xe5,0x95,0x42,0x66,0xfa, + 0xdc,0x54,0xd5,0xa5,0xc3,0x71,0xa3,0xf7,0x43,0x09, + 0xce,0x84,0x46,0x4d,0x2e,0xf2,0x0e,0x36,0x4d,0xdc, + 0x01,0xf5,0x05,0xd3,0x40,0x9e,0xc4,0x17,0x53,0x35, + 0x46,0xc9,0x49,0xaa,0x84,0xa6,0x24,0x71,0xfa,0xfb, + 0x49,0x71,0xfb,0x83,0x7f,0x6a,0x5a,0x83,0x24,0xa7, + 0x3f,0xf5,0xc4,0x93,0x56,0xc7,0x26,0xb1,0xea,0x87, + 0x8e,0xbe,0xc7,0x4f,0xda,0xb7,0xcb,0x83,0x75,0xb6, + 0x3a,0x17,0x7e,0x4d,0x9a,0xee,0x4b,0x93,0x4b,0x34, + 0x29,0x43,0x02,0x81,0xa1,0xe8,0xa8,0xe4,0x75,0x35, + 0x11,0xce,0xcd,0x77,0x25,0xed,0x9e,0xf8,0x7c,0x86, + 0xc3,0xbf,0x36,0xef,0x47,0xb4,0x9d,0xea,0x83,0xc4, + 0xf7,0x23,0x51,0xc9,0x94,0xf8,0x4d,0xd3,0xa2,0x9b, + 0xb6,0x8a,0x14,0x85,0x95,0x7e,0x66,0x42,0xfa,0x88, + 0xeb,0x42,0x1e,0x8a,0xf4,0x2e,0x54,0x41,0xdd,0xc5, + 0x98,0xa9,0xab,0x41,0x48,0x7f,0xe0,0x99,0xda,0xf1, + 0xfe,0xc9,0x84,0x75,0x32,0x21,0x4f,0x34,0x0c,0x4a, + 0x76,0xf4,0xdf,0x5d,0xfb,0xcc,0x20,0x69,0x95,0xc8, + 0xdf,0xee,0x9e,0xe8,0x1c,0x9d,0xec,0x57,0x96,0x96, + 0x40,0x0f,0xae,0x96,0x4b,0x7c,0x12,0x60,0xf1,0x56, + 0xdc,0x51,0x02,0xb4,0xd9,0x30,0x49,0xb2,0x7e,0x52, + 0xb0,0x85,0xc0,0x5f,0xfd,0xb0,0x71,0x1a,0x3b,0x53, + 0xdb,0x62,0xea,0x13,0x4e,0x3d,0x41,0xd7,0x53,0x24, + 0x62,0x35,0x05,0x9a,0x4d,0xeb,0x4f,0x49,0x82,0xd3, + 0x06,0x77,0x87,0x62,0x22,0x70,0xbb,0x04,0xd1,0xdd, + 0x83,0xbb,0x8e,0x6d,0x1b,0x6a,0xe3,0x89,0x65,0x36, + 0x4c,0x99,0x00,0x53,0xd3,0x3b,0x75,0x7f,0xef,0x90, + 0x89,0xd4,0x03,0xa7,0x6a,0x2f,0x55,0x2d,0x06,0x31, + 0x42,0x3b,0x6c,0xa8,0xe0,0x6a,0x12,0xc0,0x74,0x49, + 0x88,0x43,0x70,0x26,0x12,0x6b,0x30,0x66,0x7d,0x4b, + 0x00,0x1c,0x62,0xd9,0x93,0x8f,0x8d,0x10,0xe4,0x25, + 0xfa,0x48,0xa9,0x9d,0x91,0xda,0xa1,0xee,0x3d,0x52, + 0x62,0x1b,0xd6,0x59,0xe9,0x35,0xb8,0x96,0xeb,0x94, + 0x98,0x13,0x37,0x71,0xcb,0x59,0xeb,0xe8,0x2a,0xa1, + 0x66,0xf0,0xee,0x2b,0xb5,0xea,0x52,0x5b,0xd1,0x25, + 0xea,0xa6,0x30,0x1c,0x75,0x85,0x12,0xbf,0x4c,0x45, + 0x2a,0x07,0x9d,0x9a,0x87,0xb2,0x7c,0x7a,0x06,0x6e, + 0xad,0xf6,0x82,0x61,0x3b,0x75,0xb5,0x45,0xd9,0xf5, + 0x9e,0x09,0x95,0x73,0x09,0x6c,0xea,0x54,0x4c,0xe7, + 0x5f,0x3a,0x5f,0xb7,0xc8,0x11,0x25,0x2a,0x9b,0x84, + 0x78,0x13,0x23,0x37,0x93,0x76,0x09,0xa5,0x49,0x3e, + 0x69,0x53,0x0b,0x2b,0x11,0xe7,0x93,0x56,0xd1,0x30, + 0x14,0x55,0x14,0xeb,0x7f,0xcc,0x50,0x3f,0x75,0xd1, + 0x9d,0x16,0x25,0x71,0x5a,0x60,0x5a,0x85,0x4c,0x2d, + 0x47,0x34,0x27,0x4d,0xaa,0x11,0x14,0xe6,0x82,0x4d, + 0x52,0xfb,0x74,0x24,0x66,0x47,0xd0,0x92,0x36,0x43, + 0x51,0xcf,0x37,0x11,0xcd,0xd3,0x06,0xa7,0x7e,0xa9, + 0x33,0x39,0x4d,0x15,0xdf,0xdf,0x98,0xd0,0x6d,0x00, + 0x81,0x3e,0xc6,0x2e,0xcf,0xb6,0x26,0x6b,0x8d,0xb0, + 0x61,0xc9,0x13,0xe9,0xcd,0x03,0x26,0xb5,0x42,0xfb, + 0x7f,0xdf,0xa3,0xa5,0x53,0x10,0x52,0x0b,0x89,0x0d, + 0x9f,0xe6,0x2f,0xab,0xe3,0x9a,0xda,0x40,0x1b,0x33, + 0x51,0x7a,0xb7,0x1b,0x4d,0x10,0xf3,0x4e,0x8a,0xfa, + 0xfc,0x92,0x34,0x3f,0x50,0x28,0xe5,0x98,0x10,0x67, + 0xc4,0x79,0x27,0xfd,0xfb,0xaf,0x39,0x96,0x10,0xbf, + 0xef,0x9b,0xef,0xf0,0xc3,0xcf,0x19,0x62,0xc2,0xdb, + 0xcf,0x39,0xed,0x2c,0x35,0xf1,0x9c,0x0e,0x25,0x43, + 0x90,0x3f,0x93,0x65,0xca,0x86,0x97,0x97,0x7e,0x5e, + 0x79,0x6c,0x13,0x67,0x62,0x6a,0x4b,0xa4,0x38,0x4f, + 0x71,0xe5,0x36,0xa7,0x4c,0xc8,0x75,0x9a,0xf4,0x9b, + 0xf6,0x8d,0x33,0x69,0x76,0xa2,0x78,0x13,0x61,0xb7, + 0xb7,0xed,0xd2,0xfb,0xd0,0xe7,0xe4,0x38,0x34,0x53, + 0x6b,0x94,0x50,0xe0,0xb4,0x17,0xd2,0xbb,0xa7,0x38, + 0x37,0x09,0x02,0xba,0x9f,0x51,0xf4,0x55,0x87,0x64, + 0xd2,0x59,0xb5,0x4d,0xda,0x64,0xbd,0x58,0xe3,0x5b, + 0x4a,0x70,0x1d,0x57,0x88,0xf6,0xd0,0x96,0xe7,0x93, + 0x0a,0x86,0x37,0x2f,0xb0,0x29,0xab,0x74,0xa3,0x8b, + 0xd3,0x22,0x9e,0xd0,0x8e,0x09,0x4d,0x21,0x36,0xb8, + 0x42,0xc6,0x6a,0xfe,0xf7,0xc9,0x61,0x95,0xaa,0x4e, + 0xe2,0xe4,0xe8,0xbd,0x4d,0xbd,0xf0,0xa9,0x75,0xe3, + 0x26,0x8b,0x5c,0x6b,0x66,0xf2,0x63,0xdb,0xb0,0xff, + 0xd3,0x22,0xd2,0xf7,0xaf,0x87,0x5a,0xe7,0x53,0x6c, + 0xfc,0x8e,0xa6,0x40,0xb8,0x71,0x5b,0x97,0x6b,0xb2, + 0x62,0x82,0x93,0x6c,0x7e,0x22,0x2a,0x4e,0xc1,0x33, + 0x8d,0xdc,0xba,0x35,0x9e,0xcc,0x3d,0xa7,0x44,0xc7, + 0x19,0xcd,0x4e,0xa2,0x9e,0xdb,0x09,0x49,0xb5,0x45, + 0x48,0xae,0xe0,0xb4,0x0f,0xa9,0x95,0xba,0x69,0xd3, + 0x74,0x41,0x44,0x15,0x29,0x6c,0x9f,0x7b,0x6f,0xe2, + 0x22,0x5f,0x22,0x77,0xcf,0x6d,0x0f,0xd6,0x12,0x29, + 0xa8,0x94,0x40,0xeb,0xba,0x4d,0xc6,0xc9,0x9b,0x3d, + 0x26,0xf7,0xbf,0x42,0x93,0x5b,0x5c,0xaa,0x44,0x41, + 0xd8,0xba,0x98,0xd3,0xd4,0x52,0x1a,0xbc,0x58,0x4c, + 0x2a,0x8e,0xba,0x50,0x44,0x5f,0x48,0x3e,0x80,0x6e, + 0x4f,0xbb,0xf8,0xec,0xda,0xa9,0x8e,0x13,0xe5,0x50, + 0xd0,0x4d,0x6c,0xd0,0xe7,0x4a,0xf6,0x2f,0x44,0xa5, + 0x08,0xf4,0x0f,0xbb,0x3e,0x82,0xa5,0x8a,0x45,0x6c, + 0x7b,0x8b,0x50,0x0a,0xf7,0x22,0xb4,0x35,0x81,0x19, + 0x9b,0xfb,0x98,0x90,0xa1,0x0d,0xe7,0x88,0xe2,0x85, + 0x9b,0x06,0xdb,0x78,0x85,0x51,0xd7,0x67,0x4a,0xbc, + 0xcf,0x39,0xff,0x20,0x40,0x09,0x36,0x4b,0xe6,0x76, + 0x49,0x29,0x78,0x2b,0x1c,0x48,0x59,0xf5,0x26,0x89, + 0x49,0x5a,0x17,0x1b,0x79,0xee,0x7b,0x22,0x68,0xea, + 0x83,0xa7,0xa9,0x8e,0xcd,0x68,0x3c,0x55,0xb0,0x9f, + 0x90,0x5b,0xfb,0xc8,0x30,0xc1,0x80,0x84,0x5e,0x4c, + 0xea,0xaa,0xa9,0xc2,0x76,0xe8,0x57,0xaa,0x20,0xf4, + 0xbe,0xc9,0xc4,0x71,0x4a,0x08,0xd2,0xc4,0x8b,0xd1, + 0x9d,0x59,0x57,0xc3,0xa9,0x4a,0x9c,0x50,0xcc,0xbf, + 0xfd,0x6c,0xe5,0x03,0x11,0xe7,0xca,0x71,0x7c,0xa8, + 0x55,0xe8,0x96,0x36,0x8d,0x82,0xd2,0xf3,0x4b,0x8a, + 0xe6,0x93,0x95,0xc4,0x54,0xdd,0x3b,0xc5,0xe9,0x0d, + 0x4c,0x6f,0x9e,0xc3,0xa1,0x9f,0x87,0xc2,0xe8,0x6d, + 0xec,0x7b,0x23,0x4c,0x38,0x29,0xa6,0xa7,0xc4,0x60, + 0x2a,0x04,0xfb,0x9e,0xfd,0x24,0xbe,0x4d,0x62,0xb2, + 0xdf,0x89,0xe4,0x31,0x88,0x48,0x7d,0x7d,0x7d,0x9d, + 0x89,0x68,0xbd,0x15,0xbc,0x75,0x71,0x2f,0x8d,0x39, + 0x6f,0xf6,0xc2,0x80,0xbc,0xc6,0xb6,0xdf,0xa6,0x43, + 0xb1,0x91,0xc9,0xa0,0x6b,0x4e,0x9e,0x94,0xa9,0xb8, + 0x26,0x39,0x96,0x0d,0x0d,0xa4,0x8b,0x21,0xa6,0xf1, + 0x7d,0x97,0xf4,0x26,0xe4,0x75,0x3a,0x4f,0xc2,0xf9, + 0x11,0xd7,0xa0,0xde,0x63,0x7a,0xc7,0x53,0x57,0x28, + 0xa1,0x68,0xd0,0xaa,0x7c,0x7b,0x4e,0x29,0x99,0xdd, + 0x68,0x0b,0xbe,0xe8,0xa5,0x4e,0x46,0x9a,0xd4,0x9f, + 0x9b,0x48,0x65,0xd4,0x13,0x4e,0xfc,0x1c,0x33,0x79, + 0x50,0x34,0x15,0x24,0x1b,0xb4,0x26,0x6f,0x93,0x89, + 0x80,0x9b,0xa6,0xb5,0x36,0x5c,0xa0,0xad,0x77,0xda, + 0xa4,0x02,0x9b,0xac,0x49,0x92,0x4b,0x73,0x92,0xa4, + 0xdf,0x40,0x99,0x49,0xd6,0x5d,0x95,0x8d,0x37,0x52, + 0x05,0x93,0x7c,0xfb,0x44,0xa8,0x9d,0x9e,0x0b,0xad, + 0xa3,0xd0,0xbb,0x2f,0xba,0xe7,0xc9,0xd7,0x4e,0x2b, + 0x4d,0x73,0x3d,0xb5,0x19,0x0c,0x48,0x50,0xfe,0x24, + 0xe4,0x39,0xa1,0xaf,0xd3,0x67,0x6b,0x65,0x39,0x4c, + 0xd7,0x15,0xf9,0xfa,0x84,0x36,0x5f,0x29,0x59,0x71, + 0x93,0x3c,0x4a,0x56,0x56,0x7f,0xc3,0xfb,0x48,0x64, + 0xc9,0xcb,0xf0,0xa1,0xe4,0x79,0x8f,0xee,0xe8,0x5a, + 0x0c,0x4e,0xf1,0x92,0xd6,0x7e,0xf7,0xe7,0xd2,0xa9, + 0x95,0x69,0x52,0x36,0xdd,0x77,0x4a,0x4e,0x09,0x5d, + 0x0b,0xad,0xb1,0x22,0x01,0xd5,0x34,0xa8,0xe1,0x62, + 0x20,0x25,0x55,0x44,0x75,0xa0,0xd8,0xb8,0x55,0xc1, + 0xa7,0xef,0x9f,0xb4,0x9d,0x52,0xe1,0xd5,0xc5,0x31, + 0x3f,0x99,0xee,0x53,0xdd,0x9b,0xe9,0xb9,0x93,0x80, + 0xe4,0xc4,0x9f,0xd1,0xdf,0x99,0xda,0xe3,0x9b,0x33, + 0xeb,0x13,0x5a,0xc4,0xd6,0x28,0x35,0x81,0x20,0xb4, + 0x8e,0xa6,0x22,0x76,0x23,0xf8,0xf9,0x43,0x2f,0x49, + 0xba,0x19,0xf4,0x50,0xd5,0xe9,0xd9,0x05,0xb8,0x94, + 0x10,0xd0,0x43,0x9a,0xc8,0x8f,0x93,0x9a,0x29,0x65, + 0xb6,0xe9,0xc0,0xdc,0xda,0x20,0xd0,0x75,0x91,0xbe, + 0x4d,0x0a,0x2c,0x09,0xaa,0x4e,0x88,0x59,0xe2,0x45, + 0xd1,0x08,0xa5,0x06,0x7e,0xba,0xff,0x7e,0xc0,0x4d, + 0x46,0x80,0xc9,0x9f,0x6a,0x43,0x12,0x9d,0x9e,0xf5, + 0x24,0xc1,0xee,0x0e,0x9b,0x89,0xaf,0xb0,0x9c,0x12, + 0x9a,0xee,0xb1,0x26,0x5f,0xa1,0xd4,0xb2,0xd4,0x76, + 0x67,0x3a,0xd0,0x92,0x5b,0x7c,0xfa,0x1d,0x6d,0xeb, + 0x26,0x04,0x46,0x4d,0x84,0x87,0xb6,0x56,0x6d,0x2d, + 0x45,0xf4,0x33,0x69,0x6f,0x6c,0xf6,0x99,0x33,0x3f, + 0xd6,0x04,0xdc,0x90,0xc5,0x2b,0xc5,0x8f,0xe4,0x3c, + 0x4e,0xc9,0xdf,0x76,0xc8,0x43,0x5b,0x64,0x54,0x6c, + 0x4c,0x13,0x3e,0x89,0x1b,0x32,0xf1,0x7d,0xe8,0x11, + 0x27,0x32,0xeb,0x94,0x98,0x6c,0xd0,0x3b,0x8a,0xff, + 0x93,0x48,0x1e,0x21,0x8a,0xc9,0x30,0x7a,0x2b,0x9f, + 0x41,0xeb,0x40,0xd0,0xc3,0x72,0xb4,0x8a,0x94,0x9c, + 0x81,0x0c,0xc2,0x83,0x1e,0x30,0x15,0x96,0x13,0x72, + 0xf1,0x37,0xd3,0x78,0x69,0x8d,0x4c,0x44,0xf6,0xa5, + 0xaf,0x61,0x6c,0xe3,0x4e,0x72,0x35,0x6e,0x9f,0x4d, + 0x44,0xf9,0x0d,0x50,0xa3,0x52,0x2c,0xd3,0x3e,0xbe, + 0xae,0xcb,0x73,0x80,0x54,0x92,0x5d,0x2b,0xc5,0x24, + 0x11,0x9e,0x0e,0x94,0x04,0x4f,0x85,0x09,0x92,0xda, + 0xa2,0x0b,0xd3,0x44,0x92,0x7b,0xf0,0x44,0xb8,0x4a, + 0x95,0xdd,0x64,0xde,0xe6,0x78,0x1d,0x9f,0x64,0xcc, + 0xae,0x4a,0x4b,0x28,0x16,0x91,0x03,0xd3,0x06,0xfa, + 0x1b,0x1b,0x93,0x94,0xf8,0xea,0x82,0xa4,0xf1,0xfe, + 0xc9,0xeb,0x6c,0x32,0x5e,0x24,0xb4,0x47,0xaa,0xab, + 0x4a,0xef,0x23,0x55,0x8a,0xf4,0x3d,0x0e,0x5e,0x27, + 0xe9,0xf7,0x94,0x78,0xeb,0xf7,0x29,0xf2,0x42,0x10, + 0xfc,0xe6,0x30,0xdc,0x20,0x59,0x94,0x40,0xa6,0xfb, + 0x4a,0xa2,0x82,0xf0,0x59,0xe5,0xc4,0xee,0x26,0xce, + 0x4d,0x42,0x1c,0xc9,0xb0,0xd6,0x5d,0xeb,0x24,0x93, + 0xff,0xc9,0x84,0x6a,0x98,0x12,0xab,0xa4,0x69,0x12, + 0xd0,0x80,0x4a,0xfc,0x8f,0x69,0x68,0x20,0x19,0xd7, + 0x4e,0xeb,0x2d,0x0d,0x97,0x48,0x22,0x58,0x09,0x8d, + 0x4c,0xc5,0xcd,0x54,0x04,0x53,0x45,0xef,0xa6,0x26, + 0xa7,0x67,0x94,0x34,0xa0,0x36,0xfb,0x7c,0x8a,0xfd, + 0x93,0x4a,0xfc,0x26,0x71,0xd8,0xd8,0x4b,0x50,0x4b, + 0x2b,0xdd,0xd3,0x46,0x8c,0x77,0xea,0xc4,0x6c,0xce, + 0xa3,0xc9,0x61,0x7d,0xf3,0x7b,0x53,0xbb,0x72,0xe2, + 0xf0,0xe8,0xb9,0x4b,0x46,0xdd,0x2a,0xb4,0x98,0xae, + 0xe3,0x91,0x00,0x6d,0x79,0x3b,0xf4,0x81,0xcd,0xd8, + 0xed,0xaf,0x1f,0x4c,0x82,0xde,0x26,0xcd,0x83,0x69, + 0xf1,0xa7,0x11,0xe8,0x4d,0x9b,0xef,0xf2,0xd3,0x63, + 0x35,0x3d,0xe0,0x84,0x8e,0x25,0x18,0x56,0x0f,0x0f, + 0x6a,0x21,0x68,0x52,0xe2,0x0e,0x57,0x7a,0xce,0x5a, + 0x39,0x4f,0x28,0x13,0x5d,0x1f,0xf5,0xdd,0xa7,0x89, + 0x9c,0xb4,0xa9,0xb6,0xc2,0x83,0x84,0x1e,0xba,0xc4, + 0x30,0x25,0x6a,0x53,0xc0,0x4a,0x87,0xca,0x34,0xca, + 0xba,0x99,0x62,0x70,0x07,0x12,0x19,0x8b,0x9a,0x77, + 0x5d,0xbd,0x30,0x99,0xd4,0xcb,0xa9,0x65,0x49,0x6b, + 0x81,0x50,0x48,0xa8,0xd0,0xff,0xca,0x00,0xf5,0x03, + 0xa4,0xb8,0xc8,0x4e,0x42,0xd6,0x42,0x4d,0x45,0x46, + 0x4f,0xd4,0xf4,0xd9,0xd1,0x33,0x37,0xe8,0x01,0xee, + 0xef,0xed,0x08,0xb7,0xe3,0xc4,0xb8,0x16,0x15,0x25, + 0x7b,0x93,0x9b,0xb7,0xdb,0xaf,0x89,0xc8,0xeb,0xf8, + 0x19,0xd3,0xbd,0x2e,0x0e,0xe6,0xda,0xfa,0x23,0x4e, + 0x48,0xd3,0x94,0x08,0xba,0xc3,0x91,0xac,0x3a,0x36, + 0x96,0x11,0x9b,0x42,0x7b,0xab,0x65,0x46,0x07,0xf6, + 0x27,0x49,0xd2,0x27,0xfb,0x12,0x8c,0x85,0x1f,0x22, + 0x81,0x9b,0xc1,0xa6,0x54,0xfc,0x6f,0xb9,0x71,0xd3, + 0xe4,0xf3,0xc4,0x43,0x4a,0x74,0x80,0xc9,0x8f,0xcc, + 0x7d,0xef,0x6b,0x33,0xa6,0xb8,0x19,0x8b,0xa6,0x44, + 0x64,0x52,0xa5,0x74,0x0f,0x21,0x1d,0xdc,0xa9,0x72, + 0x4d,0x6d,0x91,0xb4,0x51,0xdd,0x4b,0x4b,0x48,0xd1, + 0xd4,0xf2,0xd2,0x6b,0x32,0x95,0x74,0xa5,0x84,0x63, + 0x82,0xff,0xa6,0x76,0x02,0xfd,0x8e,0xeb,0x0b,0x53, + 0x45,0xb4,0xd9,0x0c,0x94,0x34,0x4f,0x81,0x6c,0x52, + 0xef,0xed,0xef,0xa3,0xeb,0x9a,0x50,0x60,0xda,0x6e, + 0xaa,0xad,0x41,0xa8,0x9a,0x3a,0xba,0x44,0xd5,0x05, + 0x36,0x97,0xec,0x4e,0x93,0x93,0xca,0x59,0x9b,0xf6, + 0xc1,0xb6,0xca,0x9e,0xac,0x4d,0xa6,0xb6,0x8a,0x7c, + 0xf7,0x9b,0xce,0x8e,0x43,0x02,0x1d,0x5a,0x4b,0x13, + 0x71,0x7f,0xe3,0x3b,0x48,0x1c,0xaf,0x09,0xe6,0xd7, + 0x21,0x05,0x52,0x48,0xa7,0x04,0x35,0x15,0x37,0xc9, + 0x64,0x78,0x63,0x41,0x40,0x28,0xf1,0x86,0x7f,0x36, + 0x4d,0x0b,0xea,0x3b,0xda,0x38,0x9c,0x87,0xe9,0xba, + 0x11,0x6d,0x74,0xba,0x46,0x0b,0x3a,0x40,0x4d,0x3a, + 0x32,0x53,0xf2,0xbf,0xe1,0x88,0x50,0xe1,0x3c,0x75, + 0x14,0x36,0x85,0x97,0x9b,0x56,0x4b,0xb1,0x88,0xd6, + 0xf5,0xe6,0x3b,0x08,0x81,0xea,0x86,0xa1,0x09,0xc1, + 0xa6,0x29,0x55,0xe2,0x82,0x51,0x92,0x93,0x50,0xfd, + 0x8d,0xb5,0xca,0x94,0x50,0x26,0x9e,0xdb,0x27,0x2a, + 0xe4,0x01,0x31,0xfb,0x59,0x77,0xbf,0x93,0xd6,0xc2, + 0x04,0x63,0xa6,0x16,0x41,0x4a,0x42,0x36,0x8e,0xd7, + 0xfa,0xc0,0xa7,0xc5,0xbb,0xd1,0x45,0x50,0x4f,0x97, + 0xf4,0x3b,0xd4,0x9f,0x4e,0x1a,0x0d,0xa9,0xfd,0xb0, + 0xd1,0x93,0x70,0x09,0xc8,0x54,0x21,0x28,0x31,0x75, + 0x6a,0x59,0x4c,0xed,0x83,0x14,0x20,0x53,0x6f,0x7e, + 0x22,0x27,0x6e,0x82,0x4b,0x82,0xb8,0xa7,0xf6,0xd8, + 0x34,0x51,0x70,0xb5,0xc9,0x38,0xf0,0xbe,0x1a,0x93, + 0xe9,0x4d,0xdf,0x7e,0x12,0x18,0xfb,0xb4,0x75,0xab, + 0x9f,0xef,0x34,0xa1,0xb6,0xe4,0xd7,0x94,0xec,0x11, + 0xbf,0x26,0xb5,0x20,0xa6,0x11,0xd7,0x64,0x6c,0x39, + 0x21,0x8f,0x29,0xb9,0xee,0x86,0x8a,0x03,0xfa,0x52, + 0xf7,0x14,0xd9,0xf6,0x7e,0x48,0x07,0x2c,0xad,0x07, + 0x37,0x11,0xba,0xf1,0xbb,0x4b,0x88,0x73,0x18,0xed, + 0xc6,0x69,0x3e,0x35,0x82,0x56,0x94,0x6c,0x5a,0x93, + 0x2a,0xa2,0x7a,0xff,0x79,0x42,0x54,0x26,0xee,0x5c, + 0xda,0x53,0x0e,0x85,0x4d,0x42,0xb5,0xd3,0x54,0xd7, + 0x84,0x50,0x6c,0xa8,0x07,0x1b,0x3a,0x87,0x43,0xd4, + 0xd4,0xec,0xda,0x5d,0x33,0xf1,0x69,0xd3,0xfb,0x27, + 0xf1,0xcb,0x4f,0x0c,0x66,0x29,0x76,0x25,0x72,0xf8, + 0x27,0xa8,0xad,0xe3,0xe5,0x7c,0x32,0xd0,0x12,0xce, + 0xe0,0x9f,0x89,0xaf,0x4d,0x5c,0x9d,0x00,0x14,0x97, + 0x80,0xbd,0x9c,0xe8,0xd3,0x36,0xf3,0xd5,0xec,0x71, + 0x1a,0x6f,0x74,0x7d,0xce,0x4f,0x5a,0x6d,0x49,0x3b, + 0x22,0x1d,0xdc,0x34,0xa9,0xe6,0x78,0x48,0x8e,0xa1, + 0x4f,0xc1,0x26,0x55,0xb9,0x93,0xff,0xcf,0x64,0xc8, + 0xa7,0xad,0x09,0x87,0x4e,0x7d,0xda,0x73,0xd7,0xc3, + 0x61,0x9a,0x94,0xda,0x10,0xd3,0xa6,0x60,0x2e,0xd7, + 0x53,0x93,0xca,0xf6,0x27,0x15,0xd9,0xa4,0x3f,0xb2, + 0x45,0x01,0xb7,0x6a,0xb5,0x89,0xd7,0x45,0x68,0xc6, + 0xd6,0xe4,0x72,0x33,0x82,0xea,0x12,0xb7,0x84,0x34, + 0xd0,0xda,0xdf,0x26,0x1d,0xea,0xfb,0x33,0x40,0xd6, + 0x95,0x44,0x45,0x69,0x5f,0x52,0x02,0xa9,0x6b,0x83, + 0xb8,0x52,0x9b,0xf6,0x27,0xe9,0x87,0x6d,0xdb,0x37, + 0x01,0xbd,0xfb,0x69,0x81,0xff,0xf9,0xf3,0x47,0x7f, + 0xaf,0xb6,0x48,0x25,0xa1,0x71,0x2e,0x59,0xdf,0x4c, + 0xc3,0x38,0x84,0x29,0xa0,0xee,0xb5,0xa9,0xfa,0xa7, + 0x35,0x3d,0xb5,0xca,0x27,0x61,0xba,0x6d,0x2c,0x18, + 0xf6,0x7c,0x11,0x87,0x86,0xe2,0x47,0x42,0xbf,0x13, + 0x42,0x4a,0x3c,0xc8,0x4f,0x54,0x93,0x13,0x62,0xdf, + 0xdf,0x4d,0xe2,0x4b,0x92,0x36,0x59,0x8a,0x03,0xd3, + 0x30,0x8e,0xfb,0xfc,0x09,0xfd,0xa7,0xe2,0x77,0x1a, + 0x80,0xd9,0x78,0x7f,0x4d,0xda,0x6a,0x53,0xb7,0x29, + 0xd1,0x63,0x5e,0x9b,0xcd,0x99,0x16,0xb2,0x2c,0x9a, + 0x72,0x81,0x6b,0x82,0xc5,0x5c,0xb5,0xb3,0x91,0x4c, + 0x4f,0x87,0xc7,0x66,0xe2,0x68,0x92,0xd4,0xde,0x8c, + 0x41,0x3b,0x8e,0xce,0x56,0xa4,0xae,0x07,0xe3,0x34, + 0x9d,0xa6,0x1b,0x42,0x37,0xdf,0x76,0xaa,0x2a,0x4d, + 0xb2,0x6d,0x21,0xe5,0xc9,0x52,0x64,0xeb,0x66,0x3d, + 0x3c,0xa7,0x72,0xfc,0x9e,0x34,0x0e,0x3b,0x69,0x30, + 0x6d,0x92,0x96,0x09,0x42,0xdf,0xb4,0x63,0x15,0x71, + 0x9c,0xc8,0x7d,0x74,0x70,0x27,0xa4,0x6e,0x83,0xe2, + 0x6d,0xac,0x59,0xb4,0x15,0xa4,0xd3,0x83,0xc9,0x17, + 0x8f,0xda,0xda,0xa9,0xd2,0x53,0xef,0xa4,0x29,0x81, + 0x1f,0xc8,0xd2,0xd5,0xf9,0x0b,0xae,0x92,0x9e,0xa6, + 0x5d,0xfa,0xb8,0xfb,0x86,0xfb,0x30,0xb5,0x56,0xb7, + 0x55,0x74,0x12,0x90,0x04,0xd4,0xa3,0xd2,0xe4,0xe5, + 0xa6,0x0d,0x3c,0xdd,0xa3,0x6b,0xdd,0x86,0x91,0xfd, + 0xd5,0x44,0xee,0xe6,0x5e,0xff,0x06,0x6d,0xd8,0xc4, + 0x9b,0xa9,0x75,0x99,0xb4,0xd0,0xa6,0x35,0x40,0x6d, + 0x20,0x25,0xe9,0x0e,0x6d,0xc2,0xf5,0xfd,0x6f,0x49, + 0xc2,0x29,0x71,0x99,0xc4,0x27,0x37,0xf7,0x48,0x05, + 0xae,0x3b,0xbf,0x28,0x26,0x87,0x7d,0x5f,0x30,0xd0, + 0x62,0x51,0xe9,0x14,0x83,0xf5,0x7f,0x34,0x08,0x51, + 0x55,0xff,0x72,0x80,0x54,0x85,0x71,0xb3,0x10,0xfb, + 0x17,0xa8,0x6e,0xc5,0x54,0x55,0x4d,0xbd,0xd2,0x04, + 0xaf,0xa5,0x17,0x97,0x92,0x95,0x84,0x0c,0xa4,0x51, + 0x41,0xea,0xbf,0x4e,0x90,0xba,0xb6,0x16,0x3f,0x49, + 0xe2,0x1c,0xcc,0xba,0x39,0x80,0x36,0xc9,0x90,0x43, + 0xb3,0xa6,0x91,0x43,0x87,0x78,0x4d,0x13,0x7f,0x89, + 0x74,0x3e,0x79,0xc6,0xa4,0x76,0x18,0x05,0xb0,0xa0, + 0x20,0x3d,0x26,0x1a,0x93,0x2a,0xeb,0x26,0x60,0x25, + 0x2e,0xc5,0x46,0x9b,0xc2,0x49,0x4f,0x50,0xff,0x7e, + 0xab,0x98,0xba,0x2d,0x68,0x26,0xf4,0x8b,0xda,0x3e, + 0x0a,0x21,0x6c,0x10,0xd9,0xef,0x04,0xf7,0xe7,0x7f, + 0xdf,0x85,0x53,0x51,0x41,0x34,0x39,0x73,0x93,0x52, + 0xbc,0x5b,0x57,0xe9,0xc0,0x4b,0x85,0x42,0x5a,0x2f, + 0xa4,0x0c,0xee,0x5a,0x40,0x44,0xc8,0x4f,0x7b,0xc6, + 0x69,0xc1,0x24,0x2e,0xe1,0xa7,0x13,0x49,0x89,0xdf, + 0xb8,0xd1,0x8d,0x71,0x87,0x4b,0x42,0x63,0x3f,0x6d, + 0xa1,0x4d,0xad,0x7c,0x17,0x9b,0x53,0xcb,0x8c,0x88, + 0xd8,0xa6,0xfd,0x12,0x89,0xbe,0x29,0x8e,0x6f,0xa6, + 0x84,0x93,0xfe,0xd1,0xf4,0x67,0x9b,0x64,0xea,0x13, + 0xb9,0x12,0xc7,0x8f,0xdb,0xf0,0x7d,0x27,0x0a,0xc4, + 0x27,0xe4,0xea,0x29,0x8e,0x4e,0xdc,0xbf,0x4d,0x12, + 0xf9,0xe8,0xae,0x90,0xb7,0xca,0x64,0x63,0x41,0x90, + 0x6a,0x6a,0x21,0x25,0x25,0xcc,0x84,0x04,0xa5,0x91, + 0x4e,0x77,0xdd,0x24,0x18,0xb5,0x21,0xcb,0x92,0x77, + 0xcb,0x06,0xf6,0x4b,0x81,0x85,0xd0,0x89,0x04,0x55, + 0x27,0x91,0xc9,0x0f,0x4c,0xbb,0x51,0x35,0x7a,0xa3, + 0x83,0xb3,0xd5,0xde,0x98,0x84,0xfc,0xb6,0xd3,0x65, + 0x21,0x19,0xaa,0x69,0xd3,0xd3,0x3a,0x55,0x94,0x2e, + 0xc1,0xa8,0x29,0xd0,0x25,0x5e,0xd6,0xb4,0xa6,0x75, + 0x5f,0xa4,0x31,0x64,0x73,0xa0,0x54,0x58,0xb7,0xb5, + 0x69,0xb1,0xba,0x77,0xf7,0x7a,0xbd,0x4a,0x93,0x03, + 0xb2,0x84,0xa1,0xd6,0x00,0x4d,0x17,0x91,0xbb,0xf5, + 0x05,0x04,0x59,0x25,0x81,0xa7,0xc4,0x27,0x91,0x6d, + 0x8d,0x2e,0x57,0x51,0xcb,0x69,0x8b,0x8e,0xd0,0xde, + 0xbd,0x7f,0xcf,0x49,0xf8,0x27,0x04,0x58,0xdb,0x70, + 0x8a,0xa0,0x13,0x7a,0xbb,0xf1,0x3e,0x9a,0xda,0x2b, + 0x09,0xcd,0xdb,0x70,0x49,0x3e,0x6d,0xdd,0x26,0x12, + 0x2e,0x25,0x1f,0xcb,0xd8,0x66,0xd1,0x70,0xfa,0xfd, + 0xa9,0x8d,0x32,0x4d,0x2f,0x4f,0x14,0x80,0x24,0x07, + 0x30,0xb9,0xc9,0x7f,0x72,0xa0,0x6f,0x74,0xeb,0x52, + 0x5b,0x9f,0xce,0xb0,0x04,0x60,0x4c,0x9f,0xfd,0xe9, + 0xfb,0xdb,0x90,0xa0,0xe9,0x8c,0xd8,0xca,0x60,0x90, + 0x74,0x89,0x3e,0xf7,0xdf,0xc9,0x08,0xcf,0xb9,0x6f, + 0xa7,0xac,0x70,0x72,0x6f,0xa7,0x8c,0x31,0x21,0x15, + 0xb4,0xa9,0xb6,0x87,0xa0,0x2e,0x5e,0x32,0x62,0x23, + 0x12,0x1a,0x1d,0x70,0x29,0x10,0xa4,0x0c,0xd9,0x11, + 0x26,0xd3,0x7d,0x7d,0xda,0x6a,0x4a,0xd5,0xda,0x36, + 0x03,0x9f,0xe0,0xdf,0xd4,0x6e,0xd9,0xc2,0xf0,0x93, + 0xae,0x13,0xa9,0x39,0x13,0x77,0x62,0xd2,0xdf,0xa1, + 0x9f,0xa7,0xe7,0x4d,0xc9,0xd0,0x44,0x6c,0x4d,0xd5, + 0x4b,0x6a,0x4b,0xa6,0x60,0xe9,0xd0,0xb8,0x8d,0xbf, + 0xd8,0x64,0xbf,0x32,0x29,0xb0,0xf6,0x22,0xa8,0x4f, + 0x9a,0xf4,0xa4,0x8e,0xc8,0x9f,0x50,0x19,0xd6,0x94, + 0x60,0x74,0x23,0x52,0xb7,0x0f,0xdd,0xc0,0x06,0xd9, + 0x2b,0xb8,0xd6,0xdb,0xa6,0x7d,0x29,0xcf,0xea,0x61, + 0xf8,0x49,0xe6,0xa2,0xfa,0x7d,0xee,0xf9,0x3b,0xe4, + 0xfb,0x93,0x03,0x65,0xe1,0xd5,0xb6,0xda,0xdf,0x9a, + 0x80,0x4c,0xeb,0x29,0x59,0x18,0xa4,0x3d,0x90,0xc8, + 0xe4,0x69,0x78,0x63,0xda,0x8b,0x7f,0xa3,0x0f,0xa4, + 0xd7,0x44,0xdf,0x41,0x45,0xf9,0x24,0x77,0x42,0xc3, + 0x15,0xa9,0xb8,0x9c,0x38,0x52,0x66,0x1f,0xbd,0xad, + 0x47,0x42,0x6b,0x3a,0xc1,0xbc,0x9b,0x47,0x6f,0x88, + 0xd4,0xd3,0xf3,0xa7,0x6b,0xed,0xdf,0xb9,0xb5,0x10, + 0xd9,0xb4,0x07,0x13,0x2a,0x9b,0xf8,0xa4,0x14,0x03, + 0x3a,0xe2,0xfa,0x3b,0xf1,0x6f,0x9c,0x4e,0xc3,0x94, + 0x8c,0xb8,0x97,0x9b,0x44,0xf1,0x88,0x4c,0x9c,0x82, + 0xf2,0xc6,0x08,0x70,0x52,0x10,0xa5,0x80,0xe9,0xae, + 0x29,0xf5,0x31,0x53,0x80,0x98,0xaa,0x31,0x0a,0x9c, + 0x1b,0x9e,0x89,0x4b,0xe4,0xe8,0xbd,0x90,0x9b,0x3c, + 0xbd,0xdb,0xd4,0x2e,0xdb,0x1a,0x87,0x4e,0x7d,0x63, + 0x45,0x30,0x36,0xc9,0x5d,0xdf,0xc8,0x9b,0x60,0x47, + 0x1b,0x83,0x0e,0xcd,0xad,0xa0,0x1d,0x05,0x92,0xcd, + 0xc4,0xca,0x46,0x2b,0x89,0x12,0xf6,0x6d,0xb2,0x3a, + 0xf1,0x83,0xdc,0x64,0x10,0x04,0xde,0x72,0xf7,0xeb, + 0xfc,0xc9,0xa6,0xc4,0x7d,0x33,0x45,0xda,0x55,0x9f, + 0xdb,0xa0,0x17,0xf2,0x97,0x36,0xc5,0x01,0x25,0x7b, + 0xee,0x00,0x51,0x14,0x20,0x19,0xa4,0x6e,0x5a,0xbb, + 0x14,0xbb,0x1c,0xbf,0x61,0x12,0x50,0x4c,0xed,0xaa, + 0x84,0x04,0x9d,0x73,0xae,0x3f,0x7f,0xfe,0x4c,0xca, + 0xd5,0xab,0xfb,0x86,0x84,0xaa,0xce,0x3f,0x84,0xac, + 0x71,0xfd,0xa5,0xfd,0x44,0x89,0xe1,0x94,0x54,0x25, + 0xcf,0x46,0xf5,0x2a,0xdc,0x0c,0x25,0xa4,0xc3,0x3b, + 0xb5,0x82,0x12,0x52,0xb4,0x71,0x6c,0xdf,0x26,0xbd, + 0x13,0x02,0x48,0xc9,0x5d,0x42,0xb7,0xd5,0xee,0xe6, + 0x9f,0x3f,0xfa,0x4c,0x09,0xba,0x7f,0x77,0x07,0x4a, + 0x36,0x3c,0x22,0xf5,0x93,0xdc,0x68,0x2f,0x25,0x4e, + 0x5e,0x9a,0xaa,0x7e,0x9c,0x8d,0x34,0x6d,0xe0,0xda, + 0x5d,0x1b,0xee,0xcd,0x86,0xeb,0xa2,0x23,0x96,0x9f, + 0x40,0x7d,0x74,0x00,0x4f,0x53,0x1d,0x53,0x0f,0x9b, + 0x0e,0x6a,0x22,0x1d,0x6f,0x46,0x23,0x27,0x44,0x66, + 0xdb,0x4e,0xd9,0xc2,0x8c,0x14,0x70,0x26,0x2f,0xb4, + 0x0d,0x64,0xbc,0x99,0x20,0x48,0xc4,0xb3,0xe9,0x9a, + 0xa7,0x7e,0x70,0x82,0xdc,0xa7,0x67,0xd4,0xd7,0x5b, + 0x6a,0xd1,0x52,0x9b,0x97,0xde,0x4d,0x32,0x28,0x4c, + 0x62,0x6d,0x24,0x4e,0x38,0x8d,0xab,0xa6,0x16,0xec, + 0xb4,0xde,0x3f,0x21,0x35,0xba,0xf5,0x3c,0x25,0xc1, + 0x93,0x72,0xab,0x43,0xb9,0xfe,0x06,0x99,0xdc,0x90, + 0xd4,0xb7,0x87,0xdd,0xb4,0x0f,0x36,0x3c,0x24,0x2d, + 0x30,0x12,0x51,0x93,0x64,0x2e,0x3e,0xdd,0xf7,0xc4, + 0x75,0xd9,0xb4,0xbe,0x5c,0xdb,0x95,0x14,0x90,0x37, + 0x7c,0x8b,0xe4,0xe5,0xf8,0x89,0x9a,0xf0,0x86,0x50, + 0xad,0x9f,0x99,0x78,0xab,0x44,0xe0,0xde,0x4c,0x41, + 0xa6,0x84,0x77,0x42,0x90,0x13,0x0d,0x60,0x43,0x25, + 0xf8,0x8f,0xf0,0x85,0xf4,0xfb,0xa8,0xad,0x35,0x0d, + 0xb6,0x90,0x22,0xbd,0x03,0x34,0x88,0xe3,0x93,0x62, + 0x27,0x3d,0xfb,0xbe,0x8f,0x1c,0x89,0x7c,0x63,0x22, + 0x3e,0xb5,0x1a,0x55,0x2b,0xeb,0xe5,0x7e,0x81,0xd4, + 0x42,0x37,0x9b,0x85,0xe0,0xb8,0x94,0x10,0x4d,0x0b, + 0x7e,0xea,0xbb,0x82,0x8a,0xeb,0xc3,0x28,0x6e,0xa3, + 0x61,0x34,0xb5,0x76,0x88,0xe5,0xbf,0xe1,0x2e,0x4c, + 0x8b,0x3c,0x55,0x93,0x13,0x69,0x91,0x9e,0x7d,0xfa, + 0x7e,0x1d,0x33,0xfc,0x1b,0x21,0xb0,0x94,0x8c,0xa6, + 0x04,0x69,0xdb,0x0a,0xdd,0xf0,0x15,0x12,0x0f,0x84, + 0x36,0xf8,0x34,0xed,0xf1,0xb7,0xfd,0xec,0x29,0x01, + 0x4f,0xdf,0xb9,0x11,0x88,0x4c,0x13,0x54,0x74,0xa8, + 0x76,0xc8,0x77,0x83,0xa4,0xba,0x83,0x52,0x51,0xd1, + 0x34,0x7d,0xb8,0x99,0x7e,0xdc,0x3c,0xcf,0xc9,0x07, + 0x28,0x1d,0xaa,0xe4,0xdf,0xb4,0x25,0x4b,0x13,0xdf, + 0xce,0x11,0x96,0xf5,0x40,0x98,0x74,0xbc,0x92,0x4a, + 0xf9,0x34,0x59,0x96,0xdc,0xe4,0xa7,0xb8,0x99,0xf4, + 0x76,0xf4,0xde,0x3e,0x29,0xb6,0x36,0x49,0x48,0xe2, + 0x72,0x24,0x93,0xcf,0x8d,0x16,0xd2,0x86,0xe3,0x32, + 0xd9,0xb7,0x4c,0xb1,0x80,0xfe,0x3f,0x28,0x2f,0x8f, + 0xbe,0x72,0x53,0xfb,0x27,0x0d,0x10,0xd1,0x9a,0xda, + 0x08,0x8d,0x12,0x7a,0x43,0xd3,0xb6,0x9b,0x49,0xee, + 0x4d,0xfb,0x74,0xa2,0x78,0xf4,0x42,0xcb,0xe9,0x56, + 0x11,0xa5,0x81,0xd6,0xbf,0x43,0xb8,0x1f,0x7e,0xa7, + 0x5b,0x3b,0xfb,0x2d,0x51,0x77,0x0a,0x84,0x13,0xcf, + 0xe1,0x13,0x58,0x9f,0x24,0xfe,0x5d,0x42,0xb7,0xd9, + 0x18,0xe9,0xcf,0xf4,0xef,0xd5,0x09,0x7d,0x62,0xdc, + 0x6f,0xc4,0x0d,0x27,0x2d,0x97,0xb4,0xf8,0x14,0xa5, + 0xea,0x49,0x5f,0x9a,0x18,0x22,0x62,0xeb,0xc6,0x67, + 0x67,0x22,0xa8,0xa5,0x20,0x30,0xf1,0x7d,0xc8,0xaa, + 0x82,0xb4,0x70,0xb6,0xa2,0x68,0x84,0x64,0x4c,0xb6, + 0x14,0x9f,0xaa,0xcc,0x52,0x50,0x9f,0x60,0xe4,0x09, + 0x6e,0x4e,0x09,0xe1,0x46,0xed,0x77,0x93,0x10,0x27, + 0x01,0xd0,0x4d,0x61,0x32,0xb5,0xc4,0x36,0x15,0xf0, + 0x66,0xed,0x26,0x38,0x9c,0x0e,0x45,0x57,0x59,0x4e, + 0xbe,0x41,0x13,0xc2,0xe5,0xa6,0xf7,0xc8,0x17,0x6e, + 0x2a,0x92,0x34,0x61,0xdd,0x04,0xf9,0x64,0xb5,0x90, + 0x2a,0xef,0xa9,0x0d,0xe7,0x0e,0xc8,0x74,0x70,0x4f, + 0xb2,0x08,0xb4,0x0f,0x37,0x85,0xc7,0xe4,0x6d,0x96, + 0xe2,0x84,0xc6,0xdd,0xce,0x5d,0x73,0xeb,0x7e,0x3a, + 0x2b,0x52,0xcc,0xdb,0xa2,0x57,0x9b,0xb3,0x30,0x9d, + 0xc3,0x89,0x7e,0xa2,0x5d,0x1c,0xf7,0x59,0xf7,0xbf, + 0xff,0xfa,0xf5,0x2b,0x26,0x77,0xdb,0xce,0x49,0x4a, + 0x86,0xb7,0x7e,0x75,0xc9,0xd2,0x82,0xf6,0xfc,0x56, + 0x26,0x87,0xa8,0x07,0xbf,0xe9,0xe1,0xf4,0xfe,0xe9, + 0xc6,0xe2,0x60,0x13,0xdc,0x36,0xc6,0x8e,0xee,0x00, + 0x22,0x22,0x36,0x7d,0xe7,0x66,0x9c,0x39,0x11,0x15, + 0xb7,0xca,0x93,0x9b,0x97,0x3c,0x21,0x34,0x13,0x54, + 0xba,0x51,0x67,0x9e,0xb8,0x47,0x09,0x91,0x99,0x78, + 0x0b,0x14,0x54,0x36,0x93,0x34,0x89,0xc4,0xb8,0x69, + 0x67,0x4c,0x04,0x3f,0xf7,0xac,0x5d,0x95,0xbb,0x1d, + 0xa5,0xed,0x6d,0xd9,0x24,0xa8,0x46,0x13,0x2c,0x93, + 0x8a,0x73,0x7a,0xa7,0x53,0xff,0x3f,0x11,0x10,0xb7, + 0x88,0xe2,0xb4,0x3e,0xcd,0xef,0x9c,0x0b,0xac,0x34, + 0xda,0xcf,0x1f,0xd2,0xd2,0xd9,0xfa,0x2c,0x99,0xb5, + 0x74,0x36,0xd7,0x3c,0xa9,0xe4,0x12,0x51,0x36,0x25, + 0xbe,0xdb,0x24,0x6d,0xb2,0x08,0x70,0xd5,0xf8,0x34, + 0x7c,0x31,0xb5,0xdd,0x36,0x02,0x9f,0x49,0x3d,0x7f, + 0x6b,0x75,0xb3,0x19,0x76,0x68,0x45,0xe5,0x99,0x12, + 0xde,0x74,0x78,0xa5,0xfd,0x93,0x5c,0xc2,0x37,0xfb, + 0x87,0xba,0x16,0x93,0x68,0x9e,0x16,0xce,0xce,0x2a, + 0x22,0x15,0x89,0x9f,0xb4,0x99,0x95,0x12,0x32,0xed, + 0xe9,0x84,0xea,0x4c,0xca,0xda,0x13,0x02,0xfc,0x7d, + 0xde,0x1f,0x4a,0x22,0x37,0x3c,0x4a,0xa5,0x01,0x4c, + 0x2d,0xc6,0x09,0xa1,0x9a,0x62,0xb5,0x43,0x5e,0x29, + 0xf6,0xbb,0xef,0xfe,0x4d,0x1b,0x72,0x03,0xb5,0x4e, + 0x1a,0x2a,0xe9,0x01,0xa5,0x83,0x6f,0x52,0x48,0x4d, + 0xe8,0x4c,0x22,0x28,0x6e,0x7a,0xac,0xdb,0x4d,0xb5, + 0xb9,0xfe,0xf4,0xf7,0x13,0xff,0x84,0x16,0xdd,0x06, + 0xe1,0x50,0xd4,0x6b,0xba,0xbe,0xcd,0xbd,0xa5,0xc5, + 0xb8,0xa9,0x94,0x34,0x79,0x69,0x9b,0xf4,0xe7,0x00, + 0xdd,0x26,0x4a,0x1b,0xdf,0x9b,0x4d,0xa2,0x46,0xc1, + 0x60,0x9b,0x68,0x4c,0x53,0x4f,0x84,0xfe,0x39,0xe2, + 0xbf,0x7b,0x6f,0xc9,0x00,0xd3,0xed,0x2f,0x2d,0x0e, + 0x26,0xa3,0x41,0x3a,0x90,0xa8,0xe8,0xf9,0xc4,0x62, + 0x40,0x21,0xed,0xef,0xef,0x79,0x4b,0xa8,0x36,0x96, + 0x3b,0x49,0xfc,0x72,0x9b,0xe0,0x7d,0x2a,0x6e,0x97, + 0xbc,0xb8,0xfe,0xb6,0x8d,0x4d,0xa6,0xbb,0x0e,0xf2, + 0x27,0x42,0xeb,0x94,0xb8,0x3a,0x54,0x34,0x4d,0x3a, + 0x6d,0xe2,0xb0,0x92,0xc4,0xd3,0x00,0xc1,0x84,0x52, + 0x7e,0x32,0xa8,0xa0,0x07,0x79,0x6a,0x7d,0x4c,0x72, + 0x00,0x9f,0x9c,0x23,0xae,0xf8,0xd2,0x78,0xb3,0x69, + 0x1f,0x4f,0xc5,0x4e,0x9a,0xa8,0x4e,0xef,0xfd,0xf5, + 0x7a,0x9d,0x94,0x08,0x6d,0xf6,0x7d,0xff,0xee,0x74, + 0x4e,0xe8,0xf4,0x58,0xd0,0x4c,0x5a,0xab,0x66,0x4f, + 0x93,0x6f,0x2e,0xae,0x28,0x49,0xda,0xfd,0x0e,0x4d, + 0xc6,0x4e,0x83,0x11,0xaf,0x6d,0x26,0x3e,0x19,0xb2, + 0x4d,0x50,0xf9,0xa4,0xe1,0x93,0xa0,0xb5,0xa9,0xed, + 0xb3,0x81,0x65,0x37,0xb0,0xdd,0x27,0xc2,0x89,0x89, + 0x37,0xf0,0x09,0x64,0x49,0x9e,0x54,0xe9,0xba,0x36, + 0x90,0x64,0x22,0xec,0x4e,0x1c,0x9a,0xa4,0xe4,0xb9, + 0x45,0xde,0x88,0xe7,0x90,0x94,0x47,0x07,0x3e,0xc2, + 0xa1,0xc4,0x3c,0x79,0xbf,0x10,0xb2,0xa6,0xa4,0xd5, + 0xd4,0x1f,0xd7,0x16,0xc9,0xa7,0xda,0x49,0x93,0x3a, + 0xf3,0xe2,0xdf,0x4f,0x48,0xc2,0x8e,0x33,0xb7,0x75, + 0xba,0x58,0xe6,0xbd,0x9c,0xb4,0x7e,0x53,0x25,0xfd, + 0x09,0x17,0x40,0x3e,0xe7,0x0c,0xad,0xdd,0xf3,0x41, + 0xa2,0x73,0x26,0xc4,0x91,0xda,0xb0,0x5b,0xa4,0xfa, + 0xf6,0x12,0x73,0xad,0x4d,0xd2,0xd4,0x52,0xae,0x06, + 0xa1,0x45,0x66,0x5d,0xd8,0x7b,0x9f,0x84,0x34,0x13, + 0x87,0x68,0xdb,0x52,0x98,0x0a,0x9e,0xd4,0xb6,0x4f, + 0x68,0xf6,0x24,0x88,0x47,0xbc,0xab,0x09,0xa1,0x9a, + 0xae,0xdb,0xc5,0xcb,0x44,0x85,0x98,0xd0,0xf3,0xa9, + 0x95,0x3d,0x15,0x0a,0x13,0x2a,0x3d,0xb5,0x89,0x69, + 0x60,0x28,0xf1,0x6c,0x88,0x98,0x4f,0xf7,0x38,0xc9, + 0x7f,0x4c,0xf1,0x8e,0x62,0xd0,0xa4,0x2d,0xf4,0x37, + 0x1e,0x86,0x94,0xe0,0xba,0xf6,0x98,0xd3,0x36,0xfc, + 0x39,0x3b,0x52,0x4f,0x8e,0x8c,0xf0,0xdc,0x02,0xa5, + 0xc9,0xa7,0x09,0xca,0xdd,0x3a,0x7a,0xbb,0x64,0x25, + 0x25,0x24,0x94,0xc9,0x6f,0x38,0x30,0x09,0xe9,0x98, + 0xa4,0x02,0x28,0xf0,0x13,0x24,0xbe,0x41,0x90,0x68, + 0xc3,0x2b,0x5a,0xb0,0x6d,0xc9,0x00,0xf4,0x69,0x93, + 0xb0,0x29,0x50,0x25,0xb4,0x43,0x37,0x28,0x69,0x63, + 0xfc,0x8d,0xd2,0xe7,0x94,0xf4,0x6c,0x0f,0xe7,0xcd, + 0xc1,0xf2,0x37,0xee,0xd3,0xf4,0x19,0xce,0x4a,0x80, + 0x12,0x18,0x4d,0x06,0xa7,0x00,0xa2,0xbc,0xb4,0x4f, + 0xee,0x39,0xf9,0xf7,0xd0,0x3b,0xda,0xca,0xf2,0xbb, + 0xbf,0x82,0x76,0xdb,0xd9,0xf2,0x27,0xf4,0x5a,0xdd, + 0x44,0xd0,0xf7,0xff,0x9f,0x2d,0x57,0x23,0xf1,0x59, + 0x5c,0xa1,0x32,0x55,0xa0,0x93,0xb6,0xcb,0x26,0x91, + 0x18,0xd6,0xe0,0x49,0x2d,0x2e,0xb7,0x4e,0x09,0x91, + 0x9a,0xf6,0x8b,0xf3,0x5f,0x4b,0xa8,0x6a,0x5f,0xb7, + 0x9b,0xc9,0x29,0x97,0xa4,0xeb,0x67,0xc8,0xef,0x1d, + 0xc7,0xf1,0xd8,0xf8,0x40,0x12,0xe2,0x23,0xff,0x7e, + 0xb6,0xa8,0xf8,0xd4,0x59,0x48,0x09,0x77,0xf2,0xd4, + 0xdc,0x88,0xea,0x26,0xa5,0x7b,0x17,0x77,0x5d,0x52, + 0x34,0x9d,0x83,0xf4,0xdf,0x89,0x5b,0x46,0xf2,0x0f, + 0x0e,0x69,0xdf,0x24,0xc6,0x13,0xd2,0xef,0x0a,0x92, + 0xcd,0x39,0xf2,0x3b,0x65,0xbf,0x7d,0x63,0xa7,0x4a, + 0xbe,0xfd,0xd9,0x0f,0xc4,0x3d,0x69,0x68,0x4c,0x36, + 0x09,0xdb,0x56,0x4d,0x42,0x36,0x28,0x11,0xa3,0xca, + 0x2c,0xb5,0x00,0x1d,0x2c,0xe7,0x88,0x66,0x13,0x3c, + 0x9a,0x0e,0xaf,0x45,0xf0,0x79,0xe3,0x5b,0x10,0x6f, + 0x29,0x4d,0xcd,0xb9,0x51,0xc3,0x64,0x27,0xb1,0x31, + 0xed,0x73,0x9b,0xfc,0xfe,0x9e,0xfb,0xbe,0x52,0xdb, + 0xca,0x3c,0xab,0xe3,0x5c,0xee,0x49,0xa3,0x63,0x5a, + 0x17,0xaa,0xf1,0x44,0x6b,0x71,0x4a,0xaa,0x28,0xc8, + 0x12,0xb7,0x85,0x92,0xba,0xd4,0xef,0x76,0x9f,0xd1, + 0xc5,0xcc,0xd2,0x88,0x7c,0x42,0x6b,0x3e,0xe5,0x93, + 0x6d,0xdb,0xd4,0xf7,0xbe,0xbf,0xbd,0xb9,0x36,0x87, + 0xc3,0x8d,0x04,0x6d,0x6c,0x03,0x92,0xad,0xcc,0x74, + 0x70,0xeb,0x7a,0x31,0xed,0x84,0x1f,0x14,0xc9,0x11, + 0x7c,0xa7,0x96,0x7a,0x12,0xd0,0xd3,0x43,0xc7,0xa1, + 0x06,0x5b,0xf3,0xe8,0xbe,0x5f,0x3f,0xd5,0xf2,0xda, + 0x20,0xc6,0x53,0xdb,0x78,0x4b,0x0f,0x70,0x31,0x86, + 0xd0,0x80,0x4f,0x0c,0x7a,0xa9,0x00,0x9a,0x8c,0xb4, + 0xe9,0x59,0x6f,0xf8,0x25,0xd4,0x0e,0x9a,0xda,0x32, + 0xd3,0x7b,0xfc,0x54,0xc2,0x82,0x04,0x16,0x27,0x31, + 0xce,0x2d,0x2a,0xbd,0x79,0xd6,0x44,0x4b,0x70,0xc9, + 0xe7,0xc4,0xfb,0x71,0x49,0xf9,0x7d,0xa4,0x25,0xaa, + 0x07,0xc5,0xf7,0x4f,0xe9,0x31,0x8f,0x4e,0xc3,0x27, + 0x41,0x6f,0xfa,0x67,0x23,0x9a,0x37,0xc1,0x7d,0x93, + 0x7c,0x7c,0xaa,0xc2,0x36,0xe8,0x11,0x49,0xfa,0x53, + 0x46,0x9d,0x2a,0x89,0xa9,0x37,0xef,0x02,0xf2,0x24, + 0xdd,0x3d,0x41,0xa7,0x84,0x2e,0xb9,0xe7,0xab,0xe8, + 0x9d,0x7c,0xc6,0x99,0x12,0xc1,0x89,0xa7,0x91,0x82, + 0xaa,0x7e,0xf6,0x5d,0x8d,0xbb,0x35,0x30,0x05,0xc5, + 0xbf,0x6d,0x01,0x4e,0x68,0x63,0x42,0x5d,0x52,0x6b, + 0x8e,0x02,0xd7,0xa6,0xbd,0x32,0x4d,0x19,0x4d,0xa8, + 0xe3,0xd2,0x45,0x7a,0xe4,0xb2,0xa4,0xe9,0x38,0xb9, + 0x86,0x43,0xdf,0xb3,0xd5,0x00,0x49,0xf7,0x9e,0x10, + 0xc3,0xa1,0x55,0x72,0x92,0xb2,0xb3,0xdb,0x0f,0xd4, + 0x5a,0x4e,0xbe,0x60,0xc3,0x01,0x79,0x68,0x4c,0xbb, + 0x3f,0xb7,0x89,0xf4,0x9b,0xda,0x28,0xff,0xd6,0x3b, + 0x67,0xe5,0xd5,0x47,0x2d,0xa8,0xd4,0x7a,0x4e,0x43, + 0x06,0x2e,0x5e,0xdd,0x53,0xa6,0xb4,0x16,0x26,0x4f, + 0xb1,0x4f,0xf6,0xcc,0x56,0x23,0xad,0x1f,0xa2,0xc9, + 0x06,0x61,0x42,0x85,0x5c,0x5c,0x56,0x7b,0x15,0x87, + 0xca,0x4e,0x45,0xcd,0x86,0x8f,0xe7,0x10,0xbe,0x69, + 0x1f,0x25,0x1f,0xb9,0x8e,0xc8,0x7c,0x62,0x4a,0xeb, + 0xce,0x46,0x45,0x97,0xd3,0x64,0x72,0x5a,0xeb,0xd4, + 0x91,0x99,0xba,0x15,0x9b,0x49,0xd6,0xa9,0x25,0xe9, + 0xf6,0xda,0xef,0x4d,0xd2,0xb3,0xc9,0x22,0x7b,0x96, + 0xec,0xda,0x66,0x2e,0x78,0x6e,0x24,0xcb,0x37,0x8a, + 0x90,0x8e,0x64,0xd5,0x09,0x5c,0xdb,0xde,0x77,0x22, + 0xf6,0xa9,0xe3,0xed,0xa4,0x24,0x4d,0x2c,0xf4,0xad, + 0x18,0xdd,0x54,0xd1,0x49,0xa0,0xad,0x49,0xf9,0xf4, + 0xfe,0xef,0xae,0x0a,0xab,0x93,0x53,0xfa,0xe7,0x44, + 0xb2,0xdd,0x24,0x49,0x53,0x15,0x95,0x44,0xf2,0x52, + 0x3b,0x6c,0x52,0xf4,0x25,0xfe,0x42,0x87,0x28,0x48, + 0xdb,0x66,0x43,0xf2,0xa5,0x2a,0x2f,0xa1,0xa8,0x13, + 0x0c,0xfb,0x49,0xf2,0xe6,0xf6,0xd0,0x44,0xde,0x4d, + 0x2d,0xc4,0x89,0xc7,0x35,0x15,0x34,0x8a,0x02,0x4d, + 0xdc,0x14,0x0a,0x98,0x1d,0x99,0x4b,0x6b,0xe1,0xe6, + 0x3d,0x39,0xee,0xd7,0x66,0x9a,0x2c,0xbd,0x23,0xf7, + 0x4c,0x74,0x12,0x76,0x5b,0xa1,0x13,0x71,0x76,0x1b, + 0xd3,0x48,0xd5,0x78,0xe2,0x6a,0x6c,0xc8,0xa8,0xa2, + 0x65,0x76,0xdc,0xa1,0x45,0xfe,0x5a,0x13,0xb9,0x39, + 0xad,0x6d,0xfd,0x2c,0x87,0x68,0x29,0x42,0x3b,0x29, + 0xb2,0xa7,0xd8,0xe8,0xac,0x5a,0x36,0x7b,0xc2,0xad, + 0xd9,0x3f,0x7f,0xfe,0x8c,0xc8,0xd1,0x16,0xf9,0x77, + 0xa6,0xe0,0x1b,0x84,0x71,0x2a,0xd8,0x26,0x35,0xea, + 0x29,0xf9,0xa1,0xe4,0xe1,0x13,0xed,0x30,0x4a,0x76, + 0xa6,0x76,0x3a,0xc4,0x89,0x33,0x49,0x72,0x4c,0x84, + 0xf8,0x84,0x4c,0x7d,0x7d,0x7d,0xfd,0x83,0x00,0x6d, + 0xaa,0xae,0xb4,0xe0,0x26,0x83,0x4b,0xd7,0x73,0x9c, + 0x14,0x2a,0xa9,0x1a,0x9a,0xf4,0x03,0x36,0x99,0x2d, + 0x05,0xb2,0x64,0xe6,0x48,0xa3,0xf9,0x4e,0xda,0x7e, + 0x3a,0x5c,0xee,0x8a,0x8e,0xaa,0x37,0x4a,0xce,0x54, + 0xd0,0x2e,0x25,0x22,0x5a,0xa9,0x24,0xad,0x18,0x6a, + 0x49,0x4d,0x01,0x28,0x05,0xb9,0x94,0x50,0xa4,0x83, + 0xfd,0xd7,0xaf,0x5f,0x58,0x39,0x4e,0xed,0x92,0x54, + 0xe1,0x39,0xb3,0xce,0x50,0xd5,0x9d,0x8d,0xf8,0xe6, + 0xa7,0x24,0x78,0x45,0x03,0x4d,0xb0,0x3a,0x1b,0xd1, + 0xbe,0x4d,0x65,0xd9,0xae,0xe5,0x0c,0x6d,0x9d,0x33, + 0x55,0x76,0x84,0x20,0x6d,0x14,0x9d,0x13,0x6f,0x8d, + 0xda,0x70,0xda,0xf2,0xa2,0xe4,0xcc,0x55,0xbf,0x09, + 0xe5,0x4d,0xad,0x12,0x7a,0xe6,0x93,0x45,0xcf,0x27, + 0x08,0x79,0x6a,0xf7,0xb8,0xcf,0x70,0xc8,0x03,0x15, + 0x6b,0xd3,0xc0,0x82,0x43,0xd0,0xd3,0x70,0xc8,0x84, + 0xb2,0x6f,0xce,0x89,0x29,0xf9,0x55,0x1e,0x4f,0x48, + 0x04,0xce,0x84,0x76,0x27,0x5a,0x05,0x19,0xa1,0x2a, + 0xef,0x86,0x10,0xb3,0x64,0x13,0xb5,0x31,0x88,0xdd, + 0x4a,0x22,0x50,0x7b,0x7f,0x6b,0x2a,0x4e,0xeb,0xba, + 0xaf,0xa3,0x64,0x7a,0x9e,0xf6,0xf5,0x86,0xef,0x48, + 0xf4,0x80,0x84,0xf4,0xbb,0xb3,0x6f,0x2b,0x77,0x30, + 0xad,0x35,0xe8,0x42,0xfc,0x20,0x6b,0xaf,0xd7,0xeb, + 0x5f,0x12,0x34,0x09,0xd1,0x4d,0x23,0xc4,0x53,0x9b, + 0x88,0x78,0x07,0x53,0xb0,0x4d,0xdf,0xb9,0x51,0x80, + 0x75,0x41,0xd8,0x29,0x68,0xba,0xdf,0x81,0xfe,0xbd, + 0x3b,0x14,0xcf,0xd4,0xb6,0x98,0x02,0x86,0xdb,0x48, + 0x84,0x4c,0x28,0x1a,0x35,0x99,0x7f,0xd2,0x81,0xe0, + 0xd0,0x1e,0x12,0x7a,0xec,0x9f,0x41,0xde,0x51,0xee, + 0xbd,0x52,0x82,0x3a,0x19,0x3b,0xba,0xa4,0xed,0x13, + 0xed,0xa5,0x4f,0xc8,0x7c,0xf4,0xe7,0xd3,0xfa,0x9c, + 0xa6,0xba,0xa6,0x03,0x6f,0x5b,0x41,0x6d,0x83,0x4b, + 0x4f,0x72,0x7a,0x80,0xa6,0x16,0x91,0x7b,0x9f,0xc3, + 0xfa,0x3d,0x1b,0x2b,0x14,0xd7,0x12,0x22,0xb2,0xe3, + 0xa7,0xad,0xbe,0x3b,0x89,0xfd,0xfa,0xfa,0x3a,0x2e, + 0xc0,0xb9,0x67,0xb2,0x69,0x61,0x0d,0x85,0xd3,0x99, + 0x92,0x3f,0x27,0xb2,0x97,0x6c,0x0b,0xa6,0xa9,0xc5, + 0x6d,0x9c,0x9c,0x88,0xa3,0x53,0x81,0xb2,0xf1,0x5c, + 0xec,0xeb,0x68,0x33,0x91,0xda,0x27,0x36,0x29,0x56, + 0x4e,0x71,0x3e,0xb5,0x2a,0x53,0x71,0x49,0x45,0xdc, + 0x27,0xa8,0xd5,0xa6,0xc3,0xe1,0x50,0xba,0x34,0xb9, + 0x35,0xc5,0xc4,0x69,0x3a,0xf9,0x6f,0x12,0x4f,0x68, + 0xf5,0x9f,0xed,0xf9,0x94,0xce,0xf4,0x14,0xa3,0xa6, + 0x69,0x45,0xf7,0x9e,0xa7,0x42,0xc8,0x25,0xed,0x29, + 0xbe,0x52,0x0b,0xd3,0x99,0x37,0xbf,0x4d,0x81,0x85, + 0xc4,0xe2,0x6c,0x5a,0x62,0x69,0x61,0xa9,0x41,0x1a, + 0x7d,0x27,0x2c,0xea,0x43,0xe3,0x91,0xaa,0x29,0x93, + 0x60,0xc9,0xd4,0x6e,0x71,0xfd,0xc8,0x34,0xe9,0x94, + 0x0e,0x54,0x0d,0x18,0x13,0xf7,0xc4,0xb5,0x0b,0x7b, + 0x8f,0x5d,0x93,0x92,0x2d,0xcf,0x63,0xa3,0x4a,0x3b, + 0x4d,0x28,0xa4,0xc4,0x98,0xfe,0x2e,0x8d,0x9f,0x26, + 0x5e,0x8c,0x7b,0x7e,0x9f,0x10,0xea,0x24,0xf0,0x9d, + 0x89,0xeb,0xf2,0x29,0x17,0x67,0x5a,0xf7,0x9f,0x22, + 0x55,0x69,0x4c,0x18,0xfe,0x77,0x9c,0x1e,0x87,0x6b, + 0xb5,0x4c,0x02,0x6d,0x1b,0x8d,0x9f,0x09,0x5a,0x0e, + 0x81,0xee,0x6c,0x14,0x5a,0x49,0x1d,0x9c,0x46,0x7e, + 0x3b,0x17,0x26,0x05,0xc3,0x54,0x10,0x4c,0x8a,0xc9, + 0x84,0x80,0xea,0x64,0x8b,0xab,0x66,0xa7,0x11,0xe6, + 0x1e,0xcf,0x36,0xc9,0xee,0x94,0x24,0x10,0xcf,0x67, + 0xcb,0x89,0x4a,0xff,0xdd,0x93,0xcc,0x4f,0x14,0x9b, + 0x53,0x51,0x95,0xee,0xeb,0x8e,0x81,0x2e,0xa1,0xdd, + 0xca,0x68,0x4c,0xcf,0x7f,0x6a,0x45,0x6e,0xe8,0x12, + 0xf4,0xb9,0xd3,0xbe,0x48,0x85,0x7b,0x6a,0xc3,0x6f, + 0xa4,0x06,0xa6,0xae,0x0a,0xc5,0xab,0xd4,0xb1,0xf9, + 0xe4,0x3d,0x6e,0x3a,0x0b,0x69,0xaf,0x7e,0x10,0x57, + 0xec,0x75,0xf4,0x09,0xe6,0x24,0xda,0xe8,0xde,0xc1, + 0x4f,0x0b,0x8c,0x20,0x7a,0xe2,0x78,0x24,0x51,0xa2, + 0x69,0x73,0x0e,0x70,0xfc,0xaa,0xa5,0xb1,0xe1,0x56, + 0x24,0xab,0x8a,0xcd,0x24,0xc9,0x66,0x81,0x7f,0x22, + 0x12,0xe7,0x50,0x8d,0xc9,0xa5,0x37,0x7d,0x27,0x8d, + 0xbc,0xa6,0x85,0x3e,0x69,0x39,0x75,0x24,0xa1,0x1d, + 0x32,0x27,0x6d,0x92,0x2d,0x7a,0xb7,0x55,0xbc,0x25, + 0xcb,0x8a,0xc4,0xf6,0xa7,0x67,0xea,0x2c,0x0e,0x48, + 0x0e,0x61,0x83,0xda,0x38,0x87,0xf2,0xa9,0x17,0x0d, + 0x87,0xe1,0xa1,0x20,0xe7,0x2c,0x34,0xa6,0x43,0x9c, + 0x50,0xcd,0x29,0xb8,0xb4,0xa0,0x71,0x16,0xc1,0xf2, + 0x6c,0x0e,0xec,0x8e,0x96,0x4e,0x43,0x0e,0x13,0x59, + 0xfc,0x2e,0x04,0x7a,0xf2,0x43,0x3c,0x99,0x54,0x8d, + 0x6e,0xa6,0xdf,0x28,0x8e,0x68,0x31,0xd2,0x61,0xf4, + 0xf0,0x7e,0x4e,0xda,0x07,0x1b,0x61,0xb7,0x29,0x36, + 0x75,0x95,0xe2,0x44,0xd8,0x6e,0x6b,0xe4,0x7c,0x82, + 0x24,0x4c,0xcf,0x32,0x15,0x02,0x1b,0xa4,0x2a,0x8c, + 0x88,0x9f,0xa4,0xf1,0xf5,0xa9,0xca,0xf4,0x12,0x99, + 0x3d,0x9f,0xca,0x65,0x84,0xf6,0xe5,0x49,0xa8,0x26, + 0xb5,0xb5,0xa0,0x15,0xbf,0xb2,0x41,0x9a,0x84,0x80, + 0x27,0xf7,0x84,0x89,0xa0,0x3f,0x71,0xd4,0xe8,0x4c, + 0x9f,0x5a,0xc8,0x09,0x79,0xdc,0x18,0x13,0xa7,0xa1, + 0x8e,0x09,0x11,0xfc,0x79,0xd6,0x9b,0x16,0x52,0x22, + 0xc2,0x39,0x09,0x6c,0xf7,0xf0,0x1c,0xd9,0x6b,0x43, + 0x22,0x83,0x44,0xe8,0xa4,0x7e,0x7e,0xea,0x0b,0xbb, + 0x31,0x55,0x0a,0x96,0x24,0x02,0xb6,0x71,0x4f,0x4f, + 0x48,0xc7,0xd6,0xdc,0x72,0x03,0xff,0xba,0xbe,0xf2, + 0x06,0x3e,0x4d,0x68,0x4a,0x7a,0x9e,0x84,0x64,0xb9, + 0xe4,0x68,0x33,0xa6,0x48,0x68,0x61,0x42,0xa6,0xb6, + 0xea,0xd6,0x44,0xbc,0x97,0xfb,0x3c,0x53,0xc2,0xa2, + 0x1b,0x55,0x0f,0xc4,0x73,0xce,0x81,0xb6,0xc6,0x99, + 0x7a,0xe6,0x9b,0x09,0xc0,0xa9,0xe2,0xa2,0x83,0x86, + 0x50,0x87,0x89,0x2b,0xb2,0xe5,0x9a,0x0c,0xc1,0xe9, + 0xa4,0xef,0xdd,0x28,0x07,0xdf,0x2d,0x2f,0x27,0x9e, + 0x38,0x78,0xf0,0x9d,0xe9,0x39,0xdd,0x8a,0xba,0x01, + 0x25,0x3a,0x6e,0x9f,0x4f,0x6a,0xb8,0xd3,0x3f,0x61, + 0x4d,0x9f,0x54,0x54,0x4d,0x04,0xf7,0x89,0x7b,0xa2, + 0xbe,0x65,0xe9,0x9d,0x50,0x5b,0x6f,0xc3,0x5b,0x21, + 0xd4,0x79,0xeb,0x48,0x9e,0xb8,0x30,0x53,0x22,0x92, + 0xd0,0xc6,0x4f,0x5a,0x4c,0xd3,0xe4,0x91,0x72,0x39, + 0xa7,0xfd,0x34,0x15,0x8e,0x9d,0xb0,0xdd,0xdb,0x35, + 0x5b,0x9e,0x59,0x58,0xe3,0x8f,0x75,0xe0,0x28,0x17, + 0xce,0x30,0x9c,0x26,0x27,0x37,0x9c,0xc7,0xc9,0x33, + 0x2d,0x89,0x41,0xea,0x1e,0x4b,0x09,0xcc,0xe4,0x5e, + 0x4f,0xc0,0xc3,0x1b,0x30,0x41,0xbd,0xca,0x4d,0x75, + 0x82,0x1f,0x2a,0x19,0x2c,0x1c,0x1a,0xe8,0xbd,0xe2, + 0x92,0x28,0x1a,0x3f,0x74,0x7f,0xae,0x0a,0xba,0x29, + 0x11,0x9a,0x0e,0x86,0x05,0x2a,0x10,0x7b,0xb9,0x24, + 0x75,0x3f,0xa9,0x9e,0xf6,0x9f,0x77,0x64,0xcf,0x61, + 0x33,0x1f,0x57,0x71,0x6d,0xd1,0x8b,0x69,0x33,0x3b, + 0xc8,0x79,0xe2,0xe9,0x6c,0x0c,0x21,0x9d,0x41,0xa3, + 0x56,0xbc,0x9f,0xb8,0xab,0x6b,0x12,0x4f,0x89,0x31, + 0x55,0x59,0x8e,0x40,0xbe,0x21,0x47,0x4f,0x70,0xb4, + 0xba,0xac,0x4b,0x9b,0xf0,0x4c,0xfb,0xcb,0xed,0xa1, + 0xc4,0xe9,0x49,0x81,0xa5,0xed,0xaf,0x93,0xb8,0x11, + 0x8a,0xc2,0x6c,0xd5,0xac,0xef,0x02,0x3b,0x89,0x82, + 0x06,0x54,0xd6,0x3e,0x8b,0xa1,0x20,0x3b,0xae,0x68, + 0x48,0x07,0x51,0x2a,0x72,0x5c,0x40,0x4d,0xa8,0xf7, + 0x94,0xac,0x2b,0xbf,0x72,0x8a,0xbf,0x0b,0x99,0x02, + 0x9b,0x74,0x7f,0x62,0xfb,0x30,0xb5,0xfa,0xf5,0xdd, + 0x4f,0xca,0xc2,0x7a,0x00,0x93,0x68,0xa2,0x8b,0x35, + 0x6e,0xbc,0x3c,0x49,0x80,0x68,0xa2,0x40,0x3c,0x4f, + 0x8a,0x11,0xd4,0xa2,0x4f,0x5a,0x34,0x89,0xe4,0xab, + 0xb1,0xcc,0xbd,0x3b,0x92,0x9b,0xd8,0x38,0x9e,0x6f, + 0xda,0x42,0xdb,0xa2,0x9d,0x8a,0xcb,0x6d,0x77,0x64, + 0xdb,0xe2,0x4c,0xc9,0x20,0xdd,0x6f,0x38,0x1f,0xcf, + 0xe4,0x0b,0xb6,0x3d,0x1f,0xce,0x39,0x4f,0x21,0xc4, + 0x4f,0x92,0x9f,0x04,0xa7,0xa5,0x3e,0xdc,0x24,0x50, + 0x46,0x55,0xc1,0x10,0x00,0xac,0xcf,0x10,0x8d,0xa5, + 0xba,0x64,0x63,0x42,0xa0,0x5c,0xeb,0x29,0xf1,0x8a, + 0x36,0x08,0x45,0x3f,0x80,0xee,0x31,0xe2,0xf6,0xfc, + 0xe2,0x68,0xf1,0x86,0x20,0x97,0xcc,0x6c,0x75,0xf4, + 0xf7,0x36,0x01,0x5d,0x04,0xda,0x9f,0xd1,0x7b,0x07, + 0x89,0x4e,0xf6,0x27,0x9f,0xb4,0x20,0x64,0x9d,0x9d, + 0xd7,0xeb,0x55,0x06,0x72,0xae,0x69,0x43,0xbb,0xc4, + 0x44,0x13,0xd3,0x8d,0x77,0xcf,0x74,0x68,0x24,0x8e, + 0x95,0x23,0xff,0x39,0xfe,0x84,0x7b,0x1e,0xdf,0xd7, + 0xf9,0xb6,0x1e,0xf4,0xd9,0xdc,0x7f,0x07,0xcf,0xf1, + 0xe7,0x39,0x91,0xc4,0x01,0x29,0x52,0xab,0x60,0x19, + 0xad,0x49,0x0a,0xb8,0xf7,0xb8,0xf5,0x6d,0xf9,0xe6, + 0x48,0xfc,0x1a,0xe0,0xd2,0x5a,0x09,0xcf,0xee,0x10, + 0xd2,0x2a,0xfb,0xf0,0x6c,0xfc,0xde,0xa6,0xe4,0x61, + 0x12,0xbb,0x33,0x02,0x81,0x23,0x9f,0xd2,0x5c,0xf7, + 0x81,0xc3,0xe6,0xa8,0xe4,0x46,0x52,0x43,0xd6,0x36, + 0x6b,0xe7,0x95,0xb9,0x8a,0x3f,0x71,0x50,0x26,0xa1, + 0xd8,0x0d,0x61,0x9a,0x46,0x99,0x27,0x74,0x7b,0x8a, + 0x75,0xfa,0x57,0x2a,0x22,0x39,0x99,0xd8,0xa6,0xf6, + 0x3e,0xc9,0x1a,0x7c,0x70,0x3d,0x6f,0xfb,0x0d,0x68, + 0x08,0x9f,0x72,0x6c,0x8f,0xf9,0xfb,0x43,0x49,0x1a, + 0xad,0xef,0xc9,0xa4,0x38,0x09,0x21,0x4e,0xad,0xc2, + 0x94,0x60,0xa6,0x67,0x4c,0x9c,0xd7,0x8e,0x9a,0xf5, + 0xd8,0x4c,0xc8,0x74,0x4a,0xd0,0x7e,0x4f,0xbd,0xe8, + 0xe9,0x50,0x22,0x87,0x70,0x4a,0x2a,0x1c,0x37,0x67, + 0x13,0x80,0xee,0xdf,0xed,0x30,0xe1,0xd6,0x8c,0x52, + 0x1f,0x08,0xb9,0x89,0xeb,0x41,0x97,0x36,0x48,0xc8, + 0x7c,0x7f,0x54,0x8c,0x37,0xea,0x9b,0xd3,0x02,0x72, + 0xcf,0x32,0xa1,0x39,0x9b,0xef,0x70,0xf0,0x21,0xc1, + 0xec,0xc4,0x5b,0x72,0xad,0x4f,0x57,0xfd,0xf7,0x44, + 0x89,0x12,0x5c,0x08,0xfe,0x3f,0xbf,0xab,0x8b,0x3c, + 0x05,0xd4,0xa4,0x1f,0xf2,0x1d,0xf0,0xcb,0xe9,0x1e, + 0x99,0x96,0xed,0x23,0xa1,0x98,0x12,0x1e,0x9a,0xce, + 0x83,0x9f,0x7f,0x24,0x12,0x13,0x32,0x47,0x95,0xfb, + 0xdf,0xc8,0xf5,0x03,0xca,0xf4,0x70,0x76,0x07,0x53, + 0xcd,0x8d,0x4b,0x3c,0xad,0xe7,0x33,0xed,0x53,0x35, + 0x8e,0x4d,0xe8,0x68,0xaa,0x5a,0xd3,0xe1,0x44,0xca, + 0xcf,0xda,0xda,0x80,0x04,0xfa,0x90,0x2e,0x98,0x72, + 0x40,0x3e,0xd1,0x35,0x4b,0xc8,0xcd,0xdf,0xe8,0xb9, + 0x4c,0xfc,0x18,0x42,0x1a,0xa7,0xa1,0x92,0xcd,0x44, + 0xe7,0xa4,0xd9,0x95,0x5a,0xef,0x84,0xd0,0x6c,0xf9, + 0x52,0xf4,0x3c,0x1c,0x97,0x2c,0x25,0x1c,0x53,0xe2, + 0x45,0xeb,0x67,0xc3,0x51,0x23,0xd5,0xfd,0xf4,0xee, + 0x36,0x49,0xd4,0x66,0x1f,0x6e,0xe3,0x0d,0x79,0x6a, + 0xb9,0xf3,0x13,0x8a,0x84,0x33,0x39,0x42,0xa4,0x16, + 0xf8,0xb4,0xc7,0x89,0x6b,0xf4,0x09,0x2d,0xe2,0x45, + 0xc1,0x67,0x6a,0x69,0x4c,0x93,0x45,0x6e,0xba,0x29, + 0xb5,0xbf,0x92,0x43,0x37,0x11,0x7f,0x49,0x8d,0x93, + 0x12,0xb3,0xbb,0xf7,0xef,0xae,0x95,0xda,0x4c,0x69, + 0x3c,0x7c,0x03,0x2f,0xa6,0x91,0xec,0x44,0xa6,0x4b, + 0x70,0xfd,0xd4,0xba,0x9b,0x7c,0x74,0x08,0xfd,0x4a, + 0x53,0x39,0xd3,0xf3,0x75,0x6d,0x37,0xf8,0xef,0xb3, + 0xe0,0xac,0xc4,0x7b,0xdb,0x22,0x31,0xce,0x87,0x8c, + 0xc4,0xeb,0xd2,0x38,0xff,0x76,0x8a,0x07,0x9e,0xf5, + 0xa1,0xe9,0xc5,0x50,0x51,0x1d,0x97,0x5c,0xa5,0x96, + 0x89,0x7b,0x07,0x69,0x02,0x6e,0x43,0x96,0x76,0x13, + 0x66,0x04,0xd9,0x4f,0x26,0xb2,0x9f,0xc2,0xd3,0xd3, + 0x34,0xa6,0xb9,0xcf,0x43,0xb1,0x44,0x10,0xbf,0x33, + 0xd9,0xdc,0x24,0x35,0x78,0x87,0xde,0x6e,0x3c,0xee, + 0x52,0x4b,0xd3,0xe9,0xe1,0x50,0x12,0xba,0x4d,0x72, + 0xe4,0xfb,0xce,0x82,0x57,0xf9,0x48,0x36,0xd2,0xa8, + 0x79,0x97,0x1a,0x90,0x96,0xde,0x49,0x87,0x6e,0x27, + 0xe5,0x3a,0xc3,0xde,0x4f,0x1c,0x02,0xa6,0x04,0x21, + 0x49,0x61,0x38,0x8d,0x30,0x32,0x3d,0xee,0x59,0x13, + 0xf9,0xa1,0x4d,0x89,0x03,0x9d,0x75,0xd3,0x39,0x40, + 0xa4,0xdf,0x09,0x38,0xf8,0x44,0x6f,0x6a,0x42,0xe0, + 0x5d,0x0c,0x9a,0x00,0x87,0xc4,0x1b,0x9a,0xb4,0xe2, + 0x12,0x45,0x62,0x42,0x9e,0xdd,0x50,0x8f,0x20,0xd1, + 0xef,0xbc,0x5a,0xf7,0xe2,0x53,0xb5,0xe4,0x38,0x3d, + 0x5b,0xdf,0x23,0xba,0x31,0x85,0xb0,0x13,0xfc,0x4d, + 0x42,0x55,0x29,0xeb,0x4d,0x5c,0x9b,0xae,0x0f,0x40, + 0x12,0xff,0xc9,0x16,0x23,0x99,0xbd,0xa6,0xcd,0xb7, + 0x85,0x5d,0xa7,0x85,0x4d,0x53,0x53,0xe6,0x79,0x9c, + 0xb4,0x39,0xa7,0x84,0x36,0x25,0xc6,0x9f,0x24,0x33, + 0xf0,0x77,0x67,0x43,0x9a,0xfe,0x44,0x77,0x67,0x63, + 0x14,0xb8,0x39,0xdc,0x88,0x43,0x63,0x12,0xb4,0xf3, + 0xb7,0x24,0xbf,0x14,0xb4,0xf5,0xf7,0xdd,0x01,0x95, + 0xde,0x99,0x7c,0xae,0x25,0x7c,0x27,0xd1,0xb9,0x34, + 0x62,0xfc,0x7a,0xbd,0x8e,0xbb,0xde,0x54,0x98,0x7c, + 0xb2,0x3e,0xfa,0xe7,0x24,0xf2,0x31,0x25,0xdf,0x34, + 0x52,0x3d,0xb8,0xa3,0x1f,0xf7,0x0e,0xbb,0x48,0x66, + 0x3f,0x00,0x37,0xba,0x33,0x3d,0xc9,0x49,0xd5,0x2a, + 0x15,0x8c,0xce,0x76,0x82,0xd0,0x98,0xc9,0x56,0x60, + 0x31,0xa9,0x75,0xd2,0x40,0x80,0xb3,0x88,0x58,0xb4, + 0x1f,0xc6,0xa4,0x28,0x1c,0xa4,0x67,0x9a,0xc0,0xba, + 0x13,0xdb,0x2d,0x9a,0x30,0x49,0x5d,0x38,0xcd,0xb4, + 0x4f,0x38,0x37,0xba,0x9f,0x9c,0x7d,0x4e,0x2a,0xee, + 0xa6,0x56,0xda,0x66,0xe4,0x9f,0xba,0x0f,0x3a,0xfc, + 0x33,0xb4,0x5f,0xdf,0xd6,0xad,0xe3,0xb0,0xbd,0xc1, + 0xd9,0x83,0x37,0xdb,0xa7,0xe2,0xb6,0xd3,0x7b,0x49, + 0x7e,0x90,0x94,0x80,0xea,0x67,0xfc,0x9e,0x7a,0x65, + 0xae,0x12,0x9d,0x02,0xd8,0x94,0x55,0x52,0x0b,0x80, + 0xb8,0x01,0xe7,0x9c,0x37,0x0b,0x07,0xb7,0x90,0x9d, + 0x96,0x84,0x42,0x85,0x01,0xda,0x3f,0x5f,0x5f,0x5f, + 0xa5,0x9c,0x0a,0xc7,0x99,0x98,0xb4,0x1d,0x68,0x83, + 0xa7,0xea,0xcd,0xf1,0xa3,0x02,0x1a,0xf5,0xe0,0x0a, + 0x6d,0x20,0x56,0xd8,0x4c,0x96,0x3f,0x93,0xb8,0x30, + 0xa9,0x35,0x96,0x20,0xcb,0x14,0x44,0x7a,0x7f,0x5e, + 0x0f,0xf8,0x0d,0x79,0x1b,0x26,0xd5,0xce,0x39,0xa7, + 0xa6,0xeb,0x68,0x95,0x42,0x6d,0x4c,0x39,0xd3,0x73, + 0xd7,0x35,0xa2,0xeb,0x0e,0x5a,0x2d,0x35,0x59,0x5a, + 0x48,0x52,0xf0,0xd3,0xa9,0x02,0x14,0xe0,0xe7,0xef, + 0x95,0xf7,0xf0,0xbd,0xb6,0xde,0xd6,0x0f,0x24,0xbd, + 0xa7,0xaa,0xaa,0x73,0xc2,0xc2,0xa1,0x72,0x88,0xd7, + 0x93,0x0c,0x4c,0xd3,0x3e,0x49,0xeb,0x90,0xb8,0x0e, + 0x29,0x91,0x74,0x45,0xc0,0xc6,0x97,0x6c,0x93,0x88, + 0x6b,0x82,0x39,0xf9,0x14,0x7d,0xd2,0x96,0xbc,0xcc, + 0x20,0xe1,0x7d,0xdf,0x6e,0x94,0x9e,0xda,0x6f,0x53, + 0xcb,0xe6,0x53,0x89,0x90,0x89,0x9f,0xb1,0x4d,0x7c, + 0xcd,0x7a,0x3f,0x4b,0x02,0xf0,0xf9,0x04,0x55,0x4c, + 0x2d,0xae,0xbe,0x46,0x5d,0x61,0x92,0xe2,0x9e,0xb6, + 0xe5,0x27,0x94,0xbe,0x99,0x1a,0xe3,0x90,0x4a,0x4a, + 0xb0,0x12,0xca,0xde,0x81,0x8c,0xd4,0xa5,0x98,0x0a, + 0xbd,0x34,0xa5,0xdd,0xd7,0xdf,0xf2,0x8c,0xc7,0xb3, + 0x72,0x13,0x53,0xc9,0x9e,0xc6,0x4d,0xb3,0x6d,0x3b, + 0x24,0x66,0x60,0xeb,0x15,0xf5,0x56,0xc2,0x04,0xd2, + 0x49,0x04,0x5b,0x7a,0x60,0x34,0xe2,0x97,0x08,0x73, + 0x4e,0x16,0x5f,0x2b,0x24,0x9d,0x1c,0xa3,0xe4,0x63, + 0xaa,0xb8,0x27,0xfd,0x9f,0x94,0x4d,0x92,0xdc,0xb9, + 0x56,0x7f,0x69,0xe4,0xb4,0x57,0x57,0x93,0xc6,0x87, + 0x3b,0x28,0xa6,0xcd,0xe8,0x0c,0x59,0x9d,0xae,0x08, + 0x25,0xbb,0x1b,0x11,0xbd,0x4d,0x15,0xe6,0x2a,0x84, + 0xce,0x0f,0xeb,0x6b,0x6f,0x6a,0xab,0xdd,0xe8,0x4b, + 0xdf,0x14,0xda,0xf2,0x22,0xc5,0xed,0x41,0x43,0xe2, + 0x6c,0xdc,0xd6,0x89,0x84,0x9a,0x1c,0xb1,0x29,0x79, + 0xfe,0xc4,0x31,0xde,0xed,0xd9,0x0d,0x01,0x73,0x42, + 0x8c,0x5e,0xaf,0xd7,0x8f,0x25,0x09,0x41,0xd7,0x7a, + 0x19,0x34,0xe9,0xb3,0xe1,0xbd,0xa4,0xbe,0xff,0x84, + 0xfa,0x24,0x4e,0x81,0xa2,0x10,0x69,0x52,0x49,0x13, + 0x08,0x48,0x7a,0xce,0xd6,0x76,0x27,0x09,0xf8,0xa5, + 0xd6,0xca,0xb6,0x35,0xbe,0xb5,0x9b,0x20,0xc4,0xfa, + 0xe4,0xca,0xd4,0xc6,0xb6,0x3b,0xce,0x4e,0x63,0xca, + 0x54,0x24,0x69,0x5b,0xce,0xc5,0xc4,0x89,0xf4,0xae, + 0xdf,0xbf,0x29,0x32,0x69,0xe4,0x7b,0xc3,0x39,0x49, + 0x3c,0x92,0xc9,0xb8,0x79,0x93,0xcc,0x13,0xad,0xc4, + 0xbd,0x67,0x42,0x8b,0x26,0x02,0xfb,0x54,0x6c,0xb8, + 0x0d,0xb2,0x6d,0x3d,0x4f,0x48,0xae,0x13,0xfd,0x75, + 0x36,0x2b,0x74,0xbe,0xba,0xa9,0x3e,0xe2,0x4b,0x6d, + 0x08,0xd9,0xfa,0xef,0x2f,0x97,0xa8,0x24,0x88,0x76, + 0xc3,0x0d,0x49,0x41,0x81,0xfa,0xfc,0x49,0xb7,0xc5, + 0x1d,0xc6,0x1b,0x08,0x3d,0xb5,0xa9,0x36,0xd0,0x6e, + 0xba,0x6e,0xdd,0x88,0x0e,0x59,0xa2,0x56,0xc0,0x24, + 0x96,0xe6,0xd4,0x90,0xa7,0x4a,0x66,0x83,0xc0,0x4d, + 0x90,0x6f,0x87,0xea,0x53,0x05,0x30,0xe9,0xe5,0xd0, + 0x28,0xe3,0xd4,0x67,0x4e,0x9c,0x0b,0x6a,0x77,0xa4, + 0x67,0x37,0x41,0xcc,0xd3,0xf3,0x0b,0x66,0xb6,0x87, + 0x0e,0x48,0x77,0xe0,0x24,0x5e,0x84,0x1b,0x03,0x56, + 0x48,0xd9,0xb4,0x3c,0xce,0x46,0xe5,0x38,0xa8,0x04, + 0x1f,0x3d,0x0c,0xcc,0xfe,0x3b,0x8e,0x7b,0x14,0x92, + 0xd1,0x1f,0xbd,0x1e,0x55,0x4e,0x4e,0xcf,0x7e,0x23, + 0x64,0x98,0x2c,0x37,0x14,0xd6,0x87,0x75,0x77,0x52, + 0x0b,0xd4,0xb5,0x07,0xe8,0x70,0x9f,0x88,0xd5,0xd3, + 0xde,0xdc,0x2a,0xce,0x7f,0xd2,0x32,0x74,0x07,0x4e, + 0x22,0x57,0xd3,0x10,0x40,0x58,0x3b,0x8f,0x24,0x4d, + 0x2d,0x05,0x7a,0x01,0x95,0x0e,0x4a,0x8a,0xad,0x69, + 0x44,0x9f,0x0a,0xaa,0x29,0xb1,0xa1,0xf7,0x32,0xc5, + 0x93,0x3b,0x36,0xdf,0xf7,0x42,0x62,0x98,0x34,0x31, + 0x09,0x2d,0xa2,0xd1,0xe6,0x83,0xf6,0xb0,0x16,0xc3, + 0xdb,0xe4,0x3b,0x21,0x6f,0xc9,0xf4,0x58,0xe5,0x48, + 0x5c,0x5b,0x69,0x43,0x3f,0xa0,0x77,0x9d,0xf8,0x5e, + 0x9b,0xe9,0xbb,0x64,0x4a,0x9e,0x5a,0xe0,0xee,0xbd, + 0xfd,0xa6,0x09,0xa3,0xad,0xe2,0x30,0x8d,0xf1,0xb9, + 0xac,0x74,0xc3,0xd7,0x49,0x1b,0xc0,0x7d,0xfe,0x56, + 0x24,0xcc,0x6d,0x22,0x9d,0x26,0x23,0xde,0x8b,0x40, + 0xb4,0xa5,0x9b,0x4b,0xd1,0x86,0x54,0xd9,0x53,0xeb, + 0x42,0xaf,0x85,0x88,0x9a,0xe4,0x05,0xf5,0xf5,0xf5, + 0x55,0x7a,0x48,0xbe,0x5e,0xaf,0xa2,0xe7,0x9c,0x5a, + 0x1b,0xe6,0x7b,0x7f,0x5a,0x44,0x02,0x43,0x97,0x5b, + 0xc4,0x9f,0x3a,0x48,0x3b,0x28,0x79,0x33,0xc1,0x30, + 0x4d,0x2c,0xd2,0xd8,0xa8,0xba,0xc2,0x6f,0x0e,0xe8, + 0xed,0x54,0xcb,0xd6,0x40,0x78,0x6a,0xb1,0x11,0xcc, + 0xee,0x36,0xbe,0xf9,0x9e,0x9f,0xd6,0x66,0x0f,0xca, + 0xc9,0x74,0xb3,0x27,0xf3,0xb7,0xf3,0xf5,0xf7,0xc0, + 0x40,0x6d,0x48,0xa6,0x3a,0x65,0x53,0x4f,0xb8,0xf8, + 0xa3,0x77,0x4b,0x88,0x4f,0x1a,0xa3,0x26,0x79,0x8c, + 0xd4,0x4e,0x25,0xa5,0x64,0x13,0x83,0x26,0xd8,0xff, + 0xb8,0xb8,0xe7,0xd0,0x72,0x1a,0x15,0x56,0x63,0x5c, + 0x77,0x7f,0xa4,0x5a,0x7c,0x27,0xcc,0x06,0xf1,0x3e, + 0x9f,0x4e,0x64,0x4d,0x13,0x67,0x9d,0xa8,0x9f,0x0e, + 0xfb,0x69,0xcd,0x26,0xbe,0xe4,0xd4,0xbe,0xeb,0xcf, + 0x2c,0xb5,0xfb,0xd3,0xda,0x4d,0xad,0x2a,0x1a,0xa2, + 0x49,0x2d,0xd0,0x5b,0x5c,0x33,0x9d,0x23,0x49,0xe6, + 0x65,0xeb,0xde,0xbe,0x69,0x25,0x0b,0x4a,0xe7,0x44, + 0x36,0x0f,0x25,0x98,0x4a,0x52,0x9f,0xa8,0x07,0xa9, + 0x9b,0xe2,0xd6,0x8d,0x43,0xda,0x29,0x8e,0x3a,0xba, + 0x04,0xb9,0x54,0x10,0x5f,0x30,0x15,0xf2,0x2f,0xd7, + 0xd7,0x4c,0xbd,0xbb,0xc9,0x57,0x65,0x32,0x80,0x73, + 0x59,0xe7,0x34,0xa6,0x4d,0x22,0x8b,0x9f,0x78,0xa4, + 0xa4,0xcf,0xdc,0xb4,0x6e,0x74,0x71,0x92,0xc0,0xda, + 0x04,0x13,0x6e,0xa0,0xc9,0xed,0xd4,0xd7,0xb6,0x4a, + 0xd5,0x77,0x4b,0x24,0x5c,0xfd,0xfe,0x29,0x38,0x9a, + 0xe7,0x76,0x28,0xb9,0x53,0x76,0xbe,0x59,0x27,0x07, + 0xf8,0x25,0x88,0xda,0xa5,0x60,0xeb,0x88,0xfb,0xce, + 0x98,0xd3,0x11,0x5d,0xb7,0x7c,0x95,0x4d,0xe5,0x32, + 0x05,0x5b,0x45,0x5d,0x27,0xae,0x43,0x3b,0x28,0x8f, + 0x43,0x16,0x48,0x74,0x94,0x2a,0x5f,0x9a,0x80,0x69, + 0xfb,0x7a,0x0c,0xea,0xae,0xc2,0x26,0x25,0x68,0x82, + 0xbe,0x03,0x61,0xf2,0x4c,0x6d,0xa2,0xb0,0x8f,0xcf, + 0x86,0x13,0xa1,0x53,0x58,0x84,0x12,0x25,0xb3,0xe1, + 0x0d,0xe7,0x87,0xac,0x1d,0xb4,0xf5,0xeb,0xf6,0xcd, + 0x66,0x7f,0x13,0x6f,0x62,0xe2,0x97,0xa5,0x69,0xa9, + 0xe9,0xd0,0x17,0xaa,0x44,0x5c,0x2b,0x89,0x5b,0x93, + 0xc6,0xc8,0x27,0x95,0x5f,0x2a,0x7e,0x54,0x72,0xa5, + 0x6b,0x2a,0xa5,0xb8,0xea,0xe4,0x3e,0x68,0x5d,0x68, + 0x57,0xc0,0x3d,0xf7,0x85,0x04,0xc2,0x31,0xe8,0xe1, + 0xd9,0x08,0x5f,0x4e,0xe7,0x9f,0x1b,0xec,0xd9,0x90, + 0x90,0x5d,0x81,0xea,0x06,0x30,0x08,0x3d,0x4d,0x80, + 0x43,0xea,0xbe,0x28,0xca,0xab,0xd7,0x07,0x28,0xeb, + 0x71,0x6b,0x4b,0xe3,0xa0,0x5b,0x63,0xbf,0x27,0x05, + 0xd0,0x8d,0x83,0xf3,0xb6,0xcf,0x4f,0x1b,0xc2,0xf1, + 0x60,0x36,0xa6,0x75,0x8e,0x77,0xb0,0xb1,0x8b,0xf8, + 0x84,0xa7,0xf2,0x09,0xb9,0x2b,0x64,0xe0,0xa8,0xbb, + 0xa3,0x1b,0x54,0x85,0xee,0x12,0xd2,0x90,0xf4,0x60, + 0xa6,0x8a,0x37,0x4d,0x12,0x7c,0x5a,0x71,0x0c,0x90, + 0xfd,0x0f,0xe2,0xe2,0xae,0x8f,0x2a,0x35,0x0a,0xda, + 0x5b,0x45,0xef,0xd6,0x66,0xac,0x8d,0x73,0x73,0xff, + 0xd9,0x74,0x88,0xfd,0x0d,0x42,0x95,0x50,0x49,0xfd, + 0xbe,0xd4,0x56,0xa5,0x56,0x14,0x14,0x10,0xe7,0xeb, + 0xeb,0xab,0x68,0xcc,0xdd,0x91,0xbf,0x4d,0x1b,0xee, + 0xed,0xd9,0x0c,0x08,0x09,0x3d,0x37,0x4d,0x42,0x2a, + 0xb5,0xc7,0x5d,0x72,0x37,0x71,0x31,0x1c,0xba,0x35, + 0xf9,0x71,0x51,0x15,0x0e,0xef,0xf1,0x0c,0x08,0xdf, + 0x09,0xad,0xea,0x13,0xc4,0xdd,0x8e,0x26,0x2e,0xee, + 0xd0,0x9d,0xac,0x1c,0x28,0xae,0xc1,0x73,0x89,0xa8, + 0xce,0x94,0xdc,0x13,0xbf,0x92,0x3a,0x08,0xd3,0xa0, + 0x44,0x47,0xd1,0xb7,0x7c,0x0e,0xf3,0xee,0xce,0x46, + 0x37,0x66,0x13,0xc7,0x36,0x36,0x21,0xae,0xdd,0xed, + 0xe2,0x3b,0x09,0xf4,0x6d,0x8b,0xac,0x4d,0x4b,0xc8, + 0xa1,0x55,0xfa,0xee,0xfb,0x30,0xc4,0xdf,0xf8,0x5a, + 0x52,0x9b,0x2f,0x71,0x43,0x49,0x47,0xec,0x46,0x70, + 0x7a,0xb1,0x39,0xe9,0x65,0xe9,0x7d,0x38,0xca,0x83, + 0xde,0xaf,0x7b,0x16,0x6e,0xad,0xfc,0x5e,0x42,0xf3, + 0x3f,0xd3,0x2a,0x9b,0xc0,0x91,0xfa,0xd0,0x93,0xd0, + 0xd6,0x74,0xd8,0xb7,0xcf,0xfe,0x69,0xc1,0xa4,0x84, + 0x61,0x0a,0x6e,0xae,0x4d,0x40,0x87,0x1c,0x10,0x10, + 0x5d,0xd2,0xf2,0x38,0x4c,0xb5,0xff,0x3e,0xd9,0x01, + 0x10,0xe4,0x3a,0xb5,0x5b,0x86,0x40,0xf5,0x96,0x10, + 0xa4,0x9f,0xa5,0x64,0x4d,0x33,0x79,0x82,0x22,0xa9, + 0x85,0x3a,0xb9,0x1e,0x7f,0x62,0x62,0x28,0x87,0xc7, + 0x63,0x3d,0xd0,0xef,0x93,0x9b,0x3a,0xb4,0x6b,0xdf, + 0x0e,0x7f,0x7d,0x96,0xe6,0x80,0xa6,0xeb,0x78,0xfb, + 0x73,0x39,0xec,0xde,0xda,0x72,0x7a,0x90,0xd7,0x3f, + 0xff,0xb8,0x77,0x62,0x05,0x09,0x05,0x69,0xab,0x54, + 0x20,0xb8,0xe4,0x26,0x70,0x25,0x6a,0x3b,0x11,0xa7, + 0x53,0x42,0x89,0x63,0xd6,0x39,0x73,0x49,0x8c,0xce, + 0xad,0x25,0xe0,0x1b,0x9d,0xcd,0xb4,0xce,0xdd,0xe6, + 0xa3,0xa4,0x93,0xda,0x7d,0x1a,0x5c,0x89,0xe8,0xbc, + 0x99,0xa0,0xd4,0x6a,0x95,0xa6,0xc9,0xa6,0xf6,0xc0, + 0x86,0xa3,0x94,0x92,0xc3,0x50,0x9c,0x9c,0x49,0xbd, + 0x79,0x48,0x2a,0x5d,0x7b,0xc3,0xb5,0x1b,0x8f,0xee, + 0x4f,0xb2,0x47,0x51,0xda,0x81,0x4b,0x62,0x7a,0x52, + 0xaa,0xc5,0x8f,0x1e,0xc0,0x0b,0x27,0xf8,0xb3,0x29, + 0x10,0x29,0x11,0x9c,0x74,0xa7,0x36,0x00,0x84,0x73, + 0x4f,0x20,0x21,0xce,0x6d,0x72,0xf3,0x89,0xa9,0x68, + 0x3a,0xaf,0xa7,0x18,0x9f,0x62,0x7b,0x6a,0x61,0x26, + 0xd4,0x31,0x79,0x7e,0x3a,0xbf,0x4d,0xa2,0xd5,0xbc, + 0xa6,0x17,0xeb,0x2a,0x4f,0x85,0x6c,0xb5,0x7a,0xa3, + 0x89,0x91,0x8d,0x72,0xf3,0x04,0x97,0xbb,0x17,0x47, + 0x0e,0xcd,0x41,0x4a,0xfd,0xa4,0xde,0xf4,0xa6,0x35, + 0x36,0x8d,0x8b,0x4e,0x9e,0x36,0x53,0x76,0xad,0x0b, + 0x5a,0xe0,0xbc,0x33,0x59,0x4f,0x4c,0x9a,0x22,0x5b, + 0x42,0xb0,0x5b,0x38,0x6e,0x04,0xd6,0xe9,0x42,0x39, + 0x15,0x57,0x25,0x4b,0x4e,0x93,0x84,0x1b,0xdf,0xad, + 0x29,0x28,0xa8,0xa1,0x23,0x09,0xc3,0xa5,0xb5,0x90, + 0x44,0xcd,0x88,0xdc,0x98,0x0e,0x8c,0xa9,0xd7,0x4d, + 0x01,0x71,0x12,0x78,0xdb,0x90,0x69,0x41,0xb5,0xdb, + 0xa2,0x2b,0x86,0x0c,0x7b,0x12,0x6a,0x38,0xf9,0x97, + 0xa5,0xfd,0x30,0x79,0x18,0x2d,0xbf,0xe7,0x4c,0x68, + 0xdf,0x94,0x68,0xb8,0x56,0x04,0xe9,0x09,0x75,0xfd, + 0x19,0xf3,0x3e,0x4f,0xa0,0x06,0x9c,0xa1,0xf5,0xe7, + 0xf6,0xf1,0x49,0x6d,0x54,0xfd,0xbc,0x5b,0xf4,0x91, + 0x92,0xa8,0x49,0x9a,0x82,0x6c,0x88,0x7a,0x82,0xe9, + 0x0e,0xe6,0xff,0xe8,0xe4,0x90,0x23,0xeb,0xbb,0x42, + 0x75,0x42,0xa8,0x88,0x9b,0x94,0xb4,0x8b,0x88,0xb6, + 0x40,0xf1,0x2e,0x91,0xdc,0xdd,0xa8,0xb6,0x26,0x7f, + 0x1b,0x53,0xe3,0x4f,0x7e,0x36,0xe9,0x66,0x39,0xbe, + 0xaf,0xb6,0xfa,0x9c,0x29,0xaa,0x5b,0xbf,0x44,0xe6, + 0x4f,0xe7,0x89,0x33,0x01,0xdf,0xca,0x19,0x50,0x8b, + 0xf3,0x13,0x72,0xb6,0x9d,0x02,0x4d,0x9b,0x8f,0xfe, + 0x71,0x0f,0xc9,0x8d,0xb7,0xa7,0xc0,0x95,0xda,0x21, + 0xe6,0x25,0x9d,0xc9,0x91,0x9c,0x26,0x66,0x1c,0xc7, + 0x82,0x60,0xbb,0x6d,0x1f,0x55,0xb3,0xca,0xcd,0x21, + 0xbd,0x81,0xf9,0xdc,0x88,0xf6,0xb6,0x4f,0x9b,0x2a, + 0xa7,0x81,0x00,0x79,0x0c,0x72,0x77,0x48,0x21,0x3a, + 0xc1,0xe3,0x4e,0x6d,0xd9,0xbd,0xe3,0x9e,0x04,0x91, + 0xf9,0xe9,0x20,0x7a,0x78,0x36,0xad,0xc8,0x29,0x20, + 0xeb,0x94,0x48,0x0a,0x4e,0x6e,0x2a,0xc9,0x71,0x86, + 0x28,0xc8,0xaa,0x10,0x61,0x0a,0xb4,0x69,0x84,0xd8, + 0x69,0xa7,0xa4,0xd6,0x88,0x16,0x05,0x7d,0x7a,0x91, + 0x84,0xea,0x1c,0xb7,0xc2,0xb5,0x75,0x36,0xfc,0xb4, + 0xa9,0x00,0xda,0xb4,0xcc,0x75,0x0a,0x67,0x9a,0x5c, + 0x4b,0xc9,0xb3,0x4a,0x27,0x6c,0x5b,0x23,0x8e,0x03, + 0x31,0x4c,0x2b,0xae,0xda,0x57,0x29,0x76,0x4c,0x28, + 0xcf,0xc6,0x66,0x63,0x21,0x0f,0xf0,0xe0,0x5c,0x2c, + 0xdb,0x4e,0xcf,0x6a,0x3a,0x4c,0xcf,0x6e,0x0e,0xba, + 0x4f,0x7f,0x46,0xf7,0x48,0x92,0xed,0xa0,0xe9,0x30, + 0x37,0xe8,0xe2,0x9e,0x5f,0xd2,0xfb,0x71,0xc5,0x1c, + 0x71,0x6e,0x3e,0x51,0x3c,0x56,0x1b,0x1f,0x87,0xf0, + 0x6e,0x69,0x09,0x6e,0x40,0x45,0xcf,0xed,0x49,0xb5, + 0x3a,0x25,0x68,0x93,0x54,0x83,0xb6,0xa6,0x26,0x23, + 0xe2,0xa9,0xbd,0xbb,0x91,0x22,0xd8,0x0c,0x8f,0xbc, + 0x68,0x3c,0x71,0xa3,0x2b,0x93,0xc6,0xcc,0xc9,0x7c, + 0xd2,0x49,0xc0,0xcb,0x45,0x9f,0x0d,0x0a,0x65,0x5a, + 0x20,0x0f,0xf2,0x2b,0xe9,0x55,0x80,0x0e,0xcf,0xa1, + 0x40,0xb1,0xd4,0x3a,0x42,0xc4,0x4a,0xef,0x75,0xaa, + 0x5a,0xd2,0x78,0x6c,0xb0,0x82,0x38,0x13,0x1a,0x55, + 0x55,0xd7,0x9f,0x3f,0x7f,0x56,0xa3,0xb2,0x49,0xae, + 0x3f,0xad,0x0d,0xf7,0xfe,0xb6,0x41,0x41,0x95,0xc0, + 0xfb,0xe1,0x4c,0xa3,0xce,0x13,0x67,0x40,0xa1,0xf0, + 0x4d,0x9b,0xc6,0xac,0xb9,0xe3,0xde,0x4d,0x55,0x1d, + 0xa7,0x3d,0x74,0x99,0x31,0xed,0x85,0x8a,0xf8,0x09, + 0xd3,0x0d,0x56,0x45,0x58,0xaf,0x2f,0x20,0x60,0x47, + 0xd7,0x83,0x49,0xc0,0xce,0x74,0x08,0x29,0xba,0xe1, + 0xe0,0xf6,0x34,0x62,0x3b,0x0d,0x45,0xb8,0x0a,0xd6, + 0xd9,0xdf,0x98,0xef,0x3a,0xae,0x4d,0x91,0x84,0xdc, + 0xa6,0xb1,0xe0,0x40,0xcc,0x7f,0xb4,0x72,0x9c,0x47, + 0x92,0xdb,0x07,0xfd,0x30,0x0b,0x7c,0x8c,0xa3,0x28, + 0x87,0x8a,0x3e,0x26,0x85,0x60,0x3d,0x6c,0xf4,0x3d, + 0xa8,0x15,0x10,0x69,0xd6,0xa4,0xd6,0x10,0x89,0x89, + 0x3a,0x42,0xfc,0x66,0xa2,0x4b,0xcf,0x14,0xd5,0x74, + 0x73,0xf1,0x83,0x26,0x92,0x83,0xec,0xc5,0x3a,0xfe, + 0xba,0xf3,0x43,0xf7,0x5c,0x8f,0x1d,0xdf,0xd7,0x7b, + 0x4c,0x1b,0xe7,0x90,0x67,0x22,0x15,0x0c,0x09,0xa1, + 0x22,0xa7,0x02,0xb7,0x6f,0x37,0x04,0x7c,0x57,0x70, + 0x2d,0x90,0xea,0x43,0x48,0xe7,0xd4,0xd1,0xf9,0x1b, + 0x6f,0xb2,0x94,0x47,0x0c,0x4a,0xe8,0x27,0x99,0x03, + 0xff,0x8c,0xc1,0x4f,0x6d,0x8f,0x0d,0x7c,0xbf,0xa9, + 0xbe,0xa7,0x3e,0x2b,0xa1,0x0b,0x24,0x14,0x48,0x63, + 0xf7,0xd3,0x75,0xa5,0xf6,0x10,0xdd,0x77,0xe2,0x78, + 0xb8,0xe9,0x99,0x64,0x30,0x4a,0x3d,0x69,0xfd,0x2c, + 0x42,0x8d,0x74,0xf1,0x6d,0x94,0x48,0x1d,0x19,0x8c, + 0xde,0x2f,0x59,0x8f,0x10,0x12,0xd3,0x9f,0x45,0xa8, + 0x8a,0x1d,0xcf,0xc4,0x3a,0xca,0x27,0x1f,0xaa,0x64, + 0x72,0x37,0x99,0x0f,0x3a,0x1e,0x82,0x9a,0x9d,0x6e, + 0x94,0x73,0x93,0x87,0x5d,0xb2,0x92,0x71,0x84,0xe2, + 0x8d,0xa2,0xf4,0x84,0xca,0x0e,0xc9,0x28,0xee,0x17, + 0xf7,0x7c,0xbb,0xdc,0xc1,0x86,0x07,0xa3,0xd2,0x10, + 0xc9,0xe5,0x3d,0xf9,0x59,0xd1,0x50,0x44,0xe2,0xa7, + 0x50,0xd2,0xbf,0x40,0x30,0xce,0xb2,0x95,0x1d,0x7f, + 0xce,0xd9,0x8a,0x7c,0xd2,0xfe,0x23,0x65,0xdb,0x84, + 0x24,0x06,0x9e,0x97,0x3b,0x38,0x4f,0x42,0x9e,0xa6, + 0xf6,0x6b,0x47,0x1d,0xa6,0xa9,0xdd,0x80,0x6a,0x1c, + 0x13,0x5b,0xce,0x34,0x5a,0xad,0x6d,0xb5,0xcd,0xf9, + 0xb1,0x51,0x9d,0x77,0xd3,0x43,0x13,0xb2,0xbe,0x19, + 0xa6,0xd9,0x1c,0xea,0x93,0xda,0xfb,0x56,0x88,0x31, + 0x4d,0x96,0x12,0xf9,0x7c,0x83,0xc2,0xde,0xeb,0xc5, + 0x99,0xfc,0xa6,0xc9,0xb1,0xd0,0xe1,0x39,0x29,0x59, + 0x9f,0x78,0x77,0x10,0x73,0x0f,0x4d,0xac,0x4f,0x9a, + 0x40,0x44,0x29,0x78,0x51,0x06,0xba,0x7c,0xb1,0x27, + 0xf5,0x94,0x09,0xae,0xd2,0x84,0x23,0xc1,0xc4,0xff, + 0x91,0x4c,0x32,0xdd,0x8f,0x83,0x6b,0x93,0x2f,0x50, + 0xfa,0xee,0x24,0xe0,0x37,0xf4,0x27,0xdf,0x10,0x8f, + 0x5e,0x49,0x10,0x0a,0x35,0xf1,0x62,0x34,0xd8,0xc3, + 0xb4,0x13,0xa2,0x5b,0x1b,0xc1,0x34,0x82,0x32,0x27, + 0xd4,0x67,0xf3,0xcf,0xc6,0xe3,0x8d,0x12,0xc1,0xce, + 0x79,0x48,0xfc,0xa8,0x61,0x0d,0x9d,0x04,0xeb,0x87, + 0x67,0xfd,0xf3,0x3d,0xbf,0x7e,0xfd,0xfa,0xf1,0xc9, + 0x9a,0x90,0x36,0xf2,0xd6,0x72,0xe2,0x85,0xba,0xa7, + 0x92,0x9c,0x81,0x26,0xd3,0x6a,0x02,0x1a,0x0e,0xc1, + 0x33,0xb5,0x31,0xcd,0xbb,0x3d,0xae,0x0a,0x1c,0x94, + 0x88,0xd7,0x89,0xab,0x79,0x6e,0x76,0xc4,0x7e,0xe1, + 0x15,0x77,0xa8,0xad,0x95,0x92,0x1f,0x42,0x07,0xd2, + 0x34,0x55,0x22,0xf6,0x07,0xfe,0xda,0x49,0x8a,0xdb, + 0x49,0x69,0x7c,0x6a,0xa3,0x11,0x7d,0x80,0xda,0x81, + 0x44,0x38,0x9f,0xde,0xcd,0xe4,0xdd,0x96,0x8c,0xa1, + 0x35,0xb1,0x36,0x95,0xfe,0xd9,0xf0,0x88,0x28,0x31, + 0x9e,0x74,0x6d,0x52,0x11,0xe4,0x92,0x05,0x87,0x4a, + 0x6e,0x29,0x0b,0xa9,0xf8,0x57,0xc4,0x76,0x42,0x35, + 0xd3,0xcf,0xc0,0x14,0x20,0x22,0xa0,0x32,0xa4,0x33, + 0xa2,0xc2,0xa9,0xc3,0xa3,0x7b,0xc5,0x51,0x00,0x26, + 0x8e,0x96,0xfe,0x3c,0xf1,0x8f,0xa7,0xb5,0x46,0x9d, + 0xae,0x97,0x83,0xb3,0x40,0xd7,0x23,0xb6,0x1d,0x28, + 0xd1,0xd8,0xb4,0x2a,0xd2,0xe8,0x1a,0x55,0xfe,0x89, + 0x75,0xde,0x0d,0x4e,0x5d,0xd6,0x37,0x71,0x95,0x92, + 0xb5,0x03,0x28,0x66,0x9e,0x4d,0x9f,0x7e,0x93,0xdc, + 0xf5,0xbe,0x34,0xb9,0x13,0x53,0xa2,0xf5,0x89,0x69, + 0xde,0xb4,0x29,0xf5,0x20,0xa6,0xd6,0x62,0x4a,0x4e, + 0x53,0x10,0xda,0x4c,0x13,0x50,0xa2,0xad,0xd5,0xdb, + 0x76,0x32,0x2e,0xbd,0xa3,0x64,0x5c,0xaa,0xc4,0x69, + 0x52,0xce,0x4e,0x5c,0x9c,0x9e,0x94,0x38,0x12,0x72, + 0xea,0x5b,0x13,0xe2,0xd1,0x9f,0xd7,0x9d,0x3c,0x0d, + 0x15,0xd1,0x59,0x1a,0x45,0xbe,0xb5,0xb7,0x36,0xfa, + 0x57,0xed,0x80,0x3a,0xee,0x3a,0x53,0x02,0x7a,0x3f, + 0x63,0xa7,0x87,0xd3,0x93,0xac,0x3b,0xd1,0xda,0xc2, + 0xe7,0xaa,0x06,0x3d,0x25,0x0b,0xce,0x6f,0x89,0x63, + 0xeb,0x89,0x07,0x40,0x28,0x5c,0x4e,0x3a,0xf8,0xe1, + 0x59,0x51,0x7c,0x39,0xc0,0x3f,0xa1,0x49,0xa0,0x93, + 0x10,0x54,0x8a,0x4d,0xd4,0xca,0xef,0xcf,0x6c,0x4a, + 0xc6,0x7a,0x5b,0xcf,0xac,0xab,0xe3,0xd6,0xa2,0x6b, + 0xa7,0x99,0x67,0x74,0x36,0x1d,0x8a,0xe9,0x8c,0x4a, + 0xc6,0xd0,0x5b,0x2e,0xd0,0x84,0x42,0x6d,0x5a,0x8b, + 0x2e,0x99,0x4a,0x06,0xcf,0x6e,0x00,0xc9,0x59,0x29, + 0x49,0x2c,0x5b,0x4d,0x12,0x6e,0x65,0x04,0xdc,0x5e, + 0x9e,0xae,0x3f,0x51,0x37,0xa8,0x15,0xe9,0xb4,0x89, + 0x92,0xae,0x9f,0x53,0xb4,0x7e,0x14,0x8a,0x69,0x54, + 0x73,0x53,0x31,0xeb,0xcd,0x07,0x84,0xe2,0x68,0x75, + 0xea,0x2a,0xd8,0xcd,0x68,0x67,0xd2,0xb9,0xd8,0x12, + 0xa6,0x1c,0xab,0x5f,0xcd,0x23,0x3f,0x41,0xa0,0xdc, + 0xcb,0xdd,0x28,0x60,0x53,0x9f,0x56,0x48,0x97,0x07, + 0xbc,0x8b,0xd6,0x92,0xf1,0x0e,0xad,0xea,0x9c,0x95, + 0x8d,0x3c,0x7d,0x6a,0x0b,0xa4,0x0a,0x20,0x8d,0x2a, + 0xa6,0x60,0x9b,0xb2,0xf7,0xc9,0x33,0xc8,0xf1,0x88, + 0x26,0x53,0xd5,0xa9,0xfd,0x35,0xf9,0x2d,0xb9,0xea, + 0x17,0xda,0x58,0x67,0x83,0x0a,0x6e,0x0e,0x79,0xb9, + 0x86,0x93,0xda,0x31,0x4e,0xad,0x36,0x55,0xf2,0xc0, + 0xc9,0x5a,0xa9,0x42,0xdf,0xcb,0xb6,0xf3,0x73,0x36, + 0x84,0x50,0x39,0x14,0xef,0xdf,0x3d,0x84,0xd6,0x4c, + 0xd5,0x2f,0xb5,0x83,0x92,0x65,0xc6,0x20,0x44,0x7a, + 0x86,0x43,0xf6,0x10,0x2a,0xd2,0x9f,0x83,0x81,0xef, + 0x8f,0xf2,0xf4,0x88,0x87,0xe2,0xfe,0x5d,0x93,0xc8, + 0xa9,0x4a,0x27,0x8f,0x44,0x22,0xe2,0x27,0x2e,0x17, + 0x3c,0xd7,0x23,0x08,0xa4,0x4e,0x62,0xda,0xb8,0x39, + 0x1d,0xbe,0x1b,0x62,0xf5,0xc6,0x2a,0x02,0x62,0xcf, + 0x31,0xcf,0x09,0x15,0x93,0xa7,0xd1,0x6f,0x97,0x28, + 0xd2,0x7a,0x21,0x25,0xe6,0x29,0x81,0x23,0xca,0x44, + 0xe7,0xd4,0x26,0x1a,0x45,0xb2,0x29,0x49,0xcf,0x2e, + 0xc5,0x7c,0xe2,0x14,0xe9,0xef,0xe9,0x24,0xdd,0x02, + 0xc1,0xb5,0x52,0x20,0x69,0x82,0x32,0xa1,0x53,0xe7, + 0x9c,0x7f,0x48,0xd0,0x1b,0x92,0x6f,0xf2,0x7b,0xea, + 0x88,0x0b,0x8d,0xd1,0x6d,0xcc,0x11,0x95,0x5c,0xa6, + 0x9f,0x35,0xf5,0xd3,0xdd,0xe8,0xa9,0x3e,0x88,0x4e, + 0x08,0x76,0xc6,0xa0,0x7d,0x11,0x6e,0x3c,0x69,0x88, + 0x00,0x4e,0x42,0x6c,0x4b,0xbf,0xab,0xcd,0xcf,0x45, + 0xaf,0xa6,0xa9,0x97,0xbc,0x80,0x64,0xcf,0x94,0x89, + 0xab,0x20,0x98,0x26,0x2b,0xae,0xb5,0x42,0x30,0xb7, + 0x7e,0x5e,0x6a,0x5f,0x0d,0x13,0x48,0x67,0x83,0x08, + 0x11,0x49,0x91,0x20,0xf1,0x0d,0xdc,0x6a,0x02,0xd7, + 0x99,0xf8,0x3b,0xa9,0xa7,0x0f,0x49,0xf3,0x19,0xf6, + 0xd5,0x99,0xd4,0x83,0x6f,0xf4,0x8c,0x82,0xb5,0x93, + 0xd1,0x97,0x36,0xed,0xe3,0x3e,0x1c,0x71,0xd5,0xa8, + 0x2d,0x9f,0xfe,0xcf,0x77,0x5b,0xee,0x34,0xd5,0xe8, + 0xd3,0x90,0x9e,0xc8,0x3f,0x9b,0xf8,0x49,0xed,0xf9, + 0x9f,0xd4,0x12,0xd0,0xc3,0x0f,0x90,0xad,0x11,0x1d, + 0xfa,0x54,0x74,0x2f,0xb5,0xc9,0xdd,0x38,0xf2,0x56, + 0x4f,0x6b,0x53,0x80,0x4c,0x49,0x82,0x26,0xbf,0x1b, + 0xc3,0x4b,0xa7,0xa3,0x96,0xae,0x43,0xb5,0x9b,0x88, + 0xe0,0x9b,0x50,0xfa,0x4d,0xc7,0x61,0x83,0x04,0x4f, + 0xc5,0xcf,0x24,0x1d,0xe1,0xce,0x43,0x45,0x86,0x5d, + 0xd2,0xeb,0xee,0x89,0x7c,0xb2,0xfa,0x7a,0xf8,0xfe, + 0x1c,0x9b,0xac,0x4f,0x09,0x8a,0xaa,0x56,0x4f,0x46, + 0xdf,0x13,0xa7,0x68,0x83,0xea,0xa7,0x5c,0x22,0x91, + 0xdc,0x29,0x41,0x4a,0x89,0xf0,0xb0,0xd7,0x1e,0xc5, + 0xdf,0x2b,0x55,0x15,0x4a,0x5e,0x4b,0x63,0x86,0x0e, + 0x12,0xdd,0x6c,0x1a,0xfd,0x87,0x16,0xc9,0x25,0xb6, + 0x00,0xe4,0xa8,0x0e,0x9b,0xe1,0x24,0xeb,0x08,0x0d, + 0xf6,0x49,0xdf,0x60,0x38,0x58,0x26,0x7d,0x96,0x33, + 0x1c,0xc8,0xa3,0xfa,0xeb,0x04,0xcd,0x13,0x7f,0xc0, + 0xf9,0xa3,0x40,0x42,0x13,0xfb,0xff,0x9b,0xaa,0x47, + 0x47,0xaf,0xb7,0x0a,0xe0,0x13,0xaa,0x63,0xb8,0x3f, + 0x88,0x50,0x98,0x8a,0xe0,0x4c,0x08,0xe3,0x02,0x31, + 0x3a,0x69,0x6d,0xa6,0xe7,0x69,0x36,0xea,0x01,0xd4, + 0xe5,0xf1,0xfd,0xfd,0x70,0xf9,0xfe,0x0e,0x74,0x25, + 0xbf,0x2d,0x09,0x86,0x16,0xd7,0xe3,0xc0,0xdf,0x26, + 0x12,0x53,0x4b,0x80,0x48,0xac,0xc9,0x8f,0x29,0x11, + 0xbe,0x37,0xc4,0x46,0x12,0xfd,0x4c,0xc5,0x9d,0xfa, + 0x22,0x91,0x7f,0x50,0x6a,0x17,0x98,0x8a,0xf9,0x04, + 0xe4,0xf9,0x04,0xe2,0xea,0xa1,0xe1,0x03,0x68,0xff, + 0xda,0x3f,0x1f,0xf6,0xde,0x71,0xfb,0x5e,0x8d,0x3f, + 0x49,0xbe,0x83,0x24,0x45,0x9c,0x14,0x04,0xb5,0x5a, + 0x54,0x31,0x9b,0x12,0xcf,0x4e,0xc8,0x1d,0xd0,0x03, + 0xc7,0x65,0x79,0xf0,0x84,0xdc,0x84,0x60,0xea,0xa3, + 0x6e,0xd4,0xf4,0x27,0xa9,0x0a,0x47,0x1d,0x48,0x34, + 0x86,0xe4,0x09,0x46,0x49,0x92,0x8b,0x8f,0x93,0x86, + 0x0f,0x19,0x20,0x53,0xbc,0x9a,0xac,0xa3,0x12,0x72, + 0xb4,0x89,0x01,0xee,0x9c,0xba,0xf9,0x8a,0x09,0x28, + 0x99,0xbe,0xc7,0xdd,0x9b,0xbb,0xef,0x97,0xf3,0xcb, + 0x98,0xdc,0xb9,0x53,0xbb,0xc2,0x65,0x99,0x29,0xbb, + 0x24,0x35,0xcb,0x65,0xbb,0xe1,0x7c,0xc2,0x53,0x9a, + 0x5a,0x0d,0xf4,0xfb,0xc9,0xff,0x6c,0x72,0x33,0x4e, + 0x44,0xda,0x74,0xaf,0x09,0xc2,0x4b,0xa8,0x84,0x39, + 0x7c,0xce,0x96,0xd8,0x9e,0xee,0xcb,0x5d,0x83,0xea, + 0xb3,0x88,0x40,0xdc,0x9a,0xbc,0xad,0x9f,0x3f,0x69, + 0x2b,0x51,0xd2,0x9b,0x5a,0x59,0xca,0xe9,0x71,0x81, + 0x30,0x55,0x25,0x14,0xe4,0x28,0xa9,0xa7,0x51,0x79, + 0xe7,0x41,0x35,0x3d,0x93,0x29,0xd1,0xa7,0x35,0xb1, + 0xd0,0xcc,0x38,0x4e,0xd6,0x3e,0xb4,0x27,0x0f,0x11, + 0x33,0x37,0xa2,0x87,0xb4,0x9f,0x88,0xdf,0x41,0x95, + 0xed,0xa0,0xef,0x74,0xa0,0x95,0x41,0xfb,0xe8,0x28, + 0xda,0x0c,0xcf,0xd9,0x49,0x76,0xd8,0x75,0xb4,0x59, + 0x2f,0xd4,0xda,0x95,0xef,0x18,0xdb,0x2f,0x13,0x7a, + 0x1c,0xd4,0xb2,0x23,0x8a,0xee,0xf6,0x14,0x99,0xb0, + 0xa6,0x03,0x94,0x04,0x41,0x37,0x53,0x5e,0xe9,0xf9, + 0x6f,0xf8,0x31,0xd3,0x94,0x1b,0xc5,0xd0,0x69,0x48, + 0xc0,0x3c,0xc3,0x33,0xfd,0xde,0xa6,0x35,0xa3,0xa8, + 0xb8,0xb6,0xb1,0xdc,0x50,0xca,0xa4,0x41,0x36,0x25, + 0x0f,0x94,0xa0,0xc0,0x1e,0xb3,0xa6,0xa5,0x29,0x3e, + 0x51,0xc2,0xe4,0xd6,0x47,0x1a,0x9a,0xda,0x70,0x90, + 0x26,0xfe,0xad,0x6b,0x05,0xbf,0x54,0x0c,0x6a,0x7a, + 0x58,0x9b,0xcc,0xce,0xc1,0x85,0x6e,0x6c,0x3c,0x6d, + 0xee,0x24,0x9d,0xbd,0xcd,0x26,0x69,0xa3,0xa7,0x0d, + 0x44,0x1b,0x9c,0x12,0xa1,0x61,0xba,0xc2,0x6e,0xce, + 0xc9,0x8a,0x62,0x22,0x5f,0xa7,0x43,0x20,0xe9,0xa6, + 0x68,0x85,0x95,0x88,0xc6,0x53,0x4b,0xa6,0xf7,0xf5, + 0x09,0x4a,0x25,0x19,0x84,0xa9,0x2f,0xee,0x90,0x96, + 0xae,0x3e,0x9b,0x0e,0xde,0x7e,0x50,0x6f,0x44,0x3d, + 0x03,0x04,0x4e,0x2d,0x80,0xe3,0x36,0x32,0x25,0x07, + 0x7a,0xc0,0x91,0x67,0x9b,0x43,0x25,0x52,0x90,0xb9, + 0x02,0xd1,0xf8,0x7e,0xc7,0x4e,0xdb,0xcb,0x24,0x6e, + 0x67,0x52,0x97,0x36,0x3c,0x96,0x37,0x3b,0x02,0x87, + 0xe2,0xa6,0x24,0x4e,0xab,0x32,0x77,0x40,0x6f,0xda, + 0xcc,0x9a,0x2c,0x28,0xea,0xb3,0x68,0xbb,0x8f,0xc2, + 0x94,0x4e,0x07,0x2a,0xa1,0x34,0x50,0x14,0x1d,0x57, + 0x08,0x91,0x26,0x51,0x6a,0xcb,0x74,0x25,0xe6,0x25, + 0x2a,0x8c,0xfa,0x49,0xa0,0xe9,0x32,0x26,0x0d,0x1a, + 0x03,0xd2,0xa4,0x2a,0xb5,0x35,0xa8,0x75,0xb2,0x89, + 0xa9,0x93,0x01,0xad,0x56,0xfb,0x09,0xd1,0x20,0xb1, + 0x56,0xd7,0xf2,0xdc,0x20,0x3f,0x9b,0x73,0xcb,0x28, + 0xd3,0x63,0x91,0xe7,0x12,0xc6,0x8d,0x6f,0x56,0x48, + 0x16,0x4e,0x1a,0xc2,0x20,0x6a,0xc3,0x94,0xb0,0x90, + 0x91,0x6b,0x88,0x4f,0x0f,0xa0,0x44,0x5b,0x5e,0xe9, + 0xb9,0x50,0xc7,0x87,0xd0,0x6d,0x8a,0x1b,0x2f,0xd7, + 0x1e,0x49,0x5c,0x0b,0xb3,0xa8,0xce,0x04,0x1d,0x4f, + 0x49,0x13,0x91,0x7b,0x93,0x17,0xd6,0x86,0x69,0x9e, + 0xfa,0x82,0x34,0xc6,0x9a,0x16,0x91,0x8e,0x24,0xa7, + 0xea,0x58,0xdb,0x79,0xee,0x85,0x90,0xd8,0x9b,0x5b, + 0x7c,0x7d,0xc4,0x7b,0xab,0xd0,0x4a,0xbc,0x01,0x5a, + 0xc0,0x6e,0xf2,0xc6,0x8d,0x50,0x52,0xb2,0xe0,0x0e, + 0x17,0x0a,0xf6,0x49,0x86,0x20,0xf5,0xcb,0x5d,0x42, + 0x42,0xe3,0xf9,0xe6,0x80,0x3e,0x93,0xf5,0x82,0x56, + 0x51,0x89,0x78,0x6b,0x38,0x64,0x0f,0xdb,0x84,0x6f, + 0x94,0x2c,0x69,0xca,0x1c,0x17,0xe8,0x52,0xc5,0xe5, + 0xee,0x7d,0xe2,0x71,0xa4,0x77,0x4e,0x8e,0xef,0x74, + 0x50,0xb5,0xb5,0xe1,0x6c,0x5a,0xc6,0xc0,0x43,0x87, + 0xec,0x34,0x09,0x47,0x13,0x6b,0xc9,0xda,0x24,0xe5, + 0x05,0x84,0x08,0x68,0x8b,0x88,0x82,0x79,0xe2,0xdf, + 0xd1,0x84,0x53,0x4a,0xca,0xb4,0x65,0x3b,0xb5,0xdc, + 0xcc,0xf7,0x93,0x18,0xe4,0xd9,0x56,0xfe,0x21,0xe9, + 0x19,0x5b,0x46,0xba,0xcf,0x9c,0x2d,0x87,0x14,0x2f, + 0x67,0x83,0xdc,0x26,0xe5,0x6b,0xc7,0x4d,0x75,0xc9, + 0x8f,0x69,0xe9,0x5a,0x34,0x36,0xbd,0xcf,0x8d,0xdf, + 0x5a,0x1a,0x42,0x71,0x43,0x25,0xe9,0x20,0x5f,0xb6, + 0x5d,0x11,0x01,0xa3,0x35,0xae,0xf1,0xc9,0x15,0xf9, + 0x13,0xbf,0x4a,0xa5,0x09,0x16,0x85,0xfb,0x49,0xad, + 0xbb,0xc5,0x50,0xcb,0xa1,0x9f,0xdd,0xbc,0x17,0x2a, + 0xa2,0x5e,0x74,0xd8,0x4c,0x46,0x77,0x9b,0xbe,0x38, + 0xc1,0xf2,0xd3,0x18,0xdc,0x34,0xbe,0x9d,0x46,0x4d, + 0xa9,0x0d,0x65,0xa6,0x61,0x1e,0xfd,0xea,0x6d,0x15, + 0xe6,0x5e,0x1c,0xf8,0xac,0xd8,0xbe,0xbb,0xbe,0x40, + 0x27,0x84,0x98,0x0e,0xe6,0xc4,0x03,0x48,0xaa,0xaa, + 0x9b,0x76,0xcb,0x06,0x4d,0x0b,0xb6,0x23,0xe3,0xf3, + 0x4a,0x09,0xdb,0x04,0x15,0x5f,0x46,0x0d,0x37,0xad, + 0xb1,0xa9,0xca,0x51,0x2e,0x81,0x79,0x5e,0x56,0x97, + 0xc5,0x25,0x34,0x29,0x80,0xf7,0xa9,0x9e,0xd4,0x6e, + 0x85,0x04,0xec,0x6c,0x92,0xf3,0x90,0xa4,0x9d,0x84, + 0x70,0x48,0x80,0x39,0xdb,0x77,0xd7,0xd6,0xed,0x0f, + 0x81,0x39,0xe8,0xea,0x44,0xd4,0x34,0x21,0xbe,0xb0, + 0xa7,0xfb,0x84,0x59,0x4c,0xa8,0x26,0x2e,0xd7,0x70, + 0x98,0x1f,0xd2,0x93,0xd2,0x04,0xc7,0x25,0xb1,0xca, + 0x85,0x21,0xeb,0x8e,0x0d,0xc9,0xbf,0x27,0xab,0x9b, + 0x56,0x68,0xf2,0x3f,0xa2,0xfd,0xec,0x2a,0xbb,0x81, + 0x77,0x71,0xb6,0xb1,0xd2,0x69,0x3f,0xb9,0x6b,0xd2, + 0xf5,0xee,0x0a,0x97,0xfb,0x0f,0xd2,0x44,0x6c,0xdb, + 0xc7,0x27,0xec,0xfb,0x91,0x93,0x93,0xb4,0x90,0x02, + 0x4a,0x7e,0x20,0x51,0x8f,0x08,0xfb,0x80,0x94,0xdb, + 0x64,0x80,0xda,0xc7,0x7f,0x13,0x8b,0xd3,0xf7,0xa6, + 0x42,0x70,0x43,0x52,0x4e,0xe8,0x6e,0x12,0x00,0x76, + 0xe7,0x4c,0x2a,0x38,0x68,0xcd,0x21,0x1f,0x2a,0xd9, + 0x59,0x24,0x7e,0xcf,0x46,0x2d,0x12,0x02,0x17,0xf2, + 0x27,0xc8,0x59,0x5c,0xaf,0x2b,0x8d,0x86,0x52,0x35, + 0x0a,0xc6,0x74,0x36,0xf1,0xa0,0x80,0x96,0x5a,0x56, + 0x29,0xb0,0x4c,0x5e,0x54,0x09,0xad,0x49,0x55,0x38, + 0x65,0xda,0x2e,0x90,0x6f,0x08,0xba,0x53,0x12,0x94, + 0x08,0xb0,0x9b,0x29,0x81,0x09,0x8d,0xd0,0x56,0xcb, + 0x66,0x33,0x87,0x35,0x7a,0xee,0xb6,0x8a,0xb6,0xa0, + 0x02,0xd1,0x1e,0x0f,0xbb,0x49,0x26,0x40,0x7f,0x57, + 0x47,0xe1,0x87,0x9b,0x39,0xd3,0x33,0xa5,0x64,0x5f, + 0xc7,0xda,0x35,0x98,0x38,0xae,0x51,0x4a,0x3e,0x27, + 0xf8,0x5a,0xdb,0x0c,0xc2,0x65,0xf9,0x58,0xab,0x87, + 0x0e,0x12,0xd3,0x46,0x3c,0xca,0xef,0xd9,0xec,0x2d, + 0xf3,0x0c,0x57,0xb2,0xfd,0x7d,0xcf,0xd0,0xbe,0xef, + 0xed,0x43,0x50,0x72,0x3e,0x0b,0x0b,0x1e,0xa7,0x6c, + 0x7b,0xa8,0x55,0x1a,0x9e,0x15,0xa1,0x7d,0xe7,0x13, + 0x74,0x60,0xe2,0x8d,0x39,0x43,0xec,0x45,0xfb,0x3a, + 0x26,0xa6,0x13,0x0f,0x2c,0x1d,0x80,0x4e,0xee,0xa2, + 0x17,0x31,0x5a,0x00,0xf6,0x36,0x0b,0x39,0xca,0x27, + 0x6b,0x97,0xd4,0x12,0xa7,0x64,0x36,0x25,0xd0,0x2e, + 0x21,0x4a,0xcf,0x0d,0x62,0x8b,0x2d,0x86,0x53,0x31, + 0x92,0x78,0x34,0xd4,0x72,0xa3,0xbd,0x99,0x3e,0x73, + 0x2b,0x6b,0xa0,0x88,0x2a,0x8c,0xf4,0x3f,0xee,0x79, + 0x2a,0xa2,0xa7,0xf3,0x82,0xdc,0xe0,0xad,0xdb,0x38, + 0xf1,0x4c,0x92,0x17,0xc7,0x04,0xeb,0xd1,0xc5,0x6d, + 0xdc,0x90,0xb5,0x8f,0x3d,0x04,0x89,0x63,0xf8,0x4e, + 0x27,0x91,0x8c,0xb5,0xc7,0x3d,0x41,0xa4,0x13,0x37, + 0xa7,0x57,0x2e,0x6e,0xe3,0x26,0x35,0xd6,0x69,0x41, + 0x4d,0x7d,0xf1,0x49,0xaf,0x24,0xe8,0x36,0x4c,0xfc, + 0x87,0x2b,0xf0,0x1f,0x0e,0xf1,0x21,0xa8,0x3a,0xa2, + 0x00,0x90,0xb4,0x2c,0x88,0x83,0x91,0x02,0x34,0x25, + 0xb1,0xe4,0xdb,0xe5,0x0e,0x9c,0x34,0xa6,0x0e,0xef, + 0xe8,0x84,0x35,0x7f,0x02,0x1c,0x1c,0xf9,0x3e,0x6e, + 0x6c,0xbc,0x73,0x6c,0x7a,0x8b,0x76,0x0a,0xe8,0xca, + 0xa7,0x71,0xbc,0x85,0xd4,0xbe,0x92,0xfb,0xb9,0x3f, + 0xe7,0x27,0x79,0xd1,0xcf,0x05,0x4e,0xcc,0x11,0x51, + 0xc5,0x47,0x32,0x42,0x63,0xc9,0x64,0x54,0xd9,0xae, + 0x01,0x51,0x64,0x7a,0x87,0xc0,0xc3,0x38,0x54,0xa8, + 0xd1,0x24,0x13,0x09,0x68,0x6e,0x49,0x9f,0xc4,0x47, + 0xd4,0xb6,0x5c,0xa2,0x22,0x24,0xb4,0xdd,0xb5,0xd7, + 0x54,0x81,0x39,0xc5,0xf4,0x20,0x92,0x79,0x08,0x99, + 0x77,0x07,0x36,0x21,0xd7,0xf7,0x7f,0xff,0xfa,0xf5, + 0x0b,0x15,0xcd,0x93,0x67,0x94,0x22,0x73,0xc9,0x0e, + 0x28,0xf9,0x12,0x92,0x60,0x6b,0x9a,0x1a,0xfb,0x44, + 0xb1,0x5b,0x9f,0xdd,0x64,0xbd,0xe1,0x12,0x27,0xea, + 0xc6,0xb8,0x16,0xfe,0x06,0x39,0x9d,0x44,0x5b,0x13, + 0xaa,0xe7,0xf6,0xa3,0x03,0x1c,0x15,0xf1,0xde,0x72, + 0x91,0x37,0xf4,0x1b,0x5a,0xe7,0xbf,0xfb,0xe8,0xaa, + 0xe3,0xf8,0xb8,0x17,0xee,0x64,0xcf,0x27,0xa3,0x4b, + 0x32,0x26,0xfb,0x64,0xaa,0x65,0xb3,0x99,0xdb,0x83, + 0xad,0xcd,0x22,0xd1,0x4c,0xb9,0x7b,0x35,0xf5,0x83, + 0xeb,0xfe,0xbc,0x0d,0x72,0xa2,0x02,0x65,0xce,0x3a, + 0x22,0x25,0x3c,0xfd,0x3a,0x68,0x22,0x69,0xd2,0x41, + 0xa0,0x9e,0x6a,0x7f,0x57,0x7d,0x62,0xec,0xfb,0xbf, + 0xdf,0xee,0x3d,0x1c,0x2e,0x3f,0xd7,0xa6,0xcf,0x8d, + 0xb8,0x5b,0x29,0xd1,0xda,0x4c,0x74,0x49,0x10,0xaa, + 0x8d,0xb6,0xd1,0xf7,0x81,0x5b,0x93,0x34,0x3c,0x5d, + 0x7f,0xff,0x0c,0x7a,0xd6,0x9f,0x68,0x15,0xe9,0x73, + 0xef,0xff,0x9e,0xda,0x53,0xee,0x3a,0x80,0xd3,0x52, + 0xf4,0xfd,0xdd,0x93,0xcd,0xe9,0xb6,0xc0,0xf3,0xb4, + 0xcf,0x44,0xd7,0x0d,0x7d,0x46,0x20,0x3f,0x9f,0x09, + 0x89,0x5c,0xf0,0x4c,0x56,0xae,0xdf,0x2e,0x91,0x73, + 0xdf,0xdd,0xde,0xc3,0x09,0x88,0x4f,0x7f,0x17,0xd3, + 0xf7,0x8e,0x13,0xa8,0x40,0xd0,0x7d,0x43,0x6b,0xdd, + 0x04,0xa1,0xfb,0x9d,0x4d,0x01,0xd2,0x12,0xe2,0x03, + 0xbc,0x9a,0x93,0xde,0x9b,0x13,0xa0,0x9b,0x46,0x93, + 0x43,0x5b,0xee,0xc0,0x5e,0xb3,0xc5,0x0d,0xb5,0x22, + 0x69,0xe0,0x66,0x52,0xf3,0x77,0xad,0xc8,0x0d,0xd7, + 0x34,0xd9,0xc9,0xa4,0x9f,0x31,0x71,0xed,0x67,0x90, + 0xa0,0x3b,0x0a,0x38,0xa2,0x7c,0xe2,0xc6,0x24,0x44, + 0x7a,0x52,0xfc,0x9f,0x3c,0xe0,0xd2,0x19,0x30,0xb5, + 0x9e,0xf4,0x1f,0x12,0x2d,0xde,0x50,0x6d,0xfa,0x3e, + 0xe8,0x83,0x13,0x9b,0xf6,0xf7,0x50,0xa0,0x5f,0x2f, + 0xda,0xec,0xae,0x65,0xa4,0x90,0xe2,0x46,0x55,0x32, + 0xd9,0xdd,0x53,0x45,0xbb,0x31,0x2a,0x4d,0xfc,0x14, + 0x35,0xd6,0x4b,0x2f,0x72,0x62,0x9a,0x03,0xaf,0xe2, + 0x0d,0x3d,0x72,0x0b,0xff,0x7e,0x51,0xbf,0x7e,0xfd, + 0xfa,0xab,0x00,0xee,0x32,0x6a,0x10,0xb0,0x3b,0xd3, + 0x46,0x25,0x09,0x76,0x4a,0x42,0x37,0x90,0x27,0x58, + 0x82,0x60,0xb2,0x37,0x04,0xc3,0xb1,0xed,0xe9,0xde, + 0x1d,0x05,0xbf,0x34,0x22,0xaa,0x68,0xc8,0x04,0xd7, + 0x0e,0xed,0x4c,0x92,0xe1,0x3f,0x61,0xcd,0x9e,0xa4, + 0x9f,0x34,0x68,0x90,0xac,0x47,0xb1,0xc3,0x1e,0x39, + 0x44,0xec,0x0d,0x7c,0x99,0xe3,0x84,0xc9,0xa8,0x00, + 0x48,0x13,0x8f,0xee,0x7d,0x11,0x97,0x23,0x55,0x82, + 0x4e,0x7f,0x46,0xde,0x97,0xe5,0x34,0x39,0xcb,0x1d, + 0xe5,0xb4,0x0c,0x24,0xd3,0xa3,0x70,0xbd,0x43,0x07, + 0x29,0xa9,0x27,0x54,0x36,0xa9,0xc7,0x07,0xd1,0xd0, + 0x38,0x3a,0xbe,0x89,0xbd,0xa9,0xcd,0xde,0x2b,0xf2, + 0x89,0xbf,0xd1,0xf7,0xc3,0xe4,0x2a,0xb0,0x41,0xa3, + 0xd2,0xbe,0xbe,0xbc,0x18,0xa8,0x23,0x31,0xbb,0x49, + 0xa6,0x33,0xa1,0x0a,0x5b,0xe1,0xcd,0xcd,0x3d,0x90, + 0xce,0x95,0x6b,0x21,0xd2,0x7a,0xde,0x48,0x4c,0xb8, + 0xa4,0x2e,0x15,0xcc,0x4e,0x1c,0x70,0x43,0x42,0x56, + 0x4a,0x8b,0xa1,0x13,0x9c,0x8d,0x4f,0xd7,0xd4,0x0e, + 0xd7,0xa4,0x87,0x5a,0x96,0x1b,0xf9,0x0e,0xa7,0x88, + 0xfd,0x13,0x0f,0x1c,0x3f,0x60,0x1a,0x2f,0x26,0x84, + 0x66,0xc3,0x7f,0x81,0x83,0x27,0x8e,0x65,0x4f,0x07, + 0xf1,0x06,0x65,0xf8,0x24,0x53,0x4c,0x0f,0x96,0x92, + 0x08,0xe7,0xf3,0xa3,0x6b,0x47,0x7f,0x2f,0x29,0xa7, + 0x92,0x87,0xc9,0x20,0x3f,0x6f,0xa1,0x45,0xc7,0x0b, + 0xe9,0xef,0xd3,0x8d,0xb2,0x4f,0x63,0xda,0x0e,0x15, + 0xfc,0xa0,0xca,0x38,0x89,0xc3,0x90,0xf8,0x04,0x21, + 0xab,0x3f,0xe0,0xf3,0x76,0x3e,0xa8,0x82,0xa8,0xb2, + 0xc7,0xb5,0x48,0x90,0x7e,0x37,0x1f,0xdd,0x1c,0xee, + 0xda,0x0e,0xdc,0x48,0x21,0x40,0x72,0x70,0x5c,0x92, + 0x60,0xaa,0xad,0x43,0x3a,0x52,0xfa,0xdf,0xd2,0x9a, + 0x8a,0x89,0xce,0xa4,0x9c,0x4d,0x1c,0x30,0x8a,0x19, + 0x89,0xd0,0x0e,0x9f,0x6b,0x13,0x9f,0x41,0x1f,0xea, + 0x90,0x80,0xa0,0x33,0xab,0x5d,0x24,0x98,0x18,0x97, + 0x2e,0x43,0xca,0x6d,0x55,0xff,0xd9,0x72,0x2a,0x7a, + 0x5b,0x8c,0xc4,0x2b,0xdd,0x35,0x28,0x07,0xca,0xb5, + 0xe6,0x53,0x61,0xab,0xdc,0x0b,0xaa,0xda,0x1d,0x69, + 0x3b,0x1d,0xec,0xee,0x3d,0x6b,0x67,0x41,0x0b,0xf4, + 0xd4,0xc2,0x22,0x44,0xc8,0xc5,0xc4,0x09,0xf9,0xd9, + 0x4c,0x93,0xb5,0xb6,0x9a,0x13,0x0c,0x3d,0xd3,0x3a, + 0x27,0xd7,0x83,0x74,0x8d,0xae,0x1d,0x3b,0x90,0x99, + 0xe3,0xfa,0x9a,0x38,0x3c,0x34,0xec,0x93,0x5a,0x4c, + 0x5b,0xc1,0x48,0xba,0x16,0xa5,0x61,0x68,0xb1,0x34, + 0x4d,0x5e,0x0f,0x6d,0xea,0xeb,0xb7,0x2e,0xb4,0x29, + 0x03,0xdd,0x78,0x23,0x25,0x82,0x57,0x6f,0x4f,0xd1, + 0x41,0x92,0x0e,0x1b,0x42,0x5a,0x36,0x0a,0xca,0x54, + 0x91,0x91,0x9e,0x89,0x6b,0xe1,0x6d,0x60,0xc6,0x85, + 0x88,0xe3,0x4f,0x3b,0x23,0xc1,0x9d,0x53,0xcb,0x6c, + 0x73,0x9f,0xed,0x33,0xdf,0x5a,0x24,0x49,0xf5,0xf7, + 0x6e,0x7b,0xdc,0xcf,0x06,0x74,0x23,0xde,0xee,0xe1, + 0xfe,0xd7,0xaf,0xaf,0xaf,0x72,0x6d,0x97,0xd4,0xee, + 0x4a,0x06,0xbb,0xc4,0x05,0x3b,0xe7,0x54,0x42,0x7b, + 0xdc,0x61,0x6e,0x38,0x18,0x95,0x92,0x09,0xad,0x26, + 0x7b,0x5b,0xb5,0xb7,0x02,0x7a,0x9b,0x28,0xe9,0x69, + 0xd1,0x77,0xab,0x10,0xa1,0x0b,0x7e,0xc2,0x65,0x29, + 0xf7,0x2c,0x45,0x46,0xa1,0x26,0xee,0x54,0x6f,0xfb, + 0xd1,0x7e,0x33,0x09,0xf2,0x9d,0x04,0xd5,0x86,0x9f, + 0x95,0xda,0xb7,0x13,0x02,0xe9,0xda,0x74,0x01,0x2d, + 0x38,0x13,0x94,0x4e,0xef,0x82,0x86,0x3f,0xb4,0x15, + 0x33,0x89,0x31,0xaa,0xae,0x8e,0x4b,0x8e,0xa8,0x8d, + 0xaa,0x6d,0x35,0xc7,0x7d,0xa4,0xd6,0xdd,0x56,0x25, + 0x3b,0x15,0x80,0xc0,0xa7,0x19,0xa1,0x9b,0x49,0xb5, + 0x1b,0xd0,0x69,0xcc,0xd6,0x28,0x09,0x9a,0x62,0xc2, + 0xe4,0x4f,0xb7,0xfd,0x27,0x14,0x73,0x87,0x34,0x85, + 0x52,0x1c,0xeb,0x3f,0x47,0x5e,0x93,0x81,0x17,0x15, + 0x25,0x47,0x36,0x85,0xc1,0x14,0x63,0x09,0x35,0x4f, + 0x09,0x95,0xbe,0x13,0xe0,0x50,0x8d,0xd7,0x9c,0x9c, + 0x1d,0xa8,0x05,0xbc,0x98,0xd6,0x3b,0x03,0x2d,0xe2, + 0xed,0xda,0x7e,0xa7,0x8a,0x72,0xd3,0x6b,0xec,0x87, + 0xc3,0xf4,0x42,0x29,0xab,0x4e,0x01,0x48,0xdb,0x2a, + 0xda,0xff,0x23,0x34,0x66,0xa3,0x02,0xda,0x7a,0xb1, + 0xe5,0x60,0xf8,0xbe,0x60,0xd3,0xfd,0x6c,0xd0,0x8f, + 0x24,0xf4,0xd6,0x36,0x58,0x19,0x38,0xb1,0xb6,0xd3, + 0x50,0x94,0x18,0xa6,0x64,0x8c,0x12,0x37,0x83,0x6c, + 0x15,0x25,0x9b,0x53,0x12,0x98,0x78,0x5e,0xe9,0xf0, + 0x6b,0xe8,0xe0,0x23,0xf1,0x70,0xfe,0x53,0x53,0xef, + 0x7b,0x39,0x3e,0xfe,0x93,0xe8,0x90,0x44,0x02,0x8d, + 0x6d,0x43,0x15,0x5e,0xf0,0xae,0x7e,0x92,0x38,0x38, + 0x94,0x2b,0xac,0xa9,0x07,0xb7,0xc9,0xbc,0xf7,0xf3, + 0xf5,0xf5,0x55,0x93,0xdb,0xf3,0x37,0x82,0x50,0xb4, + 0x4f,0x7b,0x02,0x6c,0xae,0xe1,0xfa,0xf7,0xdc,0xca, + 0x23,0xac,0xee,0x30,0x73,0xa8,0xf3,0x76,0x2d,0x39, + 0xcd,0xac,0x69,0xea,0xd2,0x91,0xcb,0xd3,0xb4,0xa7, + 0xe3,0xfc,0x04,0xa4,0xf9,0x0c,0x08,0xfa,0x49,0xb1, + 0x8e,0x38,0x7b,0xa4,0x71,0xa5,0x9f,0x99,0x06,0x17, + 0x5a,0x1c,0x38,0x50,0xe4,0x8e,0x44,0xdb,0x54,0xe4, + 0x6a,0x22,0x39,0xf9,0x48,0x4d,0xce,0x02,0xce,0xbe, + 0xc6,0xbd,0x0b,0xc7,0xe1,0x49,0x7c,0x42,0x45,0x30, + 0x6f,0x54,0xcf,0x8c,0x7c,0x1f,0xc7,0x5f,0x49,0x67, + 0xe3,0xc6,0x4e,0x6a,0x4a,0xce,0x36,0x67,0xee,0xfd, + 0x3e,0x95,0x87,0x47,0x7b,0xc0,0x7d,0x66,0xff,0x7d, + 0x42,0x6a,0x53,0xe1,0x91,0xd6,0xc2,0x06,0x10,0x70, + 0xc2,0xb1,0x53,0xd2,0xf2,0xc9,0xfd,0x6d,0xcf,0x97, + 0xeb,0xba,0xce,0x2b,0x7c,0x79,0xf4,0x4e,0x72,0xcc, + 0xfa,0x29,0x10,0x25,0xbd,0x02,0xea,0x5d,0x6f,0x10, + 0x17,0x15,0xd9,0xfa,0x9e,0x12,0x70,0xe3,0xae,0x67, + 0xa9,0x18,0x7d,0xa8,0xaf,0x6e,0x31,0xe6,0x21,0xc1, + 0x98,0x4c,0x2e,0x5d,0x65,0x1b,0x50,0xa9,0x93,0xae, + 0x2b,0x59,0x6c,0x6c,0x55,0xb1,0x89,0x6f,0xb1,0xa9, + 0x3a,0xf4,0x33,0xd5,0x62,0x20,0xf1,0x4e,0xfa,0xe4, + 0x8c,0x0b,0x68,0xda,0x07,0x76,0x5e,0x4c,0x40,0xb4, + 0x3f,0x13,0x07,0x89,0xbe,0xcf,0x71,0xe0,0xa8,0x2a, + 0xd3,0x16,0x9c,0x13,0x19,0xa4,0x77,0x69,0xae,0xe9, + 0x10,0x84,0x7c,0xbb,0xba,0xd3,0xf8,0xf5,0xa0,0xf8, + 0x6d,0xe5,0xfd,0x2f,0x33,0x52,0x9a,0x7c,0xea,0x4c, + 0x22,0x71,0x7a,0x2b,0xc9,0x4d,0xda,0xb8,0x75,0xe5, + 0x0e,0x00,0x35,0x2c,0xd6,0x16,0x52,0x9f,0x30,0x4b, + 0x05,0x50,0x58,0xa3,0x67,0xe2,0x82,0xb4,0xb5,0x7b, + 0x16,0x36,0x3b,0x27,0x0d,0x22,0x5c,0x86,0x2b,0x46, + 0x8a,0xc3,0xc4,0x19,0x9b,0xf8,0x3c,0x9f,0x88,0x4d, + 0xa6,0xb6,0xce,0x82,0x9b,0x79,0xc8,0x10,0xd7,0xb4, + 0xf0,0x71,0x92,0x6a,0xd3,0xce,0x77,0x82,0x86,0xa4, + 0x3c,0x3d,0xc5,0xe6,0xe1,0xfd,0xa0,0x8d,0x44,0x12, + 0x43,0xdd,0x68,0x1f,0x5d,0xde,0xae,0x29,0x22,0x3b, + 0x29,0xc9,0xd0,0xe1,0x15,0xba,0x8f,0x34,0x68,0xb2, + 0x48,0x0c,0x46,0x6e,0x92,0x5b,0x2f,0x3a,0x9e,0xbf, + 0xa1,0x6e,0x4c,0x02,0xc0,0x93,0x3e,0x58,0xd2,0x96, + 0xda,0xd8,0x04,0xfd,0x4e,0x3e,0x20,0xd3,0xe1,0x38, + 0x65,0xbd,0x3d,0x93,0xa4,0xe9,0x2f,0xc7,0x23,0x49, + 0x7a,0x08,0xda,0x3e,0xe8,0x5a,0x3e,0x44,0xf8,0xa5, + 0x6c,0x99,0xa4,0xc6,0xe1,0xa5,0xbb,0xc9,0x27,0xb7, + 0x28,0xdf,0xda,0x0f,0x5b,0x77,0x66,0x42,0x95,0x92, + 0x86,0x4e,0xaf,0xec,0xae,0x36,0x31,0x46,0xfe,0x3a, + 0x3a,0x49,0xe4,0x82,0xe3,0x3d,0x25,0x62,0x5a,0x59, + 0x57,0xaa,0x12,0xdb,0x61,0x7c,0x5e,0xaf,0x57,0x99, + 0x00,0x5f,0xf2,0xac,0x8e,0x22,0x07,0xf7,0xdf,0x19, + 0xb4,0xec,0xd1,0xaa,0xb9,0xef,0x65,0x9a,0x36,0xd1, + 0x60,0x6d,0x38,0x46,0x65,0xda,0xaa,0x34,0x74,0xf5, + 0x86,0xe8,0x38,0x84,0x2d,0x41,0xe2,0xa9,0x98,0x08, + 0xda,0x2e,0xa5,0x07,0x4b,0xd7,0x8b,0x79,0xbd,0x5e, + 0x35,0xf4,0xc3,0x1f,0x08,0x5a,0x58,0x83,0x3f,0x40, + 0x06,0x05,0x45,0x17,0x80,0x0d,0xea,0xaa,0x84,0xd4, + 0x4a,0x30,0x3b,0xc9,0x69,0x50,0x8d,0xe1,0xb8,0x26, + 0xc9,0x4b,0xce,0x09,0xfd,0x11,0x4a,0x20,0xf1,0x07, + 0x27,0x9d,0x9c,0xa9,0x2c,0x21,0x60,0x09,0x45,0xd6, + 0x83,0xcf,0x8d,0x40,0x43,0xf2,0x79,0x26,0x0e,0x58, + 0xba,0xcf,0x85,0x73,0xfb,0x49,0x7e,0x87,0xc2,0x2b, + 0x1c,0x93,0x49,0xb7,0xd6,0x5d,0x81,0x42,0x89,0xda, + 0x76,0x40,0x25,0x75,0x16,0x08,0xc1,0x4b,0x03,0x33, + 0x49,0xac,0xd7,0xb5,0x2a,0x13,0x0a,0xb5,0x79,0x1e, + 0x44,0x31,0x99,0x84,0x19,0x17,0x93,0x62,0xae,0x10, + 0x3b,0xb4,0x36,0x09,0xdd,0x73,0x7b,0x33,0xdd,0xeb, + 0x06,0xf9,0x4a,0x80,0x48,0x68,0xd1,0x9e,0x44,0x5b, + 0x98,0x5a,0x60,0x8f,0x29,0xb0,0x94,0xd1,0x26,0xa8, + 0x77,0x48,0x84,0x26,0x58,0x38,0xea,0x15,0x24,0xc5, + 0xcb,0xf4,0x80,0x93,0xe8,0xa1,0xdb,0x54,0x1b,0xdb, + 0x83,0x64,0xd7,0x31,0xa9,0x50,0x5e,0x46,0x74,0xac, + 0x93,0x03,0xb7,0x86,0x7e,0x09,0x19,0x23,0x94,0xcd, + 0x1d,0x10,0xa9,0x22,0x33,0x9c,0x13,0x24,0x78,0xeb, + 0xd8,0x6c,0x32,0xd6,0x94,0xca,0x70,0x34,0x4e,0x4c, + 0xc1,0xb7,0xbf,0xf7,0x0f,0x04,0x07,0x4f,0xaa,0x9c, + 0x5d,0x8b,0x81,0x26,0xbf,0xe0,0x40,0x4c,0xea,0xc2, + 0x49,0x8d,0xf9,0x0c,0x5c,0x8d,0x33,0x20,0x8a,0x67, + 0x41,0x6a,0x7c,0xa8,0x26,0x0f,0xcf,0x75,0x54,0x84, + 0x4e,0x62,0x71,0x66,0xef,0xbd,0x69,0xfa,0xb4,0x31, + 0xb4,0xd3,0x34,0x87,0xba,0xa2,0x74,0x54,0xa5,0xd6, + 0x67,0xe9,0x08,0xad,0x20,0x10,0x7a,0x3e,0xe0,0x84, + 0x9c,0xc5,0xd4,0x56,0x7c,0x37,0x77,0x02,0x9a,0x5a, + 0x01,0x74,0x40,0xdc,0x6a,0xe3,0x60,0xca,0x6b,0x8d, + 0x57,0x93,0x46,0x8f,0x33,0x56,0x0d,0x13,0x55,0x34, + 0xc9,0x77,0x1c,0x72,0x17,0x9e,0xf7,0x68,0x29,0x41, + 0xd2,0x1d,0x1d,0x79,0xd3,0xb6,0xc9,0x46,0x42,0x63, + 0x9a,0x90,0x74,0xad,0xc5,0x56,0x30,0x20,0x6a,0xd4, + 0x0a,0x9f,0x93,0x3a,0x23,0x7f,0xd3,0xca,0x21,0x44, + 0xc7,0xb5,0x9d,0x5d,0x5c,0x76,0xb1,0x6e,0x4a,0x34, + 0x1c,0x0a,0x4f,0x09,0x3c,0x09,0x0e,0xd3,0xf7,0x6e, + 0x68,0x09,0x1b,0x8f,0x33,0x1a,0xb0,0x98,0x78,0xc3, + 0xc4,0xdf,0x7a,0x3b,0xd3,0xc3,0x78,0x35,0x8a,0x78, + 0x4d,0xed,0x13,0xfa,0x99,0xe1,0xef,0x4f,0x22,0x52, + 0xb9,0xa4,0x85,0x38,0x3b,0x69,0x23,0xb8,0xde,0x7a, + 0x6a,0xbf,0x6d,0x1c,0x94,0x29,0x6b,0xa5,0x83,0x3d, + 0x2c,0x8e,0x48,0xa2,0x4c,0xad,0xbc,0x4f,0x54,0x3d, + 0x37,0xd3,0x49,0xdb,0xde,0xec,0x46,0x73,0x83,0x94, + 0x4a,0xaf,0x20,0x19,0x4f,0x9e,0x37,0x2a,0x56,0x06, + 0x09,0xf1,0x49,0x15,0x87,0x6b,0xbb,0x99,0xcd,0xf6, + 0xc9,0x61,0x19,0x83,0x7e,0xea,0xf1,0xbb,0xa4,0xad, + 0x9b,0xcc,0xd2,0xfb,0x54,0x2f,0xaf,0xb4,0xde,0xf4, + 0xe7,0x16,0xad,0xdd,0xab,0x27,0x2c,0xee,0x80,0xfd, + 0x8f,0x18,0xcd,0x86,0xe7,0xf0,0xd1,0x44,0xe1,0xa4, + 0xd5,0xf2,0x9e,0x7f,0x1e,0x24,0x5d,0x9b,0xf5,0x10, + 0x4d,0x52,0xdd,0xb3,0x04,0xa1,0xb8,0x93,0x10,0xde, + 0xcd,0x81,0xa1,0x31,0xf8,0x02,0x5d,0x1c,0xad,0xca, + 0xd5,0xaf,0x31,0x19,0xfe,0x9a,0x43,0xfc,0xa4,0xbd, + 0x43,0x3e,0x72,0x53,0xdb,0xa3,0x4f,0xd1,0xb9,0xb8, + 0x44,0xf6,0x14,0x03,0xbd,0xe0,0x18,0x04,0xf0,0x4c, + 0xb1,0xcd,0x19,0xd1,0x26,0xb4,0x2f,0x09,0xd2,0xa6, + 0xc2,0x99,0x62,0xb1,0xb4,0xd4,0x8f,0x49,0x60,0x8f, + 0x69,0x29,0x5e,0x9b,0xfd,0x9b,0xae,0x21,0x9d,0x61, + 0xee,0x7d,0xdf,0xf7,0x76,0xc7,0x24,0x97,0x78,0x24, + 0x94,0x9d,0xb8,0x3e,0x93,0x63,0x3d,0xd9,0x1f,0x39, + 0xda,0xcd,0x7d,0x5e,0x10,0x6d,0x44,0xdf,0xdf,0x5b, + 0xd2,0x3b,0xb0,0xf5,0xb1,0x55,0x93,0x78,0x10,0x09, + 0x0d,0xd9,0x24,0x4d,0xce,0xbe,0x20,0x49,0xc3,0x53, + 0xc0,0xb8,0x3c,0xf1,0xf0,0x4c,0xf7,0xe8,0xc6,0x4b, + 0x89,0xab,0xa3,0x08,0x44,0xea,0xcb,0x4e,0xad,0x12, + 0x78,0x36,0xa8,0x5c,0x2c,0x0b,0xf2,0x50,0xbf,0xd3, + 0x21,0x4f,0x53,0xe5,0x02,0x70,0x30,0xea,0x6f,0xb8, + 0x40,0xbc,0x75,0x6f,0x9f,0x92,0x38,0xb5,0x30,0x48, + 0x1c,0x85,0xd4,0x5e,0xbc,0x03,0xb0,0x26,0xc0,0x74, + 0x9d,0x61,0xec,0xf9,0x4c,0x95,0x8d,0x4b,0xf0,0x93, + 0x70,0x5a,0x3f,0x48,0x8c,0x1a,0x35,0x6a,0xc0,0x90, + 0x36,0x8a,0x7b,0x8e,0x1d,0x91,0x48,0x09,0x87,0x23, + 0xb8,0xf6,0x83,0x26,0x1d,0x00,0xc9,0x52,0x87,0x0a, + 0x1c,0x67,0x5f,0x93,0x12,0x9e,0x14,0xd4,0x55,0x07, + 0x68,0xb2,0xdd,0xd1,0xbd,0xb6,0xd4,0x30,0x39,0xc9, + 0xae,0xe6,0xba,0x32,0x3f,0xb0,0x23,0x0d,0x9b,0x89, + 0xb3,0xb4,0x9f,0x09,0xb1,0x4a,0x05,0xe0,0x86,0x2c, + 0x9e,0xfc,0xd3,0xdc,0xfb,0xa5,0xc3,0x87,0x0a,0x48, + 0xc7,0x91,0xeb,0xfe,0x5d,0xe9,0x30,0x27,0x0b,0x8b, + 0xcd,0x77,0x4e,0x87,0xa3,0x8b,0xd9,0x86,0xd7,0x67, + 0x7d,0x0a,0x9d,0x56,0x9e,0x89,0xc9,0x87,0x06,0x28, + 0x52,0xa1,0xbe,0x28,0x06,0xc7,0x96,0x53,0x92,0x9d, + 0x70,0xae,0xec,0xee,0x79,0x92,0xbe,0x9f,0xf2,0x33, + 0x49,0x89,0xb9,0x6b,0x4b,0xa5,0xef,0x99,0x3a,0x52, + 0x80,0xfa,0x1e,0x02,0x4e,0x54,0xaf,0xe8,0x07,0x69, + 0xa5,0xa0,0xab,0x87,0x2f,0xb5,0x0c,0x28,0x0b,0x1c, + 0xc4,0xcc,0xd0,0x15,0x3c,0xb5,0xd7,0x86,0x76,0xc6, + 0x21,0xe4,0xc5,0x3d,0x54,0xd7,0xc3,0x86,0x05,0x6b, + 0x93,0x3c,0x9a,0x54,0x20,0x57,0x70,0xe7,0x54,0x9c, + 0xae,0x95,0x12,0xab,0x69,0x93,0xcb,0x7b,0x3c,0x6e, + 0x91,0x1a,0x4d,0x07,0xd7,0xd6,0x3c,0x24,0x78,0x98, + 0x5a,0x57,0x14,0x2c,0xdc,0x86,0xa6,0x2a,0x39,0xb5, + 0x85,0x5c,0x22,0xec,0xf4,0x42,0x48,0x34,0x8b,0x5c, + 0xd7,0x37,0x93,0x1b,0x29,0xd8,0x08,0x7f,0x28,0x56, + 0x9c,0x2e,0x80,0x10,0xe2,0xa5,0x07,0xdc,0x60,0xf5, + 0x71,0x1c,0xbf,0x03,0x0c,0x3c,0x47,0x02,0xbf,0x81, + 0x9c,0x4f,0x7f,0x37,0x8e,0x74,0xb8,0xf1,0xff,0xd9, + 0x0c,0x40,0x2c,0xe3,0x80,0x2b,0x16,0x8e,0x22,0x0d, + 0x14,0xf4,0x5d,0x4c,0xa1,0x75,0x44,0x31,0x80,0x8a, + 0xa7,0xa1,0x22,0x3f,0x53,0xfb,0xb1,0xef,0xa7,0xbe, + 0x4f,0x49,0x19,0xb8,0x57,0xc0,0x0e,0xfd,0x31,0x07, + 0xec,0x49,0xb4,0x85,0x94,0x30,0x92,0xf7,0x1c,0xf1, + 0xa2,0xdc,0xb3,0x9a,0xa6,0x85,0x4c,0xdc,0x72,0x9c, + 0x24,0xcb,0x6b,0x49,0xb2,0x26,0x29,0xc9,0x26,0x62, + 0xbc,0x19,0xca,0x38,0xb4,0x56,0xdd,0x94,0xa1,0xbb, + 0x9e,0x69,0xb8,0x68,0xdb,0x0e,0xd2,0xdf,0x57,0xe0, + 0xc0,0x29,0x3b,0x4f,0xd3,0x78,0xca,0xe7,0x73,0xd7, + 0x42,0x88,0xcb,0x06,0xf1,0xbd,0x3f,0xe7,0xcf,0x9f, + 0x3f,0x0f,0x34,0x8c,0x0a,0x26,0x25,0xbf,0x27,0xee, + 0x72,0x32,0xc9,0xd5,0x82,0xf3,0x95,0xdc,0x82,0xa7, + 0x7f,0x9f,0x58,0xfc,0xd4,0x8e,0x48,0xd5,0x0c,0x05, + 0xa6,0x49,0x9f,0x60,0x0b,0x03,0xea,0x41,0x38,0x91, + 0x01,0x93,0x26,0xc9,0x54,0xf9,0x38,0x38,0xdc,0x99, + 0x54,0x12,0x27,0x87,0xd0,0xa3,0x4d,0x05,0x4c,0x6d, + 0x2a,0x82,0x1f,0xcd,0xc2,0x5f,0x55,0x8b,0x8e,0x98, + 0xed,0x12,0x62,0x4a,0xa8,0xd3,0xa1,0x39,0xfd,0xfe, + 0x40,0x94,0x25,0x7f,0xb0,0xe3,0x20,0xde,0x14,0x2f, + 0xa1,0x52,0x3b,0x81,0x3c,0x7f,0x1c,0xf2,0xf9,0xfd, + 0x7c,0x4e,0x92,0x93,0x20,0x1e,0x0d,0x89,0x24,0x92, + 0xf9,0x25,0xad,0x17,0x41,0x6c,0x0e,0x25,0xff,0x69, + 0x7f,0x75,0x0e,0x4f,0x4a,0x5c,0x74,0x08,0xe1,0x56, + 0x45,0x9f,0x92,0xa4,0xad,0x75,0x8a,0xb4,0xac,0x2c, + 0x42,0x45,0x8a,0xf6,0x82,0xb6,0x20,0xba,0xe8,0x78, + 0x5e,0x54,0xe9,0x2b,0x2f,0x68,0x6a,0x19,0x4d,0x28, + 0x4e,0x57,0xa9,0x9e,0x50,0xe2,0x6d,0xb2,0x99,0x10, + 0x9f,0x94,0x9c,0x00,0x0f,0xea,0xb8,0xb8,0x0f,0x31, + 0xe2,0xc1,0xc3,0xe8,0x88,0x6c,0xfa,0x7d,0x2d,0x72, + 0x52,0x7c,0x14,0x51,0x42,0x9b,0xdc,0xf6,0xb6,0xd3, + 0x02,0x8d,0x47,0xb2,0x2d,0x4d,0x45,0x27,0x1a,0xc6, + 0xa6,0x7d,0x05,0x48,0xf6,0x49,0xd7,0x46,0x1c,0x9e, + 0x80,0x66,0x5a,0x89,0x01,0xb7,0x7f,0x53,0x5b,0x69, + 0x32,0x25,0xd6,0x77,0x12,0xce,0xe6,0x33,0x21,0x76, + 0x64,0xf8,0x4d,0xbe,0xa4,0xf4,0x4e,0xdf,0xbc,0xc0, + 0x36,0x22,0x63,0xf0,0xf0,0x2a,0x4d,0x89,0x39,0xbf, + 0xa9,0xa9,0xd2,0xa4,0xff,0x5e,0x66,0xef,0x91,0x63, + 0xe3,0x7e,0xcf,0x09,0x40,0x4e,0xca,0x98,0x04,0x5b, + 0x12,0xd7,0x66,0xdb,0xf2,0xba,0xff,0xdc,0x71,0x3f, + 0x2e,0xef,0xf3,0xf4,0x36,0xdd,0xd3,0xaa,0xbd,0x32, + 0xba,0x19,0xb5,0xd1,0xfa,0xe9,0x13,0x4e,0xd3,0x04, + 0x83,0x5b,0x0f,0x77,0xf5,0x71,0x8f,0xc0,0xf6,0x6b, + 0xa1,0xc4,0x95,0x14,0x5e,0x55,0xb8,0x71,0x3a,0x00, + 0xee,0xa9,0x2d,0x17,0x28,0x9d,0x97,0x95,0x79,0xd7, + 0x78,0xff,0xae,0xfa,0xd1,0x77,0x00,0x68,0x4c,0x6d, + 0xd6,0xae,0x69,0x37,0x25,0xa1,0x43,0x2b,0xa2,0x29, + 0xf7,0xfa,0x36,0xcd,0x35,0xb5,0x95,0xdc,0x5a,0x72, + 0xeb,0x71,0x4a,0x4a,0xbf,0x7f,0xb6,0x52,0xbf,0x9f, + 0x86,0x11,0x36,0x42,0x67,0xca,0xf9,0x98,0xf8,0x21, + 0xba,0x16,0x5c,0x92,0xfa,0x01,0xbf,0xe8,0x24,0xfe, + 0xdb,0xfd,0xdc,0xdd,0x77,0x26,0xd1,0x45,0x17,0x8f, + 0xfa,0x3a,0x75,0x5c,0x88,0xa5,0x94,0x47,0x6a,0xc3, + 0x3d,0x0e,0x90,0x36,0x99,0xe9,0x0a,0xbf,0xa3,0x7b, + 0x2b,0x24,0x25,0x67,0xeb,0xf1,0x04,0xfb,0xcb,0xd9, + 0x2b,0xd8,0xd8,0x3d,0xb5,0x86,0x12,0xaa,0xb2,0xe5, + 0xd2,0x6c,0xf5,0xea,0xd2,0x39,0xd4,0x91,0x98,0x54, + 0x7c,0x52,0x47,0x82,0xb4,0xef,0x52,0xe1,0xb0,0xb5, + 0xee,0x20,0xb4,0xdc,0xed,0x1f,0x89,0x41,0x36,0xf1, + 0xba,0x91,0x21,0x12,0xf5,0x9c,0xac,0x4e,0x7a,0xa2, + 0x74,0x7f,0xbf,0xa2,0x8c,0xc9,0xed,0xc1,0x4c,0xe7, + 0x1d,0x57,0xf8,0xfc,0x20,0xef,0x64,0x39,0x9f,0x16, + 0x06,0x2d,0x4a,0x97,0x00,0x38,0x88,0x34,0x64,0x78, + 0xa3,0x16,0x42,0xd2,0xbb,0x08,0xce,0xdd,0xae,0x82, + 0xc5,0x83,0x9e,0x50,0x21,0xad,0xc2,0x53,0x75,0x49, + 0x68,0x4a,0xea,0xb5,0x12,0xd9,0x6b,0xfb,0x4f,0x82, + 0x52,0x21,0x06,0x4e,0x88,0xd9,0xd1,0xb6,0x99,0x0b, + 0x9e,0x89,0x77,0x34,0x8c,0xa1,0x5b,0x94,0x70,0x08, + 0x68,0x67,0x10,0xad,0x7b,0x20,0x6c,0x86,0x5c,0x79, + 0x52,0x6b,0xc2,0x79,0x70,0xa5,0xe0,0x39,0x4d,0x35, + 0x18,0x88,0xfc,0xb8,0xca,0xb0,0x7b,0xbe,0x51,0x95, + 0xab,0xfa,0x2a,0x03,0x82,0xba,0x1a,0x4f,0xee,0x93, + 0x5a,0xc4,0x87,0xd0,0x16,0x9d,0xea,0xf3,0xf4,0xf6, + 0x80,0x20,0x44,0x87,0xd6,0x47,0xaa,0x9a,0xa5,0x55, + 0x77,0x1c,0x5a,0x45,0x48,0xd8,0x1d,0x84,0xa1,0x6a, + 0x3f,0xda,0xfe,0x21,0x62,0xae,0xa0,0x5d,0x63,0x55, + 0x9a,0x50,0x18,0xc7,0xbd,0x4b,0xad,0x60,0xa3,0x5b, + 0x34,0x22,0x7e,0xca,0x87,0x98,0x26,0x7e,0x14,0x29, + 0x49,0x93,0x81,0x34,0x7d,0x44,0x08,0x87,0x29,0x50, + 0x70,0x7f,0xf4,0xd6,0x07,0x3c,0xa3,0x93,0x14,0x7f, + 0x13,0x72,0x37,0xc8,0x3d,0x60,0x61,0x1b,0x4c,0x52, + 0x0f,0x14,0xa8,0xba,0xa6,0x8f,0x8b,0xe5,0x6e,0x38, + 0x84,0x7e,0x2e,0xd8,0xbd,0xac,0x0b,0xd4,0x8d,0x81, + 0x78,0xb2,0xb2,0xa2,0xcf,0x76,0xf6,0x4a,0x49,0xc6, + 0x21,0x39,0x4d,0x38,0x44,0x89,0xd6,0xd8,0x94,0x48, + 0x13,0x82,0x4c,0x88,0xdc,0x2b,0xf5,0x13,0xc9,0x83, + 0x64,0xea,0xa1,0x2e,0x5f,0xc6,0x71,0x44,0x54,0x5a, + 0xd4,0xfd,0xcf,0x6f,0x81,0x32,0xf3,0x20,0x8e,0x79, + 0xb0,0x87,0xc4,0x1a,0xdd,0x88,0xa5,0x1c,0x6a,0xc7, + 0xf1,0x6b,0xba,0xf1,0xa7,0x4a,0x03,0x50,0xeb,0xc4, + 0x65,0xa3,0x89,0x6c,0x39,0x49,0x12,0x4c,0x87,0x7f, + 0xaa,0x86,0xb4,0x15,0xe1,0x26,0x14,0x9c,0xc6,0x04, + 0x71,0x79,0x42,0x30,0x39,0xe6,0xa0,0x3b,0x9f,0xf0, + 0xc5,0x5c,0x92,0x00,0x81,0x81,0x26,0x6e,0x70,0xf2, + 0x89,0x36,0x1f,0xad,0x57,0x3a,0x20,0x83,0xc6,0xc8, + 0x09,0xa3,0xcf,0x87,0x44,0x16,0x75,0x7c,0x5a,0x9f, + 0xa1,0x3a,0x7a,0x0f,0x6b,0xe6,0x71,0xe0,0xa7,0x76, + 0xd5,0xd5,0xc4,0x0c,0xd3,0xd0,0x81,0x56,0xe9,0x03, + 0x21,0xf5,0x6d,0xc4,0x5d,0xff,0xa7,0x49,0x4e,0x4f, + 0x3a,0x26,0x73,0xcd,0x44,0x46,0x36,0xd3,0x53,0x67, + 0x52,0x89,0xd6,0xd8,0xe1,0x12,0x50,0x2a,0x28,0x42, + 0x2b,0xc6,0x4e,0xf4,0x38,0x74,0xc7,0xed,0x21,0xc7, + 0xc1,0xeb,0x07,0x4c,0x22,0xd5,0xba,0x6b,0x85,0x44, + 0xe5,0xc0,0x14,0xd7,0x49,0x13,0xb4,0x53,0x3b,0x3a, + 0xb4,0xde,0x0f,0x25,0x73,0x9f,0x4e,0x18,0x12,0x4a, + 0xa7,0x6d,0x1d,0xfa,0x7f,0x92,0x34,0xa0,0x36,0x8b, + 0x2b,0x98,0x29,0xfe,0x76,0x0e,0x17,0xb5,0x82,0x88, + 0xf3,0x46,0x9d,0x8a,0xd4,0x42,0x9d,0x92,0xd2,0x00, + 0x0e,0x1c,0x1a,0x3e,0xda,0xa0,0x69,0x6e,0x1f,0xd1, + 0x24,0xeb,0x44,0x4f,0x49,0xd4,0x8d,0x30,0xac,0x11, + 0x5b,0xff,0x6a,0x3e,0xfb,0x13,0x4b,0x29,0xa8,0x90, + 0xf1,0x27,0x8d,0xc3,0x4e,0xad,0x29,0x9a,0xf4,0x18, + 0xe0,0x75,0x3b,0xe5,0xe5,0x02,0x16,0x4d,0xb3,0x50, + 0x55,0x91,0xb2,0x63,0x22,0x5c,0x6d,0xb3,0xe4,0x81, + 0x3f,0x11,0xa1,0x98,0x3b,0x60,0x92,0xbe,0x8d,0x04, + 0xe0,0x43,0xe8,0x97,0x13,0x94,0x9b,0x12,0x2f,0x98, + 0x0e,0x88,0x15,0x0f,0x6d,0xbe,0xed,0xf3,0xd1,0x29, + 0x36,0x4a,0x4a,0x1d,0x9f,0x86,0x9e,0xf5,0xc6,0x85, + 0x5b,0x27,0xbc,0x88,0x83,0x95,0x2a,0x7f,0x97,0xe8, + 0xb9,0xca,0xbf,0x1f,0x16,0xfa,0x1c,0x95,0xe7,0xa1, + 0x55,0x3c,0x05,0x90,0x96,0x04,0x1d,0x17,0x84,0x29, + 0x38,0xba,0x4a,0x0e,0xb4,0x3e,0xac,0x41,0xe8,0x27, + 0xfe,0x43,0xf4,0x1c,0xdd,0xb3,0x70,0xa4,0x4a,0x37, + 0x11,0x3a,0xa1,0x6b,0x80,0x2e,0x8e,0x26,0xce,0x46, + 0xeb,0xec,0x24,0x94,0xc9,0xbd,0x23,0x88,0x6d,0x67, + 0x90,0xeb,0x3f,0xa9,0xc0,0xa4,0xfd,0x3a,0xc4,0x3e, + 0xe4,0xc5,0x05,0x1e,0x95,0x6d,0x67,0xc1,0xf9,0x70, + 0x36,0xaa,0xd3,0x37,0xd7,0x26,0xb5,0xac,0x9c,0x0b, + 0xf8,0x04,0x55,0x4f,0x63,0xdd,0xd3,0x34,0xa8,0x3b, + 0x9b,0x52,0x0c,0x4d,0x1a,0x4b,0xb4,0xa6,0x92,0x65, + 0xd2,0x44,0x2f,0xa1,0x42,0x5c,0x86,0x3d,0x4e,0xe2, + 0x4c,0xa9,0x66,0x94,0xb6,0x62,0xc9,0xd4,0x98,0xd0, + 0x59,0xf7,0x4c,0x49,0xe0,0xd8,0xed,0xd5,0xee,0x65, + 0x38,0xb9,0x45,0x68,0xbc,0x74,0xf1,0x79,0x23,0xba, + 0xb9,0xe1,0x19,0xbf,0xda,0x45,0x9d,0x6d,0xbf,0xde, + 0x7d,0x39,0x8d,0xc2,0xba,0x0a,0x88,0x5e,0x58,0x9a, + 0xe3,0x9f,0x38,0x36,0xfa,0xfd,0x01,0x02,0x5f,0x9b, + 0x32,0x7e,0xea,0xd7,0x92,0x12,0xba,0xad,0x96,0xd0, + 0xa4,0x72,0xba,0x48,0x28,0x0e,0x25,0xb4,0x0e,0x19, + 0xa1,0xf7,0xe4,0x5a,0x78,0x94,0x8c,0x4c,0x01,0xc3, + 0x54,0xaf,0x2b,0x3d,0x9a,0x14,0x21,0xfa,0xf7,0x6b, + 0xc2,0x9a,0xf8,0x01,0x13,0x2f,0x65,0x68,0xc1,0x9d, + 0x74,0x48,0x05,0xbf,0xb7,0x87,0x43,0x7b,0x9a,0x82, + 0xa3,0x84,0x2c,0x54,0x8a,0x67,0xe2,0x9d,0xdd,0x7f, + 0x94,0xaa,0x49,0x57,0x8d,0xdd,0x08,0x8d,0x06,0xa4, + 0x3f,0x7f,0xfe,0x44,0x27,0xed,0x0d,0x94,0x3e,0x55, + 0x83,0xe1,0x99,0xe0,0x50,0x86,0xa0,0x11,0x67,0x3b, + 0x05,0xe6,0x5a,0x12,0x74,0x2f,0x6d,0x2d,0xa4,0xc4, + 0xd7,0x16,0x37,0x6e,0x8a,0xd2,0xb5,0x15,0x08,0x59, + 0xee,0xce,0xf1,0x89,0xdb,0xb1,0xa4,0x1c,0xc4,0xb6, + 0x11,0x25,0x8a,0xae,0xf8,0x75,0x93,0x5f,0xa1,0xcd, + 0x79,0x82,0xd8,0x5f,0x6c,0xf1,0xd0,0x60,0x0d,0x08, + 0x1d,0x46,0xc1,0x48,0x2a,0x1e,0xb5,0xa8,0xd1,0xf7, + 0x32,0x69,0x39,0x9d,0x73,0x8e,0x49,0xda,0x8f,0xa1, + 0x72,0x9c,0x54,0xec,0x53,0x8b,0x98,0x92,0xbf,0x4f, + 0xde,0x2f,0x71,0xee,0x74,0x48,0x87,0x38,0x7f,0xda, + 0xee,0x4b,0xb4,0x94,0x49,0xf3,0xc7,0xa1,0x37,0xae, + 0x4b,0xe0,0x06,0x04,0x26,0x04,0xc9,0x25,0x54,0xfd, + 0x1e,0x5f,0xa9,0x17,0xde,0x15,0x2f,0x8d,0xf8,0x5a, + 0xd4,0x19,0x48,0x6d,0x0e,0x6a,0x71,0xd0,0x08,0x34, + 0xa9,0x78,0xa6,0xec,0x9b,0x2a,0x3d,0x15,0x94,0xa2, + 0x29,0x0f,0xcd,0xb4,0x53,0x70,0xd6,0x7e,0xb1,0xd3, + 0xb3,0x48,0x82,0x8a,0xf4,0x99,0x8e,0x18,0x36,0x55, + 0xc1,0x14,0x0c,0x35,0x49,0x48,0xad,0x84,0x04,0x3f, + 0xf6,0xcd,0x4b,0x86,0x90,0xbd,0x55,0xe9,0x12,0xad, + 0xa0,0x5e,0x8b,0x6a,0xd3,0x2e,0xb8,0xd1,0x88,0xf2, + 0xe4,0x6a,0xdd,0x5a,0x98,0x34,0xb2,0x7e,0xd2,0x04, + 0x94,0x43,0x09,0xf5,0xcf,0x69,0x3f,0xc0,0x54,0xe1, + 0x19,0x92,0xde,0x93,0x84,0x08,0xdd,0x94,0x61,0xe0, + 0xc9,0x1c,0xb7,0xa7,0x29,0x31,0xec,0x95,0x9b,0x70, + 0x72,0x46,0x0e,0x05,0x09,0x6f,0xa6,0x75,0x95,0x86, + 0x05,0xd4,0x19,0xda,0x21,0x3d,0xae,0xe5,0xe7,0x54, + 0xdf,0x81,0xe4,0x8c,0xad,0x3f,0x89,0x57,0xa7,0x8f, + 0x9e,0x07,0xe4,0xe9,0x0a,0xba,0x53,0x87,0xd4,0x84, + 0x89,0x22,0x40,0xea,0xe0,0xb2,0xb6,0x90,0xc7,0x06, + 0x87,0xdd,0x71,0x31,0x95,0x90,0x97,0x5b,0xc3,0x65, + 0x4a,0x7c,0x1d,0x6a,0x4d,0xe6,0xae,0x94,0xe8,0xa7, + 0x84,0x37,0x4d,0x55,0x4d,0xce,0xe4,0x60,0x3e,0x8c, + 0x89,0x29,0x25,0x6e,0x13,0x0d,0x61,0x13,0x6b,0x13, + 0x32,0x95,0xac,0x91,0x12,0x08,0x91,0x64,0x00,0xe8, + 0xcc,0x76,0x9a,0x3c,0x53,0x71,0xb2,0x49,0xbe,0x75, + 0x7f,0x24,0xf4,0xd7,0x89,0xb6,0x92,0x4c,0x4e,0x8a, + 0x71,0xa9,0x70,0x6a,0xe7,0xc1,0xb9,0xae,0xeb,0xfa, + 0xfd,0xfd,0x03,0xa5,0xcc,0xfe,0x00,0xa9,0xf5,0x0f, + 0xc1,0x89,0x0f,0xa7,0x15,0xe4,0x0e,0x93,0x7b,0x42, + 0xc9,0x55,0xd0,0x93,0xcb,0x2b,0x38,0x82,0x3f,0x26, + 0xd4,0xdc,0x9f,0xdd,0xd7,0xbf,0x71,0x8d,0x37,0x0f, + 0xf4,0x67,0x12,0x27,0xb9,0xa2,0x53,0x0f,0xfe,0xf6, + 0xca,0x12,0x13,0x38,0xeb,0x04,0x0f,0x07,0xfa,0xe3, + 0x3d,0x68,0xb5,0xd1,0xfd,0xb8,0xc2,0xa6,0x78,0x7c, + 0xc7,0xfd,0x79,0xa6,0x0d,0x56,0x84,0x26,0x4d,0xba, + 0x12,0x9b,0xb6,0x67,0x32,0xea,0xfb,0xb6,0x05,0xa8, + 0xa9,0x15,0x39,0x78,0xb1,0xb9,0x35,0xf0,0xf0,0x47, + 0x93,0x60,0x57,0x94,0x9c,0xc2,0x33,0xb0,0x13,0x5a, + 0x6d,0xfc,0xbd,0x1c,0x4a,0xa4,0xcf,0xd8,0x25,0x0c, + 0xdd,0x3b,0x2d,0x04,0xd0,0x3b,0x40,0x97,0x5e,0xaf, + 0x6b,0xa9,0xde,0x4b,0x98,0xd6,0x6c,0xaa,0x12,0x85, + 0x18,0x5c,0x29,0x60,0x4f,0x88,0x5c,0xaa,0x1e,0xdd, + 0x1e,0x4b,0x07,0x17,0x55,0xeb,0xa1,0x10,0x3b,0xd3, + 0xf4,0x8b,0x33,0x6c,0x4c,0x49,0xc0,0x15,0x84,0xfc, + 0x5c,0xa2,0x9e,0xda,0x16,0x46,0x6f,0xed,0x04,0xa4, + 0x78,0xb4,0x30,0x49,0x72,0x24,0x0b,0xcf,0xaf,0xdc, + 0xb3,0xb9,0xb2,0x34,0x0a,0xb9,0x80,0x87,0xc4,0xf7, + 0xb8,0xf6,0xa4,0x41,0xa8,0x0e,0x0d,0x80,0x24,0x9f, + 0xb6,0xd4,0x2a,0x73,0x2d,0xb5,0xfb,0xf7,0xbb,0x9b, + 0x3a,0x7d,0xcf,0x9f,0x3f,0x7f,0x92,0xd7,0x22,0xfa, + 0xe0,0x39,0xfe,0xa5,0x19,0xca,0x39,0x13,0x1a,0x74, + 0xbf,0x17,0x33,0xa8,0x63,0x27,0x15,0xbb,0x3b,0x7c, + 0x42,0xcc,0xd3,0x79,0x47,0x08,0x9a,0xbb,0x0f,0xd8, + 0x37,0xf6,0xd9,0xbb,0xf6,0xbe,0x5e,0x9b,0x33,0x85, + 0xfe,0xfa,0xfa,0x9a,0x6c,0x84,0x7e,0x12,0x20,0xb4, + 0x9d,0x08,0x9b,0xd4,0xf2,0x09,0xee,0xfc,0xa0,0x11, + 0x84,0xe3,0x8d,0x26,0xb7,0x6d,0x99,0x3e,0xba,0xc8, + 0xae,0xc3,0x39,0xe5,0x52,0xd6,0xe8,0xc8,0x9b,0xdb, + 0x69,0xab,0xa4,0x44,0x9b,0xfa,0xfc,0xd3,0x58,0xe2, + 0x96,0x20,0x76,0x1f,0x82,0x1b,0x6d,0x1f,0xd3,0x12, + 0x3c,0x5f,0x5f,0x5f,0x95,0xc6,0x37,0x53,0xf2,0x39, + 0x21,0x56,0x03,0x81,0xef,0x2d,0xd1,0xed,0x63,0xf7, + 0x9b,0x91,0xe6,0xc1,0x4d,0xbd,0x12,0xb7,0x60,0x03, + 0x11,0xbb,0xe7,0x90,0x46,0xb3,0xaf,0x36,0xe2,0xae, + 0x7f,0x7f,0x27,0x3a,0xf0,0x6e,0x7e,0xa4,0x01,0xe0, + 0x80,0x7b,0x14,0x15,0xf7,0xfa,0xbe,0x9f,0xe3,0xfd, + 0xcc,0x74,0x6f,0xb8,0x64,0x6a,0x92,0xbe,0xd7,0x6b, + 0x22,0x1b,0x8d,0x74,0x50,0xf5,0xf1,0xe9,0xb6,0xc7, + 0x4b,0x09,0xd3,0x93,0x78,0x99,0xfe,0xfb,0x6d,0xfa, + 0x2a,0x05,0xd9,0xa1,0x8a,0x7a,0xda,0x83,0x10,0xd7, + 0xce,0xd4,0x7a,0x30,0x95,0xe3,0x84,0x14,0x9c,0x24, + 0x56,0x37,0x1d,0xbe,0x2e,0x99,0x70,0xf7,0x26,0xa6, + 0xb8,0x76,0x28,0x84,0xa6,0x71,0xf4,0x5a,0x29,0x41, + 0x73,0x6d,0xbf,0x44,0x17,0x70,0x9f,0xe1,0xc6,0xa0, + 0xd5,0x9c,0xda,0x71,0xcd,0x36,0x05,0xb0,0x3b,0x8f, + 0x7a,0x9b,0xdd,0x21,0x3d,0xe6,0x20,0xb6,0xf6,0x21, + 0x26,0xbe,0xb9,0xf7,0x8a,0x43,0x2d,0x32,0x0a,0xee, + 0x0c,0x78,0x8f,0xa1,0x80,0x1c,0x97,0x0c,0x4f,0x9a, + 0x6d,0xce,0x06,0x25,0x25,0x75,0xa6,0x50,0x39,0x74, + 0xbf,0x12,0xa3,0x4e,0x3a,0xbf,0x48,0x7c,0xb6,0x7f, + 0xe6,0x94,0x94,0x26,0xe4,0x57,0xe3,0x88,0xdb,0x97, + 0x9a,0x38,0xba,0xb3,0xb0,0x17,0x6d,0xbf,0xb5,0xca, + 0xec,0xd5,0x5c,0x6a,0xb7,0x10,0x8f,0x82,0x94,0x7f, + 0x29,0xf9,0xe9,0x59,0x5e,0x9a,0x3a,0xd1,0xc3,0xae, + 0xbb,0x76,0xbb,0x9f,0x4f,0xd3,0x6d,0x53,0x95,0x09, + 0x01,0xa1,0x08,0xee,0x77,0x9f,0xef,0x50,0x01,0x87, + 0x20,0x50,0x45,0x46,0x23,0xf5,0x74,0x30,0xbb,0xca, + 0xdb,0xa9,0x3e,0xeb,0xc1,0xb9,0xe0,0x0a,0x61,0xe0, + 0xba,0x9f,0x8b,0x40,0xdc,0x8f,0x35,0x44,0x7d,0x60, + 0x45,0x3d,0x6e,0xb4,0x47,0x13,0x88,0xad,0xee,0x4b, + 0x7f,0xe6,0x90,0xa0,0xbc,0xa1,0x28,0x52,0xb1,0x97, + 0xa2,0x9f,0xee,0xe7,0xdb,0x86,0x4a,0xba,0x41,0x87, + 0x90,0x95,0x8e,0xe4,0x40,0x52,0xf2,0x76,0xed,0x74, + 0x08,0xa9,0x56,0x90,0x43,0xc2,0xbe,0xaf,0xbb,0xa8, + 0x70,0x01,0xe2,0x77,0xa5,0xc0,0xa4,0x49,0x8a,0x5b, + 0x93,0x5d,0xb5,0x37,0x11,0x35,0x75,0xfa,0xf3,0x03, + 0x64,0x20,0xe9,0xe5,0x5c,0x13,0x4a,0x46,0x3f,0xb3, + 0x69,0xcf,0xa4,0xa4,0xba,0x1f,0x56,0x1b,0xe7,0xf7, + 0x74,0xe8,0xc0,0x7e,0x3c,0x89,0x57,0x01,0x9f,0x1d, + 0xa7,0x23,0xd3,0xc1,0x6c,0x92,0x7e,0x44,0x7f,0x36, + 0xed,0x11,0xe2,0x82,0x92,0xf1,0x27,0x81,0x4d,0x3a, + 0x5d,0x44,0xeb,0x62,0xcb,0xd5,0x34,0xc5,0xfe,0xd9, + 0x8e,0x9b,0x27,0x87,0xf5,0x69,0x22,0x8f,0x12,0x09, + 0x6a,0x53,0xd1,0xd9,0x9b,0x00,0x83,0x64,0xd6,0x9d, + 0x00,0x80,0x7e,0x1e,0x4f,0xfc,0x9d,0x64,0xf2,0x4a, + 0x28,0x8d,0x4e,0xd1,0x92,0xed,0x55,0xff,0xbd,0x29, + 0xd7,0xe8,0x3f,0x4b,0x48,0x9b,0x5e,0xd3,0x2b,0xbd, + 0x08,0x09,0xf6,0xd7,0x04,0x73,0x1a,0x05,0xce,0x07, + 0x47,0x81,0xac,0x0a,0xa8,0xd2,0xd8,0x38,0xc1,0x2f, + 0xc9,0x94,0xe8,0xc8,0xfe,0x09,0x24,0x2a,0xc9,0x62, + 0xe4,0x10,0xb9,0xc4,0x4c,0x7d,0xad,0x92,0xc2,0xe8, + 0xe5,0x27,0x51,0x9c,0xf1,0xa5,0x5b,0x84,0x87,0x88, + 0xcf,0x54,0xa9,0xd1,0xf8,0xff,0x64,0xf1,0x30,0x4d, + 0x07,0xb8,0x91,0xf0,0xb4,0x91,0xc1,0x66,0x61,0x35, + 0xe6,0x3e,0x29,0x67,0x27,0x1e,0x88,0x72,0x2d,0x54, + 0xf6,0x7e,0x9a,0x74,0x48,0x15,0x9e,0x26,0xee,0xc3, + 0x81,0x71,0xa6,0x60,0xde,0x3f,0x5f,0x25,0xe4,0xff, + 0x46,0x0b,0x48,0x0e,0xf1,0xb3,0xd4,0xd3,0x42,0xf4, + 0x46,0xab,0x72,0xf2,0xe4,0xa1,0x7f,0x4f,0xa4,0x55, + 0x32,0x96,0x74,0x3f,0x23,0x81,0x1a,0x6d,0x1e,0x42, + 0xb2,0xe6,0x78,0x81,0x68,0x8e,0x9a,0xf4,0x5e,0x08, + 0xd1,0x0c,0x6e,0xf3,0x88,0xa8,0x74,0x8e,0x96,0xb3, + 0x2b,0xd0,0x43,0xc3,0xdd,0xf3,0x56,0x8e,0x23,0xc5, + 0x5d,0xb8,0x9f,0xb1,0x15,0xa7,0x49,0xe3,0x44,0xe0, + 0x0f,0x87,0xf1,0x31,0xad,0xaa,0x43,0xc9,0xd7,0xc6, + 0x1b,0x6e,0x52,0xc2,0x76,0xed,0xa3,0xd4,0x1d,0x21, + 0x7e,0x50,0xe2,0xe8,0xdc,0xed,0xce,0x4f,0x86,0x02, + 0x82,0x09,0xad,0x5d,0xdb,0xf4,0xe7,0xc4,0xdd,0x9b, + 0x26,0x3f,0x27,0x9d,0x35,0x6a,0x29,0x92,0x3e,0x95, + 0xa3,0x31,0x90,0x9e,0xd4,0x27,0x93,0x93,0x3d,0x6e, + 0xfe,0x4e,0x0b,0x79,0x51,0x99,0x21,0x6f,0x21,0xf5, + 0x81,0x1d,0xdf,0x87,0xdc,0xdc,0xa7,0xde,0xdf,0xa6, + 0x65,0xb3,0x75,0xaf,0xee,0x68,0x80,0x66,0xa1,0xc4, + 0x13,0x98,0x36,0xa8,0x83,0xed,0x12,0xc7,0x83,0x5e, + 0xee,0x66,0xfa,0x6c,0x22,0xd2,0xa5,0xf7,0x49,0xf7, + 0xb5,0x69,0x1d,0x99,0xcf,0xb5,0x88,0x0a,0x54,0xde, + 0x0e,0xad,0x79,0xb4,0x82,0xa6,0xa0,0xfb,0xc1,0xda, + 0x7c,0x7c,0x76,0x47,0xea,0x92,0xbf,0x0d,0x24,0xbc, + 0x35,0xc1,0xcc,0xf4,0x8c,0x3a,0x52,0x66,0x5a,0xb7, + 0x56,0x9d,0xd9,0x54,0x4f,0x35,0xed,0xdb,0xbe,0xb6, + 0x88,0x6b,0x60,0xd6,0xdd,0xfd,0xa5,0x45,0xeb,0x6f, + 0xe2,0xf5,0x24,0xf1,0xbb,0x69,0xda,0x74,0xc3,0xcd, + 0xd8,0xb4,0xab,0x15,0x95,0x49,0x1c,0xa7,0xd4,0xc2, + 0x49,0x89,0x9a,0xb6,0xad,0x28,0xe9,0xe8,0x5c,0x06, + 0x1a,0x0f,0x86,0x43,0xee,0xd0,0x3b,0xd3,0x83,0x9d, + 0x9c,0xe3,0x13,0xca,0x33,0xdd,0x33,0xa1,0x45,0x60, + 0x8e,0x4c,0xa8,0xed,0x71,0xdc,0x16,0x87,0x8a,0x5f, + 0xa2,0x07,0x94,0xc4,0x0d,0x09,0xfd,0x49,0xc5,0xa5, + 0x1b,0xda,0x48,0x32,0x18,0xce,0xc6,0xe3,0xf2,0x12, + 0x01,0xc7,0xb8,0x20,0x9c,0x14,0xc7,0xa8,0xed,0x48, + 0x93,0x5b,0xfa,0x1c,0xb5,0xb8,0xec,0x05,0x27,0xed, + 0x15,0x7a,0x56,0xee,0x3d,0x12,0xda,0xe6,0x7e,0x26, + 0xf1,0x9b,0x2e,0x18,0x0a,0xa0,0xa2,0x61,0x93,0x3c, + 0xda,0xa9,0xae,0x7f,0xdb,0x5e,0x34,0xd5,0x7e,0x1e, + 0x1c,0x20,0x82,0xcd,0x48,0x88,0x49,0xff,0x5d,0x17, + 0xea,0xf7,0x97,0x63,0xdb,0xc7,0x08,0x62,0x15,0xe9, + 0xfa,0xb8,0x03,0x62,0x3a,0xd0,0x94,0x03,0xe1,0xc8, + 0x67,0xea,0xa6,0x9e,0xda,0x66,0x9d,0x20,0xe6,0xda, + 0x57,0x49,0x78,0x30,0x65,0xe8,0x5a,0x15,0xab,0x04, + 0x38,0x21,0x2c,0xba,0xd8,0x08,0xde,0x73,0x44,0xdd, + 0x7e,0x68,0xba,0x03,0x52,0x13,0x32,0xd7,0x2a,0xa2, + 0x67,0x9d,0x36,0xc9,0x34,0xca,0x09,0x22,0x74,0x45, + 0x7c,0x15,0xd7,0xa2,0x24,0xae,0x8e,0xd9,0x20,0x6f, + 0x9c,0x24,0x41,0x7b,0x0a,0x82,0x77,0xb9,0x69,0x16, + 0x4d,0x2e,0x64,0x9d,0x21,0x29,0x9a,0x92,0x1c,0xc3, + 0x51,0xa9,0xe1,0xd9,0xdd,0xd3,0x70,0x35,0x24,0x21, + 0xf7,0x61,0x55,0x46,0x19,0x3b,0xb5,0x82,0xb5,0x0a, + 0x7d,0x4b,0x2a,0x9d,0x9d,0x4c,0x6a,0x4f,0x04,0xfe, + 0xd3,0x58,0x65,0xd2,0xb0,0x84,0x0b,0x70,0xfd,0xfa, + 0xa8,0x40,0x0b,0xc3,0x1d,0x38,0xca,0xaf,0x2d,0xd2, + 0x05,0x9f,0x6f,0x12,0xd8,0xb3,0xa3,0xd0,0x2d,0x06, + 0x9c,0x50,0x9d,0x9f,0xd4,0x5a,0x80,0x96,0xe7,0x51, + 0x1e,0x91,0x8b,0x8f,0x29,0x86,0xdd,0xd3,0xc1,0x70, + 0x60,0x9d,0xcd,0x20,0x0b,0x3d,0xbf,0xf0,0x6e,0x8e, + 0x9e,0x4d,0x1d,0x3d,0x52,0xa4,0x79,0xe2,0xf5,0x4c, + 0xff,0xa4,0x98,0xaa,0xf4,0x02,0xfa,0x3d,0x57,0xd0, + 0x93,0x6e,0x18,0x9d,0x0d,0x94,0x8c,0x7c,0x92,0x30, + 0x90,0x44,0x4a,0x6f,0x61,0xb9,0xa4,0x9a,0x0a,0x39, + 0x67,0xc4,0x0b,0x2d,0xe1,0x88,0x58,0x51,0x87,0xe4, + 0x1a,0x0c,0x6d,0x1d,0x8f,0x2f,0x4d,0x96,0xd2,0x7b, + 0x78,0xbd,0x5e,0xd7,0x6f,0x73,0x80,0x3f,0x12,0x12, + 0xca,0x22,0x53,0xb6,0x3a,0xc1,0xdb,0x1b,0x5f,0x15, + 0xaa,0x78,0x1d,0x12,0xb3,0xe9,0xb1,0xa6,0xe0,0x1a, + 0xaa,0xaf,0x54,0x79,0xba,0x2a,0xdd,0xfe,0x59,0xaf, + 0xd4,0xdd,0xd4,0x4f,0xff,0xb9,0x89,0x30,0xe9,0xfc, + 0xbd,0x5c,0x62,0xd3,0x3f,0x0f,0xfc,0x90,0xb0,0xef, + 0x3a,0xb9,0x9e,0x4f,0xcf,0x09,0x90,0x16,0x9a,0xb8, + 0x8a,0x10,0xae,0x1e,0xf8,0x9a,0xd4,0x2c,0xda,0x3a, + 0x23,0x32,0xe6,0xf8,0x43,0x7a,0x10,0xb9,0x7d,0xa1, + 0xb7,0xd6,0x93,0xd7,0x56,0x01,0x56,0x3a,0x04,0x12, + 0xd2,0x33,0x79,0xa2,0x49,0xc5,0x57,0x13,0xbf,0xa5, + 0x55,0xa4,0x95,0x82,0xd4,0x60,0x4f,0x71,0xff,0x59, + 0x6d,0xf8,0x1f,0x93,0x86,0x98,0xf2,0x82,0x34,0x69, + 0x49,0x9e,0x7b,0x8e,0x44,0x9b,0x78,0x62,0x01,0x4d, + 0x5d,0xb5,0xa8,0x5a,0xf2,0x75,0x16,0x87,0xe8,0x99, + 0x0e,0x00,0x87,0x10,0xe9,0xa1,0x9f,0xf8,0x4f,0x80, + 0xbc,0x9c,0x05,0x02,0xf9,0x28,0x38,0x92,0xef,0x53, + 0x8a,0x83,0xe9,0xfd,0x0c,0xc8,0x92,0x6b,0x9b,0x9e, + 0x09,0xf5,0x87,0xc2,0x0e,0xff,0xdc,0xa1,0x2b,0x70, + 0x4d,0x67,0xd8,0x63,0x6f,0x05,0x39,0x09,0x77,0x4e, + 0xa8,0xca,0x94,0x34,0x4f,0xc5,0x24,0x21,0xd3,0xe9, + 0x7d,0xa7,0x6e,0x46,0xa2,0x23,0xb8,0xc2,0xc2,0x25, + 0x4a,0x1b,0xbe,0x11,0x15,0x2b,0x74,0xbd,0xee,0x7d, + 0xb9,0x7d,0x3d,0xd1,0x11,0xc8,0xf0,0xba,0xaa,0xfe, + 0xf1,0x02,0x9b,0x60,0x5e,0xe2,0xa3,0xb8,0x03,0xc4, + 0x6d,0x04,0x75,0xd0,0x4e,0x7d,0x41,0xd7,0xc7,0x4e, + 0x2f,0xdb,0x41,0xbf,0x1b,0xed,0x00,0x49,0xf8,0x22, + 0x6f,0x82,0x6c,0x1d,0xfe,0x23,0xce,0xe9,0x9b,0x45, + 0xed,0x82,0x47,0x6a,0x27,0x68,0x50,0xfa,0x44,0xe1, + 0x94,0x34,0x85,0xa6,0xca,0x44,0x55,0x95,0xdd,0x62, + 0xa4,0x9e,0xb2,0x56,0x82,0x9b,0xe7,0x42,0xef,0xd2, + 0x11,0x50,0xf5,0xb3,0x65,0x23,0xe2,0x44,0x4f,0xf0, + 0x16,0x3a,0xe4,0xd5,0x76,0x8f,0x5c,0xd2,0xb4,0x8d, + 0x4e,0x88,0xb8,0x96,0x84,0x43,0x41,0xf5,0x70,0xd6, + 0xfe,0x7d,0xef,0x99,0x93,0x30,0x1f,0x1c,0xec,0xe7, + 0x1a,0xc6,0xa6,0x27,0x52,0xa3,0xfa,0x7e,0x25,0x41, + 0xbb,0x44,0xb8,0xa7,0x96,0x54,0x98,0xe4,0x7c,0xd3, + 0x24,0x4a,0x6a,0xf5,0x8b,0x69,0xc0,0x43,0x5e,0x5b, + 0x81,0x13,0x74,0x26,0x5d,0xae,0x2b,0x28,0x8a,0x2b, + 0x17,0xcc,0xa1,0xc0,0xfd,0xef,0x26,0xee,0x4b,0x3a, + 0x40,0xf4,0x7d,0x69,0xc2,0xd5,0x63,0x9b,0x6a,0x5b, + 0x5d,0xa0,0xe1,0x75,0xb7,0x17,0x4c,0x45,0x7d,0xc8, + 0xfb,0xd1,0xb4,0x21,0x1f,0x9a,0x3a,0xce,0x12,0xa9, + 0x5f,0x9f,0x4e,0x56,0xa9,0x1f,0xdd,0xb6,0x65,0x3a, + 0x21,0xf6,0x8a,0x0a,0x6f,0xf8,0x58,0x97,0xb1,0x43, + 0xb9,0x8c,0xbd,0x08,0xa1,0x30,0x46,0x1f,0xc7,0x09, + 0x4b,0x1e,0xc3,0xcb,0x3a,0x8b,0xbd,0x1e,0xf7,0xb8, + 0x5b,0x9f,0x24,0x7f,0x90,0xce,0x01,0x6a,0x5f,0xa6, + 0x56,0xd6,0x86,0x03,0xba,0x7d,0x7f,0x14,0x73,0x52, + 0xc1,0xf0,0x3b,0xf4,0x96,0xb1,0x8d,0x61,0x14,0x38, + 0x8b,0xb2,0x2c,0x47,0x7a,0x26,0xad,0x20,0x85,0x77, + 0x5f,0xaf,0x57,0x6d,0x5a,0x4d,0x37,0x6a,0xe5,0xc6, + 0xac,0xcd,0x41,0x5b,0xd3,0xa1,0xb7,0xd5,0xb1,0x49, + 0x5a,0x25,0x13,0x17,0xc4,0x55,0xbc,0x2a,0x06,0xa5, + 0x87,0x82,0x99,0xc2,0xba,0xa8,0x95,0xd5,0x2a,0x94, + 0x63,0x78,0x1c,0x0f,0xa4,0xe9,0x7e,0x36,0x66,0x73, + 0x15,0xa1,0x5e,0xce,0x67,0xc5,0x18,0xa7,0x56,0x42, + 0x86,0xb4,0x1d,0x64,0x0c,0x17,0x0b,0xfa,0xf4,0xce, + 0xbd,0xfc,0x21,0x13,0x30,0x99,0xc2,0x42,0x8b,0xca, + 0x3d,0x9f,0xa4,0xd9,0xf4,0x76,0x5d,0x3a,0x0a,0xab, + 0x08,0x8d,0xd1,0xae,0xfa,0x99,0xfe,0x72,0x6d,0x25, + 0xe7,0xf0,0x1e,0xdc,0x96,0xcf,0xe5,0x5e,0x1a,0x7b, + 0xbb,0x3d,0xf4,0x80,0x26,0x7e,0x0f,0x24,0x25,0x0f, + 0xc4,0x02,0xd6,0x7d,0x4d,0xa3,0xe9,0xa9,0x42,0x26, + 0xa4,0x21,0x71,0x05,0x92,0x27,0xd6,0x87,0xff,0xa4, + 0x51,0xf3,0xc8,0x97,0xe9,0x3e,0x82,0x57,0xd0,0x71, + 0x99,0x9c,0xea,0x1d,0x0f,0x84,0x12,0xaf,0x89,0xf7, + 0xa3,0xad,0xfd,0x05,0x3a,0x13,0xab,0x6f,0x40,0xdb, + 0xce,0x66,0x2d,0x91,0x27,0x9a,0x9b,0x32,0x0b,0xd3, + 0xa5,0x6e,0x4a,0xee,0x18,0x3a,0xc5,0xd9,0xa8,0x4e, + 0x53,0xc1,0xbd,0x3d,0xc8,0x1d,0x82,0xe8,0x92,0x0f, + 0x42,0x48,0x48,0x1f,0x28,0xd9,0x7f,0x38,0x29,0x86, + 0xfb,0x9c,0x36,0x94,0x8f,0x43,0xfc,0x54,0xd7,0x3a, + 0xa2,0x44,0x7e,0xa2,0x79,0xb8,0xd6,0x53,0xe0,0x03, + 0x9e,0x94,0xc8,0x4f,0x05,0xb2,0x43,0x2d,0x35,0xb6, + 0xf4,0xbf,0xfb,0xed,0x46,0xe7,0xa8,0xfa,0xda,0x90, + 0x27,0x5b,0xe0,0xc7,0x83,0xc2,0x1c,0xee,0xc7,0x8d, + 0xf5,0xea,0xa1,0x3f,0x7c,0x1f,0xfe,0x99,0x23,0x99, + 0xd2,0x82,0x4a,0xd0,0x34,0xe8,0xd9,0x8c,0xda,0x2a, + 0x7a,0xd8,0xba,0x96,0x9e,0xb6,0x78,0xa8,0x75,0xa4, + 0xfc,0x16,0x1a,0x8f,0x9f,0x44,0xab,0x52,0xcb,0x8f, + 0xfa,0xb3,0x04,0xa7,0xaa,0x46,0x4d,0x6a,0x83,0xb8, + 0x6e,0x98,0xe3,0x57,0xb9,0xd6,0x4e,0x6a,0x71,0x0e, + 0xfc,0x93,0x37,0xcd,0xa1,0x61,0xd4,0xd8,0xf2,0xc8, + 0x0c,0x1f,0xa1,0x12,0xc1,0x1b,0x08,0xec,0x56,0x12, + 0x41,0x13,0xb2,0xe4,0x59,0x97,0x04,0x48,0x4d,0x4b, + 0x03,0x93,0x20,0x77,0xf8,0xf4,0xf1,0x7a,0x4a,0x26, + 0x52,0x55,0x9d,0x0a,0x15,0xa7,0x75,0x42,0xef,0x33, + 0xf1,0xe5,0xf4,0xcf,0x95,0x97,0x95,0x94,0xad,0x5d, + 0x82,0x40,0xe8,0x6a,0x4a,0x96,0x08,0xa6,0x9f,0xb8, + 0x13,0xfd,0xb3,0x08,0xb6,0xa7,0xb1,0x72,0x4d,0x08, + 0x5c,0xc1,0x49,0x9e,0x5e,0x8a,0xbc,0xa7,0x31,0x79, + 0xbd,0x0e,0x45,0x59,0x08,0x99,0x72,0xd3,0x58,0xf4, + 0x5c,0x61,0x92,0x75,0x44,0xc3,0x13,0xa7,0xec,0x93, + 0x43,0x12,0x8a,0xfc,0xa3,0x5c,0x28,0x78,0x9f,0x27, + 0xb5,0x2d,0x89,0x53,0x9a,0xb4,0xd2,0xa8,0x0d,0x36, + 0x75,0x14,0x68,0x3f,0xa6,0x98,0x4d,0xad,0x69,0xe5, + 0x0a,0xba,0xc4,0xc1,0xed,0x89,0xcd,0x50,0xc3,0xe5, + 0x4d,0x6a,0xaf,0x45,0x0c,0x9b,0x5a,0x5e,0x27,0x89, + 0x31,0x3a,0x59,0x0b,0xbd,0xdf,0xdf,0x81,0x0b,0x11, + 0x7b,0xaf,0xb4,0x80,0x1d,0x8c,0x6f,0x46,0xdc,0x8b, + 0x5a,0x33,0x8b,0xa0,0xf4,0x56,0xe5,0x4f,0x07,0xf5, + 0xa6,0x5f,0x0a,0x1b,0xe3,0x41,0x40,0x05,0x0d,0x9e, + 0x37,0x02,0xae,0x13,0x5f,0xda,0xb6,0xc9,0x88,0x93, + 0x33,0x1d,0xd6,0x7a,0x7f,0x0a,0x61,0x7e,0x30,0x52, + 0x4a,0x50,0x7e,0x75,0xb2,0xa5,0x22,0x3b,0x43,0x2f, + 0xfc,0xa1,0x6b,0xe3,0x24,0x10,0x5c,0x62,0xe1,0xb4, + 0x20,0x12,0x12,0xe5,0x92,0x0c,0xe5,0xf6,0x18,0x4d, + 0x89,0x37,0xa4,0x71,0xe2,0xd5,0x2c,0x51,0x82,0x0a, + 0x7c,0xa9,0x1f,0x94,0x88,0x5a,0x79,0x37,0xa2,0x1a, + 0xd0,0x14,0xab,0xd7,0x65,0xec,0x27,0x7e,0xb4,0x80, + 0x28,0xd9,0x30,0x01,0xdb,0x72,0x7c,0x36,0x1c,0x84, + 0x54,0x19,0xa6,0x43,0x6a,0xaa,0xf2,0xa6,0xbd,0x92, + 0x92,0xe2,0xfe,0x1c,0xb6,0x5c,0x43,0x87,0x48,0xa4, + 0x03,0xdd,0xf1,0x7d,0xe0,0xfe,0xd2,0xc4,0x96,0x6d, + 0xcb,0x6a,0xeb,0x8f,0xde,0xdd,0x65,0x26,0xbe,0x92, + 0x2a,0xb2,0x6b,0xd1,0x38,0x03,0xcc,0x5e,0x48,0x92, + 0xde,0x92,0x93,0x4d,0x70,0xc9,0x02,0x4c,0x35,0xa1, + 0x1f,0x14,0x09,0x68,0x02,0xaa,0xf4,0xf6,0xec,0x9c, + 0x7c,0x8b,0x43,0x66,0x53,0x81,0x30,0x9d,0x45,0xdd, + 0xca,0x86,0xfc,0xca,0x34,0x41,0x75,0xa2,0xa5,0xa0, + 0x4b,0x66,0x13,0xe7,0x2d,0x87,0x96,0x84,0x27,0x27, + 0xae,0x6b,0x22,0x78,0x4f,0xb9,0x00,0x4d,0x41,0x03, + 0x5d,0xe6,0x6c,0x0a,0xda,0xe4,0x7b,0x47,0x05,0x58, + 0x6a,0xf7,0xe9,0xb3,0xfb,0xed,0xe0,0xf8,0xcb,0x10, + 0x58,0x7b,0xab,0x69,0x3b,0x82,0x0a,0x6d,0x91,0xc8, + 0x2d,0x51,0x14,0x49,0x49,0xbc,0x0b,0x18,0xf5,0x91, + 0xc4,0x98,0x45,0x58,0xb2,0x29,0xdf,0xaa,0xe5,0x49, + 0x60,0xd0,0x59,0x0b,0x68,0xf2,0xe3,0x10,0x28,0x87, + 0xee,0xdc,0x2d,0x30,0x42,0x33,0x5c,0x3b,0x49,0x5b, + 0x54,0xd4,0x36,0x72,0xd3,0x46,0xd2,0x57,0xc7,0x16, + 0xa1,0x0b,0x52,0x0e,0xd1,0x92,0x05,0x6e,0xed,0x45, + 0x28,0x38,0x92,0x88,0xa5,0x2e,0xe4,0x3f,0x7f,0xfe, + 0x38,0xbb,0x8f,0xc7,0xf7,0x49,0x4f,0xbd,0x20,0x00, + 0x95,0x49,0x16,0xec,0xfb,0x1f,0xe4,0x21,0xdc,0x34, + 0x9d,0x56,0x3c,0x05,0x32,0x0f,0x0f,0x11,0x45,0xa3, + 0xdc,0x5b,0xc4,0xc1,0x11,0x8f,0xbe,0xa2,0xd1,0x6e, + 0x85,0xbf,0x2f,0x20,0x5b,0xf7,0x96,0x08,0x21,0x0a, + 0x66,0xad,0x8c,0xc4,0xfa,0xde,0x62,0x99,0xda,0x04, + 0xe9,0xb3,0x37,0xa3,0xf6,0xae,0x4d,0x9a,0xda,0xf7, + 0xe0,0xc9,0x96,0x0e,0xaf,0x10,0x76,0x32,0x61,0x57, + 0x27,0x96,0xf4,0x60,0xd0,0x2a,0x19,0xe2,0xcf,0x09, + 0x74,0x80,0x93,0xc6,0xab,0x41,0xf4,0xee,0x84,0x96, + 0xcf,0x81,0x96,0xe3,0x99,0x0e,0xdd,0x61,0x5c,0x1b, + 0xbf,0x17,0x78,0x1b,0x87,0x54,0x7f,0x93,0x34,0xc8, + 0xe0,0x62,0x8e,0xa6,0xa9,0x64,0x5e,0xea,0x92,0xce, + 0x2d,0xb2,0xe2,0xce,0x0b,0x6d,0x41,0x4e,0x44,0xe7, + 0x49,0xaa,0x41,0x0b,0x98,0x84,0xb8,0xb9,0x45,0x1b, + 0x90,0xba,0x15,0xaf,0x75,0x40,0xcc,0x62,0x1b,0x7b, + 0xda,0x48,0x09,0xe5,0x4f,0xd4,0x9d,0x04,0xd0,0xbc, + 0xc5,0x52,0xcd,0xfc,0x29,0xd9,0x70,0x22,0x45,0x4a, + 0xae,0x73,0x48,0x44,0xaa,0x68,0x1c,0x4c,0x96,0xe0, + 0x7f,0x82,0xfb,0x1c,0xb4,0x4c,0xd0,0xe3,0xc6,0x01, + 0x3c,0x59,0x69,0xc0,0x54,0xc4,0xb9,0x5b,0x41,0x0d, + 0x61,0x38,0x7a,0xb0,0xb8,0xcf,0xed,0x7a,0x05,0x04, + 0x4b,0x3b,0x81,0x34,0x25,0x17,0x53,0x65,0xbe,0x81, + 0x1e,0x13,0x5c,0x99,0x54,0x63,0xc9,0xd4,0xd6,0x1c, + 0xa8,0x67,0x03,0x57,0x53,0x80,0xd2,0x51,0xcb,0xd4, + 0xc2,0xec,0xdf,0xdd,0xd1,0x9e,0x05,0xc9,0xf5,0xc0, + 0xbd,0x9c,0x10,0xf0,0xce,0x34,0xb6,0x1d,0xa6,0xab, + 0xce,0xd4,0xc7,0x26,0xdf,0x24,0x19,0x7b,0x7e,0x98, + 0xf0,0xa6,0xb5,0x3b,0x4d,0xd9,0x84,0x7d,0x70,0x93, + 0x7f,0x0f,0x21,0x15,0x04,0xc3,0x4f,0xc8,0x8b,0x13, + 0x64,0xd3,0xf1,0xdf,0xa9,0x75,0xd0,0x8a,0x84,0x93, + 0x8c,0x61,0x75,0x58,0xc2,0x14,0x0a,0xc8,0xf3,0xe9, + 0x1a,0x66,0xae,0x52,0x0f,0x24,0xfa,0xe3,0x08,0xf0, + 0xc9,0x92,0xc3,0x59,0x15,0xc0,0xe4,0xed,0xa1,0xf8, + 0xa6,0x88,0x51,0xaa,0xa0,0xd5,0x2e,0xc2,0x54,0xf1, + 0xa3,0x3d,0xc6,0xb4,0x8e,0x1c,0x6a,0xdf,0xf9,0x6d, + 0x2a,0x2e,0xf8,0xe7,0xcf,0x9f,0x28,0x54,0xa8,0x08, + 0xdf,0x27,0xad,0xa3,0x34,0xa2,0x1d,0xe2,0x84,0x8b, + 0x4d,0x87,0x0e,0xf2,0xe9,0x5c,0x05,0x83,0xd3,0x93, + 0x7c,0xb1,0xb6,0xc0,0x43,0x8a,0x49,0x21,0x39,0xb0, + 0x67,0xd1,0xc6,0x15,0x22,0x9c,0xcf,0xc7,0xe5,0x18, + 0x29,0x56,0x6c,0x4d,0xbe,0xd3,0x99,0xe7,0x5a,0x8a, + 0x6e,0x38,0xea,0x95,0x12,0x0c,0x37,0xa1,0x90,0x0e, + 0xb2,0x94,0xed,0x6f,0x3d,0xa8,0xdc,0x83,0x35,0x7d, + 0xfe,0x33,0x8d,0x94,0x52,0xcb,0xc8,0x25,0x44,0x81, + 0x17,0x74,0xdc,0x4b,0x4b,0x93,0x60,0xae,0xf5,0x45, + 0xc1,0x5d,0x0f,0xb3,0x89,0xab,0x41,0x09,0xd5,0x16, + 0x71,0x31,0x90,0xf2,0x99,0x12,0x3f,0x97,0x6c,0x0d, + 0x93,0x13,0xb1,0xc2,0x33,0x88,0x11,0x3e,0xd3,0x54, + 0xf9,0xb5,0xe0,0x7c,0x9c,0x79,0xe3,0x05,0x53,0x38, + 0xa4,0xae,0x9a,0x0e,0x74,0xad,0xaa,0x68,0x14,0xd4, + 0x25,0x0d,0x2e,0x09,0x9b,0xb8,0x25,0xae,0x6d,0x92, + 0x36,0xf1,0xed,0xd4,0x4e,0x4a,0xc2,0xc0,0x61,0x3a, + 0x6e,0x3f,0x4c,0x87,0xc6,0xed,0xdc,0xdc,0x93,0x0d, + 0xe2,0x68,0x4c,0xad,0xdf,0xcd,0x1a,0x1f,0x12,0xf7, + 0x3e,0x81,0x76,0x26,0x5e,0x44,0xfa,0x33,0x4d,0x42, + 0x54,0xa4,0xcf,0x1c,0x5a,0x27,0x1d,0x98,0xad,0x22, + 0x3e,0x9a,0xbc,0xea,0x54,0x90,0x26,0x7a,0xb2,0x56, + 0x92,0x0d,0xc7,0x71,0x4a,0xc5,0xf4,0x7b,0x94,0x70, + 0x24,0xf4,0x82,0x92,0x2b,0x6b,0x2b,0x20,0x7b,0xef, + 0xbe,0x9f,0x3b,0x91,0xb9,0x82,0x0d,0x09,0x68,0x78, + 0x3d,0x12,0x10,0x87,0xd8,0xa5,0xa9,0x65,0xfa,0x33, + 0x87,0x90,0xa5,0x62,0x69,0x4a,0x3c,0x16,0x07,0xb7, + 0x2d,0x9c,0x49,0xd3,0xca,0xf1,0xbe,0x5c,0x32,0x26, + 0x5c,0xcc,0x43,0x5a,0x7a,0x43,0xa7,0xe4,0xa3,0xe2, + 0x44,0x13,0x25,0x1a,0x80,0x0a,0xed,0xed,0xd3,0x0b, + 0x01,0x45,0xc9,0x27,0xcd,0xb8,0x09,0x08,0x71,0xef, + 0xee,0x7e,0x36,0x9a,0x13,0xfc,0xd6,0xde,0xe2,0x94, + 0x91,0x25,0x08,0x74,0x83,0x32,0x24,0x8e,0x0e,0x04, + 0xcd,0xc9,0x25,0x1b,0xc9,0x97,0x21,0xf8,0xa2,0x0b, + 0x7a,0xe2,0x38,0x2c,0xa6,0x8a,0x2e,0x35,0x90,0x9b, + 0xc8,0xc7,0xca,0x7d,0xe9,0xc4,0xf0,0x0b,0x84,0x08, + 0x8d,0xff,0x90,0x4e,0x06,0x3d,0x7e,0xce,0xbd,0xcb, + 0xf0,0xfe,0x8e,0x21,0xc3,0xc6,0x89,0x2e,0xd7,0x37, + 0x9e,0x88,0xc3,0xae,0x45,0x41,0x1a,0x49,0xf7,0x67, + 0x7c,0x7d,0x7d,0xad,0x5a,0x61,0xda,0x22,0x34,0x09, + 0x74,0x99,0xef,0x4e,0x9a,0x3c,0x24,0xb6,0x68,0x09, + 0xc7,0x26,0x78,0x3d,0xa6,0xc3,0x04,0x45,0x28,0x27, + 0xb4,0xa9,0x9c,0xab,0xd4,0x2a,0x6d,0x49,0x6e,0x4d, + 0xc9,0x8d,0x40,0xff,0x35,0x49,0xcb,0x0f,0x10,0xf3, + 0x59,0x18,0x94,0x56,0xea,0xc5,0x03,0x87,0xe8,0xa4, + 0x84,0x7c,0x42,0x33,0x1d,0xff,0x45,0x11,0x23,0x42, + 0x84,0x9d,0x93,0x7d,0x72,0xb9,0x36,0xf7,0x76,0x5c, + 0x9b,0xc3,0xb5,0x30,0x92,0xca,0x73,0x80,0xf9,0x4f, + 0x78,0x2f,0x07,0x10,0x21,0x2b,0x0b,0xa1,0x42,0x79, + 0x74,0x9d,0xb4,0xb6,0x97,0xe4,0xe4,0x03,0x74,0x02, + 0xa7,0xbf,0x74,0xe8,0x5d,0x27,0x45,0xe6,0xd0,0x02, + 0x1e,0x0f,0x68,0x29,0xa2,0x7e,0x10,0xfd,0xae,0xd4, + 0x6d,0x10,0xac,0x33,0x89,0x38,0xa6,0xe2,0x76,0xa3, + 0xba,0xef,0x80,0x85,0xe4,0x32,0xaf,0x60,0x01,0xb4, + 0xba,0x8e,0x91,0x8c,0x38,0xce,0xdb,0x2f,0x99,0x64, + 0xbb,0xb5,0x0a,0x05,0x17,0x3e,0x9f,0xc5,0x19,0x75, + 0xc0,0x0f,0x13,0xa7,0x03,0x5d,0xeb,0xd2,0xc5,0x85, + 0xaf,0xaf,0xaf,0x7f,0x5a,0x60,0xd4,0x3b,0xa6,0xfc, + 0x65,0x93,0xd8,0x24,0xd8,0xec,0x82,0x49,0x0c,0xf7, + 0x19,0xae,0xe2,0x0d,0xf0,0xe0,0x31,0xe8,0xca,0xd9, + 0x92,0xa7,0x12,0x9c,0xb7,0x80,0xfd,0x4e,0xf2,0xfc, + 0x9a,0xda,0x5b,0xb4,0xd9,0xa7,0xec,0x3a,0x25,0x62, + 0xe6,0xd9,0x59,0x88,0x73,0xa3,0x42,0xba,0x21,0xc5, + 0x75,0x69,0x84,0x64,0xa2,0xa7,0x87,0xa7,0x33,0x6d, + 0x85,0x6b,0x1d,0x2b,0xb0,0xf4,0x2e,0xd5,0x7a,0x80, + 0xb8,0x23,0xae,0x12,0xd4,0xdf,0x49,0xee,0xd7,0x1b, + 0x51,0x32,0x93,0xa4,0xe3,0xf7,0xb6,0xa0,0x75,0x74, + 0x5d,0x40,0x22,0x71,0xc2,0xf7,0x38,0x0e,0xca,0x51, + 0xb4,0xc2,0xb4,0x29,0xc6,0x96,0x6b,0x3a,0x04,0x04, + 0x31,0x3a,0xad,0xdd,0x74,0x5a,0x77,0x4e,0xff,0xdb, + 0xb5,0x8c,0xaf,0x4f,0xfe,0x01,0x12,0xfa,0xd1,0x36, + 0x45,0x5a,0xcf,0x0d,0xca,0x3f,0xb4,0xd6,0xb4,0x2d, + 0x49,0x53,0x89,0x09,0xa1,0x71,0x68,0x07,0xa1,0x57, + 0x14,0xcb,0xa0,0x05,0x87,0x0a,0xc4,0x0e,0x4d,0xa2, + 0xfd,0x40,0xb4,0x07,0x39,0x7c,0x8f,0x0a,0x82,0x06, + 0x55,0xfb,0x11,0x45,0xa3,0xfb,0x4c,0xb1,0xc9,0x65, + 0x25,0x4e,0xbb,0x68,0x43,0xbe,0x77,0x4a,0xe7,0xd4, + 0xca,0x99,0x04,0x03,0xc5,0x0a,0xe5,0x24,0x8a,0xc2, + 0xa0,0xbf,0x65,0x11,0xba,0xd4,0xc9,0xa1,0xb5,0x4a, + 0xca,0xcd,0xee,0x5c,0xa2,0x73,0x33,0x15,0x64,0x5a, + 0x58,0xdd,0xa8,0x20,0x75,0x3e,0x28,0xa6,0x7d,0x22, + 0x31,0xe0,0x5a,0xd2,0x90,0x28,0x9d,0xd7,0x24,0x60, + 0xb7,0xe8,0x1b,0x62,0x3f,0x7c,0xe2,0xa0,0x18,0x0e, + 0xc7,0x99,0x38,0x3a,0xc2,0x67,0xc0,0xf6,0x0d,0x09, + 0x39,0x51,0x4f,0x5a,0x89,0x8a,0x7a,0x5f,0xda,0x77, + 0xa7,0xfe,0x2a,0x69,0x8f,0x6c,0xdd,0xe9,0xe9,0x19, + 0x4f,0x55,0x8b,0xf3,0x8c,0x71,0x9c,0x10,0x25,0xa9, + 0x6e,0xaa,0xfd,0x09,0x56,0x26,0x32,0x6a,0x12,0xc9, + 0xa2,0x24,0x6f,0x41,0x94,0x3d,0x29,0xf0,0x50,0x62, + 0x1a,0x0e,0x85,0x58,0x5d,0xbb,0x04,0xb6,0x27,0x96, + 0xb2,0x96,0x0e,0x25,0x1c,0x97,0xd1,0x23,0x31,0xeb, + 0xf0,0xd0,0xf5,0x51,0xdb,0x32,0xb4,0x0f,0x0f,0xb5, + 0x70,0x87,0xa9,0xc9,0x33,0xdc,0x07,0x22,0x45,0x7f, + 0xa1,0xab,0x13,0xa7,0x57,0x84,0x6f,0x83,0xeb,0x63, + 0xe3,0x55,0x77,0x27,0x78,0xce,0x82,0x23,0xa9,0xdc, + 0x53,0x32,0x06,0x3a,0x2d,0x8f,0x9f,0x0d,0xad,0xbb, + 0xf4,0x3c,0xce,0x30,0x21,0x77,0x42,0x72,0x71,0x36, + 0x45,0x82,0x16,0x1b,0x20,0x5a,0x7a,0xa0,0xaa,0x26, + 0xc5,0x64,0x27,0xe8,0xf7,0x68,0xff,0x7c,0xca,0x67, + 0x71,0xa8,0x45,0x68,0x93,0xd9,0xa4,0x19,0x3a,0x1a, + 0xc7,0x1c,0xf2,0x87,0x86,0x01,0xb4,0x95,0x49,0x89, + 0x49,0xda,0x0f,0x3d,0xe6,0xd2,0xd4,0xa6,0x4b,0x22, + 0xb4,0x05,0xa5,0x31,0xe8,0xe6,0x4c,0x4d,0xb4,0x0b, + 0xb7,0xc6,0x27,0xc9,0x05,0xb2,0x3a,0x99,0x34,0x92, + 0x4c,0x61,0x8c,0xcf,0x8a,0xd0,0xc4,0xe9,0xdc,0x23, + 0x5b,0x8f,0x94,0x94,0xf6,0x98,0xf2,0x72,0x87,0xc4, + 0x90,0xe1,0x8e,0xad,0xaf,0xa4,0x68,0x49,0x81,0x8c, + 0x7a,0xaf,0x44,0xb0,0xa5,0x03,0x4d,0x7d,0x9f,0x88, + 0x10,0x45,0x4a,0xaa,0x29,0x59,0x4b,0xf0,0x26,0xb5, + 0xdf,0x2e,0x43,0x22,0x03,0x01,0x2a,0x57,0xb5,0x1f, + 0xe7,0x57,0x95,0x9c,0xc1,0x27,0xee,0x03,0xf5,0x93, + 0xdd,0xf5,0x6c,0xdf,0x3b,0xa0,0x6c,0xe4,0xa9,0xe4, + 0x90,0x97,0x03,0x68,0xd8,0xa1,0x76,0x14,0xb4,0x5c, + 0x0e,0xf0,0x36,0x88,0xac,0x6a,0x09,0x9f,0xaa,0x3e, + 0x6b,0x02,0xc6,0x11,0xbe,0x11,0x6a,0x66,0x08,0x12, + 0x77,0x54,0x3e,0x9e,0x5c,0xc5,0x1d,0x14,0x4d,0x49, + 0x0a,0xf1,0x17,0x14,0xb9,0x70,0xc8,0x60,0x28,0x7c, + 0xde,0xd0,0x98,0x54,0x71,0x25,0x14,0xd3,0x78,0x5b, + 0x3d,0x0e,0x04,0x07,0xbd,0x6f,0xe2,0x8b,0x1e,0x2a, + 0xe6,0xc0,0x3c,0xdf,0x09,0xeb,0x49,0x48,0x0a,0x48, + 0x78,0x1c,0xb7,0x3e,0xdc,0x41,0xfb,0xfd,0xf9,0x27, + 0xa9,0xad,0x2b,0xf7,0x2a,0x70,0xbf,0x26,0x13,0xcb, + 0x43,0x89,0xd8,0x90,0xfc,0x1c,0x27,0x5c,0xa8,0xd7, + 0x13,0x38,0x45,0x63,0x5c,0x4c,0x7f,0xe6,0x0a,0x27, + 0xd0,0x7d,0x39,0x9b,0x7d,0xad,0x9e,0x5b,0x54,0xf0, + 0x84,0x22,0xf6,0x1a,0x10,0x38,0x6c,0xff,0x84,0xf6, + 0xdf,0x21,0xd1,0x4a,0xe2,0xa0,0x12,0x6a,0x11,0x84, + 0x36,0x2d,0x48,0x71,0xaf,0x71,0x6a,0x4d,0x27,0x8f, + 0x38,0xd7,0x09,0x49,0x85,0xbc,0x79,0x9f,0x27,0xa1, + 0x49,0x6e,0x62,0x31,0xe9,0x7b,0x6d,0xd4,0xdb,0x43, + 0xfc,0x5c,0x0d,0xff,0xdc,0xcf,0xe6,0x37,0x1d,0xea, + 0x6d,0x73,0x14,0x5c,0x40,0xfd,0xad,0xd1,0x9c,0x72, + 0x6e,0x12,0x72,0x42,0x9c,0x16,0xaa,0x3e,0xbf,0xfb, + 0xb7,0x65,0xb2,0xcb,0x52,0xdf,0xb0,0x20,0x58,0xf7, + 0x38,0xd4,0x3a,0xd7,0xe5,0x3b,0xe0,0xba,0xd1,0xe9, + 0x28,0xfe,0x38,0x25,0x5b,0x53,0x3b,0x6c,0x42,0x49, + 0xdc,0x34,0x82,0x79,0x16,0x8f,0x56,0x82,0x4b,0x20, + 0xc3,0xb3,0xc6,0x51,0x77,0xd7,0xa7,0x7d,0xbd,0x5e, + 0x3f,0xcf,0x5d,0xf5,0x37,0x8c,0x95,0x44,0x6d,0xef, + 0x51,0x21,0x76,0xe2,0x83,0x69,0x92,0xe2,0x0e,0x14, + 0xd5,0x75,0x50,0x35,0x71,0xf5,0x81,0x9a,0x48,0xd4, + 0x7d,0xbd,0xea,0xe1,0xac,0x1c,0x34,0x6a,0xc3,0x7d, + 0x7d,0x7d,0x55,0x4f,0xe2,0xa1,0x27,0x4f,0x4a,0xd9, + 0xee,0x19,0x3e,0xb8,0x48,0xe9,0xb0,0x22,0x37,0xef, + 0xfb,0x03,0x36,0x6d,0xe3,0x54,0x75,0x4e,0x89,0x8d, + 0x3b,0xac,0x53,0x2b,0xbb,0x2b,0x51,0x4f,0x24,0x56, + 0x48,0x04,0x70,0x7c,0x3b,0x55,0xa6,0xfd,0xe0,0x49, + 0x05,0x9c,0x16,0x33,0x24,0x26,0x48,0xf6,0x0e,0xe4, + 0x9d,0x34,0x21,0x83,0xa9,0xed,0x7e,0x05,0x81,0xba, + 0xe0,0x63,0x76,0x88,0xd0,0x0f,0x55,0xfa,0x86,0xe8, + 0x6f,0xf9,0x40,0xe4,0x5b,0x15,0xb8,0x43,0xb1,0x8d, + 0x29,0x7b,0xc2,0x4e,0x6f,0x89,0xde,0x59,0x8c,0xd7, + 0x9f,0xc8,0x35,0xb8,0xf6,0x3b,0x39,0xba,0xd3,0x41, + 0x4f,0xa0,0xc4,0x14,0x8b,0xdd,0x9a,0x50,0x59,0x8e, + 0x7b,0x0f,0xa5,0xd1,0x75,0xfa,0xec,0x24,0xf8,0x98, + 0x3a,0x16,0x8e,0x67,0xa7,0x5c,0x25,0xf7,0x99,0x93, + 0x88,0x64,0x3a,0x5b,0xf5,0x9f,0xdf,0x09,0xd1,0x48, + 0x7d,0xc8,0x4d,0x52,0xd3,0x6f,0x8c,0xdc,0xcb,0x81, + 0x58,0x56,0x0a,0xef,0xd1,0xf7,0x4f,0xc6,0x72,0x13, + 0xe1,0xca,0x68,0x0f,0xc5,0xc4,0x62,0x32,0x73,0x4c, + 0x6d,0x83,0xd4,0xdf,0xdd,0x2c,0x32,0xe9,0x67,0x5b, + 0xd2,0xb4,0xdb,0xa0,0x49,0xf4,0x4b,0xd5,0xb8,0x15, + 0x6d,0x52,0x32,0xb4,0xab,0xe4,0xa7,0xfe,0xbc,0x26, + 0x2d,0xdf,0x81,0xbe,0xb6,0x6b,0x4a,0x55,0xb5,0xd5, + 0xa6,0x43,0x37,0xb3,0xaa,0x75,0x6b,0xb2,0x60,0xa0, + 0x5a,0x47,0xfa,0xc6,0xca,0xb6,0x27,0x31,0x4e,0xb5, + 0xbc,0x6b,0x58,0x29,0xf7,0x48,0xef,0xcb,0x3d,0x27, + 0xd1,0xf3,0xa8,0xc4,0x23,0xd2,0x9f,0xa3,0xa0,0x64, + 0xd0,0xc2,0xda,0xf2,0xb4,0xe8,0x20,0x76,0x2e,0xf1, + 0x0b,0x62,0x73,0x5c,0xfb,0x53,0xfb,0x80,0x60,0xc7, + 0x4f,0x12,0x31,0x78,0x9e,0x67,0x6b,0x38,0xaa,0x55, + 0xa4,0xd1,0xfb,0x72,0xbc,0xa3,0xc9,0xaf,0xeb,0xb8, + 0xa4,0x3e,0x21,0x98,0xcb,0x96,0xda,0x01,0xf2,0x7d, + 0x1a,0x42,0x21,0x33,0xd5,0x03,0x22,0x82,0x48,0x9e, + 0x86,0x78,0x3c,0x59,0x81,0xd8,0x0f,0x4e,0x9a,0x38, + 0x94,0x20,0x3a,0x64,0x8e,0xde,0x2d,0x75,0x30,0x4c, + 0x42,0x85,0xc9,0x4a,0xea,0x76,0xa4,0x89,0xaf,0x85, + 0xf1,0xb6,0x95,0x24,0x69,0xc5,0xe3,0xc3,0x3a,0xc7, + 0x9d,0x49,0xa9,0x6b,0x41,0xf2,0x06,0x84,0x6e,0xa7, + 0xdf,0x7f,0xbd,0x5e,0x47,0x13,0x1b,0x7d,0xb6,0x6e, + 0x62,0x97,0x4c,0x76,0xa7,0x96,0xfc,0x35,0x48,0x92, + 0xd0,0xb3,0x7e,0x69,0x70,0xd1,0xca,0x79,0xaa,0xbc, + 0x42,0x15,0x6c,0x7b,0x70,0x34,0x3a,0xee,0x7c,0x42, + 0x94,0x03,0x60,0xda,0x62,0x23,0xfc,0xe4,0x84,0xb9, + 0x74,0x04,0x35,0x91,0x13,0xf5,0x1a,0xe4,0xa5,0x5a, + 0xd3,0x54,0x22,0x3e,0xa7,0xb1,0x48,0x22,0x6c,0xd3, + 0x68,0x23,0x64,0xda,0x07,0x50,0x0c,0xd7,0x16,0x19, + 0x2d,0x2e,0xfa,0x33,0xa6,0x7b,0x74,0x1c,0x17,0xa7, + 0x2d,0x91,0x78,0x5d,0xd4,0x6b,0xd7,0x76,0x94,0xe3, + 0x24,0x41,0x3b,0xe6,0xed,0xbd,0x76,0xdd,0x16,0x25, + 0x86,0xa7,0xcd,0xe5,0x0c,0x08,0x0d,0x7a,0x74,0x08, + 0xc5,0x4b,0xe3,0xc6,0xc4,0x25,0x33,0xe8,0xd5,0x99, + 0x36,0x71,0x27,0x32,0x27,0xbd,0x2b,0x0d,0xa4,0xdf, + 0x6b,0x6b,0x6c,0x6f,0xa5,0x51,0x68,0x79,0xcf,0x3f, + 0xff,0xbb,0xff,0x5b,0x08,0xcf,0x5b,0x3e,0xc2,0xad, + 0x04,0xf9,0xf3,0xbf,0xfb,0x5a,0xe5,0x7b,0x30,0xf6, + 0xb8,0x43,0x0f,0xf4,0x5a,0x50,0x37,0x28,0x14,0x84, + 0x07,0xe2,0x89,0x0e,0x1e,0x3c,0xae,0x53,0xdb,0x8f, + 0xee,0xbd,0x49,0x55,0x7c,0x12,0xc2,0xa7,0xad,0x0f, + 0xdd,0x07,0x81,0x24,0x4d,0x13,0x76,0x6f,0x1c,0x18, + 0x1d,0x4a,0xa0,0x83,0xdf,0xa1,0x4b,0x80,0x64,0x9d, + 0xe9,0x5a,0x27,0xef,0xac,0xcb,0x13,0xb3,0x47,0x9e, + 0x96,0xb6,0x99,0xa7,0x36,0xd9,0x66,0xf8,0x66,0xf8, + 0xb3,0xe8,0xa0,0x4e,0x6e,0xf5,0x13,0x82,0x31,0x11, + 0xa7,0x53,0xa2,0x1c,0xe2,0x47,0x54,0x89,0x9e,0x2c, + 0x68,0xd2,0xd9,0xeb,0x34,0xf4,0x12,0xc2,0x3f,0x00, + 0x08,0x8f,0x61,0x13,0x63,0x0a,0x3d,0xca,0xb2,0xfc, + 0xec,0xc7,0xc4,0xa2,0x9e,0xfa,0xbb,0x13,0x41,0x52, + 0x91,0x83,0xbe,0xb1,0x53,0xcf,0x3a,0xe9,0xa1,0x24, + 0xa1,0x45,0xd2,0xac,0xa1,0xe0,0xed,0xf8,0x1d,0x74, + 0x3d,0x29,0x21,0x74,0x5e,0x64,0xb4,0x78,0x26,0xf6, + 0xfc,0xe6,0x90,0x20,0xa8,0x5e,0x3f,0x3f,0x55,0x7c, + 0x89,0x43,0x40,0x07,0x06,0x25,0xa3,0xba,0xb9,0x07, + 0x05,0x65,0x4b,0x34,0x9e,0x98,0xff,0x93,0x22,0x68, + 0x12,0xbe,0x74,0xc2,0x71,0xae,0x7c,0x98,0xda,0x01, + 0x1b,0x38,0x1a,0x0e,0xf3,0x34,0x3d,0x75,0xd2,0x24, + 0x12,0x1d,0xa4,0x89,0x73,0x36,0xb5,0xb7,0x4c,0x11, + 0x72,0xe8,0x3a,0x27,0x9d,0xb0,0x54,0x6d,0x19,0xf1, + 0xca,0xb7,0x84,0xa8,0x11,0x93,0xdf,0x26,0xc1,0x68, + 0x6f,0x6f,0xff,0x49,0x45,0xdb,0x9d,0x54,0x1e,0x66, + 0x27,0x23,0x37,0xa2,0x27,0x3e,0x8b,0xd8,0x17,0x05, + 0xed,0x94,0xa3,0x41,0x64,0xe3,0xe1,0x70,0x39,0xce, + 0x8f,0x4a,0xb9,0x3d,0xc9,0xb7,0x6b,0x7b,0xb8,0x0f, + 0xe2,0xb0,0x2b,0x62,0xb3,0x8a,0x40,0x12,0x82,0xec, + 0x92,0xae,0x64,0x61,0x44,0x53,0x51,0x5f,0x5f,0x5f, + 0x47,0x09,0xd0,0x49,0x46,0xa1,0x9f,0x4d,0x8d,0xe6, + 0x60,0xf7,0xd7,0x30,0x44,0x41,0xc6,0xe1,0x97,0x3b, + 0xbc,0x13,0x52,0xab,0xdf,0xad,0x13,0x76,0x0e,0x04, + 0x08,0xea,0xfd,0x91,0x4f,0x43,0xa3,0xf3,0xb4,0xbf, + 0x3a,0x52,0xed,0x44,0x70,0xd3,0x24,0x96,0xfe,0x9d, + 0xb3,0x3a,0xfa,0x84,0x8b,0x34,0xe5,0x2e,0xf4,0x0e, + 0x5e,0x1d,0xca,0x9d,0x0e,0x65,0x0a,0xf6,0x53,0x70, + 0xea,0x37,0x37,0xa9,0xbe,0x12,0x62,0xe4,0x46,0xf8, + 0x28,0x83,0xa5,0xca,0x1b,0x0e,0x51,0x5b,0x0d,0x90, + 0x04,0x7b,0x5a,0xf0,0xe9,0x70,0x9a,0xc4,0xfa,0x06, + 0xc4,0xe4,0x4c,0xed,0xc9,0x94,0x14,0x74,0x12,0x28, + 0xc1,0xea,0xe1,0xf0,0x7d,0x7b,0x67,0xda,0x32,0x70, + 0x63,0xa3,0x4e,0x78,0x6f,0xea,0xd1,0x26,0x62,0xb2, + 0xab,0xda,0xe8,0x5d,0xb5,0x2a,0xfc,0xf4,0xf6,0x18, + 0x11,0x4d,0x49,0xca,0x5d,0x03,0x64,0x17,0xd2,0x32, + 0x3c,0xa4,0xd3,0xc9,0xbc,0x84,0x3e,0x26,0xc1,0x4d, + 0x5d,0xf3,0xb0,0xa9,0x1f,0xe2,0x67,0x84,0xa4,0x39, + 0x12,0x7b,0xe2,0xdc,0xb4,0x7b,0x3c,0xc4,0xaf,0xd8, + 0x90,0xe2,0x27,0x12,0xe2,0x66,0x6c,0x37,0xb5,0x89, + 0xd3,0x74,0xa7,0x29,0xb0,0x34,0xe1,0x8e,0xc8,0x51, + 0x28,0x96,0xde,0x7e,0xcf,0xf1,0xe7,0x5c,0x32,0x99, + 0x90,0x4f,0x42,0x42,0xd2,0x9e,0x37,0x6d,0x5b,0x3b, + 0xa6,0xdc,0xe3,0x1f,0x5c,0xdf,0x1b,0x19,0x5e,0x39, + 0x41,0xa4,0x54,0xed,0x1e,0x1b,0x1c,0xfa,0x24,0xc2, + 0x78,0x48,0xeb,0xad,0x5f,0xc7,0xbd,0x7f,0x81,0xfa, + 0xe0,0xf4,0x84,0x4e,0x92,0x00,0x70,0x71,0x7c,0x23, + 0x1a,0xb9,0x6d,0xd1,0x82,0x62,0xfb,0x49,0xc5,0xce, + 0x34,0x35,0xf6,0xa9,0xe8,0x70,0x2a,0x5c,0x26,0xca, + 0x02,0x51,0x42,0x36,0x5a,0x60,0x30,0xfd,0x7b,0x26, + 0xb4,0x8a,0x62,0xe3,0xb4,0x27,0xb7,0x9a,0x84,0x83, + 0x72,0xf8,0xbf,0x66,0xa8,0xca,0xdf,0x01,0xdb,0x90, + 0x72,0x09,0x81,0x73,0xae,0xbe,0x8c,0xc8,0x60,0x22, + 0x6c,0x4e,0x07,0xf9,0x02,0x39,0x79,0xf3,0x94,0x22, + 0x34,0x26,0x7d,0x07,0x89,0xf8,0x4d,0x42,0x8b,0xa6, + 0x37,0xfc,0xa3,0xc8,0xa9,0x9c,0x08,0x27,0xa4,0xe7, + 0x3e,0x83,0xb8,0x49,0x57,0x23,0xc6,0xa6,0x77,0xd3, + 0xcd,0x36,0xdd,0xb3,0x33,0x9b,0xb4,0x4c,0xb2,0x55, + 0x4e,0x98,0x90,0x78,0x49,0x82,0x3a,0x1d,0xe0,0xa3, + 0x3c,0x48,0xef,0x8e,0x07,0xd3,0xef,0xcb,0x6c,0x74, + 0x72,0x68,0x27,0x83,0xba,0xe4,0x9c,0x6e,0x7f,0xad, + 0xff,0xa1,0xe9,0x61,0x3f,0x9e,0xad,0x09,0xa2,0x15, + 0x94,0x69,0x6b,0x40,0x54,0xcf,0x05,0x24,0xe5,0x1f, + 0xe1,0xae,0x6f,0x91,0x36,0x67,0xf8,0x9a,0xa6,0x03, + 0xfb,0x5e,0x75,0xc3,0x00,0x29,0xe1,0x9c,0xb8,0x48, + 0x34,0x59,0x33,0x8d,0xad,0x06,0x72,0x77,0x2c,0xa6, + 0x9c,0x39,0xa9,0x7b,0x8f,0x8e,0x74,0x9c,0xd6,0xee, + 0xc4,0x0b,0xa2,0xe4,0xb3,0x1f,0xc2,0xea,0x01,0x68, + 0x9e,0xc5,0xa1,0x44,0x8b,0xc8,0xce,0x4e,0xe7,0x29, + 0x21,0x9c,0x01,0x1d,0x45,0xe2,0x30,0xa9,0xeb,0x4f, + 0x93,0x98,0xa9,0x58,0x23,0xb3,0x53,0x23,0xe4,0x3a, + 0xd2,0x2c,0xc8,0xa6,0xc7,0x15,0x02,0xf4,0x1c,0xa8, + 0x70,0x76,0xef,0xa3,0xb7,0x16,0x45,0xe3,0x29,0xa2, + 0x86,0x9a,0xa0,0x2f,0x26,0xa0,0x8f,0x21,0x6c,0xbb, + 0xef,0x3e,0x24,0xe8,0x47,0xbc,0xa7,0x64,0xaf,0xa4, + 0xeb,0x81,0x26,0x34,0xdb,0xf9,0x78,0x40,0xdb,0x2b, + 0x1a,0x74,0x13,0x19,0x9e,0xd6,0xb6,0x13,0x74,0x9c, + 0x14,0xcb,0x2f,0x98,0xb4,0xa3,0xc2,0xbb,0x17,0x93, + 0xaf,0x0d,0x9c,0x17,0x36,0x33,0xa2,0x12,0x44,0x60, + 0x4a,0xbc,0x9e,0xa9,0xaf,0xea,0xc6,0xc7,0x07,0xdf, + 0x23,0xab,0xe9,0xb3,0x84,0xce,0x6d,0xa5,0x60,0x5e, + 0x08,0x7a,0x31,0x39,0x1d,0x93,0x04,0x41,0xa6,0x05, + 0x4c,0xd5,0xb7,0x6e,0xce,0x64,0xda,0x38,0xc1,0xfc, + 0x29,0x83,0x76,0x08,0x98,0x33,0xbf,0xfb,0x40,0xaa, + 0xfe,0xf1,0x4c,0x9d,0x26,0x8e,0xd1,0xdc,0xa1,0x6a, + 0xed,0x04,0xbe,0xc6,0xca,0x27,0x47,0xef,0x15,0x2a, + 0xb5,0xe3,0x10,0xaf,0x09,0x29,0x74,0x63,0xd0,0x49, + 0xaf,0x26,0x21,0x72,0x9b,0x36,0x06,0xf1,0x5d,0x82, + 0x17,0x9a,0x45,0x5b,0x7a,0x92,0xd9,0x38,0x33,0x1f, + 0xf3,0x02,0x53,0x31,0x92,0x5a,0x84,0x13,0x6f,0x4c, + 0xf7,0xfc,0xb7,0x35,0xca,0x49,0x13,0x44,0x69,0x4f, + 0x35,0x58,0xff,0x6c,0xbc,0xa4,0x5c,0xeb,0x37,0xf0, + 0xa6,0x8e,0x9b,0x7a,0xd1,0xd6,0x76,0x8a,0x4d,0x10, + 0xd7,0xf0,0x90,0x73,0x1c,0x17,0xe2,0xef,0x41,0xc1, + 0x31,0x0a,0xe4,0x51,0xb5,0xee,0x3c,0xdc,0x1c,0x79, + 0x5a,0xf7,0x51,0xf2,0x8f,0x32,0xed,0x13,0x9c,0xc2, + 0xa3,0x58,0x2d,0xc9,0xcf,0x63,0xaf,0xbb,0x2e,0x45, + 0xbf,0x5e,0x1d,0xbb,0x57,0x04,0x92,0x92,0x46,0x45, + 0x27,0x87,0x89,0xb8,0xcd,0x9e,0x3a,0xcb,0x73,0x13, + 0xa9,0x2b,0x53,0xd1,0xa1,0xef,0x66,0x23,0x52,0x98, + 0x10,0xa6,0x09,0xe9,0x1d,0x2c,0x45,0x4e,0x42,0x89, + 0x26,0x74,0xd9,0xa9,0x5e,0xff,0x3a,0xe7,0xfc,0x6f, + 0xd7,0x75,0xfd,0xcf,0xd7,0x75,0xfd,0xf7,0xd4,0x77, + 0x27,0xdf,0xa9,0x04,0xab,0xbb,0xd1,0x6a,0x73,0xb0, + 0x47,0xf6,0x3c,0x55,0x90,0x74,0xb8,0x4f,0x09,0x8e, + 0x72,0x76,0x36,0x10,0xda,0x06,0x4d,0xda,0xb0,0xfb, + 0x5d,0xeb,0x65,0xab,0xb3,0x11,0x7e,0x67,0x24,0xd5, + 0xb9,0x8a,0x99,0x0e,0xd6,0xde,0x3e,0x4a,0xc1,0xc4, + 0x29,0xc5,0xa6,0xf6,0x98,0x83,0x8a,0x07,0xa7,0xe3, + 0xb1,0xbf,0x9b,0xaa,0xc1,0x69,0xd3,0xeb,0xfb,0x00, + 0xbe,0x0a,0xbd,0x87,0x93,0x44,0xbd,0xe0,0x9d,0x60, + 0x95,0x0c,0xda,0x2b,0x67,0xf1,0x1c,0xe2,0x61,0xaf, + 0xad,0xbf,0x76,0xa8,0x1d,0xe5,0xc5,0x2c,0x03,0xc7, + 0x5b,0x9b,0xa7,0xab,0x3a,0x6f,0x46,0xcf,0xc3,0xa1, + 0x3f,0xee,0x05,0x27,0x6e,0xf6,0x8d,0x86,0x59,0x2f, + 0x30,0xdd,0xe3,0x53,0x7c,0x39,0xe2,0x3e,0xeb,0xd6, + 0x8c,0x79,0x4e,0x8f,0x67,0x49,0x87,0x51,0x47,0x14, + 0xb4,0xdd,0x43,0xad,0x03,0x13,0x4b,0x8f,0xe3,0xd5, + 0xb8,0xd6,0xb1,0xab,0xd4,0x49,0x01,0x7a,0x6a,0x9d, + 0x9b,0x7b,0x5a,0xab,0x3b,0x06,0x13,0x51,0x5b,0x94, + 0x05,0x29,0x82,0x03,0x49,0xc1,0x21,0x31,0x48,0xd7, + 0xfa,0xdb,0x5c,0xb3,0xc6,0x4f,0xa2,0x2c,0xb8,0x77, + 0x42,0xf7,0x7b,0x19,0x0b,0x95,0x5e,0x4c,0xc8,0x1e, + 0x3b,0xa9,0x20,0xa7,0x7b,0x77,0x08,0x63,0x42,0x05, + 0x9d,0x74,0x82,0x6b,0x91,0xa6,0xf7,0xf4,0x70,0x57, + 0xff,0x46,0xa8,0x09,0xd5,0x04,0xa9,0x96,0x68,0x81, + 0x43,0xaa,0xe4,0x8d,0x53,0xb6,0x22,0xdc,0x0b,0x90, + 0xf1,0x9f,0xae,0xeb,0xfa,0x2f,0xbf,0x0d,0x6a,0x52, + 0xc6,0x50,0xf4,0xad,0xf5,0x20,0x0f,0xab,0x00,0x5e, + 0x2a,0xa8,0x6e,0xcb,0x31,0xc9,0xcd,0x06,0xb4,0x63, + 0xdd,0xdb,0x9e,0x64,0xd0,0x80,0x78,0x1b,0x93,0x76, + 0xba,0x2d,0x44,0x28,0x6e,0x93,0x5a,0xb6,0xbd,0x65, + 0xfa,0xf0,0x35,0xf5,0x2c,0xb5,0x8d,0xa7,0xed,0x1b, + 0xc3,0x15,0xb1,0x5e,0x55,0x34,0xc2,0x7f,0x3f,0xe7, + 0x66,0x60,0x59,0x86,0xf0,0x56,0xe9,0xa0,0xd2,0x96, + 0x99,0x1e,0x04,0x70,0x90,0x39,0xbf,0x35,0xd4,0x9b, + 0xea,0xd2,0x07,0x32,0x01,0x53,0xd4,0xbe,0x72,0x5c, + 0x05,0xe7,0xc9,0xd5,0xfd,0xb8,0xdc,0x44,0xdc,0xeb, + 0xf5,0x22,0xed,0xa6,0x87,0xac,0x03,0x3d,0x37,0x08, + 0x4e,0x45,0xbc,0x04,0x1d,0x93,0xa7,0x8a,0x47,0x47, + 0xdc,0xa9,0x0d,0xfc,0xfd,0xc3,0xb5,0x51,0x52,0x35, + 0x44,0xc7,0x72,0x9a,0x58,0xae,0xd2,0xa7,0x04,0xa2, + 0x5b,0x9a,0x24,0x99,0xfb,0xd4,0x1a,0x4b,0xc4,0x54, + 0x42,0x96,0x29,0x0e,0xa8,0xb8,0x22,0x54,0xad,0x67, + 0x42,0xba,0xa9,0x8d,0x45,0x71,0x69,0xb2,0x25,0x81, + 0xd6,0xfe,0x71,0xa3,0xd2,0x7a,0x20,0x2c,0x3c,0xdd, + 0x68,0xcf,0xbe,0x79,0x14,0xb6,0xef,0x39,0xc1,0xc0, + 0xf6,0xc1,0xa1,0x23,0xdf,0x37,0x2a,0xee,0xd4,0x2f, + 0x8b,0x90,0xef,0xd4,0x5a,0x0b,0xfb,0xc7,0x2a,0x34, + 0x5f,0x20,0xb0,0xe8,0xb8,0x7b,0x6a,0x08,0x3c,0xf0, + 0x5f,0x0f,0x25,0x96,0x44,0x9f,0x48,0x3e,0x5a,0xed, + 0x3c,0x79,0x9c,0x7b,0xae,0x95,0x93,0x5a,0xb1,0xdb, + 0x51,0x77,0x4a,0x12,0x7b,0x42,0x61,0x54,0xb0,0x11, + 0xa9,0x74,0x3e,0x77,0xb0,0x46,0x1f,0xea,0xd1,0xd3, + 0xf4,0x5b,0x12,0x48,0x74,0xbc,0x4d,0x2a,0xb6,0x03, + 0x81,0xbe,0xaa,0xea,0x1f,0x0e,0x50,0xb2,0x69,0x98, + 0xfc,0x9f,0x1c,0x97,0x65,0x53,0xf9,0x99,0x8c,0xac, + 0x9c,0xc5,0x86,0x09,0xcc,0x6f,0x1a,0x38,0xee,0x60, + 0xe8,0xe4,0x54,0xc3,0x3b,0x41,0xa4,0x6a,0xea,0xaf, + 0x3a,0x7e,0x51,0x52,0xcb,0x06,0x6e,0x81,0xe5,0xa5, + 0x7c,0x62,0xe0,0x37,0x49,0x9c,0xab,0x86,0x8f,0x23, + 0x2a,0x6b,0xc2,0xea,0xcc,0x61,0x35,0x99,0x08,0x81, + 0xe9,0x91,0x58,0xd1,0xb5,0x06,0xe3,0xd0,0x37,0x43, + 0xd8,0x94,0x4c,0x13,0x07,0xcd,0x25,0x93,0x1b,0x0d, + 0x27,0xe2,0x38,0x29,0x77,0xc7,0x55,0x5b,0xaa,0x67, + 0x24,0xef,0xf2,0xc1,0xe9,0xd1,0xdf,0xd7,0xef,0x0d, + 0x4a,0xab,0x9b,0x77,0x71,0xbe,0x83,0x58,0x0d,0xc6, + 0xa4,0xa9,0xa2,0xaf,0x84,0x1e,0x12,0xb7,0x8c,0xcc, + 0x7f,0xdd,0x3f,0x5d,0x4b,0x46,0x0f,0xa9,0xe4,0x28, + 0x4f,0x7c,0x83,0x34,0xf0,0x30,0xe9,0xd9,0x24,0xa4, + 0x4a,0x27,0x88,0x2e,0xd0,0x1a,0x21,0x3f,0xb6,0xa4, + 0x3a,0x4c,0xda,0x2a,0x74,0xc8,0xa6,0x16,0x32,0xc5, + 0x24,0xf7,0x4c,0xba,0x24,0xc4,0xf4,0x99,0x4e,0x07, + 0x26,0x91,0x77,0xb7,0xba,0x36,0x2a,0xf8,0xa8,0x49, + 0x14,0x71,0xb1,0xc8,0x7c,0x93,0x92,0x51,0x8a,0xe3, + 0x34,0xe2,0xad,0x4a,0xdb,0x7d,0x9a,0x6c,0x6b,0x7a, + 0x0a,0xc3,0x07,0xae,0x6d,0x7f,0xa6,0x75,0x6d,0x04, + 0x14,0xdf,0x92,0x22,0x53,0x84,0x1e,0xe2,0x95,0xa6, + 0x36,0x54,0x3b,0x13,0x1e,0x2e,0xef,0x4e,0xfb,0x6d, + 0x6a,0x5b,0xf5,0x73,0x78,0xa2,0xca,0x68,0x5c,0xe8, + 0x9e,0x6d,0x32,0xe2,0x3e,0xfa,0x87,0x26,0x90,0x41, + 0x93,0xae,0x1f,0xcd,0xb6,0x4d,0xcb,0x68,0x08,0x3e, + 0x67,0xe0,0x1e,0x44,0xdb,0x8b,0xbe,0x31,0x5d,0x60, + 0x4e,0xa2,0x80,0x4e,0x0b,0xc0,0x05,0xaf,0xd0,0x4f, + 0x7f,0xcb,0x24,0x27,0xe2,0x18,0x55,0x22,0x3d,0xe3, + 0x54,0xc4,0x66,0xd3,0x97,0xa4,0x40,0x52,0x55,0xe7, + 0xcf,0x9f,0x3f,0x0f,0xa3,0x51,0x17,0x38,0x3e,0xf8, + 0x8e,0xf3,0x29,0x7f,0x43,0xab,0x66,0x82,0xfb,0xc9, + 0x7c,0x95,0xaa,0x0f,0xe2,0xb5,0xb8,0x83,0x3b,0xf1, + 0xa7,0x9c,0xc8,0x20,0xd8,0x43,0xd8,0x3f,0xa7,0x29, + 0xb3,0xfe,0x79,0x7d,0x7d,0x4e,0x01,0xd3,0x71,0x0c, + 0x34,0xb0,0xc8,0xfb,0xb0,0x63,0xf6,0x06,0x65,0x44, + 0x41,0x3c,0xf9,0xec,0xe3,0x0e,0x38,0xe2,0xfe,0x98, + 0x84,0xef,0xa8,0x8c,0x82,0x9b,0x04,0xd4,0xcf,0x27, + 0xe2,0xe2,0xa4,0x08,0x3d,0x11,0x95,0xa7,0x3d,0xb8, + 0x6d,0xdb,0xb5,0x76,0xd9,0xb8,0xf6,0xa5,0xe5,0x75, + 0xdc,0xbe,0x23,0xa3,0xc7,0x34,0x31,0xea,0xec,0x66, + 0x8c,0x36,0x10,0x72,0x3c,0xd2,0xa8,0x74,0xe2,0xd8, + 0xa4,0x04,0x41,0xdb,0x6c,0x54,0x08,0x04,0x91,0xba, + 0x03,0xd3,0xbd,0x87,0xf4,0x66,0x0c,0x97,0x86,0x54, + 0x8d,0xdf,0x0e,0xf5,0xde,0x32,0x4c,0xc9,0xcf,0x94, + 0x80,0x5c,0x20,0xf9,0x91,0xa6,0x5f,0x95,0x0b,0x98, + 0x7c,0xb0,0x86,0x18,0x4a,0x05,0xc9,0xd9,0xa0,0x9b, + 0x74,0xaf,0xee,0x3c,0x1c,0x48,0xf1,0x76,0xff,0xb9, + 0xd6,0xe3,0x04,0x6a,0xa4,0x04,0xd9,0x15,0x40,0x6d, + 0x98,0xc3,0xbe,0x77,0xd0,0xbc,0xb2,0x85,0x87,0xcb, + 0x07,0xee,0x78,0x94,0x62,0xdf,0xcf,0x18,0x3c,0x41, + 0x88,0x06,0xb2,0xb7,0x5f,0x04,0x87,0xfc,0x99,0xa0, + 0xb7,0xe9,0x25,0xeb,0xa6,0xa2,0xf1,0x5a,0xa7,0x7b, + 0xd1,0x83,0xb7,0x7b,0xa9,0xce,0xad,0x78,0xe1,0xf8, + 0x6e,0xcf,0x6a,0x73,0x28,0x62,0x25,0x1a,0xaa,0xaf, + 0xe3,0x78,0x56,0x6a,0x2e,0xa8,0x87,0xa8,0x23,0x03, + 0xea,0xa1,0x3e,0xf1,0x69,0x82,0x68,0x1f,0x05,0x58, + 0xc7,0x9d,0x39,0x40,0x44,0x3b,0x09,0xe2,0xa4,0x6c, + 0x9d,0x10,0x0a,0xa7,0xb4,0x0b,0x30,0xef,0x71,0x3a, + 0x13,0x5a,0x25,0x7d,0x6f,0xc6,0xb7,0xe4,0x92,0xbc, + 0xa5,0x42,0xf2,0x70,0x9c,0xf2,0xaa,0x54,0x66,0x96, + 0x2b,0xb2,0xe1,0xfc,0x2c,0x4d,0x5f,0x29,0xf0,0x9f, + 0xa4,0x9f,0x92,0x14,0xb8,0x85,0xe3,0x73,0x9c,0xce, + 0x87,0xca,0x53,0xa8,0x26,0x4d,0xa8,0x94,0xc7,0x44, + 0x26,0xa9,0x8a,0xbb,0x43,0x55,0xf7,0x93,0x8a,0x26, + 0x8a,0xac,0xc1,0x95,0xe0,0x77,0xe5,0x58,0x4d,0x68, + 0x4e,0xe3,0xcc,0x1c,0x6d,0xe1,0xc1,0x41,0x71,0x12, + 0x1a,0xed,0x0a,0x32,0x32,0x8e,0x06,0xc4,0xf0,0x80, + 0x99,0xec,0x43,0x6b,0xe9,0xde,0x03,0x21,0x66,0xc7, + 0x56,0x0a,0xf0,0x41,0x89,0xb0,0x4a,0x28,0xd2,0x21, + 0xc1,0xcd,0x0d,0x6f,0x27,0xf8,0x4e,0x4e,0x05,0x8a, + 0x35,0x7f,0x25,0x94,0x23,0xf9,0xdd,0xf5,0x77,0xa2, + 0xb6,0x17,0x9f,0x9c,0x33,0x1a,0x83,0x93,0x39,0xeb, + 0xc6,0xca,0xc6,0xad,0x01,0x67,0x43,0xe2,0x92,0xbd, + 0x20,0x0b,0x31,0x76,0x43,0xd2,0xbb,0x72,0xc5,0x92, + 0x13,0x57,0xd4,0x16,0x31,0xf9,0x79,0xaa,0xf5,0x4b, + 0x12,0x74,0x7d,0xf3,0x45,0x74,0x0b,0x9d,0x7c,0x46, + 0x92,0x09,0xde,0x56,0xac,0x0c,0x5c,0x87,0xd7,0x04, + 0x59,0x37,0xd1,0x40,0x59,0xb6,0x7b,0xd9,0xe9,0x5a, + 0xfa,0x62,0x4b,0x42,0x53,0xee,0x41,0x06,0x6f,0x14, + 0x7a,0x49,0x28,0xd0,0x98,0x50,0x8f,0xae,0x18,0x0d, + 0xd3,0x53,0xc8,0xd3,0xd0,0x60,0xe3,0xae,0xd9,0xc8, + 0xb5,0x9f,0x64,0xd1,0xa1,0x0b,0xf5,0x03,0x8d,0x17, + 0x54,0x77,0x86,0xf5,0x74,0xb4,0x2a,0xd3,0x24,0x8f, + 0x82,0xd7,0x1d,0xe0,0x8d,0x7d,0xc4,0x8f,0x19,0x67, + 0x3f,0xc4,0x02,0x42,0x10,0xa7,0xb3,0x9c,0x4b,0xb7, + 0xfb,0xfd,0xa0,0x82,0x6a,0x35,0x78,0x4c,0x7b,0xc9, + 0x9a,0x6f,0x86,0x09,0x96,0xb7,0x24,0x26,0x21,0xa7, + 0x03,0x6f,0x06,0x49,0xc7,0x8b,0x36,0xe3,0x35,0x21, + 0xc5,0x84,0x0e,0xa7,0x16,0xbb,0xa0,0x68,0xc7,0x25, + 0x9b,0x26,0xd6,0xc4,0x44,0xaa,0xa9,0x50,0xc7,0xfb, + 0x90,0x76,0xf3,0x99,0x2c,0x67,0x94,0x5b,0x43,0x93, + 0x57,0xb7,0xab,0xfa,0x90,0xd8,0x62,0xbc,0x0b,0x95, + 0xf4,0x09,0x5c,0x91,0x33,0xdc,0xdf,0x03,0xed,0xba, + 0x91,0x1f,0x83,0xfe,0x45,0x84,0x57,0x26,0xbe,0xb0, + 0xf8,0xbb,0x40,0xff,0x0c,0xa6,0xf9,0xb0,0x4d,0x45, + 0x93,0x9a,0x93,0xa8,0xee,0x3d,0xd1,0x65,0x0a,0xe9, + 0xb5,0x56,0x5b,0xd2,0xc9,0xd1,0x56,0x7f,0x4a,0x86, + 0x82,0x54,0x43,0xe2,0x54,0x1d,0x45,0xb1,0xa0,0xc0, + 0x44,0xda,0x46,0x6a,0xa3,0xa7,0x8e,0x4e,0x38,0x7b, + 0x6c,0x37,0xc9,0xb5,0xf5,0x5c,0x72,0x34,0xc5,0x96, + 0x21,0x4f,0x79,0xe4,0x18,0xaf,0xd4,0xae,0xa2,0x83, + 0x38,0x5d,0x24,0x98,0x3f,0x3a,0xc4,0x61,0x25,0xf4, + 0xd4,0x0f,0xb8,0x24,0x82,0x48,0x4e,0xe9,0xa6,0x3d, + 0xf2,0xf6,0xe7,0xee,0xe7,0x93,0x15,0x00,0xb5,0x71, + 0x92,0x65,0xc3,0x64,0xee,0xd7,0xab,0x3e,0xc7,0xcf, + 0x71,0x22,0x7b,0x50,0x21,0xbb,0x64,0x6b,0x94,0x0e, + 0x68,0x95,0xaa,0xd5,0x28,0x71,0x68,0x1f,0xf5,0xe0, + 0x21,0x89,0x8b,0x68,0x20,0x05,0x88,0x89,0x0f,0x41, + 0xda,0x27,0x9a,0x64,0x41,0x50,0x3c,0xb4,0xb6,0x7b, + 0x12,0x44,0x95,0x2a,0x21,0x12,0xd7,0x60,0xc8,0xe9, + 0x26,0x7d,0x28,0x09,0xd4,0xde,0x3f,0x7c,0xd6,0x63, + 0x7f,0x90,0xdf,0x9e,0x8a,0xfa,0xa5,0xd1,0x73,0x33, + 0xdd,0x41,0xef,0xa3,0x0f,0x50,0x1d,0xf2,0xc5,0x9a, + 0x8a,0x15,0xf7,0xf7,0x9d,0x7c,0xab,0xe8,0xc6,0x25, + 0x4e,0xf5,0x93,0x38,0x29,0x4d,0x05,0xca,0x5a,0x3c, + 0x57,0x76,0x54,0xb7,0x23,0xf3,0xd4,0xde,0x24,0x34, + 0x2e,0x24,0x5f,0xe7,0x13,0xf4,0xc3,0xa9,0x14,0x87, + 0xaa,0xff,0x81,0x7e,0x69,0x91,0x07,0x3c,0xc6,0x9f, + 0x36,0x9d,0x1b,0xff,0x4e,0xef,0x74,0x12,0xfa,0xa3, + 0x42,0x97,0x26,0x97,0x36,0xb6,0x11,0x14,0x77,0xa6, + 0xd6,0x94,0x22,0xd8,0x3a,0xe5,0x44,0x2d,0x60,0xe2, + 0xbf,0x90,0xed,0xc7,0x27,0x5e,0x95,0x57,0x70,0x59, + 0xa7,0x8e,0x89,0x4b,0xfe,0xdc,0x64,0x94,0xee,0x6d, + 0xa0,0xa1,0x9c,0xa4,0x71,0x24,0x7f,0x7e,0x08,0x38, + 0x31,0xed,0xbb,0xa3,0x7b,0xdb,0xa1,0xac,0x49,0xc8, + 0x75,0x32,0x3d,0xa6,0x18,0xa0,0x43,0x4e,0xaf,0x69, + 0xaa,0x42,0xa5,0xdb,0xdd,0x4b,0x50,0x3f,0x9a,0xa9, + 0x52,0xe9,0xca,0xc4,0x09,0x01,0x71,0xb0,0xba,0xb6, + 0x77,0x36,0x1a,0x06,0x97,0x8c,0xf6,0x39,0x18,0x71, + 0x98,0x30,0x39,0x14,0x3c,0x92,0xf5,0x82,0xe3,0x89, + 0x28,0xdc,0xbc,0xd4,0x47,0x3a,0xbd,0x5d,0x93,0x10, + 0x14,0x72,0x3c,0x9f,0xc4,0xd4,0x28,0x40,0x86,0xb1, + 0xce,0x58,0x9d,0x1a,0x02,0xed,0xd9,0xb4,0x13,0x5d, + 0xa2,0x91,0x12,0x17,0xf7,0x8e,0x26,0x95,0x57,0xfd, + 0x3b,0xdd,0xd8,0x5d,0xcb,0xc3,0xad,0x11,0x97,0xa0, + 0x25,0xd1,0x2f,0xa7,0xa9,0x44,0x55,0xbe,0xfa,0x4d, + 0x4d,0xfa,0x38,0xfd,0xf3,0xa8,0x48,0x00,0xdb,0x8e, + 0xd3,0x5b,0x36,0x93,0x95,0xc1,0x46,0xae,0xa0,0xbd, + 0xe7,0xf3,0x4d,0x5a,0x7c,0x24,0x48,0x0d,0x89,0x7a, + 0xf3,0x0a,0x33,0x3e,0x5f,0x6f,0xbf,0x43,0xc8,0x4e, + 0x4a,0xb0,0x08,0x41,0x32,0x0a,0xdc,0x67,0x72,0xf2, + 0xd6,0x76,0x71,0xbb,0x5e,0xbb,0x0e,0xe4,0x10,0x3d, + 0xae,0x75,0x2b,0xbf,0x77,0x5c,0x1b,0x58,0x6d,0x38, + 0x42,0xe2,0x8a,0x13,0x6d,0xfd,0x5a,0x41,0x21,0xdb, + 0x1e,0xa2,0xae,0x2d,0xa5,0x6d,0x2f,0x47,0x58,0x06, + 0xe4,0x83,0xa4,0x1f,0x0e,0x59,0x59,0x24,0x04,0xd6, + 0xed,0x47,0x27,0xfd,0x40,0xbc,0x29,0x7d,0xf6,0x2e, + 0x16,0x83,0x0b,0xc1,0x49,0xd2,0x22,0x0e,0xd9,0x23, + 0x14,0xb8,0x27,0x0f,0x84,0x70,0x68,0xab,0x79,0x42, + 0x9f,0x26,0x64,0x1c,0xd0,0x5d,0x6c,0x7d,0x52,0xb0, + 0x26,0x6e,0xab,0xe3,0xf0,0xa6,0x64,0x9c,0x12,0xc2, + 0xc9,0x66,0x67,0x89,0xcc,0xc6,0x49,0xbc,0xeb,0xfa, + 0x76,0x83,0x37,0x70,0xd5,0x38,0x75,0x62,0x92,0x8c, + 0xa8,0x2c,0x9b,0x7a,0xa0,0x52,0x4d,0x15,0x69,0xac, + 0x6c,0x08,0x56,0xdf,0x0f,0xfd,0x6d,0x54,0xfb,0x1e, + 0x03,0x4f,0x24,0x32,0x09,0x34,0xa5,0x6d,0x05,0x80, + 0xff,0xdc,0xa4,0xd4,0x63,0x74,0x5a,0x33,0xed,0x3e, + 0x51,0x66,0x5a,0x1d,0x76,0xea,0x88,0x7c,0x7d,0x5c, + 0xd0,0x4d,0xc9,0xac,0xf6,0x50,0xfb,0xc4,0x50,0x4b, + 0x96,0xc6,0x77,0xdf,0x27,0xae,0x1c,0xf1,0xee,0xfe, + 0x8c,0xfe,0xec,0x4d,0xe5,0xd9,0x93,0xe8,0x71,0xdc, + 0x7a,0xaa,0x02,0xfa,0xd8,0xba,0x41,0x54,0x0a,0x82, + 0xd5,0x43,0xa1,0x5b,0xf7,0x01,0x3c,0x7f,0x9c,0x7c, + 0x6b,0x81,0xbd,0x52,0x90,0xe8,0x8a,0xe1,0xc4,0x8b, + 0xea,0xd7,0xb7,0x15,0x95,0xbc,0x60,0xca,0x30,0xed, + 0x99,0xf6,0x73,0x45,0x42,0xa6,0xb4,0xff,0xa7,0xf7, + 0xb6,0xa8,0xf6,0x6d,0xe0,0x75,0x08,0x92,0xe3,0xf6, + 0x6d,0x3d,0xf5,0x92,0x19,0xe7,0xc6,0xa4,0x51,0x5b, + 0xe4,0x30,0x65,0x12,0x6d,0x6d,0x36,0x36,0x13,0xae, + 0xf5,0xd8,0xf7,0x89,0x39,0x80,0x50,0x5c,0x33,0x70, + 0x74,0xde,0x0e,0xe3,0xbe,0x4f,0x5d,0x4b,0xc6,0x4d, + 0xf4,0x38,0xb4,0x08,0x10,0x1e,0xd4,0x01,0xa2,0x56, + 0xb0,0xe3,0x9f,0x04,0x35,0x7b,0xc7,0xb9,0x3a,0x70, + 0x36,0xac,0xf6,0xc4,0xfd,0xb9,0xee,0x79,0x1b,0x87, + 0x00,0xab,0x92,0xec,0xec,0x4b,0x12,0x72,0xe4,0xba, + 0x09,0x69,0xba,0x51,0xef,0xc1,0x74,0x0f,0x2c,0xb9, + 0x38,0x4d,0x6a,0xcb,0x04,0xeb,0xb8,0xaf,0x52,0xab, + 0x72,0x4a,0xa8,0x92,0x6a,0xf3,0x94,0x50,0xdf,0x8f, + 0xd3,0x8c,0xe2,0xa3,0x79,0xb5,0xe3,0x70,0xbd,0x36, + 0x82,0x7f,0x5b,0x57,0xdc,0x34,0x0e,0x3b,0xf5,0x1f, + 0x53,0x3f,0x51,0x47,0xe3,0x5c,0x3b,0x8b,0xa0,0xd7, + 0x9e,0xc0,0x18,0xb7,0xd8,0xb3,0x51,0x34,0x75,0x09, + 0x8c,0xea,0x8c,0xd0,0xe1,0xf0,0xeb,0xd7,0x2f,0x84, + 0x83,0x89,0x33,0xe3,0xb8,0x18,0x90,0x79,0x9f,0xe4, + 0xad,0x12,0xc6,0xaf,0x27,0x89,0x76,0xf4,0x0e,0x4b, + 0x0e,0xf4,0x93,0xf7,0x5a,0x50,0xd7,0x3d,0x0e,0x59, + 0x73,0x7e,0x65,0x9d,0x93,0x00,0x46,0x8f,0xb4,0xa6, + 0x92,0x96,0xc6,0x49,0x7d,0x69,0xc7,0xeb,0x09,0xae, + 0xd2,0xb6,0x0a,0xa3,0x09,0x1a,0x15,0x63,0x04,0x14, + 0xe0,0x90,0xd1,0x6c,0x87,0xe7,0x45,0xb8,0xec,0xb8, + 0xc4,0x92,0xe0,0x74,0xfd,0x5d,0xad,0x74,0xa7,0x8a, + 0x4b,0xff,0x71,0x06,0x9d,0x53,0xeb,0x8b,0x10,0x90, + 0xd4,0xd2,0x9a,0xa6,0xcd,0x44,0x5d,0xfb,0xa4,0x6b, + 0x09,0x85,0x06,0xb6,0xc6,0x88,0x8f,0x91,0xfc,0x90, + 0x88,0x53,0x06,0xf7,0x18,0x95,0xc3,0x01,0xd1,0x58, + 0xc5,0x6c,0x77,0xa0,0x3b,0x94,0x43,0xd7,0x96,0xc6, + 0x96,0xef,0x16,0xfd,0x09,0x87,0x79,0x44,0xe9,0x96, + 0x63,0xff,0xe3,0x90,0x00,0xa1,0x3c,0x29,0x91,0x4f, + 0x72,0xdf,0x3a,0x0e,0x7e,0x77,0x2e,0xc8,0x3a,0xc9, + 0x25,0x8b,0x5b,0x43,0x4f,0xb7,0xf7,0xcd,0xd9,0x79, + 0xcc,0x88,0xf9,0x71,0x6d,0x27,0x45,0x97,0x3b,0x9f, + 0x89,0x62,0x66,0x32,0x9d,0x25,0x8a,0x49,0xd2,0xfd, + 0x4a,0x93,0x89,0x2e,0xd9,0x99,0x46,0xf6,0x5d,0x91, + 0x41,0xc3,0x33,0x6e,0xca,0xd7,0x4e,0xfa,0x05,0xd2, + 0x66,0x30,0x4c,0xb6,0x84,0xc5,0x03,0x53,0x1f,0x67, + 0x7a,0x10,0xd4,0x06,0x73,0x2f,0xc5,0x11,0xfe,0x92, + 0x2f,0x8a,0xf2,0x83,0xe8,0xa5,0xff,0xfa,0xf5,0xeb, + 0xe7,0x65,0xba,0xcd,0xec,0xe4,0xd9,0xdd,0x83,0xd6, + 0x36,0x10,0x55,0x7a,0xa1,0x6a,0x7c,0xb4,0xdc,0xdc, + 0x82,0x74,0xea,0xbd,0x34,0x11,0xe6,0xde,0x4f,0xe3, + 0x15,0x9d,0x89,0xa7,0xd5,0x36,0x75,0x9c,0x88,0x21, + 0xb8,0xda,0xf8,0x97,0x61,0xb2,0x43,0xc9,0xaf,0x6b, + 0x5f,0x04,0x8e,0xc4,0x01,0xde,0xcc,0x09,0xda,0x2d, + 0x69,0xa4,0xf8,0x50,0x60,0xba,0x60,0xca,0x48,0xaa, + 0xf7,0x43,0xa8,0x5d,0x57,0x67,0x26,0x53,0x43,0xd7, + 0x16,0x73,0x87,0x8a,0x23,0x7b,0x6e,0xda,0x6d,0x74, + 0x98,0x77,0xe7,0xf6,0x4b,0x88,0xd7,0x93,0x4a,0xbc, + 0xbb,0x46,0xe2,0x3b,0xa4,0x02,0x82,0x82,0x2d,0xe9, + 0x8c,0xf4,0x76,0x9a,0xb6,0x8d,0xfa,0x67,0xa4,0x04, + 0xae,0x6b,0x8f,0xe8,0xb3,0x23,0xc2,0xec,0x2d,0x34, + 0xda,0x13,0x96,0xc1,0xbf,0x70,0x22,0x91,0x8f,0xce, + 0xf3,0x4a,0x3d,0xd0,0x78,0x95,0x4c,0x6d,0x83,0x2f, + 0xd8,0x09,0x1a,0x69,0x87,0x7c,0x95,0x00,0x69,0x38, + 0x4e,0x43,0x67,0x50,0x17,0xb6,0x07,0x2f,0x14,0x72, + 0x27,0x71,0xec,0xdc,0xe4,0xd2,0xa6,0x50,0xbf,0x1a, + 0xb9,0x7b,0x22,0xef,0x53,0xac,0xfd,0xc0,0x1a,0xc6, + 0xb5,0x9f,0x8e,0x49,0xc6,0x8f,0x41,0x90,0x89,0xf7, + 0x77,0xa0,0xed,0xed,0xce,0x2c,0x57,0xe8,0xa4,0x78, + 0x86,0x1c,0x24,0xb3,0x0f,0x47,0x55,0xf8,0x49,0x16, + 0x60,0x42,0x44,0x89,0x70,0x2d,0x67,0x1c,0x3e,0x87, + 0xdf,0x9b,0x00,0x94,0x74,0x02,0xd2,0x94,0xc6,0x27, + 0xe2,0x7e,0xda,0x92,0x80,0x3e,0x6d,0x51,0x7f,0xd5, + 0xf4,0x79,0x8b,0xc4,0xd6,0x8c,0x2e,0x4e,0x25,0x22, + 0x55,0xe2,0x41,0x38,0x11,0xc1,0x80,0x2a,0xbd,0x89, + 0xf7,0x75,0xc1,0x42,0xaa,0x42,0x93,0x59,0x63,0xdb, + 0x80,0x45,0xef,0x51,0x20,0x5c,0xfb,0xb3,0x70,0xe0, + 0x92,0xca,0xb7,0x1b,0xf5,0x7e,0x13,0xb2,0x14,0xcf, + 0x95,0x02,0xa8,0xdc,0x5d,0x33,0xb5,0xdf,0x1e,0x4a, + 0xe4,0x4e,0x68,0x30,0x1d,0xaa,0x7a,0x5f,0x0a,0x9d, + 0xf6,0xef,0x09,0x46,0x8c,0x15,0xd6,0xc3,0xd4,0xf2, + 0x42,0xb1,0x45,0x23,0x35,0x51,0x03,0x3f,0xed,0x0e, + 0xd0,0xe5,0x2a,0x1f,0xd8,0x8f,0x77,0x40,0x2a,0xe2, + 0x1a,0x4c,0x9c,0x3a,0x97,0x44,0xde,0xd7,0x9b,0x26, + 0x47,0x12,0x92,0xea,0xae,0x35,0xf1,0x29,0x88,0xc7, + 0x06,0x70,0xf8,0x8a,0x1c,0xa9,0x6d,0x19,0x42,0x62, + 0x69,0x4f,0xba,0x03,0x3a,0xb4,0x8c,0xce,0x82,0x0b, + 0x11,0x27,0xca,0x82,0xba,0x32,0x8e,0x0d,0x6b,0x71, + 0x94,0x74,0x85,0xa0,0x2d,0x78,0x60,0x9d,0x9c,0x64, + 0x03,0x04,0x28,0xc9,0x5b,0xe1,0xda,0x0d,0x3f,0x89, + 0xc7,0x44,0x45,0x22,0xc9,0x62,0x50,0xa1,0x4a,0x06, + 0xad,0x8b,0xd6,0xed,0x31,0xc4,0xe1,0x31,0xd1,0x51, + 0x24,0x8f,0xfe,0x4c,0xa9,0x10,0x09,0xfd,0x98,0x10, + 0x2b,0x48,0xdc,0xd0,0x60,0x77,0xeb,0x38,0x0f,0x2d, + 0xb4,0x43,0x2d,0xb6,0x3e,0x38,0xe1,0xd0,0xca,0xde, + 0x6e,0x4b,0xa2,0xa8,0x81,0xc3,0x87,0xc8,0x9f,0xc4, + 0x18,0x7c,0x70,0xaf,0x44,0xd0,0x4b,0x6a,0xaa,0x20, + 0x40,0x74,0x48,0x15,0x95,0x7e,0x2f,0x29,0xd6,0x12, + 0x87,0x20,0xf1,0x08,0x52,0x1b,0xaf,0xc3,0x85,0xda, + 0x12,0xfb,0xf3,0xe7,0xcf,0xe8,0x9e,0x7b,0xf9,0xc9, + 0x2f,0xcc,0xae,0x35,0x01,0x71,0x49,0x56,0x22,0x3e, + 0x13,0xd9,0x6f,0x4a,0x2a,0x15,0xaa,0x9e,0x38,0x5a, + 0x77,0xc5,0x61,0x26,0x3d,0xc6,0x0a,0x91,0xaa,0x02, + 0x27,0xa3,0x9f,0x60,0xf0,0xc4,0xf8,0x1f,0xda,0x0d, + 0x8f,0x29,0x44,0xf2,0x4d,0x22,0xed,0x12,0x72,0xa7, + 0xa6,0x51,0xd3,0x54,0x0d,0x0e,0xc9,0xd8,0x71,0x10, + 0x3f,0xe9,0x58,0x74,0xf8,0x1d,0x10,0xd2,0x07,0x81, + 0xd7,0x55,0xae,0xa6,0x12,0x3e,0x74,0x60,0xb8,0xbd, + 0xe6,0x5a,0xdc,0x0e,0x99,0xba,0xde,0xc7,0xed,0x8f, + 0x33,0x76,0x4d,0x41,0x57,0xdb,0x00,0xef,0xcb,0xf3, + 0x49,0xa4,0x9e,0xda,0x9f,0x93,0x92,0xbd,0x39,0x8c, + 0xc8,0xe6,0x01,0xf7,0xd0,0x1d,0x3f,0xa9,0xd2,0x54, + 0xc2,0x35,0x4d,0x84,0x2a,0x6f,0x48,0xdb,0xf6,0x4b, + 0x34,0xd2,0x22,0xba,0x7a,0x88,0x7f,0xa2,0x32,0xef, + 0x28,0x08,0x44,0x2a,0x4d,0x93,0x9f,0xc9,0x7e,0xc4, + 0xc5,0x3b,0xf7,0x39,0x0b,0x4e,0x10,0x09,0xa9,0x1e, + 0x8a,0x1d,0x89,0x17,0x95,0xa6,0x55,0xc3,0x9a,0x3b, + 0xce,0xeb,0x2d,0x9d,0xa9,0x8a,0xf4,0x90,0x45,0x94, + 0x5b,0xb3,0x30,0x25,0x39,0x26,0x34,0x43,0xbb,0xd1, + 0x22,0xeb,0x6a,0x78,0x3d,0x0c,0x17,0x60,0x1b,0xcb, + 0xdc,0xf3,0x05,0x9e,0x68,0xf6,0xbd,0xd3,0x79,0x3a, + 0x29,0x6b,0xbb,0x77,0xfe,0x9b,0x20,0xbb,0xa6,0x8b, + 0x53,0x70,0x38,0x57,0x7f,0x31,0xd3,0xf8,0x3b,0x6c, + 0xfa,0x07,0xe1,0xd8,0x91,0x59,0x07,0x14,0xc6,0x12, + 0xb6,0x3b,0x11,0x57,0xaf,0xcb,0x04,0x15,0x25,0xd0, + 0x8d,0x81,0x41,0xee,0x0b,0xbd,0xbc,0x12,0x64,0xa8, + 0xbe,0x61,0x54,0xc9,0x68,0x00,0xa9,0xf7,0xd3,0xe1, + 0xed,0xbb,0x92,0xe8,0x9c,0x23,0x9a,0xcb,0x64,0x5e, + 0x99,0x60,0x50,0xd0,0x8b,0x2e,0x9d,0x76,0x21,0x8b, + 0x8b,0xfe,0x7d,0x0e,0xb9,0x32,0x07,0x80,0x5d,0x73, + 0xdd,0xb3,0x4a,0xa1,0xf4,0x7e,0x3d,0xce,0x0a,0x85, + 0x90,0x20,0x48,0x14,0x1e,0x36,0x1b,0x26,0xc8,0x56, + 0x98,0x76,0xa9,0x61,0x5a,0xc1,0xa2,0x49,0x80,0xb4, + 0xd4,0x86,0x73,0xf2,0x7d,0x60,0x56,0x2a,0x24,0xf4, + 0x77,0x64,0x44,0x76,0x2e,0x65,0xa1,0x65,0xb1,0xb0, + 0x1f,0x38,0x84,0x08,0x38,0xa1,0xd0,0xad,0xa6,0xd8, + 0x54,0xf9,0x02,0x5a,0xf3,0x68,0x5d,0xd0,0x77,0x82, + 0x88,0xe9,0x75,0x65,0x3d,0x1d,0x7b,0xc8,0x38,0xdf, + 0xa7,0xa4,0xd8,0xab,0x55,0x34,0xb5,0x15,0x26,0xe4, + 0xc8,0xf1,0x05,0x01,0x45,0x7e,0x1c,0xb4,0x3a,0x36, + 0xad,0x03,0x0d,0x01,0x55,0xb0,0x48,0x4e,0x6f,0x87, + 0xa9,0x00,0x21,0xbc,0x3b,0x4b,0x8c,0xed,0x2a,0xc2, + 0x0e,0x31,0x21,0xaf,0x28,0x2d,0x04,0x8c,0x64,0xc1, + 0x49,0xb6,0x1e,0x52,0xd8,0x1e,0xc7,0x99,0x49,0x9e, + 0x73,0x46,0xad,0x7d,0x44,0x3f,0x9d,0x7d,0xc3,0x94, + 0xf4,0xbb,0x18,0x49,0x08,0x92,0x9e,0xdf,0x41,0x82, + 0xc4,0xed,0x93,0x43,0xfb,0x77,0xba,0x26,0xb5,0x19, + 0x21,0x19,0x04,0xb3,0x77,0xcf,0x84,0x44,0x91,0x13, + 0x84,0x8b,0xb1,0xaf,0xc9,0x2e,0xc2,0x25,0x31,0x6e, + 0x6c,0x91,0x54,0x9a,0x1d,0x47,0x80,0x2a,0xd4,0xd4, + 0x73,0x4d,0x44,0xd6,0xad,0x95,0xc3,0x86,0x1f,0xb3, + 0xc8,0x86,0x4f,0xb8,0x3e,0xdc,0x50,0xfd,0xc5,0x26, + 0xd2,0x75,0xfa,0x2e,0x5a,0x54,0x9d,0xa3,0xe4,0xc6, + 0x10,0xd3,0x18,0xa0,0x26,0x80,0xa0,0x1c,0x3b,0x92, + 0xd5,0x68,0xdc,0x3e,0xa9,0x8b,0x6b,0x0f,0x5f,0x89, + 0x7d,0x06,0x81,0x38,0x13,0xf2,0x95,0x38,0x01,0x8e, + 0x8f,0x14,0x82,0xd7,0x51,0x19,0x06,0xe7,0x45,0x44, + 0x49,0xea,0x35,0x88,0x1e,0x26,0xee,0x90,0x72,0xd7, + 0x2e,0xd0,0x33,0x31,0xb0,0xf3,0x49,0x22,0x97,0x83, + 0x0d,0x82,0xd5,0xf2,0x59,0xf0,0xdd,0x36,0x6d,0xed, + 0xf1,0x77,0x48,0x03,0x88,0x0e,0x23,0x47,0x30,0x25, + 0x71,0x50,0x49,0x46,0x0e,0x29,0xa4,0xbb,0xd8,0xd2, + 0x8b,0xa5,0x36,0x92,0x1f,0xa7,0xdf,0x14,0x85,0x0d, + 0xdc,0x32,0xcb,0xc3,0x4b,0x71,0x27,0x54,0xc9,0x27, + 0xc4,0xde,0xb3,0x99,0xae,0x34,0x71,0xdd,0x9a,0x85, + 0x52,0x6c,0x4a,0x07,0x68,0x6a,0x89,0x12,0x12,0x1b, + 0xc4,0x38,0x47,0x04,0xa9,0x23,0x96,0xee,0xb0,0x34, + 0x82,0xaf,0x8f,0x21,0x19,0xc7,0xfd,0xd4,0xcf,0x4b, + 0x02,0x90,0x4e,0x32,0x60,0x32,0x9b,0xa6,0x33,0xd6, + 0x15,0x84,0xe4,0x04,0xef,0xce,0x6f,0x33,0xcd,0x76, + 0x12,0x2a,0xa5,0x62,0xb8,0x2a,0x5e,0x49,0x1a,0x5f, + 0x8e,0xab,0xa4,0xa1,0x78,0x31,0xb0,0x72,0x4d,0xf1, + 0x6e,0x92,0xad,0x18,0x64,0x03,0x7e,0xfe,0xfc,0x45, + 0x01,0x32,0x55,0x7d,0xda,0xe7,0x73,0x0b,0x92,0xcc, + 0x41,0xf5,0x85,0x4c,0x3d,0x48,0xca,0xac,0x35,0xb0, + 0x4d,0xb6,0x19,0x93,0x98,0xd2,0xdf,0x24,0x20,0x9f, + 0x04,0xa8,0x00,0x8d,0xff,0xc0,0xcc,0x1d,0x66,0x87, + 0xa9,0x28,0xdb,0x33,0x9d,0x82,0x1a,0xf0,0x96,0x62, + 0xc2,0xe6,0x26,0x71,0xa4,0x8a,0x7d,0xc8,0xbe,0xf7, + 0x60,0x6e,0x4c,0x32,0x4f,0x6a,0x9b,0xb9,0x00,0x4b, + 0xde,0x73,0x93,0x5d,0x06,0xb5,0x13,0x69,0x63,0x6e, + 0xfa,0xe6,0xb0,0x19,0x2d,0x2f,0xc2,0xf0,0x6e,0x1c, + 0xdf,0xc7,0xb9,0xb2,0x4f,0xed,0xb3,0xd8,0x6e,0x54, + 0x02,0x6d,0x5f,0x4b,0x41,0xbd,0xdb,0x25,0x2a,0x4a, + 0x7e,0x1e,0x3d,0x8f,0x1c,0x39,0x3e,0xb5,0xd8,0xe8, + 0x3a,0x9c,0xa3,0x7c,0x4a,0x32,0x92,0xc0,0x5f,0x13, + 0xf7,0x3c,0xa4,0x8b,0x62,0x74,0x5e,0x5c,0xf2,0x77, + 0xc0,0x2a,0x86,0xda,0x14,0x47,0xf7,0x28,0x69,0x31, + 0xe9,0x14,0x0f,0xb4,0xf6,0xcf,0xc0,0xd3,0x48,0x0a, + 0xe4,0xc7,0x25,0x1f,0x9d,0x28,0xdd,0x3f,0xfb,0x9e, + 0x5a,0xa5,0x77,0x46,0x87,0x99,0xb6,0x80,0xa9,0xb5, + 0x44,0x87,0xfe,0x84,0x22,0x12,0x32,0x47,0x36,0x4d, + 0xae,0x25,0x9d,0x24,0x44,0x2e,0x1e,0xaa,0x70,0xeb, + 0xf1,0x6c,0x5a,0xf2,0xc9,0xba,0x69,0x22,0x29,0x6b, + 0x52,0x45,0x2d,0x21,0x77,0x56,0x80,0x70,0xed,0x58, + 0x7c,0x50,0x01,0xab,0x2d,0x2f,0x3a,0xe7,0x26,0x4d, + 0xc1,0x84,0xd6,0x92,0x06,0x54,0x32,0x77,0xdd,0x72, + 0x97,0xe8,0xdd,0x5c,0xd7,0xf5,0x74,0x83,0xef,0xbf, + 0xd4,0x14,0x1e,0x9d,0xde,0xc9,0x4f,0x2b,0x46,0x20, + 0x48,0x6c,0x79,0x7c,0xfa,0xf3,0x17,0x90,0x7b,0xf5, + 0xc6,0xc2,0x44,0x14,0xe9,0x19,0xfd,0xb4,0x70,0xba, + 0x3b,0x72,0x72,0x11,0x77,0xc4,0x69,0xf7,0xf7,0x26, + 0x88,0x1e,0x75,0xe7,0x76,0xdf,0x45,0x46,0x6f,0xf7, + 0x73,0x70,0xa4,0x5d,0x25,0x11,0x2a,0x81,0xbc,0xdf, + 0x97,0x81,0x6a,0xdf,0x5a,0x69,0xaa,0x6f,0xa2,0xa6, + 0x8c,0xda,0xf2,0x71,0xc4,0xde,0x69,0x32,0x8c,0x2a, + 0xc9,0x4e,0xa0,0xde,0xb4,0x54,0xf4,0xbd,0xaa,0xfb, + 0x7a,0x48,0x50,0x4b,0xaf,0xe3,0x26,0x33,0xde,0x6b, + 0x10,0xaa,0xc5,0x4a,0x95,0xaa,0x7e,0x27,0x98,0xcf, + 0x52,0x2b,0xee,0x0d,0xf4,0x4a,0x49,0xb6,0x4c,0xd4, + 0x14,0x8d,0x85,0x86,0xe4,0xaa,0x92,0xc3,0x74,0x20, + 0x42,0x1f,0xe0,0x01,0xea,0x1e,0x8a,0xfb,0x26,0x4d, + 0x8a,0x11,0x5c,0x9e,0x82,0xa6,0x43,0x1e,0xa8,0xb0, + 0x71,0x05,0x5b,0x92,0x9e,0x20,0xb7,0xee,0xd4,0x4a, + 0x48,0x92,0x10,0x8a,0x94,0xa6,0xd6,0xc1,0x24,0x1e, + 0xea,0xd0,0x6c,0xe0,0x4e,0x8e,0xc9,0xbd,0xf1,0x99, + 0x7a,0x24,0x4d,0x54,0x51,0x6b,0xcb,0xe1,0xfe,0x7d, + 0x69,0x93,0x3d,0x0a,0x01,0x27,0xa8,0xa8,0x7f,0xae, + 0xda,0x6d,0x29,0x0b,0x04,0x24,0x16,0x27,0xd6,0x28, + 0xd9,0x20,0x79,0x0c,0x25,0x6a,0x43,0x12,0x75,0xa8, + 0xfd,0x36,0xa1,0x64,0x4e,0x77,0x27,0x21,0xf6,0x64, + 0x35,0x12,0xe2,0x93,0xa3,0x98,0xa0,0x76,0x9c,0xe3, + 0x60,0x99,0xf5,0xf5,0xf3,0x8e,0x36,0x5d,0x18,0x88, + 0xef,0x07,0xf6,0x20,0xbd,0x23,0x32,0xb9,0xc6,0xe4, + 0x8b,0xf4,0xb7,0x7e,0xe2,0x81,0x12,0xb7,0x12,0x2a, + 0xe2,0x9c,0x72,0xd3,0x97,0xba,0x8c,0x2c,0x3d,0x2c, + 0x47,0xc6,0x76,0xae,0xeb,0x13,0x9a,0x42,0xd9,0xb0, + 0xab,0xf6,0xa6,0x80,0x7c,0x01,0xe9,0x10,0xb2,0x79, + 0x52,0x3b,0x75,0x9b,0x75,0x65,0x88,0xaa,0xcf,0xbd, + 0x91,0x62,0x0f,0x4d,0x88,0x19,0xb7,0xe5,0x93,0xf8, + 0x45,0xee,0x1e,0x5c,0xc0,0x24,0xfb,0x10,0x48,0x6a, + 0x2c,0xef,0x24,0x70,0xec,0x6c,0xfb,0xc7,0x1d,0x10, + 0xb7,0x9b,0xb0,0x9b,0x1c,0xb8,0x82,0xa3,0x72,0x6a, + 0x25,0x41,0x0b,0xf1,0xad,0x75,0x42,0x08,0x87,0x1a, + 0x09,0x42,0x32,0x84,0x1e,0x5f,0xda,0xab,0xa7,0x36, + 0x90,0x83,0x70,0x53,0xf5,0x0c,0xa4,0xc9,0x03,0xf7, + 0x30,0x4a,0xfd,0x83,0xc5,0xc9,0x9b,0x5a,0x33,0x29, + 0x0e,0x3b,0x59,0x7e,0x57,0x55,0x0e,0x09,0xc4,0x83, + 0x6c,0xdd,0x81,0x94,0xd7,0xeb,0x85,0xd5,0xf0,0xc4, + 0x33,0xba,0x9f,0xcf,0xad,0x8e,0x9d,0xbc,0x9c,0x4c, + 0x62,0x75,0x12,0xc2,0xb9,0x0d,0xe2,0x44,0x24,0x4d, + 0x87,0x04,0x25,0x59,0xc3,0xa8,0x30,0xb6,0x4a,0xd4, + 0x7a,0x28,0x49,0x9a,0x68,0x31,0x04,0x67,0xc2,0x81, + 0x22,0xf6,0x84,0x96,0x2f,0x26,0x65,0x7a,0x6d,0xd7, + 0xc2,0x1a,0x63,0xc1,0x91,0x3a,0xb0,0xd6,0x1e,0x7b, + 0x71,0x22,0x90,0x13,0xe2,0x9a,0x3c,0xbb,0x1c,0x19, + 0xd8,0xb5,0xe8,0x1d,0x9a,0xa5,0x09,0x09,0x21,0x3e, + 0xc4,0x1b,0x6a,0xad,0x3d,0xe4,0xc4,0xa5,0xbd,0xe0, + 0x68,0x01,0xae,0x88,0x4c,0x1c,0x21,0x42,0x76,0xc1, + 0x9b,0x72,0x4d,0x4b,0xb9,0x16,0x3a,0x5b,0x5d,0x07, + 0xe8,0x84,0x7e,0x23,0xc1,0x87,0x98,0x94,0xd3,0x74, + 0x0b,0x55,0xe7,0x3d,0x20,0x92,0xeb,0x78,0x6a,0x25, + 0xa8,0xbd,0xc6,0x46,0xbc,0x8d,0xf4,0x0f,0xc0,0xeb, + 0xc4,0xb6,0x37,0xf4,0xcf,0x49,0xd0,0x6a,0x82,0x22, + 0x5d,0x8b,0xa7,0x57,0x0c,0x9b,0x71,0xe1,0x1e,0x88, + 0x74,0x72,0xa5,0x57,0xe9,0x0d,0xe6,0x3e,0xc4,0x07, + 0x49,0xfc,0x2c,0xe1,0x09,0x1d,0xb8,0xd7,0x87,0x63, + 0xbc,0x5a,0x4c,0x38,0x9b,0x15,0xc7,0x1f,0x4a,0x10, + 0xbe,0x31,0x47,0x25,0xeb,0x8f,0x47,0x75,0x61,0xa6, + 0x6c,0x4e,0x82,0xca,0x09,0xed,0x13,0xb1,0x3d,0x7b, + 0x00,0xab,0xa5,0x09,0x71,0x4d,0x2e,0x33,0xd9,0x15, + 0x54,0x5d,0xcf,0xc5,0x53,0x35,0xd3,0xa4,0x50,0xf4, + 0xbd,0x1a,0x5a,0xa8,0x8f,0xdf,0x91,0xe4,0x98,0x6c, + 0x2c,0x30,0x81,0xd1,0xbf,0xbb,0x8c,0x3d,0x46,0x2a, + 0x9e,0x88,0x93,0xa8,0x49,0x3b,0x99,0xa9,0xa6,0x91, + 0xe6,0x20,0xe4,0xfa,0xa6,0x8d,0x34,0x08,0x3c,0x1e, + 0xd5,0x9a,0x0a,0x48,0xe5,0xa1,0xc9,0x49,0x9a,0x6a, + 0x22,0xe4,0x07,0x44,0x32,0x47,0x6f,0x41,0xb3,0x0f, + 0x08,0xad,0xb1,0x46,0xaa,0x1a,0x23,0x7b,0x0c,0x25, + 0x7f,0x46,0x97,0x0c,0x24,0xf5,0xee,0x29,0x59,0x4a, + 0xbc,0x32,0x47,0x07,0xa0,0x36,0x2d,0x15,0x00,0xaa, + 0x56,0x9c,0x74,0xdf,0xe0,0x0c,0xb1,0xe3,0xf8,0xc3, + 0xc4,0xec,0x99,0xce,0x12,0xf2,0x48,0x74,0x7a,0x42, + 0x2e,0x46,0x24,0x0f,0x3d,0xd7,0xea,0xdc,0x78,0x72, + 0x2d,0x80,0x8d,0x31,0x29,0x5a,0xc4,0x35,0xec,0x22, + 0xb8,0xe7,0xf0,0xa3,0x03,0x24,0xc8,0xc2,0xdb,0x0f, + 0x36,0x01,0xbc,0x72,0x2f,0x28,0xc0,0x74,0x18,0x50, + 0x27,0xd8,0xce,0x7d,0x87,0x29,0xca,0x2b,0x11,0xa1, + 0x75,0x42,0x0b,0x5c,0xe2,0x8b,0x48,0x56,0xbd,0x4a, + 0x75,0x93,0x4c,0x4e,0x1b,0x44,0x5b,0x77,0x8b,0x36, + 0xcf,0xc3,0xfa,0x83,0xda,0x06,0xdf,0xed,0x0f,0x9d, + 0x98,0x7b,0x4c,0x84,0xf5,0xe9,0x3d,0xe3,0xc5,0x55, + 0x02,0x4d,0x3f,0xda,0x49,0x43,0x96,0x7f,0x74,0xd2, + 0xa8,0x21,0x0b,0xe5,0xac,0x29,0x74,0x12,0x4f,0x75, + 0x7d,0x0c,0xd7,0xa1,0x80,0xe0,0x68,0xdb,0x64,0x3a, + 0x19,0xa1,0xba,0x3c,0x21,0x40,0x16,0xb4,0x55,0x0f, + 0x69,0xe5,0xb4,0x80,0x52,0xe4,0xe6,0x4d,0x6d,0x41, + 0x23,0xc6,0x58,0xc3,0xa4,0xc9,0x4d,0xd4,0xac,0x45, + 0x7b,0xa8,0x1f,0x88,0x45,0x22,0xa2,0x84,0x24,0x48, + 0x90,0x2b,0xb7,0x06,0x9c,0xc9,0x27,0xf8,0xde,0xc5, + 0xc0,0xb3,0x81,0xa8,0xef,0x04,0x5e,0x09,0xf2,0xc4, + 0x91,0x71,0xda,0x23,0xa9,0x8d,0x90,0x4c,0x2a,0x83, + 0x4b,0xbb,0xe5,0xbf,0xa4,0xe4,0xf0,0xeb,0xeb,0xeb, + 0xfa,0xf5,0xeb,0xd7,0x21,0x4e,0x8d,0xf0,0x27,0xcf, + 0xd4,0x1a,0xbc,0x8c,0x7c,0x81,0xda,0x57,0x10,0x2a, + 0xef,0xf4,0x83,0x8c,0x67,0xd9,0xcf,0xa4,0x17,0x0d, + 0x53,0xe8,0xde,0xd3,0xc2,0xd3,0x15,0x6d,0x0e,0xb1, + 0x21,0xae,0x93,0xfb,0x33,0x48,0x64,0x4e,0xd2,0x18, + 0x4a,0x28,0x4f,0x5f,0x63,0x86,0x92,0x91,0xba,0x0c, + 0xc7,0x88,0xd0,0x9e,0x84,0xd4,0x53,0xeb,0x2b,0xad, + 0x35,0x45,0x4d,0xa6,0x29,0x47,0xf5,0x91,0x4b,0xed, + 0x42,0x9a,0x5c,0xa3,0x61,0x0e,0x1a,0x82,0x30,0xfb, + 0xea,0x40,0x4b,0xfe,0x24,0xcd,0x29,0x77,0x06,0x40, + 0x0e,0x71,0x20,0x96,0x9c,0x8d,0xf9,0xba,0x9e,0x79, + 0x3f,0xdd,0x04,0xb7,0x19,0x88,0x8f,0x12,0xe0,0x58, + 0xdb,0xe7,0x24,0xa3,0x48,0x65,0xde,0xeb,0x03,0x24, + 0xa8,0x7f,0x22,0x55,0xd1,0xa8,0x67,0x18,0x85,0x74, + 0xe3,0xfb,0x67,0xe3,0x31,0x34,0x20,0x5a,0xe3,0xcf, + 0xa6,0x67,0x37,0x19,0x9c,0xaa,0x6c,0xbd,0x6b,0x5b, + 0x40,0xf5,0x7b,0x52,0xe5,0xb5,0xa9,0x4a,0xb4,0xdd, + 0x43,0xea,0xc6,0x13,0x6c,0x49,0xc9,0xb3,0x1b,0x5f, + 0x24,0x81,0xba,0x54,0x7d,0x92,0xd5,0x88,0x83,0xf3, + 0x8d,0xf0,0xe4,0x99,0x0c,0x01,0x93,0x46,0x47,0x47, + 0x83,0xb2,0xd2,0xbe,0xff,0x1c,0xb3,0x1e,0x0f,0xd9, + 0x6d,0x18,0x34,0xeb,0x6c,0x8c,0x82,0x3b,0xf7,0x4c, + 0x10,0xc2,0x07,0x3a,0xe4,0xc8,0xc1,0xa9,0x50,0x21, + 0x83,0x60,0x81,0xdc,0xf1,0xb0,0x77,0x13,0x26,0xd4, + 0x52,0x70,0x0a,0xd7,0xe6,0xfb,0xbb,0x76,0xd0,0x49, + 0xa8,0x6d,0x40,0xc4,0x8e,0x4b,0x7e,0x86,0xb6,0xdd, + 0x99,0x6c,0x3e,0xdc,0x34,0x24,0xb5,0xc4,0x86,0xd8, + 0x7b,0x52,0x65,0x4c,0x7c,0x14,0xfd,0x3b,0xb2,0x7b, + 0xd1,0x3d,0x74,0x27,0x21,0x54,0x34,0x25,0x64,0x02, + 0xd6,0xc4,0x88,0x2a,0x98,0x91,0xed,0x88,0x54,0x3a, + 0xd4,0xc4,0x1d,0xb6,0x69,0x74,0xbb,0x8f,0xde,0x4f, + 0xed,0x2f,0x2d,0x2a,0x26,0x54,0xc2,0x8d,0x75,0x4f, + 0x49,0xc6,0x44,0xfc,0x4d,0x9d,0x07,0xa7,0x51,0xa7, + 0xb4,0x87,0x64,0x29,0x41,0x2a,0xd3,0x49,0xea,0x65, + 0xa2,0xc4,0x38,0x54,0x68,0xe2,0x37,0x4d,0x9c,0x40, + 0xb5,0xed,0x70,0xfc,0xba,0x9f,0x09,0x5f,0x09,0x04, + 0xd1,0x6d,0x19,0x36,0x02,0x4d,0x04,0x44,0x17,0x58, + 0x07,0x2d,0xbb,0xbf,0x27,0x13,0x53,0x72,0x0b,0x27, + 0x48,0xdc,0x7d,0x2f,0x79,0x9b,0x40,0xf5,0x7e,0x26, + 0x68,0x2e,0xf5,0xe7,0x41,0x89,0xf4,0xa7,0xd2,0xd7, + 0xc3,0x1e,0x20,0xc2,0x13,0x2a,0xd3,0x07,0x04,0xeb, + 0xaa,0x76,0x57,0xd9,0x53,0x12,0x41,0x23,0xe4,0x74, + 0xcf,0x49,0xd8,0x8d,0x7a,0xfd,0x34,0xba,0x0f,0x08, + 0xe1,0xa3,0x9a,0x4e,0x8a,0xac,0xaa,0x18,0xeb,0x94, + 0x9f,0x03,0x82,0x10,0x2d,0x2e,0x2e,0x30,0xef,0xd3, + 0x24,0x8b,0xfc,0x75,0x92,0xd0,0x9b,0x13,0x06,0xd3, + 0x71,0xf8,0x05,0x69,0xfc,0xed,0xfa,0xe9,0x1a,0x68, + 0x0f,0xb5,0x01,0x88,0xa3,0xc9,0x5a,0x82,0x9f,0x37, + 0x85,0x52,0x9a,0x60,0xfc,0x44,0xff,0x87,0x88,0xdb, + 0xbd,0x6d,0xa6,0x5c,0x39,0xf7,0x8f,0x23,0x02,0x4b, + 0x8c,0x38,0x4e,0xc0,0x75,0x92,0x38,0x98,0xc8,0xa1, + 0xb7,0x55,0xc4,0xe4,0x62,0x7f,0xb1,0x05,0xc5,0x63, + 0xef,0x01,0xc2,0x16,0x27,0x24,0x5d,0x51,0xd8,0xbf, + 0x14,0xa6,0x7d,0x8e,0x2b,0x20,0x5d,0x8b,0xce,0x85, + 0x94,0xa4,0x81,0xe4,0xee,0x4b,0xf5,0x90,0xe0,0xbc, + 0x39,0x9b,0xb6,0x8c,0xdb,0x77,0x9a,0x0c,0xa6,0x8e, + 0xc4,0x27,0xfc,0xa3,0xc1,0xf2,0x22,0x5e,0x5b,0x1a, + 0x07,0x4f,0x88,0x57,0x40,0x7d,0xcf,0x66,0x50,0xa5, + 0x27,0x7c,0xc4,0xa5,0x0b,0x48,0x22,0xae,0x3b,0xa5, + 0x28,0x98,0x33,0x9a,0x78,0x98,0xab,0x44,0x9b,0x64, + 0x03,0x92,0x71,0xeb,0x6f,0x37,0x81,0xe0,0xe0,0xe6, + 0xde,0x36,0x48,0xae,0xe3,0x0a,0xed,0xc2,0xe4,0xcf, + 0x03,0xbe,0x26,0xdb,0x8d,0xa9,0x85,0xe6,0xda,0x4a, + 0xf7,0x74,0x8a,0x79,0x88,0x35,0x7d,0xa6,0x6b,0xdd, + 0x0c,0x1a,0x46,0xb6,0xcd,0x13,0x26,0x05,0x8a,0xa4, + 0xf2,0x4d,0xe5,0x5f,0xa9,0xad,0x48,0x6d,0xac,0x81, + 0x68,0xf6,0xb0,0x8f,0x50,0x21,0x43,0xe5,0x14,0x69, + 0x1b,0xc6,0xb5,0x04,0xa9,0x4d,0xe7,0x84,0x13,0xf5, + 0x5d,0x41,0x52,0x50,0x64,0xe9,0x70,0x79,0x91,0x4c, + 0x6b,0x8b,0x31,0xb5,0xd0,0xda,0xc9,0x52,0x24,0xd6, + 0xa9,0x6d,0x3f,0x4d,0xa0,0x2e,0x98,0xde,0x92,0xca, + 0xbd,0xcc,0xf4,0x99,0x06,0xd2,0x4a,0xd5,0x95,0xc0, + 0xf3,0x95,0x02,0x82,0x0b,0xbc,0xdf,0xdf,0x5f,0xa4, + 0xf9,0xe1,0x84,0xd6,0xb4,0x60,0x20,0x62,0xa2,0xb6, + 0xdf,0xa6,0x3e,0x3f,0x59,0xe6,0x50,0x82,0x6d,0xe2, + 0xd2,0x49,0x16,0x37,0x9f,0xda,0x61,0xa8,0xd0,0x27, + 0x25,0x3a,0x81,0x1f,0x12,0x5d,0xe6,0x6f,0x82,0x36, + 0xb5,0xb2,0xa0,0x65,0xf7,0x48,0x18,0x84,0xe8,0x3d, + 0xf9,0x69,0x1d,0x7a,0xa7,0x2e,0x41,0x77,0xc3,0x26, + 0xc0,0x8b,0x41,0x7f,0xaf,0xde,0xbe,0x4c,0xbf,0xe3, + 0x88,0xaa,0x8e,0xc7,0x67,0x0e,0x6b,0x2a,0x5a,0x0f, + 0x48,0xab,0x9c,0x09,0x05,0x75,0x5d,0x0b,0x9d,0x78, + 0x4a,0x02,0xb3,0x0e,0x1d,0x26,0x34,0x8b,0x5a,0x92, + 0x52,0x74,0x10,0xfd,0xc0,0x16,0x48,0x2e,0x89,0xa3, + 0x56,0xb1,0x41,0x58,0xa3,0x3e,0x0f,0x0d,0x20,0x91, + 0x73,0x3d,0x70,0x7f,0x37,0x1d,0xa3,0x88,0x84,0x83, + 0xac,0xce,0x09,0xc3,0x12,0xd8,0x26,0xef,0x9f,0xf3, + 0x9b,0x0e,0x92,0xbe,0x71,0x52,0x1f,0x3e,0x29,0x93, + 0x76,0x85,0x63,0xc3,0x83,0x40,0xd5,0x60,0x28,0x1b, + 0x2a,0xf1,0x86,0xb6,0x5e,0x44,0x66,0xd1,0xfc,0x5c, + 0x63,0x5a,0x28,0xee,0x60,0x4e,0x41,0x55,0x47,0xb2, + 0x87,0xec,0xf5,0xed,0xfe,0x9c,0x17,0x8c,0xf4,0x91, + 0x8b,0x10,0x03,0x97,0x44,0x11,0x67,0x6b,0xeb,0x2d, + 0x13,0xb2,0x7b,0x97,0x74,0x39,0xa5,0x6a,0xfb,0x3c, + 0x06,0x8f,0x2c,0xe4,0x26,0x85,0xe7,0x79,0xae,0xeb, + 0x2a,0x95,0x45,0x70,0x0a,0xda,0x13,0x07,0xcd,0xf4, + 0xee,0xdf,0x24,0x19,0x8c,0x26,0x52,0x25,0xf3,0x3f, + 0x5a,0xc3,0xda,0x2f,0xff,0x3e,0x24,0x6b,0x4a,0x18, + 0x7a,0xd2,0x44,0xcf,0x07,0x8a,0x8c,0x8e,0x88,0xd4, + 0x84,0x28,0x6d,0xe4,0xe5,0x3b,0x17,0x61,0xd2,0xfa, + 0xa2,0x35,0x4b,0xa8,0x4a,0x2a,0x8c,0x08,0x05,0x9d, + 0x12,0x20,0x42,0x30,0xc3,0x64,0x54,0x2a,0xbe,0x4e, + 0x2a,0x3a,0x36,0x26,0xbe,0x70,0x0f,0x27,0x8d,0xd2, + 0xdf,0x68,0x3d,0x71,0xe0,0x1c,0x92,0xb1,0xb0,0xfa, + 0xb1,0x23,0xd9,0xd4,0x36,0x4a,0xc9,0x6a,0x1a,0x3c, + 0x20,0x54,0x3d,0x5d,0x7b,0x1a,0x2b,0xbf,0x9a,0x79, + 0xa9,0xbe,0x1b,0xe0,0xf9,0x1c,0x92,0x2d,0x31,0x14, + 0x84,0x03,0x07,0xf7,0x31,0x71,0x97,0x06,0x71,0x4e, + 0x42,0xa0,0x28,0xa1,0x4a,0x4a,0xd3,0xaa,0x07,0x97, + 0x10,0x49,0x4d,0xe2,0x16,0xc0,0xc2,0x99,0x92,0xb7, + 0x89,0xc0,0x9c,0xda,0x54,0x84,0xce,0x75,0xe1,0x59, + 0x72,0x8f,0x70,0xdd,0x8e,0xa1,0x33,0x81,0xc9,0xd6, + 0x39,0xe7,0x7a,0x2d,0x0e,0x72,0x0b,0x7f,0x4d,0x4e, + 0xe7,0x44,0x9a,0x74,0x0f,0xc5,0xe8,0x3d,0xc4,0x2c, + 0xd0,0xe1,0xc2,0x34,0x95,0x30,0xc9,0xeb,0xeb,0xc8, + 0xdd,0x44,0x22,0x0b,0x7c,0x8e,0xa8,0x9e,0x4d,0xe2, + 0x78,0x94,0xe8,0x0c,0xd0,0x9f,0xeb,0xd9,0x1e,0x80, + 0x7c,0xdd,0x68,0xfe,0x09,0xce,0xe5,0xf8,0x7d,0x1b, + 0x91,0xc7,0x44,0xda,0xa3,0xfe,0x76,0x9a,0x22,0x71, + 0xad,0x0e,0xc7,0x3d,0xd0,0x6a,0x8d,0xc4,0xce,0x42, + 0x92,0x72,0xfa,0x98,0xbd,0x4e,0x11,0x5d,0x4c,0xf2, + 0x7b,0xbc,0xab,0x81,0xf7,0xf3,0xb6,0xd9,0x61,0xba, + 0xef,0xf1,0x7e,0x1c,0x4f,0xc5,0xb9,0xcd,0x27,0xd7, + 0x73,0x08,0x8a,0xc7,0xb5,0x03,0x14,0x4e,0xee,0x2a, + 0xe1,0x53,0xb0,0x0d,0x53,0x53,0x56,0x9d,0x76,0x1a, + 0xbb,0x4f,0x45,0xcf,0xd4,0x22,0x1b,0x5a,0x7e,0x47, + 0x5d,0xd3,0x53,0xd0,0x76,0xbc,0xa2,0x94,0x20,0x99, + 0x35,0x7e,0xa6,0x83,0x82,0x3e,0xd7,0x55,0xe2,0xd2, + 0xb2,0xb5,0x09,0x47,0x6a,0xf3,0xe8,0xfb,0x9a,0xda, + 0x65,0xd4,0xaa,0xea,0xf4,0x09,0x23,0x60,0x79,0x26, + 0xf5,0x70,0x42,0xf2,0xdc,0x5e,0x75,0xfc,0xd4,0x74, + 0xce,0x84,0x02,0xe2,0x71,0xdf,0x4e,0x4d,0x1c,0xd6, + 0xd1,0xf9,0xa0,0x7d,0x6b,0x7f,0xd6,0x4c,0x3c,0x63, + 0xf2,0xac,0x42,0xbf,0xe4,0xa6,0x4e,0x28,0x4d,0x58, + 0xc7,0xc7,0x81,0x1b,0x24,0xb8,0xe8,0xf6,0x72,0x6f, + 0x53,0xca,0x99,0x7f,0x48,0x9b,0x8a,0x50,0x45,0x42, + 0xd9,0x27,0x54,0xdc,0xed,0x01,0x4a,0x94,0x1f,0xeb, + 0x89,0x02,0x4f,0x37,0xc6,0xec,0x0f,0x37,0x05,0x55, + 0xd0,0x4a,0x08,0xfa,0x55,0x07,0x21,0xc4,0x4d,0x0f, + 0x75,0x22,0x07,0xd2,0x81,0xaa,0x24,0x3a,0x32,0x71, + 0x05,0xf8,0xfb,0x4c,0x41,0xd7,0xdd,0x4b,0x32,0x41, + 0xa5,0x7e,0x72,0xea,0x63,0x43,0xa0,0x58,0x7d,0x46, + 0xb2,0xa7,0xb8,0x82,0x54,0x81,0xd9,0x44,0x07,0x0e, + 0x33,0x82,0xe6,0x4f,0xf2,0xa6,0x82,0x09,0x96,0xa4, + 0xff,0x41,0x95,0xca,0xd9,0x12,0x22,0xcd,0x66,0x3e, + 0xe1,0x20,0x3c,0x0e,0x5e,0x15,0x74,0xe5,0x98,0xe4, + 0x49,0xd1,0x4f,0xe2,0x30,0x38,0xe3,0xd4,0x13,0xb8, + 0x1d,0x9a,0xc0,0xfd,0xfc,0xbc,0x0b,0x98,0xc9,0x1f, + 0xcc,0x8c,0xa2,0x47,0xa5,0xda,0xcd,0x24,0x28,0x55, + 0x8b,0x9f,0x70,0x89,0x5c,0x8b,0x68,0x22,0xd5,0x03, + 0x0f,0xe9,0x18,0xd3,0xd6,0x55,0xb1,0x26,0xc8,0xc8, + 0xa1,0x60,0xed,0x86,0x17,0x9c,0xda,0x32,0x4d,0xc5, + 0xb8,0x78,0x61,0xda,0x6c,0xa8,0x30,0xad,0x87,0x33, + 0x4c,0x0b,0xa6,0x62,0xf5,0xb8,0x69,0x20,0x37,0x52, + 0xed,0x0e,0x5d,0x67,0x43,0x43,0x83,0x35,0x97,0x21, + 0x88,0xbb,0x04,0x4c,0x84,0x6a,0x6d,0x01,0x40,0x62, + 0x8a,0x81,0x02,0x70,0x89,0x81,0xed,0x5b,0x22,0x40, + 0xc4,0xf2,0x89,0xa7,0xb5,0xb5,0x7a,0xb9,0xb9,0x4a, + 0x94,0x04,0xc8,0x99,0x7a,0xb4,0x10,0x49,0x85,0x2d, + 0xb5,0x74,0x49,0x70,0x13,0x4c,0xcd,0x6d,0xeb,0x31, + 0x25,0x7a,0x20,0xd3,0xf1,0xf8,0x9f,0x9a,0xa8,0xa6, + 0xc4,0x77,0x42,0xb4,0x80,0xe4,0x7c,0x1c,0xa0,0x42, + 0x49,0xe0,0x6f,0x52,0xaf,0xed,0x5c,0x01,0x85,0xa8, + 0x20,0xe0,0x9d,0xc9,0x50,0x51,0x37,0xae,0x3a,0x2c, + 0xa7,0xde,0x6a,0x0a,0x4e,0x30,0xfd,0x60,0x5b,0x2b, + 0x49,0xf5,0xd2,0xb5,0x0b,0x54,0xb1,0x39,0x71,0x76, + 0xa0,0xf5,0x73,0x6d,0xf8,0x48,0x69,0x4c,0xf9,0x7e, + 0x17,0x7d,0x62,0x47,0xdb,0x32,0xa1,0x5a,0xfc,0xb9, + 0x36,0xa7,0x7b,0xe4,0xc6,0xce,0x27,0x32,0xaa,0x26, + 0x6e,0xaf,0xd7,0xab,0x60,0xc3,0x14,0x8c,0xdb,0x52, + 0x6b,0xf0,0x71,0x3d,0xf7,0x9f,0xeb,0x77,0xd0,0x74, + 0x90,0x7b,0x1f,0x21,0xd0,0x58,0xee,0xd6,0x77,0x80, + 0xaa,0x90,0x74,0x3e,0x4c,0x82,0x5d,0xbb,0x4f,0xdb, + 0xa9,0x5a,0x31,0x2b,0x7f,0xc8,0xc1,0xf8,0xa9,0x7d, + 0x16,0x44,0x3c,0xbb,0xd1,0x69,0x6d,0x5a,0x45,0xa6, + 0xbd,0xad,0xc9,0x6d,0xd1,0x73,0x4f,0xc9,0x88,0xde, + 0x93,0x8a,0x21,0xba,0x83,0x9a,0x82,0xb5,0xbb,0xef, + 0x60,0x60,0x7c,0x28,0x31,0xa1,0xfd,0xd9,0xf7,0xbf, + 0x1c,0xd8,0x2b,0x7f,0xab,0x54,0xe0,0xb9,0x80,0xae, + 0x86,0xa2,0xee,0x67,0x53,0x91,0x66,0xd6,0x48,0x32, + 0x43,0x3e,0xa9,0xc5,0x9d,0xfc,0xd1,0xfa,0x81,0x9d, + 0x90,0x53,0xd7,0x2a,0x9b,0x26,0x3a,0xa5,0x90,0x40, + 0xa3,0x4b,0x68,0x07,0xd1,0x90,0xc6,0x21,0xd5,0x79, + 0xd7,0x76,0x4d,0xe2,0x7a,0xa6,0xc5,0x74,0x48,0x7d, + 0x9d,0x0a,0x31,0xe2,0x7b,0xa6,0xd1,0xfb,0x01,0x59, + 0x3f,0x89,0x1a,0x40,0xdd,0x13,0xb2,0x1a,0xa2,0xf6, + 0x63,0xa0,0x56,0xd8,0xc4,0x91,0x14,0xcc,0x5b,0x6c, + 0x39,0x41,0x68,0xd6,0x8d,0xad,0x9f,0x0d,0x5d,0xc3, + 0x49,0x66,0xa4,0xf3,0xfe,0xad,0x95,0xbc,0x35,0xca, + 0x5c,0x78,0xba,0x44,0x81,0xa2,0xa9,0x37,0x2a,0x02, + 0x82,0x07,0x0e,0xe3,0x33,0x41,0x9a,0x34,0xea,0xa7, + 0xf0,0xaf,0x13,0xd5,0x73,0x7d,0x57,0xad,0x0e,0xdb, + 0xa8,0xb1,0x5d,0x74,0xe9,0xe5,0x12,0xd2,0xe5,0x5a, + 0x69,0x12,0x0c,0x0f,0x41,0x90,0x60,0x39,0xf2,0x10, + 0xde,0x72,0x8b,0x40,0xaa,0xa0,0xde,0x7f,0x45,0xb1, + 0x42,0x97,0xd5,0x3b,0x44,0x43,0xd5,0x95,0x89,0x34, + 0x97,0x0e,0x40,0xaa,0x40,0x08,0x99,0x72,0xa8,0xc6, + 0x43,0xf9,0xd3,0xa0,0x94,0xc0,0x73,0xb3,0xd7,0xde, + 0x13,0xd0,0xa1,0x55,0x3b,0x8a,0x14,0x0e,0x95,0x30, + 0xf9,0x73,0x21,0xf4,0x0b,0x4a,0xb1,0x6f,0x62,0x7d, + 0x6a,0x8a,0x98,0xbe,0xdb,0x88,0xef,0x9d,0xe4,0x13, + 0x96,0x5a,0x47,0x13,0xd4,0x3f,0xa8,0x68,0x63,0x3b, + 0xeb,0x26,0x8e,0xea,0xff,0xd2,0xda,0x22,0x14,0x55, + 0xfe,0xff,0x31,0x36,0x9f,0xf6,0x92,0x24,0xeb,0x67, + 0x68,0x9f,0x8d,0x6d,0x76,0xe7,0xb1,0x65,0x50,0xe3, + 0x37,0xa4,0x25,0x7c,0xd6,0xb4,0xdf,0x0e,0x88,0x04, + 0xda,0xd6,0x6e,0x52,0x9b,0x4e,0x87,0x0d,0xed,0x57, + 0xf7,0x59,0xc9,0xcb,0x6c,0xf0,0xee,0x1a,0xcf,0x8e, + 0x14,0x3f,0x26,0xf3,0x4d,0x90,0x6d,0x38,0x89,0xba, + 0x31,0xc9,0x11,0x84,0x75,0x7a,0xd2,0xd4,0xd5,0x90, + 0xd0,0xda,0x33,0x33,0x49,0x94,0xb8,0xa2,0xc8,0x9d, + 0x55,0xee,0xbb,0xb5,0x9d,0x6d,0xce,0x88,0xe8,0xef, + 0xe7,0x8a,0x25,0x42,0xdb,0x34,0x49,0x33,0x46,0xaf, + 0xae,0x0d,0x6f,0x2d,0x3d,0x7e,0x2b,0x1a,0x23,0x0b, + 0xa9,0x52,0x4b,0xc8,0x2c,0xb4,0x1f,0xa4,0xc1,0x55, + 0xc4,0xa9,0x87,0x9f,0x50,0x19,0xe2,0x0f,0xf4,0x5e, + 0xa6,0x43,0x08,0x3a,0x82,0x43,0xcc,0x79,0xfd,0x3b, + 0x58,0xb0,0x95,0x48,0xa2,0xd2,0xc6,0xa9,0xe9,0x79, + 0x25,0xf8,0xb0,0x7f,0x9f,0x43,0x38,0xc8,0xa3,0xcb, + 0xa1,0x2f,0xa6,0x95,0x54,0xb0,0x41,0x8a,0xd0,0x18, + 0x58,0x7c,0xe5,0x10,0x83,0xd7,0xeb,0x55,0xbd,0x22, + 0x77,0x62,0x8d,0x6e,0xd2,0x8b,0xae,0xd3,0xac,0x31, + 0x4b,0x2c,0x6f,0x30,0x71,0x01,0xef,0xa7,0x60,0x9c, + 0xf3,0x4d,0x6c,0xd0,0x88,0x66,0xbd,0x79,0x74,0xb9, + 0x04,0x5e,0x51,0x1c,0x83,0x28,0x1c,0x45,0x62,0x4c, + 0xb2,0x72,0x57,0xac,0x96,0xdc,0xee,0x60,0xee,0xef, + 0xeb,0xac,0xa9,0x1d,0xdb,0x51,0x2d,0x49,0x98,0x6a, + 0xf2,0x43,0xa2,0x09,0x21,0x6a,0x35,0x4c,0x2a,0xac, + 0xb2,0x6f,0x2a,0x89,0xed,0x01,0x42,0x10,0x93,0x17, + 0x50,0x46,0x8f,0x08,0xa6,0x23,0xc7,0x26,0xb2,0x37, + 0x71,0x0b,0x12,0x3a,0xed,0xda,0x5d,0xfd,0xbb,0xf5, + 0x39,0x6b,0x25,0x1d,0x62,0x96,0x1d,0x53,0x97,0xcf, + 0x4b,0x2d,0x81,0x33,0x5c,0x6f,0x34,0x11,0x9e,0x90, + 0x26,0x92,0xb8,0x70,0x22,0x85,0xc4,0xad,0xdb,0x10, + 0x5b,0xa7,0x83,0x3c,0x4c,0xe7,0x1e,0xd2,0x93,0xd3, + 0xb6,0xb4,0x6b,0x03,0x92,0xea,0x7c,0x90,0x2c,0x41, + 0xd2,0x37,0x21,0x9d,0x66,0x48,0xe0,0x24,0x34,0xa6, + 0xa3,0x4d,0x61,0x98,0x00,0xaf,0x99,0xce,0x2c,0x27, + 0x8e,0x49,0xad,0x29,0x42,0x9c,0xe8,0xde,0x81,0x4e, + 0x73,0x92,0x73,0x03,0x0c,0x4e,0x9c,0x0d,0x2f,0xb0, + 0x5f,0xc3,0xef,0x69,0x24,0x34,0xb4,0x10,0x2a,0x09, + 0x0d,0xb9,0x03,0x81,0xc8,0x4a,0x9b,0xc9,0x8d,0x8d, + 0xc9,0xa6,0xdb,0x5c,0xce,0xe4,0x53,0xdb,0x23,0x2d, + 0x43,0x7d,0x53,0x6c,0x76,0x49,0x8c,0x1b,0x3d,0x5f, + 0x5c,0xff,0x63,0x0c,0x5c,0x27,0xa9,0x12,0x43,0xbf, + 0x27,0xa4,0xa4,0x92,0xbc,0x10,0x6d,0xc4,0xa9,0xbc, + 0x7b,0x12,0xce,0x4c,0x4c,0x3c,0x46,0xf1,0x55,0x6a, + 0xc0,0x64,0xd9,0x4e,0xa1,0xdb,0xb6,0xc9,0xb4,0x1d, + 0x46,0x2d,0x2f,0x97,0x90,0x92,0x77,0x1d,0xb4,0x15, + 0xdf,0x46,0xc7,0xd3,0x7b,0x48,0xed,0xdd,0x20,0xc1, + 0x70,0xf4,0xb3,0x75,0x64,0xd9,0xbd,0x27,0x93,0x94, + 0xdb,0xb1,0xfa,0xa0,0x97,0xf5,0x18,0x89,0x27,0xfe, + 0x8a,0x31,0x0c,0xee,0x6d,0x82,0x4a,0x6d,0xd8,0x69, + 0xda,0xd2,0xb5,0xb7,0x52,0xcb,0x48,0x2b,0xfb,0x94, + 0x28,0xf5,0xca,0xd2,0xf1,0xe8,0x52,0x4b,0x6b,0x33, + 0x66,0x9e,0xc8,0xb4,0x8b,0xe4,0xf2,0x4c,0xcf,0x24, + 0x1d,0x02,0xa9,0xed,0xad,0x09,0xb9,0x4b,0x8e,0xfa, + 0x68,0x7d,0x72,0x91,0x87,0xd8,0x78,0x02,0xd7,0xc8, + 0x1e,0x64,0x8e,0xf3,0xe3,0x0e,0x78,0x52,0x68,0x4e, + 0x3e,0x51,0x0e,0x9d,0x26,0xa1,0xc5,0xe9,0xf0,0x85, + 0x62,0x0b,0x11,0x5f,0xc3,0xf3,0x72,0xd7,0x73,0x92, + 0xce,0x95,0x12,0x80,0xb7,0xa6,0xbf,0x89,0x31,0xb2, + 0xd9,0x73,0x09,0x55,0xbb,0x9a,0x2c,0x01,0x01,0x1d, + 0x34,0x70,0xa3,0xa6,0xc0,0x24,0x59,0x33,0x25,0xa5, + 0xe9,0x4c,0x4b,0x89,0x6a,0x48,0x68,0x49,0xe9,0xfb, + 0x0a,0xf6,0x41,0x58,0xa4,0xbd,0xfe,0xfd,0x79,0x86, + 0xd4,0x5c,0x56,0x99,0x20,0x39,0xea,0x61,0x43,0x4b, + 0xe1,0x53,0x68,0x12,0x05,0xf4,0x26,0x36,0x38,0x4d, + 0xc6,0xb8,0xf1,0xbb,0xa4,0xab,0xb0,0x0d,0x72,0x8a, + 0xb4,0x18,0x2f,0x2e,0xfa,0x1f,0xf6,0xdc,0x15,0x05, + 0x73,0xc4,0x31,0xed,0x55,0xdf,0x07,0x53,0x17,0x0d, + 0x4c,0xa6,0xa8,0xca,0xcd,0x4a,0xa4,0x55,0x32,0xe8, + 0xeb,0x07,0x17,0x41,0x9b,0xa4,0x34,0xeb,0xaa,0xa2, + 0xc9,0xdb,0x6d,0x80,0xd7,0xb1,0xe2,0xd5,0xdf,0x25, + 0x08,0x95,0xb8,0x1a,0xd2,0x86,0x38,0x24,0xba,0xd9, + 0xbe,0xc3,0xbe,0xdb,0xde,0x8e,0xec,0x6d,0x2b,0x4a, + 0xc0,0x0d,0x7f,0x20,0x0e,0x03,0x0c,0x5a,0x3c,0x3f, + 0x26,0xa0,0xe1,0xda,0x57,0x05,0x12,0x11,0x96,0xa7, + 0xb5,0x3c,0xb5,0x1c,0xa6,0xcf,0x9b,0x46,0xe9,0x25, + 0x19,0x3f,0x57,0x10,0xb1,0xa3,0xd6,0xa2,0x04,0x61, + 0x9c,0x96,0x72,0xea,0xf2,0x97,0x11,0xf1,0x04,0xb4, + 0xea,0x0d,0x7d,0x70,0x6d,0xaf,0xde,0x9e,0x85,0x98, + 0x87,0xe4,0x79,0xad,0xba,0xc9,0x2b,0x2e,0xa9,0xa0, + 0x2f,0xd0,0x3d,0xbb,0xc7,0xd3,0xf8,0xb5,0x59,0x3f, + 0x07,0xda,0x1a,0xc7,0xbd,0xf3,0x8b,0xc7,0xca,0x0f, + 0x1c,0xc2,0xc7,0x21,0x0a,0xe9,0x3b,0x9d,0x70,0x1f, + 0xc4,0x02,0x6c,0xdb,0x12,0x87,0x8a,0x0a,0x01,0x3d, + 0x2b,0x5d,0xc2,0x4b,0xbf,0x07,0x9f,0x85,0xeb,0x96, + 0x10,0xe0,0x64,0x22,0xec,0x12,0xba,0xad,0xdd,0x15, + 0x11,0x9f,0xa7,0x78,0xe3,0xd0,0xe1,0x0f,0xa7,0xb6, + 0xff,0x45,0xb6,0x74,0xd2,0x44,0xc6,0x68,0xcf,0x04, + 0x3d,0x26,0x8e,0x90,0x7b,0xa0,0x1b,0x73,0x34,0x0d, + 0xa0,0x8e,0x2c,0x3d,0x09,0x9f,0x91,0x75,0x83,0x6e, + 0x0c,0x23,0x4d,0x7f,0x9c,0x81,0xe2,0xa4,0xe2,0xab, + 0xde,0x58,0x14,0xa4,0xcf,0x39,0xd7,0x9f,0x3f,0x7f, + 0xb0,0x9a,0x72,0x0b,0x55,0xd5,0xaf,0xdd,0xb4,0x85, + 0xfe,0x7e,0xe3,0x46,0xe0,0x34,0x90,0x23,0xe1,0x89, + 0xc1,0x67,0x4c,0x50,0x61,0x6a,0x80,0xc8,0x7c,0x87, + 0x2a,0xde,0x10,0x70,0xdf,0xa6,0xf6,0x9c,0x09,0xa5, + 0x41,0x0b,0x8e,0xe3,0x52,0x39,0xbe,0x84,0xbb,0x76, + 0xe7,0x96,0x2e,0xc4,0xce,0x93,0x38,0x6f,0x1d,0x12, + 0x0f,0x16,0x12,0x47,0xd7,0x88,0x12,0xa6,0x9b,0xcd, + 0xc9,0x21,0x0e,0x89,0xfb,0xee,0xc6,0xd5,0x19,0xcd, + 0x09,0xa9,0xa5,0xd5,0xf9,0x3e,0xfd,0xf3,0x36,0x6d, + 0xdc,0x69,0x1a,0x2c,0xc5,0x02,0x8a,0x0d,0xc9,0xa4, + 0x39,0x71,0x88,0x2e,0x71,0xaa,0xd7,0x35,0x4e,0x2d, + 0xb6,0x8e,0xe0,0x49,0xfb,0x03,0x27,0x0f,0x61,0xb2, + 0x06,0x13,0x25,0xf3,0x1e,0xd1,0x4c,0x37,0x7d,0x9e, + 0xb1,0xbd,0x39,0x0b,0x2e,0xd7,0xe3,0xd9,0xdd,0xdc, + 0x46,0x8d,0x25,0xba,0x66,0x83,0xaf,0xd3,0x81,0x24, + 0x36,0xb6,0xc4,0x88,0x7f,0xe5,0x62,0x7c,0xb0,0xb6, + 0x39,0x01,0xf1,0xb6,0xad,0x43,0xd2,0xd5,0x01,0xfe, + 0xc8,0x63,0x32,0xda,0x9d,0x99,0xca,0x1d,0x34,0x6b, + 0xd1,0x79,0x25,0x22,0x62,0x11,0x6c,0x43,0x1e,0xcf, + 0xd0,0xad,0xfd,0x1e,0x3b,0xa7,0xe2,0x11,0xce,0x53, + 0xe2,0xb2,0x91,0xfa,0xf4,0x99,0x8a,0x5c,0x77,0x26, + 0x4c,0x20,0x42,0xfa,0x47,0x79,0x45,0x84,0xaa,0x93, + 0xad,0xd3,0xcb,0xc9,0xee,0x6f,0xbe,0x78,0xe8,0x0f, + 0x3f,0x0e,0x18,0x4d,0x0c,0xa4,0x3d,0x45,0xca,0xab, + 0x47,0x16,0x9d,0x4d,0x6a,0x7a,0x0b,0x0b,0x82,0xf1, + 0x49,0xe8,0x05,0xd9,0x6d,0xe8,0xe1,0xb2,0xa9,0x8c, + 0xe9,0x90,0x51,0xae,0x80,0x04,0xcd,0x33,0x04,0xf2, + 0xb7,0x45,0x09,0x04,0xed,0x43,0x01,0xfd,0x0e,0x70, + 0x4a,0x6a,0x4b,0x9a,0x41,0x54,0xf8,0x51,0x72,0xa9, + 0x0b,0xab,0xff,0x5c,0xab,0x5a,0x6c,0xd2,0xa4,0x41, + 0xc9,0x71,0x0a,0xa6,0xbf,0xd3,0x7b,0xbe,0x2d,0x06, + 0x82,0x8b,0xfa,0xe3,0x59,0xb7,0x44,0xeb,0x6c,0xd6, + 0xfe,0x9d,0x68,0xc2,0xd4,0xca,0x99,0x0c,0x7e,0xcf, + 0xb3,0x4f,0x7a,0xa9,0x16,0x51,0x4b,0xd6,0x1f,0x3c, + 0x01,0x25,0xae,0xea,0x38,0xe8,0x95,0xa5,0x02,0xe2, + 0x5a,0x76,0x3d,0xf9,0x9e,0x50,0x38,0x02,0xac,0xe3, + 0xe7,0x39,0xbd,0x93,0xad,0x93,0xf4,0xd4,0xff,0x57, + 0x04,0xec,0x12,0x97,0x79,0x42,0x71,0x52,0x21,0x66, + 0x90,0x58,0xab,0x93,0xe4,0xd6,0x8e,0x1c,0x04,0x2b, + 0xb9,0x8c,0xae,0xe3,0x44,0x28,0x18,0x1d,0xa0,0xee, + 0x73,0x06,0xeb,0xa1,0x43,0x23,0xd0,0x17,0x78,0xe3, + 0x4d,0xd5,0xb8,0x4b,0x1a,0x12,0x4f,0x48,0x13,0x05, + 0x97,0x84,0x90,0xc9,0x70,0xe2,0xaa,0x69,0x3c,0x0f, + 0xce,0xed,0xc4,0x31,0x7d,0x74,0x10,0x6e,0xbf,0xb3, + 0x8d,0xc1,0x2f,0xa1,0x2b,0x3d,0xb6,0x2d,0xd7,0xf8, + 0x27,0x43,0x33,0xb1,0xa5,0x94,0x86,0x6c,0x1c,0x27, + 0xad,0x17,0xbf,0x7d,0xaa,0x8b,0x90,0x68,0x3a,0x3b, + 0x54,0x69,0x7a,0x03,0x9c,0xb8,0xf7,0xe3,0xf8,0x94, + 0x69,0x3d,0xd2,0x64,0x79,0x42,0x90,0x5e,0x09,0x8e, + 0xa4,0xd6,0xc5,0x22,0x60,0x1e,0x6d,0x7f,0x10,0x12, + 0x44,0x3a,0x0b,0xbd,0xea,0x77,0xc2,0x51,0x72,0x60, + 0xa1,0x82,0xf3,0x60,0x3a,0x7a,0xa0,0xc5,0x87,0x28, + 0x41,0xd2,0xa9,0x21,0xb1,0x32,0x82,0x48,0x17,0x6d, + 0x01,0x54,0x50,0xa5,0x97,0x9a,0xa4,0xd5,0x25,0xc9, + 0xb4,0x09,0x6c,0xf7,0x80,0x31,0x46,0x99,0x23,0xb9, + 0x6d,0x83,0x04,0x4d,0x3d,0x5c,0xf3,0xac,0x4f,0xa8, + 0x5a,0x6c,0x62,0x4a,0x5e,0x6f,0x9a,0x3c,0xe9,0x61, + 0x40,0x82,0x62,0x53,0x92,0x07,0x87,0xc6,0x49,0xc4, + 0x79,0x35,0xd9,0x74,0x36,0x13,0xca,0x0d,0x71,0x2d, + 0x80,0x44,0xe6,0xef,0x07,0xf9,0xfd,0x6e,0xa7,0x11, + 0xe0,0xd4,0x6e,0x04,0x44,0x82,0xfe,0x97,0xda,0xbc, + 0x51,0x54,0xd3,0x05,0xbf,0x8e,0x48,0xf5,0x7f,0x68, + 0x0a,0x29,0xe9,0x9a,0xb8,0xbd,0xd8,0x62,0xcc,0x03, + 0x61,0x4c,0xa3,0xf9,0x3d,0x19,0x50,0x3f,0xaa,0x20, + 0xd9,0xf1,0x68,0x5b,0xea,0x21,0xd4,0xf5,0x99,0xa8, + 0x85,0xa9,0x48,0x2f,0x04,0xff,0xe3,0x8a,0xc6,0x1e, + 0x07,0x87,0xc2,0xf7,0xa4,0x49,0xaf,0xd0,0xf6,0xc3, + 0x42,0x70,0xf2,0x2c,0xdb,0xbc,0xb3,0xbb,0xd0,0xd9, + 0x14,0xe8,0xba,0x21,0x93,0x8f,0x22,0x4d,0x8e,0x51, + 0xe1,0x37,0xc4,0xf1,0x33,0xd9,0x89,0x80,0x13,0x7b, + 0x4c,0x70,0x28,0x29,0x74,0x26,0xd0,0x93,0x6e,0x14, + 0xe8,0xcc,0x9d,0xc4,0x7b,0xdb,0xb6,0x40,0x09,0x51, + 0x23,0x5a,0x49,0xd7,0x8e,0x72,0x08,0x26,0x9d,0x35, + 0xee,0xb3,0x94,0x93,0xe8,0xda,0x7a,0x2f,0xed,0x71, + 0x12,0x91,0x0e,0x32,0xe0,0xb3,0x30,0x81,0x73,0x93, + 0x52,0x16,0x2a,0x85,0x8c,0xfd,0x40,0x2f,0x9c,0x04, + 0xbf,0x88,0x68,0x78,0x88,0x20,0xb5,0x71,0x66,0xef, + 0x87,0xb7,0x4c,0xa0,0x3d,0xda,0x69,0x09,0x1e,0x0f, + 0xc6,0x85,0x47,0x93,0xba,0x4f,0x5c,0x72,0x5d,0x72, + 0x41,0x88,0x4f,0x42,0x3a,0x82,0x17,0xd2,0x09,0xd5, + 0xd0,0x71,0xed,0x0d,0x55,0x30,0xd5,0xa4,0x65,0x32, + 0x27,0xd5,0x76,0x42,0x18,0x51,0x3d,0x01,0xea,0x4d, + 0xfa,0x27,0x58,0xa9,0x0f,0xba,0x24,0x6f,0x2d,0x27, + 0xf0,0xce,0x7b,0x6b,0x0f,0x2c,0xda,0xb5,0x88,0xd6, + 0x18,0x21,0xb4,0xa3,0x87,0x74,0xb2,0x23,0x30,0x53, + 0x86,0x47,0x39,0x4b,0xc1,0x7a,0x05,0x5b,0x45,0x09, + 0x01,0x6e,0x6e,0xe1,0x6f,0x02,0x84,0xfa,0x67,0x61, + 0xbc,0xfe,0xf4,0xc4,0x8d,0x5a,0x69,0x4e,0xc7,0x8b, + 0xfe,0xd7,0xef,0xe3,0x2e,0xcc,0xbe,0x0f,0xd0,0x23, + 0x06,0xaa,0xe3,0xfd,0x4a,0x2b,0xfd,0x38,0x74,0x37, + 0xf1,0xb5,0x28,0xce,0x88,0x78,0xdd,0x09,0xbc,0x9a, + 0x87,0xe1,0x2d,0x14,0x7d,0xc7,0xc9,0x3c,0xa8,0x01, + 0x25,0xb4,0x1a,0xcf,0x15,0xb8,0x98,0xc4,0xed,0x19, + 0x6c,0x38,0x8e,0x26,0xe0,0x89,0x9b,0xa2,0x2d,0x6d, + 0x98,0xd2,0x74,0xfb,0xda,0xfa,0xfa,0xd1,0x39,0xe6, + 0x62,0x5a,0xd0,0x70,0x5b,0x71,0xa3,0x28,0x81,0x0e, + 0x45,0x46,0x24,0x7d,0x4f,0x2d,0xb1,0x6e,0x4e,0x6e, + 0xd0,0xac,0x63,0x90,0xee,0x11,0xcc,0xe8,0x9f,0xd3, + 0x8b,0x3e,0x39,0x8f,0x57,0xe2,0xb9,0xd4,0x16,0x9d, + 0x50,0xd9,0x24,0xd0,0x4b,0x03,0x57,0x64,0x76,0xfd, + 0x88,0x03,0x6e,0x36,0x9f,0xfc,0x77,0x36,0xb2,0xdd, + 0x89,0x34,0x4a,0x0b,0xc0,0x1d,0xf4,0xa9,0x55,0x05, + 0x53,0x11,0xf6,0xa5,0xa5,0x6a,0x73,0x31,0x31,0x65, + 0x17,0xd8,0x64,0xee,0x48,0x3d,0x6e,0xd7,0x4e,0xd3, + 0x6c,0x75,0xd3,0xbe,0xbb,0xc7,0x9a,0x49,0x7c,0x2b, + 0xbd,0xd3,0xc4,0x47,0x48,0x70,0xb2,0x3b,0x58,0x75, + 0xc2,0x80,0x26,0x09,0xa9,0x02,0x22,0xc7,0xe2,0xa0, + 0xea,0x9b,0x76,0xeb,0x09,0x15,0xff,0xd9,0x20,0x6d, + 0xa0,0x92,0x6a,0x79,0x41,0x94,0x5c,0x07,0xa5,0xf4, + 0x07,0x07,0x05,0xe0,0xdf,0xe3,0x82,0x69,0x90,0xe7, + 0x3f,0xdd,0x86,0x60,0xc3,0xa3,0xd1,0x76,0x60,0xb2, + 0x69,0x48,0x28,0x0a,0xd9,0xbf,0x6c,0x03,0x1b,0xed, + 0xf3,0xc1,0x0c,0x36,0xc6,0x13,0x87,0x08,0x03,0x1f, + 0xed,0x71,0xcf,0x81,0xb3,0x45,0x95,0xf0,0x71,0xfb, + 0xc4,0x49,0x6e,0xf4,0xe4,0x6a,0xa1,0x17,0x73,0x26, + 0x34,0xa0,0x73,0x3c,0x08,0x81,0x74,0xe4,0x5d,0x45, + 0x05,0x7b,0xbc,0x4c,0x42,0x79,0x13,0x8a,0xe2,0x38, + 0x70,0xe6,0x3d,0x8c,0x68,0x79,0xd0,0x65,0x4a,0x39, + 0x47,0xdc,0xeb,0xae,0x60,0x26,0xbe,0x0d,0x70,0x03, + 0xed,0xdf,0xe9,0x7e,0x4b,0xe3,0xfd,0xae,0x9d,0x97, + 0xbc,0x2b,0xdd,0x3b,0xd4,0xe4,0x77,0x43,0xb6,0xee, + 0x5d,0x80,0x44,0xee,0x26,0x6e,0xce,0x46,0xa4,0xd8, + 0xd9,0xdf,0xd0,0x59,0x0c,0xa0,0x80,0x45,0x97,0x26, + 0xcd,0xbb,0xfb,0x3c,0xde,0xb6,0xd5,0xdc,0x7a,0x78, + 0xa9,0x84,0x34,0x1d,0x20,0xc9,0x1e,0x40,0x2f,0x52, + 0x7b,0xb0,0xca,0x05,0x98,0xaa,0xc7,0x94,0x49,0x3a, + 0xde,0x4b,0x9a,0x3a,0xa0,0x0a,0x91,0x1c,0xe8,0x5d, + 0xff,0x98,0x82,0xa4,0x3b,0x04,0xcd,0xc3,0x3f,0x53, + 0xd6,0xaa,0xfd,0x66,0x22,0xb4,0xd1,0x73,0xd3,0x56, + 0xa5,0x8e,0x0e,0xa7,0x69,0x2b,0xba,0xee,0x7e,0x58, + 0x3b,0x45,0x5a,0x7d,0x6e,0x0a,0x45,0x37,0x38,0xff, + 0x6d,0x72,0x81,0x26,0x3a,0x5c,0x70,0x23,0x44,0xd0, + 0xb5,0x0c,0x7a,0xf0,0x4d,0x08,0x23,0x6d,0x90,0xc4, + 0x57,0xd0,0x4a,0x9a,0x3c,0x71,0x34,0x90,0x93,0xa4, + 0xbc,0x9b,0x8c,0x83,0xb6,0xdf,0x99,0x8c,0x00,0x65, + 0xcd,0xc7,0xd6,0x4d,0xe2,0xdc,0xf4,0xd6,0xcf,0x65, + 0x2c,0x3f,0x52,0xc2,0xe2,0x0e,0xc3,0x04,0x8b,0x4f, + 0x12,0x17,0x34,0x18,0x31,0x8d,0xd1,0x52,0x20,0xa6, + 0xfb,0xa2,0x24,0x2e,0x70,0xa4,0x8e,0x26,0x3e,0xfa, + 0x59,0x1d,0xad,0xee,0x08,0x51,0x72,0xc8,0x96,0x58, + 0x61,0x45,0xde,0x36,0x27,0x7f,0xdb,0xaf,0x0f,0x31, + 0x48,0x6a,0x93,0x42,0x81,0x8b,0x43,0x1c,0x1d,0xf1, + 0x74,0x49,0xc6,0xe6,0x9c,0x98,0xd6,0x81,0xb6,0x8f, + 0x0c,0x41,0xfd,0x50,0x2c,0x9e,0x04,0x02,0x37,0xe8, + 0x70,0x4f,0xf0,0xd4,0x1a,0x03,0x0a,0xf6,0xb3,0x98, + 0xb4,0x1c,0x6d,0x82,0x52,0xe1,0x42,0x89,0xed,0x94, + 0x70,0x6d,0x0a,0x96,0xe4,0xf1,0x98,0x5a,0x70,0x69, + 0x5c,0x3d,0xb5,0xde,0x48,0x47,0x30,0x0d,0x13,0x38, + 0xba,0x81,0x8b,0x9b,0x24,0x00,0x49,0xfb,0xe7,0xe5, + 0xfa,0xdb,0xce,0x47,0x28,0xbc,0x0c,0x5c,0x6c,0xe0, + 0x27,0x96,0x5a,0x67,0x8f,0x76,0x82,0xab,0xaa,0xdc, + 0xa1,0x3f,0x8d,0xa9,0xb7,0xc0,0x80,0x15,0x48,0x92, + 0x5a,0x27,0x6e,0x87,0xd9,0x24,0x58,0xb9,0x24,0x19, + 0xf7,0x7e,0x8d,0x5b,0x66,0xfc,0xeb,0xf5,0x3a,0x30, + 0xba,0x1f,0x4d,0x62,0x4d,0x16,0x4e,0x7c,0x97,0x43, + 0xca,0xb3,0x69,0x13,0x03,0x13,0xff,0xc0,0x7b,0x3b, + 0x61,0x1a,0x29,0x56,0xc8,0x14,0x68,0x43,0x35,0x77, + 0x3a,0xf2,0x64,0x7a,0xc3,0x47,0x13,0x3f,0xc3,0x5d, + 0x38,0xa9,0x95,0xa5,0x2d,0x8e,0x60,0x20,0x78,0x2e, + 0x63,0x18,0xa8,0xc4,0xe6,0x36,0xb2,0x1d,0x05,0x07, + 0x9d,0xfa,0xf3,0x05,0xc4,0x51,0x47,0x72,0x84,0x43, + 0xe3,0xa7,0x5d,0x25,0xd7,0x11,0xf5,0x6f,0xd2,0x9f, + 0x4d,0xdc,0x0e,0x8a,0x31,0x09,0x61,0xec,0x08,0x8b, + 0xb6,0xdc,0xae,0x40,0x02,0x4f,0x23,0xbe,0x9a,0x88, + 0x6a,0x1b,0x66,0x1a,0x3b,0xd6,0x16,0xe3,0xa0,0x77, + 0x74,0x1c,0x41,0x99,0xda,0xa9,0xc3,0xe1,0x7e,0x86, + 0x78,0x78,0x3a,0x8a,0x0d,0x6b,0x9c,0xde,0x41,0xf2, + 0x40,0x5b,0x4f,0x7b,0x69,0xfb,0x10,0x4c,0xb6,0xa3, + 0x61,0xb3,0x5b,0xf3,0x8a,0xd4,0x26,0x24,0x9e,0x86, + 0x14,0xb4,0x40,0x21,0x93,0x58,0x05,0x07,0x4c,0xc2, + 0x72,0x88,0x6c,0x6c,0xd6,0xce,0xba,0x38,0x55,0xe9, + 0x13,0xb2,0x03,0xea,0xfa,0x45,0x10,0xaf,0x22,0x77, + 0x33,0xb5,0x0f,0x5d,0x87,0xc2,0xc5,0x38,0x3d,0x17, + 0xa7,0xa9,0xe2,0x04,0x10,0xc0,0x40,0xc5,0x71,0x53, + 0x7a,0x61,0x30,0xe4,0xb1,0x67,0x7f,0x9b,0x9e,0x72, + 0x05,0xbe,0x4f,0x25,0x04,0x27,0x09,0x26,0x12,0x0a, + 0x63,0x38,0x1f,0x0f,0x3f,0xa8,0xee,0xcf,0x64,0x82, + 0xf9,0x9b,0x92,0xb1,0xf4,0x70,0xcb,0xd9,0x36,0xa8, + 0xcf,0x59,0xbf,0x77,0xad,0x2a,0xfa,0xc3,0xa7,0xc4, + 0x46,0x82,0x40,0xdd,0x07,0x68,0x4b,0x00,0x1f,0xea, + 0xc6,0xda,0x06,0xd9,0x98,0x46,0x82,0x46,0x0d,0x09, + 0x03,0x3e,0x14,0x90,0xdb,0x42,0x2b,0x53,0x11,0x9e, + 0xaf,0xaf,0xaf,0x9a,0x44,0x02,0x9f,0xb9,0x8b,0x65, + 0xea,0x57,0xd8,0x90,0x8f,0xd1,0xdd,0xfe,0x1d,0x26, + 0x00,0x54,0x6f,0x11,0xde,0x09,0xdf,0xfd,0x3d,0xc1, + 0x86,0xa2,0x86,0x0a,0xa0,0x02,0xb2,0xf2,0x10,0x80, + 0x34,0x89,0xde,0x34,0x26,0xf9,0xf8,0x8c,0x00,0x93, + 0xd7,0x74,0x48,0xca,0x14,0x61,0x4d,0xed,0x5c,0x25, + 0xcc,0x6f,0xd4,0x9f,0xe9,0x33,0x52,0x82,0xea,0x90, + 0xc7,0xef,0xb5,0x5d,0x69,0xa2,0x88,0x5a,0xe1,0x2e, + 0x26,0x28,0x1a,0x40,0x89,0x54,0x22,0x62,0x6e,0xfd, + 0xcb,0x5c,0xa1,0xe0,0x5a,0xd5,0xae,0x90,0x72,0xe2, + 0x73,0xa6,0xe5,0x62,0x39,0x0a,0x2e,0xa1,0xd1,0xa1, + 0x0c,0x6a,0xf9,0xf7,0x96,0x7d,0x6a,0x77,0x12,0x57, + 0xa3,0x15,0x51,0x27,0xf0,0x0d,0xed,0x40,0x46,0x6a, + 0xa5,0xe8,0x68,0xf9,0x06,0xf1,0x27,0x34,0x44,0xbd, + 0xa1,0xdc,0x1a,0x25,0xce,0x4e,0x8f,0x37,0x93,0x91, + 0x2e,0x75,0x20,0x48,0x94,0x75,0x1a,0x1f,0x77,0x7b, + 0x68,0xf0,0x89,0x8c,0xff,0xf4,0x89,0x32,0x75,0x43, + 0xa0,0xa2,0x82,0x00,0x8c,0x60,0x3b,0x84,0xb4,0x04, + 0x79,0x5e,0x6f,0xd3,0xb0,0xe9,0x6c,0xdc,0x0c,0xed, + 0x24,0x03,0xf3,0x84,0x6a,0xd1,0x5a,0x4d,0x83,0x4f, + 0x3f,0x40,0x0a,0x6d,0x64,0x52,0x71,0x4c,0x5c,0x17, + 0xc7,0x1b,0x22,0xd8,0xdd,0x65,0xc8,0x9d,0xe4,0x46, + 0x93,0x47,0x13,0xc3,0x7c,0x0a,0x6e,0x09,0x06,0x4e, + 0x0a,0xa6,0x26,0x9b,0xc5,0xb1,0x6d,0xe2,0x01,0x98, + 0x24,0x10,0x65,0xc0,0x01,0x59,0x3a,0x13,0x2f,0x23, + 0x71,0x27,0x52,0x9b,0xc2,0x05,0x76,0x5a,0xa8,0x64, + 0x62,0xab,0xee,0xc3,0xc0,0x9b,0x18,0x3d,0x6b,0x52, + 0x30,0x71,0x6d,0x3a,0x98,0x1e,0xa3,0x4a,0xf1,0x31, + 0x59,0x96,0xde,0x7b,0xd8,0x6c,0x27,0x21,0x7c,0xd2, + 0x7a,0x89,0x2d,0x9e,0xce,0x0f,0x4a,0x93,0x29,0x4e, + 0x0f,0x46,0xf7,0x89,0xd3,0xb3,0x69,0xe8,0xd2,0x4f, + 0x1b,0x88,0x0a,0x99,0x49,0xd0,0x6c,0xf0,0x39,0x52, + 0xc9,0xfe,0x07,0xe1,0xd9,0xe8,0xf2,0xfc,0xfc,0xef, + 0x26,0x24,0x2b,0x92,0x73,0xf3,0xdd,0x92,0x76,0xc9, + 0x24,0x1a,0x99,0x1c,0xa1,0x95,0xcc,0xbc,0x90,0xa2, + 0x70,0xd5,0xf4,0xa8,0xf9,0x23,0x66,0xba,0x84,0x3a, + 0x5b,0x34,0x37,0xa9,0xef,0x92,0x24,0x81,0x9b,0x38, + 0x03,0x5f,0xa9,0x87,0x50,0x63,0x12,0xb1,0xd5,0x7d, + 0x16,0x84,0x24,0xd1,0x99,0x3e,0xe8,0x5b,0x1d,0x42, + 0x34,0x02,0xe7,0x25,0x8a,0x20,0xd2,0x79,0x45,0xbc, + 0xa2,0x69,0x3a,0x6c,0xe2,0x98,0x51,0x22,0x12,0xb4, + 0xaa,0xc6,0x78,0xd8,0xdb,0xfd,0x49,0xb6,0x85,0x90, + 0x72,0x69,0xa9,0x9e,0x34,0x30,0x92,0x48,0xc3,0xee, + 0x7b,0x4d,0x3b,0xff,0x90,0xf2,0x7a,0xe2,0xe2,0x26, + 0xf4,0x97,0xd6,0xb6,0x43,0x4b,0xf5,0xf9,0xa4,0xd8, + 0xfb,0x72,0xcc,0x7f,0x20,0xd7,0xe2,0x58,0xb1,0x23, + 0x20,0x2b,0xa4,0x38,0x25,0x52,0x9a,0xcd,0x42,0xb5, + 0x13,0xd9,0xe6,0xa4,0x9d,0xe0,0x44,0x10,0xd5,0x87, + 0x47,0x39,0x24,0xe9,0xf3,0x9d,0x2f,0x8b,0xfe,0x9e, + 0x21,0x62,0x23,0xc3,0x5f,0x5f,0xee,0x77,0x02,0x68, + 0x03,0xd6,0x14,0x00,0x1b,0x9f,0xe8,0x72,0x9c,0x94, + 0x54,0x79,0x06,0x79,0x7c,0xba,0xcf,0xc4,0x4d,0x7a, + 0x4c,0x7a,0xb5,0x09,0x26,0x72,0xd5,0x46,0x9f,0x9b, + 0xfb,0x9e,0x54,0xfa,0xe0,0x6e,0x27,0xb9,0xf6,0xad, + 0x3b,0x94,0xcc,0xc1,0x80,0x95,0x8f,0xf3,0xfe,0x31, + 0x1b,0xfa,0xb8,0x44,0x45,0xda,0x68,0xc7,0x89,0xb2, + 0x01,0xc2,0x73,0x36,0x06,0xa2,0x6d,0xed,0xfc,0x1c, + 0x6e,0x8e,0x2f,0xe2,0x84,0x44,0x75,0x42,0xeb,0x4e, + 0x56,0x26,0xe1,0xc4,0xa9,0xc5,0xfb,0x09,0x0f,0x80, + 0x12,0x76,0x82,0xf8,0x13,0xe1,0x5a,0xe3,0xc8,0x42, + 0x35,0xfa,0x31,0xf9,0x35,0x1c,0xb0,0xa9,0x1d,0x35, + 0xfa,0x87,0xf5,0x44,0xa3,0x0f,0x2f,0xb8,0x20,0x2f, + 0xd6,0x29,0x27,0x24,0x35,0x97,0x8a,0xd8,0xc2,0x01, + 0x70,0x06,0xc9,0x89,0x13,0x38,0x1a,0x67,0x6a,0x37, + 0xeb,0x1a,0xeb,0xc5,0x0e,0x25,0x1f,0xa9,0x9d,0x02, + 0xf7,0x62,0x7f,0x87,0xd4,0x98,0x69,0xd2,0x94,0x92, + 0x02,0xfd,0x6e,0x45,0x7b,0x93,0xd6,0x19,0xb5,0x90, + 0xb4,0x73,0x70,0xf9,0x81,0x98,0x03,0x09,0x12,0x4e, + 0x32,0x43,0x12,0x70,0x26,0x3a,0x88,0x33,0x05,0x15, + 0x33,0x6c,0xfb,0x5c,0x48,0x66,0x40,0x93,0x6e,0x11, + 0x6f,0x8d,0x48,0xac,0xe3,0xeb,0xc0,0xfe,0x39,0xa1, + 0xc3,0xf4,0x06,0x06,0xf4,0x7d,0x9f,0x06,0x51,0xf4, + 0x7c,0xfb,0xad,0x0b,0xe7,0xc3,0x11,0x50,0xe5,0x3e, + 0x54,0x22,0xdb,0x99,0x4a,0xe6,0xcd,0x9b,0x8a,0xb2, + 0xda,0x34,0xca,0x46,0x08,0x96,0xfb,0xde,0x8e,0x72, + 0x90,0x3b,0x76,0x22,0xe7,0x51,0x55,0xa7,0xff,0x7c, + 0x1b,0x4f,0x96,0x26,0x59,0x17,0xfb,0x76,0xd9,0x76, + 0x89,0xdb,0x04,0x77,0xdf,0x49,0x21,0xdd,0x6e,0x38, + 0x6b,0x0e,0xc9,0x32,0x41,0xee,0xe9,0x46,0x29,0xed, + 0x1d,0x83,0x78,0xb8,0xb6,0xd1,0xdb,0xb5,0x1b,0xed, + 0x96,0x72,0x10,0xb7,0x7a,0xae,0xe9,0x33,0xa2,0xf6, + 0xcf,0x65,0xfc,0xd7,0x52,0x5b,0x8a,0x3c,0xcd,0x4c, + 0xb0,0x29,0x38,0xf8,0xde,0x8c,0x4a,0xcd,0x3b,0xed, + 0x1b,0xb5,0xa4,0x0d,0x84,0xcf,0x70,0x40,0x21,0xdf, + 0xbe,0x33,0x71,0x65,0x7a,0x80,0x6d,0xcf,0xa4,0x52, + 0x7b,0xc0,0xed,0x03,0x17,0x04,0x6f,0xb3,0x55,0xb2, + 0x4e,0xa1,0x6a,0x71,0x63,0xa8,0xea,0x12,0xbc,0x7e, + 0x9d,0x8a,0x48,0x6e,0x95,0xa8,0xf5,0xf3,0x5d,0x41, + 0x95,0xaa,0xdc,0x09,0x6d,0xa0,0xa0,0xbc,0xf1,0x75, + 0x0a,0x5a,0x2c,0x6f,0xde,0x4b,0x89,0x5f,0xe5,0xd0, + 0x95,0xd4,0x2e,0xa5,0x67,0xe7,0x10,0x68,0x12,0xa3, + 0x33,0x05,0x6a,0xe2,0xf5,0x20,0xec,0xe2,0x3e,0x77, + 0xe3,0x0d,0x47,0x71,0xdc,0x89,0x29,0xba,0x09,0x29, + 0x5a,0xdf,0x6a,0x2d,0xe2,0x62,0x21,0x4c,0xeb,0x9d, + 0x40,0x81,0x40,0x7e,0xd4,0xb0,0xae,0x1e,0x5e,0x5d, + 0x64,0x0d,0xd4,0xf9,0x7b,0x7d,0xbc,0x5d,0x10,0xfa, + 0x98,0x14,0x05,0x74,0x72,0xd5,0x9e,0x9e,0xc0,0x0f, + 0xe7,0x29,0x46,0x2d,0x63,0x05,0x41,0x52,0x6b,0xde, + 0x79,0xce,0x39,0x39,0x85,0xe4,0x49,0xda,0x7f,0xf7, + 0xf7,0xd4,0x42,0x72,0xfd,0x6c,0x0a,0xc8,0x0a,0x8b, + 0x39,0x37,0xf8,0xd4,0x0f,0xde,0xc0,0xef,0x97,0x31, + 0x10,0x55,0x4e,0x8a,0xb6,0x63,0x2e,0xe3,0x2e,0x7e, + 0x89,0xdb,0x79,0xe2,0xc8,0x0c,0xc9,0x0b,0x06,0xa1, + 0x54,0x19,0x86,0x56,0x50,0xbc,0xf6,0xb6,0x00,0xca, + 0x71,0x53,0x7a,0xc2,0x31,0x19,0xb7,0x76,0x13,0xd4, + 0xde,0xc7,0xed,0x7c,0x28,0x53,0x25,0xa1,0xb3,0x3b, + 0x1d,0xd2,0x9a,0x68,0xf6,0xe7,0xa9,0x89,0x42,0xff, + 0x3c,0x30,0x0e,0x45,0x33,0x54,0x17,0x6c,0xbb,0xb1, + 0x6b,0x7f,0x66,0xa0,0x92,0xfa,0x78,0xef,0x8d,0x7b, + 0x64,0x39,0x62,0x5a,0x8d,0xf6,0xa4,0x05,0x78,0x63, + 0x3f,0xc9,0xcd,0xc2,0xdd,0xfa,0xe1,0x46,0x9f,0x26, + 0xb2,0x4c,0xa5,0x58,0xee,0xd0,0x49,0x41,0xcd,0x4d, + 0xdb,0x98,0x03,0x0b,0xdf,0x35,0x25,0x5a,0x4e,0xa4, + 0xd1,0xa1,0x25,0x29,0x68,0xa5,0x0a,0x97,0x7a,0xfc, + 0x69,0x22,0xad,0x1d,0x22,0x6f,0xc4,0x70,0x5d,0xdf, + 0xea,0x4c,0xed,0xf6,0x7b,0xf0,0xe4,0xda,0x8e,0x12, + 0x93,0xbd,0x80,0x16,0x69,0x07,0x26,0xdd,0xb0,0x0d, + 0x0f,0xcf,0x33,0x69,0x40,0x1d,0x4a,0x7c,0xd5,0x46, + 0xa8,0x9f,0x11,0xdd,0xc0,0xd4,0x71,0x96,0x94,0x44, + 0x2d,0xa6,0xcb,0x3f,0x6b,0x46,0xce,0x9c,0x03,0x2d, + 0x90,0x03,0xdc,0xb3,0x43,0xe7,0x4a,0x32,0xd0,0x26, + 0xa4,0x62,0x53,0x68,0x93,0x79,0x2c,0x99,0xab,0x76, + 0xa4,0x24,0x49,0x76,0x38,0xb9,0x11,0x02,0x2c,0xf4, + 0xda,0x53,0x9b,0x8c,0xb8,0x7d,0xd4,0x42,0x4b,0xf4, + 0x97,0x41,0xea,0x24,0xb6,0x04,0x09,0x19,0x72,0xba, + 0x3f,0xa9,0xf5,0xae,0xf7,0xec,0x0a,0x3f,0x02,0x2e, + 0x7e,0x87,0x0d,0x50,0x94,0xcd,0x06,0xb4,0xc2,0x22, + 0x3a,0xc3,0xcb,0x7a,0x1c,0x68,0x6d,0x47,0x94,0x1b, + 0xcd,0x4f,0x73,0xfe,0x30,0xfa,0xf9,0xb8,0x1f,0x42, + 0xb9,0x68,0x71,0x11,0x2c,0xaf,0xc9,0x88,0x1e,0x86, + 0xae,0x5d,0xe5,0x9c,0xce,0xd5,0x91,0x3d,0x25,0x03, + 0xee,0xc0,0xde,0xf2,0x9f,0xe8,0x9d,0x80,0x8e,0x53, + 0xf5,0x40,0xd5,0x51,0x3b,0x68,0x07,0x55,0x18,0x39, + 0x2c,0xf3,0x1c,0xdf,0xee,0xcd,0xb4,0xc3,0x0a,0x0e, + 0xa7,0x03,0xe8,0xc8,0xcf,0x77,0x51,0x05,0xd8,0x13, + 0xbe,0xbe,0x51,0xba,0xa2,0xae,0x4b,0x38,0x3a,0x09, + 0x13,0xde,0xab,0x4d,0x3e,0x92,0x02,0xab,0xa2,0x46, + 0x84,0x2a,0xc8,0xa1,0x5e,0xc4,0x05,0x31,0x9f,0xa3, + 0xd5,0x50,0x05,0x04,0x69,0xdc,0xb3,0x2a,0x85,0x30, + 0x91,0x1a,0x09,0x91,0x4b,0x01,0x09,0xf6,0xdf,0xd9, + 0x90,0xbe,0x53,0x72,0x44,0x08,0x91,0xc6,0x0a,0xd7, + 0xf2,0xa5,0x67,0x01,0xad,0xcc,0x69,0x0a,0x0b,0xdb, + 0xce,0x84,0x4e,0x69,0x45,0x4f,0x9c,0x88,0x80,0x7c, + 0xd8,0x03,0x96,0x10,0xe6,0xb0,0x06,0xa2,0x68,0x6c, + 0xe7,0x2e,0x12,0x02,0x66,0x9e,0xe7,0x21,0xb5,0x6d, + 0x6d,0xb3,0x24,0xaf,0xac,0x09,0xb9,0xbf,0x58,0xf9, + 0x7d,0x74,0x90,0x4f,0x22,0x7e,0x84,0x86,0xd2,0x33, + 0x1a,0x78,0x76,0xc4,0xf7,0x3a,0x50,0xac,0x1c,0x48, + 0x6e,0x48,0xb2,0x83,0xc8,0xd9,0x67,0x53,0x5c,0xb8, + 0xe4,0xd9,0xd1,0x5d,0x4c,0x12,0x72,0x12,0xea,0x44, + 0x89,0x38,0xc4,0x9f,0x07,0xf1,0xba,0xaf,0x17,0x18, + 0xa0,0x78,0x20,0x43,0xf7,0xdf,0xff,0x9e,0x92,0x0a, + 0x5a,0xb4,0x2e,0xa1,0x18,0x60,0xcf,0xb7,0x69,0xad, + 0x25,0x0c,0xf7,0x76,0xd0,0x29,0xa2,0x04,0x53,0x15, + 0xb5,0x59,0x9c,0xf7,0x64,0xd9,0x39,0xa7,0x1a,0xf2, + 0x61,0xdb,0x3d,0xae,0xc2,0x77,0xe8,0xd3,0x07,0xed, + 0xa1,0x43,0xad,0x9c,0x49,0xa1,0x13,0x46,0x2e,0x6d, + 0x5b,0xd1,0x90,0x0e,0xcb,0xf5,0x95,0x21,0x81,0x43, + 0x71,0xb9,0x3e,0x49,0x67,0x5a,0x41,0x15,0x8c,0x44, + 0x63,0xcb,0xcd,0x05,0xa1,0xfe,0x3d,0x2e,0x99,0x99, + 0x12,0x78,0xf3,0xcc,0x6c,0x2b,0xcd,0x04,0xcb,0x0a, + 0x6b,0xf4,0xed,0x3e,0x29,0x48,0xf4,0x76,0x54,0xa8, + 0x80,0x4e,0x9f,0x9a,0x5a,0x88,0x75,0x76,0xfe,0x56, + 0x4d,0x30,0xaf,0x72,0xbf,0x34,0x39,0x21,0x93,0x52, + 0xc7,0x91,0x53,0x44,0x90,0x88,0xf3,0x6e,0x4a,0x24, + 0x41,0xec,0x9f,0xa8,0x4d,0x13,0xf2,0xd1,0xf7,0xb0, + 0x6b,0x41,0x4e,0x28,0x10,0xa9,0xe1,0xbb,0x3f,0x73, + 0x82,0x89,0x4a,0xfc,0x5c,0xb8,0x63,0x9f,0xc9,0x98, + 0x36,0x71,0xd5,0xe8,0xf0,0x1c,0x62,0x8a,0xbd,0xc6, + 0x7e,0x50,0x85,0x36,0x04,0x59,0x23,0xfc,0xf0,0x15, + 0xf5,0x1d,0xb8,0x67,0x3d,0x25,0x7f,0xbd,0xc5,0xa7, + 0x7f,0xae,0x08,0x4f,0xb2,0xe5,0x71,0x24,0x6e,0x37, + 0xaa,0x4e,0xc9,0x12,0xb4,0xa8,0x2d,0x82,0xd5,0xaf, + 0xb5,0xef,0x95,0xcb,0x90,0xaa,0x27,0x5f,0x33,0xb7, + 0x9f,0x14,0x49,0xd5,0x7b,0x95,0x77,0x16,0x91,0x25, + 0x1a,0x6f,0x77,0xad,0xa9,0xd4,0x46,0x34,0x13,0x75, + 0x67,0xeb,0x02,0x4f,0xd7,0x44,0x2d,0x58,0xe7,0xb7, + 0xa8,0xeb,0x34,0x9d,0x91,0xe9,0x9f,0x17,0x3d,0xf4, + 0xe4,0x39,0x94,0x08,0x8f,0x81,0xac,0xf6,0x16,0x40, + 0x9c,0x95,0x84,0x21,0xb2,0xe1,0xc2,0xa0,0x87,0xe5, + 0x16,0xbb,0x56,0xad,0xae,0x62,0x07,0xfd,0x0f,0x8b, + 0x8c,0x24,0xe1,0x34,0x17,0x5c,0x9d,0xba,0x72,0x82, + 0x9e,0xa7,0xaa,0x8d,0x14,0x63,0xdd,0xbb,0x4b,0x5c, + 0x84,0x6e,0x52,0x0a,0x07,0x0b,0x1a,0xc0,0xba,0x83, + 0xa5,0x39,0x4a,0x8f,0xc2,0x5a,0x93,0x6f,0x50,0x7f, + 0x6f,0xd3,0x18,0xf1,0x64,0x81,0x01,0x8a,0xa2,0x68, + 0xe2,0xa8,0xd5,0x0c,0x40,0xe4,0x48,0xe6,0x34,0xed, + 0xdf,0x0d,0x1c,0x7c,0xf4,0x9a,0x5d,0x0b,0xd1,0xbc, + 0xcf,0xe3,0xc4,0x02,0x27,0x25,0xe3,0xeb,0x39,0x7d, + 0x65,0x11,0x2d,0x5a,0xc3,0xf4,0xb9,0x9d,0x80,0x38, + 0x05,0xc4,0x69,0x82,0x31,0xf1,0x6b,0x48,0x4d,0x76, + 0x1a,0xbb,0x77,0x53,0x7a,0xda,0x7e,0x02,0xef,0x22, + 0xcb,0xa1,0x71,0x36,0x18,0x8e,0x1b,0x61,0x74,0x85, + 0xc6,0xc2,0xf1,0x02,0x13,0x5c,0x17,0x37,0x74,0x8d, + 0xf7,0x43,0xa3,0x7f,0x08,0xd9,0x53,0xb8,0x76,0xa7, + 0xee,0x05,0x8a,0xf7,0x6a,0xb1,0xa3,0xc2,0x8e,0x09, + 0x29,0x73,0xf7,0x43,0x13,0xb6,0x41,0x23,0x0d,0x07, + 0x58,0x5c,0xdc,0xa7,0x67,0xd6,0x3f,0xc7,0xf1,0x84, + 0x7a,0xcc,0xec,0x42,0xaf,0x90,0x18,0x92,0xf1,0x6c, + 0xd4,0xfc,0x71,0x45,0x60,0xe2,0xdc,0x6c,0x78,0x72, + 0x0b,0xa3,0xdd,0x51,0x0a,0x23,0xd1,0x39,0x68,0x8f, + 0x26,0x34,0xd5,0x25,0xe1,0x74,0xee,0x68,0x3c,0x9c, + 0x92,0x5f,0xd7,0x4d,0xa2,0x78,0xf8,0xd2,0x87,0xaa, + 0xca,0x97,0x89,0x3c,0xe5,0x16,0x56,0xaa,0x00,0x2e, + 0x76,0xa3,0x4d,0x30,0x3c,0x09,0xc0,0x51,0x56,0x4f, + 0xe2,0x8b,0x91,0x80,0xa8,0xaa,0xc2,0x29,0x3b,0x27, + 0x85,0x62,0xf8,0x3e,0x24,0xa9,0x91,0xca,0x29,0xa8, + 0x04,0x1f,0xb0,0xab,0x40,0x35,0x6c,0x30,0x88,0x3d, + 0xc1,0x8b,0x0a,0x19,0xfa,0x26,0x01,0x39,0x94,0xa8, + 0x06,0x49,0xf3,0x13,0xb8,0x07,0x87,0xfc,0x9a,0xae, + 0x61,0xda,0xcc,0xad,0xc1,0xd6,0xd2,0x3a,0xbf,0x7e, + 0xfd,0xa2,0x03,0x76,0x22,0x0a,0x1e,0x47,0x90,0x14, + 0xe1,0xc2,0xa3,0x72,0xec,0x40,0xfa,0x7e,0x18,0x84, + 0xba,0xa0,0xd0,0x0f,0xe5,0x5b,0x47,0x8a,0x14,0xda, + 0x8d,0x49,0xea,0x49,0x07,0x2a,0xd9,0x6a,0xc8,0x84, + 0xd2,0x43,0x51,0x7a,0x72,0x05,0x77,0xc9,0xc1,0x64, + 0x91,0x32,0x25,0x35,0xd4,0xcb,0x4f,0xe8,0xa4,0x2b, + 0xca,0xf4,0xf9,0xf4,0xa4,0x85,0x5a,0x5a,0xa9,0x9d, + 0xdc,0x3f,0xcb,0x49,0x0e,0x50,0x81,0xf0,0xdd,0x1e, + 0x5a,0x99,0x7d,0x5e,0x41,0xb1,0xda,0x24,0xf9,0xd1, + 0xdc,0xf3,0x5a,0x08,0x23,0x26,0x93,0xd7,0x94,0x80, + 0x91,0x71,0x65,0xf2,0x19,0x24,0x7e,0x87,0x23,0xf3, + 0xbb,0xc2,0x42,0xf7,0xdf,0x20,0x95,0x81,0x28,0x06, + 0x0d,0x3c,0x00,0x5d,0x83,0x8a,0xa5,0x03,0x6b,0x91, + 0xc8,0xe5,0x87,0x0e,0xe8,0xd4,0x8e,0x24,0x1b,0x07, + 0x95,0x8b,0x71,0x8a,0xe3,0x3a,0xf9,0xe5,0x5a,0x53, + 0x2e,0xb1,0x07,0xa0,0xe3,0x80,0x05,0xc8,0xa1,0xf8, + 0x32,0xe9,0x4a,0x5d,0xd7,0x75,0xfd,0xf9,0xf3,0xe7, + 0x2d,0x0e,0x05,0xf9,0x8a,0x33,0xe5,0x0c,0xc9,0xd0, + 0xdd,0xed,0xcf,0xdf,0x57,0x90,0xf1,0xa6,0x4a,0xdf, + 0x71,0x81,0x0c,0x54,0x58,0xd4,0x03,0x05,0xfe,0x80, + 0x15,0x34,0xdc,0x90,0x20,0x81,0x78,0x56,0xb0,0x61, + 0x0b,0xbc,0x9c,0x0a,0x16,0x78,0x51,0x0b,0xc4,0x6d, + 0x6c,0x22,0x21,0xdf,0xe2,0x75,0x6e,0xb2,0x42,0xff, + 0x9d,0xb4,0x27,0x04,0x5e,0x25,0xe2,0xe5,0xe5,0x48, + 0x77,0x44,0x32,0x4e,0x1c,0x19,0x47,0x20,0x56,0xa4, + 0xa9,0xb7,0xa8,0x4c,0xc2,0x66,0x79,0x57,0xdf,0xa4, + 0x52,0x24,0x77,0x83,0x7e,0xd4,0xdb,0x34,0x9b,0xe3, + 0x91,0x91,0x18,0x57,0x6f,0xd9,0x51,0x4b,0xcc,0xf1, + 0x9a,0x04,0x3d,0xac,0xd4,0x26,0xd6,0x76,0x67,0xaf, + 0xd2,0x34,0x48,0x75,0xe1,0xc3,0xb4,0x47,0x3a,0x4f, + 0x28,0x11,0x07,0x75,0xed,0xb7,0xeb,0x2b,0xda,0x3f, + 0x9d,0x6c,0xea,0x48,0x93,0xae,0xed,0xf1,0x7e,0x7e, + 0xcf,0x1e,0x5f,0x53,0x4f,0x9f,0x78,0x47,0xd3,0xf0, + 0x40,0x48,0x1e,0xde,0x2c,0x73,0x92,0x68,0x9e,0x83, + 0xca,0x5d,0xf0,0x4c,0x72,0x09,0xd3,0x75,0x5e,0x86, + 0x90,0x0b,0xfb,0x71,0x6a,0x6b,0xa4,0x36,0xe8,0x05, + 0x6d,0xad,0x93,0xc6,0xf9,0x93,0xe5,0x85,0x26,0x3f, + 0x40,0x94,0x7f,0x4c,0x25,0x91,0x81,0xf6,0x94,0x70, + 0xf5,0xf6,0x56,0x58,0x43,0xd1,0x78,0xd5,0x15,0xce, + 0x94,0xd0,0x26,0x59,0x00,0x6a,0x39,0x0d,0x28,0x87, + 0x3d,0xb3,0xe8,0xcf,0xd2,0x35,0x39,0x0b,0x29,0xfa, + 0xfe,0x2e,0x9d,0xd0,0x75,0x7e,0x68,0xea,0x6f,0xda, + 0xaf,0x8b,0x96,0xd5,0x4a,0x60,0xd4,0x19,0x9f,0x8b, + 0x01,0x6b,0x32,0xa0,0x46,0x8a,0x8c,0x2b,0x54,0xa6, + 0xae,0x54,0x48,0x8e,0xff,0x45,0x80,0xdc,0xe4,0x56, + 0x32,0x39,0x5c,0x8a,0x23,0x12,0x5a,0x72,0x9c,0x6e, + 0xc4,0xb0,0x28,0x0e,0x10,0x96,0x8f,0x53,0x6a,0x4d, + 0x62,0x7f,0x89,0xc8,0x38,0x49,0xfb,0x53,0x65,0xeb, + 0x0e,0x8f,0x14,0x58,0xbb,0xc6,0x42,0xa8,0xec,0x14, + 0xb9,0xb1,0xe4,0x33,0xe2,0x13,0xa8,0xf0,0xe0,0x46, + 0x01,0xb5,0xdf,0xc3,0xaf,0x5f,0xbf,0x1e,0xad,0x28, + 0xa3,0xe9,0x63,0x83,0x31,0x91,0xfa,0x5c,0x5b,0x90, + 0xf4,0x35,0x68,0xba,0x25,0x20,0x91,0x54,0xfd,0xa0, + 0xc4,0xbf,0x48,0xcb,0x9f,0x64,0x31,0xe1,0xda,0x1c, + 0x70,0xbf,0xd6,0x60,0x53,0x26,0x62,0xce,0x95,0x7d, + 0x93,0x6c,0xab,0x6b,0xb3,0xc7,0xe0,0xf7,0x4e,0x4a, + 0x04,0x36,0xa3,0xec,0xf4,0xb9,0x5d,0x47,0xe8,0x32, + 0xfe,0x65,0xdb,0x4a,0x2c,0x21,0x4c,0x5a,0x4c,0x74, + 0x81,0xc5,0xa6,0x61,0x74,0x1c,0xa9,0x92,0xc6,0x5f, + 0x29,0x98,0x6b,0x4b,0xf2,0x4c,0xf3,0xed,0x20,0x63, + 0x40,0x3e,0x53,0x94,0xd0,0xb8,0xe7,0xa6,0x87,0x61, + 0x27,0xe2,0xa7,0xc2,0x50,0x8d,0x86,0xa1,0x45,0x7e, + 0x06,0x61,0xc1,0xb4,0xde,0x4e,0x40,0xf4,0x92,0xe7, + 0xd7,0x09,0x49,0xc8,0x09,0xfc,0x8d,0x63,0x04,0x18, + 0xaf,0x0b,0xc4,0x4c,0x49,0x0c,0x94,0xe4,0x01,0xa8, + 0xdd,0xaf,0x68,0x15,0x49,0x2b,0xa8,0xfe,0x10,0xbc, + 0x9b,0xe3,0xda,0xc4,0x7a,0x3d,0x7d,0xc4,0xbf,0xa3, + 0x3c,0x14,0x53,0xbb,0xb8,0xa1,0xeb,0x6a,0x10,0x0f, + 0x2f,0x24,0x21,0x0f,0x22,0xb1,0x7e,0xbe,0x43,0xe0, + 0x53,0xbe,0xe0,0x46,0xfb,0x21,0xcf,0x38,0x41,0x99, + 0x1a,0x65,0x1f,0xba,0x14,0x00,0x21,0xc3,0x10,0x63, + 0xcf,0x8b,0x7a,0xfd,0x2d,0x80,0x1f,0x32,0x4c,0x73, + 0x7a,0x08,0xd4,0x9a,0x71,0x5e,0x63,0xb4,0xa8,0x12, + 0x5f,0xc0,0xf1,0x40,0x20,0xd3,0x7e,0x04,0xfd,0x5b, + 0x00,0x0e,0xda,0x75,0x63,0x0f,0x76,0xa3,0x04,0xed, + 0x04,0xe5,0xf4,0x00,0x4e,0x12,0xff,0xae,0x1a,0x9c, + 0x92,0x8a,0xc4,0x13,0xd2,0x56,0x98,0xdb,0xf0,0x29, + 0x18,0x9b,0x56,0x82,0xcb,0xc4,0x4f,0x1a,0xe5,0x76, + 0xeb,0xa0,0x1f,0xcc,0x46,0xc9,0xf8,0x90,0xb4,0xff, + 0x50,0xd9,0x9e,0x6b,0x70,0xb1,0x0e,0x93,0x3f,0x6f, + 0xdf,0x1b,0x12,0xcd,0x87,0xc7,0x13,0xb5,0xbc,0xdc, + 0xda,0x95,0x76,0xd6,0x8f,0x20,0x9f,0x16,0x1f,0x21, + 0x38,0x59,0x5f,0xb0,0xa9,0x70,0x31,0x7e,0x5e,0x13, + 0xc2,0x9b,0x1c,0xe8,0x2f,0xe2,0xbc,0x34,0xb2,0xed, + 0x91,0x76,0xd1,0x4f,0xd2,0xe2,0xfe,0xbd,0xbd,0xbb, + 0x87,0x82,0xb4,0x3e,0xf7,0x49,0x14,0x91,0x84,0x36, + 0x5d,0x9c,0x6b,0x09,0xea,0xc3,0x3f,0x8c,0x90,0x71, + 0xe0,0xf8,0xf5,0xf6,0x1a,0x16,0x8a,0xa6,0x15,0x13, + 0x47,0xe5,0x45,0xa9,0x39,0x2a,0xee,0x5f,0x46,0x30, + 0xd0,0xb5,0xe4,0x87,0x69,0xa4,0x13,0x44,0x2c,0xcf, + 0xf5,0x2d,0x4a,0x4a,0x6d,0x77,0x97,0x54,0xd2,0x78, + 0x3a,0xb5,0xa4,0x26,0x7e,0xa8,0x43,0xd7,0x24,0x8e, + 0xd3,0x39,0x82,0xca,0x8c,0x29,0x76,0x39,0x15,0x6b, + 0xcb,0x27,0xf9,0xf6,0x66,0xd4,0xb8,0xf0,0xf5,0xf5, + 0x65,0x0d,0x64,0x93,0xd7,0x24,0x09,0xcf,0x92,0x59, + 0x79,0x40,0xc6,0xed,0xe7,0xb8,0x02,0x41,0x49,0xde, + 0x84,0x04,0xbb,0xc2,0x26,0x09,0xfc,0x6a,0xfc,0x5e, + 0x0c,0x7a,0xc4,0x56,0x2b,0xd9,0x74,0xa4,0xb6,0x9b, + 0x1b,0xa0,0xa8,0xaa,0x7f,0x74,0x80,0xae,0xac,0xf6, + 0x19,0x47,0x48,0x53,0x95,0x93,0x74,0x2a,0x2e,0xaf, + 0x63,0x93,0x2a,0xab,0x47,0x8b,0x61,0x32,0x55,0x74, + 0x1b,0xa4,0x89,0x47,0x95,0xe1,0xc8,0x8c,0x22,0x80, + 0xd4,0xea,0xd3,0xec,0xfa,0x6e,0x85,0x19,0xde,0x4c, + 0x01,0x87,0x23,0xfa,0x6d,0x99,0x8d,0x59,0x6e,0x3c, + 0xd4,0xb5,0x7a,0x5c,0xcb,0xce,0xf9,0x50,0xa9,0x41, + 0x26,0x8c,0x29,0x52,0x7b,0xf3,0xad,0x4d,0x24,0x2d, + 0xbb,0xb7,0x96,0x9b,0xd1,0x35,0xa9,0x49,0xf8,0xd2, + 0xf1,0x92,0x6e,0x39,0x01,0x98,0x94,0x2a,0x80,0xaf, + 0xef,0x00,0x5f,0x41,0xfb,0xc5,0x4e,0x98,0xc9,0x14, + 0xd4,0x5b,0x4b,0x8e,0x6c,0x51,0xbe,0xbf,0xbb,0x08, + 0x96,0x6e,0xed,0x0e,0xf4,0x36,0x0b,0x48,0xc8,0xcf, + 0x8f,0xe9,0xda,0x27,0x21,0x50,0x0a,0xfa,0x3a,0xdd, + 0x38,0x19,0xa5,0xea,0x21,0xea,0xc6,0x9f,0x5d,0x02, + 0x68,0xda,0x25,0x1b,0x43,0x52,0xfb,0xb9,0x77,0x1b, + 0xef,0x9c,0xf3,0xc6,0x23,0xd0,0xe7,0x90,0xda,0x65, + 0x7d,0x72,0x69,0xb2,0xf9,0x80,0x7b,0x41,0xdd,0x9b, + 0xe4,0x6b,0xa6,0xef,0x56,0x4d,0xa4,0xb5,0xf2,0xa5, + 0xf7,0xa2,0x83,0x1c,0x81,0x3e,0x70,0x08,0xe9,0x6e, + 0xeb,0xcf,0x5e,0xc3,0x7d,0xb8,0xeb,0xfb,0xea,0xf1, + 0xe2,0xe6,0xac,0x81,0xc2,0xff,0x71,0xf7,0xe8,0xb8, + 0x8d,0x89,0xab,0x43,0xd3,0x85,0x6e,0x8d,0xbb,0x96, + 0x9d,0x8a,0xde,0x3a,0x43,0x4d,0x87,0x6c,0x98,0x38, + 0x37,0xa2,0xf0,0x09,0x79,0xa7,0x78,0x91,0xda,0x9e, + 0xd4,0x59,0xe8,0xc9,0x41,0x4a,0xd6,0xff,0x7f,0xce, + 0xce,0x60,0x39,0x72,0xe4,0x88,0xa1,0xcc,0x9e,0xb9, + 0xcc,0xfe,0xff,0x2f,0xee,0x37,0xf8,0x24,0x95,0x0f, + 0x6e,0x6a,0x92,0x28,0x3c,0x64,0xb5,0x1d,0xe1,0x70, + 0x78,0x57,0x6a,0xb1,0xc9,0x62,0x55,0x26,0x80,0x04, + 0x42,0xba,0x03,0xee,0x13,0x69,0x22,0x3c,0x31,0x33, + 0x9f,0x4e,0x52,0x7e,0x80,0x94,0x5e,0xd3,0x14,0xb9, + 0xda,0xa5,0xb8,0x49,0xf6,0xfe,0xf3,0xaf,0xeb,0xec, + 0x3f,0xa5,0x30,0x96,0x4e,0x45,0x91,0xa8,0xcc,0x75, + 0xb6,0x09,0x86,0x76,0x14,0x02,0x79,0x76,0x38,0x64, + 0xc2,0x1c,0xf0,0xf6,0x85,0x25,0xde,0x91,0xba,0xc9, + 0xa9,0x0b,0xa6,0x6b,0xa4,0x2e,0xf4,0x04,0xb2,0x73, + 0xe9,0xe0,0x53,0xe5,0x4c,0x4a,0x7b,0xdd,0xe0,0x1c, + 0x47,0xaa,0x16,0xfa,0x53,0xb1,0xeb,0x36,0xd9,0xf0, + 0x1d,0x0b,0x8a,0x99,0x44,0x49,0xd4,0xf0,0xbd,0xea, + 0xf5,0x7a,0x5d,0xb7,0xc8,0xd9,0x84,0xb2,0xa2,0x1e, + 0x25,0x45,0x3f,0xd0,0x44,0x9e,0xa1,0x3d,0x91,0x5e, + 0x32,0xe8,0xcb,0x05,0x50,0xf4,0x16,0xeb,0x11,0x26, + 0x51,0xac,0x46,0xcc,0x25,0x61,0x2b,0xc5,0xdc,0x0b, + 0x0f,0xca,0x1e,0x12,0x81,0x30,0x76,0xec,0x34,0x18, + 0x40,0x93,0x70,0x49,0x03,0x91,0xe2,0x63,0x68,0x5d, + 0xb8,0x77,0x9d,0xde,0x13,0x59,0x7f,0xa5,0x28,0x89, + 0xa3,0xce,0xc1,0xc6,0x41,0x91,0xef,0x1a,0x62,0x24, + 0x48,0x9b,0x58,0xd4,0x99,0xca,0x7a,0xb8,0x27,0xf4, + 0xd0,0x11,0x37,0xc5,0x26,0x28,0x7d,0xed,0xf6,0xce, + 0x69,0x92,0xc9,0x45,0xfe,0xdc,0xbf,0x23,0xfb,0x3a, + 0xa1,0x31,0xd6,0x03,0xe6,0x44,0x2b,0xa4,0x54,0xdf, + 0x44,0x45,0xbb,0xbf,0x95,0x26,0xb8,0x52,0x51,0x3f, + 0x9c,0x35,0xe3,0x68,0xb5,0xee,0xbb,0x49,0x88,0xdd, + 0x9f,0x83,0x63,0x0a,0x88,0x71,0x38,0xf1,0x7b,0x72, + 0x66,0x88,0x6e,0x5f,0xd4,0x67,0x41,0x94,0xa6,0x7b, + 0x86,0x4e,0x56,0xe2,0xe8,0xe8,0x29,0x34,0xb7,0x17, + 0x72,0x9a,0x83,0x19,0x74,0x83,0xe4,0xed,0x34,0x16, + 0x52,0xf7,0xb5,0xbc,0x92,0x38,0x8d,0xcc,0xce,0x4e, + 0x0e,0xe5,0x29,0x80,0x54,0x47,0x2b,0x89,0xe6,0xa0, + 0xaa,0x3c,0x74,0x76,0xa3,0xc8,0x4d,0x47,0x3b,0xa7, + 0x60,0x3d,0xe2,0xb6,0x3b,0x37,0xea,0x3a,0x6c,0xe7, + 0x04,0x9c,0xa6,0xb3,0x5c,0xb7,0xf9,0xf5,0xf5,0x55, + 0xd0,0xd9,0x1f,0x85,0xe8,0x25,0x7e,0xbe,0xff,0x8e, + 0x6a,0xa7,0xdc,0x98,0xb9,0x08,0x7e,0x6d,0xd0,0x1e, + 0xd1,0x61,0x64,0x61,0xae,0xd0,0x7d,0x3f,0xcc,0x9a, + 0xbf,0x4a,0x69,0x41,0xa8,0x91,0x00,0x92,0x01,0xa6, + 0xb4,0x86,0x2d,0x3a,0x5b,0xf8,0x26,0x72,0xc4,0xa4, + 0x77,0x30,0x10,0x71,0x0d,0x2f,0xec,0x46,0x91,0x38, + 0x2a,0xce,0x50,0x2a,0x76,0xb2,0xd1,0x1d,0x58,0x7d, + 0x8a,0x2b,0x4d,0x66,0xa4,0xd0,0x41,0xd1,0x29,0x6c, + 0x41,0xa6,0x8d,0xb6,0x42,0xba,0x89,0x9a,0x8b,0x4f, + 0x5c,0x62,0x53,0x3c,0xc5,0xd7,0xd7,0x97,0x43,0x59, + 0x36,0x2a,0xad,0xd3,0x6c,0x27,0x02,0x50,0xa3,0xd1, + 0xeb,0x05,0xc2,0x36,0x32,0x1f,0xec,0x2c,0x2c,0x7d, + 0xa5,0x7e,0x26,0xe0,0x46,0xfe,0x28,0x3e,0xe9,0xf9, + 0xd3,0xf8,0xbd,0xee,0x4d,0x6e,0x3a,0x95,0xb2,0x1f, + 0xdd,0x1e,0x79,0x65,0xe3,0xc4,0xc7,0xe7,0xbb,0x89, + 0x4f,0x77,0x60,0xf6,0xbd,0x48,0xc4,0xb1,0x8f,0x03, + 0x94,0xe2,0x32,0xf4,0xe0,0x4d,0xd3,0xb0,0x2a,0x31, + 0xd0,0xb0,0x5e,0x2a,0x2a,0xe9,0xd0,0x9c,0xf2,0xbf, + 0x0c,0x95,0x8f,0xb4,0x9e,0xea,0x6c,0xb4,0xa0,0xa6, + 0x10,0x51,0x2d,0x8a,0xe8,0x0c,0x23,0xfb,0x0a,0x2d, + 0x8c,0x52,0x83,0x41,0x48,0x4b,0x00,0x3e,0x62,0x53, + 0x00,0x7b,0x69,0x91,0x5e,0x4d,0xdf,0x1b,0xb2,0x63, + 0x49,0xb4,0xa0,0x69,0xbe,0xfe,0x9e,0x35,0xba,0xa0, + 0x43,0x42,0x7a,0x51,0xb7,0x94,0x54,0xdd,0xb7,0xc7, + 0x08,0x78,0x94,0x54,0x0a,0x7d,0x4c,0x5e,0x05,0xce, + 0x81,0xd7,0x41,0xe0,0x17,0x4c,0x4c,0x90,0xe7,0x87, + 0xf3,0x00,0xd1,0x0a,0x96,0xee,0x0d,0x09,0xfb,0xdc, + 0x98,0x24,0xc0,0xfd,0x47,0x1e,0x11,0x8e,0x46,0xd6, + 0x9f,0xef,0xc5,0xd8,0x3d,0x4a,0xed,0x0a,0xd8,0x69, + 0xca,0xc2,0x75,0x77,0x44,0xb3,0x90,0x26,0x48,0x9d, + 0xb3,0xc3,0x02,0xae,0xe4,0x3e,0x9c,0xc6,0xc0,0xdd, + 0xb3,0x05,0x03,0xc0,0x28,0x8c,0x0c,0x1b,0x4d,0xd2, + 0x29,0xd8,0xe0,0xc4,0xe0,0x61,0x51,0xae,0xb8,0x34, + 0x41,0xc2,0x56,0xf7,0x43,0xef,0x04,0x08,0x52,0x8b, + 0xa6,0x79,0xcc,0x81,0x39,0x16,0x35,0xaa,0x73,0x52, + 0xad,0x8f,0xe8,0x78,0xc6,0x31,0xf6,0x7e,0xcd,0xae, + 0x43,0xef,0x07,0xb9,0x43,0xa9,0xc8,0xaa,0x00,0x3c, + 0x58,0x22,0xc5,0xaf,0xef,0xc3,0x3d,0xba,0x3e,0x05, + 0xb0,0xc2,0x67,0x6d,0x5a,0x14,0x30,0x2e,0xdd,0x0a, + 0x02,0xd2,0x32,0x74,0x71,0xf6,0xe4,0x9e,0xab,0x0d, + 0x5e,0xd2,0xca,0xd0,0x5e,0xa7,0x93,0x51,0x82,0xd2, + 0x91,0xb6,0x70,0x4a,0xee,0x2e,0xa7,0xa1,0x71,0x4d, + 0xda,0xb4,0xc7,0x3a,0xdb,0x0d,0x2a,0x7e,0xc8,0x88, + 0x93,0x04,0xd7,0xfa,0x7d,0x5c,0x88,0x2d,0x49,0x88, + 0x26,0x1f,0x31,0xf2,0xd5,0x9b,0x2c,0x62,0xdc,0x7d, + 0x49,0x9a,0x17,0x32,0x60,0x34,0x6c,0x4e,0x4d,0xde, + 0x3a,0xc4,0xca,0x1c,0x04,0x3c,0x3f,0x8a,0x47,0x45, + 0x8c,0x12,0x60,0x72,0xfa,0xd9,0x13,0x58,0x11,0xde, + 0x01,0xa6,0xc0,0x86,0x49,0x1d,0x7b,0x88,0x26,0x91, + 0x64,0xaa,0x36,0x53,0x00,0xab,0x73,0xe3,0x9c,0x16, + 0x96,0xf3,0x56,0x31,0xb9,0x56,0x08,0xcf,0xd2,0xa2, + 0x9e,0xcc,0xfd,0x26,0xdd,0x06,0x2d,0x70,0x72,0x21, + 0x75,0xe2,0x44,0xd7,0xc1,0xc1,0x35,0xc4,0xa9,0x83, + 0x34,0x46,0x6b,0xd2,0x74,0x09,0x66,0x2f,0x5a,0x60, + 0x4a,0xa1,0x11,0xb7,0x4f,0xe2,0xf5,0x96,0xc1,0xf5, + 0xb8,0x31,0xdd,0xfb,0x82,0x60,0x7e,0x42,0x73,0x12, + 0x74,0xeb,0xa0,0x6a,0xd0,0x76,0x45,0x74,0xf1,0x46, + 0x61,0xcc,0x94,0xc6,0x96,0x56,0x4f,0x5e,0x4a,0xb0, + 0xee,0xfb,0xa1,0x6c,0x3f,0x7b,0xe0,0xe0,0x1f,0x45, + 0x8a,0x1e,0xb2,0x37,0xaa,0x32,0xd1,0x9e,0x93,0x7b, + 0xb1,0xa3,0x71,0x7a,0xd1,0xa2,0x85,0xd2,0xb5,0xa7, + 0xb2,0x3f,0x0a,0xab,0xc9,0x0f,0x27,0x05,0x37,0x4e, + 0x34,0xb1,0x13,0x5b,0x76,0x64,0x80,0x8a,0x7c,0x3a, + 0xe0,0x53,0xb1,0x1a,0xd6,0x0d,0x8a,0xd2,0x1d,0x2a, + 0x78,0x80,0x72,0x6f,0xe8,0xac,0xd1,0xbe,0xd4,0x10, + 0x29,0xb2,0xbd,0xd7,0x3d,0x6f,0x2b,0x0d,0x0a,0xf4, + 0x09,0x33,0x67,0x68,0xe9,0x34,0x4c,0x2e,0x96,0x82, + 0x44,0xb8,0xa6,0x11,0xc3,0xec,0x2f,0xd0,0xad,0x60, + 0xc6,0x9d,0x16,0xed,0x22,0x90,0xb7,0x45,0x2e,0x15, + 0x32,0x7a,0xcf,0x5d,0x28,0xa8,0x6a,0xbd,0x7a,0xec, + 0x0f,0xa1,0x4b,0x6e,0xdf,0xd7,0x3d,0x12,0x8a,0xa2, + 0x02,0x4d,0x4d,0x42,0xe9,0x88,0x7a,0x8d,0x2c,0xc9, + 0x09,0x6d,0x3f,0x69,0xad,0x9c,0xae,0x6a,0xf2,0xd7, + 0x9b,0x8c,0x55,0x1d,0x05,0xf8,0x72,0x4a,0x70,0x72, + 0x91,0x4c,0x76,0xf1,0x17,0x4c,0x21,0xe9,0x42,0x71, + 0x63,0xc1,0x69,0xec,0x2d,0xb9,0x69,0x1a,0xd1,0xe5, + 0x11,0x4f,0x4a,0x8b,0x5e,0x3b,0x2d,0xd8,0x28,0x8f, + 0x26,0x06,0xd2,0xd4,0x12,0x75,0x34,0xd0,0xf9,0x9c, + 0x6c,0xa4,0xf8,0x92,0xc0,0xb4,0x52,0x42,0x9a,0x28, + 0x6c,0xd1,0x6a,0x17,0x94,0xaa,0x71,0x1a,0x2c,0x6a, + 0x9b,0x82,0x68,0xb0,0x42,0xa4,0x40,0xfc,0xcc,0x2b, + 0xbb,0xec,0x96,0x3a,0x55,0x93,0x46,0xc3,0xa1,0x22, + 0xed,0xba,0xed,0x67,0xb8,0xc3,0x9f,0x74,0x19,0x4d, + 0x2b,0xd3,0x51,0x93,0xa3,0xa0,0xc3,0x5e,0x38,0xa8, + 0xd6,0xc7,0x21,0x4a,0x44,0xb1,0xc9,0x81,0x3d,0x8e, + 0xf9,0xd3,0xa8,0x71,0x40,0x78,0xf1,0xfd,0x86,0x6b, + 0x8a,0x74,0x5d,0xd2,0xdf,0x9d,0xb8,0x55,0x3b,0x74, + 0x4c,0x0a,0x30,0xd7,0xf9,0xdb,0x83,0x4d,0xe9,0x60, + 0x97,0xbf,0x44,0xf7,0xe4,0x36,0xcf,0xa4,0x42,0xc2, + 0x14,0xe6,0x0f,0xb3,0xcd,0x40,0x0f,0x55,0xa2,0xe3, + 0xfa,0xfb,0x01,0x94,0xf7,0x36,0x71,0xe3,0xfe,0x46, + 0x68,0x12,0x8a,0x04,0xed,0x4a,0x9d,0x1a,0xd4,0x25, + 0xe6,0x5a,0x05,0x94,0xcd,0xd9,0x1e,0xd8,0x49,0x3e, + 0x37,0x6e,0x7f,0xa0,0x23,0x3d,0x45,0x1d,0xae,0x24, + 0x27,0x21,0x8d,0xa4,0xee,0xad,0x14,0xb0,0xea,0x62, + 0x2a,0xc8,0x13,0xc9,0x14,0x91,0x49,0x37,0x35,0x7a, + 0x6a,0x25,0xff,0xa7,0x89,0xee,0xa2,0x74,0x08,0xa7, + 0x43,0x52,0xa9,0x48,0x92,0x26,0xa4,0x86,0xc1,0xf9, + 0xed,0xd1,0xf5,0xbd,0xa8,0xb2,0x9e,0x68,0x29,0xa7, + 0xe2,0x4e,0x3e,0x42,0xa4,0x33,0xe8,0x9b,0x00,0xb9, + 0x19,0x4f,0x88,0x0b,0x1d,0xac,0x09,0xd2,0xa5,0x1b, + 0x78,0xaa,0x47,0x48,0x45,0xd0,0xff,0x23,0x84,0x3b, + 0xa5,0xbc,0x4e,0x8b,0x26,0x37,0x2d,0x44,0xa2,0x37, + 0x80,0xaa,0xed,0xe2,0x4f,0xc5,0x98,0x13,0xda,0x26, + 0xff,0x06,0xa5,0x14,0x69,0xe4,0x53,0x0a,0x06,0x74, + 0x54,0x15,0xfa,0x22,0x1d,0xe0,0x88,0x16,0xf5,0x11, + 0xfd,0x41,0x00,0x5e,0x37,0x22,0x35,0x04,0x20,0x6e, + 0x87,0x46,0x7f,0x7f,0x4c,0x77,0x92,0x28,0x63,0x2c, + 0x5a,0xef,0x35,0xd6,0x3b,0xf5,0x13,0xc1,0x66,0xd7, + 0x5d,0x5d,0xfb,0x18,0x7a,0x7c,0x9f,0x27,0xc8,0x7a, + 0x5a,0x5f,0xf4,0x79,0x14,0xa7,0x91,0x68,0xbc,0x84, + 0x46,0x99,0x42,0xa7,0x4e,0x20,0xf5,0xa0,0x13,0xda, + 0x8a,0x92,0x49,0x87,0xe8,0xd0,0x1e,0xa5,0x12,0xcc, + 0x28,0x74,0xcc,0x57,0xa2,0xf5,0x7c,0xda,0xb8,0x11, + 0x25,0x46,0x39,0x58,0x69,0xaa,0x8e,0x68,0x68,0xea, + 0xd6,0x49,0xc4,0x9d,0xc6,0xc1,0x65,0x8d,0x94,0x5b, + 0x4f,0xae,0x09,0x26,0xb1,0xb6,0x43,0x41,0x8c,0x6c, + 0xa0,0x44,0x93,0xf8,0x28,0x98,0xcc,0x01,0x5e,0x09, + 0xb1,0x30,0xfb,0xf5,0xe6,0xf7,0x33,0xa5,0x98,0xbb, + 0x7d,0xd7,0x80,0x0e,0x76,0x38,0x47,0xce,0xe9,0x82, + 0xf3,0xad,0x4e,0xa8,0x38,0x2a,0x4a,0x86,0x22,0xfc, + 0x11,0xc1,0x44,0xe7,0x59,0x7a,0xef,0x87,0xc6,0x0b, + 0x1d,0xc8,0x75,0x6d,0x7c,0x7f,0x7f,0xff,0x8c,0xc1, + 0x13,0xbc,0x48,0x5f,0x74,0x81,0xe3,0xe4,0x16,0xf2, + 0x79,0xe0,0x9e,0xdc,0xea,0x16,0x16,0x4c,0x02,0x15, + 0xb6,0x74,0x6c,0x2f,0x15,0x4c,0x14,0x69,0x40,0x0e, + 0xc4,0x97,0x09,0xf7,0xfc,0xfa,0xfa,0x7a,0x38,0x19, + 0xa7,0x54,0xeb,0x94,0xcb,0xe4,0x82,0x51,0x0d,0x6a, + 0xb6,0xcc,0xe7,0x53,0x78,0xa8,0x1d,0xa5,0xa7,0xe0, + 0xd4,0xfe,0xb7,0x5d,0x48,0xa1,0x1b,0x23,0xd7,0x94, + 0x78,0xe3,0xfd,0xb2,0xdc,0x58,0xb9,0xce,0xb9,0x1b, + 0x1f,0x87,0x45,0x09,0xd8,0xea,0x9a,0x6c,0xf4,0x63, + 0x2b,0x6c,0xf8,0x2b,0xd9,0xaa,0xbb,0xd0,0x58,0x53, + 0xa0,0xae,0x44,0x19,0x6a,0x30,0x2a,0xe9,0xc9,0x9a, + 0x28,0x7e,0xa5,0x82,0x55,0x1c,0x71,0x17,0xa0,0x96, + 0xa3,0x93,0xf0,0x05,0x41,0xa9,0xba,0x69,0x9b,0x44, + 0x65,0x3b,0x31,0x22,0xef,0xc5,0x9a,0x06,0x11,0x9c, + 0xc3,0x79,0x7a,0x27,0x4f,0x7e,0x6e,0x2a,0xb2,0x68, + 0xba,0xcb,0x1d,0x54,0x93,0xab,0xaf,0x13,0x4e,0xd2, + 0xbb,0x3d,0xd9,0x82,0x38,0xdf,0xa8,0x14,0x9d,0xe1, + 0xbe,0xc7,0xd7,0xd7,0x97,0xcd,0x4c,0x4a,0xf9,0x82, + 0x8e,0x52,0x27,0x84,0x5e,0x1b,0x5a,0xb5,0x7c,0x18, + 0x0e,0xd6,0x0a,0x7b,0x4e,0xd1,0xd8,0xb2,0x86,0x88, + 0xba,0xeb,0xa6,0x14,0x74,0xf7,0x4e,0xba,0x7b,0xa9, + 0x21,0xaa,0x09,0xd1,0x20,0x5d,0x56,0xb2,0xa0,0x70, + 0x4d,0x9b,0x9b,0xf0,0x4c,0xf6,0x14,0xf4,0xfd,0x93, + 0x9d,0x81,0x41,0xf6,0x8b,0xc6,0xcb,0x4f,0x86,0x85, + 0x86,0x7d,0xf0,0x51,0x18,0x39,0x7a,0xcb,0xd9,0x4e, + 0x34,0x0b,0x94,0xe8,0x5a,0xde,0x9f,0xd3,0xb0,0x4e, + 0x93,0x14,0xc4,0xca,0x5f,0x92,0x35,0x47,0x55,0xfd, + 0xaf,0x00,0x02,0xff,0x85,0x35,0x51,0x30,0xe9,0xe6, + 0xd1,0x64,0xc1,0x27,0x1a,0x1a,0x2d,0x10,0x26,0xfe, + 0x5b,0x16,0xa2,0xf5,0xed,0xd1,0xf4,0x77,0x2d,0xec, + 0x9c,0x78,0xab,0x17,0x03,0x9a,0x6e,0xee,0xbc,0x11, + 0x7a,0x1c,0x86,0x16,0x1b,0x04,0x1d,0xa7,0xa4,0x76, + 0xf3,0x20,0xd1,0x97,0x88,0x52,0xe9,0xb5,0x18,0x70, + 0x31,0x17,0x86,0x63,0x5e,0xa1,0x5b,0x5c,0x01,0x7d, + 0x73,0x45,0x30,0x5d,0xdb,0xe3,0x5e,0x9a,0x83,0xf0, + 0x11,0x07,0x01,0x1b,0xfc,0x22,0x3f,0x9f,0xf7,0x0f, + 0x2c,0xa0,0x0f,0xea,0xef,0xc7,0x2e,0x5a,0xbf,0xd5, + 0x0b,0x8a,0x94,0xa3,0x76,0xff,0xdc,0xa0,0x45,0xf8, + 0x29,0xdc,0xa6,0x4d,0xc7,0x68,0xd4,0x16,0xc1,0xbd, + 0x06,0x96,0x56,0x3e,0x7e,0x05,0x5e,0x3c,0xbe,0xb3, + 0xee,0xc0,0x4c,0x85,0x40,0x6a,0x64,0xdc,0xf7,0x36, + 0x48,0x0c,0x8a,0x57,0x5d,0x97,0x0b,0x7a,0x8e,0x8b, + 0x9e,0xd7,0x61,0xbc,0x41,0x4d,0x56,0xfc,0xc3,0x41, + 0x52,0x49,0x47,0x35,0xd9,0x54,0xb8,0x2e,0x58,0x0f, + 0xe6,0x54,0x7c,0x39,0xd4,0xd9,0x45,0xfd,0x04,0x83, + 0xb9,0x68,0x85,0xa1,0x03,0x0d,0x01,0xf1,0xc2,0xa2, + 0xd0,0x3d,0xcb,0xee,0xad,0x44,0x92,0x02,0xf7,0x6e, + 0x11,0x72,0xfe,0x46,0x56,0xca,0xc5,0x44,0x10,0xf2, + 0xd0,0x9a,0x36,0x44,0xd4,0x4d,0x21,0x30,0xea,0x55, + 0x40,0x23,0x77,0x84,0x8c,0xc3,0x7e,0xb0,0xfd,0xbc, + 0xf1,0xbd,0xa9,0xa9,0xc0,0x72,0xfa,0x30,0x72,0x89, + 0x77,0xe7,0x7f,0x47,0x42,0xd3,0x64,0x5e,0xa2,0x22, + 0x49,0xd7,0xea,0x98,0x21,0xf7,0x5e,0xa4,0xc8,0x1a, + 0x87,0x50,0xfd,0x14,0x5e,0x6e,0xc4,0xdd,0x3d,0x14, + 0x47,0xdd,0xa4,0x3f,0x44,0x26,0x7a,0x41,0xc0,0x8c, + 0xbe,0x2b,0x44,0x75,0xe8,0x0e,0xd3,0x27,0x15,0x02, + 0xac,0x56,0xc0,0x39,0x62,0xd5,0xd9,0xff,0xb6,0xf3, + 0xbf,0x20,0x38,0xf8,0x64,0x9c,0x11,0x44,0xc7,0x38, + 0x9d,0x96,0x68,0xaf,0x46,0x63,0x3c,0x9e,0x8b,0x3a, + 0x60,0x2b,0x85,0xa9,0x87,0x25,0x2d,0x9a,0xf4,0xd2, + 0x25,0x08,0xfe,0x10,0x86,0x2f,0xb0,0xed,0xdf,0x02, + 0xfd,0x40,0x13,0x83,0xcf,0xcf,0x8d,0x85,0xa6,0x75, + 0x94,0x78,0x7a,0x2a,0x10,0x5c,0xa4,0xc6,0xa0,0x29, + 0x41,0xb7,0xe8,0xb4,0xc1,0x87,0x49,0xc1,0x49,0x33, + 0xa6,0x62,0xe3,0x71,0x88,0x61,0x0a,0xf8,0x54,0xfd, + 0x91,0x26,0x82,0xa7,0x18,0x0d,0xe7,0x00,0xad,0xf7, + 0xc4,0xad,0x2d,0xb7,0xfe,0x89,0x46,0x3a,0xf1,0x6e, + 0x31,0x63,0xdb,0x31,0xfe,0x82,0xf4,0x46,0xe2,0x6e, + 0x8e,0xeb,0xd1,0x88,0x81,0xb7,0xa9,0xae,0x80,0x18, + 0x6f,0x14,0xa9,0xd3,0x63,0x5c,0xec,0x60,0x8c,0x87, + 0x8c,0xee,0xfb,0x21,0x10,0x73,0xfb,0x11,0xd0,0x71, + 0x14,0x0d,0x8d,0x90,0x5f,0x4f,0x9a,0x28,0x6e,0x81, + 0xbd,0x24,0xa6,0xa6,0xc1,0x95,0x0a,0xe1,0xd8,0x63, + 0x08,0x29,0xe9,0xd9,0x68,0x70,0xa4,0x5f,0x17,0x79, + 0x2c,0x39,0x24,0xc7,0xdd,0xf7,0x34,0x88,0x12,0xa8, + 0x4e,0x3c,0x8b,0x93,0x86,0xe6,0x8e,0x3f,0x72,0x66, + 0x96,0x2a,0x2d,0xd1,0xf7,0x06,0xbc,0x80,0xb6,0x67, + 0xaf,0x31,0x1f,0x61,0x9f,0x1a,0xcd,0x3c,0x1d,0xd2, + 0x48,0x75,0x43,0x02,0x6b,0x5e,0x50,0x49,0x6d,0x07, + 0x69,0xda,0x84,0xfa,0xff,0xba,0xc3,0xbc,0x1f,0x10, + 0xce,0x1b,0xe1,0x00,0xca,0x4c,0x95,0x64,0xa4,0x11, + 0x0e,0xc2,0xd2,0xec,0x14,0x82,0xea,0x65,0x4e,0x74, + 0x52,0xa9,0xa8,0x72,0x3a,0x1e,0x1d,0x0f,0x85,0x2a, + 0x3e,0x45,0x49,0x44,0x6b,0x79,0x37,0xcd,0x10,0x5e, + 0x6a,0x7c,0xf1,0x52,0x76,0x93,0xbb,0x9f,0x1d,0xf6, + 0x34,0x05,0x2c,0x71,0xe1,0x3f,0x54,0x81,0xa6,0x9f, + 0xd3,0xc4,0xc7,0xb4,0x41,0xe8,0xf7,0x73,0x85,0x4e, + 0xdf,0xa8,0x52,0xaa,0xbb,0x1c,0xde,0xd1,0xb9,0xf8, + 0x6d,0xd0,0x58,0xfd,0x7b,0x0c,0xc5,0xdb,0xb1,0xa1, + 0x57,0x1f,0x85,0x76,0xef,0x6d,0xf2,0xa7,0x11,0xaf, + 0x24,0x2d,0x40,0xb0,0x90,0x05,0x8f,0xa5,0xb8,0xce, + 0x87,0x91,0xef,0xa8,0x6b,0x22,0x37,0x79,0x2a,0x40, + 0x4e,0x8d,0x45,0x5d,0x03,0xe5,0xbc,0xa2,0xdc,0xa1, + 0x3e,0x64,0xa4,0x55,0xa0,0x0b,0xed,0x3f,0xeb,0xd3, + 0x82,0x54,0x28,0xc8,0x60,0x0a,0x4e,0x4e,0x52,0x14, + 0x0c,0xa0,0x64,0xb6,0x88,0x76,0x3e,0x6c,0xce,0x11, + 0xd8,0x4d,0xd2,0xe8,0x1e,0x4f,0xe2,0x6e,0x0a,0xa7, + 0x4c,0x0d,0x92,0x2b,0xb8,0x8c,0xe6,0xac,0x26,0xe4, + 0x65,0x32,0xdc,0x6d,0x54,0x63,0xd1,0x99,0x41,0x08, + 0x8c,0xbe,0x8b,0x8d,0x61,0x40,0xeb,0x98,0xb4,0x87, + 0xa6,0x70,0xf2,0x84,0x3e,0xbb,0xfd,0x90,0xac,0x63, + 0xa0,0x89,0x1e,0x8b,0xb2,0x93,0x73,0x40,0xf5,0xbb, + 0x4a,0x73,0xbb,0x29,0x56,0x42,0x9b,0x1c,0xad,0x95, + 0x9a,0xee,0x7b,0xdd,0x8a,0x06,0xb2,0x68,0x2a,0xed, + 0xf7,0x74,0x73,0x21,0xa2,0x61,0xd3,0xa8,0x38,0x0a, + 0x4d,0x33,0xbf,0xdc,0xe6,0x98,0xa2,0x22,0xc4,0xde, + 0x7e,0xd3,0xab,0x38,0x2d,0x87,0x81,0xd2,0x16,0xe9, + 0x98,0x5c,0x17,0xaf,0xdd,0x94,0xf8,0x09,0xad,0x49, + 0x6b,0x22,0xe6,0x4e,0x2b,0xc0,0xa2,0xe3,0x3d,0xed, + 0x9d,0x8f,0xfb,0xee,0xaa,0xad,0x51,0x8b,0x77,0xf7, + 0xdd,0x5f,0xaf,0x57,0x7d,0x7f,0x7f,0x2f,0x1d,0x6d, + 0x55,0x0f,0x1a,0x85,0x83,0xef,0x7b,0xdc,0x3b,0xb0, + 0xe6,0xf1,0xb4,0x82,0x1e,0x65,0x9d,0x50,0x7e,0x8e, + 0x46,0x53,0xe4,0x4d,0x35,0x68,0x62,0xc5,0xff,0xf8, + 0x9b,0x40,0x73,0x5a,0xaa,0x53,0xc7,0x48,0x95,0x32, + 0xa2,0x82,0x9c,0x68,0x45,0x15,0x9a,0xbb,0xc8,0x0c, + 0xa7,0x37,0x52,0x1a,0x4d,0xa3,0x43,0x4c,0xa8,0xa0, + 0x76,0x65,0xcb,0x15,0x3f,0xc9,0xae,0xde,0xe9,0x3c, + 0xe4,0x77,0xd7,0xc4,0xb5,0x4f,0xb4,0x02,0xc0,0xf6, + 0x48,0xe5,0xa5,0x90,0x56,0x97,0xd4,0x4d,0x88,0x99, + 0xa2,0x21,0x34,0x16,0xed,0x1a,0xbd,0x20,0xb0,0xb7, + 0xe8,0x48,0xd2,0xfc,0x19,0xca,0xf5,0xd2,0xe2,0x58, + 0xff,0xd6,0x2d,0xf6,0x9f,0x44,0xb0,0x7a,0x70,0x91, + 0x2f,0x8c,0x43,0xee,0x5d,0x74,0x00,0x15,0x79,0xea, + 0xdb,0x06,0x45,0x4c,0x25,0x9d,0xcb,0x15,0x86,0x28, + 0x7a,0xa0,0x65,0x42,0x8e,0x1d,0x9a,0xd0,0x9f,0xab, + 0x36,0x7b,0x49,0xb0,0xad,0xf7,0xf5,0xbd,0x37,0x5e, + 0xd3,0x14,0xac,0xd1,0x00,0x46,0x76,0x02,0x62,0x83, + 0x2c,0x25,0xaf,0x6b,0x83,0x50,0xb1,0xd6,0xb4,0x61, + 0x01,0x95,0xf2,0xd0,0x8c,0xdc,0xa0,0x52,0xba,0xfa, + 0x44,0xbd,0x85,0x69,0xee,0x6d,0x0d,0x24,0x4b,0x08, + 0xa7,0x05,0x1c,0xe8,0xc2,0x4d,0x90,0x3e,0x48,0x6a, + 0x1e,0xd7,0xf3,0x4a,0x9d,0x92,0x42,0xb6,0x49,0xad, + 0x4d,0x22,0xd5,0x04,0xff,0x4d,0x1a,0x08,0xa2,0x8b, + 0x5c,0x17,0xad,0x63,0x6f,0x07,0x1b,0x6f,0x25,0xee, + 0x3e,0xd1,0x3a,0x3a,0xe6,0x1a,0xac,0xe0,0x11,0x82, + 0x4c,0x81,0x9d,0x4a,0xe9,0xc1,0x61,0x67,0x6d,0xea, + 0xdd,0x81,0xa0,0x66,0x73,0xba,0xd1,0x49,0x71,0x41, + 0x49,0xf7,0xe5,0xa6,0x98,0x1c,0xfc,0x9c,0xba,0x70, + 0x45,0x3e,0x26,0x21,0xa8,0x5b,0xd8,0x7d,0xfc,0x9b, + 0x60,0xd9,0x69,0xb4,0xf8,0x3a,0x98,0xf2,0x9a,0xe8, + 0x93,0xab,0x8d,0xaf,0x6b,0xd8,0xaf,0x79,0xac,0x95, + 0xe8,0x4b,0xa1,0x26,0x2b,0xd8,0xfa,0xdb,0x49,0x08, + 0xb9,0x9e,0x22,0xed,0x4c,0x7a,0xef,0x82,0x9e,0xee, + 0x8e,0x65,0xb0,0x3e,0x37,0x43,0xee,0x9f,0x2d,0x2e, + 0x94,0x36,0x20,0x9a,0xe9,0xc4,0x7f,0xab,0x23,0x7c, + 0xc6,0x7b,0x08,0x5d,0x70,0x09,0xa1,0xd1,0xc2,0xfb, + 0xa6,0x90,0x2f,0x71,0x2c,0xa7,0x02,0xcc,0xdc,0x03, + 0x6b,0x15,0x11,0x50,0x80,0x48,0x75,0xb6,0xfb,0x87, + 0xc1,0x9f,0x1a,0xaf,0x70,0x0d,0xde,0x44,0xc9,0x1b, + 0x48,0xf7,0x9f,0x84,0xd2,0xab,0x6b,0x6f,0x43,0x84, + 0x91,0x96,0x0b,0x56,0x21,0x16,0xc9,0x27,0xfa,0x45, + 0xd1,0x74,0xf2,0x6a,0x4a,0xc5,0x39,0x15,0x0d,0x94, + 0x69,0x39,0xf9,0x50,0x19,0x86,0x85,0x22,0x7a,0x08, + 0xe1,0x43,0x4a,0xd0,0xa4,0x0f,0x6c,0xfb,0xb8,0xac, + 0xf7,0xa3,0xcc,0x4f,0x91,0x90,0xd8,0xc6,0xc8,0xed, + 0x7b,0xed,0xf7,0x4b,0x65,0x28,0xc3,0xa4,0xec,0x91, + 0x07,0xd9,0xc9,0x7e,0xa3,0x61,0xeb,0x57,0xb6,0x4d, + 0xf9,0x3b,0x05,0x96,0x74,0x30,0xc3,0x01,0xb0,0x5c, + 0xc1,0xe4,0x68,0x8c,0xa4,0x75,0xe8,0xd5,0x9c,0x13, + 0x30,0x3b,0xe4,0x60,0xea,0x3a,0x75,0x6a,0x0a,0x46, + 0xed,0x1d,0xe4,0xf6,0x23,0xac,0x95,0x7b,0x81,0xd3, + 0x5f,0xe4,0x6b,0x12,0xfe,0xfe,0xf6,0x59,0x34,0x41, + 0xa0,0x93,0x3a,0xbd,0x4b,0xe8,0x7f,0x83,0x90,0xa3, + 0x30,0x31,0xb3,0x26,0x31,0x38,0x21,0x74,0x40,0xa1, + 0x2d,0xa0,0x15,0x57,0x28,0xd2,0x36,0x04,0x4f,0x7f, + 0xd7,0x3d,0xdb,0x5b,0xd8,0xa8,0x7f,0xd3,0x21,0x50, + 0xa1,0x2b,0x78,0x3c,0x03,0x42,0x65,0x7a,0x30,0x6a, + 0x40,0x19,0x56,0x8a,0x98,0x90,0x97,0x31,0xae,0x61, + 0x2d,0x6e,0x3b,0x22,0x36,0x70,0xfe,0x56,0x4b,0xf1, + 0xde,0x28,0x17,0x85,0x93,0x6a,0xd7,0x39,0xe5,0x90, + 0x51,0x41,0x4e,0xbf,0x73,0x99,0x00,0x60,0xa2,0xde, + 0x21,0xb8,0x76,0xfa,0xae,0xc7,0x48,0x14,0xa1,0x3d, + 0xe9,0x50,0x4a,0x9f,0x99,0xa6,0xc9,0x48,0xe8,0x1b, + 0x3a,0xd4,0x4a,0x68,0x8f,0x4b,0xc1,0x3e,0xc8,0x4e, + 0xaa,0x81,0x56,0xb1,0x1e,0x34,0x34,0xe5,0x45,0xae, + 0xc7,0xa9,0x79,0x26,0xdd,0x9c,0x43,0xe8,0xdc,0xfd, + 0x18,0x82,0x86,0xad,0xd3,0xbc,0x0e,0x45,0x4c,0x6b, + 0xf6,0x62,0x0f,0xa5,0x4a,0x43,0x01,0x27,0xa3,0xfd, + 0xed,0xfd,0xaa,0xe4,0x02,0xee,0x50,0x5b,0xb7,0xc6, + 0xc9,0x40,0xd0,0x79,0xa8,0x9d,0x14,0x15,0xb7,0x9d, + 0x07,0xbd,0xbf,0xd3,0xfb,0x77,0xf2,0xcc,0xf4,0x7d, + 0x10,0x63,0xcd,0xe8,0xfb,0xd3,0xf7,0x41,0x03,0x6e, + 0x94,0x16,0x3f,0x34,0x32,0xef,0xf6,0xd8,0xdf,0x57, + 0xc8,0x4a,0xd2,0x83,0x92,0x84,0x69,0xf7,0x39,0xe2, + 0xb2,0xbb,0x74,0xb3,0xd7,0xe9,0x23,0x18,0xdf,0xdc, + 0x7e,0x8f,0xc2,0x1c,0x7b,0x71,0xf2,0xfd,0xfd,0x4d, + 0x93,0x6b,0x05,0x07,0x48,0x05,0x1a,0xc3,0x7e,0xaf, + 0xcb,0x8c,0xc6,0xf7,0xe2,0x68,0x82,0x01,0x0d,0x67, + 0xef,0x0e,0xe0,0xed,0x7a,0x5d,0x31,0x67,0xe0,0xf5, + 0x75,0x9a,0x6c,0x4e,0x14,0xa7,0x9b,0x3e,0xa3,0x02, + 0xc9,0x75,0x44,0xae,0x78,0x6a,0x1d,0xd9,0x82,0x08, + 0x92,0xc7,0xb8,0xbb,0xe9,0x9e,0x57,0x40,0x06,0xb7, + 0xf5,0x69,0xcc,0x0d,0x71,0xe2,0xaa,0x4f,0x79,0xb9, + 0x11,0x52,0xd1,0x67,0xad,0xdc,0x98,0x3c,0x0f,0xfc, + 0x60,0xca,0xd9,0xdf,0x39,0xba,0x97,0x48,0x91,0xa9, + 0x6d,0x80,0x83,0xb4,0xc9,0x61,0xbb,0x21,0x1b,0x2b, + 0xf0,0xf7,0x5b,0x91,0x4d,0x88,0x95,0xe3,0xf5,0x27, + 0x9f,0x95,0x29,0xf1,0xba,0x8d,0x2e,0x63,0x48,0x25, + 0xfd,0x3d,0xa5,0x91,0x3e,0xa0,0xe6,0x6a,0x70,0xe1, + 0x1e,0x0b,0xd6,0x7e,0x28,0xb9,0xd4,0x7b,0xd2,0x95, + 0xd1,0xb0,0xc5,0x24,0xd8,0x0f,0x28,0x75,0xb9,0xcf, + 0x91,0xe7,0x59,0x09,0x21,0xd4,0x83,0x5c,0xbf,0xaf, + 0xe6,0xfe,0x25,0x27,0x5f,0x27,0xac,0x25,0x8a,0x88, + 0x28,0x1f,0x97,0xf0,0x7d,0x42,0x95,0x11,0xfd,0x66, + 0x9a,0x1c,0x44,0x5f,0xa6,0x22,0x47,0x0e,0xdb,0x82, + 0xc2,0xa5,0x68,0x8a,0xd1,0x59,0x19,0x24,0x4f,0xa1, + 0x8e,0x16,0x75,0x29,0x00,0xa1,0xd6,0x03,0x23,0x53, + 0x53,0x13,0xe5,0x46,0xee,0x75,0x2d,0xf4,0x66,0x8a, + 0x0a,0xa8,0x30,0xbd,0x5d,0xda,0xec,0xd3,0xbb,0xaf, + 0x75,0x80,0x7e,0x57,0x75,0xd1,0x1e,0xac,0x2b,0xea, + 0x45,0x53,0x1f,0x26,0xbb,0x28,0x6e,0x20,0x29,0x20, + 0x35,0x6d,0x26,0x24,0x1c,0x4e,0x8b,0xdc,0x39,0x4a, + 0x3b,0xde,0x37,0x25,0xc3,0xba,0xa4,0xee,0xc9,0xc1, + 0x76,0x32,0x86,0x73,0x09,0xc6,0x0e,0x7a,0x9c,0x2c, + 0x00,0xdc,0xa1,0xa1,0xe1,0x9f,0xee,0x40,0x77,0x9b, + 0x8a,0x83,0x84,0x53,0xfe,0xda,0xc4,0x0f,0x4e,0x14, + 0xde,0x65,0x42,0x5a,0x53,0x37,0xe5,0x46,0x58,0xd3, + 0xef,0x05,0x98,0x3c,0x19,0x3b,0x5a,0xa1,0xb1,0x43, + 0x34,0x06,0x27,0x71,0x14,0xd3,0xb9,0x69,0xa0,0x89, + 0xee,0x70,0x34,0x9a,0xd3,0x87,0xc0,0x21,0x58,0xd4, + 0x9d,0x26,0xaa,0x43,0x36,0xc4,0x2d,0xfd,0x5d,0x9b, + 0x8c,0xfe,0x5e,0x3b,0xa3,0x53,0xb2,0xcd,0x4f,0x91, + 0x38,0x7a,0x68,0xe8,0xf5,0xf5,0xcf,0x74,0x42,0xdc, + 0x29,0xd7,0x6b,0x2a,0xb4,0x6e,0xcd,0x89,0xa6,0xba, + 0xd3,0xef,0x24,0xf1,0x76,0x77,0xd5,0x9e,0xa8,0x4d, + 0x97,0x07,0xe7,0xbe,0x37,0x50,0x28,0x48,0x63,0x19, + 0x87,0x6f,0x44,0x29,0x48,0xeb,0xe3,0x62,0x67,0x86, + 0x7d,0xbc,0xc2,0x79,0x81,0xd4,0x09,0xed,0x87,0x61, + 0x5f,0x40,0x11,0x32,0xc9,0x0a,0x4c,0x23,0x53,0xc3, + 0x3b,0x88,0x9a,0x38,0xc8,0xdc,0x2a,0x38,0x13,0xc8, + 0x56,0xa0,0x9c,0x24,0x41,0xbf,0x93,0xa1,0x2d,0xb7, + 0x42,0xc0,0x69,0xe2,0xa6,0xf3,0xca,0x65,0x4f,0x4e, + 0x14,0xd3,0xc9,0x24,0xa4,0x91,0x9b,0xfc,0xd8,0x0d, + 0xf4,0x62,0x8e,0xa6,0xe1,0xdc,0x5e,0x61,0x0c,0x5c, + 0xb1,0x50,0x76,0x99,0x93,0x64,0x12,0x49,0xd7,0xfd, + 0x72,0x51,0xf4,0x69,0x31,0x52,0x01,0xe4,0x3a,0x4f, + 0x77,0x91,0x04,0x6d,0x39,0x9d,0x8c,0xaa,0xc5,0x9d, + 0x29,0x59,0x4a,0x9a,0x4d,0xaa,0x78,0xb2,0xc7,0x06, + 0x0f,0x98,0xb1,0x0b,0xa3,0x6e,0xec,0xa0,0x08,0x7a, + 0x38,0x81,0xba,0x4d,0x86,0x2c,0xd2,0xf5,0xef,0xa4, + 0x74,0x6f,0xe7,0xd4,0xea,0xc6,0xcb,0xfb,0x8b,0x45, + 0xf7,0x39,0x4d,0x6c,0x68,0x27,0x6c,0xba,0x5a,0xf4, + 0x78,0xd0,0xcf,0x94,0x8e,0xa8,0xa8,0xfb,0xa3,0x67, + 0x0c,0xf4,0xaa,0x0b,0x03,0xec,0x74,0x5c,0x0d,0x26, + 0x79,0x95,0x1a,0x82,0xd4,0xe5,0x26,0x6f,0x2c,0xfa, + 0xdc,0x83,0xf1,0xd2,0x22,0xb7,0xe9,0x94,0x2f,0x46, + 0x94,0xd3,0x25,0xa3,0xe9,0xb4,0xb1,0xea,0xc1,0x6d, + 0xe2,0x08,0x70,0x93,0x3b,0x3d,0x8c,0x00,0x11,0x8c, + 0xf4,0x57,0x30,0x88,0xdc,0xa6,0xde,0x28,0x50,0xd2, + 0xad,0x1d,0x18,0x23,0xdf,0x26,0xc8,0x0e,0x90,0xa3, + 0xba,0xb2,0x3f,0x0e,0x3d,0x93,0x69,0x3f,0x2e,0xa7, + 0x07,0x04,0x44,0x7f,0xfb,0xbe,0x49,0x2f,0x44,0x01, + 0xc9,0x44,0xeb,0x75,0x31,0xaf,0x79,0xf6,0xf5,0x69, + 0x23,0xa3,0xcf,0xda,0x45,0x20,0x05,0x57,0xf1,0x87, + 0x36,0x49,0x9a,0xdd,0xfa,0xa0,0x20,0xf8,0xf9,0x3c, + 0xca,0x22,0x9c,0x8c,0x6f,0x49,0x3b,0x4a,0x0d,0xeb, + 0x44,0x6d,0x3b,0x7d,0x8f,0x43,0x93,0xdc,0xfa,0x1d, + 0x28,0xc6,0x2d,0x0b,0xce,0xed,0xed,0x13,0x78,0x72, + 0x5f,0x87,0xb1,0x58,0xb0,0x05,0x20,0x05,0x94,0xbb, + 0x73,0x9d,0xa8,0x74,0xa7,0x49,0x73,0x7b,0xd2,0x36, + 0x05,0xa6,0x5a,0x0c,0xe3,0xf2,0xb8,0xb9,0xf2,0xaa, + 0xfe,0x23,0xbc,0xc8,0xe8,0x02,0xed,0x28,0x36,0xb7, + 0xc1,0x12,0x4f,0x6f,0xb8,0x52,0xab,0x6d,0xa1,0x51, + 0xfb,0x4e,0x85,0x85,0x44,0x5c,0x67,0xa4,0x47,0x53, + 0x70,0x9b,0x4e,0x89,0xa6,0xea,0x12,0xe5,0x95,0xb4, + 0x59,0xea,0x92,0xec,0x28,0xba,0x40,0xf7,0x2c,0xe2, + 0xe1,0x1d,0xb5,0xd7,0x29,0x24,0x88,0xab,0x58,0xe1, + 0x45,0x25,0x77,0xef,0x8d,0x7a,0xec,0x71,0x0c,0xb7, + 0xee,0x06,0xf4,0x04,0x91,0xd2,0x0a,0xb4,0xa2,0x42, + 0xc1,0x2b,0x74,0x38,0x47,0x94,0xd7,0xfd,0x39,0x6e, + 0x94,0xd3,0x41,0xf6,0x37,0xed,0x34,0x88,0x7b,0xfb, + 0x46,0xba,0x4e,0x0d,0xfe,0x5c,0x37,0xe9,0xa8,0xb2, + 0x70,0xdf,0xb0,0xe0,0x4b,0xef,0x5e,0xd2,0xf8,0xe8, + 0x81,0x95,0x8c,0x0d,0xe9,0xf7,0x53,0x51,0x45,0x5d, + 0xe5,0x89,0x2f,0x15,0x38,0x96,0xa3,0xe7,0xcb,0x15, + 0x7c,0xaa,0x0e,0x8a,0x99,0x94,0xa1,0x68,0xd1,0x95, + 0xd3,0x67,0xa5,0x82,0x77,0x42,0x38,0xb5,0x38,0x82, + 0xa2,0xb8,0x52,0x11,0xa7,0x79,0x5d,0x53,0x7e,0x62, + 0xf2,0x0e,0x32,0xcd,0x72,0xa5,0x6b,0x4f,0x34,0x46, + 0x7a,0x97,0x42,0x41,0x5a,0xb4,0x47,0xd3,0x9a,0x0a, + 0x8d,0x4f,0xc1,0x99,0xb9,0x4d,0xf2,0xdd,0x13,0xb7, + 0xfd,0xba,0xcd,0x59,0x49,0x13,0x8b,0x31,0xeb,0x0b, + 0x9e,0x4b,0xc1,0x14,0x68,0x25,0x8a,0x4a,0xff,0xb9, + 0x43,0x17,0x95,0x52,0x4d,0x1a,0x9e,0xd4,0xb0,0x04, + 0xad,0x58,0x41,0x11,0x6f,0x0b,0x31,0x62,0x1a,0x80, + 0x8e,0xac,0x87,0x0f,0x10,0x55,0x7c,0xc1,0xc6,0xdc, + 0x42,0x66,0x69,0x1c,0x54,0x6f,0xa8,0xb3,0xa9,0x26, + 0x95,0x3d,0x2d,0xe0,0x49,0x40,0x3c,0x2d,0x54,0x77, + 0x43,0x01,0x12,0x75,0xd5,0xed,0xa6,0xdc,0x6f,0x13, + 0x23,0xa9,0x3a,0x75,0x15,0x6d,0x39,0xaf,0x06,0x9d, + 0xce,0x20,0xa3,0x42,0xfd,0x9e,0x01,0x1a,0xfd,0xc8, + 0x48,0xaf,0xd3,0x84,0x27,0x89,0xbd,0x0e,0x09,0x22, + 0xf8,0x32,0xdd,0x1f,0xe7,0x23,0xe1,0x0e,0x14,0x5d, + 0x47,0xef,0x8e,0xe3,0x81,0x88,0x80,0x11,0x5a,0x32, + 0xe5,0xb4,0xa9,0xd8,0xa4,0xe7,0x71,0x28,0x9a,0xfb, + 0x1d,0x97,0x6e,0x4e,0x94,0x90,0x84,0xb3,0x56,0x5a, + 0x93,0xe1,0xb0,0xdf,0x7c,0x7e,0xa4,0x9b,0xc5,0x41, + 0x00,0x1a,0xad,0x75,0x90,0xb2,0xf8,0xe9,0x6c,0x28, + 0x92,0x4b,0x83,0xd7,0x04,0xf8,0xeb,0x39,0xc1,0xf6, + 0xf8,0xff,0xfa,0xcf,0x7a,0x0e,0xd7,0xd4,0x75,0xa7, + 0x02,0x45,0x69,0x9f,0x8e,0xc2,0xd6,0x13,0x0e,0xac, + 0x93,0x7d,0x30,0x20,0x6a,0xa3,0x89,0xe9,0x8d,0xb8, + 0x5e,0x21,0x94,0x55,0x33,0xaf,0xae,0x30,0x01,0x26, + 0xfb,0x72,0x0d,0x34,0xc9,0x16,0xe6,0xda,0x2d,0x26, + 0xe8,0x7d,0x75,0x7a,0xa1,0xe0,0x83,0x46,0xa6,0x83, + 0x8f,0x3d,0xce,0xbc,0x3b,0x15,0x0c,0x6b,0x6b,0xd2, + 0xd9,0x51,0x31,0xab,0xfb,0xe9,0xa0,0x13,0x7a,0x14, + 0x9a,0x4e,0x5b,0x06,0xfb,0xe3,0xd6,0x3c,0xc8,0x84, + 0xd2,0x35,0x19,0x92,0xa6,0xa9,0x65,0x37,0x3d,0xa5, + 0x5e,0x78,0xa1,0xb1,0x89,0x3e,0x75,0x6e,0xa2,0x15, + 0xc4,0xd8,0x78,0xa6,0x10,0xfd,0xa6,0xfb,0xb8,0x2b, + 0x52,0x09,0x19,0x22,0xa4,0xf8,0xa4,0xb9,0x70,0x7b, + 0xe4,0x6f,0x87,0x5e,0x50,0x45,0x48,0xd9,0x51,0x04, + 0x69,0x7e,0x20,0x08,0x56,0x4b,0x9b,0x11,0x35,0x49, + 0xa1,0xac,0x13,0x6a,0xa1,0x08,0x81,0x5b,0x10,0x94, + 0x99,0x75,0x92,0xab,0xe2,0x26,0x83,0xe4,0xa5,0x75, + 0x28,0xcc,0x23,0x63,0x4c,0xe0,0xcc,0x0d,0xa1,0xea, + 0x62,0xed,0xcb,0x88,0x6e,0xdf,0x1a,0x87,0x35,0x79, + 0xe1,0xe8,0xa2,0x7b,0xbd,0x5e,0x0b,0x68,0xc9,0x34, + 0xb5,0xb6,0x4d,0x03,0xca,0x66,0xb3,0xc2,0xf4,0xc3, + 0x72,0x82,0x39,0x12,0x7d,0x6b,0x67,0x33,0xa1,0x34, + 0x97,0x89,0xb9,0x30,0x0e,0xd1,0x8b,0xd0,0x15,0x42, + 0x83,0xb4,0xb0,0x6a,0x07,0xc8,0x9a,0x0a,0x9c,0x86, + 0x26,0xac,0x0f,0xa2,0x62,0xb6,0x58,0x0f,0x7a,0xc9, + 0x93,0xf1,0x5b,0xfb,0x8e,0x2b,0xc5,0x56,0x80,0xc3, + 0x30,0x22,0x5d,0x4e,0xec,0xaa,0xef,0x26,0xb9,0xcc, + 0xd2,0x88,0x3f,0xf9,0xf0,0x9c,0x6a,0x9d,0x52,0x81, + 0xe8,0x92,0xb4,0x75,0xf2,0x92,0xf4,0x47,0x43,0xe3, + 0x60,0xd1,0x1b,0x12,0xd8,0xd3,0x41,0x19,0xf6,0xd4, + 0x4a,0x0e,0xf1,0x34,0xbd,0x15,0x84,0xa9,0x48,0x2b, + 0xbf,0xd1,0x8a,0x3a,0x08,0xd4,0xad,0x74,0x10,0x39, + 0x2a,0xdd,0x69,0xef,0x1c,0x7a,0x1a,0x0e,0xb6,0xad, + 0xe1,0xd6,0x18,0x98,0x44,0xcf,0x9d,0xae,0x1b,0xfa, + 0x1d,0xd7,0xa8,0x09,0xb2,0x58,0xc4,0x42,0xdc,0xb4, + 0x1c,0xfd,0x1d,0xca,0xae,0x4b,0xc1,0xce,0x9f,0x4c, + 0x83,0x9d,0x22,0x92,0x42,0x3b,0x16,0x30,0x2e,0x57, + 0x02,0x22,0x12,0xb5,0x3d,0xd1,0x8e,0x61,0x0f,0xb0, + 0x93,0x8d,0x69,0x5f,0x20,0xd0,0xe0,0x45,0x0f,0x81, + 0x22,0x1a,0x08,0x2e,0xee,0x15,0x39,0x24,0x64,0xd7, + 0x27,0x1a,0x19,0xe2,0x0f,0x27,0x34,0x43,0x05,0xd1, + 0xa9,0xb3,0x57,0xd4,0x8b,0xba,0x06,0x97,0x24,0xeb, + 0x74,0x32,0xaa,0x87,0x70,0x1c,0x6b,0xea,0x34,0x5c, + 0xa7,0x95,0x16,0xf4,0x90,0xc3,0xb3,0xf9,0x23,0x49, + 0x01,0x55,0xd0,0x99,0xd8,0x14,0x6a,0x57,0xb1,0x53, + 0x3e,0x91,0xeb,0xf0,0x2e,0x4e,0xb2,0xaf,0xb4,0x6e, + 0xba,0xb0,0x0e,0xf8,0xe1,0x52,0xd1,0x9b,0xa2,0x71, + 0x6d,0x64,0xde,0x3d,0xf3,0xc7,0x7d,0x52,0xed,0x92, + 0x44,0x89,0x8c,0xa3,0xdf,0x6f,0x8f,0xa2,0x23,0xaf, + 0x11,0x41,0x4d,0x62,0x51,0x63,0xdc,0x7e,0xad,0xeb, + 0xef,0xa7,0x9f,0xd3,0xaf,0x21,0xa5,0x8f,0x4f,0x07, + 0xf3,0x74,0x90,0x24,0xca,0xc7,0x15,0x5c,0x66,0xbd, + 0x6e,0x4e,0xbb,0x93,0x46,0x08,0xae,0x61,0x8b,0xdf, + 0xb8,0x4c,0x7c,0x4f,0x8a,0xbc,0x00,0xcf,0x9e,0x72, + 0x66,0x79,0x29,0x67,0x8b,0x04,0xd8,0x41,0x17,0x52, + 0x29,0x12,0x47,0x04,0xf8,0x68,0x8e,0xd8,0x8a,0xa3, + 0xa2,0x48,0x13,0x7d,0xa7,0xc1,0x02,0x60,0x5b,0x83, + 0x06,0xc5,0xb5,0x0e,0xce,0x7d,0x8a,0x0c,0xf4,0x23, + 0x75,0xb2,0xef,0x9b,0x69,0xbf,0xa4,0x97,0x2a,0x28, + 0x66,0x8b,0xb4,0xaa,0x29,0x5d,0xbc,0xa3,0x1b,0x27, + 0x1a,0x1e,0x45,0x92,0x1c,0x62,0xd5,0x91,0x56,0xca, + 0x6c,0xeb,0x7b,0x5b,0x4a,0x80,0xa7,0xfc,0xb6,0x10, + 0xe4,0x4b,0xc5,0x61,0x91,0x2e,0x67,0x42,0xcd,0x9c, + 0x15,0xce,0xe4,0x6f,0x74,0x81,0xe7,0x94,0x43,0xa8, + 0xdc,0xbf,0xa7,0x66,0xc9,0x21,0x6b,0xaf,0x01,0x42, + 0x77,0x07,0xad,0xad,0x1e,0xfb,0x22,0x54,0x38,0xd0, + 0x99,0x12,0x91,0x39,0x19,0xc0,0x81,0x15,0xa8,0x85, + 0x72,0x2e,0xc6,0xee,0x05,0x4e,0x26,0x68,0xa6,0x93, + 0x47,0xd8,0x7c,0xb2,0x42,0x9f,0x8a,0x38,0xea,0x60, + 0x5c,0x71,0x91,0x8a,0x20,0x97,0xad,0xe2,0xc4,0xdf, + 0x0e,0x35,0x53,0x88,0xf4,0x24,0xf6,0x84,0xba,0x14, + 0x73,0xb8,0x8c,0x07,0xe0,0x64,0xb7,0x6e,0xf2,0x92, + 0x6c,0x24,0x83,0x1c,0xe6,0xb8,0xe0,0xd3,0x33,0x6a, + 0x2e,0xa4,0x45,0xc8,0xa2,0x99,0xc0,0x42,0xcd,0x47, + 0x2f,0xec,0x92,0x80,0xd7,0x15,0x24,0xc3,0xbb,0x67, + 0x85,0x94,0x5d,0x40,0x3d,0x15,0x04,0xa4,0x17,0x11, + 0x3d,0x41,0x95,0x51,0x84,0x27,0x71,0x73,0x0a,0x28, + 0x56,0xd8,0x3f,0x14,0xff,0xa3,0x46,0x88,0x7e,0x2e, + 0xa0,0x66,0x45,0x54,0x62,0x42,0x89,0x8c,0x07,0x98, + 0x2d,0x7a,0xe8,0xb0,0xd5,0x21,0x0b,0x31,0xfd,0x8b, + 0x43,0x27,0x46,0x77,0x52,0xa0,0x2d,0xb2,0x4e,0xcf, + 0x69,0xfa,0xe5,0x32,0x22,0xf0,0x50,0x24,0x6e,0x7b, + 0x19,0x25,0xa2,0x9f,0x20,0x61,0x5a,0xa4,0xb9,0xbd, + 0xa1,0xeb,0x00,0xf5,0xdf,0x39,0x13,0x57,0xd2,0xc8, + 0x98,0x82,0xb5,0x1c,0x6d,0x34,0xf8,0xd4,0x51,0x03, + 0x6b,0xdd,0x87,0x29,0x86,0xc6,0x15,0x39,0x6e,0x7a, + 0x19,0x9a,0x8c,0x9a,0x8c,0x40,0x13,0x88,0x31,0x15, + 0xd7,0x89,0x32,0x4c,0x59,0x99,0x74,0x46,0x86,0xf8, + 0x1e,0x2c,0x7e,0x4e,0xf2,0xfe,0xe8,0x3f,0x82,0x2a, + 0xd7,0xb0,0xbf,0x6d,0xe7,0xe7,0x2b,0x5d,0x44,0x80, + 0x57,0xd3,0x58,0x7c,0x91,0x31,0x22,0xfd,0x1d,0x47, + 0x3d,0x0c,0xc8,0x0f,0x6e,0x1a,0xe1,0x80,0xd9,0x8a, + 0xb1,0x13,0xba,0xce,0xb9,0x5f,0x12,0x24,0x4b,0x39, + 0x41,0x69,0xb3,0x49,0x3c,0xac,0x1b,0xf5,0x77,0xe6, + 0x6a,0xa9,0xb8,0x74,0x5d,0xc7,0xa9,0x1b,0x6d,0xd0, + 0x39,0x60,0xe7,0x48,0x07,0x64,0xd7,0x38,0x90,0x31, + 0x57,0x4a,0x81,0x3e,0xe9,0x6a,0xdf,0x45,0x4c,0x42, + 0x24,0x10,0xe1,0xe8,0x36,0x03,0x8e,0x4f,0x77,0x53, + 0x40,0xf4,0xfc,0x28,0x7b,0x29,0x4d,0x2f,0xb8,0x43, + 0xdb,0xdd,0xe3,0xb4,0xb9,0xdc,0xbf,0xfb,0x76,0x6c, + 0xb6,0xef,0x20,0x69,0x7e,0x40,0x9b,0xb1,0x69,0x89, + 0xf4,0xbf,0xee,0x86,0xba,0x18,0x92,0xc1,0x15,0x7c, + 0x2b,0x3e,0xfa,0x75,0x38,0x2f,0x1b,0x19,0xfb,0x7e, + 0x14,0x39,0x6e,0x62,0x90,0x0c,0x17,0x13,0xdd,0xa6, + 0xef,0x43,0x2a,0x7e,0x49,0x3c,0x4d,0x63,0xef,0x07, + 0xc6,0x88,0xe5,0x04,0xac,0xb4,0xc7,0x9c,0x34,0x1e, + 0x0e,0xe9,0x4c,0x8d,0x99,0x43,0x2d,0xb5,0x08,0xe9, + 0xff,0xd5,0x11,0xee,0x09,0xe9,0x80,0xc6,0xc8,0x6a, + 0x1e,0x9d,0x5f,0x8c,0x43,0xa0,0xe1,0xb9,0x58,0xb4, + 0xbb,0xeb,0x8f,0x68,0x3c,0x5d,0xdf,0xe7,0xae,0xf1, + 0x04,0x09,0x05,0xe5,0xea,0x95,0x3a,0xf2,0xa7,0x29, + 0x46,0x37,0x8a,0x2e,0xf7,0xba,0xa6,0x46,0xcf,0xa1, + 0x3f,0x6e,0x4f,0xa7,0xb3,0xb5,0xff,0x8e,0x9e,0xdf, + 0x0e,0x6d,0x91,0x22,0xb9,0x4e,0x9b,0xdf,0x29,0x6e, + 0x45,0x3a,0x4a,0x7b,0x0f,0x93,0x2e,0x88,0xb4,0x4b, + 0xb7,0x11,0x22,0x51,0x1d,0x94,0x31,0x45,0xbc,0x26, + 0x3a,0x26,0x8b,0x29,0x98,0x75,0xf7,0xd5,0xcc,0x2b, + 0x10,0x90,0x2e,0x39,0xac,0xb6,0xc9,0x20,0x27,0xce, + 0xbe,0x5d,0x70,0xc9,0xa5,0xd8,0xa9,0xdd,0x6f,0x8d, + 0x84,0x2b,0xfe,0x6e,0xed,0x06,0x71,0xac,0x70,0xf0, + 0xae,0xc0,0xdf,0x2e,0x47,0x5f,0xd1,0x35,0xb8,0x0c, + 0xb0,0xae,0x79,0x71,0xa9,0xd3,0x74,0x8f,0xda,0x86, + 0x64,0x0d,0x19,0x7b,0x96,0x55,0xd2,0x11,0x39,0xaa, + 0x8c,0xf4,0x62,0xaa,0x69,0x72,0x54,0xa8,0x4e,0x1c, + 0x4a,0x8c,0xc7,0x32,0xd9,0x3f,0x8a,0x78,0xad,0xa0, + 0x63,0xbb,0x54,0x23,0xd6,0x11,0xb5,0xcb,0xe4,0x72, + 0x39,0xfd,0x8f,0xc0,0xfb,0xcb,0x15,0x18,0x50,0x79, + 0xad,0xae,0x31,0x49,0x4e,0xd5,0xfd,0xf3,0x53,0x3e, + 0x95,0x83,0xf5,0xf5,0x67,0x6e,0xa3,0x50,0xca,0xc4, + 0x72,0x48,0x93,0x16,0x4e,0xee,0x3b,0x92,0x80,0x9f, + 0x46,0xe3,0x49,0x43,0x44,0x70,0x3e,0x79,0x06,0x4d, + 0xdd,0xf0,0x89,0x40,0x3a,0xd1,0x1e,0x69,0xd4,0x97, + 0x74,0x92,0x7a,0x70,0x90,0xfe,0xc1,0x69,0x3c,0xf4, + 0xc0,0x73,0x28,0x94,0x13,0xf3,0xf6,0xcf,0x77,0x26, + 0x92,0xd7,0x81,0x0f,0x99,0x3e,0x43,0xb8,0xc6,0x89, + 0x22,0xc5,0x98,0x10,0x45,0x3a,0x48,0xd3,0x43,0x4d, + 0xd7,0x10,0x36,0x9b,0x1a,0x8c,0x4a,0x93,0x7d,0x80, + 0xf8,0x59,0xed,0xd4,0x8d,0x4e,0x05,0x0d,0x2a,0x51, + 0xe4,0x45,0x45,0x86,0x16,0x2c,0x4e,0xc7,0x64,0xde, + 0x05,0x9a,0xfa,0x4a,0xcf,0x27,0x19,0x5f,0x16,0x38, + 0xd8,0xc7,0x7b,0x4e,0xeb,0x9f,0x18,0x1b,0x2d,0xc2, + 0x48,0xb7,0x44,0x45,0x21,0xbd,0x8b,0xfd,0xbb,0x87, + 0x46,0xa1,0xdc,0x7e,0xf3,0x9a,0x16,0x5c,0xf0,0x01, + 0xa9,0x53,0xed,0x81,0x31,0x79,0xba,0x3e,0xf1,0x97, + 0x71,0x90,0xa4,0x7b,0x88,0x01,0x2a,0xac,0xd0,0x3d, + 0x6d,0x50,0x9a,0x8a,0xf3,0x4e,0x60,0xfe,0xfb,0x60, + 0x77,0xdf,0xd9,0x2d,0xf4,0x84,0x4e,0xb9,0x43,0x4c, + 0xa1,0x3b,0x78,0x01,0xae,0x04,0x5d,0x77,0x21,0x9b, + 0x39,0x0c,0x4a,0xa7,0x83,0x52,0x05,0xaf,0x06,0x83, + 0x30,0x1e,0x9d,0x3c,0x47,0x6a,0x80,0x3f,0x2b,0x40, + 0xb6,0x68,0x6c,0x38,0xa1,0x3d,0x44,0x65,0x11,0x32, + 0x71,0xb0,0xe9,0xdb,0x6b,0xa2,0x83,0x56,0xd3,0xdc, + 0x53,0x04,0x8d,0x76,0xb1,0xb7,0xbe,0x88,0x8a,0x97, + 0x04,0x1d,0x0b,0x0a,0x51,0xdd,0xfe,0x7e,0xa0,0x3c, + 0xb7,0xe2,0x5e,0x37,0x29,0x45,0xc8,0x88,0xb2,0x32, + 0xfa,0xb9,0x18,0x59,0x91,0xa6,0x3c,0x26,0xd3,0x55, + 0xe7,0x87,0x12,0x3a,0xe3,0x4b,0xf4,0x50,0x16,0x61, + 0x3c,0x31,0x9d,0x54,0xda,0x90,0x10,0x57,0x73,0x80, + 0xd7,0x14,0xb5,0xd1,0xd1,0xa4,0x60,0xba,0xaa,0xfb, + 0x07,0xfa,0xc3,0xa8,0x10,0x39,0x85,0xb8,0x4e,0xfb, + 0x3d,0x9d,0x17,0x9a,0x85,0x06,0xeb,0xaa,0x02,0x65, + 0x5b,0x9a,0x4e,0xaf,0x4d,0x1f,0xe9,0x1c,0x5d,0x51, + 0xe5,0x8c,0x06,0xd3,0x3e,0x64,0xd0,0x5c,0x8b,0x4e, + 0xd1,0x54,0xab,0x2b,0x7e,0xe8,0x3c,0x3b,0x61,0x24, + 0xd2,0xda,0x9a,0xb4,0xa8,0x27,0xa8,0x8a,0x3b,0xbb, + 0x68,0x9f,0xa1,0x9c,0x46,0x8a,0xf4,0xe8,0xe7,0xcf, + 0x34,0xa9,0x45,0xee,0xe6,0xba,0x6f,0xa4,0xfd,0x53, + 0x91,0x68,0xf7,0x73,0xaf,0x49,0xab,0xe1,0x34,0x3d, + 0xee,0x0b,0x92,0x59,0x16,0x75,0x47,0xae,0x63,0xd4, + 0x4a,0xf0,0x94,0x77,0xa4,0xcd,0x82,0xae,0xcd,0x09, + 0x85,0x75,0x13,0x57,0xed,0xd1,0xaf,0x5f,0xbf,0x1e, + 0x2f,0x4f,0xd8,0xec,0xeb,0x20,0xb8,0xd1,0x06,0xce, + 0x11,0x07,0x4c,0x53,0x59,0x02,0xe5,0x6e,0xde,0x13, + 0xfd,0xa5,0x6f,0x8b,0xb9,0x94,0x96,0x4c,0xf9,0x55, + 0xae,0x7a,0x06,0xea,0x25,0xbe,0x7c,0xa9,0xc8,0x99, + 0x36,0xd5,0x54,0x10,0xa7,0x9c,0x23,0x97,0x4e,0x4d, + 0x82,0x45,0xf0,0xe4,0xd8,0x34,0x0b,0x5a,0x14,0x9b, + 0x0c,0xa6,0x18,0xa6,0x6b,0xf4,0x59,0x45,0x2f,0xb3, + 0xea,0x39,0x8c,0x78,0xda,0xae,0x7f,0x9a,0xdc,0x02, + 0x14,0x4f,0x35,0x3f,0xc9,0x77,0x07,0xb5,0x6a,0xc9, + 0x54,0x30,0x1d,0x2e,0x94,0x5a,0x9f,0x22,0x24,0x00, + 0x3d,0xb9,0x94,0x1e,0xd1,0xf7,0xae,0xe5,0x9e,0xb9, + 0x11,0xfd,0xa3,0x83,0x08,0xf6,0x9b,0x87,0xdd,0x00, + 0x4d,0x7c,0x19,0xf3,0xd5,0xcd,0x31,0xdc,0xa1,0x30, + 0xa9,0x90,0x80,0xfd,0xe5,0x21,0x4e,0x0e,0x94,0x67, + 0x74,0xc1,0x76,0x8e,0xce,0x4a,0xcb,0xf7,0x02,0x45, + 0x75,0x30,0xed,0x5e,0x4f,0x79,0x92,0xa9,0x91,0x49, + 0xde,0x57,0x45,0x85,0x71,0x5f,0xcb,0xfd,0x9a,0xc5, + 0x6b,0xcc,0xe9,0x55,0xed,0x94,0x9d,0x0a,0x9b,0xc9, + 0x52,0x83,0xd6,0xb5,0xde,0xe3,0x4e,0x61,0x99,0xd0, + 0xea,0x9a,0x4c,0x7a,0xcd,0x7b,0x98,0xb4,0x51,0x8f, + 0x7d,0x81,0xc2,0xaf,0xef,0x7f,0xef,0xb4,0x56,0xc9, + 0x82,0x86,0xbe,0xef,0x69,0x83,0x45,0x1e,0x52,0xce, + 0x55,0x1c,0x34,0x3e,0x56,0xfa,0x40,0xf4,0x68,0xbf, + 0x96,0xdf,0xd7,0x75,0xfd,0xa9,0xaa,0x7f,0xa8,0x53, + 0x03,0xe3,0xbe,0xfe,0xff,0x93,0xa1,0xdc,0xd2,0x2f, + 0xda,0x68,0x86,0xa5,0x63,0xc0,0x52,0x94,0x7c,0x87, + 0xa2,0x6b,0x91,0xa9,0x57,0xa7,0x5d,0xba,0x97,0x45, + 0xa7,0x33,0xc0,0x88,0xc9,0x06,0x5e,0x6a,0x8e,0x96, + 0x7e,0x5e,0x10,0x69,0x51,0xc0,0xe7,0x0a,0x53,0x5b, + 0x0b,0x72,0x73,0x92,0x41,0x25,0x06,0x4d,0xde,0x23, + 0xed,0xa6,0xc8,0x49,0x46,0x82,0x2b,0x04,0xe2,0xa5, + 0x31,0x9b,0xed,0xbe,0xcb,0x77,0xc4,0xef,0xd0,0x7e, + 0x77,0x99,0x62,0x72,0x75,0x4a,0x8b,0x28,0x9f,0x4e, + 0xe1,0x11,0xd2,0x97,0xc2,0x67,0xdb,0x7d,0x5f,0x4e, + 0xc8,0x6e,0xb2,0xa9,0x56,0xd2,0x53,0xe9,0xcf,0x4d, + 0xb4,0x4c,0x7b,0x4e,0x29,0x9c,0xd5,0x5e,0xbb,0x5c, + 0xdb,0x9a,0x44,0xfc,0x93,0x0e,0x85,0xd6,0x67,0x5f, + 0x1b,0x1a,0x4e,0x48,0x4b,0x43,0x29,0xb3,0x34,0xf2, + 0x6e,0x72,0xe7,0xa2,0x7e,0x89,0x34,0x75,0xc1,0x61, + 0xf7,0x08,0x59,0xa2,0x77,0x5a,0x9b,0xbb,0x64,0x1e, + 0xd7,0xa9,0x52,0x43,0xa1,0xdb,0xbd,0x4b,0xbb,0xf0, + 0x3e,0x65,0x1a,0x1a,0xcd,0x0d,0x01,0x4f,0x14,0xe9, + 0x05,0x5e,0x68,0x06,0x19,0xc2,0x69,0x1b,0x19,0x9f, + 0x7f,0xd0,0xfb,0xf7,0xbb,0xd2,0x9a,0x30,0x0a,0x90, + 0x2e,0xa7,0x27,0x15,0x1b,0x02,0xbc,0xcf,0x4e,0x84, + 0xdc,0xaf,0x2d,0x38,0x62,0x57,0xb8,0x47,0x95,0xe8, + 0x41,0xa7,0x51,0x75,0x54,0xa7,0x98,0x07,0x47,0x4f, + 0x1f,0x27,0x55,0x20,0x4b,0x80,0xd4,0x48,0xa5,0x06, + 0x1f,0x1a,0x11,0x4b,0xe5,0xb9,0xf7,0x87,0x34,0x3a, + 0xa4,0x35,0x05,0x59,0x48,0x1a,0xa6,0x28,0x42,0x21, + 0x5d,0xa1,0xe6,0x68,0xb5,0x14,0x61,0xe4,0x26,0x11, + 0xaf,0xeb,0xfa,0xa7,0xaa,0xfe,0xfc,0x5e,0x6b,0xfd, + 0xfb,0xfe,0x87,0xff,0x01,0xe4,0x64,0xdd,0xee,0x95, + 0xd0,0x9d,0x2d,0x77,0x58,0xe8,0xc1,0x14,0xbe,0xdc, + 0x52,0x9d,0x50,0x83,0xb9,0x9c,0xd3,0xf2,0xfd,0xb3, + 0x2b,0x54,0xe4,0xd4,0x99,0xae,0x00,0xcb,0x53,0xc1, + 0x72,0xf5,0x64,0x78,0xf3,0x37,0x17,0xe8,0x18,0x52, + 0x0a,0x79,0x2c,0x1a,0xa9,0xfb,0x56,0xe7,0xe9,0xef, + 0xef,0xef,0xeb,0xd7,0xaf,0x5f,0xc9,0x90,0xcd,0x7a, + 0x3a,0xbd,0x9f,0xe5,0x02,0xab,0xf3,0x87,0x56,0x24, + 0x5d,0x3b,0x08,0x49,0x57,0x98,0xb6,0x5b,0xa4,0xf7, + 0x78,0xdf,0xdf,0x35,0x74,0x15,0x2b,0x79,0x4f,0x50, + 0xc1,0xd0,0x03,0x40,0x9d,0x79,0x98,0xac,0x9f,0x75, + 0x72,0x78,0x5f,0xde,0x47,0x89,0x0e,0xea,0xe4,0x92, + 0x9e,0x0e,0xdf,0xa5,0x88,0x86,0x43,0x17,0x02,0x05, + 0xb4,0xa4,0xe3,0x43,0x3a,0x2a,0x84,0x6f,0x92,0x4e, + 0x2a,0x16,0x3e,0xb2,0x36,0xd6,0x41,0x8a,0xb4,0xbb, + 0x97,0xc9,0x04,0x8f,0x36,0xe8,0x31,0xbc,0x94,0x8a, + 0x1f,0xbd,0xbf,0x7d,0x5c,0x9b,0xa0,0x7f,0x57,0x90, + 0x81,0xbe,0xab,0xa6,0x74,0x6e,0xe7,0x72,0x4c,0xdf, + 0x01,0xa6,0x0e,0x47,0x2b,0x80,0x4b,0xa6,0x42,0x43, + 0xe2,0x77,0x25,0x1d,0xc6,0xbd,0x66,0x80,0xb6,0xac, + 0x61,0x42,0x2f,0x21,0xde,0x5b,0xc1,0xe1,0x02,0x3f, + 0xc9,0x41,0xd8,0x15,0x2b,0xce,0xcb,0xc6,0x21,0xc1, + 0x66,0x8f,0xb4,0x0e,0xc8,0xce,0xe7,0xcc,0x49,0x17, + 0x5c,0x0c,0xc3,0x15,0xa6,0xe7,0x9c,0xab,0x37,0xa1, + 0xec,0xe9,0xf7,0xdc,0xe4,0x1b,0xd1,0x8e,0x70,0x3f, + 0xe2,0xa8,0xbc,0x6b,0x66,0xa7,0x58,0x2b,0xda,0x1f, + 0xdc,0xf5,0xcb,0x1e,0x53,0xe9,0x1d,0x71,0xeb,0xf4, + 0x5e,0x2f,0xef,0xcf,0x21,0x6d,0xd0,0x9f,0xb5,0xd6, + 0xbf,0xff,0x1d,0x00,0xd2,0xe9,0x7b,0x10,0x6b,0xe0, + 0x91,0xf7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 }; diff --git a/data/resources/opensans_hebrew_condensed_regular.ttf b/data/resources/opensans_hebrew_condensed_regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..987276916c0df53d09e74f5708950664c36a30f5 GIT binary patch literal 32364 zcmdVDd3=q>7e78T&t0+**+Y=rW+LR6Os5qf85loa8) zHS$lz*(^J6Qr5NNemeJo6$vouOAibJ%f-usha`MgW5iO$rVU}iiK*)uYZ8+W1SuE0D zRXeFma4Wy$FOW~YR>XxmQ!El!s+}ZA{EhLChVdu(jRh9|hce&^#}|u({|Q1eT}}jI zrqn6U<9>~NX6H#T%i;-?D*ns=%!F9!EdTUN8qgb1npY>Oh)C#K^;$+Wgt+myiUj2$ zoHRtie&_cr-knh6rBYA~AA+v;ciI*^(3{d)zbm2V`L-&wbtUno!BT?`peS~z9 zL@$$WEP!;vc{=+a@kaVI9P@A_;^>aU6UPV~LvVD#(E~>>o}TCBFpNh}HjlU}J;*3w z5sH0?tQIDbEQLMJfuw@zNrfT?_W`7W{y?_V4-6}WnPfG4Kq{0+$ZEwbydO%kgo(K3 z=QX542nCIV*ecw~Vj&NlI!>AiuB5pDNoJQw2%AqfbDDAPA}k?o1!qHzVia8{^dt$w zb~2xBB?ECDAoL{z=@a58cp}XPGM{cIlj#n_eW5k3-yrjq6Uco2TzCa(k&owLgOPtP zNnmE+$p$i${XkTTuZTUnPulQnHk5?2??_)^3Y~&8=Vg(^fAAjs*@7cQkxj%sJ(KN!A3U2MepHjaN#SM6%+f!BfQ0lKcaHkbs^O?&Vcob(urg#7a=cXhu2@7tPGXfLN~>9>LVRfXgobm<|r1>e7cBu z;+eH#9(hQJ;eA3x=miliOgxJFBRJ5q430QLa0KAs&-js#1L+MHcs&}g`F)5mgv1Lz zWEeY22C;95z3>5KZ7YuN&@OQ;>>wlPMly$8Cw^=nj_t%(dcKW>(w$@=%O&lEjVMPs zWP2av>lMELa9H{S8X zfbzdi%5jvkYO+FEN~Ws^kTlSp!VmI~cwEWIQpli(ayi=ACbX9g#F68`;aPi@%Eimp zWcdtx=y!%M<+2&BnUt-AfO6H9$ylBy%d(ZA&obCTrJ?CdM;l3>5*m*?if3(zf}&p_ z3DAy8q9V=7bYh@EG>vA^ayp%^WM|kn%HzsY$}`IQ%7+?zjkCr@IlGzt&XcsFc=Jv40jD58CDvK4OxahhGauWQKf%W?NRMs?NaSnZFT35 zJHOp|aOc-Mzufuu&hgYtLfZ^{SCUqSIbxxAq0|LdQMS#S_w8t0qo zAC-D4{)BV+MSpTmg~Vw!`bKkNK`co#aLbCcK%Z|zY>6GQCl17sIFXj56>%o5QAcfw z3vmTU-H1EU5)a}@yofhxN7@q~(t-FAKjKdUNFWI!!9+(wNGJ&-;Ut1|B$1>Oi6Wgz zG>JhCcOhNT^T(5JsPFEi2kA)?NfJpWy-06JZ6DH?q>?m}PWqAlWB?gR29d#J2pLL- z5%gMQB*`G7P`p>j0PVevGxS($YC&6&d1NV>OO}zvWI0(uR+3jq1*t@i)no(NNY;~&$a!*w6qAeOb8?AH zAzzTo7j$7NEuf3&ZhDGdrQg%P7-2pvo|UmT*(HGq zVM3y?NH`&UEj&^*Q)m<+iZP1gil3A%l~Ky!%5vp0<@?Gj%G=7Psx~TLRex2fYQ5^X z>JN2Gb)tH>daAlgeNFw)%)-pwEX*w4Y@k`5*<`boW}lcnG(?lk+oxl8k8{L5;-toaAc zA6t1?MOdx0+TX&WMQn>PElOL=ZgIE8U)J{4A=V?US6T12zGVHty2i%YCfFv`rqpJ? z%|qKn+o`q(Z6DbA*cI8mW%s*%OZ#;D>Gs?0uQ{k3JRD*j#yBi+INweeoHSIJZnz7JCf4OyaD{@=! zcGm5wdrS8a_ulR!-DkRQbwBI=K+Cj&+TPj%?Nseb?SAcX?M3Y^?R^h34@VCVk6@2j zkKP``Jyv=g^0@D*@@(fB;@QWu*mI}nVb7~x3NH_@c&`Oso4w9^H}j709_zi+`<(Y5 z?L6AWwkvJ7v)zeyKec<|4+3548&mSFp zI`r?bti$^q9{Yy*PW3(IEBZzIP4(O9ch}#{KiI#Af1dwt|5N@y1-JzC2v`+xHqbgS zF>ra{@xZ4+EI!xwiguGGNf${T|=k?664U? zNk^#8PK!e)@I#4TVcBt?_s)cub-WQ#61MNd4)34SO$faiI$kHf-u}9;!hVwY`ZO_? zp5VtcI(!m+T^!C2JV$qmKYiAHAT}{~%i=AIhaDOpwJF)bV|M1IS;Ll#pZAVS*`D6L zzfvv;4%q$rqtLm+!-vtMX0}~c*BrDvuururd+kt9x}qjHYsD~caRPL5 zy5Tp)HRWd*eON*Vw*gheHZ0iDTIKFVwN$5cS6Mp-hlN@b<3qdJ2kE6hO`LqUgif2m zlr#0CLIMKv1L>FvKbB4YzVycs|A4$e#rOAq5xe~F*P1)ZLnF3{o40M>Pt)~rzx*u5 z{Prsg-HIpM@I>ZIjNyTB0CZ@e-GgDNyL*L#1^yJjoEo*Gty5UI&Wft-wEooFiVE(W zGtqd@aG?th7ij5A|OE?qfu)~oB*FPo$I zTMQIkMW6jU=x0nxufHk5OcXz$kB#|kt(jUIhF@#Q&FIg~0X(6`L>&4KW zhv*md4!v+%%GXDj$-aRcSpm7H69%5%YVUCGa3=`+SxW66ZJ$#zVb)Ex{)y@%OYv$WkbYuj$IVhbIdIbc9$OuPO=6+>yESW#0WzDh?3 z|A^n|OU3UymeYeYhC;+CdO^Z^$b5Ix+JuCw)GD<%)v+FHEHoWQv`eR*=L^4<9q14? zxLpR%!Sf`d0SlnRg%CS0?`WzEc0@Ul5n|~8CWcZjk6v1L)lMO`&+_3L4@UP4+w7Qa z%`EiYY3upJvj@j!DQ*j65~EJDDtpR199|%W-r!JYY4z;f@=C zw^lp2P$1EGheF81ti3wWP@E+sYVR=m>bfHjXD+=et}B~eSw4I1ie7!Dt;!k}m)|*c zsq(WASBYPznYB8y^5jpEYkIGtwiUBBKAIX3nT_Ec=PQaObXA^&R)w`pq4*>zpgIBk z(5ln|+qrh_D$#~sd3%+)TATcko_j?+M&o7)`Wkb3=gh044(M-lnn$311n?4k3FlOX zhDcmcd)t92LYNLZP2!Qe_lVrWS9VM<8=4#K%bdkr*FJsr9A<1pz?R&dqdw`mf32W+ zZMADG+w`g!W6OSi@66(aRMuIdb%-Pb=U^oQ3piuVwC>D?OMsJumsTU_qN%NyyUM{H z+KPU&WYeMbyWhU|TfdN~B=IvFbN7kg4%;_&+}`2Bs=vi#(Lj69NctY#=CIgNzrS~X z@$#gE6)*o9pddu^eImEOxro*q|1P?3c606k91bFf_7 z@IJ&gOaoa^%XKBGF0W7z&?D(6f)nRT0L?x^y$=4gWa3BS(KCh9F3=~#b`0$`YFN5> zz5n=Q1xLJ;7AM}{`17(62dC`*>cXBmCsQ}v$Sj@k>6~s+uZlTqep;}seEXc%5&iT7uSH5)@lIt(C+NNqN)qC7X`Wgtz|pYrn|Oz1Qr76*aLcch9IH zZ{;)1Bl-@d;t}z@*hlPTzu1ZTQjgyKS<2_T#rJn^f-%bEwyQ{yMoPq1YP?z-xe-tQ zvSTpXvC!}7wCI?cN@H_I9*IzgU zbA4BKoF78wWc}SKfY}o;&1IMrAkAqg62-C*{dqx=A&z<#Iw5));JF%pW2tC+4j6k7 zJE=ykSX-*)JyA3b@p4z&1v_%XBgD0wy07WHt^G{@u4zH(yGHH}?g&08%lf^uy>!(N zg+qKh7A@;HVa~~MvDH7tOpSTUWrmSahCYfos5R7=R_gO0 z&;q1b7cAALiaAJH&OwC^&%qvzE8NbDO%}zUAi_3VexEvf>KZF^r+!_>6s}(~YNWlt z|D>x2UcE8?t5d6{Ov>nKN5G}5R>#s?qKD#x^RM>nKkZz`-9X-MR^ulZ zy26S$N_x~yV*?c`D><#3osFbEv;xjHP;#qjIGs_DJ$2&I?c&mkZDlz>Y(D+y#eX9j z^mms`j2e+yxp)7%38Mzu(}nCqT9r5_Mm(ZFBOVP|5{j~OTHgY#YK&8fom()kDNdq> zSIue~a=*Ifv3PU+JUU><8z5=9K2Thw^sOGw22wZLp0kc(Y(>}=z>xY`8{X4O2fHGU zpbNxux5lhK5)Slv(DqtK2VPd{=%fn^=k{-frJ1

vWX^Oe6+kYZ-lp1S;@u*}%`^nudx-Sq0em4~XY&&uhyQqjT4w+FR!*Fn>Hg@Shv zPU)XmSiklWQ>ZOpQ=FeUza|oSyH=LK2gmgTm)n0(muB#ZppTQx92;vT7hFlX2j0B@ zs~G8szef_9Nc`k+bND$!&OzYMsAE*I?p z@((*)@PbmRrOoeK&~@|vqPagG{ZQ>J$Q0Vkq=}QoD)GKpksvOmNmQZi+kjNY+lVj) zbT)_PC3Z%uiq}OwtrgW@UC1q_uDeD3hIQ*oCQY5bNO|b|<%(0m`tdABU!`oP|8ynQ z&PKT@>4U!U9{30??#XQ>45zHaG`vwr9dfNfyq=|=N4B2X1M$0c z;vM$2vfa}g%67}7bc<1^yd^-6sf|7CRtSQPWDeK}6{p2nXV*`@Tc$izqpN{cqIxWx zukqab&cVIH*C+@6gmK6Vi``Aj1f8v&BL+csI%a!xpkZTqwwt}3<6j%;1VtD9FJf%P z&R264+&JRt;dMMD*^o@o3jRv(78qy>5)3Ckkh0Uspp^R~e>?G-(n)P&VPny(g^&I6 z<6rmLFx{uC%GLJd&TSpsU0NN6X1iOR#eQs+rybm*yw|`HKNag+D}w1<{e*ks;-K#{ zgzGg&Z$161On3*ln}cQ>;D)|4r&>#@HK)4P5Xwii_3Jn8Z>CY=z0H?TZ()Dvty!Ud zg&?qZ^ygTZ#4BE2bL7SR8RS&XM=!4v&u#tg&Q|d(ixMX5d$7YbT*rri|2vQtI?|I{ z-st%qDBGc5O5YPx*)Xx&vSpJMdtaSWoyOTn$!3htx*@$>U$PGFCO)9{;t;w`8Szw@ zp+YZB;bE*Bhqz%J!Y;4T|4$x>z&6BK?WbB8vb8~fLVgGFSGrC7V1`mZUBcCt?GlR6 zXTpZzwKQ z3@SItx-PtK(WQJ@XCm4QbXEDFxfDtsY^XA5j zjn-QWh3jP<7Q=@n?slQv3YUzC^O3Wu*RoP)W$LE#`5)|`(c{2V_xQ5$3y0k3m3 zoz%Ck+P#xTzGJ59KXan~>#5_C7q8RzzC0!I zZ6Mn1bj1+4-@ZZvg0X1%0-#%OOQxpiCom{7~rdq38t83CX7+xK3!HG*1&h+P-y7_nGZ2m8`NV z`_j-6=f;lhu#0M#H*J@m+$)ius=glj{pFituN%h!pVL?k8m)<=qz}1uVcV9v@u8@L z%8n1r1bXYpXNPuGyrutF^{}|Ch>lF#Yi&}@D(*zFA#;Gl zbShVVwhIY^0f&zOn3;)C50WKuplSeH9B@6)Luzc~3LF6)RXWaC%LI zaJG+S2S`y{(O$3vZ5_}$Fsk;HHK}A)!jn?#P67Nd44UMzN(br=XNtWeA3Je2hYA?I z@(T=C=-kmO*8O~X^PcM=og=#TPT#V;b5!%$6JK?9+d9Y0#kzxU{H@*bdOZ_&n~eYh9P9$qXv$mQhV)PTUg!P}~;lv_J>%I?(Z z=|_t0ocGLdU$mzIQXasl&EsTaZ5&9!PMI2<<{!{kx9wJh*3&J(heODUiu$+OO#Ik> zp3T5vibuQ-c{!{>2kac^E}e~92PKQPFQ}Rn~x^Yt>Q5K zQ0BW(&P!d8x7Kz-2HZ(76%SFL+!p|I1Qi#}!f}%L0}54~J+)^_t((PfI~Z>7q-zsYqD0>$tmTXKSC+7xZE595s9Ignk=8AG@YMsYu{_FxG?I_JFId z7C7`)=!iLV_t_~6=2g8mc?bvDXV81c_0H@PRoxW-5v>76ZhL`%A=%5$wAN39)}{-# z9&n5fK6OIeaf0UMkIo!-NeH8!;urd##2d6d`|zrm{FRUa81o^+y%huH_AA*ykY8^t zoS@(;m>}@JlWQ0?YgxJJjmnf6-j?RHs@&0{Zz^=murJ0?#X#|<{s-||T1vL7*i03? zYP6g*Pbg+bHAwB9duFFUYo>ggJ1U>*flt) zMTZuH12Wc6OG$|@i%5?j=%1nSiFNHUWW~y8KKFxu5B|BIm0jTjCX(I(o1xFR?!W*d z1|7KPp+o-T+Uo|D4$dm@9ivE?uJ1J{$!2n!{U=ynui$D9VA+2QZ zaD@Wp>omp8(!yhA?}c-#5|RsYDkFyV8Fcb2mL0y1vrx3gE6O* ztsNxNPDjrj79Xy+4jdYwwrIU$y&@suqBvE&pS+ZPDdhw0iqpvF3?M4lJvwLJY-D3c z7iOp9&%C_ZSm!k#{9Kt4ZL6|(nSOAFjYg&3yQROL;Z=dbD(}GW%k=bxO|)EjNSgVu;XX`Q#^`LF9N=N+`ZttU8oCV!D@sq((c{LA z8C?9%9+o+|JbT~UV@E0S#j}MI?9J^adh4W~@zCdv`CZ)|PF}G(uv?u))39kT!}q z^KKS&X{!!Gb4*-XDO)h_vPEM-JLaXtS#+qPC+t;7s@!*I-9zoPcDh%>Gr2?P(+}I{ zE6ihKrbkbI`mO@uXq0S0+diZGl#e+nH*Qo8))Ezb`p3iClh66EGr_$>3$niGJ2-M^ zfq0KP6%1AUGu`8>uf%k}`C7|!mpTf+b$W9fY8miS(C;{5tOLW}4h)lx2hKwn4{%7T z)G&2J!#cx>^s1&gV{y#iT*E?$3zbKD1i6UMroWom;EWYJvJ9m zPLw;9gt6Dq0|z3G0NN1Nx2$!Y9HDn9+*P$BNC*(@B!2~W5JEr4&@dQ)l0D^0;hT4e z8PPQ$d*=Wro2i}04d@aP9kEBeG%9y#|E$uXFl7rNNO?u>dx>oNgm@UwG%GnEAUTlENDjnFc_nyQh;Bqs&B&pCkIkGEm^pIhia8523&trw`&`_9 zX03SdY}xcnh*a>U&YzTC$dLMRb;h}%2Uh0b(gRQ)9~@;NtFEm%wbC~3Zp zRhR3}vi(mn$;RJ5fBsC-ppGQ}@ylw-6K+a-=r|`#Wy^jP_^|oB%zvt?np;26POrH| zm92aGmBovLeOt#RW)}UY+Da6w--_*AaEp!-Hwu>GNeg94!oWDLs|-(6_QF!tLa86% zxB1ALG}~Y66?-%qG=J^8j1dWF7R%JHGm4=H@D-A)<6j6_jYyfJD^)kY9B|R zyx9e_ddBZsS3PXx__Wj!!+I*>Q|EO_bcq@?$oOyRl+0r3`F=0 z&@)i<*=jBNxo{@7eLHbjNVbd0%`W_8XUA@Px^kLk!v=PSt%QEaXsf}@mIf9&8}vw$ zwdOq4(#*oGcuL21=4;lhEX=AJ7SVU0d+?G);(b*xJdb+GWTRw~SR-_j$3D=i{2wmEAlnXpHlwEVyteVq6m` z_uX6IhTHUD2lCOkCaX13=`l}o@%p>B2WkRiQa=O+M&bkq77cx(=GbZ@Ane?Y4vn~Z zf6Slz&usmIF3V%PDsA6AAind?LAvJenPn3w58P_3BOIu=oe+-6Ch7F8_*L%LU+1!Y z;@4xLE|{0III%MwOb11Y6YDM!cOM3iLMmu(1{zvRdQEE+79I%o#c3DdM}jj=>e#iR zZk~9h5@^*F6>Vu(WFPZ*tYRkncb2%44w#UWGg*9#rZT46!^`=PeM`G^>(mdQCc@pE z&HC%#&pUA^FB7kzHFCVg60fWfU1!QKj*~vGDbT7~X4=i-m<>|XNbA$MY1A>A z2qWFli0PVyLGpa#|<>P)V*@y8=BdMJP_tX(JcQH2PN=a<~tioA| zQq##ON>3d*tf$vV|l3_5n(s8v3EF1A{2BgQv{&9r=0n7!f_ zrq(L}ZffrD;w4o+i}cI>J{;kawvFt!XZiow)S!F!Iq20MCWfB)aTDl` zd{F%ZUx+heY`OmtMifk3L=Z?5z2S%ie{sF<4iEZ#(qv*Y4OI$xYjH|tNkhE8+lP?d+4NfW0_>8+LQ@If)P zKfqy56nz_?|K$U&x>?^Al$Xn-6Y(;JkEp#^qC5@UZ@%Y7-mCZ*b$KJ<;CXq9SQ%YA zB^*Liy_eMWGppMpQaqSuO0&ki7}7izyCSt$#|EvH8Yg{usotn-r!2s93b?*?>d)3s z2G_$hm-tiHBJE5-vSY@!c)20K+6JgUR0psgo|WV!Y1rZ#06p2Dt=X7@ZqUBOdv(xx zo2~#OuBc^M#`vwVB%7l6!BmDnH$~7;aKq~nFvC}<(-euv@U#l`8j%m@yz6*NM^{wT zbM)~h2pH;TBYy0V*IcsW>v#$KSjX&)JZ#M~)^hIgQe#a5}0d6`S zW_A(8RTrP|>r)<|ke|Q)i!W+p6qe~j#06~qVy4trFV_EF8>t}A!9GxPeJHh>CbXel z{p7eboy|ULN*8`)VQp#Pp+eP+&EkmtOm`s9&RL>g@y=enMm0H;><73|({F1)_7 z#j!7#6|cu3`qIE6bp z@#qM9C+a0=Y(l)Lqp)b)uisQ=4aoOQoIua5Ef~o1#NbsG{`A9ynbb=wCd4WJIi~L< zP8zW%xW}qfw2(b0c#G=RA`0uvhl_>c{OZmu_wu5e${}2LNpS>HJK^4K6TR0csDK#i z+6b$xjV~~19sQb!G%$s4F3s!K>BeVb7Tk?(f(F(DuWJr*O#!c`-AanxY|!VpK7+uc zK^rKp#nM3d7d3@PF!D&2HP>e)tuZPZZ>nr*a4o8aB6hkdT$0@)m`i;L?-T0y1syKO zEwBwnMp@UzFPQc#Cb10laXMVOP`5nZy#wXG$yT_*WS5o(jrsEYwadd1sk3U)%m>gsAO^EZ z+#MuMBF-1gcT<-QBh3eBqXUxS>1OetxFK89gVR#u3fgR_R9OE<})0(0$BZciV)}Z*+3rMMzef{JYks@GD5Ahi)ci0df zi2o#w#yT%2=5T{%A=*EeB*oVzgCFtD7g5Fa8mH?H#@zPc4)^^wH4b_?b-qn?8)Etk zh%_A-i6>t~r9$SN(YNghulzHX(@P2b(zKrb+hn`EBN?A~Ns4#E2G=>sAUr3o;uMZSoU@l$@k4^~MAorwT zzNS7@1r7_@QEm(m!g4C^m=x3vqJ$Rh?>>-*@6-Ql{@bLIf~EOe{eqTfO}n|9=rAK@e_;W$e}*VSBN!t#)>0)%#AM|TavqncH|*MQ>TbKHyjanU*vH_B@+=x zM9DzRh4NS*KJKrJ@Ofs8<{|a1YA^b!6!DWjOdgR>T$Q7LItZr2v&sbe ztrQvr8JA*qBz+`#)lBq}ad=qI6*++CV4W7C?Vb(gsnvjj9~kx!GKLjW^;f-*-*b^PqOFtWZn2O+ekE^zM2 zpF9ePVJ$A9KS_RbKEGqymt#GYv05y7#=2_w78#iVo@4qW@;z@{NPld=-cPEk8nCn4 zmZQhG@H*gJG4k#?<3hD5o6Hc$WIBiUbfjDk9{U!eY6%M!5?}|56qB=RtTKS5Duuu~ z1&4b{lec!f#YvXH&(R~3*S72UCbd8Q?zWHjZCRS45`uRf@3=c`-Hq{AvL+~x4hxGP z(Q3$8@q+%5_!pKPSkq4_okaB~ONV9$>W_%ax1KnDdi62RM+6}VZKb~CxgND9LW@|x zCOeOj4FZn7HtjD~H4%NpbsjH&pdWw`ljgkLr+A74@ zMmQU^5q(7yC?PY6L@$^rwqp*;f=9^{d3BStd{Lf~qRB^sedq{2VJL1Hb|hFh{QJaC zQR1zs`rm#p>(rU^E!{9n&;bS?Yoq0PVkIGlh0?kcG(xqsRt@WB9qbXv zTbL!~^s^rI!GVH4J#G3A9rWS;v3dDf&P(Knk5Kc5NDs>j3aX%oq}YZ6V}EWtm|AgLAqC*MAU1hr6)huh1fk@Pf6^BGS?(`Yf(XcAlTZzHS?Wbo<8XR-3KN^xOQ|HI2#r%hPxtnf22 zVr-sKuYC0USh4!v>apt!qQ)e>&0{Vxe`_Oo;EXZd+&OM2Q%$u*P%*x9cIqWiGF1xSZg~0Ax;+N^Y=ZnqENR8tU*RIfyE=nPnXd_Y?jl9J; ztZ~bJepz>zviIck%iDm{k2gQR$P{~d5bBC96SE&~7-dsebj;|_;j4P2ID+-C(rjCM ziWpO4zgagYQ9GSrpp+ygUY$m6#Hh^x}wEm757= zPiOs?_*i+K%-ra^$6C9_@>}QkIbtfVX7#?GhJJh#_YcaB@fq78)dl?d4a;s^7r{+7fs4I{YGXwka%p&d0kNqsLcY~!gAqMA8>hp0 z@-+ui)Cga3FeiABe_(%|a(l;)VsVz^R!+BM*fFoyuR^?b$-S802<7yG;VgeCiW`D$#t z_>LLfN822p9q`3kaYM+L>^st=pNAc3%9c|!Fx|NBc!;{0F7;QOqPqUdt?r5?d2Hy` z*EhQ*{Z_L!nO~^fY`Y$ga_V$E!Z!L~JU?Un^uGQo>1o)HcsNT!9C!>xh@JG?vu8pA zjy`+$ikJ891?@_{yCN+xrnQl@CQ(Xh-AsO|$+dV05a@FLGY&uE6#Ot7`~WKdFOc*O>(Y5>K>@!kDQOZgL@hI~4mgs8E>&KW^i)dcN z=os@WdH$`bTk8S*@{0_D8jcwFUILs4L@iNIWgOtM!5;5^tL2aURxa&!q>+jyl?D6} z436OC|LXW-ge9jIB)D5^^Nf@c)bW-YLJX1QqG1W|51mlzi@d0x$T4Mx05O$(ig%E2 zCu6BTm5TBS%7B=@Bg)yNhbn;6FXQ3#s{+8D7rhe<`QTeZV|tw=O6A{PfO8+m1DV{) zy?d)Rm7SaaM{&~ThKQVt{$H2f_!To45kVi?WK!dL!;WM_*49SIh}=hR72P9G}G z`8&zLm-Z)7l&|3V-bXol%H^noDHTI{SAch|8{kv5mhpv%eZaeoru@0MW!QQ!@c#WV zz!?v|*eNZfcpARaUE0Y;OR)|Q4t}iY2*>=Q%z!$FHv1t}(Mp!sP zcHKhRsZ*70?S0&>M2*s-G~sH^Tw!`-M%zv{W;3CCxQ`(U^vOOK<5Dqy<_@a({5d`P z<(q3-MGrV|>Z_ zI+_r4CzE9xt_`K9g1f7Q%06-LD=o^yFCUM!*DqilF4NFKGi7)ZO=$l*8}u1c&>Alh zr^{x(Vu&WUmrT}-flAg~XjV^^Wp$w}n|u$I6qHK?8iJi1ZLB4}dtnC1#@b2hiLlWP z=52UE>GxC9Hf|a+ZTgVS>$_-@M<%&;>EfE)FCawelD*L*c(sG`Qbb9VBAOV!beQ}hIP_z*wXa6F%jEQ830^_f-z;xQbu@OCL1YjX^n}@lBc??65k1~EuVt%*3iCvZ?P7GL(rW$$F=5mKaYYE79m&?v z*GyzbT3?SX1vDIWzv zdQrgx<-?p7K@;O_aSO#v8{(o6Bc)cgK>U(jG{t%VK0m9AX7u;0)KG7Gm6phm7&IZ{ICw$n*`_VVzgb{8ZJ^EhY&v+;wo<7%zy=kTKUv#M?hr1Pxi9 zL@f@|ULUGw+1-39zJ9$lC@69gVy=cy@NBC@eRMIL7t+B8L|aii2m=1=1g>KFKSU8? zFRVesh7EJD@G!3mcXW>4)puOC(;r6}s@N(0z0Op1HG|H}(4YA}^M51#Y@2CkYOEB? zxg7U_eH(yswZ)BbtpkcCwE^A&0o}pc30AK=UBBj?a~n`1FNdl)O>%C3C%+Ra>o$}g z{DN+J%nP!j`c=hv8a%0EP@FDvw0O&sO$6(Jqc7S!$KeILQC?0_&%FT3H+zzsJ4ePR zaMj*Vb^_JlOizanJ$1uol#S8MoA7fN*TmcbPJV;39a}p<_0h_Ihh%=qxwkrKsI78d zOTL3nS;wIGknB;fRw-CHlW+@Y-&NonBAqcO&cll#Md*ikH^i!H7|e z`!`YRq&97<92`?do|vJanSzf#EtUFH-y6S(kA{m}`C-pk@OuzoNqg{l!gLCWR`AM% zd^!kL-~bQqViBvY%x#)Esaj9c>94T!JA^hC&X#r-Ao91$N=HXWpWZ<|g9fx5PR}2n zS)|`!nd33iFE!9LM1M{3vrIGUlW`r3KF6*>&vEyQsw&&i)P?1xN|$Zl@g5^>WM}(k zvzy8JVllzt1Nx*D(FO6XkD}6aTqYb0PlZ6x=f>$n zn~}P4v~Oq^b%Sx0O5I)P*S_TY1u6bkm7@Y?_f0AFj0jZvd9~`SFf>zI`F0zZ6JIk{ zs6e-_tU34D`sQ=ZV`7Abf*A@#vCnUN8j14obpi;BK^K5^0@Sa$nTzkh{FdI>h04Ko z=)Ci32fya!XFNT7MM}?O9qMu@x%!0#qch1$4MCF%!WFG-w$}r3cu)NGmff@o67Jsg zp0I^w*VYBU2@$!A_czLg(yc`!skVb5t4Up1< z1wGqrwTd+&zau{R%IO;;uT1h9sciXZ+KRVv{>j@W7 zjMv4-Y!SIGQ+$%G-o2m2F2CPrVOzyb z+jhQ1)A@PZ+wvZmd@bi3`mMCitag=I-SRTQWL25ej!e_mEi<_}?&i&LCd*3*6^}!( z_#Qy8bvt0G@kzc?1GkdAErnj2jdtA_?>q7@d<|CEJ; z%dkZRFKI6iX$FZ)`xQhw^j3 z%YWhlGm{)0LIXa4mX~uvPVsVna8mvgPmH9XPU6M$Mn49u6IhMhY`~tpO?fixV7EQb zo58qm>A$!%o}A(iDB#uKHR6R-ycn-w^iMqxw;=hg{u^@c+>-I5JX&F%zE-BGsGn>d5u|tZ(NmNA;|KN9@HRGZP;Vr0Qi}9=QR$$k!tt z1G*PEeAq1+Z@te4SB<yr> zaL>AfYA#8{F~c6fk$pn2iqYNK$hA4YQoJe=^7N5h3h>YHCDO`%BB>k=JViz)Xq~?( zOUm8IXC#$_N&Du?J|Bz%U+VQS7V3GvpSDr~U+(|W9|sSa;aZ&!h+B-37syDuo3 zP4)+gZ}RjeJ|UEu%c6-_NT$rhH}nB=*Lrh|{vokImVtU75$3v$aGLZIH30gIuV|+U zhNk>QVm?O)y5Xxa`i!`R+t6ubBbS)XYT!Cb<&1pBeI)*+zbJtO%uwhA*$)&19RJA^ zWURdZ=nv}3N%+q`A^i`=vhw~)_VZ|r`l2aMk4#F_{vN4gc%IKkOq1})u}QUlANb_B z?(=;#Yk=mn7kO#e>Aiaq5czX80_u3Xt@qV%ebYe0%WSOo*+?q3q2ESQauS@_ zI^PZKShttjaWD4aNX_HLejM3iVkW*E_^w~(&5>*9xjr5G8o2io$BsCh*B9g8KEj51 z+-^rdCUXj_0&R8!f_r7H`T6t_ctZ`g%3b6aWesW>qrXtMUql~zO}Q%#@A#ezpI~Gr z|Jfi0OTMP?A?F#d8OBbP#%lqq2mUc$E3id>f8({1MA2W3*D8E_EXR0lOWLy2z)KaN zl8-Qq*L+{kFyl3YN8lCXHDc`W)g3v#f`m|w@mfjB>3HL{ibS(^#%o&=$rj-IIEADL zU)w1rxg?w9z}KN6`M55@zg$v)XJm9?(WK(s?3_|fer`!gZUG*pAWtUVYDgNs{ZoLn z8hkY<6JG%;#_vSj#Q|;sIL%Y>ulj)JDMgtDnzW395>1cHQN@`PHF1RnV=@a$GVv}I zNwUcVFfIciNNQ&GguDz~1moj5f%q4MZHD?`^O6DhAW^3}^tH%MQ9p~=uQBvs|G>bY zPW;nfm16Gzw6;(jW@IFZ5 zi9a@f;F~YygJa_Wlc&kTn>3D%d~NKQuxYjNG++_`hWN|3f}&8dqnNa;2%O zK_)j)!@FQZ6Mr-e5Amfg%Fr(UfBXe5D&TutbMeiNV_0AQ3+#XX^{Nf{F4k76Ad9FH z-@$r~{6+pIOQ{Oq>H3J=CVyhJ_ipHFOTD>kEAC>N39Il}-M@cd@RKtK>`Qj9&ETL++5T$hY`57yo*f1+}EjXmf-Iv_PP}4Zh%Ihxi@`=?h*hX)EeXThlh! z8PWsfsV(w$;b!TtSp=?p%JtrK8w+bM$yjrl1U7WrCn%O8i#Ltb)yNi zJH9y3lO|#Z?_}DG_NFPc5ABPuex=cL+K=|916W+DdO|^NU|^R(<2l~EunaA8bYXF( z{G@BBbPnw*rwHvDWV{bHo^{4^i1A#TKFoL@ZahaA&mE2DF2-|L<2lZFjyImW$>%sD zzBnVkI3v7xBR%oP_wmN}@kV;$jr7DD>4`Ve6JML(NKd?xo_HfY@kV;$jr7DD>4`Ve z6Q3Z{)y;^%n-PCEBmQni{N0TByBYC!Gve=N#NW+`znc+%w=QPcnZ=nUIXR;&aZ!?! zF)24cXB0;k9N49cqT7VxLVlCbHBiEcvxG6BYp_H)&Ry+Fa&imCWMl)1bX8cIGs@QF z8D8>7mKk}OSw$J88Nk(yUysko&nPW1-pKipYE))v?RE3)-26;z7|bE(jA}jxnd;tI z;{ z;p%(*qvQu@7=iqR7Eh&pWqAL<^I2d<#Fx+<*e2MmQo#WLAAdvhGm6LY9oOYMyyI^v zo=~A&C?E=90cKQMldqwteu6gpi##SGzBOn8{p1K; zH&R5)=u|ozpBGt1SJAa}Gu=+#qzC9>dK|lno}-uOHF^tQ3jBrsP9M^z_+FrjHDk7{ zC39gO_;z3*3u95NE9=2}vvf9?jbvFYj}>DQdpeuT7O~~5f~{w-vz_cMc96Z#PT*^s z=h+o@gWYC#*?sm0d&Fu4CYT9U0`@u+G=i7lD+CJ>LbMQ%uMzeU`U^t|rEf{)9k0m7 zH8(dnSHJ)8zS|((~mKoYwWvsSM|6V>tAxl)hYgeziV5`Zf-KhXkh$Gk#A1PeLiT!pBI@ z@71TL1Euux^Dj-F^YH*RyeFj}Z}MEGM}kjH%0<7B;Ea>#`Jz6(!JHNXuk;+VFZKL{ zHwDkT`sapZ zDSd>LzQ6?U8&Y}+4%vY(UK`;sOta!zF7GDhRrg$OI}$yn^1wo*^ip|QAVupF{+4j@ zNp&M1=+||48J_(lp+ZBD+BA_`vz4?eDFJzsairql^~7ax434olig1)6_f#CSalHWf zm*Kn$nqV!SZN~L>oC$1~|BGLQ#2}aaD?>2yT!QxOTj-iL&^C>A4bV$}QW5_T0uBlB literal 0 HcmV?d00001 diff --git a/data/resources/scroll_gradient.png b/data/resources/scroll_gradient.png index 30cefd57142c5ad6505ca75a64ad737ec14214a2..f7c3bfc8d5e2880654f9ba45bbfba4766b6c33bb 100644 GIT binary patch delta 81297 zcmV(_K-9m7rUJN&1tE!0PDc$28VUda01Zh+9?5I_JFo z-2F5CpZj;Js`}6O&(`1VpMQV%bzRqg>-GBi%>H}uc^6$v{~f*8`|tF3zyH2ouh-kX zx9fb|AAMi@xySSBf7h==KD*4do%_SubGxeQdc9t6-*Z2|@8|jWEP002zrU}6{-NeN zOFvWIQNi>7`TP4C@AYtB_x&#PdF!>`-zC?K@5-#ra_jY8hxiiVpYQvK*R9uo+O93F zFZ&GpGe76l*VmW*IbC1+xo%HQ_t5vN?B%!Ly|1aiXIgLicl|T_wY^@i$Ni`GOz%MM z{kZ3SuLrjT%;y|>p8c97&KaxzhUFxyXeo< z#E0wkdY%5xbvvdt@Es4`XP>@*e){w3*W~tYe;z|@d%OSs4EnQizuUsO-E;Rl)-`tD zFTHEsi*6m5eQ^4^=&|(s?_4Z9^jz-y(!JK!{^P#eGd+6t>)z7ull^)izWtBab^Sl* zob!L3bN<(=`meBYih}Na2!!BKDX4z`{o|m0y>WTC=DzUAd3#u_I&lZ97zJ~ zwQ0ia-c?E_T+$!j_q4{`yQp-4m;?Xk=jo6g{wWBSHqoGKyMMk1QTM*-yLA0*5;<5O zZoj@=V-J=l`Ftc$ZVjb>Yx;fHW z=ltKl&pH3?x~~6v&iSt)3TZ-Ss7TQS+Mu>?-=WEk`yNGDOp+cEBNsR+ zxuKYH&bj{l`7_vs-_P9OOp9AcNw*%G0J(uskU3*6xDPg$ZTYo3+TKn36F>(C_B=$ITnh>Y^K<~eE zKYRTihhQn1`292Vj*crdIs!@W)FD-haG5ja0BZMkduESf0;EZviz(;*km}d<-+sFT z!9mGxA*Mj(D*kj(rB;u8=lbv5rc~(K9SoXWxFGFXIo}H|9k!(l)CJ1EuzRv%V0T2H z!U0nu*p_a8R)^rY_eBTT{XFOZzJFKOm`ik1LIRtkrnZqLXCa|42xPXE>Vi5vze~M@y~kFZV%w#y<#bq=wo?p3eW+!B^lyl>@u3JMy8n(6;qT{lruL-7 z-MSMpcoruht|t_SZ^>4RnFrz?o^Ktwks_vgLIdd1<9yS1BeC;PdE#Y%mo#-0%3WW3#t+U?TYz;RtPU}9?Y90tUFAI`pt_Ez zCD-{|nvBZkEQgAjs<~IGmXGcwmm-`NEl|uFU_}=?-9NbQAlpa_%+@R@Mq&-dO z32{sGut_a5Np`CL&!G()Wa>VIbdNcnjXsKh*Xvaj_ssv-*Vk7mI%u9vDYBi~y$;z+ zbT?UVk2SeLqaAu|VsC{+wCJ26^poOki%~^ z#7)uQXOgA2R+YK_3J6Y3$duVU1(|hBI;bTQNQ&hk@9$0YIEWoL%6x8x^-zKYA;Fq> zTCiTqY&!c6sO3cD@Wff7pLh2{JdM5)6Ouyc5VaBX+3PzwI|a9>LwlDIp635o{F zp02x92GoIa@A^g6smrMPmvyMg9rlWVIAqBs1ECr$hbC#(o(>qTT0*5)31Yr`{@d1E zfFTPK!o+$-&u{_n4^ueawxtz+67RJ}XS zoBr><21OzQZ_c7mfByWTVxoUO7Ia#zI~0+s*ljx>kl+nVzO<-=Hc!Fcd$hY9GS?Ax zKvpXti8Y}0Z|6$m#{9$vJvbeY(49?+s@%ya?7afi3DLC97oFO~a;Rf}eCqeBXQ7!` zeT)5aepN`KYd|m~!b>QeLzx|7FZWo}HMn@1P~6u9c@ep5Lq0SCuIQoyq3(!|5T znOZ^Lzej{u89+AZnF~{dBJqgeK2X8!a>Lex~3LGr9^|;40K=p`;_FZ zuTraa4LU%`ELvBs0(wk;6>4zT;MU*&{XTD$!(E3#EXyG`?)%eWHcaJ|JG@-71O-hx z4C@;)yOW%_?ovUAq1qp`SRO6QP@E4*J=|9ZeihNe0S)Jul^qDapMjNZNWN znnp+%N(ji<(QrdV+KQzjVoKoC-b;y?%MAu3zg)NHe&+oi2HJrwuBYeUKj*j0@ZCn% z_5oyXX!Wr?;6*;ZdL|^!7}p6Kq3(Ki0%KN45XLW0uxcPZ)wYsIFuU2C2LGHTllV;3T7_n92m0B~@ zA}|vmKi8s=xIrU3>DMN7x^@x?ImLm{2Dk0l#5tm$(`1eQm!54$yBsk+jsDAh_V%FV zgt^1_`+zAzfDPwtg9?qLe0Qx537#g22E-!L8eB|&>G39!$3voD;UK1|)C#e_Xb*?P zyr2b?(6L7$)B=$OfD^hP#EYR~tsRmT2znn(R z)SgOJ1we1(#Z%C9{p1DwUc?S32;PmzF4|R(KX;j}(}yw783hdqt?4jy(zT&P)E(dn zF$z6@`5I6T;^MraH=;*U1B_gWgF(Ub7WUKD6s(tW2$bPH#e-z}%&@24+9n~`y}b{U zB$nF~eJH@8O>UgD2b7^rq3x&AMC0aB$y8cNBB7swiAahgp%}n+(v?-&<3vrnc9+E1 zmY*hIX&^;8j3MEybfAzzzH(b&n(A$h1rfY|8t4*hJ|^jhC7wd&j0o7DBFWiwSk>nc@7X;UQiXH%Vj z*FfYZ!Aje|R>E)~(bs@9R)Y4wlP}vkA!LXUnc~t~4}jVPzVB4Q zpwIK*ekrk7hgLdgh0yfW=IzPZkOeFEDXbY!Gm&)TyF&o=~Z`={8*&3wPgRcrcdm=Oz??9Os4F zYr%>lDorQ!OYXT~onRZ4xJMeC(!@dXWh1UsYRS3v(bs05LLpJai7@QASB~4_ctyIl zG~w5uU2<$HY3u}%!L`)|wX?trD1Jw81v>R~Cynn8ijFiV>kNY~5I@5fAl;I}5s>Ax z>U$lWgm||#c~U{@ct?;39hgdgviuC;jobqQ#8oP1UC{RLq4?QF8;vjI2?&jqF>qX+ z{yTaNgMXgorqsXQO%#s~kd@DX7CPIbhdszG?wAzUUEt7mg?_ z-~Dr_8NHx~c8|30&mevAcm}s;mqDD4D@1}ib<)})^X3O(clZwL=0M4Udk^|Ono!fE zCMA0lg{H4fH3bg5Pu+VbafB$2{Gf)~3RoZVdJjJh?{W=mt+^gDea z{rdGQYC3csiw?cszXxN#mB#y(<3#N(B6;ZnuW+EgBT9ah#Ao;<56IcHmt0VLaGxBa zLepg=N-4xs65X?{83_UrrEFXki^{YS=4uu2L_U0QfxvP_leoG9QJo;_ejnFDGbh8(|Y zpW|dBTua?070Q7!`^IW*^;i~&+vqPz#dQBnl^P(PNRVwQ=hcPgvvEinp3Aj1u)bB)p{AzI6|o^da6!HH zG2Jq${DxLVY@4`h>rUKMh>5CcrxB#Ra|bh~9&8|Tl?%pBet)WrRp~e_93qOl1P59H zNkTp*$!=4qx@IVgKa*O2LIweQpeIxj8`SGcfzhn1GsPQ6n$?zDlI&MB$;Cm#T_-i`AMQ%SP*VkeyMFX!P8X|n&_EXUzoj7wu zpmYju9-GJkgvBWnCarBtv*qW<6BA{GI8PrL0V_`_B}8O@2(1Wf5^Z(KrX)ev-~3Zm*KdGYe*~v= zBu@!?lLf_x)!#Hlut8#wS3>+H2@DStO~;2xzE;M=#wK4TLoFgNZpL9JO(8cPs;H3b z9V_xPX*fB~kE>!G^5@1XO|_ER5#=g>g`CsWMCWCNfLw5W_C6*uF9|{>9+;aN0gIV` zk+7_pDk-KrPSD2oCGizDfy!|PsJL-pnlSJlzP?<2jb_o5re^3Yv#`~!iPvp(zcvhIe z5yIsJ6dl^sQQ3}y==<$RnNSW6>|^AA#w1}%)5&=}M<@7btVfP^gznhdlS4wBx-^Qq z-EWbq{_LDc>^bLOFR-o4a@yn@5kNZp-GML(1a=FE&9sfvm@(s#k=sBAgBwQ%*uCIB zNhq=cZ=xnaMQVpoYbFKq&PDp>j@3}b#=bKpttvY|wT~RC<2LLS{FPd;jSlI5jypq~ z14>9hw5$?uMk}=2lEEQ~fByWr=ox~K6k0n>2YX5$hQSKrh6lD)~2e3IBPBVSvB}H6iA^E9k8c7e5 z&E%pxT&C$P;Dk&)d_4S9kwhftsRfnVxEq}i7i-cKm}{w|c?eMpIQQ~>$^vLHvkT_if zsnzd>WPSs=s)l~O<=pfQ=qgh^OsC-3v*;A~9Ar6V%O-%660|jLyAOF9c_*O4C3DoO zqlzdccY$X_habI@3g(%q(i|P>A%I1*Pf8~BcPAYqH=X9VKyFNbJ#A_?QKQ2EQx*;BHhoYB*l$yCfRbAfF(oI$*v&rd-U4G+b33}<{D|F z`)7>WR01xci^&fKKGzoLeqlP&PSz)`Z9xjy4*3$8G4;5ZQhN!JL zwVY_*N&I*l@28?71#d|39@ZH2Pj3&4&R2bqg#NTPJIwE5Ahk`Y-R!uJ%1MM`qTD)i z77^}#i2tU4ZDQ5ZN^LgcFuMD6Ll0A&O>6FA*93GYp!RMO^bLnO)tHu7j=6mG9Pbv{#2D z@@>D|h{cA4t!w#i?>2LRD0u6;Kq!E~C)gE2M$QX4_Kk zf%S?X3=W+hN0GrLBt;fg*l?pZ{DpxlL1Vvv1-6v2Bh?P6Td)-j@tw-C12g7R0ScogA@Y2zrD8)_H;CMHJh=hC{ToPAcxj~td}N# zz)n;&5nls!qTo>aIRogvAn{Fu0|f;H`V0m#Jed%aMUV2-K8!@VT2r#-_-@A2?t!S$;ibrQD8yd2uTF4j;LwcXUqtf&J^8!^C+<&DOL=WV|opSfq54&Fd zQM)mTA11~=LEq^es7kltSX8JIO5t!yd{X=7`}-@Y6L$mRt&yTjz8tbi6B1$q8QW_{ znLM`NCbY-3mZn4@S>uH1uJ}2N%H1X=Q!@9yMaw2O?sxBGo5+P z8mmFolfN4U)An5FMozLMVQ(RNmb@1ym-aN>oQ4uK{y71`gt$331DAY)#uKiGVUT7V zj&YuO#1C^mgv8rR2Hkmpw^pk2&g+oS;c%9}-S2Nh6j}#7qeBs4X!lZFRbV_;9u+>A zs#zFp5LkLU*j+L+d7`C?1JIy<0{E^1;$VX^jY9^Al2EcZJ(hmQ!M8-NCE>t+pCph; zz2zjR=+>a>LG-D$U_e;TkkqK+J~(E5jgj6{nz|yh;f=_etIRZ*XfiyBo4J5XYTc9I zA|1rU%P{_8C!wy6NW1}z`t5G`J231K3D5?0KV+XGsP02|MtOy*QIvFlcc^V2gbm+X zO~5-kVLbXc!|kqLL&l|jFHP_D8xgY#$9KDqT1lx@=L}q7fW;EIojK~o%F?7~RFl|e z+P9#;=Hl_uy{zvk?PsT`?TQ(Sr*0ih6M3CPPBJ9-Kflg7|HpM*|M|ME|Bqh&4RLKB z;B<&;R_#VC9qL0Zu>_HSD}3x)B~GA^AW|9!pZroxaC*pu!$NwjY&GyCbSZh|NG44h zBSom5`nU8zMdEmObqEPtg+no|y-L;z{T`fm8KIu!qmvFyZQYpnPlR`btB+O!B4#^1#|Sq#WFn4fDPa6sQN1)&uCr+cn5DJK(Q&c$?Yl zJ)nPeTx%WGo#_d_OsRkuW_oZ#J{O@qmaXt+&3#m8S6IVQnyT1HE?hxyGxhs#RK>ODTK~QRQrFRyqN+!? z0-*;c>5OeLqk4RO^LGlSg(7-r3?Qvg-^R&3krC;0l5Wp`MvRa~^@-=S+4G^;Dt$+8 z9T^m{wCHp9cehXz>MQ78rR#1yr;C#G)SXgp3CT=M{$@$=&Lq94R(~1(UlN8@Z%3!j zO-}a7&oZq`n%YakoqC@gl}*!3n`yDheutdn+a#`=gvHoP#g~dqPTbjh0++f{U5C%a znq+|eZ}&oftH#aPT3Xo3o>tXz*8ly_^h`MYB~K>p>DCF;Y5 z@o^&H)x_5#1<#FVixYY5yqB;6%ZcUP&(NtB({op3hftrPg{T5$A6iAm-Kw5Sde1F^mB=SJh{~RdQ*bFr4sa@ORYOa#oZw~ zBveHSh1<_$=ImO>10wep+cZX~rH&z>S4f24_(|roDQ*`{E_FqCgVe>Ax03RKBlK{z zm+v7!AUd&|bySW6)W25}CUl@D8ba!@=sW9#b7;d_o}HQ}CsOx>bVHF-o7j*h-coW( zvFrDLB2ZOuTCOnRQ7Mp9wL%9(AUqX}?9#;AWBSOMNYXtf(IzMLKD9qCGpf7g>QEv& zDHA(0QWZE$-e!g;QxtfUoBGAZos<3&db|yY40?>IKbhMsP9#(}oYN^GqCOb|50zZG ziY9IPR^inoZ9#&Q(6&Xihl1+|{Jaae4=bd9l%Dyt-a6#22@fT(*Sn;|cFevP1t&d^ zjasw{DZ-&q&c93(l1qdijW*ArSnU2ze@~I&;Ez_?Vsrcu?E)s>x=97qu$ugLkfIsRAU8XhS0PblZfJIU;~5y?m3P71;_YNsGH(& z+3)0lJ^iB@_Qb22#JkdA*3mH)llnxVKm(H6&xLZ9^DHd z#aH5xrSCDtQ90zDQLI3vVinuc)-pPMX_0udgI& zmrG4ZmA25_PbrNY$OnI`R~K(O?ttL^Wkq;E1C9Z2Dr1i3cjoq)I) zmgMstqR{^Qbc+wy77+LAx5S2c7Ib)~n4t&(h_a>$IkZX8gN;P&`sX{h^*ixUKRvy! z`&khZ_Ikali%u%y>kuva^CZd$h;l*>ZK0ihms+!d=i<(W1N04?7E6AAY=(2`P`o$( z)*WM$VQb*G{vc~~27v1MaZ{_8*msaHrHikxA&6CaVQFE2mO+I%erz4N%3TpDheSA3 z30&2$Wq=wNb%!#iX&oBxO9`h!@}20rN%qwKB8~X>mJbAoa*pLR!PHR$Askz7gz-sw z`^aISXOD2EQwR``Kh!F>npaA*;@;GN_7UrQGc)CVmX@M6RcuL^&;xNxX9- zM^Af%_-R`3Oo;1!AIE;C3m-G>xP5Aj6Omg(()Z-RO))U8ou)3lXpsBr6Ir*ix* zvGu9M8=|B+OxZp-l43nnx<<71Y+|y#4w^cpmh3I0YZA%|qw&;#dWkW7@*BKcbIG3) zI7)7h6eZjVT{4}WN-^CeOO@K)kZe9II+6#a#-nLcR@cufi4jg!A7xzR7EPaZw__-i zB*s4^Gmla4eqC_b*kA`jRYVjmxYuaQK-DQsU)i3#OD17-xq`th!i4mk6R9vc%bU$m zuI1Q+4<&h_#aI`Akk==zq81#c-epYzNE16sL>hS>$)-*vw;k?SJx$_$?NC>bs7LZY zO-?Nku(4t!4py%~Cla=cAALySdY=p%TZ7~NVq2z2Td=nSd6_l=8a)&>8jJb1v1@;GWHQicIty?|krUaYl z9VU?~R|L5C<6@K(>ZRmyDw3#BF#NmO62Jh`eoEU&_DHRt%{s)8cRy`DA|SI1d09zkSC&{o<~pC$eTuQI&R0 zM0)zJz=e5#O8^zRy})w9NesCC;jWD;TKD^q$d%)QQIMv0K)fJXtEDF{@-rDM9J z%1o7NvmALFPv7W#r68W}KU^P<{ZBjwH^E0qkhGL*N)CHcoV>95o(zR%4aD~%VOl~R z`ZWgRuYy{4LCd?`$b6rwazx#&z0Y>C%B&kQjje5ei+Y3HO#Yhg+DSIVp+MWAn&cIj z^wN@-pF6MBw~f3ulY@l*eP26WAzzW_SGqVCY!Xi=LAJ!_nd}W5q~*ls(o47o9SE=t zKw-c{E=#QwtpG_RPbzS%B-9q82STF|TjbM1`YBKm653FI{`{eLl;qh94zCI_@D<2@ z7;yW4_W{&v4`LZnjpO2%=*=j1Mb}?)EqCn-^|~S6fp9^7ei!`DY!Q&4>lUc0x0<96 zSJ%5m#9N{P`Y$Cdqo3bx&g!nUWi5G98xaOR^m`(DZ3=)=IgJntALtu>$Nj8LGOw|; zD0y`rdug)Q$%nZ0vG5tIFx5-u)fKpR7=u!OvYQfq5J8RFa!%`KGa66eLXbQtrxz8H zT06N+vLO@V)X$PmTbSNUnncz_lUh|t)!(4PgwkR6;YHARLWV$;?(utC0Xg(1Bwz)m ziBZSERW5<3cLBRU_KjW3XYxyNm8r{=mx{k+rGR8>hbj=c`C^@%+9bTKr=B)rY0o%+ zX^zk)(*(zn>XgewK?$@j-mVEuMI(<5lHG~Fp^4ARG`F|^s72b%RTH;Jc}_i%N&FA0 z@`i~)YhbAM8pQ9ro_a<#Ab5Bk67(O2r!bNFKyEJ3#sN>GB1AWtMABG)(t`?dVk7-g z0fj>ZIK-MbWI)J0wUynyIVpz4Py#)FL(>1U@5Si}5rRBfH>AW(1s4Oq%o65-Uxy;O zNz9j$^r_8d#^~*!6HQ6?y-Gld^|E6kk3T|7NOIr^5fHo}qiOfXMBaA6W=i4pm zR9k+NMuJN?`o}=qqx3sm5|xstz^S4!ej3lVW8%GXaWVy)1JCuy34xn91(P3t)c_*tlqi);{_7gcbNKQ#T=r;5_3w|Y7C8%Ta$uH6on6>rmF;uC50 zY_5M)(T{m2bs4|4%jm`Eq@1*W9qB&oXuM09!>IUUYN^GbW2QPEUSW&2+DCh8qEJk& zbe$B}X~GM}{lj$lL;gTez%xzq{UAsN@_RF+G*u1pH_8P@XKd)i2dR>lfKfzzn_y3Z z*UIp-I0o)xCq|}2Y@3Az3uc*xg2f7xYwv}9fqU(3$`fn$H=?9eWlttZh z0)fezxDOB%km%e3Y$a#r*0RB%a~ZNNpnngvVL3W&r?n>jK}SyXUI{^%5^QQSx#~Ez z+5=jUkc;#Ve)xC7J9>LB3iBt#u#=#v%_7A>P3VlGN5gZfl8R2y}~DNVr28DWNdi0^)fJ{H^{{g?1C9pZxRb!$c?)Q6jnNwF zetUofrKAmYz*04T@1$22#V}4mlVIRPa1Lt5D4a@#tL|q&DLp1zTh3iNECj{@3gE`rof_H+W^;t8PvZbb5Qa>cO)4#}Q_QOiMaADM`TxMSY@MkvB*c#6o{xJTX04on&L21+4;;8B6br|_ zhkotynFnZp4F@JN4;VeudpeL59rGRzyc@D>IPP2vEz)Dw@`1wYKpURc`~jJk1844m zv+F?YJj5R&aZqZf>h~L@_?&b8(>dqA{3cXm64slLg~Xk3Eu!SHl@btV9;dbmknq^{ zicvd#JPW5=)M3}j7&htUbk$-}y`*9wy_#bcAX*7urjAx&uoUEu;_vaF)f=ANu&EGqqlJB@nKT65U5u#_O zzkgeLq;5h&mm7WIz?tWgpsK2467_-mu4J-9OXDX{6#CgRf- z)E*P;pQd;|Xh%dbt52*2Hr1*gXf9Yzf?L6VQQ5W~+(qY zs?@qn{a-V3Tci}My>^gOw>lCE^OM#S1tZt)1ykP#Z-kJLtBtNt>r%(`!yZGVMAU)% zX!~mIChd;!JYt)58cY}<`?t26@=sihAmKNsRIH?J*G5vVjILWzw6E#;UPhqPAm&AX zVu9c7=StpWML{A(jL z>fTQ)G%6+biT2@=g+xkD;)nXV)P8bQ0N3i?cx*a@V%HAVBKhTHuJtBeduSmvXj?6M zxF?0lDd?sL;93DxaVN(3#H$G+UkNRLD_ESQ;bW`JiG-$FJn0@u@50^FUD<5Nbq*0p z*WahM%;8dmKDeH6``t>Mo<5yL91oft>@i8-mEnd>T#UZPYQuGM-wz2~`u8_NuS?*j zV&M}-@lZ^~HuFZ%G$mxht05HkVX6qILM5)1dCoP7Job0t5IGX6g~Oqg>mhP~6E%=g ziQ{MmPv78xK`=J8oN28P2PvRfHkl&g{Lng#e3;N;PUv=QXHt=`1%#dvfulA81$17! zYfo+lp8yLEVb>{fNB*W5npEN4`Sa?}g1mO<3ojtq4hokfL|3A0`ndU&uq0GO|Bx&! z6qZz8fm5j5kj>m@nCDyYawCaFhk!*i@Y zAq`$$UuWZcCh_ZGi(#gdQu_@jwqW{n>qqvm!T?0G91=x?6GjWI0t$wI{Kqgr`8dcX zRePuJM*2F6iaR9kVvQ}QJ+=~6bQVmV$4IEI0~Jz-0+MJagjj?;rGkRM0Meuqo*c#C z(UK{3MI5>`2_Wiw0?RB*8|gp$+igS#7tsS$8S7r{q$vuRnz0-KiVo?s$WB1r-h(wk zgz9w>b(wAA;Se_^a4JfFc{ViS30#>+!sYBDv})1knLKYuN55SB-&CJY*J%@+2x+AxK0S-XS-OcXlOEZU z>*EX;4~e(J^C;yV4I-!$U&lJcJ3SS0IG4%4u!<<)q^#U+(->kCz_Qg! zx|d`$N7aK03Qi+`X-fZ%h0nxOCqN1nShFjIwhJ$bW^A?dj zy9RZ#%q1qYmhNf}3}9`)9-#X)+13N8RRA^|m#9fZLV&mKk{*8A!b~pE9br@r9cPB= z*4{*JOvTDj;Z^go8ufGZvjlB^w2*Z8BZBu&;Ti0oNhT$(tD^c*@79M*R#5U*(%K?`{4>_l_j zp@nbHs${98anR`oy3WzI<*oxlnzL+1`Co~UlnyO``rj(JP5(5Fth=_5BenH_?#5xA zvEIezd9|>AGKezVPM3$Ktu9bxP6tbx1T(?dZJtU89c9-Osg~5KRmh8iuY;RI`zeWH zR^Ve)c(*kXKy`%Py^BtObOnWLt&tOS^TCQdwVs?^MoWi~890dET2qNLv+)k3HW?*x z8%JpR9c@jK-_|rS;&hjioPha%E3_C2k6I95k%T*c5$tu{!E=AKrk#(Nv5cv^Ff%cM zhCpn>p@mJ7y&&O07t6`yd0Nw<_4`oocf{(@hDJLNNaBg3`w;gVXe%yu*@TJO<2@-% z?RIBx;|d8%oXPI$L!QxFfhqB|UiYSO{xd_LcdhFBsrQx=VX1mBaNtP1bHYe2LDB%& zU!+uj#G^VbpqFzFx>giq+4LDq^|OF%{|$74vONw>z77iFG(b)iKG z3KgcHY9RL&jc-eWgjzlhjSPXZ90wyD+~xQQuH``r<4u%sO-4@WFWKLa5$Ob3PpZNLJ+`X?0K z6%bOJh)$MBgv6%=D_KARno-UISt|# zTN9o5Ecc63NoFxxRHP?(vT>;rt&Mv-X(1^@3e$kmD=b(v*tV8CFwCKksGxJ<1}GN~ zO%0U2nx;0=TgKw`1+GQ4^l&{-ZIVefJ_$4Sgq=))|K^``SW*lUzCmo`Q4H$|6(xx- zp-t0H+Hy+Vl3;yfQB~6lub}i@loV2bQR3RpZvPR2LB5HfsOoPdK~mvO?eR2;N4!L` zvJnAT;%!>=J0W*zBHP8XZuv3^&Q3*`i{I1awRUbkvC7fU{JxiR0}Dio|GDO%r%|bQ z9s=q$J;*fcPgx!XNJ9{QWTXz#o-$6ILNE)=9ni$Jus$nL!HuJ$b?QHkZ#E_#yh9&6b}clAc5f;2s#-|H9<$m=_qytFPmFji%C|{!bp1HQjS|R3Tknx2O_5Ws zf%UB-vOywjVnK$kDbt_ae(7GER*@!rIvy)+MQjV|HTS*wN%pVn3EsKoZ#b?`;L%lT z4|No0$-66k){7Rj<-kmd6HS0o!jgQLh`>3SriLQnt!31~FjuiVexpMpdco2YSMs5A z-djpm9;|9=K@LxvJ8x=#(t)U5ljmRH78SKN^CjcgPM&23~+0%LKKnRUV6WXh-cr9pX_+XM>AdNjmsH*Cp zG57?ZItgil`1N8FI+GFy(L1mtTY|&fLZeZ zcqgu1@+cN`Kc)nE>z$|Z!nLs-fs%BY%oNk10)svW9I3~#Wj7K(C|=*nz^Bi8`UO2E*qipTeK7?7!>Ua%nGrqn=J);pekeT0v3tWMPrs zjk8cm-6EK7d`Ez$EYW3j=|FTnUVgCVB#2W%`NVQRQJ9azqBCa3`NW2J#0uahW6E-S!&^2NRIix*nkZX$+Q9%+Z4-U_A3W6Z_2)DlYt7U_3h6-XN{G9*qFys9>&bz#Hiak!<{JAAd0|%<8tJHr# z@t!n(ndea(RQvw#-!7YXqDs_bU1Y)IxSUos#xyT~X1WG0qa-R-ZI71N203a*d5>%t zvUt>aAj0FMusNVIlz={j$gbf36#}j$0q; z5F?ZsAXjfyJD}-5pBW4;??m8GmER3Roxfa1r@$}KI(FZJi44mA z&Y#CKP%~BYT%Ay$_1xd=3g9zD}Jsi>1lu8uiJ4z-Cl_eSp{?LkN$51`;DbqEsC z-yv~k{~cHOOw*zLb6#{{ZYHx-dYlfaElcWu0uuGbVqwuyJE2Uo@0cLIJb0yJdO6pBdd14Ee_$5%)K^kya^3d)Qw9pXbR)#O3uuFWL5y#lW!;jpo{fXR;sX&D3*OE^kzKi_y(lfKP= zMaamMd>Jm0BAGG1=pIeP?EW3@+FEtGRhw_Y6gWYRHG16)^>QT)H-!PKsy)(*61AI~)T<*E3r6ZZ{BVsu(h6bRbK zhBG1#hT*Q84_jW*uM zh)ZZl0MI1_03B<)sR(s&nl03NygYlqfbdo+SpwgsN(qhz&OY^ErYU|7ooi`89VE8?c3Xb(8@vGXQN?X$@yBcLvS`d!sp ze^=r?(ZOdX1|RQ3(L9sfKYXqT_Nm>t$qM$97>|L zdSIra7kC|&{HrvM>V8Y@DrbQd$oMfnk?OHNV?$tm{Mkm;SZO3~@;Q;l6Tso52_`Nl?wJ6kIW^~y@qGmZr9xGFTBP6-+zPE!`{ zkd1_tT)|0sLc<8=rNk_V?!^G>HU~|h=!U*^Y9=cN649EH*9%l}Nu{}86D41+?|p%t zi}Jdl?OIOYP5EL|lAi*QgKP-uhIjlknmzI3LM!5d(4?ed`%jYccL6qkO}sV!S$(%@ zaPlopbUEt)=S}8BHbo1kl15pdNS%=9Aa#M(F2-9eO~+M0A5y%*12w#-QS--5?3y)G z+t#PDskT2*uQ%|2{3S!3Wq#R00@1K6w5_? zt1#X8Uf5`M?GzWODs>Nk)m6rch(-iur@-q_s7>qU{s3qPAcQytcSQ#VrOHZ<+iH}U zrsopzjamYO^t$6E;P@#$3wJ-4(JylE+sU%)+6+ic(i9pMgcDI64kj{seOwcbdf(bO z4iPd3=SLFoYE6(TDnL^$qOoXoTnjq~Gf_iVLRPtz|gT7Vqi9lUJv(4_u`v8KG=j!WAV|L>HBo9cEW)WVDJ&2)LtVF9I z(=S$I5`<5>wjAG^!1Ru;{pfnf$%F3V}v~) zmRN5sFjZA_?GasnC{*1$_;KQzEQ}=|6@b$mNYxUxqc(h;&Qebt3D+YhbjwYNrKC>9 z4I$BcTT6-HOjRDKXoF`@`o4z=pbI>D(0~bPg(~lnv@7qx*gw=2M9@e)t{-g4#^f>t zZP$w)KmQhriL6jSmhHZKov zwuHc`xT270HJPYEIJQ8W>CG^g5Lu^}HceEzxSEg+haS85Xx2#e=h69h&Wgv`Xt+2> zdtoqZUU6U?N9enKRm2M=hMNdZbF)9U$r8 z_OYXon?qH^#PPUT|EPuo0%2{J%n*!EYX(dzN!b_khA_fhLy$}@G3zHbDfgzTJM9_e zlT72TMy0!mi!yx{B`IVJa2axQ|KB~jFV|GsYIXd7I_33IK^5BcR>66Zq?Hq9b)t^c zw%NRUSicnz;mI(!Tr%of6DCQ1i;HO#T2b31U$HPhCL(gBwV32YoawY{fu%T3?HflV z2E$xbst)!LHF0iIGSLfBJY$D8zKo4egx2B6AJZWzv-y+e{iH2Kd{KA1D0}M-nCjM{@5?#Kb`v z8e3Uzp}{($skRE}TI?^=v=>0S>98+)=cyVZRbTTQY~rJQ3`GILcsp7Z=-w1X_HxjF zYN-vzqmRVpdM77Ot=0#8ZHS^j36c3OOLk4|B1*uOfBc+~qz1b`l3I;7##KHd-)=%^ z)85tf7~*C*0lKc*53xUzhxOgLqQY4Wxx+PCPEd+W)sl=?rT0~ZZZlW!PsfgkVC6{W9qsB3$JT*W6hR#&y9 z2YEwVe<_KAs&<4esT!b-4`YzEg4buzgGh5wcZUj2JOHV* zC_$dYH4}{9bfOCEGb*WD(|UATIP!ZmdGg?1xM@C@sF>##wS06+Y0|(^>xwIADs6iD z-M34|+VOx$4${k{1lPJrKz`ayG`gIG6J0Awf29lHy>&jwsJZjgfPDJpd(7HD`)2fRCHNHjLd zm4q0Lyj?vzq0p(pj^;{jGRMK13~vMfGV+ZnpP(Uz>$?82!UzY$W797ZoM^F|6rO=6 ze>2{c6H# z4(+|ipHFK;k;jQ&+SpHNZx9O>qdqHZ^WTTt0ba(Q zdvdc*E%VL6NQc})N9@hu6bhb;e~dp}>o6rz`dx|&Ia?Gmv~)-bk?N_9NNuevOpykz zP9ls~Uk7fi+O%@l3ii(IG$brmK$j-wNI!1qCPYaWB}4}#`BCH$@DR>{nm`Idb_TMu zU0+F}VA~R$$j>Ui>k>Vu{nUky?|*l(^`$SF9Jt*ANSp_Kd9LT|HZ!r>f9b#oyrJ5( z!&FnqZGP08%) zZ+c*-McCCGGj!si6O^ z;~wgQa9(Z`w=@A5&Vj%bg{W5lN-cnGMwp1CYFMfVJO#|b$@a0?f1CvU2RxssNsv$* zattS)25I>?n3a;K+7q!tNGND z(*%zM$u5~NOD(^|37X6j)tuFlhzDWQnySUAbxc97Cso(G`RIedOjBXkyV~``8Y5NR zn>L}7=ihv8uoT%Kf9FMrlN?lbY*>s$Q+uFN>z$AaLaUM;L_*zY(u_XqTFN&J$t?=( zZ3aLlq?Y!RE5?$Et-GH7d^$4gxb7g43A=lh7j-gc41s zGM$Q{SAwLpnlahis@f!foKH**DPTj8vcxTzNLg_moci?re?<+jzhs-3&Q*3 zXSWHtYZtmRDh>CLq)11|2g39tSxZtAZmp>gs9R4i>2$*}NvS=76;voVricuu-;M97xid5UHpzPZQol=YkSLM1dfYDTo)9c)a?K(o`y4?{At?nTWea;kl?9 z-BeQp{8?MR5nbc`8IFsTP$}glZQBJ7z0se)e*@TZu@&{gT@`KKK{?0yp7iJjPP~nD zT>+gcxW^*Cg`yChn>3mG(a3E|*4%W+P#x8Va2}HH`1j5P(yehZ9IVNtkdm=}O>Rs! zB>^sZrth2D9b|qyX_7c$(e`&V)r7nsd7fvQOlze7GqvLSgb(pdzW?lmc0hf7eVw4h ze}149|8|Yq61*pxKso*ZN_%v#{_B-%CnS%F)o&AKI?YDNpzg{3u7)vgdmV(}>Cav= zNjDU$j{@L+Zgfv%G_LPs!^eX)L=$~fe4P#T!o^DcjHy*05MUbv(>dtS@v6FBNntsO zHKj~zkQv8=z8hMm3^i$sP_>-|1|6!Df4EST_x@2zPMb$OfB*^qnrD>PWol6MSWpvAQ0y0$Se-+kD zw3tcl;As+$_Wt%fYFem*y$F;nIG{pv?xxi16 z5OyUvhXH|__=;{QLm9PJB=%E`|k>=1`dJUcMV_=DsW zxqXoAMqx;@tw}seSKOt2se?P;Yp^!SxFA24vOw=i*Q9WL%ABK>I81KhiV_y>qy*}L zMO|p1#=S?^&P~X9C~Q{<_;1rkd+T$m-bjbrDcI->p0fN;*x!8tfcYQ>=xI!zT%H3j z1Q%U`A6@lz!^M*U&|25}o0|Vk!Chf@El@?#9 zHte4{f31{_hfTEhe`q1pL1DrPWut13pkNg?B+}@V2&XYwcaOAg96zTgKa-dkydxx1 zYU1YJRVP^V)4 zlEF72d^*uZ(`wq1?v^YQhn9TtdJD)+?dtpJ;Dp+Tq$#(A-s<-_9XLw-T(>7lz&Lcu z$<%BnFw>dm5KYY?egiaY6C6T*63j#ii9t5X{ci8!r_swqgi?-6dT^%VC};3ThL!r_ z9X#sT>Wcmhf1+&82({d`Zx@MMz~LGmNs(JOgQiW8TiJf*d3W|XP2ib$fEc@aBe+v2Yd-5)k)J=qXwabt-b*4m{ zD*cXPP@!TJ;*V+L9FmMM>*=KXO-QD*4e2P5OOR+kDIuIR^YpnkWF1kk8*xjW206dZ zWR>I)L`sr+;$>(B&U)mrF6AsebdL7#e0`8j(Zo?D!r6wE9)frzt?8jWL18^x*9`ia zr+F*_e?sje;xi@UnQ1qcIKArD)?wpGkt6_47`m3j#R|JNNmUvD#6xS(rgL;QhtWr9WFj;>JC$T5voS#K zW9MD7D{*{)SXq-t;d^%+J*Ut`enKN@oE!`(e^Ipa0zEPsQFjQD{^8;voYo2QMJE{p zEkcqQsG_;5;y#JYCL_;@f{|L|4&D0Z`K%SAUB}__5(T!6pM1Ger>G?_MKTpcG9QXP z?D9+kheP+!ar}o5lD5-s8J6C<_DB+s+f4~Kve(q4F!YE8!)s$$fSf5_YB>tz@yHU4? z>vpX;6h%!W>_JSp$On@^+ET{JEU zs7>R@L_AH|*_25yNL)3I_ob?Yd~+P+><-D)k2EU5Q32I`k6XkpK_Enph}*Paf3@}2 z0!^9L1^E&c$7gub(9(phdk_u$lQ>eX%FRYN(yjFh z)v*f%*4N4jeJ0+3>F+-#y!ynIT3hsgcQzR+z_=OxC0PME085dw1z%5Y(YN84wyk0d8_(ccbjin``n))9;_;O%htR@FaVjQ=vtPdm^Y}pX<7QI6#h_ zZ;i>wgfkuV+v-sRbb|V{4d)P!B*aLZoNdzV~dEU&DL3-}gza0CQNM;a&f1N&Wr)Ec=94KvPeM1(p}% zxDpZ*tE!F&X-3|bd*_ZHe>!-U;l8H*c-|i<#`Df+aoi_&#+jIQ^o%*@97P{GwIZQF zmk34n?@@l3oAM%*!wKFhzo<{au9pw0I!*tMI`u!@}N}zAmX-a5hYGhPkeQf zE%3@lK9K%-C$W-te@y3MI$N5ALYwwRr9^ds_D|?rL=fr0)scvF`lf1XoPbs4WO_fAOEa2kPC zL_xE1@2Ukx-r*;^1Ic6ZJ9?3Vg+KDem95g_pABne~8Lz-MLBYPk&~9w`&>`8;1`3v> zFr2c$&TG(7!*fn4*|KXg=;Y93))*2y+pkWlmFas@e+$keZEqE-%k1^~WntE|$(3i+ z6{B5}LltZC#F;kb2b*_9@`%J6CYUVuh#akTEop)=8Ne?7DMwmeRM;I&iS1Y5o<*{@ zLm?8ma{E4%@Nd@HBcY+^Vz_Lzsc79k55?d(0p`$))S}g*4AyN;hQ4(0P;%r7Gti7H zdUl4we^8DXuW{KWW0YLF#7K+tN$8c5PFF~pco7Nj_Zc;DV<`5E#~eyaOojJ^>@0Xc zR)5L03OBYg?m12E?O(rs+4!J3X)jvz)8xn|1D;^2NtldCPzypdCQ!ZlnVf-jJapqG zow9y9OaumY69;A51vT|=2S~6?(po_P?-688e}FAF83!cjhPGfPH4J@1`7r=&zce?NPbE+m8Oc85)|jhM1eI0<_$j~wKn@T$a*P4Dnj8_ zIuVm5vr>yte>6-o)`pMhVwkq;4JT=|WJoRRASj55P0~H;|80oZwtbO20vV z+lJ<_TseG``YTo9uKn2w@s7A^K8Fk@f6KKeno;HjT27S?u_V}*VD(80rd@L_l7mWt zi`pso?hslh zz2T=+YL^hFsqM{5E!8Pea>-FoMEd>!b>xC}ZMkzn6PST(MM-LDi`tp^YAcn{e@3^* z^?U9^nZ~|T`_P>^NlPhNDA76RTFNE?D3k10O8zz`=#vePYe^9=iq0+SNNLNRP-(jU zmvbiHAPexbl$R!VyBh>5%OG5*R>m!_e2uys(5UY zqifh?wOQ<;C0A2l-n9wb;!e6vf0IYk{ak$r^b-X8%#LhUVFBpaNPQHK-q3T0=sK_1XyOO@wPWe{e0oNV!aj zvojHv!&&K`^*X82GhyRqAaNrO(rD~*g@PugdOu_ZGYmqJd;ywdpL4F?38`^}=F|^N zzG0N5I^BaM^cUM-ltCx>F=WB3MW?N|i9Ju_#tuHF9xIuvI$^5>!MbbiTrBr|$p@}q z21uJDcL-307??IH!43&ae|>p^mt7^IlJn^^yKTs@mTL+cF1Qc<^qOQBsB(7CV@pg< zYg{=B)Vg+UY|$?2d*WwYS-D0Dwfz2hYvvgW!Rn*)p)F)hKjpwmHX3hs0FwwUjgQlJ zx`7FbJ!(rZxY*kwMNMp55p|S*=*(E1M8jmElk6h;^Pof-^uRFLe|L$&z5lPL`K){Y z)<$CSj@E0WX`~&a^K-;TC>BTwF(QAoexFNJ@IkSlu8Bj09~2FmxY7z@@@bmdR!*LN zK!PGnMoF8~E4e)Rv9@A}36>-)ObxsW!_b0e>8kE(FTIvSejx*qBT8> zj-XR}QSJrbyK)De8$m$j9vWLj%joOp)z7drrk$$n>EV!(9O+J^aXfvHo7NO1ElZ|* zZHZVKl$D6N;TGM`?LL4&rvy=%;B}P(^J<)VLL7)E&8rck>vf89#%q~Hk&++5!xhDM+awjlMyS%os-gtKq2`kp9LXyLeh{{nNM9$QOz5Wt_lbpUGJ{pX zLb*IH$#Q225yrRPpVaQu^JbEAadA4Kze9^3f8U{7Z}H9EhA82;Y^^9JkkW@(L&!mG<`*0eAXjDfYOSmOSK$;?Wbgt=TViRN(uf z`+%GNOXuB$+-=dfl$f{{ZR&7LC{q$Xe|;^SaM#9&E*nk)X%pWk`5z4vHZhTLW86-p zE3so;&)6XdJsa=*lTXa`fVrz#L6E@S*e;t857R!YfA9DH z*4Cl`>$r6iZ%X-KlS;H(ujU}DsZFl0&P=aXQpQg<3E_Y#LN8ovkVJ2L9Cg(^wLb*~ zFG8}@lyQ%R@P3_7Wt1(U>7#_iZxD$vy=T9}xGlI?R;HLuk_jKRBh&tKVv@?~6XY7j zl{d&v@V6U>8YUXWuh;AKzg5+Lf4;8kzi$%=x8Nu5B3eKj?=FHJ70#NfzOA~f3j!_R z)ij2x`;{gZLIN2D3DumEcnp-#DA&Lk)Y-s8?~!E5X?+YEwBY(9d6?Eqs_Lc1v>K&W z(aQd_lNO5n`_Hp?)gMW}JF>dt0EGdC@m)A{HLP?w?71VON_FGx0M`hh1(;imtDFPeL_+;C>H1Yd|9opwtI+d5$@#-FrMh z+C7_lyqaNbOJ42I8P|Zf=h?3JnDyx1$uaN#n7!lf(LeahyPV5C9>doif8fkNa5nU3{hzMu`hQ;luaTSe%A_+T85?mTs;*r>_RpU` zNmQ?<(KwgsCc{@Hc)Ej2$(nlTC0@>^71*mMQ_()4_X&!f-l1!80biuj_YgEY>Hb{c zM-&o8+xqIhL-hGhcf+ldudlDt_OJ+PR;UuoC8XPyLFb#0OumpOe@jIdHwkHqDMe?Ylb=|YjWHth^2%1S7p zCI~L(s1fRLNEWprTnospD=KEGeGIL^a%Vs=cMoB5@hQBlUaJ zfxRKwC7&MMpcK5R^6yD7O}ZIP4oZqDwGuT!A}tp;>X}CN^}ExE@I+kQ9DuG>oZ3nq zfgom1V$>+87e>v)tO1jpFzo!WT6hn3mI5M*8 zilqtFp=hZznd%Tshw!=rV?h23VtJVfqoQ~05{`+xGI7i(e)Z=7vLChC6JT*tP|$1= zi>OJJkdVd1?F1&&B!!Un(q)EP(z@NY*9nzP?Q}h-f78PFgh=F+obN+&llVA-Zg4Fo z$l4|=eJi*A0pX9g}sV(S`30S<9eAW^q zKLj%Se4S$V{bNm~*`h+Sh9BG>YV$b+3&v*4!S+eA-5h3iZD`WaD<(p0+;h`CoU}bu zAy%h=lCpa8XPSPOcmmT91hx44=TVh;w>&$Kf562_Q2{@pMOcm_(~BGBa;Rc3Nipd6 z3PN&Ri`OYkC&grqi~9K{VIMhJ{WI>*Rh8nt4RllCqn2Cba{@kR(X8(E44SAH%n6MO^c&f ze-&EgJJf{uI7DJilH_!7rp50T$CO!8#X4~i5`%qOY^f4Vtqw{+w&VGs4{W{1oDy`< zSqITB+I-kLb3|4WawH|{-Z~=$K@-jdiB2sG7le%XV3|WF@<$wUHR-z0eL6@siFmo7 zujJ*a!lJ}}Y7M2T`kCy}cKratu0xxQ}$- zyV3h8Hcw~XIp?xdVD3RAC*Rbgb?&oNQ5jacUQZ>Grz37perArKr4^a}f4d(1l&}rz zvNauY?suuzsrn%S8F5Ve(oI68OM+;rFWrJ>P24cjU>Y+JAYIuYCSR~DyeFb z_Ch5+4O*u^N~LW)A6h2J^>Juz7meI_JheSmD)5*3_LCIGfD%UQjX@INZTf55GHC0& z5-KTZawWYqGAVYX{eV`Wf2d(!Tc!}C#JWfqDk+qkDw_!1R^iy8D4}J2rAe)Xq7iDG zx(!a#jaoMw?#dRmnD&tSPTJ>_I3mSp9mokHh1P0_&L5g++xiA3g?<;y-9I#q{YD{3 zFy_>b*{XYz>0J7~g+laO(2>us$^G0Nz^(oAb0`R8oxKV8-R5lG+Y+AaI09Qgd!@C)M342jMXtXQbCe?R0ToMirobURibL;8#eF?4YxRrH#O>Yk?JS*1l5MP3;TBShid0Eb)``najM zrsMD_Wg`I-j^;od%R~{`8mGEW%S0ewc%Mx+JvFr|tLpkqQ#gqnP3-)EqcNI_CZcHy zw#($H3`eQ79pz9C^1yP}P1$&=3hAD;no$(RwQUAIhx4Oye{S{Hq)n8PK;UvzUw{O^ z_Je&hx%Ya#${nOs$&sr$k(<@!yI(IMIO+{%w5(#%1S+-y)ST&S zyT=KtKAj2bR1v0vXW}dAHQ#)Zo~Ldr^>PYski>s|eVx?CxEcYo2jRYlU$57ZB)$jE zLv2Z#KD`7+`aOp4ayCYw(=}?b2G&S% zuqb(RDam&N7Tn=}3F(~*^~sDlO=E_$zb+AY?E7BH?CJYyzi+s%f%@?Chp!|cM`C@+ ziz8Ja0R~2m0wwBoF){ibC2Bc@Ws!x(tefCevk6vKe+bk{GYQMeh4&8n&UlroF4vQ$ zYN=00e1V4^`E)__q~2gtHH^vnA(yK6>=h>x7xJwrQ90m zErF!Xf8+`uXk8Vpy_9TUnOIA)+c|yP>fdoNh`>Lz>}#?tNM!DbpXcsVX%Wsmlu+dq zUtI#P0D^1tPRSQ>AvbL`np6g|yfy6A?;=xC(zYTB#8#Ss&J3k*e9~g1Yk$37PZBf* zJxx5qgD%&DOVC-W?gkH`H#-5NArmw2gf6-7f7_V2(G*)kS9AizAt|YXn-+u%^!@#$ zdvH}4t(iL#o5ZRd--?2QX=l;*jqcW44f!eKd{b z)*anj8e~Yn>ta=yY8x$>$X3dAK8X91TI(<|XXAQHO#hKqn0Oay;ZCq=f*ajN>x3*& z=8e3Ku5PNq`ICbx@e5pVoHTl*IxR{bfBWZms|9x;w`{+tg`ujiX`+fm#x(PG&u25y zlf>CJqGH6AqW5avWx;wa;7{Om)+9oy$zIU3dGnZ4gwwQKE48j1`qdE)LzK51pH21I zxkaQRh zKns}s?fLZ)WJj=Eh}4yGGc-68?C(b86ZzOpZknW)9aorIEeQ&RXhN% z<7cNn_m;eP1zi_2@vyQ;e@I*iQY&^*Nb;8x4sUOf6ZiGN+Z0~0i&e6 zC&$i2vlDEoB}Rx(N_gB99C1T7F<|p&lgC#=RUKkT3ECndsxKEVP3C@0wX>(?*cC@6fm z;oZ1#Vh3NRG0ilYf03q+rV5CVGipPo_MuDQ!n%8m%O*%W`Ge6k8zmr4)YEzHO@}0n zBrn=)ST&Mnj)@uf^`C?qlcj0(3w+1G?dP)`qplZx6a z4n_`bhUmVlx&mp$`C>t^D7K~~Yt4!!AlWvV6TYLVAlkr_216psO^bur_ET><>2|p4 zh=kurq^zNPf0a-%SDjHS0XEWQ2&)9U7mfNmAvz_zk|<%~J*761av!L2?ya$@f^yuN z2}0i@LDE7jHz7ud$i@bSpn7$;pA2-(bBGnNPO8DP_-U8*MuhJxs$xt{6(i zy-tUw^Vki-xI|}jb~vHRlzVKOj1*ZRAw{hwn-XP_PQX^t zQy*Ygxl}#|_0=7^;{?4v;ZICZrt4kzDr4d0g-F`T@OfHUSMsko&l}= z`KrnJda_Aqhx7y4;H6$C9RRIZIsu_}rkoZj0U^#q`v?vVSE(nimDN1D|J>~7hpx_q zs!}U%tLfx^Pbd%$$@)Pjgfn(1(Z12AZ}sB`fAZpVi}drpWgO1b{+YNuniI-1_4yr?zDXkJkatN|I&>%Q ziW23h3Qt6~G*UcG-B5x+@Dj1?^$;8+2x3*BKS$OQ^o)~!5g?DXais2OPEsdLmFYxG zf2208dlr4FEAY*5fFKdywbJg%ghRNdgjKGmsQT4)J*X#FNIWg)&mDwG!>512c5hQ6 zG?6kB8khDTiESo9!42YOke#Bxn|#DvOi};DFtSaDa)DUkcs5Mq>yAe>wZJyC2rBre z_C1k%DFFoSFhpLGj0aH!HZm_01t5{Be+RTV#-KFBMAw=2v0k4_7o=(LhZ*X0^D5Zo z5(Wy4>BS`2k+>xkkg09wK7Sac9ybduI0uos-@8TsCKz)gKKVCjRPvZ1v@Rh~W;&_V zJ56Ec)aFcy!}9PT@ydb`*aFC#+7k~m)kJR9-vc4FhXsR?wXeiE&;(19aWg)Qe}@yb zzk4!5W8@QJIB7}|DOwWOo($DigjLX{a_BK=I29cp+J4gb;`m~wIEY00K24TvCPaN2 zTZOK56nG?8D#Ba=I!PZ~-~%~{CF%i~NV{5~xqa!7?4()d_LNKVx4aaWNNY^ICqW&` z>XHsRbEFmhnEaa%_)bmGbGn~>f3%;{T1c_qQBG*xxHUrO*NdPvH;S1K&_Vmb!K#+` z(GwVQlXW%#E;yxXOrf?k?&lPhwQ3?LxZO_-7L&Sd8eyk<=B8Ppt@;gtY%H z>(~h?T8RikDIBr{Jgv>oxdf_AB3obtjK$r6wA6%lEcPj$VKT5V@|zZdi0)cyDwwxL z$Am7C+{K0yNDAz^_B zJ0MP89Vv62dV4fZe@{J6`fRrdQ>DHc^(IwJCH`%EyXfU40-Qs!T5GQoliqnqrB)e@ zC=!Wr)3;55np#F7LA5*vNQ~&7vD&1nFC|>YmZLg9BJpk}{)blMj?<%vX=-^TK8#8Y zgwbvLxzoCEMaa}bP8FTo%b##(+WI(C+bxZX!!^DUGy@U*e?SZ^cU_AqI~={&5n(Y) zKF&n>9?>_5*r7w;6q#o_E803gnz*^|a98fN;Dxb33^N@lQQq!`%jx^0RdOK z@07@;Bl%Bj)uChtL9T>Uxt1>Nl_UsEU7@tcyO?E?5g=Mg zq5z~89U;W>+2!`Xe^TONElVDX^s}0Yb6b0}zy6qFe6J zn+gEs0=Yn@s^f0rW=L)-A#4tf()B6M=Mk}xB&zEQRoZXuUB69~rDP-xEf5OVTWv!% zzcKWz0X46UM;X|^tUSsbIp2KVV{pZ_wbPUpf3;(R%?2L!gtodrn6zG|ZUrIJRK!!; z%Au~C8+iFX~#@y%?P61TJBol-`XM$cu!; zYRNN+?G_i^n=0-rC2bw8aa@>Wo~srPS|rl`>r+AI z&v2g;nmajfyEy2k14H{F8n7mnUMl=(e;v}Ao1SYz6p0=H@6(~CmRLQZ8E(L6D#qy9 z>3i1XoTj%n13K>a^v@DSg7~D$10;^_*3_2b!f)#BQ4oPio0=BLq|4$&3{#Jhe0lEA z`t|EqrJI)?^2+-wZPvt9p?h=5l)JVmqjiCmB-|$xRT8;!EhBB2esah`KiLs^e@n-r z>A3@%^;YRjqo{ww=W=UYxjXLNeyWG1#R(ZdPD!637#AVILjqi6Jo(9UT&OZr>*4%=znY|RJ=`FPWR8zy6Kz^h^0S#6X2U2LefaIFYqrP+?LLfFv#2EI}-1N+HzlC zUuP1|GgcSr@OtBP^lO!b{O$d8e}0o`10R>fnilX$t^BDSmd5#=*ysgzBq;&Wct$!} zsn}B#NOiubqvE^?(;fu=<{@5Dzs@dtNP@xXxdm;tdZnP{T29G_#Vrb_Q!w!?Ts7vV zLQ=J!tT-kvz|@B%jgm<~YpMXwIoGdWzgFb14f!rrD}krs^c+SXGPSO7e|>8@NNJ=r z!M+yLB8jMRpP*xj|}^-p{0%o{%H5(;#HFAD)i$^Z{23 z3$4^Pp+SlyaO)69ZBO6#f0ZU7C*(=@SyG;NG6h>BRYyZfr08j_q~E1jvEd>mw9t_H zEv+GmWB$ItKV(wDBrz?j^qjOmEv`ucI2qn;f-6-3+oU5*r_}}qo~mZ2;7XMjkO-@D ztvZ_I2(%~?6|7C%v+h-dR?`kDUclv#XG7BO;V`aVaSrXznhF9+e=wc2z{CrI`>TN) zRRg!Imiuy4Qg-(<1=`7AaY|HEi#Wv?({4Pe)v1ZQF`K-=$LFm()4;Y=-{>5SRZ6r>Gv z4C;HR)uZt|wVAetf6W(|+ya;BOh&S)pqV;4=^PDa($~ag)U}o<51THMRf100a_?7f zFH|?P{*HS9PCk8e2!G=LvC&GHKD!IvCBwZ*G}6JEt`AFxTjGk`$pTdhQ}CizB~_$J zGT&8?T0w%5r|n~#=R4|9^%l~^vmntlhi*;AwPcJ*B6x1ye~?=BrkXX$O-%xN+EQ_C z+({Udrb9!3o_xG49{@<_MUzxiy!8F$hCtjqO8-uYBqj1nEOjyxJ?79PO+tGUClCs| zO6WMXb*C1}hP0fxHYADR)`m$?H)gH&`4RF(1sm;adLL;&CUbFvsMJO%vloa1TIo2O z&O6W=G;h@5e*;<;dA|vbQm);DDl!EVLLDa9d^%K9A~Q`*I6|h9H7NkAehU%Q=#ZLt z3<+-AAZ%T3AbqD(!rkaKP0rzIe4dOlzbl&hlruApbM}9J{rZJ^Lc!mrsG{5oe(HVp zWHOLW3p|*{3d%^}V>=@Gv87<*S|U{FCa3dspt@_EfA%%COp>P9qCLFwp-S8-m&6Qv zu%==nBxJQgEkrHfUXMc>>6z%%ZAwBXI}`WLT^n1)GgY|N6*j?(4rN%{9=3BcU?UKwKg9axd^QO2!H8 zajhI8fADTyYe`|5p!{j<7mP+KjiFQjpG+b*m4s?(kYC#Lye5<-1$>%_Q;0SgJjQCP z%k57=iQM2PR8eh4CgADy2|#@cV*P9J%{-lxc_dvz^51JfZ_e|>6dnku@Q?^c*Clj1HJ(o$!JD@Ew`O{3DU{-?GNp&<;hNQ2d??lLvwN(+G+Edf- zr$3_!4(glJ@AbpW1f5FNa`MHyIV}BWRE|Eu;bxE3-`WPWmPsY?#|_FWXvbR;MSFEI zO;)KLu1HMq^?O@mB+RFKNDi!`b*8Off47bu8VjO?wL#1#4&`>b&Y2BQe2}D8pNz26 z;hnf`4!N21+Q@>Xlh;$C1(RQ~UA_ekwu#Qxiiwb}ge;MW?nbP0jjaq$)r0271;T_!W3ylEuc>3M6>e)MnvMEwH1DC9)0r#_W-YNP(FsolSF?vN#A`fhJ#j$#JEK1lQY02@{*|3 zl(3SK^0GC%LeePK(>>Gq_JIMiU8k<_aB<>y(!ikuNfu1e#Y~e{j%1hM(5WZB;gd|F zTm9$4h+b`w30LmeC!ffm6u#YdbBZJQ9X;&>$*rA@!S2)@*7f7ka(JSg{> z0Szozqe!y*B!MKTpU|SvVnj|rnh4uWGs5~Ty5<2oFBec9`Fc~yZz|cKKuj7tGy(GF zK@}8>?SxHVJIDO8?3a`FTK~LOb=TL|*Gb5>d%iAirD;89>UkO8Fq-U4s`>qX`t+I8 z@7a*@(;=D)RCnfdO(vaef7@_xrfKBOx^~lj$+3MJvH+QjLsL-Fl0BQGjL6rE^Zw`k z-_wm#>oA?o*YyuC^i%XwukAOzP`V)%u-deh(&9+4ADO37wztVjY17g~+C=_xoTvUf z{UvQie1jV5IKAK!2ne>0pH+!aOhn$P*Su&mxmH&tRnrX-|I^l{e@Vt@ocwL_L8Sr! zvaTs0eww&DlDt_@wKyb-RD%0HL`dnHJ>(KsC=CK^TO}G`-S@fShx;JZzc<%58K0to zYMYihRL!6FN@8r0bd^35b~LEbfho(gacbAZC~>InpG`$6tp`f97KHt+*)1XloAL4~ zwroTZC+bFO?SIk|e}rrNd5@H=P(lc2xii$Y>y2m_1M2@s=7v~%bN)^ejC@OgCJ(P+ zG=3!FCHRmWhLdvewD?_X%~ib{!kSJ-Oi}^q-j&1AiNcc=NDm6zQGY^brXI6aSqd(Zq4dGCLm%ySSg8KzZ18$oM`)#{dzRZm>c%rEKV?4+6EL>U zMZ*4CZx{c?Uu?O~(d4Vm<8l6Y&S5M4T7fFD4IF>QO7fP^pojL#5P6K}Y&iM)fUh=o z#smAIpj{bU4Cf!us^dIO4-vExU?Zo#Z??fa55OP`i~tv$uA66D2v}sNrk!uM#47wowwG9oap@qxKbE}|_CT00Z%|o)6MSrg0 z*59>Ym>$k_tlX)CT7Dlvt_BEIXkwkPo?cmx+VA@wZ(f9)heMw}74on61%gQQAVVPF z|1R(%JkW2V>x3kUmuZOnuzHs(mgZ6FXC|q zn8>=*aaPwgC9zdW?4_H*bKaTMEjvbTbBlP-UgJ|MTMtk)B{kmMO*xyO;Opu$n-C{Vy_NlYe(+bF+xGPTOjuf`t` zg6EUvS-Y=d|28DH**~tMA?}(BLo$DPSg608mAh~ECO-i@WVbL=-*1=C9Ku<_%Ptie~SdaxY-NbChprNu>vB>u#X$|G}LY- zUw5{g@~X<5Mmr4FZ-K!&8wvx@CMP+^Ew69aOx|%zzIyZ3vl0^InSR=>hfNrVfvXw+ z?QvewpBJgWp|kZGeI#`mr?02}!z<`NJbTc2_M2Zfgwuxhwb#aow#_PWf;1AZ!w5-!R=?<0{b&^PbgeT=8wCIV@79g!B9y%OP7SCXg5u0M2@DeFny!T zIy05N@e9b_02{QqeW2?SHe;dd&Ti^z7@iQK$8OYKU{h0Ct%fBEu3bqmUjig zE1K8Uq#kKu9y8{FlQb^P)=z@FlKr1jdY3^@|48+hdNaeZK8AxPV(XuCqMn0hgiDsm z%N3GENJAnBlgV6&X6`K*9^Uipy3txjioFNwC=z79rTD-jodOxOg^QT9;oDc0o zGZ558?(3&?+=U@)g5Y!_L6`92NLTM${~i;SK1vmNg#i!?3AK^crQ?usew=oO^H|Sj zg}Vm|fGAZhpeQRf+NVPw;(6A0*|#4mx}A{^=2-7S2d1Ufy7{!%dN=>Hyef?N+{tia7w!e$UxP6+$b4@3-wjk)d`_%jV$1Zb; zk2h__V}Vgc>rYT0Sp}v8nG%5pq#tm(E#V1Y(F((~;?O4FyK5OIdCSXwU4Z67d*-zw zmW2sRv7+Hm(G z$b(-wxIy{NDVb(d@$&cZDv9l_l~yg#TM^^%8i7`t_mq3zn%Yaa!3JO7SI0Z)O%9E= z`d2E=fN=9y$!XGpys1W0gDQ0NMH;>4)@ah@Y(s12R%$1!$#eYQ#eZ)I=HCQ1_5ms5 z*Kf$YGRc#W4y;1^XvH-i)xz#8$VA?-U%fpWg9}LwyAegtp&+Z6ekq^+cXZTXr<;}B zlSc^Fd8_^$;rjy+EfMkRo+LAQu0Ddg9M{7;tez5bxd_mxwc}a_^V{T#DI<1!3B_0g zpl!}8r<&oD8f>3=<84U#Mja? zTxg$-@Xcf?n5>C9BI@BGw`}%|z;r};VWv6*JxxcKqZCpJyFY}@`M7|}vj<9B;bZvM1m-YNjykq6p4 zQ}X}Y_NnR0OI0&G!N)y@d*XW&wGMHsF?#^6Zq8zqwm*^{Sh7im zMdxWw6M48tljX6Nl-*{RcW-9*jA&LL9Gz4=WgK~*^-LQRz>^zyP`+}DtBx}W2h2rt zW~b?JOO;tYxyk*}h&n@IQ`kN+%Ud0h{>ohYm~HNLS?byW%5(l|r> zye{|>S2&x~QOl&nYe+2l`SuyzUF{yaN|I%b@FaxB z@l!EooyYe}fsi87-f3i@O}+|(+o}kck5tXE<7MoVxhNsYb$;n(o(oyk`ToU$0@s@z zGU{z3z1y8G7M?e0fNT%A9cV3jUJKPp-VA?1cr(yT@q344v=Z;k?DGg&b9AWJQ%0}2 znQ}_1td7|2-tw4FH0SbvkR*ewb{3F&+^7EPqbSFaMDDva+#-Cr=Ykfp zAmk|l$>0wE5ZMm>JAWt<@om(9CI8 z&RJQ@w_Pza{g1!KS1b@Lj-j7w8S?4aTp*OBzdJWH5iNv{%>f0Zf}waBI~%AjO6-|V zv_o-Z1g6KUG*`m-Ba<_xVyudZ++0(m-H=iBsUY~kj9`u!<4l1F14`W0$5d(*DJnw( z1)ARHr}0HXxM{?i`eR|yW(Ab-{+U_Cw#M>$E~|pdfvo7SY3qhjJhA3hgx7YT?CAR6 zF~nU#cR$9 z|MT5+dax&xYt_--irjBEgP1pJq7Un7J_|zOQR)NJI4xSoBRPXFPL+FLbEaXMvTu5N^4^!Q5oDH86dMm`OKq?Do= zIy*n%%5H${;Y|MO=8J!y5O4hAUEOn;H&7jp!fQ($xyNkT4>;<7MZ=GVV4lbBJ2yP+ z+Q_Df7Q#HAp>x_-3&SH-X|_K1t$_~00Ap#BoRR7!#Yk_yR8)htcFoZ#G{*aU%4O;y zCtw?GYKYnLWH>2_-;|aaoXe(TiFy&kp#;W3Sk!eCs?4k_Kaevf*qne~@_Y)eODQX=F`85E{2d1j7%oJK7g9@kQDMi}#)2CnDKC z=^($9o=&De$`eK!V=*NJ#Ll4Zt!h&Ty9fB(iomvSr{Xq)Dx=(OsI6Y%r7*l z$>^u{TidF$SvhliJcq{s0*dD~wr8*owOI|GMnF8uuUk(YEZcdeQ=ee0mA&ps+>>W3 zs=f2rgB9{=v_r}5v*dsw97lA{5c8mdATP^?uBIi8C0BWx()c~10X*1fjPiPc1vAuu zwN)2pryVQnRsmV2VO19{+L5ZT-`*=K3hCdRC;YUZjVf(jm>n1Z<5?z$pe>QI$F=+B zcga4Qwk#W;@QX;mzoDz%T}X#ztOWpx6mUa&Z{a5q+u=jwA@}rg_UF>97CLyX%P5IN z_1etchWd zNC~o0J&Imey%)3l$UtT4Yg)-W6)oIsI(7Su67DI+gO<3i?X^2&e*A;mKBa4BGkfK3 z*6*ip-zu||ztsr=~qOwK0mE+yCa9gOjxXePzoxe7_f!pl?>!M z8Xh`$)jP_9*R_$Ze=4jo4$JAVfVYMr(l22Ki&=ZNvDWZm2K5oJQHc@@w7&x~Cn zZa-Gs-Yd@s^s=^gW8k=Nc~M#d)cFnsg9Kvp#-NOULn*M@z}`*$?P8rMe5&f|3u|w zPXOT68d~MERV*bb4fcZ`D(W0iCz8L*JnwT}?_Mm+2oPGFti0ZU?4%GCAO|g~1XHt8 zb(OJ(w80_$JD>kU2*ow%sz29K40c90{`*ZWi39!8?L#{CEo<*TRxiA^%hHHb3@wb& zaPohx%W%M3B^h#?c$}7y%d{LlA3?l2;S-@ZYODRZSLU2s835B+@`6Ks9^BP3-h<%b zCO0{KH~o3-*20QP;(pr68&;4KOpm)nz66IqL#&mSw0W&OE#=;ArgXSzUmNIn-JfOr zw7o<-Q};*9snf5^Y|Gtl0mX*6mAA0i(1E`?F-wG$jtds+*HtEjOLluMDXMJ+``e!n zAq^!Lb-WOwJI+1@HzO@7XYh-n(f?<@z}q!(eD-vE94q6p-xmD2vu1{@_A!x?0coP z9IF>+WiyuL_ccClSf-4k9w1*SRNua?rF#Zml*#=tXzOS#gBayFJPL37QWL_`6e}`(1 z;SINUb%$5Suhb>8_Nirb#S=21)-|iGlT_|L&%|aV1MVT96cueeuhD<4@M=)Qc~C1- zGnhhhPy=RV?}5K;G86G1Dl&l?n;#+1bB8L2yliFrl1u|Glosm{I!$DFRE-fKK8K)_5H#RFP#=p?vl==i~a?ZZodA* zLB;0s@2`RllFT1`1+!%{C)1%L07=w5#zFNY|3B(=+9^|3(@Q>FBg+B$+a5-$&4 zJ>ujfB>!6rEx4G}>rP_Nz*SF5-)V308OH456quh0tR5u$tRFykR9R1!L?*e7laWiAP6^s45Vx^09bKIVQ-hjsyw^IMdh#hR1ONJC8r|prtkmOl zG^d2B(#jVSFJXPUH14}CAO zhC7DnY8CgLcVF7OTu|4AQXNr6YG~rnL%ZYs;!-O#n_C;#Y8N`{ZgBAX6Nt4FAMjo4 z|85U9Jz`#>9`T{H29vKfv?soog}r4Xs`|gP)}-GTfDZ^91K&j4=M5o#Asd{y)VmEX z{_RlH_P8LO{|MZ26eri+eoa=l(l7L2;o+JraYtektMsOHbhP@1b_N{9Qao^l;g+H2 zWG~v&xOGO1M%DQBWC?VLlm6DmR{na1?hC4OX_-oKhHQiS@D*6(QXeD65Q=6~pYb;O3%r=j1)vVG*fBBb|@YBYR77*Fx4Ja{*t-P{a99y(EI} zX>4_OvMwZhLO^JdM)cU&yM-{)MrTRBp`xt{iyJ*^E&AHnuc3=h-IW_6q3$r1oL2M` zTmfAMJc6R04#tR$Fm`T?OAxPsbEr;eUD5uSgq~|PMfy+k9l|OOITHlDbzJ57jQq4_f8?|zh;faUVZ$`#kKGHv6AKwqsqJLOMFU8id-KZ1&>efc5y`p5O zQL>W>K`77f+*j2AvS~)eFh?L&s|O86!*!jC={aSi)P{zBQ_aPa?WgR5Hcr=P3bngprj29?XYS7d=RO3fA>^esl z-Ni%KfVJTgebgBU*V?hT@<@uhhW&GW+7idGI(_2)g?}&#J0V5WbZj4Te)#tZ?n8|h zf3Djj;~7M|bT~9;v%2J{NK&D?Ti|5__TjDl0Jf;e`6sF^AXRPoF0=swWHB>?oYzT$ z8OK~66p1@N0h|`id*2Bj_rW2l4wzbKzvVOH&-5FW4>R0D97DgFRewrEprgLo%-bam zO}|l*!^QO&6_nF2NMw;YRi$RUN`;V>Se{=LeXDgF1^Ek+ZMFonoV^G(>Fq`OxXO~l zEwd}o!&RWbIcy&L-nfdRU@(kwGoDH<8Nh56Ktt|#4GbSLmM3MC&5!DiBacO@jcN@& zfC+R%`2&l;$V~E6`HoYOiKoNrn@i8muVTk=9mEpP^r}9xq%xM9f0Y^Aws-0RZ-cs} zcL+!wXk96nYY~J*1wI$)v(Q^*58J~@T+=f=cMmp*aQno1e6!g3tAQc1X@KrS;my>f zldwNKO`oT zJTADtX`-y&h4$~X{{ntAR|JCNXX^T6-J*0Dv zzE#chJ<0p~)qS0ih(0`>p+F*q1<|M{>6ah&X?Qv<{G?{kn&)<@{otUiVe+Fd#n3+f zXCqZ)&*ufAR|dP0q*)Z8)Psrkm{g4Ood%0&CU!tkGK6Hl!HoSK;9MuGr6Rq zWhA9f-3d9Y=wjzk#uj5B){ z90=`QdwC&i&pQg-Jd|5JCS10j8?K?wWCSDDp~klg6cV}??R_k9)YrItmV#0B85NB~ zu(xVEM@e0#w7$*#rm`ohja!LGua-miL@~i>rJ@X(oY{Dti$yqrDBm9R?2RNOLNBu!|AeKm0tjM5#7V@jw8cMdz8Z8yPX!E zs^jO94fuOC_k<>|^B1(sRfhugtK6JsAWa}zEsD8n?J#b0iKKLd05ssd>9t|1XbcyIg~;r{%jKfUC!lUKff{dn!|n=s zT*YMdIh|XpC?hA=BAUFiid70J4O`{z+_X*Pi}{(x7MR*`g631CL^_F7L2{hA@4-eu==k^q@)k zUJAV+SLxzR6~7K>ribnAo^qPU=Opbz3FEhui$!(myI#A~iqIMuTx;GPOz4fhF%Y?c z6C1BZd<;HQ5_}xr?2b7WU}Ejhpk9jw`l$`p5aFB1V~;$aUDfZaMr?&4BQ0um_k)T| z<&K5*ycxnly>p=dNZ_-J_c(rQwRd-G7!YVN>C(X@Ae>tDkG*gW{ygIruf=+&tu1eH zA-BkOU{`5qm1|9&UAPsZhMiRULtht1da(#_MgitDH@pd~0yKTdmtxf&FpfVq8xZMC zW{s!DsAd&V+b{A#*G*@ki|ghoxMwJH{=h;NJ7xAWnhQ$6Od z)`Mgp=>M3=drJHylGTn6$}_)vV0_SWezf-h;yuv=*N&_W@}vxe?w=SzqKa|!Evs|8 zXRDp_FF=#9&bZA>yu7f$Wt&VHHjdhE0x?ydM*?Kfpl6$1_XLob?!(A#03%4?JL>Fh z5p+ri@6A&hxe7P1QLXk2y5G2UhU9d= zT#dRTv`SML=Ay5KTtV;(I{Uq!KvvhE?H+*6!*5Joozoq1Y`E~>G!=fWD@m5{wI}W_ zUz&nwbIuTvd758d5bY2cboiOfe2c#e<1z z{KTC&8z|(Q`nm3`CKgFhrW)v*eYfMKkCnP_i zS8U7ekoRq2tt1x=58WTVK`Elb39^6ZXV6-0apJX}4Y>c7nlh_`F#M;0o63sI*UP5< zs^q7OJxLGB^uKj^Y1(tGY*Pc)T)#a~J zlM=MIJc%7xPTqB5S^oKDM{09$_jZqVFz^=gYSE><&sFG6nZtuVIcoP#V@s&l#Q2WD zuE~^o-@!Ra_$lAEv01K|VGg0@J0$Ve$ShnK_ox;HNX*!O{r9;}vBUFPA_baSux{J6 z#r17_?4L4lp6@)Urug5Gu@=C4XJ|5d4N~ZT)7xBMA}efn25+jl!@_Jo1MUP3Y%wJL zl-ZH9ZV9w3(r!K-XX#L|w?n`H6Gli?m>^qz_rvN-To0F{Z9wuF%pWxV_%4{Tx&a#i2^(VUJ-z}JJ!t*UnZkBGVJGyC?3U&c&Ba#}1w!BFFUw;fl z2dFwK{vu!}h7Ourn(ARu?Xh%Nr^`uYKRjI5{X{n|AYBx;fTFj4z`jAXZ@E`Z|E@GY zR~p`-a(7}Td~{e`MI-xy(bxS-E@iyIRjnGk{No>D&Y+47`kxrIh0@&+5bY5bYVsXX z*KwsRcO1LH4+9JMOE1hA=vC2pRJ(wR%aJW#hSZlpLO?)i8*GIQeuUA?62g~AZPD(4 zrxa9*E}F&5?^dz`I@5t)@I{HCr9u1Vv5k@?)@J+r{P*kQ zx&kb;*LyTIQU|TvP1c7J(;ILcMEFPv|LQ(<3pwzK!t4L`H`V5mk2CnYR7^sg)iA(p zV%nQ`zhq&f0E~RNTXt*8pdX%720z?A+bU;xN5C8{t5;5e;TVn-^&NdVC;eUiGu0?T ztqB{ookF3}u6aSmz?`^-Bybrt7XdrjtQoSA^?Wy-Lp52Ng$s&dfEqOq0tCNTfDvhjsc%?pB zw;=5FBE$Zl3~D3EU{2;!kM3|*?7yWVu#d)NWQ8nee>2j0y!_X7Y?ip8S2#D8JqzR# zOLe90Uv$fE^{~zwua)=`UYLQ!Yf^R@X$lUduT1X zo^US#lPkA#g|;GDKUsmQMWd&*d3F79jzXyQh7b8xe%bqbky~23!Qs1&pIjbzi;C#S73goR^C@O1~!=D}<$v$eWx2?2)$rLe|o}?sDnd-zyF8PYh%#6;*gj8;u z{a&{dPo!QbiHuNgiq%3GH@L>6K=ClSeNMLlCs8l?wZmTa&;^LL+aqlpCim>J=acO< z4zi0>yZASt&H9Xk=~6Aokcf_XCld?%mnAB90tFtfsVyXyLJ2P@L(XoeT@tIw%mz%i zKnESwjQ;WFge2i!%Y1D)q+mfu+S#Mniv-de{~!|U8u(8Zetide)7IpG#A|4exOIl} z&b$}pSdE~?a>kMXCd?t5PV6Rdu1w7!xtowH?FOuf7)p5Xn$_!fHbrbp_j+NJ&15iZ zukCld_W2ay2b!IT(M#D}j|+K}JJoH6=*2l`IIjSA>j#^)BK#fNT?(#}%Nf4D8~S*- zsNgKiX#XLI_33ZVUBD8Ux-$I*&4_!$?KkfO*2}Yh#q4@gTKI9!2>dSQCzxUrg5w1) z>&8+Fr2++FKa(RA?PWZ{xm;ob*d$@UTEox$-(x!Vi)_~(GHWrv45La%?UdYPiki#i zUVbP+R?F1=39YNjal7$l$BFrO+*_0yGsyVl5uM+TntZxJtTTB=FwRbN;3aPNPY{Yq z&-tWBYMR+XgLdn-b9lMw)aZ9cY)~&q;Bi*{a^56NOg4%M@ywj zMtHEmK{!4~$!%x_K{DwA_)gve73IbO*iL*$h&S|k+hhPv2Y>F4JF4-9sjn0S1+6hQ ziW)M!1=H5Jq0w63Mkd`a-}!>#HU?ZnAib}v=QHESd4pHq+JF>QIA zhAbVgdO~VC)BTo+fYy@vys${!DEx!UUm4fGtQKrd3DVC9KNiTA_W6^wDl-++K*KNV zOhP-<4Jy4vk_-%xbO(6^Osae52t?yWafZfm%FR4a(5_Vt?{$cO5Xav)aywSxA%z(E>zWtysVh-IIOqT#5{t+J>?>Ozju+b zM&W*s44S6{okXH5DpZ^V>uMT)VZHRemo>Jq!OBuK$7~(C9Rs_jp%lC+I=_E1Z?_%E zo%+McbN2v7V@^jU_50J~QTqas^D_WWOt3^?i7D`tOmbRwnZtB2JoQD+LCcE$hL^g(YTDgF+`V#c3%*>X=PQH zH_BC8=&qD4D0p*bLu78`jsE>>_4sv_RG3y*0PZ5bev$sCb?+6+l_74q{^9xZyTjDI z4E^-yLP73^6s_#m7#+BJ6wOhuii_4yTO;62E3Qi6Gp;;fgrIbDaSKidzZU+ zUA=Jhn4hsa@@3278yLwr5xNcQ2J1Om~#*vf$J>uk+>Ybw8 zq@U``1>-3fo{m1JL;YR(yQvTP?_%aP)@|GM_=Zn+H(~H0oBPfSOui2Fe?c+f;xeiQ zH~v+9!#nN*gy%KB*gDuF2pY}}(CU^XH7Oh$4jxMYeri0}Do>#z?BxS4KPD&sRwwJY zo(?q-13a#sYGY&u|9WDj{%w7lec$0f!7JJm^`>KeK>FM(hCX{QclE2T9#^Va;aj{v zy*;h7+FLJ>4c#~zQb}qX9F!o}_o{tVXKfK5p9D+#L`^%(Z|ds|uFmNK8<6gc$GD!* zr-xdwfnwj(I|*;6;Ze>4zhv8|(RXRdbUg5v(y=093Y*5D!(1f(a+c?yjB>#YK>DA$ zi-YQ{`SpxTQ5~EaRr5d%3)So?-FWW)t+M$Ndk-i@wQdVI8*nwwPdf8nT%Gm1Xlg6 z1-GzQ?Hx?fq)ev=l=BA&^w&#RocJ}xHBK9(1ym{?ErWMN`DY~b73%WuA22s+*(hC- zY7keTz=wr6-t>5d_N7sbUWk@>4k!nIivF+aerJK;-2&T;)&|goaE1sRXD9@v7%DBV`K}O<%^tq$Y~yYX<${K?%vhYqlrZe%9r{EZVVT zLw&~JI-2E7DMtF*gsivWsu46)rHh_lVJ5@3^t382yRf3QpWFGgclKr(u-ryth__0F zI*}5|x7^>^)%|eKSpG5Ld^sV*Ju*e)b-NT*EJ9}R)u?3NIaM3?;i0`3Wlrwt2D6v1imqHvp$I^?M;PpL*>T>c;a2 z;HgiKLXOx^E`RB@Y5XwFnpdiCo_!dN=Le{a`rVdT{WRB9 z(0m?#1V)AAvD)jyLD#hWdPcki0RIX{x@#nxtBKqlM~mG`u+U@N8aWAHDdO-&TDmiH|9SvcoqBdzf&`5w(*(#3T56|Vm{ zlZ*3bPwL0rZ@OoQLiGmmS*1OcVjqd}^wwt_s-|CYB}ESpPEQK;;0DAz=ux~+2U(T> zlZyuUjI_qe#MRUiA6ac7s~E` zzqHIu?bVcWytDp2Bd#`DX=j_vZZ@5g0r_R~BC)vb`u85~qj1jFz%wK84=isMgm3z_ za#bNwr$5qQ9J8+aAtE|s@yh?&s{FK?pMA(%&NSg%^2eE|)2gMKc93MX^Y#4kWQTB28$o69s)_j;v8nI#Nrg(f3_*?sT@1Ru~t3{Tz#-Qu|<$LQy zqj7igA-->hQ2d2fpfJeTd0pLdpZgsSBTF-HT!Be|z>lljiX@a35@efIOkzH^{|RYc z9BN+geOP@wNJW+j-N}Os_nDfBXYs+8tki+G(Wp|eXM<+)IhfqS8&P+{HLqN1I--P2Zug9y4d(UrOJYtK>3 zB+lRC2?^#QYga|CDIkN@)|v&o-;L4>uDdzvEaaG4wg_D5iw*l*(~IV8+kOEfd&YTJ ze0=>cyl4kd|G;XtxG|s8AYv1U8%WrFL5`6^0s~Ckt|y$b%+Hs{3rR9iO*OVgY~IJd zdUZbT5q-*}nxYFoZ5}czG-79GUB0m2+5MPGY(a8vZj4{Q22hYfstQ$qGk2G|FoHEm z9=hpqFmG*NzcvFXTLX1W#X%lz_GP`lD_H*J6~4G9c@or;BztWzNBv1Zt~P-A?`Dst zlnv+`48~JFwJ|RT*u}nnkJRbPH9Xop7U`JzXQEGh?4|~P@>|o@@1xAB^=hDWci8j? z{~OL_C(l&>Dh&z|TN97^2z?_SW3|0!_FoFZUotqCBbB4>va*^F>_{W3&lSgMSQllh zO(T`}-m(^u3ayahzM;G&xCq($dpHXV!KiPR3VmAyqHLAp3^Ok9?NTs#-RJm~%LM&>6cwd-bP!kc`xgv|Zht2yI0(Unj1s3AHy3qSqRukrU<83q1* zg0e!{GChi5m%?A6xp{i9?tk$mcCsIeZjmhf9bQ6)M16x~TabCfpUF4Zh0qaB)qeT- z#8~&gbg7LupD_Pa(LODh-X%-IVqc@OVHmG6Mw8jk;>Ku12Cu1Vg{ibN-N>q{498P` z9TXv)bEXU`Se%RF1GE=bC#e67o=jtYQ!PYalpI%mO+HwrV5O`~g>UlnE_0ZBbuBFXP2&X1Z_d zzWxhxugRiC664R@SSYczMXf1Ro+bV)N@6C&=I*!97me8ahM&5B@-&4UPDbz7pov07 zA(wnFz)e~_vR@WZ*zu-?Y`Vn5Rc=2YSXmd8dp%i;0p%=2af=k}DrJ4iP-P!JW?xh= z5`E)JAkHr_eC=*+TeTV**O?XmZBhb!Kir<1`Pnk~VTyMWj~dv!4$fyM4Xu=B%hEZ^U^&>W{NMz*$+N zcjF=l%Wp?82&*AO_~uKR8WVZPuE&42lXuI1fFpGNpacxSTfb|Nm>8^0xLI}{tQrP0 z_vR{p9FkS-(BASaH5u@6stA<^-TD7wmr;Htyj-b_>ENtJMJ1*6cn*=@1F}`l{evWS zzOP@HMjCPzDR`udZbZcV0}L`5Y5e!$G53onqhavY9*=9#hPl~&2@5$UjXH*r@flp& zmTWmPF?^EzaaQ>UuF5_0Nzw%UsR(1hn|#5j7)40L3k9cLg<=j?`;meXRyb{s_+H1Y2H?>wsL|BHCIPDY}5CuEGgxYFf)f z{fC?`mB~-8Yp)2TUp{~H1&xho3TVNVG#4p8$YlhxYgrx)dKT`pPI=G!)UBpliD)a> zpFUKL_1MNHYjNFvGyT{&o)tJq(kPDM>g|y27Pwz(E9IBMp>e;i`h1b@K#Q_SPh|=hu4g+qGMUiiT zhXG-2)9YW;Pso&yeRDEUW0H?I>nj%Idvu1fI@Cw+YD2(BfxTov`9L_|myYv9gxFMk zm?Pn_?$IWAR%%yZhBf{foE66)xosga)?Nk5Gv)ju5h^AyWc#w6r1&LM z7TtQ3?de~ImWyutHYFngwlm^BAJI^hloON<5{A6{^k-Cf%mmy%z#*S4Fqj&mE=`*Lxj6OqO)gIIBP``?{7$eDwvzUI|F3$NAaQTcUo!>G_mf7mGR;65c z4uRDm207Hd)$63)>1W#e{@ubzo?}tEtp|)NX7!DBXP@aKTwk~<*5vi0bnUCX&X*|0 zQ20YrB+%KKZt_`nxssk#F~@2ZKB=69sS09`u{U^y5ncaDA3ksAxh6FB)6RCFehf&y z`|kNqJ|&f$$?sEwFEAt{tyKEYuSb%$nakEPQ)1-<9T*E3xMPLLFNl=~6!EU@Xb5Jw zj{2W%7=tsjZ+#?zDvBzD8Sb=FOiEN|zSsPH1q;`eVc(ij2p>TVKduf- zvhL(o_ls29XB8SCg@tUz@9aiL&7YYQx=OSK;?;TQ1s>g$ALYANfU=<0$#6AuTI_WS z(OUG1_5wHvMg1cZ|@Em|z4v6w<=ku2Yo%wp^{67(GkWJwkqa8AgZx+6(5I>rvB)G#^;s#0OL! z`TaY)OMH(8#FQGLHD^FYc42EpX1s}$P@IZ3{!hi|y{|J53^}x)=~zZG1E-wsoJQTC z@Yh^gEM_Lof!D7w?ZanYNdE^3d@FvpEB|Pn?k5P>dYG@Q3OYU~mOgp%p_XA5RBBnL z6s?;UGmE&kKr1S1k0meL!`5hqer=zgx*nb}d+@gi10rvXF0{@-fEb-%t@o68D2}aJ zszVcaiujs!#G8oIb-0-pb4a&%NH@QhJ9pXcoT_wxf7b_1|($&&fSbu}L+b-N2xVEin} zIj#3Tkqe=UdTom%Pwr$;T@xT@WsX-`46Zx){YU)K^CiOBNglfi&T9GzvCl7JQs>MB z=DuubbMB$USnxhCQsZ7Fl%+o=-F6s)G=}^MK z3otQ$dcW30TcR4jenLHM|G%JbsEO}jXIuSLnEYEQIohasG8pwv%v;%o`Xl3^;Mym< z#`v~m6unTcgf2VR(`$(kJ%{fe{7d{oZ;s$Ot6~tQJC_FvgsLTrah{d<5&}(`(J`R^ zqJ1{HGs&$)eDz&$&@you*ct0$q;&&zr;Xd8J-H$w(J>m$lA~_=Y_(qZTT~x5hV$|0 zJ-8X;r{W$uE;JmJ=ufyg5^0}(6e`h~aU(GfT(tJzgzsiV!WhvsAh5&#U7z-68k1J% zoz7TY{mNP9n+*GKTqO72cXL(Mg~O#_MZ#XFksjX1QQC@SBHShUp?&w=n=ATXe{BZN zyA^n&;k%6sN9hS2mTHcNlm8N4+q(VV4;EMc-Hzr1(4 zhUHj#cK6@=vF65RWr6TC=B19yTBW5#ukTlpj5T}2cfp>AXvC?Tjxogt(?h2Rt z57IXDP+hl;+$A1%x)Ay!Aa6?i~f9P%!0Cwk0DmZA( zAs;H)StNeXMlBKo7xE{_SzNCxjfPS+3dVFc@t}Z~T2?8rOkPw8tw~ilW!f%~ZwR_m z5|jwAn<;?_jnG!hW;2I1dhWK0wx9yh9uK=oCP05zN8yK?Iny(xWM9YHHJCWAQA$21 z_*&Zx!e#kbtA`E}f73=h%J13iE%OXlvi*I}(7x~OLr`))3kx2nY=7321IfpTtMhwp^kjB(&YN*HnQy#q=POc?g+z2R0$s_kaKT z^$QivlV_A7bIA@U`4W;~YnmGSM6p|+-DJJt5+~}$xEB5fIh{mX6RPL-qXQfj@!oQg zH}o4?=fC^ts^j>$7w%-wC!;AkAa-srd&N?C` zJpDRoB5Be=pq^@fSAAma`@i4rJsd7S*QU>nxLYaF+Dvpw5UP!~(f5H{lQcYCfBy`6 z)}Lq<>2vS@p4wCHI)Kws^!?qF&FQwl^R&-I*A0C}AU~f8iCpkZR<7SJk#pbO-opuq zPk$HFfA@|Ps6fztLu=gxq5GXp0n!rU1H77(-kTGkn?{pETkgPKv&9XyB5B}eQuBAM z$PL#t*~z4zF>&o@kf1vXIHG*w#w0{~Qv9Dh;L;f|wVw1J5-r|PZTddwgA<$f_fVi; zFWT&`Wu%beMpZJ|-BU%oF)B^`6gAdMFLGj@L4Lx!T|9(-we*OBZ0PZqs5U@Mb zMkNV$N`LkB6TCsa16#|P2SI6A(G zf4!;A-YfEnztQ)@F}q2oGocDw;myrGkj|BBA<}x@NKCk-E)~p9 z9B@NIR!WPZ6P%4t*VGQzq=#CT8~F~Wi2V}}96w+hFD8U$!+(K;Cyr%L2k{1F_#{(I z50;V$=kud$M}IFVr;>-sAU|)RMaK*2fA7Wm+Ta3gj-8Co&%C+WGVXNE=s@ffCJ00xqJ!@w{e+%@~ z!XiY-#l#8u*-VqQwwe&=((Ls_98$wz(3d&TGk)DZb;cZ~Xg^1%%J0roJQ_E~~pY1c> zS|myJ_ilUK&jxfO-tOW4*RQXye{yY?)b2_KyTk=M=Tt&_++l7w7?qLd7Q6k`cBPYIR26W~yd*PNUks0F;3);j|&;_cdgr;2jZYwU-^ z^g=1CP60^UD%$@eG-jg$+Iq3&VEDdZ)BSAFk0kWgHdq-rv9{Atlo+ODj1o74Y!xM& zQxceXUg_{_=-?yqaQ;(MfA4!aKK_&FkVFEFZ9^4a@UDK6I5?Cmtf>dL$-MXT_4QSg z+w(VqP_$2b0&K3~`uE(*BdqQ)bExxnEji7sY3kCE%hR-{t!ROD(RIr&IU&H~Q9#=Q&2;YoZ#MKEtv&y0K@f5%@*XXD0BYD&&F zXYTzzm4`=rzP#YW zdMn9I+PHP)4gfVQ))rEqFiQncSfgj+g0!`J7B)L44I*5ID@KaL#2K6TJfDb7rnb(4 zn|a6(*R=3)l4{e=cY=nbJUzwc;r*bEL=r>YXdhkPt|=lre<{h(;T5`%G-$F&3`TB} zTQ54EzoBkS0>G0#Skji-*aZDfJ|NTKIAy&(lceb{$0JF42--gAT0TVhrEHm`#^I&A z$tSlc-`WpbcV#N?5;L3M*ccFN#ug#JtbmVSy!qO+hKfOuUDA>U-GPuA_w>1 z8MN%ts=4oFf0{PYU~M=?W!kDVboGYlID{=h;;EPj+AgIBOV^8ey(B!euu&<9Fs}6)?I-@iQ0BRC3O}E!Ak=(Nvzkke<~9SwRs*yF`0xJ7n5SH5IeLs z3EgvhGu`V3`AUFDXwjZTTbNp4k14Q}(I%*ONQ5R>IO-K7#mn@7ljxz_R2$oaWY;mN zP+mrKtdj$`hJFbdBb3b@5UC)32E)|AR{G)_#xx4-uf1P4#5oL!57Ccof7 zOzOf(e~tMJT#Yjzif2J;e5fW5&vjIUPGWIp@4adIv@x{PG>5vPbX29*XXyy7AP{;! z;DnsT)K+{qcLJJP0dzpzYU5zaYmHZvMvpUA4HH!~$#)!b7oPWMDM8X59eLBX$woqB znvis@#a1vNYSap!lR6`R)5;-4$F-eZTz0W;e@ZkQ3Qq|<2@ccuZfFS`k24yun0Uj) z-+DXK!+14{cunmS`kCSHPa;yeq=h&;X(PDadTPII9F!?*rGq^zj!2?Rt-McEJvY-y z+urO(bAyyhuOJyuo;NC11_|*=6^CoPna%deVHtyd>hZgzt((l!`&2KlwBGdR7OmZ@ zexwu636a&5B7zFT4vCSFLCbTaJ(x$?hVzIQ;k4a#UX(?Wt{hO{K zonh{M-}iRMB$s$3l%2RflVd&EA3561e|=sMZA9PSThcqQ^|4ixcn}E<*(6QQz931% zQ^2@9@$gLd=*CNltD^`+>dQ{85_mSKTr3OnP`}e5PgCUra4_m`xInyhZ=aGlwJ=B= zh16cW1F$B*be&=B`An6KOYoC$T0cmP8Z~ObkT!~YjvbLm35O%N_JbxJ0LfB^e+nFD zUy~A^6x3A*XtLeWy|&aaImxc(x-vhoBMqC0v$UTHu}THthAf`^)7<-|!-on;$C2y) zUFk3<3yaNnPKTq5*@o9=eF~jco{7na1}IXYz9hR3KMy z=Tw}ol@hCIlgoQNZjl;I2iMj-BzTxwR}?JVhNdbxwS`cr`AnRlrWO_9Py&uvzn%bOx$vuB+F|_vL-3XCStr9 z$~d%E-ISrbo@uyf+YZv-SKz=YJ5SSi%I9;}LWs)-@x4Fi&!0aJG>i%+CBG-`ax%%) zg7cN!f~S9!zsh^3TAYQsGakT#j= z3csU!D+uBp%h@Z~*gds|5~{N0(roqW(mB+Tm{fdHM}oBPQsJ<*?jW?>?H`Fj zHu1WVArkeRtWJ8Obbr61jLGf6Oy?a}`1~O6WI3M}1}#dL062&=WO$<%Lejek&fTtp z#e<$uA+5qwe|1S{O6s)|*=zexf>I#{PKepjwwVi_iFY)Np<9%22xw;zt$QGBhFp14 zYr=VOrQkVDH5iEexXQ45zEPE{`YHp0x*AXJlUl@w&=#HQ^Yr$BAVi1ON2;2oRd*a( zMM&5kgrRCb+WsM8uAp6GRhm#3$GuCfV53_!B7Vw;f0!nI6e&rQfi!(Y2!|<9aDVjH z2Rx&b6n_(PH^@C;VH-?R4-}}nrjLu|Za9Q~F4(=S3)GE)c(Ssh&vy1oNyZ^LO*lk} z*4UIt6M{^L+$;4H$%AC-p)Oy>aYR&F)cwzIfim+Tj(M<$#2Vd*r5tL<@oT#Ar%D4* z>%?WFe~D~4NfJzlf2xMG72zfnoW=xkc|tHb=Ab*D@Wot`0D*xfZgBF6HXp55Iv|6_ z$O)s*heQ^2d|IEOI(iRl=5gSscGcCy4AanoR_OyF^=-sm|EEb#PdX-Z%|u2v(^F?s ziPqTR5>P5ALMz5j^f+|K?IFj(>jz9C)w*kie?;ZL6xT@;v{O4ewB8RTbDvHa5=y6S z9r}NgG@v$%E0`(%b`BS{f{61*or=^#os!Z34jdXj+MsD}AJHW1L{CZ7jWDbcTmNc4 z`x8qksF3j|jl)i@DVp>c;B`CYvrtu$vST7#ZL{QoKM|prJ7AK&jRfFB=$8|e zf1467m=1^)4{g5f^U*0bN=hA{hMx7tgp!W$r2RU? zKIFv(9+hop!TE4Ds?#^uCbg`b3-|<8e@|oG(=@0%n^Fu-8cVdMl4a6FFQGzQhCNQ= zOsQs+wqnWDn9y1GOiAF_?bYsOIJre=ymaw-Bf7ca8Nb>^oo&C~eL0Q7x(bM1SeoOX zI5ztI0Rmr}GJfjUk`lVDme8bfx=1JvCA1D1q4(rkc$ADx0mD?UD?OSNA^P`gf5Mvh z0TVA}Xu+LyNCm&QheLasf}?~iRElTfo!x(ws!3Ok-3W~aq(6WDL?`VHls;91;hEr2 zhM*B=I|b%i5_B(ZEu_TP7B_B+(zO)`S?2b(3GA&3S^@Uu^Nv zU=0WzM!`rb9<`{^_cCcYopX*!f7*|sa-3A`Q;V3AzfayTaqe_Thd6)Q?n|_kN%O~{ zH?B+I1_UMq$t6_%9$%>!-W4y6_*&E%NNo;kanJ}fsd%RBn<_mOl%gpQ&9qZ+)_$?m zvq*x9^qGzrHdVnC3^hqet%L+W_RUL%kiAvu60M+Ki)zy@xY3C69Ji+_G3=F_aB@Zt1qpAab(Mw%)EU|#J+9^FRNsN* zjIBS3SErAj2juArx>JYLgoz?R>fo}rkjDmx-ElFMke6G-WlDSDqW^$)>`52qF64wHLA$yLyk%PTm7KPJ@NpWWBLag8?*^k)($xuR1K z{`Sfe6FBPx4+r|=J!rMj{kX!WcznnGd8Q3kgeFb85}USXGV1%be+8(i6*+jZxi#?c zN0VSzl$^pduoGHs{Jk7Xq|ewT4Ba~|1kgJ`mtL=HsoqPN)@-U0g&15ZU{8o#svg}Q zO9vNK>!A=k)AWloY)nbO6@>g;qMq6oMsMu|qUYj$8{`&fwY=nLiAhewbo7D0N?);z;gyW4Sw{4j|y2!4>IptE; z=*XMfX{)3}oBI6ISmKr-b{~QpZ6DJTJYQd5mBu$y@;M<^e*=N>FqPwk6r3bhHyyq%nQ-?ernq(}gr;%yS}8$u zZNEepaG&AEf1uTz+HuV`1+Y7hdYj!LJ?0>`_8}&|x%Y}gEiwx340w;BfE+q_yPr?fZBvyA0ig))cc1T20f!(^MMfj_e{?Xr%G;?v>%qC;3Sr>7pNl}; zk2OSnU`0J{v_}(&t?o;I=8&Mgp(s+Zm!hBU=i7!#xtf5*G{yeej+-Zk^=TrH5(#Qk(b<~-gJjm7 z0DyiTPyC%^@=7R;PSKL>RsX#y*XTb>NSj{ME4>H__SXb+8U@Y=M}e#gsM6Rt!7s^_ z=*a#FBr3^bUOnt4A!sz8EQJnFmTZD&*f6r8@(fI#l@i0vXxRLO*k-=tRHRe7k zXD1$raxGN$ewuVh6`m&U!+~+8VBSApCFK7`3rG&}v((c<^hT?4^5mg^Poz~cmUKTO zff{WdLbB#~foP7J^j-+j3~uv?sC15&vn$X;!`<^%jw8igxSz2Vr%B^P;17rKF|DdY zf63Rz8*WmD;^^G%&QFE{f(fl%+w|we-J2#qC!IBFDUv>wqcM=4)F+dZ zJ#PL^3wcqQA#Wk|fgRt6+}x+$-=<}=b+7JdfM%h@6PPxrgY6Q>gI?}t`fMW7rT0nq zwP_uh&$WmORNfA)d9;G2p!>nve0+9Cf9jII4J5oZ!OZlGI#Om@w^p6mR8KYS+rGAl zYhc#h{iQ|gZ{qbN@w;i-bi>Wqw5t`BNgSut!bypmwyh}X=v)RG4~9eT&^yzEot)zn z$}`hnogn7gS4nsogpcjk{rWPso~k(({ME; zA@^ZbMj1P`g0%{LODdh6OlnUA{?k}x(y)XJaQ*tIKnueiILfar(gmMy64 zP@SLDT7Z`4Q67Fl;Ulpo&9TKzYv8Lb}s;^Xex+>lNS+CUH)KCApi7@H>y{S3&GYnz@4^@qX^|JAs?DL z&Jw9#pH5b(AKkWPIwAIo3UByWm$5^+jJ*hTsf6F?Hy&m_tTc0FW zU#3>ph6B2Ne-v|4!SFluma&at6gZ2rEJu1KtssSWU$0kfT1_`<<;JYdL0i+Ix7D#p zS|t+~#8td12Bn9BnZmlLmDMVgV|W}7r0IS(W^)yxUe0I57^hZ3hO`}I3>ORf^v=Ef zArml}!a|G6e?6b1+4Oc@Itr@@jnS_9nf`KZCFk%S+?LPfUK)G5J@kMkeh(xi55xl2 zeNCh3sX`{CA#nwgC)S7mq*3$8m+3x&SI}{poa!A9gc7fb_oJ=-1v(R}Z$R75W-XB? znwv5U)1_`o?if17*{Dua!M#1m9fIhR4?;*tA1K*>e>f?I`GgEo|MQ>1+qgeHMaD>`|U>OsQTKFCtKjhgTfr{$Bp&sp+9^d{+T10(t=9RH0ark z+A4b3x|W`{c&K%x{1zIIpG2!t%a8iA1gEM-O=^R{b#%6SCx4mjp;nO9PW2clh-2dP*izRhzHgyzeKc<*Xt!d>7f4aoM?TO7$!{tqCuSE=-T3#oKF*;cb zz2Dz~3lV#-w16FqZ${jUS~H8F^j76h2lb|33LE1=Km`q+Hv+B`U)r|Gh?6rN)_Q*m zVSX@DN>F}vvZW$BLofWHYvUvkTw>w0AQBSgk__ec7)^;cq;cZaEK!0Ae5oIlh+26! zf1(=D6sy-|>?eM-fGF880o!tXHXMXh8Ky&Os`942l9J;79JX9The)IY-SK_k{?f#j zZOdxwkKWy7Cccs?vTM;e1I%7XlHQV&O>oHqOf{h&6bWbos`U2koP3KzW>bMMokiWs zhWyGjL3N^~pi5>G=PiepgeNDiYa)10f4KlnK?7apYzo@sdq)LWYWL~0`|aTP%Me(5 zt7$ue3T=_dEm0InNxTaf^^wGwMOd;a->T(FV9;3$X!7F_D2MLcEigheTsuiyRMa+d z(?-%)#}=UrQV!9Q1#ay{C^(Xcr7q+@fBrbTkH_~(PrV=jl}Q%t`yb>X+%%n5e>?>; z4-XMVqug7>!4Z$XqS0=Jzb_zL_m&7D3TCa0#QNT1nc4*Dvp1vmu1%WS_u$Ev4zCb) zGGSLImh@oIDjDL>33Pyy#;ZZ}?u3@lftKT$4&7l~8^0HL8;4YXlQhWSVveS%WM1l$ z&MmUy&I@fpPDJNPszD2wgt)mye;bgx6|Z$b%wijR+DHlIPt=_R(7eS`&HO3Za3V!Y zu5(C4s%RWcmf(Ma`y8}P(BsAdJXvYLRK&SkK@DLzda$_9?Ro_SOFMxyB^Og=zJVSS zT$xm3$<)>ysAmILQ-IP@%hbZ`-`&xk1$0pw-e;IpznDC~x zJ5AYyeQ=Y14G%biiDGlVRcx-6bi`m=^AFPQV%5h;|TD{lEYaQ zz~t?r_@;_!c_62J;t<-9BSYBZ7MGK=g*%gRHz8wC#|D2q8;Ldi%o|P^66X! zgVU3Iv9`cNib)|kuxHW6e-$E}&&TB$DOPMvzSEiKT8eHs>Xi}nWvBEQm5kAvY z`L*DDoO$B~Q#hoqnhtcWs%R9{B@HeKo46&eZIU+e?bJ?6!oXoVe{MfahsN#P+>;IB zXiTl&%^DvP_dbDkCSFAPGfhHNq|Y2$CmoorB0ieD>Qs;>da_oM4aadx#q@iWa3u7C zk}GQ~Aban=pF5Gcf(;31cs&vjhuEd5W%@IRkfma2N<0<^w=JAW)5`I_TrwtH%tKmw zL#O1U;zScA8h{Gzf9=x?0Y%9t&A15&aqsSaHkuRs*52ZjktGOpgEAzJ4g}4~B^$|? zA^4&Tdg3@Nriv~#kekTI%6;j?@C$?pjsK8N20ebxz02_ajv>Rwi7wYSo`}P)ML`-# z_h)>4eXUwy+9EUwbeZo?nmi=7XbHzAcs-`W1Vtz(w5gn{f7B{%Np4NajX?i3Ny`rq z^H~^_R_etAhv=k)d_prF|3wiaLWG@@eR8=r_jX*H!?iGy%5#AEPk1i}5FslIp+b3d zowT->(a%AudlCvT42;Wru=1-*d*BOf=LYb8Lr|D z@Zd4%%Gr{q5}dby{Z8`yn%Y~m*{AF}C1U2;S%`C^Lb@Tvb!miTqNj(aGi`-y9V@W( zF4cN~xFfC-)Za<&*BenXlceMKwxD%%T|gpn!uL21f67s`!n7&ImTNi$1Ti|T-E>-a zPXF7rjIU4r0TTMrHbq*`4az^X*0e22Q;7+oacBpjR}{;j1&0d64o#x{K(q%re2)r( z237kJMWg#nvB_m6PP=GBzIRIJ)XJFz1H}sEB#OeIzhx1+)XAZ>O3KadT%vO`6=Ygi z-KZdSe?BOteIha7TGEgxo!2B_x9A&UKYZe#7!JpoI6A^-!1fIZIZ;nqiHdq(+IOe^ zDrt{w-RbEWPgRTajB%V0C8=(z{RvhkGHMdZq9kuYlszf%P+}Smg;-s?1hyxZvX%}d z9GB4}G3)Tq^-#yYxKHFd=tBa&b0Af)*PfT6&D(h*kCc@5nDTOm zf5edCj;*hxXi0&Ldap#Vr2|cUpNJ4eN~$SYOYkPO-!4NU0|6>mwIAnKm7KvR?gRCc z-SuqWJD_ajspOEC18CTxb`-Q+4)8XJtZE6Lsy=H1#u2^|YGw!$cT_%}T*Vy}O-Tyz z7Zka0$Y3aZ-q4s-aU~Sfcw0RV1P8ruf8vWCD(1jE-wEqUND4@J9JfB)LHqsrC#kI~ z_bPC|CKJm;iP(_*94B0;*AqBJV_Zys<_ag!eL0(bt)5#{@Ps1v8W1>a|AhA6A<;_W zpb}~kgf=Zmaj$V|O(%~y*9l35ym_A|p-FCHG3k44)Z0V+Tn+!+&*nEB>TPore_TNQ ztfx*$G-|_r zeSK9=;-M!`O4;riKDbEfup&3_fBOSAZR1pRPKk{>tWztyD^X7*R!9VJd^=U9{oqLj zoE9@ACP?-U0#*7LI49TqXCJlZa$GTlJsce+kh@eaKBx z({GI2%Yj%{3h&YPPsVZ+;mT+a#l&JVb4+c6)Zg7KGU;bq(zM&4N%TwAxD{|lcBF}~h4HqPBx%Lt!#c;E zNvUf=@&<%%r{90QUPlufeYS35mrQo2mi#qHlF+k$X>ifXd8)iZe-&(da5OsZd_t51 zVA^6M{N#kWbObe#6ZIP8rCQTeB0i_FNFr?0Xd`6W2T%;x78xxr`ZK0`bQ~9_Es=O# z)N9vvl;b2pJLc`ZcHI^whNsQt3zg&2Z1C_6LxPL7#&KWgWsV`fMlKNS|{(U%M-Ilo|d+mr#9JU_-6RC=%7w+^%H_I z5vNn49O6e*iJmNI(%I`Y^b*2900@s^6JrWJ%Ch|I$HbzZfBL%7G8S%=ugs2gd-zLFmZ*Tue zMcbWJ9%d&ae>b8hK8x5F1?`lhL1g3Ma5>J8O1VABw`+U258|*ZVzY`s5`yfKu4G|E zQ&C@EUq=bhNk*ZcO^xPY_t!8)LB`>iJG>K8tKY2?b`Asx>iv;VL!2R9F z`Ub@0Ozp{(6m$|O!Rq1geS2rxGH_#~PIzzX(I#TDtJ>&YwJQAd_81XONy=RVWEavh zJfzdfyo5d`!A)KBu&E#7XN06V5_{s@w0k_nuh@{{ClcajY&W%u({!gPur%S0$WbVk z-hR*Vf9G5>nUGIHLeic$ZCg90+~Xfy-y0cTIYFdU?H(H(`Xs`5Nb9X%$Gv}n`r!10 zPLcp{aeN~hxoy#cV*5$O&NMalspxPjTqeo_Q9?FaU@-lACbWuTshkKWq~|_^xJg$d z#-?}E%{JY$Gn=$bvQH%n;#i2xt$j(mZDIuHz9Yx|Wsq0UZn5kGJvr{AFI?^o2rpFZm^c<*g zcJHIN7DeMJqK2BFFD9UmA#A(vJ|yTzyr*QZr0anuG~4-jK-()CbQ2k#*0vLLoD|D1 zn6#t9yBCwM4V)J?GolhiU`o86sjuqBf5!*kBdh7NgwAcHU|tA%F*zNR1VN?+Ox3q; z&Scs+!Tc$Mb_kd=zxzO{{_#wmCXUhEp=#{}zQ)QYNADFXwc`-42`O}A&`GZ*A#$5G z2Ju~j7n(&|dXm{VGavH;Q!$cSgcEN}_x!gt%1IMMX-_p+|7^UZTf6>-< zicJvL@Q`yH7vk?h!7&QtQMK+o+#GpY_fhhXGVK$b!lPI%$C$vyU}WMut)YhRgiSJPYI54e|9zy+6GP9u=`!>WvjCherF`rxr&(%*4{o!!Ne)W zruLYFiU+6TvA>(D!D-X$`vATQy@!)Tz2Kc-l?>V|XYm~3VXv*fcBmcY#ViBITbrk= zI&VhL!=XR!1t)IyjfPn-Fx}%*d^zGi>(-2UPLF3vhfzlqwB19k0~1S+f8*7-*0HP9 zNdbClott}Ft2+i0QCpM+DS`t@!67k7*ZSLBv&K)NEVy?<_j?%&m0nE99y_TZr+aq@ zV?qU;bb@P-sOh4Qf)xQ1q?!AP=hm zUMi?=%Q4B#2DD?{+n!|5e}H%!lXki-L?~{PTDHAq`tUXNEVYfN?Hj`tv0ha)!hb*K zW?)%{@K))d(w3PX1aOc!zctjG>e2@?0aMhza$E)H$<_V1+(g{#^&;)2hpYoVHwaEe zyaXMSr;0~M+^G%x{lm3UQZ+=!a++AK(x(KXTbd-9`_vjs#8g6-e<=>AxFS@oXF|HE zjYV;3vL%7m{&AzydLS%3-DuCgc@(zqIl;j8!J#AHH!AMbFN=`x)LIMs$0{^mAh77T zduj+g@LvxlmPDUOK3eTOd7OK$m6KYr+fjE)5_>{nRIm}LbUt^mMjz_Y)AU;sNOZhS zDz*cGzN+dU4p6dbf0+EA9G7KN`I(HYoW+I-%x@Yv?qKNTRKq(#q-yG~I(|`7%LZvwDr>^(%waW|2!ZL5SkbixRa>fO zB=7RU>CxZU?+r?;n|E=(gIEp5q^Y8>gdP&NjLd)CKV3^ke-EkTC{KKYH1II#*(9V& zCx|Z48X-Tnq&iI6Ds;%E7Ba;o_e{DZ#Ppd?2PTnsx4Jee_^3$~ak0pJlaf)2<22%} zO51&!Y-@T7!w0Tyf2MV91Qg$rB2$DO;+3X0R67$MF7HnJZE9Qfb9kc4Xk6%?Z8G9M z`iCZvL6fc@f6cZ{%V-EbXW$-0+l#(2U0_b4fKCg*1+UOgf6F8%;uuvTJ>yiwX499X zKvGrb&!0aJqfr+)KKPFFDStz&W`g_4e3hyX; zaSSxD$osHk_6B7{K|J~F;|@6D{+NXCsEmS}1k}$bf8ye#2t5&%r#-lB+qHJtxb~&x zb=g;BWHV|?=(x`Oe*rWtO+iX+_1d+M})4hlEW(=2xRE^&b_1-c}$oK3a7LSFz<0X6IvyGZ^pOelDwrt@^GB; zs#Io{E3)DIEKOf2@Smigk`%aw<8z$Ohssl^ef zSWRe7_cnm-UA_K$5smPL5Z+RDAFOp%?)oS_)bm* ziZy>Flq31w^>?DS7oVIn8iSKL>&D8)tpR64;*z}}3o&*>(z|lSk`q_d7BTsGs`X0} ze{_BGMRW_Dd`6N9-d3y(T!+^LSvS!@S+;xG>00_?OF~obK?ZLWdPykIm{5EY+gbt?`yP#;tC7UMJ#6+s8P{;d_cJrAm zXOvq*lUKK^`jFUSybG1|30#pg+}{K3x{)7){zZgWCcd!vyFmX8runc;#3_)v7o?2+D2-lr;biIdu%t!we?(bG{u%7PkH1Rf3MW8 zqJubHB$z)s#9<}$)DO5Mf=Ev3rakiZ=kDi|6#%tyl4ZkW?$@h6$Io#hdr%>}WNVZT zXqBqfC~;^X_240ii)bJPh=~tD+9#T1K~OxjwtEspl`0_;*I>x$CVeOg)ZRaQ)?fjB~JB|I4Mm9%33^Ec2u_`^VHrXG%h4x z=M(h9sT7B*|ABsKkq11+pEjKv|4#3868fV;mnN4swhxRtr3@?CDAXZsYF%2`b|yxIQ{deNC4Z8 z(_1!^mBB`?puOkwOP}LZ2pN9MD~CeNwO{ZmZ+)revHF!pUZ5e~HY-NxbX&c7r!? z)i`xxl8mSU0{YmxK~xHY)kC3M_W?YA zoP2A6y;6|qis8hIf9lt_6_vbT$}sJj_H#u-rnLX3_qM3^ZQykXlH>MmJ@t|q=fHl*t1bIbqS2>jL_lm>(?)YgNZZa zxEPRmpX99)#;+%dcJvNQ4)l}vT2R+L4q0=4Wu21%Mvt_nl9t9veQC$*39iz%3Zn@c z6=MVx;E>U5e~0Hqxa_#ZlHhdxU9EJdic9}-2Axyuix801(we5tL|yx&YYBx0w#JB$ zk^GQ|QwH}KmBRtiSjB92pgWX9*OtbX?-uA7^?H)CO}e#S#9JFN*Sm=%xSq_3P(ly3Oq5+1-QIHV{>Mp=x}z+}wh6 z>b*1(=H5@^6`hHv)i!mUh#|Pz_?Ka_L&>jeUj&ZC0p83B+AV3M_)uWFV9H3U_d}>% zS7#5TMtnzoJlXQTwKYmex& zBf{)0G};rE!M|`Kk&n*vNe=Jw%q0yPRpLQ75y5~ey@~gA!9uD+lUZZi zfJN_7AYA*iaNv^4w;T0-6S5S~l>(^TT{E@c9!lg+XfPeBdS42i_U{Qsj1|_y)bc{H ze?=oTQ3F5i4$$Q)AJ~s~Kq}%IOq@EGMBdk%CPxyI>aI2MDTv1gaQKQGscjiTVrfsh z13I*f&VmaOC(44lGL8*vag=n0pe=Y{ot$I?1SrW{;o1#9iN{1mBFSPMDk4{?GkdQrcu*W4GziJaS%W0SakRue-P3K zf!9^8rV>7MV7R^JTHFqqy57g_k27{nL08)V@5}Q^q@LQJlajqTjL7Bz_s|_bsnS%! zHBE#nZ%EtrOEl6Vx_XFzqB8F&2t+DPlb^|c#Kk-JISWn@38@~69f=o}rd7k5JI?DZ zovDiSkVTYRvoIw&CNx94(IV?=e|S9%7hoI9-17yVX!gC+c{(X;yLbMZAiJiEQ*by} ze=*beJ8b#~;n2+m29ec<) z->0P5t5r0$6(;1!@dW`zejKzqHmw5<0adU_PH%^)03p0PON{L*!VWPZuP7}9jAX${ zwjNU09>`x&9Y=sF)YNlLMAog9!-gNT$c9h2KHO0K#U|2q`Yu{joulN&5Yrf- zCV-$EJCfCC+&-y`YY$(EeFlLz6Y`Zf0gjIpg4a%fRHf`4kJe}C2>$mMh+>YyV%l;r8bfur{5HX4cs!z!%J}| zRLLjA-m{smG;!UUg;H!v2WV=E5)vE4I7bAjBbM&4G=i^>AsNU0)Xz%-kWMmSGMlC| z))j>01n;0W{0UL+cTYl8t|54!saG%q>6pWzV~2m zOfpYuo4Ei>-gA>(2DKAuV{ZE9uo*2c!tib!-^aPKPwlhVe{NI)ZC^`4z1t-!N`4+a zj~qEZwb6{j_kpJ92Uncf@J;_a=xQb?0{9MMiJ;b8w_xB@rrtyx*6BYTsIEs&AsE zjN0;X#NKH#j4H`apx(4p^u4P4dPq=9uj3{&-fIx5f5l3bs(vS!&r&Py4fIM$woKF% zjfIBfs*=NWAVMGD0qP!#`zB3_5nP^vrb8a6uyF-jlAa*9?$k<1k`RiNrq;nE9_r9+ z;7*Roz44iPBu!LNYs=yOeQA?D3IQjmsDG~7Z7B-`Bo-&uDA^!+3?*tq5_PEkHlbur zcPAnCe`GZh;*+D8pmv<&V43yx^Nu!M7>Mr&_8`3@GP%a&i}bgC;(-#k5-Q@Ha?_W( zj4VAYN5*!p>l2zn*|4kjrht3_=@7DcQag25NY9*+>#zwr2^bf%6#I`r|&q>f~f+Agur&kP{ap4|_baJIv=?&&S#0N?IEa3?q zxYvhcyjn~+n-#|&N)Wy=MI$_ecgu|0bLtECBXO)fLp6;xf%#ZxuY zq)_y|8d|82-;v~)Y%DN=(Z9QlJw_^?h?A&EJDI7bk>()e`lgLE2s|FunhHqep~*>_ zY9izZL^4NjL9-7Ct+7U`8Y6oQC4WYj3?%jLDOpOqGDioXHZ2tZs#ctI-{1_ff8+SW z#O#^Q67ooNdO|KnBo95;>fCs8Er5+NDO$ue>>{}5@S_7H$imwXHUYeHFDSrt7*HqJ z&V7d|$}16}bwUeV;)_UDy-IbHOimj_TX%~#&%^qI+6Le451p8MOoa96J>$hy0!=^K zNkf)@bke9H3+1dSbP`W>eGJ#3e}Ld<+hjT!p}IUFKo+!B4{7DJfKueIFV##qCo z$xYO(MSG|ph(#izgd|9iE4K!m$tU>U#lW+HsP6<`3G&2|aoQuPjgU+#gG;;Rzog{w z>+9?K_3PImPL1#<&(s>cjC_IGR}d=i^n;9N+0UdG4O8ge0qr{y#M8pl6>Sc&A%Cuu z`!h&nPSO}kC{JHwhLVxG49AGjo`lp>>np7_MNOtDNA;0Q?LwMdqhSsjf-w8)Kui84 z%_(;VKn`&rmYj|Gx}JGI-2}H8h>sHBSlj0$qex}m>jNaHeS9V)rf=hjqv1|3;~ly zM@NIQ(!T#3vmOuGZ5TA`Y>a|C_e>DN2Rh`)!KqLogJ6N&@vwIjCe%`J3fJcQyLQk? zsBJ*Rj!S-qw%wU*KHM}UwZw+lds1agd=&jVvU|}zbSEKHG$mvL*2IV^n17M&h*Ub% z#2vP2bi0q5;r?iJ;DM2dJN$O>y#5h!F;x|p4K(*~~ z{JNhBUkL=!Z5cKKO$0<2SO+b;zb6w@atkL&+#BBF*;5ihBjj|?Nq^Xldi^xI4+!C-nof$Wsu=5(p96vrEiNuF@6#lU{B@Gh zn-d1pargyk{O$Vb8fXu-0f?i?T7sW9g;JVe{6znUh}*qwrd&Dqk0Sz0j5tofb&@!k z$f37Y#N=Xsu?59r?*YOVCnQ}_*uNB}eU2+2U5n0zl%#>=?o0KM;D5Y1o3@PGcbW{Q zj>ISYqrvhbURxRmPl#7Qea~i4r6+vEr3*+Rt~;eDm@}Gqn5#saWCN0M>u)!K;Na%o zHb}1H3hlz=&jY?D+l{G(=Gsd4bc%V1HGQUQ-3%H=w#^eJ1&XBdP32#ytw?RGfoS%y zk5C~)7hDuim~)zvGCij(^8z4r?k}4@j$=2?cds z3!QjM0<#VsCNzs$l2UXK{lFGTE{UU7u|Zg)J`W8bk#jw8e>WYYh=hZz&I!X3*e36v z^P3KmzHw3?J}HxSg=52mK-FL<8!GXJwq8VL(fnLvS}5*dPC->ivWM*T?f#q>jP#L< z5CfM)5oc@bEq@cTdzW-MrE2>;29GS{CWYsDuInn5MQ{q*69>)o?%yOCj3!bg^FLa{ z+Ase;Bx_0-deTJC2a1f2h}48AZRF)U7h%%+qBTpXN-B&91)UNgLNLQ*R4TqsDmpeM zzHkpGjndy}J#pY1lCiM*u_M{kHcH8A8ayCWJzaYmD}TS5d8xh|;Q1VqEin{?0|)mp zahC>hPC}q4p-M{Ast1=4NloGwz`~i5w~4@<+Ej$jb>UfZk8s_Np)-NW);Z^TEe>)E ze@#y3M4EID#ppf6EYRV?G?g&P>+8tfL?R1(j;NkZ;&_zk4A7tJ*&cv=-Dv&^&gJ-h z8in za|nvZwF4AR?keF^unkjFR-JYlyH7>W)FK;Nen(x?Q_yz2qLd(+HGZapfxlwSH^%G_Hw9JDN(lN@ z2O-2w4|O63(t)ZZIx=wu`1?#j*WF7pL8X3j>SIHoSbavar?`Stf!Ra{4l{!0Px7XM z34fNP|3Q_?*%BhnWG}aEV-tXd=}E59t`w)>W}4$jG5!?S>be+A>YWxOidOY^X4;hciqIregKDX&^UJ z?G9aMLqmf#mm!F|1Wbf#Z2>@Hih%-fiGP9ZTOvTj@`JkNrf%7 zbV+a%OwDcUF(rB+)A9J9ny9A4cS5v)vzy}kb55?&{*!)cYvypbUsXiUAs@)sai2Bf5^f3seKkiJiF0p zZCXX9y{*Y@(Q{A9h~ATmA-aQ_g0;KvU|@VGF`@n0_rDz2D}Sq0;JJXVhNA9gQ;}xY zNHRk{sl}cA(fWa%kW<$xnx z2M*&iL7Ft`r|_>6)pLDUtq$9$v0ZfOn4us|I*qb6jlEJF*cv}k|gVAXrGO3cIUBWP~$hGC4APj z-wucb+SYDTn@)!f?N|3%$$!gi@a`JVjuby8^G%R#IElJ3$q|HgdeYR@kkHyQGf9-V zqR5?9?z^>}ZO(}3@8^moLfbS+Ge)nj4R0+yek&Ry3#n2|$SkxUq`_6hsfV9X8R8H0 zUZz6`I)X#YdHp+Bu$4%n(#EOjc_sL;f1g7*$fL`lFQ%1LutAE@7=KuNs7rX zcVdlh(u=OstT9V0Z!mEI@26m#^G$5fh-STcbh!jxQ5=IP97SSGvT|3fmfY@O?(gfY zsU6!DDy*_^Dv9j@LJ*S|P)3gkrX$BDvNv%H5<2bLUH!ZDIcp^y zVwN3Km(NQrfiqlhG=CAEkS3D2a3Y1ot=kY=r-M99=N{6N)3&s01Cr`|kSsycHzA#7 zNZ=$irlU<^m;kSt&MYU6Nv$bDoao+xPIHoT0}M`_4KJ`?!|!P%G_(*Z2@Saefyhdm z$&HQ4rrTW3eXC#e!czbB-ml7GAqZN#a(dlJq}Ogu*M zRcgRw*-oL`w#l>|MlCOwkdk*Dv=!e*$J2XA?cE^3aP+fvWZAtZla$-B`kOtT ziZKlCZGuW|*lF6*wYO5sNGto4DD}$H@#s=ZYcpn^$h3>(@=VVp9RjKCtqHkHj{0bQ za*>DFcmmhR9)Dzx^WzS9QfN*-Q4XCZp~dO&g<=a4U&Hfq*K?B2l@frrroV|Xve|P9 zRlAxj0RbH}aHFQcBv~^hrRhvdiE2n_N$L9v_CZ*rz5e}qhSXeEnIJjpVM9ydQ)m(e z^d>eqO~$zKyQHhI4RVUK7%wjRANJf81#`qP?N#3gQ-2o?Os1&H%}S(IGU)3E7eSk( zH0!FO$=hv!*RkT&-z5l@xEj)iI3&8+zQexT-j3{TD@wo(e;^J63|c%tCZOTkR|OIg zmZ!BmwH&6;n?~s+89!GLv7^?a1Yw+(a_aJz5%C1H>J5ExZLi**g_wurd9Aw1D=w*^ zFVH=^$A8oKwOKz0+8W2b^NYvI4;;eBAqwd`op2w-0&Lq7hl&aTJu6+pOTP!7h3l3O z;AA4~61uJ36%n7Oc;nFF52v>OMYeR(M8;^(1U)8>kb9sTb2JU0jx0S1pOJNgZVV$$ zf1H8hq~fdISQMnsIoF>*f3TWz3su#x-L!@Net+Xe;53jU;fcX#Oi*EJfXIA@D&7!q z-=_AQ38g^`j^k1}zJ$AW=aw$S&XYKA9TE=~5=YmF5~iEY$srDj`|ifo8O;f)rPcX9 z{qr_$+-Vvt#R7^A$)q`Ph%Rxe*ELQpwvOOQ`vWHrVX_7jCG#H9OgDX=vAsD9F4yDP z-GAIhjU~EfgRj$pBsR9hh=1i`e6Y4T0r9r2L(Wo8+MSuo9W-mvc_kuZ5o|*q z&(N*?9y_Pv5zbTMvXT1qnTlL@CQKkg`bT+1gsPLR)62>3Z@zfw4?hkVO$?+xMarv3 z7M)FMdJ7AJ@k!_f*=^|IvZ;*ekWsFH1b@vl1oF2<2?Xs!0sRheN@`1*K~(rra;Xce z|6HqDY|^Ab$#Dv%ztelZEe3*%`r}!*MC)wU{+(#T)XJF*e$TT{dZ`vsOV%Ge0VS^L zIOvt70^(YBJ^7wcI0CHW=Q+KTt&{ZB|5pU;5|?>GaZ({>kXWmeR}}?sEp~p+h6k7kJ}M)woL<5>H4I1($@7$#CMTX*>_k?Zh#CbP#U8vyH(op({PM zE!X%bLo>0Zl!j~^C#@I1eX5I)XgWJoX?g>kxcB4ulxaQEWO+i6UI~t**2N-V9&LXR z5=1%+z3O+uQF36Rg7aWHdZ5LJD1SlHsUfj4f=Cx_0aQ?>mzt#2CCRi2Z1;dMMwuhI zZG!|&JzVpwPpDdKVoF|bnmp-YK!RdZk_U&zNyK?I*>pA&$_;TXfJEl+2l@SOrxD=P zZUjVv{+HUkQB>0fzm7=te`pFR>6*B`*ka5BVN9d>JsD6xsvz0%Xj|$b)PMDvsD-IW zF9iSNipCxXhr;)yNw3iM!$NTKEZe-ZyU^Jb=(-`3k0MQuQQkq$E8voL{klTsEcg^c|` zFPsFwh-i3-AhmI3?}xWcpnpBuX$c+=#)U_dx=&nkU2;K)PeM9^7t#sU&~fbzRWQ}0 zWilt#c0w3YJpt-X`X^Ya54t38Ehq5KdutCY+O>$*7$LNyhjg+dFjIy{IZMHM1zSZ4 z0d8*LZvuq+XJNel^u&!?X->zB{@3s0F3i3U&?5$_$H_dX0VT8=&lR|s#O)buIF2UZiJPJ=ZJ5$@``Y^Y(K+T~TF`J?aib`K4n;;J zeNQd1Zcc8{tYeVw5zOeH(~CYik5}Tk)E1pk*(A_Q16O2r{fGl@HlO@=HnQD`G)fD= z9rUSH1yd3BrKM_fF@G^-7uaO(NIh=XPSb34)4sdMnn`>sz0<@;NN}<{SargHCJCtm zBFEyO>YH}!2^Ig@AZ?(MYI#AFTnDA}2L}b<-{XR5kmo<$hG4^^(RN_6X-Fsv*}rT9 z8}0MK3^v9ShX?~7?Qze6vqhEgar?wcZuI18p%-%|G@x@l2!DZeE8RQP$sRy2QhTt<1(>SGlu0_?OPV^M3XvS>UH_PZ zq&o!7!#`8js(<}vBDB$S(^jR94yS1=y6%2hJ4IT3ZVE*=IR9;OfhIa!a3e&}wG4Xj zO$Z}xki=KeN}4=zG?0^|yqk=Jw%?hI0Aa>$lgVMX3HCx6?o4}UR8YLh~Ni$fe8@pMVX=A4+; zfwqqfLH$rHo&*9n=x|T))EWZ{_OqC@9BqP9;X;Y+lyGedmgMo6T5xGxJ+I)91{YniR_xuOfFdwGUl~!o@f}7pJM>1Q5VL z#c@-5VKC&eXMdZXas|FmB?Ko4CK3u`I3Eu`sP4~Xg87@0vGj1u**2)pS-*F!D*D5x z#D7MDK-~vuO8_70#@Ytim_~v|4G9B26p-6OD^n4kudlC~L;|0=i)HFp*pQFW-ToaW z090=g-U;9RJ;8>eh6P6cCi(b`0F&2rNXispP3>GI%x~16=`&J->X66p zwOwhVh+5$;CMX&}iBuwDZvD$#q2OB8u78kn;&Z0uVmS&fq0ylXYWeq;eQI|SSEChC zC-4pJKt^h%=xF%{@h3Dyy`kJ1CC*NdH)3E7m+zjm`1M`Gx(OOM|Pd`8kZDdk$Ok5Yo8zR`#1_ z@iAGJ-h0?=Cn0>&dWkKb&JRkHDNYYY_leW9Y3R~V8;A;-NziQYIa0~~2jSW1^8Ebo zCL}A8bMxJjcF80fnH-^&%)F4IaDUbGsQDvix`aAgG&ia5k|cqfI0Ij)hfre@vDJMR zge1|KKImH=LNo&BC5j-@c}2XUX*z7;m{B4Uw5rB<*xUU{wuO*#X{nwxFp@~a?t4u; z|B&)};^HRsm)5pJOZEAr*!yzKe<0W5Sg|7@E2KCjQku;|wG-Lqq@CbI5P#K&M>!eV+zV^nClR3+KZTP~|>UB7fVNO6JX*in7`? z%0>v5``(UnkUMrF=TTLs|9l%ymL^#j`*zuOiQ5Es-$^0eZa8ZW$udFi=|(B-9fNqd zw$aY0;ab

jeBG{Vp@&%qy>0mKgrF) z-TL81pC+Lj)V2^n&_KdJSu_v{Kk z0xo`s4N#QL2DHK=I>XC)9B6GvlpD=YbN(>;`M4iKxoB|_EU(Fk9)_-6<($sdkv$~? z?!eyipXi-{j#KqO)loZW2UQq3Eb|=S?#;Br3J#|O=*Z7^Q3co&zP?eqqOMCgItdfr zt4%(V0)MNbMuaNJpQ-tQ<&gNV0>-*=JK+xa8T|+UJuaD<5_t2>Y%9$K%L;4s?LH|;^mbIJ zfPYS(np%i;cK%jPFt2jIG&v!YQpb@~M39K{Zb~FU?4PJj6Y|mbuxmk1C=jXPyFYV+ ziAwxjxMQEmm^N|M=ys_ z611o-g4M6J@0H7tswZDFx1SVA)q9n97Jrc?8gF;4snkX^6Ln|n0#DaOEm-HbsOvPH zk?EfoJ@n)`ln9T3to9Z_oRx$jvf;v@hvgQ#R;{jL2mKF=j3nVS7hIjXa)O?xs*Mz5 z-MdR%glsKZ}CjvHZg zg~r110ux*pH*}5nL!*BP*;BZ7r|t!c_iC}D!j1_kbN53Nwm~Be2UuL(r)Snb$MJ-E z%NR;mClcB4%&JPE*2R!`!Kk$|YG!YMl^g<|+VB&m_gDX0V=u&Y2dY%qvD!HWtR z`X&K6l&A(t^AorShy0qZVcN{C!Pe3`zkdCq19l<`9!HQA;liVG>_GZ{7=MJipwJKH zTStl%+Kox-Ne3#~YRH7rLs5Ei1$W88WRWr@HPp*b=%g#k^!fCpg<4vvo!mdmNe)nf z@ZBC-nSEYCvDzg0(cJS|2qPww*OY*fab@xuBz}h@^Si=A_un9ufhYzIJOEvTilqZ< zk;vtT4(Qa5BpU~ni*btMI)C})T2n5u2cYAC1<0ZJGU-ZP*LD5*^XDxN1^J3Il1#PX9#`%-wg(g2hlz&Vmk%9J`YB>!khkre@=+DwMISVQJ{w|%+b$)2-Z`!YmmeopN)ES?P0c$d#Mv9Cp zRHm*}NRIzSfZXI(GC5p|BNAG2oNmOhC=L*ok5g(*VtOVF_HRQTaffMXu2gJk$+VEpv1pO%b#R1;o2N< zzt&(=CSuN&eUogfYqQ7T_fAR#HlytHxm`!-GX7=TN-QBvT1<3-#in6&9I2AVUn!Vt zOY%(f?I2@7K2wy?xaX#aVJG6J!cdKdp+$ZMVZpTCPC)dM=hq2I$O-(7V+0tl3&c!G z43y*nsNJt<6@N)9sQwVVo8#KVdOdx_zoR@9Q@gmK>uL}WFC-xkBC&qHL*P@s;70o) z&p1Ju8f7246aXQ^5M$4adi^bcA2LjHdI;2-ab9Dzs1jem@jxKcegyqn01n!9V-I$t z1nmUn^Z-s0|E?OGl8VF=(pH$;@F^IZR)WjKPa5TR>wlmh%tp!hkhK3$*`8}~u?~|z zZ{Hgd&49WRuq<3D1&Qc|gYP z=ePnvN#2A6yTT?3{A&DO40^;?E7^3UwwoKEsH%T-fUd0e8AnJ{m6LQTF0W&gDyv6} zVKP;88>ERxmEp*YB7oHD)9m_gg&E#V0f!^{ZGV}KS#CVkwR&93&iPQOK_-kTQhW2Q zO(ZS5x0ajHHK|GX((#gRIRTiIDuA!=0AE4-#ZH*X6x3Twj%-oBzq<&QZtV{AHVa6| z&yVTaCm~P@`a0b>8KvqW>c*d40%+PL8$(k2xpy1yob$#b(C3iaWqopKviX2}LEW3= zYk#KiR!yX}@}>8pgB*cAa0uyc>(5@peYorU>ha>{tbxM+arfxBjfty6(}ix0yOy1b z-a11~hisTQH=^(fd8c@h+Md)|=*dA!*8hLb&R{um;RVIK0Lb?O)6KNtmF@H0kPEvk=lwQ*mx!R?;N%sEpuj}kTr7)IG zMUkk?b+!qHb`%16b~t3h9PsvqCEk&`$*BvbYospp1hRAK;8W#HN_*Yl97n1a`ctv% zHrenU3yPUUN!0MY>h*eEx5(LqvZ5X(ML*C)o}oRFUNY#*1yJ-B>k%eVtVYZwVSg*d z+zSuN9uk2tcI-45K$CDu1CiomXkEB>o!%2!f2Amiqt3y`L6PqoVkAhLSk#%ydblU_ z&=EJqCMbRF_ReXN$wmI$za#rPp)uA2=0q!`RNq8JyT6qtxKdF+oHgTUweGt~h~1xq zV+x3IIPrUOW{7TI)Mr7IrhA4?R)6B?=qWU}7jl||8FYi>?KBor_qDu|IE~ECP7dWM zfK*2-iRPfHJal%W$W2E(r(iwewmUcKI&9|zoTjr}xB2z;RnXZVh3F-IzWS%}Fc5JKFYHEQ|tjlC#G9TR1svLD?Zd1d3o$LG6=Pj_JUy-38dj{}tAGW6h0)37Qr z(6C-AD(TRi^1lp~kF=iZY=5+%rVvpris%d@`wA_LQiDNAO8`D%QviEukzP&T8?s|b zw4iCe{+>0uphH4>QMZ&--M7aGc$8EMeN0{j&VkoK;1^6xkmrZ<0MQDT?hOh1+?XW5 z{YM@Vjz-p>@5R_XO6>~RY0AQNcSN(0CP!_-DcIn| z;9*g&xHLh+R`)~i1PD@#rg_YPITkglb5gC3=y=94_I}N-L+=N^3|IxV%&X6nin!)G;B^y-a5p}90WW+ibq9^5@2%r*%Me1 z-T|h-hDjZJh$fL_sy0&qt8?R=7MAl?F}YR<&(flv%>5?a1}$)MA$8(J*TKOx#HoWc zMr+b^31%-^U`nA8w@>2rmcjM7G2Q!uV17b#5_IdJYS4B?bbs+iVa$}qmR3(*O0e$x zp=>{U;NTxciXO5zsxr}@lY6nFaeC3Bh0?XBvOfx|$qy$5H%>IM6I*sJu zN^o+KOm^`XOd;t)abv-0>@B%z8qwtuPfCkkJ1y8Kk0u7v)Dm?x(D|Hfr1+A+v{FKv zC~VPc7nG`T8Z2s?f@rWpq(J=4E4%ELI#rWK!=WPWx_|9wxWk`x8BHtGQIn&f!(KS3 z*2f`AM6t<%J&yU)sBu7e@%@HtigaDl-<`NsJ9JD6FxUCpgH7pRm%l{!VIM?$P>vFkx4f-dTJ&Ar-|;ObO@(IQmIIiCZvYJ`R&p5y{NLDXep=SPCi1U zGw7QDxfxH03mvQp(xn@Csz*pg(ElTZJEgo%izYWMM4~r4NjE zPJgI4DoTbT{1L%K=UIC1hsFyX$aQUee}Dgs!4telUvz=v!*8y|;73E1kIZ1iI*Z1^kLs=LrwQ-7eYL>X!@D(T6ZD1N1aRUB~_pq8VP@C8As zx@nt4Wjiq<@5P!15uC$$dM8hQZYr{9y2~9@ldG>2PSU$Q*@8IVs1%*yzQ@M>W}0 zxGq=^=2Uz+)Y(P-1cSL~g`oot0rA43&^^oUtwfRn_ihn#{zg{H#Y7PD(0`gXMAS_o zFzQu6BX@+1!+x;+yz#xMslamjFmj1^=YK~+(_~(vB1zZkm?8IGq{teFQ2i8MZp7U^ z6i3~pKSU;aLBNc@D@1kZ4$~(U0<2cRIbzk>|F-kLAUODBoDoFFIGvVguSR1$o{KtQ zD}||tB`uot(j^G~5QZ#3iwq0ktTwt7!BtDt@p&OEw}!OMmq6sF=N{?{(|&I;%<)X(TIV!sjh$+ZxpH1 zV_fWDjE9Ww`ymi>`w`G_6b+4#Ur(ASZh^fdrl!G_3gOse2r22=Xn$~|Ul(~SIV8v3 z_cVwSs7^eKlZNJwKXPW4DlO6X2E2f_XRk3IVV@e!JRQ=c6PWlnTbsi<-~9vu&bDn3O?L~D6B%@AH{eDP9tle?cC z_A~`7ap6Byfu^6+#DB-MLFo5$g-+k7QmVTg-qE@EZO~Z#dkn?fv7uKVg?8_4@~086 zBrQO&kOhyWxXy=>@2G1cH+d>RPK`xf1LeG;+@U^Xq*b5`?LX_&f>bETU?e}zZA);Z^s5lBuGr!#C zn4%)Y-hR`oI4y^P(iZ8MToQw1OUGolt&`MpNWXHE3eR|M;6gb6ToX$4HejqJo@gMHQO6 z$PA}9QW{O8Lrkckc4f;IKgq7%={)3j*Tl6?v;x5PNadxFR+rRGh?$}xG#2d|y&$l+ z=t$E18Ort2;#mLIE%u*8uzGNjFN{O(U335ydFtB+MSn~soy!%5D0-k}LXI7p(4VU| zdr7dZ_w~IuUegq;(Evtv0%C(KC9i9PP_fpuVF8u$(2U%mQo8y?y@hG+Z4D$#2&V-c z=)z5qK1gaF*Yir9l0vpgtxY1;1piGM2%?Kz7p-G&2ODoC?mp2vI_4Uz;1PmMft^a} z!C_}@>VMsVpk{Nr(MfSZN%!TZm>m3^x^P84CLyR>*nRw)VA*N3_&S*Kn&^|OjjwCi zuX(JM=u4p{E7FL5lV0?gb4YZVbtfJk+=`-j1w8n18--hV{N8%Xz`gwm^PZ$pHUmJ3!P7Re|2 zMbUKfYD&d96%CYWIr&f-hJ_+}2;oCY(4-G+`?#$4qs&i{kl4n^?R)L_OJyj-r0kIg z*~xyRVe416P5CbD02OqTV66cKWWz zNED$x=}=0anWo7|=o>oJN@$Nu!9K`Ns(*o2u^u!u#aq|8BO_OT{2S^1P!+(CS z%Z$eN;%I^a4QKBT;O%-{F=ycQb((BW6sMa$qXNlwM6P&h9od2ilE=8a>7G|W2DkNT z%nfnks!w^j5mM1-t=yPA5By-t+21+3mq?MRZGeNc$zi)88!PblTaitOmE-j%pOq=` zx{WSlNG1I}rI9|M=4x=^9t+lfD1W)sd(xHBu*D?U4=8oH&ynX@2_e*jT)(g8{v{`0 zC#)rkh$tVI@O?s+5&dSG97JEHB1aC}g2JU}iqTmaBu}A^7Ii5Aq1FQLfTA{H+ zGzKSe6w|qBpo#8qG@8?gz#&-FohGV7HpDIcU7L*lUOS^xvdvGCIC^O4_4UtmLfk3W zYbvyE&55SE)9)nlc6ZgDsDDkD2j{*wP$)=a8HaB~DM;(%VrPbZyux{b)Cui}VP8NI zGRX=|BU8gWh?+Ra+$uN|$X1}7BtgHEp)I#Uz-i*9^U7sUP88G0B&3m>{MZfjVveTa z++JY}T(MAgnUiD^N!R^yQS@msQUT;TPj`_7Z8@Ecs>PitSxTBss(*O0#|96Wu?wSa z?4SsGIDxuNhAh(c@1%5Z=hW)P%lnH(_c={$XeVsCTJ(6(&yM3s{SLq$mjy?C^omj5>IcqQmbvDQGfeRg@r_1XQW3{aGOqv zrs@*qm9$yvlI$qDK=&--;T^TtDI|!iSm8w_ckhjQ>~RdY?gsP(kH|;ctd;3PZP7VHCH|eOdaNn@tOYdIN_~?O^j1B4cQ&B}-<%us9IF_U5 z%N2a84vLwSp?_%6mD6XXf_FkVwK#&JxKa_Pd0kU}V)70$&2pt{Pc%k)mqI~Wv`5pL z3XM;}nYm5!-4nO{y3JWh6N@qH3!Y2C6lf)iO8>b-7nM>?8lKd!1g%&>5pN4IVj6&s ztcMQ}ReZt5+(Kq)98_T}M2A$3z zqeA_j0UG_tNUzg`CyBid2_pD1-5=*8;SLmCNAHf~frx++S~BIdso13FaVVPm9hYuS zl#qn8R$7zcu-|-sq?^S-02-}zkh1vcY$%dTgVzN3>p8*p`2YIPdJfmrb*BPFX`hb5 z))Nk_lYf0MAZnwD>5aHvA(T}!udXlwCi`*?G|3j`+ASvNeRX=F;Dbh{gO5GVygL;P zYirWkQ8BCg>7WyO6q-(32K(dIJjjI7H5rnosbx1krCxZUv57u)ZlV>$*m$N8{igf4 zD^dv=BBc1Fxo~^rZ--t`MM&9E1ZjRC2v$p*5q~vFp{x^Xp$LIn5R{p9lB?n-gXE=k zD9j^cOyJB7q3UAo%ZP5@8izG`;pn1!yVla)LP$eQRekp){9? zxiAjVi_jH9gS4<}2gsTVoQ5W>529kWSPy#1lkr>ojw{7hfWt5%T~6$(?M-fm_*N=t{eIt*Qg1ySj0lyv>g2%%C1Yn&Yw(!og$J#I~Fi5R{|muwLQ^} zVGppAjcH#X(BMT6fg&0RF76dMBxKho8h;t$4<|H31<|RqSJaET2A3r3bTX=ka2#vu zG+d{Z7W9zAv-u-Q0aehM*c574u~R;g>+mj4vahsmy08xT;Zo6?qH%3x-aYfjeNyd` zM2U=}-*1niBd-xbO=3}F+w8;DfT#Sn5adh6VUaFpLd~2N&g5@& zf#;M%sNBD&X2~IIuK_}L2d%9h`+p)-IMA6AkvSQ_ffcBQaxTX11x_Ytrjtk5e6m8H zia6?ETyc?#AeXJ;#NQ4zQ;75=_Jq0=bGVEL;AFRM@{(*MgB<3#;L|f|E~G`sqM5)# z%||cnl7QD0B*VLBg_K=DJrx9`7ZE){l~IHzadQeNR@grj|D#5TelDP9MSoOcLWztA zm@Rtfu+_1`%YSJKFs zg0&oNH2Bm}18d!fDTc-sIc|Cxnv9x^Kof{D71xO}Oj((9MuzwvEPhV%{^&n~D%Y^T zZRh7JT||Ia(^!0wF(UmPM}IvG$PaEB;egqSu@kz^xnB|_OF2Plvq?Ox8})bQYN@z% zUB{^#ZO}Pj=ST-+*Eo1y9aOhP0O;pjF4j!$<}K=k}5dnrvXxI^3BxD?a*lI4>I+`+gKTZeoxO7k?Aortd>4en~t{ zWA6vXh~)&Vw8xw@9uDbDjhRC&wFv3|)e-Iq>43(_Y95_mj6yKzWUEk-f z@dOD4@~0_AH;OLzx~4|Yp+9aQ?h_p+$ z5h76?lrcrTCORgIDSw!C_tnfR5Rfi8thUJ@C(gcIaLJ|Esoiglge(4T?FMnIaPY3c z-!4aA(KWaXu&#M=snc|i+JwGkP8>>%$1>SJig>M{W4lx% z))BSKKXnu_yIVE+4H zci-79^n^~iLrkGNcmb{iU3VdyISfjtgHi>r27@pjojgZsfIllhwrFfPp*=)p5i)VG z>Dz0fgI3erQv{86vA4d6ikAc(3kp%){(hi5x8hzmDSt)Ch_W*JxfofIraUIoRp*Bi zI^#?9P!?f4F`ZP}kPugMfY%hY(b1$}x~lsJ`opLYIfb}R`#qf(nuP}Issd$Onoh4x zAL$%jQRR#V(>`R-T#HW8RI4j~=sY`NB+}ZNw5TVjiaWb#pP`&aiuCB`&orq;?&i90 zr2SKoXn*%}uSu)nG(GMMl35mYN3LVkO7N6-q|Jh^%?X8d6IboguV23&FHhL)>maz% z2F?)&OjB6`SYxG$~FSF`7jCk6vf12C^6i+oj$#(~}YJbU8FdZ(GTAv~$06n>s9?|!%<(|0_ z{iA~j_M3;@08M-u^VQ8U+@Ub3kbwQ=Ax;jIXLP}Kj?PNU_X0(AFzsGXd6KD-N#0jQ zg>hfY{hGyV%;{C_l${Ej$x?&Xwcg`SVVThCnoN4ldziFQk9~o{ukU~Fv{uQ2hQ9A< zgMURHQqENzG(J}PK=f$8mfzQP{i&*ds8a*uzW)D{q1@6h+GvKQW580Be21cIk*Qaw zUAmV=r!&Ba$p&6(j+TC25NT1s=L%C>3vzRkK_v!F-Xra%$Vo@IGZ48qEy>PZa3| zUT6jx!f6{BpMTK%_q)=XFba?^rzaH~0=&;ogxs$!IAT}0N0sP7r%`oOrD;Eq7Sx!4$sSQk_tPxt!DT{j)1nz;ZQJ(5wmq@!yz`vrJzvg$aH{SPT~~M2 z>Z)GXTGh3B{rZYfkP}CM#f1d`00@#2B1!-N@ZTvA0D}4#bR0{~{skC&2~8&e01oYc z4j>>s6B_`4mA4cYR#338bGCD`u(KzY6c#47ceFFJv@rz$+}E;{%~h07FnOQ0?uDeo z{S&3_lrTWVN8hhLIDzIMad^()`Y+B|!s=Ui;n1=2J!6!?wD6;v(mkAM~>;w%D4(%S$3k1ND z*#nS44JIT`AEZFQvo8-1&9`3YZUE4I9u5TPmCfj7#1H#IIu%OO0s036d!6HcNQ3;* z0Ro=ULd5_9F`$1|Dups27Xn}~ZfvvShvv+7>|X6f#^r00a+UR16QH20(ZL3`R&v z-2uUA0Ccfib)FlVYUHEu|1y|dTNS2x*1WQ?z9K$>zk3${^#H63VQ(nVAt7q_LG*O z0oR`!%KztQKKUhtg&th4%TuITJ(55ZAopZV{m%Y>awD1-+qSy;_uybfYEVeqa7^9j z)4X55SN+50#h2&(>0zgPk1T*$H$WWXd8dEkUZx0tIvyt2XyY(O{JjP4>z!c!+n}UT zo5pwaeMMA8+Z@JDG%WDV!u zy(a+Rw!^M(feHlfZxOUR?e=xW{~?}B4)8aVjCTM4^hC($RmK|lhd}^dHVNs?f<=g6{?l3jzeJy^0p03HFHe z{i>~qy!J@1hM?>|s?Goy2*D8$njy(rIMC>q25B@1D=p-iq)!3@HIj^YG#p*=n{*tT z1e4M)6=GEhf?HlkFwQU?vGzFb5dd@GduXRPQ({29BJToxlWkL>XObm8H6b*T~w8yG>>b6W$|QLbL`xXvYA9EmolS1 zH+~|1oN^3)?*@+$iV-v%Zcc@hfenpqj^l=1lPXh;GardFtis5_be4LQhLmQfs`0(~ zyEjJM7;KVM5=9c;cLtTR^5XKXayZpH)p3=WGCgIVYB5z7<^3|4h2#p=@+^fjWjtl` zGVao_a`RF<75+kB&5sBu%>kJKdEr9E+&caJ&LLtrW1I$eS`ur7icpsTwn2)z$yIOH z?;WWh1RasQJ3VFiDvxJ`>77kna*-BM^q&#cfP;2(66ZXsPT$fW!jib zb*#&iQ<60*Bq|gu#Lv3et1n8jin~NRG~WUc1&5_5btuKnW2PXpj+9rGH%nkkFlBkU z9;)fft&8yTIz-%hY)dXvv%B^Dvt{f`wmiCyUh#bxK2$z_zLq?Q!)rh_z>`6(!%t!J z{9$vj;~`)eUcXTk)*TQKE;39qOxX>NYn$aMSQPs$h7@Hvq_a=9|8wZ)Pyq!L1qp?; z?5XT!x{_>LF?BJw47beic?cWus_3GxI z%|3?aMp))8f2s#A6S@+7+I@b1@IoVmts+(sXc722H9Demsc~(kPi0>6`~102K4CD| zm`0vnVcBm+8>b$$%u>#n7dOW;Z*vN|3y+MD4jiXX;iJ#M8`>P{I*@XHaM0cLoO{U1 zXvpZlC|$3)WWTh$4BN<=V9lY<)?{&-85j}XQT#j050{g~XuVzOD=#b`VBT~@%3#b8 zr(U&O+fw9K{$zNC#rMePn6uBf&%?3Byrro>!O`0?(lRbTV3(~QvMuaK`epLv`85kD z@h1nGgGU4i255u5J$rhS^hEP>t(!j9uU-g7<+cf82*w0f1^(@;BC!}bkF6qkI!c|2 zo3cajbZg{KS&3sDc{kG2ojz@24EVRM_^5O&%Yc@;?(*~&0ylIN_U zlVbbMS59xmv&PZR+Ri^jZ>Bl1sF9^1X(Nr#N&mf?-PWdi`~BiBY%gmMZr=+lm0?8J z-Xm|S|30Jyvy2{?`F@@QC(eu94UZw#~Sv*9bkI^PN9 zZY93Udd8o}b+UPo{b4Dh{o58ySr*$VgCMh+!Ih1f?n?ZVnU|}JDJVWJ) z{M7u=%yqodG^GCXk8NZN17Q;MsC7eZC8Q=DY_m}Dv5FSe@^|QZb5nJ*p2>(Y&g6=0 zn#qfahOzZnj?Al^uM5c2RiBS_kO$jRp2K0jd~0~(uZ}1`c}{-&saqxY)8S$md=C5rniR2lxou&QV2)Qs zDQ1c0OdN5TsQWYP%8d?z9YOVX=FlFgy@6CncEnroC-%BbbqN#J~f`R#O6R#KLaFa67g z!FqnP*OBqmwiS}yRXeit?wsgX8lR`v86F8!aU&Zj(|3G?#9 z9hn{J)onV~ZI_;1Ox`Kc>bz zR^2Est2*U7_3s5P1XqPO!xs6qKQ~scHvFu5-E!|{H^iTyLV~70;~rv=gdtV-{PZsRIPE>d zsaYTDA0q4?b!TDHyH|U==yTg}Be*KqMv_19CibKHvUsU`P@XAyOTbA;_<{gWy?Zxi zpY}~h6chek6B|n?$pQeLfZ9cu#N&o1Mix{{@7}ok z&z9}Hef&PCdIqkheRm(U-thImg1f}JKSQsc3_iPa*3ax#h|E8JXE^=Ef&o0dHd>1Z zK7Yz4TC=`3Q3%2t>~M8E>JOiFoe@qy8Q6QHfbX2~8S_Ek`qex+83^#p$M&ABO9aJ$nv6Y;SMhybi|tb@)nrezqeomuuw= zv~Ia}y}9fd6OKHzfBNVU{XI)uVj2VX*sh*+dFw{pd|d56Aa{Q7H~YPOe8u{a^h{B1 z*Ks@A%7J2HkS~&4Dn_rFf{nvE{a>+9@J{pvdX&z4X6ez+X20Rfb>LfwC;Eop1%&8| zBl5Er8iVPVe0`YJX7jGo8N7%QZxf7^^eyj&d^8eV>b&DO?=AJ;T7zlsEWezh=6peo z?U{F}IR-FdabA>}^7@Q4hA>kUhhq?s%?NxZ82jTNU`TcAKfew-(#7CkZ9jOs z9cG9JT+fhJbNe26bL{#Xmefr%K@!;0efJ@FAX!X_Se}Ppjee24HsPLX1ED7rrXUTs z;0Td@F^B+PW34q_9Rd{`1{o_31g`DJs!#yPU;p zd@34KtLv^-1d`yZKKEmjL9ZrXB|+Akz}FbmjO~ZDalZMF)GAuq3AaalOpS_L z;EE9n&w6lQ{czV(tQx%tO5ilUk-+PqD^Ft%8@oPj{;0;@HF3pnb__1q-~P0}9PmX> zlapzw1!ALXI${6F)J1BAteun$!Uy(V_Mx~Pn=v?2wyL@+tpASiOvlDNCZ?u`+p)j6 z%oK#u6SEG{YXKKRHD8nTBjTXN27DaOuv1VVgDM90{CC^=&NqpR5h8*RF-9N2ZWCDR z{;21^zHZL_(GB{kk9FA{-2=zh_Onq*{zq;%a0KPM!_Su7OzyQHq)vzT!NUL}!NO(Z z4$n6DETrC9@)y|idep?F*@E8Ri8ysZ+D*#5v9*L9{8&4@SQKO*vK-1=;&8Xtl-@4D z(BvQ+B*suTYsG3Wk7iAl-|0#2dX!Z>^&e9_YNNiOFq77LYMbgjh;Ws_36SeHq>%pcC@M-`iWl<%S)9h^O!a4Us2FMJNBI*B8rH-U)W2l8w3l z;re(=*I$28p#~mWZtYp2w;T>z#+>$pV%(*Ca7(j^CHY~ z!!GX;8V=Ub7YtE96!lWd3s63#akNi4k9Wr`LzFJpcO> zv-<#PdM9;ALR(DnDB!wbh4jl>%b1S0kZrO#zpu{Ycy&oV%Nd6N)D$8nc0S=Mo#rPD zN%BK$y4RJ1>e%{qMmSW4cz?e8NW2uIkw?oMcAX@F{5fGeLT zMp?()s29+iXvByig*QT&hiU{Ru+HvJ0McpzP=TqQ8fe;p&q5iIsAAgWRp z6T%XA2VEh~siyq0a>k_K-JH6C)R!ra5pN@Y83I%g;qbL2Y;qW!(?(L`-k4w$Dl!*) z?~<9wcv)|@Y955^&xE`QoFt>+cqS<;-m|N^Xz1g0kgym1)<7L#Ts=#<#>3;25jbRB zZckyxY%IvU1FV|WV4ttqrn`_ggSz@0LyCqS8DV=$dSR(VJ>t{WRL&4{PqjRfpkg3} zh`a?<)&sP4z!3GvS}V+Wx~$y_N-=y}0)zxD)|-e}S-drJ)Q1SpIC!&XD*t)Ue?d=piJVuztRv!(Xi0c=-b(xW*Cw6@Cg>h(Ro%wo@x(Q*ZZUfp`)L z(*Nf)Tv(5dnvujhj@!ue2hvR>3DQ1GwxJbj@b7Pd;!W9dz(hks5)-EIHhBB6TH;;j zNaDy}?|n)~il-jU{$@caREv}uQ5*@5APqoeFrIRxvX$MvVx!sBHJ`5=LYrNmg0ubvV6RiV7VSOY z2bXJZ9pLWh*ou3+VCeq3u76_fVYH%dqU;ClU6(WYFvbfw2n<2(2p=0$1f=FpAjNRC zzqlTLYTU69@Ek$dN!A4#u{ zzGYk);3by+W}0d&u#v$}K#G}NIl|d(+|gPyB<%Etu(fq9y{J(?f`E~wGWb>)cuv>r zNJ?z{2hxJI(qI8ny&FXsWI413URb12W)7hpv&Utpa_cL3a$HWL<*P9YqVXPMJei>F z9yq80>#gB@kXL8g{<=VuzWyN+HM=I_h0TcYVQ>i|G-rkUvwL9QxukvT>z($~B{blO z(SA_&Wg!xn?AglrY~#XYYQ(2{EG#8!wEG}|#+;9~7SKYz9`c*)_A^puKAHr=Crmx5 zn8;JC{aJ97wwF)`IIksW6y9VWfX50%u9Y%w^f-i2T)OV&nh z-X3W@Fl_5?qIKxsH+cneLk>|gTSTVBfMoT?I?H-CFtBth768FrbU3Pd4G{~?8H!c| z9Vo7>_#N)K6*rKG0az=#J*0g5d3?%8+Q@uuc0X#jAEeMP##Q#VgQzC$B*A-OPQ}*l zxs|yiQ$nu_;MnjZ?1y(fCU<~uH$7;+Z*rP`{MPPVocSxd)1vMq`PEhy4v1}kIl;bCdBQeB!`nukN`Oib^eCQKN{~IepPPsc--WiKr7%iP-j<{`UGzE6!Yc)H z1LV4%EYCQ(cPh%ceJvSz3p)oIvy_j|gc*oE&-Ui)+8g~)ksL)N#y#*jv(v5OV=M(D zA*LKzj@FsK>H-g(g>u(g(<|B4+7ZFp&tzjOFJF!SRor-(dzOz@r-l7@CHBc&V794K zL{LM#L=&UK0s?+8$)$x9uJl`rQV%icuwF4Zv_#&&Ym z?a%;j@`n~t_FDv%>P8o4M%>dVV@7~7LfMC+8Ztba1xEK$5tBd&nbwVRWH!ua-rg_Q zpJpXOS5B~FLOhOB82VL+7zl(&UG0K4IjEYl|!ixk7p*{4#)_-!GB_ z=w$0SG*K$IvUfO4EF!|9?4`H(0eCivwiZx-1}hJQj;P~LYGk3mvxqMfq$`8_#GOi9 zx*#MBMFq6_n}{M5!sH)A{)k)FTb*3ywtgig_+atiC*81QX|4KpZ2;McHP>w12NEqT z+~YEj0iRi-Dqpuw5fxr`+?tV3Ul9juaYh;+hW)DNyb&9T)H>G=ozo_b;TqfkeI2q&?@d zMh=c)i-=SN74%wX_q~*B7!z0c?w{_A`6v04#y2LNbboj#IEpxQ{ zE>Y)_#Y<-u}MtGZYKZG2G^Yw(TFsRthoKx1i@T$D-FBo+w0w! zb7z3Z5od3pI-|jBSBozo-#+lJ7D0)&0+`pobKp)2(Za5RWrujjsx^-#Q%-{wAV#?~ z6CfquwGK9ITi|LhACGMxC zV(LQsQiC2O4D-(epTFtyhj`oragQIo*plcNxs3sRJ8ORw6E-aa1Ae=K_d5lmS59ij z)#I@wqO*L&H=CaD)j}37tybKHOlX&P0 zJw=1tTSbzi`*NhUfakkq@VLT@7<{p^8;{JBH|c~BG}x_zCOC(gOBN(7d)&%aLG!=! zD`PmFg%Ye;aN)Y*ILkk`zjebFBU*Bts*T{2X1EDkf#(0-GF$0?;;{(?h*Crs{A$$k zgwC`PQ_EK!_>C%zMU*F{tVA_N?kXu@)3fJxe?8Mofuwx=xHfG@c~9(j~VDyfnW z82|{VU&9L4YT}rJ=(g{;9%|&{o^EbL{iL_HcaNsIQQjwUh?D}ijA1o-I6}oL=*{RG zj?lyt&aH|Qkm$iUd`1Il9uA!PYLtdy-P+Zt|YE6AiX!KrP$_bE4uShf% z+-5#Nr}#imhQZ-4S=66Eu1tG9RaRFcZ0wa^IuyBswcFxFNd-G^G_~WKa{!s3{GLxW zr013-;E*xDel+-M_;BN=d*WNb*USWHKkP>o`rg8U0e*0Bt>MnW$L-MTy3GhV(HV49 zvYeeJ0|i|5a6OQNp))sCea%gOzluwm-{lQmcmzL~a~8y(BD7_9BjEA8+pioXs?4I7iy zpIlV#WL1ZoD%FnIyR7 zT=JQskXqp1OaG_~$CQPeTlzp;RZZ2Qmz9QXy*VqLGqPj}e51=Xb4T~|B!b6!Eb`7t zR_V1SF5B2k67}ZQe|z@ucNf??lII`)9kb8vfB?)K5WZy24(${cCyiR)x~GOuD&{m) z_HWfe@lGkGsxmD8>`~bUIw1@XjTO>t0)BFl<^7)gDWXMpi?+8SY`E``YB>rDATb5R zvsK-Moz9k^HP=oJEUl3I6e~O*iTV|>V=Eo!Fa1`zpss=OXN_1dtJEC0Gb$|C`S3#N z#2d4RXsh)upCpWU@S!HK@hgOE7sLY(?;V@`WUcZ}=+D$FchiWFy$69mc4#Au*L_g>qXQ+@X0IQ7maLgx4$4iB3r(B42oi-czLq#o?H+4@ z;Td`APX`4*)68SmNhD|%k9K&9d2v+XQ?*wWAS_VT_uOGZG~IGt5}Nl6Lq9SAb|iRW zF1&TbXu9KnYNzXcHTp&l!VgQ7Hr()U+be3}FFE)C$=3 zufqG^?x4KzK-ts)yfqd?2QkCaKDC~N7uwW@>W2wib9vHx&$E@vn9j@YjaP}Rc zQ3o9Hh7JLwg;d3vs3+&(_-nH}vqK-Wj39Kw6o+YH2X5rS0oeuN8_g%SzfgF3;f!qR|G-+u5U1d|C-{^u zS}nZ84Pn}>ise#xb`kVE6d^vRJ&qngyhRBg1e zHpH5j9ulb;qZPCHmvv)gv#k5n$Uv6D>Fx-2G zxmvMf7|QL+1J@0l=a~!l0;Xk|S49}}`Z!s2R?N^$#JztnmRm6iy}?gNVyA(f6%+S| zUW}~y%=AHl2-eteEl@fr;YYfw8M&GAe<)OB(JW9ZZD#nP0j|TYe2K65nh!o|m2VYj zWqw3-5IFH5uL%2d;1}NR8!8uUed;9Q_U0Xc5Wj)IJw+N1)F3hg>E$2R^MpeoN!k?~=fi}j%muW;dy&c*4)9%-LirC_x1Tnwx1jgddl7kej zkyvX-+UF!%sayK;Q}9OA7l8sC!xAtsKQl3{pUn=@vpVe_x!D*ocA|BZgN8t4+*RQj zeIn6}p>-#TwG(GfkQaM}9g@gl)Ph=^P0uK($3rXePjPl)HPd*q(Y>il8#^TD)Sk2V5SUr2V_=23{U{ME zn8f9&6jw5)6=sj9+NQr9ARp+bxgq>T-M)XzForNe);DiyEV)X7)Y$vZR-hlvLr>$I zB@PxwfUiOE-D0s84j&;}h&$VTvcl$dAK*WrUnjmK@0(web^&P2u7~FPxG5L~t=Vc9 zE)Q)b8rlbiiywNc$CfFAVH!ZBK{cnLdDUIunTXSagVt!Tk}%HI_BA@%eQ{+_*E>`O zuNCPXW2YVkRDLO-{}!839mH?a4M0N}u_otl{H!kH5ktLHnW;gnE2F_FO4wPkAsVP& zg}4WFcJ@AWJex}cK2IM$4hRULQMNim)^i6)S7DGcz$r!}XK~H;5wB)?8|M9$O>yy$ z5f7kP;eqk^QR$l8A%Mfz1A%Yf*B%42yjzyY`~Vs8XtRE^pN}_WnyZ9Uw zSBXtZxz<)_Q#$e002SyAX9hME%h!#G#7rq4;Z-Lv?}{hwm8+M#_}%%0BYLNYD=9d= zsNE3_)%f;%j71=&qhhyhO8-1e22v9ATMC-x-%#_fY=Rr%A2D^#yTbQ%JnxClIofiD z)@0`;=a&rR;=94;ADRp0TN?htGAt{>ey1Z2HE?1FY_$u6$mhAg>Xk18oZt0HXCp}! zxhYpBH&hJlg&zuDp%XR1RaA6G-nb`nb2re?xJnl%=+c;Bh#k3tIrgBp(?HDm@ z$RyPYGpbYp2Rc!HXt2*xmDc^*2FRWD35X3Se6!n6Iz0Z*=LnnQIR$TQRrUiPJ}~Tt zR|W{9!Q#aHb*C111C!C(*@yF7|BYhw?__wg0TJ5oMLcLwh_0e0p_}RKnVPC`YP35W zKbs=cs}27FJ>PV;wxTbQ#vY-F2u5L5iE;p~jId`3M1hR$>5D*E+)z$4Fz3hbz30)j z?mc06yO^?lUl8LM_*OFCMkeq(ZYH`|hXu0ue#^Y;UGx9}1GiSb*F!6$j512Z&X0wr zrxj}S6b(zxI$m9za|1(Kls~>dZ?-f--MuyG->x9b3cLqaEJju1c{h{{q+Gp18=j%d z1Gr2lj*9(%#R2H7AK0nLWpu&$x7~rsYWedPYF_=BdBEEUke9nHFzRx+PbE_P* zQE?%i$1w@Sx$-F`62!D!=m|0RXfR=O^6NpY9bfvdvO)D@w2x{LMw3LOdmfJ<2}Y`R zDRMnR@14p07$g<4D=hI<#?1A^-?T7mCgj+B%|l^|sd@=5IpXdL;_%o-;Cae%<)BR4 z;?8LpZ)-|?gma_ZE5je0s0DXaqF$t}a>U<<8vxm#+;Qr?>tP9TtmXKuy0Kk`eoEXzX{OwuS&ncUD1eR}DYxb^P`C9ht3R zrVH~y*w!l4evg2oH1n)3c}o@yd4VDJP|`ay=_=p*(#Hcvvhfi9YpXZKzoCk7AhLVk zaIWiITCV2g)Icx5fUhjh!-IS~FXeaAALKeFwDme@5hRYvribWc6i!mx*V(2n?0@v6 zL(R<^be7+lDd=o^x2K+XX~4HAuIzllW5!`J<2i#vjx@-dX}XHGSq9I|LNeyi*0qkB zAI0z>DxJ1Sg!dSHfw9%r{jW|=#O}5D2p*QD06%af6U-n;Nbii`^x2* zOrXzSz3-R!zAxV|MYHD-WW)>dbU#|b!!ZZvB{W+T*KsW9i{(ORIqLL+%gq#Rnh;Ca zR|=Y?w;9-@RNu9d8Rs3Wnvv=LA?C&Y^VCk2s`PqfDI>3#paLV>%zlmSvBypE%6|fr zG>H9c<~BFp%Lgaf=rbQgbCKF^@E3PAcDB)BpUQp60$Yikzp8@#X3e$}- zy;bx=dTx^=Cm!zO+C963)5_bEA<=)7g+3ksy`0vVhfxvQePe)RU&==*>qmm6R12>8 zBzkio8ELAQRSa%Z&DFt&^^9p*mXqL3qb_}-qyluRz?M16k~^KuYir#v>&HIUO~sUS zJ0vukxzIjybI5^t%87LP@i8Vu!c!KO8{W(V7TD2p%nGrte@%jko zs;2mn>T#knh&wIcOf#op0g%J*hEimB)(F}4m_%TD+=PSf4O8_jDj3)$>Fn;-jQxIqRDvw8U63RXS6L$$6;VDHhIP@7Xg9i)U z2)?T}-+u{a)g8N|mwbYk6Bd=zOJ2Vpk@xwww&z$tUaJoeW`LVfyl*sNB^U%?V5K9mwScbqot&N0cMIj)t6@}Koa2wH~|LHW@y-}f7 zLcwAG+TVi~Tv`w2vMlu{XM!Egsf3HyinN|H0+*#qrKx1CYZy3XFqBv-Je4^_e0Zq% z^GsBXaczTi#QEWFA51XRJ_{?M`GZ#0yBwp}Pl;yd(uA)R!~bg@_L-v*tlPIqkWhx>>EaY?4cd24Ehv^sjlT7O?*MOS=(_PYLV?={cq3 z`?e+I!EVHtRuy2~a%&0p$4vOY8xvjU+_hY zy@FTyFGal&&A~o>?kdHIp2Z!`ks84)3mvw!WVJ4d2(W7O-a!@EO?%=K5npO$2*@Zt+u&#^7C!27s4)_0m zs|vt&@h(3D`}}GGyymaM=(X78SX#gmpW1Xgsy~zNEWlvgnunDb6Z-nC1>6e2zOsZw zhmD3ueYe&EHd0~?#k~tx`6JZ>`D-xjA$C43tNas&Q>`I$&BbrxUh32Yd?2=$VGXAC zKL3r^bhhS@xQ;wssN4b>t0$wJ?O7-E#SVN zC=KAtMGL6kqu={Pa?m45;}3lCtj6f2EAI0&Zwa~Ar18&Kd*hd<@wc;pOl))S5teTR zTWKionT5?g7v-Oa-SJCR>s`J|exzgx`hu_Wr?l$-*JFH+-6+J%Ca@o81N4E#NzUmA_jfm@g*a|HHulTCb!arU{$@3MQ2kNpAI)9p-O{ zIoe>KG^P6pTz}0)bS6~8c$R_9BT!Xw@Aj`l;v_A)%5K#efLE21=;sn2UZY62h;Y$q zMCK##y$IGRMI9NSak2!D)@7uL&A?h1Cm7b>mCsS9g4&|*z!-xUAb3mSDAe=~3QXje z)%~XMo!?%eMZsM`$J}Ac!9*TBb)>W5{0LE0H++`SMk%^XWIBPE#yq6>OqrW(CGsjx zacj=OB**OcPTX!$nUf?UBw9(<2OpXjxyu?-&!gpHI-L+l&&TwdRt{mo`nmWfoh#+c z0jFcc=1{Cy9z>*3a-NA{an%@418KIyNrG98FCs3pm8U_?gnwMNN)LP*9+?-B z>G&&6f-(3^Q=QE)w+(OAfji5YuO$_!S6`127M1(_XRn=^ubJuMW0%b9*W?Q_lB$k|K(_YtKR$oLQKQ-u3v4elb*! zFVSMlVdTK>feNX4BwkY8cZF59T4?o$oB8Hix*3v$c`?xsNTe=&y-yBkK3;d1+9J~3G!IsT+KS?P`RR=;wIV_3 zLbTCmWr5 zzNxfbWk~`kkh#M+J-1$gD)nE5%3$k)@+_j{fNT)XH=g+nM{OEl@xV_+4a#!^(}w%r zR!G(|ciOh#=UFUHO~NMt-L2`ulI2@{udMfl?(r4NYhWYhk|52<(jNnbc@c;qUhy2v9yS1%{KDq`WY> z=a&=}-Vi+epwM;4rO|_3oYPh7BE@Df*nbu{*^` zQYWCe_4B8*Cpe-OX`E+6Vvk{^*wznPH`$Js(KldzZ`-2Usu^kNip}U-R|OnyPEGrE zw#Fh)ai(#gwsbrf^!m4+&DZMElc%;-{rq=>X%hL7k4P+F+#)Pcu}N z5t@TAm|WSSP3GDn>PHHiz{Pd6_fUAcn^+Xv(Kl#=px<){lewv>Njk?oqRbynCjzF2 z$L+#SR=EsH1fyNmhI6S*$XKzJr2(vh=v@HH+clbw7f*9pzrq4PiYxPA?w?RCst|;g z{!c<{uC&;B;fX3bN9PWJHC#~_uZwz%W34H?S4p%tiJhfzF~Sv0pfJT270zU+gLwe- zh|s0M4@8@H6l4gv-tP^(k5;z}x3aYNu-po3`Lr2`=V^lq^YK(JUU~PT{-6+@LfI^? z-B_sZ6^k`xUj%wi{ehe17}w65NPz&3o^xn^$Lv{78iYI7hde__dggXxq~xE6_5sOQ zy#XYnQ*7YW!bDo~kDI8}G;b>V5Jc*&3KtCwlcuJxi{3 zcGy|QLQYU6tTp2M>5ZUvE|&@f9=TF~oh4(VH5S=fCA|AI{youeDCHx~jZ`vLx@Vd-fe>lzx807Dly|?gb|v0E38Tnka&j^=Yd3D`Dc7un-{Rf zd;Y$kdlTEqkmofF{L%CW6}Bg1VjVc!Axp>&^{v(qH-qWmBwnk!KYF#r2I4T&I8E8A zuyMO%!6x`bOmS%#pDS;)3Fmjn)(F1pmwcyRS~=#4etSXo;e*C4$FNjwcyGFf(7`>;JiaJas(fU7Rj>ZoS9C~iK~nk zc)I`j?|=ULpa1^nzyJB~fByTQ|NiH{|M~BK{`;T*{^!5{`R{-J`=9^*=fD5?@Bfed z_m#|{Dh8v|SZO#dJ)m@gt6>}WI~*Yw=})Hme~RQ5S$cS|()aFP zBsw6sMKs!GaeMbSbY75vgiUbTvM^#1YlUi6xr=Ge6zGh&6ZZGXeB^Cd^mX5k&R{C7 zbJ}4C?7AcXg?x(=AEo2`7s)Pa~BYPNfh|EEP z*j8Aorl%xJ2cYBNxM*BldS89G@+x|>^&E1n?_i>J3^U*qHZ~PFDZ14%npAht!3m=e z5_SH{G;^SNW=#eYZ%V);QibRbV}a!PB{>}`-&Fr;k`I}4mM zKct{1QGkEX;R3(zAMdZ0n@0!rwu-klzNnoQrj5Ze9sT^PY^0=UPFK2Nxu?diTZKY* zskQP@F`@JSu_T#kWdFx3LO)osov2BJK#v!eat}#thgRxUdK8gY#ZYTDj z^Qovk)=JNa^FCGcyCxH|CSNG8Q+xM0MA`ImmFU+K#Q)GD0V>iIElRV8jQ*-R`_oPNu&vu_2O z`ekjEz6%6BKL#FUpadCHwsckBd%<>fwA=_%?HUH$0V;|(3$q{X-hn>TVJ3wcih-QY z4dkj0M6am$LOi`HHDPEOw$*zd%p`#{CZO7D7Q9d7YZG!$85+CK&yo6Wx4q(-^?xg9$f6a)NdJi3szamh- zfCgByWTiwyPfQ^LwqDtWJ|d(zum`+K%9=bwKF;i+E0^11_@#@VO1rFBQma|t>75uG{bMWo&z z;hlbiEOMbaA|SS>gO9C6HmrU>l z%QRy|gv7n4&ybdTKTY@s_UHdm}lr(M9fs|`lWQ^hBn3I3X897VGaD!a>|QP(nd8g zx!26J6P$Ds7(U`e7)0ESq3$69nDX5EWN3cvcH?=Z1>W1$*_Y2=bwxM1g16U&6sNts zgN2>M5Gq#yoNw1z9eNmWw&#&p=B)*A-cH@_M>ow0A#r_(A}iJzYC=6@IRS-}e`ui^ z$w|XEx3|STBE~V{Xvng@6lg9NqQ*;P69&?)D zc4$>((4pDkK}=q_-ryqht1Tamkgij)(S4e?Z+_?lU2(tCx`BfhZF!zS5?a7g=x0<2 zXsU}a#%7#oqvQ6r#H#-?gGNWwN$M!A(&rw3*~c1WRMYLJ)tD=4mE`o_Sf+FYOQYAL zqWLNL=lBoQ-6m5BZ}Uip2mU4&ZNKt2N?eh&aZvU6=^_fo^;AsDNdsCuup}039+w$? z^Cf!8MNO<4C|gwBo`sJm9<}XkfWOd4~N3+OY$KC-tym!WCv@2tZlbI5k(Zf4G%aB~8*M;EiFY2Tv&) zz@%oX$u3-J(`|+<(gVJZNk0$3x9KjF8u`r7FCrKvFiEMIuxpvmQCEK34=DJga@WzdCdJ)^C+!Lq4O8t3Rzwz>{4wa$A~X90)b6Z z=G!nC;hJwg1f?njapPq+)t|+)9 zigyYLh)C3jchMJ60wLj6<;AHyXwWzvA}@u7@lm!@@`HA{skOi%ha}Nmh3KT4G3MaW z>(M|1>LM5<2pzv_=bd-C)DwWE9~P{&x#`xBqjTxxFwH5-C84w%`IDW|!IG;Zswk9F z=(=P+KW9zB9>J{D$k_XDm9tLl>vnW8iB6U*Mv&;?GP&I>5r7Ev?%#y0dOWiaAq^32 zyJA-4vDchT76y3zKFPq3pvpF*SDDtI+`rhx!MKq!BuXRGX+rNa`tdyml2crwsiefQ zK&FJ=;t6$C7f196P!-AHcc`$>CBdt}r>E|Mdu%bTq_3e!Ru`i=>b1ey-j=%Jm)DX8 zhk4V@80g77CC<}jo(iOSdp{b+cPyx30=j0%Z`~ZmBwfy^Gb=kqsmOzfeiFsQK->nw zCX-z}FFlH_{ZNT0uuu=fH4TMx+Kb^M{%5sTJ#rCcOH+atorBuWNj|54sDgU#IBe@%6q`5hvIdQ^ z%N-xs*~=EYQ0_MsiMkyB;_qk$`b0lKr4G>3hm20LD#&-1JiR$TjthBWE=R=WqOymm zeY0+go(QwLPJq~g?AOxy#oogyN0R38LK~|KsVZ!{(q~WQ`b*lmE`GmDX!a`7PD3j& zHyxK!2;{br_YLkb&cz{v^!t^T1qcd)OG=MgWd>K)ikw#{x)_TOh}tz5O7;|btDn+T zgc({R1zgEsj)z%b;te@iYzcuRjDlqUOS?izd8rvNe zvZ(ARYayYL2#MP4194)YUuTR?2{4dmn((bSK{3Auc6wLT$v3Q71SnX$gtI9 zu&Ni*xSDMI3>iUgg%&fkjD3tG+0lYe_FjSYvcgzN451mNKnG*9tLJ&PxUQ4>ATKt> zuhWKpG6Yff`LRDpw)nn5$(W7sM__`|4lpq}?BWC4#QW3~(=W$^2Pq5kKU6{sNVTC4 zlINy{)e)gU;mxDrdL)~d0f4WLfr2cPo0LD!SJSMs@ zvIGuDStg#=yXhThL2o1M92HNi8whEV^6!Ke$6!~qsx3R<%X9l{oF7EQ*i!_!>y-(~ z=JoN=GFt}cwJ*msIGsd(-VNrEd?rPGNx+{lQbw&ayF*3sO-KOoO$_k$&Y{?uKyhK* z6j5!!CPKsKpn5gn@M(_T*mfN|Isf(tWkb69 zZih#Z`IdSIpD{!0&d^PZ^Pm?#XvlwRe@|HIpAgQ%4+3bEfIcBlB~Jm)~kmw97O1AVfys!vY>&tiAGG%xL^) zr3@@}l%jBeqj?J}yypgTE$f3S88rJI=pku@te>+Al0mvf`6B<1C&(1A% z#jGZR{*3$7bR_URvS#9KRHv^An81YiAPX49sT5Pi?%=xNjszyQdG;rNF9u8MLFVV8 zS~$;=@s3xdP{osWEeGc8?$Pk%=74|Ke8NdN)bo~t2tL_zJs-dBr zb-gs(z=UvhsUh}S)=vg5U^mZ@MNtmDzyHbi=e{=TME!1z%_U4k8bXDwU6v7v3FW_u zgZ|E95gmFkTm=pms`}AOF|l_fNo>ob4yTKH!EVzkm{D4X`f{FeKa`y|j_cL}ijs41 z5VAA_-q{n6+V|hRTi+!iUO5=fkDd@n>Np?+`=1P&J6H)Xu-x^O>a>_kizsT2E0oa* z!O?=|SItff9;W(A>%c>(i$-`-9;&Pu@)28afu5;+&H_)c)s{( z0?4YASzZo?_v&_++)3@0d;LuE{2>t9dSq%5=I8Y%?F(MZjj-&O_xywo|b=_ z^3d14KVCx);ob%`t)ZVZ8hwqKp`9}WZ#+hHOeN4eI2C3WWlhx9BZ&&r+X_w#FWBz= ziP3G23yB$i<;by31Q%pE1eBoWQesCkyDEaImIjrZ3;v*a&V6w0q{WnKQ4#9q{#{gM zoFMOSRPPPfZi+GudVLGBbR`X&+$sC&2Hm6A`B9Yd$mjlfBf3l1nB}&Nt1tRM@FtwY z^SA>n=NZ2R#X+TkYhke~?72iDUas;lW3VwvpJJ<$ZG=G3*0hwgTjrp;$A3OOx5`n4 z(WR14s&$PcHxxy2D6}=^WtO^NoV>}{c9Vs>!Li;iyP^*Xa#4HV@ue&b6w{*p{mD3fIf93V%2 zs3)R~A&s`{o#uq#Z0f0w z1JodKkY@cIH#;#W;A=r=4b6gdKt*Pp+*7cw?hrv+k7bUWP92t}Dyi}1W&9*HC3~l% z|Hio71~7-JK$$NPdWHJ$QPsDE@kK<;g$l62=pNV@u_ZG>d!#}bj0I0IA4CGQ*O$c3 z1S=x`j&Qce2h*E3#*rfiP#7Bm4qPn^Ed#7~w<>*4W(TOX}`Y4n2v_Qli7LeqYxsvTtj!a8jK z5A#1phbGG-uis*fg}>H%JBm>G%vF#zYZ4>MjeEQfyEeBvvI~~4;vb(U<4k57Jqg~2 z<^uX~%uq&NA6vxK+INc5cEp>k*b1;{TnYmgQD|^l<(|m?hb$OfdyW!>W@bQ;{oM?o z;M1m`{n#(c+nyd$58+W1FD|xb`cyogz|}`eoxG>vWD#d_F~8T`KVbF%GvD9qC%@VX z;I6(K64+OM)AdM)_eFYsogM5iU(i7O{RmA~2PIl8k=i{w8fdWMqr7QqIYHUU^K#Gr zA|{v(Z8$%}h>fMNs0T+WRXMT#b_EUB80@=ub5SdXnpy!GEGI^=i_#q1xmWPg(TXF@ z=oP5UdH`JyG!G*A8${R32VAp+9r^+<63+FdObeX!g4=yEFc2cX3$B3X+IO#z9fR<{ zl)>waJ^@U2$#_Gna1R#qxsliW7x|h1cHZ`@2qv!=&kFozz)xOO4NPPoOVlu#iiV8k ztSUH{nwseEwZ~xen>a@{VSsOR|5gS$Ek`=*fLjWC63+j?ncW~J1T&h9Q)p0egM4$w z39;CWyX&Y1g7Si-7)FT>%uXm3(0l@S%gFBz56}I+Z%YpRJc#f@nsXiToM{$@1a8%= zXA=?CgTdtn*YlgkB{RD0&$hf6f~=U(8n2Y0w+qjugw;@FP)p6^DT0O54|RyFNuVjz z_R?k5e3ePU0J^D82qyIYzS~k6+(2t$O!E%|Cco?36LZkRtC|{#3hrij6xURC1A1# z=FDn2_WH(fyvo{YZNlHkdGX9K#UuZ~y9F1VRovb>Z@%yC8UxWcdG;9vPrjWC@$+bt z)!eP+s)UZ*3N4A<6lRpY1JlpcP3tgBF2QKc6z7o14o`OmL@}~cd^7vx9TfC2u1rMr z!>Ooyw&Xx6&^tRWw<+q{iXUVPB`hY1nMXYUxwfEORCvT@k?!M^;^R9)uG=33{%z<@ zpg;kBP>L&C5LFu#Lr(W>oYR9tJG*g*^)5eUKxgI|~6J?aP* z6Un_Oc2JM+*jH-$4Th^^H2RzlDo|S3L5AE2<38_`pT7`A> zoh^j(KeqH9?D{aQ_6_I|5bmi1zmvv>mof-~i}sU?NSE;U^Dtzd-nwU1gbCBC4iofQg@njBGC-z@WP*;^l>6 zBMT)FIpZ5Wxpk<48>mcizJ5fgq2ysg*ACy<>3JP~wR1x1goEzgSV{v}E=|oy?FTa6 z6W#5{VZ0lzz8wrY@&kTvuRg^$pKe!Abeey%vw8 z|En=52RX7WG~%KwV4Dyzwq`SLnI|>+k1#k$(r(iSll5POL7hm#z2kGDiyFmI zBop67s{;~XfG;{Nf*7x@VnuNGn;UCMq>62h#5yFi6>Qk|NGihNjJwSuR6k9qfys@1C3q zfd<}^{U3Tkg(=;XebPKd^ct<=?8dCt>zpuIOxQtR#RUtz(Ld1^uozgIUgz+`Myrto zqJerO@HnH_nlgaq@S6+J&6cS3dVJ&}@S4-f896Sb@C-LgI;rWu7bp=I=Vf_Q+gy~$Of(0FqWwH?)61h+ zLa3O^i8!FwW@&In%VfPG}Tet%57(bQc(uRcewli!sGeqUKEi=MZ2;^fU(7UZAOo~wnH320#42_$Sk_)YI-?{ zmBg-t?148R0;~eSY!V6w2877Qu5~b(R0!MB2AP4Q`xPI_?Vv4 z9-}FCA{i+!Ce*8qbQ!z!0_0~sY>iCRk2bFcRv+i_m&;`n?Jwb|BIAHs`)hJi&=7)^ z#=SdI{%e>fzxlX9Z)Q&bJtVkCdAr2L0UbFs&Aqb}I^-|$C;<(3?lLp-?BdcJWj`h< zIbmv>NXpkvGfz>G{EDUVmQmO!LQJB1SjumQX#ju6O7a=g=4?)_Z7@A_i0o=S*6ts9L5YoEAPJ&+_l zytH;vkm7myJ6d8`oHU>HW-{k-H$MU#VP~%T|C*k>0a7vP*4}Ok1zuuquL2G{6SP`i zwo(L`p4ibM2Qr&Hh?TB6O=3tCvDfHi44QpE)31tn5t zSr!D2ZEr@%Ed9srh#$NBznqS!sltTo26TLzA?4w<7GE_$T$%959#QamlHlgqLPlAeIPL%Ta1tN zTF4PA8yB?1i$Qy|ti(6Xm_-JBa+f~L)!>23FDlz|1&vxwEVYnWRb(nx;={Ndb-`Q`ToE`!UcH@>&~)44xa1VRT+HaR&~`Y zvSGG`bt*b6x9LjDcv%^P#3i;iQ#hSvE=Mn;tNq;wp@4S55d98TuGSr0iS3rZ#Kp3> z!scI#lZN;;afK{2t<&zK2+t1FREKy@QfzA5)?vVE{fQ851HDyCeL)C>3pUayVhlZ@ z;6EsLmVTKaOB1fley(F%L53Fu-@B(WW<^|dd;bRH?>NjT{;eF@V8HQV69YxSNju`X zm6MSAEwlVVNvZPeCf{6c#6}^t*el8H{Z7u9dPy}?3oK)eH?mnef?K-R0+}$=g#Y zGjjCPt`IT_8qazJ^w;2+bMG&|h>V?SMVAJC7WRa_+5@smzOo&H3jYEW5Y@d=^R$Xi zQ>Xn55+qykOyK3oU;X>N>i;n|Da;^Pz2WXfZLx)KiYjBeNXecNf9gq?i9Bt$i17B! z3L7l(WT|v2W>(+CehU{~KC||!ZvV`cu8V;6_NhHOz%|o5Ngc9zq7ymxDE{~Nv?cE3 z;fRP<7-gb)Q%*Oi=lp>T`74Kb=}ioNIA+C@QdjLBjqqPYHZ_yTHGoka>ncF+{NoQQ zPepf|c=twN|0La9%lsN6NfzF^v|oJ%d!znIG1}w|V@&nu%QEjFxofD3&@`Y)5oBT* z)Aw`?rX;82&r@pwd%?B`RiwjTLq{El5X>~I3Cm4yf1pLPcO)1agL5PG-xWO-od>;9 zOpq#uU4-KJR;_D<*nzI+mjT|%O-teE_-CwZv^pJu3K!@Vri9>>j;So{W9zk8u_uMn z=`l1?U(S)LXTrRtGre=Xic_W-W_cq9b$=99es(Om={(RcV!Rf85T8-JCx+SpWS3(z z+fAyAF1!T!n?cQ>ZOsf)oAHsD=rgjt0SZx!BwsZClz5LJKZ^N~%Hg{deX_I`T|PE-X)CmlJ{%@!ZLD z;cB)HX|D-+V!{km%;!E%QpQ%IdWiPwZjJJ(uDcwi2|h@GE&ibm^A#&wb7p62J=J}2 z>}&0QCvz`(G(MhPSuM%3S|DW3`(~jj=mV;j?CrvwS&U^qmqjaN?b&B7^G$;7_a@;( z%&*sHJDas3KU^@;te?JPIo;{V-NmqSvFX6Jp&N$$>rABnmvICmTWqYx#vW=n1Q*k@ zd5Qe~V9xfAQqvcPgC%xk79rr>sVGCS&;#p^h zDGs5_UdB--xs+PsGThkM``n&!e>-ChjnVPucONaGX&3@lI0x?is}EPW*_X%InWn)3HgWJ?;9Pu zMq-jI%z_XKbCb!QgETznGrI~T$!cg8;Vk|6#wipF$6?;oK!R+ch5V3%*hgg;?4@L& zY+g}kiv*;2Fvz)C1bS6lJw*ZL1p(ECSI_SLMj}muPy;kM3%2Z+N-0KQq`1~hHdI2M zq#&GhWdmKCl3$5vq9mRg%>gn#Oly?Lo9+Q*_X5lT!DN2q4{%kS;8P9Xijc-t3b zk_@(FesqaCd{SYSFL|b7@sn!A(0(2s-tm8PnczN|1xxII|3?1)vS8?K`0WOx66C!6 zkvD4B%7#b%?L#sdc1#ZBYfb@~w&>l!{DJ6Ei7TigAU1XcavvCzE<@XCiWRdiwQTyy^6Pb_Em&?^>qh6XhpgXP9nn7@j10iA^Pt5H~{Hy`M9@*0ed zM|)H6>{Tk!!VEMb@~pE0w91i0?{xSq5V0I&ua@nxek0WuU#zZkTpado_}QjUC}D4v z($w8!ijWL}b=8OIJDKO+oBj2^P#WQRzs;o->*GZd&2%K2KkLeQf4#gztlTc#rMhZS zsK{nsey0hB8CGp!9fb|UqKOMz$((c1dahaKiIDsR*RgRw@xa$oi!mTPYJzj zz?*%uyMTP{mB*V=efO5Pui2H@@}a?XUo`zVODe;fzeCwhlb%eev14g#saMkOKwqkE znhaG}hPy>>Hv8Hc{&L;EbTWC$2LzHo+z%MuV?PzL`Sb`=B{Fn4QAk4oJY%?$sATGb z+Wbj!37KZxMTK9PwpmUz>4N|@n%l3}?fO#= z7lX7lX0QzYW)$+tEK~ZHU~28tkCdLAQ}9;lXi4l@1K}>{+Jss6=VR%0H~~y}1wpmv zjU|ZzL^T!tOEK+?*jCkH^M1AsoXX3^258BurOfo%rKp)~xr-_E|6%nLqgYs;wbU|Y}A9$oV>E!^z$U)N4GV|7i)W|S;lbYZiUPw?% z;)8t(l>Rke3l~qluAQ|wQ5P{6`2^xx`WN}SSy<1|m6Br$h0r0j_Au9Ks*acuoRHHN z6SXV7M09T6R2xgp%v{sW-&tP`O=f?m3)gs8*G*rElJJ4BN+XUIUA!xcPNI@Ylmi z^rjGOobAtb@)8h!l|_!k#K=pL1=kQOkD_b1B;YE`)H7GntK|Oz71_}QFLOdXlC6`%< zGBFF9IQR8skZ?dnqzuw5uXUj`K5t2eV_eLe|Go};{^PJ1+%>f?|K;rA{}Ki%YGEnR zSHQ_u!ZNaCwxV` zY@xrBAbFHHKcTO`dR$%|2idw;Q6jYPvVAxZg+%kyCgYeK6+iAEAagbn1-<4XS%r=R z{UAXCtVY8G6S>_`Nyb8~;Uo?tSIaV7YL-2}DkBQPH(ELE&&&6_96ImP0)xI$}wxWCZD^1Zg~nJ3Gr?-s8dN(Skn#dRA`ytj0QKKBkX}OB@J(~t^pk%to)Ab!bw41lr&(?b zP51v*+qV}WA?559d zL@w(5z1URiolZT57AV#qRX25C7zHMQOn6KEonz;r6UHl^4#UG8}JYGVM>|VK0(9GC+gNzQe&)_)~pTqvWaprAAEL6u{WreC!W#=iEtc{hDZ0P$ zdkUua2g@*!$Jpcmhs0N|iKeJ@g6v>s2|i-cpOkbGnV3(IqCz)2vcS=XND9IJA}4)w zm)4aW3Oh>4$wOGgIkP0=&AhD%nH}BF2u(tvtC&W$$^PCPt43jbeLs5}8~S2FQ(rvV*Lz|2X4-3*TQK?JoXT6>weX9fMus1JCL366Oj z`bID2B^tWAlgf)w*MiWv32jAJ!@aN0f{rKQI$##EJsQ^GYl*-;cXA{xaPaW8HjlU> zaw~g4N_oN zfy+BFO=_y-m!;`ipR-lbLg0zPTVB02;5r7_fI3ZXp)WWQ{zwZRmC8eAR5ep*Pd*4` z6z(IX=xiflJ*%^S-=OzpA()ZsTMAI-7T#xneSdlH8@f=2@WGVCr$44I&JY;W{rdLa z`T!{HY#P;?R-mZazw$6wr~ZRS@n0`pDlG6-CYgFGxn8q6`%R@M`O_Ay26p9gmbG!* zvwKf-3aO-mqiC0kj*m~s86KF5wPLl+RHwx8^i|h5Ai9EKexn01gPRcHa~*{VI@`AS zC^V9cKN)xsrr-m4x7|JP=?O?Y@H58Muif+!%GSpj4#{|=BGts*r}sn)PW+h3Avvgc zz{+$)*x%&#pt7S)OtE~#OH#D>J|*i9;~x0N2;5NGpbgQ)I(CX3Aiu`6%1h1{|O_y0lf zWA!cZ@HY-w{tDwI?KP0*Fdp2HU!(wtzdo>rNz>2|xh$=&(&u7R&RKMm6{mGYRHGGd zqW|oDpkZto;0i}oVE=lFpe%(N-+4Nd;Msf<%jrqi`x8LG^)-5v806mmGF=0LfwfT! zImYhTA~*)S-4kPcl;)R^i&#nVY7?69E!6S+p@j(ilKG4MHhPnfhr_&CO( zKnioc|4HXs(<3fB7rDTyv&4WTJP+GE#~~b6V4L9&n{YJ|-fP zjACPg^s^HVm|AQ-q8+Xz__brb)Hy`cZ>%yxW-5fx^p0?@KYl#krdjv2Rc-TLu}YPd z{ln?v+|_25Lk;xxX&h1k-}-$B64j&puc~|KU1dNS;ln;& zwE4ET)FCjV-@UjHj7jk4UiOqOAwNV|NFoS!8I?m+;sflFzV!w9#XpYWoY~eBC3{s6 zFlupknslbnw&0IJtan`d8~*sYjh-kr%Y;T@dbSI&f9 z`}D}lM5e%}JLa1LC_m$N_%DR6gWMJ|li+)PjXun(yY0vq%&CIoL}d~Pr+exMS^yMDMhxlQl3*95VM9Q$d8 zo!`V-taOsvk37cT4IElo>8Q2`tMjG93n!p1n*nJ%O2;SOj5^E7x87RHz}0>Q4&mR? zZyvlZ_Ktvef!(tO-f21bqpp6lf!QG-wvM@B-y+~eGTL~~6*H=)9sZI7-gOYW)=kT6 z2ugkVRQ84(XT!yziLY`3Z8(Yf#m?T0{IhXbA;btVFmlMCh>Qd*C;?bQ5)Ev20iW<$u%S6wUE|kwbG3z(BLxnz#O|<7>XTbd$6DJZ48Hz5m~FFRD`Z? z0F~?3%y7?NgzoOSxL{oJ-F^|5l)P&w71`a zYpz8M#GxfxiR80XIVIUB!9xZuMnj2kla{5F)~6Ko(|yopk#X{6NdP zoo_lRu96AuaFyv3LuKO5gYnV`Pn-S$bmPUp0NsJ|rnyY2L!wSNt#A>FYZw6L@GC79 zC(9qD=@v9NX+@$i_5M@(8p)9MN{vS$<7b}V6DbFyHZDw$csb<~6#!mXkSP5ldOyg- zthYp@`>8&Ex9en%d2a+o-izJhsWwM?n|!F~?$!yNkQT;LL_$h_XKz;-H?g0UwaPqm zSmv+ZtD>!D1butoBvLi!s=iih%Zahw1@f86B6UrZxUD&&lj|zND!EUibfu%CTE9-O zktD#dJ^u!DTPJ}z|5rfQtq&df!wU5Yq4vmo@&kgh2XFWhXl2q?2$SoMm1zmfsW+TF zTEa2 z;p0{C8JGQL>6`J2I2BCGhBKpHCTi8mZg2h+OT7$qZhUje_7D5F16*f$mrJMz!a?&t zd*Q(|Sg~|FzdZ9#P@w`4%l`w^4Mlds6UVEkgc}lo2Xc!dc33NFrxL#gVhE`nL8qzU z^VhN2miv>dUaoY+$g5#HV{NMt0m-Wp>Ok@$uWPd*->x?uSWM^b4c#3XZ7J?^{ zQ#z)XyusmUcKmNxS0hp`Wf7?8Mcr-E>amj?jJqCBq4@sC3p$9J@`U%+moxm4ux zCdezD!j0uyvEtAisy|fZDEY`CRul1NcRplIBz&ux&u`Exk1+ndUQaOt+-Fx_Y8xOb zi7IUb@k+kw9^x};lAWS;i0~gagnDX_KpVIuWTXxDS`|C#sVYvlT`O1fJ*og62RV3b zl9=-bVjBn)u0G7cB9%Vo>M68_@c2t|A>1Ocp9k~15|TMMMlzccU09v`p3X7mn!2&Y z?Z1o&r3dp3u|9o(%xAV!RVG{M+?EAzNJUP%tl*FXqs74<>utvO-!)$QK*{Vun@JNA zyc2bF?rL2mvjDTkg*J!Dmgi0=R;?}zwr1&?1?4LGh28 z5&SA#Y}7SFmczr($Ya=6CS1;E)grvd8%*ks=>KAN3AYt7#fzTKfb6j4cd~3JIl3Lb z&bT7}*Nf*&2##LC$SWJu$SOrl#6g#wAVyk_0l_uJ$6|9R8cym|urdBH5~Py}v}#(P zv>DXefD*&B4wl5qv=tevM7BY+`F7qbBp~#S(h#dCNVPtMi-|qKN+R0 zu9T7cC0d7txYt0HsDzbRv4y@PJI=d+%d-+zC%#R;v=`m}-?-h~Y&zhl@}xy30EB2`3SKLO6jBCp%all-4iV5Pc~JSppLRJsF*wtVV3H1u7N!@dASq|@prIw^ zYp^c28(Q&iz*f@oqMs{lN!3UDBK-5tKYAvpB&ky%L{l1kP|`So4e$`dDw++buPbC1 z+SmIV8DrP;bbqO88i9>STX6dU-ZZsm0@Y{qj?~P2S_i>lIvuuRKFQ zD;M_387Z8Qlhf4JkR9;hC5EV4-}H@x?J7Cc_7KJE3?nkkkK*cbnLnqnp=Rk)pgBce zp0s#}GkD1^2SDW3tZ6U&Jp9zlrwg|@{Xb7tzgZ-mj><_!jFj`{L1zt%J-6w?C{S4O ztKy&Q$rmKzWW9U3{6^g29h?nBoEf^kR+;s-;R>vbt;w!y?@quCM5%i;Q!4i`0!Cn( z&`0?wB^m0Z$BbR-QAQD|37{U8Z-tz_@r@K^h!VZX(C2Ve@#}?Oh(0AyG=*1GawfXE zB3%jBgpMHa!ypW=no{I~sSwHVs2;xB$v21_(Kk}*rh>W!EAWil|IF&}eVo1n%{^Td z2x(P6g#Tf`p>y>K0TJx9sUL>wcDKK5>EQ?+;NlhA(wJ89<7H-GH~tRtV*2 zlSf?F2le){ko1&~`l?&JZC1q}x)V%-`bp1!eXhkDw=AqjNwF?WmxZ4Es!8+9Kd8*d zR?c7{%QLbd5g0>b7H3=_%2j7}wfsn)N_sf)7L{Ws(%t4 zV9SDHhhvvA^4e_m_OwS)mn$Q3W1zYc^Y{#Bc>la_D4*+pU zS1yUMVg)C+xkWlFpxOSYIhh8r1p)<;fk^1i`E^QhWE9w{)9{m2}WKt6lSSyP9+Bo28 zgtdEP(t6&FQ4ns!L&d^cP6DGd{F~Pv zxQ13Jh>eae3cMXsGTB50J{Z7k;BYVQ{=|lJbLa7jsrybAIS*hhZ@D6Q?8o3>uG06P z+%6p_nb4ZJZJU_)<#979`O!OTFbu383v)Xh^su%eiF&IgNt|7;$#EVBj(ndrOU=G6Nnpl$Zh)I?+D>B z>3^M# zT7$k3Dnr*L2!5xK2vuG>+PVebb~8dcLU99r1xVRw=N4D&0hMGTSlV9`scIHIU6;l@tjcLgo>)s#<1SHt8z zN{!H`;bDi(oX=bXEerP|HW*A}6N?vVOXyW-0eaf`=36#5VYE07LB2Bs zcCl>mZeZnTCF9THPB7GvjZCxMBn@>0{{Q558((JfSL45qMi?JGU; zx<`v{GFW$=LO@>_;LYL{1gQGwv?w01oI2%s6sUGGFX&4g5ds zE>g2F%kwVg#Y#hIw_0vaABnbYP?}4HI%it%&!y$hO|ec;X6*>L)i;r`0O`vI6OFLv zaN>#vqf`GxOJfo7xxvW%ZLE9)$%mA(#aydTV))MvuLPA>MDe!m5rZRW9;BRiWs9gbEHcKEatnq z;vcJpk_%lX!3XACS{2EK@bp3cjqslA4N_OFK+ZWy=vs8~edXi#Tm&c&FvDbVX_6el zOXCJcI>GHgkXS4x2LC_+J-YB-``T0HNaE z1yjXZRj|2@YI#AqUAQ6bO>mD*Dyr$vL-P+_qeb;4TJpH-of;}Q&oH4*NjAU&Vq!x~ zd)^+2(g1cZa&!!bZmb)Sib0;kOc_XO>t3B2U+MTw=MvQ~X6--t-4c(4vNqD*yH6aT Y=T= 2 ? getSelectedName().substr(0, 2) : "??"; Eigen::Vector2f off = mTitleOverlayFont->sizeText(text); - off[0] = (mSize.x() - off.x()) * 0.7f; - off[1] = (mSize.y() - off.y()) * 0.5f; + off[0] = (Renderer::getScreenWidth() - off.x()) * 0.5f; + off[1] = (Renderer::getScreenHeight() - off.y()) * 0.5f; - mGradient.setOpacity(mTitleOverlayOpacity); - mGradient.render(trans); - mTitleOverlayFont->drawText(text, off, (mTitleOverlayColor & 0xFFFFFF00) | mTitleOverlayOpacity); // relies on mGradient's render to Renderer::setMatrix(trans) - } + Eigen::Affine3f identTrans = Eigen::Affine3f::Identity(); - virtual void onSizeChanged() override - { - mGradient.setResize(mSize); + mGradient.setOpacity(mTitleOverlayOpacity); + mGradient.render(identTrans); + mTitleOverlayFont->drawText(text, off, (mTitleOverlayColor & 0xFFFFFF00) | mTitleOverlayOpacity); // relies on mGradient's render for Renderer::setMatrix() } void scroll(int amt) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 961b411a6..6ed8249a2 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -46,6 +46,8 @@ public: inline void setFont(const std::shared_ptr& font) { mFont = font; + mTitleOverlayFont = Font::get(FONT_SIZE_LARGE, mFont->getPath()); + for(auto it = mEntries.begin(); it != mEntries.end(); it++) it->data.textCache.reset(); } diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index bbbc88ae8..638869a66 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -16,59 +16,6 @@ int Font::getSize() const { return mSize; } std::map< std::pair, std::weak_ptr > Font::sFontMap; -static std::string default_font_path = ""; - -std::string Font::getDefaultPath() -{ - if(!default_font_path.empty()) - return default_font_path; - - const int fontCount = 4; - -#ifdef WIN32 - std::string fonts[] = {"DejaVuSerif.ttf", - "Arial.ttf", - "Verdana.ttf", - "Tahoma.ttf" }; - - //build full font path - TCHAR winDir[MAX_PATH]; - GetWindowsDirectory(winDir, MAX_PATH); -#ifdef UNICODE - char winDirChar[MAX_PATH*2]; - char DefChar = ' '; - WideCharToMultiByte(CP_ACP, 0, winDir, -1, winDirChar, MAX_PATH, &DefChar, NULL); - std::string fontPath(winDirChar); -#else - std::string fontPath(winDir); -#endif - fontPath += "\\Fonts\\"; - //prepend to font file names - for(int i = 0; i < fontCount; i++) - { - fonts[i] = fontPath + fonts[i]; - } -#else - std::string fonts[] = {"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf", - "/usr/share/fonts/TTF/DejaVuSerif.ttf", - "/usr/share/fonts/dejavu/DejaVuSerif.ttf", - "font.ttf" }; -#endif - - for(int i = 0; i < fontCount; i++) - { - if(boost::filesystem::exists(fonts[i])) - { - default_font_path = fonts[i]; - return fonts[i]; - } - } - - LOG(LogError) << "Error - could not find the default font!"; - - return ""; -} - void Font::initLibrary() { if(FT_Init_FreeType(&sLibrary)) diff --git a/src/resources/Font.h b/src/resources/Font.h index a9a1d3e82..925950234 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -68,8 +68,9 @@ public: void reload(std::shared_ptr& rm) override; int getSize() const; + inline const std::string& getPath() const { return mPath; } - static std::string getDefaultPath(); + inline static const char* getDefaultPath() { return ":/opensans_hebrew_condensed_regular.ttf"; } static std::shared_ptr getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig); From 2886e8e8d8fb038379e5a4cf17151b90014f6bda Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 17 Feb 2014 11:40:31 -0600 Subject: [PATCH 167/386] Compile on Linux/gcc again This better not have broken VS --- src/components/IList.h | 5 +++-- src/components/ImageGridComponent.h | 21 ++++++++++++++++--- src/components/TextListComponent.h | 31 +++++++++++++++++++++-------- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/components/IList.h b/src/components/IList.h index 4d4d8f72b..10a03d662 100644 --- a/src/components/IList.h +++ b/src/components/IList.h @@ -6,6 +6,7 @@ #include "../GuiComponent.h" #include "ImageComponent.h" #include "../resources/Font.h" +#include "../Renderer.h" enum CursorState { @@ -148,9 +149,9 @@ public: protected: void remove(typename std::vector::iterator& it) { - if(getCursorIndex() > 0 && it - mEntries.begin() <= getCursorIndex()) + if(mCursor > 0 && it - mEntries.begin() <= mCursor) { - setCursorIndex(mCursor - 1); + mCursor--; onCursorChanged(CURSOR_STOPPED); } diff --git a/src/components/ImageGridComponent.h b/src/components/ImageGridComponent.h index 6f0d5b8a5..d58e80cf7 100644 --- a/src/components/ImageGridComponent.h +++ b/src/components/ImageGridComponent.h @@ -13,7 +13,22 @@ struct ImageGridData template class ImageGridComponent : public IList { +protected: + using IList::mEntries; + using IList::listUpdate; + using IList::listInput; + using IList::listRenderTitleOverlay; + using IList::getTransform; + using IList::mSize; + using IList::mCursor; + using IList::Entry; + using IList::mWindow; + public: + using IList::size; + using IList::isScrolling; + using IList::stopScrolling; + ImageGridComponent(Window* window); void add(const std::string& name, const std::string& imagePath, const T& obj); @@ -79,7 +94,7 @@ private: }; template -ImageGridComponent::ImageGridComponent(Window* window) : IList(window) +ImageGridComponent::ImageGridComponent(Window* window) : IList(window) { mEntriesDirty = true; } @@ -87,7 +102,7 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList(window) template void ImageGridComponent::add(const std::string& name, const std::string& imagePath, const T& obj) { - Entry entry; + typename IList::Entry entry; entry.name = name; entry.object = obj; entry.data.texture = ResourceManager::getInstance()->fileExists(imagePath) ? TextureResource::get(imagePath) : TextureResource::get(":/button.png"); @@ -148,7 +163,7 @@ void ImageGridComponent::render(const Eigen::Affine3f& parentTrans) it->render(trans); } - renderChildren(trans); + GuiComponent::renderChildren(trans); } template diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 6ed8249a2..973709321 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -22,7 +22,21 @@ struct TextListData template class TextListComponent : public IList { +protected: + using IList::mEntries; + using IList::listUpdate; + using IList::listInput; + using IList::listRenderTitleOverlay; + using IList::getTransform; + using IList::mSize; + using IList::mCursor; + using IList::Entry; + public: + using IList::size; + using IList::isScrolling; + using IList::stopScrolling; + TextListComponent(Window* window); bool input(InputConfig* config, Input input) override; @@ -46,7 +60,7 @@ public: inline void setFont(const std::shared_ptr& font) { mFont = font; - mTitleOverlayFont = Font::get(FONT_SIZE_LARGE, mFont->getPath()); + this->mTitleOverlayFont = Font::get(FONT_SIZE_LARGE, mFont->getPath()); for(auto it = mEntries.begin(); it != mEntries.end(); it++) it->data.textCache.reset(); @@ -62,6 +76,7 @@ protected: virtual void onScroll(int amt) { if(mScrollSound) mScrollSound->play(); } virtual void onCursorChanged(const CursorState& state); + private: static const int MARQUEE_DELAY = 900; static const int MARQUEE_SPEED = 16; @@ -85,7 +100,7 @@ private: template TextListComponent::TextListComponent(Window* window) : - IList(window) + IList(window) { mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; @@ -137,7 +152,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(listCutoff > size()) listCutoff = size(); - Eigen::Vector3f dim(getSize().x(), getSize().y(), 0); + Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); @@ -147,10 +162,10 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(mCursor == i) { Renderer::setMatrix(trans); - Renderer::drawRect(0, (int)y, (int)getSize().x(), font->getHeight(), mSelectorColor); + Renderer::drawRect(0, (int)y, (int)mSize.x(), font->getHeight(), mSelectorColor); } - Entry& entry = mEntries.at((unsigned int)i); + typename IList::Entry& entry = mEntries.at((unsigned int)i); unsigned int color; if(mCursor == i && mSelectedColor) @@ -256,7 +271,7 @@ void TextListComponent::update(int deltaTime) Eigen::Vector2f textSize = mFont->sizeText(text); //it's long enough to marquee - if(textSize.x() - mMarqueeOffset > getSize().x() - 12 - (mAlignment != ALIGN_CENTER ? mHorizontalMargin : 0)) + if(textSize.x() - mMarqueeOffset > mSize.x() - 12 - (mAlignment != ALIGN_CENTER ? mHorizontalMargin : 0)) { mMarqueeTime += deltaTime; while(mMarqueeTime > MARQUEE_SPEED) @@ -276,7 +291,7 @@ void TextListComponent::add(const std::string& name, const T& obj, unsigned i { assert(color < COLOR_ID_COUNT); - Entry entry; + typename IList::Entry entry; entry.name = name; entry.object = obj; entry.data.colorId = color; @@ -336,7 +351,7 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c } if(elem->has("horizontalMargin")) { - mHorizontalMargin = elem->get("horizontalMargin") * (mParent ? mParent->getSize().x() : (float)Renderer::getScreenWidth()); + mHorizontalMargin = elem->get("horizontalMargin") * (this->mParent ? this->mParent->getSize().x() : (float)Renderer::getScreenWidth()); } } } From fcb8623b3dadd65d12f71e2658f7be035389ad31 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 20 Feb 2014 22:20:10 -0600 Subject: [PATCH 168/386] First form of the new system select carousel. --- THEMES.md | 8 +- src/views/SystemView.cpp | 189 +++++++++++++++++++++++++++-------- src/views/SystemView.h | 28 ++++-- src/views/ViewController.cpp | 33 +++--- src/views/ViewController.h | 11 +- 5 files changed, 185 insertions(+), 84 deletions(-) diff --git a/THEMES.md b/THEMES.md index dfaec05b9..e1b826125 100644 --- a/THEMES.md +++ b/THEMES.md @@ -308,12 +308,8 @@ Reference --- #### system -* `text name="headerText"` - ALL - - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. -* `image name="header"` - ALL - - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. -* image name="system" - ALL - - A large image representing the system (usually a picture of the system itself). +* `image name="header"` - PATH + - A header (logo) image, to be displayed in the system carousel. --- diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 11b62abb0..29a3594ec 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -4,58 +4,57 @@ #include "../Log.h" #include "../Window.h" #include "ViewController.h" +#include "../animations/LambdaAnimation.h" +#include "../SystemData.h" -SystemView::SystemView(Window* window, SystemData* system) : GuiComponent(window), - mSystem(system), +#define SELECTED_SCALE 1.2f +#define LOGO_PADDING (logoSize().x() * (SELECTED_SCALE - 1)/2) - mHeaderImage(window), - mHeaderText(window), - mImage(window), - mExtras(window) +SystemView::SystemView(Window* window) : IList(window) { + mCamOffset = 0; + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - mHeaderImage.setOrigin(0.5f, 0.0f); - mHeaderImage.setPosition(mSize.x() / 2, 0); - mHeaderImage.setResize(0, mSize.y() * 0.2f); - - mHeaderText.setPosition(0, 6); - mHeaderText.setSize(mSize.x(), 0); - mHeaderText.setCentered(true); - - mImage.setOrigin(0.5f, 0.5f); - mImage.setPosition(mSize.x() / 2, mSize.y() * 0.6f); - mImage.setResize(0, mSize.y() * 0.8f); - - addChild(&mExtras); - addChild(&mImage); - addChild(&mHeaderText); - addChild(&mHeaderImage); - - updateData(); + populate(); } -void SystemView::updateData() +void SystemView::populate() { - using namespace ThemeFlags; + mEntries.clear(); - mExtras.setExtras(ThemeData::makeExtras(mSystem->getTheme(), "system", mWindow)); - - mHeaderImage.setImage(""); - mHeaderImage.applyTheme(mSystem->getTheme(), "system", "header", ALL); - - // header - if(mHeaderImage.hasImage()) + for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { - // use image - mHeaderText.setText(""); - }else{ - // use text - mHeaderImage.setImage(""); - mHeaderText.setText(mSystem->getFullName()); - } + Entry e; + e.name = (*it)->getName(); + e.object = *it; - mImage.applyTheme(mSystem->getTheme(), "system", "system", ALL); + if((*it)->getTheme()->getElement("system", "header", "image")) + { + ImageComponent* logo = new ImageComponent(mWindow); + logo->setMaxSize(logoSize()); + logo->applyTheme((*it)->getTheme(), "system", "header", ThemeFlags::PATH); + logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, 0); + e.data.logo = std::shared_ptr(logo); + }else{ + // no logo in theme; use text + TextComponent* text = new TextComponent(mWindow); + text->setFont(Font::get(FONT_SIZE_LARGE)); + text->setText((*it)->getName()); + text->setSize(logoSize()); + text->setCentered(true); + e.data.logo = std::shared_ptr(text); + } + + e.data.title = nullptr; + + this->add(e); + } +} + +void SystemView::goToSystem(SystemData* system) +{ + setCursor(system); } bool SystemView::input(InputConfig* config, Input input) @@ -64,27 +63,129 @@ bool SystemView::input(InputConfig* config, Input input) { if(config->isMappedTo("left", input)) { - mWindow->getViewController()->goToSystemView(mSystem->getPrev()); + listInput(-1); return true; } if(config->isMappedTo("right", input)) { - mWindow->getViewController()->goToSystemView(mSystem->getNext()); + listInput(1); return true; } if(config->isMappedTo("a", input)) { - mWindow->getViewController()->goToGameList(mSystem); + stopScrolling(); + mWindow->getViewController()->goToGameList(getSelected()); return true; } + }else{ + if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + listInput(0); } return GuiComponent::input(config, input); } +void SystemView::update(int deltaTime) +{ + listUpdate(deltaTime); + GuiComponent::update(deltaTime); +} + +void SystemView::onCursorChanged(const CursorState& state) +{ + float startPos = mCamOffset; + + const float logoSizeX = logoSize().x() + LOGO_PADDING; + + float posMax = logoSizeX * mEntries.size(); + float target = mCursor * logoSizeX; + + // what's the shortest way to get to our target? + // it's one of these... + + float endPos = target; // directly + float dist = abs(endPos - startPos); + + if(abs(target + posMax - startPos) < dist) + endPos = target + posMax; // loop around the end (0 -> max) + if(abs(target - posMax - startPos) < dist) + endPos = target - posMax; // loop around the start (max - 1 -> -1) + + Animation* anim = new LambdaAnimation( + [startPos, endPos, posMax, this] (float t) + { + t -= 1; + float f = lerp(startPos, endPos, t*t*t + 1); + if(f < 0) + f += posMax; + if(f >= posMax) + f -= posMax; + this->mCamOffset = f; + }, 400); + + setAnimation(anim); +} + +void SystemView::render(const Eigen::Affine3f& parentTrans) +{ + if(size() == 0) + return; + + const float logoSizeX = logoSize().x() + LOGO_PADDING; + + Eigen::Affine3f trans = getTransform() * parentTrans; + + // draw background image + + // draw system's stats + + // now for the list elements (logos) + Eigen::Affine3f logoTrans = trans; + + int logoCount = (int)(mSize.x() / logoSizeX) + 2; // how many logos we need to draw + int center = (int)(mCamOffset / logoSizeX + 0.5f); + + float xOff = (mSize.x() - logoSize().x())/2 - mCamOffset; + float yOff = (mSize.y() - logoSize().y())/2; + + // this fixes the case where i != mCursor when wrapping around the end back to zero + while(center >= (int)mEntries.size()) + { + center -= mEntries.size(); + xOff += logoSizeX * mEntries.size(); + } + + for(int i = center - logoCount/2; i < center + logoCount/2 + logoCount%2; i++) + { + int index = i; + while(index < 0) + index += mEntries.size(); + while(index >= (int)mEntries.size()) + index -= mEntries.size(); + + logoTrans.translation() = trans.translation() + Eigen::Vector3f(i * logoSizeX + xOff, yOff, 0); + + std::shared_ptr comp = mEntries.at(index).data.logo; + if(comp) + { + if(i == mCursor) //scale our selection up + { + // fix the centering because we go by left corner and not center (bleh) + logoTrans.translation() -= Eigen::Vector3f((comp->getSize().x() / 2) * (SELECTED_SCALE - 1), (comp->getSize().y() / 2) * (SELECTED_SCALE - 1), 0); + logoTrans.scale(Eigen::Vector3f(SELECTED_SCALE, SELECTED_SCALE, 1.0f)); + mEntries.at(index).data.logo->render(logoTrans); + logoTrans.scale(Eigen::Vector3f(1/SELECTED_SCALE, 1/SELECTED_SCALE, 1.0f)); + }else{ + mEntries.at(index).data.logo->render(logoTrans); + } + } + } +} + std::vector SystemView::getHelpPrompts() { std::vector prompts; + prompts.push_back(HelpPrompt("left/right", "choose")); prompts.push_back(HelpPrompt("a", "select")); return prompts; } diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 89620bf5f..d3edd9113 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -4,25 +4,37 @@ #include "../components/ImageComponent.h" #include "../components/TextComponent.h" #include "../components/ScrollableContainer.h" +#include "../components/IList.h" +#include "../resources/TextureResource.h" class SystemData; -class SystemView : public GuiComponent +struct SystemViewData +{ + std::shared_ptr title; + std::shared_ptr logo; +}; + +class SystemView : public IList { public: - SystemView(Window* window, SystemData* system); + SystemView(Window* window); - void updateData(); + void goToSystem(SystemData* system); bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; std::vector getHelpPrompts() override; + +protected: + void onCursorChanged(const CursorState& state) override; private: - SystemData* mSystem; + inline Eigen::Vector2f logoSize() const { return Eigen::Vector2f(mSize.x() * 0.3f, mSize.y() * 0.25f); } - TextComponent mHeaderText; - ImageComponent mHeaderImage; - ImageComponent mImage; - ThemeExtras mExtras; + void populate(); + + float mCamOffset; }; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 51f3855b9..063727ac4 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -30,7 +30,10 @@ void ViewController::goToStart() void ViewController::goToSystemView(SystemData* system) { mState.viewing = SYSTEM_SELECT; - mCurrentView = getSystemView(system); + mState.system = system; + + getSystemListView()->goToSystem(system); + mCurrentView = getSystemListView(); updateHelpPrompts(); playViewTransition(); } @@ -54,7 +57,7 @@ void ViewController::goToPrevGameList() void ViewController::goToGameList(SystemData* system) { mState.viewing = GAME_LIST; - mState.data.system = system; + mState.system = system; mCurrentView = getGameListView(system); updateHelpPrompts(); @@ -140,18 +143,15 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste return view; } -std::shared_ptr ViewController::getSystemView(SystemData* system) +std::shared_ptr ViewController::getSystemListView() { //if we already made one, return that one - auto exists = mSystemViews.find(system); - if(exists != mSystemViews.end()) - return exists->second; + if(mSystemListView) + return mSystemListView; - //if we didn't, make it, remember it, and return it - std::shared_ptr view = std::shared_ptr(new SystemView(mWindow, system)); - view->setPosition((system->getIterator() - SystemData::sSystemVector.begin()) * (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - mSystemViews[system] = view; - return view; + mSystemListView = std::shared_ptr(new SystemView(mWindow)); + mSystemListView->setPosition(0, (float)Renderer::getScreenHeight()); + return mSystemListView; } @@ -192,13 +192,9 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f viewStart = trans.inverse().translation(); Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); - // draw systemviews - for(auto it = mSystemViews.begin(); it != mSystemViews.end(); it++) - { - // should do clipping - it->second->render(trans); - } - + // draw systemview + getSystemListView()->render(trans); + // draw gamelists for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { @@ -223,7 +219,6 @@ void ViewController::preload() { for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { - getSystemView(*it); getGameListView(*it); } } diff --git a/src/views/ViewController.h b/src/views/ViewController.h index 5104ef3ec..6c052b310 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -48,14 +48,11 @@ public: { ViewMode viewing; - inline SystemData* getSystem() const { assert(viewing == GAME_LIST); return data.system; } + inline SystemData* getSystem() const { assert(viewing == GAME_LIST || viewing == SYSTEM_SELECT); return system; } private: friend ViewController; - union - { - SystemData* system; - } data; + SystemData* system; }; inline const State& getState() const { return mState; } @@ -65,11 +62,11 @@ public: private: void playViewTransition(); std::shared_ptr getGameListView(SystemData* system); - std::shared_ptr getSystemView(SystemData* system); + std::shared_ptr getSystemListView(); std::shared_ptr mCurrentView; std::map< SystemData*, std::shared_ptr > mGameListViews; - std::map< SystemData*, std::shared_ptr > mSystemViews; + std::shared_ptr mSystemListView; Eigen::Affine3f mCamera; float mFadeOpacity; From 0266b2e8027d9e6162d94633cfa72afd2eb4b272 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 24 Feb 2014 19:26:58 -0600 Subject: [PATCH 169/386] More work on system carousel, added title + background image. --- THEMES.md | 4 ++- src/views/SystemView.cpp | 73 +++++++++++++++++++++++++++------------- src/views/SystemView.h | 4 ++- 3 files changed, 56 insertions(+), 25 deletions(-) diff --git a/THEMES.md b/THEMES.md index e1b826125..124a1fa48 100644 --- a/THEMES.md +++ b/THEMES.md @@ -309,7 +309,9 @@ Reference #### system * `image name="header"` - PATH - - A header (logo) image, to be displayed in the system carousel. + - A header (logo) image, to be displayed in the system logo carousel. +* `image name="systemImage"` - PATH + - A background image displayed behind the carousel. Intended to be a picture of the console on a transparent background (an image with no obvious border). --- diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 29a3594ec..156819132 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -25,11 +25,14 @@ void SystemView::populate() for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { + const std::shared_ptr& theme = (*it)->getTheme(); + Entry e; e.name = (*it)->getName(); e.object = *it; - if((*it)->getTheme()->getElement("system", "header", "image")) + // make logo + if(theme->getElement("system", "header", "image")) { ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(logoSize()); @@ -46,8 +49,24 @@ void SystemView::populate() e.data.logo = std::shared_ptr(text); } - e.data.title = nullptr; + // make title + e.data.title = std::shared_ptr(new TextComponent(mWindow)); + e.data.title->setFont(Font::get(FONT_SIZE_LARGE)); + e.data.title->setSize(mSize.x(), (float)FONT_SIZE_LARGE); + e.data.title->setText((*it)->getFullName()); + e.data.title->setCentered(true); + // make background + if(theme->getElement("system", "systemImage", "image")) + { + e.data.background = std::shared_ptr(new ImageComponent(mWindow)); + e.data.background->applyTheme(theme, "system", "systemImage", ThemeFlags::PATH); + e.data.background->setOpacity((unsigned char)(255 * 0.75f)); // make it 75% opaque + e.data.background->setPosition((mSize.x() - e.data.background->getSize().x()) / 2, (mSize.y() - e.data.background->getSize().y()) / 2); // center it (it's drawn at (0, 0)) + }else{ + e.data.background = nullptr; + } + this->add(e); } } @@ -95,10 +114,8 @@ void SystemView::onCursorChanged(const CursorState& state) { float startPos = mCamOffset; - const float logoSizeX = logoSize().x() + LOGO_PADDING; - - float posMax = logoSizeX * mEntries.size(); - float target = mCursor * logoSizeX; + float posMax = (float)mEntries.size(); + float target = (float)mCursor; // what's the shortest way to get to our target? // it's one of these... @@ -121,7 +138,7 @@ void SystemView::onCursorChanged(const CursorState& state) if(f >= posMax) f -= posMax; this->mCamOffset = f; - }, 400); + }, 500); setAnimation(anim); } @@ -131,30 +148,40 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) if(size() == 0) return; - const float logoSizeX = logoSize().x() + LOGO_PADDING; - Eigen::Affine3f trans = getTransform() * parentTrans; - // draw background image - - // draw system's stats - - // now for the list elements (logos) + // draw the list elements (titles, backgrounds, logos) Eigen::Affine3f logoTrans = trans; + const float logoSizeX = logoSize().x() + LOGO_PADDING; + int logoCount = (int)(mSize.x() / logoSizeX) + 2; // how many logos we need to draw - int center = (int)(mCamOffset / logoSizeX + 0.5f); + int center = (int)(mCamOffset); - float xOff = (mSize.x() - logoSize().x())/2 - mCamOffset; - float yOff = (mSize.y() - logoSize().y())/2; - - // this fixes the case where i != mCursor when wrapping around the end back to zero - while(center >= (int)mEntries.size()) + // draw titles + background images (same transforms) + Eigen::Affine3f titleTrans = trans; + for(int i = center - 1; i < center + 2; i++) { - center -= mEntries.size(); - xOff += logoSizeX * mEntries.size(); + int index = i; + while(index < 0) + index += mEntries.size(); + while(index >= (int)mEntries.size()) + index -= mEntries.size(); + + titleTrans.translation() = trans.translation() + Eigen::Vector3f((i - mCamOffset) * mSize.x(), 0, 0); + + // background image (might not exist) + if(mEntries.at(index).data.background) + mEntries.at(index).data.background->render(titleTrans); + + // title (always exists) + mEntries.at(index).data.title->render(titleTrans); } + // draw logos + float xOff = (mSize.x() - logoSize().x())/2 - (mCamOffset * logoSizeX); + float yOff = (mSize.y() - logoSize().y())/2; + for(int i = center - logoCount/2; i < center + logoCount/2 + logoCount%2; i++) { int index = i; @@ -168,7 +195,7 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) std::shared_ptr comp = mEntries.at(index).data.logo; if(comp) { - if(i == mCursor) //scale our selection up + if(index == mCursor) //scale our selection up { // fix the centering because we go by left corner and not center (bleh) logoTrans.translation() -= Eigen::Vector3f((comp->getSize().x() / 2) * (SELECTED_SCALE - 1), (comp->getSize().y() / 2) * (SELECTED_SCALE - 1), 0); diff --git a/src/views/SystemView.h b/src/views/SystemView.h index d3edd9113..a28f51553 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -11,8 +11,9 @@ class SystemData; struct SystemViewData { - std::shared_ptr title; + std::shared_ptr title; std::shared_ptr logo; + std::shared_ptr background; }; class SystemView : public IList @@ -36,5 +37,6 @@ private: void populate(); + // unit is list index float mCamOffset; }; From 4c3b4834be37816ecd35d0ec1aa9da88a606fd43 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 27 Feb 2014 14:20:31 -0600 Subject: [PATCH 170/386] Replaced hard-coded background + title in SystemView with a ThemeExtras layer. --- CMakeLists.txt | 2 ++ THEMES.md | 4 +--- src/views/SystemView.cpp | 33 +++++++-------------------------- src/views/SystemView.h | 3 +-- 4 files changed, 11 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e8de9ed9..abf5a2c12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,6 +167,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h @@ -245,6 +246,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp diff --git a/THEMES.md b/THEMES.md index 124a1fa48..d3234b55d 100644 --- a/THEMES.md +++ b/THEMES.md @@ -310,9 +310,7 @@ Reference #### system * `image name="header"` - PATH - A header (logo) image, to be displayed in the system logo carousel. -* `image name="systemImage"` - PATH - - A background image displayed behind the carousel. Intended to be a picture of the console on a transparent background (an image with no obvious border). - +* You can use extra elements (elements with `extra="true"`) to add your own backgrounds, etc. They will be displayed behind the carousel, and scroll relative to the carousel. --- #### fastSelect diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 156819132..3a643477c 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -49,23 +49,9 @@ void SystemView::populate() e.data.logo = std::shared_ptr(text); } - // make title - e.data.title = std::shared_ptr(new TextComponent(mWindow)); - e.data.title->setFont(Font::get(FONT_SIZE_LARGE)); - e.data.title->setSize(mSize.x(), (float)FONT_SIZE_LARGE); - e.data.title->setText((*it)->getFullName()); - e.data.title->setCentered(true); - - // make background - if(theme->getElement("system", "systemImage", "image")) - { - e.data.background = std::shared_ptr(new ImageComponent(mWindow)); - e.data.background->applyTheme(theme, "system", "systemImage", ThemeFlags::PATH); - e.data.background->setOpacity((unsigned char)(255 * 0.75f)); // make it 75% opaque - e.data.background->setPosition((mSize.x() - e.data.background->getSize().x()) / 2, (mSize.y() - e.data.background->getSize().y()) / 2); // center it (it's drawn at (0, 0)) - }else{ - e.data.background = nullptr; - } + // make background extras + e.data.backgroundExtras = std::shared_ptr(new ThemeExtras(mWindow)); + e.data.backgroundExtras->setExtras(ThemeData::makeExtras((*it)->getTheme(), "system", mWindow)); this->add(e); } @@ -158,8 +144,8 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) int logoCount = (int)(mSize.x() / logoSizeX) + 2; // how many logos we need to draw int center = (int)(mCamOffset); - // draw titles + background images (same transforms) - Eigen::Affine3f titleTrans = trans; + // draw background extras + Eigen::Affine3f extrasTrans = trans; for(int i = center - 1; i < center + 2; i++) { int index = i; @@ -168,14 +154,9 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) while(index >= (int)mEntries.size()) index -= mEntries.size(); - titleTrans.translation() = trans.translation() + Eigen::Vector3f((i - mCamOffset) * mSize.x(), 0, 0); + extrasTrans.translation() = trans.translation() + Eigen::Vector3f((i - mCamOffset) * mSize.x(), 0, 0); - // background image (might not exist) - if(mEntries.at(index).data.background) - mEntries.at(index).data.background->render(titleTrans); - - // title (always exists) - mEntries.at(index).data.title->render(titleTrans); + mEntries.at(index).data.backgroundExtras->render(extrasTrans); } // draw logos diff --git a/src/views/SystemView.h b/src/views/SystemView.h index a28f51553..ede6d7460 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -11,9 +11,8 @@ class SystemData; struct SystemViewData { - std::shared_ptr title; std::shared_ptr logo; - std::shared_ptr background; + std::shared_ptr backgroundExtras; }; class SystemView : public IList From 64aaac050f1f846f4c33bbc8339c299c820cd0c9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 27 Feb 2014 15:25:30 -0600 Subject: [PATCH 171/386] Fix centering of logos in SystemView (text is still a bit wonky). Added a band beneath the logo carousel to improve visibility. Revert CMakeLists.txt because I didn't mean to commit it yet. --- CMakeLists.txt | 2 -- src/components/MenuComponent.cpp | 0 src/components/MenuComponent.h | 12 ++++++++++++ src/components/TextComponent.cpp | 8 ++++---- src/views/SystemView.cpp | 20 +++++++++++++------- 5 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 src/components/MenuComponent.cpp create mode 100644 src/components/MenuComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index abf5a2c12..2e8de9ed9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,7 +167,6 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h @@ -246,7 +245,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h new file mode 100644 index 000000000..dbc3e212d --- /dev/null +++ b/src/components/MenuComponent.h @@ -0,0 +1,12 @@ +#pragma once + +#include "IList.h" + +class MenuComponent : public IList +{ +public: + MenuComponent(Window* window); + +private: + +}; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 83b073c64..badf75b6e 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -83,11 +83,11 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mCentered) { const Eigen::Vector2f& textSize = mTextCache->metrics.size; - Eigen::Vector2f pos((getSize().x() - textSize.x()) / 2, 0); + Eigen::Vector3f off((getSize().x() - textSize.x()) / 2, 0, 0); - Eigen::Affine3f centeredTrans = trans; - centeredTrans = centeredTrans.translate(Eigen::Vector3f(pos.x(), pos.y(), 0)); - Renderer::setMatrix(centeredTrans); + trans.translate(off); + Renderer::setMatrix(trans); + trans.translate(-off); }else{ Renderer::setMatrix(trans); } diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 3a643477c..3de5e6426 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -7,8 +7,8 @@ #include "../animations/LambdaAnimation.h" #include "../SystemData.h" -#define SELECTED_SCALE 1.2f -#define LOGO_PADDING (logoSize().x() * (SELECTED_SCALE - 1)/2) +#define SELECTED_SCALE 1.25f +#define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.075f)) SystemView::SystemView(Window* window) : IList(window) { @@ -37,15 +37,16 @@ void SystemView::populate() ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(logoSize()); logo->applyTheme((*it)->getTheme(), "system", "header", ThemeFlags::PATH); - logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, 0); + logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // vertically and horizontally center e.data.logo = std::shared_ptr(logo); }else{ // no logo in theme; use text TextComponent* text = new TextComponent(mWindow); text->setFont(Font::get(FONT_SIZE_LARGE)); text->setText((*it)->getName()); - text->setSize(logoSize()); - text->setCentered(true); + text->setSize(logoSize().x(), 0); + text->setPosition(0, (logoSize().y() - text->getSize().y()) / 2); // vertically center + text->setCentered(true); // horizontally center e.data.logo = std::shared_ptr(text); } @@ -163,7 +164,11 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) float xOff = (mSize.x() - logoSize().x())/2 - (mCamOffset * logoSizeX); float yOff = (mSize.y() - logoSize().y())/2; - for(int i = center - logoCount/2; i < center + logoCount/2 + logoCount%2; i++) + // background behind the logos + Renderer::setMatrix(trans); + Renderer::drawRect(0, yOff - (logoSize().y() * 0.2f) / 2, mSize.x(), logoSize().y() * 1.2f, 0xFFFFFFBB); + + for(int i = center - logoCount/2; i < center + logoCount/2 + 1; i++) { int index = i; while(index < 0) @@ -179,7 +184,8 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) if(index == mCursor) //scale our selection up { // fix the centering because we go by left corner and not center (bleh) - logoTrans.translation() -= Eigen::Vector3f((comp->getSize().x() / 2) * (SELECTED_SCALE - 1), (comp->getSize().y() / 2) * (SELECTED_SCALE - 1), 0); + logoTrans.translation() -= Eigen::Vector3f(((comp->getSize().x() + comp->getPosition().x()) / 2) * (SELECTED_SCALE - 1), + ((comp->getSize().y() + comp->getPosition().y()) / 2) * (SELECTED_SCALE - 1), 0); logoTrans.scale(Eigen::Vector3f(SELECTED_SCALE, SELECTED_SCALE, 1.0f)); mEntries.at(index).data.logo->render(logoTrans); logoTrans.scale(Eigen::Vector3f(1/SELECTED_SCALE, 1/SELECTED_SCALE, 1.0f)); From 8e8c2fed6b384dfbd66d3850a5bc41461c9fa86d Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 28 Feb 2014 18:48:11 -0600 Subject: [PATCH 172/386] Tweaked some system view constants. Centering still screwy. --- src/views/SystemView.cpp | 19 ++++++++++++------- src/views/SystemView.h | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 3de5e6426..e640ed0a7 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -7,8 +7,8 @@ #include "../animations/LambdaAnimation.h" #include "../SystemData.h" -#define SELECTED_SCALE 1.25f -#define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.075f)) +#define SELECTED_SCALE 1.5f +#define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.06f)) SystemView::SystemView(Window* window) : IList(window) { @@ -138,8 +138,6 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = getTransform() * parentTrans; // draw the list elements (titles, backgrounds, logos) - Eigen::Affine3f logoTrans = trans; - const float logoSizeX = logoSize().x() + LOGO_PADDING; int logoCount = (int)(mSize.x() / logoSizeX) + 2; // how many logos we need to draw @@ -166,8 +164,10 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) // background behind the logos Renderer::setMatrix(trans); - Renderer::drawRect(0, yOff - (logoSize().y() * 0.2f) / 2, mSize.x(), logoSize().y() * 1.2f, 0xFFFFFFBB); + Renderer::drawRect(0, (int)(yOff - (logoSize().y() * (SELECTED_SCALE - 1)) / 2), + (int)mSize.x(), (int)(logoSize().y() * SELECTED_SCALE), 0xDDDDDDD8); + Eigen::Affine3f logoTrans = trans; for(int i = center - logoCount/2; i < center + logoCount/2 + 1; i++) { int index = i; @@ -183,13 +183,18 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) { if(index == mCursor) //scale our selection up { + comp->setOpacity(0xFF); + // fix the centering because we go by left corner and not center (bleh) - logoTrans.translation() -= Eigen::Vector3f(((comp->getSize().x() + comp->getPosition().x()) / 2) * (SELECTED_SCALE - 1), - ((comp->getSize().y() + comp->getPosition().y()) / 2) * (SELECTED_SCALE - 1), 0); + // CAN SOMEONE WHO ACTUALLY UNDERSTANDS MATRICES GIVE AN ACTUAL IMPLEMENTATION OF THIS THAT ACTUALLY WORKS? + logoTrans.translation() -= Eigen::Vector3f(((comp->getSize().x() + comp->getPosition().x()) * (1/SELECTED_SCALE)) / 2, + ((comp->getSize().y() + comp->getPosition().y()) * (1/SELECTED_SCALE)) / 2, 0); + logoTrans.scale(Eigen::Vector3f(SELECTED_SCALE, SELECTED_SCALE, 1.0f)); mEntries.at(index).data.logo->render(logoTrans); logoTrans.scale(Eigen::Vector3f(1/SELECTED_SCALE, 1/SELECTED_SCALE, 1.0f)); }else{ + comp->setOpacity(0x80); mEntries.at(index).data.logo->render(logoTrans); } } diff --git a/src/views/SystemView.h b/src/views/SystemView.h index ede6d7460..df7e0ab70 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -32,7 +32,7 @@ protected: void onCursorChanged(const CursorState& state) override; private: - inline Eigen::Vector2f logoSize() const { return Eigen::Vector2f(mSize.x() * 0.3f, mSize.y() * 0.25f); } + inline Eigen::Vector2f logoSize() const { return Eigen::Vector2f(mSize.x() * 0.25f, mSize.y() * 0.175f); } void populate(); From 139fc720ac3303c43d0a63927143f676a86715f7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 28 Feb 2014 18:52:32 -0600 Subject: [PATCH 173/386] Moved Guis from src/components to src/guis. Renamed ComponentListComponent to ComponentGrid. Changed some older files' #ifdefs to #pragma once to be more consistent. --- CMakeLists.txt | 52 +++++++++-------- ...entListComponent.cpp => ComponentGrid.cpp} | 58 +++++++++---------- ...mponentListComponent.h => ComponentGrid.h} | 31 ++-------- src/components/MenuComponent.h | 12 ---- src/components/TextEditComponent.cpp | 1 - src/{components => guis}/GuiDetectDevice.cpp | 0 src/{components => guis}/GuiDetectDevice.h | 5 +- src/{components => guis}/GuiFastSelect.cpp | 0 src/{components => guis}/GuiFastSelect.h | 4 +- src/{components => guis}/GuiGameScraper.cpp | 16 ++--- src/{components => guis}/GuiGameScraper.h | 14 ++--- src/{components => guis}/GuiInputConfig.cpp | 0 src/{components => guis}/GuiInputConfig.h | 5 +- src/{components => guis}/GuiMenu.cpp | 0 src/{components => guis}/GuiMenu.h | 4 +- src/{components => guis}/GuiMetaDataEd.cpp | 14 ++--- src/{components => guis}/GuiMetaDataEd.h | 13 +++-- src/{components => guis}/GuiMsgBoxOk.cpp | 0 src/{components => guis}/GuiMsgBoxOk.h | 2 +- src/{components => guis}/GuiMsgBoxYesNo.cpp | 0 src/{components => guis}/GuiMsgBoxYesNo.h | 2 +- src/{components => guis}/GuiScraperLog.cpp | 2 +- src/{components => guis}/GuiScraperLog.h | 7 ++- src/{components => guis}/GuiScraperStart.cpp | 14 ++--- src/{components => guis}/GuiScraperStart.h | 22 ++----- src/{components => guis}/GuiSettingsMenu.cpp | 30 +++++----- src/{components => guis}/GuiSettingsMenu.h | 22 +++---- src/main.cpp | 2 +- src/scrapers/GamesDBScraper.cpp | 2 +- src/scrapers/TheArchiveScraper.cpp | 2 +- src/views/ViewController.cpp | 2 +- src/views/gamelist/IGameListView.cpp | 6 +- 32 files changed, 147 insertions(+), 197 deletions(-) rename src/components/{ComponentListComponent.cpp => ComponentGrid.cpp} (83%) rename src/components/{ComponentListComponent.h => ComponentGrid.h} (73%) rename src/{components => guis}/GuiDetectDevice.cpp (100%) rename src/{components => guis}/GuiDetectDevice.h (84%) rename src/{components => guis}/GuiFastSelect.cpp (100%) rename src/{components => guis}/GuiFastSelect.h (87%) rename src/{components => guis}/GuiGameScraper.cpp (94%) rename src/{components => guis}/GuiGameScraper.h (80%) rename src/{components => guis}/GuiInputConfig.cpp (100%) rename src/{components => guis}/GuiInputConfig.h (86%) rename src/{components => guis}/GuiMenu.cpp (100%) rename src/{components => guis}/GuiMenu.h (78%) rename src/{components => guis}/GuiMetaDataEd.cpp (96%) rename src/{components => guis}/GuiMetaDataEd.h (84%) rename src/{components => guis}/GuiMsgBoxOk.cpp (100%) rename src/{components => guis}/GuiMsgBoxOk.h (93%) rename src/{components => guis}/GuiMsgBoxYesNo.cpp (100%) rename src/{components => guis}/GuiMsgBoxYesNo.h (93%) rename src/{components => guis}/GuiScraperLog.cpp (100%) rename src/{components => guis}/GuiScraperLog.h (92%) rename src/{components => guis}/GuiScraperStart.cpp (92%) rename src/{components => guis}/GuiScraperStart.h (79%) rename src/{components => guis}/GuiSettingsMenu.cpp (86%) rename src/{components => guis}/GuiSettingsMenu.h (67%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e8de9ed9..70aab95a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,12 +161,13 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h @@ -176,17 +177,18 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.h + + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxOk.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxYesNo.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettingsMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperLog.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h @@ -241,10 +243,11 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentListComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp @@ -252,17 +255,18 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiDetectDevice.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiFastSelect.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMetaDataEd.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxOk.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMsgBoxYesNo.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiGameScraper.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiInputConfig.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiMenu.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiSettingsMenu.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperStart.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GuiScraperLog.cpp + + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxOk.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxYesNo.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettingsMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperLog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp diff --git a/src/components/ComponentListComponent.cpp b/src/components/ComponentGrid.cpp similarity index 83% rename from src/components/ComponentListComponent.cpp rename to src/components/ComponentGrid.cpp index 53b7dec1e..ccf6d32ef 100644 --- a/src/components/ComponentListComponent.cpp +++ b/src/components/ComponentGrid.cpp @@ -1,10 +1,10 @@ -#include "ComponentListComponent.h" +#include "ComponentGrid.h" #include "../Log.h" #include "../Renderer.h" #define INITIAL_CELL_SIZE 12 -ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), +ComponentGrid::ComponentGrid(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), mGrid(NULL), mColumnWidths(NULL), mRowHeights(NULL), mColumnWidthForced(NULL), mRowHeightForced(NULL), mCursor(-1, -1) @@ -13,7 +13,7 @@ ComponentListComponent::ComponentListComponent(Window* window, Eigen::Vector2i g makeCells(gridDimensions); } -ComponentListComponent::~ComponentListComponent() +ComponentGrid::~ComponentGrid() { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { @@ -21,7 +21,7 @@ ComponentListComponent::~ComponentListComponent() } } -void ComponentListComponent::makeCells(Eigen::Vector2i size) +void ComponentGrid::makeCells(Eigen::Vector2i size) { if(mGrid) delete[] mGrid; @@ -50,7 +50,7 @@ void ComponentListComponent::makeCells(Eigen::Vector2i size) resetCursor(); } -void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, +void ComponentGrid::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, Eigen::Matrix autoFit, UpdateBehavior updateType) { if(pos.x() > mGridSize.x() || pos.y() > mGridSize.y() || pos.x() < 0 || pos.y() < 0) @@ -78,7 +78,7 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, } if(component->getParent() != NULL) - LOG(LogError) << "ComponentListComponent ruining an existing parent-child relationship! Call a social worker!"; + LOG(LogError) << "ComponentGrid ruining an existing parent-child relationship! Call a social worker!"; component->setParent(this); if(!cursorValid() && canFocus) @@ -96,7 +96,7 @@ void ComponentListComponent::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, updateSize(); } -void ComponentListComponent::removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2i size) +void ComponentGrid::removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2i size) { auto iter = mEntries.begin(); while(iter != mEntries.end()) @@ -126,7 +126,7 @@ void ComponentListComponent::removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2 resetCursor(); } -void ComponentListComponent::forceRowHeight(int row, unsigned int size) +void ComponentGrid::forceRowHeight(int row, unsigned int size) { mRowHeights[row] = size; mRowHeightForced[row] = true; @@ -134,7 +134,7 @@ void ComponentListComponent::forceRowHeight(int row, unsigned int size) updateComponentOffsets(); } -void ComponentListComponent::forceColumnWidth(int col, unsigned int size) +void ComponentGrid::forceColumnWidth(int col, unsigned int size) { mColumnWidths[col] = size; mColumnWidthForced[col] = true; @@ -142,10 +142,10 @@ void ComponentListComponent::forceColumnWidth(int col, unsigned int size) updateComponentOffsets(); } -unsigned int ComponentListComponent::getRowHeight(int row) { return mRowHeights[row]; } -unsigned int ComponentListComponent::getColumnWidth(int col) { return mColumnWidths[col]; } +unsigned int ComponentGrid::getRowHeight(int row) { return mRowHeights[row]; } +unsigned int ComponentGrid::getColumnWidth(int col) { return mColumnWidths[col]; } -Eigen::Vector3f ComponentListComponent::getCellOffset(Eigen::Vector2i pos) +Eigen::Vector3f ComponentGrid::getCellOffset(Eigen::Vector2i pos) { Eigen::Vector3f offset(0, 0, 0); @@ -177,7 +177,7 @@ Eigen::Vector3f ComponentListComponent::getCellOffset(Eigen::Vector2i pos) return offset; } -void ComponentListComponent::setCell(unsigned int x, unsigned int y, ComponentEntry* entry) +void ComponentGrid::setCell(unsigned int x, unsigned int y, ComponentEntry* entry) { if(x >= (unsigned int)mGridSize.x() || y >= (unsigned int)mGridSize.y()) { @@ -188,7 +188,7 @@ void ComponentListComponent::setCell(unsigned int x, unsigned int y, ComponentEn mGrid[y * mGridSize.x() + x] = entry; } -ComponentListComponent::ComponentEntry* ComponentListComponent::getCell(unsigned int x, unsigned int y) +ComponentGrid::ComponentEntry* ComponentGrid::getCell(unsigned int x, unsigned int y) { if(x >= (unsigned int)mGridSize.x() || y >= (unsigned int)mGridSize.y()) { @@ -199,7 +199,7 @@ ComponentListComponent::ComponentEntry* ComponentListComponent::getCell(unsigned return mGrid[y * mGridSize.x() + x]; } -void ComponentListComponent::updateSize() +void ComponentGrid::updateSize() { mSize = Eigen::Vector2f(0, 0); for(int x = 0; x < mGridSize.x(); x++) @@ -208,7 +208,7 @@ void ComponentListComponent::updateSize() mSize.y() += getRowHeight(y); } -void ComponentListComponent::updateComponentOffsets() +void ComponentGrid::updateComponentOffsets() { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { @@ -216,7 +216,7 @@ void ComponentListComponent::updateComponentOffsets() } } -void ComponentListComponent::updateCellSize(ComponentEntry* e, bool updWidth, bool updHeight) +void ComponentGrid::updateCellSize(ComponentEntry* e, bool updWidth, bool updHeight) { if(!e) { @@ -263,7 +263,7 @@ void ComponentListComponent::updateCellSize(ComponentEntry* e, bool updWidth, bo updateSize(); } -void ComponentListComponent::updateComponent(GuiComponent* cmp) +void ComponentGrid::updateComponent(GuiComponent* cmp) { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { @@ -274,7 +274,7 @@ void ComponentListComponent::updateComponent(GuiComponent* cmp) } } -bool ComponentListComponent::input(InputConfig* config, Input input) +bool ComponentGrid::input(InputConfig* config, Input input) { if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component->input(config, input)) return true; @@ -306,7 +306,7 @@ bool ComponentListComponent::input(InputConfig* config, Input input) return false; } -void ComponentListComponent::resetCursor() +void ComponentGrid::resetCursor() { auto iter = mEntries.begin(); while(iter != mEntries.end()) @@ -327,7 +327,7 @@ void ComponentListComponent::resetCursor() onCursorMoved(origCursor, mCursor); } -void ComponentListComponent::moveCursor(Eigen::Vector2i dir) +void ComponentGrid::moveCursor(Eigen::Vector2i dir) { if(dir.x() != 0 && dir.y() != 0) { @@ -390,7 +390,7 @@ void ComponentListComponent::moveCursor(Eigen::Vector2i dir) mCursor = origCursor; } -bool ComponentListComponent::cursorValid() +bool ComponentGrid::cursorValid() { if(mCursor.x() < 0 || mCursor.y() < 0 || mCursor.x() >= mGridSize.x() || mCursor.y() >= mGridSize.y()) return false; @@ -398,7 +398,7 @@ bool ComponentListComponent::cursorValid() return getCell(mCursor.x(), mCursor.y()) != NULL; } -void ComponentListComponent::update(int deltaTime) +void ComponentGrid::update(int deltaTime) { for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) { @@ -416,7 +416,7 @@ void ComponentListComponent::update(int deltaTime) } } -void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) +void ComponentGrid::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); @@ -459,25 +459,25 @@ void ComponentListComponent::render(const Eigen::Affine3f& parentTrans) } -void ComponentListComponent::textInput(const char* text) +void ComponentGrid::textInput(const char* text) { if(getSelectedComponent() != NULL) getSelectedComponent()->textInput(text); } -void ComponentListComponent::onPositionChanged() +void ComponentGrid::onPositionChanged() { updateComponentOffsets(); } -GuiComponent* ComponentListComponent::getSelectedComponent() +GuiComponent* ComponentGrid::getSelectedComponent() { if(!cursorValid()) return NULL; return getCell(mCursor.x(), mCursor.y())->component; } -void ComponentListComponent::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to) +void ComponentGrid::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to) { if(from != Eigen::Vector2i(-1, -1)) getCell(from.x(), from.y())->component->onFocusLost(); @@ -488,7 +488,7 @@ void ComponentListComponent::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i updateHelpPrompts(); } -std::vector ComponentListComponent::getHelpPrompts() +std::vector ComponentGrid::getHelpPrompts() { std::vector prompts; if(cursorValid()) diff --git a/src/components/ComponentListComponent.h b/src/components/ComponentGrid.h similarity index 73% rename from src/components/ComponentListComponent.h rename to src/components/ComponentGrid.h index 8adbd2c67..635f94fd0 100644 --- a/src/components/ComponentListComponent.h +++ b/src/components/ComponentGrid.h @@ -2,11 +2,12 @@ #include "../GuiComponent.h" -class ComponentListComponent : public GuiComponent +// Used to arrange a bunch of components in a spreadsheet-esque grid. +class ComponentGrid : public GuiComponent { public: - ComponentListComponent(Window* window, Eigen::Vector2i gridDimensions); - virtual ~ComponentListComponent(); + ComponentGrid(Window* window, Eigen::Vector2i gridDimensions); + virtual ~ComponentGrid(); enum UpdateBehavior { @@ -92,27 +93,3 @@ private: void updateComponentOffsets(); void updateCellSize(ComponentEntry* e, bool updWidth = true, bool updHeight = true); }; - -//ability to define a list of components in terms of a grid -//these comments are kinda old - -//input -//pass to selected component -// if returns true, stop -// else, process: -// if input == up/down -// scroll to prev/next selectable component in grid Y -// if input == left/right -// scroll to prev/next selectable component in grid X - -//entry struct/class -// GuiComponent* component - component to work with -// bool canFocus - can we pass input to this? (necessary for labels to not be selectable) -// UpdateBehavior update - how to handle updates (all the time or only when focused) - -//update -//pass update to all entries with appropriate update behavior - -//render -//clip rect to our size -//render a "selected" effect behind component with focus somehow diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index dbc3e212d..e69de29bb 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -1,12 +0,0 @@ -#pragma once - -#include "IList.h" - -class MenuComponent : public IList -{ -public: - MenuComponent(Window* window); - -private: - -}; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index bb6fec7a6..6d4ff0e0f 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -3,7 +3,6 @@ #include "../resources/Font.h" #include "../Window.h" #include "../Renderer.h" -#include "ComponentListComponent.h" TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), mBox(window, ":/textbox.png"), mFocused(false), diff --git a/src/components/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp similarity index 100% rename from src/components/GuiDetectDevice.cpp rename to src/guis/GuiDetectDevice.cpp diff --git a/src/components/GuiDetectDevice.h b/src/guis/GuiDetectDevice.h similarity index 84% rename from src/components/GuiDetectDevice.h rename to src/guis/GuiDetectDevice.h index c8041ff4d..b96cdc0b5 100644 --- a/src/components/GuiDetectDevice.h +++ b/src/guis/GuiDetectDevice.h @@ -1,5 +1,4 @@ -#ifndef _GUIDETECTDEVICE_H_ -#define _GUIDETECTDEVICE_H_ +#pragma once #include "../GuiComponent.h" @@ -19,5 +18,3 @@ private: int mFinishTimer; int mCurrentPlayer; }; - -#endif diff --git a/src/components/GuiFastSelect.cpp b/src/guis/GuiFastSelect.cpp similarity index 100% rename from src/components/GuiFastSelect.cpp rename to src/guis/GuiFastSelect.cpp diff --git a/src/components/GuiFastSelect.h b/src/guis/GuiFastSelect.h similarity index 87% rename from src/components/GuiFastSelect.h rename to src/guis/GuiFastSelect.h index 3e2eb309f..9c23b28bb 100644 --- a/src/components/GuiFastSelect.h +++ b/src/guis/GuiFastSelect.h @@ -3,8 +3,8 @@ #include "../GuiComponent.h" #include "../views/gamelist/IGameListView.h" -#include "NinePatchComponent.h" -#include "TextComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/TextComponent.h" class GuiFastSelect : public GuiComponent { diff --git a/src/components/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp similarity index 94% rename from src/components/GuiGameScraper.cpp rename to src/guis/GuiGameScraper.cpp index fb6195095..bfee6c299 100644 --- a/src/components/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -49,29 +49,29 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: using namespace Eigen; - mList.setEntry(Vector2i(0, 0), Vector2i(2, 1), &mHeader, false, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(0, 0), Vector2i(2, 1), &mHeader, false, ComponentGrid::AlignCenter); //y = 1 is a spacer row mResultName.setText(params.game->getName()); mResultName.setColor(0x3B56CCFF); - mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentGrid::AlignLeft); mResultDesc.setText(params.game->metadata.get("desc")); mResultDesc.setSize(col1Width, 0); mResultInfo.addChild(&mResultDesc); mResultInfo.setSize(mResultDesc.getSize().x(), mResultDesc.getFont()->getHeight() * 3.0f); - mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentGrid::AlignLeft); mResultThumbnail.setMaxSize(col2Width, mResultInfo.getSize().y()); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mResultThumbnail, false, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mResultThumbnail, false, ComponentGrid::AlignCenter); //y = 3 is a spacer row - mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentGrid::AlignLeft); mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : getCleanFileName(params.game->getPath())); mSearchText.setSize(listWidth - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); - mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentGrid::AlignRight); //y = 5 is a spacer row @@ -112,12 +112,12 @@ void GuiGameScraper::onSearchDone(std::vector results) if(end == 0) { mResultNames.at(0).setText("No games found!"); - mList.setEntry(Eigen::Vector2i(0, 6), Eigen::Vector2i(1, 1), &mResultNames.at(0), false, ComponentListComponent::AlignLeft); + mList.setEntry(Eigen::Vector2i(0, 6), Eigen::Vector2i(1, 1), &mResultNames.at(0), false, ComponentGrid::AlignLeft); }else{ for(int i = 0; i < end; i++) { mResultNames.at(i).setText(results.at(i).get("name")); - mList.setEntry(Eigen::Vector2i(0, 6 + i), Eigen::Vector2i(1, 1), &mResultNames.at(i), true, ComponentListComponent::AlignLeft); + mList.setEntry(Eigen::Vector2i(0, 6 + i), Eigen::Vector2i(1, 1), &mResultNames.at(i), true, ComponentGrid::AlignLeft); } } diff --git a/src/components/GuiGameScraper.h b/src/guis/GuiGameScraper.h similarity index 80% rename from src/components/GuiGameScraper.h rename to src/guis/GuiGameScraper.h index a7fe658ea..26af7a416 100644 --- a/src/components/GuiGameScraper.h +++ b/src/guis/GuiGameScraper.h @@ -2,14 +2,14 @@ #include "../GuiComponent.h" #include "../scrapers/Scraper.h" -#include "ComponentListComponent.h" -#include "TextComponent.h" -#include "ScrollableContainer.h" -#include "TextEditComponent.h" -#include "NinePatchComponent.h" +#include "../components/ComponentGrid.h" +#include "../components/TextComponent.h" +#include "../components/ScrollableContainer.h" +#include "../components/TextEditComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/ImageComponent.h" #include "../Settings.h" #include "../HttpReq.h" -#include "ImageComponent.h" #define MAX_SCRAPER_RESULTS 5 @@ -31,7 +31,7 @@ private: void updateInfoPane(); void updateThumbnail(); - ComponentListComponent mList; + ComponentGrid mList; NinePatchComponent mBox; TextComponent mHeader; diff --git a/src/components/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp similarity index 100% rename from src/components/GuiInputConfig.cpp rename to src/guis/GuiInputConfig.cpp diff --git a/src/components/GuiInputConfig.h b/src/guis/GuiInputConfig.h similarity index 86% rename from src/components/GuiInputConfig.h rename to src/guis/GuiInputConfig.h index 05c23c157..3b0fb9bb0 100644 --- a/src/components/GuiInputConfig.h +++ b/src/guis/GuiInputConfig.h @@ -1,5 +1,4 @@ -#ifndef _GUIINPUTCONFIG_H_ -#define _GUIINPUTCONFIG_H_ +#pragma once #include "../GuiComponent.h" #include @@ -19,5 +18,3 @@ private: int mCurInputId; bool mCanSkip; }; - -#endif diff --git a/src/components/GuiMenu.cpp b/src/guis/GuiMenu.cpp similarity index 100% rename from src/components/GuiMenu.cpp rename to src/guis/GuiMenu.cpp diff --git a/src/components/GuiMenu.h b/src/guis/GuiMenu.h similarity index 78% rename from src/components/GuiMenu.h rename to src/guis/GuiMenu.h index a620435dd..4cfe21d36 100644 --- a/src/components/GuiMenu.h +++ b/src/guis/GuiMenu.h @@ -1,8 +1,8 @@ #pragma once #include "../GuiComponent.h" -#include "TextListComponent.h" -#include "NinePatchComponent.h" +#include "../components/TextListComponent.h" +#include "../components/NinePatchComponent.h" #include class GuiMenu : public GuiComponent diff --git a/src/components/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp similarity index 96% rename from src/components/GuiMetaDataEd.cpp rename to src/guis/GuiMetaDataEd.cpp index cb48a0ccd..272c97320 100644 --- a/src/components/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -1,11 +1,11 @@ #include "GuiMetaDataEd.h" #include "../Renderer.h" #include "../Log.h" -#include "AsyncReqComponent.h" +#include "../components/AsyncReqComponent.h" #include "../Settings.h" #include "GuiGameScraper.h" -#include #include "GuiMsgBoxYesNo.h" +#include #define MDED_RESERVED_ROWS 3 @@ -84,10 +84,10 @@ void GuiMetaDataEd::populateList(const std::vector& mdd) int y = 0; //fetch button - mList.setEntry(Vector2i(0, y), Vector2i(1, 1), &mFetchButton, true, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, y), Vector2i(1, 1), &mFetchButton, true, ComponentGrid::AlignLeft); //delete button - mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mDeleteButton, true, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mDeleteButton, true, ComponentGrid::AlignRight); y++; @@ -95,20 +95,20 @@ void GuiMetaDataEd::populateList(const std::vector& mdd) { TextComponent* label = new TextComponent(mWindow); label->setText(iter->key); - mList.setEntry(Vector2i(0, y), Vector2i(1, 1), label, false, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, y), Vector2i(1, 1), label, false, ComponentGrid::AlignLeft); mLabels.push_back(label); GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); ed->setSize(Renderer::getScreenWidth() * 0.4f, ed->getSize().y()); ed->setValue(mMetaData->get(iter->key)); - mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentGrid::AlignRight); mEditors.push_back(ed); y++; } //save button - mList.setEntry(Vector2i(0, y), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(0, y), Vector2i(2, 1), &mSaveButton, true, ComponentGrid::AlignCenter); } void GuiMetaDataEd::save() diff --git a/src/components/GuiMetaDataEd.h b/src/guis/GuiMetaDataEd.h similarity index 84% rename from src/components/GuiMetaDataEd.h rename to src/guis/GuiMetaDataEd.h index b1b1b65df..12c191637 100644 --- a/src/components/GuiMetaDataEd.h +++ b/src/guis/GuiMetaDataEd.h @@ -1,14 +1,15 @@ #pragma once #include "../GuiComponent.h" -#include "ComponentListComponent.h" +#include "../components/ComponentGrid.h" #include "../MetaData.h" -#include "TextComponent.h" -#include "NinePatchComponent.h" -#include "ButtonComponent.h" -#include +#include "../components/TextComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/ButtonComponent.h" #include "../scrapers/Scraper.h" +#include + class GuiMetaDataEd : public GuiComponent { public: @@ -31,7 +32,7 @@ private: NinePatchComponent mBox; - ComponentListComponent mList; + ComponentGrid mList; TextComponent mHeader; diff --git a/src/components/GuiMsgBoxOk.cpp b/src/guis/GuiMsgBoxOk.cpp similarity index 100% rename from src/components/GuiMsgBoxOk.cpp rename to src/guis/GuiMsgBoxOk.cpp diff --git a/src/components/GuiMsgBoxOk.h b/src/guis/GuiMsgBoxOk.h similarity index 93% rename from src/components/GuiMsgBoxOk.h rename to src/guis/GuiMsgBoxOk.h index 66232adfc..db6ab28bd 100644 --- a/src/components/GuiMsgBoxOk.h +++ b/src/guis/GuiMsgBoxOk.h @@ -1,7 +1,7 @@ #pragma once #include "../GuiComponent.h" -#include "TextComponent.h" +#include "../components/TextComponent.h" #include //A simple popup message box with callbacks for when the user dismisses it. diff --git a/src/components/GuiMsgBoxYesNo.cpp b/src/guis/GuiMsgBoxYesNo.cpp similarity index 100% rename from src/components/GuiMsgBoxYesNo.cpp rename to src/guis/GuiMsgBoxYesNo.cpp diff --git a/src/components/GuiMsgBoxYesNo.h b/src/guis/GuiMsgBoxYesNo.h similarity index 93% rename from src/components/GuiMsgBoxYesNo.h rename to src/guis/GuiMsgBoxYesNo.h index 9a17c92b3..86d725456 100644 --- a/src/components/GuiMsgBoxYesNo.h +++ b/src/guis/GuiMsgBoxYesNo.h @@ -1,7 +1,7 @@ #pragma once #include "../GuiComponent.h" -#include "TextComponent.h" +#include "../components/TextComponent.h" #include //A simple "yes or no" popup box with callbacks for yes or no. diff --git a/src/components/GuiScraperLog.cpp b/src/guis/GuiScraperLog.cpp similarity index 100% rename from src/components/GuiScraperLog.cpp rename to src/guis/GuiScraperLog.cpp index ce1b840d5..f7e8eccbd 100644 --- a/src/components/GuiScraperLog.cpp +++ b/src/guis/GuiScraperLog.cpp @@ -1,6 +1,6 @@ #include "GuiScraperLog.h" -#include "../Settings.h" #include "GuiGameScraper.h" +#include "../Settings.h" #include "../Renderer.h" #include "../Log.h" #include "../XMLReader.h" diff --git a/src/components/GuiScraperLog.h b/src/guis/GuiScraperLog.h similarity index 92% rename from src/components/GuiScraperLog.h rename to src/guis/GuiScraperLog.h index ca0b03b22..62634ce6f 100644 --- a/src/components/GuiScraperLog.h +++ b/src/guis/GuiScraperLog.h @@ -1,11 +1,12 @@ #pragma once #include "../GuiComponent.h" -#include "NinePatchComponent.h" -#include +#include "../components/NinePatchComponent.h" #include "../scrapers/Scraper.h" +#include "../components/TextComponent.h" + +#include #include -#include "TextComponent.h" //A "terminal" of sorts for scraping. //Doesn't accept input, but renders log-style messages and handles the callback chain for multi-game scraping. diff --git a/src/components/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp similarity index 92% rename from src/components/GuiScraperStart.cpp rename to src/guis/GuiScraperStart.cpp index 192277d15..1eb8f4268 100644 --- a/src/components/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -28,8 +28,8 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mFiltersOpt.addEntry(mFiltersOpt.makeEntry("Missing Image", [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); })); - mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentGrid::AlignRight); + mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentGrid::AlignLeft); //add systems (all with a platformid specified selected) std::vector sys = SystemData::sSystemVector; @@ -38,15 +38,15 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), return mSystemsOpt.makeEntry(s->getName(), s, s->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); }); - mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentGrid::AlignRight); + mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentGrid::AlignLeft); - mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentListComponent::AlignLeft); + mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentGrid::AlignRight); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentGrid::AlignLeft); mStartButton.setText("GO GO GO GO", "begin", 0x00FF00FF); mStartButton.setPressedFunc(std::bind(&GuiScraperStart::pressedStart, this)); - mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentGrid::AlignCenter); mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); diff --git a/src/components/GuiScraperStart.h b/src/guis/GuiScraperStart.h similarity index 79% rename from src/components/GuiScraperStart.h rename to src/guis/GuiScraperStart.h index 764e79318..60a82b8b7 100644 --- a/src/components/GuiScraperStart.h +++ b/src/guis/GuiScraperStart.h @@ -2,11 +2,11 @@ #include "../GuiComponent.h" #include "../SystemData.h" -#include "TextComponent.h" -#include "ComponentListComponent.h" -#include "OptionListComponent.h" -#include "SwitchComponent.h" -#include "ButtonComponent.h" +#include "../components/TextComponent.h" +#include "../components/ComponentGrid.h" +#include "../components/OptionListComponent.h" +#include "../components/SwitchComponent.h" +#include "../components/ButtonComponent.h" #include "../scrapers/Scraper.h" #include @@ -30,7 +30,7 @@ private: std::queue getSearches(std::vector systems, GameFilterFunc selector); NinePatchComponent mBox; - ComponentListComponent mList; + ComponentGrid mList; TextComponent mFilterLabel; TextComponent mSystemsLabel; @@ -42,13 +42,3 @@ private: ButtonComponent mStartButton; }; - -/* - -Filter: [MISSING IMAGES | ALL] -Systems: [# selected] -Manual Mode: [ON | OFF] -GO GO GO - -*/ - diff --git a/src/components/GuiSettingsMenu.cpp b/src/guis/GuiSettingsMenu.cpp similarity index 86% rename from src/components/GuiSettingsMenu.cpp rename to src/guis/GuiSettingsMenu.cpp index 222e47bec..7788838da 100644 --- a/src/components/GuiSettingsMenu.cpp +++ b/src/guis/GuiSettingsMenu.cpp @@ -31,37 +31,37 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), TextComponent* label = new TextComponent(mWindow); label->setText("Draw Framerate: "); label->setColor(0x0000FFFF); - mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight, Matrix(true, true)); + mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), label, false, ComponentGrid::AlignRight, Matrix(true, true)); mLabels.push_back(label); //drawFramerate switch - mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mDrawFramerateSwitch, true, ComponentListComponent::AlignCenter, Matrix(true, true)); + mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mDrawFramerateSwitch, true, ComponentGrid::AlignCenter, Matrix(true, true)); //volume label label = new TextComponent(mWindow); label->setText("System volume: "); label->setColor(0x0000FFFF); mLabels.push_back(label); - mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight, Matrix(true, true)); + mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), label, false, ComponentGrid::AlignRight, Matrix(true, true)); //volume slider - mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mVolumeSlider, true, ComponentListComponent::AlignCenter, Matrix(true, true)); + mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mVolumeSlider, true, ComponentGrid::AlignCenter, Matrix(true, true)); //disable sounds label = new TextComponent(mWindow); label->setText("Disable sounds: "); label->setColor(0x0000FFFF); mLabels.push_back(label); - mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight, Matrix(true, true)); + mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), label, false, ComponentGrid::AlignRight, Matrix(true, true)); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mDisableSoundsSwitch, true, ComponentListComponent::AlignCenter, Matrix(true, true)); + mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mDisableSoundsSwitch, true, ComponentGrid::AlignCenter, Matrix(true, true)); //scraper label label = new TextComponent(mWindow); label->setText("Scraper: "); label->setColor(0x0000FFFF); mLabels.push_back(label); - mList.setEntry(Vector2i(0, 3), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(0, 3), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); //fill scraper list std::vector< std::shared_ptr > scrapers; @@ -71,37 +71,37 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), return mScraperOptList.makeEntry(s->getName(), s, s->getName() == Settings::getInstance()->getScraper()->getName()); } ); - mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentGrid::AlignCenter); //scrape ratings label label = new TextComponent(mWindow); label->setText("Scrape ratings? "); label->setColor(0x0000FFFF); mLabels.push_back(label); - mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); + mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); - mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mScrapeRatingsSwitch, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mScrapeRatingsSwitch, true, ComponentGrid::AlignCenter); // dim time label label = new TextComponent(mWindow); label->setText("Dim after: "); label->setColor(0x0000FFFF); mLabels.push_back(label); - mList.setEntry(Vector2i(0, 5), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 5), Vector2i(1, 1), &mDimSlider, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(0, 5), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); + mList.setEntry(Vector2i(1, 5), Vector2i(1, 1), &mDimSlider, true, ComponentGrid::AlignCenter); // disable help switch label = new TextComponent(mWindow); label->setText("Disable help: "); label->setColor(0x0000FFFF); mLabels.push_back(label); - mList.setEntry(Vector2i(0, 6), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight); - mList.setEntry(Vector2i(1, 6), Vector2i(1, 1), &mDisableHelpSwitch, true, ComponentListComponent::AlignCenter); + mList.setEntry(Vector2i(0, 6), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); + mList.setEntry(Vector2i(1, 6), Vector2i(1, 1), &mDisableHelpSwitch, true, ComponentGrid::AlignCenter); //save button mSaveButton.setText("SAVE", "apply & save", 0x00FF00FF); mSaveButton.setPressedFunc([this] () { applyStates(); delete this; }); - mList.setEntry(Vector2i(0, 7), Vector2i(2, 1), &mSaveButton, true, ComponentListComponent::AlignCenter, Matrix(false, true)); + mList.setEntry(Vector2i(0, 7), Vector2i(2, 1), &mSaveButton, true, ComponentGrid::AlignCenter, Matrix(false, true)); //center list mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); diff --git a/src/components/GuiSettingsMenu.h b/src/guis/GuiSettingsMenu.h similarity index 67% rename from src/components/GuiSettingsMenu.h rename to src/guis/GuiSettingsMenu.h index 154ca2d4b..ee865be17 100644 --- a/src/components/GuiSettingsMenu.h +++ b/src/guis/GuiSettingsMenu.h @@ -1,15 +1,13 @@ -#ifndef _SETTINGSMENU_H_ -#define _SETTINGSMENU_H_ +#pragma once #include "../GuiComponent.h" -#include "ComponentListComponent.h" -#include -#include "SwitchComponent.h" -#include "SliderComponent.h" -#include "TextComponent.h" -#include "NinePatchComponent.h" -#include "OptionListComponent.h" -#include "ButtonComponent.h" +#include "../components/ComponentGrid.h" +#include "../components/SwitchComponent.h" +#include "../components/SliderComponent.h" +#include "../components/TextComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/OptionListComponent.h" +#include "../components/ButtonComponent.h" #include "../scrapers/Scraper.h" class GuiSettingsMenu : public GuiComponent @@ -26,7 +24,7 @@ private: void loadStates(); void applyStates(); - ComponentListComponent mList; + ComponentGrid mList; NinePatchComponent mBox; @@ -41,5 +39,3 @@ private: std::vector mLabels; }; - -#endif diff --git a/src/main.cpp b/src/main.cpp index 5bf88103d..353212423 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,7 @@ #include "views/ViewController.h" #include "SystemData.h" #include -#include "components/GuiDetectDevice.h" +#include "guis/GuiDetectDevice.h" #include "AudioManager.h" #include "platform.h" #include "Log.h" diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 6367a64b2..abc8c576b 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -1,5 +1,5 @@ #include "GamesDBScraper.h" -#include "../components/GuiGameScraper.h" +#include "../guis/GuiGameScraper.h" #include "../components/AsyncReqComponent.h" #include "../Log.h" #include "../pugiXML/pugixml.hpp" diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index a1c5a7bfa..5fa8f535f 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -1,5 +1,5 @@ #include "TheArchiveScraper.h" -#include "../components/GuiGameScraper.h" +#include "../guis/GuiGameScraper.h" #include "../components/AsyncReqComponent.h" #include "../Log.h" #include "../pugiXML/pugixml.hpp" diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 063727ac4..0639a1080 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -5,7 +5,7 @@ #include "gamelist/BasicGameListView.h" #include "gamelist/DetailedGameListView.h" #include "gamelist/GridGameListView.h" -#include "../components/GuiMenu.h" +#include "../guis/GuiMenu.h" #include "../animations/LaunchAnimation.h" #include "../animations/MoveCameraAnimation.h" #include "../animations/LambdaAnimation.h" diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index 3e8574db5..bb4acf5fe 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -1,8 +1,8 @@ #include "IGameListView.h" #include "../../Window.h" -#include "../../components/GuiMetaDataEd.h" -#include "../../components/GuiMenu.h" -#include "../../components/GuiFastSelect.h" +#include "../../guis/GuiMetaDataEd.h" +#include "../../guis/GuiMenu.h" +#include "../../guis/GuiFastSelect.h" #include "../ViewController.h" #include "../../Settings.h" From c525d994d316dca504b055acb2413292f318111b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 1 Mar 2014 15:02:44 -0600 Subject: [PATCH 174/386] First implementation of the new ComponentList stuff. --- CMakeLists.txt | 2 + data/converted/frame_png.cpp | 1500 +++++++++++++++++++++++++- data/resources/frame.png | Bin 2921 -> 17425 bytes src/Renderer.h | 2 +- src/Renderer_draw_gl.cpp | 4 +- src/components/ComponentList.cpp | 164 +++ src/components/ComponentList.h | 48 + src/components/IList.h | 56 +- src/components/MenuComponent.cpp | 26 + src/components/MenuComponent.h | 20 + src/components/TextComponent.cpp | 3 +- src/components/TextComponent.h | 2 +- src/guis/GuiMenu.cpp | 123 ++- src/guis/GuiMenu.h | 7 +- src/views/SystemView.cpp | 2 +- src/views/gamelist/IGameListView.cpp | 3 + 16 files changed, 1861 insertions(+), 101 deletions(-) create mode 100644 src/components/ComponentList.cpp create mode 100644 src/components/ComponentList.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 70aab95a1..8b389540f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,6 +162,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h @@ -244,6 +245,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp diff --git a/data/converted/frame_png.cpp b/data/converted/frame_png.cpp index c23db3442..e6d7ce38d 100644 --- a/data/converted/frame_png.cpp +++ b/data/converted/frame_png.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t frame_png_size = 2921; -const unsigned char frame_png_data[2921] = { +const size_t frame_png_size = 17425; +const unsigned char frame_png_data[17425] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, @@ -274,27 +274,1477 @@ const unsigned char frame_png_data[2921] = { 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x84,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0xd3,0x39,0x0e,0x80, - 0x30,0x10,0x43,0xd1,0x71,0xc4,0xfd,0xaf,0x6c,0x2a, - 0x24,0xc8,0xd2,0xd0,0x10,0xa3,0xef,0x32,0x69,0xfc, - 0x32,0x19,0xd9,0xae,0x45,0x96,0x17,0x1f,0x45,0xb3, - 0xc3,0x63,0xf3,0xd2,0xb3,0x6e,0x0f,0x48,0x0b,0x29, - 0xdf,0x43,0xdc,0x03,0x52,0xca,0x0f,0x69,0x95,0x1b, - 0x5f,0x00,0x07,0x23,0xa2,0x27,0x50,0x55,0xe5,0x74, - 0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0x02,0xa0,0xe0,0xfe,0x4a,0x9e,0x80,0xee,0x5f, - 0x48,0x7f,0xd8,0x01,0x05,0xbd,0xbc,0x56,0x4b,0xac, - 0xcd,0x21,0x43,0xb7,0x13,0x00,0x00,0xff,0xff,0x03, - 0x00,0xdd,0x97,0x0d,0x61,0x33,0x1b,0xed,0x21,0x00, - 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, - 0x82 + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x38,0x5e,0x69, + 0x54,0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70, + 0x00,0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61, + 0x63,0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e, + 0x3d,0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d, + 0x22,0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68, + 0x69,0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63, + 0x7a,0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61, + 0x64,0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65, + 0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70, + 0x74,0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20, + 0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35, + 0x2e,0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39, + 0x2e,0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32, + 0x30,0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d, + 0x31,0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32, + 0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61, + 0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44, + 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, + 0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74, + 0x3d,0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70, + 0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c, + 0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c, + 0x65,0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31, + 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73, + 0x54,0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75, + 0x72,0x63,0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x74, + 0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65, + 0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66,0x66,0x2f, + 0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, + 0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64, + 0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73, + 0x68,0x6f,0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69, + 0x6e,0x64,0x6f,0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43, + 0x72,0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e, + 0x32,0x30,0x31,0x33,0x2d,0x31,0x32,0x2d,0x31,0x34, + 0x54,0x31,0x38,0x3a,0x35,0x37,0x3a,0x30,0x33,0x2d, + 0x30,0x36,0x3a,0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70, + 0x3a,0x43,0x72,0x65,0x61,0x74,0x65,0x44,0x61,0x74, + 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64, + 0x69,0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x32,0x30, + 0x31,0x34,0x2d,0x30,0x33,0x2d,0x30,0x31,0x54,0x31, + 0x34,0x3a,0x32,0x33,0x3a,0x33,0x33,0x2d,0x30,0x36, + 0x3a,0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d, + 0x6f,0x64,0x69,0x66,0x79,0x44,0x61,0x74,0x65,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61,0x64, + 0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x32,0x30, + 0x31,0x34,0x2d,0x30,0x33,0x2d,0x30,0x31,0x54,0x31, + 0x34,0x3a,0x32,0x33,0x3a,0x33,0x33,0x2d,0x30,0x36, + 0x3a,0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d, + 0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x44,0x61,0x74, + 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d, + 0x61,0x74,0x3e,0x69,0x6d,0x61,0x67,0x65,0x2f,0x70, + 0x6e,0x67,0x3c,0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72, + 0x6d,0x61,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f, + 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, + 0x4d,0x6f,0x64,0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68, + 0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f, + 0x6c,0x6f,0x72,0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x49, + 0x43,0x43,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x3e, + 0x73,0x52,0x47,0x42,0x20,0x49,0x45,0x43,0x36,0x31, + 0x39,0x36,0x36,0x2d,0x32,0x2e,0x31,0x3c,0x2f,0x70, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x49, + 0x43,0x43,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73, + 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78,0x6d, + 0x70,0x2e,0x69,0x69,0x64,0x3a,0x64,0x33,0x32,0x65, + 0x34,0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35,0x2d, + 0x30,0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62,0x2d, + 0x65,0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34,0x30, + 0x30,0x64,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x64,0x33,0x32, + 0x65,0x34,0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35, + 0x2d,0x30,0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62, + 0x2d,0x65,0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34, + 0x30,0x30,0x64,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d, + 0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x49, + 0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f, + 0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63, + 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78,0x6d, + 0x70,0x2e,0x64,0x69,0x64,0x3a,0x64,0x33,0x32,0x65, + 0x34,0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35,0x2d, + 0x30,0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62,0x2d, + 0x65,0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34,0x30, + 0x30,0x64,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74, + 0x6f,0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, + 0x66,0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20, + 0x72,0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54, + 0x79,0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75, + 0x72,0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74, + 0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x63,0x72, + 0x65,0x61,0x74,0x65,0x64,0x3c,0x2f,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, + 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78,0x6d,0x70, + 0x2e,0x69,0x69,0x64,0x3a,0x64,0x33,0x32,0x65,0x34, + 0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35,0x2d,0x30, + 0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62,0x2d,0x65, + 0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34,0x30,0x30, + 0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x69, + 0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68,0x65,0x6e, + 0x3e,0x32,0x30,0x31,0x33,0x2d,0x31,0x32,0x2d,0x31, + 0x34,0x54,0x31,0x38,0x3a,0x35,0x37,0x3a,0x30,0x33, + 0x2d,0x30,0x36,0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74, + 0x45,0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73, + 0x74,0x45,0x76,0x74,0x3a,0x73,0x6f,0x66,0x74,0x77, + 0x61,0x72,0x65,0x41,0x67,0x65,0x6e,0x74,0x3e,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f, + 0x73,0x68,0x6f,0x70,0x20,0x43,0x43,0x20,0x28,0x57, + 0x69,0x6e,0x64,0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73, + 0x74,0x45,0x76,0x74,0x3a,0x73,0x6f,0x66,0x74,0x77, + 0x61,0x72,0x65,0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, + 0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x78, + 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, + 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x4f, + 0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e, + 0x3e,0x31,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x4f, + 0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65, + 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37, + 0x32,0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30, + 0x30,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x58,0x52, + 0x65,0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32, + 0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30, + 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65, + 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x74,0x69,0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c, + 0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e, + 0x32,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x52,0x65, + 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e, + 0x69,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x43, + 0x6f,0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e, + 0x31,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f, + 0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c, + 0x58,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e, + 0x3e,0x34,0x38,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a, + 0x50,0x69,0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65, + 0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65,0x78,0x69, + 0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69, + 0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x34,0x38, + 0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78, + 0x65,0x6c,0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69, + 0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20, + 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x52,0x44, + 0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x3c,0x3f,0x78,0x70,0x61,0x63, + 0x6b,0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x77, + 0x22,0x3f,0x3e,0xc2,0xe0,0xf8,0xa7,0x00,0x00,0x00, + 0x20,0x63,0x48,0x52,0x4d,0x00,0x00,0x7a,0x25,0x00, + 0x00,0x80,0x83,0x00,0x00,0xf9,0xff,0x00,0x00,0x80, + 0xe9,0x00,0x00,0x75,0x30,0x00,0x00,0xea,0x60,0x00, + 0x00,0x3a,0x98,0x00,0x00,0x17,0x6f,0x92,0x5f,0xc5, + 0x46,0x00,0x00,0x00,0xd2,0x49,0x44,0x41,0x54,0x78, + 0xda,0xec,0xd8,0xc1,0x0d,0x85,0x20,0x0c,0x06,0xe0, + 0xbf,0x2f,0xa0,0x0c,0xe0,0xd9,0x25,0x8c,0x83,0x38, + 0xa9,0xeb,0x48,0xe2,0xc9,0xb3,0x03,0x88,0x62,0xea, + 0x0c,0x0f,0x08,0x89,0xf1,0xef,0xbd,0x4d,0x3f,0x48, + 0x49,0x8a,0xa8,0x2a,0xde,0x1c,0x3f,0xbc,0x3c,0x08, + 0x20,0x80,0x00,0x02,0x08,0x20,0x80,0x00,0x02,0xbe, + 0x0c,0x30,0xa9,0x89,0xc7,0x71,0x04,0x6b,0x6d,0x53, + 0xaa,0x91,0xeb,0xba,0x4e,0xe7,0x5c,0x5b,0x0d,0x10, + 0x42,0x68,0xee,0xfb,0x86,0x88,0x64,0x37,0xaf,0xaa, + 0x88,0x31,0x36,0xce,0xb9,0x7a,0x37,0xb0,0xae,0x2b, + 0xfa,0xbe,0x87,0xb5,0xb6,0xc4,0xe9,0x63,0xdb,0x36, + 0x0c,0xc3,0x50,0x6f,0x06,0x54,0x15,0xa5,0x96,0xa1, + 0x9c,0x5a,0x7c,0x85,0x08,0x20,0x80,0x00,0x02,0x08, + 0x20,0x80,0x00,0x02,0xbe,0x08,0x28,0xfd,0x2d,0x9f, + 0x5a,0x2f,0x79,0x1f,0xf0,0xde,0x63,0x59,0x16,0xc4, + 0x18,0xb3,0x96,0x1a,0x55,0x85,0x31,0x06,0x22,0x82, + 0x71,0x1c,0xff,0xce,0x97,0x54,0xf9,0x34,0x4d,0x61, + 0xdf,0xf7,0x62,0x2b,0x65,0xd7,0x75,0xe7,0x3c,0xcf, + 0x6d,0x35,0x00,0x87,0x98,0x00,0x02,0x08,0x20,0x80, + 0x00,0x02,0x08,0x20,0x80,0x80,0xec,0x78,0x00,0x00, + 0x00,0xff,0xff,0x03,0x00,0xf6,0x0d,0x4c,0x27,0x83, + 0xba,0xad,0xf5,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 }; diff --git a/data/resources/frame.png b/data/resources/frame.png index 062fd3c44de09492806d0dc2ed8254cbb3a54cc1..1d03400c864ac839e3f740a2665f5e11f2cf7e94 100644 GIT binary patch literal 17425 zcmeI4c|4SB|Hp4}>{|;e>5QdFW;Mt(#xmAyVT81enK35D3^Qe^9Fnbil9V-49obcs z63P~p5S-EdA-Jb=ej=M&vjkzYnl80;})~o&O%Cj zr8ocpQdX9xj^HP1<}E4={&iXOAqxBuV_Uj$06=2t%v%6RIlUYJ#O)bG;^xg>EG~=V z#bU#(h(s9MpXJH$p#eZ(dzurSDw$)ldhzq{`r5h|y$GW)aWys|D_Trd=1i&z023j2{Cbs2 zk(+=(;6n*fpwc$A616I7TIP*O@-~6cLjslDxDD2#q00cH;A18i03&mO(6pqrPC$kb zu&aUM(F1IT1H06Jd-V_qO`AyGCjhvgRF)IShy!3tY0;*D*G3?}dCOrlz!e27^R%wj z2cE(Kl$DF8C2;8)P}w9aQ3Qxe0w{;*h;@L_K48}!Rnyo;^Kl>tTOD_tgiK7`;ukB>dS`BE(m zvpvj0XySSG{dYE*tC~-U9rEaW6>IVNn#A;HrH3lDRvx9Un#+0|miQerO*uM>$yA9k zIkE2cn$~IR%Wkbtf`o1z;L>h_z`i(m_I8Tkduw%BS8nCYaR3-8V^#g3Au1T^75<_* zVEV1$q(#OWAk@?9gdYIxFjYg4?iCx>ivoaYMwsR$W5st>%e5+nS5^JeStap#m+m1G zwc2VESrc(;=qmqR>+%npXhb$%QqtUo{KH5ITj}5x8PAqRR6AdnHekzqB#Wk3X_SYF z2^rrJT}oDNj~4Ja?5cW9R3SNHLb=LPXvq;Z*xl%54l34hI+ke1!z7rqrP7Fj|04aU zZRR)PHr@d+2R}!aTcA&d6*(CEA$gTpnyt6;koh@@2UIRPC00Ho^@0DDl?F$3&-Opa z^O9+gB@pXTm9LkJXxI9n5Op;smp5pM#ZwwCtK>`O)vdg=C10>CW{lE&IY4Mhm|3Nm zu26spjJ(>|($&V*?x|%qY?T^zal4qFnBXCYYIT+PZ0jp)Z!G>$yW9hVj&ilsQhmH6 zb}3SJUo^2+Pi;vI5u;vue38}V-$|`YTFqO19aRUka#FFDD^=s~wo|=}MD$N;!Pei2 z=uPXb>DBI4>{T9d7f7|C_z1^Eu^vU*N`-Evp7-Q%2DUQ#w&yp7F#BMby zI9uX)(IF~(DRxhaeq*@2m33ypxl<2UdMS8~GcLa7-dOzX)M~rL2QIA*0~W6nUkknq zkd%s)3$Kr+Yph6JF0!1yB4GK&B%2E>9v)dyPeSRT2b21fWs+IWu9_v9`{m;9iJ#hZ zYV9dSO(ZEN_d;%0u7vZba|06y_#i7lS*Yr z403bM>Jzm$X}c6Vj-K>16zNIwn>fw26YJN=N*oP2+_miOx|iz|FJNs-(X?&exe190 zu6dSu4tW-X6}p8(S!ow4%*xz8g-ILNZ&Kf;Zb6T2`X#O3smQLBbCglHtw*hgS;wq9zgBpy@>*-#H@3qm zj<%&2)?L_Wv(cu$@qXjE#>dGzsRrmLnEurM)F-Lk*LH0U+^SWQU2>gfRn)ung4=LO zxo^Z)eYZ?k=dIg|%?r{B);umND9c)$RcaS+mzVySUUTWMlDj22*H&EWdn(*fSi&qh zK&E>r(68MttQn54h(B=Sz`rI9M5LnHr1O-vDur;a_%Fk4!F8oHogOwkaQj`t0Fv(7 zEZh84yQgGn!@62Vnp5gS3%UZmloLK0eI&;EU;`qNfJjxWdv>RycN2HaZ~Kej*0HqI z;?(M)?2e1Wy2Fg&sLnI@v1it$yJ>SC)Z8IHcj#*|lsIz=<=vehVo$UWqhIY;MN*J) zE(K36UCRu}9Vfq4AiO8|pXnj=;PtvNU2Z$?>s4O6bFIO?hLyfEqMP`e>NIsac)A71 z3SA>W7mNur4s&1hX(D*P@~vZrxDML;qP8L9qZy^fa>lU-3l8>G6)1b%`SW;z@_2tz zQ(O~6I%0Fk>&Fj7$gjvpYCMx$P)y_D$Lr;voa zvz;AuwyFAEM3#IGVu=jbIY*3Q)GD?Oy1bG+O}%H~-rE?qulFN}#Xz*V5bPsAPfGs#u9 zjW40Up}+Fn+mKI-D4M$Md*m8&^(m3N-o?lBe{qA0mzZ35P1>sQL{p@QPIK|R)fjV6 zKOrxDedEym;(Hy(^-jM%Gd;AVddZ6uC7F@dE^sB+R~7lY^^5R+K^@{fa=)yP+#;Nh zzkawxlljO#Z^$LFFr;E_u&sC4j;ebHtF8)o4@x+T_eC5S?0hn`-QE@H)_s-yF)~e& zAQyAEa9M{!qTFv!H97jpx%LTvF`EJQn>cLNB8Bw z5PA6PUM0E`a<@s!NQ!x?Q_3fI5BD4P_X#bJ-*g3kw&?g(<}?=X7PM)UbeGXSaPVO~ zeWdwl+NrbyA&3v1yE@L5?CYmAb?=s8y}cpJebH(*eWZV5`NpPgBiFejMIC)hU9P*N zT*U2UzTv*XPsKm9uP-}YmQq-{&AW6sxZ>(Q&+!4pbiJl$?<#`+lAnJ3C|%#+S;c5D zYy9^3ShxJM5P$W_riQY%0QKR5a{Ka~?~I0w+lbGi9vQk%bv}LD`P=TwfQ-?WPK$Bj zi16mAxUpCn;xDnuu?>+@k%Q?Q2>SXj4gDtvK4%e|sm*KC6{gNjH54kyBSR)04L)gV zNoqNpIFcBDi@85@@=fL7ii;g})pe_H-VM}7?|8T6(@<4FXMob%^W8G`z58LmX-s>4 zxIE_cAnQ~7ium|xA;F~4&lGKV2LNo?!63PEU2Sb}6c!Ufrm{R}h(IPAybuKdykQ`l zO!201VIDL(!`DFNZP_gq7=vn{;-X`VvSkx#UJT1%f0|RU9f=a`P0^>S7!t(sfjH2B zN#l}XflMD?4ld9@W!4u5#xuo871*qV>usQ7Jkub|)pj$C$nvMbbPzgl3JQaU>FFcT zI#_))S__6jp|z1{6cVEkN276AJsesWHvdu~h=UQ{pX!NoG&P@Z4*X`I;>G2%aY$r9 zKmZ~@8^Q9YBhmW$`bZQ8iNU}@1)LM)%OwZGeL1RgCSQC^X&j0_gUw~Id|@-bWDnLJ zu7QfmOhXH=`EfDX3k~^l=GlQ1k%4435{*D1f0RU}Eab5F`1{OujY>h%d}vIXFP8)6 zp?{di{&MlZkp4}R3)Meu7@QMZ+aD)?=`WM{!=^c0v%MgKd8FSo`z4b@3S!fcjx-Ky zk3WTGwig_V>W@axWq5v_oNt_FYJS>xS|H;mX)`r*X|qdVZievSSaC#u8kx)TC$U&Q zgt=Ar_5KOGebR7Y_)=K`oOO8Q_v)`x{ndzOO6JlCGfNSU#=y~75_$tpM-PY6hNEPo3$y6vS(()&0ACdOKV8_->mKZ8Q@___JL?-djH=x z@dKN`HD$@*fJ;0Gvh=|XFnb(2(fqzG{Ziq>m_63mWPc8AX44v|eA%@N=itIIH6@QuiaY6oKIu?eG%(!CdLLQ}bo9{(UO(Ge;s0Tn1p5$g}vtjq|s% zuPx8%U1z4#XV0u&4}$_<;BP1RnoosRf1m31&#BPr?^C~KI{PxX1k8ME-xWi$X3p)o zlf?CH_YdJU-834x1S|KD&`aCrU`N(FguHL zrQl@-c!h&pxWxH(f*02R|2X(MqW`fm)Q;Z>lm^e3kBcWFsDO_PN`q(2$Hfy7RKUjt zrNJ}i2Maq&b174UIEY4D8sxOgIh3i!C7G>0zNJ%4W2O{7f(b`0UsBX2G5v}izgzefR77GgJ;ag#S;-!z{drp!87LL;)w_< z;NybQ;2HCA@k9g_@Nq$D@QnGmcp`!d__&}nc*cBOJP|k1^`0C0pP0q^)3~z|9CU%YDw(?r9)S;W;08eB$t_R_Vm{M5fCd;jY;^Kt;nEX|J_A#ldoM~ zoUqb40xhg^&~MdrQzGdD)|T8o?y;WsWKTc7nW+OrCCzsN^a%Yk5FF0*v>@ SM!^{P6|ge1Gc7dPb?`r~C>hEC delta 182 zcmbQ(!T3^a!(=W#29|V3Uq=RpjeRx011C@Z?WAAd;_2cTQgQ3eWlO#W0|DoYg-8Cb z&(Tsjap{7<;`c_Ge~ct=u5+CxF7LYeaPsF%oAdZRxHa!P-(e0q#h*Dj!zro15cTbr2nzM?|+l8eV82 MPgg&ebxsLQ0JJtg^#A|> diff --git a/src/Renderer.h b/src/Renderer.h index ed7134a3e..bd3cc0d48 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -37,7 +37,7 @@ namespace Renderer void setMatrix(float* mat); void setMatrix(const Eigen::Affine3f& transform); - void drawRect(int x, int y, int w, int h, unsigned int color); + void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); } #endif diff --git a/src/Renderer_draw_gl.cpp b/src/Renderer_draw_gl.cpp index 1a6727961..7e101808c 100644 --- a/src/Renderer_draw_gl.cpp +++ b/src/Renderer_draw_gl.cpp @@ -70,7 +70,7 @@ namespace Renderer { } } - void drawRect(int x, int y, int w, int h, unsigned int color) + void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) { #ifdef USE_OPENGL_ES GLshort points[12]; @@ -90,7 +90,7 @@ namespace Renderer { buildGLColorArray(colors, color, 6); glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBlendFunc(blend_sfactor, blend_dfactor); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp new file mode 100644 index 000000000..3996f4783 --- /dev/null +++ b/src/components/ComponentList.cpp @@ -0,0 +1,164 @@ +#include "ComponentList.h" + +#define TOTAL_HORIZONTAL_PADDING_PX 12 + +ComponentList::ComponentList(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_NEVER_LOOP) +{ + mSelectorBarOffset = 0; +} + +void ComponentList::addRow(const ComponentListRow& row) +{ + IList::Entry e; + e.name = ""; + e.object = NULL; + e.data = row; + + this->add(e); + + for(auto it = mEntries.back().data.elements.begin(); it != mEntries.back().data.elements.end(); it++) + addChild(it->component.get()); + + updateElementSize(mEntries.back().data); + updateElementPosition(mEntries.back().data); +} + +void ComponentList::onSizeChanged() +{ + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + updateElementSize(it->data); + updateElementPosition(it->data); + } +} + +bool ComponentList::input(InputConfig* config, Input input) +{ + if(size() == 0) + return false; + + // give it to the current row's input handler + if(mEntries.at(mCursor).data.input_handler && mEntries.at(mCursor).data.input_handler(config, input)) + return true; + + // input handler didn't consume the input - try to scroll + if(config->isMappedTo("up", input)) + { + return listInput(input.value != 0 ? -1 : 0); + }else if(config->isMappedTo("down", input)) + { + return listInput(input.value != 0 ? 1 : 0); + } + + return false; +} + +void ComponentList::update(int deltaTime) +{ + listUpdate(deltaTime); +} + +void ComponentList::onCursorChanged(const CursorState& state) +{ + // update the selector bar position + // in the future this might be animated + mSelectorBarOffset = 0; + for(int i = 0; i < mCursor; i++) + { + mSelectorBarOffset += getRowHeight(mEntries.at(i).data); + } +} + +void ComponentList::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + + // clip our entries inside our bounds + Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); + dim = trans * dim - trans.translation(); + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), + (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); + + // draw our entries + renderChildren(trans); + + Renderer::popClipRect(); + + // draw selector bar + Renderer::setMatrix(trans); + + // inversion: src * (1 - dst) + dst * 0 = where src = 1 + // need a function that goes roughly 0x777777 -> 0xFFFFFF + // and 0xFFFFFF -> 0x777777 + // (1 - dst) + 0x77 + + Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)getRowHeight(mEntries.at(mCursor).data), 0xFFFFFFFF, + GL_ONE_MINUS_DST_COLOR, GL_ZERO); + Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)getRowHeight(mEntries.at(mCursor).data), 0x777777FF, + GL_ONE, GL_ONE); + + // draw separators + float y = 0; + for(unsigned int i = 0; i < mEntries.size(); i++) + { + Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C688); + y += getRowHeight(mEntries.at(i).data); + } + Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C688); +} + +float ComponentList::getRowHeight(const ComponentListRow& row) +{ + // returns the highest component height found in the row + float height = 0; + for(unsigned int i = 0; i < row.elements.size(); i++) + { + if(row.elements.at(i).component->getSize().y() > height) + height = row.elements.at(i).component->getSize().y(); + } + + return height; +} + +void ComponentList::updateElementPosition(const ComponentListRow& row) +{ + float yOffset = 0; + for(auto it = mEntries.begin(); it != mEntries.end() && &it->data != &row; it++) + { + yOffset += getRowHeight(it->data); + } + + // assumes updateElementSize has already been called + float rowHeight = getRowHeight(row); + + float x = TOTAL_HORIZONTAL_PADDING_PX / 2; + for(unsigned int i = 0; i < row.elements.size(); i++) + { + const auto comp = row.elements.at(i).component; + + // center vertically + comp->setPosition(x, (rowHeight - comp->getSize().y()) / 2 + yOffset); + x += comp->getSize().x(); + } +} + +void ComponentList::updateElementSize(const ComponentListRow& row) +{ + float width = mSize.x() - TOTAL_HORIZONTAL_PADDING_PX; + std::vector< std::shared_ptr > resizeVec; + + for(auto it = row.elements.begin(); it != row.elements.end(); it++) + { + if(it->resize_width) + resizeVec.push_back(it->component); + else + width -= it->component->getSize().x(); + } + + // redistribute the "unused" width equally among the components with resize_width set to true + width = width / resizeVec.size(); + for(auto it = resizeVec.begin(); it != resizeVec.end(); it++) + { + (*it)->setSize(width, (*it)->getSize().y()); + } +} diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h new file mode 100644 index 000000000..a1bf40cba --- /dev/null +++ b/src/components/ComponentList.h @@ -0,0 +1,48 @@ +#pragma once + +#include "IList.h" +#include + +struct ComponentListElement +{ + ComponentListElement(const std::shared_ptr& cmp = nullptr, bool resize_w = true) : component(cmp), resize_width(resize_w) { }; + + std::shared_ptr component; + bool resize_width; +}; + +struct ComponentListRow +{ + std::vector elements; + std::function input_handler; + + inline void addElement(const std::shared_ptr& component, bool resize_width) + { + elements.push_back(ComponentListElement(component, resize_width)); + } +}; + +class ComponentList : public IList +{ +public: + ComponentList(Window* window); + + void addRow(const ComponentListRow& row); + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; + + void onSizeChanged() override; + +protected: + void onCursorChanged(const CursorState& state) override; + +private: + void updateElementPosition(const ComponentListRow& row); + void updateElementSize(const ComponentListRow& row); + + float getRowHeight(const ComponentListRow& row); + + float mSelectorBarOffset; +}; diff --git a/src/components/IList.h b/src/components/IList.h index 10a03d662..5b4c7f806 100644 --- a/src/components/IList.h +++ b/src/components/IList.h @@ -14,18 +14,38 @@ enum CursorState CURSOR_SCROLLING }; +enum ListLoopType +{ + LIST_ALWAYS_LOOP, + LIST_PAUSE_AT_END, + LIST_NEVER_LOOP +}; + struct ScrollTier { int length; // how long we stay on this level before going to the next int scrollDelay; // how long between scrolls }; -const int SCROLL_SPEED_COUNT = 3; -const ScrollTier SCROLL_SPEED[SCROLL_SPEED_COUNT] = { +struct ScrollTierList +{ + const int count; + const ScrollTier* tiers; +}; + +// default scroll tiers +const ScrollTier QUICK_SCROLL_TIERS[] = { {500, 500}, {5000, 114}, {0, 8} }; +const ScrollTierList LIST_SCROLL_STYLE_QUICK = { 3, QUICK_SCROLL_TIERS }; + +const ScrollTier SLOW_SCROLL_TIERS[] = { + {500, 500}, + {0, 150} +}; +const ScrollTierList LIST_SCROLL_STYLE_SLOW = { 2, SLOW_SCROLL_TIERS }; template class IList : public GuiComponent @@ -52,17 +72,21 @@ protected: ImageComponent mGradient; std::shared_ptr mTitleOverlayFont; + const ScrollTierList& mTierList; + const ListLoopType mLoopType; + std::vector mEntries; public: - IList(Window* window) : GuiComponent(window), mGradient(window) + IList(Window* window, const ScrollTierList& tierList = LIST_SCROLL_STYLE_QUICK, const ListLoopType& loopType = LIST_PAUSE_AT_END) : GuiComponent(window), + mGradient(window), mTierList(tierList), mLoopType(loopType) { mCursor = 0; mScrollTier = 0; mScrollVelocity = 0; mScrollTierAccumulator = 0; mScrollCursorAccumulator = 0; - + mTitleOverlayOpacity = 0x00; mTitleOverlayColor = 0xFFFFFF00; mGradient.setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -125,7 +149,7 @@ public: } // entry management - void add(Entry e) + void add(const Entry& e) { mEntries.push_back(e); } @@ -159,19 +183,22 @@ protected: } - void listInput(int velocity) // a velocity of 0 = stop scrolling + bool listInput(int velocity) // a velocity of 0 = stop scrolling { mScrollVelocity = velocity; mScrollTier = 0; mScrollTierAccumulator = 0; mScrollCursorAccumulator = 0; + + int prevCursor = mCursor; scroll(mScrollVelocity); + return (prevCursor != mCursor); } void listUpdate(int deltaTime) { // update the title overlay opacity - const int dir = (mScrollTier >= SCROLL_SPEED_COUNT - 1) ? 1 : -1; // fade in if scroll tier is >= 1, otherwise fade out + const int dir = (mScrollTier >= mTierList.count - 1) ? 1 : -1; // fade in if scroll tier is >= 1, otherwise fade out int op = mTitleOverlayOpacity + deltaTime*dir; // we just do a 1-to-1 time -> opacity, no scaling if(op >= 255) mTitleOverlayOpacity = 255; @@ -189,16 +216,16 @@ protected: // we delay scrolling until after scroll tier has updated so isScrolling() returns accurately during onCursorChanged callbacks // we don't just do scroll tier first because it would not catch the scrollDelay == tier length case int scrollCount = 0; - while(mScrollCursorAccumulator >= SCROLL_SPEED[mScrollTier].scrollDelay) + while(mScrollCursorAccumulator >= mTierList.tiers[mScrollTier].scrollDelay) { - mScrollCursorAccumulator -= SCROLL_SPEED[mScrollTier].scrollDelay; + mScrollCursorAccumulator -= mTierList.tiers[mScrollTier].scrollDelay; scrollCount++; } // are we ready to go even FASTER? - while(mScrollTier < SCROLL_SPEED_COUNT - 1 && mScrollTierAccumulator >= SCROLL_SPEED[mScrollTier].length) + while(mScrollTier < mTierList.count - 1 && mScrollTierAccumulator >= mTierList.tiers[mScrollTier].length) { - mScrollTierAccumulator -= SCROLL_SPEED[mScrollTier].length; + mScrollTierAccumulator -= mTierList.tiers[mScrollTier].length; mScrollTier++; } @@ -237,16 +264,17 @@ protected: // stop at the end if we've been holding down the button for a long time or // we're scrolling faster than one item at a time (e.g. page up/down) // otherwise, loop around - if(mScrollTier > 0 || absAmt > 1) + if((mLoopType == LIST_PAUSE_AT_END && (mScrollTier > 0 || absAmt > 1)) || + mLoopType == LIST_NEVER_LOOP) { if(cursor < 0) cursor = 0; else if(cursor >= size()) cursor = size() - 1; }else{ - if(cursor < 0) + while(cursor < 0) cursor += size(); - else if(cursor >= size()) + while(cursor >= size()) cursor -= size(); } diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index e69de29bb..b241f193d 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -0,0 +1,26 @@ +#include "MenuComponent.h" + +MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(window), + mBackground(window), mTitle(window), mList(window) +{ + mBackground.setImagePath(":/frame.png"); + + mTitle.setText(title); + mTitle.setCentered(true); + + addChild(&mBackground); + addChild(&mTitle); + addChild(&mList); + + setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.8f); +} + +void MenuComponent::onSizeChanged() +{ + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-2, -2)); + + mTitle.setSize(mSize.x(), (float)mTitle.getFont()->getHeight()); + + mList.setPosition(0, mTitle.getSize().y()); + mList.setSize(mSize.x(), mSize.y() - mTitle.getSize().y()); +} diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index e69de29bb..4ead0dbf9 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -0,0 +1,20 @@ +#pragma once + +#include "NinePatchComponent.h" +#include "ComponentList.h" +#include "TextComponent.h" + +class MenuComponent : public GuiComponent +{ +public: + MenuComponent(Window* window, const char* title); + + void onSizeChanged() override; + + inline void addRow(const ComponentListRow& row) { mList.addRow(row); } + +private: + NinePatchComponent mBackground; + TextComponent mTitle; + ComponentList mList; +}; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index badf75b6e..078c45584 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -9,9 +9,10 @@ TextComponent::TextComponent(Window* window) : GuiComponent(window), { } -TextComponent::TextComponent(Window* window, const std::string& text, std::shared_ptr font, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), +TextComponent::TextComponent(Window* window, const std::string& text, std::shared_ptr font, unsigned int color, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) { + setColor(color); setText(text); setFont(font); setPosition(pos); diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index ad786d548..f6dbfd0b7 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -15,7 +15,7 @@ class TextComponent : public GuiComponent { public: TextComponent(Window* window); - TextComponent(Window* window, const std::string& text, std::shared_ptr font, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); + TextComponent(Window* window, const std::string& text, std::shared_ptr font, unsigned int color = 0x000000FF, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); void setFont(std::shared_ptr font); void onSizeChanged() override; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index afd8dbac1..1786b0991 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -2,72 +2,93 @@ #include "GuiSettingsMenu.h" #include "GuiScraperStart.h" #include "../Window.h" +#include "../Sound.h" +#include "../Log.h" +#include "GuiMsgBoxYesNo.h" -GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mBackground(window, ":/button.png"), mList(window) +GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Menu") { - mList.add("Settings", [&] { - mWindow->pushGui(new GuiSettingsMenu(mWindow)); - }, 0); - - mList.add("Scrape Systems", [&] { - mWindow->pushGui(new GuiScraperStart(mWindow)); - }, 0); - - mList.add("Restart", [] { - if(system("sudo shutdown -r now") != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - }, 0); - - mList.add("Shutdown", [] { - if(system("sudo shutdown -h now") != 0) - LOG(LogWarning) << "Shutdown terminated with non-zero result!"; - }, 1); - - mList.add("Exit", [] { - SDL_Event* ev = new SDL_Event(); - ev->type = SDL_QUIT; - SDL_PushEvent(ev); - }, 0); + struct MenuEntry + { + const char* name; + unsigned int color; + bool add_arrow; + std::function func; + }; + MenuEntry entries[] = { + { "GENERAL SETTINGS", 0x777777FF, true, + [this] { mWindow->pushGui(new GuiSettingsMenu(mWindow)); } + }, + { "SCRAPE NOW", 0x777777FF, true, + [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); } + }, + { "RESTART SYSTEM", 0x990000FF, false, + [this] { + mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to restart the system?", + [] { + if(system("sudo shutdown -r now") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; + })); + } + }, + { "SHUTDOWN SYSTEM", 0x990000FF, false, + [this] { + mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to shutdown the system?", + [] { + if(system("sudo shutdown -h now") != 0) + LOG(LogWarning) << "Shutdown terminated with non-zero result!"; + })); + } + }, + { "EXIT EMULATIONSTATION", 0x990000FF, false, + [] { + SDL_Event ev; + ev.type = SDL_QUIT; + SDL_PushEvent(&ev); + } + } + }; setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); - mList.setPosition(mSize.x() * 0.175f, mSize.y() * 0.05f); - mList.setSize(mSize.x() * 0.65f, mSize.y() * 0.9f); + std::shared_ptr font = Font::get(FONT_SIZE_LARGE); + + // populate the list + ComponentListRow row; - mTheme = ThemeData::getDefault(); + for(int i = 0; i < (sizeof(entries) / sizeof(entries[0])); i++) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, entries[i].name, font, entries[i].color), true); - using namespace ThemeFlags; - mBackground.applyTheme(mTheme, "menu", "windowBackground", PATH); - mBackground.fitTo(Eigen::Vector2f(mList.getSize().x(), mSize.y()), Eigen::Vector3f(mList.getPosition().x(), 0, 0)); - addChild(&mBackground); + if(entries[i].add_arrow) + row.addElement(std::make_shared(mWindow, ">", font, entries[i].color), false); - mList.setFont(Font::get((int)(0.09f * Renderer::getScreenHeight()))); - mList.setSelectorColor(0xBBBBBBFF); - mList.setColor(0, 0x0000FFFF); - mList.setColor(1, 0xFF0000FF); - mList.applyTheme(mTheme, "menu", "menulist", FONT_PATH | COLOR | SOUND); + std::function& execFunc = entries[i].func; + row.input_handler = [execFunc](InputConfig* config, Input input) -> bool + { + if(config->isMappedTo("a", input) && input.value != 0) + { + execFunc(); + return true; + } + return false; + }; - Sound::getFromTheme(mTheme, "menu", "menuOpen")->play(); - - addChild(&mList); + mMenu.addRow(row); + } + + addChild(&mMenu); } bool GuiMenu::input(InputConfig* config, Input input) { - if(input.value != 0) + if((config->isMappedTo("b", input) || config->isMappedTo("menu", input)) && input.value != 0) { - if(config->isMappedTo("b", input) || config->isMappedTo("menu", input)) - { - Sound::getFromTheme(mTheme, "menu", "menuClose")->play(); - delete this; - return true; - }else if(config->isMappedTo("a", input) && mList.size() > 0) - { - mList.getSelected()(); - delete this; - return true; - } + delete this; + return true; } return GuiComponent::input(config, input); diff --git a/src/guis/GuiMenu.h b/src/guis/GuiMenu.h index 4cfe21d36..2c79af3d5 100644 --- a/src/guis/GuiMenu.h +++ b/src/guis/GuiMenu.h @@ -1,8 +1,7 @@ #pragma once #include "../GuiComponent.h" -#include "../components/TextListComponent.h" -#include "../components/NinePatchComponent.h" +#include "../components/MenuComponent.h" #include class GuiMenu : public GuiComponent @@ -13,7 +12,5 @@ public: bool input(InputConfig* config, Input input) override; private: - std::shared_ptr mTheme; - NinePatchComponent mBackground; - TextListComponent< std::function > mList; + MenuComponent mMenu; }; diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index e640ed0a7..97c66d778 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -10,7 +10,7 @@ #define SELECTED_SCALE 1.5f #define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.06f)) -SystemView::SystemView(Window* window) : IList(window) +SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP) { mCamOffset = 0; diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index bb4acf5fe..4396286d5 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -5,6 +5,8 @@ #include "../../guis/GuiFastSelect.h" #include "../ViewController.h" #include "../../Settings.h" +#include "../../Log.h" +#include "../../Sound.h" bool IGameListView::input(InputConfig* config, Input input) { @@ -37,6 +39,7 @@ bool IGameListView::input(InputConfig* config, Input input) }else if(config->isMappedTo("select", input) && input.value != 0) { // open fast select + Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); mWindow->pushGui(new GuiFastSelect(mWindow, this)); return true; } From fdbbf96d5ebec21c3ce6443006c7775d54e263b8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 2 Mar 2014 10:41:02 -0600 Subject: [PATCH 175/386] Added scrolling to ComponentList. --no-exit works again. Changed default screen dim time from 30 seconds to 120 seconds. --- README.md | 2 +- src/Settings.cpp | 2 +- src/components/ComponentList.cpp | 32 +++++++++++++++--- src/components/ComponentList.h | 4 ++- src/components/MenuComponent.cpp | 1 + src/guis/GuiMenu.cpp | 58 +++++++++++++++++++++----------- src/main.cpp | 2 +- 7 files changed, 72 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 4bd30ce89..1c32a7c31 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ You can use `--help` to view a list of command-line options. Briefly outlined he --draw-framerate - draw the framerate. --no-exit - do not display 'exit' in the ES menu. --debug - print additional output to the console, primarily about input. ---dimtime [seconds] - delay before dimming the screen and entering sleep mode. Default is 30, use 0 for never. +--dimtime [seconds] - delay before dimming the screen and entering sleep mode. Default is 120, use 0 for never. --windowed - run ES in a window. --scrape - run the interactive command-line metadata scraper. ``` diff --git a/src/Settings.cpp b/src/Settings.cpp index 4665dcf84..d09347217 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -37,7 +37,7 @@ void Settings::setDefaults() mBoolMap["DisableGamelistWrites"] = false; mBoolMap["ScrapeRatings"] = true; - mIntMap["DIMTIME"] = 30*1000; + mIntMap["DIMTIME"] = 120*1000; mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 3996f4783..23f0414d4 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -5,6 +5,7 @@ ComponentList::ComponentList(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_NEVER_LOOP) { mSelectorBarOffset = 0; + mCameraOffset = 0; } void ComponentList::addRow(const ComponentListRow& row) @@ -67,23 +68,31 @@ void ComponentList::onCursorChanged(const CursorState& state) { mSelectorBarOffset += getRowHeight(mEntries.at(i).data); } + + mCameraOffset = mSelectorBarOffset - (mSize.y() / 2); + + if(mCameraOffset < 0) + mCameraOffset = 0; + else if(mCameraOffset + mSize.y() > getTotalRowHeight()) + mCameraOffset = getTotalRowHeight() - mSize.y(); } void ComponentList::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - - // clip our entries inside our bounds + + // clip everything to be inside our bounds Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); + // scroll the camera + trans.translate(Eigen::Vector3f(0, -mCameraOffset, 0)); + // draw our entries renderChildren(trans); - Renderer::popClipRect(); - // draw selector bar Renderer::setMatrix(trans); @@ -105,9 +114,11 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) y += getRowHeight(mEntries.at(i).data); } Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C688); + + Renderer::popClipRect(); } -float ComponentList::getRowHeight(const ComponentListRow& row) +float ComponentList::getRowHeight(const ComponentListRow& row) const { // returns the highest component height found in the row float height = 0; @@ -120,6 +131,17 @@ float ComponentList::getRowHeight(const ComponentListRow& row) return height; } +float ComponentList::getTotalRowHeight() const +{ + float height = 0; + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + { + height += getRowHeight(it->data); + } + + return height; +} + void ComponentList::updateElementPosition(const ComponentListRow& row) { float yOffset = 0; diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index a1bf40cba..1168ec8db 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -42,7 +42,9 @@ private: void updateElementPosition(const ComponentListRow& row); void updateElementSize(const ComponentListRow& row); - float getRowHeight(const ComponentListRow& row); + float getRowHeight(const ComponentListRow& row) const; + float getTotalRowHeight() const; float mSelectorBarOffset; + float mCameraOffset; }; diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index b241f193d..ec11e3c8c 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -5,6 +5,7 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w { mBackground.setImagePath(":/frame.png"); + mTitle.setFont(Font::get(FONT_SIZE_LARGE)); mTitle.setText(title); mTitle.setCentered(true); diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 1786b0991..10857508e 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -5,6 +5,8 @@ #include "../Sound.h" #include "../Log.h" #include "GuiMsgBoxYesNo.h" +#include +#include "../Settings.h" GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Menu") { @@ -14,41 +16,57 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Men unsigned int color; bool add_arrow; std::function func; + + MenuEntry(const char* n, unsigned int c, bool a, std::function f) : name(n), color(c), add_arrow(a), func(f) {}; }; - MenuEntry entries[] = { - { "GENERAL SETTINGS", 0x777777FF, true, + std::vector entries; + + entries.push_back( + MenuEntry("GENERAL SETTINGS", 0x777777FF, true, [this] { mWindow->pushGui(new GuiSettingsMenu(mWindow)); } - }, - { "SCRAPE NOW", 0x777777FF, true, + ) + ); + entries.push_back( + MenuEntry("SCRAPE NOW", 0x777777FF, true, [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); } - }, - { "RESTART SYSTEM", 0x990000FF, false, + ) + ); + + + entries.push_back( + MenuEntry("RESTART SYSTEM", 0x990000FF, false, [this] { mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to restart the system?", [] { if(system("sudo shutdown -r now") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; })); - } - }, - { "SHUTDOWN SYSTEM", 0x990000FF, false, + }) + ); + + entries.push_back( + MenuEntry("SHUTDOWN SYSTEM", 0x990000FF, false, [this] { mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to shutdown the system?", [] { if(system("sudo shutdown -h now") != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; })); - } - }, - { "EXIT EMULATIONSTATION", 0x990000FF, false, - [] { - SDL_Event ev; - ev.type = SDL_QUIT; - SDL_PushEvent(&ev); - } - } - }; + }) + ); + + if(!Settings::getInstance()->getBool("DONTSHOWEXIT")) + { + entries.push_back( + MenuEntry("EXIT EMULATIONSTATION", 0x990000FF, false, + [] { + SDL_Event ev; + ev.type = SDL_QUIT; + SDL_PushEvent(&ev); + }) + ); + } setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); @@ -58,7 +76,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Men // populate the list ComponentListRow row; - for(int i = 0; i < (sizeof(entries) / sizeof(entries[0])); i++) + for(unsigned int i = 0; i < entries.size(); i++) { row.elements.clear(); row.addElement(std::make_shared(mWindow, entries[i].name, font, entries[i].color), true); diff --git a/src/main.cpp b/src/main.cpp index 353212423..3eb09ebdd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -71,7 +71,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height std::cout << "--draw-framerate display the framerate\n"; std::cout << "--no-exit don't show the exit option in the menu\n"; std::cout << "--debug even more logging\n"; - std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 30, use 0 for never)\n"; + std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 120, use 0 for never)\n"; std::cout << "--scrape scrape using command line interface\n"; std::cout << "--windowed not fullscreen, should be used in conjunction with -w and -h\n"; std::cout << "--help summon a sentient, angry tuba\n\n"; From e97dd8ff36dbc1fbd754e5e5f3c197b7e546a919 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 2 Mar 2014 12:36:23 -0600 Subject: [PATCH 176/386] ComponentList now only scrolls if content > size. ComponentList now has a default input handler behavior (forward to rightmost component in row). ComponentList now updates the currently selected row. GuiSettingsMenu has been redone to use the new MenuComponent/ComponentList scheme. GuiMenu refactored slightly to be less needlessly ridiculous. --- src/components/ComponentList.cpp | 39 +++++-- src/components/ComponentList.h | 18 +++ src/guis/GuiMenu.cpp | 109 +++++++---------- src/guis/GuiMenu.h | 2 + src/guis/GuiSettingsMenu.cpp | 195 +++++++++++-------------------- src/guis/GuiSettingsMenu.h | 24 +--- 6 files changed, 167 insertions(+), 220 deletions(-) diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 23f0414d4..c6f389583 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -31,6 +31,8 @@ void ComponentList::onSizeChanged() updateElementSize(it->data); updateElementPosition(it->data); } + + onCursorChanged(mScrollVelocity != 0 ? CURSOR_SCROLLING : CURSOR_STOPPED); } bool ComponentList::input(InputConfig* config, Input input) @@ -39,8 +41,19 @@ bool ComponentList::input(InputConfig* config, Input input) return false; // give it to the current row's input handler - if(mEntries.at(mCursor).data.input_handler && mEntries.at(mCursor).data.input_handler(config, input)) - return true; + if(mEntries.at(mCursor).data.input_handler) + { + if(mEntries.at(mCursor).data.input_handler(config, input)) + return true; + }else{ + // no input handler assigned, do the default, which is to give it to the rightmost element in the row + auto& row = mEntries.at(mCursor).data; + if(row.elements.size()) + { + if(row.elements.back().component->input(config, input)) + return true; + } + } // input handler didn't consume the input - try to scroll if(config->isMappedTo("up", input)) @@ -57,6 +70,13 @@ bool ComponentList::input(InputConfig* config, Input input) void ComponentList::update(int deltaTime) { listUpdate(deltaTime); + + if(size()) + { + // update our currently selected row + for(auto it = mEntries.at(mCursor).data.elements.begin(); it != mEntries.at(mCursor).data.elements.end(); it++) + it->component->update(deltaTime); + } } void ComponentList::onCursorChanged(const CursorState& state) @@ -69,12 +89,17 @@ void ComponentList::onCursorChanged(const CursorState& state) mSelectorBarOffset += getRowHeight(mEntries.at(i).data); } - mCameraOffset = mSelectorBarOffset - (mSize.y() / 2); + // move the camera to scroll + const float totalHeight = getTotalRowHeight(); + if(totalHeight > mSize.y()) + { + mCameraOffset = mSelectorBarOffset - (mSize.y() / 2); - if(mCameraOffset < 0) - mCameraOffset = 0; - else if(mCameraOffset + mSize.y() > getTotalRowHeight()) - mCameraOffset = getTotalRowHeight() - mSize.y(); + if(mCameraOffset < 0) + mCameraOffset = 0; + else if(mCameraOffset + mSize.y() > totalHeight) + mCameraOffset = totalHeight - mSize.y(); + } } void ComponentList::render(const Eigen::Affine3f& parentTrans) diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index 1168ec8db..f5547eea7 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -14,12 +14,30 @@ struct ComponentListElement struct ComponentListRow { std::vector elements; + + // The input handler is called when the user enters any input while this row is highlighted (including up/down). + // Return false to let the list try to use it or true if the input has been consumed. + // If no input handler is supplied (input_handler == nullptr), the default behavior is to forward the input to + // the rightmost element in the currently selected row. std::function input_handler; inline void addElement(const std::shared_ptr& component, bool resize_width) { elements.push_back(ComponentListElement(component, resize_width)); } + + // Utility method for making an input handler for "when the users presses A on this, do func." + inline void makeAcceptInputHandler(const std::function& func) + { + input_handler = [func](InputConfig* config, Input input) -> bool { + if(config->isMappedTo("a", input) && input.value != 0) + { + func(); + return true; + } + return false; + }; + } }; class ComponentList : public IList diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 10857508e..6b002c4ad 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -10,95 +10,66 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Menu") { - struct MenuEntry - { - const char* name; - unsigned int color; - bool add_arrow; - std::function func; + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); - MenuEntry(const char* n, unsigned int c, bool a, std::function f) : name(n), color(c), add_arrow(a), func(f) {}; - }; - - std::vector entries; - - entries.push_back( - MenuEntry("GENERAL SETTINGS", 0x777777FF, true, - [this] { mWindow->pushGui(new GuiSettingsMenu(mWindow)); } - ) - ); - entries.push_back( - MenuEntry("SCRAPE NOW", 0x777777FF, true, - [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); } - ) + // populate our list + addEntry("GENERAL SETTINGS", 0x777777FF, true, + [this] { mWindow->pushGui(new GuiSettingsMenu(mWindow)); } ); - - entries.push_back( - MenuEntry("RESTART SYSTEM", 0x990000FF, false, - [this] { - mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to restart the system?", - [] { - if(system("sudo shutdown -r now") != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - })); + addEntry("SCRAPE NOW", 0x777777FF, true, + [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); } + ); + + addEntry("RESTART SYSTEM", 0x990000FF, false, + [this] { + mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to restart the system?", + [] { + if(system("sudo shutdown -r now") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; }) + );} ); - entries.push_back( - MenuEntry("SHUTDOWN SYSTEM", 0x990000FF, false, - [this] { - mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to shutdown the system?", - [] { - if(system("sudo shutdown -h now") != 0) - LOG(LogWarning) << "Shutdown terminated with non-zero result!"; - })); - }) + addEntry("SHUTDOWN SYSTEM", 0x990000FF, false, + [this] { + mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to shutdown the system?", + [] { + if(system("sudo shutdown -h now") != 0) + LOG(LogWarning) << "Shutdown terminated with non-zero result!"; + })); + } ); if(!Settings::getInstance()->getBool("DONTSHOWEXIT")) { - entries.push_back( - MenuEntry("EXIT EMULATIONSTATION", 0x990000FF, false, - [] { - SDL_Event ev; - ev.type = SDL_QUIT; - SDL_PushEvent(&ev); - }) + addEntry("EXIT EMULATIONSTATION", 0x990000FF, false, + [] { + SDL_Event ev; + ev.type = SDL_QUIT; + SDL_PushEvent(&ev); + } ); } + + addChild(&mMenu); +} - setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); - +void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func) +{ std::shared_ptr font = Font::get(FONT_SIZE_LARGE); // populate the list ComponentListRow row; + row.addElement(std::make_shared(mWindow, name, font, color), true); - for(unsigned int i = 0; i < entries.size(); i++) - { - row.elements.clear(); - row.addElement(std::make_shared(mWindow, entries[i].name, font, entries[i].color), true); + if(add_arrow) + row.addElement(std::make_shared(mWindow, ">", font, color), false); - if(entries[i].add_arrow) - row.addElement(std::make_shared(mWindow, ">", font, entries[i].color), false); + row.makeAcceptInputHandler(func); - std::function& execFunc = entries[i].func; - row.input_handler = [execFunc](InputConfig* config, Input input) -> bool - { - if(config->isMappedTo("a", input) && input.value != 0) - { - execFunc(); - return true; - } - return false; - }; - - mMenu.addRow(row); - } - - addChild(&mMenu); + mMenu.addRow(row); } bool GuiMenu::input(InputConfig* config, Input input) diff --git a/src/guis/GuiMenu.h b/src/guis/GuiMenu.h index 2c79af3d5..8dc13d636 100644 --- a/src/guis/GuiMenu.h +++ b/src/guis/GuiMenu.h @@ -12,5 +12,7 @@ public: bool input(InputConfig* config, Input input) override; private: + void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); + MenuComponent mMenu; }; diff --git a/src/guis/GuiSettingsMenu.cpp b/src/guis/GuiSettingsMenu.cpp index 7788838da..a4f9b07a6 100644 --- a/src/guis/GuiSettingsMenu.cpp +++ b/src/guis/GuiSettingsMenu.cpp @@ -2,120 +2,88 @@ #include "../Renderer.h" #include "../Settings.h" #include "../VolumeControl.h" - +#include "../Log.h" #include "../scrapers/TheArchiveScraper.h" #include "../scrapers/GamesDBScraper.h" -GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 8)), - mBox(mWindow, ":/frame.png", 0x444444FF), - mDrawFramerateSwitch(window), - mVolumeSlider(window, 0, 100, 1, "%"), - mDisableSoundsSwitch(window, false), - mScraperOptList(window), - mScrapeRatingsSwitch(window), - mDimSlider(window, 0, 60, 1, "s"), - mDisableHelpSwitch(window), - mSaveButton(window) +GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), + mMenu(mWindow, "Settings") { - loadStates(); + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - addChild(&mBox); - addChild(&mList); - - mList.setPosition(Renderer::getScreenWidth() / 4.0f, 0); + // center menu + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); using namespace Eigen; - //drawFramerate label - TextComponent* label = new TextComponent(mWindow); - label->setText("Draw Framerate: "); - label->setColor(0x0000FFFF); - mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), label, false, ComponentGrid::AlignRight, Matrix(true, true)); - mLabels.push_back(label); + Settings* s = Settings::getInstance(); - //drawFramerate switch - mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mDrawFramerateSwitch, true, ComponentGrid::AlignCenter, Matrix(true, true)); + // framerate + auto framerate = std::make_shared(mWindow); + framerate->setState(s->getBool("DRAWFRAMERATE")); + addSetting("Draw framerate:", framerate, + [framerate] { Settings::getInstance()->setBool("DRAWFRAMERATE", framerate->getState()); }); - //volume label - label = new TextComponent(mWindow); - label->setText("System volume: "); - label->setColor(0x0000FFFF); - mLabels.push_back(label); - mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), label, false, ComponentGrid::AlignRight, Matrix(true, true)); + // volume + auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); + volume->setValue((float)VolumeControl::getInstance()->getVolume()); + addSetting("System volume:", volume, + [volume] { VolumeControl::getInstance()->setVolume((int)volume->getValue()); }); - //volume slider - mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mVolumeSlider, true, ComponentGrid::AlignCenter, Matrix(true, true)); + // disable sounds + auto sound_disable = std::make_shared(mWindow); + sound_disable->setState(s->getBool("DISABLESOUNDS")); + addSetting("Disable sound:", sound_disable, + [sound_disable] { Settings::getInstance()->setBool("DISABLESOUNDS", sound_disable->getState()); }); - //disable sounds - label = new TextComponent(mWindow); - label->setText("Disable sounds: "); - label->setColor(0x0000FFFF); - mLabels.push_back(label); - mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), label, false, ComponentGrid::AlignRight, Matrix(true, true)); - - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mDisableSoundsSwitch, true, ComponentGrid::AlignCenter, Matrix(true, true)); - - //scraper label - label = new TextComponent(mWindow); - label->setText("Scraper: "); - label->setColor(0x0000FFFF); - mLabels.push_back(label); - mList.setEntry(Vector2i(0, 3), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); - - //fill scraper list + // scraper + auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr > >(mWindow, false); std::vector< std::shared_ptr > scrapers; - scrapers.push_back(std::shared_ptr(new GamesDBScraper())); - scrapers.push_back(std::shared_ptr(new TheArchiveScraper())); - mScraperOptList.populate(scrapers, [&] (const std::shared_ptr& s) { - return mScraperOptList.makeEntry(s->getName(), s, s->getName() == Settings::getInstance()->getScraper()->getName()); - } ); + scrapers.push_back(std::make_shared()); + scrapers.push_back(std::make_shared()); + scraper_list->populate(scrapers, [&] (const std::shared_ptr& sc) { + return scraper_list->makeEntry(sc->getName(), sc, sc->getName() == Settings::getInstance()->getScraper()->getName()); + }); + addSetting("Scraper:", scraper_list, + [scraper_list] { + if(scraper_list->getSelected().size() > 0) + Settings::getInstance()->setScraper(scraper_list->getSelected()[0]->object); + }); - mList.setEntry(Vector2i(1, 3), Vector2i(1, 1), &mScraperOptList, true, ComponentGrid::AlignCenter); + // scrape ratings + auto scrape_ratings = std::make_shared(mWindow); + scrape_ratings->setState(s->getBool("ScrapeRatings")); + addSetting("Scrape ratings?", scrape_ratings, + [scrape_ratings] { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); }); - //scrape ratings label - label = new TextComponent(mWindow); - label->setText("Scrape ratings? "); - label->setColor(0x0000FFFF); - mLabels.push_back(label); - mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); - - mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mScrapeRatingsSwitch, true, ComponentGrid::AlignCenter); + // dim time + auto dim_time = std::make_shared(mWindow, 0.f, 1200.f, 30.f, "s"); + dim_time->setValue((float)(s->getInt("DIMTIME") / 1000)); + addSetting("Dim screen after:", dim_time, + [dim_time] { Settings::getInstance()->setInt("DIMTIME", (int)(dim_time->getValue() * 1000)); }); - // dim time label - label = new TextComponent(mWindow); - label->setText("Dim after: "); - label->setColor(0x0000FFFF); - mLabels.push_back(label); - mList.setEntry(Vector2i(0, 5), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); - mList.setEntry(Vector2i(1, 5), Vector2i(1, 1), &mDimSlider, true, ComponentGrid::AlignCenter); + // disable help + auto disable_help = std::make_shared(mWindow); + disable_help->setState(s->getBool("DISABLEHELP")); + addSetting("Disable help:", disable_help, + [disable_help] { Settings::getInstance()->setBool("DISABLEHELP", disable_help->getState()); }); - // disable help switch - label = new TextComponent(mWindow); - label->setText("Disable help: "); - label->setColor(0x0000FFFF); - mLabels.push_back(label); - mList.setEntry(Vector2i(0, 6), Vector2i(1, 1), label, false, ComponentGrid::AlignRight); - mList.setEntry(Vector2i(1, 6), Vector2i(1, 1), &mDisableHelpSwitch, true, ComponentGrid::AlignCenter); + // save button + ComponentListRow row; + row.addElement(std::make_shared(mWindow, "SAVE", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiSettingsMenu::save, this)); + mMenu.addRow(row); - //save button - mSaveButton.setText("SAVE", "apply & save", 0x00FF00FF); - mSaveButton.setPressedFunc([this] () { applyStates(); delete this; }); - mList.setEntry(Vector2i(0, 7), Vector2i(2, 1), &mSaveButton, true, ComponentGrid::AlignCenter, Matrix(false, true)); - - //center list - mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); - - //set up borders/background - mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(8, 8)); + addChild(&mMenu); } -GuiSettingsMenu::~GuiSettingsMenu() +void GuiSettingsMenu::addSetting(const char* label, const std::shared_ptr& comp, const std::function& saveFunc) { - for(auto iter = mLabels.begin(); iter != mLabels.end(); iter++) - { - delete *iter; - } + ComponentListRow row; + row.addElement(std::make_shared(mWindow, label, Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(comp, false); + mApplyFuncs.push_back(saveFunc); + mMenu.addRow(row); } bool GuiSettingsMenu::input(InputConfig* config, Input input) @@ -125,7 +93,7 @@ bool GuiSettingsMenu::input(InputConfig* config, Input input) return true; //cancel if b is pressed - if(config->isMappedTo("b", input) && input.value) + if(config->isMappedTo("b", input) && input.value != 0) { delete this; return true; @@ -134,46 +102,21 @@ bool GuiSettingsMenu::input(InputConfig* config, Input input) return false; } -void GuiSettingsMenu::loadStates() +void GuiSettingsMenu::save() { - Settings* s = Settings::getInstance(); - mDrawFramerateSwitch.setState(s->getBool("DRAWFRAMERATE")); + LOG(LogInfo) << "saving"; - mVolumeSlider.setValue((float)VolumeControl::getInstance()->getVolume()); + for(auto it = mApplyFuncs.begin(); it != mApplyFuncs.end(); it++) + (*it)(); - mDisableSoundsSwitch.setState(s->getBool("DISABLESOUNDS")); + Settings::getInstance()->saveFile(); - mScrapeRatingsSwitch.setState(s->getBool("ScrapeRatings")); - - mDimSlider.setValue((float)(s->getInt("DIMTIME") / 1000)); - - mDisableHelpSwitch.setState(s->getBool("DISABLEHELP")); -} - -void GuiSettingsMenu::applyStates() -{ - Settings* s = Settings::getInstance(); - s->setBool("DRAWFRAMERATE", mDrawFramerateSwitch.getState()); - - VolumeControl::getInstance()->setVolume((int)mVolumeSlider.getValue()); - - s->setBool("DISABLESOUNDS", mDisableSoundsSwitch.getState()); - - if(mScraperOptList.getSelected().size() > 0) - s->setScraper(mScraperOptList.getSelected()[0]->object); - - s->setBool("ScrapeRatings", mScrapeRatingsSwitch.getState()); - - s->setInt("DIMTIME", (int)(mDimSlider.getValue() * 1000)); - - s->setBool("DISABLEHELP", mDisableHelpSwitch.getState()); - - s->saveFile(); + delete this; } std::vector GuiSettingsMenu::getHelpPrompts() { - std::vector prompts = mList.getHelpPrompts(); + std::vector prompts = mMenu.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "discard changes")); return prompts; } diff --git a/src/guis/GuiSettingsMenu.h b/src/guis/GuiSettingsMenu.h index ee865be17..6f542dd75 100644 --- a/src/guis/GuiSettingsMenu.h +++ b/src/guis/GuiSettingsMenu.h @@ -1,7 +1,7 @@ #pragma once #include "../GuiComponent.h" -#include "../components/ComponentGrid.h" +#include "../components/MenuComponent.h" #include "../components/SwitchComponent.h" #include "../components/SliderComponent.h" #include "../components/TextComponent.h" @@ -14,28 +14,16 @@ class GuiSettingsMenu : public GuiComponent { public: GuiSettingsMenu(Window* window); - ~GuiSettingsMenu(); - + bool input(InputConfig* config, Input input) override; std::vector getHelpPrompts() override; private: - void loadStates(); - void applyStates(); + void addSetting(const char* label, const std::shared_ptr& comp, const std::function& saveFunc); + void save(); - ComponentGrid mList; + std::vector< std::function > mApplyFuncs; - NinePatchComponent mBox; - - SwitchComponent mDrawFramerateSwitch; - SliderComponent mVolumeSlider; - SwitchComponent mDisableSoundsSwitch; - OptionListComponent< std::shared_ptr > mScraperOptList; - SwitchComponent mScrapeRatingsSwitch; - SliderComponent mDimSlider; - SwitchComponent mDisableHelpSwitch; - ButtonComponent mSaveButton; - - std::vector mLabels; + MenuComponent mMenu; }; From 8928ce49ec76075d21b4e6e7c6f107fd7164c992 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 4 Mar 2014 16:48:33 -0600 Subject: [PATCH 177/386] Small UI tweaks. Replaced arrow text with an image. Better frame.png (thanks Nils!). --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 24 +- data/Resources.h | 3 + data/converted/frame_png.cpp | 1906 +++-------------------------- data/converted/sq_bracket_png.cpp | 136 ++ data/resources/frame.png | Bin 17425 -> 1729 bytes data/resources/sq_bracket.png | Bin 0 -> 1286 bytes src/Window.cpp | 13 + src/Window.h | 3 + src/components/ComponentList.cpp | 15 +- src/components/MenuComponent.cpp | 12 +- src/guis/GuiMenu.cpp | 13 +- src/guis/GuiSettingsMenu.cpp | 2 +- src/views/ViewController.cpp | 2 +- 14 files changed, 367 insertions(+), 1763 deletions(-) create mode 100644 data/converted/sq_bracket_png.cpp create mode 100644 data/resources/sq_bracket.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b389540f..89c17a16b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -307,6 +307,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_up_down_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_left_right_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/sq_bracket_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 05a92a12d..e9dcbf023 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 16; +const size_t res2hNrOfFiles = 17; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/button.png", button_png_size, button_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, @@ -10,6 +10,7 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/frame.png", frame_png_size, frame_png_data}, {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, + {":/sq_bracket.png", sq_bracket_png_size, sq_bracket_png_data}, {":/star_filled.png", star_filled_png_size, star_filled_png_data}, {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, {":/textbox.png", textbox_png_size, textbox_png_data}, @@ -29,16 +30,17 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/frame.png", res2hFiles[3]), std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[4]), std::make_pair(":/scroll_gradient.png", res2hFiles[5]), - std::make_pair(":/star_filled.png", res2hFiles[6]), - std::make_pair(":/star_unfilled.png", res2hFiles[7]), - std::make_pair(":/textbox.png", res2hFiles[8]), - std::make_pair(":/textbox_glow.png", res2hFiles[9]), - std::make_pair(":/help/a.png", res2hFiles[10]), - std::make_pair(":/help/b.png", res2hFiles[11]), - std::make_pair(":/help/dpad.png", res2hFiles[12]), - std::make_pair(":/help/left_right.png", res2hFiles[13]), - std::make_pair(":/help/menu.png", res2hFiles[14]), - std::make_pair(":/help/up_down.png", res2hFiles[15]) + std::make_pair(":/sq_bracket.png", res2hFiles[6]), + std::make_pair(":/star_filled.png", res2hFiles[7]), + std::make_pair(":/star_unfilled.png", res2hFiles[8]), + std::make_pair(":/textbox.png", res2hFiles[9]), + std::make_pair(":/textbox_glow.png", res2hFiles[10]), + std::make_pair(":/help/a.png", res2hFiles[11]), + std::make_pair(":/help/b.png", res2hFiles[12]), + std::make_pair(":/help/dpad.png", res2hFiles[13]), + std::make_pair(":/help/left_right.png", res2hFiles[14]), + std::make_pair(":/help/menu.png", res2hFiles[15]), + std::make_pair(":/help/up_down.png", res2hFiles[16]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 9edd808ae..dd9581843 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -23,6 +23,9 @@ extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; extern const size_t scroll_gradient_png_size; extern const unsigned char scroll_gradient_png_data[]; +extern const size_t sq_bracket_png_size; +extern const unsigned char sq_bracket_png_data[]; + extern const size_t star_filled_png_size; extern const unsigned char star_filled_png_data[]; diff --git a/data/converted/frame_png.cpp b/data/converted/frame_png.cpp index e6d7ce38d..1e986b914 100644 --- a/data/converted/frame_png.cpp +++ b/data/converted/frame_png.cpp @@ -2,1749 +2,179 @@ #include "../Resources.h" -const size_t frame_png_size = 17425; -const unsigned char frame_png_data[17425] = { +const size_t frame_png_size = 1729; +const unsigned char frame_png_data[1729] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x38,0x5e,0x69, - 0x54,0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70, - 0x00,0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61, - 0x63,0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e, - 0x3d,0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d, - 0x22,0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68, - 0x69,0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63, - 0x7a,0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61, - 0x64,0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65, - 0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70, - 0x74,0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20, - 0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35, - 0x2e,0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39, - 0x2e,0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32, - 0x30,0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d, - 0x31,0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32, - 0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61, - 0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44, - 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, - 0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74, - 0x3d,0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70, - 0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78, - 0x6d,0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c, - 0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c, - 0x65,0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31, - 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x66,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73, - 0x54,0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75, - 0x72,0x63,0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x74, - 0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65, - 0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66,0x66,0x2f, - 0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, - 0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64, - 0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73, - 0x68,0x6f,0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69, - 0x6e,0x64,0x6f,0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43, - 0x72,0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e, - 0x32,0x30,0x31,0x33,0x2d,0x31,0x32,0x2d,0x31,0x34, - 0x54,0x31,0x38,0x3a,0x35,0x37,0x3a,0x30,0x33,0x2d, - 0x30,0x36,0x3a,0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70, - 0x3a,0x43,0x72,0x65,0x61,0x74,0x65,0x44,0x61,0x74, - 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64, - 0x69,0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x32,0x30, - 0x31,0x34,0x2d,0x30,0x33,0x2d,0x30,0x31,0x54,0x31, - 0x34,0x3a,0x32,0x33,0x3a,0x33,0x33,0x2d,0x30,0x36, - 0x3a,0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d, - 0x6f,0x64,0x69,0x66,0x79,0x44,0x61,0x74,0x65,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61,0x64, - 0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x32,0x30, - 0x31,0x34,0x2d,0x30,0x33,0x2d,0x30,0x31,0x54,0x31, - 0x34,0x3a,0x32,0x33,0x3a,0x33,0x33,0x2d,0x30,0x36, - 0x3a,0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d, - 0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x44,0x61,0x74, - 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d, - 0x61,0x74,0x3e,0x69,0x6d,0x61,0x67,0x65,0x2f,0x70, - 0x6e,0x67,0x3c,0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72, - 0x6d,0x61,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f, - 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, - 0x4d,0x6f,0x64,0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68, - 0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f, - 0x6c,0x6f,0x72,0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x49, - 0x43,0x43,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x3e, - 0x73,0x52,0x47,0x42,0x20,0x49,0x45,0x43,0x36,0x31, - 0x39,0x36,0x36,0x2d,0x32,0x2e,0x31,0x3c,0x2f,0x70, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x49, - 0x43,0x43,0x50,0x72,0x6f,0x66,0x69,0x6c,0x65,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73, - 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78,0x6d, - 0x70,0x2e,0x69,0x69,0x64,0x3a,0x64,0x33,0x32,0x65, - 0x34,0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35,0x2d, - 0x30,0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62,0x2d, - 0x65,0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34,0x30, - 0x30,0x64,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x64,0x33,0x32, - 0x65,0x34,0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35, - 0x2d,0x30,0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62, - 0x2d,0x65,0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34, - 0x30,0x30,0x64,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d, - 0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x49, - 0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f, - 0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63, - 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78,0x6d, - 0x70,0x2e,0x64,0x69,0x64,0x3a,0x64,0x33,0x32,0x65, - 0x34,0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35,0x2d, - 0x30,0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62,0x2d, - 0x65,0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34,0x30, - 0x30,0x64,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74, - 0x6f,0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, - 0x66,0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20, - 0x72,0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54, - 0x79,0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75, - 0x72,0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74, - 0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x63,0x72, - 0x65,0x61,0x74,0x65,0x64,0x3c,0x2f,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, - 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78,0x6d,0x70, - 0x2e,0x69,0x69,0x64,0x3a,0x64,0x33,0x32,0x65,0x34, - 0x30,0x36,0x36,0x2d,0x38,0x63,0x66,0x35,0x2d,0x30, - 0x34,0x34,0x64,0x2d,0x61,0x34,0x32,0x62,0x2d,0x65, - 0x30,0x37,0x32,0x32,0x61,0x37,0x62,0x34,0x30,0x30, - 0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x69, - 0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68,0x65,0x6e, - 0x3e,0x32,0x30,0x31,0x33,0x2d,0x31,0x32,0x2d,0x31, - 0x34,0x54,0x31,0x38,0x3a,0x35,0x37,0x3a,0x30,0x33, - 0x2d,0x30,0x36,0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74, - 0x45,0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73, - 0x74,0x45,0x76,0x74,0x3a,0x73,0x6f,0x66,0x74,0x77, - 0x61,0x72,0x65,0x41,0x67,0x65,0x6e,0x74,0x3e,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f, - 0x73,0x68,0x6f,0x70,0x20,0x43,0x43,0x20,0x28,0x57, - 0x69,0x6e,0x64,0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73, - 0x74,0x45,0x76,0x74,0x3a,0x73,0x6f,0x66,0x74,0x77, - 0x61,0x72,0x65,0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, - 0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x78, - 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, - 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x4f, - 0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e, - 0x3e,0x31,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x4f, - 0x72,0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65, - 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37, - 0x32,0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30, - 0x30,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x58,0x52, - 0x65,0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32, - 0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30, - 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65, - 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x74,0x69,0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c, - 0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e, - 0x32,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x52,0x65, - 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e, - 0x69,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x43, - 0x6f,0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e, - 0x31,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f, - 0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c, - 0x58,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e, - 0x3e,0x34,0x38,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a, - 0x50,0x69,0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65, - 0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65,0x78,0x69, - 0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69, - 0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x34,0x38, - 0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78, - 0x65,0x6c,0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69, - 0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20, - 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x52,0x44, - 0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x3c,0x3f,0x78,0x70,0x61,0x63, - 0x6b,0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x77, - 0x22,0x3f,0x3e,0xc2,0xe0,0xf8,0xa7,0x00,0x00,0x00, - 0x20,0x63,0x48,0x52,0x4d,0x00,0x00,0x7a,0x25,0x00, - 0x00,0x80,0x83,0x00,0x00,0xf9,0xff,0x00,0x00,0x80, - 0xe9,0x00,0x00,0x75,0x30,0x00,0x00,0xea,0x60,0x00, - 0x00,0x3a,0x98,0x00,0x00,0x17,0x6f,0x92,0x5f,0xc5, - 0x46,0x00,0x00,0x00,0xd2,0x49,0x44,0x41,0x54,0x78, - 0xda,0xec,0xd8,0xc1,0x0d,0x85,0x20,0x0c,0x06,0xe0, - 0xbf,0x2f,0xa0,0x0c,0xe0,0xd9,0x25,0x8c,0x83,0x38, - 0xa9,0xeb,0x48,0xe2,0xc9,0xb3,0x03,0x88,0x62,0xea, - 0x0c,0x0f,0x08,0x89,0xf1,0xef,0xbd,0x4d,0x3f,0x48, - 0x49,0x8a,0xa8,0x2a,0xde,0x1c,0x3f,0xbc,0x3c,0x08, - 0x20,0x80,0x00,0x02,0x08,0x20,0x80,0x00,0x02,0xbe, - 0x0c,0x30,0xa9,0x89,0xc7,0x71,0x04,0x6b,0x6d,0x53, - 0xaa,0x91,0xeb,0xba,0x4e,0xe7,0x5c,0x5b,0x0d,0x10, - 0x42,0x68,0xee,0xfb,0x86,0x88,0x64,0x37,0xaf,0xaa, - 0x88,0x31,0x36,0xce,0xb9,0x7a,0x37,0xb0,0xae,0x2b, - 0xfa,0xbe,0x87,0xb5,0xb6,0xc4,0xe9,0x63,0xdb,0x36, - 0x0c,0xc3,0x50,0x6f,0x06,0x54,0x15,0xa5,0x96,0xa1, - 0x9c,0x5a,0x7c,0x85,0x08,0x20,0x80,0x00,0x02,0x08, - 0x20,0x80,0x00,0x02,0xbe,0x08,0x28,0xfd,0x2d,0x9f, - 0x5a,0x2f,0x79,0x1f,0xf0,0xde,0x63,0x59,0x16,0xc4, - 0x18,0xb3,0x96,0x1a,0x55,0x85,0x31,0x06,0x22,0x82, - 0x71,0x1c,0xff,0xce,0x97,0x54,0xf9,0x34,0x4d,0x61, - 0xdf,0xf7,0x62,0x2b,0x65,0xd7,0x75,0xe7,0x3c,0xcf, - 0x6d,0x35,0x00,0x87,0x98,0x00,0x02,0x08,0x20,0x80, - 0x00,0x02,0x08,0x20,0x80,0x80,0xec,0x78,0x00,0x00, - 0x00,0xff,0xff,0x03,0x00,0xf6,0x0d,0x4c,0x27,0x83, - 0xba,0xad,0xf5,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x43,0x44,0x31,0x35,0x46,0x36,0x32,0x43, + 0x43,0x35,0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41, + 0x37,0x44,0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35, + 0x31,0x30,0x45,0x31,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x34,0x32,0x31,0x44,0x45,0x36,0x35,0x31, + 0x41,0x33,0x44,0x37,0x31,0x31,0x45,0x33,0x39,0x44, + 0x44,0x37,0x44,0x38,0x31,0x37,0x37,0x35,0x41,0x41, + 0x45,0x34,0x34,0x45,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x34,0x32,0x31,0x44,0x45,0x36,0x35,0x30, + 0x41,0x33,0x44,0x37,0x31,0x31,0x45,0x33,0x39,0x44, + 0x44,0x37,0x44,0x38,0x31,0x37,0x37,0x35,0x41,0x41, + 0x45,0x34,0x34,0x45,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77, + 0x73,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46, + 0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, + 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a, + 0x43,0x44,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, + 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, + 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, + 0x45,0x31,0x22,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, + 0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44, + 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a, + 0x43,0x44,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, + 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, + 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, + 0x45,0x31,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x72,0x64, + 0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74, + 0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72,0x64,0x66, + 0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f,0x78,0x3a, + 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x20,0x3c, + 0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65, + 0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e,0x68,0xef, + 0xbd,0x8f,0x00,0x00,0x02,0xf1,0x49,0x44,0x41,0x54, + 0x78,0xda,0xec,0x9a,0xcf,0x4a,0x1b,0x51,0x14,0xc6, + 0xcf,0xdc,0x4c,0xd3,0x0a,0x66,0xa3,0x20,0x6d,0x15, + 0xd4,0xe0,0x56,0x10,0x52,0x91,0xae,0xb2,0xc8,0x0b, + 0x44,0x8a,0x7d,0x8a,0x6e,0x4a,0x5b,0xad,0x7d,0x80, + 0xb6,0xb4,0xeb,0xbe,0x84,0x4a,0xb5,0x0f,0xe0,0x26, + 0xab,0x04,0x9a,0x84,0x64,0x17,0xb4,0x8a,0x98,0x20, + 0xf8,0x2f,0xea,0x4c,0x30,0x1d,0x8d,0xf6,0xfb,0xc6, + 0x5c,0x19,0x8a,0xbb,0xd2,0x31,0x03,0xf7,0xc0,0x97, + 0xb9,0xce,0x5c,0xcd,0xf7,0x3b,0x73,0xce,0x08,0xf7, + 0x8e,0xd5,0x6c,0x36,0x85,0xa1,0x94,0x92,0x58,0x2c, + 0x26,0xb6,0x6d,0x73,0x1c,0x87,0xb2,0x38,0x4d,0x3d, + 0x87,0x9e,0x42,0x71,0x09,0x37,0x5c,0xa8,0x0e,0x95, + 0xa1,0xd5,0xab,0xab,0xab,0x1f,0x90,0x77,0x79,0x79, + 0x29,0x9d,0x4e,0x47,0x30,0xf6,0x27,0x59,0x04,0xa0, + 0x79,0x1a,0x27,0x00,0xc6,0xb3,0x96,0x65,0x7d,0xb9, + 0xbe,0xbe,0x9e,0x80,0xfc,0x89,0x3c,0x52,0x61,0x05, + 0xbe,0xff,0xf6,0x48,0x6f,0x3c,0x42,0x9b,0xf0,0xb0, + 0x00,0x3f,0xdf,0x09,0x40,0x10,0x7a,0xb3,0x4e,0x4f, + 0x4f,0x7d,0xe3,0x50,0x0c,0x93,0x3e,0x42,0xf3,0xbc, + 0xa0,0x29,0x35,0x69,0x98,0x00,0x41,0x08,0x02,0xe8, + 0xea,0xe0,0x11,0x3e,0x98,0xdc,0x0f,0x9d,0x9b,0x10, + 0x5b,0x13,0x22,0x3e,0xe1,0xc2,0x3b,0x9e,0xd4,0xe6, + 0xc3,0x36,0x1d,0x0c,0xfd,0xdd,0xc1,0x44,0x76,0x21, + 0xe6,0xbb,0x80,0x0b,0xbe,0x77,0xd7,0x75,0xf9,0xc3, + 0x1c,0xce,0x2d,0xf1,0x97,0x82,0xf5,0xd5,0x6b,0xa1, + 0xef,0x44,0x37,0xe1,0x73,0xf0,0xbb,0x62,0x39,0x8e, + 0xc3,0xe6,0xfc,0x05,0x8d,0x04,0x4b,0xa6,0x57,0x43, + 0x97,0x14,0xa2,0x01,0x25,0x6d,0x18,0x9e,0x03,0xd1, + 0x48,0xd8,0x8d,0xfa,0x2f,0xa5,0xe5,0x37,0xaf,0x65, + 0x0d,0x63,0xfc,0xd2,0xc6,0x47,0x56,0x5f,0x88,0x0a, + 0x40,0x60,0x9c,0x55,0xad,0x56,0x6b,0x3a,0x0a,0xc6, + 0xef,0x02,0x81,0xf7,0x67,0x0a,0x3d,0xf0,0x38,0x2a, + 0xd9,0x0f,0x9a,0xa7,0xe0,0xfd,0x89,0x3a,0x3f,0x3f, + 0x7f,0xd8,0xeb,0x8d,0x7b,0x57,0xf0,0x69,0x09,0xef, + 0x71,0xa5,0x9f,0xfb,0x51,0x0b,0xfd,0xcf,0x56,0x45, + 0xad,0x7c,0xfe,0x2e,0x23,0x25,0x11,0x0f,0x03,0x60, + 0x00,0x0c,0x80,0x01,0x30,0x00,0x06,0xc0,0x00,0x18, + 0x00,0x03,0x60,0x00,0x0c,0x80,0x01,0x30,0x00,0x06, + 0xc0,0x00,0x18,0x80,0x7b,0x02,0x88,0xea,0xba,0x10, + 0xc3,0x5f,0x17,0xd2,0x2b,0x73,0x51,0x5b,0x1b,0xd5, + 0x1b,0x31,0x5c,0x1b,0x75,0xa0,0x48,0x2d,0x2f,0x76, + 0xd7,0x45,0x29,0x4f,0xb9,0xae,0xbb,0xe7,0x38,0x4e, + 0xa4,0x00,0xb8,0x43,0xc9,0xcd,0xc9,0xb3,0xb3,0xb3, + 0x3d,0xd5,0x6c,0x36,0xab,0x87,0x87,0x87,0xd2,0x6e, + 0xb7,0x23,0xb3,0xc1,0x41,0xaf,0x07,0x07,0x07,0x72, + 0x7c,0x7c,0xfc,0x53,0x9d,0x9c,0x9c,0xac,0xed,0xee, + 0xee,0x0a,0x21,0x2e,0x2e,0x2e,0x7a,0x1e,0x80,0x1e, + 0x8f,0x8e,0x8e,0xa4,0xd1,0x68,0xf0,0x0e,0xac,0x29, + 0x9c,0x58,0xde,0xd9,0xd9,0xa9,0xd7,0x6a,0x35,0x12, + 0xf5,0x74,0x29,0xd1,0x1b,0xcd,0xd3,0x2b,0x3c,0x37, + 0xe8,0x5d,0x25,0x12,0x09,0x0f,0xc6,0xdf,0x94,0x4a, + 0x25,0xa9,0x54,0x2a,0x3d,0x0b,0x41,0x4f,0xf4,0x56, + 0xad,0x56,0x85,0x5e,0x01,0xf2,0xba,0xbf,0xbf,0xff, + 0xb7,0x3d,0x36,0x36,0x26,0xdb,0xdb,0xdb,0x4b,0x5b, + 0x5b,0x5b,0xd3,0x68,0xe8,0xb7,0xec,0xee,0x54,0x2a, + 0x25,0x43,0x43,0x43,0x12,0x8f,0xc7,0x6f,0x77,0xcc, + 0xef,0xb3,0xe6,0x3d,0xcf,0x93,0xfd,0xfd,0x7d,0x29, + 0x16,0x8b,0x92,0xcf,0xe7,0x05,0x7d,0xfb,0x35,0x99, + 0x4c,0x2e,0x8f,0x8f,0x8f,0x8b,0xcd,0x0f,0xd6,0x3f, + 0x26,0xbc,0xc7,0xad,0x79,0x54,0xaf,0xd7,0x5f,0x6d, + 0x6c,0x6c,0xf8,0x10,0x98,0x24,0x03,0x03,0x03,0xd2, + 0xd7,0xd7,0xe7,0xbf,0x4b,0x11,0x16,0x0c,0x4d,0xf3, + 0x49,0xc3,0x64,0x32,0xeb,0x48,0xae,0xe8,0x0a,0x69, + 0xb5,0x5a,0xdf,0xe0,0x6b,0x71,0x72,0x72,0x52,0xe8, + 0xdd,0x62,0x37,0x93,0xae,0x50,0x28,0xc8,0xfa,0xfa, + 0x3a,0x6b,0xeb,0x05,0xfe,0xc6,0x67,0x18,0x9e,0x20, + 0xc0,0xe8,0xe8,0xa8,0x0c,0x0e,0x0e,0xfa,0x10,0xdd, + 0x97,0x2e,0xfe,0xbb,0x79,0x8a,0xe6,0x59,0xef,0xf0, + 0xe3,0x03,0x00,0x68,0x13,0x97,0x17,0xe1,0x67,0x25, + 0x93,0xc9,0xc8,0xcc,0xcc,0x8c,0x5f,0x25,0xfe,0xdb, + 0x2a,0xa4,0xd5,0xf5,0x95,0xcb,0xe5,0xa4,0x5c,0x2e, + 0x73,0xf7,0x9e,0xaf,0x1f,0xcc,0x42,0x29,0x68,0x18, + 0x7a,0x10,0xf6,0x03,0x47,0x6e,0x76,0xe3,0x8b,0xd0, + 0x2a,0xb4,0x3c,0x35,0x35,0xe5,0xa5,0xd3,0x69,0x61, + 0xf6,0x99,0x54,0x56,0xc5,0x1f,0x01,0x06,0x00,0x8e, + 0xb5,0x2e,0x8e,0x23,0xf2,0x34,0xce,0x00,0x00,0x00, + 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; diff --git a/data/converted/sq_bracket_png.cpp b/data/converted/sq_bracket_png.cpp new file mode 100644 index 000000000..064cb9023 --- /dev/null +++ b/data/converted/sq_bracket_png.cpp @@ -0,0 +1,136 @@ +//this file was auto-generated from "sq_bracket.png" by res2h + +#include "../Resources.h" + +const size_t sq_bracket_png_size = 1286; +const unsigned char sq_bracket_png_data[1286] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x0d, + 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0x1b, + 0xfa,0x16,0x24,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x66,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x43,0x46,0x31,0x35,0x46,0x36,0x32,0x43, + 0x43,0x35,0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41, + 0x37,0x44,0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35, + 0x31,0x30,0x45,0x31,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x32,0x34,0x42,0x43,0x42,0x38,0x35,0x44, + 0x41,0x33,0x44,0x44,0x31,0x31,0x45,0x33,0x41,0x41, + 0x44,0x41,0x42,0x39,0x42,0x30,0x39,0x34,0x38,0x33, + 0x38,0x30,0x46,0x31,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x32,0x34,0x42,0x43,0x42,0x38,0x35,0x43, + 0x41,0x33,0x44,0x44,0x31,0x31,0x45,0x33,0x41,0x41, + 0x44,0x41,0x42,0x39,0x42,0x30,0x39,0x34,0x38,0x33, + 0x38,0x30,0x46,0x31,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77, + 0x73,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46, + 0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, + 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a, + 0x43,0x46,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, + 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, + 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, + 0x45,0x31,0x22,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, + 0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44, + 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a, + 0x43,0x46,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, + 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, + 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, + 0x45,0x31,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x72,0x64, + 0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74, + 0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72,0x64,0x66, + 0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f,0x78,0x3a, + 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x20,0x3c, + 0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65, + 0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e,0xd4,0x38, + 0xd4,0x9d,0x00,0x00,0x01,0x36,0x49,0x44,0x41,0x54, + 0x78,0xda,0x94,0xd3,0xbf,0x2b,0x45,0x61,0x1c,0xc7, + 0xf1,0xe7,0x5c,0x87,0x9b,0x6b,0x30,0x58,0x0c,0xfe, + 0x04,0xd3,0x1d,0x4d,0x52,0x0c,0xc4,0x20,0xa5,0x58, + 0x6e,0x06,0x45,0x8c,0x9c,0x41,0x37,0x94,0x45,0x46, + 0x37,0x49,0x06,0xbf,0x16,0x4a,0x24,0x19,0x28,0x2c, + 0x77,0x35,0xdd,0xc5,0x7f,0x60,0x31,0x18,0x10,0xf2, + 0xe3,0xfd,0xa9,0xef,0xa9,0xdb,0xad,0x73,0xce,0xe3, + 0x5b,0xaf,0x4e,0x9d,0x73,0x3e,0xcf,0x79,0x9e,0xe7, + 0xfb,0x9c,0x20,0x8a,0xa2,0x2e,0xe7,0xdc,0x3e,0x66, + 0xf1,0xe8,0x3c,0x2a,0x87,0x55,0xf4,0xe1,0x1e,0xdd, + 0xbe,0xa1,0x79,0xdc,0xa0,0xd3,0x82,0x45,0x9f,0xd0, + 0x1b,0x86,0x71,0x81,0x0e,0xdc,0xa2,0x27,0x2b,0xa4, + 0xfa,0xc0,0x18,0x8e,0xd1,0x8e,0x6b,0x9b,0x72,0x6a, + 0x48,0xf5,0x85,0x49,0xec,0xa1,0x0d,0x97,0x18,0xcc, + 0x0a,0xa9,0xbe,0x31,0x85,0x2d,0xb4,0xe2,0x0c,0xa3, + 0x59,0x21,0xd5,0x2f,0xe6,0xb0,0x81,0x16,0x9c,0xd8, + 0x0c,0x52,0x43,0x71,0x70,0xd1,0xda,0xd1,0x84,0x03, + 0x4c,0x67,0x85,0xe2,0x5a,0xb1,0x70,0x80,0x6d,0x2c, + 0xe9,0x66,0xe8,0xd1,0x4b,0x4d,0xf3,0x15,0x15,0xac, + 0x69,0xad,0x39,0xf7,0xff,0x0a,0x7c,0x42,0x0b,0xf6, + 0x15,0x55,0x59,0x53,0x0c,0x3d,0xd6,0xb4,0x8c,0x1f, + 0xcc,0x60,0x27,0x6d,0x4d,0x5a,0xf8,0xba,0x7d,0x45, + 0xbd,0x2b,0xe1,0x28,0x7e,0x18,0x26,0x04,0x2a,0xf6, + 0xab,0x7c,0x62,0x02,0xa7,0xf5,0x2f,0x34,0x86,0xd4, + 0x93,0x5d,0x1b,0xf9,0xdd,0xce,0xe3,0x55,0xe3,0xa8, + 0xf5,0xa1,0x66,0x1c,0x62,0xdc,0xb6,0x78,0xc4,0x4e, + 0xbc,0x4b,0x0a,0xe5,0xed,0xb8,0xe8,0xc5,0x17,0x0c, + 0xa1,0x9a,0xb4,0x3b,0x0a,0x15,0x70,0x8e,0x7e,0x3c, + 0x63,0x00,0x0f,0x69,0x5b,0xaa,0xd0,0xa6,0x05,0x9e, + 0xec,0x5a,0xf3,0xf9,0x73,0xd5,0x87,0x3b,0xf4,0xfa, + 0x04,0x54,0x7f,0x02,0x0c,0x00,0x5f,0x4a,0x3a,0x5d, + 0xf2,0x7e,0xec,0x5c,0x00,0x00,0x00,0x00,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/frame.png b/data/resources/frame.png index 1d03400c864ac839e3f740a2665f5e11f2cf7e94..0bca559ef1c32435e262aed372e8e5a23f39b391 100644 GIT binary patch delta 1360 zcmbQ(!FZ5&f{L1CiEBhjaDG}zd16s2gJVj5QmTSyZen_BP-Ms z{23J{KjpI1H`YxyFf>#!Gt)CPF*P$Y)KM@pFf`IP03tJ8LlY}gGb2(tKyQN)U?SLfr2-A_*j8#Wu?i-xix_n+~=35w^gdhEznEJ zOtEryF*J2EGjet|bu@N0HZ-(!GYYHaD^V(wyLXl`!m=;&%<;tJF2nO9trn3tRi)02+{ z0Iy~%=c3falKi5O{QMkSB}m8xWaO9R7iZ)bC^!e3DQJXe=B4D97i%inDcC@rnp%`u zmYU*Ll%J~r4hE}CGzZjY66JG<<`gVGCm3q_K-cIOrKDN8q!uR^WfqiV=I6nLf?Vp| zK(``-+0Z&2-@*qqgXyUp}C%9d@YP<5hqSw|oY}@jBUyIjP{s(HSS!T7Qh;Qkd zq3}chm5+gJ@3-H_VkEnEUovF=eqeh2&T}zmzgrid=)qH+A9F)vH&_Pbjaf)ST<*ZtzV#l4U`qlsdz)&C^nAckbIaui;Op zO;951zW?7m@@<@Ef7rlaf1lGqplY+9zkluH0G`QqPM`NI&@|1Q!QjZj^y1Y6LAx1u z`0MA+7Kj#BvU_;Qdft_1hs|Vp{@y+4Ql|K9cLVpn^6RBP56hg>{W!hp>(%Uq?_JCv z7Jt~CWZ8H4*&o(k7Vl-@&eKH}F{r;7?|6Dre9v0uh<&ZEZ zbZuC+71y!%OpV{uxokgJXx-$Wwfw=~PAhx+`Wvr%>#M^*WOBYQTsr@EAot(%VXkXy z{^=>J3i2~2Fz_@m8ZfXOV31%y<}_3@b-daoa5!H4l6G-mwDeVJ!x-t(1s=NkW!GIb z{dcb0{oKND3BwNOlV?wE-n`is7^{PoxD)%F};TN$$cdVFq9&JTeZD$LBx zm#$xbzTaC=jK}x0=iwBi*ByDPh%MZW*=n3*9%c)Iw*bk)fxPn{|;e>5QdFW;Mt(#xmAyVT81enK35D3^Qe^9Fnbil9V-49obcs z63P~p5S-EdA-Jb=ej=M&vjkzYnl80;})~o&O%Cj zr8ocpQdX9xj^HP1<}E4={&iXOAqxBuV_Uj$06=2t%v%6RIlUYJ#O)bG;^xg>EG~=V z#bU#(h(s9MpXJH$p#eZ(dzurSDw$)ldhzq{`r5h|y$GW)aWys|D_Trd=1i&z023j2{Cbs2 zk(+=(;6n*fpwc$A616I7TIP*O@-~6cLjslDxDD2#q00cH;A18i03&mO(6pqrPC$kb zu&aUM(F1IT1H06Jd-V_qO`AyGCjhvgRF)IShy!3tY0;*D*G3?}dCOrlz!e27^R%wj z2cE(Kl$DF8C2;8)P}w9aQ3Qxe0w{;*h;@L_K48}!Rnyo;^Kl>tTOD_tgiK7`;ukB>dS`BE(m zvpvj0XySSG{dYE*tC~-U9rEaW6>IVNn#A;HrH3lDRvx9Un#+0|miQerO*uM>$yA9k zIkE2cn$~IR%Wkbtf`o1z;L>h_z`i(m_I8Tkduw%BS8nCYaR3-8V^#g3Au1T^75<_* zVEV1$q(#OWAk@?9gdYIxFjYg4?iCx>ivoaYMwsR$W5st>%e5+nS5^JeStap#m+m1G zwc2VESrc(;=qmqR>+%npXhb$%QqtUo{KH5ITj}5x8PAqRR6AdnHekzqB#Wk3X_SYF z2^rrJT}oDNj~4Ja?5cW9R3SNHLb=LPXvq;Z*xl%54l34hI+ke1!z7rqrP7Fj|04aU zZRR)PHr@d+2R}!aTcA&d6*(CEA$gTpnyt6;koh@@2UIRPC00Ho^@0DDl?F$3&-Opa z^O9+gB@pXTm9LkJXxI9n5Op;smp5pM#ZwwCtK>`O)vdg=C10>CW{lE&IY4Mhm|3Nm zu26spjJ(>|($&V*?x|%qY?T^zal4qFnBXCYYIT+PZ0jp)Z!G>$yW9hVj&ilsQhmH6 zb}3SJUo^2+Pi;vI5u;vue38}V-$|`YTFqO19aRUka#FFDD^=s~wo|=}MD$N;!Pei2 z=uPXb>DBI4>{T9d7f7|C_z1^Eu^vU*N`-Evp7-Q%2DUQ#w&yp7F#BMby zI9uX)(IF~(DRxhaeq*@2m33ypxl<2UdMS8~GcLa7-dOzX)M~rL2QIA*0~W6nUkknq zkd%s)3$Kr+Yph6JF0!1yB4GK&B%2E>9v)dyPeSRT2b21fWs+IWu9_v9`{m;9iJ#hZ zYV9dSO(ZEN_d;%0u7vZba|06y_#i7lS*Yr z403bM>Jzm$X}c6Vj-K>16zNIwn>fw26YJN=N*oP2+_miOx|iz|FJNs-(X?&exe190 zu6dSu4tW-X6}p8(S!ow4%*xz8g-ILNZ&Kf;Zb6T2`X#O3smQLBbCglHtw*hgS;wq9zgBpy@>*-#H@3qm zj<%&2)?L_Wv(cu$@qXjE#>dGzsRrmLnEurM)F-Lk*LH0U+^SWQU2>gfRn)ung4=LO zxo^Z)eYZ?k=dIg|%?r{B);umND9c)$RcaS+mzVySUUTWMlDj22*H&EWdn(*fSi&qh zK&E>r(68MttQn54h(B=Sz`rI9M5LnHr1O-vDur;a_%Fk4!F8oHogOwkaQj`t0Fv(7 zEZh84yQgGn!@62Vnp5gS3%UZmloLK0eI&;EU;`qNfJjxWdv>RycN2HaZ~Kej*0HqI z;?(M)?2e1Wy2Fg&sLnI@v1it$yJ>SC)Z8IHcj#*|lsIz=<=vehVo$UWqhIY;MN*J) zE(K36UCRu}9Vfq4AiO8|pXnj=;PtvNU2Z$?>s4O6bFIO?hLyfEqMP`e>NIsac)A71 z3SA>W7mNur4s&1hX(D*P@~vZrxDML;qP8L9qZy^fa>lU-3l8>G6)1b%`SW;z@_2tz zQ(O~6I%0Fk>&Fj7$gjvpYCMx$P)y_D$Lr;voa zvz;AuwyFAEM3#IGVu=jbIY*3Q)GD?Oy1bG+O}%H~-rE?qulFN}#Xz*V5bPsAPfGs#u9 zjW40Up}+Fn+mKI-D4M$Md*m8&^(m3N-o?lBe{qA0mzZ35P1>sQL{p@QPIK|R)fjV6 zKOrxDedEym;(Hy(^-jM%Gd;AVddZ6uC7F@dE^sB+R~7lY^^5R+K^@{fa=)yP+#;Nh zzkawxlljO#Z^$LFFr;E_u&sC4j;ebHtF8)o4@x+T_eC5S?0hn`-QE@H)_s-yF)~e& zAQyAEa9M{!qTFv!H97jpx%LTvF`EJQn>cLNB8Bw z5PA6PUM0E`a<@s!NQ!x?Q_3fI5BD4P_X#bJ-*g3kw&?g(<}?=X7PM)UbeGXSaPVO~ zeWdwl+NrbyA&3v1yE@L5?CYmAb?=s8y}cpJebH(*eWZV5`NpPgBiFejMIC)hU9P*N zT*U2UzTv*XPsKm9uP-}YmQq-{&AW6sxZ>(Q&+!4pbiJl$?<#`+lAnJ3C|%#+S;c5D zYy9^3ShxJM5P$W_riQY%0QKR5a{Ka~?~I0w+lbGi9vQk%bv}LD`P=TwfQ-?WPK$Bj zi16mAxUpCn;xDnuu?>+@k%Q?Q2>SXj4gDtvK4%e|sm*KC6{gNjH54kyBSR)04L)gV zNoqNpIFcBDi@85@@=fL7ii;g})pe_H-VM}7?|8T6(@<4FXMob%^W8G`z58LmX-s>4 zxIE_cAnQ~7ium|xA;F~4&lGKV2LNo?!63PEU2Sb}6c!Ufrm{R}h(IPAybuKdykQ`l zO!201VIDL(!`DFNZP_gq7=vn{;-X`VvSkx#UJT1%f0|RU9f=a`P0^>S7!t(sfjH2B zN#l}XflMD?4ld9@W!4u5#xuo871*qV>usQ7Jkub|)pj$C$nvMbbPzgl3JQaU>FFcT zI#_))S__6jp|z1{6cVEkN276AJsesWHvdu~h=UQ{pX!NoG&P@Z4*X`I;>G2%aY$r9 zKmZ~@8^Q9YBhmW$`bZQ8iNU}@1)LM)%OwZGeL1RgCSQC^X&j0_gUw~Id|@-bWDnLJ zu7QfmOhXH=`EfDX3k~^l=GlQ1k%4435{*D1f0RU}Eab5F`1{OujY>h%d}vIXFP8)6 zp?{di{&MlZkp4}R3)Meu7@QMZ+aD)?=`WM{!=^c0v%MgKd8FSo`z4b@3S!fcjx-Ky zk3WTGwig_V>W@axWq5v_oNt_FYJS>xS|H;mX)`r*X|qdVZievSSaC#u8kx)TC$U&Q zgt=Ar_5KOGebR7Y_)=K`oOO8Q_v)`x{ndzOO6JlCGfNSU#=y~75_$tpM-PY6hNEPo3$y6vS(()&0ACdOKV8_->mKZ8Q@___JL?-djH=x z@dKN`HD$@*fJ;0Gvh=|XFnb(2(fqzG{Ziq>m_63mWPc8AX44v|eA%@N=itIIH6@QuiaY6oKIu?eG%(!CdLLQ}bo9{(UO(Ge;s0Tn1p5$g}vtjq|s% zuPx8%U1z4#XV0u&4}$_<;BP1RnoosRf1m31&#BPr?^C~KI{PxX1k8ME-xWi$X3p)o zlf?CH_YdJU-834x1S|KD&`aCrU`N(FguHL zrQl@-c!h&pxWxH(f*02R|2X(MqW`fm)Q;Z>lm^e3kBcWFsDO_PN`q(2$Hfy7RKUjt zrNJ}i2Maq&b174UIEY4D8sxOgIh3i!C7G>0zNJ%4W2O{7f(b`0UsBX2G5v}izgzefR77GgJ;ag#S;-!z{drp!87LL;)w_< z;NybQ;2HCA@k9g_@Nq$D@QnGmcp`!d__&}nc*cBOJP|k1^`0C0pP0q^)3~z|9CU%YDw(?r9)S;W;08eB$t_R_Vm{M5fCd;jY;^Kt;nEX|J_A#ldoM~ zoUqb40xhg^&~MdrQzGdD)|T8o?y;WsWKTc7nW+OrCCzsN^a%Yk5FF0*v>@ SM!^{P6|ge1Gc7dPb?`r~C>hEC diff --git a/data/resources/sq_bracket.png b/data/resources/sq_bracket.png new file mode 100644 index 0000000000000000000000000000000000000000..891f4359392ff78de13627d4d3932f77d7259faf GIT binary patch literal 1286 zcmeAS@N?(olHy`uVBq!ia0vp@KrF_=1|+3_iKzf7$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%xRe+5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8KW+g=7RhMR$W{Yl!|Z$R@KEJl?AE#L8-<0 zrA5iW_()TRX$FQJev3c~fv&OgFUkZ)N@9*nesXDUYF>$_i>(q+MlU5Z#md>u(A3S$ z$l2M{(b(14(9qJ++{MMf$iULX#njNi)evR|HoZnBPR>pirY?@gE-r?KuEvgzE{;x? zPC&gD#uf%{aJ`;+#U+V($*C}VGlBL(^*ZC#Yvo*&npl!w6q28x14{t`8Tlpo#Toep z3eLf13L4>=c`5nj#hRe#f%w)XwJ5VJHN~wcKUV=9zE+u7>?iDRh~5-(!b~6N7=2LU zKuRnyAz%swG2uxc$bn~`)I4C0DFSAVD;8JgGB7ZjdAc};RNR_!dB3)6qRjD+&tuwW zXB$ND{A0N+>l?&#L}6(}9-C{=97pphu5RX@Z2QH$R3tTY%1!SctxqtN5cu@?@5=Wp zZ?7#r_c(gJ-`rxm^Of_S|DL1JwMg&z9lNxTFKo2hL%%$fySr~;<(&nWn_TB#kZvn% zYKD(nH($q^X|FFp^sO5U6>}5bZ1+|5x+g& zTu #include "views/ViewController.h" #include "components/HelpComponent.h" +#include "components/ImageComponent.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true) @@ -15,12 +16,17 @@ Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCoun mInputManager = new InputManager(this); mViewController = new ViewController(this); mHelp = new HelpComponent(this); + + mBackgroundOverlay = new ImageComponent(this); + mBackgroundOverlay->setImage(":/scroll_gradient.png"); + pushGui(mViewController); } Window::~Window() { delete mViewController; // this would get deleted down below, but just to be safe, delete it here + delete mBackgroundOverlay; //delete all our GUIs while(peekGui()) @@ -80,6 +86,8 @@ bool Window::init(unsigned int width, unsigned int height) mDefaultFonts.push_back(Font::get(FONT_SIZE_LARGE)); } + mBackgroundOverlay->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + // update our help because font sizes probably changed if(peekGui()) setHelpPrompts(peekGui()->getHelpPrompts()); @@ -145,9 +153,14 @@ void Window::update(int deltaTime) void Window::render() { Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + + const unsigned int drawBGAfter = mGuiStack.size() > 1 ? mGuiStack.size() - 2 : mGuiStack.size(); for(unsigned int i = 0; i < mGuiStack.size(); i++) { mGuiStack.at(i)->render(transform); + + if(i == drawBGAfter) + mBackgroundOverlay->render(transform); } mHelp->render(transform); diff --git a/src/Window.h b/src/Window.h index 5621f7baa..0860f7f20 100644 --- a/src/Window.h +++ b/src/Window.h @@ -8,6 +8,7 @@ class ViewController; class HelpComponent; +class ImageComponent; class Window { @@ -42,6 +43,8 @@ private: InputManager* mInputManager; ViewController* mViewController; HelpComponent* mHelp; + ImageComponent* mBackgroundOverlay; + std::vector mGuiStack; std::vector< std::shared_ptr > mDefaultFonts; diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index c6f389583..2f8db2a1d 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -1,6 +1,6 @@ #include "ComponentList.h" -#define TOTAL_HORIZONTAL_PADDING_PX 12 +#define TOTAL_HORIZONTAL_PADDING_PX 20 ComponentList::ComponentList(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_NEVER_LOOP) { @@ -126,19 +126,24 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) // and 0xFFFFFF -> 0x777777 // (1 - dst) + 0x77 - Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)getRowHeight(mEntries.at(mCursor).data), 0xFFFFFFFF, + const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); + Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0xFFFFFFFF, GL_ONE_MINUS_DST_COLOR, GL_ZERO); - Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)getRowHeight(mEntries.at(mCursor).data), 0x777777FF, + Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0x777777FF, GL_ONE, GL_ONE); + // hack to draw 2px dark on left/right of the bar + Renderer::drawRect(0, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); + Renderer::drawRect((int)mSize.x() - 2, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); + // draw separators float y = 0; for(unsigned int i = 0; i < mEntries.size(); i++) { - Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C688); + Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C6FF); y += getRowHeight(mEntries.at(i).data); } - Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C688); + Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C6FF); Renderer::popClipRect(); } diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index ec11e3c8c..ba9a73212 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -7,21 +7,25 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w mTitle.setFont(Font::get(FONT_SIZE_LARGE)); mTitle.setText(title); + mTitle.setColor(0x555555FF); mTitle.setCentered(true); addChild(&mBackground); addChild(&mTitle); addChild(&mList); - setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.8f); + setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.75f); } void MenuComponent::onSizeChanged() { - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-2, -2)); + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + + const float titlePadding = mTitle.getFont()->getHeight() * 0.2f; mTitle.setSize(mSize.x(), (float)mTitle.getFont()->getHeight()); + mTitle.setPosition(0, titlePadding / 2); - mList.setPosition(0, mTitle.getSize().y()); - mList.setSize(mSize.x(), mSize.y() - mTitle.getSize().y()); + mList.setPosition(0, mTitle.getSize().y() + titlePadding); + mList.setSize(mSize.x(), mSize.y() - mTitle.getSize().y() - titlePadding); } diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 6b002c4ad..0d59e1484 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -8,7 +8,7 @@ #include #include "../Settings.h" -GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Menu") +GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU") { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); @@ -58,15 +58,22 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "Main Men void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func) { - std::shared_ptr font = Font::get(FONT_SIZE_LARGE); + std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); // populate the list ComponentListRow row; row.addElement(std::make_shared(mWindow, name, font, color), true); if(add_arrow) - row.addElement(std::make_shared(mWindow, ">", font, color), false); + { + std::shared_ptr bracket = std::make_shared(mWindow); + bracket->setImage(":/sq_bracket.png"); + if(bracket->getTextureSize().y() > font->getHeight()) + bracket->setResize(0, (float)font->getHeight()); + row.addElement(bracket, false); + } + row.makeAcceptInputHandler(func); mMenu.addRow(row); diff --git a/src/guis/GuiSettingsMenu.cpp b/src/guis/GuiSettingsMenu.cpp index a4f9b07a6..059f76a27 100644 --- a/src/guis/GuiSettingsMenu.cpp +++ b/src/guis/GuiSettingsMenu.cpp @@ -7,7 +7,7 @@ #include "../scrapers/GamesDBScraper.h" GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mMenu(mWindow, "Settings") + mMenu(mWindow, "SETTINGS") { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 0639a1080..9b75fd94c 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -210,7 +210,7 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) // fade out if(mFadeOpacity) { - Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::setMatrix(parentTrans); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | (unsigned char)(mFadeOpacity * 255)); } } From d0dfe480faaccaef6d0b5a27dd5ddf5401902b91 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 5 Mar 2014 19:49:32 -0600 Subject: [PATCH 178/386] Work on new OptionListComponent. --- src/components/ComponentList.cpp | 3 + src/components/OptionListComponent.h | 402 ++++++++------------------- src/guis/GuiScraperStart.cpp | 14 +- src/guis/GuiSettingsMenu.cpp | 10 +- 4 files changed, 135 insertions(+), 294 deletions(-) diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 2f8db2a1d..e1a364206 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -104,6 +104,9 @@ void ComponentList::onCursorChanged(const CursorState& state) void ComponentList::render(const Eigen::Affine3f& parentTrans) { + if(!size()) + return; + Eigen::Affine3f trans = parentTrans * getTransform(); // clip everything to be inside our bounds diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index f81d248ea..4fc964287 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -2,35 +2,90 @@ #include "../GuiComponent.h" #include "../resources/Font.h" -#include -#include #include "../Renderer.h" -#include "NinePatchComponent.h" #include "../Window.h" +#include "TextComponent.h" +#include "MenuComponent.h" +#include //Used to display a list of options. //Can select one or multiple options. +// if !multiSelect +// * <- curEntry -> + +// always +// * press a -> open full list + template class OptionListComponent : public GuiComponent { -public: - OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), - mMultiSelect(multiSelect) +private: + struct OptionListData { - if(multiSelect) - setSize(getFont()->sizeText("0 selected")); - else - setSize(getFont()->sizeText("Not set")); - } - - struct ListEntry - { - std::string text; - bool selected; + std::string name; T object; + bool selected; }; + class OptionListPopup : public GuiComponent + { + private: + MenuComponent mMenu; + OptionListComponent* mParent; + + public: + OptionListPopup(Window* window, OptionListComponent* parent) : GuiComponent(window), + mMenu(window, "optionlist"), mParent(parent) + { + auto font = Font::get(FONT_SIZE_MEDIUM); + ComponentListRow row; + for(auto it = mParent->mEntries.begin(); it != mParent->mEntries.end(); it++) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, it->name, font, 0x777777FF), true); + + mMenu.addRow(row); + } + + mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, (Renderer::getScreenHeight() - mMenu.getSize().y()) / 2); + addChild(&mMenu); + } + + bool input(InputConfig* config, Input input) override + { + if(config->isMappedTo("b", input) && input.value != 0) + { + delete this; + return true; + } + + return GuiComponent::input(config, input); + } + + virtual ~OptionListPopup() + { + // commit changes + + } + }; + +public: + OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), mText(window), mMultiSelect(multiSelect) + { + auto font = Font::get(FONT_SIZE_MEDIUM); + mText.setFont(font); + mText.setColor(0x777777FF); + mText.setCentered(true); + addChild(&mText); + + setSize(Renderer::getScreenWidth() * 0.2f, (float)font->getHeight()); + } + + void onSizeChanged() override + { + mText.setSize(mSize); + } bool input(InputConfig* config, Input input) override { @@ -41,90 +96,18 @@ public: open(); return true; } - } - return GuiComponent::input(config, input); - } - - void render(const Eigen::Affine3f& parentTrans) - { - std::shared_ptr font = getFont(); - - Renderer::setMatrix(parentTrans * getTransform()); - - unsigned int color = 0x000000FF; - - if(mMultiSelect) - { - //draw "# selected" - unsigned int selectedCount = 0; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + if(!mMultiSelect) { - if(it->selected) - selectedCount++; - } - - std::stringstream ss; - ss << selectedCount << " selected"; - font->drawText(ss.str(), Eigen::Vector2f(0, 0), color); - - }else{ - //draw selected option - bool found = false; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - { - if(it->selected) + if(config->isMappedTo("left", input)) { - font->drawText(it->text, Eigen::Vector2f(0, 0), color); - found = true; - break; + // move selection to previous + }else if(config->isMappedTo("right", input)) + { + // move selection to next } } - - if(!found) - font->drawText("Not set", Eigen::Vector2f(0, 0), color); } - - renderChildren(parentTrans * getTransform()); - } - - ListEntry makeEntry(const std::string& name, T obj, bool selected = false) const - { - ListEntry e; - e.text = name; - e.object = obj; - e.selected = selected; - return e; - } - - void populate(std::vector& vec, std::function selector) - { - for(auto it = vec.begin(); it != vec.end(); it++) - { - ListEntry e = selector(*it); - if(!e.text.empty()) - addEntry(e); - } - } - - void addEntry(ListEntry e) - { - mEntries.push_back(e); - - Eigen::Vector2f size = getFont()->sizeText(e.text); - if(size.x() > mSize.x()) - setSize(size.x(), mSize.y()); - } - - std::vector getSelected() - { - std::vector ret; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - { - if((*it).selected) - ret.push_back(&(*it)); - } - - return ret; + return GuiComponent::input(config, input); } std::vector getSelectedObjects() @@ -132,206 +115,63 @@ public: std::vector ret; for(auto it = mEntries.begin(); it != mEntries.end(); it++) { - if((*it).selected) + if(it->selected) ret.push_back(it->object); } return ret; } + T getSelected() + { + assert(mMultiSelect == false); + auto selected = getSelectedObjects(); + assert(selected.size() == 1); + return selected.at(0); + } + + void add(const std::string& name, const T& obj, bool selected) + { + OptionListData e; + e.name = name; + e.object = obj; + e.selected = selected; + + mEntries.push_back(e); + onSelectedChanged(); + } + private: void open() { - mWindow->pushGui(new OptionListPopup(mWindow, *this)); + mWindow->pushGui(new OptionListPopup(mWindow, this)); } - void select(unsigned int i) + void onSelectedChanged() { - if(i >= mEntries.size()) - return; - - if(!mMultiSelect) + if(mMultiSelect) + { + // display # selected + std::stringstream ss; + ss << getSelectedObjects().size() << " selected"; + mText.setText(ss.str()); + }else{ + // display currently selected + l/r cursors for(auto it = mEntries.begin(); it != mEntries.end(); it++) - it->selected = false; - - mEntries.at(i).selected = !mEntries.at(i).selected; + { + if(it->selected) + { + mText.setText(it->name); + break; + } + } + } } - std::shared_ptr getFont() - { - return Font::get(FONT_SIZE_MEDIUM); - } - - - class OptionListPopup : public GuiComponent - { - public: - OptionListPopup(Window* window, OptionListComponent& optList) : GuiComponent(window), - mOptList(optList), mBox(window, ":/textbox.png"), mCursor(0), mScrollOffset(0), mCursorTimer(0) - { - //find global position - GuiComponent* p = &mOptList; - do { - mPosition += p->getPosition(); - } while(p = p->getParent()); - - mSize = mOptList.getSize(); - updateTextCaches(); - } - - void render(const Eigen::Affine3f& parentTrans) override - { - Eigen::Affine3f trans = parentTrans * getTransform(); - - std::shared_ptr font = mOptList.getFont(); - - unsigned int renderCount = getPageSize(); - if(renderCount + mScrollOffset > mTextCaches.size()) - renderCount = mTextCaches.size() - mScrollOffset; - - unsigned int renderTo = mScrollOffset + renderCount; - - float height = (float)renderCount * font->getHeight(); - trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0)); - - mBox.fitTo(Eigen::Vector2f(mSize.x(), height)); - mBox.render(trans); - - Renderer::setMatrix(trans); - Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF); - - for(unsigned int i = mScrollOffset; i < renderTo; i++) - { - Renderer::setMatrix(trans); - - char rectOpacity = 0x00; - if(i == mCursor) - rectOpacity += 0x22; - if(mOptList.mEntries.at(i).selected) - rectOpacity += 0x44; - - Renderer::drawRect(0, 0, (int)mSize.x(), font->getHeight(), 0x00000000 | rectOpacity); - - Renderer::setMatrix(trans); - font->renderTextCache(mTextCaches.at(i)); - - trans = trans.translate(Eigen::Vector3f(0, (float)font->getHeight(), 0)); - } - } - - bool input(InputConfig* config, Input input) - { - if(input.value != 0) - { - if(config->isMappedTo("b", input)) - { - close(); - return true; - } - if(config->isMappedTo("a", input)) - { - mOptList.select(mCursor); - if(!mOptList.mMultiSelect) - close(); - - return true; - } - if(config->isMappedTo("up", input)) - { - mCursorDir = -1; - mCursorTimer = -350; - moveCursor(); - return true; - } - if(config->isMappedTo("down", input)) - { - mCursorDir = 1; - mCursorTimer = -350; - moveCursor(); - return true; - } - }else{ - if(config->isMappedTo("up", input) || config->isMappedTo("down", input)) - mCursorDir = 0; - } - - return GuiComponent::input(config, input); - } - - void update(int deltaTime) - { - if(mCursorDir != 0) - { - mCursorTimer += deltaTime; - while(mCursorTimer >= 100) - { - moveCursor(); - mCursorTimer -= 100; - } - } - } - - private: - void moveCursor() - { - if(mOptList.mEntries.size() == 0) - return; - - if(mCursorDir < 0) //scroll up - { - if(mCursor > 0) - mCursor--; - - if(mCursor < mScrollOffset) - mScrollOffset--; - }else if(mCursorDir > 0) //scroll down - { - if(mCursor < mOptList.mEntries.size() - 1) - mCursor++; - - if(mCursor - mScrollOffset >= getPageSize()) - mScrollOffset++; - } - } - - void close() - { - delete this; - } - - void updateTextCaches() - { - for(auto it = mTextCaches.begin(); it != mTextCaches.end(); it++) - { - delete *it; - } - mTextCaches.clear(); - - TextCache* cache; - std::shared_ptr font = mOptList.getFont(); - for(unsigned int i = 0; i < mOptList.mEntries.size(); i++) - { - cache = font->buildTextCache(mOptList.mEntries.at(i).text, 0, 0, 0x000000FF); - mTextCaches.push_back(cache); - } - } - - unsigned int getPageSize() - { - return 5; - } - - OptionListComponent& mOptList; - NinePatchComponent mBox; - - unsigned int mCursor; - int mCursorDir; - int mCursorTimer; - unsigned int mScrollOffset; - std::vector mTextCaches; - }; - bool mMultiSelect; - - std::vector mEntries; + + TextComponent mText; + + std::vector mEntries; }; + diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 1eb8f4268..99b4347ad 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -23,20 +23,18 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), using namespace Eigen; //add filters (with first one selected) - mFiltersOpt.addEntry(mFiltersOpt.makeEntry("All Games", - [](SystemData*, FileData*) -> bool { return true; }, true)); - mFiltersOpt.addEntry(mFiltersOpt.makeEntry("Missing Image", - [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); })); + mFiltersOpt.add("All Games", + [](SystemData*, FileData*) -> bool { return true; }, true); + mFiltersOpt.add("Missing Image", + [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); }, false); mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentGrid::AlignRight); mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentGrid::AlignLeft); //add systems (all with a platformid specified selected) std::vector sys = SystemData::sSystemVector; - mSystemsOpt.populate(sys, - [&](SystemData* s) { - return mSystemsOpt.makeEntry(s->getName(), s, s->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); - }); + for(auto it = sys.begin(); it != sys.end(); it++) + mSystemsOpt.add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentGrid::AlignRight); mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentGrid::AlignLeft); diff --git a/src/guis/GuiSettingsMenu.cpp b/src/guis/GuiSettingsMenu.cpp index 059f76a27..4a559e2ab 100644 --- a/src/guis/GuiSettingsMenu.cpp +++ b/src/guis/GuiSettingsMenu.cpp @@ -41,13 +41,13 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), std::vector< std::shared_ptr > scrapers; scrapers.push_back(std::make_shared()); scrapers.push_back(std::make_shared()); - scraper_list->populate(scrapers, [&] (const std::shared_ptr& sc) { - return scraper_list->makeEntry(sc->getName(), sc, sc->getName() == Settings::getInstance()->getScraper()->getName()); - }); + + for(auto it = scrapers.begin(); it != scrapers.end(); it++) + scraper_list->add((*it)->getName(), *it, (*it)->getName() == Settings::getInstance()->getScraper()->getName()); + addSetting("Scraper:", scraper_list, [scraper_list] { - if(scraper_list->getSelected().size() > 0) - Settings::getInstance()->setScraper(scraper_list->getSelected()[0]->object); + Settings::getInstance()->setScraper(scraper_list->getSelected()); }); // scrape ratings From 3ba7cd124777cf944971c0703118a98ee13b8c4e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 6 Mar 2014 13:45:03 -0600 Subject: [PATCH 179/386] Finished re-implementing OptionListComponent. More new art to go with it (thanks Nils!). --- CMakeLists.txt | 3 + data/ResourceUtil.cpp | 42 ++++--- data/Resources.h | 9 ++ data/converted/arrow_png.cpp | 127 ++++++++++++++++++++ data/converted/checkbox_checked_png.cpp | 137 ++++++++++++++++++++++ data/converted/checkbox_unchecked_png.cpp | 121 +++++++++++++++++++ data/resources/arrow.png | Bin 0 -> 1193 bytes data/resources/checkbox_checked.png | Bin 0 -> 1296 bytes data/resources/checkbox_unchecked.png | Bin 0 -> 1131 bytes src/components/ComponentList.cpp | 8 +- src/components/ComponentList.h | 2 +- src/components/MenuComponent.h | 2 +- src/components/OptionListComponent.h | 117 ++++++++++++++++-- 13 files changed, 537 insertions(+), 31 deletions(-) create mode 100644 data/converted/arrow_png.cpp create mode 100644 data/converted/checkbox_checked_png.cpp create mode 100644 data/converted/checkbox_unchecked_png.cpp create mode 100644 data/resources/arrow.png create mode 100644 data/resources/checkbox_checked.png create mode 100644 data/resources/checkbox_unchecked.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 89c17a16b..7252fb996 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -308,6 +308,9 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_left_right_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/sq_bracket_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_checked_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_unchecked_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index e9dcbf023..96c6efa58 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,9 +2,12 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 17; +const size_t res2hNrOfFiles = 20; const Res2hEntry res2hFiles[res2hNrOfFiles] = { + {":/arrow.png", arrow_png_size, arrow_png_data}, {":/button.png", button_png_size, button_png_data}, + {":/checkbox_checked.png", checkbox_checked_png_size, checkbox_checked_png_data}, + {":/checkbox_unchecked.png", checkbox_unchecked_png_size, checkbox_unchecked_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, @@ -24,23 +27,26 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { }; res2hMapType::value_type mapTemp[] = { - std::make_pair(":/button.png", res2hFiles[0]), - std::make_pair(":/ES_logo_16.png", res2hFiles[1]), - std::make_pair(":/ES_logo_32.png", res2hFiles[2]), - std::make_pair(":/frame.png", res2hFiles[3]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[4]), - std::make_pair(":/scroll_gradient.png", res2hFiles[5]), - std::make_pair(":/sq_bracket.png", res2hFiles[6]), - std::make_pair(":/star_filled.png", res2hFiles[7]), - std::make_pair(":/star_unfilled.png", res2hFiles[8]), - std::make_pair(":/textbox.png", res2hFiles[9]), - std::make_pair(":/textbox_glow.png", res2hFiles[10]), - std::make_pair(":/help/a.png", res2hFiles[11]), - std::make_pair(":/help/b.png", res2hFiles[12]), - std::make_pair(":/help/dpad.png", res2hFiles[13]), - std::make_pair(":/help/left_right.png", res2hFiles[14]), - std::make_pair(":/help/menu.png", res2hFiles[15]), - std::make_pair(":/help/up_down.png", res2hFiles[16]) + std::make_pair(":/arrow.png", res2hFiles[0]), + std::make_pair(":/button.png", res2hFiles[1]), + std::make_pair(":/checkbox_checked.png", res2hFiles[2]), + std::make_pair(":/checkbox_unchecked.png", res2hFiles[3]), + std::make_pair(":/ES_logo_16.png", res2hFiles[4]), + std::make_pair(":/ES_logo_32.png", res2hFiles[5]), + std::make_pair(":/frame.png", res2hFiles[6]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[7]), + std::make_pair(":/scroll_gradient.png", res2hFiles[8]), + std::make_pair(":/sq_bracket.png", res2hFiles[9]), + std::make_pair(":/star_filled.png", res2hFiles[10]), + std::make_pair(":/star_unfilled.png", res2hFiles[11]), + std::make_pair(":/textbox.png", res2hFiles[12]), + std::make_pair(":/textbox_glow.png", res2hFiles[13]), + std::make_pair(":/help/a.png", res2hFiles[14]), + std::make_pair(":/help/b.png", res2hFiles[15]), + std::make_pair(":/help/dpad.png", res2hFiles[16]), + std::make_pair(":/help/left_right.png", res2hFiles[17]), + std::make_pair(":/help/menu.png", res2hFiles[18]), + std::make_pair(":/help/up_down.png", res2hFiles[19]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index dd9581843..4f65da23f 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -5,9 +5,18 @@ #include #include +extern const size_t arrow_png_size; +extern const unsigned char arrow_png_data[]; + extern const size_t button_png_size; extern const unsigned char button_png_data[]; +extern const size_t checkbox_checked_png_size; +extern const unsigned char checkbox_checked_png_data[]; + +extern const size_t checkbox_unchecked_png_size; +extern const unsigned char checkbox_unchecked_png_data[]; + extern const size_t ES_logo_16_png_size; extern const unsigned char ES_logo_16_png_data[]; diff --git a/data/converted/arrow_png.cpp b/data/converted/arrow_png.cpp new file mode 100644 index 000000000..cf691cef0 --- /dev/null +++ b/data/converted/arrow_png.cpp @@ -0,0 +1,127 @@ +//this file was auto-generated from "arrow.png" by res2h + +#include "../Resources.h" + +const size_t arrow_png_size = 1193; +const unsigned char arrow_png_data[1193] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x0c, + 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0xf4, + 0x38,0x7d,0x1a,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x39,0x33,0x41,0x30,0x43,0x42, + 0x45,0x30,0x39,0x44,0x37,0x45,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x39,0x33,0x41,0x30,0x43,0x42, + 0x45,0x31,0x39,0x44,0x37,0x45,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x43,0x36,0x39,0x45,0x38,0x46, + 0x46,0x46,0x39,0x44,0x37,0x44,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x43,0x36,0x39,0x45,0x39,0x30, + 0x30,0x30,0x39,0x44,0x37,0x44,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x28,0xbb,0x69,0xeb,0x00,0x00,0x01,0x1b, + 0x49,0x44,0x41,0x54,0x78,0xda,0x8c,0xd3,0xbf,0x4b, + 0x02,0x61,0x1c,0xc7,0xf1,0xa7,0x43,0xa4,0x20,0x50, + 0x70,0xd1,0x21,0x87,0x68,0x69,0x91,0x36,0x17,0xc5, + 0x45,0xc2,0xa1,0x82,0x26,0x83,0x20,0x6a,0x69,0xb0, + 0x2d,0x82,0xdb,0xfa,0x0f,0x6c,0x11,0xda,0x92,0x70, + 0x73,0xa8,0x10,0x0a,0xaa,0x29,0xd1,0xa5,0x2d,0x5a, + 0x5a,0x04,0xc1,0x06,0x11,0x12,0x24,0x82,0x24,0x14, + 0x7b,0x3f,0xf0,0x08,0xc7,0xc1,0xdd,0x7d,0xbf,0xf0, + 0x9a,0xee,0xfb,0xb9,0xe7,0xf7,0x82,0x6d,0xdb,0x65, + 0xa5,0xd4,0x19,0x66,0x4a,0x50,0x16,0x4e,0x71,0x8d, + 0x90,0x34,0xa0,0xeb,0x00,0x77,0x58,0x92,0x06,0x74, + 0x6d,0xe1,0x19,0x51,0x69,0xa0,0x87,0x0c,0x9a,0x48, + 0x48,0x02,0xba,0xf9,0x03,0x29,0xb4,0xb1,0x16,0x14, + 0xf8,0x44,0x16,0xaf,0x58,0x45,0x0b,0x1b,0x7e,0x01, + 0x5d,0x43,0xe4,0xcd,0x5a,0xe2,0x78,0x41,0xce,0x2f, + 0xa0,0xeb,0x07,0xdb,0xa8,0x23,0x82,0x47,0xec,0xf8, + 0x05,0x74,0xfd,0x61,0x1f,0x97,0x58,0xc4,0x2d,0x8e, + 0x54,0xc0,0x61,0x4d,0x71,0x82,0x2f,0x9c,0xe3,0x0a, + 0x31,0x4b,0x70,0xb8,0xce,0x2b,0x63,0x85,0x02,0xce, + 0xa8,0x82,0x92,0x19,0xed,0x18,0x55,0xaf,0x40,0x18, + 0x35,0x14,0x31,0xc6,0x1e,0x1a,0x5e,0x6b,0x58,0xc6, + 0x0d,0x36,0xf1,0x6d,0x76,0xa8,0x39,0xff,0xe8,0x0e, + 0xc4,0xf0,0x80,0x34,0x06,0x28,0xe0,0xcd,0xd9,0xe0, + 0x0c,0xac,0xe0,0x09,0xeb,0xe8,0x9a,0x11,0x3a,0xee, + 0xe1,0x9d,0x01,0x7d,0x7f,0x92,0x78,0x37,0x7f,0xee, + 0x07,0xdd,0xa5,0xa4,0x09,0xe5,0xbc,0x9a,0xdd,0x81, + 0x7b,0x33,0x8d,0x91,0xe4,0x3d,0xe8,0x2d,0xdc,0xc5, + 0xaf,0xe4,0xc5,0x5d,0xe0,0x10,0x13,0xc9,0x9b,0xfe, + 0x17,0x60,0x00,0x1d,0x24,0x35,0x2f,0xfe,0xb0,0x0a, + 0xfe,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae, + 0x42,0x60,0x82 +}; diff --git a/data/converted/checkbox_checked_png.cpp b/data/converted/checkbox_checked_png.cpp new file mode 100644 index 000000000..8c4a629c4 --- /dev/null +++ b/data/converted/checkbox_checked_png.cpp @@ -0,0 +1,137 @@ +//this file was auto-generated from "checkbox_checked.png" by res2h + +#include "../Resources.h" + +const size_t checkbox_checked_png_size = 1296; +const unsigned char checkbox_checked_png_data[1296] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, + 0x00,0x00,0x00,0x18,0x08,0x06,0x00,0x00,0x00,0xe0, + 0x77,0x3d,0xf8,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x32,0x39,0x46,0x39,0x36,0x42, + 0x42,0x44,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x32,0x39,0x46,0x39,0x36,0x42, + 0x42,0x45,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, + 0x44,0x45,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x32,0x39,0x46,0x39,0x36,0x42, + 0x42,0x43,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0xf8,0x79,0xf8,0xc2,0x00,0x00,0x01,0x82, + 0x49,0x44,0x41,0x54,0x78,0xda,0xac,0x95,0xbd,0x4a, + 0x03,0x41,0x14,0x85,0x67,0x27,0xdb,0x5b,0xad,0x8d, + 0xf6,0x29,0x62,0xa7,0x85,0x82,0x16,0x82,0xe0,0x03, + 0x88,0xb1,0xd2,0xda,0xc2,0xc2,0x6e,0xbb,0xa0,0x79, + 0x03,0x51,0xc8,0xd6,0x5a,0x45,0xf4,0x19,0x2c,0x22, + 0x68,0xa1,0xa5,0x90,0xf4,0x6a,0x61,0x1a,0xd3,0x1b, + 0xd6,0x73,0xe5,0x2c,0x0c,0x61,0x9c,0xdc,0x64,0xf7, + 0xc2,0x97,0xd9,0x09,0x73,0xcf,0xd9,0xf9,0xb9,0x3b, + 0x51,0x9a,0xa6,0x06,0xb1,0x00,0xce,0xc0,0x1e,0x58, + 0x06,0x91,0x99,0x2f,0x72,0xf0,0x01,0xee,0xc0,0x39, + 0xf8,0x8e,0x29,0xfe,0x08,0x56,0x4c,0xf9,0x88,0xf8, + 0x82,0xa7,0x60,0x07,0x6c,0x5a,0xfc,0xb4,0x28,0xde, + 0x07,0x1b,0x20,0xe6,0xc0,0x79,0x88,0xa9,0xd1,0xa7, + 0x66,0x4b,0x0c,0xf6,0xe9,0x7e,0x04,0x9e,0xc1,0xb8, + 0xc4,0x0c,0xc6,0xd4,0x38,0x64,0xbf,0x69,0x39,0x25, + 0x89,0x17,0x67,0xe0,0x31,0x48,0x66,0x10,0x4e,0x98, + 0x53,0xc4,0x2b,0xdb,0x25,0xeb,0x6c,0x68,0xce,0xf6, + 0x04,0x74,0xc0,0x83,0xd2,0x24,0xe1,0xd8,0x0e,0x73, + 0x5d,0xad,0xc8,0x7a,0x12,0x6e,0xc1,0x1b,0x68,0x28, + 0x4c,0x0a,0xf1,0x06,0x73,0xba,0x93,0x03,0x7c,0x06, + 0x5f,0x60,0x5b,0x61,0x32,0x29,0x2e,0x39,0x43,0x8d, + 0x81,0xe1,0xc0,0x90,0x89,0x4a,0x3c,0x64,0x10,0x32, + 0x51,0x8b,0x1b,0x9e,0x5b,0xa3,0x30,0x29,0x04,0x7b, + 0xfc,0xbf,0xae,0x11,0xd7,0x18,0xb8,0x26,0x3d,0x0a, + 0x4b,0x0c,0x34,0xe2,0xd3,0x96,0xa8,0x92,0xb0,0x33, + 0x9c,0xf3,0x3a,0xdf,0x7c,0xc0,0x67,0x55,0x9d,0x58, + 0xa5,0x78,0xb1,0xa1,0x5b,0x44,0x5b,0x27,0x41,0x83, + 0xff,0x4e,0xcb,0x50,0x59,0x27,0x41,0x83,0x69,0x47, + 0x51,0x6d,0xe2,0x33,0x58,0x54,0x9e,0x73,0x95,0x89, + 0xcf,0xa0,0xa9,0x2d,0x22,0x8f,0xc9,0x81,0xaf,0x0e, + 0x72,0xe7,0xc2,0x90,0xe7,0x2b,0xf0,0x03,0xee,0x35, + 0xe7,0xdc,0x31,0x91,0xeb,0x36,0x73,0x6e,0xb6,0xbf, + 0xaf,0xaa,0xe5,0x1d,0x2a,0xb1,0xe6,0x24,0x65,0x4a, + 0x71,0xd7,0x24,0x73,0xfa,0xab,0x6c,0x3f,0x2d,0x3f, + 0xcf,0x12,0xd7,0x60,0x1d,0xd4,0x4a,0xd4,0x55,0x8d, + 0x1a,0x37,0xec,0x77,0x65,0x89,0xda,0x60,0x97,0x6b, + 0xf8,0x54,0x61,0x11,0xcb,0xbe,0xb4,0x65,0x06,0x23, + 0xb9,0xfd,0xc1,0x05,0x78,0xaf,0x40,0x58,0x34,0x2e, + 0xa9,0x39,0xfa,0x15,0x60,0x00,0x12,0x0c,0x71,0x62, + 0xd6,0x69,0x05,0x82,0x00,0x00,0x00,0x00,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/checkbox_unchecked_png.cpp b/data/converted/checkbox_unchecked_png.cpp new file mode 100644 index 000000000..16e2a3b06 --- /dev/null +++ b/data/converted/checkbox_unchecked_png.cpp @@ -0,0 +1,121 @@ +//this file was auto-generated from "checkbox_unchecked.png" by res2h + +#include "../Resources.h" + +const size_t checkbox_unchecked_png_size = 1131; +const unsigned char checkbox_unchecked_png_data[1131] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, + 0x00,0x00,0x00,0x18,0x08,0x06,0x00,0x00,0x00,0xe0, + 0x77,0x3d,0xf8,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, + 0x44,0x43,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, + 0x44,0x44,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, + 0x44,0x41,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, + 0x44,0x42,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0xc7,0x8f,0x1f,0x43,0x00,0x00,0x00,0xdd, + 0x49,0x44,0x41,0x54,0x78,0xda,0xec,0x95,0x31,0x0a, + 0xc2,0x40,0x14,0x44,0x77,0x37,0xdb,0x7b,0x00,0xbd, + 0x81,0x76,0x5a,0x28,0x58,0x0a,0x1e,0x40,0xb4,0xd3, + 0x33,0xd8,0xa5,0x0b,0xea,0x0d,0xc4,0x1b,0x98,0x4a, + 0xf1,0x18,0x82,0x16,0x5a,0x0a,0x39,0x80,0x5a,0x9b, + 0x03,0x84,0x38,0x1f,0x46,0x49,0x9d,0xac,0x60,0xb1, + 0x03,0x2f,0x61,0x21,0xbc,0xc9,0x27,0x90,0xaf,0xc3, + 0x30,0x54,0x48,0x0d,0x2c,0xc0,0x08,0x34,0x80,0x56, + 0xe5,0x92,0x83,0x07,0x38,0x80,0x25,0x78,0x59,0xca, + 0x8f,0xa0,0xa5,0xaa,0x47,0xf3,0x05,0xe7,0x60,0x00, + 0xfa,0x06,0x97,0x88,0xf2,0x04,0xf4,0x80,0xe5,0x83, + 0x65,0xb0,0x74,0x24,0x74,0x46,0x52,0x30,0x66,0xfb, + 0x0c,0x9c,0x41,0x56,0x61,0x82,0x8c,0x8e,0x29,0xcf, + 0x13,0xc3,0x91,0x24,0x17,0xe5,0x2e,0x57,0xde,0xeb, + 0xa6,0xf0,0x41,0x73,0x87,0x05,0x1f,0x97,0x36,0xea, + 0xc7,0xf1,0x05,0xbe,0xc0,0x17,0xf8,0x82,0x7f,0x29, + 0xc8,0x0b,0xdb,0xc8,0x55,0xbe,0x7f,0x68,0xc3,0x1d, + 0x2a,0xe9,0x38,0x2c,0x68,0xf3,0xfe,0x94,0x82,0x3d, + 0x0f,0x5b,0xd0,0x05,0x41,0x05,0x71,0x40,0x47,0xcc, + 0xf3,0x4e,0x76,0xe8,0x0a,0x0c,0x41,0x13,0x9c,0x1c, + 0x4e,0x71,0x13,0xb7,0x4c,0x90,0xca,0xf6,0x07,0x6b, + 0x70,0x77,0x20,0x16,0xc7,0x86,0xce,0xf4,0x2d,0xc0, + 0x00,0xa5,0x0f,0x24,0x89,0xc3,0x06,0x4f,0xc8,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82 +}; diff --git a/data/resources/arrow.png b/data/resources/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd7353f8950d20a5f29420bb46df114c06c524a GIT binary patch literal 1193 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eQ!3HG1Sky`ZDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WSsFVUI6Ju-Sh|?I8XCG9J6amLIJvmFm>5`E z8o9a}!}Pl3Czs}?=9R$orXchh;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%EaOpXERGz z3pY16pm{FX-2%~@g2gQ$y_N--UU0(X(zWb zomAjm@5qM+6E=+pXKy~>S@VGN^@~}8 zR_`9pWvs2ARAFBKj{WY^C7e(9%(~lHZQMKYiR}yBJ4e?)IU4&wK=|bBf8q%YvMQ$f T|2A;_0~H>gu6{1-oD!Mc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#RAbg?iuG;}p~v@~>aa&dDpF|f2W za&2=9ZF3nBND}m`vLFjeGsTY(OatnYqyQCInmZhe+73JqDfIV%MiN!4jhQ>z5 zmM*x>gX&Ge?G|U8ZqWxiMjsTlNKp+F0;V4j6P|E^9C*@C%>$az5;;-@-1iF59xd_Oe(CTH>an?HA22hLi?wvpl70l5gai8J+!J}|yJ zVELm@^B+f;&(Dq@P0JJ5bE5ui(YVJht?=wXWyi{k%hSAhzP+qtnRjr<5uRgLEK>Go zTB>%6r#~?CNE7gz5qw1Zw(9GgjC0>uN)9w%Qh9iTuQ+z?i7KJIgVGrqK3pH!ig!(B zu3?K$h)y)p)U$N%ZG3oOLZ_EaihxmIxAeT|#Ri%z)qnP{6TB|5L(P`Uo5$qQ zZ7`nm+3J4Hf%MS15lbsJE{t}GR(EXv?{_*N5=dvd2j)I9jtH4oJhk)uf|a^T{U;mO z^A$ZmG~v1S2j+LC&+iycd~H^ow{8FWRZnHLHa=5H^(wrsQv7Rmj=iq^d7tu}jcoH@FK&Bd9cJK96G zMHh%}6a^XdVh<5rAn2i+WS~V<&`T6WFVYpd7!d{08FQ_Nwqa(@IX~a`{nxX0vdo4?r7U|n{#+#QkO$}*Gv)kBm{Qx#P6U|Vly5#EPz*& z0iR4W3?2-UOjUI-$W-Efn(EIGVbjlYx@kAOzlcT6i zCPQWdq+xYZ49l{vhTrc)2%p`jL&@>!_VS#90BqS(O{f|=?kY;{Mi1l(6zT62G;>;3 zx2MX43Pw4SNiihtrj!GU;{TzVHjTDn0{n^hpTc&s&jeHg*hY^fqsDbCcU_rW*a8wX ztfXOV%T=*CZ9v0L8zvrZ3F50nNmg~&P%+66MJ}e>P|{@(6L` zwKWVA34~ZiXb_@870t5#NFP>N#{IN9Tn=%KPOx)jf2LMZ7x zeSe(s-mae~WNMym$8PNGZC#b}F0H@vIPhd>_S>R6i%zclRGOXN>SYI7PZjL0EsMrZ zpKrTdKuOE4-(7k5;s~8=DykfwRW-0_{OGQkwF4`hE%y$c89LWE;d#}DeJ?z*@AHf= z1LM2EC0Gul3A*FQoWam0DSO~x#lzx}BjqLI5(O?-_%y7Cw?Bw@^iO7@`OCy^^Nx@;=QlEb3(;~i{stJSJxlD_jP8M hnZf6e?s@RVH;fI(wi mCameraOffset = 0; } -void ComponentList::addRow(const ComponentListRow& row) +void ComponentList::addRow(const ComponentListRow& row, bool setCursorHere) { IList::Entry e; e.name = ""; @@ -22,6 +22,12 @@ void ComponentList::addRow(const ComponentListRow& row) updateElementSize(mEntries.back().data); updateElementPosition(mEntries.back().data); + + if(setCursorHere) + { + mCursor = mEntries.size() - 1; + onCursorChanged(CURSOR_STOPPED); + } } void ComponentList::onSizeChanged() diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index f5547eea7..e5315391c 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -45,7 +45,7 @@ class ComponentList : public IList public: ComponentList(Window* window); - void addRow(const ComponentListRow& row); + void addRow(const ComponentListRow& row, bool setCursorHere = false); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 4ead0dbf9..a309623d5 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -11,7 +11,7 @@ public: void onSizeChanged() override; - inline void addRow(const ComponentListRow& row) { mList.addRow(row); } + inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList.addRow(row, setCursorHere); } private: NinePatchComponent mBackground; diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 4fc964287..3f7da5a98 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -5,8 +5,10 @@ #include "../Renderer.h" #include "../Window.h" #include "TextComponent.h" +#include "ImageComponent.h" #include "MenuComponent.h" #include +#include "../Log.h" //Used to display a list of options. //Can select one or multiple options. @@ -36,16 +38,51 @@ private: public: OptionListPopup(Window* window, OptionListComponent* parent) : GuiComponent(window), - mMenu(window, "optionlist"), mParent(parent) + mMenu(window, ""), mParent(parent) { auto font = Font::get(FONT_SIZE_MEDIUM); ComponentListRow row; + for(auto it = mParent->mEntries.begin(); it != mParent->mEntries.end(); it++) { row.elements.clear(); row.addElement(std::make_shared(mWindow, it->name, font, 0x777777FF), true); - mMenu.addRow(row); + OptionListData& e = *it; + + if(mParent->mMultiSelect) + { + // add checkbox + auto checkbox = std::make_shared(mWindow); + checkbox->setImage(it->selected ? ":/checkbox_checked.png" : ":/checkbox_unchecked.png"); + + if(checkbox->getTextureSize().y() > (int)FONT_SIZE_MEDIUM) // downscale if necessary to match text + checkbox->setResize(0, (float)FONT_SIZE_MEDIUM); + + row.addElement(checkbox, false); + + // input handler + // update checkbox state & selected value + row.makeAcceptInputHandler([this, &e, checkbox] + { + e.selected = !e.selected; + checkbox->setImage(e.selected ? ":/checkbox_checked.png" : ":/checkbox_unchecked.png"); + mParent->onSelectedChanged(); + }); + }else{ + // input handler for non-multiselect + // update selected value and close + row.makeAcceptInputHandler([this, &e] + { + mParent->mEntries.at(mParent->getSelectedId()).selected = false; + e.selected = true; + mParent->onSelectedChanged(); + delete this; + }); + } + + // also set cursor to this row if we're not multi-select and this row is selected + mMenu.addRow(row, (!mParent->mMultiSelect && it->selected)); } mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, (Renderer::getScreenHeight() - mMenu.getSize().y()) / 2); @@ -62,16 +99,11 @@ private: return GuiComponent::input(config, input); } - - virtual ~OptionListPopup() - { - // commit changes - - } }; public: - OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), mText(window), mMultiSelect(multiSelect) + OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), + mText(window), mLeftArrow(window), mRightArrow(window) { auto font = Font::get(FONT_SIZE_MEDIUM); mText.setFont(font); @@ -79,12 +111,45 @@ public: mText.setCentered(true); addChild(&mText); + if(mMultiSelect) + { + mRightArrow.setImage(":/sq_bracket.png"); + addChild(&mRightArrow); + }else{ + mLeftArrow.setImage(":/arrow.png"); + mLeftArrow.setFlipX(true); + addChild(&mLeftArrow); + + mRightArrow.setImage(":/arrow.png"); + addChild(&mRightArrow); + } + + // handles positioning/resizing of text and arrows setSize(Renderer::getScreenWidth() * 0.2f, (float)font->getHeight()); } void onSizeChanged() override { - mText.setSize(mSize); + // size + if(mLeftArrow.getTextureSize().y() > mSize.y()) + mLeftArrow.setResize(0, mSize.y()); + else + mLeftArrow.setResize(0, 0); + + if(mRightArrow.getTextureSize().y() > mSize.y()) + mRightArrow.setResize(0, mSize.y()); + else + mRightArrow.setResize(0, 0); + + if(mSize.x() < (mLeftArrow.getSize().x() + mRightArrow.getSize().x())) + LOG(LogWarning) << "OptionListComponent too narrow!"; + + mText.setSize(mSize.x() - mLeftArrow.getSize().x() - mRightArrow.getSize().x(), (float)mText.getFont()->getHeight()); + + // position + mLeftArrow.setPosition(0, (mSize.y() - mLeftArrow.getSize().y()) / 2); + mText.setPosition(mLeftArrow.getPosition().x() + mLeftArrow.getSize().x(), (mSize.y() - mText.getSize().y()) / 2); + mRightArrow.setPosition(mText.getPosition().x() + mText.getSize().x(), (mSize.y() - mRightArrow.getSize().y()) / 2); } bool input(InputConfig* config, Input input) override @@ -101,9 +166,26 @@ public: if(config->isMappedTo("left", input)) { // move selection to previous + unsigned int i = getSelectedId(); + int next = (int)i - 1; + if(next < 0) + next += mEntries.size(); + + mEntries.at(i).selected = false; + mEntries.at(next).selected = true; + onSelectedChanged(); + return true; + }else if(config->isMappedTo("right", input)) { // move selection to next + unsigned int i = getSelectedId(); + int next = (i + 1) % mEntries.size(); + mEntries.at(i).selected = false; + mEntries.at(next).selected = true; + onSelectedChanged(); + return true; + } } } @@ -142,6 +224,19 @@ public: } private: + unsigned int getSelectedId() + { + assert(mMultiSelect == false); + for(unsigned int i = 0; i < mEntries.size(); i++) + { + if(mEntries.at(i).selected) + return i; + } + + LOG(LogWarning) << "OptionListComponent::getSelectedId() - no selected element found, defaulting to 0"; + return 0; + } + void open() { mWindow->pushGui(new OptionListPopup(mWindow, this)); @@ -171,6 +266,8 @@ private: bool mMultiSelect; TextComponent mText; + ImageComponent mLeftArrow; + ImageComponent mRightArrow; std::vector mEntries; }; From 5d6733991a1094a77185e91de81410f4fc8a7f81 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 6 Mar 2014 21:35:13 -0600 Subject: [PATCH 180/386] Removed the overly-complicated "common" view. Replaced it with the ability to specify multiple views in a theme tag, just like for elements. --- THEMES.md | 20 ++++++++------------ src/ThemeData.cpp | 33 ++++++++++++++++----------------- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/THEMES.md b/THEMES.md index d3234b55d..d4526107d 100644 --- a/THEMES.md +++ b/THEMES.md @@ -81,7 +81,7 @@ It is recommended that if you are writing a theme you launch EmulationStation wi ### The `` tag -You can include theme files within theme files, similar to `#include` in C (though the mechanism is different, the effect is the same). Example: +You can include theme files within theme files, similar to `#include` in C (though the internal mechanism is different, the effect is the same). Example: `~/.emulationstation/all_themes.xml`: ```xml @@ -126,14 +126,14 @@ Notice that properties that were not specified got merged (``) and the -### The "common" view +### Theming multiple views simultaneously -Sometimes you want to apply the same values to the same element across many views. The "common" view is one way to do this. +Sometimes you want to apply the same properties to the same elements across multiple views. The `name` attribute actually works as a list (delimited by any characters of `\t\r\n ,` - that is, whitespace and commas). So, for example, to easily apply the same header to the basic, grid, and system views: ```xml 3 - + ./snes_art/snes_header.png @@ -146,7 +146,7 @@ Sometimes you want to apply the same values to the same element across many view ``` -Is equivalent to: +This is equivalent to: ```xml 3 @@ -174,15 +174,11 @@ Is equivalent to: ``` -Notice that you can still override the "common" view in a specific view definition (as shown in the "detailed" view). - -You probably should not use the "common" view for element positioning. You also should not use it to create "extra" elements. +### Theming multiple elements simultaneously -### Theming more than one elements at once - -You can theme multiple elements *of the same type* simultaneously. The `name` attribute actually works as a list (delimited by any characters of `\t\n ,` - that is, whitespace and commas). This is useful if you want to, say, apply the same color to all the metadata labels: +You can theme multiple elements *of the same type* simultaneously. The `name` attribute actually works as a list (delimited by any characters of `\t\r\n ,` - that is, whitespace and commas), just like it does for views, as long as the elements have the same type. This is useful if you want to, say, apply the same color to all the metadata labels: ```xml @@ -197,7 +193,7 @@ You can theme multiple elements *of the same type* simultaneously. The `name` a ``` -Is equivalent to: +Which is equivalent to: ```xml 3 diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 02c6531ef..c958d7bd1 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -201,22 +201,26 @@ void ThemeData::parseViews(const pugi::xml_node& root) ThemeException error; error.setFiles(mPaths); - pugi::xml_node common = root.find_child_by_attribute("view", "name", "common"); - // parse views for(pugi::xml_node node = root.child("view"); node; node = node.next_sibling("view")) { if(!node.attribute("name")) throw error << "View missing \"name\" attribute!"; - const char* viewKey = node.attribute("name").as_string(); - ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; - - // load common first - if(common && node != common) - parseView(common, view); - - parseView(node, view); + const char* delim = " \t\r\n,"; + const std::string nameAttr = node.attribute("name").as_string(); + size_t prevOff = nameAttr.find_first_not_of(delim, 0); + size_t off = nameAttr.find_first_of(delim, prevOff); + std::string viewKey; + while(off != std::string::npos || prevOff != std::string::npos) + { + viewKey = nameAttr.substr(prevOff, off - prevOff); + prevOff = nameAttr.find_first_not_of(delim, off); + off = nameAttr.find_first_of(delim, prevOff); + + ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; + parseView(node, view); + } } } @@ -234,7 +238,7 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) if(elemTypeIt == sElementMap.end()) throw error << "Unknown element of type \"" << node.name() << "\"!"; - const char* delim = " \t\n,"; + const char* delim = " \t\r\n,"; const std::string nameAttr = node.attribute("name").as_string(); size_t prevOff = nameAttr.find_first_not_of(delim, 0); size_t off = nameAttr.find_first_of(delim, prevOff); @@ -324,12 +328,7 @@ const ThemeData::ThemeElement* ThemeData::getElement(const std::string& view, co { auto viewIt = mViews.find(view); if(viewIt == mViews.end()) - { - // also check common if the view never existed to begin with - viewIt = mViews.find("common"); - if(viewIt == mViews.end()) - return NULL; - } + return NULL; // not found auto elemIt = viewIt->second.elements.find(element); if(elemIt == viewIt->second.elements.end()) return NULL; From a4f33914bc7bd822dcb8ee2c7d2ad28ef3897ebb Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 6 Mar 2014 21:47:43 -0600 Subject: [PATCH 181/386] Added some more information to THEMES.md. --- THEMES.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/THEMES.md b/THEMES.md index d4526107d..c91f7322b 100644 --- a/THEMES.md +++ b/THEMES.md @@ -3,6 +3,9 @@ Themes EmulationStation allows each system to have its own "theme." A theme is a collection **views** that define some **elements**, each with their own **properties**. +Themes are loaded from two places. If it is not in the first, it will try the next: +* `[SYSTEM_PATH]/theme.xml` +* `[HOME]/.emulationstation/[SYSTEM_NAME]/theme.xml` (where `[HOME]` is the `$HOME` environment variable on Linux and `%HOMEPATH%` on Windows) Simple Example ============== @@ -333,7 +336,7 @@ Reference ## Types of properties: * NORMALIZED_PAIR - two decimals, in the range [0..1], delimited by a space. For example, `0.25 0.5`. Most commonly used for position (x and y coordinates) and size (width and height). -* PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` or `%HOMEPATH%`, depending on platform). If the first character is a `.`, it will be expanded to the theme file's directory. +* PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` for Linux or `%HOMEPATH%` for Windows). If the first character is a `.`, it will be expanded to the theme file's directory, allowing you to specify resources relative to the theme file, like so: `./../general_art/myfont.ttf`. * BOOLEAN - `true`/`1` or `false`/`0`. * COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). * FLOAT - a decimal. From 5da0f014729b60ad7d4b9e09cfb634a93e898aad Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 6 Mar 2014 21:52:55 -0600 Subject: [PATCH 182/386] Fixed a grammar error in THEMES.md. --- THEMES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/THEMES.md b/THEMES.md index c91f7322b..3c2abfe93 100644 --- a/THEMES.md +++ b/THEMES.md @@ -64,11 +64,11 @@ Or, you can create your own elements by adding `extra="true"` (as is done in the ``` -"Extra" elements will be drawn in the order they are defined. When they get drawn relative to the pre-existing elements depends on the view. Make sure "extra" element names do not clash with existing names. +"Extra" elements will be drawn in the order they are defined (so define backgrounds first!). When they get drawn relative to the pre-existing elements depends on the view. Make sure "extra" element names do not clash with existing element names! An easy way to protect against this is to just start all your extra element names with some prefix like "e_". -*Properties* control how a particular *element* looks - for example, its position, size, image path, etc. There different types of properties that determine what kinds of values you can use - you can read about them below in the "Reference" section. Properties are defined like this: +*Properties* control how a particular *element* looks - for example, its position, size, image path, etc. The type of the property determines what kinds of values you can use. You can read about the types below in the "Reference" section. Properties are defined like this: ```xml ValueHere From 076131f35cfd4b64698e634ada309bd5f12bc927 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 7 Mar 2014 18:16:08 -0600 Subject: [PATCH 183/386] New slider art. --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 26 ++++--- data/Resources.h | 3 + data/converted/slider_knob_png.cpp | 121 +++++++++++++++++++++++++++++ data/resources/slider_knob.png | Bin 0 -> 1140 bytes src/components/SliderComponent.cpp | 46 ++++++----- src/components/SliderComponent.h | 3 + 7 files changed, 167 insertions(+), 33 deletions(-) create mode 100644 data/converted/slider_knob_png.cpp create mode 100644 data/resources/slider_knob.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 7252fb996..5fb9192fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -311,6 +311,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_checked_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_unchecked_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_png.cpp ) SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 96c6efa58..7a5495b01 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 20; +const size_t res2hNrOfFiles = 21; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.png", arrow_png_size, arrow_png_data}, {":/button.png", button_png_size, button_png_data}, @@ -13,6 +13,7 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/frame.png", frame_png_size, frame_png_data}, {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, + {":/slider_knob.png", slider_knob_png_size, slider_knob_png_data}, {":/sq_bracket.png", sq_bracket_png_size, sq_bracket_png_data}, {":/star_filled.png", star_filled_png_size, star_filled_png_data}, {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, @@ -36,17 +37,18 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/frame.png", res2hFiles[6]), std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[7]), std::make_pair(":/scroll_gradient.png", res2hFiles[8]), - std::make_pair(":/sq_bracket.png", res2hFiles[9]), - std::make_pair(":/star_filled.png", res2hFiles[10]), - std::make_pair(":/star_unfilled.png", res2hFiles[11]), - std::make_pair(":/textbox.png", res2hFiles[12]), - std::make_pair(":/textbox_glow.png", res2hFiles[13]), - std::make_pair(":/help/a.png", res2hFiles[14]), - std::make_pair(":/help/b.png", res2hFiles[15]), - std::make_pair(":/help/dpad.png", res2hFiles[16]), - std::make_pair(":/help/left_right.png", res2hFiles[17]), - std::make_pair(":/help/menu.png", res2hFiles[18]), - std::make_pair(":/help/up_down.png", res2hFiles[19]) + std::make_pair(":/slider_knob.png", res2hFiles[9]), + std::make_pair(":/sq_bracket.png", res2hFiles[10]), + std::make_pair(":/star_filled.png", res2hFiles[11]), + std::make_pair(":/star_unfilled.png", res2hFiles[12]), + std::make_pair(":/textbox.png", res2hFiles[13]), + std::make_pair(":/textbox_glow.png", res2hFiles[14]), + std::make_pair(":/help/a.png", res2hFiles[15]), + std::make_pair(":/help/b.png", res2hFiles[16]), + std::make_pair(":/help/dpad.png", res2hFiles[17]), + std::make_pair(":/help/left_right.png", res2hFiles[18]), + std::make_pair(":/help/menu.png", res2hFiles[19]), + std::make_pair(":/help/up_down.png", res2hFiles[20]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 4f65da23f..4aac89195 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -32,6 +32,9 @@ extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; extern const size_t scroll_gradient_png_size; extern const unsigned char scroll_gradient_png_data[]; +extern const size_t slider_knob_png_size; +extern const unsigned char slider_knob_png_data[]; + extern const size_t sq_bracket_png_size; extern const unsigned char sq_bracket_png_data[]; diff --git a/data/converted/slider_knob_png.cpp b/data/converted/slider_knob_png.cpp new file mode 100644 index 000000000..26dc7a4ca --- /dev/null +++ b/data/converted/slider_knob_png.cpp @@ -0,0 +1,121 @@ +//this file was auto-generated from "slider_knob.png" by res2h + +#include "../Resources.h" + +const size_t slider_knob_png_size = 1140; +const unsigned char slider_knob_png_data[1140] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x10, + 0x00,0x00,0x00,0x10,0x08,0x06,0x00,0x00,0x00,0x1f, + 0xf3,0xff,0x61,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x34,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x35,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x33,0x42,0x37,0x42,0x36,0x33, + 0x37,0x46,0x39,0x44,0x38,0x38,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x33,0x42,0x37,0x42,0x36,0x33, + 0x38,0x30,0x39,0x44,0x38,0x38,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x1b,0x1b,0x31,0x47,0x00,0x00,0x00,0xe6, + 0x49,0x44,0x41,0x54,0x78,0xda,0xa4,0x93,0x4d,0x0a, + 0xc2,0x30,0x10,0x46,0x63,0x14,0xc5,0x63,0x58,0x10, + 0xfc,0x01,0xbd,0x83,0xb8,0xa8,0xe8,0x31,0x0a,0xba, + 0x70,0xe3,0xaa,0xb7,0x50,0x0a,0x0a,0x0a,0xf5,0x18, + 0x82,0x8b,0xe2,0x25,0xac,0x82,0x9b,0x82,0x87,0x10, + 0xa1,0x62,0xf1,0x1b,0x99,0x48,0x74,0x51,0x6c,0x3a, + 0xf0,0xa0,0x4c,0xfb,0xbe,0x84,0x74,0x52,0x70,0x5d, + 0x57,0xfc,0x54,0x0b,0x38,0x60,0x00,0x6a,0xdc,0x8b, + 0xc0,0x1e,0xf8,0xe0,0xac,0x7f,0x2c,0xb5,0xe7,0x32, + 0x58,0x82,0x23,0x98,0x81,0x06,0xa8,0x30,0x4d,0xee, + 0xd1,0xbb,0x35,0xa8,0x2a,0xa9,0xa4,0xc9,0x3b,0xd0, + 0x17,0xe9,0x45,0x0b,0x8e,0x41,0x9d,0x77,0x18,0xab, + 0x1d,0x2c,0xfe,0x90,0xf5,0xea,0x81,0xb9,0x4a,0x6c, + 0x73,0x6a,0xd6,0x9a,0x90,0x2b,0xf9,0xc0,0x8a,0x06, + 0x01,0xe4,0x38,0x14,0x60,0x0b,0xf3,0xb2,0x29,0xc0, + 0xca,0x11,0x60,0x49,0x91,0xaf,0xde,0x7f,0x21,0xca, + 0x11,0x70,0x95,0x3c,0x61,0xa6,0x15,0x50,0xc0,0x16, + 0x3c,0x0d,0x64,0x72,0x7c,0x0a,0x08,0xc1,0xc6,0x20, + 0x80,0x9c,0x50,0x1d,0x22,0xcd,0x79,0x90,0x41,0x3e, + 0xb0,0xf3,0xb9,0x4c,0x31,0x18,0x82,0x15,0x48,0x52, + 0xc4,0x84,0x57,0x1e,0xb1,0xf3,0x75,0x1b,0xa9,0x31, + 0x05,0x1d,0xe0,0x81,0x0b,0x78,0x80,0x1b,0x38,0x71, + 0xaf,0xcb,0x23,0x7c,0x57,0xd2,0x4b,0x80,0x01,0x00, + 0x3d,0x15,0x2b,0x10,0xc1,0x8a,0x11,0x59,0x00,0x00, + 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/slider_knob.png b/data/resources/slider_knob.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9d3d669840ea674dc28b4a0014543cff1c5e9e GIT binary patch literal 1140 zcmaJ>TWHfz7|sxfbPPJ!bXuk{Q}D7jNxNokY?ZEQU3D3?E37^U%aXG#Zn-Quv)K^b zsvs)JLeegj?8pA>>EL{*g0K{8Bo2-V3&sT2{xGaT}^Pky&YmuB33NNLl%n&6aWR>QaV+WwZg<0FN^lJnI!Nr7uXRd#zkfLBp%fa zfcrf@w@A@6&M+Rj+Rrd_74D^IFG-=BanseTpJBZ<_{2q^Xol3vrnvY-EOZJJ?GWlL zNoKQIPuAzrj5d-E27@+-*Xu?eZnH;)g5_4t$~*%HOwo{aC~GQiGYTzQHw+U<>39l? zK1r*Z6J*$g;#TaV{3| zMXQ5cAVSkIUnEF#wOpL5rh-9lEauB&IZfqfpDQ;*A zK9)2qPoc$ETT{#UYT}45FtwI(tTcs|acqG4CzeEFNV~OvwK{J?^J8x(2NxYCM<1wY z-VHR^E*HHLeH3pKTqJEhJGz^9+@hRuvGk6ZagG*T+k9#8J?*%nzdms>>2Nqk%5ytj zEj*PwklX4!((=`{uMV#1WWOA)|8ac_OzG>IM$<)sW^DcQ9Yb@!y*#z4>cTs3CRe$) zzi^P^KRv$cA6#<$=)Gl+W_^ei?Tj4CmY=Ms`Z+N2vH$X_PILX!{R2zC4{a|jcoQgX zE*d_+c<6pfb7I$-7n|naFVXjegkxpNp_!p#$=K+aaq}+TcQ9E&JnR{WEI&JZxt=c1 zmDQzgZ)uu)Zn)cZoSt6svcJgca|OE2JgD5*^kj8k0TwP>>b$wVWUc)lNW>br)3wdH E-)VMxr~m)} literal 0 HcmV?d00001 diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 71de88303..5a521c354 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -5,7 +5,7 @@ #include "../Log.h" SliderComponent::SliderComponent(Window* window, float min, float max, float increment, const std::string& suffix) : GuiComponent(window), - mMin(min), mMax(max), mIncrement(increment), mMoveRate(0), mRepeatWaitTimer(0), mSuffix(suffix) + mMin(min), mMax(max), mIncrement(increment), mMoveRate(0), mRepeatWaitTimer(0), mKnob(window), mSuffix(suffix) { assert((min - max) != 0); @@ -14,6 +14,9 @@ SliderComponent::SliderComponent(Window* window, float min, float max, float inc //calculate move scale mMoveScale = ((max - min) * 0.0007f) / increment; + mKnob.setOrigin(0.5f, 0.5f); + mKnob.setImage(":/slider_knob.png"); + setSize(196, 32); } @@ -74,26 +77,18 @@ void SliderComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); - float width = mSize.x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0); + // render suffix + if(mValueCache) + mFont->renderTextCache(mValueCache.get()); + + float width = mSize.x() - mKnob.getSize().x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0); //render line const int lineWidth = 2; - Renderer::drawRect(0, (int)mSize.y() / 2 - lineWidth / 2, (int)width, lineWidth, 0x000000CC); + Renderer::drawRect((int)mKnob.getSize().x() / 2, (int)mSize.y() / 2 - lineWidth / 2, (int)width, lineWidth, 0x777777FF); - //render left end - const int capWidth = (int)(mSize.x() * 0.03f); - Renderer::drawRect(0, 0, capWidth, (int)mSize.y(), 0x000000CC); - - //render right end - Renderer::drawRect((int)width - capWidth, 0, capWidth, (int)mSize.y(), 0x000000CC); - - //render our value - const int lineLength = (int)width - capWidth; - Renderer::drawRect((int)(((mValue + mMin) / mMax) * lineLength), 0, capWidth, (int)mSize.y(), 0x0000FFFF); - - // suffix - if(mValueCache) - mFont->renderTextCache(mValueCache.get()); + //render knob + mKnob.render(trans); GuiComponent::renderChildren(trans); } @@ -112,14 +107,14 @@ float SliderComponent::getValue() void SliderComponent::onSizeChanged() { if(!mSuffix.empty()) - { mFont = Font::get((int)(mSize.y() * 0.7f)); - onValueChanged(); - } + + onValueChanged(); } void SliderComponent::onValueChanged() { + // update suffix textcache if(mFont) { std::stringstream ss; @@ -138,9 +133,18 @@ void SliderComponent::onValueChanged() const std::string max = ss.str(); float w = mFont->sizeText(max).x(); - mValueCache = std::shared_ptr(mFont->buildTextCache(val, mSize.x() - w, 0, 0x000000FF)); + mValueCache = std::shared_ptr(mFont->buildTextCache(val, mSize.x() - w, 0, 0x777777FF)); mValueCache->metrics.size[0] = w; // fudge the width } + + // update knob position/size + if(mKnob.getTextureSize().y() > mSize.y()) // only downscale + mKnob.setResize(0, mSize.y()); + else + mKnob.setResize(0, 0); + + float lineLength = mSize.x() - mKnob.getSize().x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0); + mKnob.setPosition(((mValue + mMin) / mMax) * lineLength + mKnob.getSize().x()/2, mSize.y() / 2); } std::vector SliderComponent::getHelpPrompts() diff --git a/src/components/SliderComponent.h b/src/components/SliderComponent.h index a0ee53571..efdd81999 100644 --- a/src/components/SliderComponent.h +++ b/src/components/SliderComponent.h @@ -1,6 +1,7 @@ #pragma once #include "../GuiComponent.h" +#include "ImageComponent.h" class TextCache; class Font; @@ -32,6 +33,8 @@ private: float mMoveScale; int mRepeatWaitTimer; + ImageComponent mKnob; + std::string mSuffix; std::shared_ptr mFont; std::shared_ptr mValueCache; From 1c3135b726455b8593d5fd526ce1626ffdc8f286 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 7 Mar 2014 19:35:16 -0600 Subject: [PATCH 184/386] Use checkbox graphics for switches. Slight optimization to TextComponent (by guaranteeing always having a font). --- src/components/SwitchComponent.cpp | 31 +++++++++++++++++------------- src/components/SwitchComponent.h | 6 +++++- src/components/TextComponent.cpp | 28 ++++++++------------------- src/components/TextComponent.h | 6 +++--- 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index 84a829002..15e3a7221 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -3,12 +3,15 @@ #include "../resources/Font.h" #include "../Window.h" -SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mState(state) +SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { - //mSize = Vector2u((unsigned int)(Renderer::getScreenWidth() * 0.05), - // (unsigned int)(Renderer::getScreenHeight() * 0.05)); + mImage.setImage(":/checkbox_unchecked.png"); - mSize = Font::get(FONT_SIZE_MEDIUM)->sizeText("OFF"); + float height = (float)FONT_SIZE_MEDIUM; + if(mImage.getTextureSize().y() > height) + mImage.setResize(0, height); + + mSize = mImage.getSize(); } bool SwitchComponent::input(InputConfig* config, Input input) @@ -16,6 +19,7 @@ bool SwitchComponent::input(InputConfig* config, Input input) if(config->isMappedTo("a", input) && input.value) { mState = !mState; + onStateChanged(); return true; } @@ -24,19 +28,14 @@ bool SwitchComponent::input(InputConfig* config, Input input) void SwitchComponent::render(const Eigen::Affine3f& parentTrans) { - //Renderer::pushClipRect(getGlobalOffset(), getSize()); - Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::setMatrix(trans); + + mImage.render(trans); - Font::get(FONT_SIZE_MEDIUM)->drawText(mState ? "ON" : "OFF", Eigen::Vector2f(0, 0), mState ? 0x00FF00FF : 0xFF0000FF); - - //Renderer::popClipRect(); - - GuiComponent::renderChildren(trans); + renderChildren(trans); } -bool SwitchComponent::getState() +bool SwitchComponent::getState() const { return mState; } @@ -44,6 +43,12 @@ bool SwitchComponent::getState() void SwitchComponent::setState(bool state) { mState = state; + onStateChanged(); +} + +void SwitchComponent::onStateChanged() +{ + mImage.setImage(mState ? ":/checkbox_checked.png" : ":/checkbox_unchecked.png"); } std::vector SwitchComponent::getHelpPrompts() diff --git a/src/components/SwitchComponent.h b/src/components/SwitchComponent.h index d096df37b..14c994808 100644 --- a/src/components/SwitchComponent.h +++ b/src/components/SwitchComponent.h @@ -1,6 +1,7 @@ #pragma once #include "../GuiComponent.h" +#include "ImageComponent.h" // A very simple "on/off" switch. // Should hopefully be switched to use images instead of text in the future. @@ -12,11 +13,14 @@ public: bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; - bool getState(); + bool getState() const; void setState(bool state); virtual std::vector getHelpPrompts() override; private: + void onStateChanged(); + + ImageComponent mImage; bool mState; }; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 078c45584..df80b8392 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -5,16 +5,16 @@ #include "../ThemeData.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) + mFont(Font::get(FONT_SIZE_MEDIUM)), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) { } -TextComponent::TextComponent(Window* window, const std::string& text, std::shared_ptr font, unsigned int color, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), +TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) { + setFont(font); setColor(color); setText(text); - setFont(font); setPosition(pos); setSize(size); } @@ -25,7 +25,7 @@ void TextComponent::onSizeChanged() onTextChanged(); } -void TextComponent::setFont(std::shared_ptr font) +void TextComponent::setFont(const std::shared_ptr& font) { mFont = font; onTextChanged(); @@ -65,21 +65,11 @@ void TextComponent::setCentered(bool center) mCentered = center; } -std::shared_ptr TextComponent::getFont() const -{ - if(mFont) - return mFont; - else - return Font::get(FONT_SIZE_MEDIUM); -} - void TextComponent::render(const Eigen::Affine3f& parentTrans) { - std::shared_ptr font = getFont(); - Eigen::Affine3f trans = parentTrans * getTransform(); - if(font && !mText.empty()) + if(mTextCache) { if(mCentered) { @@ -93,7 +83,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); } - font->renderTextCache(mTextCache.get()); + mFont->renderTextCache(mTextCache.get()); } GuiComponent::renderChildren(trans); @@ -101,15 +91,13 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) void TextComponent::calculateExtent() { - std::shared_ptr font = getFont(); - if(mAutoCalcExtent.x()) { - mSize = font->sizeText(mText); + mSize = mFont->sizeText(mText); }else{ if(mAutoCalcExtent.y()) { - mSize[1] = font->sizeWrappedText(mText, getSize().x()).y(); + mSize[1] = mFont->sizeWrappedText(mText, getSize().x()).y(); } } } diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index f6dbfd0b7..a6355617a 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -15,9 +15,9 @@ class TextComponent : public GuiComponent { public: TextComponent(Window* window); - TextComponent(Window* window, const std::string& text, std::shared_ptr font, unsigned int color = 0x000000FF, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); + TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); - void setFont(std::shared_ptr font); + void setFont(const std::shared_ptr& font); void onSizeChanged() override; void setText(const std::string& text); void setColor(unsigned int color); @@ -31,7 +31,7 @@ public: unsigned char getOpacity() const override; void setOpacity(unsigned char opacity) override; - std::shared_ptr getFont() const; + inline std::shared_ptr getFont() const { return mFont; } virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; From 671dbc62c1d95f4fb4b13f362ff0d1d8acc30aee Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 8 Mar 2014 11:48:47 -0600 Subject: [PATCH 185/386] New button style. Started redoing GuiMsgBoxs to use the new style. --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 42 +-- data/Resources.h | 3 + data/converted/button_filled_png.cpp | 124 +++++++ data/converted/button_png.cpp | 517 +++++++-------------------- data/resources/button.png | Bin 3981 -> 1231 bytes data/resources/button_filled.png | Bin 0 -> 1168 bytes src/components/ButtonComponent.cpp | 12 +- src/components/ButtonComponent.h | 5 +- src/guis/GuiMetaDataEd.cpp | 6 +- src/guis/GuiMsgBoxOk.cpp | 1 + src/guis/GuiMsgBoxOk.h | 3 + src/guis/GuiMsgBoxYesNo.cpp | 44 ++- src/guis/GuiMsgBoxYesNo.h | 5 +- src/guis/GuiScraperStart.cpp | 5 +- 15 files changed, 323 insertions(+), 445 deletions(-) create mode 100644 data/converted/button_filled_png.cpp create mode 100644 data/resources/button_filled.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fb9192fa..7dc3fb13f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -294,6 +294,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_16_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_glow_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 7a5495b01..aadd7bb4c 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,10 +2,11 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 21; +const size_t res2hNrOfFiles = 22; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.png", arrow_png_size, arrow_png_data}, {":/button.png", button_png_size, button_png_data}, + {":/button_filled.png", button_filled_png_size, button_filled_png_data}, {":/checkbox_checked.png", checkbox_checked_png_size, checkbox_checked_png_data}, {":/checkbox_unchecked.png", checkbox_unchecked_png_size, checkbox_unchecked_png_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, @@ -30,25 +31,26 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { res2hMapType::value_type mapTemp[] = { std::make_pair(":/arrow.png", res2hFiles[0]), std::make_pair(":/button.png", res2hFiles[1]), - std::make_pair(":/checkbox_checked.png", res2hFiles[2]), - std::make_pair(":/checkbox_unchecked.png", res2hFiles[3]), - std::make_pair(":/ES_logo_16.png", res2hFiles[4]), - std::make_pair(":/ES_logo_32.png", res2hFiles[5]), - std::make_pair(":/frame.png", res2hFiles[6]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[7]), - std::make_pair(":/scroll_gradient.png", res2hFiles[8]), - std::make_pair(":/slider_knob.png", res2hFiles[9]), - std::make_pair(":/sq_bracket.png", res2hFiles[10]), - std::make_pair(":/star_filled.png", res2hFiles[11]), - std::make_pair(":/star_unfilled.png", res2hFiles[12]), - std::make_pair(":/textbox.png", res2hFiles[13]), - std::make_pair(":/textbox_glow.png", res2hFiles[14]), - std::make_pair(":/help/a.png", res2hFiles[15]), - std::make_pair(":/help/b.png", res2hFiles[16]), - std::make_pair(":/help/dpad.png", res2hFiles[17]), - std::make_pair(":/help/left_right.png", res2hFiles[18]), - std::make_pair(":/help/menu.png", res2hFiles[19]), - std::make_pair(":/help/up_down.png", res2hFiles[20]) + std::make_pair(":/button_filled.png", res2hFiles[2]), + std::make_pair(":/checkbox_checked.png", res2hFiles[3]), + std::make_pair(":/checkbox_unchecked.png", res2hFiles[4]), + std::make_pair(":/ES_logo_16.png", res2hFiles[5]), + std::make_pair(":/ES_logo_32.png", res2hFiles[6]), + std::make_pair(":/frame.png", res2hFiles[7]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[8]), + std::make_pair(":/scroll_gradient.png", res2hFiles[9]), + std::make_pair(":/slider_knob.png", res2hFiles[10]), + std::make_pair(":/sq_bracket.png", res2hFiles[11]), + std::make_pair(":/star_filled.png", res2hFiles[12]), + std::make_pair(":/star_unfilled.png", res2hFiles[13]), + std::make_pair(":/textbox.png", res2hFiles[14]), + std::make_pair(":/textbox_glow.png", res2hFiles[15]), + std::make_pair(":/help/a.png", res2hFiles[16]), + std::make_pair(":/help/b.png", res2hFiles[17]), + std::make_pair(":/help/dpad.png", res2hFiles[18]), + std::make_pair(":/help/left_right.png", res2hFiles[19]), + std::make_pair(":/help/menu.png", res2hFiles[20]), + std::make_pair(":/help/up_down.png", res2hFiles[21]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 4aac89195..2ca401471 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -11,6 +11,9 @@ extern const unsigned char arrow_png_data[]; extern const size_t button_png_size; extern const unsigned char button_png_data[]; +extern const size_t button_filled_png_size; +extern const unsigned char button_filled_png_data[]; + extern const size_t checkbox_checked_png_size; extern const unsigned char checkbox_checked_png_data[]; diff --git a/data/converted/button_filled_png.cpp b/data/converted/button_filled_png.cpp new file mode 100644 index 000000000..755754b1b --- /dev/null +++ b/data/converted/button_filled_png.cpp @@ -0,0 +1,124 @@ +//this file was auto-generated from "button_filled.png" by res2h + +#include "../Resources.h" + +const size_t button_filled_png_size = 1168; +const unsigned char button_filled_png_data[1168] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, + 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x44,0x44, + 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x44,0x43, + 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, + 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, + 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0xfb,0x75,0xe4,0x6d,0x00,0x00,0x00,0xbe,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0xd3,0xc1,0x09,0xc2,0x40, + 0x14,0x45,0xd1,0x71,0x10,0x6c,0x45,0x74,0x61,0x0f, + 0xb6,0xe0,0x22,0x15,0x24,0x08,0x29,0x60,0x2a,0x11, + 0x24,0x76,0x20,0xd8,0x8c,0x8b,0x60,0x2b,0x13,0x30, + 0xf8,0x3e,0x4c,0x36,0xae,0x5c,0xce,0xc7,0xfb,0xe1, + 0xee,0xdf,0x19,0x98,0x55,0x4a,0x29,0xe8,0xa2,0x3a, + 0xab,0x4e,0x6d,0xd5,0x26,0xd4,0x79,0x59,0xbd,0xd4, + 0xa0,0xae,0x6a,0x5e,0x97,0xf1,0x77,0x75,0x0a,0xf5, + 0x9f,0x3d,0xec,0x41,0x5d,0xd4,0x51,0x35,0xb1,0xbc, + 0xba,0x87,0xf1,0xdf,0x67,0x9b,0x5b,0x03,0xb4,0xc1, + 0xef,0x75,0x06,0xd8,0x3b,0x06,0xec,0x62,0xc5,0x1f, + 0xf6,0xa7,0x3f,0x11,0x83,0xf3,0x03,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x01,0xd9,0xf1, + 0xfe,0x6c,0x80,0xd1,0x31,0x60,0x34,0xc0,0xe0,0x18, + 0x30,0x2c,0x80,0x87,0xc3,0xf1,0xb6,0xf9,0x66,0x80, + 0x59,0x35,0xaa,0x57,0x4f,0x35,0x55,0x3c,0x7a,0x2a, + 0x1b,0xfb,0xb2,0xf9,0xfd,0x11,0x60,0x00,0xb7,0x75, + 0x1a,0x41,0x6b,0xc2,0x11,0x6c,0x00,0x00,0x00,0x00, + 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/button_png.cpp b/data/converted/button_png.cpp index f120fa94c..de4959dd2 100644 --- a/data/converted/button_png.cpp +++ b/data/converted/button_png.cpp @@ -2,405 +2,130 @@ #include "../Resources.h" -const size_t button_png_size = 3981; -const unsigned char button_png_data[3981] = { +const size_t button_png_size = 1231; +const unsigned char button_png_data[1231] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x04,0xa8,0x49, - 0x44,0x41,0x54,0x78,0xda,0xcc,0x5a,0xbb,0x72,0xe3, - 0x48,0x0c,0xec,0x56,0xf9,0x0b,0xac,0x2a,0xff,0x98, - 0xd3,0xdb,0x74,0x2f,0xb8,0x4d,0xf6,0x4b,0x9c,0xec, - 0x25,0x4e,0x1d,0xfb,0xc3,0x4e,0x55,0xd2,0x07,0xac, - 0x48,0xf6,0x06,0x1c,0xcc,0x60,0x1e,0xa4,0x48,0x8a, - 0xf6,0x99,0x81,0x6d,0x49,0x1c,0x0c,0x80,0x6e,0x34, - 0x30,0x94,0x89,0xe9,0x4b,0xf8,0x5a,0x17,0x27,0xdf, - 0x94,0x92,0xaf,0x24,0xe3,0x8b,0xcb,0xe5,0xf2,0x25, - 0x3c,0x7f,0x7c,0x7c,0x4c,0x59,0x95,0xe8,0x7c,0x4d, - 0x01,0x4c,0x39,0xfe,0xf3,0xe7,0xcf,0x80,0x85,0x00, - 0x10,0xa2,0x40,0x10,0x10,0x20,0x02,0xb4,0xdf,0x19, - 0x64,0xe3,0xbd,0x8c,0xb6,0x43,0xae,0x54,0xe6,0x32, - 0x2d,0x96,0x00,0xd2,0x19,0x0d,0x37,0xbd,0xbc,0xbc, - 0x4c,0x06,0x52,0x05,0xe0,0x1d,0xff,0xf1,0xcf,0x0f, - 0x08,0x02,0xc8,0xd1,0x49,0xfb,0xdb,0x36,0x85,0xed, - 0xa5,0xc4,0x37,0x8e,0x6f,0x32,0x44,0x63,0xef,0x51, - 0x82,0xc8,0x70,0xef,0xe8,0xe0,0x98,0x48,0x65,0x54, - 0x10,0x19,0x93,0x45,0xfb,0x49,0x80,0x10,0x7e,0xfd, - 0xfa,0x37,0x0b,0x24,0x0b,0xc0,0x2c,0x5d,0x2e,0x17, - 0x7c,0xff,0xfb,0x7b,0x83,0xfd,0xc5,0x66,0x0c,0xc6, - 0xa5,0x79,0xc6,0x6a,0x8e,0xca,0x09,0x0e,0x8e,0xe9, - 0x69,0xac,0x67,0x55,0x8e,0xaf,0xaf,0xaf,0x1e,0x09, - 0x3e,0x94,0xb4,0xb9,0xfe,0xfe,0x9d,0xd7,0x8b,0xda, - 0x25,0xa4,0xa9,0xaa,0x9a,0x91,0x03,0xa3,0x5a,0xb9, - 0x78,0x99,0xad,0x40,0xe1,0xe0,0xab,0x05,0x11,0xf3, - 0x74,0x3e,0x9f,0xf1,0xd7,0xb7,0x6f,0x55,0x8e,0x18, - 0x7e,0xc8,0xa8,0x51,0x6c,0x28,0x67,0x84,0xd9,0x8b, - 0xf4,0x3b,0x77,0xd0,0x1c,0x51,0xa2,0x5b,0x51,0x3f, - 0x46,0x8c,0xb8,0xce,0x8c,0x87,0x0c,0xbc,0xbd,0xbd, - 0xe1,0x78,0x3c,0x02,0x00,0x1e,0xcc,0x79,0x00,0xe8, - 0xae,0xd7,0x68,0x44,0x32,0xfe,0x95,0x86,0x02,0x73, - 0x18,0x78,0x1a,0x60,0x66,0x4c,0x87,0x8c,0x63,0x79, - 0x44,0x1a,0xb3,0xc7,0x2a,0x4a,0xef,0x5f,0xb2,0x49, - 0xca,0xdd,0xc1,0xe8,0x93,0x25,0xe2,0x7c,0x3e,0xe3, - 0x78,0x3c,0x8e,0x9f,0x9c,0xcf,0x67,0x3c,0x3f,0x3f, - 0x57,0x91,0xb6,0x58,0x94,0x80,0xa4,0x17,0x91,0xe8, - 0x78,0x52,0x93,0x50,0x94,0x66,0x32,0xd4,0xce,0x28, - 0x07,0x8c,0xb1,0xa9,0x2d,0x4a,0x15,0xd4,0xd9,0xbe, - 0x00,0xde,0xdf,0xdf,0x71,0x3c,0x1e,0x11,0x6b,0xe0, - 0x7a,0xbd,0x36,0x21,0x57,0x56,0x8f,0x09,0xde,0x26, - 0x7f,0xeb,0xd8,0x6b,0xf4,0x4a,0xbe,0x37,0x0a,0x40, - 0x72,0x88,0x7a,0xd7,0x1b,0xf7,0x66,0x01,0x30,0x93, - 0x43,0xe4,0xaa,0xa3,0x05,0x02,0xb3,0xba,0xb5,0x86, - 0x5a,0xc8,0x0c,0xb2,0x81,0xf9,0xf4,0xf5,0x60,0x7d, - 0xa0,0xeb,0xae,0x49,0x1a,0xe9,0x98,0x17,0x3c,0x27, - 0x39,0xfe,0x1d,0x6c,0x5a,0x73,0x8a,0xc8,0x04,0x5d, - 0xb7,0x16,0x26,0x2a,0x52,0x27,0x66,0xc1,0x9a,0x43, - 0x2a,0x98,0x10,0x44,0x64,0xb9,0x6b,0x92,0xae,0xe0, - 0xac,0x16,0xe5,0x48,0x1c,0xfc,0x72,0x08,0x74,0x6d, - 0xee,0xcc,0x88,0xdc,0xac,0xfc,0x95,0xd2,0xd9,0x58, - 0x25,0x4f,0xc9,0x8c,0x62,0x13,0x96,0xe7,0x28,0xd4, - 0x75,0xd7,0xa8,0x3c,0x63,0x46,0x43,0x1f,0x09,0xad, - 0xdd,0x06,0x0d,0x65,0xd0,0x5b,0x91,0x2a,0xf4,0xce, - 0xb2,0x5d,0x29,0xeb,0xa6,0x10,0x93,0xd2,0x80,0x6e, - 0x9d,0x52,0xe3,0xb2,0xbd,0xc2,0xeb,0xb8,0x8f,0xe4, - 0x28,0xce,0x56,0x0d,0x74,0x70,0x58,0x39,0x24,0xfc, - 0x06,0x73,0x9d,0x36,0x2c,0xc8,0x79,0x93,0xd9,0xa3, - 0x90,0x7a,0x40,0xe9,0x54,0xa3,0xf4,0xf3,0x0e,0xdd, - 0xee,0xd8,0x0e,0x81,0xee,0x8e,0x29,0x57,0x3b,0x96, - 0xf6,0xd2,0xfd,0x26,0x03,0x98,0x72,0x64,0xc6,0x41, - 0xce,0xcc,0x45,0x99,0xa8,0xb4,0xef,0x9b,0x5e,0x7e, - 0x13,0xf6,0xa4,0x42,0x7d,0xdf,0x87,0xf6,0x7e,0x63, - 0x0e,0x2b,0x1b,0x2d,0x1c,0x2d,0xd2,0x0c,0x59,0xcb, - 0xb1,0x13,0x07,0xc2,0x2b,0x56,0xc9,0x44,0xab,0x8d, - 0x96,0x1f,0x33,0x2a,0xd4,0x75,0x5d,0x1c,0xfb,0x19, - 0x78,0x1b,0xcb,0x8d,0xcc,0x14,0x23,0xc9,0x9d,0x20, - 0xe7,0x2d,0xd9,0x18,0xbd,0x14,0x0a,0x96,0x48,0x09, - 0xa2,0x0f,0xd8,0x07,0xe9,0x86,0x87,0x10,0x84,0x8d, - 0xf3,0x60,0x94,0x84,0x4c,0x30,0x76,0xa8,0x01,0xac, - 0xa3,0xdb,0xce,0x57,0x0c,0xa0,0xef,0xfb,0x5a,0x67, - 0xe3,0xd9,0x45,0xc5,0x4c,0xc3,0x4c,0xe7,0x11,0xe6, - 0x1f,0xb9,0xd1,0x2b,0x22,0xc8,0x7c,0xc6,0x43,0x36, - 0x17,0xd5,0xba,0x2f,0x29,0x1b,0xe0,0xac,0xe9,0x65, - 0x33,0x62,0x33,0x80,0xae,0x8f,0xbc,0x1c,0x37,0x65, - 0x2a,0x2c,0xe6,0x43,0x0a,0xc5,0x74,0x9c,0x8c,0x07, - 0x1c,0xeb,0x1d,0xac,0x68,0x48,0xa4,0x82,0xb1,0xde, - 0x9b,0x9a,0x3a,0xb3,0xa9,0x95,0x91,0x72,0x81,0x64, - 0x4a,0xb4,0x8d,0x27,0xc2,0x26,0x85,0x86,0xbe,0x3e, - 0xf2,0xd9,0x91,0x91,0x04,0x90,0x4d,0x19,0x2e,0x1e, - 0xb7,0x26,0xcf,0x9d,0x1b,0xfe,0x04,0x15,0xa9,0xf3, - 0x87,0x41,0xb9,0xf3,0x73,0x1c,0x5b,0xc2,0x78,0xa2, - 0x02,0x8c,0x71,0x44,0x69,0x04,0x30,0xf4,0x7d,0xf3, - 0x00,0x51,0x8f,0x02,0x1e,0xf6,0x1c,0xde,0xf6,0x3d, - 0xc5,0xa8,0x20,0xd4,0x07,0xa3,0x7a,0x5e,0xcf,0xc5, - 0x2b,0xa8,0x8b,0xdc,0x8c,0x56,0x53,0x68,0xe8,0x5d, - 0x94,0xf1,0xd4,0x02,0x0c,0xb9,0x6e,0x32,0xd9,0x8b, - 0xfa,0x4d,0x02,0xc3,0x90,0xba,0x25,0x98,0x86,0xbc, - 0x74,0xa0,0xf1,0x3e,0xd2,0xa9,0xd7,0x54,0xd7,0x45, - 0x7a,0x87,0x46,0xa5,0x61,0x4c,0x36,0x1b,0x7d,0x60, - 0xe8,0x87,0x86,0x92,0x0c,0x9f,0xff,0xe8,0x4a,0xcb, - 0xf6,0x35,0xba,0x1d,0x16,0x3f,0x98,0xe3,0x1a,0x2f, - 0xb8,0x61,0x9d,0x93,0xb4,0x15,0xcf,0xe7,0x0e,0xcb, - 0x8d,0xcf,0x78,0x54,0x1e,0xb1,0xa8,0x9d,0x1e,0x50, - 0xf2,0x66,0x5e,0x0f,0xab,0x0c,0x70,0xc2,0x23,0x6d, - 0x7d,0xaa,0xca,0x1b,0xb6,0x75,0x2f,0x02,0x45,0x23, - 0xd0,0xf6,0xc4,0xdd,0xa4,0xa9,0x16,0x2e,0xd6,0x26, - 0x0a,0xad,0xe4,0x81,0x78,0x07,0x6d,0xd6,0xed,0x75, - 0xb8,0x9f,0x9f,0xdc,0x79,0x0e,0xe2,0x67,0x05,0xa0, - 0x7b,0x0b,0xe0,0x7f,0x40,0x80,0xf8,0xe0,0x8b,0xab, - 0x3f,0x3b,0x2c,0xa3,0xc5,0x54,0x72,0x96,0x6e,0xc8, - 0x1d,0xb2,0xaf,0x25,0x01,0xb4,0x68,0xc1,0x1d,0x36, - 0xd4,0x87,0x21,0x79,0xb8,0x0d,0x95,0xf6,0xe7,0x98, - 0xb6,0xda,0xe3,0x92,0x00,0x74,0x07,0x2d,0xb4,0x3e, - 0xc5,0x9c,0xbb,0xff,0xb6,0x40,0x1c,0xd6,0x25,0x53, - 0x77,0xf1,0x35,0xce,0x49,0x2c,0x9b,0xa3,0x36,0xa3, - 0xfb,0xb0,0x57,0xef,0x5a,0xcf,0x1d,0x6d,0x58,0x5b, - 0x7f,0xe5,0x14,0x11,0x38,0x9d,0x4e,0x9f,0xa7,0x9f, - 0xe2,0x46,0xdb,0xaa,0x02,0x3f,0x00,0xc0,0xd3,0xd3, - 0xd3,0xbe,0xa3,0xc4,0x94,0x53,0xdc,0x82,0x44,0x6d, - 0xcb,0x27,0xfb,0xe0,0xef,0xd8,0x86,0xc2,0x8a,0x62, - 0xd6,0x56,0xda,0xb1,0x72,0xde,0x92,0x1e,0x29,0x94, - 0x50,0xe0,0x76,0xfa,0x70,0x0b,0x72,0x5c,0x59,0x3b, - 0x19,0x63,0x68,0x47,0x4a,0xda,0x37,0xf5,0xa7,0xd3, - 0x7f,0x68,0xd3,0x6a,0xea,0xd9,0xa7,0x8a,0xfe,0x37, - 0xf7,0x0c,0xb5,0xf5,0xd1,0x32,0x58,0x4a,0x76,0x34, - 0xbf,0xa9,0x9f,0x82,0x69,0xd3,0x93,0xb7,0xc9,0xaf, - 0x8d,0xd6,0x3f,0xd5,0x6b,0xf9,0x53,0x05,0x90,0x9e, - 0xad,0x1a,0x12,0x27,0x7c,0xa5,0xcb,0x9c,0x6f,0xfe, - 0xb3,0xc7,0x67,0x75,0x81,0x8f,0x18,0x57,0xff,0x0c, - 0x00,0xd6,0x5e,0xf1,0xee,0x67,0xbc,0x3b,0xd3,0x00, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, + 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x45,0x31, + 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x45,0x30, + 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x37,0x36,0x30,0x31,0x37,0x39,0x35,0x39, + 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, + 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0x3a,0x2f,0x3e,0xac,0x00,0x00,0x00,0xfd,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9a,0x41,0x0e,0xc1,0x50, + 0x14,0x45,0x7f,0x1b,0xa1,0x4b,0x11,0x06,0xf6,0x20, + 0x66,0x62,0x80,0x88,0x15,0x68,0x44,0x17,0xd0,0x95, + 0x08,0x6a,0x07,0xc2,0x84,0x9d,0x18,0x88,0x4d,0x98, + 0x6b,0x13,0x8d,0xfb,0xe2,0x4a,0x2c,0xe1,0xff,0xb8, + 0x2f,0x39,0x69,0x7f,0x4c,0xce,0xe9,0x6b,0x67,0xa2, + 0x3c,0xcf,0x1d,0x26,0x06,0x4b,0x90,0x82,0x36,0x68, + 0x39,0x3f,0xa7,0x04,0x77,0x50,0x80,0x2d,0xa8,0x1b, + 0x94,0x3f,0x80,0xa9,0xf3,0x7f,0xec,0xc1,0xf6,0xc0, + 0x1a,0xf4,0xc1,0x3c,0xe6,0x53,0x37,0xf9,0x07,0x98, + 0x81,0x04,0x44,0x9e,0x92,0xd0,0xf1,0x41,0xe7,0x85, + 0x6d,0x60,0xc1,0xba,0x15,0x38,0x7a,0xbe,0x81,0x92, + 0x8e,0x11,0xdf,0x9a,0xd4,0x36,0xd0,0xe5,0x8f,0x67, + 0x17,0xce,0x5c,0x78,0xed,0xc4,0x3f,0x1f,0xec,0x33, + 0xa0,0x80,0xaf,0x6b,0x2b,0x76,0x81,0x8f,0x02,0x14, + 0xa0,0x00,0x05,0x28,0x40,0x01,0x0a,0x50,0x80,0x02, + 0x14,0xa0,0x00,0x05,0x28,0x40,0x01,0x0a,0x50,0x80, + 0x02,0x14,0xa0,0x00,0x05,0x28,0x40,0x01,0x0a,0x50, + 0x80,0x02,0x14,0xf0,0x8f,0x01,0x25,0xef,0x93,0x80, + 0xbc,0xbf,0xae,0xa5,0x05,0xdc,0x78,0x18,0x05,0x14, + 0x30,0xe4,0xf5,0x66,0x01,0x05,0x0f,0x1b,0x30,0x01, + 0x4d,0x8f,0xc5,0xcd,0x6d,0x0c,0x76,0x3c,0x17,0x0d, + 0x06,0x0c,0xdc,0xe7,0xbf,0x07,0xa7,0x80,0xb6,0x60, + 0xae,0x7b,0xdb,0x40,0x0d,0xe6,0x20,0x03,0x57,0x50, + 0x79,0x2c,0x5d,0xd1,0x31,0xa3,0xf3,0xeb,0x2d,0xc0, + 0x00,0x1c,0x2e,0x26,0xd8,0xd1,0x85,0xb1,0xfa,0x00, 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, 0x82 }; diff --git a/data/resources/button.png b/data/resources/button.png index 93ce17ccaf621cb78881640ef1caebfdf8539e71..7ac2297f9308a4a4d1a14687d244c0a7d3310c16 100644 GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%o&*>5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8KW+g=7RhMR$W{Yl!|Z$R@KEJl?AE#L8-<0 zrA5iW_()TRX$FQJev3c~fv&OgFUkZ)N@9*nesXDUYF>$_i>(q+MlU5Z#md~oz|h>% z)Y8D!$iU3P(9pub!r0l|)!5M0(bUo0)EH(4HocY>E*1usu7;K_7UqVAuEvg*hAvJn zZZ0MUmX=1Yu5i7cdBr7(dC93TdozLdLiHNp)obNkl$uzQUlfv`p94z)0U7xv`NbLe z1q#l=W(pdZIEG{rNBjj_4-V|~|O&{nO zeNgg1N-i)VU>XE5;fWu}foGr8JYb$F0%i^?eY-WljP=*k#WAGf)|*+5dL-x=A$y}uuM={)?uL*Fv9-sjxQ?DR!8=VjH{ zyeBl7WmwuTXDJV8&|M)t#lB(X=lVAXza5bJa?s{ku=!8+8I3G1^Cn&R==i)fH{swe zQH!d5jg$HW@6WnocHwD%y7;-6inmAX<=+@DXjq@EUDnvoB(i{kRl|XiE1&@v^Fu$Q z>ifwJd-kte%6g|lf>p%e$=5VSR(@#%M&JIUXLEVVY{Yrlc(`ffr=PUS3j3^P6KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000E2Nkl`54D43<3#=;tnA6*IFSt$iOPuT_ zP96KhPF2zetVs3-9L!)Iq)3YPnSpId91MVNG%%Ej=}Y)p7boA8lCLD=i_7KmB|Lw8 zd`wxD=zL89OgaAZ=g)wJ01%=;5D*{&wBH$I(isgmy}Z0k22us! z9slvq4+sLt(MkK;Hihk_#5ay_GDKtVQG&>D@95x|NM%$I8Iwi(Nq`W3{rWcxBn!YS zT`m`V|NDD`{l#Vs#-(}2YL3bY4vy(*tY=k@udlBj2|kpxx&Hp0*NfUEq^YW!kprVz zxpKSqqW&Wwi)yuH2Q zcsv3C9?W?F=&sjjL^A%Bh5~aKcp6}4OoxnPc|;ns$0|ziU$RNc-NERSCE|QO<9Ixd zpPbKUJU>5Ik+xWrfTS0Z=y+0-P?Tme)XpdejIpULN)^=Ez5w3e-*G%15o_Rjy*43N zR*wnZCV%VLYxGLKHwr*_htbwlSAaHqXh!9y0wN{$PBW9`SkT*eW2^ENgC;x z7d$69{vB*ubBf3WUAGn{DpDtA!J0!Vm=Hu{xoeWH;H(zqNF4lf2y|`k%!u5q{FTz# zSS3%%jA9d(=P1;5*Qh*WMnfM7t=$FT`B9P5R=k?ZkX8R>?%Gjg}uXD%5pd9Qzq~8_SK% z6eG!m96UNTh~TCeNK4{sa}N^M^sX^K%?q!g!(r zjB!M11Tge{^8itg0v`4p-u6Aks36n_qk3M?#Ve?b+>BOJXy{#(@zeqgxo$Gqi~3Ch z!;rcqn1;M`pz%J^sn=B3MS6!urD04q8+~BthlY|2pa1Ae%l0+89Tq>B;~FoxVV#q- z70>4m%Z<-?R35RYogPr~W?m1g3~<6DZGEcB8@6>X0!1Ux_Qc(!sTMBQCJL?Ofp`aP z*6nq;pP$@$4&rA8pnD78e?Wlv;ESt2J1nEcRC1PX$Q`n;B>}W(!5uc#haq{m4VCui zn6}#Ek^poEEwnzxoV)+FKpfU3Q+M$-&Pgnrqc)@auvhO|&mC=8TYu#g5jdSrpQoSV zM%$_aKLEhf)6>4A#FSIqf<$f0C;Q;<*oMN2V%ApLv2xy$9x0Si;CA|O3vygpI~ikW zM@rf^^{3N+Xwz!y*{6#BH}?#+_0cj|N_I5Ash@&r)04N!uZ`9})ob}v1(2St8WJab nrOTXe{xxQ0?Ci|9?&QvoGvB(a zC#i!(-3vMtU4jCkh=Tq#BDw^UfpyWKLkCGDibRUOSzYU31`RXc&pYq)y#MFBJC9bB zSC?ZLRuO3zVrZwFudEcUecM+i&{hS-e%NEAU{10C7E+8Pz$2P82x34|Mu%U4CJZY{ ztMPu=AMM~}Lvu@xjytcJ2#sM)EqPOthXBNrU{KYA#L~m31g7^S36cWNnHI(N8qG5MnA+l`jWb6-jdQ~j4^p=R5= z<)4}H89L#6wy=+C9G`f;d~YQ+KET}U>tcGF#v1mo-dXuknZWL6t3yN6l^KUAB6bRs It%O?EnA( literal 0 HcmV?d00001 diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index f5e43e4ba..e343ce815 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -5,14 +5,14 @@ ButtonComponent::ButtonComponent(Window* window) : GuiComponent(window), mBox(window, ":/button.png"), mFocused(false), - mTextColorFocused(0x000000FF), mTextColorUnfocused(0x333333FF), mTextPulseTime(0) + mTextColorFocused(0xFFFFFFFF), mTextColorUnfocused(0x777777FF) { setSize(64, 48); } void ButtonComponent::onSizeChanged() { - mBox.setSize(mSize); + mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); } void ButtonComponent::setPressedFunc(std::function f) @@ -32,13 +32,11 @@ bool ButtonComponent::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -void ButtonComponent::setText(const std::string& text, const std::string& helpText, unsigned int focusedColor, unsigned int unfocusedColor) +void ButtonComponent::setText(const std::string& text, const std::string& helpText) { mText = text; mHelpText = helpText; - mTextColorFocused = focusedColor; - mTextColorUnfocused = unfocusedColor; - + std::shared_ptr f = getFont(); mTextCache = std::unique_ptr(f->buildTextCache(mText, 0, 0, getCurTextColor())); @@ -50,11 +48,13 @@ void ButtonComponent::setText(const std::string& text, const std::string& helpTe void ButtonComponent::onFocusGained() { mFocused = true; + mBox.setImagePath(":/button_filled.png"); } void ButtonComponent::onFocusLost() { mFocused = false; + mBox.setImagePath(":/button.png"); } void ButtonComponent::render(const Eigen::Affine3f& parentTrans) diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index 7db63fb22..f048d800c 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -15,7 +15,7 @@ public: bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; - void setText(const std::string& text, const std::string& helpText, unsigned int focusedTextColor, unsigned int unfocusedTextColor = 0x555555FF); + void setText(const std::string& text, const std::string& helpText); void onSizeChanged() override; void onFocusGained() override; @@ -30,8 +30,7 @@ private: bool mFocused; unsigned int mTextColorFocused; unsigned int mTextColorUnfocused; - int mTextPulseTime; - + unsigned int getCurTextColor() const; std::string mText; diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 272c97320..87763b513 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -29,7 +29,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mHeader.setText(header); //initialize buttons - mDeleteButton.setText("DELETE", "delete file", mDeleteFunc ? 0xFF0000FF : 0x555555FF); + mDeleteButton.setText("DELETE", "delete file"); if(mDeleteFunc) { std::function deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; @@ -37,10 +37,10 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mDeleteButton.setPressedFunc(pressedFunc); } - mFetchButton.setText("FETCH", "download metadata", 0x00FF00FF); + mFetchButton.setText("FETCH", "download metadata"); mFetchButton.setPressedFunc(std::bind(&GuiMetaDataEd::fetch, this)); - mSaveButton.setText("SAVE", "save", 0x0000FFFF); + mSaveButton.setText("SAVE", "save"); mSaveButton.setPressedFunc([&] { save(); delete this; }); //initialize metadata list diff --git a/src/guis/GuiMsgBoxOk.cpp b/src/guis/GuiMsgBoxOk.cpp index 4cb08bca2..5f99238f1 100644 --- a/src/guis/GuiMsgBoxOk.cpp +++ b/src/guis/GuiMsgBoxOk.cpp @@ -6,6 +6,7 @@ GuiMsgBoxOk::GuiMsgBoxOk(Window* window, const std::string& text, std::function callback) : GuiComponent(window), mCallback(callback), + mBackground(window), mText(window), mOkText(window) { diff --git a/src/guis/GuiMsgBoxOk.h b/src/guis/GuiMsgBoxOk.h index db6ab28bd..6df26b7e0 100644 --- a/src/guis/GuiMsgBoxOk.h +++ b/src/guis/GuiMsgBoxOk.h @@ -2,6 +2,7 @@ #include "../GuiComponent.h" #include "../components/TextComponent.h" +#include "../components/NinePatchComponent.h" #include //A simple popup message box with callbacks for when the user dismisses it. @@ -17,6 +18,8 @@ public: private: std::function mCallback; + NinePatchComponent mBackground; + TextComponent mText; TextComponent mOkText; }; diff --git a/src/guis/GuiMsgBoxYesNo.cpp b/src/guis/GuiMsgBoxYesNo.cpp index 84ba96617..60bbba0a0 100644 --- a/src/guis/GuiMsgBoxYesNo.cpp +++ b/src/guis/GuiMsgBoxYesNo.cpp @@ -1,28 +1,40 @@ #include "GuiMsgBoxYesNo.h" #include "../Renderer.h" -#define MSG_WIDTH 0.8f -#define MSG_PADDING ((1 - MSG_WIDTH) / 2) - GuiMsgBoxYesNo::GuiMsgBoxYesNo(Window* window, const std::string& text, std::function yesCallback, std::function noCallback) : GuiComponent(window), mYesCallback(yesCallback), mNoCallback(noCallback), + mBackground(window), mText(window), mInputText(window) { + const float paddingX = 32; + const float paddingY = 16; + + const float maxWidth = Renderer::getScreenWidth() * 0.7f; + + float width = mText.getFont()->sizeText(text).x() + paddingX; + if(width > maxWidth) + width = maxWidth; + mText.setCentered(true); - mText.setColor(0x00BB00FF); - mText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); + mText.setColor(0x777777FF); + mText.setPosition(paddingX / 2, paddingY / 2); + mText.setSize(width - paddingX, 0); mText.setText(text); mInputText.setCentered(true); mInputText.setColor(0x0044BBFF); mInputText.setFont(Font::get(FONT_SIZE_SMALL)); - mInputText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); + mInputText.setPosition(paddingX / 2, mText.getPosition().y() + mText.getSize().y()); + mInputText.setSize(width - paddingX, 0); mInputText.setText("[A - yes] [B - no]"); - mText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, (Renderer::getScreenHeight() - mText.getSize().y() - mInputText.getSize().y()) / 2); - mInputText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, mText.getPosition().y() + mText.getSize().y()); + setSize(width, mInputText.getPosition().y() + mInputText.getSize().y() + paddingY/2); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); + + mBackground.setImagePath(":/frame.png"); + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); } bool GuiMsgBoxYesNo::input(InputConfig* config, Input input) @@ -51,9 +63,15 @@ bool GuiMsgBoxYesNo::input(InputConfig* config, Input input) void GuiMsgBoxYesNo::render(const Eigen::Affine3f& parentTrans) { - float height = mText.getSize().y() + mInputText.getSize().y(); - Renderer::setMatrix(parentTrans); - Renderer::drawRect(0, (int)((Renderer::getScreenHeight() - height) / 2), Renderer::getScreenWidth(), (int)height, 0x111111FF); - mText.render(parentTrans); - mInputText.render(parentTrans); + Eigen::Affine3f trans = parentTrans * getTransform(); + + mBackground.render(trans); + + Renderer::setMatrix(trans); + Renderer::drawRect(0, (int)(mText.getPosition().y() + mText.getSize().y()), (int)mSize.x(), 1, 0xC6C7C6FF); + + mText.render(trans); + mInputText.render(trans); + + renderChildren(trans); } diff --git a/src/guis/GuiMsgBoxYesNo.h b/src/guis/GuiMsgBoxYesNo.h index 86d725456..e2e118895 100644 --- a/src/guis/GuiMsgBoxYesNo.h +++ b/src/guis/GuiMsgBoxYesNo.h @@ -2,6 +2,7 @@ #include "../GuiComponent.h" #include "../components/TextComponent.h" +#include "../components/NinePatchComponent.h" #include //A simple "yes or no" popup box with callbacks for yes or no. @@ -12,11 +13,13 @@ public: GuiMsgBoxYesNo(Window* window, const std::string& msg, std::function yesCallback = nullptr, std::function noCallback = nullptr); bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Eigen::Affine3f& trans) override; private: std::function mYesCallback, mNoCallback; + NinePatchComponent mBackground; + TextComponent mText; TextComponent mInputText; }; diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 99b4347ad..0003dd062 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -42,14 +42,13 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentGrid::AlignRight); mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentGrid::AlignLeft); - mStartButton.setText("GO GO GO GO", "begin", 0x00FF00FF); + mStartButton.setText("GO GO GO GO", "begin"); mStartButton.setPressedFunc(std::bind(&GuiScraperStart::pressedStart, this)); mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentGrid::AlignCenter); mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); - mBox.setEdgeColor(0x333333FF); - mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(8, 8)); + mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(-32, -32)); } void GuiScraperStart::pressedStart() From b2165dd17b09e79115540a3200a1f708bff6e723 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 8 Mar 2014 12:19:21 -0600 Subject: [PATCH 186/386] Redid scraper start menu. --- src/components/MenuComponent.h | 8 ++++ src/guis/GuiScraperStart.cpp | 69 ++++++++++++++-------------------- src/guis/GuiScraperStart.h | 26 +++++-------- 3 files changed, 46 insertions(+), 57 deletions(-) diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index a309623d5..1dd577bd1 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -13,6 +13,14 @@ public: inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList.addRow(row, setCursorHere); } + inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false) + { + ComponentListRow row; + row.addElement(std::make_shared(mWindow, label, Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(comp, false); + addRow(row, setCursorHere); + } + private: NinePatchComponent mBackground; TextComponent mTitle; diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 0003dd062..99e572173 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -2,58 +2,45 @@ #include "GuiScraperLog.h" #include "GuiMsgBoxYesNo.h" +#include "../components/TextComponent.h" +#include "../components/OptionListComponent.h" +#include "../components/SwitchComponent.h" + GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), - mBox(window, ":/frame.png"), - mList(window, Eigen::Vector2i(2, 4)), - mFilterLabel(mWindow), - mSystemsLabel(mWindow), - mManualLabel(mWindow), - mFiltersOpt(mWindow), - mSystemsOpt(mWindow, true), - mManualSwitch(mWindow), - mStartButton(mWindow) + mMenu(window, "SCRAPE NOW") { - mFilterLabel.setText("Filter: "); - mSystemsLabel.setText("Systems: "); - mManualLabel.setText("Manual mode: "); + addChild(&mMenu); - addChild(&mBox); - addChild(&mList); - - using namespace Eigen; - - //add filters (with first one selected) - mFiltersOpt.add("All Games", + // add filters (with first one selected) + mFilters = std::make_shared< OptionListComponent >(mWindow, false); + mFilters->add("All Games", [](SystemData*, FileData*) -> bool { return true; }, true); - mFiltersOpt.add("Missing Image", + mFilters->add("Only missing image", [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); }, false); - - mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), &mFilterLabel, false, ComponentGrid::AlignRight); - mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mFiltersOpt, true, ComponentGrid::AlignLeft); + mMenu.addWithLabel("Filter", mFilters); //add systems (all with a platformid specified selected) - std::vector sys = SystemData::sSystemVector; - for(auto it = sys.begin(); it != sys.end(); it++) - mSystemsOpt.add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); + mSystems = std::make_shared< OptionListComponent >(mWindow, true); + for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + mSystems->add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); + mMenu.addWithLabel("Systems", mSystems); - mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mSystemsLabel, false, ComponentGrid::AlignRight); - mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mSystemsOpt, true, ComponentGrid::AlignLeft); + mAutoStyle = std::make_shared< OptionListComponent >(mWindow, false); + mAutoStyle->add("Never automatically accept result", 0, true); + mAutoStyle->add("Always accept first result", 1, false); + mMenu.addWithLabel("Auto style", mAutoStyle); - mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mManualLabel, false, ComponentGrid::AlignRight); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mManualSwitch, true, ComponentGrid::AlignLeft); + ComponentListRow row; + row.addElement(std::make_shared(mWindow, "GO GO GO", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiScraperStart::pressedStart, this)); + mMenu.addRow(row); - mStartButton.setText("GO GO GO GO", "begin"); - mStartButton.setPressedFunc(std::bind(&GuiScraperStart::pressedStart, this)); - mList.setEntry(Vector2i(0, 3), Vector2i(2, 1), &mStartButton, true, ComponentGrid::AlignCenter); - - mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, Renderer::getScreenHeight() / 2 - mList.getSize().y() / 2); - - mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(-32, -32)); + mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, (Renderer::getScreenHeight() - mMenu.getSize().y()) / 2); } void GuiScraperStart::pressedStart() { - std::vector sys = mSystemsOpt.getSelectedObjects(); + std::vector sys = mSystems->getSelectedObjects(); for(auto it = sys.begin(); it != sys.end(); it++) { if((*it)->getPlatformId() == PlatformIds::PLATFORM_UNKNOWN) @@ -69,9 +56,9 @@ void GuiScraperStart::pressedStart() void GuiScraperStart::start() { - std::queue searches = getSearches(mSystemsOpt.getSelectedObjects(), mFiltersOpt.getSelectedObjects()[0]); + std::queue searches = getSearches(mSystems->getSelectedObjects(), mFilters->getSelected()); - GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mManualSwitch.getState()); + GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mAutoStyle->getSelected() == 0); mWindow->pushGui(gsl); gsl->start(); delete this; @@ -116,7 +103,7 @@ bool GuiScraperStart::input(InputConfig* config, Input input) std::vector GuiScraperStart::getHelpPrompts() { - std::vector prompts = mList.getHelpPrompts(); + std::vector prompts = mMenu.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "cancel")); return prompts; } diff --git a/src/guis/GuiScraperStart.h b/src/guis/GuiScraperStart.h index 60a82b8b7..50bd298b6 100644 --- a/src/guis/GuiScraperStart.h +++ b/src/guis/GuiScraperStart.h @@ -2,16 +2,17 @@ #include "../GuiComponent.h" #include "../SystemData.h" -#include "../components/TextComponent.h" -#include "../components/ComponentGrid.h" -#include "../components/OptionListComponent.h" -#include "../components/SwitchComponent.h" -#include "../components/ButtonComponent.h" #include "../scrapers/Scraper.h" +#include "../components/MenuComponent.h" #include typedef std::function GameFilterFunc; +template +class OptionListComponent; + +class SwitchComponent; + //The starting point for a multi-game scrape. //Allows the user to set various parameters (to set filters, to set which systems to scrape, to enable manual mode). //Generates a list of "searches" that will be carried out by GuiScraperLog. @@ -29,16 +30,9 @@ private: void start(); std::queue getSearches(std::vector systems, GameFilterFunc selector); - NinePatchComponent mBox; - ComponentGrid mList; + std::shared_ptr< OptionListComponent > mFilters; + std::shared_ptr< OptionListComponent > mSystems; + std::shared_ptr< OptionListComponent > mAutoStyle; - TextComponent mFilterLabel; - TextComponent mSystemsLabel; - TextComponent mManualLabel; - - OptionListComponent mFiltersOpt; - OptionListComponent mSystemsOpt; - SwitchComponent mManualSwitch; - - ButtonComponent mStartButton; + MenuComponent mMenu; }; From 6db26742ff7b58a4ed1cc83cba4b3d3072d60686 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 8 Mar 2014 13:00:18 -0600 Subject: [PATCH 187/386] Renamed all the internal "Settings" identifiers to be consistent in capitalization style. Probably should delete your old es_settings.cfg file. Removed --dimtime as an argument since you can set it internally now. --- README.md | 1 - src/Renderer_init_sdlgl.cpp | 2 +- src/Settings.cpp | 19 ++++++++----------- src/Sound.cpp | 2 +- src/SystemData.cpp | 6 +++--- src/Window.cpp | 4 ++-- src/XMLReader.cpp | 2 +- src/components/HelpComponent.cpp | 2 +- src/guis/GuiMenu.cpp | 2 +- src/guis/GuiSettingsMenu.cpp | 22 +++++++++++----------- src/main.cpp | 19 +++++++------------ src/views/gamelist/IGameListView.cpp | 2 +- 12 files changed, 37 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 1c32a7c31..926b81f09 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,6 @@ You can use `--help` to view a list of command-line options. Briefly outlined he --draw-framerate - draw the framerate. --no-exit - do not display 'exit' in the ES menu. --debug - print additional output to the console, primarily about input. ---dimtime [seconds] - delay before dimming the screen and entering sleep mode. Default is 120, use 0 for never. --windowed - run ES in a window. --scrape - run the interactive command-line metadata scraper. ``` diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index 812e7b8a8..aedc1a5d9 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -58,7 +58,7 @@ namespace Renderer sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, display_width, display_height, - SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("WINDOWED") ? 0 : SDL_WINDOW_FULLSCREEN)); + SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("Windowed") ? 0 : SDL_WINDOW_FULLSCREEN)); if(sdlWindow == NULL) { diff --git a/src/Settings.cpp b/src/Settings.cpp index d09347217..62e282a7e 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -26,24 +26,21 @@ void Settings::setDefaults() mBoolMap.clear(); mIntMap.clear(); - mBoolMap["PARSEGAMELISTONLY"] = false; - mBoolMap["IGNOREGAMELIST"] = false; - mBoolMap["DRAWFRAMERATE"] = false; - mBoolMap["DONTSHOWEXIT"] = false; - mBoolMap["DEBUG"] = false; - mBoolMap["WINDOWED"] = false; - mBoolMap["DISABLESOUNDS"] = false; - mBoolMap["DISABLEHELP"] = false; - mBoolMap["DisableGamelistWrites"] = false; + mBoolMap["ParseGamelistOnly"] = false; + mBoolMap["DrawFramerate"] = false; + mBoolMap["ShowExit"] = true; + mBoolMap["Debug"] = false; + mBoolMap["Windowed"] = false; + mBoolMap["EnableSounds"] = true; + mBoolMap["ShowHelpPrompts"] = true; mBoolMap["ScrapeRatings"] = true; - mIntMap["DIMTIME"] = 120*1000; + mIntMap["DimTime"] = 120*1000; mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; mIntMap["GameListSortIndex"] = 0; - mScraper = std::shared_ptr(new GamesDBScraper()); } diff --git a/src/Sound.cpp b/src/Sound.cpp index cf540091f..adbfa9cf3 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -111,7 +111,7 @@ void Sound::play() if(mSampleData == NULL) return; - if(Settings::getInstance()->getBool("DISABLESOUNDS")) + if(Settings::getInstance()->getBool("EnableSounds")) return; SDL_LockAudio(); diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 486c809ee..1748ce77b 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -38,10 +38,10 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mRootFolder = new FileData(FOLDER, mStartPath, this); mRootFolder->metadata.set("name", mFullName); - if(!Settings::getInstance()->getBool("PARSEGAMELISTONLY")) + if(!Settings::getInstance()->getBool("ParseGamelistOnly")) populateFolder(mRootFolder); - if(!Settings::getInstance()->getBool("IGNOREGAMELIST")) + if(!Settings::getInstance()->getBool("IgnoreGamelist")) parseGamelist(this); mRootFolder->sort(FileSorts::SortTypes.at(0)); @@ -52,7 +52,7 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con SystemData::~SystemData() { //save changed game data back to xml - if(!Settings::getInstance()->getBool("IGNOREGAMELIST")) + if(!Settings::getInstance()->getBool("IgnoreGamelist")) { updateGamelist(this); } diff --git a/src/Window.cpp b/src/Window.cpp index 9051d9dd5..04ec0f2b5 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -134,7 +134,7 @@ void Window::update(int deltaTime) { mAverageDeltaTime = mFrameTimeElapsed / mFrameCountElapsed; - if(Settings::getInstance()->getBool("DRAWFRAMERATE")) + if(Settings::getInstance()->getBool("DrawFramerate")) { std::stringstream ss; ss << std::fixed << std::setprecision(1) << (1000.0f * (float)mFrameCountElapsed / (float)mFrameTimeElapsed) << "fps, "; @@ -165,7 +165,7 @@ void Window::render() mHelp->render(transform); - if(Settings::getInstance()->getBool("DRAWFRAMERATE")) + if(Settings::getInstance()->getBool("DrawFramerate")) { Renderer::setMatrix(Eigen::Affine3f::Identity()); mDefaultFonts.at(1)->drawText(mFrameDataString, Eigen::Vector2f(50, 50), 0xFF00FFFF); diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index af74a993a..1dcc9b059 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -224,7 +224,7 @@ void updateGamelist(SystemData* system) //We have the complete information for every game though, so we can simply remove a game //we already have in the system from the XML, and then add it back from its GameData information... - if(Settings::getInstance()->getBool("DisableGamelistWrites") || Settings::getInstance()->getBool("IGNOREGAMELIST")) + if(Settings::getInstance()->getBool("IgnoreGamelist")) return; std::string xmlpath = system->getGamelistPath(); diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 1e275f154..63176cefd 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -25,7 +25,7 @@ void HelpComponent::clearPrompts() void HelpComponent::addPrompt(const char* icon, const char* text) { - if(Settings::getInstance()->getBool("DISABLEHELP")) + if(!Settings::getInstance()->getBool("ShowHelpPrompts")) return; Prompt p; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 0d59e1484..4a91fe767 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -42,7 +42,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN } ); - if(!Settings::getInstance()->getBool("DONTSHOWEXIT")) + if(Settings::getInstance()->getBool("ShowExit")) { addEntry("EXIT EMULATIONSTATION", 0x990000FF, false, [] { diff --git a/src/guis/GuiSettingsMenu.cpp b/src/guis/GuiSettingsMenu.cpp index 4a559e2ab..71903ab0a 100644 --- a/src/guis/GuiSettingsMenu.cpp +++ b/src/guis/GuiSettingsMenu.cpp @@ -20,9 +20,9 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), // framerate auto framerate = std::make_shared(mWindow); - framerate->setState(s->getBool("DRAWFRAMERATE")); + framerate->setState(s->getBool("DrawFramerate")); addSetting("Draw framerate:", framerate, - [framerate] { Settings::getInstance()->setBool("DRAWFRAMERATE", framerate->getState()); }); + [framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); // volume auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); @@ -32,9 +32,9 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), // disable sounds auto sound_disable = std::make_shared(mWindow); - sound_disable->setState(s->getBool("DISABLESOUNDS")); - addSetting("Disable sound:", sound_disable, - [sound_disable] { Settings::getInstance()->setBool("DISABLESOUNDS", sound_disable->getState()); }); + sound_disable->setState(s->getBool("EnableSounds")); + addSetting("Enable sounds:", sound_disable, + [sound_disable] { Settings::getInstance()->setBool("EnableSounds", sound_disable->getState()); }); // scraper auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr > >(mWindow, false); @@ -53,20 +53,20 @@ GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), // scrape ratings auto scrape_ratings = std::make_shared(mWindow); scrape_ratings->setState(s->getBool("ScrapeRatings")); - addSetting("Scrape ratings?", scrape_ratings, + addSetting("Scrape ratings:", scrape_ratings, [scrape_ratings] { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); }); // dim time auto dim_time = std::make_shared(mWindow, 0.f, 1200.f, 30.f, "s"); - dim_time->setValue((float)(s->getInt("DIMTIME") / 1000)); + dim_time->setValue((float)(s->getInt("DimTime") / 1000)); addSetting("Dim screen after:", dim_time, - [dim_time] { Settings::getInstance()->setInt("DIMTIME", (int)(dim_time->getValue() * 1000)); }); + [dim_time] { Settings::getInstance()->setInt("DimTime", (int)(dim_time->getValue() * 1000)); }); // disable help auto disable_help = std::make_shared(mWindow); - disable_help->setState(s->getBool("DISABLEHELP")); - addSetting("Disable help:", disable_help, - [disable_help] { Settings::getInstance()->setBool("DISABLEHELP", disable_help->getState()); }); + disable_help->setState(s->getBool("ShowHelpPrompts")); + addSetting("Show help:", disable_help, + [disable_help] { Settings::getInstance()->setBool("ShowHelpPrompts", disable_help->getState()); }); // save button ComponentListRow row; diff --git a/src/main.cpp b/src/main.cpp index 3eb09ebdd..6b1df845b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,27 +36,23 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height i++; //skip the argument value }else if(strcmp(argv[i], "--gamelist-only") == 0) { - Settings::getInstance()->setBool("PARSEGAMELISTONLY", true); + Settings::getInstance()->setBool("ParseGamelistOnly", true); }else if(strcmp(argv[i], "--ignore-gamelist") == 0) { - Settings::getInstance()->setBool("IGNOREGAMELIST", true); + Settings::getInstance()->setBool("IgnoreGamelist", true); }else if(strcmp(argv[i], "--draw-framerate") == 0) { - Settings::getInstance()->setBool("DRAWFRAMERATE", true); + Settings::getInstance()->setBool("DrawFramerate", true); }else if(strcmp(argv[i], "--no-exit") == 0) { - Settings::getInstance()->setBool("DONTSHOWEXIT", true); + Settings::getInstance()->setBool("ShowExit", false); }else if(strcmp(argv[i], "--debug") == 0) { - Settings::getInstance()->setBool("DEBUG", true); + Settings::getInstance()->setBool("Debug", true); Log::setReportingLevel(LogDebug); - }else if(strcmp(argv[i], "--dimtime") == 0) - { - Settings::getInstance()->setInt("DIMTIME", atoi(argv[i + 1]) * 1000); - i++; //skip the argument value }else if(strcmp(argv[i], "--windowed") == 0) { - Settings::getInstance()->setBool("WINDOWED", true); + Settings::getInstance()->setBool("Windowed", true); }else if(strcmp(argv[i], "--scrape") == 0) { scrape_cmdline = true; @@ -71,7 +67,6 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height std::cout << "--draw-framerate display the framerate\n"; std::cout << "--no-exit don't show the exit option in the menu\n"; std::cout << "--debug even more logging\n"; - std::cout << "--dimtime [seconds] time to wait before dimming the screen (default 120, use 0 for never)\n"; std::cout << "--scrape scrape using command line interface\n"; std::cout << "--windowed not fullscreen, should be used in conjunction with -w and -h\n"; std::cout << "--help summon a sentient, angry tuba\n\n"; @@ -233,7 +228,7 @@ int main(int argc, char* argv[]) //sleeping entails setting a flag to start skipping frames //and initially drawing a black semi-transparent rect to dim the screen timeSinceLastEvent += deltaTime; - if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("DIMTIME") && Settings::getInstance()->getInt("DIMTIME") != 0 && window.getAllowSleep()) + if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("DimTime") && Settings::getInstance()->getInt("DimTime") != 0 && window.getAllowSleep()) { sleeping = true; timeSinceLastEvent = 0; diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index 4396286d5..f8aad2629 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -29,7 +29,7 @@ bool IGameListView::input(InputConfig* config, Input input) return true; // Ctrl-R to reload a view when debugging - }else if(Settings::getInstance()->getBool("DEBUG") && config->getDeviceId() == DEVICE_KEYBOARD && + }else if(Settings::getInstance()->getBool("Debug") && config->getDeviceId() == DEVICE_KEYBOARD && (SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)) && input.id == SDLK_r && input.value != 0) { LOG(LogDebug) << "reloading view"; From 70b3408823a62f2fa3b5d1dd75af137a2dcc4993 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 8 Mar 2014 13:07:16 -0600 Subject: [PATCH 188/386] Renamed all theme "header" elements to "logo" (and "headerText" to "logoText"). Documentation updated to reflect the change. --- THEMES.md | 22 +++++++++++----------- src/views/SystemView.cpp | 4 ++-- src/views/gamelist/ISimpleGameListView.cpp | 6 +++--- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/THEMES.md b/THEMES.md index 3c2abfe93..1fac63f77 100644 --- a/THEMES.md +++ b/THEMES.md @@ -240,9 +240,9 @@ Reference #### basic * `image name="background"` - ALL - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). -* `text name="headerText"` - ALL - - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. -* `image name="header"` - ALL +* `text name="logoText"` - ALL + - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. +* `image name="logo"` - ALL - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. * `textlist name="gamelist"` - ALL - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Centered by default. @@ -252,9 +252,9 @@ Reference #### detailed * `image name="background"` - ALL - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). -* `text name="headerText"` - ALL - - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. -* `image name="header"` - ALL +* `text name="logoText"` - ALL + - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. +* `image name="logo"` - ALL - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. * `textlist name="gamelist"` - ALL - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Left aligned by default. @@ -299,16 +299,16 @@ Reference #### grid * `image name="background"` - ALL - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). -* `text name="headerText"` - ALL - - A header text, which displays the name of the system. Displayed at the top center of the screen. Centered by default. -* `image name="header"` - ALL +* `text name="logoText"` - ALL + - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. +* `image name="logo"` - ALL - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. --- #### system -* `image name="header"` - PATH - - A header (logo) image, to be displayed in the system logo carousel. +* `image name="logo"` - PATH + - A logo image, to be displayed in the system logo carousel. * You can use extra elements (elements with `extra="true"`) to add your own backgrounds, etc. They will be displayed behind the carousel, and scroll relative to the carousel. --- diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 97c66d778..8a8bd245e 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -32,11 +32,11 @@ void SystemView::populate() e.object = *it; // make logo - if(theme->getElement("system", "header", "image")) + if(theme->getElement("system", "logo", "image")) { ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(logoSize()); - logo->applyTheme((*it)->getTheme(), "system", "header", ThemeFlags::PATH); + logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // vertically and horizontally center e.data.logo = std::shared_ptr(logo); }else{ diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index c0febefe6..262954b96 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -7,7 +7,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window), mThemeExtras(window) { - mHeaderText.setText("Header"); + mHeaderText.setText("Logo Text"); mHeaderText.setSize(mSize.x(), 0); mHeaderText.setPosition(0, 0); mHeaderText.setCentered(true); @@ -27,8 +27,8 @@ void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme { using namespace ThemeFlags; mBackground.applyTheme(theme, getName(), "background", ALL); - mHeaderImage.applyTheme(theme, getName(), "header", ALL); - mHeaderText.applyTheme(theme, getName(), "headerText", ALL); + mHeaderImage.applyTheme(theme, getName(), "logo", ALL); + mHeaderText.applyTheme(theme, getName(), "logoText", ALL); mThemeExtras.setExtras(ThemeData::makeExtras(theme, getName(), mWindow)); if(mHeaderImage.hasImage()) From 0626f61905f0ef3b9a735d167d325a9fe03a6398 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 8 Mar 2014 13:08:37 -0600 Subject: [PATCH 189/386] Update THEMES.md examples to use "logo" instead of "header". --- THEMES.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/THEMES.md b/THEMES.md index 1fac63f77..98f057ae2 100644 --- a/THEMES.md +++ b/THEMES.md @@ -137,12 +137,12 @@ Sometimes you want to apply the same properties to the same elements across mult 3 - + ./snes_art/snes_header.png - + ./snes_art/snes_header_detailed.png @@ -154,26 +154,26 @@ This is equivalent to: 3 - + ./snes_art/snes_header.png - + ./snes_art/snes_header_detailed.png - + ./snes_art/snes_header.png - + ./snes_art/snes_header.png - ... and any other view that might try to look up "header" ... + ... and any other view that might try to look up "logo" ... ``` From bbb8aeeac30629a9b088116d0cc7bba868acfd7b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 11 Mar 2014 22:00:08 -0500 Subject: [PATCH 190/386] Completely rewrote ComponentGrid to use shared pointers, have support for borders, work better with nested components, and generally suck less. Split the scraper screen into a "ScraperSearchComponent" so it can be reused in other menus (what could this possibly mean for the future?!). Re-designed the ScraperSearchComponent to fit UI concepts. Added the ability to put a row of buttons at the bottom of a MenuComponent. Redid GuiMetaDataEd to use a MenuComponent instead of ComponentGrid. Redid GuiGameScraper to use a ComponentGrid containing a ScraperSearchComponent. Fixed Renderer::pushClipRect not clipping new rects to be within the bounds of the existing clipRect stack. A ton of little fixes that I forgot to mention. It's a good thing I'm the only developer currently, or I would have to actually break this into multiple commits. --- CMakeLists.txt | 2 + src/MetaData.cpp | 30 +- src/MetaData.h | 3 +- src/Renderer_draw_gl.cpp | 21 +- src/components/ButtonComponent.cpp | 33 +- src/components/ButtonComponent.h | 6 +- src/components/ComponentGrid.cpp | 592 ++++++++++------------ src/components/ComponentGrid.h | 124 +++-- src/components/ComponentList.cpp | 41 +- src/components/ComponentList.h | 6 + src/components/MenuComponent.cpp | 68 ++- src/components/MenuComponent.h | 20 +- src/components/ScraperSearchComponent.cpp | 238 +++++++++ src/components/ScraperSearchComponent.h | 64 +++ src/components/TextComponent.cpp | 11 +- src/components/TextComponent.h | 3 +- src/guis/GuiGameScraper.cpp | 237 +++------ src/guis/GuiGameScraper.h | 36 +- src/guis/GuiMetaDataEd.cpp | 118 +---- src/guis/GuiMetaDataEd.h | 23 +- src/guis/GuiScraperLog.cpp | 1 - src/scrapers/GamesDBScraper.cpp | 3 +- 22 files changed, 903 insertions(+), 777 deletions(-) create mode 100644 src/components/ScraperSearchComponent.cpp create mode 100644 src/components/ScraperSearchComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7dc3fb13f..241b4cbb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,6 +172,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScraperSearchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h @@ -252,6 +253,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScraperSearchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 575ea65b2..917fb07f4 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -133,51 +133,33 @@ boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const return string_to_ptime(get(key), "%Y%m%dT%H%M%S%F%q"); } -GuiComponent* MetaDataList::makeDisplay(Window* window, MetaDataType as) +std::shared_ptr MetaDataList::makeEditor(Window* window, MetaDataType as) { switch(as) { case MD_RATING: { - RatingComponent* comp = new RatingComponent(window); - return comp; - } - default: - TextComponent* comp = new TextComponent(window); - return comp; - } -} - -GuiComponent* MetaDataList::makeEditor(Window* window, MetaDataType as) -{ - switch(as) - { - case MD_RATING: - { - RatingComponent* comp = new RatingComponent(window); - return comp; + return std::make_shared(window); } case MD_MULTILINE_STRING: { - TextEditComponent* comp = new TextEditComponent(window); + auto comp = std::make_shared(window); comp->setSize(comp->getSize().x(), comp->getSize().y() * 3); return comp; } case MD_DATE: { - DateTimeComponent* comp = new DateTimeComponent(window); - return comp; + return std::make_shared(window); } case MD_TIME: { - DateTimeComponent* comp = new DateTimeComponent(window); + auto comp = std::make_shared(window); comp->setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); return comp; } default: { - TextEditComponent* comp = new TextEditComponent(window); - return comp; + return std::make_shared(window); } } } diff --git a/src/MetaData.h b/src/MetaData.h index 48c6c3f5c..f7a2b5c0a 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -55,8 +55,7 @@ public: float getFloat(const std::string& key) const; boost::posix_time::ptime getTime(const std::string& key) const; - static GuiComponent* makeDisplay(Window* window, MetaDataType as); - static GuiComponent* makeEditor(Window* window, MetaDataType as); + static std::shared_ptr makeEditor(Window* window, MetaDataType as); inline MetaDataListType getType() const { return mType; } inline const std::vector& getMDD() const { return getMDDByType(getType()); } diff --git a/src/Renderer_draw_gl.cpp b/src/Renderer_draw_gl.cpp index 7e101808c..a5bb90642 100644 --- a/src/Renderer_draw_gl.cpp +++ b/src/Renderer_draw_gl.cpp @@ -39,14 +39,31 @@ namespace Renderer { if(box[3] == 0) box[3] = Renderer::getScreenHeight() - box.y(); - //TODO - make sure the box fits within clipStack.top(), and clip further accordingly! - //glScissor starts at the bottom left of the window //so (0, 0, 1, 1) is the bottom left pixel //everything else uses y+ = down, so flip it to be consistent //rect.pos.y = Renderer::getScreenHeight() - rect.pos.y - rect.size.y; box[1] = Renderer::getScreenHeight() - box.y() - box[3]; + //make sure the box fits within clipStack.top(), and clip further accordingly + if(clipStack.size()) + { + Eigen::Vector4i& top = clipStack.top(); + if(top[0] > box[0]) + box[0] = top[0]; + if(top[1] > box[1]) + box[1] = top[1]; + if(top[0] + top[2] < box[0] + box[2]) + box[2] = (top[0] + top[2]) - box[0]; + if(top[1] + top[3] < box[1] + box[3]) + box[3] = (top[1] + top[3]) - box[1]; + } + + if(box[2] < 0) + box[2] = 0; + if(box[3] < 0) + box[3] = 0; + clipStack.push(box); glScissor(box[0], box[1], box[2], box[3]); glEnable(GL_SCISSOR_TEST); diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index e343ce815..a0d18b463 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -2,12 +2,14 @@ #include "../Renderer.h" #include "../Window.h" -ButtonComponent::ButtonComponent(Window* window) : GuiComponent(window), +ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), mFocused(false), + mEnabled(true), mTextColorFocused(0xFFFFFFFF), mTextColorUnfocused(0x777777FF) { - setSize(64, 48); + setPressedFunc(func); + setText(text, helpText); } void ButtonComponent::onSizeChanged() @@ -24,7 +26,7 @@ bool ButtonComponent::input(InputConfig* config, Input input) { if(config->isMappedTo("a", input) && input.value != 0) { - if(mPressedFunc) + if(mPressedFunc && mEnabled) mPressedFunc(); return true; } @@ -48,13 +50,34 @@ void ButtonComponent::setText(const std::string& text, const std::string& helpTe void ButtonComponent::onFocusGained() { mFocused = true; - mBox.setImagePath(":/button_filled.png"); + updateImage(); } void ButtonComponent::onFocusLost() { mFocused = false; - mBox.setImagePath(":/button.png"); + updateImage(); +} + +void ButtonComponent::setEnabled(bool enabled) +{ + mEnabled = enabled; + updateImage(); +} + +void ButtonComponent::updateImage() +{ + if(!mEnabled || !mPressedFunc) + { + mBox.setImagePath(":/button.png"); + mBox.setCenterColor(0x770000FF); + mBox.setEdgeColor(0x770000FF); + return; + } + + mBox.setCenterColor(0xFFFFFFFF); + mBox.setEdgeColor(0xFFFFFFFF); + mBox.setImagePath(mFocused ? ":/button_filled.png" : ":/button.png"); } void ButtonComponent::render(const Eigen::Affine3f& parentTrans) diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index f048d800c..b82211438 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -8,10 +8,12 @@ class ButtonComponent : public GuiComponent { public: - ButtonComponent(Window* window); + ButtonComponent(Window* window, const std::string& text = "", const std::string& helpText = "", const std::function& func = nullptr); void setPressedFunc(std::function f); + void setEnabled(bool enable); + bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; @@ -28,10 +30,12 @@ private: std::function mPressedFunc; bool mFocused; + bool mEnabled; unsigned int mTextColorFocused; unsigned int mTextColorUnfocused; unsigned int getCurTextColor() const; + void updateImage(); std::string mText; std::string mHelpText; diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index ccf6d32ef..37c379142 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -2,281 +2,219 @@ #include "../Log.h" #include "../Renderer.h" -#define INITIAL_CELL_SIZE 12 +using namespace GridFlags; -ComponentGrid::ComponentGrid(Window* window, Eigen::Vector2i gridDimensions) : GuiComponent(window), - mGrid(NULL), mColumnWidths(NULL), mRowHeights(NULL), - mColumnWidthForced(NULL), mRowHeightForced(NULL), - mCursor(-1, -1) +ComponentGrid::ComponentGrid(Window* window, const Eigen::Vector2i& gridDimensions) : GuiComponent(window), + mGridSize(gridDimensions), mCursor(0, 0) { - mEntries.reserve(gridDimensions.x() * gridDimensions.y()); - makeCells(gridDimensions); + assert(gridDimensions.x() > 0 && gridDimensions.y() > 0); + + mCells.reserve(gridDimensions.x() * gridDimensions.y()); + + mColWidths = new float[gridDimensions.x()]; + mRowHeights = new float[gridDimensions.y()]; + for(int x = 0; x < gridDimensions.x(); x++) + mColWidths[x] = 0; + for(int y = 0; y < gridDimensions.y(); y++) + mRowHeights[y] = 0; } ComponentGrid::~ComponentGrid() { - for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) - { - delete *iter; - } + delete[] mRowHeights; + delete[] mColWidths; } -void ComponentGrid::makeCells(Eigen::Vector2i size) +float ComponentGrid::getColWidth(int col) { - if(mGrid) - delete[] mGrid; - if(mColumnWidths) - delete[] mColumnWidths; - if(mRowHeights) - delete[] mRowHeights; + if(mColWidths[col] != 0) + return mColWidths[col] * mSize.x(); + + // calculate automatic width + float freeWidthPerc = 1; + int between = 0; + for(int x = 0; x < mGridSize.x(); x++) + { + freeWidthPerc -= mColWidths[x]; // if it's 0 it won't do anything + if(mColWidths[x] == 0) + between++; + } - mGridSize = size; - mGrid = new ComponentEntry*[size.x() * size.y()]; - std::fill(mGrid, mGrid + (size.x() * size.y()), (ComponentEntry*)NULL); - - mColumnWidths = new unsigned int[size.x()]; - std::fill(mColumnWidths, mColumnWidths + size.x(), INITIAL_CELL_SIZE); - - mRowHeights = new unsigned int[size.y()]; - std::fill(mRowHeights, mRowHeights + size.y(), INITIAL_CELL_SIZE); - - mColumnWidthForced = new bool[size.x()]; - std::fill(mColumnWidthForced, mColumnWidthForced + size.x(), false); - - mRowHeightForced = new bool[size.y()]; - std::fill(mRowHeightForced, mRowHeightForced + size.y(), false); - - updateSize(); - resetCursor(); + return (freeWidthPerc * mSize.x()) / between; } -void ComponentGrid::setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, - Eigen::Matrix autoFit, UpdateBehavior updateType) +float ComponentGrid::getRowHeight(int row) { - if(pos.x() > mGridSize.x() || pos.y() > mGridSize.y() || pos.x() < 0 || pos.y() < 0) - { - LOG(LogError) << "Tried to set entry beyond grid size!"; - return; - } + if(mRowHeights[row] != 0) + return mRowHeights[row] * mSize.y(); - if(component == NULL) + // calculate automatic height + float freeHeightPerc = 1; + int between = 0; + for(int y = 0; y < mGridSize.y(); y++) { - LOG(LogError) << "Tried to add NULL component to ComponentList!"; - return; + freeHeightPerc -= mRowHeights[y]; // if it's 0 it won't do anything + if(mRowHeights[y] == 0) + between++; } - - ComponentEntry* entry = new ComponentEntry(Eigen::Vector2i(pos.x(), pos.y()), Eigen::Vector2i(size.x(), size.y()), component, updateType, canFocus, align); - mEntries.push_back(entry); + return (freeHeightPerc * mSize.y()) / between; +} - for(int y = pos.y(); y < pos.y() + size.y(); y++) - { - for(int x = pos.x(); x < pos.x() + size.x(); x++) - { - setCell(x, y, mEntries.back()); - } - } +void ComponentGrid::setColWidthPerc(int col, float width) +{ + assert(col >= 0 && col < mGridSize.x()); + mColWidths[col] = width; + onSizeChanged(); +} - if(component->getParent() != NULL) - LOG(LogError) << "ComponentGrid ruining an existing parent-child relationship! Call a social worker!"; - component->setParent(this); +void ComponentGrid::setRowHeightPerc(int row, float height) +{ + assert(row >= 0 && row < mGridSize.y()); + mRowHeights[row] = height; + onSizeChanged(); +} + +void ComponentGrid::setEntry(const std::shared_ptr& comp, const Eigen::Vector2i& pos, bool canFocus, bool resize, const Eigen::Vector2i& size, + unsigned int border, GridFlags::UpdateType updateType) +{ + assert(pos.x() >= 0 && pos.x() < mGridSize.x() && pos.y() >= 0 && pos.y() < mGridSize.y()); + assert(comp != nullptr); + assert(comp->getParent() == NULL); + + GridEntry entry(pos, size, comp, canFocus, resize, updateType, border); + mCells.push_back(entry); + + addChild(comp.get()); if(!cursorValid() && canFocus) mCursor = pos; - //update the column width and row height - //if(autoFit.x() && (int)getColumnWidth(pos.x()) < component->getSize().x()) - // setColumnWidth(pos.x(), (unsigned int)component->getSize().x()); - //if(autoFit.y() && (int)getRowHeight(pos.y()) < component->getSize().y()) - // setRowHeight(pos.y(), (unsigned int)component->getSize().y()); - updateCellSize(mEntries.back(), autoFit.x(), autoFit.y()); - - component->setPosition(getCellOffset(pos)); - - updateSize(); + updateCellComponent(mCells.back()); + updateSeparators(); } -void ComponentGrid::removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2i size) +bool ComponentGrid::removeEntry(const std::shared_ptr& comp) { - auto iter = mEntries.begin(); - while(iter != mEntries.end()) + for(auto it = mCells.begin(); it != mCells.end(); it++) { - if((*iter)->pos.x() >= pos.x() && (*iter)->pos.x() < pos.x() + size.x() - && (*iter)->pos.y() >= pos.y() && (*iter)->pos.y() < pos.y() + size.y()) + if(it->component == comp) { - if((*iter)->component->getParent() == this) - (*iter)->component->setParent(NULL); - - delete *iter; - iter = mEntries.erase(iter); - }else{ - iter++; + removeChild(comp.get()); + mCells.erase(it); + return true; } } - for(int y = pos.y(); y < pos.y() + size.y(); y++) - { - for(int x = pos.x(); x < pos.x() + size.x(); x++) - { - setCell(x, y, NULL); - } - } - - if(!cursorValid()) - resetCursor(); + return false; } -void ComponentGrid::forceRowHeight(int row, unsigned int size) +void ComponentGrid::updateCellComponent(const GridEntry& cell) { - mRowHeights[row] = size; - mRowHeightForced[row] = true; - updateSize(); - updateComponentOffsets(); -} + // size + Eigen::Vector2f size(0, 0); + for(int x = cell.pos.x(); x < cell.pos.x() + cell.dim.x(); x++) + size[0] += getColWidth(x); + for(int y = cell.pos.y(); y < cell.pos.y() + cell.dim.y(); y++) + size[1] += getRowHeight(y); -void ComponentGrid::forceColumnWidth(int col, unsigned int size) -{ - mColumnWidths[col] = size; - mColumnWidthForced[col] = true; - updateSize(); - updateComponentOffsets(); -} + if(cell.resize) + cell.component->setSize(size); -unsigned int ComponentGrid::getRowHeight(int row) { return mRowHeights[row]; } -unsigned int ComponentGrid::getColumnWidth(int col) { return mColumnWidths[col]; } + // position + // find top left corner + Eigen::Vector3f pos(0, 0, 0); + for(int x = 0; x < cell.pos.x(); x++) + pos[0] += getColWidth(x); + for(int y = 0; y < cell.pos.y(); y++) + pos[1] += getRowHeight(y); -Eigen::Vector3f ComponentGrid::getCellOffset(Eigen::Vector2i pos) -{ - Eigen::Vector3f offset(0, 0, 0); - - for(int y = 0; y < pos.y(); y++) - offset[1] += getRowHeight(y); + // center component + pos[0] = pos.x() + (size.x() - cell.component->getSize().x()) / 2; + pos[1] = pos.y() + (size.y() - cell.component->getSize().y()) / 2; - for(int x = 0; x < pos.x(); x++) - offset[0] += getColumnWidth(x); - - ComponentEntry* entry = getCell(pos.x(), pos.y()); - - Eigen::Vector2i gridSize(0, 0); - for(int x = pos.x(); x < pos.x() + entry->dim[0]; x++) - gridSize[0] += getColumnWidth(x); - for(int y = pos.y(); y < pos.y() + entry->dim[1]; y++) - gridSize[1] += getRowHeight(y); - - //if AlignCenter, add half of cell width - half of control width - if(entry->alignment == AlignCenter) - offset[0] += gridSize.x() / 2 - entry->component->getSize().x() / 2; - - //if AlignRight, add cell width - control width - if(entry->alignment == AlignRight) - offset[0] += gridSize.x() - entry->component->getSize().x(); - - //always center on the Y axis - offset[1] += gridSize.y() / 2.0f - entry->component->getSize().y() / 2.0f; - - return offset; + cell.component->setPosition(pos); } -void ComponentGrid::setCell(unsigned int x, unsigned int y, ComponentEntry* entry) +void ComponentGrid::updateSeparators() { - if(x >= (unsigned int)mGridSize.x() || y >= (unsigned int)mGridSize.y()) + mLines.clear(); + + Eigen::Vector2f pos; + Eigen::Vector2f size; + for(auto it = mCells.begin(); it != mCells.end(); it++) { - LOG(LogError) << "Invalid setCell - position " << x << ", " << y << " out of bounds!"; - return; - } + if(!it->border) + continue; - mGrid[y * mGridSize.x() + x] = entry; -} + // find component position + size + pos << 0, 0; + size << 0, 0; + for(int x = 0; x < it->pos.x(); x++) + pos[0] += getColWidth(x); + for(int y = 0; y < it->pos.y(); y++) + pos[1] += getRowHeight(y); + for(int x = it->pos.x(); x < it->pos.x() + it->dim.x(); x++) + size[0] += getColWidth(x); + for(int y = it->pos.y(); y < it->pos.y() + it->dim.y(); y++) + size[1] += getRowHeight(y); -ComponentGrid::ComponentEntry* ComponentGrid::getCell(unsigned int x, unsigned int y) -{ - if(x >= (unsigned int)mGridSize.x() || y >= (unsigned int)mGridSize.y()) - { - LOG(LogError) << "Invalid getCell - position " << x << ", " << y << " out of bounds!"; - return NULL; - } - - return mGrid[y * mGridSize.x() + x]; -} - -void ComponentGrid::updateSize() -{ - mSize = Eigen::Vector2f(0, 0); - for(int x = 0; x < mGridSize.x(); x++) - mSize.x() += getColumnWidth(x); - for(int y = 0; y < mGridSize.y(); y++) - mSize.y() += getRowHeight(y); -} - -void ComponentGrid::updateComponentOffsets() -{ - for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) - { - (*iter)->component->setPosition(getCellOffset((*iter)->pos)); - } -} - -void ComponentGrid::updateCellSize(ComponentEntry* e, bool updWidth, bool updHeight) -{ - if(!e) - { - LOG(LogError) << "Tried to updateCellSize NULL ComponentEntry!"; - return; - } - - unsigned int x = e->pos.x(); - unsigned int y = e->pos.y(); - - if(!mColumnWidthForced[x] && updWidth) - { - //recalc width to widest in column - float widest = 0; - for(int row = 0; row < mGridSize.y(); row++) + if(it->border & BORDER_TOP) { - ComponentEntry* check = getCell(x, row); - if(check) - { - if(check->component->getSize().x() > widest) - widest = check->component->getSize().x(); - } + mLines.push_back(Vert(pos.x(), pos.y())); + mLines.push_back(Vert(pos.x() + size.x(), pos.y())); } - - mColumnWidths[x] = (unsigned int)widest; - } - if(!mRowHeightForced[y] && updHeight) - { - float tallest = 0; - for(int col = 0; col < mGridSize.x(); col++) + if(it->border & BORDER_BOTTOM) { - ComponentEntry* check = getCell(col, y); - if(check) - { - if(check->component->getSize().y() > tallest) - tallest = check->component->getSize().y(); - } + mLines.push_back(Vert(pos.x(), pos.y() + size.y())); + mLines.push_back(Vert(pos.x() + size.x(), mLines.back().y)); } - - mRowHeights[y] = (unsigned int)tallest; - } - - updateComponentOffsets(); - updateSize(); -} - -void ComponentGrid::updateComponent(GuiComponent* cmp) -{ - for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) - { - if((*iter)->component == cmp) + if(it->border & BORDER_LEFT) { - updateCellSize(*iter); + mLines.push_back(Vert(pos.x(), pos.y())); + mLines.push_back(Vert(pos.x(), pos.y() + size.y())); + } + if(it->border & BORDER_RIGHT) + { + mLines.push_back(Vert(pos.x() + size.x(), pos.y())); + mLines.push_back(Vert(mLines.back().x, pos.y() + size.y())); } } + + mLineColors.reserve(mLines.size()); + Renderer::buildGLColorArray((GLubyte*)mLineColors.data(), 0xC6C7C6FF, mLines.size()); +} + +void ComponentGrid::onSizeChanged() +{ + for(auto it = mCells.begin(); it != mCells.end(); it++) + updateCellComponent(*it); + + updateSeparators(); +} + +ComponentGrid::GridEntry* ComponentGrid::getCellAt(int x, int y) +{ + assert(x >= 0 && x < mGridSize.x() && y >= 0 && y < mGridSize.y()); + + for(auto it = mCells.begin(); it != mCells.end(); it++) + { + int xmin = it->pos.x(); + int xmax = xmin + it->dim.x(); + int ymin = it->pos.y(); + int ymax = ymin + it->dim.y(); + + if(x >= xmin && y >= ymin && x < xmax && y < ymax) + return &(*it); + } + + return NULL; } bool ComponentGrid::input(InputConfig* config, Input input) { - if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component->input(config, input)) + GridEntry* cursorEntry = getCellAt(mCursor); + if(cursorEntry && cursorEntry->component->input(config, input)) return true; if(!input.value) @@ -284,23 +222,19 @@ bool ComponentGrid::input(InputConfig* config, Input input) if(config->isMappedTo("down", input)) { - moveCursor(Eigen::Vector2i(0, 1)); - return true; + return moveCursor(Eigen::Vector2i(0, 1)); } if(config->isMappedTo("up", input)) { - moveCursor(Eigen::Vector2i(0, -1)); - return true; + return moveCursor(Eigen::Vector2i(0, -1)); } if(config->isMappedTo("left", input)) { - moveCursor(Eigen::Vector2i(-1, 0)); - return true; + return moveCursor(Eigen::Vector2i(-1, 0)); } if(config->isMappedTo("right", input)) { - moveCursor(Eigen::Vector2i(1, 0)); - return true; + return moveCursor(Eigen::Vector2i(1, 0)); } return false; @@ -308,47 +242,28 @@ bool ComponentGrid::input(InputConfig* config, Input input) void ComponentGrid::resetCursor() { - auto iter = mEntries.begin(); - while(iter != mEntries.end()) - { - if((*iter)->canFocus) - break; - iter++; - } - - if(iter == mEntries.end()) - { - mCursor = Eigen::Vector2i(-1, -1); + if(!mCells.size()) return; - } - const Eigen::Vector2i origCursor = mCursor; - mCursor << (*iter)->pos[0], (*iter)->pos[1]; - onCursorMoved(origCursor, mCursor); -} - -void ComponentGrid::moveCursor(Eigen::Vector2i dir) -{ - if(dir.x() != 0 && dir.y() != 0) + for(auto it = mCells.begin(); it != mCells.end(); it++) { - LOG(LogError) << "Invalid cursor move dir!"; - return; - } - - Eigen::Vector2i origCursor = mCursor; - - if(!cursorValid()) - { - resetCursor(); - - if(!cursorValid()) + if(it->canFocus) { - if(mCursor != origCursor) - onCursorMoved(origCursor, mCursor); - - return; + Eigen::Vector2i origCursor = mCursor; + mCursor = it->pos; + onCursorMoved(origCursor, mCursor); + break; } } +} + +bool ComponentGrid::moveCursor(Eigen::Vector2i dir) +{ + assert(dir.x() || dir.y()); + + const Eigen::Vector2i origCursor = mCursor; + + GridEntry* currentCursorEntry = getCellAt(mCursor); Eigen::Vector2i searchAxis(dir.x() == 0, dir.y() == 0); @@ -358,13 +273,16 @@ void ComponentGrid::moveCursor(Eigen::Vector2i dir) Eigen::Vector2i curDirPos = mCursor; + GridEntry* cursorEntry; //spread out on search axis+ - while(mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y()) + while(mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y() + && mCursor.x() >= 0 && mCursor.y() >= 0) { - if(cursorValid() && getCell(mCursor.x(), mCursor.y())->canFocus) + cursorEntry = getCellAt(mCursor); + if(cursorEntry && cursorEntry->canFocus && cursorEntry != currentCursorEntry) { onCursorMoved(origCursor, mCursor); - return; + return true; } mCursor += searchAxis; @@ -372,12 +290,14 @@ void ComponentGrid::moveCursor(Eigen::Vector2i dir) //now again on search axis- mCursor = curDirPos; - while(mCursor.x() >= 0 && mCursor.y() >= 0) + while(mCursor.x() >= 0 && mCursor.y() >= 0 + && mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y()) { - if(cursorValid() && getCell(mCursor.x(), mCursor.y())->canFocus) + cursorEntry = getCellAt(mCursor); + if(cursorEntry && cursorEntry->canFocus && cursorEntry != currentCursorEntry) { onCursorMoved(origCursor, mCursor); - return; + return true; } mCursor -= searchAxis; @@ -388,31 +308,36 @@ void ComponentGrid::moveCursor(Eigen::Vector2i dir) //failed to find another focusable element in this direction mCursor = origCursor; + return false; +} + +void ComponentGrid::onFocusLost() +{ + GridEntry* cursorEntry = getCellAt(mCursor); + if(cursorEntry) + cursorEntry->component->onFocusLost(); +} + +void ComponentGrid::onFocusGained() +{ + GridEntry* cursorEntry = getCellAt(mCursor); + if(cursorEntry) + cursorEntry->component->onFocusGained(); } bool ComponentGrid::cursorValid() { - if(mCursor.x() < 0 || mCursor.y() < 0 || mCursor.x() >= mGridSize.x() || mCursor.y() >= mGridSize.y()) - return false; - - return getCell(mCursor.x(), mCursor.y()) != NULL; + return getCellAt(mCursor) != NULL; } void ComponentGrid::update(int deltaTime) { - for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) + // update ALL THE THINGS + GridEntry* cursorEntry = getCellAt(mCursor); + for(auto it = mCells.begin(); it != mCells.end(); it++) { - switch((*iter)->updateType) - { - case UpdateAlways: - (*iter)->component->update(deltaTime); - break; - - case UpdateFocused: - if(cursorValid() && getCell(mCursor.x(), mCursor.y())->component == (*iter)->component) - (*iter)->component->update(deltaTime); - break; - } + if(it->updateType == UPDATE_ALWAYS || (it->updateType == UPDATE_WHEN_SELECTED && cursorEntry == &(*it))) + it->component->update(deltaTime); } } @@ -420,79 +345,72 @@ void ComponentGrid::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - //draw cursor - if(cursorValid()) - { - ComponentEntry* entry = getCell(mCursor.x(), mCursor.y()); - Eigen::Affine3f entryTrans = trans * entry->component->getTransform(); - Renderer::setMatrix(entryTrans); - - Renderer::drawRect(0, 0, 4, 4, 0xFF0000FF); - Renderer::drawRect(0, 0, (int)entry->component->getSize().x(), (int)entry->component->getSize().y(), 0x0000AA22); - } - - for(auto iter = mEntries.begin(); iter != mEntries.end(); iter++) - { - (*iter)->component->render(trans); - } - + renderChildren(trans); - //draw cell outlines - /*Renderer::setMatrix(trans); - Eigen::Vector2i pos(0, 0); - for(int x = 0; x < mGridSize.x(); x++) + // draw cell separators + if(mLines.size()) { - for(int y = 0; y < mGridSize.y(); y++) - { - Renderer::drawRect(pos.x(), pos.y(), getColumnWidth(x), 2, 0x000000AA); - Renderer::drawRect(pos.x(), pos.y(), 2, getRowHeight(y), 0x000000AA); - Renderer::drawRect(pos.x() + getColumnWidth(x), pos.y(), 2, getRowHeight(y), 0x000000AA); - Renderer::drawRect(pos.x(), pos.y() + getRowHeight(y) - 2, getColumnWidth(x), 2, 0x000000AA); + Renderer::setMatrix(trans); - pos[1] += getRowHeight(y); - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); - pos[1] = 0; - pos[0] += getColumnWidth(x); - }*/ + glVertexPointer(2, GL_FLOAT, 0, &mLines[0].x); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, mLineColors.data()); - + glDrawArrays(GL_LINES, 0, mLines.size()); + + glDisable(GL_BLEND); + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + } } void ComponentGrid::textInput(const char* text) { - if(getSelectedComponent() != NULL) - getSelectedComponent()->textInput(text); -} - -void ComponentGrid::onPositionChanged() -{ - updateComponentOffsets(); -} - -GuiComponent* ComponentGrid::getSelectedComponent() -{ - if(!cursorValid()) - return NULL; - return getCell(mCursor.x(), mCursor.y())->component; + GridEntry* selectedEntry = getCellAt(mCursor); + if(selectedEntry != NULL) + selectedEntry->component->textInput(text); } void ComponentGrid::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to) { - if(from != Eigen::Vector2i(-1, -1)) - getCell(from.x(), from.y())->component->onFocusLost(); + GridEntry* cell = getCellAt(from); + if(cell) + cell->component->onFocusLost(); - if(to != Eigen::Vector2i(-1, -1)) - getCell(to.x(), to.y())->component->onFocusGained(); + cell = getCellAt(to); + if(cell) + cell->component->onFocusGained(); updateHelpPrompts(); } +void ComponentGrid::setCursorTo(const std::shared_ptr& comp) +{ + for(auto it = mCells.begin(); it != mCells.end(); it++) + { + if(it->component == comp) + { + Eigen::Vector2i oldCursor = mCursor; + mCursor = it->pos; + onCursorMoved(oldCursor, mCursor); + return; + } + } + + // component not found!! + assert(false); +} + std::vector ComponentGrid::getHelpPrompts() { std::vector prompts; - if(cursorValid()) - prompts = getSelectedComponent()->getHelpPrompts(); + GridEntry* e = getCellAt(mCursor); + if(e) + prompts = e->component->getHelpPrompts(); bool canScrollVert = true; bool canScrollHoriz = true; diff --git a/src/components/ComponentGrid.h b/src/components/ComponentGrid.h index 635f94fd0..0cd756cce 100644 --- a/src/components/ComponentGrid.h +++ b/src/components/ComponentGrid.h @@ -2,63 +2,87 @@ #include "../GuiComponent.h" +namespace GridFlags +{ + enum UpdateType + { + UPDATE_ALWAYS, + UPDATE_WHEN_SELECTED, + UPDATE_NEVER + }; + + enum Border : unsigned int + { + BORDER_NONE = 0, + + BORDER_TOP = 1, + BORDER_BOTTOM = 2, + BORDER_LEFT = 4, + BORDER_RIGHT = 8 + }; +}; + // Used to arrange a bunch of components in a spreadsheet-esque grid. class ComponentGrid : public GuiComponent { public: - ComponentGrid(Window* window, Eigen::Vector2i gridDimensions); + ComponentGrid(Window* window, const Eigen::Vector2i& gridDimensions); virtual ~ComponentGrid(); - enum UpdateBehavior - { - UpdateAlways, UpdateFocused - }; + bool removeEntry(const std::shared_ptr& comp); - enum AlignmentType - { - AlignLeft, AlignRight, AlignCenter - }; - - //DO NOT USE NEGATIVE NUMBERS FOR POSITION OR SIZE. - void setEntry(Eigen::Vector2i pos, Eigen::Vector2i size, GuiComponent* component, bool canFocus, AlignmentType align, - Eigen::Matrix autoFit = Eigen::Matrix(true, true), UpdateBehavior updateType = UpdateAlways); - - void removeEntriesIn(Eigen::Vector2i pos, Eigen::Vector2i size); - - void onPositionChanged() override; + void setEntry(const std::shared_ptr& comp, const Eigen::Vector2i& pos, bool canFocus, bool resize = true, + const Eigen::Vector2i& size = Eigen::Vector2i(1, 1), unsigned int border = GridFlags::BORDER_NONE, GridFlags::UpdateType updateType = GridFlags::UPDATE_ALWAYS); void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; - - void forceColumnWidth(int col, unsigned int size); - void forceRowHeight(int row, unsigned int size); - - void updateComponent(GuiComponent* cmp); + void onSizeChanged() override; void resetCursor(); bool cursorValid(); - GuiComponent* getSelectedComponent(); + float getColWidth(int col); + float getRowHeight(int row); - void moveCursor(Eigen::Vector2i dir); + void setColWidthPerc(int col, float width); + void setRowHeightPerc(int row, float height); + + bool moveCursor(Eigen::Vector2i dir); + void setCursorTo(const std::shared_ptr& comp); + + inline std::shared_ptr getSelectedComponent() + { + GridEntry* e = getCellAt(mCursor); + if(e) + return e->component; + else + return nullptr; + } + + void onFocusLost() override; + void onFocusGained() override; virtual std::vector getHelpPrompts() override; private: - class ComponentEntry + class GridEntry { public: Eigen::Vector2i pos; Eigen::Vector2i dim; - GuiComponent* component; - UpdateBehavior updateType; - AlignmentType alignment; + std::shared_ptr component; bool canFocus; + bool resize; + GridFlags::UpdateType updateType; + unsigned int border; - ComponentEntry() : component(NULL), updateType(UpdateAlways), canFocus(true), alignment(AlignCenter) {}; - ComponentEntry(Eigen::Vector2i p, Eigen::Vector2i d, GuiComponent* comp, UpdateBehavior update, bool focus, AlignmentType align) : pos(p), dim(d), component(comp), updateType(update), canFocus(focus), alignment(align) {}; + GridEntry(const Eigen::Vector2i& p = Eigen::Vector2i::Zero(), const Eigen::Vector2i& d = Eigen::Vector2i::Zero(), + const std::shared_ptr& cmp = nullptr, bool f = false, bool r = true, + GridFlags::UpdateType u = GridFlags::UPDATE_ALWAYS, unsigned int b = GridFlags::BORDER_NONE) : + pos(p), dim(d), component(cmp), canFocus(f), resize(r), updateType(u), border(b) + {}; operator bool() const { @@ -66,30 +90,30 @@ private: } }; - //Offset we render components by (for scrolling). [unimplemented] - Eigen::Vector2f mComponentOffset; + float* mRowHeights; + float* mColWidths; + + struct Vert + { + Vert(float xi = 0, float yi = 0) : x(xi), y(yi) {}; + float x; + float y; + }; + std::vector mLines; + std::vector mLineColors; + + // Update position & size + void updateCellComponent(const GridEntry& cell); + void updateSeparators(); + + GridEntry* getCellAt(int x, int y); + inline GridEntry* getCellAt(const Eigen::Vector2i& pos) { return getCellAt(pos.x(), pos.y()); } + Eigen::Vector2i mGridSize; - ComponentEntry** mGrid; - std::vector mEntries; - void makeCells(Eigen::Vector2i size); - void setCell(unsigned int x, unsigned int y, ComponentEntry* entry); - ComponentEntry* getCell(unsigned int x, unsigned int y); - unsigned int getColumnWidth(int col); - unsigned int getRowHeight(int row); - - unsigned int* mColumnWidths; - unsigned int* mRowHeights; - bool* mColumnWidthForced; - bool* mRowHeightForced; - - Eigen::Vector3f getCellOffset(Eigen::Vector2i gridPos); - void updateSize(); + std::vector mCells; void onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to); Eigen::Vector2i mCursor; - - void updateComponentOffsets(); - void updateCellSize(ComponentEntry* e, bool updWidth = true, bool updHeight = true); }; diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index c4a5de9c0..d21ede3ff 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -6,6 +6,7 @@ ComponentList::ComponentList(Window* window) : IList(wi { mSelectorBarOffset = 0; mCameraOffset = 0; + mFocused = false; } void ComponentList::addRow(const ComponentListRow& row, bool setCursorHere) @@ -41,6 +42,16 @@ void ComponentList::onSizeChanged() onCursorChanged(mScrollVelocity != 0 ? CURSOR_SCROLLING : CURSOR_STOPPED); } +void ComponentList::onFocusLost() +{ + mFocused = false; +} + +void ComponentList::onFocusGained() +{ + mFocused = true; +} + bool ComponentList::input(InputConfig* config, Input input) { if(size() == 0) @@ -127,23 +138,27 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) // draw our entries renderChildren(trans); - // draw selector bar + // custom rendering Renderer::setMatrix(trans); - // inversion: src * (1 - dst) + dst * 0 = where src = 1 - // need a function that goes roughly 0x777777 -> 0xFFFFFF - // and 0xFFFFFF -> 0x777777 - // (1 - dst) + 0x77 + // draw selector bar + if(mFocused) + { + // inversion: src * (1 - dst) + dst * 0 = where src = 1 + // need a function that goes roughly 0x777777 -> 0xFFFFFF + // and 0xFFFFFF -> 0x777777 + // (1 - dst) + 0x77 - const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); - Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0xFFFFFFFF, - GL_ONE_MINUS_DST_COLOR, GL_ZERO); - Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0x777777FF, - GL_ONE, GL_ONE); + const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); + Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0xFFFFFFFF, + GL_ONE_MINUS_DST_COLOR, GL_ZERO); + Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0x777777FF, + GL_ONE, GL_ONE); - // hack to draw 2px dark on left/right of the bar - Renderer::drawRect(0, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); - Renderer::drawRect((int)mSize.x() - 2, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); + // hack to draw 2px dark on left/right of the bar + Renderer::drawRect(0, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); + Renderer::drawRect((int)mSize.x() - 2, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); + } // draw separators float y = 0; diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index e5315391c..d4d58c651 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -52,11 +52,17 @@ public: void render(const Eigen::Affine3f& parentTrans) override; void onSizeChanged() override; + void onFocusGained() override; + void onFocusLost() override; + + inline int getCursorId() const { return mCursor; } protected: void onCursorChanged(const CursorState& state) override; private: + bool mFocused; + void updateElementPosition(const ComponentListRow& row); void updateElementSize(const ComponentListRow& row); diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index ba9a73212..98aef7954 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -1,31 +1,67 @@ #include "MenuComponent.h" +#include "ButtonComponent.h" + +using namespace Eigen; MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(window), - mBackground(window), mTitle(window), mList(window) -{ + mBackground(window), mGrid(window, Vector2i(1, 3)) +{ + addChild(&mBackground); + addChild(&mGrid); + mBackground.setImagePath(":/frame.png"); - mTitle.setFont(Font::get(FONT_SIZE_LARGE)); - mTitle.setText(title); - mTitle.setColor(0x555555FF); - mTitle.setCentered(true); + // set up title which will never change + mTitle = std::make_shared(mWindow, title, Font::get(FONT_SIZE_LARGE), 0x555555FF, true); + mGrid.setEntry(mTitle, Vector2i(0, 0), false); - addChild(&mBackground); - addChild(&mTitle); - addChild(&mList); + // set up list which will never change (externally, anyway) + mList = std::make_shared(mWindow); + mGrid.setEntry(mList, Vector2i(0, 1), true); setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.75f); + updateGrid(); + mGrid.resetCursor(); } void MenuComponent::onSizeChanged() { mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); - const float titlePadding = mTitle.getFont()->getHeight() * 0.2f; - - mTitle.setSize(mSize.x(), (float)mTitle.getFont()->getHeight()); - mTitle.setPosition(0, titlePadding / 2); - - mList.setPosition(0, mTitle.getSize().y() + titlePadding); - mList.setSize(mSize.x(), mSize.y() - mTitle.getSize().y() - titlePadding); + // update grid row/col sizes + mGrid.setRowHeightPerc(0, mTitle->getSize().y() / mSize.y()); + mGrid.setRowHeightPerc(2, mButtonGrid ? (mButtonGrid->getSize().y() + 32) / mSize.y() : 0.07f); + + mGrid.setSize(mSize); +} + +void MenuComponent::addButton(const std::string& name, const std::string& helpText, const std::function& callback) +{ + mButtons.push_back(std::make_shared(mWindow, name, helpText, callback)); + updateGrid(); + onSizeChanged(); +} + +void MenuComponent::updateGrid() +{ + if(mButtonGrid) + mGrid.removeEntry(mButtonGrid); + + if(mButtons.size()) + { + mButtonGrid = std::make_shared(mWindow, Vector2i(mButtons.size(), 1)); + + float buttonGridWidth = 16.0f * mButtons.size(); // initialize to padding + for(int i = 0; i < (int)mButtons.size(); i++) + { + mButtonGrid->setEntry(mButtons.at(i), Vector2i(i, 0), true, false); + buttonGridWidth += mButtons.at(i)->getSize().x(); + } + + mButtonGrid->setSize(buttonGridWidth, mButtons.at(0)->getSize().y()); + + mGrid.setEntry(mButtonGrid, Vector2i(0, 2), true, false); + }else{ + mButtonGrid.reset(); + } } diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 1dd577bd1..98a0a54fb 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -3,6 +3,9 @@ #include "NinePatchComponent.h" #include "ComponentList.h" #include "TextComponent.h" +#include "ComponentGrid.h" + +class ButtonComponent; class MenuComponent : public GuiComponent { @@ -11,7 +14,7 @@ public: void onSizeChanged() override; - inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList.addRow(row, setCursorHere); } + inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList->addRow(row, setCursorHere); } inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false) { @@ -21,8 +24,19 @@ public: addRow(row, setCursorHere); } + void addButton(const std::string& label, const std::string& helpText, const std::function& callback); + + inline void setCursorToList() { mGrid.setCursorTo(mList); } + inline void setCursorToButtons() { assert(mButtonGrid); mGrid.setCursorTo(mButtonGrid); } + private: + void updateGrid(); + NinePatchComponent mBackground; - TextComponent mTitle; - ComponentList mList; + ComponentGrid mGrid; + + std::shared_ptr mTitle; + std::shared_ptr mList; + std::shared_ptr mButtonGrid; + std::vector< std::shared_ptr > mButtons; }; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp new file mode 100644 index 000000000..8974df44f --- /dev/null +++ b/src/components/ScraperSearchComponent.cpp @@ -0,0 +1,238 @@ +#include "ScraperSearchComponent.h" + +#include "../components/TextComponent.h" +#include "../components/ScrollableContainer.h" +#include "../components/ImageComponent.h" +#include "../components/ComponentList.h" +#include "../HttpReq.h" +#include "../Settings.h" +#include "../Log.h" + +ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), + mGrid(window, Eigen::Vector2i(4, 3)), + mSearchType(type) +{ + mSearchParams.system = NULL; + mSearchParams.game = NULL; + + addChild(&mGrid); + + using namespace Eigen; + + // left spacer (empty component, needed for borders) + mGrid.setEntry(std::make_shared(mWindow), Vector2i(0, 0), false, false, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); + + // selected result name + mResultName = std::make_shared(mWindow, "Result name", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + mGrid.setEntry(mResultName, Vector2i(1, 0), false, true, Vector2i(2, 1), GridFlags::BORDER_TOP); + + // selected result thumbnail + mResultThumbnail = std::make_shared(mWindow); + mGrid.setEntry(mResultThumbnail, Vector2i(1, 1), false, false, Vector2i(1, 1)); + + // selected result desc + container + mDescContainer = std::make_shared(mWindow); + mResultDesc = std::make_shared(mWindow, "Result desc", Font::get(FONT_SIZE_SMALL), 0x777777FF); + mDescContainer->addChild(mResultDesc.get()); + mDescContainer->setAutoScroll(2200, 0.015f); + + // result list + mResultList = std::make_shared(mWindow); + + updateViewStyle(); +} + +void ScraperSearchComponent::onSizeChanged() +{ + mGrid.setSize(mSize); + + // column widths + mGrid.setColWidthPerc(0, 0.01f); + mGrid.setColWidthPerc(1, 0.25f); + mGrid.setColWidthPerc(2, 0.25f); + mGrid.setColWidthPerc(3, 0.49f); + + // row heights + const float fontHeightPerc = (mResultName->getFont()->getHeight()) / mGrid.getSize().y(); + mGrid.setRowHeightPerc(0, fontHeightPerc); // result name + mGrid.setRowHeightPerc(2, 0.375f); // description + + mResultThumbnail->setMaxSize(mGrid.getColWidth(1), mGrid.getRowHeight(1)); + mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container +} + +void ScraperSearchComponent::updateViewStyle() +{ + using namespace Eigen; + + // unlink description and result list + mGrid.removeEntry(mResultDesc); + mGrid.removeEntry(mResultList); + + // add them back depending on search type + if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) + { + // show description on the right + mGrid.setEntry(mDescContainer, Vector2i(3, 0), false, true, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); + mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container + }else{ + // show result list on the right + mGrid.setEntry(mResultList, Vector2i(3, 0), true, true, Vector2i(1, 3), GridFlags::BORDER_LEFT | GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); + + // show description under image/info + mGrid.setEntry(mDescContainer, Vector2i(1, 2), false, true, Vector2i(2, 1), GridFlags::BORDER_BOTTOM); + mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container + } +} + +void ScraperSearchComponent::setSearchParams(const ScraperSearchParams& params) +{ + mSearchParams = params; + search(); +} + +void ScraperSearchComponent::search() +{ + Settings::getInstance()->getScraper()->getResultsAsync(mSearchParams, mWindow, std::bind(&ScraperSearchComponent::onSearchReceived, this, std::placeholders::_1)); +} + +void ScraperSearchComponent::onSearchReceived(std::vector results) +{ + mResultList->clear(); + + mScraperResults = results; + + const int end = results.size() > 5 ? 5 : results.size(); // at max display 5 + + auto font = Font::get(FONT_SIZE_MEDIUM); + unsigned int color = 0x777777FF; + if(end == 0) + { + ComponentListRow row; + row.addElement(std::make_shared(mWindow, "No games found!", font, color), true); + mResultList->addRow(row); + mGrid.resetCursor(); + }else{ + ComponentListRow row; + for(int i = 0; i < end; i++) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, results.at(i).get("name"), font, color), true); + mResultList->addRow(row); + } + mGrid.resetCursor(); + } + + updateInfoPane(); + + if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) + { + if(mScraperResults.size() == 0) + returnResult(NULL); + else + returnResult(&mScraperResults.front()); + }else if(mSearchType == ALWAYS_ACCEPT_MATCHING_CRC) + { + // TODO + assert(false); + } +} + +int ScraperSearchComponent::getSelectedIndex() +{ + if(mScraperResults.size() && mGrid.getSelectedComponent() != mResultList) + return -1; + + return mResultList->getCursorId(); +} + +void ScraperSearchComponent::updateInfoPane() +{ + int i = getSelectedIndex(); + if(i != -1 && (int)mScraperResults.size() > i) + { + mResultName->setText(mScraperResults.at(i).get("name")); + mResultDesc->setText(mScraperResults.at(i).get("desc")); + mDescContainer->setScrollPos(Eigen::Vector2d(0, 0)); + mDescContainer->resetAutoScrollTimer(); + + std::string thumb = mScraperResults.at(i).get("thumbnail"); + mResultThumbnail->setImage(""); + if(!thumb.empty()) + mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); + else + mThumbnailReq.reset(); + } +} + +bool ScraperSearchComponent::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("a", input) && input.value != 0) + { + //if you're on a result + if(getSelectedIndex() != -1) + { + returnResult(&mScraperResults.at(getSelectedIndex())); + return true; + } + } + + bool ret = GuiComponent::input(config, input); + + if(config->isMappedTo("up", input) || config->isMappedTo("down", input) && input.value != 0) + { + updateInfoPane(); + } + + return ret; +} + +void ScraperSearchComponent::returnResult(MetaDataList* result) +{ + assert(mAcceptCallback); + mAcceptCallback(result); +} + +void ScraperSearchComponent::update(int deltaTime) +{ + if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) + { + updateThumbnail(); + } + + GuiComponent::update(deltaTime); +} + +void ScraperSearchComponent::updateThumbnail() +{ + if(mThumbnailReq && mThumbnailReq->status() == HttpReq::REQ_SUCCESS) + { + std::string content = mThumbnailReq->getContent(); + mResultThumbnail->setImage(content.data(), content.length()); + }else{ + LOG(LogWarning) << "thumbnail req failed: " << mThumbnailReq->getErrorMsg(); + mResultThumbnail->setImage(""); + } + + mThumbnailReq.reset(); + mGrid.onSizeChanged(); // a hack to fix the thumbnail position since its size changed +} + +std::vector ScraperSearchComponent::getHelpPrompts() +{ + std::vector prompts = mGrid.getHelpPrompts(); + if(getSelectedIndex() != -1) + prompts.push_back(HelpPrompt("a", "accept result")); + + return prompts; +} + +void ScraperSearchComponent::onFocusGained() +{ + mGrid.onFocusGained(); +} + +void ScraperSearchComponent::onFocusLost() +{ + mGrid.onFocusLost(); +} \ No newline at end of file diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h new file mode 100644 index 000000000..09a7bf221 --- /dev/null +++ b/src/components/ScraperSearchComponent.h @@ -0,0 +1,64 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../scrapers/Scraper.h" +#include "../components/ComponentGrid.h" +#include + +#define MAX_SCRAPER_RESULTS 5 + +class ComponentList; +class TextEditComponent; +class ImageComponent; +class ScrollableContainer; +class HttpReq; + +class ScraperSearchComponent : public GuiComponent +{ +public: + enum SearchType + { + ALWAYS_ACCEPT_FIRST_RESULT, + ALWAYS_ACCEPT_MATCHING_CRC, + NEVER_AUTO_ACCEPT + }; + + ScraperSearchComponent(Window* window, SearchType searchType = NEVER_AUTO_ACCEPT); + + void setSearchParams(const ScraperSearchParams& params); + inline void setAcceptCallback(const std::function& acceptCallback) { mAcceptCallback = acceptCallback; } + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + std::vector getHelpPrompts() override; + void onSizeChanged() override; + void onFocusGained() override; + void onFocusLost() override; + +private: + void updateViewStyle(); + void updateThumbnail(); + void updateInfoPane(); + + void search(); + void onSearchReceived(std::vector results); + + int getSelectedIndex(); + + void returnResult(MetaDataList* result); + + ComponentGrid mGrid; + + std::shared_ptr mResultName; + std::shared_ptr mDescContainer; + std::shared_ptr mResultDesc; + std::shared_ptr mResultThumbnail; + std::shared_ptr mResultList; + + SearchType mSearchType; + ScraperSearchParams mSearchParams; + std::function mAcceptCallback; + + std::vector mScraperResults; + std::unique_ptr mThumbnailReq; +}; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index df80b8392..e1c2abbf2 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -9,8 +9,9 @@ TextComponent::TextComponent(Window* window) : GuiComponent(window), { } -TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), - mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) +TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, bool center, + Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), + mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(center) { setFont(font); setColor(color); @@ -69,6 +70,10 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); + dim = trans * dim - trans.translation(); + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); + if(mTextCache) { if(mCentered) @@ -86,6 +91,8 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) mFont->renderTextCache(mTextCache.get()); } + Renderer::popClipRect(); + GuiComponent::renderChildren(trans); } diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index a6355617a..e3039a2a1 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -15,7 +15,8 @@ class TextComponent : public GuiComponent { public: TextComponent(Window* window); - TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); + TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, bool center = false, + Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); void setFont(const std::shared_ptr& font); void onSizeChanged() override; diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index bfee6c299..e9ec0734a 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -4,152 +4,88 @@ #include "../scrapers/Scraper.h" #include "../Settings.h" +#include "../components/TextComponent.h" +#include "../components/ButtonComponent.h" + GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc) : GuiComponent(window), - mList(window, Eigen::Vector2i(2, 7 + MAX_SCRAPER_RESULTS)), + mGrid(window, Eigen::Vector2i(1, 3)), mBox(window, ":/frame.png"), - mHeader(window, getCleanFileName(params.game->getPath()), Font::get(FONT_SIZE_MEDIUM)), - mResultName(window, "", Font::get(FONT_SIZE_MEDIUM)), - mResultInfo(window), - mResultDesc(window, "", Font::get(FONT_SIZE_SMALL)), - mResultThumbnail(window), - - mSearchLabel(window, "Search for: ", Font::get(FONT_SIZE_SMALL)), - mSearchText(window), - mSearchParams(params), mDoneFunc(doneFunc), - mSkipFunc(skipFunc) + mSkipFunc(skipFunc), + mSearchCountdown(2) { + // new screen: + // FILE NAME //-------------------------------------- - //Name................. | - //Desc................. | PREVIEW - //..................... | IMAGE? - //....(autoscroll)..... | + // Result Title | Result #1 + // |-------| ..... | Result #2 + // | IMG | info | Result #3 + // |-------| ..... | ......... + // | ......... + // DESCRIPTION........| ......... + // ...................| ......... + // ...................| ......... //-------------------------------------- - //Search for: [_______________________] - //-------------------------------------- - //Result #1 Name - //Result #2 Name - //Result #3 Name - //Result #4 Name - //Result #5 Name + // [SEARCH NAME] [CANCEL] + addChild(&mBox); - addChild(&mList); + addChild(&mGrid); - float sw = (float)Renderer::getScreenWidth(); - float sh = (float)Renderer::getScreenHeight(); + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - float listWidth = sw * 0.7f; - float col1Width = listWidth * 0.7f; - float col2Width = listWidth * 0.3f; - mList.forceColumnWidth(0, (unsigned int)col1Width); - mList.forceColumnWidth(1, (unsigned int)col2Width); - - using namespace Eigen; + mGrid.setSize(mSize.x() * 0.7f, mSize.y() * 0.65f); - mList.setEntry(Vector2i(0, 0), Vector2i(2, 1), &mHeader, false, ComponentGrid::AlignCenter); + auto headerFont = Font::get(FONT_SIZE_LARGE); - //y = 1 is a spacer row + mGrid.setRowHeightPerc(0, headerFont->getHeight() / mGrid.getSize().y()); // header + mGrid.setRowHeightPerc(2, 0.19f); // buttons - mResultName.setText(params.game->getName()); - mResultName.setColor(0x3B56CCFF); - mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), &mResultName, false, ComponentGrid::AlignLeft); + // header + mGrid.setEntry(std::make_shared(mWindow, getCleanFileName(mSearchParams.game->getName()), + headerFont, 0x777777FF, true), Eigen::Vector2i(0, 0), false, true); - mResultDesc.setText(params.game->metadata.get("desc")); - mResultDesc.setSize(col1Width, 0); - mResultInfo.addChild(&mResultDesc); - mResultInfo.setSize(mResultDesc.getSize().x(), mResultDesc.getFont()->getHeight() * 3.0f); - mList.setEntry(Vector2i(0, 2), Vector2i(1, 1), &mResultInfo, false, ComponentGrid::AlignLeft); + // ScraperSearchComponent + mSearch = std::make_shared(window, ScraperSearchComponent::NEVER_AUTO_ACCEPT); + mGrid.setEntry(mSearch, Eigen::Vector2i(0, 1), true); + + // buttons + auto buttonGrid = std::make_shared(mWindow, Eigen::Vector2i(3, 1)); - mResultThumbnail.setMaxSize(col2Width, mResultInfo.getSize().y()); - mList.setEntry(Vector2i(1, 2), Vector2i(1, 1), &mResultThumbnail, false, ComponentGrid::AlignCenter); + auto manualSearchBtn = std::make_shared(mWindow, "MANUAL SEARCH", "enter search terms"); + auto cancelBtn = std::make_shared(mWindow, "CANCEL", "cancel"); - //y = 3 is a spacer row + buttonGrid->setSize(manualSearchBtn->getSize().x() + cancelBtn->getSize().x() + 18, manualSearchBtn->getSize().y()); + buttonGrid->setColWidthPerc(0, 0.5f); + buttonGrid->setColWidthPerc(1, 0.5f); - mList.setEntry(Vector2i(0, 4), Vector2i(1, 1), &mSearchLabel, false, ComponentGrid::AlignLeft); - mSearchText.setValue(!params.nameOverride.empty() ? params.nameOverride : getCleanFileName(params.game->getPath())); - mSearchText.setSize(listWidth - mSearchLabel.getSize().x() - 20, mSearchText.getSize().y()); - mList.setEntry(Vector2i(1, 4), Vector2i(1, 1), &mSearchText, true, ComponentGrid::AlignRight); + buttonGrid->setEntry(manualSearchBtn, Eigen::Vector2i(0, 0), true, false); + buttonGrid->setEntry(cancelBtn, Eigen::Vector2i(1, 0), true, false); - //y = 5 is a spacer row + mGrid.setEntry(buttonGrid, Eigen::Vector2i(0, 2), true, false); - std::shared_ptr font = Font::get(FONT_SIZE_SMALL); - mResultNames.reserve(MAX_SCRAPER_RESULTS); - for(int i = 0; i < MAX_SCRAPER_RESULTS; i ++) - { - mResultNames.push_back(TextComponent(mWindow, "RESULT...", font)); - mResultNames.at(i).setColor(0x111111FF); - mList.forceRowHeight(6 + i, (unsigned int)mResultNames.at(i).getSize().y()); - } + // center everything + mGrid.setPosition((mSize.x() - mGrid.getSize().x()) / 2, (mSize.y() - mGrid.getSize().y()) / 2); + mBox.fitTo(mGrid.getSize(), mGrid.getPosition(), Eigen::Vector2f(-32, -32)); - mList.setPosition((sw - mList.getSize().x()) / 2, (sh - mList.getSize().y()) / 2); + mSearch->setAcceptCallback( [this](MetaDataList* result) { + if(result != NULL) + this->mDoneFunc(*result); + else if(this->mSkipFunc) + this->mSkipFunc(); - mBox.fitTo(mList.getSize(), mList.getPosition()); + delete this; + }); - mResultInfo.setAutoScroll(2200, 0.015f); - - mList.resetCursor(); -} - -void GuiGameScraper::search() -{ - //update mSearchParams - mSearchParams.nameOverride = mSearchText.getValue(); - - Settings::getInstance()->getScraper()->getResultsAsync(mSearchParams, mWindow, std::bind(&GuiGameScraper::onSearchDone, this, std::placeholders::_1)); -} - -void GuiGameScraper::onSearchDone(std::vector results) -{ - mList.removeEntriesIn(Eigen::Vector2i(0, 6), Eigen::Vector2i(1, 5)); - - mScraperResults = results; - - const int end = results.size() > 5 ? 5 : results.size(); //at max display 5 - - if(end == 0) - { - mResultNames.at(0).setText("No games found!"); - mList.setEntry(Eigen::Vector2i(0, 6), Eigen::Vector2i(1, 1), &mResultNames.at(0), false, ComponentGrid::AlignLeft); - }else{ - for(int i = 0; i < end; i++) - { - mResultNames.at(i).setText(results.at(i).get("name")); - mList.setEntry(Eigen::Vector2i(0, 6 + i), Eigen::Vector2i(1, 1), &mResultNames.at(i), true, ComponentGrid::AlignLeft); - } - } - - mList.resetCursor(); - mList.moveCursor(Eigen::Vector2i(0, 1)); //move cursor to first game if there is one - updateInfoPane(); -} - -int GuiGameScraper::getSelectedIndex() -{ - int index = 0; - for(auto iter = mResultNames.begin(); iter != mResultNames.end(); iter++, index++) - { - if(&(*iter) == mList.getSelectedComponent()) - return index; - } - - return -1; + mGrid.resetCursor(); + //mSearch->setSearchParams(params); // also starts the search } bool GuiGameScraper::input(InputConfig* config, Input input) { - if(config->isMappedTo("a", input) && input.value != 0) - { - //if you're on a result - if(getSelectedIndex() != -1) - { - mDoneFunc(mScraperResults.at(getSelectedIndex())); - delete this; - return true; - } - }else if(config->isMappedTo("b", input) && input.value != 0) + if(config->isMappedTo("b", input) && input.value) { if(mSkipFunc) mSkipFunc(); @@ -157,74 +93,23 @@ bool GuiGameScraper::input(InputConfig* config, Input input) return true; } - bool wasEditing = mSearchText.isEditing(); - bool ret = GuiComponent::input(config, input); - - if(config->isMappedTo("up", input) || config->isMappedTo("down", input) && input.value != 0) - { - updateInfoPane(); - } - - //stopped editing - if(wasEditing && !mSearchText.isEditing()) - { - //update results - search(); - } - - return ret; -} - -void GuiGameScraper::updateInfoPane() -{ - int i = getSelectedIndex(); - if(i != -1) - { - mResultName.setText(mScraperResults.at(i).get("name")); - mResultDesc.setText(mScraperResults.at(i).get("desc")); - mResultInfo.setScrollPos(Eigen::Vector2d(0, 0)); - mResultInfo.resetAutoScrollTimer(); - - std::string thumb = mScraperResults.at(i).get("thumbnail"); - mResultThumbnail.setImage(""); - if(!thumb.empty()) - mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); - else - mThumbnailReq.reset(); - } + return GuiComponent::input(config, input); } void GuiGameScraper::update(int deltaTime) { - if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) + // HAAACK because AsyncReq wont get pushed in the right order if search happens on creation + if(mSearchCountdown > 0) { - updateThumbnail(); + mSearchCountdown--; + if(mSearchCountdown == 0) + mSearch->setSearchParams(mSearchParams); } GuiComponent::update(deltaTime); } -void GuiGameScraper::updateThumbnail() -{ - if(mThumbnailReq && mThumbnailReq->status() == HttpReq::REQ_SUCCESS) - { - std::string content = mThumbnailReq->getContent(); - mResultThumbnail.setImage(content.data(), content.length()); - }else{ - LOG(LogWarning) << "thumbnail req failed: " << mThumbnailReq->getErrorMsg(); - mResultThumbnail.setImage(""); - } - - mThumbnailReq.reset(); - mList.onPositionChanged(); // a hack to fix the thumbnail position since its size changed -} - std::vector GuiGameScraper::getHelpPrompts() { - std::vector prompts = mList.getHelpPrompts(); - if(getSelectedIndex() != -1) - prompts.push_back(HelpPrompt("a", "accept result")); - - prompts.push_back(HelpPrompt("b", "cancel/skip")); - return prompts; + return mGrid.getHelpPrompts(); } diff --git a/src/guis/GuiGameScraper.h b/src/guis/GuiGameScraper.h index 26af7a416..74e1e01e1 100644 --- a/src/guis/GuiGameScraper.h +++ b/src/guis/GuiGameScraper.h @@ -1,17 +1,8 @@ #pragma once #include "../GuiComponent.h" -#include "../scrapers/Scraper.h" -#include "../components/ComponentGrid.h" -#include "../components/TextComponent.h" -#include "../components/ScrollableContainer.h" -#include "../components/TextEditComponent.h" +#include "../components/ScraperSearchComponent.h" #include "../components/NinePatchComponent.h" -#include "../components/ImageComponent.h" -#include "../Settings.h" -#include "../HttpReq.h" - -#define MAX_SCRAPER_RESULTS 5 class GuiGameScraper : public GuiComponent { @@ -21,37 +12,18 @@ public: bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void search(); - virtual std::vector getHelpPrompts() override; private: - int getSelectedIndex(); - void onSearchDone(std::vector results); - void updateInfoPane(); - void updateThumbnail(); + int mSearchCountdown; // haaack - ComponentGrid mList; + ComponentGrid mGrid; NinePatchComponent mBox; - TextComponent mHeader; - - TextComponent mResultName; - ScrollableContainer mResultInfo; - TextComponent mResultDesc; - ImageComponent mResultThumbnail; - - TextComponent mSearchLabel; - TextEditComponent mSearchText; - - std::vector mResultNames; + std::shared_ptr mSearch; ScraperSearchParams mSearchParams; - std::vector mScraperResults; - std::function mDoneFunc; std::function mSkipFunc; - - std::unique_ptr mThumbnailReq; }; diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 87763b513..a99758b79 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -7,115 +7,50 @@ #include "GuiMsgBoxYesNo.h" #include -#define MDED_RESERVED_ROWS 3 - GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mScraperParams(scraperParams), - mBox(mWindow, ":/frame.png", 0xAAAAAAFF, 0xCCCCCCFF), - mList(window, Eigen::Vector2i(2, mdd.size() + MDED_RESERVED_ROWS)), - mHeader(window), + mMenu(window, header.c_str()), mMetaDataDecl(mdd), mMetaData(md), - mSavedCallback(saveCallback), mDeleteFunc(deleteFunc), - mDeleteButton(window), mFetchButton(window), mSaveButton(window) + mSavedCallback(saveCallback), mDeleteFunc(deleteFunc) { - unsigned int sw = Renderer::getScreenWidth(); - unsigned int sh = Renderer::getScreenHeight(); + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - addChild(&mBox); - - addChild(&mHeader); - mHeader.setText(header); - - //initialize buttons - mDeleteButton.setText("DELETE", "delete file"); - if(mDeleteFunc) - { - std::function deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; - std::function pressedFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "This will delete a file!\nAre you sure?", deleteFileAndSelf)); }; - mDeleteButton.setPressedFunc(pressedFunc); - } - - mFetchButton.setText("FETCH", "download metadata"); - mFetchButton.setPressedFunc(std::bind(&GuiMetaDataEd::fetch, this)); - - mSaveButton.setText("SAVE", "save"); - mSaveButton.setPressedFunc([&] { save(); delete this; }); - - //initialize metadata list - addChild(&mList); - populateList(mdd); - mList.setPosition((sw - mList.getSize().x()) / 2.0f, (sh - mList.getSize().y()) / 2.0f); //center it - mList.resetCursor(); - - mBox.fitTo(mList.getSize(), mList.getPosition(), Eigen::Vector2f(12, 12)); - - mHeader.setPosition(mList.getPosition()); - mHeader.setSize(mList.getSize().x(), 0); - mHeader.setCentered(true); -} - -GuiMetaDataEd::~GuiMetaDataEd() -{ - for(auto iter = mLabels.begin(); iter != mLabels.end(); iter++) - { - delete *iter; - } - for(auto iter = mEditors.begin(); iter != mEditors.end(); iter++) - { - delete *iter; - } -} - -void GuiMetaDataEd::populateList(const std::vector& mdd) -{ - // PATH //(centered, not part of componentlist) - - //---GAME NAME--- //(at 1,1; size 3,1) (TextEditComponent) - //DEL SCRP --- //(buttons) - //Fav: Y/N --- //metadata start - //Desc: ... --- //multiline texteditcomponent - //Img: ... --- - //--- SAVE --- - - using namespace Eigen; - - int y = 0; - - //fetch button - mList.setEntry(Vector2i(0, y), Vector2i(1, 1), &mFetchButton, true, ComponentGrid::AlignLeft); - - //delete button - mList.setEntry(Vector2i(1, y), Vector2i(1, 1), &mDeleteButton, true, ComponentGrid::AlignRight); - - y++; + addChild(&mMenu); + // populate list for(auto iter = mdd.begin(); iter != mdd.end(); iter++) { - TextComponent* label = new TextComponent(mWindow); - label->setText(iter->key); - mList.setEntry(Vector2i(0, y), Vector2i(1, 1), label, false, ComponentGrid::AlignLeft); - mLabels.push_back(label); - - GuiComponent* ed = MetaDataList::makeEditor(mWindow, iter->type); - ed->setSize(Renderer::getScreenWidth() * 0.4f, ed->getSize().y()); + auto ed = MetaDataList::makeEditor(mWindow, iter->type); ed->setValue(mMetaData->get(iter->key)); - mList.setEntry(Vector2i(1, y), Vector2i(1, 1), ed, true, ComponentGrid::AlignRight); mEditors.push_back(ed); - - y++; + mMenu.addWithLabel(iter->key, ed); } - //save button - mList.setEntry(Vector2i(0, y), Vector2i(2, 1), &mSaveButton, true, ComponentGrid::AlignCenter); + //add buttons + mMenu.addButton("SCRAPE", "download metadata from the Internet", std::bind(&GuiMetaDataEd::fetch, this)); + mMenu.addButton("SAVE", "save changes", [&] { save(); delete this; }); + + if(mDeleteFunc) + { + auto deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; + auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "This will delete a file!\nAre you sure?", deleteFileAndSelf)); }; + mMenu.addButton("DELETE", "delete this game on disk", deleteBtnFunc); + } + + // initially put cursor on "SCRAPE" + mMenu.setCursorToButtons(); + + // position menu + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); //center it } void GuiMetaDataEd::save() { - for(unsigned int i = 0; i < mLabels.size(); i++) + for(unsigned int i = 0; i < mEditors.size(); i++) { - mMetaData->set(mLabels.at(i)->getValue(), mEditors.at(i)->getValue()); + mMetaData->set(mMetaDataDecl.at(i).key, mEditors.at(i)->getValue()); } if(mSavedCallback) @@ -126,7 +61,6 @@ void GuiMetaDataEd::fetch() { GuiGameScraper* scr = new GuiGameScraper(mWindow, mScraperParams, std::bind(&GuiMetaDataEd::fetchDone, this, std::placeholders::_1)); mWindow->pushGui(scr); - scr->search(); } void GuiMetaDataEd::fetchDone(MetaDataList result) @@ -187,7 +121,7 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) std::vector GuiMetaDataEd::getHelpPrompts() { - std::vector prompts = mList.getHelpPrompts(); + std::vector prompts = mMenu.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "discard changes")); return prompts; } diff --git a/src/guis/GuiMetaDataEd.h b/src/guis/GuiMetaDataEd.h index 12c191637..69751da9a 100644 --- a/src/guis/GuiMetaDataEd.h +++ b/src/guis/GuiMetaDataEd.h @@ -1,11 +1,8 @@ #pragma once #include "../GuiComponent.h" -#include "../components/ComponentGrid.h" +#include "../components/MenuComponent.h" #include "../MetaData.h" -#include "../components/TextComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/ButtonComponent.h" #include "../scrapers/Scraper.h" #include @@ -15,8 +12,7 @@ class GuiMetaDataEd : public GuiComponent public: GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams params, const std::string& header, std::function savedCallback, std::function deleteFunc); - virtual ~GuiMetaDataEd(); - + bool input(InputConfig* config, Input input) override; virtual std::vector getHelpPrompts() override; @@ -26,25 +22,14 @@ private: void fetch(); void fetchDone(MetaDataList result); - void populateList(const std::vector& mdd); + MenuComponent mMenu; ScraperSearchParams mScraperParams; - NinePatchComponent mBox; - - ComponentGrid mList; - - TextComponent mHeader; - - std::vector mLabels; - std::vector mEditors; + std::vector< std::shared_ptr > mEditors; std::vector mMetaDataDecl; MetaDataList* mMetaData; std::function mSavedCallback; std::function mDeleteFunc; - - ButtonComponent mDeleteButton; - ButtonComponent mFetchButton; - ButtonComponent mSaveButton; }; diff --git a/src/guis/GuiScraperLog.cpp b/src/guis/GuiScraperLog.cpp index f7e8eccbd..b24a8bd2d 100644 --- a/src/guis/GuiScraperLog.cpp +++ b/src/guis/GuiScraperLog.cpp @@ -61,7 +61,6 @@ void GuiScraperLog::next() [this, search] { resultEmpty(search); }); mWindow->pushGui(ggs); - ggs->search(); }else{ std::shared_ptr scraper = Settings::getInstance()->getScraper(); scraper->getResultsAsync(search, mWindow, [this, search] (std::vector mdls) { diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index abc8c576b..a4f828959 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -1,9 +1,10 @@ #include "GamesDBScraper.h" -#include "../guis/GuiGameScraper.h" +#include "../components/ScraperSearchComponent.h" #include "../components/AsyncReqComponent.h" #include "../Log.h" #include "../pugiXML/pugixml.hpp" #include "../MetaData.h" +#include "../Settings.h" #include const char* GamesDBScraper::getName() { return "TheGamesDB"; } From 5039b38d8dc04042463ef584fd2428ebda5b36c5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 12 Mar 2014 18:24:34 -0500 Subject: [PATCH 191/386] Split old, big settings into three submenus from the main menu. Window now only draws the bottom and top of the GuiStack, instead of everything (hides windows-behind-windows and is faster). --- CMakeLists.txt | 5 +- src/Util.h | 22 ++++ src/Window.cpp | 21 +++- src/components/ButtonComponent.cpp | 3 +- src/components/ComponentList.h | 5 +- src/components/MenuComponent.cpp | 22 +++- src/components/MenuComponent.h | 6 +- src/guis/GuiMenu.cpp | 188 +++++++++++++++++++++++------ src/guis/GuiMetaDataEd.cpp | 2 +- src/guis/GuiScraperStart.cpp | 2 +- src/guis/GuiSettings.cpp | 42 +++++++ src/guis/GuiSettings.h | 22 ++++ src/guis/GuiSettingsMenu.cpp | 122 ------------------- src/guis/GuiSettingsMenu.h | 29 ----- 14 files changed, 284 insertions(+), 207 deletions(-) create mode 100644 src/Util.h create mode 100644 src/guis/GuiSettings.cpp create mode 100644 src/guis/GuiSettings.h delete mode 100644 src/guis/GuiSettingsMenu.cpp delete mode 100644 src/guis/GuiSettingsMenu.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 241b4cbb9..61bdad719 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.h ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h @@ -188,7 +189,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettingsMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperLog.h @@ -268,7 +269,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettingsMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperLog.cpp diff --git a/src/Util.h b/src/Util.h new file mode 100644 index 000000000..cd406d911 --- /dev/null +++ b/src/Util.h @@ -0,0 +1,22 @@ +#include + +inline std::string strToUpper(const char* from) +{ + std::string str(from); + for(unsigned int i = 0; i < str.size(); i++) + str[i] = toupper(from[i]); + return str; +} + +inline std::string& strToUpper(std::string& str) +{ + for(unsigned int i = 0; i < str.size(); i++) + str[i] = toupper(str[i]); + + return str; +} + +inline std::string strToUpper(const std::string& str) +{ + return strToUpper(str.c_str()); +} \ No newline at end of file diff --git a/src/Window.cpp b/src/Window.cpp index 04ec0f2b5..c735e8cda 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -154,14 +154,29 @@ void Window::render() { Eigen::Affine3f transform = Eigen::Affine3f::Identity(); - const unsigned int drawBGAfter = mGuiStack.size() > 1 ? mGuiStack.size() - 2 : mGuiStack.size(); + // draw only bottom and top of GuiStack (if they are different) + if(mGuiStack.size()) + { + auto& bottom = mGuiStack.front(); + auto& top = mGuiStack.back(); + + bottom->render(transform); + if(bottom != top) + { + mBackgroundOverlay->render(transform); + top->render(transform); + } + } + + // draw everything + /*const unsigned int drawBGAfter = mGuiStack.size() > 1 ? mGuiStack.size() - 2 : mGuiStack.size(); for(unsigned int i = 0; i < mGuiStack.size(); i++) { mGuiStack.at(i)->render(transform); - + if(i == drawBGAfter) mBackgroundOverlay->render(transform); - } + }*/ mHelp->render(transform); diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index a0d18b463..02b1d7042 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -1,6 +1,7 @@ #include "ButtonComponent.h" #include "../Renderer.h" #include "../Window.h" +#include "../Util.h" ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), @@ -36,7 +37,7 @@ bool ButtonComponent::input(InputConfig* config, Input input) void ButtonComponent::setText(const std::string& text, const std::string& helpText) { - mText = text; + mText = strToUpper(text); mHelpText = helpText; std::shared_ptr f = getFont(); diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index d4d58c651..23dad2f32 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -57,6 +57,8 @@ public: inline int getCursorId() const { return mCursor; } + float getTotalRowHeight() const; + protected: void onCursorChanged(const CursorState& state) override; @@ -67,8 +69,7 @@ private: void updateElementSize(const ComponentListRow& row); float getRowHeight(const ComponentListRow& row) const; - float getTotalRowHeight() const; - + float mSelectorBarOffset; float mCameraOffset; }; diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 98aef7954..fa053d648 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -1,6 +1,8 @@ #include "MenuComponent.h" #include "ButtonComponent.h" +#define BUTTON_GRID_HEIGHT ((float)Font::get(FONT_SIZE_MEDIUM)->getHeight() + 32) + using namespace Eigen; MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(window), @@ -12,34 +14,44 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w mBackground.setImagePath(":/frame.png"); // set up title which will never change - mTitle = std::make_shared(mWindow, title, Font::get(FONT_SIZE_LARGE), 0x555555FF, true); + mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, true); mGrid.setEntry(mTitle, Vector2i(0, 0), false); // set up list which will never change (externally, anyway) mList = std::make_shared(mWindow); mGrid.setEntry(mList, Vector2i(0, 1), true); - setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.75f); updateGrid(); + updateSize(); + mGrid.resetCursor(); } +void MenuComponent::updateSize() +{ + float height = mTitle->getSize().y() + mList->getTotalRowHeight() + BUTTON_GRID_HEIGHT + 2; + if(height > Renderer::getScreenHeight() * 0.7f) + height = Renderer::getScreenHeight() * 0.7f; + + setSize(Renderer::getScreenWidth() * 0.4f, height); +} + void MenuComponent::onSizeChanged() { mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); // update grid row/col sizes mGrid.setRowHeightPerc(0, mTitle->getSize().y() / mSize.y()); - mGrid.setRowHeightPerc(2, mButtonGrid ? (mButtonGrid->getSize().y() + 32) / mSize.y() : 0.07f); + mGrid.setRowHeightPerc(2, (BUTTON_GRID_HEIGHT) / mSize.y()); mGrid.setSize(mSize); } void MenuComponent::addButton(const std::string& name, const std::string& helpText, const std::function& callback) { - mButtons.push_back(std::make_shared(mWindow, name, helpText, callback)); + mButtons.push_back(std::make_shared(mWindow, strToUpper(name), helpText, callback)); updateGrid(); - onSizeChanged(); + updateSize(); } void MenuComponent::updateGrid() diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 98a0a54fb..937515c47 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -4,6 +4,7 @@ #include "ComponentList.h" #include "TextComponent.h" #include "ComponentGrid.h" +#include "../Util.h" class ButtonComponent; @@ -14,12 +15,12 @@ public: void onSizeChanged() override; - inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList->addRow(row, setCursorHere); } + inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList->addRow(row, setCursorHere); updateSize(); } inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false) { ComponentListRow row; - row.addElement(std::make_shared(mWindow, label, Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); row.addElement(comp, false); addRow(row, setCursorHere); } @@ -30,6 +31,7 @@ public: inline void setCursorToButtons() { assert(mButtonGrid); mGrid.setCursorTo(mButtonGrid); } private: + void updateSize(); void updateGrid(); NinePatchComponent mBackground; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 4a91fe767..35271ef4e 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -1,59 +1,173 @@ #include "GuiMenu.h" -#include "GuiSettingsMenu.h" -#include "GuiScraperStart.h" #include "../Window.h" #include "../Sound.h" #include "../Log.h" -#include "GuiMsgBoxYesNo.h" -#include #include "../Settings.h" +#include "GuiMsgBoxYesNo.h" +#include "GuiSettings.h" +#include "GuiScraperStart.h" + +#include "../components/ButtonComponent.h" +#include "../components/SwitchComponent.h" +#include "../components/SliderComponent.h" +#include "../components/TextComponent.h" +#include "../components/OptionListComponent.h" +#include "../VolumeControl.h" +#include "../scrapers/GamesDBScraper.h" +#include "../scrapers/TheArchiveScraper.h" + +std::shared_ptr makeBracket(Window* window) +{ + auto bracket = std::make_shared(window); + bracket->setImage(":/sq_bracket.png"); + + // resize + const float fontHeight = (float)Font::get(FONT_SIZE_MEDIUM)->getHeight(); + if(bracket->getTextureSize().y() > fontHeight) + bracket->setResize(0, fontHeight); + + return bracket; +} GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU") { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); - // populate our list - addEntry("GENERAL SETTINGS", 0x777777FF, true, - [this] { mWindow->pushGui(new GuiSettingsMenu(mWindow)); } - ); + // SCRAPER > + // SOUND SETTINGS > + // UI SETTINGS > + // QUIT > + + auto openScrapeNow = [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); }; + addEntry("SCRAPER", 0x777777FF, true, + [this, openScrapeNow] { + auto s = new GuiSettings(mWindow, "SCRAPER"); - addEntry("SCRAPE NOW", 0x777777FF, true, - [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); } - ); + // scrape from + auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr > >(mWindow, false); + std::vector< std::shared_ptr > scrapers; + scrapers.push_back(std::make_shared()); + scrapers.push_back(std::make_shared()); - addEntry("RESTART SYSTEM", 0x990000FF, false, + for(auto it = scrapers.begin(); it != scrapers.end(); it++) + scraper_list->add((*it)->getName(), *it, (*it)->getName() == Settings::getInstance()->getScraper()->getName()); + + s->addWithLabel("SCRAPE FROM", scraper_list); + s->addSaveFunc([scraper_list] { Settings::getInstance()->setScraper(scraper_list->getSelected()); }); + + // scrape ratings + auto scrape_ratings = std::make_shared(mWindow); + scrape_ratings->setState(Settings::getInstance()->getBool("ScrapeRatings")); + s->addWithLabel("SCRAPE RATINGS", scrape_ratings); + s->addSaveFunc([scrape_ratings] { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); }); + + // scrape now + ComponentListRow row; + std::function openAndSave = openScrapeNow; + openAndSave = [s, openAndSave] { s->save(); openAndSave(); }; + row.makeAcceptInputHandler(openAndSave); + + auto scrape_now = std::make_shared(mWindow, "SCRAPE NOW", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + auto bracket = makeBracket(mWindow); + row.addElement(scrape_now, true); + row.addElement(bracket, false); + s->addRow(row); + + mWindow->pushGui(s); + }); + + addEntry("SOUND SETTINGS", 0x777777FF, true, [this] { - mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to restart the system?", - [] { - if(system("sudo shutdown -r now") != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - }) - );} - ); + auto s = new GuiSettings(mWindow, "SOUND SETTINGS"); - addEntry("SHUTDOWN SYSTEM", 0x990000FF, false, + // volume + auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); + volume->setValue((float)VolumeControl::getInstance()->getVolume()); + s->addWithLabel("SYSTEM VOLUME", volume); + s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)volume->getValue()); }); + + // disable sounds + auto sounds_enabled = std::make_shared(mWindow); + sounds_enabled->setState(Settings::getInstance()->getBool("EnableSounds")); + s->addWithLabel("ENABLE SOUNDS", sounds_enabled); + s->addSaveFunc([sounds_enabled] { Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); }); + + mWindow->pushGui(s); + }); + + addEntry("UI SETTINGS", 0x777777FF, true, [this] { - mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Do you really want to shutdown the system?", + auto s = new GuiSettings(mWindow, "UI SETTINGS"); + + // dim time + auto dim_time = std::make_shared(mWindow, 0.f, 1200.f, 30.f, "s"); + dim_time->setValue((float)(Settings::getInstance()->getInt("DimTime") / 1000)); + s->addWithLabel("DIM SCREEN AFTER", dim_time); + s->addSaveFunc([dim_time] { Settings::getInstance()->setInt("DimTime", (int)(dim_time->getValue() * 1000)); }); + + // framerate + auto framerate = std::make_shared(mWindow); + framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); + s->addWithLabel("SHOW FRAMERATE", framerate); + s->addSaveFunc([framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); + + // show help + auto show_help = std::make_shared(mWindow); + show_help->setState(Settings::getInstance()->getBool("ShowHelpPrompts")); + s->addWithLabel("ON-SCREEN HELP", show_help); + s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + + mWindow->pushGui(s); + }); + + addEntry("QUIT", 0x777777FF, true, + [this] { + auto s = new GuiSettings(mWindow, "QUIT"); + + Window* window = mWindow; + + ComponentListRow row; + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBoxYesNo(window, "REALLY RESTART?", + [] { + if(system("sudo shutdown -r now") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; + })); + }); + row.addElement(std::make_shared(window, "RESTART SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + s->addRow(row); + + row.elements.clear(); + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBoxYesNo(window, "REALLY SHUTDOWN?", [] { if(system("sudo shutdown -h now") != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; })); - } - ); + }); + row.addElement(std::make_shared(window, "SHUTDOWN SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + s->addRow(row); - if(Settings::getInstance()->getBool("ShowExit")) - { - addEntry("EXIT EMULATIONSTATION", 0x990000FF, false, - [] { - SDL_Event ev; - ev.type = SDL_QUIT; - SDL_PushEvent(&ev); + if(Settings::getInstance()->getBool("ShowExit")) + { + row.elements.clear(); + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBoxYesNo(window, "REALLY EXIT?", + [] { + SDL_Event ev; + ev.type = SDL_QUIT; + SDL_PushEvent(&ev); + })); + }); + row.addElement(std::make_shared(window, "EXIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x770000FF), true); + s->addRow(row); } - ); - } - + + mWindow->pushGui(s); + }); + addChild(&mMenu); + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func) @@ -66,11 +180,7 @@ void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, con if(add_arrow) { - std::shared_ptr bracket = std::make_shared(mWindow); - bracket->setImage(":/sq_bracket.png"); - if(bracket->getTextureSize().y() > font->getHeight()) - bracket->setResize(0, (float)font->getHeight()); - + std::shared_ptr bracket = makeBracket(mWindow); row.addElement(bracket, false); } diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index a99758b79..451064414 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -43,7 +43,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mMenu.setCursorToButtons(); // position menu - mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); //center it + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); //center it } void GuiMetaDataEd::save() diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 99e572173..a12e6f091 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -35,7 +35,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), row.makeAcceptInputHandler(std::bind(&GuiScraperStart::pressedStart, this)); mMenu.addRow(row); - mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, (Renderer::getScreenHeight() - mMenu.getSize().y()) / 2); + mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } void GuiScraperStart::pressedStart() diff --git a/src/guis/GuiSettings.cpp b/src/guis/GuiSettings.cpp new file mode 100644 index 000000000..1b4416e71 --- /dev/null +++ b/src/guis/GuiSettings.cpp @@ -0,0 +1,42 @@ +#include "GuiSettings.h" +#include "../Settings.h" + +GuiSettings::GuiSettings(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) +{ + addChild(&mMenu); + + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); +} + +GuiSettings::~GuiSettings() +{ + save(); +} + +void GuiSettings::save() +{ + if(!mSaveFuncs.size()) + return; + + for(auto it = mSaveFuncs.begin(); it != mSaveFuncs.end(); it++) + (*it)(); + + Settings::getInstance()->saveFile(); +} + +bool GuiSettings::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("b", input) && input.value != 0) + { + delete this; + return true; + } + + return GuiComponent::input(config, input); +} + +std::vector GuiSettings::getHelpPrompts() +{ + return mMenu.getHelpPrompts(); +} diff --git a/src/guis/GuiSettings.h b/src/guis/GuiSettings.h new file mode 100644 index 000000000..f0f31dd1a --- /dev/null +++ b/src/guis/GuiSettings.h @@ -0,0 +1,22 @@ +#include "../GuiComponent.h" +#include "../components/MenuComponent.h" + +// This is just a really simple template for a GUI that calls some save functions when closed. +class GuiSettings : public GuiComponent +{ +public: + GuiSettings(Window* window, const char* title); + virtual ~GuiSettings(); // just calls save(); + + void save(); + inline void addRow(const ComponentListRow& row) { mMenu.addRow(row); }; + inline void addWithLabel(const std::string& label, const std::shared_ptr& comp) { mMenu.addWithLabel(label, comp); }; + inline void addSaveFunc(const std::function& func) { mSaveFuncs.push_back(func); }; + + bool input(InputConfig* config, Input input) override; + std::vector getHelpPrompts() override; + +private: + MenuComponent mMenu; + std::vector< std::function > mSaveFuncs; +}; \ No newline at end of file diff --git a/src/guis/GuiSettingsMenu.cpp b/src/guis/GuiSettingsMenu.cpp deleted file mode 100644 index 71903ab0a..000000000 --- a/src/guis/GuiSettingsMenu.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include "GuiSettingsMenu.h" -#include "../Renderer.h" -#include "../Settings.h" -#include "../VolumeControl.h" -#include "../Log.h" -#include "../scrapers/TheArchiveScraper.h" -#include "../scrapers/GamesDBScraper.h" - -GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), - mMenu(mWindow, "SETTINGS") -{ - setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - - // center menu - mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); - - using namespace Eigen; - - Settings* s = Settings::getInstance(); - - // framerate - auto framerate = std::make_shared(mWindow); - framerate->setState(s->getBool("DrawFramerate")); - addSetting("Draw framerate:", framerate, - [framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); - - // volume - auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); - volume->setValue((float)VolumeControl::getInstance()->getVolume()); - addSetting("System volume:", volume, - [volume] { VolumeControl::getInstance()->setVolume((int)volume->getValue()); }); - - // disable sounds - auto sound_disable = std::make_shared(mWindow); - sound_disable->setState(s->getBool("EnableSounds")); - addSetting("Enable sounds:", sound_disable, - [sound_disable] { Settings::getInstance()->setBool("EnableSounds", sound_disable->getState()); }); - - // scraper - auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr > >(mWindow, false); - std::vector< std::shared_ptr > scrapers; - scrapers.push_back(std::make_shared()); - scrapers.push_back(std::make_shared()); - - for(auto it = scrapers.begin(); it != scrapers.end(); it++) - scraper_list->add((*it)->getName(), *it, (*it)->getName() == Settings::getInstance()->getScraper()->getName()); - - addSetting("Scraper:", scraper_list, - [scraper_list] { - Settings::getInstance()->setScraper(scraper_list->getSelected()); - }); - - // scrape ratings - auto scrape_ratings = std::make_shared(mWindow); - scrape_ratings->setState(s->getBool("ScrapeRatings")); - addSetting("Scrape ratings:", scrape_ratings, - [scrape_ratings] { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); }); - - // dim time - auto dim_time = std::make_shared(mWindow, 0.f, 1200.f, 30.f, "s"); - dim_time->setValue((float)(s->getInt("DimTime") / 1000)); - addSetting("Dim screen after:", dim_time, - [dim_time] { Settings::getInstance()->setInt("DimTime", (int)(dim_time->getValue() * 1000)); }); - - // disable help - auto disable_help = std::make_shared(mWindow); - disable_help->setState(s->getBool("ShowHelpPrompts")); - addSetting("Show help:", disable_help, - [disable_help] { Settings::getInstance()->setBool("ShowHelpPrompts", disable_help->getState()); }); - - // save button - ComponentListRow row; - row.addElement(std::make_shared(mWindow, "SAVE", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.makeAcceptInputHandler(std::bind(&GuiSettingsMenu::save, this)); - mMenu.addRow(row); - - addChild(&mMenu); -} - -void GuiSettingsMenu::addSetting(const char* label, const std::shared_ptr& comp, const std::function& saveFunc) -{ - ComponentListRow row; - row.addElement(std::make_shared(mWindow, label, Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(comp, false); - mApplyFuncs.push_back(saveFunc); - mMenu.addRow(row); -} - -bool GuiSettingsMenu::input(InputConfig* config, Input input) -{ - //let our children (read: list) go first - if(GuiComponent::input(config, input)) - return true; - - //cancel if b is pressed - if(config->isMappedTo("b", input) && input.value != 0) - { - delete this; - return true; - } - - return false; -} - -void GuiSettingsMenu::save() -{ - LOG(LogInfo) << "saving"; - - for(auto it = mApplyFuncs.begin(); it != mApplyFuncs.end(); it++) - (*it)(); - - Settings::getInstance()->saveFile(); - - delete this; -} - -std::vector GuiSettingsMenu::getHelpPrompts() -{ - std::vector prompts = mMenu.getHelpPrompts(); - prompts.push_back(HelpPrompt("b", "discard changes")); - return prompts; -} diff --git a/src/guis/GuiSettingsMenu.h b/src/guis/GuiSettingsMenu.h deleted file mode 100644 index 6f542dd75..000000000 --- a/src/guis/GuiSettingsMenu.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include "../GuiComponent.h" -#include "../components/MenuComponent.h" -#include "../components/SwitchComponent.h" -#include "../components/SliderComponent.h" -#include "../components/TextComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/OptionListComponent.h" -#include "../components/ButtonComponent.h" -#include "../scrapers/Scraper.h" - -class GuiSettingsMenu : public GuiComponent -{ -public: - GuiSettingsMenu(Window* window); - - bool input(InputConfig* config, Input input) override; - - std::vector getHelpPrompts() override; - -private: - void addSetting(const char* label, const std::shared_ptr& comp, const std::function& saveFunc); - void save(); - - std::vector< std::function > mApplyFuncs; - - MenuComponent mMenu; -}; From 18b428f79a0bb2a5ad29f15b44ba1f53ee9696b3 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 13 Mar 2014 14:09:50 -0500 Subject: [PATCH 192/386] Fixed help system being broken for MenuComponent. Still missing in a few places. Added some "BACK" buttons to various GUIs. --- src/components/ComponentGrid.cpp | 4 ++-- src/components/ComponentList.cpp | 10 ++++++++ src/components/ComponentList.h | 1 + src/components/MenuComponent.cpp | 5 ++++ src/components/MenuComponent.h | 2 ++ src/components/OptionListComponent.h | 36 ++++++++++++++++++++++------ src/components/TextListComponent.h | 3 +-- src/guis/GuiMenu.cpp | 14 ++++++++--- src/guis/GuiMenu.h | 1 + src/guis/GuiScraperStart.cpp | 18 ++++++-------- src/guis/GuiScraperStart.h | 2 +- src/guis/GuiSettings.cpp | 8 ++++++- 12 files changed, 77 insertions(+), 27 deletions(-) diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index 37c379142..f73257876 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -412,8 +412,8 @@ std::vector ComponentGrid::getHelpPrompts() if(e) prompts = e->component->getHelpPrompts(); - bool canScrollVert = true; - bool canScrollHoriz = true; + bool canScrollVert = mGridSize.y() > 1; + bool canScrollHoriz = mGridSize.x() > 1; for(auto it = prompts.begin(); it != prompts.end(); it++) { if(it->first == "up/down/left/right") diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index d21ede3ff..2b03190e2 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -117,6 +117,8 @@ void ComponentList::onCursorChanged(const CursorState& state) else if(mCameraOffset + mSize.y() > totalHeight) mCameraOffset = totalHeight - mSize.y(); } + + updateHelpPrompts(); } void ComponentList::render(const Eigen::Affine3f& parentTrans) @@ -238,3 +240,11 @@ void ComponentList::updateElementSize(const ComponentListRow& row) (*it)->setSize(width, (*it)->getSize().y()); } } + +std::vector ComponentList::getHelpPrompts() +{ + if(!size()) + return std::vector(); + + return mEntries.at(mCursor).data.elements.back().component->getHelpPrompts(); +} diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index 23dad2f32..baf736e10 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -50,6 +50,7 @@ public: bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; + virtual std::vector getHelpPrompts() override; void onSizeChanged() override; void onFocusGained() override; diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index fa053d648..3bc1eac68 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -77,3 +77,8 @@ void MenuComponent::updateGrid() mButtonGrid.reset(); } } + +std::vector MenuComponent::getHelpPrompts() +{ + return mGrid.getHelpPrompts(); +} diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 937515c47..a39bfef33 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -30,6 +30,8 @@ public: inline void setCursorToList() { mGrid.setCursorTo(mList); } inline void setCursorToButtons() { assert(mButtonGrid); mGrid.setCursorTo(mButtonGrid); } + virtual std::vector getHelpPrompts() override; + private: void updateSize(); void updateGrid(); diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 3f7da5a98..1c9ac6d07 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -37,8 +37,8 @@ private: OptionListComponent* mParent; public: - OptionListPopup(Window* window, OptionListComponent* parent) : GuiComponent(window), - mMenu(window, ""), mParent(parent) + OptionListPopup(Window* window, OptionListComponent* parent, const std::string& title) : GuiComponent(window), + mMenu(window, title.c_str()), mParent(parent) { auto font = Font::get(FONT_SIZE_MEDIUM); ComponentListRow row; @@ -85,7 +85,10 @@ private: mMenu.addRow(row, (!mParent->mMultiSelect && it->selected)); } - mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, (Renderer::getScreenHeight() - mMenu.getSize().y()) / 2); + if(mParent->mMultiSelect) + mMenu.addButton("BACK", "accept", [this] { delete this; }); + + mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); addChild(&mMenu); } @@ -102,7 +105,7 @@ private: }; public: - OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), + OptionListComponent(Window* window, const std::string& name, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), mName(name), mText(window), mLeftArrow(window), mRightArrow(window) { auto font = Font::get(FONT_SIZE_MEDIUM); @@ -124,10 +127,10 @@ public: addChild(&mRightArrow); } - // handles positioning/resizing of text and arrows - setSize(Renderer::getScreenWidth() * 0.2f, (float)font->getHeight()); + setSize(mLeftArrow.getSize().x() + mRightArrow.getSize().x(), (float)font->getHeight()); } + // handles positioning/resizing of text and arrows void onSizeChanged() override { // size @@ -239,7 +242,7 @@ private: void open() { - mWindow->pushGui(new OptionListPopup(mWindow, this)); + mWindow->pushGui(new OptionListPopup(mWindow, this, mName)); } void onSelectedChanged() @@ -250,6 +253,10 @@ private: std::stringstream ss; ss << getSelectedObjects().size() << " selected"; mText.setText(ss.str()); + mText.setSize(0, mText.getSize().y()); + setSize(mText.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y()); + if(mParent) // hack since theres no "on child size changed" callback atm... + mParent->onSizeChanged(); }else{ // display currently selected + l/r cursors for(auto it = mEntries.begin(); it != mEntries.end(); it++) @@ -257,14 +264,29 @@ private: if(it->selected) { mText.setText(it->name); + mText.setSize(0, mText.getSize().y()); + setSize(mText.getSize().x() + mLeftArrow.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y()); + if(mParent) // hack since theres no "on child size changed" callback atm... + mParent->onSizeChanged(); break; } } } } + std::vector getHelpPrompts() override + { + std::vector prompts; + if(!mMultiSelect) + prompts.push_back(HelpPrompt("left/right", "change")); + + prompts.push_back(HelpPrompt("a", "change")); + return prompts; + } + bool mMultiSelect; + std::string mName; TextComponent mText; ImageComponent mLeftArrow; ImageComponent mRightArrow; diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 973709321..55072be15 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -60,8 +60,7 @@ public: inline void setFont(const std::shared_ptr& font) { mFont = font; - this->mTitleOverlayFont = Font::get(FONT_SIZE_LARGE, mFont->getPath()); - + for(auto it = mEntries.begin(); it != mEntries.end(); it++) it->data.textCache.reset(); } diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 35271ef4e..e0c731260 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -44,7 +44,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN auto s = new GuiSettings(mWindow, "SCRAPER"); // scrape from - auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr > >(mWindow, false); + auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr > >(mWindow, "SCRAPE FROM", false); std::vector< std::shared_ptr > scrapers; scrapers.push_back(std::make_shared()); scrapers.push_back(std::make_shared()); @@ -152,14 +152,14 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN { row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBoxYesNo(window, "REALLY EXIT?", + window->pushGui(new GuiMsgBoxYesNo(window, "REALLY QUIT?", [] { SDL_Event ev; ev.type = SDL_QUIT; SDL_PushEvent(&ev); })); }); - row.addElement(std::make_shared(window, "EXIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x770000FF), true); + row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); } @@ -199,3 +199,11 @@ bool GuiMenu::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } + +std::vector GuiMenu::getHelpPrompts() +{ + std::vector prompts; + prompts.push_back(HelpPrompt("up/down", "move cursor")); + prompts.push_back(HelpPrompt("a", "accept")); + return prompts; +} diff --git a/src/guis/GuiMenu.h b/src/guis/GuiMenu.h index 8dc13d636..a9f746e38 100644 --- a/src/guis/GuiMenu.h +++ b/src/guis/GuiMenu.h @@ -10,6 +10,7 @@ public: GuiMenu(Window* window); bool input(InputConfig* config, Input input) override; + std::vector getHelpPrompts() override; private: void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index a12e6f091..8275d7b93 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -12,7 +12,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), addChild(&mMenu); // add filters (with first one selected) - mFilters = std::make_shared< OptionListComponent >(mWindow, false); + mFilters = std::make_shared< OptionListComponent >(mWindow, "SCRAPE THESE GAMES", false); mFilters->add("All Games", [](SystemData*, FileData*) -> bool { return true; }, true); mFilters->add("Only missing image", @@ -20,20 +20,16 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mMenu.addWithLabel("Filter", mFilters); //add systems (all with a platformid specified selected) - mSystems = std::make_shared< OptionListComponent >(mWindow, true); + mSystems = std::make_shared< OptionListComponent >(mWindow, "SCRAPE THESE SYSTEMS", true); for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) mSystems->add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); mMenu.addWithLabel("Systems", mSystems); - mAutoStyle = std::make_shared< OptionListComponent >(mWindow, false); - mAutoStyle->add("Never automatically accept result", 0, true); - mAutoStyle->add("Always accept first result", 1, false); - mMenu.addWithLabel("Auto style", mAutoStyle); + mApproveResults = std::make_shared(mWindow); + mApproveResults->setState(true); + mMenu.addWithLabel("User decides on conflicts", mApproveResults); - ComponentListRow row; - row.addElement(std::make_shared(mWindow, "GO GO GO", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.makeAcceptInputHandler(std::bind(&GuiScraperStart::pressedStart, this)); - mMenu.addRow(row); + mMenu.addButton("START", "start scraping", std::bind(&GuiScraperStart::pressedStart, this)); mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } @@ -58,7 +54,7 @@ void GuiScraperStart::start() { std::queue searches = getSearches(mSystems->getSelectedObjects(), mFilters->getSelected()); - GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mAutoStyle->getSelected() == 0); + GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mApproveResults->getState()); mWindow->pushGui(gsl); gsl->start(); delete this; diff --git a/src/guis/GuiScraperStart.h b/src/guis/GuiScraperStart.h index 50bd298b6..d6d854f8a 100644 --- a/src/guis/GuiScraperStart.h +++ b/src/guis/GuiScraperStart.h @@ -32,7 +32,7 @@ private: std::shared_ptr< OptionListComponent > mFilters; std::shared_ptr< OptionListComponent > mSystems; - std::shared_ptr< OptionListComponent > mAutoStyle; + std::shared_ptr mApproveResults; MenuComponent mMenu; }; diff --git a/src/guis/GuiSettings.cpp b/src/guis/GuiSettings.cpp index 1b4416e71..427c0976b 100644 --- a/src/guis/GuiSettings.cpp +++ b/src/guis/GuiSettings.cpp @@ -5,6 +5,8 @@ GuiSettings::GuiSettings(Window* window, const char* title) : GuiComponent(windo { addChild(&mMenu); + mMenu.addButton("BACK", "go back", [this] { delete this; }); + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } @@ -38,5 +40,9 @@ bool GuiSettings::input(InputConfig* config, Input input) std::vector GuiSettings::getHelpPrompts() { - return mMenu.getHelpPrompts(); + std::vector prompts = mMenu.getHelpPrompts(); + + prompts.push_back(HelpPrompt("b", "go back")); + + return prompts; } From 45ffbf978c9eec544bb29af391d12f7c460aac02 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 13 Mar 2014 22:14:49 -0500 Subject: [PATCH 193/386] Added --home-path [path] argument that redirects calls to getHomePath() to some directory [path]. Changed some existing command line arguments too: -w and -h are now just --resolution [width] [height]. -h is now synonymous with --help. --- DEVNOTES.md | 2 +- README.md | 11 +++++------ src/Settings.h | 3 +++ src/main.cpp | 35 ++++++++++++++++++++++++----------- src/platform.cpp | 24 ++++++++++++++++-------- src/platform.h | 3 ++- 6 files changed, 51 insertions(+), 27 deletions(-) diff --git a/DEVNOTES.md b/DEVNOTES.md index 7ec034477..d9d207aec 100644 --- a/DEVNOTES.md +++ b/DEVNOTES.md @@ -8,7 +8,7 @@ Development Environment I personally launch ES in windowed mode with a smaller resolution than my monitor and with debug text enabled. -`emulationstation --windowed --debug -w 1280 -h 720` +`emulationstation --windowed --debug --resolution 1280 720` Creating a new GuiComponent diff --git a/README.md b/README.md index 926b81f09..c68daaf24 100644 --- a/README.md +++ b/README.md @@ -91,23 +91,22 @@ When you first start EmulationStation, you will be prompted to configure any inp As long as ES hasn't frozen, you can always press F4 to close the application. -**Keep in mind you'll have to set up your emulator separately from EmulationStation.** -I am currently also working on a stand-alone tool, [ES-config](https://github.com/Aloshi/ES-config), that should help make configuring emulators easier. +**Keep in mind you'll have to set up your emulator separately from EmulationStation!** After you launch a game, EmulationStation will return once your system's command terminates (i.e. your emulator closes). -You can use `--help` to view a list of command-line options. Briefly outlined here: +You can use `--help` or `-h` to view a list of command-line options. Briefly outlined here: ``` --w [width] - specify resolution width. --h [height] - specify resolution height. +--resolution [width] [height] - try and force a particular resolution --gamelist-only - only display games defined in a gamelist.xml file. --ignore-gamelist - do not parse any gamelist.xml files. --draw-framerate - draw the framerate. --no-exit - do not display 'exit' in the ES menu. --debug - print additional output to the console, primarily about input. ---windowed - run ES in a window. +--windowed - run ES in a window, works best in conjunction with --resolution [w] [h]. --scrape - run the interactive command-line metadata scraper. +--home-path [path] - use [path] instead of the "home" environment variable (useful for portable installations). ``` Writing an es_systems.cfg diff --git a/src/Settings.h b/src/Settings.h index 9f7e69d24..1ea193572 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -25,6 +25,7 @@ public: std::shared_ptr getScraper(); void setScraper(std::shared_ptr scraper); + private: static Settings* sInstance; @@ -36,7 +37,9 @@ private: std::map mBoolMap; std::map mIntMap; std::map mFloatMap; + std::shared_ptr mScraper; + std::string mHomePathOverride; }; #endif diff --git a/src/main.cpp b/src/main.cpp index 6b1df845b..6b9479917 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,14 +26,17 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height { for(int i = 1; i < argc; i++) { - if(strcmp(argv[i], "-w") == 0) + if(strcmp(argv[i], "--resolution") == 0) { + if(i >= argc - 2) + { + std::cerr << "Invalid resolution supplied."; + return false; + } + *width = atoi(argv[i + 1]); - i++; //skip the argument value - }else if(strcmp(argv[i], "-h") == 0) - { - *height = atoi(argv[i + 1]); - i++; //skip the argument value + *height = atoi(argv[i + 2]); + i += 2; // skip the argument value }else if(strcmp(argv[i], "--gamelist-only") == 0) { Settings::getInstance()->setBool("ParseGamelistOnly", true); @@ -56,20 +59,30 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--scrape") == 0) { scrape_cmdline = true; - }else if(strcmp(argv[i], "--help") == 0) + }else if(strcmp(argv[i], "--home-path") == 0) + { + if(i >= argc - 1) + { + std::cerr << "No home path specified!\n"; + return false; + } + + setHomePathOverride(argv[i + 1]); + }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n"; + std::cout << "Written by Alec \"Aloshi\" Lofquist.\n"; std::cout << "Command line arguments:\n"; - std::cout << "-w [width in pixels] set screen width\n"; - std::cout << "-h [height in pixels] set screen height\n"; + std::cout << "--resolution [width] [height] try and force a particular resolution\n"; std::cout << "--gamelist-only skip automatic game detection, only read from gamelist.xml\n"; std::cout << "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n"; std::cout << "--draw-framerate display the framerate\n"; std::cout << "--no-exit don't show the exit option in the menu\n"; std::cout << "--debug even more logging\n"; std::cout << "--scrape scrape using command line interface\n"; - std::cout << "--windowed not fullscreen, should be used in conjunction with -w and -h\n"; - std::cout << "--help summon a sentient, angry tuba\n\n"; + std::cout << "--windowed not fullscreen, should be used in conjunction with --resolution\n"; + std::cout << "--home-path [path] use [path] instead of the \"home\" environment variable (for portable installations)\n"; + std::cout << "--help, -h summon a sentient, angry tuba\n\n"; std::cout << "More information available in README.md.\n"; return false; //exit after printing help } diff --git a/src/platform.cpp b/src/platform.cpp index 856161302..be7752d91 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -2,18 +2,30 @@ #include #include +std::string sHomePathOverride; + +void setHomePathOverride(const std::string& path) +{ + // make it use generic directory separators + sHomePathOverride = boost::filesystem::path(path).generic_string(); +} std::string getHomePath() { + if(!sHomePathOverride.empty()) + return sHomePathOverride; + std::string homePath; - //this should give you something like "/home/YOUR_USERNAME" on Linux and "C:\Users\YOUR_USERNAME\" on Windows + // this should give you something like "/home/YOUR_USERNAME" on Linux and "C:\Users\YOUR_USERNAME\" on Windows const char * envHome = getenv("HOME"); - if(envHome != nullptr) { + if(envHome != nullptr) + { homePath = envHome; } + #ifdef WIN32 - //but does not seem to work for Windwos XP or Vista, so try something else + // but does not seem to work for Windwos XP or Vista, so try something else if (homePath.empty()) { const char * envDir = getenv("HOMEDRIVE"); const char * envPath = getenv("HOMEPATH"); @@ -26,13 +38,9 @@ std::string getHomePath() homePath[i] = '/'; } } -#else - if (homePath.empty()) { - homePath = "~"; - } #endif - //convert path to generic directory seperators + // convert path to generic directory seperators boost::filesystem::path genericPath(homePath); return genericPath.generic_string(); } diff --git a/src/platform.h b/src/platform.h index a0bb68251..aa94d313f 100644 --- a/src/platform.h +++ b/src/platform.h @@ -17,4 +17,5 @@ #include -std::string getHomePath(); \ No newline at end of file +std::string getHomePath(); +void setHomePathOverride(const std::string& path); From 088b146fe93d496b7b7bbd5bb47ef5824d5eee76 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 15 Mar 2014 12:18:50 -0500 Subject: [PATCH 194/386] Redid message boxes. --- CMakeLists.txt | 6 +-- src/components/ComponentGrid.cpp | 7 ++- src/components/MenuComponent.cpp | 31 ++++++++----- src/components/MenuComponent.h | 2 + src/guis/GuiMenu.cpp | 14 +++--- src/guis/GuiMetaDataEd.cpp | 4 +- src/guis/GuiMsgBox.cpp | 69 ++++++++++++++++++++++++++++ src/guis/GuiMsgBox.h | 31 +++++++++++++ src/guis/GuiMsgBoxOk.cpp | 50 --------------------- src/guis/GuiMsgBoxOk.h | 25 ----------- src/guis/GuiMsgBoxYesNo.cpp | 77 -------------------------------- src/guis/GuiMsgBoxYesNo.h | 25 ----------- src/guis/GuiScraperStart.cpp | 8 ++-- 13 files changed, 145 insertions(+), 204 deletions(-) create mode 100644 src/guis/GuiMsgBox.cpp create mode 100644 src/guis/GuiMsgBox.h delete mode 100644 src/guis/GuiMsgBoxOk.cpp delete mode 100644 src/guis/GuiMsgBoxOk.h delete mode 100644 src/guis/GuiMsgBoxYesNo.cpp delete mode 100644 src/guis/GuiMsgBoxYesNo.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 61bdad719..b5d41510d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -184,8 +184,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxOk.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxYesNo.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h @@ -264,8 +263,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxOk.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBoxYesNo.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index f73257876..e73b45629 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -88,7 +88,11 @@ void ComponentGrid::setEntry(const std::shared_ptr& comp, const Ei addChild(comp.get()); if(!cursorValid() && canFocus) + { + auto origCursor = mCursor; mCursor = pos; + onCursorMoved(origCursor, mCursor); + } updateCellComponent(mCells.back()); updateSeparators(); @@ -327,7 +331,8 @@ void ComponentGrid::onFocusGained() bool ComponentGrid::cursorValid() { - return getCellAt(mCursor) != NULL; + GridEntry* e = getCellAt(mCursor); + return (e != NULL && e->canFocus); } void ComponentGrid::update(int deltaTime) diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 3bc1eac68..2ea74dd65 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -61,17 +61,8 @@ void MenuComponent::updateGrid() if(mButtons.size()) { - mButtonGrid = std::make_shared(mWindow, Vector2i(mButtons.size(), 1)); + mButtonGrid = makeButtonGrid(mWindow, mButtons); - float buttonGridWidth = 16.0f * mButtons.size(); // initialize to padding - for(int i = 0; i < (int)mButtons.size(); i++) - { - mButtonGrid->setEntry(mButtons.at(i), Vector2i(i, 0), true, false); - buttonGridWidth += mButtons.at(i)->getSize().x(); - } - - mButtonGrid->setSize(buttonGridWidth, mButtons.at(0)->getSize().y()); - mGrid.setEntry(mButtonGrid, Vector2i(0, 2), true, false); }else{ mButtonGrid.reset(); @@ -82,3 +73,23 @@ std::vector MenuComponent::getHelpPrompts() { return mGrid.getHelpPrompts(); } + +std::shared_ptr makeButtonGrid(Window* window, const std::vector< std::shared_ptr >& buttons) +{ + std::shared_ptr buttonGrid = std::make_shared(window, Vector2i(buttons.size(), 1)); + + float buttonGridWidth = 16.0f * buttons.size(); // initialize to padding + for(int i = 0; i < (int)buttons.size(); i++) + { + buttonGrid->setEntry(buttons.at(i), Vector2i(i, 0), true, false); + buttonGridWidth += buttons.at(i)->getSize().x(); + } + for(unsigned int i = 0; i < buttons.size(); i++) + { + buttonGrid->setColWidthPerc(i, (buttons.at(i)->getSize().x() + 16) / buttonGridWidth); + } + + buttonGrid->setSize(buttonGridWidth, buttons.at(0)->getSize().y()); + + return buttonGrid; +} diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index a39bfef33..c1068908f 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -8,6 +8,8 @@ class ButtonComponent; +std::shared_ptr makeButtonGrid(Window* window, const std::vector< std::shared_ptr >& buttons); + class MenuComponent : public GuiComponent { public: diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index e0c731260..5a7f1981e 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -3,7 +3,7 @@ #include "../Sound.h" #include "../Log.h" #include "../Settings.h" -#include "GuiMsgBoxYesNo.h" +#include "GuiMsgBox.h" #include "GuiSettings.h" #include "GuiScraperStart.h" @@ -128,22 +128,22 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN ComponentListRow row; row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBoxYesNo(window, "REALLY RESTART?", + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { if(system("sudo shutdown -r now") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; - })); + }, "NO", nullptr)); }); row.addElement(std::make_shared(window, "RESTART SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBoxYesNo(window, "REALLY SHUTDOWN?", + window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", [] { if(system("sudo shutdown -h now") != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; - })); + }, "NO", nullptr)); }); row.addElement(std::make_shared(window, "SHUTDOWN SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); @@ -152,12 +152,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN { row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBoxYesNo(window, "REALLY QUIT?", + window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", [] { SDL_Event ev; ev.type = SDL_QUIT; SDL_PushEvent(&ev); - })); + }, "NO", nullptr)); }); row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 451064414..b59915dbe 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -4,7 +4,7 @@ #include "../components/AsyncReqComponent.h" #include "../Settings.h" #include "GuiGameScraper.h" -#include "GuiMsgBoxYesNo.h" +#include "GuiMsgBox.h" #include GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, @@ -35,7 +35,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector if(mDeleteFunc) { auto deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; - auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "This will delete a file!\nAre you sure?", deleteFileAndSelf)); }; + auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBox(mWindow, "This will delete a file!\nAre you sure?", "YES", deleteFileAndSelf, "NO", nullptr)); }; mMenu.addButton("DELETE", "delete this game on disk", deleteBtnFunc); } diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp new file mode 100644 index 000000000..3db5a3ff8 --- /dev/null +++ b/src/guis/GuiMsgBox.cpp @@ -0,0 +1,69 @@ +#include "GuiMsgBox.h" +#include "../Renderer.h" +#include "../components/TextComponent.h" +#include "../components/ButtonComponent.h" +#include "../components/MenuComponent.h" // for makeButtonGrid + +#define BUTTON_VERT_PADDING 16.0f + +GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, + const std::string& name1, const std::function& func1, + const std::string& name2, const std::function& func2, + const std::string& name3, const std::function& func3) : GuiComponent(window), + mBackground(window, ":/frame.png"), mGrid(window, Eigen::Vector2i(1, 2)) +{ + float width = Renderer::getScreenWidth() * 0.6f; // max width + float minWidth = Renderer::getScreenWidth() * 0.3f; // minimum width + + mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, true); + + // create the buttons + mButtons.push_back(std::make_shared(mWindow, name1, name1, std::bind(&GuiMsgBox::deleteMeAndCall, this, func1))); + if(!name2.empty()) + mButtons.push_back(std::make_shared(mWindow, name2, name3, std::bind(&GuiMsgBox::deleteMeAndCall, this, func2))); + if(!name3.empty()) + mButtons.push_back(std::make_shared(mWindow, name3, name3, std::bind(&GuiMsgBox::deleteMeAndCall, this, func3))); + + // put the buttons into a ComponentGrid + mButtonGrid = makeButtonGrid(mWindow, mButtons); + + mGrid.setEntry(mMsg, Eigen::Vector2i(0, 0), false, true); + mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 1), true, false); + + if(mMsg->getSize().x() > width) + { + mMsg->setSize(width, 0); + }else{ + // mMsg is narrower than width + // are buttons? + if(mButtonGrid->getSize().x() < width) + { + width = std::max(mButtonGrid->getSize().x(), mMsg->getSize().x()); + width = std::max(width, minWidth); + } + } + + setSize(width, mMsg->getSize().y() + mButtonGrid->getSize().y() + BUTTON_VERT_PADDING); + + // center for good measure + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2.0f, (Renderer::getScreenHeight() - mSize.y()) / 2.0f); + + addChild(&mBackground); + addChild(&mGrid); +} + +void GuiMsgBox::onSizeChanged() +{ + mGrid.setSize(mSize); + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-16, -32)); + + mGrid.setRowHeightPerc(1, (mButtonGrid->getSize().y() + BUTTON_VERT_PADDING) / mSize.y()); +} + +void GuiMsgBox::deleteMeAndCall(const std::function& func) +{ + if(func) + func(); + + delete this; +} diff --git a/src/guis/GuiMsgBox.h b/src/guis/GuiMsgBox.h new file mode 100644 index 000000000..148d3ca04 --- /dev/null +++ b/src/guis/GuiMsgBox.h @@ -0,0 +1,31 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/ComponentGrid.h" + +class TextComponent; +class ButtonComponent; + +class GuiMsgBox : public GuiComponent +{ +public: + GuiMsgBox(Window* window, const std::string& text, + const std::string& name1 = "OK", const std::function& func1 = nullptr, + const std::string& name2 = "", const std::function& func2 = nullptr, + const std::string& name3 = "", const std::function& func3 = nullptr); + + void onSizeChanged() override; + +private: + void deleteMeAndCall(const std::function& func); + + NinePatchComponent mBackground; + ComponentGrid mGrid; + + + std::shared_ptr mMsg; + std::vector< std::shared_ptr > mButtons; + std::shared_ptr mButtonGrid; + +}; diff --git a/src/guis/GuiMsgBoxOk.cpp b/src/guis/GuiMsgBoxOk.cpp deleted file mode 100644 index 5f99238f1..000000000 --- a/src/guis/GuiMsgBoxOk.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "GuiMsgBoxOk.h" -#include "../Renderer.h" - -#define MSG_WIDTH 0.8f -#define MSG_PADDING ((1 - MSG_WIDTH) / 2) - -GuiMsgBoxOk::GuiMsgBoxOk(Window* window, const std::string& text, std::function callback) : GuiComponent(window), - mCallback(callback), - mBackground(window), - mText(window), - mOkText(window) -{ - mText.setCentered(true); - mText.setColor(0x00BB00FF); - mText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); - mText.setText(text); - - mOkText.setCentered(true); - mOkText.setColor(0x0044BBFF); - mOkText.setFont(Font::get(FONT_SIZE_SMALL)); - mOkText.setSize(Renderer::getScreenWidth() * MSG_WIDTH, 0); - mOkText.setText("[A]"); - - mText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, (Renderer::getScreenHeight() - mText.getSize().y() - mOkText.getSize().y()) / 2); - mOkText.setPosition(Renderer::getScreenWidth() * MSG_PADDING, mText.getPosition().y() + mText.getSize().y()); -} - -bool GuiMsgBoxOk::input(InputConfig* config, Input input) -{ - if(input.value != 0 && - (config->isMappedTo("a", input) || config->isMappedTo("b", input))) - { - if(mCallback) - mCallback(); - - delete this; - return true; - } - - return false; -} - -void GuiMsgBoxOk::render(const Eigen::Affine3f& parentTrans) -{ - float height = mText.getSize().y() + mOkText.getSize().y(); - Renderer::setMatrix(parentTrans); - Renderer::drawRect(0, (int)((Renderer::getScreenHeight() - height) / 2), Renderer::getScreenWidth(), (int)height, 0x111111FF); - mText.render(parentTrans); - mOkText.render(parentTrans); -} diff --git a/src/guis/GuiMsgBoxOk.h b/src/guis/GuiMsgBoxOk.h deleted file mode 100644 index 6df26b7e0..000000000 --- a/src/guis/GuiMsgBoxOk.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include "../GuiComponent.h" -#include "../components/TextComponent.h" -#include "../components/NinePatchComponent.h" -#include - -//A simple popup message box with callbacks for when the user dismisses it. -//Make sure you remember to push it onto the window! -class GuiMsgBoxOk : public GuiComponent -{ -public: - GuiMsgBoxOk(Window* window, const std::string& msg, std::function okCallback = nullptr); - - bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& parentTrans) override; - -private: - std::function mCallback; - - NinePatchComponent mBackground; - - TextComponent mText; - TextComponent mOkText; -}; diff --git a/src/guis/GuiMsgBoxYesNo.cpp b/src/guis/GuiMsgBoxYesNo.cpp deleted file mode 100644 index 60bbba0a0..000000000 --- a/src/guis/GuiMsgBoxYesNo.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "GuiMsgBoxYesNo.h" -#include "../Renderer.h" - -GuiMsgBoxYesNo::GuiMsgBoxYesNo(Window* window, const std::string& text, std::function yesCallback, std::function noCallback) : GuiComponent(window), - mYesCallback(yesCallback), - mNoCallback(noCallback), - mBackground(window), - mText(window), - mInputText(window) -{ - const float paddingX = 32; - const float paddingY = 16; - - const float maxWidth = Renderer::getScreenWidth() * 0.7f; - - float width = mText.getFont()->sizeText(text).x() + paddingX; - if(width > maxWidth) - width = maxWidth; - - mText.setCentered(true); - mText.setColor(0x777777FF); - mText.setPosition(paddingX / 2, paddingY / 2); - mText.setSize(width - paddingX, 0); - mText.setText(text); - - mInputText.setCentered(true); - mInputText.setColor(0x0044BBFF); - mInputText.setFont(Font::get(FONT_SIZE_SMALL)); - mInputText.setPosition(paddingX / 2, mText.getPosition().y() + mText.getSize().y()); - mInputText.setSize(width - paddingX, 0); - mInputText.setText("[A - yes] [B - no]"); - - setSize(width, mInputText.getPosition().y() + mInputText.getSize().y() + paddingY/2); - setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); - - mBackground.setImagePath(":/frame.png"); - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); -} - -bool GuiMsgBoxYesNo::input(InputConfig* config, Input input) -{ - if(input.value != 0) - { - if(config->isMappedTo("a", input)) - { - if(mYesCallback) - mYesCallback(); - - delete this; - return true; - }else if(config->isMappedTo("b", input)) - { - if(mNoCallback) - mNoCallback(); - - delete this; - return true; - } - } - - return false; -} - -void GuiMsgBoxYesNo::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - - mBackground.render(trans); - - Renderer::setMatrix(trans); - Renderer::drawRect(0, (int)(mText.getPosition().y() + mText.getSize().y()), (int)mSize.x(), 1, 0xC6C7C6FF); - - mText.render(trans); - mInputText.render(trans); - - renderChildren(trans); -} diff --git a/src/guis/GuiMsgBoxYesNo.h b/src/guis/GuiMsgBoxYesNo.h deleted file mode 100644 index e2e118895..000000000 --- a/src/guis/GuiMsgBoxYesNo.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include "../GuiComponent.h" -#include "../components/TextComponent.h" -#include "../components/NinePatchComponent.h" -#include - -//A simple "yes or no" popup box with callbacks for yes or no. -//Make sure you remember to push it onto the window! -class GuiMsgBoxYesNo : public GuiComponent -{ -public: - GuiMsgBoxYesNo(Window* window, const std::string& msg, std::function yesCallback = nullptr, std::function noCallback = nullptr); - - bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& trans) override; - -private: - std::function mYesCallback, mNoCallback; - - NinePatchComponent mBackground; - - TextComponent mText; - TextComponent mInputText; -}; diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 8275d7b93..e20cf4cb5 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -1,6 +1,6 @@ #include "GuiScraperStart.h" #include "GuiScraperLog.h" -#include "GuiMsgBoxYesNo.h" +#include "GuiMsgBox.h" #include "../components/TextComponent.h" #include "../components/OptionListComponent.h" @@ -41,8 +41,10 @@ void GuiScraperStart::pressedStart() { if((*it)->getPlatformId() == PlatformIds::PLATFORM_UNKNOWN) { - mWindow->pushGui(new GuiMsgBoxYesNo(mWindow, "Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?", - std::bind(&GuiScraperStart::start, this))); + mWindow->pushGui(new GuiMsgBox(mWindow, + "Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?", + "YES", std::bind(&GuiScraperStart::start, this), + "NO", nullptr)); return; } } From 613787931a0621a4ed2158f024be55bb4b325534 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 15 Mar 2014 13:39:19 -0500 Subject: [PATCH 195/386] Added a border above buttons on GuiMsgBox. Reluctantly changed button font to FONT_SIZE_MEDIUM because FONT_SIZE_SMALL has messed up sizing for some unknown reason. --- src/components/ButtonComponent.cpp | 16 ++++++---------- src/components/ButtonComponent.h | 2 +- src/guis/GuiMsgBox.cpp | 6 +++--- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 02b1d7042..2336e3698 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -2,9 +2,11 @@ #include "../Renderer.h" #include "../Window.h" #include "../Util.h" +#include "../Log.h" ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), + mFont(Font::get(FONT_SIZE_MEDIUM)), mFocused(false), mEnabled(true), mTextColorFocused(0xFFFFFFFF), mTextColorUnfocused(0x777777FF) @@ -40,10 +42,9 @@ void ButtonComponent::setText(const std::string& text, const std::string& helpTe mText = strToUpper(text); mHelpText = helpText; - std::shared_ptr f = getFont(); - mTextCache = std::unique_ptr(f->buildTextCache(mText, 0, 0, getCurTextColor())); - - setSize(mTextCache->metrics.size + Eigen::Vector2f(12, 12)); + mTextCache = std::unique_ptr(mFont->buildTextCache(mText, 0, 0, getCurTextColor())); + + setSize(mTextCache->metrics.size + Eigen::Vector2f(12, 0)); updateHelpPrompts(); } @@ -94,18 +95,13 @@ void ButtonComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); mTextCache->setColor(getCurTextColor()); - getFont()->renderTextCache(mTextCache.get()); + mFont->renderTextCache(mTextCache.get()); trans = trans.translate(-centerOffset); } renderChildren(trans); } -std::shared_ptr ButtonComponent::getFont() -{ - return Font::get(FONT_SIZE_SMALL); -} - unsigned int ButtonComponent::getCurTextColor() const { if(!mFocused) diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index b82211438..1d3b8ce8e 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -26,7 +26,7 @@ public: virtual std::vector getHelpPrompts() override; private: - std::shared_ptr getFont(); + std::shared_ptr mFont; std::function mPressedFunc; bool mFocused; diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 3db5a3ff8..255d1c21f 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -4,7 +4,7 @@ #include "../components/ButtonComponent.h" #include "../components/MenuComponent.h" // for makeButtonGrid -#define BUTTON_VERT_PADDING 16.0f +#define BUTTON_VERT_PADDING 32.0f GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, const std::string& name1, const std::function& func1, @@ -28,7 +28,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, mButtonGrid = makeButtonGrid(mWindow, mButtons); mGrid.setEntry(mMsg, Eigen::Vector2i(0, 0), false, true); - mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 1), true, false); + mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 1), true, false, Eigen::Vector2i(1, 1), GridFlags::BORDER_TOP); if(mMsg->getSize().x() > width) { @@ -55,7 +55,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, void GuiMsgBox::onSizeChanged() { mGrid.setSize(mSize); - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-16, -32)); + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); mGrid.setRowHeightPerc(1, (mButtonGrid->getSize().y() + BUTTON_VERT_PADDING) / mSize.y()); } From 08dfc32f890e9ebf4614a9f1ef9337a51ccb749f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 15 Mar 2014 17:06:16 -0500 Subject: [PATCH 196/386] Added the new help images. Still need to redo HelpComponent to be better. Added some more back buttons. Forced text in OptionListComponent to be all capitals. --- CMakeLists.txt | 22 +- data/ResourceUtil.cpp | 36 +- data/Resources.h | 43 +- data/converted/help_a_png.cpp | 520 ++---- data/converted/help_b_png.cpp | 526 ++---- data/converted/help_dpad_all_png.cpp | 1645 +++++++++++++++++++ data/converted/help_dpad_down_png.cpp | 187 +++ data/converted/help_dpad_left_png.cpp | 188 +++ data/converted/help_dpad_left_right_png.cpp | 1637 ++++++++++++++++++ data/converted/help_dpad_png.cpp | 367 ----- data/converted/help_dpad_right_png.cpp | 188 +++ data/converted/help_dpad_up_down_png.cpp | 1638 ++++++++++++++++++ data/converted/help_dpad_up_png.cpp | 188 +++ data/converted/help_l_png.cpp | 154 ++ data/converted/help_left_right_png.cpp | 336 ---- data/converted/help_menu_png.cpp | 351 ---- data/converted/help_r_png.cpp | 157 ++ data/converted/help_select_png.cpp | 155 ++ data/converted/help_start_png.cpp | 152 ++ data/converted/help_up_down_png.cpp | 337 ---- data/converted/help_x_png.cpp | 165 ++ data/converted/help_y_png.cpp | 157 ++ data/converted/star_filled_png.cpp | 545 ++---- data/converted/star_unfilled_png.cpp | 498 ++---- data/resources/help/a.png | Bin 3635 -> 1534 bytes data/resources/help/b.png | Bin 3708 -> 1522 bytes data/resources/help/dpad.png | Bin 3592 -> 0 bytes data/resources/help/dpad_all.png | Bin 0 -> 16375 bytes data/resources/help/dpad_down.png | Bin 0 -> 1797 bytes data/resources/help/dpad_left.png | Bin 0 -> 1805 bytes data/resources/help/dpad_left_right.png | Bin 0 -> 16291 bytes data/resources/help/dpad_right.png | Bin 0 -> 1802 bytes data/resources/help/dpad_up.png | Bin 0 -> 1804 bytes data/resources/help/dpad_up_down.png | Bin 0 -> 16306 bytes data/resources/help/l.png | Bin 0 -> 1464 bytes data/resources/help/left_right.png | Bin 3288 -> 0 bytes data/resources/help/menu.png | Bin 3431 -> 0 bytes data/resources/help/r.png | Bin 0 -> 1495 bytes data/resources/help/select.png | Bin 0 -> 1477 bytes data/resources/help/start.png | Bin 0 -> 1446 bytes data/resources/help/up_down.png | Bin 3292 -> 0 bytes data/resources/help/x.png | Bin 0 -> 1576 bytes data/resources/help/y.png | Bin 0 -> 1498 bytes data/resources/star_filled.png | Bin 3698 -> 1729 bytes data/resources/star_unfilled.png | Bin 3703 -> 1245 bytes src/Util.cpp | 22 + src/Util.h | 23 +- src/components/ButtonComponent.h | 3 + src/components/HelpComponent.cpp | 9 +- src/components/MenuComponent.cpp | 2 +- src/components/OptionListComponent.h | 12 +- src/guis/GuiMsgBox.cpp | 27 + src/guis/GuiMsgBox.h | 3 +- src/guis/GuiScraperStart.cpp | 1 + 54 files changed, 7371 insertions(+), 2923 deletions(-) create mode 100644 data/converted/help_dpad_all_png.cpp create mode 100644 data/converted/help_dpad_down_png.cpp create mode 100644 data/converted/help_dpad_left_png.cpp create mode 100644 data/converted/help_dpad_left_right_png.cpp delete mode 100644 data/converted/help_dpad_png.cpp create mode 100644 data/converted/help_dpad_right_png.cpp create mode 100644 data/converted/help_dpad_up_down_png.cpp create mode 100644 data/converted/help_dpad_up_png.cpp create mode 100644 data/converted/help_l_png.cpp delete mode 100644 data/converted/help_left_right_png.cpp delete mode 100644 data/converted/help_menu_png.cpp create mode 100644 data/converted/help_r_png.cpp create mode 100644 data/converted/help_select_png.cpp create mode 100644 data/converted/help_start_png.cpp delete mode 100644 data/converted/help_up_down_png.cpp create mode 100644 data/converted/help_x_png.cpp create mode 100644 data/converted/help_y_png.cpp delete mode 100644 data/resources/help/dpad.png create mode 100644 data/resources/help/dpad_all.png create mode 100644 data/resources/help/dpad_down.png create mode 100644 data/resources/help/dpad_left.png create mode 100644 data/resources/help/dpad_left_right.png create mode 100644 data/resources/help/dpad_right.png create mode 100644 data/resources/help/dpad_up.png create mode 100644 data/resources/help/dpad_up_down.png create mode 100644 data/resources/help/l.png delete mode 100644 data/resources/help/left_right.png delete mode 100644 data/resources/help/menu.png create mode 100644 data/resources/help/r.png create mode 100644 data/resources/help/select.png create mode 100644 data/resources/help/start.png delete mode 100644 data/resources/help/up_down.png create mode 100644 data/resources/help/x.png create mode 100644 data/resources/help/y.png create mode 100644 src/Util.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b5d41510d..95a4e52da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,6 +239,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp @@ -302,12 +303,23 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_a_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_b_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_menu_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_up_down_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_left_right_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_x_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_y_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_l_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_r_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_start_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_select_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_all_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_up_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_down_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_right_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_up_down_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_right_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/sq_bracket_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_png.cpp @@ -316,7 +328,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_png.cpp ) -SOURCE_GROUP(resources FILES ResourceUtil.cpp) +#SOURCE_GROUP(resources FILES ResourceUtil.cpp) #add open gl specific sources #if(${GLSystem} MATCHES "Desktop OpenGL") diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index aadd7bb4c..4efa51b30 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 22; +const size_t res2hNrOfFiles = 31; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.png", arrow_png_size, arrow_png_data}, {":/button.png", button_png_size, button_png_data}, @@ -22,10 +22,19 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/textbox_glow.png", textbox_glow_png_size, textbox_glow_png_data}, {":/help/a.png", help_a_png_size, help_a_png_data}, {":/help/b.png", help_b_png_size, help_b_png_data}, - {":/help/dpad.png", help_dpad_png_size, help_dpad_png_data}, - {":/help/left_right.png", help_left_right_png_size, help_left_right_png_data}, - {":/help/menu.png", help_menu_png_size, help_menu_png_data}, - {":/help/up_down.png", help_up_down_png_size, help_up_down_png_data} + {":/help/dpad_all.png", help_dpad_all_png_size, help_dpad_all_png_data}, + {":/help/dpad_down.png", help_dpad_down_png_size, help_dpad_down_png_data}, + {":/help/dpad_left.png", help_dpad_left_png_size, help_dpad_left_png_data}, + {":/help/dpad_left_right.png", help_dpad_left_right_png_size, help_dpad_left_right_png_data}, + {":/help/dpad_right.png", help_dpad_right_png_size, help_dpad_right_png_data}, + {":/help/dpad_up.png", help_dpad_up_png_size, help_dpad_up_png_data}, + {":/help/dpad_up_down.png", help_dpad_up_down_png_size, help_dpad_up_down_png_data}, + {":/help/l.png", help_l_png_size, help_l_png_data}, + {":/help/r.png", help_r_png_size, help_r_png_data}, + {":/help/select.png", help_select_png_size, help_select_png_data}, + {":/help/start.png", help_start_png_size, help_start_png_data}, + {":/help/x.png", help_x_png_size, help_x_png_data}, + {":/help/y.png", help_y_png_size, help_y_png_data} }; res2hMapType::value_type mapTemp[] = { @@ -47,10 +56,19 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/textbox_glow.png", res2hFiles[15]), std::make_pair(":/help/a.png", res2hFiles[16]), std::make_pair(":/help/b.png", res2hFiles[17]), - std::make_pair(":/help/dpad.png", res2hFiles[18]), - std::make_pair(":/help/left_right.png", res2hFiles[19]), - std::make_pair(":/help/menu.png", res2hFiles[20]), - std::make_pair(":/help/up_down.png", res2hFiles[21]) + std::make_pair(":/help/dpad_all.png", res2hFiles[18]), + std::make_pair(":/help/dpad_down.png", res2hFiles[19]), + std::make_pair(":/help/dpad_left.png", res2hFiles[20]), + std::make_pair(":/help/dpad_left_right.png", res2hFiles[21]), + std::make_pair(":/help/dpad_right.png", res2hFiles[22]), + std::make_pair(":/help/dpad_up.png", res2hFiles[23]), + std::make_pair(":/help/dpad_up_down.png", res2hFiles[24]), + std::make_pair(":/help/l.png", res2hFiles[25]), + std::make_pair(":/help/r.png", res2hFiles[26]), + std::make_pair(":/help/select.png", res2hFiles[27]), + std::make_pair(":/help/start.png", res2hFiles[28]), + std::make_pair(":/help/x.png", res2hFiles[29]), + std::make_pair(":/help/y.png", res2hFiles[30]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 2ca401471..44acf3d05 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -59,17 +59,44 @@ extern const unsigned char help_a_png_data[]; extern const size_t help_b_png_size; extern const unsigned char help_b_png_data[]; -extern const size_t help_dpad_png_size; -extern const unsigned char help_dpad_png_data[]; +extern const size_t help_dpad_all_png_size; +extern const unsigned char help_dpad_all_png_data[]; -extern const size_t help_left_right_png_size; -extern const unsigned char help_left_right_png_data[]; +extern const size_t help_dpad_down_png_size; +extern const unsigned char help_dpad_down_png_data[]; -extern const size_t help_menu_png_size; -extern const unsigned char help_menu_png_data[]; +extern const size_t help_dpad_left_png_size; +extern const unsigned char help_dpad_left_png_data[]; -extern const size_t help_up_down_png_size; -extern const unsigned char help_up_down_png_data[]; +extern const size_t help_dpad_left_right_png_size; +extern const unsigned char help_dpad_left_right_png_data[]; + +extern const size_t help_dpad_right_png_size; +extern const unsigned char help_dpad_right_png_data[]; + +extern const size_t help_dpad_up_png_size; +extern const unsigned char help_dpad_up_png_data[]; + +extern const size_t help_dpad_up_down_png_size; +extern const unsigned char help_dpad_up_down_png_data[]; + +extern const size_t help_l_png_size; +extern const unsigned char help_l_png_data[]; + +extern const size_t help_r_png_size; +extern const unsigned char help_r_png_data[]; + +extern const size_t help_select_png_size; +extern const unsigned char help_select_png_data[]; + +extern const size_t help_start_png_size; +extern const unsigned char help_start_png_data[]; + +extern const size_t help_x_png_size; +extern const unsigned char help_x_png_data[]; + +extern const size_t help_y_png_size; +extern const unsigned char help_y_png_data[]; struct Res2hEntry { const std::string relativeFileName; diff --git a/data/converted/help_a_png.cpp b/data/converted/help_a_png.cpp index ad62421b4..d62cbae87 100644 --- a/data/converted/help_a_png.cpp +++ b/data/converted/help_a_png.cpp @@ -2,370 +2,160 @@ #include "../Resources.h" -const size_t help_a_png_size = 3635; -const unsigned char help_a_png_data[3635] = { +const size_t help_a_png_size = 1534; +const unsigned char help_a_png_data[1534] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x4e,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0xcf,0x67,0x1c, - 0x61,0x18,0xc7,0x3f,0xdb,0x44,0x4e,0xa5,0x26,0xf4, - 0x5a,0x32,0x4a,0x28,0x4b,0x19,0x4a,0x28,0xbd,0x6c, - 0x4f,0xa1,0x94,0xce,0xa5,0x94,0x52,0xe6,0x94,0x53, - 0x2e,0x6f,0xfe,0x80,0x92,0x4d,0x09,0x21,0x94,0xb9, - 0x45,0x29,0xb5,0x4b,0x69,0x95,0x1c,0x46,0x69,0xb5, - 0x4a,0x99,0xd0,0x4b,0xaa,0x95,0xce,0x92,0x6a,0xb5, - 0x4a,0x26,0xa9,0x54,0x48,0xa5,0xde,0x5e,0x76,0xd6, - 0x64,0x7f,0xe5,0xfd,0x31,0xbb,0x11,0xf2,0xf0,0xd8, - 0x35,0x33,0x3b,0xef,0xf7,0x3b,0xef,0xf3,0x6b,0x9e, - 0x67,0x4b,0x52,0x4a,0x4e,0xb2,0x9c,0xe1,0x84,0xcb, - 0x29,0x81,0x53,0x02,0x96,0x32,0xda,0xed,0x60,0xa9, - 0x54,0x32,0xbd,0x5f,0x19,0xb8,0x09,0x78,0xc0,0x05, - 0xe0,0x72,0xee,0xdc,0x1f,0xe0,0x33,0xf0,0x11,0x78, - 0x0b,0x3c,0x07,0x7e,0x9a,0x2c,0x72,0x28,0xf0,0x48, - 0x29,0x3b,0x54,0x53,0x2e,0x02,0x8b,0xc0,0x26,0x20, - 0x35,0xf5,0x1d,0x30,0x0b,0x9c,0xd5,0x25,0xd0,0xc2, - 0x6a,0x41,0x60,0x1c,0x58,0x02,0xf6,0x0d,0x80,0xb7, - 0xeb,0x0f,0x20,0x00,0x46,0x86,0x45,0xe0,0x1e,0xb0, - 0x53,0x00,0xf0,0x76,0x5d,0x6f,0x9a,0xdf,0xc0,0x08, - 0x8c,0x00,0xcb,0x03,0x00,0x9e,0xd7,0x3d,0xe0,0xd6, - 0x20,0x08,0x8c,0x03,0xaf,0x06,0x0c,0x3e,0xaf,0xf3, - 0x45,0x12,0x18,0x03,0x5e,0x0e,0x11,0x7c,0xa6,0x73, - 0x45,0x11,0x30,0x36,0x1b,0x21,0x84,0xf4,0x7d,0xdf, - 0x94,0xc0,0x01,0x70,0xc3,0x96,0x40,0x60,0x0a,0xde, - 0x75,0x5d,0x29,0xa5,0x94,0x49,0x92,0xd8,0xec,0xc2, - 0x0e,0x70,0xc9,0x94,0xc0,0xb8,0x4d,0xb4,0x11,0x42, - 0xc8,0x4c,0x2c,0x76,0x41,0x02,0x6f,0x4c,0x09,0x2c, - 0xd9,0xd8,0x70,0x92,0x24,0x2d,0x02,0xb5,0x5a,0xcd, - 0xd6,0x1f,0x6e,0xeb,0x12,0x98,0xb0,0x49,0x52,0xbe, - 0xef,0xcb,0x76,0x71,0x1c,0xc7,0x86,0xc0,0xa7,0x2c, - 0xd1,0xe5,0xb1,0xf6,0x2b,0xe6,0x66,0x9b,0xd1,0xc7, - 0x48,0x7c,0xdf,0x67,0x6d,0x6d,0xed,0xb0,0x33,0x05, - 0x81,0x4d,0xdd,0x36,0x09,0x4c,0xf7,0x0d,0x49,0xb9, - 0x1d,0x18,0x03,0xb6,0x4c,0x9f,0x96,0xe3,0x38,0x52, - 0x4a,0x29,0x85,0x10,0x32,0x0c,0xc3,0xd6,0x0e,0x58, - 0x3a,0xb3,0x04,0xea,0xaa,0x26,0x74,0xcd,0x66,0xa1, - 0xcc,0x79,0x1d,0xc7,0xe9,0x30,0x25,0xcf,0xf3,0x6c, - 0x08,0xec,0x02,0x23,0x2a,0x04,0xee,0xdb,0x3a,0x6f, - 0x18,0x86,0x5d,0x9d,0x39,0x7f,0xdc,0x50,0xa7,0x54, - 0x08,0x3c,0x33,0x5d,0xc0,0xf3,0xbc,0x8e,0xb0,0x99, - 0x0f,0xa7,0x69,0x9a,0xda,0x3a,0xf3,0x8c,0x0a,0x81, - 0x75,0xd3,0x05,0xc2,0x30,0xec,0xb0,0xf5,0x2c,0xa1, - 0x65,0x12,0x04,0x81,0x0d,0x81,0x65,0x15,0x02,0x5b, - 0xa6,0xce,0x9b,0xa6,0xa9,0xac,0x56,0xab,0x1d,0xe7, - 0xa2,0x28,0x6a,0x11,0x88,0xe3,0xd8,0x86,0xc0,0x63, - 0x15,0x02,0x07,0x26,0x37,0x0f,0x82,0x40,0x4a,0x29, - 0xa5,0xeb,0xba,0x3d,0xcf,0x65,0xd2,0xed,0x1a,0x45, - 0x7d,0xa1,0x42,0x60,0xcf,0xe4,0xe6,0x71,0x1c,0xf7, - 0x7d,0xba,0x69,0x9a,0xb6,0x08,0x74,0xdb,0x25,0x45, - 0x7d,0xaa,0x42,0xe0,0x97,0xa9,0xf3,0xaa,0x4a,0x9a, - 0xa6,0xa6,0x04,0x1e,0xe5,0xb1,0x8e,0xf6,0xc8,0x7a, - 0xdf,0x81,0xf3,0xba,0x99,0x77,0x7b,0x7b,0x9b,0x85, - 0x85,0x85,0x9e,0xd7,0x38,0x8e,0x83,0x10,0xa2,0xf5, - 0xdd,0xf7,0x7d,0xea,0xf5,0xba,0x6e,0x46,0xfe,0xaa, - 0x92,0x89,0x9f,0xe8,0x3e,0x99,0x34,0x4d,0x95,0x62, - 0x7c,0x1c,0xc7,0xb6,0x05,0xde,0x1d,0x15,0x13,0x9a, - 0x31,0x71,0xde,0x4a,0xa5,0xa2,0x55,0x62,0x1b,0x3a, - 0xf3,0xa4,0x0a,0x81,0xb2,0xce,0x4d,0xa3,0x28,0x52, - 0xae,0x73,0xb2,0x3a,0x29,0x13,0x21,0x84,0x0e,0xf8, - 0x4d,0x9d,0x72,0x7a,0x5d,0xe7,0xad,0x4b,0xa7,0x44, - 0xa8,0xd5,0x6a,0xa6,0x05,0xde,0xa2,0x4e,0x39,0xbd, - 0xa2,0xe2,0x51,0x61,0x18,0x02,0xd0,0x68,0x34,0x94, - 0xbd,0x30,0xef,0xb8,0xae,0xeb,0xea,0x94,0xd9,0x2b, - 0xaa,0xe5,0x34,0xc0,0xb9,0x7e,0xaf,0x93,0x95,0x4a, - 0xe5,0x50,0x76,0x4d,0x92,0x44,0x06,0x41,0x70,0xa4, - 0x4d,0x7b,0x9e,0x27,0xab,0xd5,0x6a,0x47,0x58,0x15, - 0x42,0x1c,0xf5,0xdb,0x55,0x93,0x57,0xca,0xb9,0x5e, - 0x36,0xdf,0x4f,0xa2,0x28,0xea,0x0a,0x42,0x45,0x7a, - 0x04,0x82,0x03,0x60,0xca,0x84,0xc0,0x18,0xb0,0x71, - 0x0c,0xfd,0xa0,0x76,0x7d,0x68,0xd3,0x56,0xb9,0x5a, - 0x50,0x03,0xd7,0x54,0x1b,0x4d,0x73,0xb6,0x6a,0x6c, - 0xcd,0x1e,0x13,0xf8,0xbd,0xb6,0x19,0x83,0x55,0x6f, - 0xf4,0xc1,0x90,0xc1,0xef,0x03,0xd7,0x8b,0xee,0x4e, - 0xcf,0x0f,0x09,0xfc,0x6e,0x2f,0xf0,0x45,0xcc,0x07, - 0x02,0xd3,0x72,0x5b,0x51,0x37,0x8e,0x9a,0x11,0x14, - 0x31,0xe0,0x28,0x03,0xef,0x07,0x00,0x3e,0x54,0x19, - 0x37,0x15,0x35,0x62,0x02,0xb8,0xdb,0xec,0x98,0xd9, - 0x02,0x5f,0x05,0xae,0x0c,0x7b,0x46,0x96,0x97,0xe9, - 0x66,0xd3,0x69,0x57,0x03,0xf4,0xb7,0x66,0x6d,0x53, - 0x36,0x99,0x52,0x66,0x5a,0xea,0x06,0xd8,0x62,0xcc, - 0x9a,0x35,0xc5,0x26,0x9b,0x9d,0xed,0x89,0xe6,0xe7, - 0x6f,0xe0,0x1f,0xf0,0x01,0xf8,0x0b,0xbc,0x06,0xbe, - 0x98,0x2e,0x90,0xc7,0x5c,0x3a,0xfd,0xb3,0xc7,0x29, - 0x01,0x3b,0xf9,0x3f,0x00,0x4f,0xc6,0x21,0x9b,0xf7, - 0xe9,0xfd,0x97,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, + 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, + 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x36,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x37,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x34,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x35,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x86,0x06,0x19,0x6c,0x00,0x00,0x02,0x70, + 0x49,0x44,0x41,0x54,0x78,0xda,0xbc,0x97,0x4f,0x48, + 0x14,0x61,0x18,0xc6,0x77,0x47,0xbb,0xb8,0x42,0x28, + 0xb1,0x5e,0x63,0x83,0x52,0xf3,0x12,0xe1,0x41,0x2d, + 0x22,0xf6,0x96,0xd5,0xae,0xa1,0x96,0x87,0x2e,0x82, + 0xe6,0x21,0xba,0x04,0xad,0x27,0xaf,0x52,0xc7,0xa0, + 0x43,0xb5,0xd0,0x2d,0xb4,0xd4,0xa8,0xf4,0x50,0x87, + 0x54,0xd4,0x28,0xc2,0x08,0x42,0x0b,0x8d,0xa8,0x8b, + 0x18,0x81,0xf8,0x27,0x02,0xd1,0xb4,0xe7,0x85,0x67, + 0xe0,0x63,0xd8,0x9d,0xf9,0xde,0x71,0xd7,0x07,0x7e, + 0xf8,0xb9,0x33,0xf3,0x3e,0x33,0xdf,0x7c,0xdf,0xfb, + 0xbe,0x13,0xcd,0x64,0x32,0x11,0x4b,0xd5,0x81,0x66, + 0x70,0x0a,0xd4,0x82,0x2a,0x10,0x03,0x7f,0xc1,0x32, + 0xf8,0x0a,0xa6,0xc0,0x18,0xf8,0x6c,0x13,0xb0,0x34, + 0xe0,0x78,0x14,0xb4,0x80,0x5e,0x50,0x9f,0xe7,0x9c, + 0x32,0x90,0x20,0xe7,0x40,0x3f,0xf8,0x00,0xee,0x80, + 0x61,0xb0,0x9b,0x2f,0xb8,0xe3,0x63,0x5c,0x0d,0x26, + 0x19,0xa0,0x3e,0xa2,0x93,0x9c,0xff,0x94,0x33,0x51, + 0xad,0x35,0x6f,0xe3,0xdd,0x9f,0x8e,0xec,0x4d,0x4d, + 0x60,0x16,0x5c,0xb1,0x35,0xef,0x02,0x03,0xa0,0x3c, + 0x52,0x18,0xc9,0x6b,0x79,0x0c,0xae,0x07,0x99,0x5f, + 0x06,0xf7,0x03,0x5e,0x47,0x18,0xc9,0xda,0xb9,0x0b, + 0x3a,0xf2,0x99,0x1f,0x05,0x59,0x9e,0x58,0x0c,0x49, + 0xdc,0x87,0xa0,0xc6,0x6b,0x2e,0x07,0x1e,0x14,0x70, + 0xaa,0xf3,0x29,0x46,0x9f,0xa8,0x69,0x9e,0x02,0x67, + 0x94,0x81,0x64,0x5d,0x5c,0x23,0xe3,0x8a,0xeb,0x24, + 0x4f,0x5c,0x32,0xf7,0xf9,0xad,0x10,0x4f,0xd1,0x07, + 0x16,0x39,0x96,0x24,0x73,0x56,0x71,0xad,0x64,0xb6, + 0x61,0x87,0xfb,0xb0,0x41,0x69,0x3c,0x6b,0x18,0x8b, + 0x5e,0x81,0x55,0x65,0x1e,0x38,0x2e,0xe6,0x17,0x42, + 0x3c,0xf5,0x20,0xff,0x1e,0x02,0x25,0x60,0x13,0x3c, + 0x53,0xc6,0x48,0x3b,0x7c,0x07,0x1a,0x49,0xba,0x7c, + 0xc2,0x71,0xbb,0x91,0x88,0x06,0x94,0x71,0x1a,0x1c, + 0x73,0xe9,0x5b,0xea,0x2d,0xf8,0xc9,0xb1,0xe4,0xfd, + 0x34,0xc7,0x6f,0xc0,0x6f,0x45,0x9c,0x1a,0x31,0x8f, + 0x87,0x9c,0xf2,0x0a,0xee,0x90,0x14,0xff,0xdf,0x06, + 0x43,0x8a,0x38,0x71,0x31,0x3f,0xa8,0xb8,0xe0,0x1f, + 0x0b,0x86,0xe8,0x3c,0x38,0x00,0x0e,0x83,0x13,0x9e, + 0x1b,0xb3,0x51,0xb9,0x98,0xaf,0x29,0x2e,0x98,0xe0, + 0xb6,0x72,0x57,0xec,0x77,0xd2,0xc8,0xdf,0xa4,0x8a, + 0x2d,0x59,0xc6,0xfa,0xe3,0x18,0xc1,0x6c,0x13,0x8b, + 0xab,0x1b,0xe0,0x08,0xb9,0xc7,0xdf,0x76,0x8c,0x99, + 0x09,0xd2,0x2f,0x87,0x1d,0x88,0x8d,0xb6,0xc0,0x88, + 0xf2,0x06,0xfd,0xf4,0xc5,0xe1,0x54,0xd9,0xe8,0x35, + 0x58,0xe1,0xf8,0x11,0xb7,0x9c,0xc9,0x4d,0x1e,0x7b, + 0x0f,0x7e,0x58,0xc4,0x9b,0x12,0xf3,0x97,0xca,0x29, + 0x97,0x94,0x7c,0x31,0xc7,0xf1,0x16,0x23,0x0f,0xd8, + 0x2c,0xbc,0x51,0x31,0x5f,0xe0,0xde,0xf5,0xd3,0x36, + 0x9b,0xc2,0x04,0x8b,0x42,0x65,0xae,0xa4,0xc1,0x55, + 0x9f,0xe0,0xd3,0xfb,0xe9,0x1d,0x98,0x77,0x0b,0x4b, + 0x7f,0xc0,0x0c,0xc8,0x79,0x9f,0x02,0x02,0xca,0x83, + 0x7c,0xb4,0x9c,0xc5,0xdb,0x66,0x49,0x1d,0x65,0x86, + 0xda,0x0f,0x49,0x53,0xfa,0xdc,0xdb,0xc9,0x48,0x5d, + 0x5e,0x2f,0xb2,0xf1,0x06,0xe8,0x76,0xdb,0x69,0xd3, + 0xfc,0x1b,0xb8,0xca,0x2c,0x56,0x0c,0x49,0xdc,0x4e, + 0xae,0xb1,0x9c,0x0d,0xe4,0x0b,0xd0,0xe3,0xd7,0xe8, + 0xef,0xc1,0xb8,0xc7,0x9b,0xfb,0x73,0x75,0xa9,0xd2, + 0x44,0xb6,0x16,0xf0,0x15,0xac,0xb3,0xf4,0x66,0x6d, + 0x3f,0x1a,0x24,0x93,0x9d,0x2c,0xc0,0x22,0x1c,0x67, + 0x9c,0x11,0xed,0xe7,0x92,0xac,0x81,0x24,0x3b,0x9d, + 0x69,0xa5,0xe9,0x0c,0xeb,0x7c,0x92,0x71,0x42,0x7d, + 0x28,0xba,0xdb,0x50,0x38,0xe6,0xf9,0x4a,0x8d,0xb3, + 0x1c,0xaf,0xb1,0x89,0x98,0xa3,0xe9,0x98,0x6d,0xbd, + 0xf8,0x2f,0xc0,0x00,0x7e,0x7d,0x81,0xa8,0x66,0x52, + 0x34,0x4b,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 }; diff --git a/data/converted/help_b_png.cpp b/data/converted/help_b_png.cpp index 4b768c68b..9a1b2a59b 100644 --- a/data/converted/help_b_png.cpp +++ b/data/converted/help_b_png.cpp @@ -2,377 +2,159 @@ #include "../Resources.h" -const size_t help_b_png_size = 3708; -const unsigned char help_b_png_data[3708] = { +const size_t help_b_png_size = 1522; +const unsigned char help_b_png_data[1522] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x97,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x9a,0x4f,0x68,0x13, - 0x41,0x14,0xc6,0x7f,0x9b,0x4d,0x37,0x6d,0x48,0x49, - 0xcc,0xc9,0x93,0x10,0x10,0x3c,0x15,0x0c,0x05,0x41, - 0x51,0x84,0x82,0xa0,0x78,0xf2,0xcf,0x49,0x10,0x84, - 0x40,0x41,0xe8,0xa9,0xbd,0x78,0x10,0x4f,0x85,0x82, - 0x58,0x28,0x58,0x85,0x1e,0x02,0xde,0x95,0x1c,0x84, - 0xa2,0x17,0x8b,0x62,0x51,0xf4,0x60,0x05,0x51,0x94, - 0x8a,0x45,0x51,0xea,0xb1,0x62,0x49,0xba,0x9b,0xa4, - 0xe3,0xc1,0x6d,0xba,0xd9,0x24,0x9b,0x99,0xfd,0x93, - 0xb6,0xd0,0x0f,0xde,0x61,0x93,0xd9,0xd9,0xef,0xcb, - 0xbc,0x7d,0xef,0xcd,0x9b,0x68,0x42,0x08,0xf6,0x32, - 0x62,0xec,0x71,0xec,0x0b,0xd8,0x17,0x10,0x10,0xf1, - 0x76,0x1f,0x6a,0x9a,0xe6,0x77,0xbe,0x21,0xe0,0x02, - 0x30,0x0c,0x1c,0x02,0x8e,0x3a,0xbe,0x5b,0x07,0xbe, - 0x00,0x9f,0x80,0x45,0xe0,0x31,0xf0,0xdb,0xcf,0x43, - 0x9a,0x02,0x8f,0x10,0xa2,0xc5,0x14,0x71,0x18,0x98, - 0x06,0xbe,0x03,0x42,0xd1,0x5e,0x01,0xe3,0x40,0x4a, - 0x55,0x40,0x83,0x6b,0x00,0x01,0x59,0x60,0x06,0x30, - 0x7d,0x10,0x77,0xdb,0x2a,0x30,0x0a,0xe8,0xbd,0x12, - 0x50,0x00,0xd6,0x42,0x20,0xee,0xb6,0x8f,0xb6,0xfb, - 0x45,0x26,0x40,0x07,0xee,0x46,0x40,0xdc,0x69,0x65, - 0xe0,0x72,0x14,0x02,0xb2,0xc0,0xf3,0x88,0xc9,0x3b, - 0x6d,0x2a,0x4c,0x01,0x06,0xf0,0xac,0x87,0xe4,0xb7, - 0xec,0x46,0x37,0x01,0x5a,0x3b,0xc2,0x6d,0xc2,0xe8, - 0x5d,0x60,0xcc,0xfd,0x61,0x2e,0x16,0x23,0x17,0x93, - 0x4f,0x25,0x2b,0x9b,0x9b,0xac,0x6c,0x6e,0xaa,0x04, - 0x9c,0x3a,0x70,0xd1,0x0e,0xb9,0x6d,0xc3,0xa8,0x8c, - 0x80,0x51,0x60,0xae,0xed,0x9b,0x6c,0x18,0x4c,0xf4, - 0xf7,0x2b,0x8b,0x28,0x9a,0x26,0x45,0xcb,0x62,0x4d, - 0x2e,0x60,0xfc,0x01,0x4e,0xd8,0xf9,0x43,0x39,0x0f, - 0x64,0x65,0xa2,0xcd,0x48,0x3c,0x2e,0x56,0xd3,0x69, - 0x51,0xc9,0x64,0x44,0x25,0x93,0x11,0xf3,0xa9,0x54, - 0xcb,0x98,0x82,0x61,0x34,0x8d,0x79,0x35,0x38,0x28, - 0x32,0x9a,0x26,0xeb,0x4a,0x2f,0xfd,0xbe,0x03,0x33, - 0xb2,0xfe,0x3a,0x91,0x48,0x78,0x0a,0x00,0x44,0x5e, - 0xd7,0x1b,0x63,0xbc,0xc6,0x75,0xb0,0x2b,0xed,0x04, - 0x78,0xad,0x7d,0x0e,0xb8,0x1e,0x66,0xdd,0xb2,0x54, - 0xaf,0x53,0xaa,0x56,0x1b,0xd7,0x23,0xf1,0xb8,0x8a, - 0xfb,0xdd,0x6a,0x97,0xe8,0xbc,0xee,0x1e,0xb7,0xa3, - 0x4f,0xa8,0x78,0x57,0xab,0xb5,0x04,0x02,0x49,0x1c, - 0x01,0xce,0xcb,0x0a,0x30,0x9c,0x4b,0xb6,0x8b,0x70, - 0x55,0x56,0xc0,0x71,0xfb,0x05,0x0e,0x1d,0x39,0x7d, - 0xdb,0x0b,0xd6,0x84,0x60,0xc1,0xb5,0x22,0x5d,0x70, - 0xd6,0xed,0x46,0x9d,0x04,0x9c,0x89,0x82,0x7c,0x46, - 0xd3,0xb8,0xd4,0xd7,0xd7,0xb8,0xbe,0xb3,0xb1,0xa1, - 0x3a,0x45,0x0a,0x38,0x26,0x23,0x60,0x28,0x0a,0x01, - 0x93,0x03,0x03,0x64,0xec,0x1c,0x33,0x6d,0x9a,0x4c, - 0x9b,0xa6,0x9f,0x69,0x86,0xbb,0x6e,0x68,0xec,0x1a, - 0xdf,0x37,0x0e,0x68,0x1a,0x23,0xf1,0xed,0xa9,0xf3, - 0xba,0x4e,0x21,0x91,0x20,0x17,0x8b,0x51,0xaa,0x56, - 0x29,0x9a,0xa6,0xaa,0xeb,0xb8,0x5f,0xe6,0xae,0x02, - 0x0e,0x06,0x11,0x90,0xd7,0x75,0xe6,0x53,0xad,0x7b, - 0x94,0xa2,0x65,0xb1,0x54,0xab,0xf1,0xae,0x5e,0x0f, - 0x32,0x7d,0x56,0x46,0x40,0x3a,0x68,0xbc,0xbf,0x59, - 0xa9,0xb4,0x88,0xba,0x64,0x18,0x14,0x0c,0x83,0x59, - 0x5b,0xcc,0xcd,0x4a,0x45,0xb6,0x9c,0xe8,0xcc,0xad, - 0x43,0x26,0x2e,0xab,0x56,0x8e,0x32,0x99,0x18,0x10, - 0xb3,0xc9,0x64,0x63,0xdc,0x6a,0x3a,0x2d,0xf2,0xba, - 0xae,0x5a,0xa1,0x96,0x64,0x32,0xf1,0x7a,0x54,0x81, - 0x7c,0xac,0x5c,0x6e,0xf8,0x7f,0x46,0xd3,0xb8,0x97, - 0x4c,0xaa,0x4e,0xb1,0x2e,0x13,0x85,0x7e,0x45,0x99, - 0x8d,0x4a,0x96,0xd5,0xe4,0x5a,0x17,0x1d,0xa1,0x55, - 0x02,0x3f,0x64,0x04,0x7c,0x89,0x52,0x80,0x7b,0x4f, - 0xa0,0x52,0x8e,0xbb,0xb9,0x75,0xba,0x73,0x71,0x17, - 0xf7,0xb2,0xde,0xca,0x08,0x78,0x11,0x25,0x83,0xbc, - 0xae,0x7b,0xae,0x48,0x17,0xf7,0x91,0x5a,0x81,0x0f, - 0xce,0x1d,0x50,0xd8,0x28,0x24,0x12,0x4d,0xe4,0x9d, - 0x25,0x76,0x17,0x3c,0x52,0x29,0xa7,0x1f,0x28,0x65, - 0x5f,0x87,0x1f,0x7b,0xf9,0xf4,0x6c,0x32,0xd9,0xf4, - 0xfd,0x58,0xb9,0xac,0xf2,0x98,0x16,0x4e,0x5e,0x7b, - 0xe2,0xb4,0xdd,0x2e,0xf4,0x4c,0x6a,0xb9,0x58,0x8c, - 0x91,0x78,0xbc,0xa9,0xce,0x01,0x58,0xa8,0xd5,0x28, - 0x59,0x56,0xc3,0x3d,0x9c,0xe5,0xc4,0xd6,0x2f,0xef, - 0x0c,0xa9,0x12,0x78,0x0a,0x9c,0x53,0xdd,0xd4,0xdf, - 0xf0,0xea,0xcf,0x4c,0x24,0x12,0x4c,0x0e,0x0c,0x28, - 0x45,0x9f,0xa5,0x7a,0x9d,0x85,0x6a,0x95,0xa2,0x23, - 0x94,0x4a,0x76,0x27,0x4e,0x01,0xaf,0x55,0x37,0xf5, - 0x06,0xb0,0xbc,0x03,0xfd,0x20,0xb7,0xdd,0x0f,0xd2, - 0xd8,0x3a,0x19,0x52,0x03,0xd7,0xaf,0x7d,0x73,0xbb, - 0xb1,0x9f,0xce,0xdc,0xf8,0x0e,0x91,0x2f,0xbb,0xce, - 0x18,0x02,0xf5,0x46,0x6f,0xf7,0x98,0xbc,0xd9,0x69, - 0x67,0x18,0xa4,0x3b,0x3d,0xd5,0x23,0xf2,0x7f,0xbd, - 0xb6,0xb5,0x41,0xcf,0x07,0x46,0xfd,0x94,0xdb,0x0a, - 0xb6,0xdc,0xed,0x8c,0x20,0x8c,0x03,0x8e,0x21,0xe0, - 0x4d,0x04,0xe4,0xe7,0x90,0x38,0x6e,0x0a,0xeb,0x88, - 0x09,0xe0,0x1a,0xf0,0x39,0x04,0xe2,0x4f,0xdc,0xdd, - 0x86,0x5e,0x09,0xd8,0xc2,0x79,0xe0,0xa1,0xed,0xbb, - 0xb2,0xa4,0x7f,0xf2,0xff,0x70,0x50,0xb9,0x03,0xe2, - 0xe7,0x7c,0x40,0x05,0xa7,0xed,0xce,0x41,0xd6,0xee, - 0xaf,0x66,0xed,0x16,0x79,0x1d,0x78,0x0f,0x58,0x76, - 0xb5,0xfb,0xd5,0xef,0x03,0xba,0x96,0x12,0x7b,0x09, - 0xfb,0x7f,0x35,0xd8,0x69,0xfc,0x1b,0x00,0xb0,0x50, - 0x70,0xaa,0x70,0x6c,0x2e,0x22,0x00,0x00,0x00,0x00, - 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, + 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, + 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, + 0x37,0x31,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, + 0x37,0x32,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, + 0x36,0x46,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, + 0x37,0x30,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x3b,0xe4,0xb0,0xf3,0x00,0x00,0x02,0x64, + 0x49,0x44,0x41,0x54,0x78,0xda,0xbc,0x97,0x4d,0x48, + 0x14,0x61,0x18,0xc7,0x67,0x87,0x3d,0x88,0x2b,0x48, + 0x97,0x15,0xa1,0x43,0x69,0xea,0x6e,0x79,0xb3,0xa5, + 0xb6,0x0f,0x3a,0x04,0x1d,0x4c,0x31,0xb3,0xfc,0x02, + 0x2f,0x42,0x29,0xe1,0xc1,0x4b,0x6e,0xc7,0x20,0x41, + 0x0a,0x0f,0xe1,0x49,0xd3,0x83,0xa7,0x14,0x52,0x41, + 0xdb,0x3d,0xa6,0xc8,0x6e,0x22,0x88,0x20,0xe4,0x47, + 0x84,0x37,0x41,0x8c,0x28,0x2d,0x45,0xbb,0x48,0xfe, + 0x1f,0x78,0x06,0x5e,0x86,0x99,0x9d,0x67,0x66,0x67, + 0xfb,0xc3,0xef,0xb0,0x3b,0xf3,0x3e,0xff,0x77,0xde, + 0x8f,0xe7,0x79,0xdf,0x40,0x22,0x91,0xd0,0x84,0xaa, + 0x06,0xf7,0xc1,0x2d,0x70,0x19,0x94,0x80,0x10,0x38, + 0x06,0x7b,0xe0,0x2b,0x48,0x83,0x14,0xf8,0x22,0x09, + 0x18,0x74,0x78,0x1e,0x00,0x8d,0xe0,0x05,0x88,0xd9, + 0xbc,0x53,0x08,0xca,0x98,0x5a,0x30,0x00,0x56,0xc0, + 0x1b,0x30,0x0d,0xfe,0xd9,0x05,0xd7,0xb3,0x18,0x47, + 0xc0,0x22,0x07,0x88,0x69,0xee,0x44,0xef,0x7f,0xe0, + 0x91,0x88,0xb8,0x35,0x7f,0xcc,0xbd,0xbf,0xad,0xe5, + 0xa6,0x9b,0x60,0x15,0xb4,0x4a,0xcd,0x9f,0x80,0x49, + 0x50,0xa4,0xf9,0x23,0x9a,0x96,0xf7,0xa0,0xc7,0xc9, + 0xbc,0x05,0x8c,0x38,0x4c,0x87,0x17,0xd1,0xda,0x19, + 0x02,0x6d,0x76,0xe6,0x95,0x60,0x8c,0x5f,0xcc,0x87, + 0x28,0xee,0x28,0x88,0x9a,0xcd,0xe9,0xc1,0x3b,0x1f, + 0x87,0xda,0x4e,0x21,0xf6,0x09,0xa8,0x5b,0xad,0x01, + 0xdc,0x11,0x34,0xee,0x05,0x27,0x16,0xdb,0xb5,0x82, + 0x63,0x5c,0x14,0xc4,0xa0,0x3c,0xf1,0x90,0x76,0x91, + 0x61,0xde,0x27,0xec,0xf9,0x38,0xf8,0x6d,0xf3,0xec, + 0x39,0xe7,0x83,0x57,0x82,0x38,0x09,0xc3,0x9c,0xf6, + 0x61,0xdc,0xe5,0xf0,0x5d,0x00,0xdd,0x9c,0x40,0x76, + 0xc0,0x04,0xd8,0x07,0xfd,0xe0,0x1a,0xa8,0x13,0xe4, + 0x81,0x2b,0x64,0x5e,0xef,0x61,0xee,0xce,0x73,0xef, + 0x0d,0xb5,0xf3,0x70,0x92,0x3e,0x0a,0xcc,0x49,0x0f, + 0x74,0xa5,0x51,0x2e,0xaa,0xf0,0xd0,0x26,0xae,0xab, + 0x4b,0xdf,0xa3,0x7e,0x82,0x97,0xca,0xef,0x26,0x61, + 0xbb,0x28,0x0d,0x7b,0xd8,0x83,0x61,0xc6,0x22,0x1f, + 0x14,0x80,0xb7,0xe0,0x9e,0x30,0x46,0x98,0xbe,0xbc, + 0xd8,0x83,0x39,0x75,0xfa,0x1c,0x63,0xb4,0xff,0xcb, + 0x59,0x6c,0x5d,0x18,0xa3,0x48,0xcf,0xb2,0x75,0xb2, + 0xe9,0x3a,0xf8,0xc5,0x1c,0x70,0x2d,0xa7,0x11,0xdc, + 0x34,0xa7,0xd0,0x2c,0x3a,0xd2,0xf9,0x20,0x90,0xab, + 0xaa,0x94,0x5d,0x43,0x5f,0xbe,0x2b,0x68,0xf3,0x5d, + 0xe7,0x5e,0xfb,0xa1,0x3f,0xa6,0x3c,0xee,0xa4,0xad, + 0x20,0x17,0xfc,0x06,0x97,0x46,0x47,0x5c,0xa7,0x35, + 0x4e,0xb7,0x9f,0xc0,0x0c,0xff,0x2e,0x07,0xa5,0x82, + 0x18,0xe9,0x20,0x27,0x85,0x41,0x97,0xe6,0x6b,0xe0, + 0xaa,0xc5,0xff,0xb4,0xe2,0x87,0x85,0x31,0x92,0x64, + 0xfe,0x0d,0x2c,0x81,0x1b,0xc2,0xb4,0x7a,0x68,0xb5, + 0x6d,0x38,0x45,0x3f,0x03,0x97,0x04,0x71,0x96,0x69, + 0x71,0x1a,0x85,0x65,0x80,0x47,0x40,0xf2,0xc5,0x7e, + 0xe8,0xb5,0x5a,0xcf,0x93,0x60,0x5e,0xfb,0x3f,0xa2, + 0x43,0xe9,0xac,0xf9,0x24,0xd3,0x65,0x5a,0xb1,0xf9, + 0x10,0x4d,0xd9,0x53,0xe3,0x38,0xad,0x9a,0x6f,0x83, + 0x0e,0x70,0x9a,0x27,0x63,0x8a,0xdb,0xc9,0x6b,0xcc, + 0xf2,0x00,0x39,0xa7,0xd4,0x69,0xbf,0x8d,0x29,0xee, + 0x94,0xd3,0xd1,0x99,0x0e,0x91,0x8f,0x7c,0x9c,0x02, + 0x8a,0xd3,0xcc,0x71,0x45,0x97,0x06,0x4a,0x18,0x35, + 0x3e,0x2c,0xc2,0x05,0x8e,0x33,0xe3,0xf6,0xba,0x44, + 0x6b,0xe0,0x2e,0xe7,0xec,0x8c,0x4b,0xd3,0xcf,0x74, + 0x52,0xe1,0xf6,0xdb,0x5e,0x2f,0x8a,0xc6,0x36,0x4c, + 0x72,0xf1,0x50,0x6f,0xa9,0x61,0x2e,0xa7,0x54,0x15, + 0x7f,0x80,0x0d,0x36,0x4d,0x49,0xeb,0xc5,0x99,0x00, + 0x03,0x00,0x8d,0x70,0x73,0x99,0xca,0x99,0x33,0x28, + 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, + 0x60,0x82 }; diff --git a/data/converted/help_dpad_all_png.cpp b/data/converted/help_dpad_all_png.cpp new file mode 100644 index 000000000..73bd5cda5 --- /dev/null +++ b/data/converted/help_dpad_all_png.cpp @@ -0,0 +1,1645 @@ +//this file was auto-generated from "dpad_all.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_all_png_size = 16375; +const unsigned char help_dpad_all_png_data[16375] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x3c,0xa0,0x69,0x54, + 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x00, + 0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61,0x63, + 0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e,0x3d, + 0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22, + 0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68,0x69, + 0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63,0x7a, + 0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c,0x78, + 0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64, + 0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74, + 0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74, + 0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58, + 0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e, + 0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39,0x2e, + 0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32,0x30, + 0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d,0x31, + 0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d, + 0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78, + 0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, + 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20, + 0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, + 0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73, + 0x74,0x52,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f, + 0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f, + 0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x65, + 0x66,0x23,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f, + 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, + 0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f, + 0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74, + 0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74, + 0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x74,0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66, + 0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30, + 0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69, + 0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d, + 0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70, + 0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e, + 0x74,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x35, + 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x3c,0x2f,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39, + 0x65,0x66,0x63,0x65,0x36,0x35,0x34,0x2d,0x62,0x31, + 0x65,0x31,0x2d,0x31,0x31,0x34,0x39,0x2d,0x38,0x65, + 0x32,0x30,0x2d,0x30,0x33,0x62,0x34,0x31,0x30,0x39, + 0x65,0x66,0x64,0x35,0x37,0x3c,0x2f,0x78,0x6d,0x70, + 0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d, + 0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46,0x72, + 0x6f,0x6d,0x20,0x72,0x64,0x66,0x3a,0x70,0x61,0x72, + 0x73,0x65,0x54,0x79,0x70,0x65,0x3d,0x22,0x52,0x65, + 0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e, + 0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e,0x73, + 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f,0x63, + 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, + 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, + 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66, + 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x72, + 0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54,0x79, + 0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76, + 0x65,0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x39,0x31,0x62,0x61,0x65,0x38,0x36,0x63, + 0x2d,0x38,0x39,0x30,0x38,0x2d,0x34,0x36,0x34,0x37, + 0x2d,0x62,0x30,0x34,0x37,0x2d,0x63,0x37,0x39,0x35, + 0x30,0x63,0x34,0x63,0x62,0x35,0x39,0x64,0x3c,0x2f, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, + 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x32,0x30, + 0x31,0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31, + 0x36,0x3a,0x32,0x35,0x3a,0x30,0x32,0x2d,0x30,0x35, + 0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74, + 0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x41,0x67,0x65,0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64, + 0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x3e, + 0x2f,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, + 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, + 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, + 0x64,0x66,0x3a,0x6c,0x69,0x20,0x72,0x64,0x66,0x3a, + 0x70,0x61,0x72,0x73,0x65,0x54,0x79,0x70,0x65,0x3d, + 0x22,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x22, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, + 0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76,0x65,0x64,0x3c, + 0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, + 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39, + 0x65,0x66,0x63,0x65,0x36,0x35,0x34,0x2d,0x62,0x31, + 0x65,0x31,0x2d,0x31,0x31,0x34,0x39,0x2d,0x38,0x65, + 0x32,0x30,0x2d,0x30,0x33,0x62,0x34,0x31,0x30,0x39, + 0x65,0x66,0x64,0x35,0x37,0x3c,0x2f,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x77,0x68,0x65,0x6e,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x35,0x3a,0x34,0x37,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68, + 0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, + 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, + 0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73, + 0x29,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, + 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, + 0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, + 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x2f,0x3c,0x2f, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x63,0x68,0x61,0x6e, + 0x67,0x65,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x53,0x65, + 0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, + 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72, + 0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f, + 0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43, + 0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, + 0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31, + 0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36, + 0x3a,0x31,0x36,0x3a,0x30,0x36,0x2d,0x30,0x35,0x3a, + 0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43,0x72, + 0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66,0x79, + 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x35,0x3a,0x34,0x37,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69, + 0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d, + 0x70,0x3a,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61, + 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x35,0x3a,0x34,0x37,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61, + 0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e, + 0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x3c, + 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64, + 0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f, + 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, + 0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74, + 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75, + 0x6d,0x65,0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74, + 0x6f,0x72,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, + 0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e, + 0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x30,0x30, + 0x37,0x39,0x36,0x32,0x32,0x31,0x39,0x44,0x38,0x44, + 0x31,0x31,0x45,0x33,0x41,0x39,0x31,0x44,0x42,0x44, + 0x46,0x44,0x34,0x30,0x39,0x39,0x32,0x45,0x45,0x33, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a, + 0x6c,0x69,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69,0x64, + 0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x41,0x39, + 0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39,0x31, + 0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39,0x32, + 0x45,0x45,0x33,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, + 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, + 0x64,0x66,0x3a,0x6c,0x69,0x3e,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, + 0x37,0x45,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x3c,0x2f,0x72,0x64, + 0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a, + 0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x41,0x6e, + 0x63,0x65,0x73,0x74,0x6f,0x72,0x73,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74, + 0x69,0x66,0x66,0x3a,0x4f,0x72,0x69,0x65,0x6e,0x74, + 0x61,0x74,0x69,0x6f,0x6e,0x3e,0x31,0x3c,0x2f,0x74, + 0x69,0x66,0x66,0x3a,0x4f,0x72,0x69,0x65,0x6e,0x74, + 0x61,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x66, + 0x66,0x3a,0x58,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74, + 0x69,0x6f,0x6e,0x3e,0x37,0x32,0x30,0x30,0x30,0x30, + 0x2f,0x31,0x30,0x30,0x30,0x30,0x3c,0x2f,0x74,0x69, + 0x66,0x66,0x3a,0x58,0x52,0x65,0x73,0x6f,0x6c,0x75, + 0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x66,0x66, + 0x3a,0x59,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74,0x69, + 0x6f,0x6e,0x3e,0x37,0x32,0x30,0x30,0x30,0x30,0x2f, + 0x31,0x30,0x30,0x30,0x30,0x3c,0x2f,0x74,0x69,0x66, + 0x66,0x3a,0x59,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74, + 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a, + 0x52,0x65,0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e, + 0x55,0x6e,0x69,0x74,0x3e,0x32,0x3c,0x2f,0x74,0x69, + 0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74, + 0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65, + 0x78,0x69,0x66,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x53, + 0x70,0x61,0x63,0x65,0x3e,0x36,0x35,0x35,0x33,0x35, + 0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f,0x6c, + 0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65, + 0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58, + 0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e, + 0x33,0x37,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x50, + 0x69,0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e, + 0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x65,0x78,0x69,0x66, + 0x3a,0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d, + 0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x33,0x37,0x3c, + 0x2f,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65, + 0x6c,0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f, + 0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, + 0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46, + 0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d, + 0x65,0x74,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x77,0x22, + 0x3f,0x3e,0x4d,0x56,0x3b,0x28,0x00,0x00,0x00,0x20, + 0x63,0x48,0x52,0x4d,0x00,0x00,0x7a,0x25,0x00,0x00, + 0x80,0x83,0x00,0x00,0xf9,0xff,0x00,0x00,0x80,0xe9, + 0x00,0x00,0x75,0x30,0x00,0x00,0xea,0x60,0x00,0x00, + 0x3a,0x98,0x00,0x00,0x17,0x6f,0x92,0x5f,0xc5,0x46, + 0x00,0x00,0x02,0xd1,0x49,0x44,0x41,0x54,0x78,0xda, + 0xdc,0x98,0xcf,0x4b,0x54,0x51,0x14,0xc7,0x3f,0x33, + 0xf3,0x82,0xa9,0x54,0x34,0xa4,0xe9,0x07,0xfd,0x5e, + 0x48,0x51,0x20,0x2d,0xa2,0x7f,0x60,0x2a,0x32,0x2b, + 0x21,0x71,0x11,0x28,0x54,0x44,0x9b,0x0a,0x5a,0x24, + 0xf5,0x0f,0x04,0xed,0xb2,0x45,0x54,0x14,0x84,0x2d, + 0x8a,0x8a,0x04,0x4d,0xfc,0xd1,0xa2,0x65,0xcb,0x36, + 0x11,0x46,0x3f,0xb0,0x1f,0xe8,0x14,0x46,0xe8,0x98, + 0x81,0x33,0xda,0xe6,0x2b,0x3c,0x2e,0xef,0xc7,0xbd, + 0x4e,0xe3,0x44,0x5f,0x18,0xce,0xbb,0xe7,0x9d,0x77, + 0xee,0xf7,0x9d,0x77,0xef,0xb9,0xe7,0x4c,0xa2,0xb3, + 0xb3,0x13,0x47,0xec,0x03,0xfa,0x80,0x65,0x16,0xb6, + 0x45,0xa0,0x05,0xe8,0x75,0x99,0xc0,0xc3,0x1d,0x03, + 0x40,0x02,0x98,0x01,0xf2,0x11,0x76,0x2b,0x81,0x15, + 0x40,0x0f,0x90,0x2a,0x27,0xa9,0x63,0x22,0x94,0x03, + 0xd6,0x58,0xd8,0xff,0x00,0xea,0x80,0x2c,0x30,0x6c, + 0x3b,0x49,0xd2,0x91,0xd4,0x1e,0xc9,0x11,0x43,0x7f, + 0x0f,0x98,0x07,0xee,0x1b,0xfa,0x2f,0x92,0x59,0x97, + 0x49,0x92,0x2c,0x0e,0xf3,0xbe,0xeb,0x5a,0xa0,0x5d, + 0xd7,0xc7,0x35,0x2e,0x09,0x49,0x4a,0xc7,0x1b,0x63, + 0x3c,0x52,0x69,0x52,0x1d,0x01,0x6b,0x6b,0x35,0x70, + 0xa2,0x92,0xa4,0xee,0x84,0xe8,0x6f,0x55,0x92,0x54, + 0xca,0x51,0x5f,0xb6,0x3c,0xe5,0x47,0x82,0x32,0x20, + 0xc9,0x3f,0x08,0x7f,0xa4,0x9a,0x81,0x83,0x31,0xf6, + 0x7b,0x17,0x39,0x4f,0x16,0xb8,0x11,0x63,0x33,0xa8, + 0xec,0x8f,0x27,0x22,0xbd,0x8e,0x51,0xfb,0x60,0x69, + 0xf7,0x1e,0xd8,0x05,0x34,0xea,0x17,0x85,0x33,0xca, + 0x7f,0x07,0x3c,0x1f,0xa1,0x09,0x60,0xd4,0x62,0xa2, + 0x77,0x0e,0x5b,0xbe,0x05,0x78,0x04,0x6c,0xb5,0xb0, + 0x5d,0xa7,0xf4,0xd2,0xe7,0x89,0xd0,0x34,0x50,0x1f, + 0x60,0x58,0x0f,0x5c,0x00,0x2e,0xc7,0x38,0xcc,0x00, + 0x6d,0xc0,0x43,0x9d,0x8b,0x7e,0xb4,0x1a,0xe3,0x34, + 0xf0,0x3b,0xc4,0xcf,0x0c,0x90,0x4e,0xfa,0x06,0x26, + 0x6e,0x03,0xdf,0x81,0x4b,0xc0,0xd1,0x10,0x27,0x55, + 0xc0,0x24,0x30,0x0e,0x5c,0x93,0x9c,0x94,0x9e,0x88, + 0x89,0x8b,0xc0,0xd9,0x80,0x7b,0xf9,0xb0,0xdd,0xb7, + 0x43,0x91,0x3b,0x65,0x44,0x2c,0x08,0x63,0x40,0x35, + 0x50,0xd0,0x3a,0x2b,0x68,0x3c,0x66,0xb1,0xeb,0xbb, + 0xf4,0xd2,0x99,0xb8,0x94,0x30,0x08,0xbc,0x56,0x1d, + 0x14,0x87,0x4d,0x8a,0x48,0x41,0x05,0xdf,0x36,0xc9, + 0x82,0xf4,0xeb,0x2d,0x7c,0xd4,0x2b,0xba,0x0f,0xc2, + 0x48,0xd5,0xaa,0xaa,0xb4,0x45,0x93,0xe4,0x27,0x43, + 0xff,0x59,0xf2,0x90,0x83,0xaf,0xb6,0x30,0x52,0x3f, + 0x81,0x7e,0x07,0x47,0xcf,0x24,0x37,0x1a,0xfa,0x0d, + 0x92,0x7d,0x0e,0xbe,0x1e,0x47,0x7d,0xbe,0x26,0xa0, + 0x01,0xf8,0x65,0xe1,0x68,0x54,0x0b,0xd3,0x03,0x66, + 0x81,0x8f,0x92,0x9e,0xf4,0x5f,0x2d,0x7c,0x4c,0x28, + 0x0d,0xb4,0xc6,0x1d,0x33,0x6f,0x55,0x5f,0xdf,0xf4, + 0xe9,0x72,0x21,0x4e,0xd7,0x02,0x53,0x22,0xb2,0x59, + 0x72,0x4a,0xfa,0x28,0xcc,0x01,0xe7,0xb5,0xa6,0x72, + 0x61,0x0b,0xbd,0x2a,0x24,0xc3,0xd6,0x01,0x57,0x22, + 0xba,0x91,0x3c,0x50,0xa3,0xb7,0x3d,0x27,0x59,0x13, + 0xd3,0x50,0x54,0xab,0x8a,0xe8,0x0a,0xb8,0xb7,0x1c, + 0x5f,0xe8,0xd3,0xda,0x05,0x61,0x21,0xdf,0x6f,0x1c, + 0x31,0x66,0x42,0xcc,0x01,0xd7,0x43,0x9e,0x7d,0xa2, + 0x28,0xc6,0x61,0x8b,0xbe,0x50,0xd1,0xd3,0x2e,0x19, + 0x50,0xbe,0xc8,0x58,0x3c,0xbc,0x5b,0x8d,0x42,0x87, + 0x85,0x6d,0x0f,0x70,0xc4,0x61,0xc1,0xcf,0x01,0x87, + 0x3d,0x60,0x48,0x9f,0xb1,0x59,0x11,0x49,0xc5,0x54, + 0x09,0x8d,0xca,0x51,0x36,0x58,0x38,0xf3,0x5e,0x01, + 0x2f,0x63,0x9a,0xd6,0xfe,0x85,0xdd,0xef,0x2f,0x5d, + 0x7a,0x2d,0x3a,0xd9,0xab,0x16,0xa7,0x7d,0x10,0x86, + 0x81,0x8b,0xff,0x4d,0x91,0x57,0x6a,0xff,0xf7,0xd7, + 0x4a,0xe5,0x52,0x23,0x55,0x74,0xd4,0x2f,0x09,0xa9, + 0xd3,0x21,0xfa,0x93,0x95,0x24,0x75,0x17,0xf8,0x66, + 0xe8,0xc6,0x95,0x32,0x2a,0xda,0xcd,0x34,0x18,0xe3, + 0xed,0x95,0x6a,0xb1,0x12,0x46,0x75,0xd1,0xad,0xeb, + 0x6e,0x8d,0x97,0x94,0xd4,0x73,0xc9,0x9d,0x86,0xbe, + 0x5d,0x44,0xdb,0x0d,0xfd,0xc2,0xff,0x0c,0x2f,0xca, + 0x99,0x12,0x86,0x74,0x14,0xac,0x52,0xc9,0x3c,0x1d, + 0x73,0xf0,0xa6,0x95,0x36,0xfa,0xcb,0x49,0x0a,0x35, + 0x11,0x4f,0x55,0x32,0xc7,0x95,0xcd,0xb3,0xbe,0x0a, + 0xd5,0x1a,0x7f,0x06,0x00,0xcc,0x4c,0x89,0x42,0x23, + 0x86,0xe8,0x9d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_dpad_down_png.cpp b/data/converted/help_dpad_down_png.cpp new file mode 100644 index 000000000..05758d4e7 --- /dev/null +++ b/data/converted/help_dpad_down_png.cpp @@ -0,0 +1,187 @@ +//this file was auto-generated from "dpad_down.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_down_png_size = 1797; +const unsigned char help_dpad_down_png_data[1797] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x45, + 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x44, + 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0x24,0x4f,0xd7,0x28,0x00,0x00,0x03,0x33,0x49,0x44, + 0x41,0x54,0x78,0xda,0xd4,0x98,0x5b,0x6c,0x4c,0x41, + 0x18,0xc7,0xcf,0xae,0xa3,0x15,0xd4,0x83,0xba,0x94, + 0x56,0x42,0xd2,0x20,0x44,0x56,0x22,0x12,0x44,0x52, + 0xad,0x44,0x08,0x21,0x1e,0xc4,0x7a,0x12,0x7d,0xd0, + 0x96,0x50,0x82,0x6c,0x8b,0x28,0x2a,0x4b,0xe2,0xb2, + 0x22,0x22,0x95,0xf2,0xe0,0x49,0x89,0x27,0x97,0x78, + 0x71,0x8b,0x97,0x25,0xc1,0x43,0xd1,0x20,0x54,0xe2, + 0xd6,0x6a,0x17,0xa1,0x1b,0xea,0xa4,0x2e,0xff,0x49, + 0xfe,0x4d,0x36,0x93,0x73,0x66,0xce,0xd9,0x63,0x1d, + 0xbe,0xe4,0x97,0x93,0xce,0xce,0xe5,0x9b,0x99,0x6f, + 0xbe,0x4b,0x43,0xb1,0x58,0xcc,0xf0,0x28,0x23,0xc0, + 0x61,0xb0,0x1c,0x14,0x28,0xfa,0x7d,0x05,0x57,0xc1, + 0x3a,0xd0,0xe5,0x65,0x01,0xd3,0xf0,0x2e,0x2d,0x60, + 0x36,0x68,0x06,0x1d,0x8a,0x7e,0xa3,0x40,0x35,0x38, + 0x05,0x96,0xe6,0x52,0xa9,0x22,0x30,0x1f,0x6c,0x03, + 0x87,0x5c,0xf4,0xff,0x0c,0x1a,0x40,0x21,0xf8,0xe0, + 0x76,0x91,0xb0,0x47,0xa5,0x46,0xf2,0xfb,0x44,0x6a, + 0x9f,0x05,0x52,0x60,0x8e,0xd4,0xfe,0x9c,0x6b,0x8c, + 0xf5,0xb2,0x48,0xd8,0xc8,0x4e,0x7e,0x49,0xa7,0xdd, + 0xc4,0xd3,0x68,0xca,0xd2,0x24,0xfe,0x88,0x52,0x99, + 0xb2,0x11,0x44,0xc0,0x49,0x30,0x0d,0x6c,0x0e,0x5a, + 0xa9,0x12,0xb0,0x07,0x5c,0xa6,0x51,0x5f,0x04,0xbb, + 0xc0,0xb8,0x20,0x95,0x4a,0x80,0xa1,0xa0,0x07,0x1c, + 0x00,0x69,0xfe,0x9d,0xf0,0x33,0xa9,0xdf,0xfb,0x8f, + 0xf0,0xbb,0x4a,0x6a,0x9f,0x1e,0xa4,0x52,0x13,0x8d, + 0x1c,0x48,0xd8,0xf8,0x07,0xc5,0x94,0x3c,0xb0,0xce, + 0x40,0x4b,0xb3,0x5c,0x67,0x0a,0xc8,0xd3,0xf4,0x79, + 0x03,0xde,0xf7,0x2b,0x25,0x1c,0xe2,0x19,0xb0,0xc8, + 0x83,0x8f,0x4a,0xb9,0xec,0xfb,0x8e,0xfd,0x5b,0x5c, + 0xf6,0xbf,0x0e,0xa2,0x26,0x63,0x53,0x19,0xd8,0x4e, + 0x0f,0xac,0x93,0x4e,0x70,0xd7,0xe5,0x22,0xb7,0xc0, + 0x3c,0x30,0xda,0x45,0x5f,0x71,0x4b,0x8d,0xe0,0xa0, + 0x50,0x6a,0x21,0x38,0x06,0xf6,0xdb,0x74,0x1c,0x48, + 0x63,0x7e,0xac,0x99,0x30,0x8f,0x3e,0x4b,0x5c,0x81, + 0x25,0xfd,0x76,0xdb,0xc6,0x8e,0x7f,0x3a,0xcc,0x33, + 0x01,0xac,0x0e,0x73,0x42,0xbb,0x60,0x39,0x13,0xdc, + 0x03,0x0f,0x15,0x3b,0x1d,0x00,0xe2,0xe0,0x13,0x78, + 0xc1,0x6f,0x9c,0xed,0x4e,0xf2,0x16,0x5c,0xa2,0x02, + 0x76,0xbf,0x15,0xd8,0xbd,0xbe,0x21,0xe0,0x08,0x48, + 0xd2,0x40,0x43,0x20,0xdf,0x61,0x81,0x7d,0xa0,0x9e, + 0x9e,0x7c,0x2d,0xbf,0xf5,0x6c,0x57,0x65,0x1a,0x4b, + 0x78,0xfa,0x75,0x76,0x0f,0x40,0x56,0x6a,0x01,0x4f, + 0xa6,0x96,0xb1,0x6c,0x83,0x62,0xf2,0x41,0x8c,0x7b, + 0x67,0xe9,0x3c,0x9b,0xf9,0x3d,0xc7,0x71,0xf9,0x8a, + 0xb1,0xc7,0xc1,0x15,0x9a,0xcc,0x03,0x30,0xd7,0x49, + 0x29,0x33,0xe3,0x58,0x85,0xd1,0xaf,0x07,0x5f,0x34, + 0x3b,0x1e,0x0c,0x6e,0x4a,0xed,0x37,0x78,0xda,0x45, + 0x9a,0x2b,0x5c,0x01,0x8e,0x82,0xa9,0x5c,0xd7,0x56, + 0xa9,0x3e,0xb0,0x18,0xb4,0x73,0x07,0x27,0xc0,0x30, + 0xcd,0x2b,0x14,0x29,0x6f,0x85,0xd4,0x5e,0xc1,0x18, + 0xd8,0xa9,0x18,0x2b,0xf2,0xab,0xf3,0x60,0x13,0x73, + 0xb3,0x65,0xaa,0x30,0x73,0x8d,0xe9,0x47,0x23,0xaf, + 0x46,0x25,0xbd,0x7c,0xb5,0x75,0xd2,0xf3,0x5f,0xc9, + 0xe0,0xfc,0x5d,0x31,0x56,0x5c,0xef,0x37,0xb0,0x83, + 0x19,0xac,0xa5,0x8b,0x7d,0x62,0xf7,0x5b,0x68,0x2b, + 0xa7,0xa9,0x64,0xaf,0xc3,0xe4,0x3b,0xe9,0x1c,0x85, + 0x0d,0x46,0x79,0x42,0x71,0xa6,0x2f,0x4e,0x22,0xbc, + 0xf6,0x7d,0x2a,0xd6,0xee,0x14,0x66,0xd2,0xf4,0x31, + 0xb2,0x08,0x77,0x30,0x03,0x4c,0x52,0x54,0x23,0x3f, + 0x68,0x7f,0xbb,0x41,0x31,0x6d,0xc5,0xd2,0x9c,0x70, + 0x31,0xc7,0x39,0x55,0x4a,0x96,0x50,0xea,0x02,0x58, + 0x03,0x5e,0x82,0x57,0x8a,0xd8,0x95,0xb9,0x53,0xd9, + 0x21,0x5a,0x1c,0x6f,0x27,0x65,0x8c,0xab,0x3a,0x99, + 0x0c,0x6a,0xc4,0xab,0x34,0x59,0x99,0x8c,0x77,0x59, + 0x9d,0xf4,0xc7,0x3e,0x51,0x20,0xdc,0x71,0xd1,0xb7, + 0x9c,0xf1,0x2c,0xe4,0x72,0x5e,0x51,0x27,0x56,0x99, + 0x0c,0xae,0xe5,0xdc,0x4d,0x89,0x66,0x82,0x52,0x06, + 0xd7,0x42,0x97,0x1b,0x18,0xc3,0xf9,0xa2,0x9a,0xb8, + 0x2a,0x14,0x7a,0x0d,0xba,0x65,0x43,0xef,0x72,0x51, + 0xc9,0x5a,0x46,0x76,0xd2,0x46,0xa7,0xfc,0xff,0x26, + 0x79,0x7e,0x95,0x7a,0xc6,0xa3,0x97,0x79,0x1a,0xa4, + 0x52,0x8f,0x1c,0xda,0x5b,0x83,0x54,0xaa,0x96,0x7e, + 0x2e,0x53,0xd2,0x7e,0x0b,0x52,0xbf,0x4a,0x89,0x17, + 0xb3,0x57,0x6a,0x6b,0x60,0xb2,0x17,0x68,0x35,0x93, + 0xc8,0x78,0x59,0xad,0x8c,0x87,0x81,0x18,0x7a,0x48, + 0xca,0x2e,0xaa,0xc0,0x47,0x96,0xee,0x7d,0x7f,0x5b, + 0xa9,0x0e,0xe6,0xd7,0x11,0xa9,0x3d,0x49,0x87,0x9a, + 0xb4,0xf9,0x5f,0x83,0xa1,0x49,0x63,0x7c,0x57,0xc8, + 0x29,0x86,0x02,0x11,0x84,0x87,0x6b,0x9c,0xad,0xa8, + 0x4e,0x2a,0x99,0x0e,0x75,0xe7,0xba,0x6c,0xaf,0x64, + 0x02,0x58,0xcd,0xcc,0xd3,0x49,0x7a,0x98,0x1a,0x6f, + 0xf5,0xba,0xc0,0x6f,0x01,0x06,0x00,0x9b,0x19,0xb5, + 0xa2,0x6f,0x22,0x26,0x8a,0x00,0x00,0x00,0x00,0x49, + 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_dpad_left_png.cpp b/data/converted/help_dpad_left_png.cpp new file mode 100644 index 000000000..17b28ac47 --- /dev/null +++ b/data/converted/help_dpad_left_png.cpp @@ -0,0 +1,188 @@ +//this file was auto-generated from "dpad_left.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_left_png_size = 1805; +const unsigned char help_dpad_left_png_data[1805] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x35, + 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x34, + 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0x7e,0xb4,0x24,0x5c,0x00,0x00,0x03,0x3b,0x49,0x44, + 0x41,0x54,0x78,0xda,0xd4,0x98,0x5b,0x6c,0x4c,0x41, + 0x18,0xc7,0xcf,0xae,0x55,0x82,0xbe,0xa8,0x4b,0x69, + 0x25,0x24,0x75,0x09,0x61,0x25,0x22,0x41,0x24,0xd5, + 0x4a,0x84,0xa0,0x89,0x07,0x51,0x5e,0x44,0x1f,0xb4, + 0x95,0x50,0x0d,0xb2,0x5b,0xc4,0xad,0xb2,0x24,0x2e, + 0x2b,0x8d,0x48,0xa5,0x3c,0x78,0xa1,0xc4,0x93,0x4b, + 0xbc,0xb8,0xc5,0xcb,0x56,0x82,0x07,0xb7,0x20,0x54, + 0x42,0xe9,0x6a,0x17,0x91,0x6e,0xa8,0x93,0xba,0xfc, + 0x27,0xf9,0x37,0xd9,0x4c,0xce,0x39,0x33,0x67,0x8f, + 0x75,0xf8,0x92,0x5f,0x4e,0x76,0x76,0xce,0xcc,0x37, + 0x33,0xdf,0x7c,0x97,0x13,0x88,0x44,0x22,0x86,0x4b, + 0x19,0x01,0x8e,0x80,0x15,0x20,0xdf,0xa1,0xdf,0x57, + 0x70,0x0d,0x6c,0x00,0x5d,0x6e,0x26,0x08,0x19,0xee, + 0xa5,0x15,0xcc,0x05,0x2d,0xa0,0xd3,0xa1,0xdf,0x28, + 0x50,0x03,0x4e,0x81,0x8a,0x5c,0x2a,0x55,0x08,0x16, + 0x82,0x6d,0xe0,0xb0,0x46,0xff,0x2f,0x60,0x37,0x28, + 0x00,0x1f,0x75,0x27,0x09,0xba,0x54,0x6a,0x24,0x9f, + 0xcf,0xa4,0xf6,0x39,0x20,0x05,0xe6,0x49,0xed,0x2f, + 0x39,0xc7,0x58,0x37,0x93,0x04,0x8d,0xec,0xe4,0x97, + 0xb4,0xdb,0xcd,0xdc,0x8d,0xe6,0x2c,0x4d,0xe2,0x8f, + 0x28,0x95,0x29,0x9b,0x40,0x18,0x9c,0x04,0xd3,0x41, + 0xbd,0xdf,0x4a,0x15,0x83,0xbd,0xe0,0x0a,0x8d,0xfa, + 0x12,0xd8,0x05,0xc6,0xf9,0xa9,0x54,0x1c,0x0c,0x03, + 0x3d,0xe0,0x20,0x48,0xf3,0x77,0xdc,0xcb,0xa0,0x5e, + 0xcf,0x3f,0xcc,0xe7,0x6a,0xa9,0x7d,0xa6,0x9f,0x4a, + 0x4d,0x32,0x72,0x20,0x41,0xe3,0x1f,0x94,0x90,0xe4, + 0x81,0x55,0x06,0x5a,0x92,0xe5,0x3c,0x53,0x41,0x9e, + 0xa2,0x4f,0x07,0xf8,0xd0,0xaf,0x94,0x70,0x88,0x67, + 0xc0,0x12,0x17,0x3e,0x2a,0xa5,0xd9,0xf7,0x3d,0xfb, + 0xb7,0x6a,0xf6,0xbf,0x01,0x2a,0x43,0x8c,0x4d,0xa5, + 0x60,0x3b,0x3d,0xb0,0x4a,0x92,0xe0,0xae,0xe6,0x24, + 0xb7,0xc1,0x02,0x30,0x5a,0xa3,0xaf,0x38,0xa5,0x46, + 0x70,0x48,0x28,0xb5,0x18,0x34,0x81,0x03,0x16,0x1d, + 0x07,0xd2,0x98,0x9f,0x28,0x06,0xcc,0xa3,0xcf,0x12, + 0x47,0x60,0x4a,0xff,0xdd,0xb1,0xb0,0xe3,0x9f,0x36, + 0xe3,0x4c,0x00,0x6b,0x83,0x1c,0xd0,0x2a,0x58,0xce, + 0x06,0xf7,0xc0,0x23,0x87,0x95,0x0e,0x00,0x31,0xf0, + 0x19,0xbc,0xe2,0x33,0xc6,0x76,0x3b,0x79,0x07,0x2e, + 0x53,0x01,0xab,0xff,0xf2,0xad,0x6e,0xdf,0x50,0x70, + 0x14,0x24,0xc0,0x0c,0x10,0x00,0x83,0x6c,0x26,0xd8, + 0x0f,0x1a,0xe8,0xc9,0xd7,0xf3,0xd9,0xc0,0x76,0xa7, + 0x4c,0x63,0x19,0x77,0x3f,0x6a,0x75,0x01,0x64,0xa5, + 0x16,0x71,0x67,0xea,0x15,0xab,0x15,0x32,0x98,0x71, + 0xef,0x1c,0x9d,0x67,0x0b,0x9f,0xe7,0xc1,0x46,0x87, + 0x85,0x08,0x39,0x0e,0xae,0xd2,0x64,0x1e,0x80,0xf9, + 0x76,0x4a,0x85,0x1c,0xb6,0xd5,0x6e,0xc5,0x43,0xc0, + 0x2d,0xa9,0xfd,0x26,0x77,0xbb,0x50,0x71,0x84,0x2b, + 0xc1,0x31,0x30,0x8d,0xb1,0xd3,0x52,0xa9,0x3e,0xb0, + 0x14,0xb4,0x6b,0x2a,0x95,0x64,0xca,0x5b,0x2e,0xb5, + 0x97,0x33,0x06,0x26,0x1d,0xde,0x15,0xf9,0xd5,0x05, + 0xb0,0x99,0xb9,0x59,0x85,0x53,0x98,0xb9,0xce,0xf4, + 0xa3,0x91,0x47,0xe3,0x14,0x86,0x7a,0x79,0x6b,0xa3, + 0xd2,0xf5,0x5f,0xc5,0xe0,0xfc,0xdd,0xe1,0x5d,0x71, + 0xbc,0xdf,0xc0,0x0e,0x66,0xb0,0xa6,0x2a,0xf6,0x89, + 0xd5,0x6f,0xa1,0xad,0x9c,0xa6,0x92,0xbd,0x36,0x83, + 0xef,0xa4,0x73,0xac,0x13,0x4e,0x8f,0x3b,0x14,0x63, + 0xfa,0x62,0x27,0xc2,0x6b,0xdf,0xa7,0x62,0xed,0x76, + 0x61,0x26,0x4d,0x1f,0x23,0x8b,0x70,0x07,0xb3,0xc0, + 0x64,0x87,0x6a,0xe4,0x07,0x9d,0xee,0x1e,0x50,0x44, + 0x5b,0x31,0x15,0xc7,0x5e,0xc4,0xf7,0xec,0x2a,0x25, + 0x53,0x28,0x75,0x11,0xac,0x03,0xaf,0xc1,0x1b,0x87, + 0xd8,0x95,0xb9,0x52,0xd9,0x21,0x9a,0x7c,0xdf,0x4a, + 0x4a,0x19,0x57,0x55,0x32,0x05,0xd4,0x8a,0x5b,0x19, + 0x62,0x65,0x32,0x5e,0xb3,0x3a,0xe9,0x8f,0x7d,0xa2, + 0x40,0x68,0xd3,0xe8,0x5b,0xc6,0x78,0x16,0xd0,0x1c, + 0x57,0xd4,0x89,0xd5,0x21,0x06,0xd7,0x32,0xae,0xa6, + 0x58,0x31,0x40,0x09,0x83,0x6b,0x81,0xe6,0x02,0xc6, + 0x70,0xbc,0x4a,0x45,0x5c,0x15,0x0a,0xbd,0x05,0xdd, + 0xb2,0xa1,0x77,0x69,0x54,0xb2,0xa6,0x91,0x9d,0x3c, + 0xa5,0x53,0xfe,0x7f,0x93,0x3c,0xaf,0x4a,0xbd,0xe0, + 0xd6,0xcb,0x3c,0xf7,0x33,0x47,0x7f,0x0c,0x26,0x82, + 0xb3,0xb4,0x09,0x91,0x13,0xad,0x01,0x0f,0xfd,0xdc, + 0xa9,0xba,0x8c,0xb2,0x2a,0xca,0xaf,0x30,0x69,0xaf, + 0x05,0xa9,0x57,0xa5,0xc4,0xee,0xec,0x63,0xec,0x3a, + 0x01,0x96,0xf3,0x83,0x46,0x87,0xdf,0xd5,0x4c,0x9c, + 0x37,0xab,0x96,0xc7,0xd6,0xe4,0x97,0xa1,0x07,0xa4, + 0xec,0xa2,0x1a,0x7c,0x62,0xe9,0xde,0xf7,0xb7,0x95, + 0xea,0x64,0x7e,0x1d,0x96,0xda,0x13,0x74,0xa8,0x09, + 0x8b,0x6f,0x0d,0x86,0x22,0x8d,0xf1,0x7c,0xfb,0x52, + 0x0c,0x05,0x22,0x08,0x0f,0x57,0x38,0x5b,0x71,0x13, + 0xab,0x98,0x0e,0x75,0xe7,0xda,0x25,0x54,0xd1,0xa8, + 0x6b,0x98,0x79,0xda,0x49,0x0f,0x53,0xe3,0xad,0x6e, + 0x27,0xf8,0x2d,0xc0,0x00,0x86,0xa8,0xb5,0xf9,0x24, + 0xe5,0xd1,0x9d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_dpad_left_right_png.cpp b/data/converted/help_dpad_left_right_png.cpp new file mode 100644 index 000000000..a9768dcb7 --- /dev/null +++ b/data/converted/help_dpad_left_right_png.cpp @@ -0,0 +1,1637 @@ +//this file was auto-generated from "dpad_left_right.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_left_right_png_size = 16291; +const unsigned char help_dpad_left_right_png_data[16291] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x3c,0x0e,0x69,0x54, + 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x00, + 0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61,0x63, + 0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e,0x3d, + 0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22, + 0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68,0x69, + 0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63,0x7a, + 0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c,0x78, + 0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64, + 0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74, + 0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74, + 0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58, + 0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e, + 0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39,0x2e, + 0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32,0x30, + 0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d,0x31, + 0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d, + 0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78, + 0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, + 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20, + 0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, + 0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73, + 0x74,0x52,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f, + 0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f, + 0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x65, + 0x66,0x23,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f, + 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, + 0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f, + 0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74, + 0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74, + 0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x74,0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66, + 0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30, + 0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69, + 0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d, + 0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70, + 0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e, + 0x74,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x35, + 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x3c,0x2f,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, + 0x37,0x35,0x37,0x63,0x32,0x35,0x35,0x2d,0x65,0x37, + 0x32,0x36,0x2d,0x33,0x32,0x34,0x38,0x2d,0x38,0x33, + 0x37,0x65,0x2d,0x35,0x32,0x33,0x32,0x36,0x36,0x38, + 0x35,0x32,0x34,0x61,0x39,0x3c,0x2f,0x78,0x6d,0x70, + 0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d, + 0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46,0x72, + 0x6f,0x6d,0x20,0x72,0x64,0x66,0x3a,0x70,0x61,0x72, + 0x73,0x65,0x54,0x79,0x70,0x65,0x3d,0x22,0x52,0x65, + 0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e, + 0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e,0x73, + 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f,0x63, + 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, + 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, + 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66, + 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x72, + 0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54,0x79, + 0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76, + 0x65,0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x39,0x31,0x62,0x61,0x65,0x38,0x36,0x63, + 0x2d,0x38,0x39,0x30,0x38,0x2d,0x34,0x36,0x34,0x37, + 0x2d,0x62,0x30,0x34,0x37,0x2d,0x63,0x37,0x39,0x35, + 0x30,0x63,0x34,0x63,0x62,0x35,0x39,0x64,0x3c,0x2f, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, + 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x32,0x30, + 0x31,0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31, + 0x36,0x3a,0x32,0x35,0x3a,0x30,0x32,0x2d,0x30,0x35, + 0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74, + 0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x41,0x67,0x65,0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64, + 0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x3e, + 0x2f,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, + 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, + 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, + 0x64,0x66,0x3a,0x6c,0x69,0x20,0x72,0x64,0x66,0x3a, + 0x70,0x61,0x72,0x73,0x65,0x54,0x79,0x70,0x65,0x3d, + 0x22,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x22, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, + 0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76,0x65,0x64,0x3c, + 0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, + 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, + 0x37,0x35,0x37,0x63,0x32,0x35,0x35,0x2d,0x65,0x37, + 0x32,0x36,0x2d,0x33,0x32,0x34,0x38,0x2d,0x38,0x33, + 0x37,0x65,0x2d,0x35,0x32,0x33,0x32,0x36,0x36,0x38, + 0x35,0x32,0x34,0x61,0x39,0x3c,0x2f,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x77,0x68,0x65,0x6e,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x35,0x3a,0x30,0x32,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68, + 0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, + 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, + 0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73, + 0x29,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, + 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, + 0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, + 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x2f,0x3c,0x2f, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x63,0x68,0x61,0x6e, + 0x67,0x65,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x53,0x65, + 0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, + 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72, + 0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f, + 0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43, + 0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, + 0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31, + 0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36, + 0x3a,0x31,0x36,0x3a,0x30,0x36,0x2d,0x30,0x35,0x3a, + 0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43,0x72, + 0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66,0x79, + 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x35,0x3a,0x30,0x32,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69, + 0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d, + 0x70,0x3a,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61, + 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x35,0x3a,0x30,0x32,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61, + 0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e, + 0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x3c, + 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64, + 0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f, + 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, + 0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74, + 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75, + 0x6d,0x65,0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74, + 0x6f,0x72,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, + 0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e, + 0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x30,0x30, + 0x37,0x39,0x36,0x32,0x32,0x31,0x39,0x44,0x38,0x44, + 0x31,0x31,0x45,0x33,0x41,0x39,0x31,0x44,0x42,0x44, + 0x46,0x44,0x34,0x30,0x39,0x39,0x32,0x45,0x45,0x33, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x42,0x61, + 0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73, + 0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74,0x6f,0x72, + 0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, + 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, + 0x31,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, + 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32, + 0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30, + 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65, + 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73,0x6f, + 0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32,0x30, + 0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30,0x3c, + 0x2f,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74, + 0x69,0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c,0x75, + 0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e,0x32, + 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69, + 0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f, + 0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x36, + 0x35,0x35,0x33,0x35,0x3c,0x2f,0x65,0x78,0x69,0x66, + 0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x53,0x70,0x61,0x63, + 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x50,0x69, + 0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e,0x73, + 0x69,0x6f,0x6e,0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78, + 0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58,0x44, + 0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c, + 0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e, + 0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a, + 0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d,0x65, + 0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44, + 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, + 0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, + 0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a, + 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x3c,0x3f,0x78, + 0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65,0x6e,0x64, + 0x3d,0x22,0x77,0x22,0x3f,0x3e,0x93,0x4e,0x9a,0xa4, + 0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00,0x00, + 0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9,0xff, + 0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00,0x00, + 0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17,0x6f, + 0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x0f,0x49,0x44, + 0x41,0x54,0x78,0xda,0xd4,0x98,0xcd,0x4b,0x54,0x51, + 0x18,0xc6,0x7f,0x33,0x0c,0x35,0x8a,0x44,0x25,0xa5, + 0x84,0x59,0x66,0x45,0x64,0x56,0xa8,0x51,0xba,0xd0, + 0xa4,0x0f,0xa1,0xb0,0x85,0x04,0x2d,0x02,0xdb,0x04, + 0x41,0x0b,0xa3,0xd5,0xd0,0x3f,0xd0,0xa2,0x45,0xd8, + 0xc7,0xae,0x88,0xc0,0x36,0x51,0x49,0xdf,0x44,0x81, + 0x95,0x0b,0x4b,0x4a,0x31,0x30,0x09,0x53,0x32,0xa1, + 0xac,0x34,0x89,0x1a,0x4a,0xad,0xb4,0xcd,0x73,0xe1, + 0x72,0xb8,0x33,0xf7,0x5c,0x87,0x69,0xea,0x81,0xcb, + 0x3b,0xf7,0xdc,0x77,0xce,0xfb,0x70,0xce,0xfb,0x75, + 0x4e,0x28,0x16,0x8b,0x11,0x10,0xab,0x81,0xbb,0xc0, + 0x0a,0x20,0xe4,0xa3,0xfb,0x0e,0xd8,0x09,0xf4,0x05, + 0x31,0x10,0x21,0x38,0x9e,0x00,0x0b,0x81,0x1e,0x60, + 0x24,0x89,0xde,0x62,0xa0,0x1c,0x68,0x03,0xf2,0xd3, + 0x49,0x6a,0xbd,0x08,0xdd,0x06,0xea,0x2d,0xf4,0xdb, + 0x80,0x5a,0x60,0x15,0xf0,0xda,0xd6,0x48,0x38,0x20, + 0xa9,0x95,0x92,0xdd,0xc6,0xf8,0x41,0x60,0x1a,0x38, + 0x64,0x8c,0x3b,0xdb,0x56,0x1a,0xc4,0x48,0x98,0xd9, + 0x61,0xc6,0xf5,0x3b,0x0a,0x9c,0x96,0x7f,0x35,0xeb, + 0x3d,0x25,0x84,0x49,0x1d,0x97,0x81,0x2c,0xad,0x4a, + 0x14,0xb8,0x9a,0x69,0x52,0x9b,0xe4,0x5b,0x1f,0x81, + 0x12,0xe0,0x03,0xb0,0x0b,0xd8,0x9c,0x49,0x52,0xad, + 0xda,0xb6,0x09,0x45,0xe5,0x84,0xde,0xaf,0xa5,0x32, + 0x69,0x24,0x45,0x52,0x79,0x92,0xcb,0xf4,0xb8,0xd3, + 0x41,0xc6,0x48,0xcd,0x21,0x0d,0x08,0xf3,0x0f,0xc2, + 0xbd,0x52,0x6b,0x81,0x32,0x1f,0xfd,0x8a,0x59,0xda, + 0xa9,0x06,0xb2,0x7d,0x74,0x7a,0x80,0x5e,0x87,0xd4, + 0x1a,0xa0,0x1d,0x58,0x14,0xc0,0xc8,0xb0,0xa5,0xde, + 0x80,0xe4,0x11,0x4b,0xfd,0x71,0xa0,0x32,0x02,0x3c, + 0x14,0xa1,0xfb,0xc0,0x4b,0x8b,0x3f,0x0e,0x02,0x17, + 0x2c,0x8d,0x34,0x03,0xbf,0x81,0x22,0x0b,0xdd,0x62, + 0x60,0x0f,0x70,0x27,0xa2,0x62,0xf9,0x0c,0xa8,0xf3, + 0x50,0xcc,0x06,0x76,0x00,0x37,0x7c,0x26,0xcc,0x51, + 0xf1,0xed,0x02,0xe2,0xc6,0xb7,0x33,0x1e,0x2e,0xf3, + 0x2b,0xc1,0x3c,0x2f,0x80,0xd2,0xb0,0x6b,0xd9,0x4c, + 0x1c,0x00,0x3e,0x03,0xd7,0x81,0x75,0x49,0xa2,0xaf, + 0x03,0xf8,0x06,0x3c,0x92,0xec,0xf0,0x89,0xca,0x49, + 0x25,0xd9,0x6a,0x8f,0x6f,0x23,0x40,0x28,0x9c,0xa0, + 0xe5,0xe8,0x02,0x2e,0xba,0xea,0x58,0x4e,0x02,0x03, + 0x8f,0x81,0x4a,0xf9,0x58,0x8b,0x64,0xa5,0xc6,0x93, + 0x45,0x7c,0x9e,0x74,0xee,0x79,0xcd,0x6d,0x92,0x3a, + 0xa6,0xc6,0xac,0xcc,0xc2,0x07,0xe6,0x03,0x5b,0x80, + 0xb7,0x4a,0x9c,0x8d,0x92,0xc3,0x1a,0x9f,0x67,0x31, + 0x47,0x1d,0x30,0x06,0x1c,0x4e,0x44,0x2a,0x0a,0x1c, + 0x0f,0x90,0x50,0x9d,0x2d,0x6d,0x37,0xc6,0xdb,0x8d, + 0xef,0x7e,0x98,0x0b,0x9c,0x4d,0x44,0x6a,0x02,0x88, + 0x01,0x3f,0x2d,0x27,0xeb,0x95,0xac,0xf1,0xc8,0x49, + 0x33,0xae,0xef,0x7e,0x98,0x32,0x53,0x86,0xb9,0x7d, + 0x27,0x80,0x25,0xf2,0x29,0x3f,0x7c,0x01,0x9e,0x02, + 0x85,0xda,0xc2,0x4b,0x92,0x85,0x40,0x27,0xf0,0xd5, + 0x62,0x8e,0x07,0x40,0xae,0x19,0xa1,0x5e,0x8e,0x3e, + 0xa6,0xcc,0xdd,0xa8,0xd5,0x23,0x89,0x81,0x1a,0x75, + 0x07,0x85,0xc0,0x7e,0x60,0xa9,0xa2,0xaf,0x26,0x09, + 0x91,0x69,0x60,0x14,0xd8,0xaa,0x43,0x45,0xdc,0xab, + 0xcc,0xcc,0x68,0x75,0x4c,0xb4,0x00,0x57,0xe4,0x8c, + 0x7d,0x49,0x96,0xbe,0x4a,0x11,0x54,0xa6,0x36,0x39, + 0xee,0xb3,0x3a,0x59,0xfa,0x9f,0x17,0x72,0x1d,0x52, + 0x83,0xea,0xa1,0x6f,0xba,0xca,0x82,0xd7,0x8a,0x38, + 0x78,0xe3,0x91,0x10,0xe3,0x1e,0x0e,0xef,0xa0,0x09, + 0x58,0x6e,0xb1,0x95,0x1b,0xb4,0x43,0xef,0x23,0xc0, + 0x6e,0xf9,0x40,0x3d,0xf6,0xf8,0x01,0x9c,0xb7,0xd0, + 0x3b,0x0a,0x9c,0x0c,0x30,0xef,0x28,0xb0,0x2d,0x02, + 0xf4,0x03,0x0b,0xd4,0x25,0x6c,0xf4,0x69,0x67,0x2a, + 0x14,0x29,0x05,0x96,0x46,0x8a,0x25,0x4f,0x01,0xcf, + 0x7d,0xfc,0xac,0x1b,0x78,0x65,0xb6,0x2e,0x7d,0x16, + 0x27,0xd9,0xef,0x01,0x2a,0xbe,0x99,0xbb,0x5a,0xff, + 0xeb,0x26,0x2f,0x55,0x52,0x53,0x8a,0x5e,0xf3,0x99, + 0xcc,0x24,0xa9,0x51,0xc9,0x21,0x25,0xd2,0x21,0xbd, + 0x7f,0xca,0x24,0xa9,0x06,0xad,0x4c,0x54,0xdd,0x41, + 0x96,0xde,0x1b,0x32,0x49,0xaa,0x53,0xd7,0x42,0xf9, + 0xaa,0x75,0x79,0xc0,0x2d,0x35,0x8d,0x19,0x3d,0xcd, + 0xec,0x55,0x39,0x2a,0x91,0xdc,0x97,0x29,0x47,0x0f, + 0x19,0xdd,0x45,0x93,0xb6,0xad,0xc9,0x55,0x2f,0xff, + 0xda,0x61,0xd4,0x69,0x47,0xaa,0x8c,0xf1,0x73,0x7a, + 0x4c,0x14,0x19,0x57,0x42,0x69,0x21,0xd5,0xaf,0xc8, + 0xda,0xae,0x0c,0x9d,0x2c,0xca,0x0a,0x54,0x53,0xc7, + 0x9d,0x4c,0x9d,0xce,0x63,0x7b,0xad,0x8e,0x63,0xe5, + 0x16,0x77,0x58,0x03,0xba,0x85,0x09,0x84,0x3f,0x03, + 0x00,0xe0,0x20,0xa8,0x96,0x09,0xf3,0x09,0x77,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82 +}; diff --git a/data/converted/help_dpad_png.cpp b/data/converted/help_dpad_png.cpp deleted file mode 100644 index 4e2b39db9..000000000 --- a/data/converted/help_dpad_png.cpp +++ /dev/null @@ -1,367 +0,0 @@ -//this file was auto-generated from "dpad.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_png_size = 3592; -const unsigned char help_dpad_png_data[3592] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x23,0x49, - 0x44,0x41,0x54,0x78,0xda,0xd4,0xda,0x4b,0xa8,0x55, - 0x65,0x14,0x07,0xf0,0xdf,0xf1,0x9a,0xaf,0x2e,0x58, - 0x4a,0x3e,0x06,0x69,0x21,0xf9,0x88,0xae,0x24,0x39, - 0x09,0x94,0x9e,0x60,0xa0,0x03,0x8d,0xc4,0xa2,0x44, - 0xd2,0x90,0x1a,0xa4,0xe0,0x20,0xd4,0x8b,0x1a,0x25, - 0x58,0x59,0xe8,0x28,0x14,0x6c,0x60,0xa1,0xe2,0xa0, - 0x24,0xa2,0x41,0x39,0x51,0x84,0x06,0x82,0x10,0xd5, - 0x24,0x03,0x51,0xd0,0x10,0xc5,0x57,0xa5,0x37,0x0d, - 0xdd,0x4d,0xd6,0x8e,0xc3,0xe9,0x9c,0x73,0xf7,0xbe, - 0xee,0x73,0xce,0x3e,0x0b,0xd6,0x60,0x3f,0xce,0xb7, - 0xff,0xff,0xb5,0xf7,0xf7,0xad,0xf5,0xff,0xd6,0xa9, - 0x24,0x49,0xa2,0x9b,0x6d,0x78,0x9e,0x9b,0x2b,0x95, - 0x4a,0xde,0xf1,0x9f,0xc6,0x1c,0xec,0x44,0xe6,0x48, - 0xe5,0x0a,0x6a,0x92,0x24,0x99,0x3d,0xa7,0xbd,0x86, - 0x81,0x00,0xbe,0x0f,0xa3,0x5b,0x82,0xa9,0x05,0x04, - 0x46,0xa3,0x3f,0x80,0x57,0xfb,0x51,0x4c,0x2b,0x3b, - 0x81,0x09,0xd8,0x53,0x07,0x7c,0xea,0xbf,0xe2,0xd9, - 0xb2,0x12,0x78,0x34,0xa2,0x9c,0x0c,0xe2,0x17,0xb0, - 0xba,0x6c,0x04,0x9e,0xc3,0xa9,0x0c,0xe0,0x53,0x1f, - 0xc0,0x07,0x65,0x21,0xb0,0x02,0xd7,0x73,0x80,0xaf, - 0xf6,0xfd,0xe8,0xed,0x14,0x81,0x31,0xd8,0x34,0x44, - 0xe0,0x4d,0x27,0x77,0x3b,0x08,0x4c,0xc6,0xde,0x02, - 0xc0,0xa7,0xfe,0x1b,0x9e,0x6f,0x17,0x81,0xc7,0x70, - 0xac,0x40,0xf0,0xa9,0x5f,0xc4,0x9b,0xf1,0x8c,0x11, - 0x99,0x93,0x6b,0xc6,0xfb,0x46,0x46,0xd6,0x9e,0x89, - 0x4f,0x30,0x0b,0x7f,0xa7,0x01,0x8b,0x07,0x8e,0xcf, - 0xf1,0xe0,0x04,0x7f,0xe0,0x32,0x7a,0xe2,0x5c,0x0f, - 0xfe,0xc2,0x2e,0x4c,0xc7,0xdb,0xb8,0x5d,0x54,0xc9, - 0xb1,0x14,0x1b,0x9b,0x5c,0x9f,0x8d,0x13,0x39,0xa2, - 0x7d,0x0b,0xef,0x36,0x19,0xef,0x4c,0x04,0x6a,0x50, - 0x1b,0x96,0xe1,0x9e,0xf9,0xd8,0x1e,0x49,0xaa,0x9d, - 0xb6,0x0e,0xab,0xee,0x96,0xc0,0x0c,0xbc,0x8f,0xa9, - 0xb1,0x76,0xb7,0xdb,0x3e,0xc5,0xbc,0xa1,0x12,0x18, - 0x8f,0x77,0xf0,0x54,0x07,0xab,0xe5,0x11,0xf8,0x0a, - 0x0f,0xe7,0x25,0x30,0x1c,0x6b,0xb0,0xb2,0x04,0x25, - 0xff,0x03,0xf8,0x1a,0x63,0xf3,0xe8,0x81,0x55,0xd8, - 0xdc,0x42,0x50,0x3d,0x58,0x14,0xf9,0xa4,0x9e,0x8d, - 0xab,0x39,0xee,0xc3,0xe7,0x78,0xb1,0x76,0x65,0xaa, - 0xb7,0x8c,0x2e,0xc6,0x17,0x75,0x52,0xfc,0x79,0x9c, - 0xc6,0x3d,0x0d,0x4a,0xe8,0x87,0x22,0x3b,0xb7,0xd2, - 0xb6,0xc7,0x67,0xdd,0xd0,0x9e,0xc4,0xc9,0x16,0x24, - 0xa9,0x22,0x7d,0x79,0x23,0xf0,0xd3,0x71,0xb8,0xe4, - 0xe0,0x13,0xdc,0x8c,0x40,0xff,0x6f,0xc5,0xf9,0xac, - 0x0b,0xc0,0x57,0x6b,0x8a,0x29,0xd5,0x13,0x6a,0x4b, - 0x17,0x81,0x4f,0xfd,0x27,0xf4,0xf6,0xe0,0x8d,0xac, - 0x69,0xbb,0x64,0x36,0x31,0x5d,0x50,0x7e,0xe8,0xc2, - 0xe8,0x27,0x38,0x1b,0x39,0xc2,0xb2,0x98,0x18,0xdd, - 0x04,0xfe,0x46,0xe4,0x86,0xff,0x6c,0x6d,0x97,0x11, - 0x58,0x52,0xfb,0x3d,0x8d,0xc2,0x87,0x5d,0x02,0xbe, - 0xbf,0xd1,0xa4,0x98,0x14,0x22,0xbb,0xcc,0xe0,0xf7, - 0x0d,0xa6,0xc8,0xfa,0xb0,0xbb,0x5e,0xa2,0x28,0xd8, - 0xfe,0x8c,0xb2,0xe4,0x56,0x83,0xeb,0x7d,0x75,0xd4, - 0xdd,0xf1,0xd8,0x6b,0x1d,0x18,0xac,0x16,0x7a,0x26, - 0x04,0xfb,0x83,0x35,0xe7,0x7f,0xc4,0x91,0x06,0xf5, - 0xce,0xfc,0xd0,0x0e,0xc3,0x32,0x12,0x38,0x1a,0xdb, - 0x31,0x67,0x9a,0x28,0xb2,0x29,0x55,0xc7,0xe7,0x30, - 0x37,0xea,0xb1,0x4c,0xf6,0x4a,0x68,0xde,0xea,0xd7, - 0xb7,0xad,0xc9,0xfd,0xbb,0xf0,0x4f,0x8e,0x4f,0xe1, - 0x48,0x88,0xa4,0x66,0x92,0xb2,0x7a,0xc5,0x79,0x3c, - 0xaf,0x1e,0x38,0x80,0x0d,0x25,0x49,0x58,0xaf,0xc6, - 0xdb,0xcf,0xad,0xc8,0x76,0xe3,0xe3,0x0e,0x83,0xdf, - 0x82,0x43,0x43,0x95,0x94,0x37,0xa2,0x31,0xf1,0x65, - 0x87,0xc0,0x1f,0xc4,0x7b,0x77,0xdb,0xa1,0x39,0x87, - 0xad,0xa1,0x49,0x7b,0xdb,0x08,0xfe,0x38,0x5e,0x2f, - 0x72,0x63,0x6b,0x01,0x1e,0x89,0xad,0x95,0x97,0x43, - 0x81,0xdd,0x89,0x6b,0xb7,0xa3,0x26,0xb9,0x37,0xc7, - 0x78,0x37,0x71,0x29,0x26,0x7e,0xa5,0x2a,0x99,0x9e, - 0x88,0xaa,0xe0,0x02,0xae,0x15,0xad,0x61,0xd3,0xb7, - 0xd5,0x1f,0x83,0x17,0x9d,0xa4,0xbe,0x4d,0x57,0xa6, - 0x76,0x6c,0xee,0xbe,0x84,0xdf,0x0b,0x04,0xbf,0x03, - 0xf7,0xb7,0x7b,0x7b,0xbd,0x0f,0x3f,0x17,0x00,0xfe, - 0xad,0xd8,0x7b,0xed,0x48,0x83,0x63,0x1c,0xbe,0x1f, - 0x22,0xf0,0x2b,0x58,0x58,0x6f,0xde,0x74,0xa2,0xc5, - 0xb4,0x27,0xa7,0xa6,0xf8,0x05,0x4f,0x94,0xad,0xc9, - 0xb7,0x1e,0x57,0x33,0x80,0xff,0xa6,0xa6,0xce,0x29, - 0x55,0x9b,0x75,0x49,0xe4,0x8e,0x46,0xe0,0x3f,0xc2, - 0x7d,0x65,0xee,0x13,0x37,0x9b,0xdc,0xab,0x6b,0x27, - 0x6b,0x59,0x09,0x88,0x28,0x7f,0x17,0xc0,0xaf,0xe2, - 0x85,0x3c,0x3f,0x2e,0x03,0x81,0xb4,0x4c,0xd9,0x1c, - 0xdd,0x1b,0xad,0x22,0x50,0xe9,0xf6,0xbf,0xdb,0xfc, - 0x3b,0x00,0x9b,0x38,0x71,0x5e,0x35,0xd3,0xf7,0xca, - 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, - 0x60,0x82 -}; diff --git a/data/converted/help_dpad_right_png.cpp b/data/converted/help_dpad_right_png.cpp new file mode 100644 index 000000000..f74f76fc0 --- /dev/null +++ b/data/converted/help_dpad_right_png.cpp @@ -0,0 +1,188 @@ +//this file was auto-generated from "dpad_right.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_right_png_size = 1802; +const unsigned char help_dpad_right_png_data[1802] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x31, + 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x30, + 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0x94,0x89,0x63,0xf5,0x00,0x00,0x03,0x38,0x49,0x44, + 0x41,0x54,0x78,0xda,0xd4,0x98,0x4b,0x68,0x13,0x41, + 0x18,0xc7,0x37,0x71,0x6d,0x7d,0xd5,0x43,0xeb,0xa3, + 0xda,0x0a,0x0a,0xd5,0x8a,0x22,0x11,0x44,0x50,0x11, + 0x6a,0x2b,0x88,0xe2,0x03,0x3c,0x19,0xbd,0x88,0x3d, + 0xd8,0x56,0xd1,0x22,0x2a,0x49,0x45,0x7c,0x55,0xa2, + 0x60,0x35,0xd0,0x83,0x54,0xaa,0x07,0x2f,0x5a,0xc1, + 0x93,0x0f,0xbc,0xf8,0xc2,0x4b,0x14,0xb4,0x07,0x5f, + 0x54,0xd1,0x0a,0x5a,0x6d,0x6d,0xa3,0xa2,0x0d,0x5a, + 0x43,0x7d,0xfc,0x07,0xfe,0x85,0x30,0xec,0xee,0xcc, + 0x6e,0x8c,0xab,0x1f,0xfc,0x58,0x32,0x99,0x9d,0xf9, + 0x66,0xe6,0x7b,0xcd,0x06,0x22,0x91,0x88,0xe1,0x52, + 0xc6,0x81,0xe3,0x60,0x2d,0x28,0x70,0xe8,0xf7,0x15, + 0x5c,0x03,0x5b,0x40,0xaf,0x9b,0x09,0x4c,0xc3,0xbd, + 0xb4,0x81,0x85,0xa0,0x15,0x74,0x3b,0xf4,0x9b,0x00, + 0x6a,0xc1,0x69,0xb0,0x26,0x97,0x4a,0x15,0x83,0xa5, + 0x60,0x37,0x68,0xd2,0xe8,0xff,0x19,0xec,0x07,0x45, + 0xe0,0x83,0xee,0x24,0x41,0x97,0x4a,0x8d,0xe7,0xb3, + 0x43,0x6a,0x5f,0x00,0x92,0x60,0x91,0xd4,0xfe,0x82, + 0x73,0x4c,0x76,0x33,0x49,0xd0,0xf0,0x26,0xbf,0xa4, + 0xdd,0x6e,0xe1,0x6e,0xb4,0x78,0x34,0x89,0x3f,0xa2, + 0x54,0xa6,0x6c,0x07,0x21,0x70,0x0a,0xcc,0x01,0x3b, + 0xfc,0x56,0xaa,0x14,0x1c,0x04,0x57,0x68,0xd4,0x97, + 0xc0,0x3e,0x30,0xc5,0x4f,0xa5,0xe2,0x60,0x0c,0xe8, + 0x07,0x47,0x41,0x8a,0xbf,0xe3,0xd9,0x0c,0x9a,0xed, + 0xf9,0x87,0xf8,0x5c,0x2f,0xb5,0xcf,0xf5,0x53,0xa9, + 0x19,0x46,0x0e,0x24,0x68,0xfc,0x83,0x62,0x4a,0x11, + 0x58,0x65,0xa0,0x65,0x1e,0xe7,0x99,0x05,0xf2,0x14, + 0x7d,0xba,0xc0,0xfb,0x21,0xa5,0x44,0x40,0x3c,0x0b, + 0x56,0xb8,0x88,0x51,0x49,0xcd,0xbe,0xef,0xd8,0xbf, + 0x4d,0xb3,0xff,0x0d,0x10,0x36,0x99,0x9b,0x2a,0xc0, + 0x1e,0x46,0x60,0x95,0xf4,0x80,0x7b,0x9a,0x93,0xdc, + 0x06,0x4b,0xc0,0x44,0x8d,0xbe,0xe2,0x94,0x1a,0xc1, + 0x31,0xa1,0xd4,0x72,0xd0,0x0c,0x8e,0x58,0x74,0x1c, + 0x4e,0x63,0x7e,0xa2,0x18,0x30,0x8f,0x31,0x4b,0x1c, + 0x41,0x5a,0xfa,0xef,0x8e,0x85,0x1d,0xff,0xb4,0x19, + 0x67,0x1a,0xd8,0x18,0xe4,0x80,0x56,0xc9,0x72,0x3e, + 0xb8,0x0f,0x1e,0x39,0xac,0x74,0x18,0x88,0x81,0x4f, + 0xe0,0x25,0x9f,0x31,0xb6,0xdb,0xc9,0x5b,0x70,0x99, + 0x0a,0x58,0xfd,0x57,0x60,0xe5,0x7d,0xa3,0xc1,0x09, + 0x90,0xa0,0x81,0x06,0x40,0xbe,0xcd,0x04,0x87,0x41, + 0x03,0x23,0xf9,0x66,0x3e,0x1b,0xd8,0xee,0x54,0x69, + 0xac,0xe2,0xee,0x47,0xad,0x1c,0x40,0x56,0x6a,0x19, + 0x77,0xa6,0x9e,0xb9,0x6c,0x9b,0xc3,0xe0,0x23,0x98, + 0xf7,0xce,0x33,0x78,0xb6,0xf2,0x79,0x81,0xef,0xe5, + 0x2b,0x8e,0x7c,0x24,0x4d,0xa6,0x1d,0x2c,0xb6,0x53, + 0xca,0xcc,0xd8,0x56,0x61,0xf4,0x5b,0xc1,0x17,0xc5, + 0x8a,0x47,0x81,0x5b,0x52,0xfb,0x4d,0xee,0x76,0xb1, + 0xa6,0x33,0xcc,0x66,0xee,0xb4,0x54,0x6a,0x10,0xac, + 0x04,0x9d,0x5c,0xc1,0x49,0x30,0x56,0xe1,0x85,0xa2, + 0xe4,0xad,0x92,0xda,0xab,0x98,0x03,0x7b,0x34,0x95, + 0xea,0x90,0x2b,0x53,0x39,0xcd,0x5c,0x67,0xf9,0xd1, + 0xc8,0xa3,0x71,0x92,0x01,0x7a,0x6d,0x54,0x72,0xff, + 0x75,0x4c,0xce,0xdf,0x15,0xef,0x7f,0xa3,0xed,0x35, + 0xc9,0x1e,0x6b,0xda,0x14,0xfc,0x3b,0x69,0x2b,0x67, + 0xa8,0xe4,0x80,0xcd,0xc0,0x7b,0x19,0x1c,0x85,0x0d, + 0x86,0xb9,0x43,0x31,0x96,0x2f,0x76,0x22,0xa2,0xf6, + 0x03,0xda,0x5d,0xa7,0x5d,0x9a,0x49,0x31,0xc6,0xc8, + 0x22,0xc2,0xc1,0x3c,0x50,0xee,0x70,0x1b,0xf9,0x41, + 0xfb,0x3b,0x00,0x4a,0xe8,0xd2,0x69,0xc5,0x0e,0x95, + 0xf0,0x3d,0xbb,0x9b,0x52,0x5a,0x28,0x75,0x11,0x6c, + 0x02,0xaf,0xc0,0x6b,0x87,0xdc,0x95,0xb9,0x52,0x39, + 0x20,0xa6,0xf9,0xbe,0x95,0x54,0x30,0xaf,0xaa,0x64, + 0x26,0xa8,0x03,0x57,0x4d,0xde,0x4c,0xa6,0x6a,0xde, + 0x4e,0x86,0x72,0x9f,0xb8,0x20,0xdc,0xd5,0xe8,0x5b, + 0xc9,0x7c,0x16,0xd0,0x1c,0x57,0xdc,0x13,0x6b,0x4c, + 0x26,0xd7,0x4a,0xae,0xa6,0x54,0x31,0x40,0x19,0x93, + 0x6b,0x91,0xe6,0x02,0x26,0x71,0xbc,0xb0,0x22,0xaf, + 0x0a,0x85,0xde,0x80,0x3e,0xd9,0xd0,0x7b,0x35,0x6e, + 0xb2,0x69,0xc3,0x9b,0x3c,0x65,0x50,0xfe,0x7f,0x8b, + 0xbc,0x6c,0x95,0x7a,0xce,0xad,0x97,0x79,0xe6,0x67, + 0x8d,0xfe,0x18,0x4c,0x07,0xe7,0x68,0x13,0xa2,0x26, + 0xda,0x00,0x1e,0xfa,0xb9,0x53,0xf5,0x19,0xd7,0xaa, + 0x28,0xbf,0xc2,0xa4,0xb2,0xbd,0x90,0x66,0xab,0x94, + 0xd8,0x9d,0x43,0xcc,0x5d,0x22,0x57,0xae,0xe6,0x07, + 0x8d,0x2e,0xbf,0x6f,0x33,0x71,0x7a,0x56,0x1d,0x8f, + 0xad,0xd9,0x2f,0x43,0x0f,0x48,0xd5,0x45,0x0d,0xf8, + 0xc8,0xab,0xfb,0xe0,0xdf,0x56,0xaa,0x9b,0xf5,0x75, + 0x48,0x6a,0x4f,0x30,0xa0,0x26,0x2c,0xbe,0x35,0x18, + 0x2e,0xca,0x18,0x4f,0xde,0x97,0x64,0x2a,0x10,0x49, + 0xb8,0x50,0x11,0x6c,0x85,0x27,0x56,0xb3,0x1c,0xea, + 0xcb,0x75,0x48,0xa8,0xa6,0x51,0xd7,0xb2,0xf2,0xb4, + 0x93,0x7e,0x96,0xc6,0xbb,0xdc,0x4e,0xf0,0x5b,0x80, + 0x01,0x00,0x6d,0xd6,0xb5,0x52,0x54,0x06,0x6d,0xa8, + 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, + 0x60,0x82 +}; diff --git a/data/converted/help_dpad_up_down_png.cpp b/data/converted/help_dpad_up_down_png.cpp new file mode 100644 index 000000000..8f323dda1 --- /dev/null +++ b/data/converted/help_dpad_up_down_png.cpp @@ -0,0 +1,1638 @@ +//this file was auto-generated from "dpad_up_down.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_up_down_png_size = 16306; +const unsigned char help_dpad_up_down_png_data[16306] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x3c,0x0e,0x69,0x54, + 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x00, + 0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61,0x63, + 0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e,0x3d, + 0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22, + 0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68,0x69, + 0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63,0x7a, + 0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c,0x78, + 0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64, + 0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74, + 0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74, + 0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58, + 0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e, + 0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39,0x2e, + 0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32,0x30, + 0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d,0x31, + 0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d, + 0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78, + 0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, + 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20, + 0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, + 0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73, + 0x74,0x52,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f, + 0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f, + 0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x65, + 0x66,0x23,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f, + 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, + 0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f, + 0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74, + 0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74, + 0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x74,0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, + 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66, + 0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, + 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30, + 0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69, + 0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d, + 0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70, + 0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e, + 0x74,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x45, + 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x3c,0x2f,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, + 0x39,0x39,0x66,0x31,0x63,0x61,0x61,0x2d,0x36,0x33, + 0x63,0x62,0x2d,0x31,0x66,0x34,0x33,0x2d,0x39,0x65, + 0x62,0x32,0x2d,0x31,0x33,0x65,0x36,0x37,0x32,0x37, + 0x61,0x30,0x38,0x39,0x64,0x3c,0x2f,0x78,0x6d,0x70, + 0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d, + 0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46,0x72, + 0x6f,0x6d,0x20,0x72,0x64,0x66,0x3a,0x70,0x61,0x72, + 0x73,0x65,0x54,0x79,0x70,0x65,0x3d,0x22,0x52,0x65, + 0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e, + 0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e,0x73, + 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, + 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, + 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, + 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, + 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, + 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f,0x63, + 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, + 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, + 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66, + 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x72, + 0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54,0x79, + 0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76, + 0x65,0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x64,0x36,0x38,0x36,0x39,0x31,0x37,0x33, + 0x2d,0x63,0x37,0x62,0x30,0x2d,0x33,0x32,0x34,0x61, + 0x2d,0x62,0x33,0x66,0x39,0x2d,0x33,0x32,0x36,0x32, + 0x38,0x31,0x30,0x61,0x34,0x61,0x65,0x63,0x3c,0x2f, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, + 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x32,0x30, + 0x31,0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31, + 0x36,0x3a,0x32,0x34,0x3a,0x32,0x34,0x2d,0x30,0x35, + 0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74, + 0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x41,0x67,0x65,0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64, + 0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, + 0x74,0x3a,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x3e, + 0x2f,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, + 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, + 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, + 0x64,0x66,0x3a,0x6c,0x69,0x20,0x72,0x64,0x66,0x3a, + 0x70,0x61,0x72,0x73,0x65,0x54,0x79,0x70,0x65,0x3d, + 0x22,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x22, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, + 0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76,0x65,0x64,0x3c, + 0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, + 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, + 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, + 0x39,0x39,0x66,0x31,0x63,0x61,0x61,0x2d,0x36,0x33, + 0x63,0x62,0x2d,0x31,0x66,0x34,0x33,0x2d,0x39,0x65, + 0x62,0x32,0x2d,0x31,0x33,0x65,0x36,0x37,0x32,0x37, + 0x61,0x30,0x38,0x39,0x64,0x3c,0x2f,0x73,0x74,0x45, + 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, + 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, + 0x77,0x68,0x65,0x6e,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x34,0x3a,0x32,0x34,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68, + 0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, + 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, + 0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73, + 0x29,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, + 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, + 0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, + 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x2f,0x3c,0x2f, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x63,0x68,0x61,0x6e, + 0x67,0x65,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x53,0x65, + 0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, + 0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, + 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72, + 0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f, + 0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43, + 0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, + 0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31, + 0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36, + 0x3a,0x31,0x36,0x3a,0x30,0x36,0x2d,0x30,0x35,0x3a, + 0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43,0x72, + 0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66,0x79, + 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x34,0x3a,0x32,0x34,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69, + 0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d, + 0x70,0x3a,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61, + 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, + 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, + 0x34,0x3a,0x32,0x34,0x2d,0x30,0x35,0x3a,0x30,0x30, + 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61, + 0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e, + 0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x3c, + 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64, + 0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f, + 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, + 0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74, + 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75, + 0x6d,0x65,0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74, + 0x6f,0x72,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, + 0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e, + 0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x43, + 0x44,0x39,0x31,0x31,0x37,0x41,0x39,0x44,0x38,0x41, + 0x31,0x31,0x45,0x33,0x41,0x39,0x31,0x44,0x42,0x44, + 0x46,0x44,0x34,0x30,0x39,0x39,0x32,0x45,0x45,0x33, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x42,0x61, + 0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73, + 0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74,0x6f,0x72, + 0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, + 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, + 0x31,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, + 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32, + 0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30, + 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65, + 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73,0x6f, + 0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32,0x30, + 0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30,0x3c, + 0x2f,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74, + 0x69,0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c,0x75, + 0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e,0x32, + 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x52,0x65,0x73, + 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69, + 0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f, + 0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x36, + 0x35,0x35,0x33,0x35,0x3c,0x2f,0x65,0x78,0x69,0x66, + 0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x53,0x70,0x61,0x63, + 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x50,0x69, + 0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e,0x73, + 0x69,0x6f,0x6e,0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78, + 0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58,0x44, + 0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c, + 0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e, + 0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a, + 0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d,0x65, + 0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44, + 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, + 0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, + 0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a, + 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x3c,0x3f,0x78, + 0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65,0x6e,0x64, + 0x3d,0x22,0x77,0x22,0x3f,0x3e,0x97,0x58,0x4c,0x05, + 0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00,0x00, + 0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9,0xff, + 0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00,0x00, + 0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17,0x6f, + 0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x1e,0x49,0x44, + 0x41,0x54,0x78,0xda,0xd4,0xd8,0xdf,0x8b,0x55,0x55, + 0x14,0x07,0xf0,0xcf,0xbd,0x5c,0x4a,0x45,0xc2,0x14, + 0x53,0x64,0x9a,0x32,0x2b,0xc2,0x52,0x6b,0x34,0x72, + 0x7c,0xc8,0xa4,0x5f,0x98,0xd4,0x83,0x08,0x11,0x81, + 0xbd,0x04,0x41,0x0f,0x13,0x3d,0x0d,0xfd,0x03,0x3d, + 0xf4,0x10,0x66,0xbd,0x29,0x11,0x18,0x84,0x68,0xd2, + 0x4f,0x8b,0x02,0xab,0x79,0x98,0x14,0x7f,0x16,0x26, + 0xe2,0x0f,0x22,0xfb,0x61,0x38,0x26,0x51,0x43,0xea, + 0x54,0x4e,0x2f,0xeb,0xc0,0x61,0x73,0xee,0xb9,0xe7, + 0xcc,0x30,0xdd,0xfa,0xc2,0x61,0xdf,0xbb,0xcf,0xda, + 0x7b,0x7d,0xd9,0xeb,0xc7,0x5e,0xeb,0x34,0x06,0x07, + 0x07,0xd5,0xc4,0xad,0xd8,0x8d,0x9b,0xd0,0xe8,0x20, + 0xfb,0x23,0x1e,0xc2,0xb1,0x3a,0x0a,0x5a,0xea,0xe3, + 0x4b,0xcc,0xc6,0x11,0x9c,0x2d,0x91,0xbb,0x0e,0xcb, + 0xb1,0x07,0xf3,0xa7,0x92,0xd4,0xd2,0x20,0xf4,0x01, + 0x1e,0xad,0x20,0xbf,0x07,0x6b,0x70,0x0b,0x4e,0x56, + 0x55,0xd2,0xac,0x49,0xea,0xe6,0x18,0x0f,0x25,0xf3, + 0x4f,0xe3,0x0a,0x9e,0x49,0xe6,0x33,0xb3,0x2d,0xa9, + 0xa3,0xa4,0x69,0x62,0x18,0xcf,0xfd,0x9e,0x86,0xcd, + 0xe1,0x5f,0x9b,0xe2,0xff,0xa4,0xd0,0x34,0x79,0x6c, + 0xc7,0xf4,0x1c,0xc1,0x9d,0xdd,0x26,0x75,0x77,0x81, + 0x6f,0x3d,0x82,0x7b,0xba,0x49,0x6a,0x57,0x41,0x5a, + 0x68,0xe0,0xed,0x6e,0x92,0x9a,0x57,0x92,0x0e,0x26, + 0x8c,0xd6,0x24,0x49,0x5d,0x65,0x0a,0xd0,0xf4,0x1f, + 0x44,0xfe,0xa4,0x16,0xa3,0xaf,0x83,0xfc,0x8a,0x09, + 0xea,0xb9,0x17,0x33,0x3a,0xc8,0x1c,0xc1,0xd1,0x8c, + 0xd4,0x6d,0x18,0xc2,0xdc,0x1a,0x4a,0xce,0x54,0x94, + 0x3b,0x15,0xe3,0x73,0x15,0xe5,0x2f,0xa0,0xbf,0x85, + 0xcf,0x82,0xd0,0x27,0xf8,0xa6,0xc2,0xc2,0xd3,0x78, + 0xbd,0xa2,0x92,0x4d,0xf8,0x1b,0x0b,0x2b,0xc8,0x2e, + 0xc2,0x63,0xf8,0xb0,0x15,0x97,0xe5,0x7e,0x3c,0x5c, + 0x20,0x38,0x03,0x0f,0xe2,0xdd,0x0e,0x1b,0xce,0x8c, + 0xcb,0xf7,0x20,0x46,0x93,0x77,0xaf,0x16,0xb8,0xcc, + 0x5f,0x6d,0xf6,0xf9,0x0a,0x4b,0x9a,0xb9,0x63,0x4b, + 0xf1,0x14,0x7e,0xc1,0x3b,0xb8,0xa3,0x24,0xfa,0x86, + 0xf1,0x3b,0x3e,0x8f,0x71,0xb8,0x43,0x54,0x5e,0xc6, + 0xcf,0xe1,0x67,0x29,0xce,0xa2,0xd1,0x6c,0x93,0x63, + 0x0e,0xe2,0x8d,0xdc,0x3d,0x36,0xb3,0x8d,0x82,0x2f, + 0xd0,0x1f,0x3e,0xb6,0x2d,0xc6,0xfe,0x98,0x2f,0x8b, + 0xf8,0x79,0x21,0xf3,0x71,0xd1,0xde,0x29,0xa9,0x17, + 0xa2,0x30,0xeb,0x8b,0x48,0x78,0xab,0x64,0xf3,0x59, + 0x58,0x89,0xef,0x70,0x03,0x36,0xc6,0x78,0x26,0xe6, + 0xaf,0x29,0x59,0xfb,0x35,0x7e,0x08,0x97,0x39,0x8f, + 0x67,0xdb,0x91,0x9a,0x86,0x17,0xc3,0xe6,0x1f,0x45, + 0xb9,0x71,0xa1,0x64,0xe3,0xcc,0xa4,0x43,0xc9,0xfc, + 0x50,0xf2,0x5e,0x1b,0x33,0x5d,0x8f,0xc3,0xb8,0x1a, + 0xaf,0xb5,0x23,0x75,0x09,0x83,0xf8,0x13,0x6b,0xe3, + 0xa4,0x66,0x97,0x6c,0x7c,0x34,0xc6,0xd5,0x05,0x39, + 0x69,0x3c,0xf7,0xbe,0x08,0xf3,0xf1,0x3d,0xee,0xc2, + 0x58,0x9a,0x32,0x52,0xf3,0xbd,0x84,0x05,0xe1,0x53, + 0xb7,0xe3,0x89,0x92,0x8d,0x7f,0xc5,0x5e,0xf4,0x86, + 0x09,0xdf,0x8c,0xb1,0x17,0xfb,0xf0,0x5b,0xc9,0xda, + 0x65,0xe8,0xc1,0xa7,0x98,0x93,0x46,0x68,0x91,0xa3, + 0x9f,0x8f,0xcc,0xbd,0x31,0x4e,0x4f,0x89,0x82,0xd5, + 0x51,0xb3,0xf7,0xe2,0xc9,0x30,0xc9,0x70,0xc1,0xe9, + 0xe5,0x71,0x05,0x23,0xb8,0x2f,0x9a,0x8a,0xd1,0xa2, + 0x6b,0x66,0x3c,0x4e,0x27,0xc5,0x36,0xec,0x08,0x67, + 0x6c,0xd7,0x8d,0x8c,0x61,0x55,0x44,0x50,0x5f,0x94, + 0xc9,0xa3,0x1d,0x72,0xda,0xf4,0x58,0x57,0x84,0x39, + 0x19,0xa9,0xd3,0xe1,0xd4,0xef,0xe5,0xae,0x85,0xa2, + 0x13,0xc9,0xf0,0x6d,0x41,0x42,0x1c,0x2d,0x70,0xf8, + 0x0c,0x03,0xb8,0xb1,0x42,0x46,0x5f,0x16,0x16,0xfa, + 0xa9,0x85,0x75,0xe1,0x03,0x55,0xba,0x93,0x0c,0x17, + 0xb1,0xb5,0x82,0xdc,0xf3,0x78,0xb9,0xc6,0xbe,0x23, + 0xb8,0xbf,0x85,0x13,0xb8,0x36,0xaa,0x84,0x3b,0x3b, + 0x94,0x33,0x2b,0x22,0x52,0x7a,0x2a,0x2a,0x59,0x14, + 0xe3,0x2b,0x38,0xd0,0xc1,0xcf,0x0e,0xe1,0x78,0x5a, + 0xba,0x1c,0xab,0xd0,0xc9,0xfe,0x51,0xe3,0xc6,0x4f, + 0x73,0xd7,0xae,0xff,0x75,0x91,0x37,0x59,0x52,0x63, + 0x11,0xbd,0xe9,0x73,0xb9,0x9b,0xa4,0x46,0xda,0xcc, + 0x9f,0xeb,0x26,0xa9,0xf5,0x49,0xb7,0x9c,0x75,0xcf, + 0xeb,0xbb,0x49,0x6a,0x5f,0x7c,0x16,0xca,0xe3,0xfd, + 0x28,0x1a,0xbb,0xda,0xcd,0x6c,0xc8,0x5d,0x47,0x97, + 0xf0,0x78,0xb7,0x1c,0xbd,0x91,0x54,0x17,0x03,0x61, + 0xb6,0x81,0x1c,0xc1,0x7f,0xad,0x19,0xcd,0xca,0x91, + 0x55,0xc9,0xfc,0x96,0x78,0x52,0x2c,0x4c,0x3e,0x09, + 0x4d,0x09,0xa9,0x13,0x11,0x59,0x0f,0x44,0x86,0x2e, + 0x8b,0xb2,0x9e,0x5c,0xa1,0x78,0x7c,0xaa,0xdb,0xf6, + 0x35,0xd1,0x8e,0x2d,0xaf,0xf0,0x0d,0xeb,0x54,0x7c, + 0x85,0xa9,0x85,0x7f,0x06,0x00,0xf4,0x2d,0xa8,0xcd, + 0x56,0x9a,0xd2,0xb6,0x00,0x00,0x00,0x00,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_dpad_up_png.cpp b/data/converted/help_dpad_up_png.cpp new file mode 100644 index 000000000..e910243ac --- /dev/null +++ b/data/converted/help_dpad_up_png.cpp @@ -0,0 +1,188 @@ +//this file was auto-generated from "dpad_up.png" by res2h + +#include "../Resources.h" + +const size_t help_dpad_up_png_size = 1804; +const unsigned char help_dpad_up_png_data[1804] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, + 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, + 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x41, + 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x39, + 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0xe2,0x6a,0x11,0x2f,0x00,0x00,0x03,0x3a,0x49,0x44, + 0x41,0x54,0x78,0xda,0xd4,0x98,0x5b,0x6c,0x0c,0x51, + 0x18,0xc7,0x67,0xd7,0x68,0x85,0xad,0x07,0x75,0x29, + 0x2d,0x21,0xa9,0x4b,0x88,0x54,0x22,0x12,0x44,0x52, + 0x25,0x11,0xe2,0x16,0x0f,0x62,0x3d,0x89,0x3e,0x68, + 0x11,0xaa,0x41,0xb6,0x45,0xdc,0x2a,0x4b,0xe2,0x52, + 0x69,0x44,0x2a,0x78,0xf0,0x42,0x89,0x27,0x22,0x5e, + 0xdc,0xe2,0x65,0x2b,0xc1,0x83,0x5b,0x10,0x2a,0xa1, + 0x94,0x76,0x11,0x34,0xd4,0xa4,0x2e,0xff,0x2f,0xf9, + 0x37,0xd9,0x9c,0xcc,0xcc,0x99,0xd9,0xb5,0x86,0x2f, + 0xf9,0x65,0x76,0xcf,0x9c,0xcb,0x77,0xce,0xf9,0xce, + 0xf7,0x7d,0x67,0x42,0xb1,0x58,0xcc,0xf0,0x29,0x03, + 0xc1,0x41,0xb0,0x04,0xe4,0xb9,0xd4,0xfb,0x0a,0x2e, + 0x83,0x35,0xa0,0xdd,0xcf,0x00,0xa6,0xe1,0x5f,0x9a, + 0xc0,0x34,0x70,0x1c,0xb4,0xb9,0xd4,0x1b,0x0c,0x2a, + 0xc1,0x09,0xb0,0x28,0x9b,0x4a,0x15,0x80,0xd9,0x60, + 0x33,0x38,0xe0,0xa1,0xfe,0x27,0xb0,0x03,0xe4,0x83, + 0xf7,0x5e,0x07,0x09,0xfb,0x54,0x6a,0x10,0x9f,0x8f, + 0x95,0xf2,0xa9,0x20,0x09,0xa6,0x2b,0xe5,0xcf,0x38, + 0xc6,0x30,0x3f,0x83,0x84,0x8d,0xf4,0xe4,0x97,0xb2, + 0xda,0x8d,0x5c,0x8d,0xc6,0x34,0x4d,0xe2,0x8f,0x28, + 0x95,0x2a,0xeb,0x41,0x09,0x7f,0x4f,0x04,0xd5,0x41, + 0x2b,0x55,0x04,0x76,0x29,0x65,0xdb,0xc1,0xf0,0x20, + 0x95,0xaa,0x07,0x11,0xa5,0x2c,0xc2,0xf2,0xc0,0x94, + 0x2a,0x71,0x28,0x9f,0x94,0x49,0xa7,0x99,0x1a,0xe5, + 0x18,0x23,0x0b,0x12,0x36,0xfe,0x41,0x31,0x15,0x0f, + 0xac,0x33,0xd0,0xe2,0x34,0xc7,0x19,0x0f,0x72,0x34, + 0x75,0x5a,0xc1,0xbb,0x1e,0xa5,0xc4,0x21,0x9e,0x02, + 0xf3,0x7c,0xf8,0xa8,0xa4,0xc7,0xba,0x6f,0x58,0xbf, + 0xc9,0x63,0xfd,0xab,0x20,0x6a,0x32,0x36,0x95,0x82, + 0x2d,0xf4,0xc0,0x3a,0x79,0x0b,0x6e,0x79,0x1c,0xe4, + 0x06,0x98,0x09,0x86,0x78,0xa8,0x2b,0xbb,0x54,0x07, + 0xf6,0x8b,0x52,0x73,0x41,0x03,0xd8,0x6b,0x53,0xb1, + 0x37,0x8d,0xf9,0xa1,0xa6,0xc3,0x1c,0xfa,0x2c,0xd9, + 0x02,0x4b,0x79,0x77,0xd3,0xc6,0x8e,0x7f,0x3a,0xf4, + 0x33,0x0a,0xac,0x08,0xb3,0x43,0xbb,0x60,0x39,0x05, + 0xdc,0x06,0xf7,0x5d,0x66,0xda,0x0b,0xc4,0xc1,0x47, + 0xf0,0x9c,0xcf,0x38,0xcb,0x9d,0xe4,0x35,0xb8,0x48, + 0x05,0xec,0xde,0xe5,0xd9,0x9d,0xbe,0x7e,0xe0,0x10, + 0x48,0xd0,0x40,0x43,0x20,0xd7,0x61,0x80,0x3d,0xa0, + 0x16,0x5c,0x00,0xab,0xf8,0xac,0x65,0xb9,0x5b,0xa6, + 0xb1,0x80,0xab,0x5f,0x63,0x77,0x00,0x54,0xa5,0xe6, + 0x70,0x65,0xaa,0xc0,0x31,0xb0,0xce,0xa5,0xf3,0x3e, + 0x8c,0x7b,0x67,0xc0,0x72,0xe6,0x57,0xf2,0x3c,0xcb, + 0x76,0xb9,0x2e,0x6d,0x8f,0x80,0x4b,0x34,0x99,0xbb, + 0x60,0x86,0x93,0x52,0x66,0xca,0xb2,0x8a,0xd1,0xaf, + 0x05,0x9f,0x35,0x33,0xee,0x0b,0xae,0x2b,0xe5,0xd7, + 0xb8,0xda,0x05,0x9a,0x2d,0x5c,0x0a,0x0e,0x83,0x09, + 0x1c,0xd7,0x56,0xa9,0x6e,0x30,0x1f,0xb4,0x70,0x06, + 0x47,0x41,0x7f,0xcd,0x29,0x94,0x94,0x77,0x96,0x52, + 0x2e,0xff,0x3b,0xf9,0xde,0x49,0x24,0xbf,0x3a,0x07, + 0x36,0x30,0x37,0x5b,0xec,0x16,0x66,0xae,0x30,0xfd, + 0xa8,0xe3,0xd6,0xb8,0x49,0x17,0x4f,0x6d,0x8d,0x72, + 0xfc,0x97,0x81,0x7d,0xe0,0xbb,0x4b,0x5b,0xd9,0xde, + 0x6f,0x60,0x2b,0x33,0x58,0x4b,0x17,0xfb,0x64,0xf6, + 0x1b,0x69,0x2b,0x27,0xa9,0x64,0x97,0x43,0xe7,0xdb, + 0xe8,0x1c,0xc5,0x06,0xa3,0x5c,0xa1,0x38,0xd3,0x17, + 0x27,0x11,0xaf,0x7d,0x87,0x8a,0xb5,0x38,0x85,0x99, + 0x4e,0xfa,0x18,0x55,0xc4,0x1d,0x4c,0x06,0x63,0x5d, + 0x6e,0x23,0x3f,0x68,0x7f,0x3b,0x41,0x21,0x6d,0xc5, + 0xd2,0xac,0x70,0x21,0xdb,0x39,0xdd,0x94,0x2c,0x51, + 0xea,0x3c,0x58,0x09,0x5e,0x80,0x97,0x2e,0xb1,0x2b, + 0x75,0xa6,0xaa,0x43,0xb4,0xd8,0xde,0x4e,0x4a,0x19, + 0x57,0x75,0x32,0x0e,0xac,0x96,0x53,0x69,0xf2,0x66, + 0x32,0xd2,0xe3,0xed,0xa4,0x27,0xf6,0xc9,0x05,0xa1, + 0xd9,0x43,0xdd,0x32,0xc6,0xb3,0x90,0xc7,0x7e,0xe5, + 0x9e,0x58,0x61,0x32,0xb8,0x96,0x71,0x36,0x45,0x9a, + 0x0e,0x8a,0x19,0x5c,0xf3,0x3d,0x4e,0x60,0x28,0xfb, + 0x8b,0x6a,0xe2,0xaa,0x28,0xf4,0x0a,0x74,0xa8,0x86, + 0xde,0xee,0xe1,0x26,0x6b,0x19,0xe9,0xc9,0x23,0x3a, + 0xe5,0xff,0x37,0xc9,0xcb,0x54,0xa9,0xa7,0x5c,0x7a, + 0x95,0x27,0x41,0xe6,0xe8,0x0f,0xc0,0x68,0x70,0x9a, + 0x36,0x31,0x82,0xf1,0xef,0x5e,0x90,0x2b,0x55,0x45, + 0x3f,0x17,0xa1,0x67,0x8f,0xf0,0x7f,0x75,0x90,0x4a, + 0xc9,0xea,0xec,0xe6,0x57,0x15,0xb9,0xb2,0x2f,0xe4, + 0x07,0x8d,0xd6,0xa0,0x6f,0x33,0xf5,0x3c,0x59,0x15, + 0xdc,0xb6,0x86,0xa0,0x0c,0x3d,0xa4,0x64,0x17,0xa2, + 0xd0,0x07,0x7e,0x8f,0xea,0xfe,0xdb,0x4a,0xb5,0x31, + 0xbf,0x56,0x6f,0xc6,0x09,0x3a,0xd4,0x84,0xcd,0xb7, + 0x06,0x43,0x93,0xc6,0x64,0x7c,0xfa,0x92,0x0c,0x05, + 0x12,0x84,0x07,0x68,0x9c,0xad,0xdc,0x4e,0xca,0x99, + 0x0e,0x75,0x64,0xdb,0x25,0x94,0x33,0x01,0xac,0x64, + 0xe6,0xe9,0x24,0x5f,0x98,0x1a,0x6f,0xf2,0x3b,0xc0, + 0x6f,0x01,0x06,0x00,0x54,0xe1,0xb4,0xc2,0x8e,0x39, + 0x5d,0xa2,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_l_png.cpp b/data/converted/help_l_png.cpp new file mode 100644 index 000000000..b03a58ccc --- /dev/null +++ b/data/converted/help_l_png.cpp @@ -0,0 +1,154 @@ +//this file was auto-generated from "l.png" by res2h + +#include "../Resources.h" + +const size_t help_l_png_size = 1464; +const unsigned char help_l_png_data[1464] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, + 0x00,0x00,0x00,0x13,0x08,0x06,0x00,0x00,0x00,0xe2, + 0x43,0x4f,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, + 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x41,0x46,0x45,0x45,0x44,0x32,0x37,0x44, + 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x41,0x46,0x45,0x45,0x44,0x32,0x37,0x43, + 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, + 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, + 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0xc2,0x6d,0x14,0xe5,0x00,0x00,0x01,0xe6,0x49,0x44, + 0x41,0x54,0x78,0xda,0xcc,0xd6,0xcf,0x4b,0x54,0x51, + 0x18,0xc6,0xf1,0x3b,0xb7,0x31,0x15,0x45,0x2c,0x1c, + 0x1b,0x14,0x67,0xe5,0x22,0xd0,0x8a,0x10,0x5a,0x68, + 0x44,0x8b,0x16,0x09,0xea,0x84,0x9b,0xf0,0x47,0x8b, + 0x84,0xd0,0x64,0x68,0x13,0x34,0xfe,0x0f,0x41,0x81, + 0x88,0x46,0x14,0x04,0x29,0x2d,0x4a,0x34,0x88,0x02, + 0xb7,0x62,0xa0,0x4c,0x8b,0x8a,0x14,0x14,0x17,0xda, + 0x42,0x6b,0x6a,0x91,0x65,0x90,0x3f,0xd0,0xef,0x81, + 0xe7,0xc2,0xe5,0xa2,0x41,0x33,0x77,0xa6,0xfb,0xc2, + 0x07,0x74,0xee,0x70,0xe6,0xe1,0x1e,0xce,0x79,0xdf, + 0x50,0x32,0x99,0xb4,0x3c,0x15,0x42,0x1b,0xba,0xd0, + 0x88,0x28,0x8e,0x58,0xb9,0xab,0x75,0xcc,0xe2,0x19, + 0x5e,0x60,0xd7,0xfd,0x30,0xec,0xf9,0xf2,0x49,0x3c, + 0x56,0x30,0xa7,0x7e,0xe3,0x4f,0x8e,0xc2,0x15,0xe8, + 0x05,0xc4,0xe5,0x03,0x3a,0xf1,0xe9,0xa0,0x80,0xe7, + 0xf0,0x06,0xc7,0x31,0x8f,0xbb,0x78,0x8d,0xaf,0x56, + 0x6e,0xab,0x02,0x97,0x71,0x07,0xa7,0x31,0x8d,0x16, + 0xbc,0x35,0x0f,0x6d,0x7d,0xa9,0x06,0xaf,0x14,0xee, + 0x01,0xce,0xe2,0x49,0x1e,0xc2,0x99,0xfa,0x86,0x51, + 0x34,0xe0,0x1e,0x8e,0x61,0x02,0x55,0xee,0x80,0xf7, + 0x11,0xc1,0x53,0xdc,0xc4,0x96,0x95,0xff,0xda,0xc6, + 0x6d,0xbd,0x98,0x4a,0x0c,0x39,0x01,0x4f,0xa1,0x1d, + 0x5f,0xd0,0x9f,0xc5,0x0f,0xc4,0xf4,0x16,0xb2,0xad, + 0x04,0xd6,0x70,0xc5,0x6c,0xb9,0x09,0x78,0x5d,0x27, + 0x77,0x10,0xbf,0xb2,0x58,0x78,0x00,0x29,0x1f,0x02, + 0x6e,0xea,0xed,0x99,0x4c,0x1d,0x26,0xe0,0x05,0x3d, + 0x78,0x69,0x05,0xa7,0x9c,0x2c,0x97,0x6c,0x1d,0x90, + 0x6d,0x9d,0xdc,0xa0,0x94,0xc9,0xb2,0x63,0xae,0x3d, + 0x5b,0x87,0xe3,0x07,0xf6,0x02,0x14,0xd0,0x64,0xd9, + 0x40,0x89,0xad,0x3d,0x2f,0xd7,0x9e,0x07,0xa5,0x4c, + 0xae,0x32,0xa4,0xcd,0x1f,0x0b,0xba,0xb0,0xeb,0x7d, + 0x5a,0xbc,0xc1,0x25,0x96,0xe1,0x1a,0x75,0xca,0xb4, + 0x62,0x02,0x4e,0xe9,0xc3,0xb8,0x4f,0x01,0x53,0x2e, + 0x03,0x19,0xae,0xe1,0x64,0x99,0x0e,0x31,0x2c,0xd4, + 0xa9,0x07,0x9a,0x1b,0xbd,0x16,0x3f,0xb3,0xb8,0x07, + 0x23,0x9e,0xcf,0xd2,0x58,0xfd,0xc7,0x75,0x4a,0xb1, + 0xac,0xb5,0xce,0x84,0xd5,0x98,0x9f,0xe3,0x2a,0x46, + 0xd0,0x9d,0x61,0xc0,0xd5,0x0c,0xc2,0x1c,0x54,0xc3, + 0xea,0x24,0xe3,0xf8,0xe8,0xb4,0xba,0x5b,0xba,0xbd, + 0xbb,0x14,0xb2,0xf0,0x3f,0x1c,0x8c,0xa3,0x9a,0x03, + 0xae,0x69,0x04,0x4b,0xb8,0x7b,0xb1,0x19,0x0a,0x5a, + 0xb5,0x25,0x7d,0xda,0xf2,0x1b,0xa8,0xce,0xc3,0xe9, + 0x8e,0xaa,0x9b,0xbd,0x47,0x2f,0xbe,0x2b,0xcb,0xba, + 0x77,0xdc,0x7a,0x87,0x26,0x3c,0x52,0x77,0x79,0xf8, + 0x97,0x56,0xe4,0xd7,0x30,0x51,0x8c,0x22,0xd7,0xff, + 0x33,0xe8,0xc1,0xe2,0x61,0x03,0xeb,0x12,0x2e,0xa2, + 0x59,0x83,0xe3,0x79,0x9c,0xf0,0x2c,0x52,0x22,0x7e, + 0x4d,0x30,0x9f,0x31,0x87,0x31,0x4c,0x7a,0x1b,0xc6, + 0xbe,0x00,0x03,0x00,0xc2,0x08,0x63,0xad,0xd8,0xa6, + 0xa9,0xf6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_left_right_png.cpp b/data/converted/help_left_right_png.cpp deleted file mode 100644 index e999eaeb3..000000000 --- a/data/converted/help_left_right_png.cpp +++ /dev/null @@ -1,336 +0,0 @@ -//this file was auto-generated from "left_right.png" by res2h - -#include "../Resources.h" - -const size_t help_left_right_png_size = 3288; -const unsigned char help_left_right_png_data[3288] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0xf3,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0xd9,0xcf,0x8b,0x4d, - 0x61,0x1c,0xc7,0xf1,0xd7,0xb9,0xd7,0x8c,0x30,0x35, - 0x8b,0x49,0x29,0x51,0x16,0x58,0x29,0x5b,0x45,0x36, - 0x4a,0x4a,0xc2,0xce,0xc8,0xc2,0x50,0x36,0x62,0x85, - 0x44,0x93,0x94,0x14,0x26,0xa4,0xd4,0x14,0x0b,0x29, - 0x43,0x44,0x64,0xcf,0x4e,0x29,0x35,0x99,0x9d,0x0d, - 0x33,0x51,0x23,0x7f,0x80,0x1f,0xa5,0xc7,0xe6,0x5c, - 0x9d,0x6e,0xa7,0x71,0xcf,0x75,0xdc,0x7b,0x4e,0x9e, - 0x6f,0x9d,0xcd,0x73,0xce,0xf3,0x3d,0xdf,0xf7,0xf7, - 0xfb,0x3c,0x9f,0xf3,0x7d,0x3a,0x49,0x08,0x41,0x9d, - 0xad,0xa1,0xe6,0x16,0x01,0x22,0x40,0x04,0x88,0x00, - 0x11,0x20,0x02,0xfc,0x17,0xb6,0x18,0xcb,0x8a,0x4e, - 0x0a,0x21,0xe8,0xb2,0x55,0x19,0x2c,0xbb,0x02,0xbb, - 0x70,0xbc,0x87,0x09,0xbb,0x86,0x66,0x59,0xce,0xb6, - 0xe0,0x43,0xea,0xb4,0x57,0x15,0x98,0xc5,0x44,0x19, - 0xc1,0xaf,0xc7,0x4b,0x04,0x5c,0xec,0x31,0x40,0xc0, - 0xa1,0xbf,0x09,0x7e,0x04,0xb7,0x53,0x47,0xfd,0x02, - 0xf8,0x8e,0xcd,0xdd,0xec,0x81,0x45,0x38,0x86,0xb1, - 0x3e,0x8b,0xc7,0x20,0x1e,0x63,0x4d,0xd1,0x89,0x47, - 0x32,0x99,0xef,0x67,0x05,0x5a,0xd7,0x5b,0x0c,0xe7, - 0x3d,0x98,0xe4,0x8c,0xed,0xc6,0x5d,0x0c,0xb5,0x8d, - 0xcf,0xa7,0x9b,0x79,0xa0,0x83,0xac,0xcd,0x61,0x22, - 0x84,0xf0,0x02,0x92,0x24,0x19,0xc5,0xd6,0x02,0x00, - 0xa3,0x39,0xef,0x7f,0x86,0xbd,0xf8,0xb9,0xd0,0xc4, - 0x4d,0x78,0x97,0x93,0xfd,0xa2,0xd7,0x2c,0xf6,0x64, - 0x2a,0x70,0xb3,0x04,0x9f,0x01,0x97,0x16,0xda,0x03, - 0xeb,0x70,0x1e,0x6b,0x2b,0xfc,0x41,0x3d,0x81,0x03, - 0x79,0x00,0x23,0x38,0x85,0x6d,0x35,0xe8,0x0a,0x6e, - 0xa5,0x2b,0xe5,0x37,0x40,0x13,0x47,0x2b,0xa0,0x38, - 0x45,0x94,0xe9,0x29,0x56,0xb7,0x00,0xc6,0x70,0xae, - 0x66,0xbd,0xd9,0x72,0x3c,0xc7,0x50,0x03,0x07,0x6b, - 0xda,0x60,0x6e,0xc0,0x78,0x03,0xd7,0xf1,0xa3,0x86, - 0x00,0x9f,0x70,0xb9,0x81,0x07,0x38,0x59,0xb3,0xe0, - 0xbf,0x62,0x07,0xbe,0xb4,0x54,0x68,0x32,0x4f,0x63, - 0x2b,0x6c,0xfb,0x31,0x93,0x95,0xd1,0x6f,0xb8,0x8a, - 0xa9,0x1a,0x04,0x7f,0x16,0x4f,0xf2,0x3e,0x64,0xf3, - 0x69,0xbf,0xf3,0xaa,0xc2,0xc1,0xdf,0xc3,0x85,0xf6, - 0xae,0x33,0x6b,0x33,0x38,0x83,0x3b,0x58,0xd5,0x76, - 0x6f,0x3a,0x3d,0x1b,0x2c,0xfd,0xc3,0x4b,0x06,0xf0, - 0x19,0xef,0x33,0x63,0x73,0x78,0x53,0x50,0x61,0xda, - 0x8f,0x95,0xaf,0x71,0xb8,0x53,0x07,0xfb,0xd2,0x65, - 0x55,0x95,0x6e,0xf4,0x23,0x56,0x14,0x39,0x0f,0x4c, - 0xe1,0x74,0x85,0x14,0x67,0x67,0xba,0xc4,0x0b,0x1d, - 0xea,0x27,0x71,0xa5,0x22,0x8a,0x33,0xdd,0xed,0xe4, - 0x95,0x78,0xd4,0xc7,0x25,0x34,0x5e,0x46,0x06,0x36, - 0xa6,0x1b,0xf0,0x46,0x8f,0x01,0xee,0x97,0x59,0xc6, - 0xed,0x69,0xc7,0xda,0x2b,0x80,0x87,0x58,0x52,0x26, - 0x40,0x33,0x47,0x72,0xff,0x25,0xc0,0x70,0xa7,0x0f, - 0x26,0xf1,0x2f,0x65,0x04,0x88,0x00,0x11,0x20,0x02, - 0x44,0x80,0x08,0xd0,0x47,0xfb,0x35,0x00,0xaf,0x4a, - 0xca,0x1e,0xa2,0xb2,0x15,0xb6,0x00,0x00,0x00,0x00, - 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_menu_png.cpp b/data/converted/help_menu_png.cpp deleted file mode 100644 index e6d88dba6..000000000 --- a/data/converted/help_menu_png.cpp +++ /dev/null @@ -1,351 +0,0 @@ -//this file was auto-generated from "menu.png" by res2h - -#include "../Resources.h" - -const size_t help_menu_png_size = 3431; -const unsigned char help_menu_png_data[3431] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x02,0x82,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x99,0xbf,0x8b,0x14, - 0x31,0x14,0xc7,0xbf,0xab,0x72,0x95,0x70,0xc4,0xca, - 0xd6,0xfc,0x05,0x07,0x5b,0x5d,0x9f,0x42,0x10,0x0e, - 0x04,0x17,0x41,0xb0,0x9d,0x7f,0x21,0xb5,0x5d,0xae, - 0x16,0x84,0x6c,0x6f,0x93,0x6d,0xb5,0xca,0x16,0x07, - 0x82,0x72,0x90,0x41,0xd9,0x7e,0x07,0xac,0x85,0x6c, - 0x27,0x08,0xca,0xf7,0x0a,0x2f,0x61,0x66,0x6e,0x57, - 0x16,0x5d,0xb9,0x19,0xc8,0x83,0xb7,0xcc,0xe6,0xe7, - 0xfb,0x4c,0x92,0xf7,0x5e,0x98,0x09,0x49,0x8c,0x59, - 0xee,0x60,0xe4,0x52,0x00,0x0a,0x40,0x01,0x28,0x00, - 0x05,0xa0,0x00,0x14,0x80,0x02,0xf0,0x0f,0x72,0x2f, - 0x3d,0x4c,0x26,0x93,0x6d,0xf5,0x53,0x00,0x67,0x00, - 0x1e,0xde,0xa2,0x8d,0xdf,0x00,0xbc,0x07,0xf0,0xa9, - 0x5f,0x41,0xf2,0xf7,0xcf,0x96,0x8c,0xf4,0x04,0xc0, - 0x07,0x00,0x1c,0x90,0x06,0x00,0xa7,0xfb,0x00,0x3c, - 0x05,0xf0,0x7d,0x60,0xc6,0x27,0xfd,0x01,0xe0,0xe5, - 0x9f,0x00,0x4e,0xaf,0x1b,0x71,0xc0,0xfa,0x13,0xc0, - 0xe3,0x6d,0x00,0x77,0x01,0xac,0x06,0x6e,0x7c,0xd2, - 0xaf,0x00,0x8e,0xfa,0x00,0x4f,0x46,0x62,0x7c,0xd2, - 0x17,0x24,0x3b,0x6e,0xf4,0x2c,0x3d,0x54,0x55,0x05, - 0xef,0x3d,0xbc,0xf7,0x50,0x4a,0xc1,0x39,0x87,0x18, - 0x23,0xbc,0xf7,0x90,0x52,0x42,0x6b,0x0d,0xe7,0x1c, - 0x48,0x42,0x6b,0xdd,0x75,0x5b,0xd3,0x29,0xac,0xb5, - 0x30,0xc6,0xc0,0x39,0x07,0x6b,0x2d,0x84,0x10,0x00, - 0x00,0x63,0x0c,0xbc,0xf7,0x30,0xc6,0x40,0x6b,0x0d, - 0x6b,0x6d,0x1e,0xb7,0x3d,0xb7,0x73,0x2e,0x97,0x49, - 0x29,0x3b,0xfd,0x5a,0xf2,0x2c,0x1f,0x84,0xeb,0x15, - 0xe8,0x78,0x1d,0xe7,0x1c,0x49,0xb2,0xaa,0x2a,0x02, - 0xa0,0x52,0x8a,0x24,0x19,0x42,0xa0,0x10,0x82,0x00, - 0xa8,0xb5,0x26,0x49,0x4a,0x29,0x09,0x80,0x42,0x08, - 0xc6,0x18,0x39,0x9d,0x4e,0xf3,0x38,0x21,0x04,0x5a, - 0x6b,0x73,0xfd,0x7a,0xbd,0xee,0xb4,0x49,0xe3,0xa6, - 0x79,0xda,0x73,0xa7,0xff,0xa9,0x9f,0xf7,0xbe,0xbd, - 0x02,0xab,0xfe,0x0a,0x1c,0xb7,0xf1,0xea,0xba,0x06, - 0x00,0xcc,0xe7,0x73,0x00,0xc0,0x72,0xb9,0x04,0x00, - 0x2c,0x16,0x0b,0x6c,0x36,0x9b,0x4e,0x1b,0x29,0x65, - 0x7e,0x7b,0x4d,0xd3,0xe4,0xf2,0xd4,0x7e,0x36,0x9b, - 0x01,0x00,0x36,0x9b,0x4d,0xae,0x4f,0x6d,0xd2,0xb8, - 0x69,0x95,0xda,0xe3,0x26,0x49,0xfd,0x7a,0x72,0xdc, - 0x09,0x64,0x87,0x10,0xa5,0x14,0x84,0x10,0x9d,0x6d, - 0x25,0xa5,0xbc,0x61,0xd0,0x7f,0x89,0xc4,0x87,0x92, - 0xa6,0x69,0x70,0x7e,0x7e,0x3e,0xce,0x5c,0xa8,0xae, - 0x6b,0x28,0xa5,0x6e,0x94,0xa7,0x2d,0x36,0x78,0x80, - 0x74,0x5e,0xfa,0x9e,0xc9,0x18,0xd3,0xd9,0xe3,0xfb, - 0x4a,0xea,0x23,0x84,0xd8,0xfd,0x12,0x5a,0x5e,0xe8, - 0x73,0x3a,0xe1,0x55,0x55,0x31,0x84,0x40,0x92,0x74, - 0xce,0x51,0x4a,0x49,0x63,0x0c,0x49,0x32,0xc6,0x48, - 0xa5,0x14,0xa5,0x94,0xd9,0x5b,0x84,0x10,0xa8,0x94, - 0xca,0x7d,0x63,0x8c,0xb4,0xd6,0x52,0x6b,0x4d,0x6b, - 0x6d,0xf6,0x38,0x5a,0x6b,0xc6,0x18,0x49,0x92,0xc6, - 0x98,0xad,0xe3,0xb6,0xbd,0x59,0x08,0x81,0x5a,0x6b, - 0x1a,0x63,0xb2,0x3d,0xc6,0x98,0xe4,0x85,0x9a,0x7e, - 0x20,0x7b,0x77,0xc8,0x40,0xa3,0x94,0xca,0x06,0xfd, - 0x8d,0x0a,0x21,0xa8,0x94,0xea,0xb8,0xe4,0x9e,0x7e, - 0xec,0x03,0xbc,0x1a,0x59,0x24,0x7e,0xd3,0x07,0x78, - 0x34,0x82,0x44,0xae,0xad,0x27,0xdb,0xb2,0xd1,0xd7, - 0x23,0x31,0xfe,0xed,0xae,0x74,0xfa,0x08,0xc0,0xe5, - 0xc0,0x8d,0x5f,0xa5,0x28,0xbc,0xeb,0x42,0x73,0xff, - 0xd0,0x07,0xfa,0x80,0x7a,0x01,0xe0,0xc1,0x3e,0x57, - 0xca,0x94,0x9d,0x5e,0x0c,0xc4,0xf0,0x4b,0x00,0xcf, - 0xb7,0x85,0x80,0x49,0x32,0x7e,0xc7,0xa5,0xbe,0x7d, - 0xb9,0xbf,0x2d,0xf9,0x02,0xe0,0xd7,0xae,0x18,0x36, - 0x29,0x9f,0x98,0x0a,0x40,0x01,0x28,0x00,0x05,0xa0, - 0x00,0x14,0x80,0x02,0x50,0x00,0xc6,0x2b,0x57,0x03, - 0x00,0x37,0x31,0xc0,0xa1,0xa9,0x5d,0x0e,0xee,0x00, - 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, - 0x82 -}; diff --git a/data/converted/help_r_png.cpp b/data/converted/help_r_png.cpp new file mode 100644 index 000000000..33de5f230 --- /dev/null +++ b/data/converted/help_r_png.cpp @@ -0,0 +1,157 @@ +//this file was auto-generated from "r.png" by res2h + +#include "../Resources.h" + +const size_t help_r_png_size = 1495; +const unsigned char help_r_png_data[1495] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, + 0x00,0x00,0x00,0x13,0x08,0x06,0x00,0x00,0x00,0xe2, + 0x43,0x4f,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, + 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34,0x37,0x38, + 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34,0x37,0x37, + 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, + 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, + 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0xde,0xa7,0x8d,0x87,0x00,0x00,0x02,0x05,0x49,0x44, + 0x41,0x54,0x78,0xda,0xcc,0xd6,0x4b,0x48,0x54,0x71, + 0x14,0xc7,0xf1,0x3b,0xb7,0x91,0x4c,0x09,0xec,0x2d, + 0x49,0xcb,0xb0,0x85,0x05,0x61,0x14,0x54,0x44,0x90, + 0x82,0x82,0x3a,0x83,0xad,0x46,0x41,0x34,0x10,0x4a, + 0xd4,0x4d,0xd0,0x14,0xb4,0x68,0x1f,0x14,0x44,0x90, + 0x48,0x81,0x90,0x52,0xa0,0xa4,0x42,0x24,0x84,0x0b, + 0x41,0x0c,0x0a,0x5c,0x68,0xa4,0xa0,0x08,0xb6,0xca, + 0x47,0x2d,0x02,0x13,0xf2,0x51,0x7d,0x0f,0xfc,0x2e, + 0xdc,0x86,0x0a,0x9c,0x7b,0x67,0xec,0xc0,0x07,0x66, + 0xee,0xe3,0xcf,0xb9,0xff,0xc7,0xf9,0xff,0x23,0xc9, + 0x64,0xd2,0x49,0x89,0x08,0x6a,0x50,0x8f,0xb3,0x28, + 0xc4,0x0e,0x27,0x73,0xb1,0x80,0xb7,0x78,0x86,0x3e, + 0x6c,0xfa,0x6f,0x46,0x53,0x1e,0x3e,0x86,0x27,0x4a, + 0xcc,0x8b,0x55,0x7c,0xcf,0x50,0x72,0x39,0xea,0x80, + 0x98,0x4c,0xa2,0x0e,0x1f,0xfe,0x94,0xe0,0x69,0x0c, + 0x61,0x2f,0xa6,0x70,0x17,0xaf,0xb0,0xe4,0x64,0x36, + 0xf6,0xa3,0x02,0x37,0x70,0x02,0xa3,0xa8,0xc2,0x1b, + 0xbb,0xe9,0xea,0xa1,0x23,0x78,0xa9,0xe4,0x3a,0x70, + 0x12,0x5d,0x59,0x48,0xce,0xe2,0x33,0xba,0x51,0x8a, + 0x7b,0xd8,0x83,0x7e,0x1c,0xf6,0x27,0x78,0x1f,0x07, + 0xf0,0x14,0xd7,0xb0,0xe6,0x64,0x3f,0xd6,0x71,0x5d, + 0x1d,0x73,0x10,0x0f,0xbd,0x04,0x8f,0xa3,0x16,0x8b, + 0x68,0x71,0xb6,0x3f,0x5a,0xf1,0x09,0x71,0x1b,0x72, + 0x4b,0xb0,0x49,0x2b,0xf7,0x01,0x56,0x02,0x34,0xfc, + 0x33,0xc5,0xb4,0xa6,0xca,0x56,0xe3,0x9b,0x7a,0xcf, + 0x72,0x4a,0x58,0x82,0x17,0x74,0x63,0x30,0x84,0xaf, + 0xb7,0xe1,0x39,0x85,0x4b,0xd8,0x87,0x3b,0x69,0xb6, + 0xe3,0xe5,0x52,0x16,0xd5,0x02,0x59,0xd7,0xca,0x0d, + 0xa3,0xa6,0x8d,0xeb,0xeb,0x97,0x7c,0x73,0x7c,0xab, + 0x61,0xb9,0x6c,0x58,0xd9,0x8b,0x6a,0x71,0x7c,0xd1, + 0xb0,0x04,0x8d,0x46,0x94,0xab,0x4d,0xab,0x08,0x89, + 0x00,0xd3,0xe5,0xab,0xb5,0xe1,0x6a,0xcc,0x0b,0xf4, + 0xd5,0x41,0x63,0x04,0x37,0x71,0x5b,0x45,0x38,0x1e, + 0xa0,0xad,0x3c,0x2c,0xbb,0x9a,0xcc,0xd6,0x93,0x25, + 0x21,0x24,0x38,0x8f,0x61,0x95,0x2b,0x1b,0xea,0x33, + 0x69,0xb6,0x73,0x08,0xbb,0xf0,0xd1,0x12,0x7c,0xad, + 0x8b,0xb1,0x90,0xcb,0xc5,0x1c,0x8e,0xa6,0xf9,0xae, + 0xb7,0xd5,0x8e,0xba,0xda,0xa4,0x7f,0xa0,0x0d,0xbb, + 0x03,0x24,0x64,0x53,0xe4,0x96,0xef,0x7f,0x03,0x8a, + 0xd3,0x6c,0x2b,0xa1,0x79,0xd8,0xe5,0x6a,0x63,0xee, + 0x55,0xf5,0x7e,0xf4,0x1f,0x14,0x6a,0xdb,0xf2,0x2e, + 0xe3,0x05,0xde,0x7b,0x65,0xa0,0x5d,0xd5,0xbb,0x5e, + 0x49,0xee,0xdc,0xa6,0xe4,0x8a,0xf0,0x5c,0x25,0xaa, + 0xd5,0xbf,0x17,0xdb,0x85,0x6a,0x5b,0x35,0xb8,0xaa, + 0x63,0x4f,0xb3,0x5e,0x88,0x64,0x29,0x31,0x9b,0x62, + 0x13,0x3a,0x2c,0x54,0xab,0xa6,0xfe,0x76,0xdc,0xb2, + 0x55,0x77,0x0e,0x8f,0xb5,0xbb,0x74,0xfe,0x63,0x2b, + 0x0a,0xf3,0x30,0x61,0xab,0x35,0x57,0xbf,0xc7,0x70, + 0x05,0x33,0x7f,0x3b,0xb0,0xce,0xe2,0x22,0x2a,0x75, + 0x70,0x3c,0xaf,0x25,0x9f,0xeb,0x7b,0x26,0x5f,0xc2, + 0x3a,0xc1,0x58,0x4f,0xbd,0x43,0x0f,0x06,0x52,0x37, + 0x8c,0x5f,0x02,0x0c,0x00,0xae,0xe8,0x68,0xbc,0x71, + 0xf2,0x9e,0xc2,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_select_png.cpp b/data/converted/help_select_png.cpp new file mode 100644 index 000000000..676d3d03d --- /dev/null +++ b/data/converted/help_select_png.cpp @@ -0,0 +1,155 @@ +//this file was auto-generated from "select.png" by res2h + +#include "../Resources.h" + +const size_t help_select_png_size = 1477; +const unsigned char help_select_png_data[1477] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, + 0x00,0x00,0x00,0x14,0x08,0x06,0x00,0x00,0x00,0xff, + 0x46,0x7f,0xbb,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x37,0x33,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x37,0x34,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x37,0x31,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x37,0x32,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0xb2,0xa8,0xe0,0x6c,0x00,0x00,0x02,0x37, + 0x49,0x44,0x41,0x54,0x78,0xda,0xcc,0x95,0x5f,0x68, + 0xce,0x51,0x18,0xc7,0xcf,0xfb,0xdb,0x5b,0x2e,0x69, + 0x91,0x45,0xfe,0xc4,0x90,0x0b,0x85,0x49,0x8d,0xb4, + 0x76,0xb7,0xa4,0x94,0xa4,0xec,0x6a,0x73,0x49,0xca, + 0x85,0x7a,0xb1,0x62,0x69,0x17,0x16,0x17,0xd2,0x1b, + 0x56,0xd2,0x2e,0xb4,0x76,0x61,0x6a,0x85,0x6c,0x49, + 0x66,0x92,0xfc,0x5b,0xb8,0x40,0x34,0x11,0xb5,0x85, + 0xa2,0xd7,0x9f,0xf9,0x37,0x3e,0x4f,0x7d,0x7f,0x75, + 0x1c,0x7b,0x5f,0xbd,0x25,0xce,0x53,0x9f,0xce,0xf9, + 0x3d,0xbf,0xdf,0x73,0xce,0xf7,0x3c,0xe7,0x39,0xbf, + 0x93,0xc9,0xe5,0x72,0x73,0x9d,0x73,0xc7,0xa1,0x0e, + 0xde,0xc3,0x59,0xd8,0x01,0xef,0xe0,0x04,0x2c,0x75, + 0xbf,0x5a,0x27,0xe4,0xe1,0x96,0xbe,0xbb,0x1a,0xbc, + 0xb7,0xf8,0xaa,0xc0,0x97,0x57,0xdc,0x54,0x38,0x02, + 0x6b,0xe1,0x07,0xf4,0xc2,0x4e,0x78,0x0d,0xdd,0x50, + 0x1d,0xc4,0xb9,0x2c,0x1c,0x82,0x59,0xb0,0x11,0x2a, + 0xe1,0x30,0x7c,0x84,0x6d,0xb0,0x08,0x0a,0x70,0xc1, + 0x8b,0xb9,0xaf,0xb6,0x06,0x26,0xbb,0xdf,0x6d,0x09, + 0xdc,0x81,0xeb,0x9e,0xef,0xa1,0x5a,0x13,0x34,0x1d, + 0x9a,0x61,0x12,0xb4,0xc1,0x69,0xa8,0x87,0x7e,0x18, + 0x82,0x06,0x2d,0xb0,0x33,0x15,0xb8,0x10,0x06,0xe1, + 0x9c,0x06,0xb1,0xd5,0x4c,0xf3,0x06,0xb7,0x89,0xda, + 0x5d,0x79,0x66,0x93,0x1d,0x0b,0x7c,0x2b,0x60,0x95, + 0xc4,0x5c,0x96,0x6f,0x14,0x2e,0xc1,0x32,0x38,0x29, + 0xdf,0x14,0x2d,0xb2,0x3d,0x15,0x78,0x1e,0x72,0xb0, + 0x12,0x6e,0x2b,0xb8,0xdb,0x1b,0xb8,0x41,0x99,0x4d, + 0xad,0x0b,0x06,0xfe,0x20,0xb0,0x31,0x28,0x8d,0xbc, + 0x44,0x7c,0x81,0x2b,0x9e,0xdf,0xfa,0xf3,0x61,0xa4, + 0xd8,0x40,0x09,0xec,0x81,0x4d,0x70,0x17,0x56,0xc3, + 0x29,0xe8,0x71,0x7f,0xdf,0xbe,0xc3,0x27,0x18,0x0f, + 0x7c,0xc3,0x2a,0xa9,0x09,0xcd,0x32,0xb8,0x5f,0x59, + 0x6c,0x96,0xaf,0x15,0xf6,0x42,0x85,0x9e,0xad,0xfe, + 0x76,0x97,0x29,0xa6,0x6b,0x82,0x2d,0xae,0x54,0xcd, + 0x2e,0x80,0xc7,0xf2,0x2d,0xd7,0xae,0x59,0x62,0xae, + 0x15,0x13,0xb8,0x4e,0x75,0xb1,0x19,0xde,0xe8,0xc0, + 0x8c,0x6a,0x75,0x4e,0x05,0x5b,0xe3,0xc5,0xbc,0x82, + 0xe7,0xea,0xdb,0x36,0x7e,0xf6,0xde,0x5d,0x54,0x3b, + 0x3b,0x88,0x19,0x91,0x80,0x17,0xd0,0x01,0x5b,0xe0, + 0x03,0x1c,0x54,0x06,0x6f,0x94,0xca,0xe0,0x76,0x6d, + 0xeb,0x33,0xf9,0xde,0x42,0x93,0xf7,0x4d,0x53,0xf0, + 0x6c,0x99,0xd9,0xaa,0x7e,0x5b,0x30,0x5e,0x46,0xed, + 0x2e,0x91,0xda,0x01,0xed,0xc2,0x06,0x38,0x03,0x4f, + 0xe5,0x7f,0xa2,0xf2,0xfa,0x56,0x4a,0xe0,0xa0,0xfe, + 0x3f,0x8b,0x55,0x1f,0x16,0x34,0xa6,0xf7,0x6b,0x4a, + 0x6c,0x63,0xa6,0x88,0x7f,0x4e,0x89,0x98,0x9b,0x30, + 0x4f,0x73,0x7d,0x85,0x47,0x41,0x4d,0xba,0xb0,0x9c, + 0xb2,0x6a,0xed,0xe3,0x7b,0xee,0xdf,0x58,0x59,0x73, + 0x25,0x2e,0x72,0xcb,0x7a,0xfd,0x0a,0xa5,0xbe,0xea, + 0x3f,0x6b,0xb2,0x03,0xf5,0x20,0x3d,0xa4,0xa9,0xc0, + 0xf5,0x70,0x14,0x66,0x44,0x92,0xb8,0x97,0xba,0x6a, + 0x7b,0xb3,0x3a,0x08,0x3d,0xde,0x7f,0x2f,0x06,0x9b, + 0x29,0x4d,0xf5,0x56,0x83,0xfb,0x22,0x13,0xe7,0x97, + 0x5c,0x6b,0xa2,0x0b,0x3c,0x56,0xab,0x4d,0xbc,0x7f, + 0x5e,0x8c,0x36,0x66,0x02,0xfb,0x22,0x16,0xd8,0x67, + 0x02,0x5b,0x74,0xbf,0xc6,0x66,0xa6,0xa9,0x25,0xd1, + 0x65,0x5d,0xab,0x53,0x53,0x88,0x40,0x58,0x41,0x5a, + 0x4c,0xd3,0xf0,0x4f,0x01,0x06,0x00,0xc1,0x48,0x7e, + 0xf4,0x07,0x45,0x6c,0x0d,0x00,0x00,0x00,0x00,0x49, + 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_start_png.cpp b/data/converted/help_start_png.cpp new file mode 100644 index 000000000..02aa4e915 --- /dev/null +++ b/data/converted/help_start_png.cpp @@ -0,0 +1,152 @@ +//this file was auto-generated from "start.png" by res2h + +#include "../Resources.h" + +const size_t help_start_png_size = 1446; +const unsigned char help_start_png_data[1446] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, + 0x00,0x00,0x00,0x14,0x08,0x06,0x00,0x00,0x00,0xff, + 0x46,0x7f,0xbb,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x36,0x46,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x37,0x30,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x43,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, + 0x36,0x45,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x80,0xfc,0x29,0xc2,0x00,0x00,0x02,0x18, + 0x49,0x44,0x41,0x54,0x78,0xda,0xcc,0xd5,0x4b,0x48, + 0x15,0x51,0x1c,0xc7,0xf1,0xb9,0xe3,0x95,0x52,0x82, + 0x44,0xa2,0x22,0xc9,0x1e,0x48,0x91,0x58,0x14,0x45, + 0xa0,0x14,0x25,0xb5,0x8a,0xc8,0x8d,0x90,0xd8,0xce, + 0xa4,0xa4,0xa4,0xa8,0xa0,0xbb,0x30,0x28,0xa2,0x20, + 0x41,0xa4,0x42,0xc2,0x56,0x4a,0xd1,0xa6,0x17,0x89, + 0x1a,0xb8,0x09,0x17,0xae,0xc4,0xb5,0xd5,0x42,0x13, + 0x44,0x48,0xb4,0x07,0xdd,0x1e,0x82,0x59,0x7d,0xff, + 0xf0,0x4b,0x0e,0x83,0x7a,0x96,0x9e,0x3f,0x7c,0xb8, + 0x33,0xc3,0x99,0x39,0xbf,0x7b,0x1e,0x33,0xa9,0x4c, + 0x26,0x53,0x10,0x45,0x51,0x0b,0x8e,0x63,0x0d,0x26, + 0xd1,0x87,0xab,0x98,0xc6,0x50,0xb4,0x78,0x1d,0xc6, + 0x77,0x1d,0x3f,0xc4,0x5e,0xdc,0xc1,0x73,0xa7,0xcd, + 0x01,0xdc,0x4d,0xdc,0xf7,0x13,0xc3,0xb8,0x8d,0x59, + 0xf4,0x2c,0xd6,0x41,0x1a,0xad,0xa8,0xc5,0x65,0xdd, + 0xb4,0x47,0x9d,0x6c,0xc2,0x11,0x3c,0x53,0xdb,0xcd, + 0x68,0x40,0x27,0xde,0xe9,0xda,0xac,0x7e,0x4b,0x50, + 0x8f,0xaf,0xb8,0x92,0x08,0xb8,0x5a,0xc1,0xdb,0x31, + 0xa6,0x6b,0xeb,0x70,0x01,0xc5,0xa8,0x71,0xfa,0xd8, + 0xad,0xf3,0xf9,0xb6,0x16,0xb0,0x4c,0xa3,0xd6,0x81, + 0x5f,0xe8,0xc7,0x38,0xb6,0x22,0x85,0x66,0x67,0x24, + 0x1a,0xd4,0x79,0x6f,0xe2,0x8f,0xda,0xf5,0xcf,0xb8, + 0x84,0xc7,0xd8,0x8f,0xc1,0x44,0x9b,0x27,0x18,0x70, + 0xce,0x2b,0xb0,0x05,0xdf,0x9c,0x3e,0x6a,0x15,0x70, + 0xbe,0x6d,0x8c,0x97,0xfa,0x27,0x16,0xea,0xb5,0xa6, + 0x23,0x17,0xf7,0xf1,0x37,0xf2,0x57,0x3e,0x4e,0x2b, + 0x98,0x8d,0xc4,0x27,0x9c,0x5f,0xa0,0xdd,0x3e,0x1c, + 0x95,0x3a,0x0d,0xcc,0x53,0xdf,0xc3,0xd3,0x9a,0xce, + 0x7e,0xad,0xc1,0x9d,0xa8,0xc6,0x45,0xbc,0xd7,0xd4, + 0xfc,0xf0,0x3c,0xe3,0x14,0x6c,0x1d,0xbf,0x41,0x91, + 0xd6,0xef,0x49,0x4d,0xf5,0xb4,0xd3,0xee,0x26,0x7e, + 0xeb,0x78,0x95,0x9e,0xdb,0xe5,0x0b,0x68,0x23,0x78, + 0x0b,0xa5,0xb8,0x86,0x2a,0x6c,0xc4,0x3d,0x6c,0xd7, + 0x54,0xf9,0xaa,0x51,0xbf,0xdd,0x18,0xd1,0x34,0xad, + 0xc0,0xd9,0x44,0xbb,0x63,0x28,0x94,0x6d,0xc8,0xd3, + 0x46,0xf4,0x06,0xb4,0x21,0x6f,0x53,0xb8,0x95,0x58, + 0xab,0x0d,0xf2,0x07,0x1f,0x3c,0xf7,0x1f,0xc2,0x2e, + 0x4d,0x69,0xa1,0xc3,0x76,0xfe,0x19,0xcd,0xd0,0x42, + 0x65,0x1b,0x60,0x54,0x6f,0x0d,0x6f,0xc0,0x3a,0xed, + 0xde,0x57,0xda,0x24,0x1f,0x71,0x50,0x0b,0x7f,0xcc, + 0x73,0xff,0x39,0x64,0xf1,0x08,0x5f,0x1c,0xed,0x5a, + 0xd7,0x27,0x96,0xb8,0x77,0x52,0x6d,0x96,0xac,0x14, + 0xef,0xc1,0xff,0xc7,0xb6,0x7e,0xd6,0xeb,0xbd,0x36, + 0xe2,0xac,0x97,0x65,0x2d,0x77,0x0a,0x26,0x24,0xa8, + 0x8a,0xa3,0xc0,0xcb,0x1d,0xc1,0x1c,0xec,0xd0,0x34, + 0x2f,0x67,0xd9,0x1e,0x78,0x8b,0x39,0x37,0xa0,0xed, + 0xe0,0x07,0xd8,0x10,0xc8,0xc0,0x4d,0xe8,0xcd,0xd0, + 0x95,0xd6,0x8e,0x7d,0xa1,0x11,0x0c,0xa5,0x8a,0x94, + 0xa9,0xd2,0xd6,0xe0,0xf5,0xc0,0xc2,0xb9,0x4b,0xee, + 0x46,0xac,0x8f,0x76,0xa8,0x55,0x6e,0x01,0x67,0x02, + 0x0e,0x38,0x13,0xeb,0xe3,0x1e,0x6a,0xf5,0x59,0xc0, + 0x26,0x4c,0x05,0x18,0xce,0x32,0x35,0xc5,0xfa,0x68, + 0x97,0x6b,0xd7,0x64,0x03,0x08,0x96,0x55,0x16,0xcb, + 0x34,0xfa,0x4f,0x80,0x01,0x00,0x48,0x64,0x77,0x19, + 0x89,0x3e,0xfe,0x4c,0x00,0x00,0x00,0x00,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_up_down_png.cpp b/data/converted/help_up_down_png.cpp deleted file mode 100644 index fa397aeee..000000000 --- a/data/converted/help_up_down_png.cpp +++ /dev/null @@ -1,337 +0,0 @@ -//this file was auto-generated from "up_down.png" by res2h - -#include "../Resources.h" - -const size_t help_up_down_png_size = 3292; -const unsigned char help_up_down_png_data[3292] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x01,0xf7,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0xd9,0xcd,0xab,0x4d, - 0x51,0x18,0xc7,0xf1,0xcf,0xbe,0xd7,0x75,0xba,0x22, - 0x6f,0xa5,0x4c,0x18,0xc8,0x80,0x50,0x3a,0x7f,0x00, - 0x61,0xa0,0x0c,0xa4,0x0c,0x95,0x99,0xf8,0x0f,0x94, - 0xdc,0x0c,0xa5,0xe4,0x9a,0x19,0x98,0x18,0x90,0x81, - 0x99,0x0c,0x98,0xc9,0x50,0x4a,0x31,0x91,0x32,0x63, - 0xe0,0xe6,0x35,0x3a,0x2e,0x6a,0x19,0xec,0xbd,0x73, - 0x95,0xce,0xdd,0xeb,0x9c,0x75,0x8e,0x7d,0xb2,0x9e, - 0x7a,0x3a,0x75,0x5a,0xed,0x7e,0xdf,0x67,0xbd,0xec, - 0xb5,0x7f,0x4f,0x11,0x42,0x30,0xc9,0xb1,0x22,0x66, - 0x70,0x51,0x14,0xb1,0xcf,0xdf,0x8f,0xbd,0x98,0x47, - 0xe3,0x4a,0x45,0x15,0x35,0x84,0xd0,0x38,0x23,0xe3, - 0x04,0x7a,0x95,0xf0,0x9b,0x98,0x1d,0x89,0xa6,0x11, - 0x00,0xcc,0xe2,0x5c,0x25,0x7c,0x69,0x3e,0xc4,0xb6, - 0xb6,0x03,0x6c,0xc2,0xf5,0xbf,0x88,0xaf,0xf3,0x05, - 0x0e,0xb4,0x15,0x60,0x67,0x55,0xe5,0xb0,0x4c,0xbe, - 0xc5,0xa9,0xb6,0x01,0x1c,0xc4,0xab,0x06,0xe2,0xeb, - 0xec,0xe1,0x62,0x5b,0x00,0x4e,0xe2,0x6b,0x84,0xf8, - 0xa5,0x79,0x0b,0xab,0xff,0x15,0xc0,0x2a,0x9c,0x1f, - 0x50,0x78,0xdf,0xcd,0x3d,0x0e,0x80,0xcd,0xb8,0x91, - 0x40,0x7c,0x9d,0x2f,0x71,0x68,0x5c,0x00,0xbb,0xf0, - 0x28,0xa1,0xf8,0x3a,0x17,0x70,0x3a,0x16,0xa0,0x88, - 0x79,0x41,0x15,0x45,0xd1,0xc5,0x65,0xec,0xc0,0xb7, - 0xba,0x60,0x58,0x89,0x8d,0xd5,0x6f,0xa3,0xa3,0x1e, - 0x9f,0xf1,0x1e,0xd3,0xd5,0x7f,0xd3,0xf8,0x82,0x6b, - 0x21,0x84,0xf9,0x71,0xbf,0x89,0xf7,0xe0,0x49,0x44, - 0xb5,0xbf,0xe3,0x42,0x0a,0x4d,0x53,0x26,0x3c,0x32, - 0x40,0x06,0xc8,0x00,0x19,0x20,0x03,0x64,0x80,0xff, - 0xc7,0x95,0xe8,0x13,0xef,0x70,0x07,0x4f,0xb1,0xd8, - 0xa0,0x68,0x3f,0xf0,0xb8,0x4d,0x33,0xd0,0xab,0x2e, - 0x77,0x4d,0x6e,0x86,0xf5,0x98,0xb5,0x6d,0x9a,0x81, - 0x35,0x38,0x8a,0x7d,0x0d,0xc7,0xff,0xc4,0x4c,0xf5, - 0x45,0x96,0x37,0x71,0x06,0xc8,0x00,0x19,0x20,0x03, - 0x64,0x80,0x0c,0x30,0xb1,0x11,0x6b,0x6c,0x6d,0xc7, - 0x55,0x74,0xfd,0x69,0x6c,0xcd,0x28,0x8d,0xad,0x4e, - 0xc3,0x47,0x05,0xa5,0x21,0xbc,0xe0,0xb7,0xb1,0x35, - 0x55,0xdd,0xa9,0x6e,0x87,0x10,0xe6,0x1a,0x8b,0x1a, - 0xc0,0xd8,0xda,0x8a,0x7b,0xd2,0x5b,0x8b,0x9f,0x94, - 0x9d,0x9d,0xb1,0x98,0xbb,0xeb,0x71,0x25,0xa1,0xf8, - 0x37,0x38,0x3e,0x50,0x51,0x87,0xb0,0x16,0x3b,0x38, - 0x93,0x40,0xfc,0x33,0xec,0x1e,0x78,0x55,0x0c,0xe9, - 0x8d,0x16,0x38,0x82,0x0f,0x03,0x8a,0x7f,0x80,0x0d, - 0x43,0x2d,0xeb,0x44,0xe6,0x6e,0x17,0xcf,0x23,0x84, - 0x2f,0x2a,0x9b,0x81,0xc3,0xef,0xcb,0x84,0x4d,0xbe, - 0x2d,0xb8,0xdb,0x40,0xfc,0x47,0x9c,0x4d,0x76,0xb0, - 0x24,0x6e,0xb3,0xae,0xc3,0xa5,0x3e,0xe2,0x5f,0xe3, - 0x58,0xd2,0x93,0x71,0x04,0x8d,0xee,0x8e,0xb2,0x8d, - 0xba,0xec,0x66,0x6d,0x2b,0x40,0x1d,0x87,0xab,0xe5, - 0x12,0x70,0xbf,0x9a,0x1d,0x93,0x04,0x40,0xd9,0xb9, - 0x99,0x8b,0x35,0x0f,0x46,0xd6,0x23,0x6b,0x63,0xfc, - 0x1a,0x00,0x7a,0x84,0x45,0x65,0xbc,0xcf,0x3a,0x08, - 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, - 0x60,0x82 -}; diff --git a/data/converted/help_x_png.cpp b/data/converted/help_x_png.cpp new file mode 100644 index 000000000..58e28c57a --- /dev/null +++ b/data/converted/help_x_png.cpp @@ -0,0 +1,165 @@ +//this file was auto-generated from "x.png" by res2h + +#include "../Resources.h" + +const size_t help_x_png_size = 1576; +const unsigned char help_x_png_data[1576] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, + 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, + 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x32,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x33,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, + 0x37,0x37,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, + 0x37,0x38,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x86,0x58,0x16,0xa2,0x00,0x00,0x02,0x9a, + 0x49,0x44,0x41,0x54,0x78,0xda,0xbc,0x97,0x4b,0x48, + 0x55,0x51,0x14,0x86,0xcf,0x3d,0x5a,0x83,0xb4,0xa2, + 0xc0,0x5b,0x34,0x11,0x1c,0xa4,0xf6,0x18,0x44,0x49, + 0x4a,0x49,0x83,0x26,0x92,0x54,0x1a,0x3d,0xa9,0x26, + 0x45,0x0f,0x48,0x28,0x0a,0xbc,0x11,0xd8,0x40,0x2d, + 0xad,0x49,0xa4,0xa3,0xcc,0x66,0x15,0x81,0x0f,0x7a, + 0xe8,0x28,0x2a,0x44,0x93,0xe8,0x31,0x8a,0x5e,0x62, + 0x36,0x0a,0x94,0x20,0xb0,0x42,0x85,0x94,0xdb,0xbf, + 0xe0,0xdf,0xb1,0xb9,0x78,0x3c,0x6b,0x9f,0xee,0xed, + 0x87,0x0f,0xf6,0xb9,0xfb,0x9c,0xb5,0xce,0xdd,0x6b, + 0xed,0xb5,0xd7,0x89,0x25,0x12,0x09,0x4f,0xa9,0x35, + 0xa0,0x12,0x6c,0x06,0xab,0xc0,0x32,0x90,0x03,0x26, + 0xc0,0x28,0xf8,0x08,0xfa,0x41,0x2f,0x78,0xab,0x31, + 0x98,0x1d,0x32,0x1f,0x03,0xd5,0xe0,0x3c,0x28,0x09, + 0xb8,0x67,0x01,0x28,0x20,0xdb,0x40,0x13,0x78,0x05, + 0xae,0x82,0x2e,0x90,0x0c,0x32,0xee,0xcf,0xe1,0xb8, + 0x08,0xf4,0xd1,0x40,0x89,0xe7,0x26,0xb9,0xbf,0x83, + 0x2b,0x51,0xe4,0xea,0x7c,0x0f,0xdf,0xbe,0xdc,0xfb, + 0x37,0x6d,0x02,0x6f,0xc0,0x7e,0xad,0xf3,0x63,0xe0, + 0x1e,0xc8,0xf5,0xd2,0x23,0x09,0xcb,0x5d,0x50,0x13, + 0xe6,0x7c,0x1f,0xb8,0x11,0x12,0x8e,0x28,0x92,0xdc, + 0x69,0x01,0x07,0x82,0x9c,0xaf,0x04,0xed,0xbc,0x31, + 0x13,0x12,0xbb,0x37,0x41,0x71,0xaa,0x73,0x99,0x68, + 0x4b,0xe3,0x52,0x07,0x29,0x87,0x7e,0x62,0xf6,0x56, + 0xdb,0x09,0xb6,0x84,0x3c,0x78,0x0b,0xbc,0xe4,0x58, + 0xb6,0x5f,0x45,0xca,0xfc,0x45,0x30,0xc6,0xb1,0xc4, + 0x77,0x6d,0x80,0x1d,0xa9,0x13,0xbb,0x64,0x17,0x19, + 0xe7,0xb5,0x8a,0xb7,0xde,0x08,0x4e,0x82,0x69,0xf0, + 0x18,0x7c,0x02,0xf3,0x38,0x27,0xd7,0x0d,0x1c,0x6f, + 0x60,0x11,0x9a,0x4b,0x52,0xd9,0xba,0x7c,0xee,0xc3, + 0x32,0x65,0x85,0x3b,0xc5,0xf1,0x17,0xe6,0x87,0xc7, + 0x22,0x72,0xc1,0x0a,0x5f,0x2b,0xc8,0x52,0xd4,0x81, + 0xd5,0xe2,0x7c,0xbb,0x43,0xcc,0xea,0xc1,0x72,0x8e, + 0x2f,0x81,0x49,0x16,0xa1,0xd7,0xfc,0xed,0x28,0x28, + 0x55,0xda,0xaa,0xf2,0x19,0x03,0xad,0x16,0xb1,0x6c, + 0x8a,0xbe,0x82,0xeb,0xa0,0x8e,0xd7,0x4b,0xc0,0x65, + 0x07,0x5b,0x65,0xbe,0x9d,0xfa,0x4a,0x1d,0xb2,0x2a, + 0x5f,0x1d,0x0f,0x14,0xb3,0x12,0x79,0x0e,0x76,0x8a, + 0xc5,0x79,0x3c,0x62,0xc1,0xc8,0x66,0xf2,0x89,0xd6, + 0x81,0xe3,0x8e,0x76,0xe2,0xe2,0x7c,0x71,0x84,0xfd, + 0x2a,0x4b,0x3c,0xdf,0xba,0x5e,0x1a,0xa1,0x2a,0xe6, + 0xca,0x03,0xe3,0x11,0x9c,0x9f,0xe1,0x39,0x6e,0xf4, + 0x04,0xdc,0x71,0xb4,0xf1,0xcb,0x67,0x23,0xe0,0x22, + 0x69,0x16,0xee,0x5b,0x87,0x50,0x3e,0xc7,0x67,0xc1, + 0x77,0x07,0x3b,0x63,0xbe,0x95,0x30,0x1a,0x4d,0x81, + 0xd3,0x1c,0x2f,0x04,0x8d,0x56,0x71,0xf9,0xc6,0xe2, + 0xa1,0xd5,0x07,0x9f,0x07,0xbe,0x56,0x57,0xc0,0x67, + 0xeb,0x9f,0x4a,0xb2,0x1e,0x64,0x01,0x32,0x25,0x78, + 0x40,0x69,0xab,0x5f,0x9c,0x3f,0x52,0xde,0x3c,0x02, + 0x9a,0x4d,0xa6,0x82,0x73,0xd6,0xe1,0xd4,0x6c,0x55, + 0xbb,0x13,0xe0,0xb7,0xc2,0x5e,0x8f,0x3c,0x38,0x04, + 0x06,0x15,0x37,0x5f,0x03,0x2b,0xd8,0xab,0xd5,0x73, + 0xd9,0x8d,0xa4,0xb1,0xdc,0xc1,0x39,0x09,0xcd,0xed, + 0x10,0x5b,0x2f,0xc0,0x7b,0x73,0xb0,0x34,0x29,0x56, + 0xa0,0x95,0x04,0xe9,0x81,0x63,0xf8,0xfe,0xee,0xcd, + 0x1e,0xf0,0xd4,0xfb,0x3f,0xea,0x33,0x2f,0x6a,0x17, + 0x06,0x89,0xd5,0x8f,0x0c,0x3b,0xfe,0xc9,0x4a,0x98, + 0x4c,0x75,0x3e,0x0c,0x0e,0x83,0x99,0x0c,0x39,0x16, + 0xbb,0x47,0x98,0x63,0xb3,0x36,0x90,0x0f,0xd9,0x30, + 0x24,0x33,0xe0,0x58,0xec,0x76,0x86,0xb5,0xce,0xd2, + 0x24,0xec,0x4e,0x63,0x08,0xc4,0xce,0x5e,0xab,0xf9, + 0x08,0xfd,0x68,0xe8,0x06,0xeb,0xd3,0x90,0x84,0xcf, + 0x68,0xa7,0xdb,0xf5,0x73,0x49,0x72,0x60,0x2b,0x3b, + 0x9d,0x01,0x47,0xa7,0xcf,0xa5,0x53,0xe1,0xf3,0xc3, + 0x51,0x3f,0x14,0xcd,0x36,0x14,0x0a,0x53,0xbe,0x52, + 0xe3,0x3c,0x8e,0xc7,0x59,0xd7,0xdf,0xd1,0x69,0xaf, + 0xf6,0xbc,0xf8,0x23,0xc0,0x00,0xfb,0xfe,0x80,0x69, + 0x45,0x01,0x0a,0xdf,0x00,0x00,0x00,0x00,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/help_y_png.cpp b/data/converted/help_y_png.cpp new file mode 100644 index 000000000..3b950a5ee --- /dev/null +++ b/data/converted/help_y_png.cpp @@ -0,0 +1,157 @@ +//this file was auto-generated from "y.png" by res2h + +#include "../Resources.h" + +const size_t help_y_png_size = 1498; +const unsigned char help_y_png_data[1498] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, + 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, + 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x41,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x42,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x38,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, + 0x46,0x39,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x79,0x6d,0x1d,0x54,0x00,0x00,0x02,0x4c, + 0x49,0x44,0x41,0x54,0x78,0xda,0xc4,0x97,0x4b,0x48, + 0x1b,0x51,0x14,0x86,0x27,0x83,0x52,0xa8,0x8a,0x64, + 0x13,0xc9,0x56,0x41,0x8d,0xba,0x93,0x50,0x44,0x8b, + 0x0b,0xc1,0x85,0x45,0xea,0xdb,0x74,0xd1,0x8d,0xd4, + 0xb6,0xa0,0xb8,0x11,0x4d,0x37,0xae,0x45,0x41,0x04, + 0x77,0x6a,0xb7,0x4a,0xa1,0x4d,0xc0,0x47,0x56,0xa2, + 0x21,0xc6,0x47,0x69,0x10,0x17,0x45,0x5b,0x8a,0xdd, + 0xb7,0x74,0xe5,0x03,0x41,0xc4,0xc7,0x7f,0xe0,0x0c, + 0x5c,0x86,0x4c,0xe6,0xcc,0x24,0x69,0x7e,0xf8,0x20, + 0x61,0x66,0xce,0x7f,0xe7,0xdc,0x7b,0xce,0xbd,0xe3, + 0x09,0x87,0xc3,0x9a,0x50,0x0d,0xe0,0x05,0x68,0x01, + 0x75,0xa0,0x02,0x94,0x80,0x6b,0xf0,0x07,0xfc,0x04, + 0x49,0x10,0x03,0xdf,0x25,0x01,0x8b,0x6c,0xae,0x7b, + 0x40,0x37,0xf8,0x00,0x82,0x16,0xf7,0x3c,0x05,0x95, + 0x4c,0x07,0x98,0x06,0x29,0x30,0x0b,0x22,0xe0,0xc1, + 0x2a,0xb8,0x9e,0xc1,0xb8,0x16,0x24,0x38,0x40,0x50, + 0x73,0x26,0xba,0xff,0x33,0x67,0xa2,0xd6,0xa9,0x79, + 0x3f,0x8f,0xfe,0xb9,0x96,0x9d,0x9a,0xc1,0x11,0x08, + 0x49,0xcd,0x87,0xc1,0x27,0x50,0xaa,0xe5,0x46,0x34, + 0x2d,0xab,0x60,0xd4,0xce,0x7c,0x10,0x2c,0xda,0x4c, + 0x87,0x1b,0xd1,0xda,0x59,0x00,0xaf,0xac,0xcc,0xab, + 0xc1,0x47,0xbe,0x31,0x1f,0xa2,0xb8,0xcb,0x20,0x60, + 0x36,0xa7,0x0b,0x4b,0x39,0x4c,0xb5,0x95,0x4a,0xd8, + 0xc7,0xa3,0x96,0xda,0x4b,0xd0,0x9a,0xe1,0xa1,0x1b, + 0x30,0x0e,0x6e,0x79,0x0e,0xe7,0xd2,0x4c,0xcd,0x2e, + 0x58,0xe1,0xdf,0xed,0xa0,0xd7,0x22,0x16,0xf5,0x89, + 0x1e,0xaa,0x22,0xc3,0x7c,0xd2,0x66,0xc4,0x4f,0xc0, + 0x3d,0x8f,0xda,0x08,0x60,0x0e,0x3e,0x01,0xbe,0x81, + 0x62,0x41,0x3c,0xea,0x6c,0x11,0x9d,0xeb,0xb0,0x49, + 0x90,0xb2,0x29,0x7e,0x6b,0x8d,0x1b,0x89,0xaa,0x6d, + 0x36,0x26,0xbd,0x01,0x55,0x82,0x3e,0x50,0x4f,0xe6, + 0x9d,0xc2,0xf9,0xf2,0x83,0x31,0xfe,0x4d,0xb5,0xbb, + 0xa5,0x5c,0x9b,0x56,0xca,0x6a,0x4a,0x18,0xaf,0x4b, + 0xe7,0x14,0x4a,0x45,0xe9,0xf4,0x9a,0x0c,0x53,0xfc, + 0xe6,0x1a,0x0f,0xce,0x2f,0x8c,0xd5,0xa4,0xab,0x4b, + 0x5f,0x20,0xaf,0x32,0x9f,0x71,0x70,0xa8,0x0c,0xc2, + 0x2b,0x98,0x6b,0x55,0x01,0x32,0xf7,0x39,0x2c,0x17, + 0xf5,0xed,0x46,0xc0,0x5a,0x9a,0xac,0x48,0xe4,0x23, + 0xf3,0x72,0x17,0xed,0xd2,0x98,0xd7,0x63,0xae,0x02, + 0x75,0x3d,0x48,0x55,0x4a,0xe6,0xe7,0x2e,0x9a,0x85, + 0x79,0x45,0xab,0x95,0x20,0xd5,0x95,0xce,0x07,0x01, + 0xa7,0xa2,0x5a,0x7e,0xa6,0xfc,0x0f,0xb9,0x88,0xf1, + 0x57,0xe7,0x13,0x48,0xb6,0x72,0xb3,0x11,0xfd,0xd0, + 0x79,0xc3,0x2f,0x84,0x92,0x64,0xbe,0x51,0x20,0xf3, + 0x4d,0x32,0xff,0x05,0x0e,0x5c,0x3c,0xec,0x53,0xce, + 0x6e,0x4e,0xd3,0xfe,0x15,0x9c,0xea,0x16,0xbd,0x5a, + 0xa2,0x79,0xf0,0x9b,0x29,0x73,0xf8,0xec,0x8c,0xba, + 0x50,0x36,0xc1,0xce,0x7f,0x4a,0x77,0xc2,0x68,0x4c, + 0x6a,0xba,0xde,0x81,0x8b,0x3c,0x1b,0x5f,0x82,0xb7, + 0xc6,0x71,0x5a,0x35,0x3f,0x03,0xaf,0xc1,0x5d,0x9e, + 0x8c,0x29,0xee,0x10,0xaf,0xb1,0xb4,0xf5,0xb9,0x0e, + 0xde,0x67,0x3a,0xe8,0x67,0x61,0x4c,0x71,0xbf,0xd8, + 0x35,0x07,0x3a,0x44,0xf6,0xe5,0x70,0x0a,0x28,0xce, + 0x00,0xc7,0x15,0x75,0xa6,0x28,0x68,0xcc,0xc1,0x22, + 0x8c,0x73,0x9c,0xa8,0xd3,0xb6,0x48,0x6b,0xa0,0x8d, + 0x4f,0x3a,0x7b,0x0e,0x4d,0xf7,0xe9,0xa4,0xc2,0xcf, + 0x9f,0xb9,0xfd,0x50,0x34,0xca,0x90,0xa8,0x31,0x7d, + 0xa5,0xfa,0x78,0x3b,0xa6,0x5d,0xf1,0x1f,0x38,0x61, + 0xd3,0x98,0x74,0xbf,0x78,0x14,0x60,0x00,0x19,0x2b, + 0x6d,0x27,0x7a,0xc0,0xec,0x28,0x00,0x00,0x00,0x00, + 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/converted/star_filled_png.cpp b/data/converted/star_filled_png.cpp index ec16d993b..4308c2ba4 100644 --- a/data/converted/star_filled_png.cpp +++ b/data/converted/star_filled_png.cpp @@ -2,376 +2,179 @@ #include "../Resources.h" -const size_t star_filled_png_size = 3698; -const unsigned char star_filled_png_data[3698] = { +const size_t star_filled_png_size = 1729; +const unsigned char star_filled_png_data[1729] = { 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,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x8d,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x9b,0x51,0x64,0x5b, - 0x61,0x14,0xc7,0x7f,0x4d,0xab,0x8c,0x50,0x6a,0xa5, - 0x8c,0x56,0xab,0xd5,0xc9,0xa4,0x32,0x79,0x98,0xcd, - 0x6a,0xb5,0x31,0x9b,0xd6,0x1e,0x6a,0x33,0x5a,0x9b, - 0xb1,0x51,0xeb,0x4b,0x1f,0xaa,0x93,0xd1,0xd7,0x3d, - 0x8d,0xbe,0x8e,0xb2,0xa7,0x31,0xf6,0x54,0x2b,0x65, - 0x8c,0x51,0xfa,0x34,0x4a,0x29,0xa1,0x94,0x6a,0x09, - 0xb1,0x56,0x28,0x21,0x94,0xc8,0x1e,0xee,0x89,0x45, - 0x34,0xcd,0xcd,0x77,0x6f,0xbe,0xef,0xde,0xfb,0xed, - 0x10,0x91,0xa4,0xc9,0xfd,0xce,0x2f,0xe7,0x9c,0xef, - 0x9c,0xff,0xd7,0x74,0x54,0x2a,0x15,0x6c,0xb6,0x2e, - 0x00,0x8e,0xae,0x9a,0xba,0x7e,0x3f,0x70,0x02,0x94, - 0x8d,0x5c,0x7d,0xf0,0x94,0x98,0xe1,0x2f,0x60,0x19, - 0x98,0x35,0xb9,0x80,0x8e,0x4a,0xa5,0x62,0x2a,0x02, - 0x7a,0x81,0x23,0xe0,0x10,0x18,0xb7,0x31,0x02,0xde, - 0x02,0x71,0x20,0x09,0x4c,0x99,0x5a,0x84,0x29,0x00, - 0x57,0x80,0xc5,0x9a,0xc7,0x19,0xdb,0x00,0xbc,0x06, - 0xfa,0x6a,0x1e,0xdf,0x95,0x9b,0x15,0x00,0x3a,0xa5, - 0xf8,0xd5,0x5b,0xc6,0x16,0x00,0xb3,0xc0,0xc0,0x05, - 0xcf,0x4f,0x49,0x3d,0x88,0x3c,0x80,0x8c,0xe2,0x6b, - 0x91,0x00,0xf0,0x04,0x48,0x5c,0xf2,0xfa,0x73,0x60, - 0x28,0xca,0x00,0x32,0x8a,0xf5,0x21,0x12,0x00,0xee, - 0x01,0xb7,0x5d,0xfc,0xdd,0x2b,0x69,0x91,0x23,0x07, - 0xc0,0x6d,0x7e,0xd7,0xf7,0x08,0x91,0x00,0x90,0x02, - 0x1e,0xb5,0xd8,0x25,0xf6,0x44,0x09,0x40,0xab,0xd5, - 0xbd,0x47,0x20,0x44,0x02,0xc0,0x10,0xf0,0x54,0xe1, - 0x7d,0x8b,0x92,0x0e,0xa1,0x07,0xb0,0x2c,0xd5,0x5d, - 0x45,0x2b,0x78,0x11,0x76,0x00,0xfd,0x52,0xd5,0x75, - 0xc3,0x0b,0x0c,0x00,0xaf,0x61,0x3c,0xa2,0x98,0x3e, - 0x81,0x00,0xe0,0x57,0x21,0x6b,0x6b,0x7b,0xdc,0xe5, - 0xc3,0x5c,0x9f,0x90,0xe1,0xa6,0x0f,0x48,0xcb,0xfd, - 0x80,0x3c,0xef,0x47,0x11,0x4b,0x01,0x7f,0x80,0x63, - 0x20,0x8b,0xa3,0x21,0xee,0xe3,0x28,0x49,0x05,0x60, - 0xa7,0x9d,0x00,0xba,0x65,0x42,0xbb,0x26,0xf9,0x9c, - 0x12,0x07,0x87,0x80,0x31,0x1c,0x45,0x47,0x87,0xf5, - 0xd5,0x00,0xbe,0xc8,0x4e,0x1a,0x00,0x3a,0x01,0x76, - 0xdd,0x00,0x48,0x4a,0x9b,0x9a,0x94,0x0b,0x8d,0xc8, - 0xad,0x87,0x70,0x58,0x33,0x40,0x79,0x20,0x07,0xec, - 0x09,0x94,0x03,0x60,0x13,0xc8,0x55,0x45,0xd1,0x38, - 0xf0,0x1d,0xb8,0x8f,0x1d,0xb6,0x06,0x2c,0x30,0x78, - 0x5a,0xae,0x16,0xc1,0x22,0x30,0x0d,0x6c,0x58,0xe0, - 0xfc,0x47,0x60,0x1e,0x39,0x8b,0xa8,0xdd,0x05,0x4a, - 0xc0,0x0c,0xf0,0x35,0xc2,0xce,0xbf,0x07,0xde,0x5d, - 0x56,0x04,0xcb,0xc0,0x1c,0x70,0xa6,0xab,0x17,0xd7, - 0x68,0xf3,0x12,0xfa,0xae,0xfa,0x80,0x05,0xe0,0x43, - 0x44,0x1c,0x3f,0x97,0x2f,0x75,0xad,0xd5,0x46,0x68, - 0x05,0x58,0x0a,0xb9,0xf3,0x25,0xe0,0xd9,0x65,0x69, - 0xdd,0xac,0x13,0x5c,0xad,0x2d,0x18,0x21,0xb3,0x22, - 0xf0,0xb8,0x59,0x61,0x77,0xd3,0x0a,0xaf,0x49,0x08, - 0x9d,0x87,0xc8,0xf9,0x02,0x30,0x09,0x6c,0xf9,0x35, - 0x0b,0x7c,0x93,0x1d,0xa2,0x14,0x02,0xe7,0x73,0xc0, - 0x84,0xdb,0x16,0xb9,0x95,0x61,0x68,0x13,0x78,0x28, - 0x3b,0x44,0x50,0xed,0x50,0x9c,0xcf,0xb6,0x6b,0x1a, - 0xdc,0x06,0x1e,0x48,0x3b,0x19,0x34,0xcb,0x02,0x77, - 0x04,0x42,0x5b,0xc7,0xe1,0x1d,0xa1,0x9c,0x0b,0x90, - 0xf3,0xbf,0x65,0x4d,0x79,0x5d,0x7a,0xc0,0xbe,0xd0, - 0x3e,0x08,0x80,0xf3,0xbf,0x24,0x2a,0x0b,0xba,0x05, - 0x91,0x63,0xa1,0xbe,0x67,0xd0,0xf9,0x0d,0x99,0x61, - 0x8a,0xaa,0x1f,0xe0,0x55,0x11,0xca,0xcb,0x76,0x73, - 0x6e,0x28,0xe7,0x3d,0xef,0x4c,0x7e,0x48,0x62,0x71, - 0x11,0x4e,0x4c,0x68,0x00,0x9e,0x1b,0x34,0x3f,0x00, - 0x24,0x0d,0x85,0x7f,0x55,0x7a,0x33,0x0e,0x20,0x6d, - 0xb0,0x06,0xa4,0x82,0x00,0x20,0x65,0x3b,0x00,0xab, - 0x23,0xa0,0xd7,0x8f,0x3c,0x34,0x09,0x3f,0x16,0xe2, - 0xf0,0x87,0x7f,0xe7,0x11,0xd6,0x02,0xf0,0xbc,0x86, - 0x58,0x88,0xf3,0xdf,0x97,0x6d,0x38,0x0a,0x00,0xd2, - 0xa6,0x00,0xc4,0x71,0x4e,0x8f,0x54,0xad,0x80,0xa3, - 0x39,0xae,0x7a,0x6c,0xa5,0x8d,0x01,0x48,0xa0,0x76, - 0x76,0x5f,0x12,0xa7,0x87,0xe5,0x7e,0x09,0x18,0x45, - 0xfd,0x3c,0x62,0x04,0x0f,0x67,0x94,0x31,0xcd,0xe4, - 0xbf,0x00,0xd7,0xc5,0xe9,0xb3,0xba,0xc9,0x72,0x0e, - 0xb8,0x89,0x0b,0x1d,0xaf,0xce,0x3a,0xbd,0xd4,0x01, - 0x5d,0x00,0xb6,0xc4,0xb9,0x97,0xe2,0x6c,0x23,0xdb, - 0x95,0xe9,0x72,0x9a,0x16,0x64,0x2d,0x2f,0x3b,0x81, - 0x17,0x00,0x6e,0x2e,0x9a,0xc5,0x91,0xa6,0x27,0x69, - 0x72,0x4c,0x5d,0x67,0x9b,0x38,0xbf,0x22,0x79,0x83, - 0x3b,0x95,0x27,0xad,0x1b,0x40,0x77,0x93,0xb0,0xcb, - 0xcb,0xe2,0x6f,0x00,0x3f,0x14,0xaf,0x51,0x06,0x3e, - 0x4b,0x7d,0x58,0x69,0x22,0x7a,0x68,0x8f,0x80,0xb1, - 0x06,0x1a,0x40,0x51,0x16,0x3b,0x2c,0x8b,0xf7,0xc3, - 0x8a,0x38,0xc7,0x74,0xa3,0xc0,0xa7,0x06,0x1a,0x40, - 0x52,0x55,0x93,0x88,0xf9,0x94,0xff,0x65,0x59,0xdc, - 0xb0,0x2c,0xb6,0x1d,0xe7,0x07,0x79,0x9c,0x33,0xcb, - 0x71,0x60,0xfd,0x82,0x88,0x4c,0xe8,0x04,0x50,0x1b, - 0x72,0xeb,0x12,0xea,0x0b,0xe8,0x91,0xcb,0xab,0x52, - 0xd8,0x04,0x8e,0x1a,0xec,0x29,0x0d,0xbc,0x44,0x40, - 0x55,0x8a,0x9e,0xc1,0x51,0x89,0x75,0xdb,0x36,0x70, - 0x4b,0xb6,0xcf,0x03,0x55,0x00,0xaa,0xbf,0x1b,0x9c, - 0x92,0x4a,0x1d,0x14,0xeb,0xc6,0xf9,0x77,0xfc,0x9f, - 0x2d,0xbd,0x6b,0xf0,0x54,0x00,0x58,0x6c,0x31,0x2c, - 0xb7,0xff,0x00,0x6c,0x07,0xf0,0x77,0x00,0x61,0xc5, - 0xb1,0x4d,0xf4,0xc6,0x0e,0x12,0x00,0x00,0x00,0x00, - 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, + 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0xda, + 0x7d,0x5c,0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, + 0x37,0x35,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, + 0x37,0x36,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x45,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, + 0x37,0x34,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0x69,0x5e,0x78,0x11,0x00,0x00,0x03,0x33, + 0x49,0x44,0x41,0x54,0x78,0xda,0x8c,0x55,0xcf,0x8b, + 0x4f,0x51,0x14,0x3f,0xe7,0xbe,0x37,0x63,0x4c,0xca, + 0x2c,0x34,0xcd,0x42,0x21,0x23,0x62,0x43,0x52,0x52, + 0x9a,0x3f,0x80,0x05,0x76,0x36,0x2c,0x68,0x76,0x83, + 0xa5,0x29,0x36,0x9a,0xb2,0x52,0x92,0x15,0x59,0xd8, + 0x30,0x94,0x10,0x0d,0x1b,0x2b,0x1b,0x0b,0x35,0xa5, + 0xc6,0x8a,0xc2,0x42,0xa2,0xe4,0x47,0xf2,0x65,0xde, + 0xbd,0xc7,0xe7,0x9c,0x7b,0xdf,0x8f,0xef,0x7b,0x5f, + 0x72,0xeb,0xbc,0x77,0xdf,0xb9,0xe7,0x9e,0x1f,0x9f, + 0xf3,0xe3,0x71,0x6f,0x71,0x05,0xb1,0x0b,0x64,0x8b, + 0x89,0xb2,0x95,0x05,0x31,0x0b,0x91,0x50,0x7b,0x5d, + 0x02,0x1d,0x04,0xbd,0x03,0x1d,0x05,0xbd,0xea,0x3b, + 0xc5,0x5d,0x59,0x76,0x24,0x9e,0x49,0xb0,0xd7,0x87, + 0x80,0x5c,0x5b,0x8b,0x14,0xac,0xb2,0xed,0x75,0x1c, + 0x34,0x03,0x5a,0x0b,0xda,0x03,0xba,0xdd,0x56,0x4e, + 0x01,0x0a,0x83,0xa3,0xf6,0xe5,0xae,0x01,0xf5,0x22, + 0x50,0x5b,0xf0,0x4c,0x4b,0x6c,0x07,0x68,0xaa,0xc9, + 0x08,0xde,0xd1,0xa0,0x35,0x80,0xcb,0x14,0x96,0xf3, + 0xda,0x33,0xa2,0x59,0xd0,0xba,0x01,0x77,0xe7,0x2b, + 0x68,0x00,0x8b,0x46,0x40,0x2c,0xff,0x61,0x00,0x42, + 0x7a,0x21,0xfc,0xce,0x28,0x82,0xc9,0x73,0xf6,0x6e, + 0xde,0x8d,0xfb,0x09,0x28,0xdf,0x67,0xd0,0xa8,0xf7, + 0x03,0x94,0xff,0x25,0x02,0xe5,0xc2,0x08,0x2e,0x86, + 0xc2,0xcd,0x86,0x82,0x9d,0x98,0x77,0x8d,0x64,0x6a, + 0x02,0xbd,0xd1,0x05,0x28,0x1f,0xa1,0x7f,0xac,0x3c, + 0x5d,0xda,0x85,0xe7,0x06,0xd0,0x1a,0xd0,0x38,0x68, + 0x2b,0xbc,0xdc,0x84,0x84,0x6f,0x17,0x71,0x94,0x0d, + 0xf9,0xe8,0x4a,0x59,0x6c,0x30,0xe2,0x97,0x33,0xdd, + 0x6e,0x46,0xc5,0xbd,0xc6,0xfd,0x17,0xd8,0xbf,0x04, + 0xbd,0x07,0x7d,0x02,0x7d,0x04,0x3d,0x36,0xd9,0xde, + 0xe2,0xf0,0x39,0x08,0x9c,0x8d,0xa1,0x73,0x03,0x03, + 0x8e,0xe5,0x0a,0x72,0xc3,0x1e,0xa5,0x4c,0x35,0x4c, + 0xe0,0x85,0x22,0xb3,0x8a,0xab,0x93,0x25,0x55,0x94, + 0x1c,0xe1,0x7a,0x26,0xc4,0x47,0xf8,0xe7,0xf3,0x11, + 0x29,0x2f,0x55,0x4a,0x00,0x91,0x7a,0x69,0x82,0x6e, + 0x00,0xb6,0x1c,0xcf,0x45,0x92,0x53,0x56,0xf3,0x95, + 0x5f,0x06,0x6f,0x32,0x7b,0x3d,0xd7,0xf2,0x32,0x83, + 0x19,0x3c,0xcd,0x7c,0x23,0x2b,0x62,0x97,0xa4,0x3c, + 0x67,0xea,0x8b,0x4e,0xca,0xb4,0xa4,0x28,0x99,0x53, + 0x81,0x14,0x28,0x73,0x44,0x67,0x7b,0xa2,0x0f,0x39, + 0x12,0x75,0x18,0x49,0xbb,0x49,0x9e,0xec,0xd0,0x29, + 0xde,0x4c,0x7d,0x55,0x23,0x4d,0xe5,0x5c,0x37,0xa2, + 0x34,0x1a,0x8d,0x0d,0x36,0x67,0xc4,0xd1,0xf2,0x3d, + 0x44,0x3f,0xa7,0x49,0x9e,0x47,0x48,0x2a,0x3b,0x1f, + 0xb4,0x3c,0x81,0xab,0x1b,0x0e,0x51,0x48,0xa8,0xd9, + 0x0f,0x15,0x43,0xb8,0x0b,0x97,0x26,0x5d,0x52,0xb3, + 0x09,0xcb,0x5d,0x97,0xc9,0xa1,0xba,0x8a,0x88,0x6e, + 0xe1,0xf0,0x07,0x20,0x79,0x60,0x50,0x7a,0x8d,0x24, + 0x34,0x6a,0x3b,0x5a,0x63,0x66,0xea,0x8c,0x08,0xf0, + 0x15,0xe6,0xe8,0xb9,0x25,0xfa,0x2a,0x72,0x39,0x5d, + 0x3a,0xe3,0xd8,0x12,0x6a,0x38,0x3e,0x44,0x24,0x53, + 0xa0,0xcf,0x01,0xde,0x14,0xbf,0xf2,0x84,0x67,0x1a, + 0x60,0x49,0x89,0x91,0x46,0xea,0x23,0x3f,0x40,0xce, + 0xf7,0x72,0x4d,0x6c,0x11,0x82,0x9b,0x83,0xce,0x69, + 0xb6,0x82,0x49,0xf4,0xe5,0xc9,0x18,0x95,0x9d,0x9a, + 0xaa,0xe2,0x22,0x9e,0x27,0x4d,0x68,0x28,0x74,0x3c, + 0xe6,0x2a,0x17,0x65,0x52,0xb3,0xb2,0x93,0xbf,0x82, + 0x3f,0x96,0xa2,0xa8,0x92,0x9e,0xfb,0xde,0x50,0x5f, + 0x0d,0x63,0xbf,0x85,0xd5,0x60,0x06,0xe5,0xed,0x01, + 0x96,0xc6,0xb8,0x94,0x89,0xb6,0x92,0x24,0x8b,0x08, + 0xac,0xd5,0x38,0xd8,0x86,0xcf,0xa5,0x2a,0x49,0x90, + 0xcd,0x6d,0x72,0x52,0xc5,0x18,0x05,0xce,0x7b,0x6d, + 0x98,0x02,0x48,0xf6,0x92,0x0a,0x27,0x25,0x57,0x5c, + 0xdd,0x03,0xcd,0xd1,0x14,0xe2,0xec,0x87,0x1a,0x9d, + 0xb2,0x4b,0x7d,0xa3,0x42,0x31,0x6e,0xac,0x8d,0x90, + 0x1b,0x4d,0x03,0xb8,0xd2,0xa2,0x8a,0x4b,0x25,0x25, + 0xbe,0x54,0xe6,0x8e,0xd2,0x34,0x8d,0x06,0xc6,0xdb, + 0x3f,0xaa,0x5c,0xfa,0x61,0x98,0xa8,0x4b,0x0f,0x09, + 0xb4,0x9f,0x48,0x1a,0xc5,0x8d,0x41,0x67,0xdb,0x32, + 0x89,0x99,0xc4,0x4e,0x2e,0xcc,0xc0,0xfa,0xce,0xb0, + 0x53,0xfc,0x1a,0x6b,0x32,0xce,0x12,0x26,0xaf,0x8a, + 0xb4,0x7a,0xd2,0x70,0xc3,0xfb,0x11,0x3c,0xbe,0x86, + 0xcf,0x9d,0xe0,0xcc,0x00,0xda,0x55,0xd1,0x50,0xa8, + 0xff,0x68,0x44,0xbb,0x3b,0x06,0xec,0x37,0x57,0xf7, + 0xd1,0x5b,0xa2,0xd6,0xef,0x98,0xe9,0x3e,0x1a,0xe7, + 0x0a,0xbc,0x5d,0x48,0xed,0x70,0x07,0x51,0x5d,0xc6, + 0xfb,0x34,0xbe,0x8e,0x89,0xcf,0x46,0x1b,0xcd,0xf8, + 0xa6,0xfb,0x3f,0x28,0x87,0x54,0xd4,0xba,0x00,0xc8, + 0xce,0xa3,0xc6,0xbf,0x81,0x96,0xa0,0x68,0x3f,0xf8, + 0x07,0x94,0xdf,0x6a,0x31,0x1d,0xcb,0x27,0x70,0x3e, + 0x09,0xb9,0x1b,0x40,0xe1,0x3b,0x26,0xc0,0x53,0x44, + 0x71,0xaa,0x4f,0x1f,0xe8,0x8f,0x00,0x03,0x00,0xa3, + 0x22,0x9c,0x02,0x6c,0xe3,0xe8,0x90,0x00,0x00,0x00, + 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; diff --git a/data/converted/star_unfilled_png.cpp b/data/converted/star_unfilled_png.cpp index 40b12d668..a3f69fde3 100644 --- a/data/converted/star_unfilled_png.cpp +++ b/data/converted/star_unfilled_png.cpp @@ -2,377 +2,131 @@ #include "../Resources.h" -const size_t star_unfilled_png_size = 3703; -const unsigned char star_unfilled_png_data[3703] = { +const size_t star_unfilled_png_size = 1245; +const unsigned char star_unfilled_png_data[1245] = { 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,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x92,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x9b,0x4f,0x64,0x1c, - 0x51,0x1c,0xc7,0x3f,0xd9,0x24,0x94,0x10,0x21,0x44, - 0x09,0xb1,0xb4,0x56,0xd7,0xd4,0x5e,0x4a,0xa5,0x4d, - 0x4b,0x2b,0x69,0x2f,0xb5,0x95,0x48,0xf5,0x8f,0x56, - 0x7a,0x48,0x7a,0xc8,0xbf,0x5e,0x4a,0xc8,0x31,0x54, - 0xe9,0xb1,0x54,0xc9,0xb1,0x84,0x5e,0x4a,0x68,0x4a, - 0x88,0xd0,0x4b,0x09,0xb9,0x94,0x54,0x84,0x25,0xd4, - 0x12,0xd6,0x12,0x56,0x58,0x96,0x58,0xe9,0xe1,0xfd, - 0x96,0xb1,0x76,0xb3,0xb3,0x6f,0x66,0xe7,0xcd,0xce, - 0xe4,0xcb,0x58,0x3b,0xbb,0xc9,0xcc,0xef,0x93,0xf7, - 0x7e,0xef,0xf7,0xbe,0xbf,0x49,0xc7,0xd9,0xd9,0x19, - 0x51,0x56,0x8c,0x88,0xab,0x0b,0x20,0x9d,0x4e,0x9b, - 0xba,0xfe,0x00,0x70,0x0c,0x94,0x4d,0x5c,0x7c,0x63, - 0x63,0xc3,0xf8,0x08,0x98,0x05,0x26,0xa2,0x3a,0x05, - 0xfa,0x80,0x57,0x02,0x21,0x92,0x00,0x5e,0x03,0x3d, - 0x40,0x12,0x18,0x8b,0x1a,0x80,0x4b,0xc0,0x8c,0xed, - 0xfd,0x42,0xd4,0x00,0xbc,0x00,0xfa,0x6d,0xef,0x6f, - 0xca,0x11,0x09,0x00,0x9d,0xc0,0x5c,0x8d,0xf3,0x0b, - 0x51,0x01,0x30,0x01,0x0c,0xd6,0x38,0x3f,0x26,0xf9, - 0x20,0xf4,0x00,0x16,0x34,0x3f,0x0b,0x05,0x80,0x87, - 0x40,0xe2,0x9c,0xcf,0x1f,0x03,0x43,0x61,0x06,0xb0, - 0xe8,0x20,0x3f,0xcc,0x86,0x15,0xc0,0x2d,0xe0,0x86, - 0x83,0xef,0x3d,0x93,0x12,0x39,0x74,0x00,0x9c,0xce, - 0xef,0xea,0x1a,0x21,0x14,0x00,0x2c,0xe0,0x7e,0x13, - 0xdf,0x9f,0x02,0x7a,0xc3,0x04,0x60,0xb1,0xc9,0xef, - 0xf7,0x0a,0x84,0x50,0x00,0x18,0x02,0x1e,0x69,0xfc, - 0xdc,0x8c,0x4c,0x87,0xb6,0x07,0x30,0x2b,0xd9,0x5d, - 0xc7,0x2b,0x78,0xd2,0xee,0x00,0x06,0x24,0xab,0xeb, - 0x6a,0x4e,0x13,0x5e,0x60,0x00,0xb8,0x1d,0xc6,0x71, - 0xcd,0xe9,0x13,0x08,0x00,0x5e,0x25,0xb2,0xc5,0x56, - 0x02,0xe8,0xf2,0x60,0x5f,0x9f,0x90,0xcd,0x4d,0x3f, - 0x90,0x92,0xd7,0x41,0x39,0xef,0x45,0x12,0xb3,0x80, - 0xbf,0xc0,0x11,0x90,0x41,0x79,0x88,0x87,0x40,0x16, - 0x28,0x00,0x7b,0xad,0x04,0xd0,0x2d,0x3b,0xb4,0xcb, - 0x32,0x9f,0x2d,0x09,0x70,0x08,0xb8,0x82,0x72,0x74, - 0xfc,0x50,0xbf,0x0d,0x70,0x2d,0x1d,0xd7,0x01,0x74, - 0x0c,0xec,0x3b,0x01,0x90,0x94,0x32,0x35,0x29,0x17, - 0x8a,0xcb,0xd1,0x4b,0x7b,0xa8,0x11,0xa0,0x3c,0x90, - 0x03,0x0e,0x04,0xca,0x3f,0x60,0x1b,0xc8,0x55,0x00, - 0x64,0x81,0x15,0xe0,0x0e,0xe1,0xd4,0x80,0x1c,0x15, - 0x40,0x6b,0xc0,0x37,0x7b,0x12,0x2c,0x4a,0xc2,0xda, - 0x22,0xfc,0xfa,0x02,0x2c,0x21,0xbd,0x08,0xfb,0x2a, - 0x50,0x02,0xa6,0x81,0xf5,0x10,0x07,0xff,0x01,0x78, - 0x7f,0x5e,0x12,0x2c,0x03,0xf3,0xc0,0x09,0xca,0xb6, - 0x0e,0x93,0x96,0x64,0xe8,0x3b,0xaa,0x03,0x96,0x81, - 0x4f,0x21,0x09,0xfc,0x54,0xfe,0xa8,0x6b,0xcd,0x16, - 0x42,0x1f,0x25,0x31,0xb6,0xb3,0x4a,0xc0,0x9b,0xf3, - 0xa6,0x75,0xa3,0x4a,0x70,0xd5,0x9e,0x30,0xda,0x4c, - 0x45,0xe0,0x65,0xa3,0xc4,0xee,0xa4,0x14,0x5e,0x93, - 0x21,0x74,0xda,0x46,0xc1,0x17,0x80,0x49,0x60,0xc7, - 0xab,0xbd,0xc0,0x0f,0x59,0x21,0x4a,0x6d,0x10,0x7c, - 0x0e,0x18,0x77,0x5a,0x22,0x37,0xb3,0x19,0xda,0x06, - 0x9e,0xcb,0x0a,0x11,0x54,0x65,0x25,0xf8,0x4c,0xab, - 0x76,0x83,0xbb,0xc0,0x53,0x29,0x27,0x83,0xa6,0x0c, - 0xaa,0xaf,0x90,0x6d,0xf5,0x76,0x78,0x4f,0x28,0xe7, - 0x02,0x14,0xfc,0x1f,0xb9,0xa7,0xbc,0x5f,0x7e,0xc0, - 0x21,0x90,0x96,0x4d,0x85,0x69,0xfd,0x96,0x51,0x59, - 0xf0,0xdb,0x10,0x39,0x12,0xea,0x07,0x06,0x83,0xdf, - 0x92,0x3d,0x4c,0x51,0xf7,0x17,0xb8,0x75,0x84,0xf2, - 0xb2,0xdc,0x9c,0x1a,0x9a,0xf3,0xae,0x57,0x26,0x2f, - 0x2c,0xb1,0x1e,0x31,0x4e,0x4c,0x78,0x00,0xae,0x0b, - 0x34,0x2f,0x00,0x24,0x0d,0x0d,0xff,0x8a,0xf5,0x66, - 0x1c,0x40,0xca,0x60,0x0e,0xb0,0x82,0x00,0xc0,0x32, - 0x08,0xe0,0xfa,0xc5,0x08,0x30,0x0c,0xa0,0xcf,0x8b, - 0x79,0x68,0x12,0x7e,0xcc,0xf4,0x10,0x74,0xa9,0x4a, - 0x3f,0xc2,0x18,0x00,0x0b,0xf3,0xb2,0x4c,0x02,0x48, - 0x05,0x00,0x40,0x32,0xea,0x00,0x52,0xa6,0x00,0xf4, - 0xa0,0xba,0x47,0xba,0x2a,0xa0,0x3c,0xc7,0x55,0x97, - 0xa5,0xb4,0x31,0x00,0x09,0xf4,0x7a,0xf7,0x25,0x09, - 0x7a,0x58,0x5e,0x57,0x80,0xdb,0xe8,0xf7,0x23,0xe2, - 0xb8,0xe8,0x51,0xc6,0x7c,0x26,0xff,0x1d,0xb8,0x2b, - 0x41,0x9f,0x54,0xed,0x2c,0xe7,0x81,0x07,0x38,0xf0, - 0xf1,0xaa,0xd4,0x09,0x5c,0x0b,0x3a,0x80,0x1d,0x09, - 0xee,0xad,0x04,0x5b,0x4f,0xfb,0xb2,0xbb,0x9c,0xa2, - 0x09,0x5b,0xcb,0xcd,0x72,0xec,0x06,0x80,0x93,0xe5, - 0x27,0x83,0xb2,0xa6,0x27,0x69,0xd0,0xa6,0xae,0xd2, - 0x36,0x30,0x0a,0xbc,0xc3,0x99,0xcb,0x93,0xf2,0x1b, - 0x40,0x77,0x83,0xe5,0x27,0x2f,0x37,0x7f,0x0f,0xf8, - 0xa5,0x79,0x8d,0x32,0xaa,0x83,0x3b,0x82,0x6a,0xd2, - 0x14,0x5b,0x51,0x0b,0xe8,0x02,0xb8,0x5a,0xc7,0x03, - 0x28,0xca,0xcd,0x0e,0xcb,0xcd,0x7b,0xa1,0x22,0xaa, - 0x4d,0x37,0x02,0x7c,0xad,0xe3,0x01,0x24,0x75,0x3d, - 0x89,0x98,0x47,0xf3,0xbf,0x2c,0x37,0x37,0x2c,0x37, - 0xdb,0x8a,0xfe,0x41,0x1e,0xd5,0xb3,0x1c,0x05,0x36, - 0x6b,0x8c,0xc8,0x84,0x9f,0x00,0xec,0x43,0x6e,0x53, - 0x86,0xfa,0x32,0xfe,0xd8,0xe5,0x15,0x2b,0x6c,0x1c, - 0xe5,0x06,0xbb,0x4a,0x84,0x6e,0x46,0x40,0xc5,0x8a, - 0x9e,0x46,0xb9,0xc4,0x7e,0x6b,0x17,0xf5,0x08,0xdd, - 0x3c,0xca,0x9d,0xd6,0xca,0x03,0xba,0x4f,0x89,0x7d, - 0x96,0x4c,0x1d,0x04,0xad,0x03,0x3f,0x51,0x8f,0xe3, - 0x37,0xad,0x8e,0x8b,0x7f,0x9e,0x8e,0xb8,0x22,0x0f, - 0xe0,0xff,0x00,0x58,0x0b,0xa6,0xee,0x5b,0xdd,0x0e, - 0xa6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae, - 0x42,0x60,0x82 + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, + 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0xda, + 0x7d,0x5c,0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, + 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, + 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, + 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, + 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, + 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, + 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, + 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, + 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, + 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, + 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x43,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x44,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, + 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, + 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x41,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, + 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, + 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, + 0x64,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, + 0x43,0x42,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, + 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, + 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, + 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, + 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, + 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, + 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, + 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, + 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, + 0x3f,0x3e,0xef,0x54,0xed,0xff,0x00,0x00,0x01,0x4f, + 0x49,0x44,0x41,0x54,0x78,0xda,0x62,0xac,0xaf,0xaf, + 0x67,0x20,0x12,0x4c,0x02,0xe2,0x40,0x20,0x7e,0x04, + 0xc4,0xf1,0x40,0x7c,0x07,0x24,0xd8,0xd0,0xd0,0x80, + 0x57,0x13,0x0b,0x91,0x86,0xa7,0x00,0x71,0x2e,0x94, + 0x2d,0x03,0xc4,0xab,0x80,0xd8,0x88,0x18,0x8d,0x4c, + 0x44,0x5a,0x50,0x83,0xc6,0x37,0x04,0x62,0x7b,0x6a, + 0x59,0x50,0x09,0xc4,0xf2,0x58,0xc4,0x57,0x50,0xcb, + 0x82,0x16,0x1c,0xe2,0x12,0x40,0xec,0x4d,0xa9,0x05, + 0x95,0x04,0xd4,0xf4,0x02,0x23,0x99,0x03,0x9f,0x01, + 0x8c,0xd0,0x54,0x64,0x0a,0xc4,0x8a,0x40,0x2c,0x02, + 0xc4,0x62,0x40,0xac,0x05,0xc4,0xaa,0x40,0x6c,0x40, + 0x84,0x0f,0x9f,0x01,0xf1,0x25,0x20,0xbe,0x06,0x65, + 0xbf,0x06,0xe2,0x57,0x40,0x8b,0x77,0xc0,0x2c,0x68, + 0x02,0xd2,0xb5,0x0c,0xd4,0x07,0x27,0x80,0x38,0x8e, + 0x89,0x46,0x86,0x83,0x80,0x05,0x10,0x57,0x33,0x31, + 0xd0,0x16,0xbc,0x00,0x59,0x10,0x49,0x23,0xc3,0x37, + 0x80,0x52,0x20,0x0b,0x34,0x3d,0xff,0x27,0x36,0x5d, + 0x13,0x09,0xd6,0x03,0x23,0x39,0x08,0x39,0x99,0xae, + 0x04,0x62,0x5f,0x2a,0x19,0x3e,0x1b,0x66,0x38,0x7a, + 0x3e,0xd8,0x02,0xcd,0xfe,0xef,0xc8,0x34,0xf8,0x0f, + 0x28,0x48,0x80,0x86,0xa7,0xe1,0xcb,0x68,0x87,0x80, + 0x78,0x31,0x99,0x16,0x7c,0x05,0x1a,0x5e,0x4b,0x4c, + 0x4e,0xd6,0x20,0xd3,0x02,0x7e,0xa0,0x05,0xda,0x84, + 0x2c,0xe0,0x02,0x62,0x5b,0x0a,0xc2,0xdf,0x90,0x90, + 0x05,0xca,0x50,0x4b,0xc8,0x05,0x62,0x84,0x2c,0x90, + 0xa0,0x30,0x05,0x29,0x10,0xb2,0x40,0x05,0x8f,0xe6, + 0xed,0x40,0x1c,0x02,0xc4,0xed,0x40,0xfc,0x05,0x4f, + 0xf1,0x80,0xd7,0x82,0x87,0x58,0x34,0x6d,0x84,0x96, + 0xfb,0x5e,0x40,0xbc,0x16,0x88,0xab,0x80,0x58,0x1d, + 0x88,0x27,0x03,0xf1,0x37,0x34,0xb5,0x0f,0x08,0x59, + 0xb0,0x0d,0xea,0xc2,0x4f,0x40,0x7c,0x15,0x88,0x7d, + 0x80,0x38,0x00,0x2a,0x8e,0x5e,0x44,0xe7,0x41,0x7d, + 0xbc,0x0c,0x88,0x3f,0x03,0xf1,0x61,0x20,0x2e,0x40, + 0xb7,0x00,0x20,0xc0,0x00,0x05,0x84,0x44,0xdb,0x7c, + 0x04,0x1f,0x70,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 }; diff --git a/data/resources/help/a.png b/data/resources/help/a.png index a8aa1eb2e39feec697a28915ff0e619ad5087c50..0cfcece38e1f730528c0608e165ea145f93a80e9 100644 GIT binary patch literal 1534 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4^64!{5;QX|b^2DN42FH~Aq*MjZ z+{EB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdXL-x;UD-xdAClV7R*)J6amLIJvmFm>5`E8o9a} z!}Pl3Czs}?=9R$orXcj1jm8{S5|xp zXb-ufafri-yLUymMB@*2ri)vix28WxzA^Xby~6A4bw73*f3`EeUvvNWKH;+|MuOf~ z8`BE7t~6;0FxMY6`oXpAfW(g+;SDAaDnzz4#0AWMKF4T+!gB}v9}Mpr5;x4&-|;v( zhF48;f!(6XbN){;4qR)R|M>3wzBj(U31TrDP2V#yFR%%cIGJ6^vyOdcJll8XICqJY zw{~({eVQrH8aXe5$Ma76f@9fw>~bOnt3GSG&0mo@k12ghV@hm{^5d@8D*iD>-+!(Z z@W03|W;sozIIM7O%C^Mz-y0k=ZL%f0;~GO#{4)!n zzhBlflk<{(yKG1AwgVlX*#3Sw`Y`0?3)6^)KLoeWIq54`&0iOBWVX=f>8CWOPpL6H z{!vVs|Ax+n|+9-+bMP3l7pf1A6)+ZQg%i;w|D&ko)eYxnV3#B*KC<{ z^mdx3Y--yre$U`vcW$5bh>g?V^pWjF+3n2Bf24Pu(g_2Gp5MBSb9kR{UwC}|#ruOh zj?eyGT)Og-%QmqOqH8vPNz1jDQkgtg=YWz-`W(Tx&nK;ERI#3$x%4H^>zYZ0PPH1l vZU+32P>Jm6>gTe~DWM4fKWj%3 literal 3635 zcmV-34$Se1P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009{Nkl z{V}@{^6=O-Gdu71JMZ&ro@Yx^N=~wz;e^X6fl~sOGTQB6sZ=t(Um3Uwc)$hVa_-z8 z;4|b?L2#f=-1`Iy0^FZ&Gm&1Rv@c^${;FeT6PYzXWEBPs;$+d6L;hFzUG zf80=~R0upXUBL6aj)f5(I$_fn^l}Tc*yNrm3t} zs~zW}C~6Ui$*M9Wzy{$MSY<{V9(^{aUA!3x@nrW2z1*e zMSZG5;FqcMs!E!srUV}4v5xl0df$Qbx|w%-dz*!Yg`U?qj)M@Q_1*V<>h-#AM*gaj ziJ#~`nKVt6VtgFOwguiD6%(2jo>*|!*E2`x*z`1^}la)&4P?$tY|S1M_`S9ngH>yav9QE|AAuI{mZ9DFHkAKLAh0A)EK<{g(g$002ovPDHLk FV1h>YyG8&2 diff --git a/data/resources/help/b.png b/data/resources/help/b.png index 9fa8097aab5cd311bd129be29f9b096a73f2322e..0112405d17427f9788acb50d0f1be8f3bb24cdb9 100644 GIT binary patch literal 1522 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4^64!{5;QX|b^2DN42FH~Aq*MjZ z+{EB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdYYUm^qs{nHyTVShyJ)x*9uL8oD^SxVe}ZSXvsn zx*Eguy5uL9=BDPA!1Sgd^cvyR3rY;R1wfl!Qj0RnQd8WD@^clyp0>)w=@v6LoaRCG zrr>sq0ZzU8K*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*w#-rd}d%^O7V1Y45_%a zXS%P4NTS5?^mf}0ZI9`q3!O7x zTqMZxw(YVLc}g7$PuyF~9eXr%U3Yu@ldoWlYnwSYJuUtB;rAP?KimB;zt{h~^1g%8 z#0xE}*uEdsEs&hjAYj2({XpBJS>%Tjr$kAG97FE|){dKdf;mpjh%#UZJ0NYq`|l>} z_01CQ2b9=5GT*tpuYWMHV~1(|nZ5hhK3z6DL3E4P+4&8g0ZV==&zkmq!SR!OSbHpd z+Ql#4l4Qy)dp0$pC;m*k#ygFUS!Z7!w3ctb<)`?Kb4B!8#yf&0?^xBvZf|W$juAPs zz~uehjpg&^@Fok+!*jkR-g){Vmf`Lkhq41KH`xC^kXj-9q)|I1 z?tS9BbH(p@w|*{|WXE;JlfPtXpx&wv7u43R_P)Qku4($I_iBl|HF&FUG$$TYk{4;% z{$QSg+l+mCZZun#{*p=F^8a*XPOQXYkMo;KH@&p_aa5*2ce&slljRq5tSgfM1kJ?)eC#C%3)oGMIw52LzYp#W>J@a&y!fBa>Qmv^C?hc=h*1gyob$)U}+;96u z&M(*eRJoiQwehEb@6F)H7HenaH}e(DQcv!>eKPyZCkD&qS2FkaYQCFt`Ql8ziTyQm zn7S^XDRiCA<|Scjr*nw4&-n4TT`t)V^q#-z@xFY%BKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000A*NklO*d^wNzBQU5D+{S3Sgg`;)sl9j*PlbY5C|HFa0^XGzgrXOVVo~&91yPiWMN#UpVoAE2q~pPD zy4fU~nf;Tt&=1~WliAtt%e;N>&6{XK2=+2!>~ZW1*cT8G@pd0-n&x-DA>aZq3>*TE zI=)*6z5t(qMc^^;+s{Lq0*?@)#T0QEm$ z=)Dq90M(GIz7!>EjaQDCm^n`{_N^!F=^D4Hfk%VJF~ zVEh42*!e>_4`gMc%}6{hR?}%w$z((&lM(Z&RLhuxVKj|-H8?0TnkMT?Fa5p)GqV0V zkw|z707PEb8)Ll2b+9Y#1bD4|4!9m>-Lh1#Q>s=Q*CX+`iu>Jam*~9i9=D@UsCZYa zwFCl590AVD3NV~Ywu^98R={!l1r8lKecKDxgkZt7B3*FS?M9shoQZ;bM$@>|*Vnkd zv$3H%MG813BVZ^B0h0p*Wb7O>ZJJD*rk`nsyKZRg8s9e#Xc{B&?Wyy+P9c#X7mHD< zRw>s8dz7MOu~e(^u3ir^eO5+5I%vGVS*f&$x?~s>41-x) z%*{$gww&n9twSa*t5%LOnHUhW$z)^PYC0|Qx~^KGmSi&VdQ^dYtXyvRe@4@|mrSZo zu`UyZenpv$N|x2+S{EImRRTX`1bm57fO}7%QjWX1b-HtL7x%K>$_RK7C4;=Kd#*?q z_mNtG56&G>*eE0tP2`;=b{9NSDW@MOWnYIMd-?QiGTHR~Sh=k7m=;c6d*Za+F7!-l zxmb*mc)Y330a&QjC|Op+J)Gsl)-Uf2sSq3ye}q<`}Na8S7e;^%xo1*h%KLDufCX6+Vv9e58|cD4J}?*qD)5_<{ze>K=? a{2KtUP;jbnY%U@I0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009cNkl_4c$%F zj>GAkbN9aPbIv{s)?h!*xBvgO_xG*!|JJD_Nurx=c%GXpl}g_6pT->QMCM543Tl!h znLVeyhJgUS52IUxsRaZ^qd$OG`%z3QJAnzG#K8=h|$fyZ#HK=7$w#GCPq z5t)-~#`{J_)}Dz^FbjXD0gDHY&+*^{f8a8D;#?2@!Y)k5+qhj+$*~k0n_Qob6FH)N z3-2}=?@R=0P#c!vp841wNvfT;4y*2#zzn>Psj+sq+djp-p%NI6ckomPtK|{+3J>Qc zFdS>JvIHgn1Na(a^XP$9*xW);Jy;a^q@IndIqt*fc(Hb6s<(_T#us%`{CS+lJq=3e zhax+-(zeHE-O!%I$rdE3B7J!y@Y8X)Asz{zl}6|7>lS5m-|DJ&nSLT>`$p(WICZBD>7s z_YJ1V`mnoRqA1w@jI!ibgX?{D)ZOveYaJM@7J4QG`-3&-f5edn_0Igz4#P4MI2zkA zXPPLoDOJbkFgNP4O!i7>-s;!4t;zkn@K26U;Yf(2W|Fdc#d$oh9yovvB}rJX#@o-W z$adr74ujuv);FLGmR0Un91m6t<--HB_r zqb9jG$9Ok!DJFiUDw&>$s^9{y6|G^@x78nm7oDWOO;@INZ0^2<-wOo41NXOkd%X`o z7XbdP*n90rgJT@NA0qH8SXgh~bfU$yC#RGr?d{5t@fIB{Mz)Az~% O00006gA>80%q`Q-Jk|ksrTavK}GRDZkPD1SS>1+seW3kEGAg!QlJoc10@qN%Iv~ z2^cnPr1VL_w!JhK!^}H4XQf!_m~CQskD7MzwX8bm@qyYv%Mbc!W+5voYT0_uo2R^a z=yys5=gL#gryPXCXJs3>;w64|-jY%$vt%J-bSd*K>E@sb7NRrbO8iLf~B!O#;Dv~tm z3?@>qh#X2wI{0VyyXs8kwxURLAj(rVh@#JgEN94RbK8GXLlvjw*103-n?ZZhm zfqOi7vP?lNXXBkrnkhIJ`&hi375GL!!-DFQlN;F=f!;;V_AZR*lsM*s}SqyT&kyvPd;d_PUb zYe{77)lf<4N3`V_1Lm6$kHj=b!3yh?#&{kyA5k{lNZjad~r1r5b z@d_gCW!OlsInZk(TgR|^N~fwNSrV)&ol%v`Y6umft<{kPP+gQE+Vh0;KGrtY&n;qI zMSk8BS}Z==FR;?Y%~M8aZftc$h=!)ViR;^^ZztI&HQpa!ZVtw?fn`NmAbH6afN@8aqfC-DFaD?Ub& zM?y{51Ke)8Xpz1vm&CdWJ}$;o$NN3BXyH6`J&XIi^=3R?m{2peZJVsToA-lmu@bD>4DNl#i8xWb%+h_3bmsytrF3Z1AkBE6vV>s>X_eBp?QRU!H)sfO zfIDw+L{bxFIJF9$nkd7m@yrS@Ct5U-)}Z2qEa_$~JjdpN2Nc$#rzkCD#^GW(ql^o( z?n)a6?%@P!8`XlFoKOxdBu%X9FEK%gB!&kr;ZY(qWy7W5K?OV`;jxFLKC?NteSe>S z;%D@IxNQe|8a5OgTxLi2%C z85aZu9m=@Sd>~cE1pz^aGA=Y9NR@FxK+vI#3(W^oWn2&tbSUFO^MOc3vIw&Ev&$6{_}S zHB&V?lb+1XcG_M{eOqtZLo5fsTKjZfD=qXBOq}p4c_2sH?R}d+~2M zX7$a^!=;yP)nos7=t^7Q#+|mn&EH;`-M)A4$eEv|b}wf~@3-$5)YZ84$UEaxXAEdf z`7(1+PSX!&WNe%|Wf!B|l6t=KqaN(q@@a&7ddZnh=O!G_v@XkN9dhITZoIkbg_7oJ zBW`tEe`Lpk3!RiYtz=f`{fxPsD<7Y-a3SSuZ{B(1*)G1K*?D4a^?viGGgoL7$Mc6S z+qtc2CHar1#u(>}KA6d9fAQJ#Q0W{&(dnn)wTyl zJlZiRIMDsZ?gg*hK67R52fDI}HI*5UVd~D@lbGj-wQc<~`^H_?eKGyrQ}=8v?H>G~ zH}z7}Lq|^EJEh`C7BS+n%`a`){*$%qk9@rRsjqi`a=^N2I%}IYl$k-5ePGIIFxTz5 ze(3g@tp~RdL*IIM{HQgKb;SjPF6oc2xP4vq^tqfjGu|%#@YPrM**E`ninXWe%Z)34 zv!5u>Z+d3P%u`v0aoxk4myYO|Fmq|ggF8~bV*k?M9CkLfuIc&a?YFB{PtVRCzVFz0 zEniW6>GoCsq|yrm<|$vV^3UqdKACdmjhFrOu)|Zc-Z`H#U-{-HbJ@=idA7{? z+Pbdvg9jd{?mByM5IyM<{{UH6crxXJb^Frx>|^x$jD z@V!g_{#44Eyqe;l?y1TwIqFQ?aAK~$GWXWwDLAw3{J&RyauZ*$L}mK;wb8FEy?1rf z`X0xo`A_uRxiIU~^2rtAIXrFG*-71-Te2F*d{x(VtVJ{R;`_R>mp^ZLV$Xd=ji-Ng z-Mit1E$4*eZL2#L*#0#9o40%J!B1?xZ?!n;m*vOJc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|vzp{cpK zv6G>pk%5_op`nF=g|V}_tFfW0qp730sWHq9ta_bYEDa6KT`gTK91RU!jU6owU7TFp zTuclsEsb1V;d(vuic1pnl2c*!W`gX6=yk!X*UGslHL)bWC?r2W2bKZ?GV)9Ei!<^I z6r6+26f}GjlQZ)`0-B%*g80`ZwJ5VJHN~wcKUV=9!d98sTtLw05WOkngql9kG5Vn7 zfs|ZeLclZ#V!{(YkOR*?sd>OWQv}Q$D*o3sfO*c?)5S5Q;?|WJ(K$Yj635T4TP%8| zdDoOMr%MVhVM;`4uEb)cXua@Zj_x$H;Hn}+M+|6X!eNU!OK6mcv?3wxdyqz~jocW-kd?0ayjEKgs zTGsG`Ru`V8GG6|mr<-7w!6w^Px7fkdf_2)npp{An@;S`yF<<`kNI59}cu+QRgZomq zPrqHV=CcMR^j-NkC%fnCCXX8@{OUZH-#v0UJd)gSqPgE|=bPVsf1_i*?dMyhmK-d3!;gQ>WWR#zPnEVGuravh z8eiz$`(QypmZAmQx7#H$9?5lUW*YR{dB-%W{w=$Gtgqhcj4|UHzGA1{36{clnE6Gm zWf>kl5Ux0wKj*FAC$X4COlA8;Z|vQt_<+OXl7q9t{lv!F1@q?B=HS6yzpn&#^VP?XPsd-xbCTG{5YcZ;(GRY6Kgr1 zJg>Lr6}MbxX~!`3HLZ-f9=6hMgT$6%cJ%`WXSGE%^INaP9hA7SQbPOF>dy(n#hX)C z85H-vbXQ*Qrn>hyvy)o};y_v#ei9G;b(ut_|_bn=Oc$hAG~jS^KJr}S1GaG&xhDLCW*d`WOMCX5wJZFzX7ZIj-<7jIg(>3fnaiG4Goc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|vzp{cpK zv6G>pk%5_op`nF=g|V}_tFfW0qp730sWHq9Y;(UEz8?^NLFn^O93x_GSX@h3YlItJli8C^fMpzbGU>KL?fq0y6ST@{2R_ z3lyA#%@j0z6O%LZKmwYe2!i<6CABECEH%ZgC_h&L9Ku$aSX@BZ=McRq3pI2ZXXQv-N6MITwaNkvb)*JG(o#lj<#z4z=mdOEC$ zeY--4)5|RJiFqp~@A{+u)BL8-IZNa8{?Z?l;{D3X&YdwgzF#w4xWh%M&0CVOuR&Dd z{=)m=1-v;7v3Y77lJAy^o?+EpaCzZ3#EL`j*>g@AN*?@qN^>DFq$r2ZY4!w3godZu@(C*0=qPTFyPbOB1YZH+W5Yujg8e{{Lxh-u-|A5tRcx0u0SLYB%_$UYxxC`R0MLt{=J!jA*9iOdTZ<(B zN>V?ReSdk<+pV-;c-WWuj>UR7kfZnSP$ zgrNgxb9Uo1reg(ryj){Mx%RT&-L$YgGi1}UiF0k12LG#{Y_r~L?}KZnZN3}3*Yl_~ zZQjB;QFtvQ|KB?+clB)2I`UG(lB!91dGGu7sjpJ%WT)K{E?L3ZozL5*)cdjKcMuP&5(j^{MRcL?>KS~c&u^)Q qTwIYoqwBYIA3d+;f&t;ucLK6T>4zD8s literal 0 HcmV?d00001 diff --git a/data/resources/help/dpad_left_right.png b/data/resources/help/dpad_left_right.png new file mode 100644 index 0000000000000000000000000000000000000000..265e70d56a0a06a809edec3435427d2cdfa7646e GIT binary patch literal 16291 zcmeI3dvFuS9mmgBVz3PuS{H(OLDljy#toQi) zGAZN8kT(8pT zakVsj$&6{>pTXm()t8wI!p#9IM^?{qZas=NHa036l?v8VhvGV&4#fzRAmpHi+}q^h zD8Jn0ofrxdiDRa{b`Rs`7}h1_<5D%OkIRwC_=cia_`aNOn=RUu%NwQ#IHG>ajp7On zbvn^Ro?fnuj&(Ajr?;ZXO`~PBm-Tt-U8Lu6?)^fWX%DlQ zb`*G6XE0gZl*dc+6E{Z|nYq#I3KI=ZeLd5^Pv1_mpKGi?Ah;nUJN}z7>gO7Z9KjHG ztNkZPA>-v(Pg9)0cZgp;%IO#SmPUjI<}ryyxq(dAQ+9q~GI}XM-GF+zxUyK6LmqrX zp$Z9L>+l+i)~fAttq#-5Rce(+UW0)zyGBQ1c9p$`)J5aRxewe%V?FIMf|Xh&$CPrM ztiaWJg4AP#90T82q^rSN0|)W4wOk|Rp-pul$&8_`p)|5mNb~chQ|B`-2ixeK775tb zW8ld4ddgKtJB(<=F;W1#7*KxH8kqmZL3_Nc?KkG|EygCs|M#GUhO%!0MzXno!t!gd zKHo!AAdxFrw&7c*A6z>IITnaEQydK?1;`6b9Z8C4kWfu1hK+SFwM_|P^hqo}MqEue z1~_gxD2{rpDDidU;yCR3TGr#FI3wev>S)yMsxzRm!nm5zZCjtuHn1MhE!qgSs6@pH zy&}7q3G7zZ>>4k_u2sUW@iOch^PJ~mI3p2m z4JwZF;*Un55iJLg1GG_1l1kEm!o{#hDdVRbD$NWyF?sn-OQ{L_z(PXDs(~Eigs@|1 z;NlMM!3h#71&;;bi3E*4lJuK9(arL^{1dyQ?=mVBOKb!JB5aDdg!w?KhzkNDY>K#q z`9P|O3j!i+inxUNK&prf0wQdRxPK#q`9P|O3j!i+ zinxUNK&prf0wQdRxPK#q`9P|O3j!i+inxUNK&prf z0wQdRxPK#q`9P|O3j!i+inxUNK&prf0wQdRxPK#q`9P|O3j!i+inxUNK&prf0wQb*;!2CXrl_N{?Q!RkUpmf$5P9Q?fXz3b5!~Dk6vYN20oto_0`6+58Y=U z`bwsbTs30&yMf~!Y0~R&KOA-`_1=^C@Cn+jNP1v=^`sToYPOB7mwff9b>WG@Jt;Tk z_pY=&SN((A-G3<5O80DN?diO4s?O3nR?ochY}W4zH(jPW|1mSIZR1Pit(@#-)^TqH zX0#V&9^K58{rvj#PY1sDndD&lr8a9>d-vf~%Z+8%4(ueDNtUvv){pNU{nXT1cxJ-T z!FMxGo+w)sAfEnaWmWf{lwU68np+mUdOmC0xXR3qQwMimYq>sR&NnY?Ba#i7+aGq! zS(Q61dDM(GD#`l+S$a=Rb%uM&j+zHUcHb@SN?D9(mQ3!Nd*|=Tf9^b@9Iv?h!`~Rt zmQM~Yx?DUKF-k55eAXQYB==JctzX<;aoU=FdEx8q#933@w%zz^vf|jy%93Qs>w%&N zm8%>(JJ(y5Y~{XeI^%5B@9Nywb#l;OB+s`TDQa8O`rE9x>hRg)u#~YS=ILo;Gk#XO zMefveURl%o;->UAn|WdKYe~8CDYrK4yK~B_+z(2L@}K^C>6Di2ucqZLN!pscy!+&w z*5$LN+`dq=cF?T-qqi?uYuweweHJb>8t+r)+o=ovR7_yXOEqJ`Ql2g|MPXjKOaA=cUx+u z>lYiw9Ln#V*x`CGE9am0liH4)14A_g>z#T~o_tS|em=Y59#c0xbJ~*|3sz=7ll1$g z|K2yoPajq+9XaK4Z_@Pl-aP)?qg#{Fd1d7*7uFa3}M|{elhRCUSCs(oLnrp`07_pZL< zZ7$9nJwK0`aN)qI?)^iy%s8D^QU2kU;w@+GKWSfUzcI40QgUp0>atu3@|kq^#?-s1 Rjr?o$R!fO_e_r*={{e*A8`J;* literal 0 HcmV?d00001 diff --git a/data/resources/help/dpad_right.png b/data/resources/help/dpad_right.png new file mode 100644 index 0000000000000000000000000000000000000000..f86e5d489a5409b33341e7af10a4e8f5ccf72b81 GIT binary patch literal 1802 zcmbVNeNfY87_Z`BGEq5UqlzpBWlW?^T3TqKNNo!gC}8Od2Y6E2Km)WXX@CNvAcvwG zejy@qDg$KY3X4Vnu|^S#ND+l9 zHL(@(pioTIs4R>KlLT;;n1-e>>d*`t9f_t;JT@A13S~S(0MSS+s^x(rmm5I(~YFlZ9Adai*7PV;ify-`dDfoT;Y zo(Il26($J=1Q?D0EE>~U3BfSHX47C77Ml%k02mO=phM)%c7|QJEH;C0rMgDQ)z1n(N zst%z`5j~cKE6IAq*w2B<+g;t5o*+ogavsmbZSgrs^6abpZz)aPcR{_Nqk{6fFHrxyfqTPcU44t7rN)CVLp#T_pl8c+SM zeWrk~Y6ITPgHn~|r{p(J`mws!F&=r}7{S_MZB%`c(@qv;oQ?G{h zMZ5VX_G2-gtGb6}=$V0GpK4n#c^oyR{6u|1@%4WDqi=3A4VPY}W{o^?+P7`3qFtq-kXMR8qk02i7Ay%3iQq?c#f^Cfre{*ow!Q?M>-a+Z>Bs z^#b?^JsB+h)1+t1cUz8$;Tt!>Yt0_P!@5;t{Bd`R-_TvOWof}n-sNIxxMPxK!or%S z_}#q)^->N{KGskmgK8>O4izS$lD>fQxW2$$_{ln;w`(Y(b=#*MwxPW%;sYG+`JFA7 z!Cut-_=AHB9TKmc18dB4`Z7K5ccinl=h5rM9!T)yj<2sI6r|m*E=(Pa&6~6dFng+A zQR>h`v3pk^GD^Ky>DYMf)cLCiVyX^z9~ZQ30YlFYn&r_NF=k?#eD(h7`*guF-!75G z+nZJ6{SV}o#iL2SaY0at!-fWy4egdqP+y^H{c>?#uw_Ed7xD|X&wftwttj7o@BFLU k{Ow0>T<#5g8IiewqWSfrRA#EFF#esyqCnxUI;=81!a5^P;&dFJA=_k}}%6}GsdA{iQi#G@v;9>(#NNE{4^HSz>l0?U=D zo7!Q29L`Fmmda3B*eXbYXvlJl4%w{HVQ3uAKftV$E0SOoh=UWL2qqgCmvCSqB@8|F_}zc6P=9c6DS~;%e8ROXnvT6pCMI?%FTXSgU2+35H=|E zY8|RZw19os4!C3CzZ^)vEc>}H1tFfZUlZA-FsDZVpSjZz{U&u!ivxljDu*s$i|C+;&*Zb2^l6TFVg*7j2(tNHA%_owB08T73Il~fLI#z~ zrHMo{Sh3cC%C!o3+OFDScM8jWFBTH$VL6KEr3jKd-2rP<2#Od~hz<}$umG(wc+GDweTfHxV2)bH}(KO>*QD*sQ`D3~)8OMCpQU8Y4?4_dY}&5s>s z#s}77Go#0bV=&Q)g3TNx7V@R$-mU{t$@Xg(wIy_`b{w}cdi%LohJGa_E)YtVISnp! zjN|QGp>nF?pB44{gbqs7LLc*J;7(6sO#dKEYRQb6?^BYS;>74GCBLRjuzQLwT`K4~ zlSP?;Q#y+}OjjnZJlm2GSS!0U>TT7+ubDH{&^2jG&SVzf>co}b*;v@j(7Dw$bS<&> zX(7~jeH-GO(GyGO+%9?LSz|Sn`7FkUFey!(e>f*^tP&uUlZHDvt<-?b?b+i)`KNlb zqqAEXVS_ndc|O1K3F)in{K6-#o0H-V_qB`yc~v$}WxnUensa?Nc^%FbA1zosyvW0D z0qYeXbat$!Umaw$xjO0@#?M+BKP)@%erWcS&Ce@J+kQY~P3?-8$ACl{D{q_Mcr%o0 zr%iPm!XF@HnJY+*Qk$o{B?i9L&7_E0cJ@R``A=>ye0yexrkbv|?n#Hn>9*B#PYW7j zxz_#oXB*;s?asHX94+ePbQ~OF)(2ZZ92o97_~X{w^MkK`A^^JO8NA|!(YRyJtKo*I z^4g4J8xReH>`st|yX$+c3;m*P9Wn`S-Rmp0)Q{?P_?7(h%ig)Uru`D~>*W&z;-yWH4U5W- zdblwD1odUb-5d2{m(`kV{a^WCY`NVS8r3s^#FFT;P?t&N(XQeV<@N3^aw+s01 zqDwf}T|AvmZuxT88P1M^@E42Lo&R7JUa>*z5ui$6&Ue>bxK^!m@8jOe^-}~QX!td|y+c}gG&(KMlRt9Lv00@n zWP#iMcpS5rv`!S@Qj(A}nr_@1(*EG#NThSaDaw#d_KjkM{-^(^&i!YzitTx&N|z&7 zZMNn-c-0qj25ef7v=X4M?U%pD3-+}tH^2DC-g?1y8&%Qq{_u+h4n}3)vRwMCYURlN kr5g_{M#h#mBeU>0>7BZBd$=2pSpH99QMm9#VC=TP0g}G7x&QzG literal 0 HcmV?d00001 diff --git a/data/resources/help/dpad_up_down.png b/data/resources/help/dpad_up_down.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd62451581fcf2ec620de0b1b123c2d31a0995d GIT binary patch literal 16306 zcmeI3e^3bUMkpu;eHYw3sWVBJ*sD(!2&%S%Vc{w&tCx3K0 zyTh^jywCf5-*-Rn`@HY&AG=7aO|+;7~|;Qy&Tq8M)xSLnnBu0c_eIZu?yxG0e#O(7vMDK1i}({P1cjpHwiq!=zkaSWBJB{;5; zt2DS$6gb5CIB=zPS*)6TV|Ji9VClr=Znsl|qLr1EX_c}x##M&mYPA~0q^MLX0W~CS zmBUSVB@Q;lFA~%-QY`7BooPqB>0MN*)8N_3&D6`*&4yL|$otQC~Q9aRd98NX1p z_AO*6#_4g{e4s5PO4%qoXom$1@TdTs<&2wQ%b8J{47q&}qc!ZNt)l?sJfntDUV4-; z&f^dB%_;v-YXKCqSu@{7gXvG$j11}F?#pD<14o*LwrH|3T%l6QGH_gqDbsO09ZQ#G zsx`rVfQW{gIJhLwXD zB5rl$1j(UUH{+^`aBv;smXC$h^5LaHhmC$hVj*rI(=`OiElhfr0MxZ8>y9W3ciA7o zHRP`l1-3<*u2kbHnS@l8ViK8DPDn~+RyDX%O4D(SkP{Rc)Q<=sy^YFp%Ap4G=?P>rx8&T z)&P%N7Q#(DkxFFU2ptQlu`(_@;nvf3qKrbFjxsG8E{v!d+O{>BjE!-DZc%!$MMW!) z8Wr5d3}Cn77F2e47Wx*{45Dm!DL0)1ISW|$H)a2>X&8OijF#m7`7&HTvh#es({fK8 z+;ak0xCq}8jcd^nWf3>+^A&NMq|M{2uaaWm0MEJL2!uwu;m~6K&`38N8jdV<&~Cjn z&>B=65yd?k`A2jicpaehN`*qE(4ufL9Fa$RDO-_|22V^Zw`s{#ff(2kHL!TJzz9bm z&_8ey5AMDR;x7fS1>lVY4ZV_#m^-1(^8369-_iG}3TX+AKtT9S0T(|X$SdH2fbg3F zE`C0cSHJ}U;Wq_b{CpsN|> zuYd~z!fy(=`1wFy0T%>>-xP51^MSkqE(i#}Dd6Jg19=5p5DhApE9) zi=PkV6>vd7_)P&9KOe{|;DUhgn*uI=K9EW?d;))A@~a5t!??CVPb-A z!owKd;E${=vnEYlUw(f6rXTFD+BtbmV(Qh2;`>B;>VnLh1-WSd9|`vB=D&Ahm+!R^ zS59>Gy!Erc^nbjpU;gyiu^0bz;EOH0y1x?LPnpqnSQEGSX5ZY-_DQ=XwI|{~Jv?^c zy}AqMMT1YxI3PMXw!%3+_w~Z_zcbyuK6T>r1M~ah_L#2Ajz}8!HPEF~yB_Y@aHh9p z*VV@j-SR5i$AihOzq*|2sa(tGs^28Pt;R2QGR`OnXpmQr!ugENhf z8WQ&%TKC}X*qhBsGR^7a)^nRL*r&E#n)ce+g6(sr^s!T}p}#&^(^cL5!q9Kp+CKBP z?5#5oO&>q|bXprZ^!q70uC3NC5v9jWym~o)`q|B&-W6qUt2~t0)LCNx=G(Zr_08nm zJCj$p&S~2B+`SEV=IFOBZ^|rK*51`yHtX!(bGB_{{M9X&bjl-Js?qM5`lFKeM?29? zLsdT+SbpxWvl^53V*Q(Py!$N!#YG!$Ib)RV-qh=dW)Mn-3@5zx~sW9_p*s_jYc}F0bA9&eqNrJa_)a z>Wd4G+`Za?bvRpZTw6XSr3tNn``q3Nt2XzAQ_6pgE3($RTe%5>8*0qB*dlNct+YK4X66eq}F-?avvP%*Z?={wVdSeQYZ+j-`@CVhG2E5Jf zAEq>&tVw86zQ2CXob9sN;{25_y;MB8Z+3cjYgc@)ck%J${oNgp7WB2xXFosq*i)-2 z&L=0e++dq`HDvd6zSE!D_;1s(-JY)g6Q(yyRwaJY_wdDOCwk7o~E4||rp>s|H!m)|JP{X%l+ k_Jsa|RW*$@Yo101CBHrMdj0vM+*kFctX$*4j5n(P1DZ@q-2eap literal 0 HcmV?d00001 diff --git a/data/resources/help/l.png b/data/resources/help/l.png new file mode 100644 index 0000000000000000000000000000000000000000..d4051920a9b6d7eb2e826151e0e849cf1d11c7ee GIT binary patch literal 1464 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<}!3HEBIr}pMDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKW@b!fooL3ADC}5E3S0onb8|oS8=jMX^1y)^L5|oN?23FO@A(aKG`a!A1 z`K3k4!1zd0hG_S-E|!LdhOWkrmWD1) zE^aO+29}mauC8#so_WP3iFwJXFncqB_CobKylcOS(cjOR+OKs01jcROe`)S>~o0T6mmjMALtl; zQ1U=ZE-)cr8U!)ni66*;XP?wOV4f)gW{yL-B2O6@7@v8%IEGZ*I&~w{m^#7!!u!VOhn_BSG%jEE`w)A{yMkvA<<3>!4=|d!#YWUgde?;xjlPJT zt4q&3l8j5Z{@38m&rhBd&Tyc^5@pBWLq!tj`7?hPq{-gf3*dgJdo>4WD0%P@Llj=@SP*mrvATmEO+k= zFCI%q|An&g7v>-3Kk`Lv(^{5m1xIssa#qBumkaFQ6j8yTDbJMm>g`M)S+xhOwiTJI z%jf7!&yk&wJNM3lDJM52ud|JAf6V@kN#sJxO^434w))rSu`l&mXSC$3Jol~*uWO_B z98{h5P^$FQmLw*>mxp)wGY0E1ORjsEGLz3x=gLa^JXVSDttNQpDfmrCuA? zY(3X}7fu&thJe$>P1EdZQ#) z)K=BnTc4y?oICuoZ`JI*?)v+*Pwy(fQ`N3!6I5RLV|v(=>jr^6O4t7zzc~0Pk@>Zd y-lE9n$CYzF=maU%`5MeOY&Z0&l0LSNftleDNAlVm%T|5^m8G7pelF{r5}E+jJr&RZ literal 0 HcmV?d00001 diff --git a/data/resources/help/left_right.png b/data/resources/help/left_right.png deleted file mode 100644 index 52b7469bef2b3ecd2947b14622bc1baa7360902a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3288 zcmV;}3@7u6P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0005=Nkl_!caD1g+!B-6egt96bmUsL}brSDK(j$4KqTGv|)=RKI@jP1r<47H8Vr<-}8gRISAB82b)k|Y_$)&c;dIq!dlz4*D% z#7%gYll`LCEcRq7aI*xT0hboq1M6@eYb*RgJ%Iyx03$esZ8hi$Zlx>bH$W3dE1)<< zl<6r}w*ba)u4cX2ay-XS0|#r`U~a&81K07Rh5(;%xq$~bS+n53Vh6soRA@3!V=HX? zF_V?iZ@7x78U%k9Px3xw^J%~Hs=~qF!-e*)Gix(AgF9H&c5ga88!Y|9O9t>6?=xd_ zcvDbe+K-j5akx_l`_g4qm2UJSRunl8OyP8e6lZ6;#0wqjCvl}BiZk8qg&CBSf}4<_+1Wdw)-5g-CYfC$h>`!xWs WO3EIhvK6)f0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0007lNklxBZfjiKF(aIu4^czZj`4jHh6$^UizNN7}MF~`%3B~gxLKO zT3+aLI^k7SF@!*pbk0#qNn;F2GR8=y6s45eTZ9m(l*)Z$jI`ELYfWoy_BdK=#u!PG z#+a?+w!K*hfm&-CW3oNQnB;|;ejs~y$Uvi%$_D+73L&VJ>bT^de(VFh8d)TM(+7Ao zf<&&ZC)={o*CR3h?XGnC2*BmQjbEiGyz4@9|Ii2efO-Mo!9G{Yl$~A-#PCZ1&$oqu zNiu%NrM`W+zb*L!;McAgHYuN&3P1rU00p1`6o3Ly0LCj<0{}NMz@e#K4(DSr z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKW@b!fooL3ADC}5E3S0onb8|oS8=jMX^1y)^L5|oN?23FO@A(aKG`a!A1 z`K3k4!1zd0hG_ylcOS(cjOR+OKs01jcROe`)S>~o0T6mmjMALtl; zQ1U=ZE-)cr8U!)ni66*;XP?wOV4f)gW{!Kyd)pZpm{>hs978H@ow?@i5mG2}{G;{u zi9VcfbUjaRXk|?l32~Xw)MVAX*3HpG!0U?d1(7Wo@**x1JQ^niEm-2D(!%Y?!xfXU zWC6#vQ|`J~W2Wb()O=$2)t!XD4AI$z`!(Ij4yY|yfP`$NlC z?;GvbncE&e4HCP`6nXs=@8V^>uU}8EDXv+axHBi>W_MO$&BYBYy>3%h`>y8bWVrlv z_11@3XSlyybxdY4FN}7zkXx|UMrZe|GuI}oDymrYCr;Iter24wt(ar?hl@frYr8j2 zIDJ&6Z`sdv+pqTRy0xT!0q<^Rm6YHo)85xJcU{iWURZhKX;$*P(64o0f6{x* zdapWlLG0Dtah~t)EPK-RAx3r8)&1hPTeG4~cdSbG-yGMGqG>ogN!Us!Wc9LtWp_4( zmh<&*-Cgo8S)1##LE>uD@cqXNSdHtgH=KKuR<5LskbP{P#NZvjv&= c#53_Qtb38Mr|{FfL!hG8)78&qol`;+0N@NElK=n! literal 0 HcmV?d00001 diff --git a/data/resources/help/select.png b/data/resources/help/select.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb23ce38c20a5152e0ef7617ba8ef7330d15c93 GIT binary patch literal 1477 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<8U}fi7AzZCsS=07?@QuLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GB9v+bTTnFwsf&HG&FQIcC<8fadL5UF)^^T zG;(z{hUs<5PcF?(%`1WFO+n~2!KoLN7;+1MHoK%2WtOF;xE1B+Du6w0m5JLehB(cG z>P^Az79*T`^?{Dj2SqJXRKtXT=?BDwCtM&0p7c}mfa$#mn6Njkc#y-uz+~>};uunK z>&(>njB|k!$It)19j%u+(e>Yv3EZuoy<5t*FPXCBO;)kzsn)8ENtxne;+LeuF6nJ4 zOU!D`@l2caCwhm2iQv}OMc3#5G`I7wtuK|Sj^C?#E_nXApSJt&7oYoX^W1X(|w2FM=S zsUy=Axj|6tp+QYc?gkF7f`i>V*KcD}+kHQm^G@UIdG8lS37g2yN)+01FmpwFokSCx z?gnGg9Rh3*=df+O>hqaxd*`j#%CyO{+%?(>Q;)<<%NNl*Xk?*zUqpA4t!RZ@(FUPB z?H#wJcR0@UUCYh(Pho?hM(-Y%nnvw;_kVp(Tyn#K^G%~~fq2+q%@>9B_xBxEm*B5C zthJK!tkI76$ed~GMZY<<&RhGhY`W&M>?YlHA!qd(j(^g4lv5ANa$g(&yyrCeyKnG^ zoS8RQ)kPb`xxLk!c#HAvAvOzU|EKkfKK%;wda&T1eRrt5n8~v5*Lmq#e_D zWmRvs;;_9}ug^AH)Awsw^KT{L=hI`d7jfH!t@hnhAJ=1+#`IfB>_$3Mbjki>Y0Fls qUQCT$9UR=@5aAf*bNPcmBOAj(kGe1Ht~tD*g4NU2&t;ucLK6TW?kRcz literal 0 HcmV?d00001 diff --git a/data/resources/help/start.png b/data/resources/help/start.png new file mode 100644 index 0000000000000000000000000000000000000000..7545c1e8196ffe52c0b753b22b86d40d621c65bf GIT binary patch literal 1446 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<8U}fi7AzZCsS=07?@QuLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GB9v+bTTn>vvjdEG&FQIcC<8fadL5UF)^^T zG;(z{hUs<5PcF?(%`1WFO@Zq*H^8YElo)agfHu3N7G;*DrnnX5=PH0bZIy||EoPQ3 zj%IFd&Oq~kX#ksBAbL}9y2Z>Dr(5)aj?o82EmBm&gn;P>#DphYAP1iGQ}cl7y$G1F z8~$h>VqjpB@N{tuskn9Ks<($|pv>`)J0DLCYI0embW+Y^VuXn60uj}%T_<`c+&H&n z$&wWdb{l9cQgB@2bSTX0;xh40sU4i+>yB)_>Ll#qv4#DvTvKH2{}0}L%~jLp+1Kna zK0MQMf3=+PN*}dg0oOq8zGPmti|wmt91GY|A$zP`*8WJ`orA^8&obWez4Kl8@Q&Wd zFFMy8rPi)EntFGO``nyEf;Pdo&t^EN-+Os$O`Uf@|N0%1ICexGyluEF`*i{1(G`Wi zZmj+MbDP)(pT*Z2<6j)N*rwE)maZaor856f|E;g*ceEV8(SOiowz@>YIqeOs_vhGU zi5Be3?V0{dUF_A?Wy<2;Kbn6ExAW7U(R)OFPW*zqb~00~c+UjiKYV%Cxw^Fn=dL*B zy65_pKObx!i{!}ecbs_by{GTjEtlV^)xEBmI`8&V?hNG$?xj20v~rHv=3Ec?xhin~ zU5Se(YY*IX*`2I0CHKT-w=Zm46!U|3OpRF0`-xrN=DYkMJ>SfQhs*v+p1t6dDxDCL z&zpb1>g~PoTPpH}0o?UxivL@teB_9ic^h?IecF!lpxkL|MBX3#e|%frwby&i9<7<4 zs$0&brm~`I@qyE_2W8$|FwsxHDOb^LX};j?1NIvNCl2_&ID290wZ7Vgf;>yRrmVbl z?ZMXrhjx0ub6eA2wjwl-F`bFeLiqJ#xvZ~|2h@C6CC(X{9{rUuJ^OkJGsm=0vC}5M b{2LeKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0005^Nklc#W8mgBIxcD%?7ef9&fV*rb&h?qo_acU zTJ3({XT9vTe@_uYFv+nZW^hpyvCrR+y_iSiN<|elgwQx6;{bPqEmb zXg~0{O*7D|E_Y3ChV_`WZJL2KIEsA@$N$7k^+lF9aR$f$86X2>fDACP5o>I1$5nLw zX>83Xjjc|@M+K!Jyx_O7HC5fIZif)&8jBjh*xHJF(p!t4l%1Win7iw7C878?I6hEO zhp-kqIFms9GwdFCRSfBk7C3?r1B!ou4MQ#KMCNW6&m)8{Dw~1B@5_WuzAd=hK>SCX zO?I#(ZnLh#r9R?c<5<#@aRiO-j}G8%KplsxB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdXL-x;UD-xfxlySOUY{)!5O}(8bBc&BesP($dJ) z)flGNB|o_|H#M&WrZ)wl*BGZ>P-4g}0NU)5T9jFqn&MWJpQ`}&v{fb+x462PIh#3| zn_IeAxM6n-L~jZfw?Oq;;MA)Rbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3b-4-FX zh=GA=mZytjNX4x^)4e@H14Y`-+eS5SS#%)UL{MhQHwhO{FVAMRNg-0UE7e^2Jv6xX z2;OkeUF*4I@tHKyM*gZ78d@%sUl?}9C7E$eQP|+rI_38M2lqGbtgy+R|L$!&|F@mL z=WIQ9H~a0@>z%4Xoc=3K7YOCBtv+Bhfm!W<#t)8Pj`|g=4QI$2$unPlV57mgBb`x0 z;kJWt1?##dy$L)<@6JEm!SUsyL+5j~o%@@$1E0LA;lID{&TsQvru+kSYdYHS#+Ih59rm-N|HRZ<@272^rQH*_Tx%L2f5<4PXt|Qy!xnSxAU1-2aEdj8$HDqUjOq}LnHLo zs!x*4YsEI^bnR<;y`b;9_kmRQ=+u34e|gDn(u$Ym7uhUS$ye5Ow9+Q&;EA+Po!1&4 z_mw?*R8!dUSIgVx{;oKwg<8)}F+UcZGykDw-WQfTg2L| zcI)JQQw^ki8!yY~v-E}){yg?*;Z^qe?EAvP52U}I@3l!Th0#d0!Xa~Y{2cqBdp1n7 ze3vy9Uwe2ZCv>;)gYAdn`fV&&*hJ0anYC}MzFK^epKTut~!9+7` z!Bm!)jmba$y*n%S;mU9OSH}8T;%uE)`+2PYo%EXFQ)kw-;|1I6%M)78XDq+{wb-*LLECyRqxzopr03Kph ABLDyZ literal 0 HcmV?d00001 diff --git a/data/resources/help/y.png b/data/resources/help/y.png new file mode 100644 index 0000000000000000000000000000000000000000..db5fd21030459132ef168fcbaf8e0bfc45e091b3 GIT binary patch literal 1498 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4^64!{5;QX|b^2DN42FH~Aq*MjZ z+{EB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdXL-x;UD-xj9<8SOUY{)!5O}(8bBc&BesP($dJ) z)flGNB|o_|H#M&WrZ)wl*9oUyP-4g}0NU)5T9jFqn&MWJpQ`}&v{fc zw_7Z6>eUB2MjsTlNKp+F0;V4j6P|E^9C*@C%>$P0@b9H1X&)V*_(D#6Q z*doPa?wJDOuF+k0x0gI+c06*t{sB)+o6oZ|Dw%aZ6cW?U)jz*eeQxh#&i2Ez0(c*= zW-yj6V4Bj9{ek@ti>CndeO1QpoORU>=06yk#J=0GPW54*!KP`zt@Pla){c1xcZjK2 zI0O`{?fP$=zUbP@O8fqQJEzT^bx@GQ^KAP;^?+4R-Ar^>CtNvKBcOB3r(OEutw@IT zYtF1b=)TWTe$kH83JGS*xxFoYwodiBaeVQ#TizFDJzOYlz?WCa_xzI2S-psd_unqK zt|a!gQ*M>g;hIZnNBj@i_TS=2;Im`g*O=sJ^D0Mh?&}Sn6E`+Fd@0L2^U*EbNh?=#= z6|PP_$IiHXQB>WsKm0p8K88OR_SjamS@7?L%ES6ClT!8tDtz`e`p?Q2WAi5XT%O9 zC$N6wmajYc?xkD3NKf=B+<(KA-OA3wr&n zs`-4szg%+Y{QRAN158d$SYcSZ^jC%Tve=LE7KxWDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WxjDO78XB6LTDn*`8XCG9J6amLIJvmFm>5`E z8o9a}!}Pl3Czs}?=9R$orXcj1;nWLC47mkBn_W_iGRsm^+=}vZ6~Lah%EaOpGdCAk zM`LGKoaRCGrr>sq2~NHGK*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*qLz^g24P@ z?CIhdQgN#%^nAB}posnRedftNr*urtIw>kAIR^#JvTtB5Gt%r7wp7N1Ig0xh^RByL zevDkri@!Zx$M{t#Ao_!kcMf~Ts*@b|E-o-_I4v^m^DW~=kr#F`mOt0dVCZ&p(D|Rp z;8dmf=bT2<$>MK$_j-SGYTQr1u;M%Ol>e$sPY-eEwH-R!)--oUd2dP<)831$8uAP4 z*Vx3~YJJXjLF$4xt(Y?q1ir?7JvX{MtN+mpZd(L}vLGzwZZK$&E(-`wbCQ`k;X6Z*RezJA3U+y{2-9yV-ev3`xYH7Ye zj}QynxvW`kld)347LG;;+ovOdI ziY#NT9^VkkvaoYe30`oX@t(;3Pc7+E37(x3-Cil%JDmGob@BoB{t8r#8ZPdZ<@Tn$$r|R6_e)uz84VBo4mjEY69ESw~W({?U>TJ zZIVhi$C|4aH`>lG)$*KhHn%9~s08b|>f9Mj9^WQ$sjG&^++{v{QRLB^cB#3WylWRb z8Ro6&ognSYyyMcME^k%UeId{KE}8VQ9lLG6D&|+>j1}JeoLlC5NFD8UOuuc^IrE60 z-kAfx&TR<(Bb9A*PDpKi*OsbF1&4nN+U#pPKli~IhFhT*16KUcaM^9m_QpK?`^D%* z*WS-~X(#oZYfr4l+XD8$*kiv<_Vsn1cauK*W7%(ejrNc$yBJQKTYPMPKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000AxNkl;= zwK1F49%?gMo3T;rOCPF}(bqkVzK*h|G4@m|WsFh!G)gIQks}AdZGPAH2$2Ag z0v@&4CH6!KK&#cgM<7H3z!30M;eCse4xtCIEY)2_D|iuh0R2+cb;An`0Iy*@qL@B` z0N__4YioPl<-=T`km05eNXz|zJnu&lO96j?V<3y8A@1WSNd;i1odCLJLc1pUoDv6z zfH53JM~C&*0KUjh8UQ*0cHIC-N}HOL3ysLFhj3UkKzSes>TcNO27>8HNwun2i{#)1k1o2aHgvl*J$$+`mXwb z1>i$O96y&Yb*+ZMT%VQ3S0C_6+@?NFT0wrd*P1|CQ|88piRcLYLP$Kf5JoC}ci zzhzB%U3$R2&^`!&^S>l23%Ui7W1+rh(D@CSVT!6B;8hXI%XV{aDCa%zOnyjWaS={T zXaJrYG(P|&4TXPIdNU3nZLkKUf&d_8I{>RApx2K)GzmWz;_!!m=MmNd@Vtgti1Xi< zZ8!=5(xw2!aZZm^t$?FBu6k^xjR8oYc6MJ9r-$W!2^dBFJYob7XOuC`2jJDWGyc{ffoR7E}F%WrYC7~OkHQ2IKLu! zgFBTcts6jhld#Ln;%@*y6t7VRK1+RAX(D=PkASfT8bDDNJ1mR$!-_b^bfdth1{y$8 zRg;MMl>cQ}+^{UR9p?vmoHNUDVEuxKOy~qq8*=Ls>I>+R%d1k@1dbZ)DGj_tKvjyK z!BL5I+ct1Zw$B4q0II(moRUf%6zj(Mcl@6%y=(AP09b4>EVusvYzOdn0AaDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WnYp>RIvP7WTe?^{8XCG9J6amLIJvmFm>5`E z8o9a}!}Pl3Czs}?=9R$orXcjX;M5CB47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!N1WzC z^`_u$AErkR3Uw?;K04H}tK7J7p&?wDdt%#ihC;n5y39vbH{9ru==E`l3TQrN z&XQD}6&b*JEFJr_b!xQ=u==rA2ga#+K9 zWR*jXLks_W#*eBB``A+VvpouT=q^8?lfiUpE6){n^#+T+PPew^23CP^W5Ww#dl(`G zJe3cdHv}ngo7nzWH;WbKyvD3-$zeHj9ZOQYmZY6@nnjh}4W_gI-k&h}!LQ-b(6;>H z>5TS<3d5OVHLOx`-adZU6fQH>EnvOXqVs?$DVpoh{RtCTPX&0NU`=Y#nXtfsRa0P- z18e`Yw+=E)N8UR8VfFvmaJ{KL!X&q4+V41rJz^cJ8zN*o)R{k;n{4Ihh}^*Y>X5%f zjc7-0g9U?DU!2Qx$J#wS9rny06BYCvwlgRkU|?-=xn08|4=!;$UHx3vIVCg!0OPZr AXaE2J literal 3703 zcmV--4v6uIP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000A$Nkl<3sC_u0SwkS zKPLGg^Z*t#KMMtbhd|<-&mRLrVFs}1AV1886~HavhJ)`tlM*>}0G!V6>KY*w04(5s z6W^Z#dcy=@vB~fE3WQJq7y=$?{M?L8hqebWE7@JgD|piG00tzh>uOFDUSI&Y9ma9Z z=@SS5UL~@{Rs!hqU|*k*%}qa$lGi~w??n=`fWN>IkU@Efhd>r60DG+j&@DT(%QBxW z32+Fwf^u~HP`?duEgjbZbPVh}0g#k3H7OU0%h5}Fs1cw%kOK|`%0FNm$W;Jjffe8m z;naW}6+mmiH+vE+O2XPA{Q3ecA-xFuDo_HZf%Omv{{eV^UJ@(=^S}wpwhoh)WavAp z1D1hLAqo6c{-|rs7D68-F}AZxz?<`?b)!mf)t)fgOhw>jqr~o{6kd}dblOJ27l27% z$E&@-4_P5fZ4i787IVjc-;zB{QTG?Pb%gS=+?*Pk^R8DWFD$Vh zF-}Z)0Imx(F90MB4gZSuW*k7uU=FZ?0KhT`;QGY~Fbts2i+N}ge$4a`bg4=|!WaMx z^Ri3=NCf~uGU@SYB6v+vxWr;<)Hh#(XCK z9k?q&pH%HE=Ya<}@bRkD30w<0fE@|$tpr<7`?9;7q6u5e&2sDpfRp7XgR-V4Y0##w z(l#&(yu+ExlkyutcZ208FE@V=_@#M`GOB|+f@;zfTTu(>0=Qbo11QSP4$IAZp(3hH zHv)XE;{hafJ&Bk{^S>-NH!L^XivB?!)w3K0HfxN?gr5NHLvB-s`ZE65 -inline std::string strToUpper(const char* from) -{ - std::string str(from); - for(unsigned int i = 0; i < str.size(); i++) - str[i] = toupper(from[i]); - return str; -} - -inline std::string& strToUpper(std::string& str) -{ - for(unsigned int i = 0; i < str.size(); i++) - str[i] = toupper(str[i]); - - return str; -} - -inline std::string strToUpper(const std::string& str) -{ - return strToUpper(str.c_str()); -} \ No newline at end of file +std::string strToUpper(const char* from); +std::string& strToUpper(std::string& str); +std::string strToUpper(const std::string& str); \ No newline at end of file diff --git a/src/components/ButtonComponent.h b/src/components/ButtonComponent.h index 1d3b8ce8e..d5d053487 100644 --- a/src/components/ButtonComponent.h +++ b/src/components/ButtonComponent.h @@ -19,6 +19,9 @@ public: void setText(const std::string& text, const std::string& helpText); + inline const std::string& getText() const { return mText; }; + inline const std::function& getPressedFunc() const { return mPressedFunc; }; + void onSizeChanged() override; void onFocusGained() override; void onFocusLost() override; diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 63176cefd..14925f64e 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -7,12 +7,13 @@ #include static const std::map ICON_PATH_MAP = boost::assign::map_list_of - ("up/down", ":/help/up_down.png") - ("left/right", ":/help/left_right.png") - ("up/down/left/right", ":/help/dpad.png") + ("up/down", ":/help/dpad_up_down.png") + ("left/right", ":/help/dpad_left_right.png") + ("up/down/left/right", ":/help/dpad_all.png") ("a", ":/help/a.png") ("b", ":/help/b.png") - ("menu", ":/help/menu.png"); + ("menu", ":/help/start.png") + ("select", ":/help/select.png"); HelpComponent::HelpComponent(Window* window) : GuiComponent(window) { diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 2ea74dd65..06f706c74 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -33,7 +33,7 @@ void MenuComponent::updateSize() if(height > Renderer::getScreenHeight() * 0.7f) height = Renderer::getScreenHeight() * 0.7f; - setSize(Renderer::getScreenWidth() * 0.4f, height); + setSize(Renderer::getScreenWidth() * 0.5f, height); } void MenuComponent::onSizeChanged() diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 1c9ac6d07..ca6a47ba8 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -46,7 +46,7 @@ private: for(auto it = mParent->mEntries.begin(); it != mParent->mEntries.end(); it++) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, it->name, font, 0x777777FF), true); + row.addElement(std::make_shared(mWindow, strToUpper(it->name), font, 0x777777FF), true); OptionListData& e = *it; @@ -102,6 +102,11 @@ private: return GuiComponent::input(config, input); } + + std::vector getHelpPrompts() override + { + return mMenu.getHelpPrompts(); + } }; public: @@ -251,7 +256,7 @@ private: { // display # selected std::stringstream ss; - ss << getSelectedObjects().size() << " selected"; + ss << getSelectedObjects().size() << " SELECTED"; mText.setText(ss.str()); mText.setSize(0, mText.getSize().y()); setSize(mText.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y()); @@ -263,7 +268,7 @@ private: { if(it->selected) { - mText.setText(it->name); + mText.setText(strToUpper(it->name)); mText.setSize(0, mText.getSize().y()); setSize(mText.getSize().x() + mLeftArrow.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y()); if(mParent) // hack since theres no "on child size changed" callback atm... @@ -293,4 +298,3 @@ private: std::vector mEntries; }; - diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 255d1c21f..e7d85ae28 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -3,6 +3,7 @@ #include "../components/TextComponent.h" #include "../components/ButtonComponent.h" #include "../components/MenuComponent.h" // for makeButtonGrid +#include "../Util.h" #define BUTTON_VERT_PADDING 32.0f @@ -24,6 +25,21 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, if(!name3.empty()) mButtons.push_back(std::make_shared(mWindow, name3, name3, std::bind(&GuiMsgBox::deleteMeAndCall, this, func3))); + // set accelerator automatically (button to press when "b" is pressed) + if(mButtons.size() == 1) + { + mAcceleratorFunc = mButtons.front()->getPressedFunc(); + }else{ + for(auto it = mButtons.begin(); it != mButtons.end(); it++) + { + if(strToUpper((*it)->getText()) == "OK" || strToUpper((*it)->getText()) == "NO") + { + mAcceleratorFunc = (*it)->getPressedFunc(); + break; + } + } + } + // put the buttons into a ComponentGrid mButtonGrid = makeButtonGrid(mWindow, mButtons); @@ -52,6 +68,17 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, addChild(&mGrid); } +bool GuiMsgBox::input(InputConfig* config, Input input) +{ + if(mAcceleratorFunc && config->isMappedTo("b", input) && input.value != 0) + { + mAcceleratorFunc(); + return true; + } + + return GuiComponent::input(config, input); +} + void GuiMsgBox::onSizeChanged() { mGrid.setSize(mSize); diff --git a/src/guis/GuiMsgBox.h b/src/guis/GuiMsgBox.h index 148d3ca04..bd95889de 100644 --- a/src/guis/GuiMsgBox.h +++ b/src/guis/GuiMsgBox.h @@ -15,6 +15,7 @@ public: const std::string& name2 = "", const std::function& func2 = nullptr, const std::string& name3 = "", const std::function& func3 = nullptr); + bool input(InputConfig* config, Input input); void onSizeChanged() override; private: @@ -27,5 +28,5 @@ private: std::shared_ptr mMsg; std::vector< std::shared_ptr > mButtons; std::shared_ptr mButtonGrid; - + std::function mAcceleratorFunc; }; diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index e20cf4cb5..59a08495e 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -30,6 +30,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mMenu.addWithLabel("User decides on conflicts", mApproveResults); mMenu.addButton("START", "start scraping", std::bind(&GuiScraperStart::pressedStart, this)); + mMenu.addButton("BACK", "cancel", [&] { delete this; }); mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } From 3c05d6bc2125b530dcaf976867058e7376646652 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 16 Mar 2014 19:52:15 -0500 Subject: [PATCH 197/386] Added the OpenSans Hebrew Condensed Light font. OptionListComponent and SliderComponent now use it. SliderComponent suffix is now vertically centered properly. --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 50 +- data/Resources.h | 3 + .../opensans_hebrew_condensed_light_ttf.cpp | 3294 +++++++++++++++++ .../opensans_hebrew_condensed_light.ttf | Bin 0 -> 32868 bytes src/components/OptionListComponent.h | 2 +- src/components/SliderComponent.cpp | 8 +- src/resources/Font.h | 5 +- src/resources/TextureResource.cpp | 4 +- 9 files changed, 3335 insertions(+), 32 deletions(-) create mode 100644 data/converted/opensans_hebrew_condensed_light_ttf.cpp create mode 100644 data/resources/opensans_hebrew_condensed_light.ttf diff --git a/CMakeLists.txt b/CMakeLists.txt index 95a4e52da..b0eecf5e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -321,6 +321,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_right_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_light_ttf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/sq_bracket_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_checked_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 4efa51b30..69cc4017f 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 31; +const size_t res2hNrOfFiles = 32; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.png", arrow_png_size, arrow_png_data}, {":/button.png", button_png_size, button_png_data}, @@ -12,6 +12,7 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/frame.png", frame_png_size, frame_png_data}, + {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, {":/slider_knob.png", slider_knob_png_size, slider_knob_png_data}, @@ -46,29 +47,30 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/ES_logo_16.png", res2hFiles[5]), std::make_pair(":/ES_logo_32.png", res2hFiles[6]), std::make_pair(":/frame.png", res2hFiles[7]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[8]), - std::make_pair(":/scroll_gradient.png", res2hFiles[9]), - std::make_pair(":/slider_knob.png", res2hFiles[10]), - std::make_pair(":/sq_bracket.png", res2hFiles[11]), - std::make_pair(":/star_filled.png", res2hFiles[12]), - std::make_pair(":/star_unfilled.png", res2hFiles[13]), - std::make_pair(":/textbox.png", res2hFiles[14]), - std::make_pair(":/textbox_glow.png", res2hFiles[15]), - std::make_pair(":/help/a.png", res2hFiles[16]), - std::make_pair(":/help/b.png", res2hFiles[17]), - std::make_pair(":/help/dpad_all.png", res2hFiles[18]), - std::make_pair(":/help/dpad_down.png", res2hFiles[19]), - std::make_pair(":/help/dpad_left.png", res2hFiles[20]), - std::make_pair(":/help/dpad_left_right.png", res2hFiles[21]), - std::make_pair(":/help/dpad_right.png", res2hFiles[22]), - std::make_pair(":/help/dpad_up.png", res2hFiles[23]), - std::make_pair(":/help/dpad_up_down.png", res2hFiles[24]), - std::make_pair(":/help/l.png", res2hFiles[25]), - std::make_pair(":/help/r.png", res2hFiles[26]), - std::make_pair(":/help/select.png", res2hFiles[27]), - std::make_pair(":/help/start.png", res2hFiles[28]), - std::make_pair(":/help/x.png", res2hFiles[29]), - std::make_pair(":/help/y.png", res2hFiles[30]) + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[8]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[9]), + std::make_pair(":/scroll_gradient.png", res2hFiles[10]), + std::make_pair(":/slider_knob.png", res2hFiles[11]), + std::make_pair(":/sq_bracket.png", res2hFiles[12]), + std::make_pair(":/star_filled.png", res2hFiles[13]), + std::make_pair(":/star_unfilled.png", res2hFiles[14]), + std::make_pair(":/textbox.png", res2hFiles[15]), + std::make_pair(":/textbox_glow.png", res2hFiles[16]), + std::make_pair(":/help/a.png", res2hFiles[17]), + std::make_pair(":/help/b.png", res2hFiles[18]), + std::make_pair(":/help/dpad_all.png", res2hFiles[19]), + std::make_pair(":/help/dpad_down.png", res2hFiles[20]), + std::make_pair(":/help/dpad_left.png", res2hFiles[21]), + std::make_pair(":/help/dpad_left_right.png", res2hFiles[22]), + std::make_pair(":/help/dpad_right.png", res2hFiles[23]), + std::make_pair(":/help/dpad_up.png", res2hFiles[24]), + std::make_pair(":/help/dpad_up_down.png", res2hFiles[25]), + std::make_pair(":/help/l.png", res2hFiles[26]), + std::make_pair(":/help/r.png", res2hFiles[27]), + std::make_pair(":/help/select.png", res2hFiles[28]), + std::make_pair(":/help/start.png", res2hFiles[29]), + std::make_pair(":/help/x.png", res2hFiles[30]), + std::make_pair(":/help/y.png", res2hFiles[31]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 44acf3d05..8da4df8c5 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -29,6 +29,9 @@ extern const unsigned char ES_logo_32_png_data[]; extern const size_t frame_png_size; extern const unsigned char frame_png_data[]; +extern const size_t opensans_hebrew_condensed_light_ttf_size; +extern const unsigned char opensans_hebrew_condensed_light_ttf_data[]; + extern const size_t opensans_hebrew_condensed_regular_ttf_size; extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; diff --git a/data/converted/opensans_hebrew_condensed_light_ttf.cpp b/data/converted/opensans_hebrew_condensed_light_ttf.cpp new file mode 100644 index 000000000..a9a553c35 --- /dev/null +++ b/data/converted/opensans_hebrew_condensed_light_ttf.cpp @@ -0,0 +1,3294 @@ +//this file was auto-generated from "opensans_hebrew_condensed_light.ttf" by res2h + +#include "../Resources.h" + +const size_t opensans_hebrew_condensed_light_ttf_size = 32868; +const unsigned char opensans_hebrew_condensed_light_ttf_data[32868] = { + 0x00,0x01,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x04, + 0x00,0x00,0x46,0x46,0x54,0x4d,0x67,0x7f,0x0d,0x13, + 0x00,0x00,0x7c,0xb4,0x00,0x00,0x00,0x1c,0x47,0x44, + 0x45,0x46,0x03,0xd1,0x04,0xb1,0x00,0x00,0x7c,0xd0, + 0x00,0x00,0x00,0x36,0x47,0x50,0x4f,0x53,0xc8,0x42, + 0xaa,0x57,0x00,0x00,0x7d,0x08,0x00,0x00,0x03,0x3a, + 0x47,0x53,0x55,0x42,0x68,0x93,0x62,0x93,0x00,0x00, + 0x80,0x44,0x00,0x00,0x00,0x1e,0x4f,0x53,0x2f,0x32, + 0x7f,0x1c,0xcd,0x34,0x00,0x00,0x01,0x88,0x00,0x00, + 0x00,0x60,0x63,0x6d,0x61,0x70,0x0a,0x98,0xec,0xca, + 0x00,0x00,0x06,0xc4,0x00,0x00,0x03,0x56,0x67,0x61, + 0x73,0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x7c,0xac, + 0x00,0x00,0x00,0x08,0x67,0x6c,0x79,0x66,0xef,0xde, + 0xcd,0x13,0x00,0x00,0x0c,0x94,0x00,0x00,0x61,0x64, + 0x68,0x65,0x61,0x64,0x02,0xea,0x24,0x85,0x00,0x00, + 0x01,0x0c,0x00,0x00,0x00,0x36,0x68,0x68,0x65,0x61, + 0x0e,0xf1,0x05,0x93,0x00,0x00,0x01,0x44,0x00,0x00, + 0x00,0x24,0x68,0x6d,0x74,0x78,0x88,0x5f,0x5a,0xe2, + 0x00,0x00,0x01,0xe8,0x00,0x00,0x04,0xdc,0x6c,0x6f, + 0x63,0x61,0x42,0xdc,0x5b,0x10,0x00,0x00,0x0a,0x24, + 0x00,0x00,0x02,0x70,0x6d,0x61,0x78,0x70,0x01,0x80, + 0x00,0x49,0x00,0x00,0x01,0x68,0x00,0x00,0x00,0x20, + 0x6e,0x61,0x6d,0x65,0x61,0x6e,0xb0,0xc4,0x00,0x00, + 0x6d,0xf8,0x00,0x00,0x08,0xe8,0x70,0x6f,0x73,0x74, + 0x38,0xa2,0xa4,0x31,0x00,0x00,0x76,0xe0,0x00,0x00, + 0x05,0xca,0x70,0x72,0x65,0x70,0x68,0x06,0x8c,0x85, + 0x00,0x00,0x0a,0x1c,0x00,0x00,0x00,0x07,0x00,0x01, + 0x00,0x00,0x00,0x02,0x00,0x41,0xc4,0xb8,0xc0,0x2c, + 0x5f,0x0f,0x3c,0xf5,0x02,0x09,0x08,0x00,0x00,0x00, + 0x00,0x00,0xcd,0xac,0x5d,0x6c,0x00,0x00,0x00,0x00, + 0xcd,0xc0,0x7c,0x56,0xfe,0xb3,0xfe,0x12,0x07,0xae, + 0x07,0x73,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x08,0x8d, + 0xfd,0xa8,0x00,0x00,0x08,0x00,0xfe,0xb3,0xfe,0xb3, + 0x07,0xae,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x37, + 0x00,0x01,0x00,0x00,0x01,0x37,0x00,0x46,0x00,0x07, + 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01, + 0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x03,0x03,0x1b,0x01,0x2c,0x00,0x03, + 0x00,0x00,0x05,0x33,0x04,0xcc,0x00,0x00,0x00,0x99, + 0x05,0x33,0x04,0xcc,0x00,0x00,0x02,0xcc,0x00,0x32, + 0x02,0x9e,0x00,0x00,0x00,0x00,0x04,0x06,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x03,0x40,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x55,0x4b,0x57,0x4e,0x00,0x00,0x00,0x0d,0xfb,0x4b, + 0x06,0x1f,0xfe,0x14,0x00,0x84,0x08,0x8d,0x02,0x58, + 0x20,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x04,0x3d, + 0x05,0xb6,0x00,0x00,0x00,0x20,0x00,0x04,0x02,0x14, + 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xaa,0x00,0x00, + 0x02,0x14,0x00,0x00,0x01,0x81,0x00,0x00,0x01,0xc3, + 0x00,0x93,0x02,0xae,0x00,0x85,0x03,0x64,0x00,0x25, + 0x03,0x33,0x00,0x5e,0x04,0xb8,0x00,0x5e,0x03,0x42, + 0x00,0x42,0x01,0x85,0x00,0x85,0x02,0x35,0x00,0x68, + 0x02,0x35,0x00,0x54,0x02,0xe9,0x00,0x5e,0x03,0x33, + 0x00,0x3b,0x01,0xa6,0x00,0x4e,0x02,0x04,0x00,0x35, + 0x01,0xa6,0x00,0x85,0x02,0xc9,0x00,0x33,0x03,0x33, + 0x00,0x58,0x03,0x33,0x00,0x96,0x03,0x33,0x00,0x4a, + 0x03,0x33,0x00,0x4c,0x03,0x33,0x00,0x25,0x03,0x33, + 0x00,0x62,0x03,0x33,0x00,0x64,0x03,0x33,0x00,0x39, + 0x03,0x33,0x00,0x48,0x03,0x33,0x00,0x52,0x01,0xa6, + 0x00,0x85,0x01,0xa6,0x00,0x4e,0x03,0x33,0x00,0x3b, + 0x03,0x33,0x00,0x3b,0x03,0x33,0x00,0x39,0x02,0x42, + 0x00,0x23,0x04,0xd1,0x00,0x6e,0x03,0x2d,0x00,0x00, + 0x03,0x8b,0x00,0xa0,0x03,0x5c,0x00,0x6e,0x03,0xe2, + 0x00,0xa0,0x03,0x14,0x00,0xa0,0x02,0xd9,0x00,0xa0, + 0x04,0x33,0x00,0x6f,0x04,0x02,0x00,0xa0,0x01,0xa2, + 0x00,0xa0,0x01,0x91,0xff,0xa6,0x03,0x39,0x00,0xa0, + 0x02,0xc7,0x00,0xa0,0x05,0x73,0x00,0xa0,0x04,0x42, + 0x00,0xa0,0x04,0x29,0x00,0x6f,0x03,0x48,0x00,0xa0, + 0x04,0x29,0x00,0x6f,0x03,0x66,0x00,0xa0,0x03,0x29, + 0x00,0x56,0x02,0xc7,0x00,0x0e,0x03,0xf4,0x00,0x93, + 0x03,0x1f,0x00,0x00,0x05,0x73,0x00,0x0a,0x02,0xcb, + 0x00,0x14,0x02,0xae,0x00,0x00,0x02,0x83,0x00,0x39, + 0x02,0x85,0x00,0xae,0x02,0xc9,0x00,0x33,0x02,0x85, + 0x00,0x4a,0x03,0x33,0x00,0x25,0x03,0x4a,0xff,0xfc, + 0x04,0x66,0x01,0xb2,0x03,0x10,0x00,0x4e,0x03,0x7d, + 0x00,0x91,0x02,0x7b,0x00,0x60,0x03,0x7d,0x00,0x5e, + 0x03,0x23,0x00,0x60,0x01,0xc5,0x00,0x14,0x02,0xe5, + 0x00,0x23,0x03,0x66,0x00,0x91,0x01,0x81,0x00,0x83, + 0x01,0x81,0xff,0xfc,0x02,0xc7,0x00,0x91,0x01,0x81, + 0x00,0x91,0x05,0x17,0x00,0x91,0x03,0x66,0x00,0x91, + 0x03,0x52,0x00,0x5e,0x03,0x7d,0x00,0x91,0x03,0x7d, + 0x00,0x5e,0x02,0x2f,0x00,0x91,0x02,0x85,0x00,0x4a, + 0x01,0xc1,0x00,0x2b,0x03,0x66,0x00,0x8d,0x02,0x8d, + 0x00,0x0a,0x04,0x64,0x00,0x14,0x02,0xa4,0x00,0x23, + 0x02,0x8d,0xff,0xfe,0x02,0x1d,0x00,0x3b,0x02,0xe1, + 0x00,0x6d,0x03,0x33,0x01,0x6a,0x02,0xe1,0x00,0x68, + 0x03,0x33,0x00,0x3b,0x02,0x14,0x00,0x00,0x01,0xc3, + 0x00,0x93,0x03,0x33,0x00,0xa8,0x03,0x33,0x00,0x50, + 0x04,0x6f,0x00,0x7d,0x03,0x33,0x00,0x6a,0x03,0x33, + 0x01,0x6a,0x02,0xba,0x00,0x52,0x04,0x66,0x01,0x5c, + 0x06,0xa8,0x00,0x64,0x02,0x42,0x00,0x39,0x03,0x58, + 0x00,0x52,0x03,0x33,0x00,0x3b,0x02,0x04,0x00,0x35, + 0x06,0xa8,0x00,0x64,0x03,0x4a,0xff,0xf8,0x03,0x6d, + 0x00,0x8b,0x03,0x33,0x00,0x3b,0x02,0x66,0x00,0x31, + 0x02,0x66,0x00,0x2f,0x04,0x66,0x01,0xb2,0x03,0x6a, + 0x00,0x91,0x03,0xc7,0x00,0x96,0x01,0xa6,0x00,0x85, + 0x01,0xd1,0x00,0x3b,0x02,0x66,0x00,0x52,0x02,0x6a, + 0x00,0x46,0x03,0x58,0x00,0x52,0x05,0x96,0x00,0x34, + 0x05,0x96,0x00,0x34,0x05,0x96,0x00,0x2f,0x02,0x42, + 0x00,0x2f,0x03,0x2d,0x00,0x00,0x03,0x2d,0x00,0x00, + 0x03,0x2d,0x00,0x00,0x03,0x2d,0x00,0x00,0x03,0x2d, + 0x00,0x00,0x03,0x2d,0x00,0x00,0x04,0x81,0x00,0x00, + 0x03,0x5c,0x00,0x6e,0x03,0x14,0x00,0xa0,0x03,0x14, + 0x00,0xa0,0x03,0x14,0x00,0xa0,0x03,0x14,0x00,0xa0, + 0x01,0xa2,0xff,0xde,0x01,0xa2,0x00,0x9a,0x01,0xa2, + 0xff,0xe6,0x01,0xa2,0xff,0xfb,0x03,0xe2,0x00,0x3d, + 0x04,0x42,0x00,0xa0,0x04,0x29,0x00,0x6f,0x04,0x29, + 0x00,0x6f,0x04,0x29,0x00,0x6f,0x04,0x29,0x00,0x6f, + 0x04,0x29,0x00,0x6f,0x03,0x33,0x00,0x3b,0x04,0x29, + 0x00,0x60,0x03,0xf4,0x00,0x93,0x03,0xf4,0x00,0x93, + 0x03,0xf4,0x00,0x93,0x03,0xf4,0x00,0x93,0x02,0xae, + 0x00,0x00,0x03,0x48,0x00,0xa0,0x03,0x37,0x00,0x91, + 0x03,0x10,0x00,0x4e,0x03,0x10,0x00,0x4e,0x03,0x10, + 0x00,0x4e,0x03,0x10,0x00,0x4e,0x03,0x10,0x00,0x4e, + 0x03,0x10,0x00,0x4e,0x04,0xec,0x00,0x4e,0x02,0x7b, + 0x00,0x60,0x03,0x23,0x00,0x60,0x03,0x23,0x00,0x60, + 0x03,0x23,0x00,0x60,0x03,0x23,0x00,0x60,0x01,0x81, + 0xff,0xe0,0x01,0x81,0x00,0x71,0x01,0x81,0xff,0xd6, + 0x01,0x81,0xff,0xec,0x03,0x58,0x00,0x5e,0x03,0x66, + 0x00,0x91,0x03,0x52,0x00,0x5e,0x03,0x52,0x00,0x5e, + 0x03,0x52,0x00,0x5e,0x03,0x52,0x00,0x5e,0x03,0x52, + 0x00,0x5e,0x03,0x33,0x00,0x3b,0x03,0x52,0x00,0x44, + 0x03,0x66,0x00,0x8d,0x03,0x66,0x00,0x8d,0x03,0x66, + 0x00,0x8d,0x03,0x66,0x00,0x8d,0x02,0x8d,0xff,0xfe, + 0x03,0x7d,0x00,0x91,0x02,0x8d,0xff,0xfe,0x01,0x81, + 0x00,0x91,0x04,0xd1,0x00,0x6f,0x05,0x52,0x00,0x5e, + 0x03,0x29,0x00,0x56,0x02,0x85,0x00,0x4a,0x02,0xae, + 0x00,0x00,0x02,0x83,0x00,0x39,0x02,0x1d,0x00,0x32, + 0x03,0x33,0x00,0x50,0x04,0x85,0x01,0x56,0x04,0x85, + 0x01,0x56,0x04,0x85,0x01,0x68,0x01,0x81,0x00,0x83, + 0x04,0x9e,0x01,0x89,0x01,0x7f,0x00,0x44,0x04,0x85, + 0x01,0x29,0x04,0x89,0x01,0x21,0x00,0x00,0xff,0xc4, + 0x00,0x00,0xfe,0xb3,0x00,0x00,0xfe,0xe1,0x00,0x00, + 0xfe,0xe1,0x00,0x00,0xff,0xc3,0x00,0x00,0xff,0x33, + 0x00,0x00,0xff,0x35,0x00,0x00,0xff,0x4e,0x00,0x00, + 0xff,0x4e,0x00,0x00,0xff,0xc3,0x00,0x00,0xff,0xc4, + 0x00,0x00,0xff,0x35,0x00,0x00,0xff,0xc3,0x00,0x00, + 0xff,0xd3,0x02,0x04,0x00,0x35,0x00,0x00,0xff,0xc3, + 0x00,0x00,0xff,0xc2,0x00,0x00,0xff,0x6e,0x03,0x09, + 0x00,0x48,0x02,0xec,0x00,0x5e,0x02,0x90,0x00,0x73, + 0x02,0xa6,0x00,0x11,0x03,0x94,0x00,0x91,0x01,0x81, + 0x00,0x91,0x01,0xab,0x00,0x87,0x03,0x94,0x00,0x91, + 0x03,0x74,0x00,0x5f,0x01,0x77,0x00,0x8c,0x02,0xa8, + 0x00,0x29,0x02,0x7b,0x00,0x29,0x02,0x5e,0x00,0x2d, + 0x03,0x93,0x00,0x91,0x03,0x5b,0x00,0x3b,0x01,0x90, + 0x00,0x73,0x02,0x39,0x00,0x27,0x03,0x74,0x00,0x5e, + 0x03,0x4e,0x00,0x48,0x03,0x90,0x00,0x5e,0x03,0x62, + 0x00,0x5e,0x02,0x6f,0x00,0x00,0x02,0xf3,0x00,0x3b, + 0x03,0x55,0x00,0x91,0x02,0x9c,0x00,0x17,0x04,0x18, + 0x00,0x4a,0x03,0x7a,0x00,0x10,0x01,0x3c,0x00,0x2b, + 0x02,0x56,0x00,0x2b,0x04,0x00,0x00,0x52,0x08,0x00, + 0x00,0x52,0x01,0x3b,0x00,0x2b,0x01,0x3b,0x00,0x2b, + 0x01,0xa6,0x00,0x4e,0x02,0x56,0x00,0x2b,0x02,0x56, + 0x00,0x2b,0x02,0x93,0x00,0x21,0x03,0x73,0x00,0x7b, + 0x03,0x73,0x00,0x7b,0x03,0x02,0x00,0xa8,0x04,0xf2, + 0x00,0x85,0x06,0xb6,0x00,0x5e,0x02,0x00,0x00,0x52, + 0x02,0x00,0x00,0x52,0x01,0x0a,0xfe,0xd7,0x04,0x6b, + 0x00,0x91,0x03,0x33,0x00,0x23,0x05,0xac,0x00,0x0e, + 0x03,0x46,0x00,0x14,0x03,0x46,0x00,0x14,0x04,0x18, + 0x00,0x4a,0x04,0x18,0x00,0x2e,0x04,0x18,0x00,0x4a, + 0x04,0x18,0x00,0x2e,0x03,0x09,0x00,0x48,0x03,0x09, + 0x00,0x48,0x03,0x09,0x00,0x48,0x02,0xec,0x00,0x5e, + 0x02,0x90,0x00,0x73,0x02,0xa6,0x00,0x11,0x03,0x94, + 0x00,0x91,0x01,0x81,0xff,0xcc,0x01,0xab,0xff,0xec, + 0x03,0x74,0x00,0x5f,0x01,0x77,0xff,0xca,0x02,0xa8, + 0x00,0x29,0x02,0x7b,0x00,0x29,0x02,0x5e,0x00,0x2d, + 0x03,0x5b,0x00,0x3b,0x02,0x39,0x00,0x27,0x03,0x74, + 0x00,0x5e,0x03,0x90,0x00,0x5e,0x03,0x62,0x00,0x5e, + 0x02,0xf3,0x00,0x3b,0x03,0x55,0x00,0x91,0x02,0x9c, + 0x00,0x17,0x04,0x18,0x00,0x4a,0x03,0x7a,0x00,0x10, + 0x01,0x81,0x00,0x67,0x00,0x00,0xff,0x15,0x01,0x81, + 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03, + 0x00,0x00,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00, + 0x01,0x4c,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x1c, + 0x00,0x04,0x01,0x30,0x00,0x00,0x00,0x48,0x00,0x40, + 0x00,0x05,0x00,0x08,0x00,0x0d,0x00,0x7e,0x00,0xa0, + 0x00,0xff,0x01,0x31,0x01,0x53,0x01,0x61,0x01,0x78, + 0x01,0x7e,0x01,0x92,0x02,0xc7,0x02,0xdd,0x05,0xbe, + 0x05,0xc2,0x05,0xc7,0x05,0xea,0x05,0xf4,0x20,0x14, + 0x20,0x1a,0x20,0x1e,0x20,0x22,0x20,0x26,0x20,0x30, + 0x20,0x3a,0x20,0x44,0x20,0xaa,0x20,0xac,0x21,0x22, + 0xfb,0x02,0xfb,0x36,0xfb,0x3c,0xfb,0x3e,0xfb,0x41, + 0xfb,0x44,0xfb,0x4b,0xff,0xff,0x00,0x00,0x00,0x0d, + 0x00,0x20,0x00,0xa0,0x00,0xa1,0x01,0x31,0x01,0x52, + 0x01,0x60,0x01,0x78,0x01,0x7d,0x01,0x92,0x02,0xc6, + 0x02,0xd8,0x05,0xb0,0x05,0xc1,0x05,0xc7,0x05,0xd0, + 0x05,0xf3,0x20,0x13,0x20,0x18,0x20,0x1c,0x20,0x20, + 0x20,0x26,0x20,0x30,0x20,0x39,0x20,0x44,0x20,0xaa, + 0x20,0xac,0x21,0x22,0xfb,0x01,0xfb,0x2a,0xfb,0x38, + 0xfb,0x3e,0xfb,0x40,0xfb,0x43,0xfb,0x46,0xff,0xff, + 0xff,0xf6,0xff,0xe4,0x00,0x96,0xff,0xc3,0xff,0x92, + 0xff,0x72,0xff,0x66,0xff,0x50,0xff,0x4c,0xff,0x39, + 0xfe,0x06,0xfd,0xf6,0xfb,0x24,0xfb,0x22,0xfb,0x1e, + 0xfb,0x16,0xfb,0x0e,0xe0,0xf0,0xe0,0xed,0xe0,0xec, + 0xe0,0xeb,0xe0,0xe8,0xe0,0xdf,0xe0,0xd7,0xe0,0xce, + 0xe0,0x69,0xe0,0x68,0xdf,0xf3,0x06,0x15,0x05,0xee, + 0x05,0xed,0x05,0xec,0x05,0xeb,0x05,0xea,0x05,0xe9, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x06,0x02,0x0a,0x00,0x00, + 0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04, + 0x00,0x05,0x00,0x06,0x00,0x07,0x00,0x08,0x00,0x09, + 0x00,0x0a,0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e, + 0x00,0x0f,0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13, + 0x00,0x14,0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18, + 0x00,0x19,0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d, + 0x00,0x1e,0x00,0x1f,0x00,0x20,0x00,0x21,0x00,0x22, + 0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26,0x00,0x27, + 0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c, + 0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31, + 0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36, + 0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b, + 0x00,0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40, + 0x00,0x41,0x00,0x42,0x00,0x43,0x00,0x44,0x00,0x45, + 0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a, + 0x00,0x4b,0x00,0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f, + 0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54, + 0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59, + 0x00,0x5a,0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e, + 0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x00, + 0x00,0x87,0x00,0x88,0x00,0x8a,0x00,0x8c,0x00,0x94, + 0x00,0x99,0x00,0x9f,0x00,0xa4,0x00,0xa3,0x00,0xa5, + 0x00,0xa7,0x00,0xa6,0x00,0xa8,0x00,0xaa,0x00,0xac, + 0x00,0xab,0x00,0xad,0x00,0xae,0x00,0xb0,0x00,0xaf, + 0x00,0xb1,0x00,0xb2,0x00,0xb4,0x00,0xb6,0x00,0xb5, + 0x00,0xb7,0x00,0xb9,0x00,0xb8,0x00,0xbd,0x00,0xbc, + 0x00,0xbe,0x00,0xbf,0x01,0x0b,0x00,0x73,0x00,0x65, + 0x00,0x66,0x00,0x6a,0x01,0x0d,0x00,0x79,0x00,0xa2, + 0x00,0x71,0x00,0x6c,0x01,0x15,0x00,0x77,0x00,0x6b, + 0x00,0x00,0x00,0x89,0x00,0x9b,0x00,0x00,0x00,0x74, + 0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x78,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d, + 0x00,0x7d,0x00,0x00,0x00,0xa9,0x00,0xbb,0x00,0x82, + 0x00,0x64,0x00,0x6f,0x00,0x00,0x00,0xcb,0x00,0x00, + 0x00,0x00,0x00,0x6e,0x00,0x7e,0x01,0x0e,0x01,0x36, + 0x00,0x83,0x00,0x86,0x00,0x98,0x00,0xc4,0x00,0xc5, + 0x01,0x03,0x01,0x04,0x01,0x08,0x01,0x09,0x01,0x05, + 0x01,0x06,0x00,0xba,0x00,0x00,0x00,0xc2,0x00,0xc8, + 0x01,0x12,0x01,0x14,0x01,0x10,0x01,0x11,0x01,0x16, + 0x01,0x17,0x01,0x0c,0x00,0x7a,0x01,0x07,0x01,0x0a, + 0x01,0x0f,0x00,0x85,0x00,0x8d,0x00,0x84,0x00,0x8e, + 0x00,0x8b,0x00,0x90,0x00,0x91,0x00,0x92,0x00,0x8f, + 0x00,0x96,0x00,0x97,0x00,0x00,0x00,0x95,0x00,0x9d, + 0x00,0x9e,0x00,0x9c,0x00,0xc3,0x00,0xcc,0x00,0xd2, + 0x00,0x72,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0x7b, + 0x00,0xd3,0x00,0xd1,0x00,0xcd,0x00,0x00,0xb8,0x01, + 0xff,0x85,0xb0,0x04,0x8d,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, + 0x00,0x2e,0x00,0x66,0x00,0xac,0x00,0xf2,0x01,0x3e, + 0x01,0x4c,0x01,0x68,0x01,0x84,0x01,0xa2,0x01,0xba, + 0x01,0xcc,0x01,0xda,0x01,0xea,0x01,0xf8,0x02,0x1e, + 0x02,0x36,0x02,0x64,0x02,0x9c,0x02,0xc0,0x02,0xec, + 0x03,0x22,0x03,0x36,0x03,0x7a,0x03,0xb4,0x03,0xce, + 0x03,0xea,0x04,0x00,0x04,0x14,0x04,0x28,0x04,0x5c, + 0x04,0xc2,0x04,0xe4,0x05,0x18,0x05,0x48,0x05,0x6a, + 0x05,0x84,0x05,0x9a,0x05,0xc4,0x05,0xdc,0x05,0xe8, + 0x06,0x00,0x06,0x1e,0x06,0x2e,0x06,0x58,0x06,0x76, + 0x06,0x9e,0x06,0xbe,0x06,0xee,0x07,0x16,0x07,0x4e, + 0x07,0x62,0x07,0x80,0x07,0x9a,0x07,0xc8,0x07,0xe6, + 0x07,0xfc,0x08,0x14,0x08,0x28,0x08,0x36,0x08,0x4a, + 0x08,0x5e,0x08,0x6c,0x08,0x82,0x08,0xb8,0x08,0xe8, + 0x09,0x0a,0x09,0x38,0x09,0x62,0x09,0x86,0x09,0xde, + 0x0a,0x04,0x0a,0x1e,0x0a,0x44,0x0a,0x62,0x0a,0x6e, + 0x0a,0xa0,0x0a,0xc2,0x0a,0xe4,0x0b,0x16,0x0b,0x44, + 0x0b,0x66,0x0b,0x98,0x0b,0xba,0x0b,0xde,0x0b,0xf8, + 0x0c,0x28,0x0c,0x44,0x0c,0x6e,0x0c,0x86,0x0c,0xbc, + 0x0c,0xca,0x0d,0x00,0x0d,0x22,0x0d,0x22,0x0d,0x3a, + 0x0d,0x62,0x0d,0x92,0x0d,0xd6,0x0d,0xfc,0x0e,0x10, + 0x0e,0x60,0x0e,0x80,0x0e,0xd2,0x0f,0x04,0x0f,0x28, + 0x0f,0x38,0x0f,0x46,0x0f,0x9a,0x0f,0xa8,0x0f,0xca, + 0x0f,0xea,0x10,0x10,0x10,0x40,0x10,0x54,0x10,0x7a, + 0x10,0x96,0x10,0xa6,0x10,0xc6,0x10,0xde,0x10,0xfe, + 0x11,0x20,0x11,0x5a,0x11,0x98,0x11,0xea,0x12,0x1e, + 0x12,0x50,0x12,0x80,0x12,0xbc,0x12,0xfc,0x13,0x36, + 0x13,0x70,0x13,0x98,0x13,0xdc,0x14,0x04,0x14,0x2c, + 0x14,0x60,0x14,0x92,0x14,0xae,0x14,0xca,0x14,0xf2, + 0x15,0x18,0x15,0x42,0x15,0x80,0x15,0xb8,0x15,0xee, + 0x16,0x30,0x16,0x76,0x16,0xb6,0x16,0xd8,0x17,0x16, + 0x17,0x44,0x17,0x70,0x17,0xa8,0x17,0xde,0x18,0x04, + 0x18,0x2a,0x18,0x66,0x18,0xaa,0x18,0xee,0x19,0x3e, + 0x19,0x92,0x19,0xe0,0x1a,0x2e,0x1a,0x7e,0x1a,0xb6, + 0x1a,0xf0,0x1b,0x28,0x1b,0x6e,0x1b,0xb0,0x1b,0xcc, + 0x1b,0xe8,0x1c,0x10,0x1c,0x36,0x1c,0x72,0x1c,0xb2, + 0x1c,0xe4,0x1d,0x14,0x1d,0x50,0x1d,0x90,0x1d,0xca, + 0x1d,0xec,0x1e,0x28,0x1e,0x5c,0x1e,0x8e,0x1e,0xcc, + 0x1f,0x08,0x1f,0x40,0x1f,0x76,0x1f,0xb8,0x1f,0xc4, + 0x1f,0xf4,0x20,0x36,0x20,0x86,0x20,0xd0,0x21,0x00, + 0x21,0x30,0x21,0x60,0x21,0x90,0x21,0xb2,0x21,0xd0, + 0x21,0xe8,0x21,0xfa,0x22,0x1a,0x22,0x36,0x22,0x5c, + 0x22,0x82,0x22,0x98,0x22,0xc6,0x22,0xe2,0x23,0x02, + 0x23,0x10,0x23,0x26,0x23,0x44,0x23,0x52,0x23,0x62, + 0x23,0x70,0x23,0x7e,0x23,0x9c,0x23,0xaa,0x23,0xb8, + 0x23,0xc6,0x23,0xd4,0x23,0xe2,0x23,0xf2,0x24,0x24, + 0x24,0x4c,0x24,0x78,0x24,0x9a,0x24,0xbe,0x24,0xca, + 0x24,0xe4,0x25,0x02,0x25,0x2e,0x25,0x3e,0x25,0x56, + 0x25,0x82,0x25,0x9c,0x25,0xc0,0x25,0xfe,0x26,0x14, + 0x26,0x3a,0x26,0x6a,0x26,0x94,0x26,0xbc,0x26,0xf8, + 0x27,0x1a,0x27,0x40,0x27,0x70,0x27,0x92,0x27,0xc6, + 0x27,0xf6,0x28,0x0e,0x28,0x34,0x28,0x42,0x28,0x50, + 0x28,0x62,0x28,0x74,0x28,0x86,0x28,0xa2,0x28,0xc0, + 0x28,0xde,0x28,0xfa,0x29,0x28,0x29,0x3a,0x29,0x5c, + 0x29,0xbc,0x29,0xd2,0x29,0xe6,0x29,0xf4,0x2a,0x32, + 0x2a,0x6e,0x2a,0x9a,0x2a,0xd0,0x2a,0xfa,0x2b,0x38, + 0x2b,0x76,0x2b,0xbc,0x2c,0x02,0x2c,0x3c,0x2c,0x78, + 0x2c,0xb2,0x2c,0xe2,0x2d,0x16,0x2d,0x40,0x2d,0x6c, + 0x2d,0x80,0x2d,0xa2,0x2d,0xd6,0x2d,0xee,0x2e,0x0e, + 0x2e,0x42,0x2e,0x64,0x2e,0xaa,0x2e,0xd8,0x2f,0x10, + 0x2f,0x40,0x2f,0x84,0x2f,0xb4,0x2f,0xee,0x30,0x18, + 0x30,0x54,0x30,0x8e,0x30,0xa4,0x30,0xb2,0x30,0xb2, + 0x00,0x02,0x00,0x93,0xff,0xf0,0x01,0x2f,0x05,0xb6, + 0x00,0x03,0x00,0x0a,0x00,0x00,0x13,0x23,0x03,0x33, + 0x02,0x32,0x15,0x14,0x06,0x23,0x22,0xfc,0x37,0x23, + 0x7d,0x8c,0x9c,0x2b,0x23,0x4e,0x01,0x6f,0x04,0x47, + 0xfb,0x0f,0x6b,0x36,0x34,0x00,0x00,0x00,0x00,0x02, + 0x00,0x85,0x03,0xa6,0x02,0x29,0x05,0xb6,0x00,0x03, + 0x00,0x07,0x00,0x00,0x13,0x23,0x03,0x33,0x01,0x23, + 0x03,0x33,0xe3,0x3d,0x21,0x7b,0x01,0x0c,0x3d,0x21, + 0x7b,0x03,0xa6,0x02,0x10,0xfd,0xf0,0x02,0x10,0x00, + 0x00,0x00,0x00,0x02,0x00,0x25,0x00,0x00,0x03,0x3d, + 0x05,0xb6,0x00,0x1b,0x00,0x1f,0x00,0x00,0x01,0x15, + 0x23,0x03,0x33,0x15,0x23,0x03,0x23,0x13,0x23,0x03, + 0x23,0x13,0x23,0x35,0x33,0x13,0x23,0x35,0x33,0x13, + 0x33,0x03,0x33,0x13,0x33,0x03,0x05,0x03,0x33,0x13, + 0x03,0x3d,0xb0,0x2d,0xae,0xb8,0x35,0x52,0x37,0xe9, + 0x36,0x4d,0x33,0xa8,0xb2,0x2d,0xb2,0xbc,0x2f,0x52, + 0x31,0xec,0x31,0x4c,0x2f,0xfe,0xbc,0x2d,0xe9,0x2f, + 0x04,0x12,0x56,0xfe,0x71,0x5a,0xfe,0x2d,0x01,0xd3, + 0xfe,0x2d,0x01,0xd3,0x5a,0x01,0x8f,0x56,0x01,0xa4, + 0xfe,0x5c,0x01,0xa4,0xfe,0x5c,0x56,0xfe,0x71,0x01, + 0x8f,0x00,0x00,0x00,0x00,0x03,0x00,0x5e,0xff,0x89, + 0x02,0xd7,0x06,0x14,0x00,0x1c,0x00,0x23,0x00,0x2a, + 0x00,0x00,0x01,0x15,0x16,0x17,0x07,0x26,0x27,0x11, + 0x16,0x16,0x14,0x06,0x07,0x15,0x23,0x35,0x22,0x27, + 0x35,0x16,0x16,0x33,0x11,0x26,0x26,0x34,0x36,0x37, + 0x35,0x11,0x06,0x06,0x14,0x17,0x16,0x17,0x13,0x36, + 0x34,0x26,0x27,0x11,0x36,0x01,0xc1,0x8d,0x75,0x25, + 0x75,0x68,0x96,0x80,0x97,0x7f,0x52,0xaf,0x62,0x33, + 0x95,0x49,0x92,0x75,0x92,0x75,0x49,0x5d,0x27,0x29, + 0x56,0xd5,0x31,0x54,0x60,0x51,0x06,0x14,0xb6,0x05, + 0x38,0x56,0x36,0x03,0xfe,0x04,0x3d,0x9a,0xf1,0xaa, + 0x15,0xf8,0xf2,0x35,0x67,0x1e,0x22,0x01,0xee,0x3c, + 0x9b,0xfa,0xb0,0x14,0xba,0xfe,0xea,0x10,0x7c,0xb2, + 0x37,0x36,0x2a,0xfe,0x04,0x3b,0xa3,0x70,0x29,0xfe, + 0x3b,0x13,0x00,0x00,0x00,0x05,0x00,0x5e,0xff,0xec, + 0x04,0x5a,0x05,0xcb,0x00,0x07,0x00,0x0b,0x00,0x15, + 0x00,0x1d,0x00,0x27,0x00,0x00,0x12,0x36,0x32,0x16, + 0x10,0x06,0x22,0x26,0x01,0x23,0x01,0x33,0x05,0x22, + 0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10,0x00,0x36, + 0x32,0x16,0x10,0x06,0x22,0x26,0x13,0x22,0x06,0x10, + 0x16,0x33,0x32,0x36,0x35,0x10,0x5e,0x66,0xc7,0x69, + 0x6c,0xc3,0x67,0x01,0x3c,0x58,0x01,0xdb,0x58,0xfd, + 0xb0,0x3a,0x33,0x34,0x3d,0x3b,0x36,0x01,0x2b,0x66, + 0xc6,0x69,0x6c,0xc2,0x67,0xc6,0x3a,0x32,0x33,0x3d, + 0x3b,0x36,0x04,0xe1,0xea,0xe9,0xfe,0x45,0xf2,0xee, + 0xfc,0xdd,0x05,0xb6,0x39,0xb7,0xfe,0x7b,0xb8,0xb9, + 0xc2,0x01,0x79,0xfd,0x1e,0xe6,0xe9,0xfe,0x43,0xef, + 0xf0,0x02,0x57,0xb7,0xfe,0x7b,0xb8,0xb9,0xc2,0x01, + 0x79,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0xff,0xec, + 0x03,0x44,0x05,0xcb,0x00,0x1b,0x00,0x25,0x00,0x2d, + 0x00,0x00,0x05,0x22,0x26,0x10,0x37,0x36,0x37,0x26, + 0x26,0x34,0x36,0x32,0x16,0x10,0x06,0x07,0x13,0x36, + 0x35,0x33,0x14,0x06,0x07,0x13,0x23,0x27,0x06,0x06, + 0x03,0x22,0x06,0x14,0x16,0x17,0x36,0x36,0x35,0x34, + 0x02,0x06,0x14,0x16,0x32,0x36,0x37,0x03,0x01,0x48, + 0x7a,0x8c,0x57,0x2b,0x59,0x4b,0x2c,0x68,0xb5,0x68, + 0x4b,0x59,0xec,0x39,0x5e,0x3a,0x28,0x9c,0x6d,0x62, + 0x4b,0x89,0x3d,0x2e,0x32,0x32,0x26,0x3e,0x33,0xe7, + 0x44,0x5e,0x98,0x76,0x36,0xfe,0x14,0xc5,0x01,0x5f, + 0x7a,0x3e,0x4c,0x8c,0xa7,0xf0,0x94,0x98,0xfe,0xef, + 0xc3,0x59,0xfe,0x5a,0x76,0xaf,0x5d,0xde,0x46,0xfe, + 0xfc,0xb2,0x70,0x56,0x05,0x85,0x67,0xb7,0xc2,0x3f, + 0x3f,0xa8,0x71,0xc7,0xfd,0x02,0x9c,0xfa,0x93,0x5c, + 0x60,0x01,0xc7,0x00,0x00,0x00,0x00,0x01,0x00,0x85, + 0x03,0xa6,0x01,0x00,0x05,0xb6,0x00,0x03,0x00,0x00, + 0x13,0x23,0x03,0x33,0xe3,0x3d,0x21,0x7b,0x03,0xa6, + 0x02,0x10,0x00,0x00,0x00,0x01,0x00,0x68,0xfe,0xbc, + 0x01,0xe1,0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x06, + 0x02,0x10,0x12,0x17,0x23,0x26,0x02,0x10,0x12,0x37, + 0x01,0xe1,0x87,0x89,0x91,0x7d,0x4e,0x90,0x99,0x9c, + 0x8d,0x05,0xb6,0xc8,0xfe,0x33,0xfe,0x1f,0xfe,0x28, + 0xac,0xa8,0x01,0xcc,0x02,0x03,0x01,0xd8,0xab,0x00, + 0x00,0x01,0x00,0x54,0xfe,0xbc,0x01,0xcd,0x05,0xb6, + 0x00,0x0b,0x00,0x00,0x13,0x16,0x12,0x10,0x02,0x07, + 0x23,0x36,0x12,0x10,0x02,0x27,0xa4,0x90,0x99,0x9a, + 0x8f,0x4e,0x80,0x8e,0x8b,0x85,0x05,0xb6,0xab,0xfe, + 0x25,0xfe,0x01,0xfe,0x31,0xa6,0xb5,0x01,0xd6,0x01, + 0xdd,0x01,0xcc,0xc6,0x00,0x00,0x00,0x01,0x00,0x5e, + 0x03,0xcf,0x02,0x8b,0x06,0x14,0x00,0x0e,0x00,0x00, + 0x01,0x37,0x17,0x07,0x17,0x07,0x27,0x07,0x27,0x37, + 0x27,0x37,0x17,0x27,0x33,0x01,0x96,0xe7,0x0e,0xe3, + 0x9c,0x61,0x6c,0x75,0x5c,0x95,0xdd,0x11,0xe5,0x1b, + 0x79,0x05,0x1b,0x39,0x6b,0x08,0xe3,0x2d,0xed,0xef, + 0x2f,0xe3,0x06,0x6b,0x37,0xf9,0x00,0x01,0x00,0x3b, + 0x00,0xfa,0x02,0xf8,0x04,0xae,0x00,0x0b,0x00,0x00, + 0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21, + 0x11,0x33,0x01,0xc3,0x01,0x35,0xfe,0xcb,0x52,0xfe, + 0xca,0x01,0x36,0x52,0x02,0xfc,0x52,0xfe,0x50,0x01, + 0xb0,0x52,0x01,0xb2,0x00,0x01,0x00,0x4e,0xfe,0xf8, + 0x01,0x33,0x00,0xcd,0x00,0x06,0x00,0x00,0x25,0x17, + 0x06,0x07,0x23,0x36,0x37,0x01,0x25,0x0e,0x43,0x63, + 0x3f,0x4a,0x1a,0xcd,0x17,0xe5,0xd9,0xfc,0xd9,0x00, + 0x00,0x01,0x00,0x35,0x01,0xf6,0x01,0xcf,0x02,0x5c, + 0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xcf, + 0xfe,0x66,0x01,0x9a,0x01,0xf6,0x66,0x00,0x00,0x01, + 0x00,0x85,0xff,0xf0,0x01,0x21,0x00,0xc5,0x00,0x06, + 0x00,0x00,0x36,0x32,0x15,0x14,0x06,0x23,0x22,0x85, + 0x9c,0x2b,0x23,0x4e,0xc5,0x6b,0x36,0x34,0x00,0x00, + 0x00,0x01,0x00,0x33,0x00,0x00,0x02,0xa2,0x05,0xb6, + 0x00,0x03,0x00,0x00,0x33,0x23,0x01,0x33,0x98,0x65, + 0x02,0x0f,0x60,0x05,0xb6,0x00,0x00,0x00,0x00,0x02, + 0x00,0x58,0xff,0xec,0x02,0xd9,0x05,0xcb,0x00,0x09, + 0x00,0x11,0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x20, + 0x27,0x26,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x33, + 0x32,0x10,0x01,0x98,0xa5,0x9c,0xa2,0xfe,0xb9,0x4d, + 0x4b,0x01,0x40,0x71,0x69,0x6a,0x70,0xdb,0x05,0xcb, + 0xfe,0x8e,0xfd,0x10,0xfe,0x83,0xb0,0xb1,0x01,0x90, + 0x02,0xee,0x5e,0xfe,0xbe,0xfd,0x65,0xfe,0xba,0x05, + 0x23,0x00,0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00, + 0x02,0x00,0x05,0xb6,0x00,0x0a,0x00,0x00,0x21,0x23, + 0x11,0x34,0x37,0x06,0x07,0x07,0x27,0x01,0x33,0x02, + 0x00,0x60,0x08,0x14,0x4e,0x7d,0x33,0x01,0x1a,0x50, + 0x04,0x33,0x79,0xa2,0x1b,0x4e,0x72,0x3f,0x01,0x04, + 0x00,0x00,0x00,0x01,0x00,0x4a,0x00,0x00,0x02,0xd9, + 0x05,0xcb,0x00,0x1a,0x00,0x00,0x01,0x32,0x16,0x15, + 0x14,0x07,0x06,0x07,0x01,0x15,0x21,0x15,0x21,0x35, + 0x01,0x36,0x36,0x35,0x34,0x26,0x23,0x22,0x06,0x07, + 0x27,0x36,0x36,0x01,0x79,0x97,0xa8,0x5e,0x2c,0x67, + 0xfe,0xf3,0x02,0x1f,0xfd,0x71,0x01,0x27,0x86,0x5f, + 0x7a,0x69,0x43,0x67,0x36,0x35,0x47,0x7e,0x05,0xcb, + 0xbd,0x9f,0xcb,0xc2,0x5f,0x93,0xfe,0x72,0x08,0x5a, + 0x4e,0x01,0xbe,0xcb,0xff,0x99,0x76,0x8c,0x27,0x2b, + 0x4b,0x35,0x2c,0x00,0x00,0x01,0x00,0x4c,0xff,0xec, + 0x02,0xcf,0x05,0xcb,0x00,0x24,0x00,0x00,0x01,0x32, + 0x16,0x15,0x10,0x07,0x15,0x16,0x16,0x15,0x14,0x06, + 0x20,0x27,0x35,0x16,0x33,0x32,0x36,0x10,0x26,0x23, + 0x23,0x35,0x33,0x32,0x37,0x36,0x10,0x26,0x23,0x22, + 0x06,0x07,0x27,0x36,0x36,0x01,0x7d,0x8f,0xac,0xed, + 0x7b,0x89,0xc1,0xfe,0xb3,0x6d,0x7d,0x97,0x7b,0x87, + 0xa0,0x99,0x4a,0x50,0x7f,0x50,0x50,0x71,0x66,0x43, + 0x6f,0x44,0x3d,0x49,0x91,0x05,0xcb,0xbe,0x93,0xfe, + 0xd8,0x54,0x08,0x1b,0xbf,0x91,0xbf,0xe0,0x35,0x6c, + 0x49,0xb1,0x01,0x2e,0xa4,0x5c,0x59,0x5b,0x01,0x0f, + 0x8d,0x2d,0x40,0x40,0x47,0x3e,0x00,0x02,0x00,0x25, + 0x00,0x00,0x03,0x19,0x05,0xc7,0x00,0x0a,0x00,0x11, + 0x00,0x00,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x21, + 0x35,0x01,0x33,0x03,0x11,0x34,0x37,0x23,0x07,0x01, + 0x02,0x7d,0x9c,0x9c,0x60,0xfe,0x08,0x01,0xdf,0x79, + 0x60,0x08,0x06,0x4a,0xfe,0xb4,0x01,0xa6,0x5a,0xfe, + 0xb4,0x01,0x4c,0x54,0x04,0x27,0xfb,0xdf,0x02,0xc2, + 0x73,0x7b,0xbc,0xfd,0x0c,0x00,0x00,0x00,0x00,0x01, + 0x00,0x62,0xff,0xec,0x02,0xd7,0x05,0xb6,0x00,0x18, + 0x00,0x00,0x01,0x21,0x03,0x36,0x33,0x32,0x16,0x15, + 0x14,0x02,0x23,0x22,0x27,0x35,0x16,0x20,0x36,0x10, + 0x26,0x23,0x22,0x07,0x27,0x13,0x21,0x02,0x87,0xfe, + 0x62,0x24,0x5c,0x52,0xa4,0xc0,0xd2,0xaf,0x9c,0x58, + 0x6e,0x01,0x07,0x9c,0x89,0x7d,0x66,0x69,0x31,0x2b, + 0x01,0xef,0x05,0x58,0xfd,0xfe,0x14,0xda,0xbf,0xdd, + 0xfe,0xf8,0x37,0x6e,0x4d,0xda,0x01,0x50,0xa6,0x1e, + 0x3f,0x02,0x81,0x00,0x00,0x00,0x00,0x02,0x00,0x64, + 0xff,0xec,0x02,0xd9,0x05,0xcb,0x00,0x15,0x00,0x1f, + 0x00,0x00,0x01,0x32,0x16,0x10,0x06,0x23,0x22,0x02, + 0x11,0x10,0x21,0x32,0x17,0x15,0x26,0x23,0x22,0x02, + 0x03,0x33,0x36,0x36,0x00,0x26,0x22,0x06,0x14,0x17, + 0x16,0x33,0x32,0x36,0x01,0xb4,0x88,0x9d,0xa6,0x8d, + 0x9d,0xa5,0x01,0xa8,0x4c,0x33,0x39,0x4e,0x90,0xa3, + 0x0a,0x08,0x22,0x77,0x01,0x0d,0x69,0xca,0x79,0x1c, + 0x3a,0x89,0x64,0x69,0x03,0x87,0xf2,0xfe,0x51,0xfa, + 0x01,0x4a,0x01,0x39,0x03,0x5c,0x17,0x60,0x19,0xfe, + 0xb4,0xfe,0xc4,0x4d,0x55,0xfe,0xe8,0xbc,0xa2,0xfc, + 0x6a,0xd9,0xba,0x00,0x00,0x01,0x00,0x39,0x00,0x00, + 0x02,0xec,0x05,0xb6,0x00,0x06,0x00,0x00,0x13,0x35, + 0x21,0x15,0x01,0x23,0x01,0x39,0x02,0xb3,0xfe,0x3d, + 0x66,0x01,0xc6,0x05,0x58,0x5e,0x52,0xfa,0x9c,0x05, + 0x58,0x00,0x00,0x00,0x00,0x03,0x00,0x48,0xff,0xec, + 0x02,0xee,0x05,0xcb,0x00,0x14,0x00,0x1d,0x00,0x28, + 0x00,0x00,0x13,0x34,0x36,0x20,0x17,0x16,0x15,0x14, + 0x07,0x16,0x17,0x16,0x10,0x06,0x20,0x26,0x35,0x34, + 0x36,0x37,0x26,0x00,0x26,0x22,0x06,0x14,0x16,0x17, + 0x36,0x35,0x01,0x06,0x14,0x16,0x32,0x36,0x35,0x34, + 0x27,0x27,0x06,0x6a,0xab,0x01,0x11,0x54,0x55,0xf0, + 0x6c,0x35,0x6e,0xb9,0xfe,0xd7,0xc4,0x6f,0x86,0xd3, + 0x02,0x00,0x6d,0xc1,0x6d,0x5a,0x71,0xd0,0xfe,0x74, + 0x30,0x84,0xd6,0x7f,0xcf,0x31,0x79,0x04,0x77,0x97, + 0xbd,0x5a,0x58,0x9e,0xf3,0x8e,0x49,0x38,0x74,0xfe, + 0xbe,0xd7,0xce,0xa4,0x7f,0xc6,0x57,0xa2,0x01,0x4f, + 0x86,0x87,0xde,0x9a,0x4b,0x7d,0xcf,0xfd,0xbc,0x52, + 0xff,0x98,0x9e,0x8b,0xb3,0x8e,0x21,0x4d,0x00,0x00, + 0x00,0x02,0x00,0x52,0xff,0xec,0x02,0xc7,0x05,0xcb, + 0x00,0x16,0x00,0x20,0x00,0x00,0x01,0x22,0x26,0x10, + 0x36,0x20,0x12,0x11,0x10,0x02,0x23,0x22,0x26,0x27, + 0x35,0x16,0x33,0x32,0x12,0x13,0x23,0x06,0x06,0x03, + 0x22,0x06,0x10,0x16,0x32,0x36,0x10,0x26,0x26,0x01, + 0x77,0x89,0x9c,0xa9,0x01,0x2e,0x9e,0xda,0xd4,0x28, + 0x4f,0x11,0x37,0x59,0x91,0xa7,0x0b,0x08,0x22,0x77, + 0x38,0x64,0x71,0x69,0xca,0x79,0x35,0x60,0x02,0x2f, + 0xf6,0x01,0xab,0xfb,0xfe,0xbf,0xfe,0xd0,0xfe,0x4c, + 0xfe,0x46,0x0e,0x08,0x60,0x18,0x01,0x4f,0x01,0x38, + 0x4d,0x55,0x03,0x3e,0xbd,0xfe,0x97,0xbc,0xa9,0x01, + 0x0b,0xc7,0x67,0x00,0x00,0x00,0x00,0x02,0x00,0x85, + 0xff,0xf0,0x01,0x21,0x04,0x3f,0x00,0x06,0x00,0x0d, + 0x00,0x00,0x12,0x32,0x15,0x14,0x06,0x23,0x22,0x10, + 0x32,0x15,0x14,0x06,0x23,0x22,0x85,0x9c,0x2b,0x23, + 0x4e,0x9c,0x2b,0x23,0x4e,0x04,0x3f,0x6a,0x36,0x35, + 0xfd,0x5b,0x6b,0x36,0x34,0x00,0x00,0x00,0x00,0x02, + 0x00,0x4e,0xfe,0xf8,0x01,0x33,0x04,0x3f,0x00,0x06, + 0x00,0x0d,0x00,0x00,0x12,0x32,0x15,0x14,0x06,0x23, + 0x22,0x13,0x17,0x06,0x07,0x23,0x36,0x37,0x85,0x9c, + 0x2b,0x23,0x4e,0xa0,0x0e,0x43,0x63,0x3f,0x4a,0x1a, + 0x04,0x3f,0x6a,0x36,0x35,0xfd,0x63,0x17,0xe5,0xd9, + 0xfc,0xd9,0x00,0x00,0x00,0x01,0x00,0x3b,0x01,0x1f, + 0x02,0xfa,0x04,0x85,0x00,0x06,0x00,0x00,0x09,0x02, + 0x15,0x01,0x35,0x01,0x02,0xfa,0xfd,0xa8,0x02,0x58, + 0xfd,0x41,0x02,0xbf,0x04,0x21,0xfe,0xb2,0xfe,0xb2, + 0x66,0x01,0x93,0x44,0x01,0x8f,0x00,0x00,0x00,0x02, + 0x00,0x3b,0x01,0xd1,0x02,0xf8,0x03,0xd1,0x00,0x03, + 0x00,0x07,0x00,0x00,0x01,0x21,0x35,0x21,0x11,0x21, + 0x35,0x21,0x02,0xf8,0xfd,0x43,0x02,0xbd,0xfd,0x43, + 0x02,0xbd,0x03,0x7f,0x52,0xfe,0x00,0x52,0x00,0x01, + 0x00,0x39,0x01,0x1f,0x02,0xf8,0x04,0x85,0x00,0x06, + 0x00,0x00,0x01,0x15,0x01,0x35,0x01,0x01,0x35,0x02, + 0xf8,0xfd,0x41,0x02,0x58,0xfd,0xa8,0x02,0xf6,0x44, + 0xfe,0x6d,0x66,0x01,0x4e,0x01,0x4e,0x64,0x00,0x02, + 0x00,0x23,0xff,0xf0,0x02,0x12,0x05,0xcb,0x00,0x19, + 0x00,0x20,0x00,0x00,0x13,0x36,0x32,0x16,0x15,0x14, + 0x06,0x07,0x06,0x06,0x15,0x15,0x23,0x35,0x34,0x36, + 0x37,0x36,0x37,0x36,0x34,0x26,0x23,0x22,0x06,0x07, + 0x13,0x22,0x34,0x32,0x15,0x14,0x06,0x23,0x64,0xff, + 0x8c,0x40,0x5f,0x3c,0x2f,0x4a,0x2a,0x39,0x59,0x19, + 0x1b,0x5a,0x50,0x35,0x4f,0x2e,0x97,0x4d,0x9b,0x2b, + 0x05,0x81,0x4a,0xa6,0x9e,0x7a,0xa5,0x8f,0x5b,0x87, + 0x64,0x24,0x33,0x70,0x97,0x55,0x86,0x4f,0x4f,0xd2, + 0x7d,0x1d,0x1f,0xfa,0xbb,0xd5,0x6b,0x36,0x34,0x00, + 0x00,0x00,0x00,0x02,0x00,0x6f,0xff,0x4c,0x04,0x6a, + 0x05,0xc1,0x00,0x3a,0x00,0x45,0x00,0x00,0x05,0x22, + 0x02,0x11,0x34,0x35,0x10,0x12,0x36,0x33,0x32,0x33, + 0x32,0x16,0x12,0x15,0x10,0x23,0x22,0x26,0x27,0x23, + 0x06,0x06,0x23,0x22,0x26,0x35,0x10,0x21,0x32,0x17, + 0x03,0x15,0x14,0x33,0x32,0x36,0x35,0x34,0x35,0x34, + 0x02,0x26,0x23,0x22,0x23,0x22,0x06,0x02,0x15,0x10, + 0x12,0x33,0x32,0x36,0x37,0x15,0x06,0x03,0x22,0x06, + 0x15,0x10,0x33,0x32,0x36,0x37,0x13,0x26,0x02,0x48, + 0xe6,0xf3,0x85,0xf6,0x9f,0x03,0x03,0x89,0xdd,0x75, + 0xe1,0x51,0x4a,0x02,0x09,0x11,0x4a,0x42,0x58,0x61, + 0x01,0x06,0x56,0x4e,0x14,0x66,0x43,0x3c,0x5f,0xac, + 0x6b,0x02,0x03,0x85,0xce,0x6f,0xce,0xb5,0x43,0x78, + 0x26,0x64,0x42,0x4b,0x4e,0x68,0x2d,0x33,0x09,0x10, + 0x1d,0xb4,0x01,0x85,0x01,0x73,0x08,0x07,0x01,0x05, + 0x01,0x92,0xd7,0xbb,0xfe,0xaf,0xd6,0xfe,0x08,0x68, + 0x67,0x6d,0x62,0xbb,0xaa,0x01,0xd9,0x1d,0xfe,0x23, + 0x3d,0xa8,0xc9,0xd6,0x04,0x04,0xb6,0x01,0x25,0xa0, + 0xc6,0xfe,0x9b,0xe9,0xfe,0xb9,0xfe,0x95,0x26,0x1f, + 0x5e,0x3d,0x04,0x87,0xc9,0xc2,0xfe,0xfe,0xa6,0xae, + 0x01,0x31,0x08,0x00,0x00,0x00,0x00,0x02,0x00,0x00, + 0x00,0x00,0x03,0x2d,0x05,0xb6,0x00,0x07,0x00,0x0e, + 0x00,0x00,0x21,0x23,0x03,0x21,0x03,0x23,0x01,0x33, + 0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x03,0x2d,0x64, + 0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c,0x81, + 0x16,0x09,0x09,0x13,0x7d,0x02,0x12,0xfd,0xee,0x05, + 0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd, + 0xdf,0x00,0x00,0x00,0x00,0x03,0x00,0xa0,0x00,0x00, + 0x03,0x3b,0x05,0xb6,0x00,0x0e,0x00,0x17,0x00,0x1f, + 0x00,0x00,0x13,0x21,0x32,0x16,0x15,0x10,0x07,0x15, + 0x16,0x16,0x15,0x14,0x06,0x23,0x21,0x13,0x11,0x33, + 0x32,0x36,0x35,0x34,0x26,0x23,0x03,0x11,0x33,0x32, + 0x11,0x34,0x26,0x23,0xa0,0x01,0x18,0xad,0xb8,0xd9, + 0x7e,0x79,0xae,0x9d,0xfe,0xb0,0x62,0xb8,0x87,0x77, + 0x82,0x7e,0xb6,0xe1,0xf2,0x8d,0x81,0x05,0xb6,0xb1, + 0xab,0xfe,0xd7,0x2b,0x08,0x1a,0xab,0x99,0xc4,0xdc, + 0x05,0x5c,0xfd,0xcf,0x94,0x9d,0x7c,0x84,0xfd,0x75, + 0xfd,0x89,0x01,0x48,0x92,0x9d,0x00,0x00,0x00,0x01, + 0x00,0x6f,0xff,0xec,0x03,0x29,0x05,0xcd,0x00,0x1d, + 0x00,0x00,0x05,0x22,0x02,0x11,0x34,0x35,0x10,0x12, + 0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x02,0x11,0x14, + 0x15,0x10,0x12,0x33,0x32,0x33,0x32,0x37,0x15,0x06, + 0x23,0x22,0x02,0x37,0xce,0xfa,0xf9,0xd7,0x85,0x65, + 0x2d,0x54,0x6b,0xa6,0xc2,0xc8,0xa4,0x02,0x03,0x70, + 0x54,0x4e,0x7f,0x03,0x14,0x01,0x94,0x01,0x54,0x06, + 0x05,0x01,0x5f,0x01,0x8f,0x3e,0x56,0x36,0xfe,0xa4, + 0xfe,0xca,0x06,0x05,0xfe,0xdc,0xfe,0x9c,0x29,0x5a, + 0x2d,0x00,0x00,0x00,0x00,0x02,0x00,0xa0,0x00,0x00, + 0x03,0x75,0x05,0xb6,0x00,0x07,0x00,0x0f,0x00,0x00, + 0x13,0x21,0x32,0x12,0x11,0x10,0x21,0x21,0x13,0x11, + 0x33,0x20,0x11,0x10,0x02,0x23,0xa0,0x01,0x0a,0xe2, + 0xe9,0xfe,0x2f,0xfe,0xfc,0x62,0x9c,0x01,0x70,0xb7, + 0xb1,0x05,0xb6,0xfe,0x93,0xfe,0xa0,0xfd,0x17,0x05, + 0x5c,0xfa,0xfe,0x02,0x89,0x01,0x36,0x01,0x43,0x00, + 0x00,0x00,0x00,0x01,0x00,0xa0,0x00,0x00,0x02,0xb2, + 0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x21,0x11,0x21, + 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02,0xb2, + 0xfe,0x50,0x01,0x98,0xfe,0x68,0x01,0xb0,0xfd,0xee, + 0x02,0x12,0x05,0x58,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e, + 0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0xa0,0x00,0x00, + 0x02,0xb4,0x05,0xb6,0x00,0x09,0x00,0x00,0x01,0x21, + 0x11,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x02,0xb4, + 0xfe,0x4e,0x01,0x9a,0xfe,0x66,0x62,0x02,0x14,0x05, + 0x58,0xfd,0x94,0x5f,0xfd,0x73,0x05,0xb6,0x00,0x01, + 0x00,0x6f,0xff,0xec,0x03,0xc1,0x05,0xcb,0x00,0x17, + 0x00,0x00,0x01,0x11,0x06,0x23,0x22,0x00,0x10,0x00, + 0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x02,0x10,0x12, + 0x33,0x32,0x37,0x11,0x23,0x35,0x03,0xc1,0xa8,0xb3, + 0xef,0xfe,0xf8,0x01,0x10,0xf8,0xa7,0x92,0x2f,0x89, + 0x81,0xcc,0xd4,0xd4,0xc4,0x8d,0x62,0xdd,0x02,0xe1, + 0xfd,0x4c,0x41,0x01,0x90,0x02,0xc7,0x01,0x88,0x5e, + 0x56,0x58,0xfe,0xb0,0xfd,0x83,0xfe,0xa8,0x25,0x02, + 0x14,0x5e,0x00,0x01,0x00,0xa0,0x00,0x00,0x03,0x62, + 0x05,0xb6,0x00,0x0b,0x00,0x00,0x21,0x23,0x11,0x21, + 0x11,0x23,0x11,0x33,0x11,0x21,0x11,0x33,0x03,0x62, + 0x62,0xfe,0x02,0x62,0x62,0x01,0xfe,0x62,0x02,0xcf, + 0xfd,0x31,0x05,0xb6,0xfd,0x77,0x02,0x89,0x00,0x00, + 0x00,0x01,0x00,0xa0,0x00,0x00,0x01,0x02,0x05,0xb6, + 0x00,0x03,0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x02, + 0x62,0x62,0x05,0xb6,0x00,0x01,0xff,0xa6,0xfe,0x8f, + 0x00,0xf8,0x05,0xb6,0x00,0x0c,0x00,0x00,0x13,0x11, + 0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x35, + 0x11,0xf8,0x70,0x6d,0x44,0x31,0x33,0x80,0x3d,0x05, + 0xb6,0xfa,0x33,0xab,0xaf,0x19,0x5c,0x14,0x75,0x82, + 0x05,0xcf,0x00,0x01,0x00,0xa0,0x00,0x00,0x03,0x39, + 0x05,0xb6,0x00,0x0c,0x00,0x00,0x21,0x23,0x11,0x33, + 0x11,0x36,0x01,0x33,0x01,0x01,0x23,0x01,0x07,0x01, + 0x02,0x62,0x62,0x33,0x01,0x7d,0x6b,0xfe,0x91,0x01, + 0x8b,0x6e,0xfe,0xa8,0x71,0x05,0xb6,0xfc,0xfa,0x60, + 0x02,0xa6,0xfd,0x7d,0xfc,0xcd,0x02,0xd9,0x95,0x00, + 0x00,0x00,0x00,0x01,0x00,0xa0,0x00,0x00,0x02,0x9e, + 0x05,0xb6,0x00,0x05,0x00,0x00,0x25,0x21,0x15,0x21, + 0x11,0x33,0x01,0x02,0x01,0x9c,0xfe,0x02,0x62,0x5e, + 0x5e,0x05,0xb6,0x00,0x00,0x01,0x00,0xa0,0x00,0x00, + 0x04,0xd3,0x05,0xb6,0x00,0x17,0x00,0x00,0x21,0x23, + 0x11,0x34,0x37,0x23,0x01,0x23,0x01,0x23,0x16,0x15, + 0x11,0x23,0x11,0x33,0x01,0x16,0x17,0x33,0x36,0x37, + 0x01,0x33,0x04,0xd3,0x62,0x0a,0x08,0xfe,0x7d,0x6f, + 0xfe,0x7b,0x08,0x0a,0x5e,0x91,0x01,0x48,0x2b,0x0e, + 0x08,0x0c,0x32,0x01,0x45,0x96,0x04,0x21,0x48,0xc8, + 0xfa,0xcf,0x05,0x33,0xc8,0x42,0xfb,0xd7,0x05,0xb6, + 0xfb,0xa2,0x94,0x68,0x52,0xa8,0x04,0x60,0x00,0x01, + 0x00,0xa0,0x00,0x00,0x03,0xa2,0x05,0xb6,0x00,0x0f, + 0x00,0x00,0x21,0x23,0x01,0x23,0x16,0x15,0x11,0x23, + 0x11,0x33,0x01,0x33,0x26,0x35,0x11,0x33,0x03,0xa2, + 0x7d,0xfd,0xd7,0x08,0x0c,0x60,0x7f,0x02,0x25,0x06, + 0x08,0x60,0x05,0x1f,0x89,0x7d,0xfb,0xe7,0x05,0xb6, + 0xfa,0xf0,0xae,0x64,0x03,0xfe,0x00,0x00,0x00,0x02, + 0x00,0x6f,0xff,0xec,0x03,0xba,0x05,0xcb,0x00,0x09, + 0x00,0x11,0x00,0x00,0x01,0x32,0x17,0x16,0x10,0x02, + 0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02,0x10,0x12, + 0x20,0x12,0x02,0x17,0xcd,0x6a,0x6c,0xd9,0xfe,0x63, + 0xd5,0x02,0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a, + 0xa2,0x05,0xcb,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01, + 0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe, + 0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x02, + 0x00,0xa0,0x00,0x00,0x03,0x04,0x05,0xb6,0x00,0x09, + 0x00,0x11,0x00,0x00,0x13,0x33,0x32,0x16,0x10,0x06, + 0x23,0x23,0x11,0x23,0x13,0x11,0x33,0x32,0x36,0x10, + 0x26,0x23,0xa0,0xc8,0xd6,0xc6,0xcd,0xcd,0x68,0x62, + 0x62,0x62,0xac,0x90,0x93,0x9e,0x05,0xb6,0xca,0xfe, + 0x46,0xd6,0xfd,0xa4,0x05,0x5c,0xfd,0x5a,0xa2,0x01, + 0x69,0x9b,0x00,0x02,0x00,0x6f,0xfe,0xa4,0x03,0xba, + 0x05,0xcb,0x00,0x0f,0x00,0x17,0x00,0x00,0x13,0x10, + 0x21,0x32,0x17,0x16,0x11,0x10,0x02,0x07,0x13,0x23, + 0x03,0x07,0x22,0x02,0x00,0x02,0x20,0x02,0x10,0x12, + 0x20,0x12,0x6f,0x01,0xa8,0xcd,0x6a,0x6c,0x8d,0x85, + 0xd5,0x7d,0xba,0x32,0xd0,0xd5,0x02,0xe5,0xa0,0xfe, + 0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x02,0xdf,0x02,0xec, + 0xc3,0xc2,0xfe,0x97,0xfe,0xde,0xfe,0x8d,0x3e,0xfe, + 0x9a,0x01,0x4c,0x04,0x01,0x89,0x02,0xad,0x01,0x4b, + 0xfe,0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x02, + 0x00,0xa0,0x00,0x00,0x03,0x3b,0x05,0xb6,0x00,0x0d, + 0x00,0x15,0x00,0x00,0x13,0x33,0x32,0x16,0x15,0x14, + 0x06,0x07,0x01,0x23,0x01,0x23,0x11,0x23,0x13,0x11, + 0x33,0x32,0x36,0x10,0x26,0x23,0xa0,0xc8,0xd4,0xc8, + 0x6f,0x7c,0x01,0x22,0x6e,0xfe,0xef,0xba,0x62,0x62, + 0x89,0x86,0x8f,0x92,0x9f,0x05,0xb6,0xc8,0xcb,0x9c, + 0xc1,0x30,0xfd,0x6a,0x02,0x7f,0xfd,0x81,0x05,0x56, + 0xfd,0x83,0xa5,0x01,0x45,0x93,0x00,0x00,0x00,0x01, + 0x00,0x56,0xff,0xec,0x02,0xd1,0x05,0xcb,0x00,0x25, + 0x00,0x00,0x25,0x32,0x36,0x34,0x26,0x27,0x2e,0x02, + 0x35,0x34,0x35,0x34,0x36,0x33,0x32,0x33,0x32,0x17, + 0x07,0x26,0x22,0x06,0x14,0x16,0x17,0x16,0x16,0x15, + 0x14,0x07,0x06,0x23,0x22,0x27,0x35,0x16,0x16,0x01, + 0x6f,0x70,0x90,0x67,0x8f,0x72,0x6f,0x36,0xc3,0x8c, + 0x02,0x03,0x9a,0x6e,0x26,0x6f,0xdf,0x87,0x63,0x8e, + 0x94,0x89,0x64,0x65,0x99,0xaf,0x6a,0x38,0x98,0x4a, + 0xaa,0xfc,0x8f,0x46,0x3a,0x6a,0x8d,0x64,0x06,0x06, + 0x97,0xce,0x3c,0x5e,0x39,0x93,0xf5,0x86,0x4a,0x48, + 0xc1,0x8a,0xb4,0x70,0x6f,0x33,0x6a,0x1e,0x21,0x00, + 0x00,0x01,0x00,0x0e,0x00,0x00,0x02,0xb6,0x05,0xb6, + 0x00,0x07,0x00,0x00,0x01,0x21,0x11,0x23,0x11,0x21, + 0x35,0x21,0x02,0xb6,0xfe,0xdd,0x62,0xfe,0xdd,0x02, + 0xa8,0x05,0x58,0xfa,0xa8,0x05,0x58,0x5e,0x00,0x00, + 0x00,0x01,0x00,0x93,0xff,0xec,0x03,0x60,0x05,0xb6, + 0x00,0x0f,0x00,0x00,0x01,0x11,0x10,0x21,0x22,0x26, + 0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36,0x35,0x11, + 0x03,0x60,0xfe,0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82, + 0x05,0xb6,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03,0xdb, + 0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x03,0x1f,0x05,0xb6, + 0x00,0x0b,0x00,0x00,0x21,0x23,0x01,0x33,0x13,0x16, + 0x16,0x17,0x36,0x37,0x01,0x33,0x01,0xc5,0x6d,0xfe, + 0xa8,0x66,0xee,0x1b,0x13,0x09,0x15,0x0d,0x01,0x0d, + 0x65,0x05,0xb6,0xfb,0xfc,0x70,0x76,0x53,0x95,0x3b, + 0x04,0x6d,0x00,0x01,0x00,0x0a,0x00,0x00,0x05,0x68, + 0x05,0xb6,0x00,0x18,0x00,0x00,0x21,0x23,0x03,0x26, + 0x27,0x07,0x03,0x23,0x01,0x33,0x13,0x16,0x17,0x36, + 0x37,0x13,0x33,0x13,0x16,0x17,0x17,0x36,0x37,0x13, + 0x33,0x04,0x31,0x77,0xdf,0x07,0x1c,0x25,0xdb,0x74, + 0xfe,0xc6,0x67,0xce,0x31,0x0d,0x16,0x23,0xcd,0x6f, + 0xcc,0x22,0x0c,0x0a,0x1c,0x1d,0xd5,0x64,0x04,0x46, + 0x20,0xcf,0xed,0xfb,0xb8,0x05,0xb6,0xfc,0x11,0xfe, + 0x5a,0x9f,0xb5,0x03,0xf3,0xfc,0x11,0xb3,0x5b,0x4a, + 0xd1,0x87,0x03,0xef,0x00,0x01,0x00,0x14,0x00,0x00, + 0x02,0xb6,0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x01, + 0x23,0x03,0x03,0x23,0x01,0x01,0x33,0x13,0x13,0x33, + 0x01,0xb4,0x01,0x02,0x66,0xdb,0xfe,0x63,0x01,0x32, + 0xfe,0xf9,0x67,0xd9,0xd3,0x64,0x02,0xf2,0xfd,0x0e, + 0x02,0xa0,0xfd,0x60,0x03,0x08,0x02,0xae,0xfd,0xa0, + 0x02,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x02,0xae,0x05,0xb6,0x00,0x08,0x00,0x00,0x21,0x23, + 0x11,0x01,0x33,0x13,0x13,0x33,0x01,0x01,0x87,0x62, + 0xfe,0xdb,0x68,0xf0,0xee,0x68,0xfe,0xd9,0x02,0x3b, + 0x03,0x7b,0xfd,0x0d,0x02,0xf3,0xfc,0x85,0x00,0x01, + 0x00,0x39,0x00,0x00,0x02,0x5a,0x05,0xb6,0x00,0x09, + 0x00,0x00,0x25,0x15,0x21,0x35,0x01,0x21,0x35,0x21, + 0x15,0x01,0x02,0x5a,0xfd,0xdf,0x01,0xa8,0xfe,0x5e, + 0x02,0x0f,0xfe,0x52,0x5e,0x5e,0x58,0x04,0xfe,0x60, + 0x5a,0xfb,0x02,0x00,0x00,0x00,0x00,0x01,0x00,0xae, + 0xfe,0xbc,0x02,0x3b,0x05,0xb6,0x00,0x07,0x00,0x00, + 0x01,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02,0x3b, + 0xfe,0xd1,0x01,0x2f,0xfe,0x73,0x01,0x8d,0x05,0x5c, + 0xf9,0xbb,0x5b,0x06,0xfa,0x00,0x00,0x01,0x00,0x33, + 0x00,0x00,0x02,0xa2,0x05,0xb6,0x00,0x03,0x00,0x00, + 0x21,0x23,0x01,0x33,0x02,0xa2,0x65,0xfd,0xf6,0x60, + 0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0x4a,0xfe,0xbc, + 0x01,0xd7,0x05,0xb6,0x00,0x07,0x00,0x00,0x01,0x21, + 0x35,0x21,0x11,0x21,0x35,0x21,0x01,0xd7,0xfe,0x73, + 0x01,0x2f,0xfe,0xd1,0x01,0x8d,0xfe,0xbc,0x5b,0x06, + 0x45,0x5a,0x00,0x00,0x00,0x01,0x00,0x25,0x02,0xf6, + 0x03,0x0e,0x05,0xb4,0x00,0x06,0x00,0x00,0x01,0x23, + 0x01,0x01,0x23,0x01,0x33,0x03,0x0e,0x66,0xfe,0xf2, + 0xfe,0xef,0x64,0x01,0x52,0x43,0x02,0xf6,0x02,0x4e, + 0xfd,0xb2,0x02,0xbe,0x00,0x01,0xff,0xfc,0xfe,0xf6, + 0x03,0x4e,0xff,0x48,0x00,0x03,0x00,0x00,0x01,0x21, + 0x35,0x21,0x03,0x4e,0xfc,0xae,0x03,0x52,0xfe,0xf6, + 0x52,0x00,0x00,0x01,0x01,0xb2,0x04,0xd9,0x02,0xee, + 0x06,0x21,0x00,0x09,0x00,0x00,0x01,0x33,0x16,0x16, + 0x17,0x15,0x23,0x26,0x26,0x27,0x01,0xb2,0x7d,0x1d, + 0x6a,0x38,0x30,0x3f,0xa8,0x25,0x06,0x21,0x43,0xaa, + 0x46,0x15,0x33,0xbf,0x45,0x00,0x00,0x02,0x00,0x4e, + 0xff,0xec,0x02,0x83,0x04,0x52,0x00,0x16,0x00,0x20, + 0x00,0x00,0x13,0x36,0x20,0x16,0x15,0x11,0x23,0x27, + 0x23,0x06,0x23,0x22,0x27,0x26,0x10,0x36,0x37,0x37, + 0x35,0x34,0x26,0x22,0x07,0x03,0x14,0x16,0x33,0x32, + 0x36,0x35,0x35,0x07,0x04,0x9a,0x70,0x01,0x04,0x75, + 0x4e,0x0c,0x04,0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8, + 0x75,0x4d,0xb4,0x61,0x11,0x52,0x4a,0x66,0x71,0x71, + 0xfe,0xfe,0x04,0x0c,0x46,0xaa,0xc5,0xfd,0x1d,0x98, + 0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a,0x99, + 0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71,0x06, + 0x0d,0x00,0x00,0x00,0x00,0x02,0x00,0x91,0xff,0xec, + 0x03,0x1f,0x06,0x14,0x00,0x11,0x00,0x1b,0x00,0x00, + 0x01,0x20,0x11,0x10,0x02,0x23,0x22,0x26,0x27,0x23, + 0x07,0x23,0x11,0x33,0x11,0x07,0x33,0x36,0x03,0x15, + 0x10,0x33,0x32,0x36,0x10,0x26,0x22,0x06,0x01,0xe1, + 0x01,0x3e,0x9e,0x95,0x4f,0x7f,0x2a,0x08,0x0d,0x4e, + 0x5f,0x04,0x08,0x56,0x5a,0xf1,0x6f,0x6c,0x6b,0xf1, + 0x70,0x04,0x50,0xfd,0xd1,0xfe,0xec,0xfe,0xdf,0x57, + 0x53,0x96,0x06,0x14,0xfe,0x1d,0x83,0xa2,0xfd,0xd1, + 0x19,0xfe,0x3a,0xeb,0x01,0xe2,0xe9,0xdc,0x00,0x00, + 0x00,0x01,0x00,0x60,0xff,0xec,0x02,0x52,0x04,0x52, + 0x00,0x12,0x00,0x00,0x05,0x22,0x02,0x10,0x12,0x33, + 0x32,0x17,0x07,0x26,0x23,0x22,0x10,0x33,0x32,0x37, + 0x15,0x06,0x06,0x01,0xa8,0xa2,0xa6,0xa8,0xa2,0x65, + 0x43,0x25,0x42,0x39,0xef,0xef,0x46,0x54,0x1f,0x60, + 0x14,0x01,0x1b,0x02,0x29,0x01,0x22,0x25,0x54,0x1f, + 0xfc,0x4a,0x20,0x50,0x11,0x15,0x00,0x00,0x00,0x02, + 0x00,0x5e,0xff,0xec,0x02,0xec,0x06,0x14,0x00,0x11, + 0x00,0x1b,0x00,0x00,0x21,0x23,0x27,0x23,0x06,0x23, + 0x20,0x11,0x10,0x12,0x33,0x32,0x16,0x17,0x33,0x27, + 0x11,0x33,0x03,0x35,0x34,0x26,0x22,0x06,0x10,0x16, + 0x32,0x36,0x02,0xec,0x4e,0x08,0x09,0x51,0xa2,0xfe, + 0xc4,0x9f,0x99,0x49,0x83,0x27,0x08,0x04,0x5f,0x5f, + 0x76,0xed,0x69,0x6c,0xe6,0x7a,0x98,0xac,0x02,0x31, + 0x01,0x15,0x01,0x20,0x54,0x4a,0x79,0x01,0xe7,0xfb, + 0xcb,0x3e,0xf5,0xe6,0xef,0xfe,0x24,0xee,0xd4,0x00, + 0x00,0x02,0x00,0x60,0xff,0xec,0x02,0xc3,0x04,0x52, + 0x00,0x11,0x00,0x17,0x00,0x00,0x05,0x22,0x27,0x26, + 0x10,0x12,0x33,0x32,0x12,0x15,0x15,0x21,0x12,0x21, + 0x32,0x37,0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03, + 0x01,0xc5,0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd, + 0xfe,0x04,0x01,0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d, + 0xc4,0x13,0x14,0x92,0x94,0x02,0x1b,0x01,0x25,0xff, + 0x00,0xdb,0x58,0xfe,0x27,0x43,0x5c,0x41,0x02,0x89, + 0xb3,0xd4,0xfe,0x79,0x00,0x01,0x00,0x14,0x00,0x00, + 0x01,0xf8,0x06,0x1f,0x00,0x15,0x00,0x00,0x13,0x34, + 0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x06,0x06,0x07, + 0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x23,0x35,0x37, + 0x9e,0x62,0x79,0x47,0x38,0x21,0x33,0x2d,0x48,0x31, + 0x02,0xaa,0xaa,0x5e,0x8a,0x8a,0x04,0x9a,0xcf,0xb6, + 0x19,0x58,0x19,0x03,0x7d,0xaf,0x5b,0x54,0xfc,0x17, + 0x03,0xe9,0x36,0x29,0x00,0x00,0x00,0x03,0x00,0x23, + 0xfe,0x14,0x02,0xdb,0x04,0x52,0x00,0x28,0x00,0x31, + 0x00,0x3d,0x00,0x00,0x25,0x33,0x32,0x16,0x15,0x14, + 0x06,0x23,0x22,0x26,0x35,0x34,0x37,0x26,0x35,0x34, + 0x36,0x37,0x26,0x26,0x35,0x34,0x36,0x33,0x32,0x17, + 0x33,0x15,0x07,0x16,0x16,0x15,0x14,0x06,0x23,0x23, + 0x27,0x06,0x06,0x14,0x16,0x12,0x26,0x22,0x06,0x10, + 0x16,0x33,0x32,0x11,0x03,0x23,0x22,0x06,0x14,0x16, + 0x33,0x32,0x36,0x35,0x34,0x26,0x01,0x66,0x44,0x92, + 0x9f,0xd7,0xb0,0x93,0x9e,0xd7,0x6f,0x3c,0x41,0x52, + 0x56,0x92,0x7f,0x43,0x2f,0xe6,0x94,0x1d,0x27,0x8f, + 0x75,0x18,0x15,0x34,0x33,0x48,0xf4,0x5a,0xab,0x5c, + 0x60,0x53,0xae,0x73,0x46,0x62,0x81,0x6d,0x6a,0x87, + 0x9c,0x6b,0x91,0x97,0x8d,0x9f,0xba,0x95,0x8c,0xd0, + 0x51,0x30,0x6a,0x2e,0x4c,0x30,0x26,0xa8,0x75,0xad, + 0xc8,0x15,0x43,0x11,0x26,0x90,0x4e,0x9f,0xc3,0x02, + 0x25,0x43,0x58,0x34,0x02,0xdc,0x97,0x9b,0xfe,0xf0, + 0x8c,0x01,0x18,0xfd,0x50,0x88,0xd9,0x72,0x8c,0x7a, + 0x63,0x6a,0x00,0x01,0x00,0x91,0x00,0x00,0x02,0xd9, + 0x06,0x14,0x00,0x17,0x00,0x00,0x13,0x11,0x14,0x07, + 0x33,0x36,0x37,0x36,0x33,0x32,0x16,0x15,0x11,0x23, + 0x11,0x34,0x26,0x23,0x22,0x06,0x15,0x11,0x23,0x11, + 0xf0,0x04,0x08,0x20,0x40,0x40,0x47,0x87,0x77,0x5e, + 0x4c,0x58,0x74,0x73,0x5f,0x06,0x14,0xfe,0x07,0x4a, + 0x29,0x52,0x2b,0x2d,0xb0,0xb6,0xfd,0x14,0x02,0xec, + 0x92,0x7c,0xcf,0xd9,0xfd,0xae,0x06,0x14,0x00,0x02, + 0x00,0x83,0x00,0x00,0x01,0x00,0x05,0xc9,0x00,0x07, + 0x00,0x0b,0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x13,0x23,0x11,0x33,0x83,0x24,0x39,0x20, + 0x20,0x38,0x25,0x6d,0x5f,0x5f,0x05,0x96,0x33,0x32, + 0x58,0x33,0x34,0xfa,0xc0,0x04,0x3d,0x00,0x00,0x00, + 0x00,0x02,0xff,0xfc,0xfe,0x14,0x01,0x00,0x05,0xc9, + 0x00,0x07,0x00,0x15,0x00,0x00,0x12,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x13,0x11,0x14,0x06,0x23,0x22, + 0x27,0x35,0x16,0x33,0x32,0x36,0x35,0x11,0x83,0x24, + 0x39,0x20,0x20,0x38,0x25,0x6d,0x56,0x5b,0x29,0x1a, + 0x1f,0x20,0x2e,0x28,0x05,0x96,0x33,0x32,0x58,0x33, + 0x34,0xfe,0xfd,0xfa,0xfa,0x95,0x8e,0x11,0x5a,0x10, + 0x59,0x61,0x05,0x14,0x00,0x00,0x00,0x01,0x00,0x91, + 0x00,0x00,0x02,0xb8,0x06,0x14,0x00,0x0e,0x00,0x00, + 0x33,0x23,0x11,0x33,0x11,0x07,0x33,0x37,0x01,0x33, + 0x03,0x01,0x23,0x03,0x07,0xf0,0x5f,0x5f,0x07,0x09, + 0x3d,0x01,0x0c,0x67,0xfa,0x01,0x10,0x64,0xec,0x78, + 0x06,0x14,0xfc,0xbb,0xb6,0x6e,0x01,0xb6,0xfe,0x71, + 0xfd,0x52,0x02,0x56,0x9e,0x00,0x00,0x01,0x00,0x91, + 0x00,0x00,0x00,0xf0,0x06,0x14,0x00,0x03,0x00,0x00, + 0x33,0x23,0x11,0x33,0xf0,0x5f,0x5f,0x06,0x14,0x00, + 0x00,0x01,0x00,0x91,0x00,0x00,0x04,0x89,0x04,0x52, + 0x00,0x20,0x00,0x00,0x01,0x32,0x17,0x36,0x36,0x33, + 0x32,0x16,0x15,0x11,0x23,0x11,0x10,0x23,0x22,0x06, + 0x15,0x11,0x23,0x11,0x34,0x26,0x23,0x22,0x06,0x15, + 0x11,0x23,0x11,0x33,0x17,0x33,0x36,0x01,0xcf,0xaa, + 0x2f,0x27,0x72,0x5b,0x7b,0x72,0x5e,0xa0,0x6c,0x63, + 0x5e,0x4e,0x52,0x6b,0x63,0x5f,0x50,0x08,0x09,0x40, + 0x04,0x52,0xbc,0x64,0x58,0xbe,0xcf,0xfd,0x3b,0x02, + 0xe3,0x01,0x11,0xbb,0xbe,0xfd,0x85,0x02,0xe3,0x8a, + 0x87,0xc3,0xdd,0xfd,0xac,0x04,0x3d,0x97,0xac,0x00, + 0x00,0x01,0x00,0x91,0x00,0x00,0x02,0xd9,0x04,0x52, + 0x00,0x13,0x00,0x00,0x01,0x32,0x16,0x15,0x11,0x23, + 0x11,0x10,0x23,0x22,0x06,0x15,0x11,0x23,0x11,0x33, + 0x17,0x33,0x36,0x36,0x01,0xdd,0x80,0x7c,0x5e,0xa0, + 0x7a,0x71,0x5f,0x50,0x08,0x09,0x21,0x80,0x04,0x52, + 0xab,0xb9,0xfd,0x12,0x02,0xec,0x01,0x0e,0xca,0xdc, + 0xfd,0xac,0x04,0x3d,0x97,0x50,0x5c,0x00,0x00,0x02, + 0x00,0x5e,0xff,0xec,0x02,0xf4,0x04,0x52,0x00,0x08, + 0x00,0x10,0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x20, + 0x02,0x11,0x10,0x05,0x22,0x06,0x15,0x10,0x33,0x32, + 0x10,0x01,0xaa,0x9c,0xae,0xad,0xfe,0xc0,0xa9,0x01, + 0x4a,0x78,0x6f,0xe7,0xe9,0x04,0x52,0xfe,0xda,0xfd, + 0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02,0x31,0x5a, + 0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x02,0x00,0x91, + 0xfe,0x14,0x03,0x1f,0x04,0x52,0x00,0x12,0x00,0x1c, + 0x00,0x00,0x01,0x20,0x11,0x10,0x02,0x23,0x22,0x26, + 0x27,0x23,0x17,0x11,0x23,0x11,0x33,0x17,0x33,0x36, + 0x36,0x03,0x15,0x14,0x16,0x32,0x36,0x10,0x26,0x22, + 0x06,0x01,0xe1,0x01,0x3e,0x9d,0x94,0x52,0x87,0x23, + 0x09,0x07,0x5f,0x4e,0x0a,0x09,0x28,0x7d,0xa7,0x76, + 0xe9,0x6d,0x69,0xf0,0x73,0x04,0x52,0xfd,0xcf,0xfe, + 0xf0,0xfe,0xdb,0x5b,0x4f,0x77,0xfd,0xf5,0x06,0x29, + 0x95,0x52,0x58,0xfd,0xf4,0x1f,0xf9,0xec,0xea,0x01, + 0xe6,0xe6,0xd3,0x00,0x00,0x00,0x00,0x02,0x00,0x5e, + 0xfe,0x14,0x02,0xec,0x04,0x52,0x00,0x10,0x00,0x1a, + 0x00,0x00,0x25,0x06,0x23,0x20,0x11,0x10,0x12,0x20, + 0x17,0x33,0x37,0x33,0x11,0x23,0x11,0x34,0x37,0x03, + 0x35,0x34,0x26,0x22,0x06,0x10,0x16,0x32,0x36,0x02, + 0x8d,0x55,0x9e,0xfe,0xc4,0xa5,0x01,0x34,0x52,0x08, + 0x0f,0x4c,0x5f,0x09,0x09,0x76,0xed,0x69,0x6d,0xe6, + 0x79,0x9e,0xb2,0x02,0x31,0x01,0x1a,0x01,0x1b,0xa6, + 0x91,0xf9,0xd7,0x01,0xd5,0x43,0x72,0x01,0x4e,0x31, + 0xf5,0xe6,0xef,0xfe,0x1a,0xe1,0xda,0x00,0x00,0x01, + 0x00,0x91,0x00,0x00,0x02,0x1d,0x04,0x52,0x00,0x14, + 0x00,0x00,0x01,0x32,0x17,0x07,0x26,0x23,0x22,0x23, + 0x22,0x06,0x06,0x15,0x14,0x15,0x11,0x23,0x11,0x33, + 0x17,0x33,0x36,0x01,0xbe,0x32,0x2d,0x17,0x24,0x26, + 0x03,0x02,0x33,0x5d,0x37,0x5f,0x4e,0x0a,0x07,0x4c, + 0x04,0x52,0x0e,0x5f,0x0f,0x71,0xc9,0x73,0x04,0x04, + 0xfd,0xc1,0x04,0x3d,0xbe,0xd3,0x00,0x01,0x00,0x4a, + 0xff,0xec,0x02,0x3d,0x04,0x52,0x00,0x1f,0x00,0x00, + 0x25,0x32,0x36,0x35,0x34,0x2e,0x03,0x35,0x34,0x36, + 0x32,0x17,0x07,0x26,0x22,0x06,0x14,0x17,0x16,0x17, + 0x16,0x17,0x16,0x10,0x06,0x20,0x27,0x35,0x16,0x16, + 0x01,0x29,0x54,0x60,0x47,0xd1,0x4f,0x2c,0x9f,0xfb, + 0x59,0x31,0x52,0xb0,0x64,0x22,0x22,0x6e,0x6b,0x28, + 0x50,0x91,0xfe,0xf1,0x51,0x25,0x7a,0x46,0x6d,0x5d, + 0x47,0x66,0x85,0x52,0x67,0x49,0x75,0x99,0x3e,0x53, + 0x37,0x63,0x99,0x31,0x30,0x45,0x46,0x2a,0x56,0xfe, + 0xf6,0x9a,0x3d,0x6f,0x25,0x2d,0x00,0x01,0x00,0x2b, + 0xff,0xec,0x01,0xa6,0x05,0x3f,0x00,0x14,0x00,0x00, + 0x13,0x33,0x15,0x23,0x11,0x14,0x16,0x33,0x32,0x37, + 0x15,0x06,0x23,0x22,0x35,0x11,0x23,0x35,0x37,0x13, + 0x33,0xec,0xac,0xac,0x30,0x3c,0x2c,0x22,0x2d,0x44, + 0xa8,0x62,0x60,0x1f,0x42,0x04,0x3d,0x54,0xfd,0x19, + 0x6e,0x50,0x0c,0x50,0x14,0xfb,0x03,0x02,0x38,0x1c, + 0x01,0x02,0x00,0x00,0x00,0x01,0x00,0x8d,0xff,0xec, + 0x02,0xd5,0x04,0x3d,0x00,0x15,0x00,0x00,0x21,0x23, + 0x27,0x23,0x06,0x06,0x23,0x22,0x27,0x26,0x35,0x11, + 0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33, + 0x02,0xd5,0x50,0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d, + 0x3c,0x5f,0x4c,0x51,0x7c,0x72,0x5e,0x98,0x52,0x5a, + 0x5d,0x5d,0xd3,0x02,0xc4,0xfd,0x3c,0xa0,0x95,0xc8, + 0xdd,0x02,0x54,0x00,0x00,0x00,0x00,0x01,0x00,0x0a, + 0x00,0x00,0x02,0x83,0x04,0x3d,0x00,0x0b,0x00,0x00, + 0x21,0x23,0x01,0x33,0x13,0x16,0x17,0x33,0x36,0x36, + 0x13,0x33,0x01,0x7b,0x71,0xff,0x00,0x60,0xa2,0x1c, + 0x1a,0x08,0x09,0x20,0xb0,0x60,0x04,0x3d,0xfd,0x46, + 0x79,0x8f,0x40,0x9a,0x02,0xe8,0x00,0x00,0x00,0x01, + 0x00,0x14,0x00,0x00,0x04,0x50,0x04,0x3d,0x00,0x1a, + 0x00,0x00,0x21,0x23,0x03,0x27,0x27,0x23,0x07,0x07, + 0x03,0x23,0x03,0x33,0x13,0x13,0x33,0x36,0x37,0x13, + 0x33,0x13,0x16,0x13,0x33,0x36,0x36,0x13,0x33,0x03, + 0x5c,0x70,0x96,0x04,0x1f,0x02,0x0e,0x17,0x9b,0x71, + 0xec,0x5f,0x87,0x3f,0x06,0x13,0x27,0x87,0x64,0x88, + 0x10,0x29,0x06,0x02,0x2c,0x99,0x5e,0x02,0xdf,0x11, + 0xc0,0x55,0x7c,0xfd,0x21,0x04,0x3d,0xfd,0x88,0xfe, + 0xb6,0x95,0xb7,0x02,0x76,0xfd,0x88,0x47,0xfe,0xfd, + 0x1b,0xe1,0x02,0xc6,0x00,0x01,0x00,0x23,0x00,0x00, + 0x02,0x81,0x04,0x3d,0x00,0x0b,0x00,0x00,0x01,0x13, + 0x23,0x03,0x03,0x23,0x01,0x03,0x33,0x13,0x13,0x33, + 0x01,0x83,0xfe,0x64,0xcb,0xcd,0x62,0x01,0x02,0xee, + 0x67,0xb6,0xbe,0x63,0x02,0x27,0xfd,0xd9,0x01,0xd5, + 0xfe,0x2b,0x02,0x33,0x02,0x0a,0xfe,0x48,0x01,0xb8, + 0x00,0x01,0xff,0xfe,0xfe,0x14,0x02,0x83,0x04,0x3d, + 0x00,0x16,0x00,0x00,0x13,0x22,0x27,0x35,0x16,0x33, + 0x32,0x36,0x37,0x37,0x01,0x33,0x13,0x16,0x17,0x33, + 0x36,0x37,0x13,0x33,0x01,0x06,0x06,0x54,0x25,0x31, + 0x2a,0x24,0x3b,0x46,0x1c,0x30,0xfe,0xf1,0x60,0xa4, + 0x1e,0x1a,0x08,0x15,0x20,0xa0,0x60,0xfe,0xc3,0x24, + 0x72,0xfe,0x14,0x11,0x56,0x0e,0x65,0x74,0xbc,0x04, + 0x3b,0xfd,0x5b,0x81,0x92,0x8f,0x86,0x02,0xa3,0xfa, + 0xf6,0x93,0x8c,0x00,0x00,0x01,0x00,0x3b,0x00,0x00, + 0x01,0xee,0x04,0x3d,0x00,0x09,0x00,0x00,0x25,0x15, + 0x21,0x35,0x01,0x21,0x35,0x21,0x15,0x01,0x01,0xee, + 0xfe,0x4d,0x01,0x40,0xfe,0xd5,0x01,0x8f,0xfe,0xc1, + 0x54,0x54,0x4c,0x03,0x9d,0x54,0x4d,0xfc,0x64,0x00, + 0x00,0x00,0x00,0x01,0x00,0x6d,0xfe,0xbc,0x02,0x79, + 0x05,0xb6,0x00,0x21,0x00,0x00,0x01,0x11,0x14,0x06, + 0x07,0x15,0x16,0x16,0x15,0x11,0x14,0x16,0x17,0x15, + 0x26,0x26,0x35,0x11,0x34,0x26,0x26,0x23,0x35,0x32, + 0x37,0x36,0x35,0x11,0x34,0x36,0x37,0x15,0x06,0x06, + 0x01,0x9e,0x5b,0x68,0x6a,0x59,0x6b,0x70,0x97,0xa7, + 0x26,0x59,0x4f,0x92,0x28,0x14,0xa8,0x96,0x70,0x6b, + 0x04,0x7b,0xfe,0xc4,0x7a,0x74,0x14,0x08,0x13,0x77, + 0x78,0xfe,0xc5,0x77,0x73,0x02,0x50,0x04,0xa9,0x93, + 0x01,0x43,0x58,0x56,0x2a,0x45,0x52,0x2d,0x58,0x01, + 0x44,0x93,0xa8,0x04,0x50,0x02,0x72,0x00,0x00,0x00, + 0x00,0x01,0x01,0x6a,0xfe,0x14,0x01,0xc9,0x06,0x14, + 0x00,0x03,0x00,0x00,0x01,0x23,0x11,0x33,0x01,0xc9, + 0x5f,0x5f,0xfe,0x14,0x08,0x00,0x00,0x00,0x00,0x01, + 0x00,0x68,0xfe,0xbc,0x02,0x75,0x05,0xb6,0x00,0x22, + 0x00,0x00,0x01,0x11,0x14,0x16,0x17,0x16,0x33,0x15, + 0x22,0x07,0x06,0x15,0x11,0x14,0x06,0x07,0x35,0x36, + 0x36,0x35,0x11,0x34,0x36,0x37,0x35,0x26,0x26,0x35, + 0x11,0x34,0x26,0x27,0x35,0x16,0x16,0x01,0xa6,0x27, + 0x2d,0x2e,0x4d,0x93,0x28,0x14,0xa7,0x97,0x70,0x6c, + 0x5a,0x68,0x66,0x5c,0x6c,0x70,0x96,0xa8,0x04,0x77, + 0xfe,0xbc,0x58,0x55,0x16,0x14,0x45,0x53,0x2b,0x5a, + 0xfe,0xbd,0x93,0xa9,0x04,0x50,0x02,0x73,0x77,0x01, + 0x3b,0x78,0x77,0x13,0x08,0x13,0x76,0x79,0x01,0x3c, + 0x77,0x72,0x02,0x50,0x04,0xa8,0x00,0x01,0x00,0x3b, + 0x02,0x6a,0x02,0xf8,0x03,0x3b,0x00,0x12,0x00,0x00, + 0x01,0x22,0x2e,0x02,0x22,0x06,0x07,0x35,0x36,0x33, + 0x32,0x16,0x16,0x32,0x36,0x37,0x15,0x06,0x02,0x44, + 0x33,0x3e,0x86,0x3c,0x49,0x63,0x2a,0x4b,0x6e,0x29, + 0x47,0xa5,0x6a,0x5f,0x26,0x4a,0x02,0x71,0x13,0x4a, + 0x15,0x41,0x38,0x63,0x6a,0x13,0x5d,0x3f,0x35,0x62, + 0x68,0x00,0x00,0x00,0x00,0x02,0x00,0x93,0xfe,0x79, + 0x01,0x2f,0x04,0x3f,0x00,0x06,0x00,0x0a,0x00,0x00, + 0x13,0x32,0x16,0x15,0x14,0x22,0x34,0x13,0x23,0x13, + 0x33,0xe1,0x23,0x2b,0x9c,0x8c,0x7d,0x23,0x37,0x04, + 0x3f,0x34,0x36,0x6b,0xd5,0xfa,0x3a,0x04,0x48,0x00, + 0x00,0x00,0x00,0x01,0x00,0xa8,0xff,0xec,0x02,0x9a, + 0x05,0xcb,0x00,0x17,0x00,0x00,0x01,0x15,0x16,0x17, + 0x07,0x26,0x23,0x22,0x06,0x15,0x10,0x33,0x32,0x37, + 0x15,0x06,0x07,0x15,0x23,0x35,0x24,0x10,0x25,0x35, + 0x02,0x08,0x58,0x3a,0x25,0x48,0x33,0x7b,0x73,0xee, + 0x45,0x54,0x33,0x58,0x52,0xfe,0xf2,0x01,0x0e,0x05, + 0xcb,0xa8,0x06,0x1f,0x56,0x1d,0xef,0xea,0xfe,0x2b, + 0x20,0x54,0x1e,0x09,0xd0,0xd5,0x2f,0x03,0xf6,0x37, + 0xae,0x00,0x00,0x01,0x00,0x50,0x00,0x00,0x02,0xe5, + 0x05,0xcb,0x00,0x1e,0x00,0x00,0x13,0x11,0x34,0x36, + 0x20,0x17,0x07,0x26,0x27,0x26,0x23,0x22,0x06,0x15, + 0x11,0x33,0x15,0x23,0x11,0x14,0x07,0x21,0x15,0x21, + 0x35,0x36,0x36,0x35,0x11,0x23,0x35,0xee,0x82,0x01, + 0x11,0x64,0x37,0x33,0x2a,0x27,0x32,0x59,0x4f,0xfa, + 0xfa,0x79,0x02,0x0a,0xfd,0x7b,0x45,0x4d,0x9e,0x03, + 0x00,0x01,0x62,0xb8,0xb1,0x58,0x4c,0x2b,0x0f,0x10, + 0x82,0x8f,0xfe,0xa0,0x56,0xfe,0xe1,0xd6,0x57,0x5e, + 0x52,0x1d,0xa4,0x76,0x01,0x21,0x56,0x00,0x00,0x02, + 0x00,0x7d,0x01,0x19,0x03,0xf0,0x04,0x8b,0x00,0x17, + 0x00,0x29,0x00,0x00,0x00,0x10,0x07,0x17,0x07,0x27, + 0x06,0x20,0x27,0x07,0x27,0x37,0x26,0x10,0x37,0x27, + 0x37,0x17,0x36,0x20,0x17,0x37,0x17,0x07,0x25,0x22, + 0x06,0x15,0x14,0x15,0x14,0x16,0x20,0x36,0x35,0x34, + 0x35,0x34,0x26,0x23,0x22,0x22,0x03,0xc1,0x59,0x88, + 0x3a,0x89,0x6b,0xfe,0xe5,0x6a,0x85,0x39,0x85,0x56, + 0x56,0x87,0x39,0x87,0x6d,0x01,0x19,0x6a,0x87,0x3c, + 0x88,0xfe,0xc7,0x7b,0xb8,0xb6,0x01,0x0a,0xb9,0xbb, + 0x7b,0x04,0x08,0x03,0x5e,0xfe,0xea,0x6d,0x89,0x39, + 0x87,0x56,0x58,0x87,0x3b,0x85,0x6e,0x01,0x12,0x6e, + 0x89,0x39,0x89,0x5a,0x58,0x87,0x39,0x87,0x45,0xb9, + 0x7a,0x05,0x05,0x85,0xb6,0xb7,0x84,0x05,0x05,0x79, + 0xba,0x00,0x00,0x00,0x00,0x01,0x00,0x6a,0x00,0x00, + 0x02,0xc7,0x05,0xb6,0x00,0x17,0x00,0x00,0x01,0x15, + 0x23,0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x23,0x35, + 0x33,0x35,0x27,0x23,0x35,0x33,0x03,0x33,0x13,0x13, + 0x33,0x03,0x02,0xa8,0xdd,0xdd,0xdd,0x67,0xd7,0xd7, + 0x02,0xd5,0xbf,0xe2,0x61,0xcf,0xca,0x63,0xe4,0x02, + 0x8f,0x52,0xc8,0x52,0xfe,0xdd,0x01,0x23,0x52,0xc6, + 0x02,0x52,0x03,0x27,0xfd,0x02,0x02,0xfe,0xfc,0xd9, + 0x00,0x02,0x01,0x6a,0xfe,0x14,0x01,0xc9,0x06,0x14, + 0x00,0x03,0x00,0x07,0x00,0x00,0x01,0x23,0x11,0x33, + 0x11,0x23,0x11,0x33,0x01,0xc9,0x5f,0x5f,0x5f,0x5f, + 0x02,0xf6,0x03,0x1e,0xf8,0x00,0x03,0x1f,0x00,0x00, + 0x00,0x02,0x00,0x52,0x00,0x62,0x02,0x58,0x06,0x14, + 0x00,0x2a,0x00,0x35,0x00,0x00,0x13,0x34,0x36,0x37, + 0x26,0x35,0x34,0x36,0x33,0x32,0x16,0x17,0x07,0x26, + 0x26,0x23,0x22,0x06,0x14,0x1e,0x03,0x14,0x06,0x07, + 0x16,0x16,0x15,0x14,0x06,0x20,0x27,0x35,0x16,0x33, + 0x32,0x36,0x34,0x26,0x27,0x27,0x26,0x12,0x06,0x14, + 0x16,0x17,0x36,0x35,0x34,0x27,0x26,0x27,0x52,0x4e, + 0x45,0x7f,0x9b,0x78,0x3d,0x51,0x3f,0x27,0x31,0x4a, + 0x2f,0x51,0x61,0x43,0xdd,0x4e,0x27,0x42,0x35,0x40, + 0x37,0xa0,0xfe,0xf2,0x58,0x53,0x8c,0x5a,0x6f,0x43, + 0x63,0x5e,0xa4,0x9b,0x3f,0x69,0x87,0x5c,0x48,0x27, + 0x60,0x03,0x5a,0x50,0x75,0x1e,0x58,0x82,0x71,0x8c, + 0x14,0x23,0x4a,0x1d,0x15,0x5a,0x89,0x55,0x80,0x4c, + 0x58,0x83,0x7e,0x20,0x31,0x66,0x40,0x7b,0x94,0x38, + 0x64,0x4a,0x69,0x8d,0x58,0x3b,0x37,0x60,0x01,0x28, + 0x59,0x7e,0x69,0x41,0x35,0x77,0x5e,0x38,0x20,0x33, + 0x00,0x02,0x01,0x5c,0x05,0x19,0x03,0x0a,0x05,0xbe, + 0x00,0x07,0x00,0x0f,0x00,0x00,0x00,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x01,0x5c,0x25,0x35,0x23,0x23,0x35,0x25, + 0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x05,0x95, + 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, + 0x2b,0x00,0x00,0x00,0x00,0x03,0x00,0x64,0xff,0xec, + 0x06,0x44,0x05,0xcb,0x00,0x0b,0x00,0x17,0x00,0x2b, + 0x00,0x00,0x04,0x24,0x02,0x10,0x12,0x24,0x20,0x04, + 0x12,0x10,0x02,0x04,0x00,0x02,0x24,0x20,0x04,0x02, + 0x10,0x12,0x04,0x20,0x24,0x12,0x01,0x22,0x26,0x10, + 0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x06,0x15, + 0x10,0x21,0x32,0x37,0x15,0x06,0x02,0x85,0xfe,0xa2, + 0xc3,0xc9,0x01,0x5e,0x01,0x91,0x01,0x5f,0xc9,0xc4, + 0xfe,0xa3,0x01,0xc4,0xac,0xfe,0xcd,0xfe,0x9d,0xfe, + 0xcc,0xb0,0xb0,0x01,0x31,0x01,0x64,0x01,0x2f,0xb2, + 0xfd,0x88,0xbb,0xcb,0xde,0xba,0x78,0x6b,0x25,0x62, + 0x5c,0x8e,0xa1,0x01,0x27,0x55,0x71,0x66,0x14,0xce, + 0x01,0x5a,0x01,0x8f,0x01,0x5f,0xc9,0xc9,0xfe,0xa2, + 0xfe,0x71,0xfe,0xa5,0xce,0x03,0x9c,0x01,0x30,0xb7, + 0xb3,0xfe,0xcd,0xfe,0x9f,0xfe,0xd2,0xb2,0xb1,0x01, + 0x30,0xfe,0xee,0xe7,0x01,0xa6,0xfa,0x34,0x53,0x2d, + 0xbe,0xa9,0xfe,0x94,0x2b,0x58,0x2d,0x00,0x00,0x02, + 0x00,0x39,0x03,0x25,0x01,0xcf,0x05,0xc7,0x00,0x15, + 0x00,0x1f,0x00,0x00,0x13,0x36,0x32,0x16,0x15,0x11, + 0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x34,0x36,0x37, + 0x37,0x35,0x34,0x26,0x22,0x07,0x11,0x14,0x33,0x32, + 0x36,0x35,0x35,0x07,0x06,0x06,0x73,0x51,0xb8,0x53, + 0x39,0x0f,0x08,0x45,0x67,0x44,0x56,0x6f,0x79,0x5c, + 0x30,0x77,0x47,0x5f,0x44,0x4b,0x3e,0x60,0x50,0x05, + 0x9a,0x2d,0x63,0x6c,0xfe,0x39,0x54,0x60,0x64,0xb0, + 0x62,0x0b,0x08,0x48,0x4b,0x40,0x27,0xfe,0x81,0x71, + 0x67,0x5c,0x42,0x07,0x09,0x3f,0x00,0x00,0x00,0x02, + 0x00,0x52,0x00,0x93,0x03,0x06,0x03,0x8b,0x00,0x06, + 0x00,0x0d,0x00,0x00,0x01,0x03,0x13,0x07,0x01,0x35, + 0x01,0x05,0x03,0x13,0x07,0x01,0x35,0x01,0x01,0xae, + 0xdb,0xdb,0x3d,0xfe,0xe1,0x01,0x1f,0x01,0x95,0xd9, + 0xd9,0x3b,0xfe,0xdf,0x01,0x21,0x03,0x68,0xfe,0xa8, + 0xfe,0xa8,0x25,0x01,0x6f,0x1b,0x01,0x6e,0x23,0xfe, + 0xa8,0xfe,0xa8,0x25,0x01,0x6f,0x1b,0x01,0x6e,0x00, + 0x00,0x01,0x00,0x3b,0x00,0xfa,0x02,0xe3,0x02,0xfc, + 0x00,0x05,0x00,0x00,0x25,0x23,0x11,0x21,0x35,0x21, + 0x02,0xe3,0x52,0xfd,0xaa,0x02,0xa8,0xfa,0x01,0xb0, + 0x52,0x00,0x00,0x01,0x00,0x35,0x01,0xf6,0x01,0xcf, + 0x02,0x5c,0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21, + 0x01,0xcf,0xfe,0x66,0x01,0x9a,0x01,0xf6,0x66,0x00, + 0x00,0x04,0x00,0x64,0xff,0xec,0x06,0x44,0x05,0xcb, + 0x00,0x0b,0x00,0x17,0x00,0x24,0x00,0x2c,0x00,0x00, + 0x04,0x24,0x02,0x10,0x12,0x24,0x20,0x04,0x12,0x10, + 0x02,0x04,0x00,0x02,0x24,0x20,0x04,0x02,0x10,0x12, + 0x04,0x20,0x24,0x12,0x01,0x33,0x32,0x16,0x15,0x14, + 0x07,0x13,0x23,0x03,0x23,0x11,0x23,0x13,0x11,0x33, + 0x32,0x36,0x35,0x34,0x23,0x02,0x85,0xfe,0xa2,0xc3, + 0xc9,0x01,0x5e,0x01,0x91,0x01,0x5f,0xc9,0xc4,0xfe, + 0xa3,0x01,0xc4,0xac,0xfe,0xcd,0xfe,0x9d,0xfe,0xcc, + 0xb0,0xb0,0x01,0x31,0x01,0x64,0x01,0x2f,0xb2,0xfc, + 0x79,0xd3,0x92,0x9b,0x93,0xc6,0x72,0xae,0xae,0x65, + 0x65,0x70,0x5c,0x67,0xc5,0x14,0xce,0x01,0x5a,0x01, + 0x8f,0x01,0x5f,0xc9,0xc9,0xfe,0xa2,0xfe,0x71,0xfe, + 0xa5,0xce,0x03,0x9c,0x01,0x30,0xb7,0xb3,0xfe,0xcd, + 0xfe,0x9f,0xfe,0xd2,0xb2,0xb1,0x01,0x30,0x02,0x6a, + 0x7e,0x7f,0xb0,0x40,0xfe,0x7d,0x01,0x68,0xfe,0x98, + 0x03,0x1a,0xfe,0x9e,0x5e,0x58,0xac,0x00,0x00,0x01, + 0xff,0xf8,0x06,0x14,0x03,0x52,0x06,0x66,0x00,0x03, + 0x00,0x00,0x01,0x21,0x35,0x21,0x03,0x52,0xfc,0xa6, + 0x03,0x5a,0x06,0x14,0x52,0x00,0x00,0x02,0x00,0x8b, + 0x03,0x75,0x02,0xe1,0x05,0xcb,0x00,0x07,0x00,0x10, + 0x00,0x00,0x00,0x32,0x16,0x10,0x06,0x22,0x26,0x10, + 0x00,0x36,0x34,0x26,0x22,0x07,0x06,0x14,0x16,0x01, + 0x38,0xfc,0xad,0xad,0xff,0xaa,0x01,0x80,0x7c,0x78, + 0xb3,0x3c,0x3b,0x7a,0x05,0xcb,0xa7,0xfe,0xf8,0xa7, + 0xa5,0x01,0x0a,0xfe,0xa3,0x7c,0xb9,0x7d,0x40,0x41, + 0xb4,0x7d,0x00,0x00,0x00,0x02,0x00,0x3b,0x00,0x00, + 0x02,0xf8,0x04,0xae,0x00,0x0b,0x00,0x0f,0x00,0x00, + 0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21, + 0x11,0x33,0x01,0x21,0x35,0x21,0x01,0xc3,0x01,0x35, + 0xfe,0xcb,0x52,0xfe,0xca,0x01,0x36,0x52,0x01,0x35, + 0xfd,0x43,0x02,0xbd,0x02,0xfc,0x52,0xfe,0x50,0x01, + 0xb0,0x52,0x01,0xb2,0xfb,0x52,0x52,0x00,0x00,0x01, + 0x00,0x31,0x02,0x4a,0x02,0x08,0x05,0xcb,0x00,0x16, + 0x00,0x00,0x01,0x32,0x16,0x15,0x14,0x06,0x07,0x07, + 0x21,0x15,0x21,0x35,0x37,0x3e,0x02,0x34,0x26,0x23, + 0x22,0x07,0x27,0x36,0x01,0x10,0x6e,0x7c,0x4b,0x88, + 0x91,0x01,0x72,0xfe,0x29,0xb2,0x46,0x54,0x1f,0x4c, + 0x42,0x58,0x4c,0x37,0x5f,0x05,0xcb,0x7c,0x6c,0x56, + 0x9b,0xa6,0xb0,0x52,0x4e,0xdf,0x56,0x7e,0x57,0x84, + 0x4f,0x52,0x3d,0x6b,0x00,0x01,0x00,0x2f,0x02,0x39, + 0x02,0x0e,0x05,0xcd,0x00,0x1f,0x00,0x00,0x13,0x36, + 0x32,0x16,0x15,0x14,0x06,0x07,0x15,0x16,0x15,0x14, + 0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x34,0x26, + 0x23,0x23,0x35,0x33,0x32,0x36,0x34,0x26,0x22,0x07, + 0x2f,0x63,0xe6,0x7a,0x49,0x41,0xa6,0x96,0x7e,0x65, + 0x60,0x5e,0xc4,0x59,0x68,0x65,0x3d,0x41,0x54,0x5d, + 0x4f,0x9b,0x4a,0x05,0x73,0x5a,0x7a,0x6c,0x48,0x6a, + 0x18,0x09,0x2e,0xb3,0x6e,0x8c,0x2b,0x5f,0x34,0x57, + 0xa8,0x5e,0x51,0x5f,0x92,0x49,0x48,0x00,0x00,0x00, + 0x00,0x01,0x01,0xb2,0x04,0xd9,0x02,0xee,0x06,0x21, + 0x00,0x08,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, + 0x35,0x36,0x37,0x02,0xee,0x25,0xa1,0x47,0x2f,0x7e, + 0x41,0x06,0x21,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f, + 0x00,0x01,0x00,0x91,0xfe,0x14,0x02,0xd9,0x04,0x3d, + 0x00,0x17,0x00,0x00,0x21,0x23,0x27,0x23,0x06,0x06, + 0x23,0x22,0x27,0x23,0x16,0x15,0x11,0x23,0x11,0x33, + 0x11,0x10,0x33,0x32,0x36,0x35,0x11,0x33,0x02,0xd9, + 0x50,0x0c,0x08,0x21,0x7a,0x44,0x76,0x30,0x09,0x09, + 0x5f,0x5f,0x9d,0x7c,0x72,0x5e,0x98,0x50,0x5c,0x6a, + 0x78,0x3f,0xfe,0x75,0x06,0x29,0xfd,0x23,0xfe,0xe4, + 0xc8,0xdd,0x02,0x54,0x00,0x00,0x00,0x01,0x00,0x96, + 0xfe,0xfc,0x03,0x00,0x06,0x14,0x00,0x0e,0x00,0x00, + 0x01,0x23,0x11,0x23,0x11,0x23,0x11,0x06,0x23,0x22, + 0x26,0x10,0x12,0x33,0x21,0x03,0x00,0x5e,0x92,0x5e, + 0x1e,0x27,0x6f,0x68,0x80,0x88,0x01,0x62,0xfe,0xfc, + 0x06,0xb8,0xf9,0x48,0x03,0x33,0x12,0xf5,0x02,0x02, + 0x01,0x00,0x00,0x01,0x00,0x85,0x02,0x66,0x01,0x21, + 0x03,0x3b,0x00,0x06,0x00,0x00,0x12,0x32,0x15,0x14, + 0x06,0x23,0x22,0x85,0x9c,0x2b,0x23,0x4e,0x03,0x3b, + 0x6a,0x36,0x35,0x00,0x00,0x01,0x00,0x3b,0xfe,0x14, + 0x01,0x7b,0x00,0x00,0x00,0x11,0x00,0x00,0x01,0x14, + 0x06,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x34, + 0x26,0x27,0x37,0x33,0x07,0x16,0x01,0x7b,0x7b,0x6f, + 0x3d,0x19,0x21,0x2d,0x4c,0x4c,0x54,0x52,0x48,0x4b, + 0x33,0xa0,0xfe,0xdd,0x62,0x67,0x0b,0x4e,0x0b,0x41, + 0x72,0x3e,0x0d,0xa0,0x73,0x27,0x00,0x00,0x00,0x01, + 0x00,0x52,0x02,0x4a,0x01,0x8d,0x05,0xb6,0x00,0x0a, + 0x00,0x00,0x01,0x23,0x11,0x34,0x37,0x06,0x06,0x07, + 0x27,0x37,0x33,0x01,0x8d,0x56,0x06,0x20,0x36,0x64, + 0x31,0xed,0x4e,0x02,0x4a,0x02,0x66,0x56,0x54,0x1f, + 0x2b,0x47,0x41,0xac,0x00,0x00,0x00,0x02,0x00,0x46, + 0x03,0x25,0x02,0x25,0x05,0xc7,0x00,0x07,0x00,0x10, + 0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06,0x22,0x26, + 0x13,0x22,0x11,0x14,0x16,0x32,0x36,0x10,0x26,0x46, + 0x7f,0xe5,0x7b,0x7a,0xeb,0x7a,0xef,0x95,0x47,0x9f, + 0x45,0x47,0x05,0x17,0xb0,0xa8,0xfe,0xb3,0xad,0xac, + 0x01,0xac,0xfe,0xfa,0x8a,0x7e,0x7c,0x01,0x16,0x7c, + 0x00,0x02,0x00,0x52,0x00,0x93,0x03,0x06,0x03,0x8b, + 0x00,0x06,0x00,0x0d,0x00,0x00,0x01,0x15,0x01,0x27, + 0x13,0x03,0x37,0x01,0x15,0x01,0x27,0x13,0x03,0x37, + 0x01,0xae,0xfe,0xdf,0x3b,0xd9,0xd9,0x3b,0x02,0x79, + 0xfe,0xe1,0x3d,0xdb,0xdb,0x3d,0x02,0x1d,0x1b,0xfe, + 0x91,0x25,0x01,0x58,0x01,0x58,0x23,0xfe,0x92,0x1b, + 0xfe,0x91,0x25,0x01,0x58,0x01,0x58,0x23,0x00,0x04, + 0x00,0x34,0x00,0x00,0x05,0x18,0x05,0xb6,0x00,0x0a, + 0x00,0x0e,0x00,0x19,0x00,0x20,0x00,0x00,0x01,0x23, + 0x11,0x34,0x37,0x06,0x06,0x07,0x27,0x37,0x33,0x13, + 0x23,0x01,0x33,0x13,0x33,0x15,0x23,0x15,0x23,0x35, + 0x21,0x35,0x01,0x33,0x03,0x11,0x34,0x37,0x06,0x06, + 0x03,0x01,0x6f,0x56,0x06,0x20,0x36,0x64,0x31,0xed, + 0x4e,0x01,0x5c,0x03,0x00,0x5c,0x44,0x64,0x64,0x56, + 0xfe,0xb2,0x01,0x54,0x50,0x56,0x04,0x04,0x4c,0x9d, + 0x02,0x4a,0x02,0x66,0x56,0x54,0x1f,0x2b,0x47,0x41, + 0xac,0xfa,0x4a,0x05,0xb6,0xfb,0x6e,0x52,0xd1,0xd1, + 0x41,0x02,0x60,0xfd,0xb1,0x01,0x1a,0x7f,0x2b,0x0c, + 0x9a,0xfe,0xe2,0x00,0x00,0x03,0x00,0x34,0x00,0x00, + 0x05,0x37,0x05,0xb6,0x00,0x0a,0x00,0x0e,0x00,0x25, + 0x00,0x00,0x01,0x23,0x11,0x34,0x37,0x06,0x06,0x07, + 0x27,0x37,0x33,0x03,0x23,0x01,0x33,0x03,0x32,0x16, + 0x15,0x14,0x06,0x07,0x07,0x21,0x15,0x21,0x35,0x37, + 0x3e,0x02,0x34,0x26,0x23,0x22,0x07,0x27,0x36,0x01, + 0x6f,0x56,0x06,0x20,0x36,0x64,0x31,0xed,0x4e,0x17, + 0x5c,0x03,0x00,0x5c,0x19,0x6e,0x7c,0x4b,0x88,0x91, + 0x01,0x72,0xfe,0x29,0xb2,0x46,0x54,0x1f,0x4c,0x42, + 0x58,0x4c,0x37,0x5f,0x02,0x4a,0x02,0x66,0x56,0x54, + 0x1f,0x2b,0x47,0x41,0xac,0xfa,0x4a,0x05,0xb6,0xfd, + 0xcc,0x7c,0x6c,0x56,0x9b,0xa6,0xb0,0x52,0x4e,0xdf, + 0x56,0x7e,0x57,0x84,0x4f,0x52,0x3d,0x6b,0x00,0x04, + 0x00,0x2f,0x00,0x00,0x05,0x3f,0x05,0xcd,0x00,0x1f, + 0x00,0x23,0x00,0x2e,0x00,0x35,0x00,0x00,0x13,0x36, + 0x32,0x16,0x15,0x14,0x06,0x07,0x15,0x16,0x15,0x14, + 0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x34,0x26, + 0x23,0x23,0x35,0x33,0x32,0x36,0x34,0x26,0x22,0x07, + 0x01,0x23,0x01,0x33,0x13,0x33,0x15,0x23,0x15,0x23, + 0x35,0x21,0x35,0x01,0x33,0x03,0x11,0x34,0x37,0x06, + 0x06,0x03,0x2f,0x63,0xe6,0x7a,0x49,0x41,0xa6,0x96, + 0x7e,0x65,0x60,0x5e,0xc4,0x59,0x68,0x65,0x3d,0x41, + 0x54,0x5d,0x4f,0x9b,0x4a,0x01,0x35,0x5c,0x03,0x00, + 0x5c,0x42,0x64,0x64,0x56,0xfe,0xb2,0x01,0x54,0x50, + 0x56,0x04,0x05,0x4b,0x9d,0x05,0x73,0x5a,0x7a,0x6c, + 0x48,0x6a,0x18,0x09,0x2e,0xb3,0x6e,0x8c,0x2b,0x5f, + 0x34,0x57,0xa8,0x5e,0x51,0x5f,0x92,0x49,0x48,0xfa, + 0xd1,0x05,0xb6,0xfb,0x6e,0x52,0xd1,0xd1,0x41,0x02, + 0x60,0xfd,0xb1,0x01,0x1a,0x7f,0x2b,0x0c,0x9a,0xfe, + 0xe2,0x00,0x00,0x02,0x00,0x2f,0xfe,0x64,0x02,0x1f, + 0x04,0x3f,0x00,0x06,0x00,0x1f,0x00,0x00,0x01,0x32, + 0x14,0x22,0x35,0x34,0x36,0x13,0x15,0x14,0x06,0x06, + 0x07,0x06,0x14,0x16,0x33,0x32,0x36,0x37,0x17,0x06, + 0x22,0x26,0x10,0x37,0x36,0x37,0x36,0x36,0x35,0x35, + 0x01,0x58,0x4e,0x9c,0x2b,0x4e,0x2a,0x7f,0x16,0x31, + 0x5b,0x4f,0x35,0x4f,0x2f,0x2f,0x67,0xfe,0x8b,0x31, + 0x1a,0x55,0x3a,0x2e,0x04,0x3f,0xd5,0x6b,0x36,0x34, + 0xfe,0x82,0x34,0x73,0x92,0xc3,0x31,0x6c,0xed,0x7d, + 0x1d,0x1f,0x4c,0x4a,0xa9,0x01,0x26,0x69,0x39,0x81, + 0x5b,0x86,0x63,0x27,0x00,0x00,0x00,0x03,0x00,0x00, + 0x00,0x00,0x03,0x2d,0x07,0x73,0x00,0x09,0x00,0x11, + 0x00,0x18,0x00,0x00,0x13,0x33,0x16,0x16,0x17,0x15, + 0x23,0x26,0x26,0x27,0x01,0x23,0x03,0x21,0x03,0x23, + 0x01,0x33,0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x92, + 0x7d,0x1d,0x6a,0x38,0x30,0x3f,0xa8,0x25,0x02,0x9b, + 0x64,0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c, + 0x81,0x16,0x09,0x09,0x13,0x7d,0x07,0x73,0x43,0xaa, + 0x46,0x15,0x33,0xbf,0x45,0xf8,0x9e,0x02,0x12,0xfd, + 0xee,0x05,0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b, + 0x53,0xfd,0xdf,0x00,0x00,0x00,0x00,0x03,0x00,0x00, + 0x00,0x00,0x03,0x2d,0x07,0x73,0x00,0x08,0x00,0x10, + 0x00,0x17,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, + 0x35,0x36,0x37,0x01,0x23,0x03,0x21,0x03,0x23,0x01, + 0x33,0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x02,0x8f, + 0x25,0xa2,0x46,0x2f,0x7e,0x41,0x01,0x1b,0x64,0x81, + 0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c,0x81,0x16, + 0x09,0x09,0x13,0x7d,0x07,0x73,0x11,0x42,0xba,0x3b, + 0x15,0xa4,0x8f,0xf8,0x8d,0x02,0x12,0xfd,0xee,0x05, + 0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd, + 0xdf,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x2d, + 0x07,0x73,0x00,0x11,0x00,0x19,0x00,0x20,0x00,0x00, + 0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23, + 0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17,0x13,0x23, + 0x03,0x21,0x03,0x23,0x01,0x33,0x13,0x03,0x26,0x27, + 0x06,0x07,0x03,0x02,0x7e,0x2f,0x2a,0x31,0x61,0x13, + 0x2c,0x51,0x31,0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c, + 0x34,0xaf,0x64,0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60, + 0x65,0x6c,0x81,0x16,0x09,0x09,0x13,0x7d,0x06,0x2b, + 0x2a,0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d, + 0x36,0x5b,0x5f,0x45,0xf9,0xc2,0x02,0x12,0xfd,0xee, + 0x05,0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53, + 0xfd,0xdf,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x2d, + 0x07,0x00,0x00,0x15,0x00,0x1d,0x00,0x24,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, + 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, + 0x06,0x06,0x13,0x23,0x03,0x21,0x03,0x23,0x01,0x33, + 0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x02,0x0f,0x20, + 0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54,0x46, + 0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09,0x54, + 0xdb,0x64,0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65, + 0x6c,0x81,0x16,0x09,0x09,0x13,0x7d,0x06,0x2d,0x28, + 0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f,0x81, + 0x65,0x6e,0xf9,0xd3,0x02,0x12,0xfd,0xee,0x05,0xb6, + 0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd,0xdf, + 0x00,0x04,0x00,0x00,0x00,0x00,0x03,0x2d,0x07,0x10, + 0x00,0x07,0x00,0x0f,0x00,0x17,0x00,0x1e,0x00,0x00, + 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x01,0x23,0x03,0x21, + 0x03,0x23,0x01,0x33,0x13,0x03,0x26,0x27,0x06,0x07, + 0x03,0xbf,0x25,0x35,0x23,0x23,0x35,0x25,0x01,0x31, + 0x24,0x35,0x24,0x24,0x35,0x24,0x01,0x3d,0x64,0x81, + 0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c,0x81,0x16, + 0x09,0x09,0x13,0x7d,0x06,0xe7,0x29,0x29,0x52,0x2a, + 0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xf9,0x6a,0x02, + 0x12,0xfd,0xee,0x05,0xb6,0xfc,0xbf,0x02,0x21,0x67, + 0x47,0x5b,0x53,0xfd,0xdf,0x00,0x00,0x03,0x00,0x00, + 0x00,0x00,0x03,0x2d,0x06,0xeb,0x00,0x0f,0x00,0x17, + 0x00,0x1e,0x00,0x00,0x00,0x26,0x34,0x36,0x32,0x16, + 0x14,0x06,0x07,0x01,0x23,0x03,0x21,0x03,0x23,0x01, + 0x12,0x06,0x14,0x16,0x32,0x36,0x34,0x26,0x13,0x03, + 0x26,0x27,0x06,0x07,0x03,0x01,0x14,0x46,0x6b,0xb3, + 0x70,0x49,0x40,0x01,0x5a,0x64,0x81,0xfe,0x9d,0x7f, + 0x66,0x01,0x53,0x0c,0x43,0x3e,0x71,0x43,0x3f,0x62, + 0x81,0x16,0x09,0x09,0x13,0x7d,0x05,0x8f,0x5d,0x9a, + 0x65,0x64,0x9a,0x60,0x10,0xfa,0x83,0x02,0x12,0xfd, + 0xee,0x05,0x7e,0x01,0x27,0x41,0x69,0x3f,0x40,0x69, + 0x40,0xfb,0xd0,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd, + 0xdf,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x04,0x1f, + 0x05,0xb6,0x00,0x0f,0x00,0x13,0x00,0x00,0x01,0x21, + 0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21, + 0x03,0x23,0x01,0x21,0x01,0x11,0x23,0x03,0x04,0x1f, + 0xfe,0x50,0x01,0x97,0xfe,0x69,0x01,0xb0,0xfd,0xed, + 0xfe,0xf4,0x98,0x68,0x01,0xb2,0x02,0x6d,0xfd,0xed, + 0x1c,0xd5,0x05,0x56,0xfd,0xd7,0x5e,0xfd,0x8f,0x5e, + 0x02,0x12,0xfd,0xee,0x05,0xb6,0xfc,0xbf,0x02,0xdf, + 0xfd,0x21,0x00,0x01,0x00,0x6f,0xfe,0x14,0x03,0x29, + 0x05,0xcd,0x00,0x2c,0x00,0x00,0x01,0x22,0x02,0x11, + 0x14,0x15,0x10,0x12,0x33,0x32,0x33,0x32,0x37,0x15, + 0x06,0x23,0x07,0x16,0x15,0x14,0x06,0x23,0x22,0x27, + 0x35,0x16,0x33,0x32,0x36,0x34,0x26,0x27,0x37,0x26, + 0x02,0x11,0x34,0x35,0x10,0x12,0x33,0x32,0x17,0x07, + 0x26,0x02,0x3d,0xa6,0xc2,0xc8,0xa4,0x02,0x03,0x70, + 0x54,0x4e,0x7e,0x2a,0xa0,0x7b,0x6f,0x3d,0x19,0x21, + 0x2d,0x4c,0x4c,0x54,0x52,0x42,0xb5,0xd2,0xf9,0xd7, + 0x85,0x65,0x2d,0x54,0x05,0x6f,0xfe,0xa4,0xfe,0xca, + 0x06,0x05,0xfe,0xdc,0xfe,0x9c,0x29,0x5a,0x2d,0x5f, + 0x27,0x89,0x62,0x67,0x0b,0x4e,0x0b,0x41,0x72,0x3e, + 0x0d,0x92,0x21,0x01,0x8b,0x01,0x35,0x06,0x06,0x01, + 0x5f,0x01,0x8f,0x3e,0x56,0x36,0x00,0x00,0x00,0x02, + 0x00,0xa0,0x00,0x00,0x02,0xb2,0x07,0x73,0x00,0x09, + 0x00,0x15,0x00,0x00,0x13,0x33,0x16,0x16,0x17,0x15, + 0x23,0x26,0x26,0x27,0x01,0x21,0x11,0x21,0x15,0x21, + 0x11,0x21,0x15,0x21,0x11,0x21,0xc7,0x7d,0x1d,0x6a, + 0x38,0x30,0x3f,0xa8,0x25,0x01,0xeb,0xfe,0x50,0x01, + 0x98,0xfe,0x68,0x01,0xb0,0xfd,0xee,0x02,0x12,0x07, + 0x73,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xfd,0xf6, + 0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x05,0xb6,0x00,0x02, + 0x00,0xa0,0x00,0x00,0x02,0xb2,0x07,0x73,0x00,0x08, + 0x00,0x14,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, + 0x35,0x36,0x37,0x13,0x21,0x11,0x21,0x15,0x21,0x11, + 0x21,0x15,0x21,0x11,0x21,0x02,0x80,0x25,0xa1,0x47, + 0x2f,0x7e,0x41,0xaf,0xfe,0x50,0x01,0x98,0xfe,0x68, + 0x01,0xb0,0xfd,0xee,0x02,0x12,0x07,0x73,0x11,0x42, + 0xba,0x3b,0x15,0xa4,0x8f,0xfd,0xe5,0xfd,0xd5,0x5e, + 0xfd,0x8f,0x5e,0x05,0xb6,0x00,0x00,0x00,0x00,0x02, + 0x00,0xa0,0x00,0x00,0x02,0xb2,0x07,0x73,0x00,0x11, + 0x00,0x1d,0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06, + 0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17, + 0x16,0x17,0x17,0x21,0x11,0x21,0x15,0x21,0x11,0x21, + 0x15,0x21,0x11,0x21,0x02,0x8c,0x2f,0x2a,0x31,0x61, + 0x13,0x2c,0x51,0x31,0x2b,0x79,0x41,0x5f,0x17,0x37, + 0x3c,0x34,0x26,0xfe,0x50,0x01,0x98,0xfe,0x68,0x01, + 0xb0,0xfd,0xee,0x02,0x12,0x06,0x2b,0x2a,0x3b,0x70, + 0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f, + 0x45,0xe6,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x05,0xb6, + 0x00,0x00,0x00,0x03,0x00,0xa0,0x00,0x00,0x02,0xb2, + 0x07,0x10,0x00,0x07,0x00,0x0f,0x00,0x1b,0x00,0x00, + 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x13,0x21,0x11,0x21, + 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0xca,0x25, + 0x35,0x23,0x23,0x35,0x25,0x01,0x31,0x24,0x35,0x24, + 0x24,0x35,0x24,0xb7,0xfe,0x50,0x01,0x98,0xfe,0x68, + 0x01,0xb0,0xfd,0xee,0x02,0x12,0x06,0xe7,0x29,0x29, + 0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfe, + 0xc2,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x05,0xb6,0x00, + 0x00,0x00,0x00,0x02,0xff,0xde,0x00,0x00,0x01,0x1a, + 0x07,0x73,0x00,0x09,0x00,0x0d,0x00,0x00,0x03,0x33, + 0x16,0x16,0x17,0x15,0x23,0x26,0x26,0x27,0x01,0x23, + 0x11,0x33,0x22,0x7d,0x1d,0x6a,0x38,0x30,0x3f,0xa8, + 0x25,0x01,0x24,0x62,0x62,0x07,0x73,0x43,0xaa,0x46, + 0x15,0x33,0xbf,0x45,0xf8,0x9e,0x05,0xb6,0x00,0x02, + 0x00,0x9a,0x00,0x00,0x01,0xd6,0x07,0x73,0x00,0x08, + 0x00,0x0c,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, + 0x35,0x36,0x37,0x03,0x23,0x11,0x33,0x01,0xd6,0x25, + 0xa1,0x47,0x2f,0x7e,0x41,0x57,0x62,0x62,0x07,0x73, + 0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f,0xf8,0x8d,0x05, + 0xb6,0x00,0x00,0x00,0x00,0x02,0xff,0xe6,0x00,0x00, + 0x01,0xbd,0x07,0x73,0x00,0x11,0x00,0x15,0x00,0x00, + 0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23, + 0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17,0x03,0x23, + 0x11,0x33,0x01,0xbd,0x2f,0x2a,0x31,0x61,0x13,0x2c, + 0x51,0x31,0x2b,0x7a,0x40,0x5f,0x17,0x37,0x3c,0x34, + 0xbb,0x62,0x62,0x06,0x2b,0x2a,0x3b,0x70,0x15,0x33, + 0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45,0xf9, + 0xc2,0x05,0xb6,0x00,0x00,0x03,0xff,0xfb,0x00,0x00, + 0x01,0xa9,0x07,0x10,0x00,0x07,0x00,0x0f,0x00,0x13, + 0x00,0x00,0x02,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x24,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x03,0x23, + 0x11,0x33,0x05,0x25,0x35,0x23,0x23,0x35,0x25,0x01, + 0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x2a,0x62,0x62, + 0x06,0xe7,0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29, + 0x52,0x2a,0x2b,0xf9,0x6a,0x05,0xb6,0x00,0x00,0x00, + 0x00,0x02,0x00,0x3d,0x00,0x00,0x03,0x75,0x05,0xb6, + 0x00,0x0b,0x00,0x17,0x00,0x00,0x13,0x21,0x32,0x12, + 0x11,0x10,0x21,0x21,0x11,0x23,0x35,0x33,0x13,0x11, + 0x33,0x15,0x23,0x11,0x33,0x20,0x11,0x10,0x02,0x23, + 0xa0,0x01,0x0a,0xe2,0xe9,0xfe,0x2f,0xfe,0xfc,0x63, + 0x63,0x62,0xe1,0xe1,0x9c,0x01,0x70,0xb7,0xb1,0x05, + 0xb6,0xfe,0x93,0xfe,0xa0,0xfd,0x17,0x02,0xbc,0x5b, + 0x02,0x45,0xfd,0xbb,0x5b,0xfd,0x9e,0x02,0x89,0x01, + 0x36,0x01,0x43,0x00,0x00,0x02,0x00,0xa0,0x00,0x00, + 0x03,0xa2,0x07,0x00,0x00,0x15,0x00,0x25,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, + 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, + 0x06,0x06,0x13,0x23,0x01,0x23,0x16,0x15,0x11,0x23, + 0x11,0x33,0x01,0x33,0x26,0x35,0x11,0x33,0x02,0xad, + 0x20,0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54, + 0x46,0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09, + 0x54,0xb2,0x7d,0xfd,0xd7,0x08,0x0c,0x60,0x7f,0x02, + 0x25,0x06,0x08,0x60,0x06,0x2d,0x28,0x17,0x40,0x46, + 0x3b,0x64,0x6f,0x28,0x18,0x3f,0x81,0x65,0x6e,0xf9, + 0xd3,0x05,0x1f,0x89,0x7d,0xfb,0xe7,0x05,0xb6,0xfa, + 0xf0,0xae,0x64,0x03,0xfe,0x00,0x00,0x00,0x00,0x03, + 0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x73,0x00,0x09, + 0x00,0x13,0x00,0x1b,0x00,0x00,0x01,0x33,0x16,0x16, + 0x17,0x15,0x23,0x26,0x26,0x27,0x13,0x32,0x17,0x16, + 0x10,0x02,0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02, + 0x10,0x12,0x20,0x12,0x01,0x1b,0x7d,0x1d,0x6a,0x38, + 0x30,0x3f,0xa8,0x25,0xfc,0xcd,0x6a,0x6c,0xd9,0xfe, + 0x63,0xd5,0x02,0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01, + 0x3a,0xa2,0x07,0x73,0x43,0xaa,0x46,0x15,0x33,0xbf, + 0x45,0xfe,0x69,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01, + 0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe, + 0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x00, + 0x00,0x03,0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x73, + 0x00,0x08,0x00,0x12,0x00,0x1a,0x00,0x00,0x01,0x15, + 0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03,0x32,0x17, + 0x16,0x10,0x02,0x20,0x02,0x11,0x10,0x00,0x02,0x20, + 0x02,0x10,0x12,0x20,0x12,0x03,0x07,0x25,0xa2,0x46, + 0x2f,0x7e,0x41,0x73,0xcd,0x6a,0x6c,0xd9,0xfe,0x63, + 0xd5,0x02,0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a, + 0xa2,0x07,0x73,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f, + 0xfe,0x58,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01,0x89, + 0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe,0xb3, + 0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x00,0x03, + 0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x73,0x00,0x11, + 0x00,0x1b,0x00,0x23,0x00,0x00,0x01,0x23,0x26,0x27, + 0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33, + 0x16,0x17,0x16,0x17,0x07,0x32,0x17,0x16,0x10,0x02, + 0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02,0x10,0x12, + 0x20,0x12,0x02,0xff,0x2f,0x2a,0x31,0x61,0x13,0x2c, + 0x51,0x31,0x2b,0x7a,0x40,0x5f,0x17,0x37,0x3c,0x34, + 0xe8,0xcd,0x6a,0x6c,0xd9,0xfe,0x63,0xd5,0x02,0xe5, + 0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x06,0x2b, + 0x2a,0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d, + 0x36,0x5b,0x5f,0x45,0x73,0xc3,0xc2,0xfd,0x2b,0xfe, + 0x7b,0x01,0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01, + 0x4b,0xfe,0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00, + 0x00,0x03,0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x00, + 0x00,0x15,0x00,0x1f,0x00,0x27,0x00,0x00,0x01,0x22, + 0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36,0x36,0x33, + 0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33,0x06,0x06, + 0x07,0x32,0x17,0x16,0x10,0x02,0x20,0x02,0x11,0x10, + 0x00,0x02,0x20,0x02,0x10,0x12,0x20,0x12,0x02,0x96, + 0x20,0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54, + 0x46,0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09, + 0x54,0xc2,0xcd,0x6a,0x6c,0xd9,0xfe,0x63,0xd5,0x02, + 0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x06, + 0x2d,0x28,0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18, + 0x3f,0x81,0x65,0x6e,0x62,0xc3,0xc2,0xfd,0x2b,0xfe, + 0x7b,0x01,0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01, + 0x4b,0xfe,0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00, + 0x00,0x04,0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x10, + 0x00,0x07,0x00,0x0f,0x00,0x19,0x00,0x21,0x00,0x00, + 0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x07,0x32,0x17,0x16, + 0x10,0x02,0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02, + 0x10,0x12,0x20,0x12,0x01,0x46,0x25,0x35,0x23,0x23, + 0x35,0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24, + 0x60,0xcd,0x6a,0x6c,0xd9,0xfe,0x63,0xd5,0x02,0xe5, + 0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x06,0xe7, + 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, + 0x2b,0xcb,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01,0x89, + 0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe,0xb3, + 0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x00,0x01, + 0x00,0x3b,0x01,0x75,0x02,0xf8,0x04,0x31,0x00,0x0b, + 0x00,0x00,0x09,0x02,0x07,0x01,0x01,0x27,0x01,0x01, + 0x37,0x01,0x01,0x02,0xf8,0xfe,0xdb,0x01,0x1f,0x3a, + 0xfe,0xe0,0xfe,0xdd,0x3a,0x01,0x23,0xfe,0xdf,0x3a, + 0x01,0x21,0x01,0x24,0x03,0xf8,0xfe,0xdb,0xfe,0xdf, + 0x39,0x01,0x21,0xfe,0xdb,0x3b,0x01,0x23,0x01,0x21, + 0x39,0xfe,0xdf,0x01,0x25,0x00,0x00,0x03,0x00,0x60, + 0xff,0xa2,0x03,0xd7,0x06,0x06,0x00,0x11,0x00,0x18, + 0x00,0x20,0x00,0x00,0x01,0x16,0x10,0x02,0x23,0x22, + 0x27,0x07,0x27,0x37,0x26,0x11,0x10,0x21,0x32,0x17, + 0x37,0x17,0x05,0x22,0x02,0x10,0x17,0x01,0x26,0x03, + 0x32,0x12,0x11,0x34,0x27,0x01,0x16,0x03,0x5c,0x5e, + 0xd9,0xcd,0x9e,0x66,0x5e,0x52,0x77,0x68,0x01,0xa8, + 0xa3,0x6b,0x60,0x52,0xfe,0x40,0xa0,0xa2,0x3b,0x01, + 0xe4,0x50,0x90,0x9e,0xa2,0x31,0xfe,0x1f,0x4d,0x04, + 0xee,0xbd,0xfd,0x40,0xfe,0x7b,0x72,0xbc,0x25,0xed, + 0xc2,0x01,0x69,0x02,0xec,0x83,0xbe,0x29,0x70,0xfe, + 0xb3,0xfd,0xa4,0x9f,0x03,0xbe,0x8a,0xfa,0xdd,0x01, + 0x4b,0x01,0x48,0xfd,0x9f,0xfc,0x45,0x74,0x00,0x00, + 0x00,0x02,0x00,0x93,0xff,0xec,0x03,0x60,0x07,0x73, + 0x00,0x09,0x00,0x19,0x00,0x00,0x01,0x33,0x16,0x16, + 0x17,0x15,0x23,0x26,0x26,0x27,0x01,0x11,0x10,0x21, + 0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36, + 0x35,0x11,0x01,0x15,0x7d,0x1d,0x6a,0x38,0x30,0x3f, + 0xa8,0x25,0x02,0x4b,0xfe,0x9e,0xb1,0xba,0x63,0x89, + 0xfd,0x82,0x07,0x73,0x43,0xaa,0x46,0x15,0x33,0xbf, + 0x45,0xfe,0x54,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03, + 0xdb,0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00, + 0x00,0x00,0x00,0x02,0x00,0x93,0xff,0xec,0x03,0x60, + 0x07,0x73,0x00,0x08,0x00,0x18,0x00,0x00,0x01,0x15, + 0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x13,0x11,0x10, + 0x21,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x32, + 0x36,0x35,0x11,0x02,0xe3,0x25,0xa2,0x46,0x2f,0x7e, + 0x41,0xfa,0xfe,0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82, + 0x07,0x73,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f,0xfe, + 0x43,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03,0xdb,0xfc, + 0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00,0x00,0x00, + 0x00,0x02,0x00,0x93,0xff,0xec,0x03,0x60,0x07,0x73, + 0x00,0x11,0x00,0x21,0x00,0x00,0x01,0x23,0x26,0x27, + 0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33, + 0x16,0x17,0x16,0x17,0x17,0x11,0x10,0x21,0x22,0x26, + 0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36,0x35,0x11, + 0x02,0xe6,0x2f,0x2a,0x31,0x61,0x13,0x2c,0x51,0x31, + 0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c,0x34,0x7a,0xfe, + 0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82,0x06,0x2b,0x2a, + 0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36, + 0x5b,0x5f,0x45,0x88,0xfc,0x25,0xfe,0x11,0xff,0xf0, + 0x03,0xdb,0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3, + 0x00,0x00,0x00,0x03,0x00,0x93,0xff,0xec,0x03,0x60, + 0x07,0x10,0x00,0x07,0x00,0x0f,0x00,0x1f,0x00,0x00, + 0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x05,0x11,0x10,0x21, + 0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36, + 0x35,0x11,0x01,0x24,0x25,0x35,0x23,0x23,0x35,0x25, + 0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x01,0x0b, + 0xfe,0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82,0x06,0xe7, + 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, + 0x2b,0xe0,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03,0xdb, + 0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x02,0xae,0x07,0x73, + 0x00,0x08,0x00,0x11,0x00,0x00,0x01,0x15,0x06,0x06, + 0x07,0x23,0x35,0x36,0x37,0x03,0x23,0x11,0x01,0x33, + 0x13,0x13,0x33,0x01,0x02,0x4b,0x25,0xa2,0x46,0x2f, + 0x7e,0x41,0x47,0x62,0xfe,0xdb,0x68,0xf0,0xee,0x68, + 0xfe,0xd9,0x07,0x73,0x11,0x42,0xba,0x3b,0x15,0xa4, + 0x8f,0xf8,0x8d,0x02,0x3b,0x03,0x7b,0xfd,0x0d,0x02, + 0xf3,0xfc,0x85,0x00,0x00,0x00,0x00,0x02,0x00,0xa0, + 0x00,0x00,0x03,0x04,0x05,0xb6,0x00,0x0b,0x00,0x15, + 0x00,0x00,0x01,0x33,0x32,0x16,0x15,0x10,0x21,0x23, + 0x11,0x23,0x11,0x33,0x11,0x11,0x33,0x32,0x37,0x36, + 0x10,0x27,0x26,0x23,0x01,0x02,0x66,0xd5,0xc7,0xfe, + 0x69,0x6b,0x62,0x62,0x62,0xa9,0x4a,0x49,0x48,0x46, + 0xa3,0x04,0xa8,0xc6,0xd2,0xfe,0x3e,0xfe,0xb2,0x05, + 0xb6,0xfe,0x92,0xfd,0x64,0x4d,0x4d,0x01,0x6b,0x4b, + 0x4c,0x00,0x00,0x01,0x00,0x91,0xff,0xec,0x02,0xf0, + 0x06,0x1f,0x00,0x29,0x00,0x00,0x33,0x11,0x34,0x36, + 0x33,0x32,0x11,0x14,0x06,0x15,0x14,0x16,0x17,0x17, + 0x16,0x10,0x07,0x06,0x22,0x27,0x35,0x16,0x16,0x33, + 0x32,0x36,0x35,0x34,0x2e,0x02,0x34,0x36,0x37,0x36, + 0x35,0x34,0x23,0x22,0x06,0x15,0x11,0x91,0x92,0x7c, + 0xf4,0xb6,0x2f,0x40,0x3b,0x69,0x47,0x47,0xe7,0x3e, + 0x2c,0x4f,0x34,0x4e,0x55,0x2d,0xa0,0x41,0x28,0x31, + 0x59,0x93,0x55,0x5b,0x04,0xb4,0xac,0xbf,0xfe,0xeb, + 0x78,0xeb,0x49,0x39,0x5c,0x50,0x46,0x78,0xfe,0xd9, + 0x55,0x53,0x35,0x64,0x1e,0x21,0x74,0x69,0x3c,0x6f, + 0xc1,0x8c,0x76,0x5a,0x3d,0x70,0x76,0xb7,0x87,0x80, + 0xfb,0x42,0x00,0x03,0x00,0x4e,0xff,0xec,0x02,0x83, + 0x06,0x21,0x00,0x09,0x00,0x20,0x00,0x2a,0x00,0x00, + 0x13,0x33,0x16,0x16,0x17,0x15,0x23,0x26,0x26,0x27, + 0x03,0x36,0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06, + 0x23,0x22,0x27,0x26,0x10,0x36,0x37,0x37,0x35,0x34, + 0x26,0x22,0x07,0x03,0x14,0x16,0x33,0x32,0x36,0x35, + 0x35,0x07,0x04,0xa3,0x7d,0x1d,0x6a,0x38,0x30,0x3f, + 0xa8,0x25,0x09,0x70,0x01,0x04,0x75,0x4e,0x0c,0x04, + 0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d,0xb4, + 0x61,0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe,0x06, + 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xfd,0xfc, + 0x46,0xaa,0xc5,0xfd,0x1d,0x98,0xac,0x54,0x55,0x01, + 0x29,0xb5,0x08,0x06,0x5a,0x99,0x8a,0x3d,0xfd,0x60, + 0x73,0x71,0xca,0xb7,0x71,0x06,0x0d,0x00,0x00,0x03, + 0x00,0x4e,0xff,0xec,0x02,0x83,0x06,0x21,0x00,0x08, + 0x00,0x1f,0x00,0x29,0x00,0x00,0x01,0x15,0x06,0x06, + 0x07,0x23,0x35,0x36,0x37,0x01,0x36,0x20,0x16,0x15, + 0x11,0x23,0x27,0x23,0x06,0x23,0x22,0x27,0x26,0x10, + 0x36,0x37,0x37,0x35,0x34,0x26,0x22,0x07,0x03,0x14, + 0x16,0x33,0x32,0x36,0x35,0x35,0x07,0x04,0x02,0x5e, + 0x25,0xa1,0x47,0x2f,0x7e,0x41,0xfe,0xb9,0x70,0x01, + 0x04,0x75,0x4e,0x0c,0x04,0x4e,0x9e,0x6b,0x40,0x40, + 0xba,0xa8,0x75,0x4d,0xb4,0x61,0x11,0x52,0x4a,0x66, + 0x71,0x71,0xfe,0xfe,0x06,0x21,0x11,0x42,0xba,0x3b, + 0x15,0xa4,0x8f,0xfd,0xeb,0x46,0xaa,0xc5,0xfd,0x1d, + 0x98,0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a, + 0x99,0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71, + 0x06,0x0d,0x00,0x00,0x00,0x03,0x00,0x4e,0xff,0xec, + 0x02,0x83,0x06,0x23,0x00,0x11,0x00,0x28,0x00,0x32, + 0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06, + 0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17, + 0x05,0x36,0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06, + 0x23,0x22,0x27,0x26,0x10,0x36,0x37,0x37,0x35,0x34, + 0x26,0x22,0x07,0x03,0x14,0x16,0x33,0x32,0x36,0x35, + 0x35,0x07,0x04,0x02,0x6d,0x2f,0x2a,0x31,0x61,0x13, + 0x2c,0x51,0x31,0x2b,0x7a,0x40,0x5f,0x17,0x37,0x3c, + 0x34,0xfe,0x2d,0x70,0x01,0x04,0x75,0x4e,0x0c,0x04, + 0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d,0xb4, + 0x61,0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe,0x04, + 0xdb,0x2a,0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8, + 0x8d,0x36,0x5b,0x5f,0x45,0xe2,0x46,0xaa,0xc5,0xfd, + 0x1d,0x98,0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06, + 0x5a,0x99,0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7, + 0x71,0x06,0x0d,0x00,0x00,0x03,0x00,0x4e,0xff,0xec, + 0x02,0xa5,0x05,0xae,0x00,0x15,0x00,0x2c,0x00,0x36, + 0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07, + 0x23,0x36,0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32, + 0x37,0x33,0x06,0x06,0x05,0x36,0x20,0x16,0x15,0x11, + 0x23,0x27,0x23,0x06,0x23,0x22,0x27,0x26,0x10,0x36, + 0x37,0x37,0x35,0x34,0x26,0x22,0x07,0x03,0x14,0x16, + 0x33,0x32,0x36,0x35,0x35,0x07,0x04,0x02,0x05,0x20, + 0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54,0x46, + 0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09,0x54, + 0xfe,0x52,0x70,0x01,0x04,0x75,0x4e,0x0c,0x04,0x4e, + 0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d,0xb4,0x61, + 0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe,0x04,0xdb, + 0x28,0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f, + 0x81,0x65,0x6e,0xcf,0x46,0xaa,0xc5,0xfd,0x1d,0x98, + 0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a,0x99, + 0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71,0x06, + 0x0d,0x00,0x00,0x04,0x00,0x4e,0xff,0xec,0x02,0x83, + 0x05,0xbe,0x00,0x07,0x00,0x0f,0x00,0x26,0x00,0x30, + 0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x24,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x01,0x36, + 0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06,0x23,0x22, + 0x27,0x26,0x10,0x36,0x37,0x37,0x35,0x34,0x26,0x22, + 0x07,0x03,0x14,0x16,0x33,0x32,0x36,0x35,0x35,0x07, + 0x04,0xa5,0x25,0x35,0x23,0x23,0x35,0x25,0x01,0x31, + 0x24,0x35,0x24,0x24,0x35,0x24,0xfe,0xc4,0x70,0x01, + 0x04,0x75,0x4e,0x0c,0x04,0x4e,0x9e,0x6b,0x40,0x40, + 0xba,0xa8,0x75,0x4d,0xb4,0x61,0x11,0x52,0x4a,0x66, + 0x71,0x71,0xfe,0xfe,0x05,0x95,0x29,0x29,0x52,0x2a, + 0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfe,0xc8,0x46, + 0xaa,0xc5,0xfd,0x1d,0x98,0xac,0x54,0x55,0x01,0x29, + 0xb5,0x08,0x06,0x5a,0x99,0x8a,0x3d,0xfd,0x60,0x73, + 0x71,0xca,0xb7,0x71,0x06,0x0d,0x00,0x00,0x00,0x04, + 0x00,0x4e,0xff,0xec,0x02,0x83,0x06,0x58,0x00,0x07, + 0x00,0x0f,0x00,0x26,0x00,0x30,0x00,0x00,0x12,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x26,0x22,0x06, + 0x14,0x16,0x32,0x36,0x01,0x36,0x20,0x16,0x15,0x11, + 0x23,0x27,0x23,0x06,0x23,0x22,0x27,0x26,0x10,0x36, + 0x37,0x37,0x35,0x34,0x26,0x22,0x07,0x03,0x14,0x16, + 0x33,0x32,0x36,0x35,0x35,0x07,0x04,0xb9,0x6b,0xb3, + 0x70,0x6c,0xb8,0x6a,0x01,0x40,0x3f,0x70,0x43,0x3e, + 0x71,0x43,0xfe,0xa1,0x70,0x01,0x04,0x75,0x4e,0x0c, + 0x04,0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d, + 0xb4,0x61,0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe, + 0x05,0xf3,0x65,0x64,0xab,0x66,0x64,0x8b,0x40,0x41, + 0x69,0x3f,0x40,0xfe,0xa3,0x46,0xaa,0xc5,0xfd,0x1d, + 0x98,0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a, + 0x99,0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71, + 0x06,0x0d,0x00,0x00,0x00,0x03,0x00,0x4e,0xff,0xec, + 0x04,0x8b,0x04,0x52,0x00,0x22,0x00,0x29,0x00,0x33, + 0x00,0x00,0x01,0x32,0x17,0x36,0x33,0x32,0x16,0x15, + 0x15,0x21,0x12,0x33,0x32,0x37,0x15,0x06,0x22,0x26, + 0x27,0x06,0x06,0x22,0x27,0x26,0x10,0x36,0x37,0x37, + 0x35,0x34,0x26,0x22,0x07,0x27,0x36,0x01,0x35,0x34, + 0x26,0x23,0x22,0x03,0x04,0x06,0x14,0x16,0x33,0x32, + 0x36,0x35,0x35,0x07,0x01,0x85,0xb2,0x33,0x54,0xa6, + 0x88,0x9f,0xfd,0xfe,0x09,0xf9,0x71,0x6c,0x65,0xe3, + 0xa1,0x27,0x2d,0x8d,0xd0,0x40,0x40,0xba,0xa8,0x75, + 0x50,0xb1,0x61,0x29,0x71,0x03,0x22,0x6e,0x5d,0xc2, + 0x15,0xfe,0xa4,0x7d,0x52,0x4a,0x66,0x71,0x71,0x04, + 0x52,0xac,0xac,0xff,0xdc,0x58,0xfe,0x23,0x43,0x58, + 0x41,0x7f,0x72,0x7e,0x73,0x54,0x55,0x01,0x29,0xb5, + 0x08,0x06,0x5a,0x93,0x90,0x3d,0x4b,0x46,0xfe,0x23, + 0x0c,0xad,0xcc,0xfe,0x7b,0x53,0x7e,0xf6,0x71,0xca, + 0xb7,0x71,0x06,0x00,0x00,0x01,0x00,0x60,0xfe,0x14, + 0x02,0x52,0x04,0x52,0x00,0x24,0x00,0x00,0x01,0x22, + 0x10,0x33,0x32,0x37,0x15,0x06,0x06,0x23,0x23,0x07, + 0x16,0x15,0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x33, + 0x32,0x36,0x34,0x26,0x27,0x37,0x26,0x11,0x10,0x12, + 0x33,0x32,0x17,0x07,0x26,0x01,0xb2,0xef,0xef,0x46, + 0x54,0x1f,0x60,0x25,0x03,0x2a,0xa0,0x7b,0x6f,0x3d, + 0x19,0x21,0x2d,0x4c,0x4c,0x54,0x52,0x43,0xfe,0xa8, + 0xa2,0x65,0x43,0x25,0x42,0x03,0xf8,0xfc,0x4a,0x20, + 0x50,0x11,0x15,0x5f,0x27,0x89,0x62,0x67,0x0b,0x4e, + 0x0b,0x41,0x72,0x3e,0x0d,0x94,0x3e,0x01,0xe7,0x01, + 0x17,0x01,0x22,0x25,0x54,0x1f,0x00,0x03,0x00,0x60, + 0xff,0xec,0x02,0xc3,0x06,0x21,0x00,0x09,0x00,0x1b, + 0x00,0x21,0x00,0x00,0x13,0x33,0x16,0x16,0x17,0x15, + 0x23,0x26,0x26,0x27,0x01,0x22,0x27,0x26,0x10,0x12, + 0x33,0x32,0x12,0x15,0x15,0x21,0x12,0x21,0x32,0x37, + 0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03,0xc5,0x7d, + 0x1d,0x6a,0x38,0x30,0x3f,0xa8,0x25,0x01,0x00,0xac, + 0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd,0xfe,0x04,0x01, + 0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d,0xc4,0x13,0x06, + 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xf9,0xdc, + 0x92,0x94,0x02,0x1b,0x01,0x25,0xff,0x00,0xdb,0x58, + 0xfe,0x27,0x43,0x5c,0x41,0x02,0x89,0xb3,0xd4,0xfe, + 0x79,0x00,0x00,0x03,0x00,0x60,0xff,0xec,0x02,0xc3, + 0x06,0x21,0x00,0x08,0x00,0x1a,0x00,0x20,0x00,0x00, + 0x01,0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03, + 0x22,0x27,0x26,0x10,0x12,0x33,0x32,0x12,0x15,0x15, + 0x21,0x12,0x21,0x32,0x37,0x15,0x06,0x13,0x34,0x26, + 0x23,0x22,0x03,0x02,0x93,0x25,0xa2,0x46,0x2f,0x7e, + 0x41,0x51,0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd, + 0xfe,0x04,0x01,0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d, + 0xc4,0x13,0x06,0x21,0x11,0x42,0xba,0x3b,0x15,0xa4, + 0x8f,0xf9,0xcb,0x92,0x94,0x02,0x1b,0x01,0x25,0xff, + 0x00,0xdb,0x58,0xfe,0x27,0x43,0x5c,0x41,0x02,0x89, + 0xb3,0xd4,0xfe,0x79,0x00,0x03,0x00,0x60,0xff,0xec, + 0x02,0xc3,0x06,0x21,0x00,0x11,0x00,0x23,0x00,0x29, + 0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06, + 0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17, + 0x03,0x22,0x27,0x26,0x10,0x12,0x33,0x32,0x12,0x15, + 0x15,0x21,0x12,0x21,0x32,0x37,0x15,0x06,0x13,0x34, + 0x26,0x23,0x22,0x03,0x02,0x88,0x2f,0x2a,0x31,0x61, + 0x13,0x2c,0x51,0x31,0x2b,0x79,0x41,0x5f,0x17,0x37, + 0x3c,0x34,0xc3,0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c, + 0xfd,0xfe,0x04,0x01,0x04,0x67,0x70,0x68,0x2c,0x6d, + 0x5d,0xc4,0x13,0x04,0xd9,0x2a,0x3b,0x70,0x15,0x33, + 0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45,0xfb, + 0x00,0x92,0x94,0x02,0x1b,0x01,0x25,0xff,0x00,0xdb, + 0x58,0xfe,0x27,0x43,0x5c,0x41,0x02,0x89,0xb3,0xd4, + 0xfe,0x79,0x00,0x00,0x00,0x04,0x00,0x60,0xff,0xec, + 0x02,0xc3,0x05,0xbe,0x00,0x07,0x00,0x0f,0x00,0x21, + 0x00,0x27,0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x03,0x22,0x27,0x26,0x10,0x12,0x33,0x32,0x12,0x15, + 0x15,0x21,0x12,0x21,0x32,0x37,0x15,0x06,0x13,0x34, + 0x26,0x23,0x22,0x03,0xc3,0x25,0x35,0x23,0x23,0x35, + 0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x2f, + 0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd,0xfe,0x04, + 0x01,0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d,0xc4,0x13, + 0x05,0x95,0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29, + 0x52,0x2a,0x2b,0xfa,0xa8,0x92,0x94,0x02,0x1b,0x01, + 0x25,0xff,0x00,0xdb,0x58,0xfe,0x27,0x43,0x5c,0x41, + 0x02,0x89,0xb3,0xd4,0xfe,0x79,0x00,0x02,0xff,0xe0, + 0x00,0x00,0x01,0x1c,0x06,0x21,0x00,0x09,0x00,0x0d, + 0x00,0x00,0x03,0x33,0x16,0x16,0x17,0x15,0x23,0x26, + 0x26,0x27,0x01,0x23,0x11,0x33,0x20,0x7d,0x1d,0x6a, + 0x38,0x30,0x3f,0xa8,0x25,0x01,0x10,0x5f,0x5f,0x06, + 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xf9,0xf0, + 0x04,0x3d,0x00,0x02,0x00,0x71,0x00,0x00,0x01,0xad, + 0x06,0x21,0x00,0x08,0x00,0x0c,0x00,0x00,0x01,0x15, + 0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03,0x23,0x11, + 0x33,0x01,0xad,0x25,0xa2,0x46,0x2f,0x7e,0x41,0x40, + 0x5f,0x5f,0x06,0x21,0x11,0x42,0xba,0x3b,0x15,0xa4, + 0x8f,0xf9,0xdf,0x04,0x3d,0x00,0x00,0x00,0x00,0x02, + 0xff,0xd6,0x00,0x00,0x01,0xad,0x06,0x21,0x00,0x11, + 0x00,0x15,0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06, + 0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17, + 0x16,0x17,0x03,0x23,0x11,0x33,0x01,0xad,0x2f,0x2a, + 0x31,0x61,0x13,0x2c,0x51,0x31,0x2b,0x7a,0x40,0x5f, + 0x17,0x37,0x3c,0x34,0xbd,0x5f,0x5f,0x04,0xd9,0x2a, + 0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36, + 0x5b,0x5f,0x45,0xfb,0x14,0x04,0x3d,0x00,0x00,0x03, + 0xff,0xec,0x00,0x00,0x01,0x9a,0x05,0xbe,0x00,0x07, + 0x00,0x0f,0x00,0x13,0x00,0x00,0x02,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x03,0x23,0x11,0x33,0x14,0x25,0x35,0x23, + 0x23,0x35,0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35, + 0x24,0x2d,0x5f,0x5f,0x05,0x95,0x29,0x29,0x52,0x2a, + 0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfa,0xbc,0x04, + 0x3d,0x00,0x00,0x00,0x00,0x02,0x00,0x5e,0xff,0xec, + 0x02,0xfa,0x06,0x14,0x00,0x17,0x00,0x21,0x00,0x00, + 0x01,0x10,0x21,0x22,0x02,0x10,0x36,0x20,0x17,0x33, + 0x02,0x27,0x07,0x27,0x37,0x26,0x27,0x37,0x16,0x17, + 0x37,0x17,0x07,0x00,0x05,0x22,0x06,0x10,0x16,0x32, + 0x36,0x35,0x34,0x26,0x02,0xfa,0xfe,0xae,0x94,0xb6, + 0xa1,0x01,0x31,0x49,0x08,0x34,0xba,0xae,0x27,0xa0, + 0x36,0x3a,0x2f,0x4b,0x42,0xbc,0x27,0xae,0x01,0x1b, + 0xfe,0xb6,0x76,0x7c,0x81,0xe9,0x72,0x82,0x02,0x02, + 0xfd,0xea,0x01,0x0f,0x01,0xc4,0xfb,0x7b,0x01,0x26, + 0xd8,0x66,0x42,0x5e,0x33,0x2d,0x3d,0x2f,0x41,0x6e, + 0x41,0x67,0xfe,0xbb,0xc5,0xcd,0xfe,0x84,0xd5,0xcd, + 0xd4,0xa6,0xd7,0x00,0x00,0x02,0x00,0x91,0x00,0x00, + 0x02,0xd9,0x05,0xae,0x00,0x15,0x00,0x29,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, + 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, + 0x06,0x06,0x07,0x32,0x16,0x15,0x11,0x23,0x11,0x10, + 0x23,0x22,0x06,0x15,0x11,0x23,0x11,0x33,0x17,0x33, + 0x36,0x36,0x02,0x36,0x20,0x4a,0x1c,0x4c,0x40,0x2c, + 0x09,0x4a,0x0c,0x54,0x46,0x20,0x49,0x1b,0x49,0x25, + 0x3b,0x14,0x4a,0x09,0x54,0x9c,0x80,0x7c,0x5e,0xa0, + 0x7a,0x71,0x5f,0x50,0x08,0x09,0x21,0x80,0x04,0xdb, + 0x28,0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f, + 0x81,0x65,0x6e,0x89,0xab,0xb9,0xfd,0x12,0x02,0xec, + 0x01,0x0e,0xca,0xdc,0xfd,0xac,0x04,0x3d,0x97,0x50, + 0x5c,0x00,0x00,0x03,0x00,0x5e,0xff,0xec,0x02,0xf4, + 0x06,0x21,0x00,0x09,0x00,0x12,0x00,0x1a,0x00,0x00, + 0x13,0x33,0x16,0x16,0x17,0x15,0x23,0x26,0x26,0x27, + 0x13,0x32,0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05, + 0x22,0x06,0x15,0x10,0x33,0x32,0x10,0xce,0x7d,0x1d, + 0x6a,0x38,0x30,0x3f,0xa8,0x25,0xdc,0x9c,0xae,0xad, + 0xfe,0xc0,0xa9,0x01,0x4a,0x78,0x6f,0xe7,0xe9,0x06, + 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xfe,0x42, + 0xfe,0xda,0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12, + 0x02,0x31,0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00, + 0x00,0x00,0x00,0x03,0x00,0x5e,0xff,0xec,0x02,0xf4, + 0x06,0x21,0x00,0x08,0x00,0x11,0x00,0x19,0x00,0x00, + 0x01,0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03, + 0x32,0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05,0x22, + 0x06,0x15,0x10,0x33,0x32,0x10,0x02,0x91,0x25,0xa2, + 0x46,0x2f,0x7e,0x41,0x6a,0x9c,0xae,0xad,0xfe,0xc0, + 0xa9,0x01,0x4a,0x78,0x6f,0xe7,0xe9,0x06,0x21,0x11, + 0x42,0xba,0x3b,0x15,0xa4,0x8f,0xfe,0x31,0xfe,0xda, + 0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02,0x31, + 0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x00,0x03, + 0x00,0x5e,0xff,0xec,0x02,0xf4,0x06,0x21,0x00,0x11, + 0x00,0x1a,0x00,0x22,0x00,0x00,0x01,0x23,0x26,0x27, + 0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33, + 0x16,0x17,0x16,0x17,0x07,0x32,0x12,0x10,0x02,0x20, + 0x02,0x11,0x10,0x05,0x22,0x06,0x15,0x10,0x33,0x32, + 0x10,0x02,0x96,0x2f,0x2a,0x31,0x61,0x13,0x2c,0x51, + 0x31,0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c,0x34,0xec, + 0x9c,0xae,0xad,0xfe,0xc0,0xa9,0x01,0x4a,0x78,0x6f, + 0xe7,0xe9,0x04,0xd9,0x2a,0x3b,0x70,0x15,0x33,0x5e, + 0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45,0x9a,0xfe, + 0xda,0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02, + 0x31,0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x03, + 0x00,0x5e,0xff,0xec,0x02,0xf4,0x05,0xae,0x00,0x15, + 0x00,0x1e,0x00,0x26,0x00,0x00,0x01,0x22,0x26,0x27, + 0x26,0x22,0x06,0x07,0x23,0x36,0x36,0x33,0x32,0x16, + 0x17,0x16,0x33,0x32,0x37,0x33,0x06,0x06,0x07,0x32, + 0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05,0x22,0x06, + 0x15,0x10,0x33,0x32,0x10,0x02,0x21,0x20,0x4a,0x1c, + 0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54,0x46,0x20,0x49, + 0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09,0x54,0xba,0x9c, + 0xae,0xad,0xfe,0xc0,0xa9,0x01,0x4a,0x78,0x6f,0xe7, + 0xe9,0x04,0xdb,0x28,0x17,0x40,0x46,0x3b,0x64,0x6f, + 0x28,0x18,0x3f,0x81,0x65,0x6e,0x89,0xfe,0xda,0xfd, + 0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02,0x31,0x5a, + 0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x04,0x00,0x5e, + 0xff,0xec,0x02,0xf4,0x05,0xbe,0x00,0x07,0x00,0x0f, + 0x00,0x18,0x00,0x20,0x00,0x00,0x12,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x07,0x32,0x12,0x10,0x02,0x20,0x02,0x11, + 0x10,0x05,0x22,0x06,0x15,0x10,0x33,0x32,0x10,0xd2, + 0x25,0x35,0x23,0x23,0x35,0x25,0x01,0x31,0x24,0x35, + 0x24,0x24,0x35,0x24,0x59,0x9c,0xae,0xad,0xfe,0xc0, + 0xa9,0x01,0x4a,0x78,0x6f,0xe7,0xe9,0x05,0x95,0x29, + 0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b, + 0xf2,0xfe,0xda,0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01, + 0x12,0x02,0x31,0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2, + 0x00,0x00,0x00,0x03,0x00,0x3b,0x01,0x0a,0x02,0xf8, + 0x04,0x9a,0x00,0x06,0x00,0x0a,0x00,0x11,0x00,0x00, + 0x01,0x22,0x34,0x32,0x15,0x14,0x06,0x01,0x21,0x35, + 0x21,0x01,0x22,0x34,0x32,0x15,0x14,0x06,0x01,0x9a, + 0x4e,0x9b,0x2a,0x01,0x3b,0xfd,0x43,0x02,0xbd,0xfe, + 0xa2,0x4e,0x9b,0x2a,0x03,0xc5,0xd5,0x6b,0x36,0x34, + 0xfe,0xe5,0x52,0xfe,0x0e,0xd5,0x6a,0x36,0x35,0x00, + 0x00,0x03,0x00,0x44,0xff,0x71,0x03,0x0e,0x04,0xa6, + 0x00,0x11,0x00,0x18,0x00,0x1f,0x00,0x00,0x01,0x16, + 0x10,0x02,0x23,0x22,0x27,0x07,0x27,0x37,0x26,0x11, + 0x10,0x21,0x32,0x17,0x37,0x17,0x05,0x22,0x06,0x10, + 0x17,0x01,0x26,0x03,0x32,0x11,0x34,0x27,0x01,0x16, + 0x02,0xa8,0x4c,0xad,0xa1,0x72,0x46,0x5f,0x4b,0x70, + 0x56,0x01,0x4c,0x75,0x50,0x54,0x4b,0xfe,0x9a,0x78, + 0x6f,0x26,0x01,0x5b,0x38,0x62,0xe9,0x20,0xfe,0xaa, + 0x33,0x03,0xac,0x94,0xfd,0xf7,0xfe,0xdd,0x45,0xc0, + 0x29,0xe3,0x92,0x01,0x12,0x02,0x31,0x56,0xaa,0x29, + 0x85,0xe9,0xfe,0x4a,0x72,0x02,0xbb,0x56,0xfc,0x4e, + 0x01,0xdb,0xb3,0x69,0xfd,0x4c,0x43,0x00,0x00,0x00, + 0x00,0x02,0x00,0x8d,0xff,0xec,0x02,0xd5,0x06,0x21, + 0x00,0x09,0x00,0x1f,0x00,0x00,0x13,0x33,0x16,0x16, + 0x17,0x15,0x23,0x26,0x26,0x27,0x01,0x23,0x27,0x23, + 0x06,0x06,0x23,0x22,0x27,0x26,0x35,0x11,0x33,0x11, + 0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33,0xc3,0x7d, + 0x1d,0x6a,0x38,0x30,0x3f,0xa8,0x25,0x02,0x12,0x50, + 0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f,0x4c, + 0x51,0x7c,0x72,0x5e,0x06,0x21,0x43,0xaa,0x46,0x15, + 0x33,0xbf,0x45,0xf9,0xf0,0x98,0x52,0x5a,0x5d,0x5d, + 0xd3,0x02,0xc4,0xfd,0x3c,0xa0,0x95,0xc8,0xdd,0x02, + 0x54,0x00,0x00,0x00,0x00,0x02,0x00,0x8d,0xff,0xec, + 0x02,0xd5,0x06,0x21,0x00,0x08,0x00,0x1e,0x00,0x00, + 0x01,0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x13, + 0x23,0x27,0x23,0x06,0x06,0x23,0x22,0x27,0x26,0x35, + 0x11,0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x35,0x11, + 0x33,0x02,0x9b,0x25,0xa2,0x46,0x2f,0x7e,0x41,0xb7, + 0x50,0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f, + 0x4c,0x51,0x7c,0x72,0x5e,0x06,0x21,0x11,0x42,0xba, + 0x3b,0x15,0xa4,0x8f,0xf9,0xdf,0x98,0x52,0x5a,0x5d, + 0x5d,0xd3,0x02,0xc4,0xfd,0x3c,0xa0,0x95,0xc8,0xdd, + 0x02,0x54,0x00,0x00,0x00,0x02,0x00,0x8d,0xff,0xec, + 0x02,0xd5,0x06,0x21,0x00,0x11,0x00,0x27,0x00,0x00, + 0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23, + 0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17,0x13,0x23, + 0x27,0x23,0x06,0x06,0x23,0x22,0x27,0x26,0x35,0x11, + 0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33, + 0x02,0x96,0x2f,0x2a,0x31,0x61,0x13,0x2c,0x51,0x31, + 0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c,0x34,0x3f,0x50, + 0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f,0x4c, + 0x51,0x7c,0x72,0x5e,0x04,0xd9,0x2a,0x3b,0x70,0x15, + 0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45, + 0xfb,0x14,0x98,0x52,0x5a,0x5d,0x5d,0xd3,0x02,0xc4, + 0xfd,0x3c,0xa0,0x95,0xc8,0xdd,0x02,0x54,0x00,0x03, + 0x00,0x8d,0xff,0xec,0x02,0xd5,0x05,0xbe,0x00,0x07, + 0x00,0x0f,0x00,0x25,0x00,0x00,0x12,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x13,0x23,0x27,0x23,0x06,0x06,0x23,0x22, + 0x27,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x33,0x32, + 0x36,0x35,0x11,0x33,0xda,0x25,0x35,0x23,0x23,0x35, + 0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0xca, + 0x50,0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f, + 0x4c,0x51,0x7c,0x72,0x5e,0x05,0x95,0x29,0x29,0x52, + 0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfa,0xbc, + 0x98,0x52,0x5a,0x5d,0x5d,0xd3,0x02,0xc4,0xfd,0x3c, + 0xa0,0x95,0xc8,0xdd,0x02,0x54,0x00,0x00,0x00,0x02, + 0xff,0xfe,0xfe,0x14,0x02,0x83,0x06,0x21,0x00,0x08, + 0x00,0x1f,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, + 0x35,0x36,0x37,0x01,0x22,0x27,0x35,0x16,0x33,0x32, + 0x36,0x37,0x37,0x01,0x33,0x13,0x16,0x17,0x33,0x36, + 0x37,0x13,0x33,0x01,0x06,0x06,0x02,0x39,0x25,0xa2, + 0x46,0x2f,0x7e,0x41,0xfe,0x98,0x25,0x31,0x2a,0x24, + 0x3b,0x46,0x1c,0x30,0xfe,0xf1,0x60,0xa4,0x1e,0x1a, + 0x08,0x15,0x20,0xa0,0x60,0xfe,0xc3,0x24,0x72,0x06, + 0x21,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f,0xf7,0xf3, + 0x11,0x56,0x0e,0x65,0x74,0xbc,0x04,0x3b,0xfd,0x5b, + 0x81,0x92,0x8f,0x86,0x02,0xa3,0xfa,0xf6,0x93,0x8c, + 0x00,0x02,0x00,0x91,0xfe,0x14,0x03,0x1f,0x06,0x14, + 0x00,0x13,0x00,0x1f,0x00,0x00,0x01,0x20,0x11,0x10, + 0x02,0x23,0x22,0x26,0x27,0x23,0x17,0x11,0x23,0x11, + 0x33,0x11,0x07,0x33,0x36,0x36,0x03,0x15,0x14,0x16, + 0x33,0x32,0x37,0x36,0x10,0x26,0x22,0x06,0x01,0xe1, + 0x01,0x3e,0x9d,0x94,0x53,0x89,0x22,0x07,0x0b,0x63, + 0x5f,0x04,0x04,0x27,0x7f,0xa6,0x76,0x79,0x6e,0x36, + 0x37,0x69,0xee,0x73,0x04,0x52,0xfd,0xcf,0xfe,0xf0, + 0xfe,0xdb,0x5c,0x4e,0x77,0xfd,0xf5,0x08,0x00,0xfe, + 0x1c,0x88,0x51,0x59,0xfd,0xf4,0x1f,0xf9,0xec,0x71, + 0x6f,0x01,0xf6,0xe0,0xd3,0x00,0x00,0x00,0x00,0x03, + 0xff,0xfe,0xfe,0x14,0x02,0x83,0x05,0xbe,0x00,0x07, + 0x00,0x0f,0x00,0x26,0x00,0x00,0x12,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x01,0x22,0x27,0x35,0x16,0x33,0x32,0x36, + 0x37,0x37,0x01,0x33,0x13,0x16,0x17,0x33,0x36,0x37, + 0x13,0x33,0x01,0x06,0x06,0x74,0x25,0x35,0x23,0x23, + 0x35,0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24, + 0xfe,0xaf,0x25,0x31,0x2a,0x24,0x3b,0x46,0x1c,0x30, + 0xfe,0xf1,0x60,0xa4,0x1e,0x1a,0x08,0x15,0x20,0xa0, + 0x60,0xfe,0xc3,0x24,0x72,0x05,0x95,0x29,0x29,0x52, + 0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xf8,0xd0, + 0x11,0x56,0x0e,0x65,0x74,0xbc,0x04,0x3b,0xfd,0x5b, + 0x81,0x92,0x8f,0x86,0x02,0xa3,0xfa,0xf6,0x93,0x8c, + 0x00,0x01,0x00,0x91,0x00,0x00,0x00,0xf0,0x04,0x3d, + 0x00,0x03,0x00,0x00,0x33,0x23,0x11,0x33,0xf0,0x5f, + 0x5f,0x04,0x3d,0x00,0x00,0x02,0x00,0x6f,0xff,0xfa, + 0x04,0x6f,0x05,0xbc,0x00,0x11,0x00,0x19,0x00,0x00, + 0x01,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15, + 0x21,0x07,0x20,0x11,0x10,0x12,0x33,0x17,0x03,0x11, + 0x22,0x07,0x06,0x10,0x17,0x16,0x04,0x6f,0xfe,0x4f, + 0x01,0x98,0xfe,0x68,0x01,0xb1,0xfe,0x58,0x7d,0xfe, + 0x25,0xf6,0xed,0x73,0x69,0xc9,0x5f,0x5d,0x5c,0x5d, + 0x05,0xb6,0x5e,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x06, + 0x02,0xe5,0x01,0x6a,0x01,0x73,0x06,0xfa,0xa2,0x05, + 0x06,0x96,0x96,0xfd,0x58,0x9a,0x98,0x00,0x00,0x00, + 0x00,0x03,0x00,0x5e,0xff,0xec,0x04,0xf2,0x04,0x52, + 0x00,0x18,0x00,0x1f,0x00,0x28,0x00,0x00,0x05,0x22, + 0x27,0x06,0x23,0x22,0x02,0x11,0x10,0x21,0x32,0x17, + 0x36,0x33,0x32,0x12,0x15,0x15,0x21,0x12,0x21,0x32, + 0x37,0x15,0x06,0x13,0x35,0x34,0x26,0x23,0x22,0x03, + 0x07,0x35,0x10,0x23,0x22,0x06,0x15,0x10,0x20,0x03, + 0xf4,0xda,0x59,0x4f,0xcc,0x9f,0xa9,0x01,0x4c,0xc1, + 0x53,0x50,0xc1,0x87,0x9c,0xfd,0xfe,0x04,0x01,0x04, + 0x67,0x70,0x68,0x2c,0x6d,0x5d,0xc3,0x14,0x63,0xe7, + 0x78,0x6f,0x01,0xce,0x14,0xe7,0xe7,0x01,0x23,0x01, + 0x12,0x02,0x31,0xe3,0xe3,0xff,0x00,0xdb,0x58,0xfe, + 0x23,0x43,0x58,0x41,0x02,0x89,0x0c,0xab,0xce,0xfe, + 0x7b,0x6d,0x19,0x01,0xd7,0xe9,0xee,0xfe,0x21,0x00, + 0x00,0x00,0x00,0x02,0x00,0x56,0xff,0xec,0x02,0xd1, + 0x07,0x73,0x00,0x0f,0x00,0x35,0x00,0x00,0x01,0x15, + 0x06,0x06,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16, + 0x17,0x37,0x36,0x37,0x01,0x32,0x36,0x34,0x26,0x27, + 0x2e,0x02,0x35,0x34,0x35,0x34,0x36,0x33,0x32,0x33, + 0x32,0x17,0x07,0x26,0x22,0x06,0x14,0x16,0x17,0x16, + 0x16,0x15,0x14,0x07,0x06,0x23,0x22,0x27,0x35,0x16, + 0x16,0x02,0xa3,0x38,0x6e,0x18,0x5f,0x46,0x74,0x2b, + 0x31,0x7d,0x13,0x31,0x6f,0x1c,0xfe,0xfb,0x70,0x90, + 0x67,0x8f,0x72,0x6f,0x36,0xc3,0x8c,0x02,0x03,0x9a, + 0x6e,0x26,0x6f,0xdf,0x87,0x63,0x8e,0x94,0x89,0x64, + 0x65,0x99,0xaf,0x6a,0x38,0x98,0x07,0x73,0x13,0x48, + 0xb7,0x36,0x95,0xa0,0x13,0x2f,0x91,0x15,0x37,0x85, + 0x19,0xf8,0xd7,0xaa,0xfc,0x8f,0x46,0x3a,0x6a,0x8d, + 0x64,0x06,0x06,0x97,0xce,0x3c,0x5e,0x39,0x93,0xf5, + 0x86,0x4a,0x48,0xc1,0x8a,0xb4,0x70,0x6f,0x33,0x6a, + 0x1e,0x21,0x00,0x02,0x00,0x4a,0xff,0xec,0x02,0x3d, + 0x06,0x21,0x00,0x0f,0x00,0x2f,0x00,0x00,0x01,0x15, + 0x06,0x06,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16, + 0x17,0x37,0x36,0x37,0x03,0x32,0x36,0x35,0x34,0x2e, + 0x03,0x35,0x34,0x36,0x32,0x17,0x07,0x26,0x22,0x06, + 0x14,0x17,0x16,0x17,0x16,0x17,0x16,0x10,0x06,0x20, + 0x27,0x35,0x16,0x16,0x02,0x3c,0x38,0x6e,0x18,0x5f, + 0x47,0x73,0x2b,0x31,0x7d,0x13,0x31,0x6f,0x1c,0xe4, + 0x54,0x60,0x47,0xd1,0x4f,0x2c,0x9f,0xfb,0x59,0x31, + 0x52,0xb0,0x64,0x22,0x22,0x6e,0x6b,0x28,0x50,0x91, + 0xfe,0xf1,0x51,0x25,0x7a,0x06,0x21,0x13,0x48,0xb7, + 0x36,0x95,0xa0,0x13,0x2f,0x91,0x15,0x37,0x85,0x19, + 0xfa,0x25,0x6d,0x5d,0x47,0x66,0x85,0x52,0x67,0x49, + 0x75,0x99,0x3e,0x53,0x37,0x63,0x99,0x31,0x30,0x45, + 0x46,0x2a,0x56,0xfe,0xf6,0x9a,0x3d,0x6f,0x25,0x2d, + 0x00,0x03,0x00,0x00,0x00,0x00,0x02,0xae,0x07,0x10, + 0x00,0x07,0x00,0x0f,0x00,0x18,0x00,0x00,0x12,0x36, + 0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16, + 0x14,0x06,0x22,0x26,0x03,0x23,0x11,0x01,0x33,0x13, + 0x13,0x33,0x01,0x82,0x25,0x35,0x23,0x23,0x35,0x25, + 0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x2c,0x62, + 0xfe,0xdb,0x68,0xf0,0xee,0x68,0xfe,0xd9,0x06,0xe7, + 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, + 0x2b,0xf9,0x6a,0x02,0x3b,0x03,0x7b,0xfd,0x0d,0x02, + 0xf3,0xfc,0x85,0x00,0x00,0x00,0x00,0x02,0x00,0x39, + 0x00,0x00,0x02,0x5a,0x07,0x73,0x00,0x0f,0x00,0x19, + 0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23,0x26,0x27, + 0x35,0x33,0x16,0x16,0x17,0x37,0x36,0x37,0x13,0x15, + 0x21,0x35,0x01,0x21,0x35,0x21,0x15,0x01,0x02,0x32, + 0x38,0x6e,0x18,0x5f,0x47,0x73,0x2b,0x31,0x7d,0x13, + 0x31,0x6f,0x1c,0x57,0xfd,0xdf,0x01,0xa8,0xfe,0x5e, + 0x02,0x0f,0xfe,0x52,0x07,0x73,0x13,0x48,0xb7,0x36, + 0x95,0xa0,0x13,0x2f,0x91,0x15,0x37,0x85,0x19,0xf8, + 0xeb,0x5e,0x58,0x04,0xfe,0x60,0x5a,0xfb,0x02,0x00, + 0x00,0x00,0x00,0x02,0x00,0x32,0x00,0x00,0x02,0x09, + 0x06,0x21,0x00,0x0f,0x00,0x19,0x00,0x00,0x01,0x15, + 0x06,0x06,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16, + 0x17,0x37,0x36,0x37,0x13,0x15,0x21,0x35,0x01,0x21, + 0x35,0x21,0x15,0x01,0x02,0x09,0x38,0x6e,0x18,0x5f, + 0x46,0x74,0x2b,0x31,0x7d,0x13,0x31,0x6f,0x1c,0x14, + 0xfe,0x4d,0x01,0x40,0xfe,0xd5,0x01,0x8f,0xfe,0xc1, + 0x06,0x21,0x13,0x48,0xb7,0x36,0x95,0xa0,0x13,0x2f, + 0x91,0x15,0x37,0x85,0x19,0xfa,0x33,0x54,0x4c,0x03, + 0x9d,0x54,0x4d,0xfc,0x64,0x00,0x00,0x00,0x00,0x01, + 0x00,0x50,0xfe,0x14,0x02,0xdb,0x05,0xcb,0x00,0x1f, + 0x00,0x00,0x01,0x34,0x36,0x33,0x32,0x17,0x07,0x26, + 0x23,0x06,0x06,0x07,0x15,0x33,0x15,0x23,0x11,0x14, + 0x06,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x35, + 0x11,0x23,0x35,0x37,0x01,0x62,0x67,0x74,0x4b,0x53, + 0x29,0x3f,0x31,0x49,0x35,0x03,0xbe,0xbe,0x6f,0x83, + 0x45,0x3a,0x48,0x31,0x52,0x47,0xa1,0xa1,0x04,0x66, + 0xb7,0xae,0x27,0x56,0x21,0x01,0x7a,0x9e,0xb4,0x54, + 0xfc,0x43,0xc6,0xb7,0x0d,0x5e,0x12,0x7c,0x84,0x03, + 0xe1,0x35,0x27,0x00,0x00,0x01,0x01,0x56,0x04,0xd9, + 0x03,0x2d,0x06,0x21,0x00,0x11,0x00,0x00,0x01,0x23, + 0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36, + 0x37,0x33,0x16,0x17,0x16,0x17,0x03,0x2d,0x2f,0x2a, + 0x31,0x61,0x13,0x2c,0x51,0x31,0x2b,0x7a,0x40,0x5f, + 0x17,0x37,0x3c,0x34,0x04,0xd9,0x2a,0x3b,0x70,0x15, + 0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45, + 0x00,0x00,0x00,0x01,0x01,0x56,0x04,0xd9,0x03,0x2d, + 0x06,0x21,0x00,0x0f,0x00,0x00,0x01,0x15,0x06,0x06, + 0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16,0x17,0x37, + 0x36,0x37,0x03,0x2d,0x38,0x6e,0x18,0x5f,0x46,0x74, + 0x2b,0x31,0x7d,0x13,0x31,0x6f,0x1c,0x06,0x21,0x13, + 0x48,0xb7,0x36,0x95,0xa0,0x13,0x2f,0x91,0x15,0x37, + 0x85,0x19,0x00,0x01,0x01,0x68,0x04,0xdd,0x03,0x1b, + 0x05,0xc7,0x00,0x0b,0x00,0x00,0x01,0x22,0x27,0x33, + 0x16,0x16,0x33,0x32,0x37,0x33,0x06,0x06,0x02,0x3b, + 0xc5,0x0e,0x44,0x07,0x4c,0x40,0x81,0x13,0x48,0x03, + 0x76,0x04,0xdd,0xea,0x49,0x4d,0x96,0x6e,0x7c,0x00, + 0x00,0x01,0x00,0x83,0x05,0x0c,0x01,0x00,0x05,0xc9, + 0x00,0x07,0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06, + 0x22,0x26,0x83,0x24,0x39,0x20,0x20,0x38,0x25,0x05, + 0x96,0x33,0x32,0x58,0x33,0x34,0x00,0x02,0x01,0x89, + 0x04,0xe3,0x03,0x17,0x06,0x58,0x00,0x07,0x00,0x0f, + 0x00,0x00,0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x24,0x26,0x22,0x06,0x14,0x16,0x32,0x36,0x01,0x89, + 0x6b,0xb3,0x70,0x6c,0xb8,0x6a,0x01,0x40,0x3f,0x70, + 0x43,0x3e,0x71,0x43,0x05,0xf3,0x65,0x64,0xab,0x66, + 0x64,0x8b,0x40,0x41,0x69,0x3f,0x40,0x00,0x00,0x00, + 0x00,0x01,0x00,0x44,0xfe,0x42,0x01,0x37,0x00,0x00, + 0x00,0x0f,0x00,0x00,0x13,0x14,0x33,0x32,0x37,0x15, + 0x06,0x23,0x22,0x35,0x34,0x36,0x37,0x33,0x06,0x06, + 0x9e,0x60,0x27,0x12,0x1e,0x2d,0xa8,0x57,0x3c,0x4a, + 0x46,0x3d,0xfe,0xfc,0x6d,0x09,0x4a,0x0c,0xb0,0x4b, + 0x95,0x2e,0x46,0x7b,0x00,0x00,0x00,0x01,0x01,0x29, + 0x04,0xd9,0x03,0x5a,0x05,0xae,0x00,0x15,0x00,0x00, + 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, + 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, + 0x06,0x06,0x02,0xba,0x20,0x4a,0x1c,0x4c,0x40,0x2c, + 0x09,0x4a,0x0c,0x54,0x46,0x20,0x49,0x1b,0x49,0x25, + 0x3b,0x14,0x4a,0x09,0x54,0x04,0xdb,0x28,0x17,0x40, + 0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f,0x81,0x65,0x6e, + 0x00,0x00,0x00,0x02,0x01,0x21,0x04,0xd9,0x03,0x4c, + 0x06,0x21,0x00,0x0a,0x00,0x14,0x00,0x00,0x01,0x15, + 0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x36,0x37,0x21, + 0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x36,0x37,0x02, + 0x42,0x29,0x45,0x45,0x3f,0x2f,0x2c,0x66,0x18,0x01, + 0x81,0x25,0x8d,0x40,0x2f,0x2c,0x66,0x18,0x06,0x21, + 0x11,0x48,0x5d,0x5a,0x38,0x15,0x39,0xc1,0x39,0x11, + 0x48,0xb5,0x3a,0x15,0x39,0xc1,0x39,0x00,0x00,0x02, + 0xff,0xc4,0xfe,0x12,0x00,0x41,0xff,0xb0,0x00,0x05, + 0x00,0x0b,0x00,0x00,0x17,0x32,0x14,0x23,0x22,0x34, + 0x13,0x32,0x14,0x23,0x22,0x34,0x01,0x40,0x40,0x3d, + 0x3d,0x40,0x40,0x3d,0x50,0x96,0x96,0xfe,0xf9,0x97, + 0x97,0x00,0x00,0x05,0xfe,0xb3,0xfe,0x12,0x01,0x4d, + 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x11,0x00,0x17, + 0x00,0x1d,0x00,0x00,0x05,0x32,0x14,0x23,0x22,0x34, + 0x21,0x32,0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23, + 0x22,0x34,0x01,0x32,0x14,0x23,0x22,0x34,0x21,0x32, + 0x14,0x23,0x22,0x34,0xfe,0xf0,0x3f,0x3f,0x3d,0x01, + 0x5c,0x3f,0x3f,0x3d,0x01,0x3b,0x40,0x40,0x3c,0xfe, + 0xad,0x40,0x40,0x3d,0x01,0xcc,0x40,0x40,0x3c,0x50, + 0x96,0x96,0x96,0x96,0x96,0x96,0xfe,0xf9,0x97,0x97, + 0x97,0x97,0x00,0x00,0x00,0x03,0xfe,0xe1,0xfe,0x12, + 0x01,0x1e,0xff,0xb0,0x00,0x05,0x00,0x09,0x00,0x0f, + 0x00,0x00,0x17,0x32,0x14,0x23,0x22,0x34,0x07,0x21, + 0x35,0x21,0x17,0x32,0x14,0x23,0x22,0x34,0xde,0x40, + 0x40,0x3d,0x5c,0xfe,0x9c,0x01,0x64,0x99,0x40,0x40, + 0x3d,0x50,0x96,0x96,0x6e,0x47,0xe0,0x97,0x97,0x00, + 0x00,0x03,0xfe,0xe1,0xfe,0x12,0x01,0x1e,0xff,0xb0, + 0x00,0x05,0x00,0x0d,0x00,0x13,0x00,0x00,0x17,0x32, + 0x14,0x23,0x22,0x34,0x07,0x23,0x15,0x23,0x35,0x23, + 0x35,0x21,0x17,0x32,0x14,0x23,0x22,0x34,0xde,0x40, + 0x40,0x3d,0x5c,0x8e,0x48,0x8e,0x01,0x64,0x99,0x40, + 0x40,0x3d,0x50,0x96,0x96,0x6e,0xca,0xca,0x47,0xe0, + 0x97,0x97,0x00,0x00,0x00,0x01,0xff,0xc3,0xff,0x1a, + 0x00,0x40,0xff,0xb0,0x00,0x05,0x00,0x00,0x15,0x32, + 0x14,0x23,0x22,0x34,0x40,0x40,0x3d,0x50,0x96,0x96, + 0x00,0x00,0x00,0x02,0xff,0x33,0xff,0x1a,0x00,0xce, + 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x00,0x07,0x32, + 0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34, + 0x90,0x3f,0x3f,0x3d,0x01,0x5c,0x3f,0x3f,0x3d,0x50, + 0x96,0x96,0x96,0x96,0x00,0x00,0x00,0x03,0xff,0x35, + 0xfe,0x12,0x00,0xd0,0xff,0xb0,0x00,0x05,0x00,0x0b, + 0x00,0x11,0x00,0x00,0x07,0x32,0x14,0x23,0x22,0x34, + 0x21,0x32,0x14,0x23,0x22,0x34,0x03,0x32,0x14,0x23, + 0x22,0x34,0x8e,0x3f,0x3f,0x3d,0x01,0x5c,0x3f,0x3f, + 0x3d,0x54,0x40,0x40,0x3d,0x50,0x96,0x96,0x96,0x96, + 0xfe,0xf9,0x97,0x97,0x00,0x00,0x00,0x01,0xff,0x4e, + 0xff,0x49,0x00,0xb3,0xff,0x91,0x00,0x03,0x00,0x00, + 0x17,0x21,0x35,0x21,0xb3,0xfe,0x9b,0x01,0x65,0xb7, + 0x48,0x00,0x00,0x00,0x00,0x01,0xff,0x4e,0xfe,0x80, + 0x00,0xb3,0xff,0x91,0x00,0x07,0x00,0x00,0x17,0x23, + 0x15,0x23,0x35,0x23,0x35,0x21,0xb3,0x8f,0x47,0x8f, + 0x01,0x65,0xb7,0xc9,0xc9,0x48,0x00,0x01,0xff,0xc3, + 0x05,0x82,0x00,0x40,0x06,0x18,0x00,0x05,0x00,0x00, + 0x11,0x32,0x14,0x23,0x22,0x34,0x40,0x40,0x3d,0x06, + 0x18,0x96,0x96,0x00,0x00,0x01,0xff,0xc4,0x05,0x82, + 0x00,0x40,0x06,0x18,0x00,0x05,0x00,0x00,0x11,0x32, + 0x14,0x23,0x22,0x34,0x40,0x40,0x3c,0x06,0x18,0x96, + 0x96,0x00,0x00,0x03,0xff,0x35,0xfe,0x12,0x00,0xd0, + 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x11,0x00,0x00, + 0x07,0x32,0x14,0x23,0x22,0x34,0x17,0x32,0x14,0x23, + 0x22,0x34,0x17,0x32,0x14,0x23,0x22,0x34,0x8e,0x3f, + 0x3f,0x3d,0xcb,0x40,0x40,0x3d,0xce,0x3f,0x3f,0x3d, + 0x50,0x96,0x96,0x83,0x97,0x97,0x84,0x97,0x97,0x00, + 0x00,0x00,0x00,0x01,0xff,0xc3,0x02,0x53,0x00,0x40, + 0x02,0xe9,0x00,0x05,0x00,0x00,0x11,0x32,0x14,0x23, + 0x22,0x34,0x40,0x40,0x3d,0x02,0xe9,0x96,0x96,0x00, + 0x00,0x01,0xff,0xd3,0xfe,0x45,0x00,0x2c,0xff,0x77, + 0x00,0x03,0x00,0x00,0x13,0x23,0x11,0x33,0x2c,0x59, + 0x59,0xfe,0x45,0x01,0x32,0x00,0x00,0x00,0x00,0x01, + 0x00,0x35,0x04,0xa3,0x01,0xcf,0x05,0x09,0x00,0x03, + 0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xcf,0xfe,0x66, + 0x01,0x9a,0x04,0xa3,0x66,0x00,0x00,0x01,0xff,0xc3, + 0x05,0x82,0x00,0x40,0x06,0x18,0x00,0x05,0x00,0x00, + 0x11,0x32,0x14,0x23,0x22,0x34,0x40,0x40,0x3d,0x06, + 0x18,0x96,0x96,0x00,0x00,0x01,0xff,0xc2,0x05,0x82, + 0x00,0x3f,0x06,0x18,0x00,0x05,0x00,0x00,0x03,0x32, + 0x14,0x23,0x22,0x34,0x01,0x40,0x40,0x3d,0x06,0x18, + 0x96,0x96,0x00,0x01,0xff,0x6e,0xff,0x0a,0x00,0x8d, + 0xff,0xc7,0x00,0x07,0x00,0x00,0x17,0x23,0x15,0x23, + 0x35,0x23,0x35,0x21,0x8d,0x6c,0x47,0x6c,0x01,0x1f, + 0x81,0x75,0x75,0x48,0x00,0x01,0x00,0x48,0x00,0x00, + 0x02,0xbf,0x05,0x0a,0x00,0x1b,0x00,0x00,0x01,0x11, + 0x14,0x06,0x07,0x06,0x07,0x13,0x23,0x01,0x06,0x06, + 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x36,0x37,0x03, + 0x33,0x01,0x36,0x36,0x35,0x11,0x02,0xb4,0x0a,0x10, + 0x21,0x6f,0xb5,0x67,0xfe,0xc4,0x41,0x38,0x5b,0x1c, + 0x11,0x4c,0x39,0xb2,0x66,0x01,0x38,0x3f,0x34,0x05, + 0x0a,0xfe,0x2c,0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48, + 0x03,0x03,0x2a,0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75, + 0x66,0x3c,0x5f,0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89, + 0x77,0x01,0xd3,0x00,0x00,0x01,0x00,0x5e,0x00,0x00, + 0x02,0xcd,0x05,0x1e,0x00,0x17,0x00,0x00,0x13,0x36, + 0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x33,0x15,0x21, + 0x35,0x21,0x11,0x34,0x27,0x26,0x27,0x26,0x23,0x22, + 0x07,0x07,0x5e,0x66,0xa9,0x5e,0x56,0x1b,0x3b,0x56, + 0xfd,0x92,0x01,0xb9,0x25,0x1f,0x51,0x22,0x2f,0x50, + 0x66,0x1e,0x05,0x14,0x0a,0x11,0x2f,0x28,0x56,0xaa, + 0xfc,0x9e,0x54,0x54,0x03,0x62,0x87,0x41,0x37,0x0d, + 0x06,0x08,0x03,0x00,0x00,0x01,0x00,0x73,0xff,0xfc, + 0x02,0x03,0x05,0x1e,0x00,0x1b,0x00,0x00,0x01,0x32, + 0x11,0x11,0x23,0x27,0x23,0x06,0x07,0x06,0x23,0x22, + 0x27,0x37,0x16,0x33,0x32,0x36,0x35,0x11,0x34,0x27, + 0x26,0x23,0x22,0x07,0x35,0x36,0x01,0x16,0xed,0x50, + 0x0a,0x07,0x1d,0x19,0x3e,0x7c,0x1e,0x21,0x12,0x17, + 0x1f,0x75,0x74,0x1a,0x1e,0x5e,0x23,0x3e,0x37,0x05, + 0x1e,0xfe,0xdd,0xfc,0x05,0xd5,0x59,0x25,0x5b,0x0b, + 0x5e,0x0d,0xdd,0xca,0x01,0xfc,0x5b,0x34,0x3e,0x11, + 0x58,0x0f,0x00,0x01,0x00,0x11,0x00,0x00,0x02,0x87, + 0x05,0x0a,0x00,0x11,0x00,0x00,0x01,0x15,0x06,0x06, + 0x07,0x06,0x15,0x11,0x23,0x11,0x34,0x36,0x37,0x36, + 0x37,0x37,0x21,0x35,0x02,0x87,0x43,0x52,0x14,0x2d, + 0x5f,0x1c,0x14,0x29,0x1f,0x0e,0xfe,0x39,0x05,0x0a, + 0x49,0x17,0x3f,0x1d,0x45,0x69,0xfc,0x60,0x03,0xa0, + 0x3b,0x65,0x1e,0x3e,0x12,0x08,0x54,0x00,0x00,0x00, + 0x00,0x02,0x00,0x91,0x00,0x00,0x03,0x07,0x05,0x1e, + 0x00,0x0f,0x00,0x13,0x00,0x00,0x13,0x36,0x32,0x1e, + 0x02,0x15,0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07, + 0x13,0x23,0x11,0x33,0x91,0xcc,0x9a,0x7f,0x64,0x2d, + 0x60,0x1c,0x48,0x5d,0x6e,0xe7,0x5f,0x5f,0x5f,0x05, + 0x0a,0x14,0x1c,0x4d,0x90,0x6f,0xfc,0x4a,0x03,0xb6, + 0x5a,0x6c,0x3a,0x12,0x15,0xfb,0x4d,0x03,0x2d,0x00, + 0x00,0x00,0x00,0x01,0x00,0x91,0x00,0x00,0x00,0xf0, + 0x05,0x0a,0x00,0x03,0x00,0x00,0x33,0x23,0x11,0x33, + 0xf0,0x5f,0x5f,0x05,0x0a,0x00,0x00,0x01,0x00,0x87, + 0x00,0x00,0x01,0x8c,0x05,0x0a,0x00,0x0c,0x00,0x00, + 0x01,0x15,0x06,0x06,0x15,0x11,0x23,0x11,0x34,0x36, + 0x37,0x23,0x35,0x01,0x8c,0x38,0x45,0x5f,0x4a,0x25, + 0x98,0x05,0x0a,0x49,0x2c,0xda,0x8c,0xfc,0xd1,0x03, + 0x2f,0x96,0xd1,0x20,0x54,0x00,0x00,0x00,0x00,0x01, + 0x00,0x91,0x00,0x00,0x03,0x07,0x05,0x1e,0x00,0x11, + 0x00,0x00,0x33,0x11,0x36,0x32,0x1e,0x02,0x15,0x11, + 0x23,0x11,0x34,0x2e,0x02,0x22,0x07,0x11,0x91,0xcc, + 0x9a,0x7f,0x64,0x2d,0x60,0x1c,0x48,0x5d,0x82,0x74, + 0x05,0x0a,0x14,0x1c,0x4d,0x90,0x6f,0xfc,0x4a,0x03, + 0xb6,0x5a,0x6c,0x3a,0x12,0x0c,0xfb,0x44,0x00,0x01, + 0x00,0x5e,0xff,0xec,0x03,0x16,0x05,0x1e,0x00,0x18, + 0x00,0x00,0x01,0x20,0x10,0x20,0x13,0x11,0x33,0x11, + 0x10,0x17,0x16,0x16,0x32,0x36,0x37,0x36,0x11,0x10, + 0x27,0x2e,0x02,0x07,0x35,0x36,0x01,0xba,0x01,0x5c, + 0xfd,0x48,0x01,0x60,0x4b,0x24,0x55,0x6e,0x54,0x24, + 0x4a,0x4a,0x24,0x55,0x64,0x2f,0x2e,0x05,0x1e,0xfa, + 0xce,0x02,0x99,0x02,0x85,0xfd,0x7b,0xfe,0xb5,0x81, + 0x3e,0x35,0x35,0x3e,0x7f,0x01,0x4d,0x01,0x4c,0x81, + 0x3e,0x36,0x02,0x0a,0x58,0x08,0x00,0x01,0x00,0x8c, + 0x01,0xe2,0x00,0xeb,0x05,0x0a,0x00,0x04,0x00,0x00, + 0x13,0x11,0x33,0x11,0x07,0x8c,0x5f,0x56,0x01,0xe2, + 0x03,0x28,0xfd,0x46,0x6e,0x00,0x00,0x00,0x00,0x01, + 0x00,0x29,0xfe,0x14,0x02,0x1b,0x05,0x1e,0x00,0x0b, + 0x00,0x00,0x13,0x20,0x11,0x11,0x23,0x11,0x10,0x23, + 0x22,0x07,0x35,0x36,0xc9,0x01,0x52,0x61,0xf2,0x51, + 0x4e,0x47,0x05,0x1e,0xfd,0xb3,0xfb,0x43,0x04,0xbd, + 0x01,0xf3,0x32,0x67,0x25,0x00,0x00,0x01,0x00,0x29, + 0xff,0xec,0x02,0x1b,0x05,0x1e,0x00,0x1a,0x00,0x00, + 0x13,0x20,0x11,0x15,0x10,0x21,0x22,0x27,0x27,0x35, + 0x16,0x33,0x32,0x37,0x3e,0x02,0x37,0x36,0x35,0x35, + 0x10,0x23,0x22,0x07,0x35,0x36,0xc9,0x01,0x52,0xfe, + 0xae,0x45,0x40,0x15,0x39,0x60,0x6e,0x3c,0x23,0x18, + 0x08,0x02,0x03,0xf2,0x51,0x4e,0x47,0x05,0x1e,0xfd, + 0xb3,0xbd,0xfd,0xd8,0x14,0x07,0x5c,0x21,0x66,0x3c, + 0x73,0x3b,0x25,0x37,0x26,0xbd,0x01,0xf3,0x32,0x67, + 0x25,0x00,0x00,0x00,0x00,0x01,0x00,0x2d,0x00,0x00, + 0x02,0x3e,0x06,0x21,0x00,0x0a,0x00,0x00,0x13,0x21, + 0x15,0x03,0x03,0x23,0x13,0x13,0x21,0x11,0x33,0x8c, + 0x01,0xb2,0x9e,0x5b,0x61,0x59,0xa9,0xfe,0x47,0x5f, + 0x05,0x10,0x6e,0xfd,0x59,0xfe,0x05,0x01,0xf0,0x02, + 0xc4,0x01,0x6d,0x00,0x00,0x00,0x00,0x02,0x00,0x91, + 0x00,0x00,0x03,0x07,0x05,0x1e,0x00,0x09,0x00,0x14, + 0x00,0x00,0x33,0x11,0x36,0x32,0x16,0x16,0x17,0x16, + 0x15,0x11,0x27,0x11,0x34,0x27,0x2e,0x03,0x22,0x07, + 0x11,0x91,0xcc,0x94,0x72,0x5d,0x18,0x2f,0x5f,0x15, + 0x0d,0x22,0x45,0x4a,0x71,0x74,0x05,0x0a,0x14,0x0f, + 0x29,0x28,0x51,0xab,0xfc,0x3e,0x54,0x03,0x6e,0x7d, + 0x31,0x1f,0x20,0x14,0x05,0x0c,0xfb,0x98,0x00,0x01, + 0x00,0x3b,0x00,0x00,0x02,0xce,0x05,0x1e,0x00,0x25, + 0x00,0x00,0x00,0x36,0x32,0x16,0x16,0x17,0x16,0x15, + 0x11,0x21,0x35,0x33,0x11,0x34,0x27,0x26,0x27,0x26, + 0x22,0x06,0x07,0x06,0x07,0x07,0x03,0x23,0x13,0x36, + 0x35,0x34,0x27,0x27,0x33,0x16,0x17,0x33,0x36,0x37, + 0x01,0x5d,0x57,0x6c,0x54,0x33,0x0f,0x18,0xfe,0xc3, + 0xde,0x13,0x18,0x26,0x18,0x53,0x55,0x1a,0x35,0x10, + 0x07,0x5d,0x60,0x5d,0x02,0x2c,0x11,0x65,0x1c,0x0f, + 0x06,0x1f,0x32,0x04,0xfc,0x22,0x29,0x46,0x39,0x5f, + 0xa4,0xfc,0x8d,0x54,0x03,0x1f,0xc0,0x35,0x44,0x12, + 0x0a,0x2d,0x21,0x44,0x32,0x17,0xfc,0x13,0x03,0xed, + 0x17,0x1f,0x43,0x77,0x2d,0x41,0x46,0x3e,0x27,0x00, + 0x00,0x00,0x00,0x01,0x00,0x73,0xfe,0x14,0x01,0x03, + 0x05,0x0a,0x00,0x09,0x00,0x00,0x01,0x11,0x23,0x11, + 0x34,0x26,0x27,0x27,0x33,0x16,0x01,0x03,0x5f,0x18, + 0x0c,0x0d,0x60,0x30,0x03,0x89,0xfa,0x8b,0x05,0x75, + 0x51,0xc1,0x37,0x38,0xc3,0x00,0x00,0x01,0x00,0x27, + 0x00,0x00,0x01,0xad,0x05,0x1e,0x00,0x15,0x00,0x00, + 0x13,0x32,0x11,0x11,0x14,0x06,0x07,0x07,0x21,0x35, + 0x21,0x36,0x35,0x11,0x34,0x27,0x26,0x23,0x22,0x07, + 0x35,0x36,0xc0,0xed,0x13,0x0a,0x0a,0xfe,0xa1,0x01, + 0x0c,0x1b,0x1a,0x1e,0x5e,0x23,0x3e,0x37,0x05,0x1e, + 0xfe,0xdd,0xfd,0x4e,0x44,0xa4,0x31,0x30,0x54,0x7f, + 0x76,0x02,0xb2,0x5b,0x34,0x3e,0x11,0x58,0x0f,0x00, + 0x00,0x00,0x00,0x02,0x00,0x5e,0xff,0xec,0x03,0x16, + 0x05,0x1e,0x00,0x0a,0x00,0x1a,0x00,0x00,0x01,0x20, + 0x10,0x20,0x11,0x34,0x12,0x37,0x07,0x35,0x36,0x06, + 0x02,0x10,0x1e,0x02,0x32,0x3e,0x02,0x10,0x2e,0x02, + 0x23,0x07,0x01,0xba,0x01,0x5c,0xfd,0x48,0x3f,0x54, + 0x7e,0xe0,0x4f,0x43,0x26,0x48,0x54,0x6e,0x54,0x48, + 0x26,0x26,0x48,0x54,0x37,0x5e,0x05,0x1e,0xfa,0xce, + 0x02,0x99,0xcb,0x01,0x06,0x69,0x07,0x58,0x0e,0xb4, + 0xfe,0xf1,0xfe,0x85,0xe9,0x7c,0x35,0x35,0x7c,0xe9, + 0x01,0x4a,0xe9,0x7c,0x35,0x02,0x00,0x00,0x00,0x01, + 0x00,0x48,0xff,0xcf,0x03,0x2f,0x05,0x0a,0x00,0x14, + 0x00,0x00,0x01,0x03,0x06,0x07,0x06,0x07,0x06,0x07, + 0x05,0x35,0x37,0x37,0x01,0x33,0x13,0x13,0x36,0x37, + 0x36,0x37,0x13,0x03,0x2f,0x3a,0x19,0x14,0x30,0x7c, + 0x54,0x7f,0xfe,0xff,0xfa,0x1f,0xfe,0xef,0x60,0x86, + 0x7d,0x83,0x30,0x1c,0x15,0x38,0x05,0x0a,0xfd,0xcb, + 0xf6,0x5b,0xdb,0x5d,0x3f,0x13,0x2b,0x55,0x2a,0x06, + 0x04,0xb6,0xfd,0xb8,0xfd,0xb1,0x46,0xd5,0x7e,0xca, + 0x02,0x34,0x00,0x01,0x00,0x5e,0xfe,0x14,0x03,0x04, + 0x05,0x1e,0x00,0x17,0x00,0x00,0x01,0x22,0x26,0x10, + 0x36,0x33,0x20,0x11,0x11,0x23,0x11,0x10,0x23,0x22, + 0x06,0x07,0x06,0x15,0x14,0x17,0x16,0x33,0x33,0x07, + 0x01,0x88,0x98,0x92,0xb4,0x96,0x01,0x5c,0x5f,0xfd, + 0x3d,0x60,0x1c,0x39,0x43,0x34,0x62,0x0e,0x10,0x01, + 0xb9,0xde,0x01,0x8c,0xfb,0xfd,0x67,0xfb,0x8f,0x04, + 0x71,0x02,0x3f,0x46,0x38,0x70,0x7b,0xc5,0x52,0x40, + 0x4b,0x00,0x00,0x01,0x00,0x5e,0xff,0xec,0x03,0x04, + 0x05,0x1e,0x00,0x25,0x00,0x00,0x01,0x22,0x26,0x10, + 0x36,0x33,0x20,0x11,0x10,0x02,0x23,0x22,0x27,0x27, + 0x35,0x16,0x33,0x32,0x36,0x36,0x37,0x36,0x11,0x10, + 0x27,0x26,0x26,0x22,0x06,0x07,0x06,0x15,0x14,0x17, + 0x16,0x33,0x33,0x07,0x01,0x88,0x98,0x92,0xb4,0x96, + 0x01,0x5c,0xc0,0xad,0x69,0x57,0x1d,0x67,0x76,0x2b, + 0x4a,0x46,0x18,0x37,0x4a,0x24,0x54,0x74,0x60,0x1c, + 0x39,0x43,0x34,0x62,0x0e,0x10,0x01,0xb9,0xde,0x01, + 0x8c,0xfb,0xfd,0x67,0xfe,0xb2,0xfe,0xb5,0x0f,0x05, + 0x59,0x13,0x1f,0x50,0x3f,0x8e,0x01,0x03,0x01,0x4d, + 0x7f,0x3e,0x35,0x46,0x38,0x70,0x7b,0xc5,0x52,0x40, + 0x4b,0x00,0x00,0x01,0x00,0x00,0xfe,0x14,0x02,0x31, + 0x05,0x0a,0x00,0x10,0x00,0x00,0x01,0x11,0x14,0x07, + 0x06,0x06,0x07,0x11,0x23,0x11,0x03,0x33,0x13,0x36, + 0x36,0x35,0x11,0x02,0x31,0x32,0x1b,0x6b,0x4a,0x66, + 0xc9,0x66,0xc9,0x4f,0x54,0x05,0x0a,0xfe,0x46,0x7d, + 0x6d,0x3a,0x5a,0x15,0xfc,0x57,0x04,0x12,0x02,0xe4, + 0xfd,0x15,0x2b,0x8f,0x78,0x01,0xb9,0x00,0x00,0x00, + 0x00,0x01,0x00,0x3b,0x00,0x00,0x02,0xa9,0x05,0x0a, + 0x00,0x12,0x00,0x00,0x21,0x21,0x35,0x21,0x03,0x01, + 0x33,0x01,0x17,0x36,0x36,0x37,0x13,0x33,0x03,0x06, + 0x06,0x07,0x13,0x02,0xa1,0xfd,0x9a,0x01,0xed,0xd5, + 0xfe,0xe8,0x65,0x01,0x19,0x07,0x30,0x2c,0x0f,0x20, + 0x5e,0x1f,0x14,0x43,0x49,0xb7,0x54,0x01,0xfd,0x02, + 0xb9,0xfd,0x47,0x13,0x4d,0xc5,0x85,0x01,0x35,0xfe, + 0xcb,0xc6,0xe3,0x50,0xfe,0x4f,0x00,0x02,0x00,0x91, + 0xfe,0x14,0x03,0x0d,0x05,0x0a,0x00,0x19,0x00,0x1d, + 0x00,0x00,0x25,0x15,0x23,0x35,0x34,0x37,0x37,0x3e, + 0x03,0x37,0x13,0x21,0x35,0x21,0x15,0x03,0x0e,0x05, + 0x07,0x06,0x03,0x23,0x11,0x33,0x01,0xd8,0x5d,0x09, + 0x0e,0x0b,0x3a,0x0b,0x1d,0x03,0xac,0xfd,0xe3,0x02, + 0x7c,0xac,0x0c,0x21,0x1a,0x0f,0x15,0x0c,0x06,0x0c, + 0xe7,0x5f,0x5f,0x11,0x11,0x11,0x27,0x2d,0x49,0x35, + 0xd4,0x2a,0x64,0x0c,0x02,0x65,0x54,0x54,0xfd,0x9b, + 0x29,0x78,0x5c,0x3c,0x52,0x39,0x1f,0x3e,0xfd,0xe4, + 0x04,0xe3,0x00,0x01,0x00,0x17,0x00,0x00,0x02,0x10, + 0x05,0x1e,0x00,0x13,0x00,0x00,0x13,0x36,0x32,0x1e, + 0x02,0x17,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, + 0x23,0x22,0x07,0x07,0x17,0x4d,0x9c,0x5c,0x4f,0x32, + 0x12,0x21,0x5f,0x14,0x3b,0x55,0x39,0x56,0x50,0x17, + 0x05,0x14,0x0a,0x0b,0x1f,0x33,0x28,0x49,0x9a,0xfc, + 0x4a,0x03,0xb6,0x5c,0x69,0x3c,0x11,0x08,0x03,0x00, + 0x00,0x01,0x00,0x4a,0x00,0x00,0x03,0xce,0x05,0x0a, + 0x00,0x1e,0x00,0x00,0x21,0x23,0x03,0x33,0x13,0x36, + 0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07,0x13,0x33, + 0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03,0x06,0x07, + 0x0e,0x02,0x01,0x20,0x69,0x6d,0x58,0x3d,0x75,0x70, + 0x16,0x19,0x54,0x19,0x0d,0x27,0x49,0x74,0x56,0x20, + 0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55,0x37,0x17, + 0x5a,0x33,0x89,0xcd,0x05,0x0a,0xfd,0x23,0x35,0xd4, + 0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60,0x20,0xfe,0x87, + 0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b,0xfd,0xd5,0xec, + 0xaf,0x61,0x8d,0x56,0x00,0x01,0x00,0x10,0x00,0x00, + 0x02,0xe9,0x05,0x1e,0x00,0x1e,0x00,0x00,0x13,0x36, + 0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x23,0x11,0x34, + 0x27,0x26,0x27,0x26,0x22,0x07,0x11,0x14,0x06,0x23, + 0x22,0x27,0x35,0x16,0x33,0x32,0x35,0x11,0x07,0x40, + 0xc2,0xd2,0x64,0x59,0x1c,0x3c,0x5f,0x28,0x22,0x56, + 0x24,0x51,0x85,0x49,0x49,0x26,0x28,0x2c,0x11,0x44, + 0x51,0x05,0x08,0x16,0x11,0x2e,0x28,0x56,0xab,0xfc, + 0x4a,0x03,0xb6,0x88,0x40,0x37,0x0d,0x06,0x07,0xfc, + 0x0b,0x6f,0x5d,0x08,0x5b,0x08,0x71,0x03,0xec,0x07, + 0x00,0x01,0x00,0x2b,0x03,0x34,0x01,0x11,0x05,0x0a, + 0x00,0x09,0x00,0x00,0x01,0x17,0x06,0x07,0x07,0x23, + 0x36,0x36,0x37,0x37,0x01,0x04,0x0d,0x35,0x1d,0x55, + 0x3f,0x2f,0x28,0x07,0x07,0x05,0x0a,0x14,0xa9,0x4a, + 0xcf,0x9a,0xe5,0x2b,0x2c,0x00,0x00,0x00,0x00,0x02, + 0x00,0x2b,0x03,0x34,0x02,0x2b,0x05,0x0a,0x00,0x09, + 0x00,0x13,0x00,0x00,0x01,0x17,0x06,0x07,0x07,0x23, + 0x36,0x36,0x37,0x37,0x21,0x17,0x06,0x07,0x07,0x23, + 0x36,0x36,0x37,0x37,0x01,0x04,0x0d,0x35,0x1d,0x55, + 0x3f,0x2f,0x28,0x07,0x07,0x01,0x8e,0x0d,0x35,0x1d, + 0x55,0x3f,0x2f,0x28,0x07,0x07,0x05,0x0a,0x14,0xa9, + 0x4a,0xcf,0x9a,0xe5,0x2b,0x2c,0x14,0xa9,0x4a,0xcf, + 0x9a,0xe5,0x2b,0x2c,0x00,0x01,0x00,0x52,0x02,0x00, + 0x03,0xae,0x02,0x52,0x00,0x03,0x00,0x00,0x01,0x21, + 0x35,0x21,0x03,0xae,0xfc,0xa4,0x03,0x5c,0x02,0x00, + 0x52,0x00,0x00,0x01,0x00,0x52,0x02,0x00,0x07,0xae, + 0x02,0x52,0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21, + 0x07,0xae,0xf8,0xa4,0x07,0x5c,0x02,0x00,0x52,0x00, + 0x00,0x01,0x00,0x2b,0x03,0xe1,0x01,0x10,0x05,0xb6, + 0x00,0x06,0x00,0x00,0x13,0x33,0x06,0x07,0x23,0x27, + 0x36,0xd1,0x3f,0x4a,0x1a,0x73,0x0e,0x43,0x05,0xb6, + 0xfc,0xd9,0x17,0xe5,0x00,0x00,0x00,0x01,0x00,0x2b, + 0x03,0xe1,0x01,0x10,0x05,0xb6,0x00,0x06,0x00,0x00, + 0x01,0x17,0x06,0x07,0x23,0x36,0x37,0x01,0x02,0x0e, + 0x42,0x64,0x3f,0x4a,0x1a,0x05,0xb6,0x16,0xdd,0xe2, + 0xfc,0xd9,0x00,0x01,0x00,0x4e,0xfe,0xf8,0x01,0x33, + 0x00,0xcd,0x00,0x06,0x00,0x00,0x25,0x17,0x06,0x07, + 0x23,0x36,0x37,0x01,0x25,0x0e,0x43,0x63,0x3f,0x4a, + 0x1a,0xcd,0x17,0xe5,0xd9,0xfc,0xd9,0x00,0x00,0x02, + 0x00,0x2b,0x03,0xe1,0x02,0x2b,0x05,0xb6,0x00,0x06, + 0x00,0x0d,0x00,0x00,0x13,0x33,0x06,0x07,0x23,0x27, + 0x36,0x25,0x33,0x06,0x07,0x23,0x27,0x36,0xd1,0x3f, + 0x4a,0x1a,0x73,0x0e,0x43,0x01,0x7e,0x3f,0x4a,0x1a, + 0x73,0x0e,0x43,0x05,0xb6,0xfc,0xd9,0x17,0xe5,0xd9, + 0xfc,0xd9,0x17,0xe5,0x00,0x02,0x00,0x2b,0x03,0xe1, + 0x02,0x2b,0x05,0xb6,0x00,0x06,0x00,0x0d,0x00,0x00, + 0x01,0x17,0x06,0x07,0x23,0x36,0x37,0x21,0x17,0x06, + 0x07,0x23,0x36,0x37,0x01,0x02,0x0e,0x42,0x64,0x3f, + 0x4a,0x1a,0x01,0x8e,0x0e,0x42,0x64,0x3f,0x4a,0x1a, + 0x05,0xb6,0x16,0xdd,0xe2,0xfc,0xd9,0x16,0xdd,0xe2, + 0xfc,0xd9,0x00,0x00,0x00,0x02,0x00,0x21,0xfe,0xf8, + 0x02,0x21,0x00,0xcd,0x00,0x06,0x00,0x0d,0x00,0x00, + 0x37,0x17,0x06,0x07,0x23,0x36,0x37,0x13,0x12,0x37, + 0x33,0x17,0x06,0x07,0xf8,0x0e,0x43,0x63,0x3f,0x4a, + 0x1a,0xb6,0x4e,0x17,0x72,0x0f,0x3b,0x6b,0xcd,0x17, + 0xe5,0xd9,0xfc,0xd9,0xfe,0x2b,0x01,0x10,0xc5,0x17, + 0xca,0xf4,0x00,0x00,0x00,0x01,0x00,0x7b,0x00,0x00, + 0x02,0xf8,0x06,0x14,0x00,0x0b,0x00,0x00,0x01,0x25, + 0x15,0x25,0x13,0x23,0x13,0x05,0x35,0x05,0x03,0x33, + 0x01,0xd1,0x01,0x27,0xfe,0xd9,0x18,0x74,0x18,0xfe, + 0xee,0x01,0x12,0x18,0x74,0x04,0x68,0x13,0x5c,0x0a, + 0xfb,0xd7,0x04,0x29,0x0a,0x5c,0x13,0x01,0xac,0x00, + 0x00,0x01,0x00,0x7b,0x00,0x00,0x02,0xf8,0x06,0x14, + 0x00,0x15,0x00,0x00,0x01,0x25,0x15,0x25,0x13,0x03, + 0x25,0x15,0x25,0x13,0x23,0x13,0x05,0x35,0x05,0x03, + 0x13,0x05,0x35,0x05,0x03,0x33,0x01,0xd1,0x01,0x27, + 0xfe,0xd9,0x0a,0x0a,0x01,0x27,0xfe,0xd9,0x18,0x74, + 0x18,0xfe,0xee,0x01,0x12,0x0c,0x0c,0xfe,0xee,0x01, + 0x12,0x18,0x74,0x04,0x96,0x12,0x5c,0x0a,0xfe,0xbc, + 0xfe,0xac,0x0b,0x5c,0x10,0xfe,0x83,0x01,0x7d,0x10, + 0x5c,0x0b,0x01,0x54,0x01,0x44,0x0a,0x5c,0x12,0x01, + 0x7e,0x00,0x00,0x01,0x00,0xa8,0x01,0xfa,0x02,0x5a, + 0x03,0xdd,0x00,0x07,0x00,0x00,0x00,0x32,0x16,0x14, + 0x06,0x22,0x26,0x34,0x01,0x18,0xd2,0x70,0x70,0xd0, + 0x72,0x03,0xdd,0x7a,0xec,0x7d,0x7d,0xec,0x00,0x03, + 0x00,0x85,0xff,0xf0,0x04,0x6d,0x00,0xc5,0x00,0x06, + 0x00,0x0d,0x00,0x14,0x00,0x00,0x36,0x32,0x15,0x14, + 0x06,0x23,0x22,0x24,0x32,0x15,0x14,0x06,0x23,0x22, + 0x24,0x32,0x15,0x14,0x06,0x23,0x22,0x85,0x9c,0x2b, + 0x23,0x4e,0x01,0xa6,0x9c,0x2b,0x23,0x4e,0x01,0xa6, + 0x9c,0x2b,0x23,0x4e,0xc5,0x6b,0x36,0x34,0xd5,0x6b, + 0x36,0x34,0xd5,0x6b,0x36,0x34,0x00,0x07,0x00,0x5e, + 0xff,0xec,0x06,0x3f,0x05,0xcb,0x00,0x07,0x00,0x0b, + 0x00,0x15,0x00,0x1d,0x00,0x25,0x00,0x2f,0x00,0x39, + 0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06,0x22,0x26, + 0x01,0x23,0x01,0x33,0x05,0x22,0x06,0x10,0x16,0x33, + 0x32,0x36,0x35,0x10,0x00,0x36,0x32,0x16,0x10,0x06, + 0x22,0x26,0x00,0x32,0x16,0x10,0x06,0x22,0x26,0x10, + 0x25,0x22,0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10, + 0x21,0x22,0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10, + 0x5e,0x66,0xc7,0x69,0x6c,0xc3,0x67,0x01,0x3e,0x5d, + 0x01,0xde,0x58,0xfd,0xb0,0x3a,0x33,0x34,0x3d,0x3b, + 0x36,0x01,0x2b,0x66,0xc6,0x69,0x6c,0xc2,0x67,0x02, + 0x4b,0xc6,0x69,0x6c,0xc2,0x67,0xfe,0xe1,0x3a,0x32, + 0x33,0x3d,0x3b,0x36,0x01,0x71,0x3a,0x33,0x34,0x3d, + 0x3b,0x35,0x04,0xe1,0xea,0xe9,0xfe,0x45,0xf2,0xee, + 0xfc,0xdd,0x05,0xb6,0x39,0xb7,0xfe,0x7b,0xb8,0xb9, + 0xc2,0x01,0x79,0xfd,0x1e,0xe6,0xe9,0xfe,0x43,0xef, + 0xf0,0x02,0xa5,0xe9,0xfe,0x46,0xf2,0xef,0x01,0xbc, + 0x9c,0xb7,0xfe,0x7b,0xb8,0xb9,0xc2,0x01,0x79,0xb7, + 0xfe,0x7b,0xb8,0xb8,0xc3,0x01,0x79,0x00,0x00,0x01, + 0x00,0x52,0x00,0x93,0x01,0xae,0x03,0x8b,0x00,0x06, + 0x00,0x00,0x01,0x03,0x13,0x07,0x01,0x35,0x01,0x01, + 0xae,0xdb,0xdb,0x3d,0xfe,0xe1,0x01,0x1f,0x03,0x68, + 0xfe,0xa8,0xfe,0xa8,0x25,0x01,0x6f,0x1b,0x01,0x6e, + 0x00,0x00,0x00,0x01,0x00,0x52,0x00,0x93,0x01,0xae, + 0x03,0x8b,0x00,0x06,0x00,0x00,0x01,0x15,0x01,0x27, + 0x13,0x03,0x37,0x01,0xae,0xfe,0xe1,0x3d,0xdb,0xdb, + 0x3d,0x02,0x1d,0x1b,0xfe,0x91,0x25,0x01,0x58,0x01, + 0x58,0x23,0x00,0x01,0xfe,0xd7,0x00,0x00,0x02,0x33, + 0x05,0xb6,0x00,0x03,0x00,0x00,0x23,0x23,0x01,0x33, + 0xcd,0x5c,0x03,0x00,0x5c,0x05,0xb6,0x00,0x00,0x00, + 0x00,0x02,0x00,0x91,0x00,0x00,0x03,0xdf,0x05,0x0a, + 0x00,0x13,0x00,0x26,0x00,0x00,0x13,0x33,0x32,0x16, + 0x16,0x17,0x16,0x15,0x11,0x23,0x11,0x34,0x27,0x26, + 0x27,0x26,0x23,0x23,0x11,0x23,0x01,0x11,0x14,0x06, + 0x07,0x06,0x21,0x23,0x11,0x33,0x11,0x33,0x32,0x37, + 0x36,0x37,0x36,0x35,0x11,0x91,0x8d,0x5d,0x85,0x77, + 0x23,0x4d,0x5f,0x3d,0x34,0x7b,0x33,0x4b,0x2e,0x5f, + 0x03,0x4e,0x2f,0x38,0x6d,0xfe,0xe4,0x76,0x5f,0x17, + 0xc0,0x5d,0x55,0x15,0x0a,0x05,0x0a,0x10,0x2e,0x28, + 0x55,0xaa,0xfd,0x63,0x02,0x9d,0x87,0x40,0x37,0x0d, + 0x06,0xfb,0x4a,0x05,0x0a,0xfd,0x7d,0xa3,0xe6,0x56, + 0xa8,0x04,0x02,0xfc,0x52,0x5a,0x52,0xbc,0x54,0x77, + 0x02,0x83,0x00,0x00,0x00,0x01,0x00,0x23,0xff,0xec, + 0x03,0x04,0x05,0xcd,0x00,0x26,0x00,0x00,0x13,0x33, + 0x12,0x12,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x03, + 0x21,0x15,0x21,0x07,0x15,0x17,0x21,0x15,0x21,0x16, + 0x16,0x33,0x32,0x37,0x15,0x06,0x23,0x22,0x02,0x03, + 0x23,0x35,0x33,0x27,0x35,0x37,0x23,0x23,0x8d,0x10, + 0xcb,0x9a,0x7a,0x65,0x33,0x56,0x52,0xed,0x25,0x01, + 0x45,0xfe,0xb6,0x02,0x02,0x01,0x29,0xfe,0xdc,0x0f, + 0x8f,0x84,0x65,0x56,0x56,0x65,0xb0,0xc3,0x16,0x8d, + 0x89,0x02,0x02,0x89,0x03,0x83,0x01,0x0d,0x01,0x3d, + 0x4a,0x56,0x3d,0xfe,0x19,0x52,0x4c,0x49,0x34,0x51, + 0xe9,0xe0,0x2f,0x64,0x2d,0x01,0x13,0x01,0x18,0x51, + 0x65,0x27,0x3d,0x00,0x00,0x02,0x00,0x0e,0x02,0xe5, + 0x05,0x1b,0x05,0xb6,0x00,0x07,0x00,0x18,0x00,0x00, + 0x01,0x23,0x11,0x23,0x11,0x23,0x35,0x21,0x01,0x23, + 0x11,0x37,0x23,0x03,0x23,0x03,0x23,0x17,0x11,0x23, + 0x11,0x33,0x13,0x13,0x33,0x02,0x19,0xdc,0x56,0xd9, + 0x02,0x0b,0x03,0x02,0x56,0x06,0x08,0xe4,0x49,0xde, + 0x08,0x06,0x52,0x7d,0xdd,0xe0,0x7d,0x05,0x68,0xfd, + 0x7d,0x02,0x83,0x4e,0xfd,0x2f,0x01,0x8e,0xcf,0xfd, + 0xa3,0x02,0x61,0xc9,0xfe,0x68,0x02,0xd1,0xfd,0xa2, + 0x02,0x5e,0x00,0x03,0x00,0x14,0x00,0x00,0x02,0xc5, + 0x06,0x1f,0x00,0x15,0x00,0x1d,0x00,0x21,0x00,0x00, + 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x06, + 0x06,0x07,0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x23, + 0x35,0x37,0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26, + 0x13,0x23,0x11,0x33,0x9e,0x62,0x79,0x47,0x38,0x21, + 0x33,0x2d,0x48,0x31,0x02,0xaa,0xaa,0x5e,0x8a,0x8a, + 0x01,0xaa,0x24,0x39,0x20,0x20,0x38,0x25,0x6d,0x5f, + 0x5f,0x04,0x9a,0xcf,0xb6,0x19,0x58,0x19,0x03,0x7d, + 0xaf,0x5b,0x54,0xfc,0x17,0x03,0xe9,0x36,0x29,0x01, + 0x4e,0x33,0x32,0x58,0x33,0x34,0xfa,0xc0,0x04,0x3d, + 0x00,0x02,0x00,0x14,0x00,0x00,0x02,0xb5,0x06,0x1f, + 0x00,0x15,0x00,0x19,0x00,0x00,0x13,0x34,0x36,0x33, + 0x32,0x17,0x07,0x26,0x23,0x06,0x06,0x07,0x15,0x33, + 0x15,0x23,0x11,0x23,0x11,0x23,0x35,0x37,0x01,0x23, + 0x11,0x33,0x9e,0x62,0x79,0x47,0x38,0x21,0x33,0x2d, + 0x48,0x31,0x02,0xaa,0xaa,0x5e,0x8a,0x8a,0x02,0x17, + 0x5f,0x5f,0x04,0x9a,0xcf,0xb6,0x19,0x58,0x19,0x03, + 0x7d,0xaf,0x5b,0x54,0xfc,0x17,0x03,0xe9,0x36,0x29, + 0xfb,0xb8,0x06,0x14,0x00,0x02,0x00,0x4a,0x00,0x00, + 0x03,0xe0,0x06,0x18,0x00,0x05,0x00,0x24,0x00,0x00, + 0x01,0x32,0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33, + 0x13,0x36,0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07, + 0x13,0x33,0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03, + 0x06,0x07,0x0e,0x02,0x03,0xa0,0x40,0x40,0x3d,0xfd, + 0xbd,0x69,0x6d,0x58,0x3d,0x75,0x70,0x16,0x19,0x54, + 0x19,0x0d,0x27,0x49,0x74,0x56,0x20,0x19,0x73,0xc3, + 0x44,0x8c,0x1d,0x36,0x55,0x37,0x17,0x5a,0x33,0x89, + 0xcd,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a,0xfd, + 0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60, + 0x20,0xfe,0x87,0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b, + 0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56,0x00,0x00,0x02, + 0x00,0x2e,0x00,0x00,0x03,0xce,0x06,0x18,0x00,0x05, + 0x00,0x24,0x00,0x00,0x13,0x32,0x14,0x23,0x22,0x34, + 0x13,0x23,0x03,0x33,0x13,0x36,0x36,0x37,0x37,0x33, + 0x07,0x0e,0x03,0x07,0x13,0x33,0x32,0x36,0x37,0x36, + 0x13,0x13,0x33,0x03,0x06,0x07,0x0e,0x02,0x6b,0x40, + 0x40,0x3d,0xf2,0x69,0x6d,0x58,0x3d,0x75,0x70,0x16, + 0x19,0x54,0x19,0x0d,0x27,0x49,0x74,0x56,0x20,0x19, + 0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55,0x37,0x17,0x5a, + 0x33,0x89,0xcd,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05, + 0x0a,0xfd,0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e,0xac, + 0x92,0x60,0x20,0xfe,0x87,0x62,0x57,0xb3,0x01,0x1c, + 0x02,0x2b,0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56,0x00, + 0x00,0x00,0x00,0x03,0x00,0x4a,0x00,0x00,0x03,0xe0, + 0x06,0x18,0x00,0x05,0x00,0x24,0x00,0x2a,0x00,0x00, + 0x01,0x32,0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33, + 0x13,0x36,0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07, + 0x13,0x33,0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03, + 0x06,0x07,0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34, + 0x03,0xa0,0x40,0x40,0x3d,0xfd,0xbd,0x69,0x6d,0x58, + 0x3d,0x75,0x70,0x16,0x19,0x54,0x19,0x0d,0x27,0x49, + 0x74,0x56,0x20,0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36, + 0x55,0x37,0x17,0x5a,0x33,0x89,0xcd,0x6f,0x40,0x40, + 0x3d,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a,0xfd, + 0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60, + 0x20,0xfe,0x87,0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b, + 0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56,0x02,0x03,0x96, + 0x96,0x00,0x00,0x03,0x00,0x2e,0x00,0x00,0x03,0xce, + 0x06,0x18,0x00,0x05,0x00,0x24,0x00,0x2a,0x00,0x00, + 0x13,0x32,0x14,0x23,0x22,0x34,0x13,0x23,0x03,0x33, + 0x13,0x36,0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07, + 0x13,0x33,0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03, + 0x06,0x07,0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34, + 0x6b,0x40,0x40,0x3d,0xf2,0x69,0x6d,0x58,0x3d,0x75, + 0x70,0x16,0x19,0x54,0x19,0x0d,0x27,0x49,0x74,0x56, + 0x20,0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55,0x37, + 0x17,0x5a,0x33,0x89,0xcd,0x6f,0x40,0x40,0x3d,0x06, + 0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a,0xfd,0x23,0x35, + 0xd4,0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60,0x20,0xfe, + 0x87,0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b,0xfd,0xd5, + 0xec,0xaf,0x61,0x8d,0x56,0x02,0x03,0x96,0x96,0x00, + 0x00,0x00,0x00,0x02,0x00,0x48,0xfe,0xdb,0x02,0xbf, + 0x05,0x0a,0x00,0x1b,0x00,0x1f,0x00,0x00,0x01,0x11, + 0x14,0x06,0x07,0x06,0x07,0x13,0x23,0x01,0x06,0x06, + 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x36,0x37,0x03, + 0x33,0x01,0x36,0x36,0x35,0x11,0x03,0x21,0x35,0x21, + 0x02,0xb4,0x0a,0x10,0x21,0x6f,0xb5,0x67,0xfe,0xc4, + 0x41,0x38,0x5b,0x1c,0x11,0x4c,0x39,0xb2,0x66,0x01, + 0x38,0x3f,0x34,0x31,0xfe,0x9b,0x01,0x65,0x05,0x0a, + 0xfe,0x2c,0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48,0x03, + 0x03,0x2a,0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75,0x66, + 0x3c,0x5f,0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89,0x77, + 0x01,0xd3,0xf9,0xd1,0x48,0x00,0x00,0x00,0x00,0x02, + 0x00,0x48,0xfe,0x12,0x02,0xbf,0x05,0x0a,0x00,0x1b, + 0x00,0x23,0x00,0x00,0x01,0x11,0x14,0x06,0x07,0x06, + 0x07,0x13,0x23,0x01,0x06,0x06,0x15,0x11,0x23,0x11, + 0x34,0x37,0x36,0x36,0x37,0x03,0x33,0x01,0x36,0x36, + 0x35,0x11,0x03,0x23,0x15,0x23,0x35,0x23,0x35,0x21, + 0x02,0xb4,0x0a,0x10,0x21,0x6f,0xb5,0x67,0xfe,0xc4, + 0x41,0x38,0x5b,0x1c,0x11,0x4c,0x39,0xb2,0x66,0x01, + 0x38,0x3f,0x34,0x31,0x8f,0x47,0x8f,0x01,0x65,0x05, + 0x0a,0xfe,0x2c,0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48, + 0x03,0x03,0x2a,0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75, + 0x66,0x3c,0x5f,0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89, + 0x77,0x01,0xd3,0xf9,0xd1,0xc9,0xc9,0x48,0x00,0x02, + 0x00,0x48,0x00,0x00,0x02,0xbf,0x05,0x0a,0x00,0x1b, + 0x00,0x21,0x00,0x00,0x01,0x11,0x14,0x06,0x07,0x06, + 0x07,0x13,0x23,0x01,0x06,0x06,0x15,0x11,0x23,0x11, + 0x34,0x37,0x36,0x36,0x37,0x03,0x33,0x01,0x36,0x36, + 0x35,0x11,0x01,0x32,0x14,0x23,0x22,0x34,0x02,0xb4, + 0x0a,0x10,0x21,0x6f,0xb5,0x67,0xfe,0xc4,0x41,0x38, + 0x5b,0x1c,0x11,0x4c,0x39,0xb2,0x66,0x01,0x38,0x3f, + 0x34,0xfe,0xe0,0x40,0x40,0x3d,0x05,0x0a,0xfe,0x2c, + 0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48,0x03,0x03,0x2a, + 0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75,0x66,0x3c,0x5f, + 0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89,0x77,0x01,0xd3, + 0xfc,0x74,0x96,0x96,0x00,0x02,0x00,0x5e,0x00,0x00, + 0x02,0xcd,0x05,0x1e,0x00,0x17,0x00,0x1d,0x00,0x00, + 0x13,0x36,0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x33, + 0x15,0x21,0x35,0x21,0x11,0x34,0x27,0x26,0x27,0x26, + 0x23,0x22,0x07,0x07,0x13,0x32,0x14,0x23,0x22,0x34, + 0x5e,0x66,0xa9,0x5e,0x56,0x1b,0x3b,0x56,0xfd,0x92, + 0x01,0xb9,0x25,0x1f,0x51,0x22,0x2f,0x50,0x66,0x1e, + 0xbd,0x40,0x40,0x3d,0x05,0x14,0x0a,0x11,0x2f,0x28, + 0x56,0xaa,0xfc,0x9e,0x54,0x54,0x03,0x62,0x87,0x41, + 0x37,0x0d,0x06,0x08,0x03,0xfe,0x2c,0x96,0x96,0x00, + 0x00,0x02,0x00,0x73,0xff,0xfc,0x02,0x03,0x05,0x1e, + 0x00,0x1b,0x00,0x21,0x00,0x00,0x01,0x32,0x11,0x11, + 0x23,0x27,0x23,0x06,0x07,0x06,0x23,0x22,0x27,0x37, + 0x16,0x33,0x32,0x36,0x35,0x11,0x34,0x27,0x26,0x23, + 0x22,0x07,0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34, + 0x01,0x16,0xed,0x50,0x0a,0x07,0x1d,0x19,0x3e,0x7c, + 0x1e,0x21,0x12,0x17,0x1f,0x75,0x74,0x1a,0x1e,0x5e, + 0x23,0x3e,0x37,0x19,0x40,0x40,0x3d,0x05,0x1e,0xfe, + 0xdd,0xfc,0x05,0xd5,0x59,0x25,0x5b,0x0b,0x5e,0x0d, + 0xdd,0xca,0x01,0xfc,0x5b,0x34,0x3e,0x11,0x58,0x0f, + 0xfd,0xcb,0x96,0x96,0x00,0x02,0x00,0x11,0x00,0x00, + 0x02,0x87,0x05,0x0a,0x00,0x11,0x00,0x17,0x00,0x00, + 0x01,0x15,0x06,0x06,0x07,0x06,0x15,0x11,0x23,0x11, + 0x34,0x36,0x37,0x36,0x37,0x37,0x21,0x35,0x13,0x32, + 0x14,0x23,0x22,0x34,0x02,0x87,0x43,0x52,0x14,0x2d, + 0x5f,0x1c,0x14,0x29,0x1f,0x0e,0xfe,0x39,0xcb,0x40, + 0x40,0x3d,0x05,0x0a,0x49,0x17,0x3f,0x1d,0x45,0x69, + 0xfc,0x60,0x03,0xa0,0x3b,0x65,0x1e,0x3e,0x12,0x08, + 0x54,0xfd,0xdf,0x96,0x96,0x00,0x00,0x00,0x00,0x03, + 0x00,0x91,0x00,0x00,0x03,0x07,0x05,0x1e,0x00,0x0f, + 0x00,0x13,0x00,0x19,0x00,0x00,0x13,0x36,0x32,0x1e, + 0x02,0x15,0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07, + 0x11,0x11,0x33,0x11,0x13,0x32,0x14,0x23,0x22,0x34, + 0x91,0xcc,0x9a,0x7f,0x64,0x2d,0x60,0x1c,0x48,0x5d, + 0x6e,0xe7,0x5f,0xda,0x40,0x40,0x3d,0x05,0x0a,0x14, + 0x1c,0x4d,0x90,0x6f,0xfc,0x4a,0x03,0xb6,0x5a,0x6c, + 0x3a,0x12,0x15,0xfb,0x4d,0x03,0x2d,0xfc,0xd3,0x02, + 0xe9,0x96,0x96,0x00,0x00,0x00,0x00,0x02,0xff,0xcc, + 0x00,0x00,0x00,0xf0,0x05,0x0a,0x00,0x03,0x00,0x09, + 0x00,0x00,0x33,0x11,0x33,0x11,0x03,0x32,0x14,0x23, + 0x22,0x34,0x91,0x5f,0xe7,0x40,0x40,0x3d,0x05,0x0a, + 0xfa,0xf6,0x02,0xe9,0x96,0x96,0x00,0x02,0xff,0xec, + 0x00,0x00,0x01,0x8c,0x05,0x0a,0x00,0x0c,0x00,0x12, + 0x00,0x00,0x01,0x15,0x06,0x06,0x15,0x11,0x23,0x11, + 0x34,0x36,0x37,0x23,0x35,0x03,0x32,0x14,0x23,0x22, + 0x34,0x01,0x8c,0x38,0x45,0x5f,0x4a,0x25,0x98,0x5e, + 0x40,0x40,0x3d,0x05,0x0a,0x49,0x2c,0xda,0x8c,0xfc, + 0xd1,0x03,0x2f,0x96,0xd1,0x20,0x54,0xfd,0xdf,0x96, + 0x96,0x00,0x00,0x00,0x00,0x02,0x00,0x5e,0xff,0xec, + 0x03,0x16,0x05,0x1e,0x00,0x18,0x00,0x1e,0x00,0x00, + 0x01,0x20,0x10,0x20,0x13,0x11,0x33,0x11,0x10,0x17, + 0x16,0x16,0x32,0x36,0x37,0x36,0x11,0x10,0x27,0x2e, + 0x02,0x07,0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34, + 0x01,0xba,0x01,0x5c,0xfd,0x48,0x01,0x60,0x4b,0x24, + 0x55,0x6e,0x54,0x24,0x4a,0x4a,0x24,0x55,0x64,0x2f, + 0x2e,0x2f,0x40,0x40,0x3d,0x05,0x1e,0xfa,0xce,0x02, + 0x99,0x02,0x85,0xfd,0x7b,0xfe,0xb5,0x81,0x3e,0x35, + 0x35,0x3e,0x7f,0x01,0x4d,0x01,0x4c,0x81,0x3e,0x36, + 0x02,0x0a,0x58,0x08,0xfd,0xcb,0x96,0x96,0x00,0x02, + 0xff,0xca,0x01,0xe2,0x00,0xeb,0x05,0x0a,0x00,0x04, + 0x00,0x0a,0x00,0x00,0x13,0x11,0x33,0x11,0x07,0x03, + 0x32,0x14,0x23,0x22,0x34,0x8c,0x5f,0x56,0x8e,0x40, + 0x40,0x3d,0x01,0xe2,0x03,0x28,0xfd,0x46,0x6e,0x01, + 0x7c,0x96,0x96,0x00,0x00,0x00,0x00,0x02,0x00,0x29, + 0xfe,0x14,0x02,0x1b,0x05,0x1e,0x00,0x0b,0x00,0x11, + 0x00,0x00,0x13,0x20,0x11,0x11,0x23,0x11,0x10,0x23, + 0x22,0x07,0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34, + 0xc9,0x01,0x52,0x61,0xf2,0x51,0x4e,0x47,0x51,0x40, + 0x40,0x3d,0x05,0x1e,0xfd,0xb3,0xfb,0x43,0x04,0xbd, + 0x01,0xf3,0x32,0x67,0x25,0xfd,0xcb,0x96,0x96,0x00, + 0x00,0x02,0x00,0x29,0xff,0xec,0x02,0x1b,0x05,0x1e, + 0x00,0x1a,0x00,0x20,0x00,0x00,0x13,0x20,0x11,0x15, + 0x10,0x21,0x22,0x27,0x27,0x35,0x16,0x33,0x32,0x37, + 0x3e,0x02,0x37,0x36,0x35,0x35,0x10,0x23,0x22,0x07, + 0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34,0xc9,0x01, + 0x52,0xfe,0xae,0x45,0x40,0x15,0x39,0x60,0x6e,0x3c, + 0x23,0x18,0x08,0x02,0x03,0xf2,0x51,0x4e,0x47,0x51, + 0x40,0x40,0x3d,0x05,0x1e,0xfd,0xb3,0xbd,0xfd,0xd8, + 0x14,0x07,0x5c,0x21,0x66,0x3c,0x73,0x3b,0x25,0x37, + 0x26,0xbd,0x01,0xf3,0x32,0x67,0x25,0xfd,0xcb,0x96, + 0x96,0x00,0x00,0x00,0x00,0x02,0x00,0x2d,0x00,0x00, + 0x02,0x3e,0x06,0x21,0x00,0x0a,0x00,0x10,0x00,0x00, + 0x01,0x15,0x03,0x03,0x23,0x13,0x13,0x21,0x11,0x33, + 0x11,0x13,0x32,0x14,0x23,0x22,0x34,0x02,0x3e,0x9e, + 0x5b,0x61,0x59,0xa9,0xfe,0x47,0x5f,0x07,0x40,0x40, + 0x3d,0x05,0x10,0x6e,0xfd,0x59,0xfe,0x05,0x01,0xf0, + 0x02,0xc4,0x01,0x6d,0xfe,0xef,0xfd,0xd9,0x96,0x96, + 0x00,0x00,0x00,0x02,0x00,0x3b,0x00,0x00,0x02,0xce, + 0x05,0x1e,0x00,0x25,0x00,0x2b,0x00,0x00,0x00,0x36, + 0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x21,0x35,0x33, + 0x11,0x34,0x27,0x26,0x27,0x26,0x22,0x06,0x07,0x06, + 0x07,0x07,0x03,0x23,0x13,0x36,0x35,0x34,0x27,0x27, + 0x33,0x16,0x17,0x33,0x36,0x37,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0x5d,0x57,0x6c,0x54,0x33,0x0f,0x18, + 0xfe,0xc3,0xde,0x13,0x18,0x26,0x18,0x53,0x55,0x1a, + 0x35,0x10,0x07,0x5d,0x60,0x5d,0x02,0x2c,0x11,0x65, + 0x1c,0x0f,0x06,0x1f,0x32,0x6a,0x40,0x40,0x3d,0x04, + 0xfc,0x22,0x29,0x46,0x39,0x5f,0xa4,0xfc,0x8d,0x54, + 0x03,0x1f,0xc0,0x35,0x44,0x12,0x0a,0x2d,0x21,0x44, + 0x32,0x17,0xfc,0x13,0x03,0xed,0x17,0x1f,0x43,0x77, + 0x2d,0x41,0x46,0x3e,0x27,0xfe,0x01,0x96,0x96,0x00, + 0x00,0x00,0x00,0x02,0x00,0x27,0x00,0x00,0x01,0xad, + 0x05,0x1e,0x00,0x15,0x00,0x1b,0x00,0x00,0x13,0x32, + 0x11,0x11,0x14,0x06,0x07,0x07,0x21,0x35,0x21,0x36, + 0x35,0x11,0x34,0x27,0x26,0x23,0x22,0x07,0x35,0x36, + 0x13,0x32,0x14,0x23,0x22,0x34,0xc0,0xed,0x13,0x0a, + 0x0a,0xfe,0xa1,0x01,0x0c,0x1b,0x1a,0x1e,0x5e,0x23, + 0x3e,0x37,0x19,0x40,0x40,0x3d,0x05,0x1e,0xfe,0xdd, + 0xfd,0x4e,0x44,0xa4,0x31,0x30,0x54,0x7f,0x76,0x02, + 0xb2,0x5b,0x34,0x3e,0x11,0x58,0x0f,0xfd,0xcb,0x96, + 0x96,0x00,0x00,0x00,0x00,0x03,0x00,0x5e,0xff,0xec, + 0x03,0x16,0x05,0x1e,0x00,0x0a,0x00,0x1a,0x00,0x20, + 0x00,0x00,0x01,0x20,0x10,0x20,0x11,0x34,0x12,0x37, + 0x07,0x35,0x36,0x06,0x02,0x10,0x1e,0x02,0x32,0x3e, + 0x02,0x10,0x2e,0x02,0x23,0x07,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0xba,0x01,0x5c,0xfd,0x48,0x3f,0x54, + 0x7e,0xe0,0x4f,0x43,0x26,0x48,0x54,0x6e,0x54,0x48, + 0x26,0x26,0x48,0x54,0x37,0x5e,0x5e,0x40,0x40,0x3d, + 0x05,0x1e,0xfa,0xce,0x02,0x99,0xcb,0x01,0x06,0x69, + 0x07,0x58,0x0e,0xb4,0xfe,0xf1,0xfe,0x85,0xe9,0x7c, + 0x35,0x35,0x7c,0xe9,0x01,0x4a,0xe9,0x7c,0x35,0x02, + 0xfe,0x27,0x96,0x96,0x00,0x00,0x00,0x02,0x00,0x5e, + 0xfe,0x14,0x03,0x04,0x05,0x1e,0x00,0x17,0x00,0x1d, + 0x00,0x00,0x01,0x22,0x26,0x10,0x36,0x33,0x20,0x11, + 0x11,0x23,0x11,0x10,0x23,0x22,0x06,0x07,0x06,0x15, + 0x14,0x17,0x16,0x33,0x33,0x07,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0x88,0x98,0x92,0xb4,0x96,0x01,0x5c, + 0x5f,0xfd,0x3d,0x60,0x1c,0x39,0x43,0x34,0x62,0x0e, + 0x10,0x0a,0x40,0x40,0x3d,0x01,0xb9,0xde,0x01,0x8c, + 0xfb,0xfd,0x67,0xfb,0x8f,0x04,0x71,0x02,0x3f,0x46, + 0x38,0x70,0x7b,0xc5,0x52,0x40,0x4b,0x01,0xe1,0x96, + 0x96,0x00,0x00,0x02,0x00,0x5e,0xff,0xec,0x03,0x04, + 0x05,0x1e,0x00,0x25,0x00,0x2b,0x00,0x00,0x01,0x22, + 0x26,0x10,0x36,0x33,0x20,0x11,0x10,0x02,0x23,0x22, + 0x27,0x27,0x35,0x16,0x33,0x32,0x36,0x36,0x37,0x36, + 0x11,0x10,0x27,0x26,0x26,0x22,0x06,0x07,0x06,0x15, + 0x14,0x17,0x16,0x33,0x33,0x07,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0x88,0x98,0x92,0xb4,0x96,0x01,0x5c, + 0xc0,0xad,0x69,0x57,0x1d,0x67,0x76,0x2b,0x4a,0x46, + 0x18,0x37,0x4a,0x24,0x54,0x74,0x60,0x1c,0x39,0x43, + 0x34,0x62,0x0e,0x10,0x24,0x40,0x40,0x3d,0x01,0xb9, + 0xde,0x01,0x8c,0xfb,0xfd,0x67,0xfe,0xb2,0xfe,0xb5, + 0x0f,0x05,0x59,0x13,0x1f,0x50,0x3f,0x8e,0x01,0x03, + 0x01,0x4d,0x7f,0x3e,0x35,0x46,0x38,0x70,0x7b,0xc5, + 0x52,0x40,0x4b,0x01,0xe1,0x96,0x96,0x00,0x00,0x02, + 0x00,0x3b,0x00,0x00,0x02,0xa9,0x05,0x0a,0x00,0x12, + 0x00,0x18,0x00,0x00,0x21,0x21,0x35,0x21,0x03,0x01, + 0x33,0x01,0x17,0x36,0x36,0x37,0x13,0x33,0x03,0x06, + 0x06,0x07,0x13,0x01,0x32,0x14,0x23,0x22,0x34,0x02, + 0xa1,0xfd,0x9a,0x01,0xed,0xd5,0xfe,0xe8,0x65,0x01, + 0x19,0x07,0x30,0x2c,0x0f,0x20,0x5e,0x1f,0x14,0x43, + 0x49,0xb7,0xfe,0x20,0x40,0x40,0x3d,0x54,0x01,0xfd, + 0x02,0xb9,0xfd,0x47,0x13,0x4d,0xc5,0x85,0x01,0x35, + 0xfe,0xcb,0xc6,0xe3,0x50,0xfe,0x4f,0x01,0x81,0x96, + 0x96,0x00,0x00,0x00,0x00,0x03,0x00,0x91,0xfe,0x14, + 0x03,0x0d,0x05,0x0a,0x00,0x19,0x00,0x1d,0x00,0x23, + 0x00,0x00,0x25,0x15,0x23,0x35,0x34,0x37,0x37,0x3e, + 0x03,0x37,0x13,0x21,0x35,0x21,0x15,0x03,0x0e,0x05, + 0x07,0x06,0x01,0x11,0x33,0x11,0x13,0x32,0x14,0x23, + 0x22,0x34,0x01,0xd8,0x5d,0x09,0x0e,0x0b,0x3a,0x0b, + 0x1d,0x03,0xac,0xfd,0xe3,0x02,0x7c,0xac,0x0c,0x21, + 0x1a,0x0f,0x15,0x0c,0x06,0x0c,0xfe,0xba,0x5f,0x92, + 0x40,0x40,0x3d,0x11,0x11,0x11,0x27,0x2d,0x49,0x35, + 0xd4,0x2a,0x64,0x0c,0x02,0x65,0x54,0x54,0xfd,0x9b, + 0x29,0x78,0x5c,0x3c,0x52,0x39,0x1f,0x3e,0xfd,0xe4, + 0x04,0xe3,0xfb,0x1d,0x04,0xd5,0x96,0x96,0x00,0x00, + 0x00,0x02,0x00,0x17,0x00,0x00,0x02,0x10,0x05,0x1e, + 0x00,0x13,0x00,0x19,0x00,0x00,0x13,0x36,0x32,0x1e, + 0x02,0x17,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, + 0x23,0x22,0x07,0x07,0x13,0x32,0x14,0x23,0x22,0x34, + 0x17,0x4d,0x9c,0x5c,0x4f,0x32,0x12,0x21,0x5f,0x14, + 0x3b,0x55,0x39,0x56,0x50,0x17,0xc5,0x40,0x40,0x3d, + 0x05,0x14,0x0a,0x0b,0x1f,0x33,0x28,0x49,0x9a,0xfc, + 0x4a,0x03,0xb6,0x5c,0x69,0x3c,0x11,0x08,0x03,0xfe, + 0x2c,0x96,0x96,0x00,0x00,0x02,0x00,0x4a,0x00,0x00, + 0x03,0xce,0x05,0x0a,0x00,0x1e,0x00,0x24,0x00,0x00, + 0x21,0x23,0x03,0x33,0x13,0x36,0x36,0x37,0x37,0x33, + 0x07,0x0e,0x03,0x07,0x13,0x33,0x32,0x36,0x37,0x36, + 0x13,0x13,0x33,0x03,0x06,0x07,0x0e,0x02,0x13,0x32, + 0x14,0x23,0x22,0x34,0x01,0x20,0x69,0x6d,0x58,0x3d, + 0x75,0x70,0x16,0x19,0x54,0x19,0x0d,0x27,0x49,0x74, + 0x56,0x20,0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55, + 0x37,0x17,0x5a,0x33,0x89,0xcd,0x6f,0x40,0x40,0x3d, + 0x05,0x0a,0xfd,0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e, + 0xac,0x92,0x60,0x20,0xfe,0x87,0x62,0x57,0xb3,0x01, + 0x1c,0x02,0x2b,0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56, + 0x02,0x03,0x96,0x96,0x00,0x02,0x00,0x10,0x00,0x00, + 0x02,0xe9,0x05,0x1e,0x00,0x1e,0x00,0x24,0x00,0x00, + 0x13,0x36,0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x23, + 0x11,0x34,0x27,0x26,0x27,0x26,0x22,0x07,0x11,0x14, + 0x06,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x35,0x11, + 0x07,0x01,0x32,0x14,0x23,0x22,0x34,0x40,0xc2,0xd2, + 0x64,0x59,0x1c,0x3c,0x5f,0x28,0x22,0x56,0x24,0x51, + 0x85,0x49,0x49,0x26,0x28,0x2c,0x11,0x44,0x51,0x01, + 0x7d,0x40,0x40,0x3d,0x05,0x08,0x16,0x11,0x2e,0x28, + 0x56,0xab,0xfc,0x4a,0x03,0xb6,0x88,0x40,0x37,0x0d, + 0x06,0x07,0xfc,0x0b,0x6f,0x5d,0x08,0x5b,0x08,0x71, + 0x03,0xec,0x07,0xfe,0x38,0x96,0x96,0x00,0x00,0x00, + 0x00,0x02,0x00,0x67,0x00,0x00,0x00,0xf0,0x06,0x18, + 0x00,0x05,0x00,0x09,0x00,0x00,0x13,0x32,0x14,0x23, + 0x22,0x34,0x13,0x11,0x33,0x11,0xa4,0x40,0x40,0x3d, + 0x2a,0x5f,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a, + 0xfa,0xf6,0x00,0x00,0x00,0x01,0xff,0x15,0x05,0xa9, + 0x00,0xeb,0x05,0xfc,0x00,0x03,0x00,0x00,0x13,0x21, + 0x35,0x21,0xeb,0xfe,0x2a,0x01,0xd6,0x05,0xa9,0x53, + 0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x86,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x00,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x20, + 0x00,0x75,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x02, + 0x00,0x07,0x00,0x95,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x03,0x00,0x28,0x00,0x9c,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x75,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x3c,0x00,0xc4, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x1d, + 0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x07, + 0x00,0x52,0x01,0x1d,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x08,0x00,0x22,0x01,0x6f,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x0b,0x00,0x32,0x01,0x91,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x3c,0x01,0xc3, + 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,0x2e, + 0x01,0xff,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0e, + 0x00,0x2a,0x02,0x2d,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x10,0x00,0x1a,0x02,0x57,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x11,0x00,0x05,0x02,0x71,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x20,0x00,0x75, + 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x00,0x00,0xea, + 0x02,0x76,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x01, + 0x00,0x40,0x03,0x60,0x00,0x03,0x00,0x01,0x04,0x09, + 0x00,0x02,0x00,0x0e,0x03,0xa0,0x00,0x03,0x00,0x01, + 0x04,0x09,0x00,0x03,0x00,0x50,0x03,0xae,0x00,0x03, + 0x00,0x01,0x04,0x09,0x00,0x04,0x00,0x40,0x03,0x60, + 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x05,0x00,0x78, + 0x03,0xfe,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x06, + 0x00,0x3a,0x04,0x76,0x00,0x03,0x00,0x01,0x04,0x09, + 0x00,0x07,0x00,0xa4,0x04,0xb0,0x00,0x03,0x00,0x01, + 0x04,0x09,0x00,0x08,0x00,0x44,0x05,0x54,0x00,0x03, + 0x00,0x01,0x04,0x09,0x00,0x0b,0x00,0x64,0x05,0x98, + 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x0c,0x00,0x78, + 0x05,0xfc,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x0d, + 0x00,0x5c,0x06,0x74,0x00,0x03,0x00,0x01,0x04,0x09, + 0x00,0x0e,0x00,0x54,0x06,0xd0,0x00,0x03,0x00,0x01, + 0x04,0x09,0x00,0x10,0x00,0x34,0x07,0x24,0x00,0x03, + 0x00,0x01,0x04,0x09,0x00,0x11,0x00,0x0a,0x07,0x58, + 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x12,0x00,0x40, + 0x03,0x60,0x44,0x69,0x67,0x69,0x74,0x69,0x7a,0x65, + 0x64,0x20,0x64,0x61,0x74,0x61,0x20,0x63,0x6f,0x70, + 0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29, + 0x20,0x32,0x30,0x31,0x31,0x2c,0x20,0x47,0x6f,0x6f, + 0x67,0x6c,0x65,0x20,0x43,0x6f,0x72,0x70,0x6f,0x72, + 0x61,0x74,0x69,0x6f,0x6e,0x2e,0x20,0x43,0x6f,0x70, + 0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29, + 0x20,0x32,0x30,0x31,0x32,0x2c,0x20,0x32,0x30,0x31, + 0x33,0x20,0x59,0x61,0x6e,0x65,0x6b,0x20,0x49,0x6f, + 0x6e,0x74,0x65,0x66,0x20,0x28,0x79,0x61,0x6e,0x65, + 0x6b,0x40,0x6e,0x65,0x74,0x76,0x69,0x73,0x69,0x6f, + 0x6e,0x2e,0x6e,0x65,0x74,0x2e,0x69,0x6c,0x29,0x4f, + 0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73,0x20,0x48, + 0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f,0x6e,0x64, + 0x65,0x6e,0x73,0x65,0x64,0x20,0x4c,0x69,0x67,0x68, + 0x74,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x32,0x2e, + 0x30,0x30,0x31,0x3b,0x55,0x4b,0x57,0x4e,0x3b,0x4f, + 0x70,0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62, + 0x72,0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73, + 0x65,0x64,0x2d,0x4c,0x69,0x67,0x68,0x74,0x56,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x20,0x32,0x2e,0x30,0x30, + 0x31,0x3b,0x50,0x53,0x20,0x30,0x30,0x32,0x2e,0x30, + 0x30,0x31,0x3b,0x68,0x6f,0x74,0x63,0x6f,0x6e,0x76, + 0x20,0x31,0x2e,0x30,0x2e,0x37,0x30,0x3b,0x6d,0x61, + 0x6b,0x65,0x6f,0x74,0x66,0x2e,0x6c,0x69,0x62,0x32, + 0x2e,0x35,0x2e,0x35,0x38,0x33,0x32,0x39,0x4f,0x70, + 0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62,0x72, + 0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65, + 0x64,0x2d,0x4c,0x69,0x67,0x68,0x74,0x4f,0x70,0x65, + 0x6e,0x20,0x53,0x61,0x6e,0x73,0x20,0x69,0x73,0x20, + 0x61,0x20,0x74,0x72,0x61,0x64,0x65,0x6d,0x61,0x72, + 0x6b,0x20,0x6f,0x66,0x20,0x47,0x6f,0x6f,0x67,0x6c, + 0x65,0x20,0x61,0x6e,0x64,0x20,0x6d,0x61,0x79,0x20, + 0x62,0x65,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65, + 0x72,0x65,0x64,0x20,0x69,0x6e,0x20,0x63,0x65,0x72, + 0x74,0x61,0x69,0x6e,0x20,0x6a,0x75,0x72,0x69,0x73, + 0x64,0x69,0x63,0x74,0x69,0x6f,0x6e,0x73,0x2e,0x41, + 0x73,0x63,0x65,0x6e,0x64,0x65,0x72,0x20,0x43,0x6f, + 0x72,0x70,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x2c, + 0x20,0x59,0x61,0x6e,0x65,0x6b,0x20,0x49,0x6f,0x6e, + 0x74,0x65,0x66,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x61,0x73,0x63,0x65,0x6e,0x64, + 0x65,0x72,0x63,0x6f,0x72,0x70,0x2e,0x63,0x6f,0x6d, + 0x2f,0x20,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x66,0x6f,0x6e,0x74,0x65,0x66,0x2e, + 0x63,0x6f,0x6d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x61,0x73,0x63,0x65,0x6e,0x64, + 0x65,0x72,0x63,0x6f,0x72,0x70,0x2e,0x63,0x6f,0x6d, + 0x2f,0x74,0x79,0x70,0x65,0x64,0x65,0x73,0x69,0x67, + 0x6e,0x65,0x72,0x73,0x2e,0x68,0x74,0x6d,0x6c,0x2c, + 0x20,0x59,0x61,0x6e,0x65,0x6b,0x20,0x49,0x6f,0x6e, + 0x74,0x65,0x66,0x4c,0x69,0x63,0x65,0x6e,0x73,0x65, + 0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68, + 0x65,0x20,0x41,0x70,0x61,0x63,0x68,0x65,0x20,0x4c, + 0x69,0x63,0x65,0x6e,0x73,0x65,0x2c,0x20,0x56,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x20,0x32,0x2e,0x30,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, + 0x61,0x70,0x61,0x63,0x68,0x65,0x2e,0x6f,0x72,0x67, + 0x2f,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x73,0x2f, + 0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x2d,0x32,0x2e, + 0x30,0x4f,0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73, + 0x20,0x48,0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f, + 0x6e,0x64,0x65,0x6e,0x73,0x65,0x64,0x4c,0x69,0x67, + 0x68,0x74,0x00,0x44,0x00,0x69,0x00,0x67,0x00,0x69, + 0x00,0x74,0x00,0x69,0x00,0x7a,0x00,0x65,0x00,0x64, + 0x00,0x20,0x00,0x64,0x00,0x61,0x00,0x74,0x00,0x61, + 0x00,0x20,0x00,0x63,0x00,0x6f,0x00,0x70,0x00,0x79, + 0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, + 0x00,0x20,0x00,0x28,0x00,0x63,0x00,0x29,0x00,0x20, + 0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x31,0x00,0x2c, + 0x00,0x20,0x00,0x47,0x00,0x6f,0x00,0x6f,0x00,0x67, + 0x00,0x6c,0x00,0x65,0x00,0x20,0x00,0x43,0x00,0x6f, + 0x00,0x72,0x00,0x70,0x00,0x6f,0x00,0x72,0x00,0x61, + 0x00,0x74,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x2e, + 0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x70,0x00,0x79, + 0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, + 0x00,0x20,0x00,0x28,0x00,0x63,0x00,0x29,0x00,0x20, + 0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x2c, + 0x00,0x20,0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x33, + 0x00,0x20,0x00,0x59,0x00,0x61,0x00,0x6e,0x00,0x65, + 0x00,0x6b,0x00,0x20,0x00,0x49,0x00,0x6f,0x00,0x6e, + 0x00,0x74,0x00,0x65,0x00,0x66,0x00,0x20,0x00,0x28, + 0x00,0x79,0x00,0x61,0x00,0x6e,0x00,0x65,0x00,0x6b, + 0x00,0x40,0x00,0x6e,0x00,0x65,0x00,0x74,0x00,0x76, + 0x00,0x69,0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e, + 0x00,0x2e,0x00,0x6e,0x00,0x65,0x00,0x74,0x00,0x2e, + 0x00,0x69,0x00,0x6c,0x00,0x29,0x00,0x4f,0x00,0x70, + 0x00,0x65,0x00,0x6e,0x00,0x20,0x00,0x53,0x00,0x61, + 0x00,0x6e,0x00,0x73,0x00,0x20,0x00,0x48,0x00,0x65, + 0x00,0x62,0x00,0x72,0x00,0x65,0x00,0x77,0x00,0x20, + 0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64,0x00,0x65, + 0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64,0x00,0x20, + 0x00,0x4c,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, + 0x00,0x52,0x00,0x65,0x00,0x67,0x00,0x75,0x00,0x6c, + 0x00,0x61,0x00,0x72,0x00,0x32,0x00,0x2e,0x00,0x30, + 0x00,0x30,0x00,0x31,0x00,0x3b,0x00,0x55,0x00,0x4b, + 0x00,0x57,0x00,0x4e,0x00,0x3b,0x00,0x4f,0x00,0x70, + 0x00,0x65,0x00,0x6e,0x00,0x53,0x00,0x61,0x00,0x6e, + 0x00,0x73,0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72, + 0x00,0x65,0x00,0x77,0x00,0x43,0x00,0x6f,0x00,0x6e, + 0x00,0x64,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, + 0x00,0x64,0x00,0x2d,0x00,0x4c,0x00,0x69,0x00,0x67, + 0x00,0x68,0x00,0x74,0x00,0x56,0x00,0x65,0x00,0x72, + 0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x20, + 0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x30,0x00,0x31, + 0x00,0x3b,0x00,0x50,0x00,0x53,0x00,0x20,0x00,0x30, + 0x00,0x30,0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x30, + 0x00,0x31,0x00,0x3b,0x00,0x68,0x00,0x6f,0x00,0x74, + 0x00,0x63,0x00,0x6f,0x00,0x6e,0x00,0x76,0x00,0x20, + 0x00,0x31,0x00,0x2e,0x00,0x30,0x00,0x2e,0x00,0x37, + 0x00,0x30,0x00,0x3b,0x00,0x6d,0x00,0x61,0x00,0x6b, + 0x00,0x65,0x00,0x6f,0x00,0x74,0x00,0x66,0x00,0x2e, + 0x00,0x6c,0x00,0x69,0x00,0x62,0x00,0x32,0x00,0x2e, + 0x00,0x35,0x00,0x2e,0x00,0x35,0x00,0x38,0x00,0x33, + 0x00,0x32,0x00,0x39,0x00,0x4f,0x00,0x70,0x00,0x65, + 0x00,0x6e,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73, + 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, + 0x00,0x77,0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64, + 0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64, + 0x00,0x2d,0x00,0x4c,0x00,0x69,0x00,0x67,0x00,0x68, + 0x00,0x74,0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e, + 0x00,0x20,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73, + 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61, + 0x00,0x20,0x00,0x74,0x00,0x72,0x00,0x61,0x00,0x64, + 0x00,0x65,0x00,0x6d,0x00,0x61,0x00,0x72,0x00,0x6b, + 0x00,0x20,0x00,0x6f,0x00,0x66,0x00,0x20,0x00,0x47, + 0x00,0x6f,0x00,0x6f,0x00,0x67,0x00,0x6c,0x00,0x65, + 0x00,0x20,0x00,0x61,0x00,0x6e,0x00,0x64,0x00,0x20, + 0x00,0x6d,0x00,0x61,0x00,0x79,0x00,0x20,0x00,0x62, + 0x00,0x65,0x00,0x20,0x00,0x72,0x00,0x65,0x00,0x67, + 0x00,0x69,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x72, + 0x00,0x65,0x00,0x64,0x00,0x20,0x00,0x69,0x00,0x6e, + 0x00,0x20,0x00,0x63,0x00,0x65,0x00,0x72,0x00,0x74, + 0x00,0x61,0x00,0x69,0x00,0x6e,0x00,0x20,0x00,0x6a, + 0x00,0x75,0x00,0x72,0x00,0x69,0x00,0x73,0x00,0x64, + 0x00,0x69,0x00,0x63,0x00,0x74,0x00,0x69,0x00,0x6f, + 0x00,0x6e,0x00,0x73,0x00,0x2e,0x00,0x41,0x00,0x73, + 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x64,0x00,0x65, + 0x00,0x72,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x72, + 0x00,0x70,0x00,0x6f,0x00,0x72,0x00,0x61,0x00,0x74, + 0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x2c,0x00,0x20, + 0x00,0x59,0x00,0x61,0x00,0x6e,0x00,0x65,0x00,0x6b, + 0x00,0x20,0x00,0x49,0x00,0x6f,0x00,0x6e,0x00,0x74, + 0x00,0x65,0x00,0x66,0x00,0x68,0x00,0x74,0x00,0x74, + 0x00,0x70,0x00,0x3a,0x00,0x2f,0x00,0x2f,0x00,0x77, + 0x00,0x77,0x00,0x77,0x00,0x2e,0x00,0x61,0x00,0x73, + 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x64,0x00,0x65, + 0x00,0x72,0x00,0x63,0x00,0x6f,0x00,0x72,0x00,0x70, + 0x00,0x2e,0x00,0x63,0x00,0x6f,0x00,0x6d,0x00,0x2f, + 0x00,0x20,0x00,0x68,0x00,0x74,0x00,0x74,0x00,0x70, + 0x00,0x3a,0x00,0x2f,0x00,0x2f,0x00,0x77,0x00,0x77, + 0x00,0x77,0x00,0x2e,0x00,0x66,0x00,0x6f,0x00,0x6e, + 0x00,0x74,0x00,0x65,0x00,0x66,0x00,0x2e,0x00,0x63, + 0x00,0x6f,0x00,0x6d,0x00,0x68,0x00,0x74,0x00,0x74, + 0x00,0x70,0x00,0x3a,0x00,0x2f,0x00,0x2f,0x00,0x77, + 0x00,0x77,0x00,0x77,0x00,0x2e,0x00,0x61,0x00,0x73, + 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x64,0x00,0x65, + 0x00,0x72,0x00,0x63,0x00,0x6f,0x00,0x72,0x00,0x70, + 0x00,0x2e,0x00,0x63,0x00,0x6f,0x00,0x6d,0x00,0x2f, + 0x00,0x74,0x00,0x79,0x00,0x70,0x00,0x65,0x00,0x64, + 0x00,0x65,0x00,0x73,0x00,0x69,0x00,0x67,0x00,0x6e, + 0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x2e,0x00,0x68, + 0x00,0x74,0x00,0x6d,0x00,0x6c,0x00,0x2c,0x00,0x20, + 0x00,0x59,0x00,0x61,0x00,0x6e,0x00,0x65,0x00,0x6b, + 0x00,0x20,0x00,0x49,0x00,0x6f,0x00,0x6e,0x00,0x74, + 0x00,0x65,0x00,0x66,0x00,0x4c,0x00,0x69,0x00,0x63, + 0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64, + 0x00,0x20,0x00,0x75,0x00,0x6e,0x00,0x64,0x00,0x65, + 0x00,0x72,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65, + 0x00,0x20,0x00,0x41,0x00,0x70,0x00,0x61,0x00,0x63, + 0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x4c,0x00,0x69, + 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, + 0x00,0x2c,0x00,0x20,0x00,0x56,0x00,0x65,0x00,0x72, + 0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x20, + 0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x68,0x00,0x74, + 0x00,0x74,0x00,0x70,0x00,0x3a,0x00,0x2f,0x00,0x2f, + 0x00,0x77,0x00,0x77,0x00,0x77,0x00,0x2e,0x00,0x61, + 0x00,0x70,0x00,0x61,0x00,0x63,0x00,0x68,0x00,0x65, + 0x00,0x2e,0x00,0x6f,0x00,0x72,0x00,0x67,0x00,0x2f, + 0x00,0x6c,0x00,0x69,0x00,0x63,0x00,0x65,0x00,0x6e, + 0x00,0x73,0x00,0x65,0x00,0x73,0x00,0x2f,0x00,0x4c, + 0x00,0x49,0x00,0x43,0x00,0x45,0x00,0x4e,0x00,0x53, + 0x00,0x45,0x00,0x2d,0x00,0x32,0x00,0x2e,0x00,0x30, + 0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e,0x00,0x20, + 0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x20, + 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, + 0x00,0x77,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x6e, + 0x00,0x64,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, + 0x00,0x64,0x00,0x4c,0x00,0x69,0x00,0x67,0x00,0x68, + 0x00,0x74,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xb5,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x37,0x00,0x00,0x00,0x01, + 0x00,0x02,0x01,0x02,0x00,0x03,0x00,0x04,0x00,0x05, + 0x00,0x06,0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0a, + 0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e,0x00,0x0f, + 0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14, + 0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18,0x00,0x19, + 0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e, + 0x00,0x1f,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23, + 0x00,0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28, + 0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d, + 0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32, + 0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37, + 0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c, + 0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41, + 0x00,0x42,0x00,0x43,0x00,0x44,0x00,0x45,0x00,0x46, + 0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b, + 0x00,0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50, + 0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55, + 0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a, + 0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f, + 0x00,0x60,0x00,0x61,0x01,0x03,0x00,0xa3,0x00,0x84, + 0x00,0x85,0x00,0xbd,0x00,0x96,0x00,0xe8,0x00,0x86, + 0x00,0x8e,0x00,0x8b,0x00,0x9d,0x00,0xa9,0x00,0xa4, + 0x01,0x04,0x00,0x8a,0x01,0x05,0x00,0x83,0x00,0x93, + 0x00,0xf2,0x00,0xf3,0x00,0x8d,0x01,0x06,0x00,0x88, + 0x00,0xc3,0x00,0xde,0x00,0xf1,0x00,0x9e,0x00,0xaa, + 0x00,0xf5,0x00,0xf4,0x00,0xf6,0x00,0xa2,0x00,0xad, + 0x00,0xc9,0x00,0xc7,0x00,0xae,0x00,0x62,0x00,0x63, + 0x00,0x90,0x00,0x64,0x00,0xcb,0x00,0x65,0x00,0xc8, + 0x00,0xca,0x00,0xcf,0x00,0xcc,0x00,0xcd,0x00,0xce, + 0x00,0xe9,0x00,0x66,0x00,0xd3,0x00,0xd0,0x00,0xd1, + 0x00,0xaf,0x00,0x67,0x00,0xf0,0x00,0x91,0x00,0xd6, + 0x00,0xd4,0x00,0xd5,0x00,0x68,0x00,0xeb,0x00,0xed, + 0x00,0x89,0x00,0x6a,0x00,0x69,0x00,0x6b,0x00,0x6d, + 0x00,0x6c,0x00,0x6e,0x00,0xa0,0x00,0x6f,0x00,0x71, + 0x00,0x70,0x00,0x72,0x00,0x73,0x00,0x75,0x00,0x74, + 0x00,0x76,0x00,0x77,0x00,0xea,0x00,0x78,0x00,0x7a, + 0x00,0x79,0x00,0x7b,0x00,0x7d,0x00,0x7c,0x00,0xb8, + 0x00,0xa1,0x00,0x7f,0x00,0x7e,0x00,0x80,0x00,0x81, + 0x00,0xec,0x00,0xee,0x00,0xba,0x00,0xd7,0x00,0xb0, + 0x00,0xb1,0x00,0xe4,0x00,0xe5,0x00,0xbb,0x00,0xe6, + 0x00,0xe7,0x00,0xa6,0x00,0xd8,0x00,0xe1,0x00,0xdb, + 0x00,0xdc,0x00,0xdd,0x00,0xe0,0x00,0xd9,0x00,0xdf, + 0x01,0x07,0x01,0x08,0x01,0x09,0x01,0x0a,0x01,0x0b, + 0x01,0x0c,0x01,0x0d,0x01,0x0e,0x01,0x0f,0x01,0x10, + 0x01,0x11,0x01,0x12,0x01,0x13,0x01,0x14,0x01,0x15, + 0x01,0x16,0x01,0x17,0x01,0x18,0x01,0x19,0x01,0x1a, + 0x01,0x1b,0x01,0x1c,0x01,0x1d,0x01,0x1e,0x01,0x1f, + 0x01,0x20,0x01,0x21,0x01,0x22,0x01,0x23,0x01,0x24, + 0x01,0x25,0x01,0x26,0x01,0x27,0x01,0x28,0x01,0x29, + 0x01,0x2a,0x01,0x2b,0x01,0x2c,0x01,0x2d,0x01,0x2e, + 0x01,0x2f,0x01,0x30,0x01,0x31,0x01,0x32,0x01,0x33, + 0x01,0x34,0x01,0x35,0x00,0xb2,0x00,0xb3,0x00,0xb6, + 0x00,0xb7,0x00,0xc4,0x00,0xb4,0x00,0xb5,0x00,0xc5, + 0x00,0x82,0x00,0xc2,0x00,0x87,0x00,0xab,0x00,0xc6, + 0x00,0xbe,0x00,0xbf,0x00,0xbc,0x01,0x36,0x01,0x37, + 0x00,0x8c,0x01,0x38,0x01,0x39,0x01,0x3a,0x01,0x3b, + 0x01,0x3c,0x01,0x3d,0x01,0x3e,0x01,0x3f,0x01,0x40, + 0x01,0x41,0x01,0x42,0x01,0x43,0x01,0x44,0x01,0x45, + 0x01,0x46,0x01,0x47,0x01,0x48,0x01,0x49,0x01,0x4a, + 0x01,0x4b,0x01,0x4c,0x01,0x4d,0x01,0x4e,0x01,0x4f, + 0x01,0x50,0x01,0x51,0x01,0x52,0x01,0x53,0x01,0x54, + 0x01,0x55,0x01,0x56,0x01,0x57,0x00,0xac,0x02,0x43, + 0x52,0x07,0x75,0x6e,0x69,0x30,0x30,0x41,0x30,0x07, + 0x75,0x6e,0x69,0x30,0x30,0x41,0x44,0x09,0x6f,0x76, + 0x65,0x72,0x73,0x63,0x6f,0x72,0x65,0x07,0x75,0x6e, + 0x69,0x30,0x30,0x42,0x35,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x42,0x30,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, + 0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x32,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x42,0x33,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x42,0x34,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x42,0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, + 0x36,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x37,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x42,0x38,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x42,0x39,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x42,0x41,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, + 0x42,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x43,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x42,0x44,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x42,0x45,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x43,0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x43, + 0x32,0x07,0x75,0x6e,0x69,0x30,0x35,0x43,0x37,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x30,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x44,0x31,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x32,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, + 0x33,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x34,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x35,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x44,0x36,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x37,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, + 0x38,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x39,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x41,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x44,0x42,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x44,0x43,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, + 0x44,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x45,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x44,0x46,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x45,0x30,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x45,0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, + 0x32,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x33,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x45,0x34,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x45,0x35,0x07,0x75,0x6e,0x69,0x30, + 0x35,0x45,0x36,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, + 0x37,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x38,0x07, + 0x75,0x6e,0x69,0x30,0x35,0x45,0x39,0x07,0x75,0x6e, + 0x69,0x30,0x35,0x45,0x41,0x08,0x67,0x65,0x72,0x65, + 0x73,0x68,0x68,0x62,0x0b,0x67,0x65,0x72,0x73,0x68, + 0x61,0x79,0x69,0x6d,0x68,0x62,0x07,0x75,0x6e,0x69, + 0x32,0x30,0x41,0x41,0x04,0x45,0x75,0x72,0x6f,0x07, + 0x75,0x6e,0x69,0x46,0x42,0x30,0x31,0x07,0x75,0x6e, + 0x69,0x46,0x42,0x30,0x32,0x07,0x75,0x6e,0x69,0x46, + 0x42,0x32,0x41,0x07,0x75,0x6e,0x69,0x46,0x42,0x32, + 0x42,0x13,0x73,0x68,0x69,0x6e,0x64,0x61,0x67,0x65, + 0x73,0x68,0x73,0x68,0x69,0x6e,0x64,0x6f,0x74,0x68, + 0x62,0x12,0x73,0x68,0x69,0x6e,0x64,0x61,0x67,0x65, + 0x73,0x68,0x73,0x69,0x6e,0x64,0x6f,0x74,0x68,0x62, + 0x0b,0x61,0x6c,0x65,0x66,0x70,0x61,0x74,0x61,0x68, + 0x68,0x62,0x0c,0x61,0x6c,0x65,0x66,0x71,0x61,0x6d, + 0x61,0x74,0x73,0x68,0x62,0x0c,0x61,0x6c,0x65,0x66, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x62, + 0x65,0x74,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, + 0x0d,0x67,0x69,0x6d,0x65,0x6c,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0d,0x64,0x61,0x6c,0x65,0x74, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0a,0x68, + 0x65,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x07, + 0x75,0x6e,0x69,0x46,0x42,0x33,0x35,0x0d,0x7a,0x61, + 0x79,0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68,0x68, + 0x62,0x0b,0x74,0x65,0x74,0x64,0x61,0x67,0x65,0x73, + 0x68,0x68,0x62,0x0b,0x79,0x6f,0x64,0x64,0x61,0x67, + 0x65,0x73,0x68,0x68,0x62,0x10,0x66,0x69,0x6e,0x61, + 0x6c,0x6b,0x61,0x66,0x64,0x61,0x67,0x65,0x73,0x68, + 0x68,0x62,0x0b,0x6b,0x61,0x66,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0d,0x6c,0x61,0x6d,0x65,0x64, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x6d, + 0x65,0x6d,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, + 0x0b,0x6e,0x75,0x6e,0x64,0x61,0x67,0x65,0x73,0x68, + 0x68,0x62,0x0e,0x73,0x61,0x6d,0x65,0x6b,0x68,0x64, + 0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0f,0x66,0x69, + 0x6e,0x61,0x6c,0x70,0x65,0x64,0x61,0x67,0x65,0x73, + 0x68,0x68,0x62,0x0a,0x70,0x65,0x64,0x61,0x67,0x65, + 0x73,0x68,0x68,0x62,0x0d,0x74,0x73,0x61,0x64,0x69, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x71, + 0x6f,0x66,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, + 0x0c,0x72,0x65,0x73,0x68,0x64,0x61,0x67,0x65,0x73, + 0x68,0x68,0x62,0x0c,0x73,0x68,0x69,0x6e,0x64,0x61, + 0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x74,0x61,0x76, + 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x07,0x75, + 0x6e,0x69,0x46,0x42,0x34,0x42,0x07,0x72,0x61,0x66, + 0x65,0x68,0x68,0x62,0x00,0x00,0x00,0x01,0x00,0x01, + 0xff,0xff,0x00,0x0f,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0xcc,0x6d,0xb1,0x55,0x00,0x00,0x00,0x00, + 0xcd,0x64,0xfe,0x51,0x00,0x00,0x00,0x00,0xcd,0xac, + 0x5d,0x6c,0x00,0x01,0x00,0x00,0x00,0x0c,0x00,0x00, + 0x00,0x2e,0x00,0x00,0x00,0x02,0x00,0x05,0x00,0x03, + 0x00,0xd3,0x00,0x01,0x00,0xd4,0x00,0xe1,0x00,0x03, + 0x00,0xe2,0x00,0xe2,0x00,0x01,0x00,0xe3,0x00,0xe5, + 0x00,0x03,0x00,0xe6,0x01,0x35,0x00,0x01,0x00,0x04, + 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x0a,0x00,0x1e,0x00,0x2c,0x00,0x01, + 0x68,0x65,0x62,0x72,0x00,0x08,0x00,0x04,0x00,0x00, + 0x00,0x00,0xff,0xff,0x00,0x01,0x00,0x00,0x00,0x01, + 0x6d,0x61,0x72,0x6b,0x00,0x08,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x04,0x00,0x00, + 0x00,0x01,0x00,0x08,0x00,0x01,0x00,0x0c,0x00,0x1c, + 0x00,0x04,0x00,0x26,0x00,0x84,0x00,0x02,0x00,0x02, + 0x00,0xd4,0x00,0xe1,0x00,0x00,0x00,0xe3,0x00,0xe5, + 0x00,0x0e,0x00,0x02,0x00,0x01,0x00,0xe6,0x01,0x00, + 0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x58,0x00,0x00, + 0x00,0x58,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x58, + 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x58,0x00,0x00, + 0x00,0x58,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x58, + 0x00,0x01,0x00,0x52,0x00,0x01,0x00,0x52,0x00,0x00, + 0x00,0x58,0x00,0x02,0x00,0x46,0x00,0x00,0x00,0x58, + 0x00,0x03,0x00,0x4c,0x00,0x01,0x00,0x52,0x00,0x00, + 0x00,0x58,0x00,0x01,0x00,0x00,0x02,0x9e,0x00,0x01, + 0x00,0x00,0x04,0x5e,0x00,0x01,0xff,0xff,0x04,0x5e, + 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x1b,0x00,0xda, + 0x02,0x6c,0x00,0xe0,0x02,0x78,0x00,0xe6,0x00,0xec, + 0x00,0xf2,0x02,0x78,0x00,0xf8,0x00,0xfe,0x01,0x04, + 0x02,0x78,0x01,0x0a,0x01,0x10,0x02,0x48,0x02,0x78, + 0x01,0x7c,0x01,0x16,0x01,0x88,0x02,0x78,0x01,0x1c, + 0x01,0x22,0x01,0x28,0x02,0x78,0x01,0x2e,0x01,0xca, + 0x01,0x34,0x02,0x78,0x01,0x7c,0x02,0x30,0x01,0x88, + 0x02,0x78,0x01,0xc4,0x01,0x3a,0x01,0xd0,0x02,0x78, + 0x01,0x40,0x01,0x46,0x01,0x4c,0x02,0x78,0x01,0x52, + 0x02,0x1e,0x01,0x64,0x02,0x78,0x01,0x58,0x01,0x5e, + 0x01,0x64,0x02,0x78,0x01,0x6a,0x01,0x70,0x01,0x76, + 0x02,0x78,0x01,0x7c,0x01,0x82,0x01,0x88,0x02,0x78, + 0x01,0x8e,0x01,0x94,0x01,0x9a,0x02,0x78,0x01,0xa0, + 0x01,0xa6,0x01,0xac,0x02,0x78,0x01,0xb2,0x01,0xb8, + 0x01,0xbe,0x02,0x78,0x01,0xc4,0x01,0xca,0x01,0xd0, + 0x02,0x78,0x01,0xd6,0x02,0x54,0x01,0xdc,0x02,0x78, + 0x01,0xe2,0x01,0xe8,0x01,0xee,0x02,0x78,0x01,0xf4, + 0x01,0xfa,0x02,0x00,0x02,0x78,0x02,0x06,0x02,0x0c, + 0x02,0x12,0x02,0x78,0x02,0x18,0x02,0x1e,0x02,0x24, + 0x02,0x78,0x02,0x2a,0x02,0x30,0x02,0x36,0x02,0x78, + 0x02,0x3c,0x02,0x42,0x02,0x48,0x02,0x78,0x02,0x4e, + 0x02,0x54,0x02,0x5a,0x02,0x60,0x02,0x66,0x02,0x6c, + 0x02,0x72,0x02,0x78,0x00,0x01,0x01,0x75,0x00,0x00, + 0x00,0x01,0x01,0x39,0x01,0x33,0x00,0x01,0x01,0x99, + 0x00,0x00,0x00,0x01,0x00,0x81,0x04,0x5e,0x00,0x01, + 0x01,0x1b,0x02,0x9e,0x00,0x01,0x01,0x48,0x00,0x00, + 0x00,0x01,0x00,0xc8,0x04,0x5e,0x00,0x01,0x00,0xfd, + 0x02,0x9e,0x00,0x01,0x01,0x53,0x00,0x00,0x00,0x01, + 0x00,0x49,0x04,0x5e,0x00,0x01,0x00,0xb4,0x04,0x5e, + 0x00,0x01,0x00,0xc1,0x00,0x00,0x00,0x01,0x00,0xa3, + 0x04,0x5e,0x00,0x01,0x00,0x09,0x02,0x9e,0x00,0x01, + 0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x29,0x02,0x9e, + 0x00,0x01,0x00,0x8c,0x04,0x5e,0x00,0x01,0x00,0xbc, + 0x00,0x00,0x00,0x01,0x00,0xa7,0x04,0x5e,0x00,0x01, + 0x00,0x07,0x03,0x13,0x00,0x01,0x00,0x43,0x01,0x54, + 0x00,0x01,0x01,0x3e,0x00,0x00,0x00,0x01,0x00,0x5d, + 0x04,0x5e,0x00,0x01,0x00,0xc1,0x02,0x9e,0x00,0x01, + 0x01,0x2f,0x00,0x00,0x00,0x01,0xff,0xbd,0x04,0x5e, + 0x00,0x01,0x00,0x93,0x02,0x9e,0x00,0x01,0x01,0xca, + 0x00,0x00,0x00,0x01,0x00,0xbb,0x04,0x5e,0x00,0x01, + 0x01,0xca,0x02,0x9e,0x00,0x01,0x01,0xae,0x00,0x00, + 0x00,0x01,0x00,0x7a,0x04,0x5e,0x00,0x01,0x01,0xae, + 0x02,0x9e,0x00,0x01,0xff,0x53,0x01,0x5b,0x00,0x01, + 0x00,0x85,0x04,0x5e,0x00,0x01,0x00,0x21,0x02,0x9e, + 0x00,0x01,0x01,0x1d,0x00,0x00,0x00,0x01,0x00,0x7f, + 0x04,0x5e,0x00,0x01,0x00,0xa7,0x02,0x9e,0x00,0x01, + 0x01,0xba,0x00,0x00,0x00,0x01,0x00,0x93,0x04,0x5e, + 0x00,0x01,0x01,0xba,0x02,0x9e,0x00,0x01,0x01,0xa7, + 0x00,0x00,0x00,0x01,0x01,0xe7,0x02,0x9e,0x00,0x01, + 0x01,0x39,0x01,0x54,0x00,0x01,0x00,0x99,0x04,0x5e, + 0x00,0x01,0x01,0x97,0x03,0x4f,0x00,0x01,0x01,0xb1, + 0x00,0x00,0x00,0x01,0x00,0x8b,0x04,0x5e,0x00,0x01, + 0x01,0xb1,0x03,0x4f,0x00,0x01,0xff,0x7b,0x01,0x54, + 0x00,0x01,0x00,0x14,0x04,0x5e,0x00,0x01,0x01,0x38, + 0x02,0x2f,0x00,0x01,0x01,0x7a,0x00,0x00,0x00,0x01, + 0x00,0x50,0x04,0x5e,0x00,0x01,0x00,0xc1,0x01,0x61, + 0x00,0x01,0x02,0x57,0x00,0x00,0x00,0x01,0x00,0xad, + 0x04,0x5e,0x00,0x01,0x01,0x83,0x02,0x9e,0x00,0x01, + 0x01,0xe7,0x00,0x00,0x00,0x01,0x00,0x43,0x04,0x5e, + 0x00,0x01,0x00,0xdc,0x02,0x9e,0x00,0x01,0x02,0x0c, + 0x00,0x00,0x00,0x01,0x00,0x6b,0x04,0x5e,0x00,0x01, + 0x02,0x0c,0x01,0xb8,0x00,0x01,0x03,0xa0,0x04,0x5e, + 0x00,0x01,0x01,0xbd,0x00,0x00,0x00,0x01,0x00,0x64, + 0x04,0x5e,0x00,0x01,0x01,0xbd,0x02,0x9e,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x0a,0x00,0x1c,0x00,0x1c,0x00,0x01,0x68,0x65, + 0x62,0x72,0x00,0x08,0x00,0x04,0x00,0x00,0x00,0x00, + 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00 +}; diff --git a/data/resources/opensans_hebrew_condensed_light.ttf b/data/resources/opensans_hebrew_condensed_light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b0b5cf6b34219cc5487a86497a0653c7a1b6722a GIT binary patch literal 32868 zcmdVDc|cXw7eBi9K6d~_1TKR!7p_bqgD9WHBA|ethGRde+0?t!rW`5I5Ei*GS zGb1xIH8ZnGZPLuF%&(QD&6b(p>gzM$9^Pl~bMNIcXy5mK@1KXBd#1hDT6^ua*Is+A zb=0vBBVqXvA+;SZ{)Zd`DG!L)C2 z{xb;vs;YKo(de(H1D?|$LRejO(Ska9HyMZf6)3N-DXK0ls@V_R)wh7|=epX4#-TfR zMG`XaG9l_yb@ion6`Hlc=hPqNwS@D6kx?g)yfvht*YN)`M>G?EXZFsh68pE7ZZN)&tLXUh1yGH}$hWxU2m_8|8>9{e1L_h7>@U4iWc*~IpdRZYMiYbT9I25)(d-Av z4k-`E-(v4UcCd?NhssE5RgCPQJF#tO+bzZ6`g>%Dx&ik_V+$s=(pbyB4E2IZ4(_{1 zf00d+4>;IBoY-mNfwmF0lEkr9WFMy)drqsrl-Aa&Dx(J^SJ1VTY+#E?A@=!_ffUkr zQ11s~kjlsg@MtAn(bfvs{CI=fn{43Mr7V<1Jzj@}qdwr$w@C=@tz+wmld1$Tb`b+x z*Cw+8B%WO%)sm6U!oGs@K=2>D$8i(3OjRveiv286<|xSmZF!m|QUX53Nx39T)B*4L zHPC)bswNMJYh@&om634KmRX?ZJ+fKw`y6nTkt{Zgr1JXe%_Q2gg#%`|;5+Air%eT! z5PgAu;C*4;=+3sU(HC2>{}EdY`YOTN54{;+JkFL<9xv7nRly_-#S z4Kl|20{vjWp${&D|8uba9NRUtDc{x)yf5rGE@xRJnfHbL#`{9_HTJwOA%C@MUXRNT z`p+gS14tCwkf~Zlb1Yj0%CA&yr)%hPl8kG?sx=g&s||WZK8Wp#vbCMSH6u0?HjGHI z@oOk2uJPkf`53~UA0Nk7BRP_>>>A|gA=1Eh6F2E$Mb_x^WHmpQ8c6}2Pu8*~5)9r1 zvwRXNZNl~G7?ZqC90^33d?^Ft?IG-o0jm~r|0nn`1+uw~c&mCt?iWGJ4<{ikhlHpI z$%69AqVXg|YbX-Sc)?x32AL`;b15eiUtMJJq3WXqT-`*7kJQmKCHN{PRTL@IT42^%pvo&~#j( zxYnPjXax3SNg`20J@+Kb$PUs*Bk5#XL>JIybR&C@T~fcHKCXUG{fqi9y@$T9exTk@ zAE1xW57Q^>_vrWf`n9l@n3mx!BU(naB)5!jYXiidL=Q+$0a6w%1f->a^e+3idcXQ@ zK>Aqyr(UP;t?#eb3rKM`NVH{e%TPc{Y)NWKZEI`0+4eoz+;*aEV_SV&SzBgXdRv^V zG2d(%)Z*7Nu*Ivzy`c>TBv>LG@Lo z)u8JC{7=K2I1n(8^UwZ|5(t3!+=-5O z5KrPoyh(4;hx8@=&{qS1R05*9z{lzB$7;0FyD?r-;X0{WIRbH6G#S`NHWPJl0_zy zY%+!9kh@4OnM$US=_HTLAo-+#6p|uRjOMK-_mh8-wd7&)7*-7S*D(Xq* zli7g1hCGhnM#01ivOw&WpK7uc2hWk$$UUTlU?h{%;zkWwMqOwOSxN3ATgXZB4wa~i zI#5TdrW$e-WsZ~gsXO(cuGEcsQE%8#i>Q`5(OzT~Sx4?A50VGSLu3QlNY<0hd8msEcuu$CZCdXPdR~;oq>H#XUFn{JdwYi>pha%iS)Y^iuT->NT`iYOk%mntGk;^^2>k zYocqm>mt|9uDe~|b^Y2^cGJ5}bKBzfi~B(LO!vFpkGZ$%Vsv%7ExNBfR31Y-3OzP@ z?DII~@rP$`&(WTDdmiz;?iJxR&+D+)zrDS@lfCP_o4mj7t?E6vcUkW}y|4Ef(Pv|y z%YDQ8F6(=^?~Q&z{c8H{@AqN9pZmM^kLh3E|3Lrm2Y3v~9PrS9Qvug>@WFu} z`Z)L``pok=;&amHFMW*uKK;kO#5cmX(DxzV1HK>o{_NZA*Viw`FVF8Dzb$_6`h9C) z23JFXA=!{+C^pm?mKnAg_85*B-Zgw?_}1{pph1Ju2Q3)1b1w{guu$M-{V`o|ySN{84WXVWh|PdX*i1&T!MxQOB{hDfg#DrWj+nAyuf|L; zHXR5(a4bA4@>*nixO^=1YPiZhN1iiH4yB*+Z5mylLwCt}e8Y9Rp5v29e%l&$LE{1a zW`G_8MlWw|K%kqKmxo5{X)yT(n!LP>ZUF(&F|j5$jm86Fql<|~i5U9!y1D*yD>mQ# z=<=)=i;a(r+cO@#g&= zN9A8!mmG+V87!;fpRNm*<8`1#4O*_Lrm0UuEBAo*9RTf0++(7=Ts3|H)Ig1DKaH!G zF)GI7N-S4(wk!E%?^RZvD5t}7>6f|Y{lkpW3Gp#Br0m_ws^jJF4vRA4RCVQ-t8&U8 z*IO^C568VCFFx|>ak|hv@W-oi((gCeUDhiKUq-_MNCqwa&?B%!)qVl4u`#in51b&a zF2-a8hjfNOjYjg*czAio#F(NP4x(aWB|3J|+PgxgjvrF-a>e+m*W&Vr1#PP?9=|3b zEGjBsgz=~3{4MihWRG`f!J-lAYoERG@D};^6I11B^In|sb*kKYpe{$fs{EDXBS$vP zdC$zYHE+r*r0;RMD3>Klge(b3;!?x~NZhNCkI^f**8>GL%+=l75P;uUdS&&R4NEf~ zdTiS|_2KtrqwFIG?QNnTGKv2Cc@8rh_0A~ubYAYROlye2Z{V(n9^1M;Q^mBTNe)z7ymoJ@V4?uQY03_C1>#Ysc2F3=)dIuWm=AT@?+g4OHH}8>4 zZa?%}sO}dx+u^&=-+mAOPBT09Z{Un4&Fq$HpP<#()7Q=5=4&hu#ny|w9VU8{o@II5-lBj; z&&p+VE4^99@2$d^^(F7{`Z3CAUByT0JIWxXn6U}lsqobZS=&;|dKKane~jd|U1Jv^ z3y!c22#o@7^nn3xu4+GU*BIqWw>-0Lr~K-K@icKx<*d3d)u-hL&93sw{V&mn*!6t* z4Rfh{RBhm}DCRZ*1Yl?mUxQn8tVXL1q((*x9Xv9Y8fo85m2u(Dei`*6DGXthPeXZ* zyD!J=<>{f-XsIU{W};l+0t|i{ZD33cUHE8I{*ZF{Pv&EuLj&(CSX7x*9%CA_Onv(G zCr=+Q*d*6GOv|8eoNjw;-rB&B@undhb~@U17O)2?uwAvDUcjKyW6Wcixds@ZaiU`R zfd$Lb^?QF?yyk8BVD-{R7q8y&SX$=t%*;7uNwvud<2I;Izp+XFceX>nH#fX_*;F;| zB^tIXZ|Zc~Yh7q!;+PQ@-PT9_9@@_N2*oCPof;+Z!JwsV>9%c!vIG5QVWER2O+G|- zPs2}owkojY8+N>5@i8-Zynyav(0u_s?2Qv&DaOe8!VFwh=>@UcK%FmJEf){U%i8tU zCogWxt)bd&YnGN(MuyPe)wyQbBck})QR1YodxbN0|f_dl_F-4oByrgURm#zRj#Irz<|Ju6Qw>_2QxNu{*< z4|!5EO`~yAo_Ap%`H*~a!W8-EV>?@CU4%JAVHFZ~4Q+rt>P)_#&~I_v`&y zJ>^D~speJr!pYkEK4ql(?doZBK9(CJ?)`lE*~o>e`H#LnEqD8$4~`q!D8F&xqg~72 zy=y0(c;D);w~k+W)_g3hZOirt4nF8RLGUIEbi4;TykG$n3T+spcXx9I*8_yKxa$l; z5xPSExdsH#`D?a4N5i&%@mbJBx7ev0p6vnd3@w=h_LvG;_)YqJi~Oeiv79cax;PZ} zrW5JV2~(sIugi}fdye*a4~r+>A7ad^MuJB@F%u}G*41wC@&T+GIV;9wo^G3Kg`VhC zN2e$ZG2nM7N<*nO)1o@iAMw=^T0o^EuZvTz9cs<|Oty-=yVPGHiJCF<{!g4{jaHIEOIFBFEH9&lrBy4u936E_nY;PA`f%%; z%(r~Z^vULLxO_=iArmPcFkGm$ov~cyXi0^Z9)9`h1kL z);WY@M_V1t;_Q%|LAT0f#moc6A1*LApoGGMw;|)+DC>r%Vxev20T-)SH-kxfyXoNX znC4w?J-ab{&592{`|RYp;!Es`Ieio+()Z~7`8m1re)CGX$)9=TD>O^R3eA{HxeZ~& zuTd&4mRWHzm5bR~bENvPc|KcXrI#|4hkbzZMv6k5wzl2!dU6X#m|k>l+>nP#gXp{6 zs;f?pG~Nw!yxI8ti+%Du=H8<|Yrz|*l;?0@3L7aDIA*ZoVk2ETTi!q)sF9oIK;oJU z*>3aF)-&wlBOt-T=k2Jgh8@E>3@Ye0kee@=C5%mRQs%1+VT^cdt+aTB!gZiWcMig&0_mt)?s?gi3Go{ z?s|9TeP&kGMS13V_QMYO#LlPbu$}7DCytv#8#9)J=vE%*E-#v4tqPVzt??aowr&Dt3=jL4)RnvCT%Evi9@-B(f(~EOR z#}$|z zOI#=P#0rFP`nWFUePB=HXYbc8p?)>;??;P^*W9;$X{Edyr!h|u@`3z-IBJab$#lvS?fwPnnynxo*%dAzxSn$efwXB>S~R%2KsXOf;MD_ zLBE)p6swvYmM;~{mspcJw;5Z$plcI!5;t%m6BOzKN*{vES1%?vsZiej($Se~%=bWm z{bjed8`77peO`b6z2nk%qAq?UAJm1efIJy>Ua&nNm-L-#xvA`WKb@mzPujB-BG_6t zZ}KDYs%p>$dskh7IE&nL8r4Yg^bp(1mFQ<4vhYR~O4)R@}H=Azx(i(qeN@ z_GjxV;NdpgG?azD^XC>gW_?e}rkTH?O>#c#C1>U5=c?qwX)R)UqGX?ZjB!~~`a;pC z@$xwuE;rD1>b$>So33f*eP*}z;QVAeOU*Zx#Ru$vtj)NsYiDWD3#cCsIP2tN(={p6 zL_7T1P02-lh}$oaR{S?gE@ko`^6w=yD~a7?8Ri4*4d}X7`KFZ7HkRu^PQR4Vx=+fI zZ)V|?9#CCm*EPOEpBvGso`!&cKzd;5fLTK$MmG6te3SO1dK%wM;o~?1a=lWOMT9-5 zi_vox1@i&A6Q*HoES4sITFHYO$|jRmwY83_=4LpnGPci7Og!2&cfz3}x2&|XIdf!L z<(#_b9rJ)Kd$Xs|;FldV(;oX*g1N9^&Z$@CXkhknTpJ*(K3HeEVKq*unANzgqUE|* zYmAYEG2)7`M6b{h+aH;@e6T~$i~^NI&b0s3R?YrTohs9OPQE68bJyg}8V`BE%AMwO zedJ-k(r>SRC3shewq&6#?qYuC(~+2*Vd7v`*3hP%yPI~FCi#z!`~COSY@b38+K&ZO zKmTl>)--*l8}tNdgzth~v(o4*SOG!-3Q9W=dX_T;?u)1xb}hrfanertUci?-}#k+2f=*=Y;uPc5fM{P)M-CqSPY*LiBrVZe3w^z?Q2 z>qq_D$d|ctU{c;Fw&vhx@s>e*xdTR<( zJi6}5qmQipcv8fyu=I$4rnxV?@0sKl@KDB+CzyXyZZ!Mq(Z}T*YiVzD=KUAz*Djhl z3+>(jhF(NJ@!7-81JV-<;>7&Qxv1e2?G2TK9xK+>^Yhbl8ygBBGTOA@tdP+Chs_@B z+QubkFPirO0)w|30M#F0Y(n#JPn8EeRXRxJ%0Y2@{ZRkvf&%qsV^pp&y7?^?m;=-p ze;$@PkQ-YatJT4Wi<`A}&h+5EKKigA3k=!Z-2BLcZqr<+7OA1}ENwXgN}%(N%2=XnpN)4LvN+F=w$H1ndPL$PLtm9^iFR0Vm3J)f)7t z9w$+7YFU_r)q&uRjY&q>BJ}K@@WA@%i|g}uRL#uK$eKN~Ak)DyQI&P9B=?Q8=6LoU zb$jg%^D6e;zgC~PWZtVvcyzCo?u)K66WaXOw^7;GPFZ9PBKSdXDy@2s?4LDr62ghGy z;7UR7ZHzSnNp!58T39z_yL|E)8lC0PE4{$c5lW%@$A#MuKq>U4{dRBo`vN_mR8KP^ zxnAgd#oDUjQD)ZZ_ zgf~7#f2TpWBmf51Kd?_s(P1Ddh659R4tRUHn*sK)7Y)uX9CL2skSANFMrQ3V@$;*h z9hA92{?8=;MXA*@#+0qfDjzrZu@RGFXFe7gk&-$%N4~i=q1HbXI6~U4(cS8ioK79r zFMPO*^^OTvKj!~yd-p~RAL199+*DlXGg_69ZSGT(>741&BC(YxW?lAydR%)tzh*?jV^F?$^EXu8aCvyeD;moTT_;peF6A>`S2sJuzBYD z$H?Y>SJ=Ct$pArFq0mHO$ijXR!0Af4S0$=%>1&oM=27oyw2%{QJwtwW{LGh{mBjo=S?i$$F!BfAZP(CrJUiNUyaVc#) zriwRDU$JrheeCJxo14~h{>0IZ{K!Cvn4;9d)nfVN zqDBt~-TVdeJM$Y@rs}y(G$}V{a7tEaE=}Ilq{?LV0vDYH-T8r{vtW-K=?4V`vWM^o zPy*jK<7;3)K?lUv=;^10$^uCycuF||CWRy+%)0|a!zOGB@_6>qx~gdvWqDO~o10Yg zj=zSN{ogpWW_?^ahgG{{wC&- zJIsHqadE@-lx$;emiz~GQJ-$o_~Z=u{TDezpFPm=Z~%G)@d3n95F!9VL=61V1`jA%z3?*u zy`S{<)cc36nJxb?YgOE;oSfBhtE*|BS*wTNFTc0=$YJXA>T8Qt4pP4SOZA$#)j7GV z<5$&C_nI|vYo_I*Y|5*P)aq4-U%6MUUU*dD+bj_C9^^vs&0sTcjHW<1x5Y4%Skt9T zm&z|(VCUcbw&?7sncuVZS?_1@=_2c0mL&z68IuuUV0QAyt#Ll%TBNX`0M_@wTUZr| zzRe=VEEjS*m}k?#V=D|H2ncx0S?n=Tf>heO+OaGQ3~+}T1Rrj6U_fA2M#}QX7bHv? z85o%sKB*|_QbyotQ)286`H$SmYp2yF&CK8R_{hrDd1C_$rD>US2j<>0XRU`JZGh*r zHB;_R&t17pA6b^T_~D@?X_f18<6{eH(9~s>qfGPjhw6=JN1nQmjAFfl4=lK0fY1^#6?tu z;Q*&9{UCSYCAQeokX2!;vQ_fV6Ccogx`7saa8iDnp4=;+k)M!1+`k{mDkU`hfcgH{ zPJexL!EFEHya%76fm7y`d3;0>yhQmA*bJAo}5#= zFfU^Mn1bZ-BMLLsTSI47$#L0*CHsqeIE)>i7$~opQ=T_k>p0TV&zmF-as-8cno2q? ze7tI9NB4dCWrBQ#`p`!%UW}K&L7bvOZi45E*7l<{hW0}~7I`e}JJu?ELLv^vzRNQ2 zVNJ~le)0Rak87zq^u-`#q1?VVAb@Z)@JO=7m0^lD{Bw7-F8p-k&~p!-O@CT2inJwFF2Q7fjnus zEk~4qFJioW35hX5hqk`(LfamC_mTw%hsQ5cpMF-p_3Sf9^?G{At4k9{9a<{-0`rz7 zp2$5Ke64MbC}NdsA629#?xSyyEw*F{9!Ih?<^UQnmx?$W;&NOC#*SdzUa%x3s!l>*S6CY1gH%wbpHFj2S$FPGnYeNd6 z?`q1QRIqWJG8fp^>6rQ`W>u}h6cfv?`#&`%eAy_CuiNOO@t(WZgAUlY>>}oJ=sugx zWbq}sasNHcCw385lkcMBc@d6|1qDxVvnexg)`F4pTurdqAb)Q$oDjE^TO|UWhP4Lw zh2bBX!xy5y$RXI6KQOSi;_mxtvD~UT@;7p8-T%uNMN#DAmO=L8xnIH(!4Y8?DIQ@P zem@>_`eO7Tj|f^gBv=y|Yt(wt#fxhb`uK*Xr)Ou49dFzLKUR5P_AY{#&U7+(5 zt}oYs)a5@cUi9mt-ya$CWXc$|_x>jN;0t@{Ub*>S%a%~DC8(c;tkL!{?@0r7QY@D3 zVz*EJCLW`mEtIb$VED5E{p1b)G?(TY?qf9hZ?3}%<1qj ziO?tlYqZwd9-1eSyyTLS95__7Gjmj`^e60^*qjEhTTRxvbE8=2-i5GXOf_HhdSi~{ zDIhQ=O*A)STS&&>XPhnLF_ME0FBEKD_$2ixR(q8m1zh^+bz;kWd(=V(A> z+=}V<&E)cm)i!=Yk)hB1-|&U%+Wl-DV^|xlUN`o5=U|q$!QzLzwY~eemK6tI8w7L zWKv|v!chg@vBRTZ?2J(pGC01@)0iKwYg!jGy&&c9<6RJ2@e<7G14PaOoPb!SA{T^P z->~?jVvQP2XWYH?Y5mg^hd8D=XQ%4N^&96O?~&%1{bd&dLW8^$Q{zi&gL;o#QCjo& zr(N*#d<@=quEK8e=9aV7e`B+qI=1`Gj+PWn=z{boJKO5-SzSMuqcQ#r^xegonm18VFV4OWh2T$_G)wN99UH1%H$O+EPIeuxj&f{m&!v zae>DNZ4LRx>9?C7udflu3zGvBmD zK-=Lt2oH>PCf3=3V|OdF@{1jTSw@%n2OF>s^ttg!F*S4^Ro?c1*LEIK0rn_552qjP z5Q(@q_@Kx!JnEgL*uDX$I*RZs9gx^duYBAN1^k>}qXm5hui?a(?6jPl(a*-?LB+*3 z&feltQAW0+-sh<2z@xD?>jpNfk$$f5@-AM zB0dk-ml071WO?zH+5Qtezd4&Qi>;O*e11M(mY1umTO;BkQuu3aj+pp&%9l-AGN(N@FQyx8yIW&oKG2d}$ap$lnaZyfjF{MfsaJ>MMU4 z4-3*a4$E!~4hiwIozex3Mp#^W@Dn) z^0Vew(59zn7iP(cJ9fs??=v6TzB5wxnV`Dc7^w?^OF$47QIVR$>(4k8oM zHve=A=dmXK~R-QqfE1`cjUSZZ4TLysLTw|9EAo_L( zgp230@N9MTE!I%3zIMR(Nf zZ?ByopcAL53pJ`NgJ5|V8cOtaI0_p4>=~O9lW$`fw;HkJSR^~r; z>@yulxqR~Wv~}=N%kSTjH27Z>na>sLxQ?{(s3+D_|47@bSY=fmnMD&v*75a~{L~$2 z`?Iv<`LdD+68TC?e)`U|iT+hRfOxDQMgj7IcnqE^7UX(}m?;cB4b(w;xPb8 zrT8h3Z9`WbFlO(*|4Fm#`1hQu((j%M3|;rJNV~~=sVI1kO9pd|Ks>U+&p6HGQ)y0lFriFA*34#X-EtYZXYkdOCK0b6iT26EvuHoGg z(qWu7H+4@1Yr6~{^cQ{JW$mc9^{y*2R;&qWf8T(Yo8cK&LSI0=Zq|-3C_R+OD_Q&F z8&tv{Yx~?%?@nvS7i^riDD~G13cB#sgF}?st^wXw3lDFzcJ%1Ttx#kN*~i(Mk6CCF zd1cM;yL$^;42hZyPhNN%nJ`}iW4(A76**xdwG4`YHOu=RK8y#y$2mkF-50ncW?1<6 z(Z>S!(SGvbc}rGYt-psc^Dnd)J=wCD2K>8hbiOe(A$(NLsB-zWch1Q7o2_k-)*++k%MLTinr`xY_;ZQZ*k3{h#G0>t-0Q^i zS9ZBRA6Z4>EBl-un{3FVyG#B-zqjMywjj68ZR5N%3bsKJpIIF-Sk36jZZWjOcY_|` zc?n&{wYCeQ%{DQ!4Crh2C_4+>*6t8n@QS`0h-cJq+k5;uHak8t-)_6^Xa@p1bzOJ( zRZ8Dk~dU8X!MLwWGea=10) z@xe5n2mj=qIF#NIzWN`sWS8?I7A2A7wmFiE3h%kVdWuH@x>+Y`ly#z5CbFjV7oMt5 zEf`;yL(}JGW{;P*E~pKl(}xyc)ysQ~(%y&7|Cf9z<*nfFHuAi)oISy-uF7fk?6sWM z4Ep84N^^RW&_7CUlaO^DF>GHW@+?vwG_>Sq8%4zKgjL*`d#8jao5=rtqr2QEX2at^ z;7PVgJDy?f1`T^$5&2iTAhD^>ZjiL&a1)-3E)stmWL?C5WGA$pCBMa^3wB9qpGEGl z@b4^j-Q)hEqv)OLgt&wBH6QDOmCqj{4@=BDTxzUZ1O`fXDOoH|VXVC6Hn~~03F`m) zv)d#sOWq>p1f7slTRybNTjUARB5_fyKw;1FoaiSWp1j6S+hb;dN)@<#_q>HQF|n1` zZOMyy8Ax8l%c1(;KWVB+Uz}4*Z(bJpi;~hd3s0d-I`i~4jcn}5RQbi*w6z0wZ++Zt zdo8)Dm=F;GvgE4r*^xh+(yXdgAG2z2n|oX3u*P6ss=&G0g`eN$D51)LFroTNo^X(29*(W?^{7wn2vRjkheWho<`;vR5D<=}Hd(Rc;9FAfku$eO^_}FcQG5pN9!jgfU`f6KU6iH?TMljMF3Q7>c5Ak& zI$COg#i%b}rK4Y*Eb&SuWFHgjYnif;MKn4%C1qszkh0!%h5x!let_v{?2KtcJ>%Yv za~u2eFun(@wv)0u8P&EQIcwmuca(<#>8s+GCMG5%V9VURS^oRcN1-$dL&&kN?CcCJvWh06h93jsTSZaljljk>o3YJy5`Q0R7XDBiMGBZ zQQ#$>f^r2u=X0A8_dc@nMr+ruhpf#K?cnscnZU=7ZM-4&r6p1GL2I3C1%s8Xpdq7e z968vwfzONHXz@Y$aa#I{k|WlZA>S?TAw=kHY1P5?W7ea<2Oo^(^sDb7iJIO#=g`ec zzoz%*&5*galU?r(SMJ@0UWH%EFQ@l3Nc{+VG;`&nkKQY~isNLHNg})20Vlhv;QUlh zAw$~c^S0>VK_4=8s+>Zh2>IACsh&nIrz5{740`ci57pCUoYp(F<2c$eQfZ^YOD>zD zA+)Wg%?b7*&jYjZXI<5pD(bUh?p*K(@8u%wO|_GVZ}KE^{;n4!)bj;zG;)Aq@e&`N zR?ZGNx%$?=TrQs+HFSD^xAZu?Ct&EvXtk3(Bw^AxnOiozpg%om z)&#DZPhnkAyw8iUGwOjD5h5cBDJ-4{2%{&lyueUL+MzbT?794$e(^cxjr3K2pGkh< znPmgj9!_rIK{Dr>ZB}>(1QLR!9Ff>oZ4xe_s9V$m92%+j`-4nBitRbc^?XY zf}{m)BBuoTUjvz7C9>ziSU2N_54SEa2`%hDc1F!l1#pHqdGw#~P;G0Pba-0TFn7O3#xb3Ba-h1QhpAm#kVC(fg3PHkO8bK`clQHcXkDEieazi2!1V#mD*9tm#u)WL^TC!R z)$8=nsB)edK!V{%;pGuGM|lLO`~ttQl_T?Z6}}sMpQ^ z_R!|}mJM%+_m2&*LgjFIlJy8Nmms6T6VI&ZkTzmmOAlLks-00dgAH*j?cYn|6QyeP3r>wI*wwl&Tk?6!lYE(p-Kvv*^Y%%a zA37>^1S}ig?gr$mO6VU)oN!$bz;RHiptp0+!U$b&<@4A9%K#L-v&x$j?@2CkZqe?s=sLXT zX&{Rl!Cb=_UZEo-Ze;ed%M+6V#%9-Kj}5>sHeV6C(^ONb&2>2>|3_YRb&1KeB@-yoN)e>r2ME@aAJjq0%Zi20?|^UF@LXu!m?Z-|cy{RZ2`H3o?;7JngB2!D%?QA_XN zvhmPnnpa>>DC{4X6kY7%N?-k&u5B@wx2#vqVIxzA)-8S~D{(xhk@JAV|C;FQBi2 zy`Y`T>~nzOPKYlwyoAT)y)lj8u`z(tv8T*i>2K%dpG#>UZN!jX`g|Xcq;aogQ!{(j zJVrO+omKp`Snqz9DNp3%2z>1cSbex9Wb@uJs%hOro4E5^f<`x(_&h**f5@%MLoo#+RctPIqtT>+$=I>SCfmX~% z%oTiwT_iL$AEXdK~X~s2YAYTU4XP?XRvb`G%_44ZCyAIO+EW~{N+KWZ&azHEkgk1%#z{9hOg)RWC zLKA2)_1bL#I;#8j$n z?NK|!VYxeXYBsJf4CMx^PcxcTc9~&5R4(~~8a7n`J6E1rHAmq`m45yO6PmQ^ZEbA=LF9?^Az?c4Jk=@GOd08~S_tbH39nM5=V+jO zv3Fx{`8sv)-KeV2F8e0Z)-iC>A~ws?Un5zI62wDadx&q+w7j_Bp;La z_Q=C);pkG=ydE^0COhT1(`6iX6K!VGq)Xfu#nUf5*cMHDe^OWXalLeD(Y2*ZuR#Lv zE-bu9gTKG7C)d%Ici0V5-iBq_i6<-QZt(_6@yp+C$GzO*6;N8PKQ$x8b2dC&?)(-&ty-m=E|le4GM1Q(?8}k zsqjS7w5(&<^YKo2-d2N{>&_^c-L0>rknl{B*3%om!l}WX2uwmEX`m_AU|8pRdh4Q6 zV@}p@{xn5Cj0bRn<*$0Jzqd3er*!`buXSq}TO+NcJ!wK(PJ-MgD}7w_q^p<1OG2rR z_MTK4D153ecq+6X7@!rFt$5N0ArymKES?*a48p|>-Oc)Zm2;8xkXVk!;rnr4J7}_& zUb?(gU146zR%V#P>4Rs@PqU&A~{htQ>-=fi?0Ye zzkh=6vAtBG>#HbeM*C|Pn85Y2z|{x+)-5Kqs0#+>jgW4aw_LOwfwq936Z6?+v6keS z4`RiP6#U!HYtjxZHO;Tzd2-`R(Z7HGhba!Y!}wfk#jSW*@RY-CapM&$34i>5ff;B! zv>W+h|J-tgzW=HHwU*`hKk0vp$6*>&=cDE-@=kK}cZt2;l5JcP>Hn zqTslV&!i7W)4kusd|I@l-FE`3x~um@f!@)F!o6qR_)*N?aLV~OfDgpxOW_)>qw4~b zkpi{dhXJ3;7XoNkuS)BuiU$rnY5Ne+72gW1T})|iiq~vI!B3)c^G#8diToDD*Mijy zZwoOcLnrd@TYU*{y0 zg6_`uqF~|j+wOnit5TZ-#?tj{gw+kB<%HV1V&vb=7e!<79#a5P{3s#ldF$%wj-C`t zkNlHAWfrjhFFqBSTKV4YE9nQmb?YrraCi2ZSchO2zloJsB91F$jr&f}E4TBWSlV_Q zABqrWA#k_zqsW04zP9^4pu4P|iq4)73%0KQ4<{~`-TFZ26^=j|JBl9!{bq%KXHQ5+ zY`61=46;Lg2cL+Q4lX~6PXk`iZoC?n>7aYxhKzS?C3NTDpeq!afS$ASb702n&eK6{ z+U|D#4*6)oMqs+5&!c64>b#}z+I=5Z&Dz2Hq42S@59A#n=*ACXool%5sQ5x)JKo6~ zV(F!S@QH9^<<3Tqu zd$`u!1qg!+tOjrMO_ZW-p6ch|>u$x21|PD?_g8r^{apRrWZWY}Pw&GjNco$KopMYu ze&TQ}<+ullq8lv7 z&SW^gL8g@NNy2EG<=BM`X8f&I{10#SVs}}N-H4jau^hV-PNzhu3S1z+uz8kaN)n|) z%Q3_EiFR0yC6X!avmC4J%BaZ#yoXhRqanjoRybO+OSRu}-GL;lvn|IxNQruj<=B}l z5WM9y^dxzjM$2^RaqPrW(qS6HAcnV5pX-5l@0nLePex5NojRa{cL@0nUyO=H6{A$ zqJ{e6Qhj}Cd1XUmX+2s|S)-p>THjcN{j9n5l?^48GdbTH!bUaBEJai6?YTLm1Jf!R z8|#LJhtHosKdi`7cqTX>HnX-mTyJ-?Ot6?=w!7G+M&rV|(vs4K%JLfUD6FEfx~e0# z^h(gf`94=r)mTxgA5~X06FbYDA$mLR+G7%>!fNZw!>be+4dLnIl2S4zr-Xv}?VRh} z!=lIVWu!`IkxG1jsFEzgH;PIymP+u|qeg6cG811Ns>2tH>P4vvT-9Uj&qUt59(gnT z>r0V%GDeRtE7js(IjI5!J-)Y8iyC#}mqV(=Q4Q9U%AGsIixTh@*hbWt3OZ^4bvBO2 z2{?^7E5lh3=(65R6lEI8Jm6}u;p6ohfwvNL1>x(1CGYxN-=0H#kZIg z>T1w>UW$LOiSr^IwaW=_c^0meL(f#9c0F1jhW2v~#N*ph;Z;STWec=UnLs zJ=6|*4xrcDXy@E*ho1?G^#Ysy)e69C6g^afcI!b2uMvi?U`2qEYEU^FFnO6WT&+So ziUm{?&P@1HmJw%h{|6LX+iK5G&V4;F>w&c%d(KNvNxkU5TG4MEWrg=3=QA(05c^`( z(4#!(HHXG~o1gJAm7@1%iYr_`mGfEX6E2?(C{qc3Smmt&?Hq-xyu8Bqdcf#jHn|Mn zPSSYaH$rxX!G9YLIpP1pfW0GRK2o^Mhlw7kMoGPpnyxj=gd8YRY%Tr&7Dpp^#-*C` znah1STB^uVn803*e!o-OxO6N0vC8{gJ6<&c2Jekgz)^&9%2~%c9D4V%d%HHZ!wM5T zD+jN*bhgvcfGg=3?MWmBqiQmKLoMT>JDIZ|W8IBmPOmb8#q+56QsB#g*3BP{#YKGC zjv^3*jDY{&ezA^9_&(je_|n_!`2Nk$_(mN6+S?QOj@&M)BLAXlyh(Qx`GfpP)=>?< zYj=WtP5y&#zwIIaC4Z5d_&VJS@`#L{~wUcA$^vKz_Jxn~QNY52NQ7eC2Kt zBzG~sZ?}XTAy1Lz_!i^cWCgiKuH*Z47w|2;m&o_z2YmVNNAeTCv-fXug?vfABA3Wz za*=$4m;dvx-8s=7)EORj7d&C(iZ9){!?o^#*F*6y-u0$^_^VuLe>#8;#Eaqd6ptn# z33w3orvZ4bJ%|R=!8C*pp`kR4hSLbV5HAX0;%I8ZH~bFb8-B0AmOX?o`Mra$?;S_R z%k$)2f^YeeWB80iEHX!i(l|Pd#?#?60pGtHNfYTPI+`ZYWST-#=@>eej>8ve#^cL) z6Y%Mgi8PZ=!uKI3BNjD<=Fq#yUY3-lom*2G5iu&lvQKubod@#(W=5%UWwc4`O{0|( zrqPj>^C-*SXxT?w_SW(-mh)K4eyC+1XW5Uk>_=PnNtS)GWuKz#lPvg>EclWv@RBX` zBwOw$Tka=Y=t;KFlWd_U*+NgUwZ4U(WD7mX7J8B`^dwv8Nw(0FY@sJPRiP`zf>@6s%@+&cDK8RoBUFbqN>ueI+*yt z<;;)g6jc{BHds!S`Y2Ug+GsuQSzcLPT4g&cK_%Ngr;1YR4TV0VspldPZy^ML8ruu^ zSXf(PE$v!XSyNOsyQs{1p@-dZ&nkQ_+g7wkb!oM&R1NG?(Z-5mmj;xYU12@#B_P7e zwcK`UKkV7qP*hTBz0qS%tqrR)XS(%X)W)m42o~o+S4CJKYpV$WX(a%>6iOXm$P$=Fgx@B=Rl(QSu#hj6{CKn5R4k zOw>?*c`n5ed^{Y>B0S;9?-AhR5Gh}H;F?m7*Hdcpd@^Ue+ggPv;=RDf1STSIxZsQe z4+jHJC%!ZKPaAR$Py@*aD2w;#iM@nb(RvM_@GWrss_<==wl@BYGBwCX{DM`H%WMHO z=QZ*N_P2;kRcryYr7IhYJzlLx@5jDB^kES8Ve}M@=GR$-xPB5^?PHuLLW`wipT!2! z66|yF9#OuZMeFE1?3d7cMEM8t!JMr)-$8fNz1Sb1N9Y^ap9EYE=W~`#zry}o`ZK+b z{a=W`6Sjb9m@{+7zBj%UItcs0ECOE)UBHI3(VR|}!Lr#jR>;a&6{|-(C>5RwXk8N|Gq^6~Dsx_@QJrzrvjP id$6S){FuHju9qmsyd=)~AKyD+6yWR2oyLy1{eJ^ae*BjJ literal 0 HcmV?d00001 diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index ca6a47ba8..c60211996 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -113,7 +113,7 @@ public: OptionListComponent(Window* window, const std::string& name, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), mName(name), mText(window), mLeftArrow(window), mRightArrow(window) { - auto font = Font::get(FONT_SIZE_MEDIUM); + auto font = Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT); mText.setFont(font); mText.setColor(0x777777FF); mText.setCentered(true); diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 5a521c354..4a2029b06 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -107,7 +107,7 @@ float SliderComponent::getValue() void SliderComponent::onSizeChanged() { if(!mSuffix.empty()) - mFont = Font::get((int)(mSize.y() * 0.7f)); + mFont = Font::get((int)(mSize.y() * 0.8f), FONT_PATH_LIGHT); onValueChanged(); } @@ -132,9 +132,9 @@ void SliderComponent::onValueChanged() ss << mSuffix; const std::string max = ss.str(); - float w = mFont->sizeText(max).x(); - mValueCache = std::shared_ptr(mFont->buildTextCache(val, mSize.x() - w, 0, 0x777777FF)); - mValueCache->metrics.size[0] = w; // fudge the width + Eigen::Vector2f textSize = mFont->sizeText(max); + mValueCache = std::shared_ptr(mFont->buildTextCache(val, mSize.x() - textSize.x(), (mSize.y() - textSize.y()) / 2, 0x777777FF)); + mValueCache->metrics.size[0] = textSize.x(); // fudge the width } // update knob position/size diff --git a/src/resources/Font.h b/src/resources/Font.h index 925950234..af4f367b4 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -16,6 +16,9 @@ class TextCache; #define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Renderer::getScreenHeight())) #define FONT_SIZE_LARGE ((unsigned int)(0.1f * Renderer::getScreenHeight())) +#define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" +#define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" + //A TrueType Font renderer that uses FreeType and OpenGL. //The library is automatically initialized when it's needed. class Font : public IReloadable @@ -70,7 +73,7 @@ public: int getSize() const; inline const std::string& getPath() const { return mPath; } - inline static const char* getDefaultPath() { return ":/opensans_hebrew_condensed_regular.ttf"; } + inline static const char* getDefaultPath() { return FONT_PATH_REGULAR; } static std::shared_ptr getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig); diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index 97f1a6bd0..398161122 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -82,8 +82,8 @@ void TextureResource::initFromMemory(const char* data, size_t length) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); mTextureSize << width, height; } From dbde9006294bedabbf948a8c938ef0c96b4b5605 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 18 Mar 2014 16:05:56 -0500 Subject: [PATCH 198/386] Redid Scrapers to return ScraperSearchHandles for async searches. This allows for much better error handling and doesn't take over the UI. Redid GuiScraperLog to fit new UI concept. --- CMakeLists.txt | 4 +- src/ScraperCmdLine.cpp | 5 + src/components/ButtonComponent.cpp | 3 +- src/components/MenuComponent.cpp | 5 +- src/components/ScraperSearchComponent.cpp | 93 +++++++---- src/components/ScraperSearchComponent.h | 24 ++- src/guis/GuiGameScraper.cpp | 66 ++------ src/guis/GuiGameScraper.h | 10 +- src/guis/GuiMetaDataEd.cpp | 32 +--- src/guis/GuiMetaDataEd.h | 2 +- src/guis/GuiScraperLog.cpp | 181 ---------------------- src/guis/GuiScraperLog.h | 46 ------ src/guis/GuiScraperMulti.cpp | 102 ++++++++++++ src/guis/GuiScraperMulti.h | 39 +++++ src/guis/GuiScraperStart.cpp | 11 +- src/scrapers/GamesDBScraper.cpp | 65 +++++--- src/scrapers/GamesDBScraper.h | 17 +- src/scrapers/Scraper.cpp | 32 ++-- src/scrapers/Scraper.h | 46 +++++- src/scrapers/TheArchiveScraper.cpp | 63 +++++--- src/scrapers/TheArchiveScraper.h | 20 ++- 21 files changed, 422 insertions(+), 444 deletions(-) delete mode 100644 src/guis/GuiScraperLog.cpp delete mode 100644 src/guis/GuiScraperLog.h create mode 100644 src/guis/GuiScraperMulti.cpp create mode 100644 src/guis/GuiScraperMulti.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b0eecf5e6..09fe248a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,8 +189,8 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperLog.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h @@ -269,8 +269,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperLog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp diff --git a/src/ScraperCmdLine.cpp b/src/ScraperCmdLine.cpp index 4fd535e78..f6f695252 100644 --- a/src/ScraperCmdLine.cpp +++ b/src/ScraperCmdLine.cpp @@ -138,6 +138,7 @@ int run_scraper_cmdline() out << "Alright, let's do this thing!\n"; out << "=============================\n"; + /* std::shared_ptr scraper = Settings::getInstance()->getScraper(); for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) { @@ -275,6 +276,10 @@ int run_scraper_cmdline() out << "==============================\n"; out << "SCRAPE COMPLETE!\n"; out << "==============================\n"; + */ + + out << "\n\n"; + out << "ACTUALLY THIS IS STILL TODO\n"; return 0; } diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 2336e3698..3a914113e 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -13,6 +13,7 @@ ButtonComponent::ButtonComponent(Window* window, const std::string& text, const { setPressedFunc(func); setText(text, helpText); + updateImage(); } void ButtonComponent::onSizeChanged() @@ -71,7 +72,7 @@ void ButtonComponent::updateImage() { if(!mEnabled || !mPressedFunc) { - mBox.setImagePath(":/button.png"); + mBox.setImagePath(":/button_filled.png"); mBox.setCenterColor(0x770000FF); mBox.setEdgeColor(0x770000FF); return; diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 06f706c74..59b4187fa 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -59,13 +59,12 @@ void MenuComponent::updateGrid() if(mButtonGrid) mGrid.removeEntry(mButtonGrid); + mButtonGrid.reset(); + if(mButtons.size()) { mButtonGrid = makeButtonGrid(mWindow, mButtons); - mGrid.setEntry(mButtonGrid, Vector2i(0, 2), true, false); - }else{ - mButtonGrid.reset(); } } diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 8974df44f..d87414bfb 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -1,9 +1,10 @@ #include "ScraperSearchComponent.h" -#include "../components/TextComponent.h" -#include "../components/ScrollableContainer.h" -#include "../components/ImageComponent.h" -#include "../components/ComponentList.h" +#include "../guis/GuiMsgBox.h" +#include "TextComponent.h" +#include "ScrollableContainer.h" +#include "ImageComponent.h" +#include "ComponentList.h" #include "../HttpReq.h" #include "../Settings.h" #include "../Log.h" @@ -12,9 +13,6 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mGrid(window, Eigen::Vector2i(4, 3)), mSearchType(type) { - mSearchParams.system = NULL; - mSearchParams.game = NULL; - addChild(&mGrid); using namespace Eigen; @@ -85,18 +83,17 @@ void ScraperSearchComponent::updateViewStyle() } } -void ScraperSearchComponent::setSearchParams(const ScraperSearchParams& params) +void ScraperSearchComponent::search(const ScraperSearchParams& params) { - mSearchParams = params; - search(); + mResultList->clear(); + mScraperResults.clear(); + updateInfoPane(); + + mLastSearch = params; + mSearchHandle = Settings::getInstance()->getScraper()->getResultsAsync(params); } -void ScraperSearchComponent::search() -{ - Settings::getInstance()->getScraper()->getResultsAsync(mSearchParams, mWindow, std::bind(&ScraperSearchComponent::onSearchReceived, this, std::placeholders::_1)); -} - -void ScraperSearchComponent::onSearchReceived(std::vector results) +void ScraperSearchComponent::onSearchDone(const std::vector& results) { mResultList->clear(); @@ -117,7 +114,7 @@ void ScraperSearchComponent::onSearchReceived(std::vector results) for(int i = 0; i < end; i++) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, results.at(i).get("name"), font, color), true); + row.addElement(std::make_shared(mWindow, results.at(i).mdl.get("name"), font, color), true); mResultList->addRow(row); } mGrid.resetCursor(); @@ -128,16 +125,23 @@ void ScraperSearchComponent::onSearchReceived(std::vector results) if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) { if(mScraperResults.size() == 0) - returnResult(NULL); + mSkipCallback(); else - returnResult(&mScraperResults.front()); + returnResult(mScraperResults.front()); }else if(mSearchType == ALWAYS_ACCEPT_MATCHING_CRC) { // TODO - assert(false); } } +void ScraperSearchComponent::onSearchError(const std::string& error) +{ + mWindow->pushGui(new GuiMsgBox(mWindow, error, + "RETRY", std::bind(&ScraperSearchComponent::search, this, mLastSearch), + "SKIP", mSkipCallback, + "CANCEL", mCancelCallback)); +} + int ScraperSearchComponent::getSelectedIndex() { if(mScraperResults.size() && mGrid.getSelectedComponent() != mResultList) @@ -151,17 +155,21 @@ void ScraperSearchComponent::updateInfoPane() int i = getSelectedIndex(); if(i != -1 && (int)mScraperResults.size() > i) { - mResultName->setText(mScraperResults.at(i).get("name")); - mResultDesc->setText(mScraperResults.at(i).get("desc")); + mResultName->setText(mScraperResults.at(i).mdl.get("name")); + mResultDesc->setText(mScraperResults.at(i).mdl.get("desc")); mDescContainer->setScrollPos(Eigen::Vector2d(0, 0)); mDescContainer->resetAutoScrollTimer(); - std::string thumb = mScraperResults.at(i).get("thumbnail"); mResultThumbnail->setImage(""); + const std::string& thumb = mScraperResults.at(i).thumbnailUrl; if(!thumb.empty()) mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); else mThumbnailReq.reset(); + }else{ + mResultName->setText(" "); + mResultDesc->setText(" "); + mResultThumbnail->setImage(""); } } @@ -172,7 +180,7 @@ bool ScraperSearchComponent::input(InputConfig* config, Input input) //if you're on a result if(getSelectedIndex() != -1) { - returnResult(&mScraperResults.at(getSelectedIndex())); + returnResult(mScraperResults.at(getSelectedIndex())); return true; } } @@ -187,9 +195,27 @@ bool ScraperSearchComponent::input(InputConfig* config, Input input) return ret; } -void ScraperSearchComponent::returnResult(MetaDataList* result) +void ScraperSearchComponent::returnResult(ScraperSearchResult result) { - assert(mAcceptCallback); + // resolve metadata image before returning + if(!result.imageUrl.empty()) + { + downloadImageAsync(mWindow, result.imageUrl, getSaveAsPath(mLastSearch, "image", result.imageUrl), + [this, result] (std::string filePath) mutable -> void + { + if(filePath.empty()) + { + onSearchError("Error downloading boxart."); + return; + } + + result.mdl.set("image", filePath); + result.imageUrl = ""; + this->returnResult(result); // re-enter this function + }); + return; + } + mAcceptCallback(result); } @@ -200,6 +226,19 @@ void ScraperSearchComponent::update(int deltaTime) updateThumbnail(); } + if(mSearchHandle && mSearchHandle->status() != SEARCH_IN_PROGRESS) + { + if(mSearchHandle->status() == SEARCH_DONE) + { + onSearchDone(mSearchHandle->getResults()); + }else if(mSearchHandle->status() == SEARCH_ERROR) + { + onSearchError(mSearchHandle->getStatusString()); + } + + mSearchHandle.reset(); + } + GuiComponent::update(deltaTime); } @@ -235,4 +274,4 @@ void ScraperSearchComponent::onFocusGained() void ScraperSearchComponent::onFocusLost() { mGrid.onFocusLost(); -} \ No newline at end of file +} diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index 09a7bf221..1e6b134a1 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -25,8 +25,12 @@ public: ScraperSearchComponent(Window* window, SearchType searchType = NEVER_AUTO_ACCEPT); - void setSearchParams(const ScraperSearchParams& params); - inline void setAcceptCallback(const std::function& acceptCallback) { mAcceptCallback = acceptCallback; } + void search(const ScraperSearchParams& params); + + // Metadata assets will be resolved before calling the accept callback (e.g. result.mdl's "image" is automatically downloaded and properly set). + inline void setAcceptCallback(const std::function& acceptCallback) { mAcceptCallback = acceptCallback; } + inline void setSkipCallback(const std::function& skipCallback) { mSkipCallback = skipCallback; }; + inline void setCancelCallback(const std::function& cancelCallback) { mCancelCallback = cancelCallback; } bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; @@ -40,12 +44,13 @@ private: void updateThumbnail(); void updateInfoPane(); - void search(); - void onSearchReceived(std::vector results); + void onSearchError(const std::string& error); + void onSearchDone(const std::vector& results); int getSelectedIndex(); - void returnResult(MetaDataList* result); + // resolve any metadata assets that need to be downloaded and return + void returnResult(ScraperSearchResult result); ComponentGrid mGrid; @@ -56,9 +61,12 @@ private: std::shared_ptr mResultList; SearchType mSearchType; - ScraperSearchParams mSearchParams; - std::function mAcceptCallback; + ScraperSearchParams mLastSearch; + std::function mAcceptCallback; + std::function mSkipCallback; + std::function mCancelCallback; - std::vector mScraperResults; + std::unique_ptr mSearchHandle; + std::vector mScraperResults; std::unique_ptr mThumbnailReq; }; diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index e9ec0734a..7ac7dcf6f 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -6,31 +6,13 @@ #include "../components/TextComponent.h" #include "../components/ButtonComponent.h" +#include "../components/MenuComponent.h" -GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc) : GuiComponent(window), +GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), mGrid(window, Eigen::Vector2i(1, 3)), mBox(window, ":/frame.png"), - mSearchParams(params), - mDoneFunc(doneFunc), - mSkipFunc(skipFunc), - mSearchCountdown(2) + mSearchParams(params) { - // new screen: - - // FILE NAME - //-------------------------------------- - // Result Title | Result #1 - // |-------| ..... | Result #2 - // | IMG | info | Result #3 - // |-------| ..... | ......... - // | ......... - // DESCRIPTION........| ......... - // ...................| ......... - // ...................| ......... - //-------------------------------------- - // [SEARCH NAME] [CANCEL] - - addChild(&mBox); addChild(&mGrid); @@ -52,17 +34,10 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mGrid.setEntry(mSearch, Eigen::Vector2i(0, 1), true); // buttons - auto buttonGrid = std::make_shared(mWindow, Eigen::Vector2i(3, 1)); - - auto manualSearchBtn = std::make_shared(mWindow, "MANUAL SEARCH", "enter search terms"); - auto cancelBtn = std::make_shared(mWindow, "CANCEL", "cancel"); - - buttonGrid->setSize(manualSearchBtn->getSize().x() + cancelBtn->getSize().x() + 18, manualSearchBtn->getSize().y()); - buttonGrid->setColWidthPerc(0, 0.5f); - buttonGrid->setColWidthPerc(1, 0.5f); - - buttonGrid->setEntry(manualSearchBtn, Eigen::Vector2i(0, 0), true, false); - buttonGrid->setEntry(cancelBtn, Eigen::Vector2i(1, 0), true, false); + std::vector< std::shared_ptr > buttons; + buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search")); + buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); + auto buttonGrid = makeButtonGrid(mWindow, buttons); mGrid.setEntry(buttonGrid, Eigen::Vector2i(0, 2), true, false); @@ -70,25 +45,17 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mGrid.setPosition((mSize.x() - mGrid.getSize().x()) / 2, (mSize.y() - mGrid.getSize().y()) / 2); mBox.fitTo(mGrid.getSize(), mGrid.getPosition(), Eigen::Vector2f(-32, -32)); - mSearch->setAcceptCallback( [this](MetaDataList* result) { - if(result != NULL) - this->mDoneFunc(*result); - else if(this->mSkipFunc) - this->mSkipFunc(); - - delete this; - }); + mSearch->setAcceptCallback([this, doneFunc](const ScraperSearchResult& result) { doneFunc(result); delete this; }); + mSearch->setCancelCallback([&] { delete this; }); mGrid.resetCursor(); - //mSearch->setSearchParams(params); // also starts the search + mSearch->search(params); // start the search } bool GuiGameScraper::input(InputConfig* config, Input input) { if(config->isMappedTo("b", input) && input.value) { - if(mSkipFunc) - mSkipFunc(); delete this; return true; } @@ -96,19 +63,6 @@ bool GuiGameScraper::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -void GuiGameScraper::update(int deltaTime) -{ - // HAAACK because AsyncReq wont get pushed in the right order if search happens on creation - if(mSearchCountdown > 0) - { - mSearchCountdown--; - if(mSearchCountdown == 0) - mSearch->setSearchParams(mSearchParams); - } - - GuiComponent::update(deltaTime); -} - std::vector GuiGameScraper::getHelpPrompts() { return mGrid.getHelpPrompts(); diff --git a/src/guis/GuiGameScraper.h b/src/guis/GuiGameScraper.h index 74e1e01e1..f87d7f0f8 100644 --- a/src/guis/GuiGameScraper.h +++ b/src/guis/GuiGameScraper.h @@ -7,16 +7,13 @@ class GuiGameScraper : public GuiComponent { public: - GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc, std::function skipFunc = nullptr); + GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc); bool input(InputConfig* config, Input input) override; - void update(int deltaTime) override; - + virtual std::vector getHelpPrompts() override; private: - int mSearchCountdown; // haaack - ComponentGrid mGrid; NinePatchComponent mBox; @@ -24,6 +21,5 @@ private: ScraperSearchParams mSearchParams; - std::function mDoneFunc; - std::function mSkipFunc; + std::function mCancelFunc; }; diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index b59915dbe..5cee1ed57 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -63,36 +63,8 @@ void GuiMetaDataEd::fetch() mWindow->pushGui(scr); } -void GuiMetaDataEd::fetchDone(MetaDataList result) +void GuiMetaDataEd::fetchDone(const ScraperSearchResult& result) { - //TODO - replace this with resolveMetaDataAssetsAsync! - - //this is a little tricky: - //go through the list of returned results, if anything is an image and the path looks like a URL: - // (1) start an async download + resize (will create an AsyncReq that blocks further user input) - // (when this is finished, call result.set(key, newly_downloaded_file_path) and call fetchDone() again) - // (2) return from this function immediately - for(auto it = mMetaDataDecl.begin(); it != mMetaDataDecl.end(); it++) - { - std::string key = it->key; - std::string val = result.get(it->key); - - //val is /probably/ a URL - if(it->type == MD_IMAGE_PATH && HttpReq::isUrl(val)) - { - downloadImageAsync(mWindow, val, getSaveAsPath(mScraperParams, key, val), - [this, result, key] (std::string filePath) mutable -> void { - //skip it - if(filePath.empty()) - LOG(LogError) << "Error resolving boxart"; - - result.set(key, filePath); - this->fetchDone(result); - }); - return; - } - } - for(unsigned int i = 0; i < mEditors.size(); i++) { //don't overwrite statistics @@ -100,7 +72,7 @@ void GuiMetaDataEd::fetchDone(MetaDataList result) continue; const std::string& key = mMetaDataDecl.at(i).key; - mEditors.at(i)->setValue(result.get(key)); + mEditors.at(i)->setValue(result.mdl.get(key)); } } diff --git a/src/guis/GuiMetaDataEd.h b/src/guis/GuiMetaDataEd.h index 69751da9a..295f4e312 100644 --- a/src/guis/GuiMetaDataEd.h +++ b/src/guis/GuiMetaDataEd.h @@ -20,7 +20,7 @@ public: private: void save(); void fetch(); - void fetchDone(MetaDataList result); + void fetchDone(const ScraperSearchResult& result); MenuComponent mMenu; diff --git a/src/guis/GuiScraperLog.cpp b/src/guis/GuiScraperLog.cpp deleted file mode 100644 index b24a8bd2d..000000000 --- a/src/guis/GuiScraperLog.cpp +++ /dev/null @@ -1,181 +0,0 @@ -#include "GuiScraperLog.h" -#include "GuiGameScraper.h" -#include "../Settings.h" -#include "../Renderer.h" -#include "../Log.h" -#include "../XMLReader.h" - -GuiScraperLog::GuiScraperLog(Window* window, const std::queue& searches, bool manualMode) : GuiComponent(window), - mManualMode(manualMode), - mBox(window, ":/frame.png"), - mSearches(searches), - mStatus(window), - mTextLines(40), - mSuccessCount(0), mSkippedCount(0) -{ - addChild(&mBox); - addChild(&mStatus); - - setSize(Renderer::getScreenWidth() * 0.8f, (float)Renderer::getScreenHeight()); - setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, 0); - - mStatus.setColor(0x000000FF); - mStatus.setSize(mSize.x(), (float)mStatus.getFont()->getHeight()); - mStatus.setCentered(true); - updateStatus(); - - mBox.setEdgeColor(0x111111FF); - mBox.setCenterColor(0xDFDFDFFF); - mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(8, 0)); - - mWindow->setAllowSleep(false); -} - -GuiScraperLog::~GuiScraperLog() -{ - mWindow->setAllowSleep(true); -} - -void GuiScraperLog::start() -{ - next(); -} - -void GuiScraperLog::next() -{ - if(mSearches.empty()) - { - done(); - return; - } - - ScraperSearchParams search = mSearches.front(); - mSearches.pop(); - - writeLine(getCleanFileName(search.game->getPath()), 0x0000FFFF); - - if(mManualMode) - { - GuiGameScraper* ggs = new GuiGameScraper(mWindow, search, - [this, search] (MetaDataList result) { resultFetched(search, result); }, - [this, search] { resultEmpty(search); }); - - mWindow->pushGui(ggs); - }else{ - std::shared_ptr scraper = Settings::getInstance()->getScraper(); - scraper->getResultsAsync(search, mWindow, [this, search] (std::vector mdls) { - if(mdls.empty()) - resultEmpty(search); - else - resultFetched(search, mdls[0]); - }); - } - - updateStatus(); -} - -void GuiScraperLog::resultFetched(ScraperSearchParams params, MetaDataList mdl) -{ - writeLine(" -> \"" + mdl.get("name") + "\"", 0x0000FFFF); - writeLine(" Downloading images...", 0x0000FFFF); - resolveMetaDataAssetsAsync(mWindow, params, mdl, [this, params] (MetaDataList meta) { resultResolved(params, meta); }); - - //-> resultResolved -} - -void GuiScraperLog::resultResolved(ScraperSearchParams params, MetaDataList mdl) -{ - //apply new metadata - params.game->metadata = mdl; - - writeLine(" Success!", 0x00FF00FF); - - //write changes to gamelist.xml - updateGamelist(params.system); - - mSuccessCount++; - - next(); -} - -void GuiScraperLog::resultEmpty(ScraperSearchParams search) -{ - if(mManualMode) - writeLine(" SKIPPING", 0xFF0000FF); - else - writeLine(" NO RESULTS, skipping", 0xFF0000FF); - - LOG(LogInfo) << "Scraper skipping [" << getCleanFileName(search.game->getPath()) << "]"; - - mSkippedCount++; - - next(); -} - -void GuiScraperLog::done() -{ - writeLine("===================================", 0x000000FF); - - std::stringstream ss; - ss << mSuccessCount << " successful, " << mSkippedCount << " skipped"; - writeLine(ss.str(), 0x000000FF); - - writeLine("DONE!! Press anything to continue.", 0x00FF00FF); - writeLine("===================================", 0x000000FF); - - //done with everything! -} - -void GuiScraperLog::writeLine(const std::string& line, unsigned int color) -{ - std::shared_ptr cmp(new TextComponent(mWindow)); - cmp->setText(line); - cmp->setColor(color); - cmp->setSize(mSize.x(), (float)cmp->getFont()->getHeight()); - - mTextLines.push_back(cmp); -} - -void GuiScraperLog::render(const Eigen::Affine3f& parentTrans) -{ - renderChildren(parentTrans * getTransform()); - - Eigen::Affine3f trans = parentTrans * getTransform(); - - //draw messages - float fontHeight = (float)Font::get(FONT_SIZE_MEDIUM)->getHeight(); - trans = trans.translate(Eigen::Vector3f(0, mSize.y() - fontHeight, 0)); - - for(auto it = mTextLines.rbegin(); it != mTextLines.rend(); it++) - { - (*it)->render(trans); - trans = trans.translate(Eigen::Vector3f(0, -fontHeight, 0)); - - if(trans.translation().y() < fontHeight) - break; - } -} - -bool GuiScraperLog::input(InputConfig* config, Input input) -{ - if(input.value != 0) - { - //we're done - if(mSearches.empty()) - { - delete this; - return true; - } - } - - return GuiComponent::input(config, input); -} - -void GuiScraperLog::updateStatus() -{ - std::stringstream ss; - - ss << mSearches.size() << " games remaining"; - - mStatus.setText(ss.str()); -} diff --git a/src/guis/GuiScraperLog.h b/src/guis/GuiScraperLog.h deleted file mode 100644 index 62634ce6f..000000000 --- a/src/guis/GuiScraperLog.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include "../GuiComponent.h" -#include "../components/NinePatchComponent.h" -#include "../scrapers/Scraper.h" -#include "../components/TextComponent.h" - -#include -#include - -//A "terminal" of sorts for scraping. -//Doesn't accept input, but renders log-style messages and handles the callback chain for multi-game scraping. -class GuiScraperLog : public GuiComponent -{ -public: - GuiScraperLog(Window* window, const std::queue& params, bool manualMode); - ~GuiScraperLog(); - - void start(); - - void render(const Eigen::Affine3f& parentTrans) override; - bool input(InputConfig* config, Input input) override; - -private: - void updateStatus(); - void writeLine(const std::string& line, unsigned int color); - - void resultFetched(ScraperSearchParams params, MetaDataList mdl); - void resultResolved(ScraperSearchParams params, MetaDataList mdl); - void resultEmpty(ScraperSearchParams params); - - void next(); - void done(); - - bool mManualMode; - - NinePatchComponent mBox; - - std::queue mSearches; - - TextComponent mStatus; - boost::circular_buffer< std::shared_ptr > mTextLines; - - unsigned int mSuccessCount; - unsigned int mSkippedCount; -}; diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp new file mode 100644 index 000000000..179dfcd50 --- /dev/null +++ b/src/guis/GuiScraperMulti.cpp @@ -0,0 +1,102 @@ +#include "GuiScraperMulti.h" +#include "../Renderer.h" + +#include "../components/TextComponent.h" +#include "../components/ButtonComponent.h" +#include "../components/ScraperSearchComponent.h" +#include "../components/MenuComponent.h" // for makeButtonGrid +#include "GuiMsgBox.h" + +using namespace Eigen; + +GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults) : + GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 4)), + mSearchQueue(searches) +{ + addChild(&mBackground); + addChild(&mGrid); + + mTotalGames = mSearchQueue.size(); + mCurrentGame = 0; + + // set up grid + mTitle = std::make_shared(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_SMALL), 0x777777FF, true); + mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); + + mSubtitle = std::make_shared(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, true); + mGrid.setEntry(mSubtitle, Vector2i(0, 1), false, true); + + mSearchComp = std::make_shared(mWindow, + approveResults ? ScraperSearchComponent::ALWAYS_ACCEPT_MATCHING_CRC : ScraperSearchComponent::ALWAYS_ACCEPT_FIRST_RESULT); + mSearchComp->setAcceptCallback(std::bind(&GuiScraperMulti::acceptResult, this, std::placeholders::_1)); + mSearchComp->setCancelCallback(std::bind(&GuiScraperMulti::finish, this)); + mGrid.setEntry(mSearchComp, Vector2i(0, 2), approveResults, true); + + std::vector< std::shared_ptr > buttons; + buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search by name", nullptr)); + buttons.push_back(std::make_shared(mWindow, "SKIP", "skip this game", std::bind(&GuiScraperMulti::skip, this))); + buttons.push_back(std::make_shared(mWindow, "STOP", "cancel scraping", std::bind(&GuiScraperMulti::finish, this))); + mButtonGrid = makeButtonGrid(mWindow, buttons); + mButtonGrid->setSize(mButtonGrid->getSize().x(), mButtonGrid->getSize().y() + 32); + mGrid.setEntry(mButtonGrid, Vector2i(0, 3), true, false); + + setSize(Renderer::getScreenWidth() * 0.7f, Renderer::getScreenHeight() * 0.65f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); + + doNextSearch(); +} + +void GuiScraperMulti::onSizeChanged() +{ + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); + mGrid.setSize(mSize); + + mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(1, mSubtitle->getFont()->getHeight() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(3, mButtonGrid->getSize().y() / mGrid.getSize().y()); +} + +void GuiScraperMulti::doNextSearch() +{ + if(mSearchQueue.empty()) + { + finish(); + return; + } + + // update subtitle + std::stringstream ss; + ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames; + mSubtitle->setText(ss.str()); + + mSearchComp->search(mSearchQueue.front()); +} + +void GuiScraperMulti::acceptResult(const ScraperSearchResult& result) +{ + ScraperSearchParams& search = mSearchQueue.front(); + + search.game->metadata = result.mdl; + + mSearchQueue.pop(); + mCurrentGame++; + doNextSearch(); +} + +void GuiScraperMulti::skip() +{ + mSearchQueue.pop(); + mCurrentGame++; + doNextSearch(); +} + +void GuiScraperMulti::finish() +{ + mWindow->pushGui(new GuiMsgBox(mWindow, "SCRAPING COMPLETE!", + "OK", [&] { delete this; })); +} + +std::vector GuiScraperMulti::getHelpPrompts() +{ + return mGrid.getHelpPrompts(); +} diff --git a/src/guis/GuiScraperMulti.h b/src/guis/GuiScraperMulti.h new file mode 100644 index 000000000..1f9919a89 --- /dev/null +++ b/src/guis/GuiScraperMulti.h @@ -0,0 +1,39 @@ +#pragma once + +#include "../GuiComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/ComponentGrid.h" +#include "../scrapers/Scraper.h" + +#include + +class ScraperSearchComponent; +class TextComponent; + +class GuiScraperMulti : public GuiComponent +{ +public: + GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults); + + void onSizeChanged() override; + std::vector getHelpPrompts() override; + +private: + void acceptResult(const ScraperSearchResult& result); + void skip(); + void doNextSearch(); + + void finish(); + + unsigned int mTotalGames; + unsigned int mCurrentGame; + std::queue mSearchQueue; + + NinePatchComponent mBackground; + ComponentGrid mGrid; + + std::shared_ptr mTitle; + std::shared_ptr mSubtitle; + std::shared_ptr mSearchComp; + std::shared_ptr mButtonGrid; +}; diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 59a08495e..8125c100a 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -1,5 +1,5 @@ #include "GuiScraperStart.h" -#include "GuiScraperLog.h" +#include "GuiScraperMulti.h" #include "GuiMsgBox.h" #include "../components/TextComponent.h" @@ -14,9 +14,9 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), // add filters (with first one selected) mFilters = std::make_shared< OptionListComponent >(mWindow, "SCRAPE THESE GAMES", false); mFilters->add("All Games", - [](SystemData*, FileData*) -> bool { return true; }, true); + [](SystemData*, FileData*) -> bool { return true; }, false); mFilters->add("Only missing image", - [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); }, false); + [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); }, true); mMenu.addWithLabel("Filter", mFilters); //add systems (all with a platformid specified selected) @@ -57,9 +57,8 @@ void GuiScraperStart::start() { std::queue searches = getSearches(mSystems->getSelectedObjects(), mFilters->getSelected()); - GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mApproveResults->getState()); - mWindow->pushGui(gsl); - gsl->start(); + GuiScraperMulti* gsm = new GuiScraperMulti(mWindow, searches, mApproveResults->getState()); + mWindow->pushGui(gsm); delete this; } diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index a4f828959..ab1e3a83d 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -55,7 +55,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (TURBOGRAFX_16, "TurboGrafx 16"); -std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) +std::unique_ptr GamesDBScraper::getResultsAsync(const ScraperSearchParams& params) { std::string path = "/api/GetGame.php?"; @@ -71,25 +71,41 @@ std::shared_ptr GamesDBScraper::makeHttpReq(ScraperSearchParams params) path += HttpReq::urlEncode(gamesdb_platformid_map.at(params.system->getPlatformId())); } - return std::make_shared("thegamesdb.net" + path); + path = "thegamesdb.net" + path; + + return std::unique_ptr(new GamesDBHandle(params, path)); } -std::vector GamesDBScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) +GamesDBHandle::GamesDBHandle(const ScraperSearchParams& params, const std::string& url) : + mReq(std::unique_ptr(new HttpReq(url))) { - std::vector mdl; + setStatus(SEARCH_IN_PROGRESS); +} - if(req->status() != HttpReq::REQ_SUCCESS) +void GamesDBHandle::update() +{ + if(mReq->status() == HttpReq::REQ_IN_PROGRESS) + return; + + if(mReq->status() != HttpReq::REQ_SUCCESS) { - LOG(LogError) << "HttpReq error"; - return mdl; + std::stringstream ss; + ss << "Network error - " << mReq->getErrorMsg(); + setError(ss.str()); + return; } + // our HTTP request was successful + // try to build our result list + + std::vector results; + pugi::xml_document doc; - pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); + pugi::xml_parse_result parseResult = doc.load(mReq->getContent().c_str()); if(!parseResult) { - LOG(LogError) << "Error parsing XML"; - return mdl; + setError("Error parsing XML"); + return; } pugi::xml_node data = doc.child("Data"); @@ -100,24 +116,25 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s pugi::xml_node game = data.child("Game"); while(game && resultNum < MAX_SCRAPER_RESULTS) { - mdl.push_back(MetaDataList(GAME_METADATA)); - mdl.back().set("name", game.child("GameTitle").text().get()); - mdl.back().set("desc", game.child("Overview").text().get()); + ScraperSearchResult result; + + result.mdl.set("name", game.child("GameTitle").text().get()); + result.mdl.set("desc", game.child("Overview").text().get()); boost::posix_time::ptime rd = string_to_ptime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"); - mdl.back().setTime("releasedate", rd); + result.mdl.setTime("releasedate", rd); - mdl.back().set("developer", game.child("Developer").text().get()); - mdl.back().set("publisher", game.child("Publisher").text().get()); - mdl.back().set("genre", game.child("Genres").first_child().text().get()); - mdl.back().set("players", game.child("Players").text().get()); + result.mdl.set("developer", game.child("Developer").text().get()); + result.mdl.set("publisher", game.child("Publisher").text().get()); + result.mdl.set("genre", game.child("Genres").first_child().text().get()); + result.mdl.set("players", game.child("Players").text().get()); if(Settings::getInstance()->getBool("ScrapeRatings") && game.child("Rating")) { float ratingVal = (game.child("Rating").text().as_int() / 10.0f); std::stringstream ss; ss << ratingVal; - mdl.back().set("rating", ss.str()); + result.mdl.set("rating", ss.str()); } pugi::xml_node images = game.child("Images"); @@ -128,14 +145,18 @@ std::vector GamesDBScraper::parseReq(ScraperSearchParams params, s if(art) { - mdl.back().set("thumbnail", baseImageUrl + art.attribute("thumb").as_string()); - mdl.back().set("image", baseImageUrl + art.text().get()); + result.thumbnailUrl = baseImageUrl + art.attribute("thumb").as_string(); + result.imageUrl = baseImageUrl + art.text().get(); } } + results.push_back(result); + resultNum++; game = game.next_sibling("Game"); } - return mdl; + setStatus(SEARCH_DONE); + setResults(results); + return; } diff --git a/src/scrapers/GamesDBScraper.h b/src/scrapers/GamesDBScraper.h index 3a306ee99..f94671114 100644 --- a/src/scrapers/GamesDBScraper.h +++ b/src/scrapers/GamesDBScraper.h @@ -3,11 +3,22 @@ #include "Scraper.h" #include "../HttpReq.h" +class GamesDBHandle : public ScraperSearchHandle +{ +public: + GamesDBHandle(const ScraperSearchParams& params, const std::string& url); + + void update() override; + +private: + std::unique_ptr mReq; + ScraperSearchParams mParams; +}; + class GamesDBScraper : public Scraper { public: + std::unique_ptr getResultsAsync(const ScraperSearchParams& params) override; + const char* getName(); -private: - std::shared_ptr makeHttpReq(ScraperSearchParams params) override; - std::vector parseReq(ScraperSearchParams params, std::shared_ptr) override; }; diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index ddfe6350e..e730b9b15 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -9,31 +9,21 @@ #include "GamesDBScraper.h" #include "TheArchiveScraper.h" -std::vector Scraper::getResults(ScraperSearchParams params) +std::string ScraperSearchHandle::getStatusString() { - std::shared_ptr req = makeHttpReq(params); - while(req->status() == HttpReq::REQ_IN_PROGRESS); - - return parseReq(params, req); -} - -void Scraper::getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc) -{ - std::shared_ptr httpreq = makeHttpReq(params); - AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, - [this, params, returnFunc] (std::shared_ptr r) + switch(mStatus) { - returnFunc(parseReq(params, r)); - }, [returnFunc] () - { - returnFunc(std::vector()); - }); - - window->pushGui(req); + case SEARCH_IN_PROGRESS: + return "search in progress"; + case SEARCH_ERROR: + return mError; + case SEARCH_DONE: + return "search done"; + default: + return "something impossible has occured"; + } } - - std::string processFileDownload(std::shared_ptr r, std::string saveAs) { if(r->status() != HttpReq::REQ_SUCCESS) diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index df9b8a42d..ef0ce2207 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -16,17 +16,53 @@ struct ScraperSearchParams std::string nameOverride; }; +struct ScraperSearchResult +{ + ScraperSearchResult() : mdl(GAME_METADATA) {}; + + MetaDataList mdl; + std::string imageUrl; + std::string thumbnailUrl; +}; + +enum ScraperSearchStatus +{ + SEARCH_IN_PROGRESS, + SEARCH_ERROR, + SEARCH_DONE +}; + +class ScraperSearchHandle +{ +public: + virtual void update() = 0; + + // Update and return the latest status. + inline ScraperSearchStatus status() { update(); return mStatus; } + + // User-friendly string of our current status. Will return error message if status() == SEARCH_ERROR. + std::string getStatusString(); + + inline const std::vector& getResults() const { assert(mStatus != SEARCH_IN_PROGRESS); return mResults; } + +protected: + inline void setError(const std::string& error) { setStatus(SEARCH_ERROR); mError = error; } + inline void setStatus(ScraperSearchStatus status) { mStatus = status; } + inline void setResults(const std::vector& results) { mResults = results; } + +private: + std::string mError; + ScraperSearchStatus mStatus; + std::vector mResults; +}; + class Scraper { public: //Get a list of potential results. - virtual std::vector getResults(ScraperSearchParams params); - virtual void getResultsAsync(ScraperSearchParams params, Window* window, std::function)> returnFunc); + virtual std::unique_ptr getResultsAsync(const ScraperSearchParams& params) = 0; virtual const char* getName() = 0; -private: - virtual std::shared_ptr makeHttpReq(ScraperSearchParams params) = 0; - virtual std::vector parseReq(ScraperSearchParams params, std::shared_ptr) = 0; }; std::shared_ptr createScraperByName(const std::string& name); diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 5fa8f535f..fa008bd21 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -6,7 +6,7 @@ const char* TheArchiveScraper::getName() { return "TheArchive"; } -std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams params) +std::unique_ptr TheArchiveScraper::getResultsAsync(const ScraperSearchParams& params) { std::string path = "/2.0/Archive.search/xml/7TTRM4MNTIKR2NNAGASURHJOZJ3QXQC5/"; @@ -17,25 +17,44 @@ std::shared_ptr TheArchiveScraper::makeHttpReq(ScraperSearchParams para path += HttpReq::urlEncode(cleanName); //platform TODO, should use some params.system get method - return std::make_shared("api.archive.vg" + path); + path = "api.archive.vg" + path; + + return std::unique_ptr(new TheArchiveHandle(params, path)); } -std::vector TheArchiveScraper::parseReq(ScraperSearchParams params, std::shared_ptr req) +TheArchiveHandle::TheArchiveHandle(const ScraperSearchParams& params, const std::string& url) : + mReq(std::unique_ptr(new HttpReq(url))) { - std::vector mdl; + setStatus(SEARCH_IN_PROGRESS); +} - if(req->status() != HttpReq::REQ_SUCCESS) +void TheArchiveHandle::update() +{ + if(status() == SEARCH_DONE) + return; + + if(mReq->status() == HttpReq::REQ_IN_PROGRESS) + return; + + if(mReq->status() != HttpReq::REQ_SUCCESS) { - LOG(LogError) << "HttpReq error"; - return mdl; + std::stringstream ss; + ss << "Network error: " << mReq->getErrorMsg(); + setError(ss.str()); + return; } + // if we're here, our HTTP request finished successfully + + // so, let's try building our result list + std::vector results; + pugi::xml_document doc; - pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); + pugi::xml_parse_result parseResult = doc.load(mReq->getContent().c_str()); if(!parseResult) { - LOG(LogError) << "Error parsing XML"; - return mdl; + setError("Error parsing XML"); + return; } pugi::xml_node data = doc.child("OpenSearchDescription").child("games"); @@ -44,30 +63,34 @@ std::vector TheArchiveScraper::parseReq(ScraperSearchParams params pugi::xml_node game = data.child("game"); while(game && resultNum < MAX_SCRAPER_RESULTS) { - mdl.push_back(MetaDataList(GAME_METADATA)); - mdl.back().set("name", game.child("title").text().get()); - mdl.back().set("desc", game.child("description").text().get()); + ScraperSearchResult result; + + result.mdl.set("name", game.child("title").text().get()); + result.mdl.set("desc", game.child("description").text().get()); //Archive.search does not return ratings - mdl.back().set("developer", game.child("developer").text().get()); + result.mdl.set("developer", game.child("developer").text().get()); std::string genre = game.child("genre").text().get(); size_t search = genre.find_last_of(" > "); genre = genre.substr(search == std::string::npos ? 0 : search, std::string::npos); - mdl.back().set("genre", genre); + result.mdl.set("genre", genre); pugi::xml_node image = game.child("box_front"); pugi::xml_node thumbnail = game.child("box_front_small"); - if (image) - mdl.back().set("image",image.text().get()); - if (thumbnail) - mdl.back().set("thumbnail", thumbnail.text().get()); + if(image) + result.imageUrl = image.text().get(); + if(thumbnail) + result.thumbnailUrl = thumbnail.text().get(); + + results.push_back(result); resultNum++; game = game.next_sibling("game"); } - return mdl; + setStatus(SEARCH_DONE); + setResults(results); } diff --git a/src/scrapers/TheArchiveScraper.h b/src/scrapers/TheArchiveScraper.h index bf5ef0bef..60724c946 100644 --- a/src/scrapers/TheArchiveScraper.h +++ b/src/scrapers/TheArchiveScraper.h @@ -3,12 +3,22 @@ #include "Scraper.h" #include "../HttpReq.h" +class TheArchiveHandle : public ScraperSearchHandle +{ +public: + TheArchiveHandle(const ScraperSearchParams& params, const std::string& url); + + void update() override; + +private: + std::unique_ptr mReq; + ScraperSearchParams mParams; +}; + class TheArchiveScraper : public Scraper { public: - const char* getName(); -private: - std::shared_ptr makeHttpReq(ScraperSearchParams params) override; - std::vector parseReq(ScraperSearchParams params, std::shared_ptr) override; -}; + std::unique_ptr getResultsAsync(const ScraperSearchParams& params) override; + const char* getName(); +}; From 1e8b040f73c1f2fcba7a5516e8f2f35eda0f13b0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 18 Mar 2014 19:55:37 -0500 Subject: [PATCH 199/386] Replaced AsyncReqComponent with some handles. UI is no longer completely blocked during asynchronous operations. --- CMakeLists.txt | 1 + src/AsyncHandle.h | 43 +++++ src/HttpReq.cpp | 9 +- src/HttpReq.h | 2 +- src/components/ComponentList.cpp | 2 + src/components/OptionListComponent.h | 4 +- src/components/ScraperSearchComponent.cpp | 57 +++++-- src/components/ScraperSearchComponent.h | 3 + src/scrapers/GamesDBScraper.cpp | 7 +- src/scrapers/Scraper.cpp | 192 +++++++++++----------- src/scrapers/Scraper.h | 72 ++++---- src/scrapers/TheArchiveScraper.cpp | 6 +- 12 files changed, 238 insertions(+), 160 deletions(-) create mode 100644 src/AsyncHandle.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 09fe248a6..d24e30115 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,6 +135,7 @@ endif() #------------------------------------------------------------------------------- #define basic sources and headers set(ES_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h diff --git a/src/AsyncHandle.h b/src/AsyncHandle.h new file mode 100644 index 000000000..4d07de5be --- /dev/null +++ b/src/AsyncHandle.h @@ -0,0 +1,43 @@ +#pragma once + +enum AsyncHandleStatus +{ + ASYNC_IN_PROGRESS, + ASYNC_ERROR, + ASYNC_DONE +}; + +// Handle for some asynchronous operation. +class AsyncHandle +{ +public: + AsyncHandle() : mStatus(ASYNC_IN_PROGRESS) {}; + + virtual void update() = 0; + + // Update and return the latest status. + inline AsyncHandleStatus status() { update(); return mStatus; } + + // User-friendly string of our current status. Will return error message if status() == SEARCH_ERROR. + inline std::string getStatusString() + { + switch(mStatus) + { + case ASYNC_IN_PROGRESS: + return "in progress"; + case ASYNC_ERROR: + return mError; + case ASYNC_DONE: + return "done"; + default: + return "something impossible has occured; row, row, fight the power"; + } + } + +protected: + inline void setStatus(AsyncHandleStatus status) { mStatus = status; } + inline void setError(const std::string& error) { setStatus(ASYNC_ERROR); mError = error; } + + std::string mError; + AsyncHandleStatus mStatus; +}; diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 867cec035..05423dfa0 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -144,14 +144,9 @@ HttpReq::Status HttpReq::status() return mStatus; } -std::string HttpReq::getContent() +std::string HttpReq::getContent() const { - if(mStatus != REQ_SUCCESS) - { - LOG(LogError) << "Called getContent() on an incomplete HttpReq!"; - return ""; - } - + assert(mStatus == REQ_SUCCESS); return mContent.str(); } diff --git a/src/HttpReq.h b/src/HttpReq.h index 44d214e27..9c4f22034 100644 --- a/src/HttpReq.h +++ b/src/HttpReq.h @@ -42,7 +42,7 @@ public: std::string getErrorMsg(); - std::string getContent(); + std::string getContent() const; // mStatus must be REQ_SUCCESS static std::string urlEncode(const std::string &s); static bool isUrl(const std::string& s); diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 2b03190e2..96f3cebe7 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -116,6 +116,8 @@ void ComponentList::onCursorChanged(const CursorState& state) mCameraOffset = 0; else if(mCameraOffset + mSize.y() > totalHeight) mCameraOffset = totalHeight - mSize.y(); + }else{ + mCameraOffset = 0; } updateHelpPrompts(); diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index c60211996..ee95eaf60 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -259,7 +259,7 @@ private: ss << getSelectedObjects().size() << " SELECTED"; mText.setText(ss.str()); mText.setSize(0, mText.getSize().y()); - setSize(mText.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y()); + setSize(mText.getSize().x() + mRightArrow.getSize().x() + 24, mText.getSize().y()); if(mParent) // hack since theres no "on child size changed" callback atm... mParent->onSizeChanged(); }else{ @@ -270,7 +270,7 @@ private: { mText.setText(strToUpper(it->name)); mText.setSize(0, mText.getSize().y()); - setSize(mText.getSize().x() + mLeftArrow.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y()); + setSize(mText.getSize().x() + mLeftArrow.getSize().x() + mRightArrow.getSize().x() + 24, mText.getSize().y()); if(mParent) // hack since theres no "on child size changed" callback atm... mParent->onSizeChanged(); break; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index d87414bfb..82c16c989 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -15,6 +15,8 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) { addChild(&mGrid); + mBlockAccept = false; + using namespace Eigen; // left spacer (empty component, needed for borders) @@ -87,6 +89,8 @@ void ScraperSearchComponent::search(const ScraperSearchParams& params) { mResultList->clear(); mScraperResults.clear(); + mThumbnailReq.reset(); + mMDResolveHandle.reset(); updateInfoPane(); mLastSearch = params; @@ -120,6 +124,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector mGrid.resetCursor(); } + mBlockAccept = false; updateInfoPane(); if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) @@ -177,6 +182,9 @@ bool ScraperSearchComponent::input(InputConfig* config, Input input) { if(config->isMappedTo("a", input) && input.value != 0) { + if(mBlockAccept) + return true; + //if you're on a result if(getSelectedIndex() != -1) { @@ -195,24 +203,28 @@ bool ScraperSearchComponent::input(InputConfig* config, Input input) return ret; } +void ScraperSearchComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + + if(mBlockAccept) + { + Renderer::setMatrix(trans); + Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), + (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x00000011); + } + + renderChildren(trans); +} + void ScraperSearchComponent::returnResult(ScraperSearchResult result) { + mBlockAccept = true; + // resolve metadata image before returning if(!result.imageUrl.empty()) { - downloadImageAsync(mWindow, result.imageUrl, getSaveAsPath(mLastSearch, "image", result.imageUrl), - [this, result] (std::string filePath) mutable -> void - { - if(filePath.empty()) - { - onSearchError("Error downloading boxart."); - return; - } - - result.mdl.set("image", filePath); - result.imageUrl = ""; - this->returnResult(result); // re-enter this function - }); + mMDResolveHandle = resolveMetaDataAssets(result, mLastSearch); return; } @@ -226,19 +238,30 @@ void ScraperSearchComponent::update(int deltaTime) updateThumbnail(); } - if(mSearchHandle && mSearchHandle->status() != SEARCH_IN_PROGRESS) + if(mSearchHandle && mSearchHandle->status() != ASYNC_IN_PROGRESS) { - if(mSearchHandle->status() == SEARCH_DONE) + if(mSearchHandle->status() == ASYNC_DONE) { onSearchDone(mSearchHandle->getResults()); - }else if(mSearchHandle->status() == SEARCH_ERROR) + }else if(mSearchHandle->status() == ASYNC_ERROR) { onSearchError(mSearchHandle->getStatusString()); } - mSearchHandle.reset(); } + if(mMDResolveHandle && mMDResolveHandle->status() != ASYNC_IN_PROGRESS) + { + if(mMDResolveHandle->status() == ASYNC_DONE) + { + returnResult(mMDResolveHandle->getResult()); + }else if(mMDResolveHandle->status() == ASYNC_ERROR) + { + onSearchError(mMDResolveHandle->getStatusString()); + } + mMDResolveHandle.reset(); + } + GuiComponent::update(deltaTime); } diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index 1e6b134a1..e3adee360 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -34,6 +34,7 @@ public: bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; + void render(const Eigen::Affine3f& parentTrans) override; std::vector getHelpPrompts() override; void onSizeChanged() override; void onFocusGained() override; @@ -65,8 +66,10 @@ private: std::function mAcceptCallback; std::function mSkipCallback; std::function mCancelCallback; + bool mBlockAccept; std::unique_ptr mSearchHandle; + std::unique_ptr mMDResolveHandle; std::vector mScraperResults; std::unique_ptr mThumbnailReq; }; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index ab1e3a83d..83a04d3f2 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -79,11 +79,14 @@ std::unique_ptr GamesDBScraper::getResultsAsync(const Scrap GamesDBHandle::GamesDBHandle(const ScraperSearchParams& params, const std::string& url) : mReq(std::unique_ptr(new HttpReq(url))) { - setStatus(SEARCH_IN_PROGRESS); + setStatus(ASYNC_IN_PROGRESS); } void GamesDBHandle::update() { + if(mStatus == ASYNC_DONE) + return; + if(mReq->status() == HttpReq::REQ_IN_PROGRESS) return; @@ -156,7 +159,7 @@ void GamesDBHandle::update() game = game.next_sibling("Game"); } - setStatus(SEARCH_DONE); + setStatus(ASYNC_DONE); setResults(results); return; } diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index e730b9b15..3a450852f 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -9,48 +9,116 @@ #include "GamesDBScraper.h" #include "TheArchiveScraper.h" -std::string ScraperSearchHandle::getStatusString() +std::shared_ptr createScraperByName(const std::string& name) { - switch(mStatus) + if(name == "TheGamesDB") + return std::shared_ptr(new GamesDBScraper()); + else if(name == "TheArchive") + return std::shared_ptr(new TheArchiveScraper()); + + return nullptr; +} + +std::unique_ptr resolveMetaDataAssets(const ScraperSearchResult& result, const ScraperSearchParams& search) +{ + return std::unique_ptr(new MDResolveHandle(result, search)); +} + +MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, const ScraperSearchParams& search) : mResult(result) +{ + if(!result.imageUrl.empty()) { - case SEARCH_IN_PROGRESS: - return "search in progress"; - case SEARCH_ERROR: - return mError; - case SEARCH_DONE: - return "search done"; - default: - return "something impossible has occured"; + std::string imgPath = getSaveAsPath(search, "image", result.imageUrl); + mFuncs.push_back(ResolvePair(downloadImageAsync(result.imageUrl, imgPath), [this, imgPath] + { + mResult.mdl.set("image", imgPath); + mResult.imageUrl = ""; + })); } } -std::string processFileDownload(std::shared_ptr r, std::string saveAs) +void MDResolveHandle::update() { - if(r->status() != HttpReq::REQ_SUCCESS) + if(mStatus == ASYNC_DONE || mStatus == ASYNC_ERROR) + return; + + auto it = mFuncs.begin(); + while(it != mFuncs.end()) { - LOG(LogError) << "Failed to download file - HttpReq error: " << r->getErrorMsg(); - return ""; + if(it->first->status() == ASYNC_ERROR) + { + setError(it->first->getStatusString()); + return; + }else if(it->first->status() == ASYNC_DONE) + { + it->second(); + it = mFuncs.erase(it); + continue; + } + it++; } - std::ofstream stream(saveAs, std::ios_base::out | std::ios_base::binary); - if(stream.fail()) + if(mFuncs.empty()) + setStatus(ASYNC_DONE); +} + +std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs) +{ + return std::unique_ptr(new ImageDownloadHandle(url, saveAs, + Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight"))); +} + +ImageDownloadHandle::ImageDownloadHandle(const std::string& url, const std::string& path, int maxWidth, int maxHeight) : + mSavePath(path), mMaxWidth(maxWidth), mMaxHeight(maxHeight), mReq(new HttpReq(url)) +{ +} + +void ImageDownloadHandle::update() +{ + if(mReq->status() == HttpReq::REQ_IN_PROGRESS) + return; + + if(mReq->status() != HttpReq::REQ_SUCCESS) { - LOG(LogError) << "Failed to open \"" << saveAs << "\" for writing downloaded file."; - return ""; + std::stringstream ss; + ss << "Network error: " << mReq->getErrorMsg(); + setError(ss.str()); + return; } - std::string content = r->getContent(); + // download is done, save it to disk + std::ofstream stream(mSavePath, std::ios_base::out | std::ios_base::binary); + if(stream.bad()) + { + setError("Failed to open image path to write. Permission error? Disk full?"); + return; + } + + const std::string& content = mReq->getContent(); stream.write(content.data(), content.length()); stream.close(); + if(stream.bad()) + { + setError("Failed to save image. Disk full?"); + return; + } - return saveAs; + // resize it + if(!resizeImage(mSavePath, mMaxWidth, mMaxHeight)) + { + setError("Error saving resized image. Out of memory? Disk full?"); + return; + } + + setStatus(ASYNC_DONE); } //you can pass 0 for width or height to keep aspect ratio -void resizeImage(const std::string& path, int maxWidth, int maxHeight) +bool resizeImage(const std::string& path, int maxWidth, int maxHeight) { + // nothing to do if(maxWidth == 0 && maxHeight == 0) - return; + return true; FREE_IMAGE_FORMAT format = FIF_UNKNOWN; FIBITMAP* image = NULL; @@ -62,7 +130,7 @@ void resizeImage(const std::string& path, int maxWidth, int maxHeight) if(format == FIF_UNKNOWN) { LOG(LogError) << "Error - could not detect filetype for image \"" << path << "\"!"; - return; + return false; } //make sure we can read this filetype first, then load it @@ -71,7 +139,7 @@ void resizeImage(const std::string& path, int maxWidth, int maxHeight) image = FreeImage_Load(format, path.c_str()); }else{ LOG(LogError) << "Error - file format reading not supported for image \"" << path << "\"!"; - return; + return false; } float width = (float)FreeImage_GetWidth(image); @@ -91,43 +159,16 @@ void resizeImage(const std::string& path, int maxWidth, int maxHeight) if(imageRescaled == NULL) { LOG(LogError) << "Could not resize image! (not enough memory? invalid bitdepth?)"; - return; - } - - if(!FreeImage_Save(format, imageRescaled, path.c_str())) - { - LOG(LogError) << "Failed to save resized image!"; + return false; } + bool saved = FreeImage_Save(format, imageRescaled, path.c_str()); FreeImage_Unload(imageRescaled); -} -void downloadImageAsync(Window* window, const std::string& url, const std::string& saveAs, std::function returnFunc) -{ - std::shared_ptr httpreq = std::make_shared(url); - AsyncReqComponent* req = new AsyncReqComponent(window, httpreq, - [returnFunc, saveAs] (std::shared_ptr r) - { - std::string file = processFileDownload(r, saveAs); - if(!file.empty()) - resizeImage(file, Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight")); - returnFunc(file); - }, NULL); + if(!saved) + LOG(LogError) << "Failed to save resized image!"; - window->pushGui(req); -} - -std::string downloadImage(const std::string& url, const std::string& saveAs) -{ - std::shared_ptr httpreq = std::make_shared(url); - while(httpreq->status() == HttpReq::REQ_IN_PROGRESS); - - std::string file = processFileDownload(httpreq, saveAs); - - if(!file.empty()) - resizeImage(file, Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight")); - - return file; + return saved; } std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url) @@ -153,42 +194,3 @@ std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& path += name + ext; return path; } - - -std::shared_ptr createScraperByName(const std::string& name) -{ - if(name == "TheGamesDB") - return std::shared_ptr(new GamesDBScraper()); - else if(name == "TheArchive") - return std::shared_ptr(new TheArchiveScraper()); - - return nullptr; -} - -void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& params, MetaDataList mdl, std::function returnFunc) -{ - const std::vector& mdd = params.game->metadata.getMDD(); - for(auto it = mdd.begin(); it != mdd.end(); it++) - { - std::string key = it->key; - std::string val = mdl.get(key); - if(it->type == MD_IMAGE_PATH && HttpReq::isUrl(val)) - { - downloadImageAsync(window, val, getSaveAsPath(params, key, val), [window, params, mdl, key, returnFunc] (std::string savedAs) mutable -> - void - { - if(savedAs.empty()) - { - //error - LOG(LogError) << "Could not resolve image for [" << getCleanFileName(params.game->getPath()) << "]! Skipping."; - } - - mdl.set(key, savedAs); - resolveMetaDataAssetsAsync(window, params, mdl, returnFunc); - }); - return; - } - } - - returnFunc(mdl); -} diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index ef0ce2207..21c7198f1 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -3,11 +3,10 @@ #include "../MetaData.h" #include "../SystemData.h" #include "../HttpReq.h" +#include "../AsyncHandle.h" #include #include -class Window; - struct ScraperSearchParams { SystemData* system; @@ -25,34 +24,16 @@ struct ScraperSearchResult std::string thumbnailUrl; }; -enum ScraperSearchStatus -{ - SEARCH_IN_PROGRESS, - SEARCH_ERROR, - SEARCH_DONE -}; - -class ScraperSearchHandle +class ScraperSearchHandle : public AsyncHandle { public: virtual void update() = 0; - - // Update and return the latest status. - inline ScraperSearchStatus status() { update(); return mStatus; } - - // User-friendly string of our current status. Will return error message if status() == SEARCH_ERROR. - std::string getStatusString(); - - inline const std::vector& getResults() const { assert(mStatus != SEARCH_IN_PROGRESS); return mResults; } + inline const std::vector& getResults() const { assert(mStatus != ASYNC_IN_PROGRESS); return mResults; } protected: - inline void setError(const std::string& error) { setStatus(SEARCH_ERROR); mError = error; } - inline void setStatus(ScraperSearchStatus status) { mStatus = status; } inline void setResults(const std::vector& results) { mResults = results; } private: - std::string mError; - ScraperSearchStatus mStatus; std::vector mResults; }; @@ -67,23 +48,48 @@ public: std::shared_ptr createScraperByName(const std::string& name); + +// Meta data asset downloading stuff. +class MDResolveHandle : public AsyncHandle +{ +public: + MDResolveHandle(const ScraperSearchResult& result, const ScraperSearchParams& search); + + void update() override; + inline const ScraperSearchResult& getResult() const { assert(mStatus == ASYNC_DONE); return mResult; } + +private: + ScraperSearchResult mResult; + + typedef std::pair< std::unique_ptr, std::function > ResolvePair; + std::vector mFuncs; +}; + +class ImageDownloadHandle : public AsyncHandle +{ +public: + ImageDownloadHandle(const std::string& url, const std::string& path, int maxWidth, int maxHeight); + + void update() override; + +private: + std::unique_ptr mReq; + std::string mSavePath; + int mMaxWidth; + int mMaxHeight; +}; + //About the same as "~/.emulationstation/downloaded_images/[system_name]/[game_name].[url's extension]". //Will create the "downloaded_images" and "subdirectory" directories if they do not exist. std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url); -//Returns the path to the downloaded file (saveAs) on completion. -//Returns empty string if an error occured. //Will resize according to Settings::getInt("ScraperResizeWidth") and Settings::getInt("ScraperResizeHeight"). -std::string downloadImage(const std::string& url, const std::string& saveAs); +std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs); -//Returns (via returnFunc) the path to the downloaded file (saveAs) on completion. -//Returns empty string if an error occured. -//Will resize according to Settings::getInt("ScraperResizeWidth") and Settings::getInt("ScraperResizeHeight"). -//Same as downloadImage, just async. -void downloadImageAsync(Window* window, const std::string& url, const std::string& saveAs, std::function returnFunc); - -void resolveMetaDataAssetsAsync(Window* window, const ScraperSearchParams& params, MetaDataList mdl, std::function returnFunc); +// Resolves all metadata assets that need to be downloaded. +std::unique_ptr resolveMetaDataAssets(const ScraperSearchResult& result, const ScraperSearchParams& search); //You can pass 0 for maxWidth or maxHeight to automatically keep the aspect ratio. //Will overwrite the image at [path] with the new resized one. -void resizeImage(const std::string& path, int maxWidth, int maxHeight); +//Returns true if successful, false otherwise. +bool resizeImage(const std::string& path, int maxWidth, int maxHeight); diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index fa008bd21..0cfbe4891 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -25,12 +25,12 @@ std::unique_ptr TheArchiveScraper::getResultsAsync(const Sc TheArchiveHandle::TheArchiveHandle(const ScraperSearchParams& params, const std::string& url) : mReq(std::unique_ptr(new HttpReq(url))) { - setStatus(SEARCH_IN_PROGRESS); + setStatus(ASYNC_IN_PROGRESS); } void TheArchiveHandle::update() { - if(status() == SEARCH_DONE) + if(mStatus == ASYNC_DONE) return; if(mReq->status() == HttpReq::REQ_IN_PROGRESS) @@ -91,6 +91,6 @@ void TheArchiveHandle::update() game = game.next_sibling("game"); } - setStatus(SEARCH_DONE); + setStatus(ASYNC_DONE); setResults(results); } From 8e5c910de393d873b772f2ab674d96864100c2af Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 19 Mar 2014 11:21:21 -0500 Subject: [PATCH 200/386] Fixed a sneaky crash. Added metadata display to ScraperSearchComponent. --- src/components/ScraperSearchComponent.cpp | 95 +++++++++++++++++++++-- src/components/ScraperSearchComponent.h | 17 +++- src/guis/GuiGameScraper.cpp | 40 +++++++++- src/guis/GuiGameScraper.h | 5 +- src/scrapers/Scraper.cpp | 2 +- src/scrapers/Scraper.h | 2 +- 6 files changed, 147 insertions(+), 14 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 82c16c989..ce93f7553 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -4,10 +4,13 @@ #include "TextComponent.h" #include "ScrollableContainer.h" #include "ImageComponent.h" +#include "RatingComponent.h" +#include "DateTimeComponent.h" #include "ComponentList.h" #include "../HttpReq.h" #include "../Settings.h" #include "../Log.h" +#include "../Util.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), mGrid(window, Eigen::Vector2i(4, 3)), @@ -36,6 +39,36 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mDescContainer->addChild(mResultDesc.get()); mDescContainer->setAutoScroll(2200, 0.015f); + // metadata + auto font = Font::get(FONT_SIZE_SMALL); // this gets replaced in onSizeChanged() so its just a placeholder + const unsigned int mdColor = 0x777777FF; + const unsigned int mdLblColor = 0x666666FF; + mMD_Rating = std::make_shared(mWindow); + mMD_ReleaseDate = std::make_shared(mWindow); + mMD_ReleaseDate->setColor(mdColor); + mMD_Developer = std::make_shared(mWindow, "", font, mdColor); + mMD_Publisher = std::make_shared(mWindow, "", font, mdColor); + mMD_Genre = std::make_shared(mWindow, "", font, mdColor); + mMD_Players = std::make_shared(mWindow, "", font, mdColor); + + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "RATING:", font, mdLblColor), mMD_Rating)); + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "RELEASED:", font, mdLblColor), mMD_ReleaseDate)); + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "DEVELOPER:", font, mdLblColor), mMD_Developer)); + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "PUBLISHER:", font, mdLblColor), mMD_Publisher)); + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "GENRE:", font, mdLblColor), mMD_Genre)); + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "PLAYERS:", font, mdLblColor), mMD_Players)); + + mMD_Grid = std::make_shared(mWindow, Vector2i(2, mMD_Pairs.size())); + unsigned int i = 0; + for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) + { + mMD_Grid->setEntry(it->first, Vector2i(0, i), false, true); + mMD_Grid->setEntry(it->second, Vector2i(1, i), false, true); + i++; + } + + mGrid.setEntry(mMD_Grid, Vector2i(2, 1), false, true); + // result list mResultList = std::make_shared(mWindow); @@ -57,8 +90,36 @@ void ScraperSearchComponent::onSizeChanged() mGrid.setRowHeightPerc(0, fontHeightPerc); // result name mGrid.setRowHeightPerc(2, 0.375f); // description - mResultThumbnail->setMaxSize(mGrid.getColWidth(1), mGrid.getRowHeight(1)); + // limit thumbnail size using setMaxHeight - we do this instead of letting mGrid call setSize because it maintains the aspect ratio + // we also pad a little so it doesn't rub up against the metadata labels + mResultThumbnail->setMaxSize(mGrid.getColWidth(1) - 16, mGrid.getRowHeight(1)); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container + + // metadata + // (mMD_Grid has already been resized by mGrid) + + const int fontHeight = (int)(mMD_Grid->getSize().y() / mMD_Pairs.size() * 0.8f); + auto fontLbl = Font::get(fontHeight, FONT_PATH_REGULAR); + auto fontComp = Font::get(fontHeight, FONT_PATH_LIGHT); + + // update label fonts + float maxLblWidth = 0; + for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) + { + it->first->setFont(fontLbl); + it->first->setSize(0, 0); + if(it->first->getSize().x() > maxLblWidth) + maxLblWidth = it->first->getSize().x() + 6; + } + + // update component fonts + mMD_ReleaseDate->setFont(fontComp); + mMD_Developer->setFont(fontComp); + mMD_Publisher->setFont(fontComp); + mMD_Genre->setFont(fontComp); + mMD_Players->setFont(fontComp); + + mMD_Grid->setColWidthPerc(0, maxLblWidth / mMD_Grid->getSize().x()); } void ScraperSearchComponent::updateViewStyle() @@ -171,10 +232,27 @@ void ScraperSearchComponent::updateInfoPane() mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); else mThumbnailReq.reset(); + + // metadata + mMD_Rating->setValue(strToUpper(mScraperResults.at(i).mdl.get("rating"))); + mMD_ReleaseDate->setValue(strToUpper(mScraperResults.at(i).mdl.get("releasedate"))); + mMD_Developer->setText(strToUpper(mScraperResults.at(i).mdl.get("developer"))); + mMD_Publisher->setText(strToUpper(mScraperResults.at(i).mdl.get("publisher"))); + mMD_Genre->setText(strToUpper(mScraperResults.at(i).mdl.get("genre"))); + mMD_Players->setText(strToUpper(mScraperResults.at(i).mdl.get("players"))); + }else{ - mResultName->setText(" "); - mResultDesc->setText(" "); + mResultName->setText(""); + mResultDesc->setText(""); mResultThumbnail->setImage(""); + + // metadata + mMD_Rating->setValue(""); + mMD_ReleaseDate->setValue(""); + mMD_Developer->setText(""); + mMD_Publisher->setText(""); + mMD_Genre->setText(""); + mMD_Players->setText(""); } } @@ -207,14 +285,14 @@ void ScraperSearchComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); + renderChildren(trans); + if(mBlockAccept) { Renderer::setMatrix(trans); Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x00000011); } - - renderChildren(trans); } void ScraperSearchComponent::returnResult(ScraperSearchResult result) @@ -233,6 +311,8 @@ void ScraperSearchComponent::returnResult(ScraperSearchResult result) void ScraperSearchComponent::update(int deltaTime) { + GuiComponent::update(deltaTime); + if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) { updateThumbnail(); @@ -254,15 +334,14 @@ void ScraperSearchComponent::update(int deltaTime) { if(mMDResolveHandle->status() == ASYNC_DONE) { + // this might end in us being deleted, depending on mAcceptCallback - so make sure this is the last thing we do in update() returnResult(mMDResolveHandle->getResult()); }else if(mMDResolveHandle->status() == ASYNC_ERROR) { onSearchError(mMDResolveHandle->getStatusString()); + mMDResolveHandle.reset(); } - mMDResolveHandle.reset(); } - - GuiComponent::update(deltaTime); } void ScraperSearchComponent::updateThumbnail() diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index e3adee360..fa8f1cbf7 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -8,11 +8,14 @@ #define MAX_SCRAPER_RESULTS 5 class ComponentList; -class TextEditComponent; class ImageComponent; +class RatingComponent; +class TextComponent; +class DateTimeComponent; class ScrollableContainer; class HttpReq; + class ScraperSearchComponent : public GuiComponent { public: @@ -61,6 +64,18 @@ private: std::shared_ptr mResultThumbnail; std::shared_ptr mResultList; + std::shared_ptr mMD_Grid; + std::shared_ptr mMD_Rating; + std::shared_ptr mMD_ReleaseDate; + std::shared_ptr mMD_Developer; + std::shared_ptr mMD_Publisher; + std::shared_ptr mMD_Genre; + std::shared_ptr mMD_Players; + + // label-component pair + typedef std::pair< std::shared_ptr, std::shared_ptr > MetaDataPair; + std::vector mMD_Pairs; + SearchType mSearchType; ScraperSearchParams mLastSearch; std::function mAcceptCallback; diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 7ac7dcf6f..8e462f223 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -11,7 +11,8 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), mGrid(window, Eigen::Vector2i(1, 3)), mBox(window, ":/frame.png"), - mSearchParams(params) + mSearchParams(params), + mClose(false) { addChild(&mBox); addChild(&mGrid); @@ -45,7 +46,29 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mGrid.setPosition((mSize.x() - mGrid.getSize().x()) / 2, (mSize.y() - mGrid.getSize().y()) / 2); mBox.fitTo(mGrid.getSize(), mGrid.getPosition(), Eigen::Vector2f(-32, -32)); - mSearch->setAcceptCallback([this, doneFunc](const ScraperSearchResult& result) { doneFunc(result); delete this; }); + // we call this->close() instead of just delete this; in the accept callback: + // this is because of how GuiComponent::update works. if it was just delete this, this would happen when the metadata resolver is done: + // GuiGameScraper::update() + // GuiComponent::update() + // it = mChildren.begin(); + // mBox::update() + // it++; + // mSearchComponent::update() + // acceptCallback -> delete this + // it++; // error, mChildren has been deleted because it was part of this + + // so instead we do this: + // GuiGameScraper::update() + // GuiComponent::update() + // it = mChildren.begin(); + // mBox::update() + // it++; + // mSearchComponent::update() + // acceptCallback -> close() -> mClose = true + // it++; // ok + // if(mClose) + // delete this; + mSearch->setAcceptCallback([this, doneFunc](const ScraperSearchResult& result) { doneFunc(result); close(); }); mSearch->setCancelCallback([&] { delete this; }); mGrid.resetCursor(); @@ -63,7 +86,20 @@ bool GuiGameScraper::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } +void GuiGameScraper::update(int deltaTime) +{ + GuiComponent::update(deltaTime); + + if(mClose) + delete this; +} + std::vector GuiGameScraper::getHelpPrompts() { return mGrid.getHelpPrompts(); } + +void GuiGameScraper::close() +{ + mClose = true; +} \ No newline at end of file diff --git a/src/guis/GuiGameScraper.h b/src/guis/GuiGameScraper.h index f87d7f0f8..fa27ecc03 100644 --- a/src/guis/GuiGameScraper.h +++ b/src/guis/GuiGameScraper.h @@ -10,10 +10,13 @@ public: GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc); bool input(InputConfig* config, Input input) override; - + void update(int deltaTime); virtual std::vector getHelpPrompts() override; private: + bool mClose; + void close(); + ComponentGrid mGrid; NinePatchComponent mBox; diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index 3a450852f..85a6d7f15 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -62,7 +62,7 @@ void MDResolveHandle::update() setStatus(ASYNC_DONE); } -std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs) +std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs) { return std::unique_ptr(new ImageDownloadHandle(url, saveAs, Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight"))); diff --git a/src/scrapers/Scraper.h b/src/scrapers/Scraper.h index 21c7198f1..88422e7bd 100644 --- a/src/scrapers/Scraper.h +++ b/src/scrapers/Scraper.h @@ -84,7 +84,7 @@ private: std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url); //Will resize according to Settings::getInt("ScraperResizeWidth") and Settings::getInt("ScraperResizeHeight"). -std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs); +std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs); // Resolves all metadata assets that need to be downloaded. std::unique_ptr resolveMetaDataAssets(const ScraperSearchResult& result, const ScraperSearchParams& search); From daa62123d171349b51565cbdcd19f57b070acbac Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 19 Mar 2014 13:10:30 -0500 Subject: [PATCH 201/386] Changed Font::getHeight to return a float like it should. Added minimum message height to GuiMsgBox. TextComponent now vertically centers text. Fixed a bug that would cause ScraperSearchComponent to return results continuously until another search was started. --- src/components/ScraperSearchComponent.cpp | 5 ++++- src/components/TextComponent.cpp | 2 +- src/components/TextEditComponent.cpp | 2 +- src/components/TextListComponent.h | 4 ++-- src/guis/GuiInputConfig.cpp | 4 ++-- src/guis/GuiMsgBox.cpp | 3 ++- src/resources/Font.cpp | 4 ++-- src/resources/Font.h | 2 +- 8 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index ce93f7553..0e5931376 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -334,8 +334,11 @@ void ScraperSearchComponent::update(int deltaTime) { if(mMDResolveHandle->status() == ASYNC_DONE) { + ScraperSearchResult result = mMDResolveHandle->getResult(); + mMDResolveHandle.reset(); + // this might end in us being deleted, depending on mAcceptCallback - so make sure this is the last thing we do in update() - returnResult(mMDResolveHandle->getResult()); + returnResult(result); }else if(mMDResolveHandle->status() == ASYNC_ERROR) { onSearchError(mMDResolveHandle->getStatusString()); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index e1c2abbf2..d450c59c2 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -79,7 +79,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mCentered) { const Eigen::Vector2f& textSize = mTextCache->metrics.size; - Eigen::Vector3f off((getSize().x() - textSize.x()) / 2, 0, 0); + Eigen::Vector3f off((getSize().x() - textSize.x()) / 2, (getSize().y() - textSize.y()) / 2, 0); trans.translate(off); Renderer::setMatrix(trans); diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 6d4ff0e0f..ed85aef23 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -206,7 +206,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) cursorPos[1] = 0; } - Renderer::drawRect((int)cursorPos.x(), (int)cursorPos.y(), 3, f->getHeight(), 0x000000FF); + Renderer::drawRect((int)cursorPos.x(), (int)cursorPos.y(), 3, (int)f->getHeight(), 0x000000FF); } Renderer::popClipRect(); diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 55072be15..b0503d1ee 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -129,7 +129,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) } const int cutoff = 0; - const int entrySize = font->getHeight() + 5; + const int entrySize = (int)font->getHeight() + 5; int startEntry = 0; @@ -161,7 +161,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(mCursor == i) { Renderer::setMatrix(trans); - Renderer::drawRect(0, (int)y, (int)mSize.x(), font->getHeight(), mSelectorColor); + Renderer::drawRect(0, (int)y, (int)mSize.x(), (int)font->getHeight(), mSelectorColor); } typename IList::Entry& entry = mEntries.at((unsigned int)i); diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index b57cfac52..68103d049 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -85,11 +85,11 @@ void GuiInputConfig::render(const Eigen::Affine3f& parentTrans) stream << "PLAYER " << mTargetConfig->getPlayerNum() + 1 << ", press..."; font->drawText(stream.str(), Eigen::Vector2f(10, 10), 0x000000FF); - int y = 14 + font->getHeight(); + int y = 14 + (int)font->getHeight(); for(int i = 0; i < mCurInputId; i++) { font->drawText(inputDispName[i], Eigen::Vector2f(10, y), 0x00CC00FF); - y += font->getHeight() + 5; + y += (int)font->getHeight() + 5; } if(mCurInputId >= inputCount) diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index e7d85ae28..0c997f61e 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -59,7 +59,8 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, } } - setSize(width, mMsg->getSize().y() + mButtonGrid->getSize().y() + BUTTON_VERT_PADDING); + const float msgHeight = std::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()); + setSize(width, msgHeight + mButtonGrid->getSize().y() + BUTTON_VERT_PADDING); // center for good measure setPosition((Renderer::getScreenWidth() - mSize.x()) / 2.0f, (Renderer::getScreenHeight() - mSize.y()) / 2.0f); diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 638869a66..aa628f73a 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -276,9 +276,9 @@ Eigen::Vector2f Font::sizeText(std::string text) const return Eigen::Vector2f(highestWidth, y); } -int Font::getHeight() const +float Font::getHeight() const { - return (int)(mMaxGlyphHeight * 1.5f * fontScale); + return mMaxGlyphHeight * 1.5f * fontScale; } diff --git a/src/resources/Font.h b/src/resources/Font.h index af4f367b4..2ceefcc1a 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -65,7 +65,7 @@ public: void drawCenteredText(std::string text, float xOffset, float y, unsigned int color); - int getHeight() const; + float getHeight() const; void unload(std::shared_ptr& rm) override; void reload(std::shared_ptr& rm) override; From 07edad611f8a696218e5436127a0b6a85fbb92e6 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 19 Mar 2014 15:03:23 -0500 Subject: [PATCH 202/386] "Fixed" the long-time weird rendering artifacts that are apparently caused by vertex coordinates not being integers. A better fix would be to move to OpenGL 3/GLES 2 and do rounding in the shader. But I don't have time for that. --- DEVNOTES.md | 10 +++++++ src/Renderer.h | 1 + src/Renderer_draw_gl.cpp | 6 +++++ src/Renderer_init_sdlgl.cpp | 10 +++---- src/Util.cpp | 38 ++++++++++++++++++++++++++- src/Util.h | 11 +++++++- src/components/ButtonComponent.cpp | 5 ++-- src/components/ComponentList.cpp | 23 ++++++++-------- src/components/DateTimeComponent.cpp | 3 ++- src/components/ImageComponent.cpp | 6 ++++- src/components/NinePatchComponent.cpp | 10 ++++++- src/components/RatingComponent.cpp | 6 ++++- src/components/SliderComponent.cpp | 7 ++--- src/components/TextComponent.cpp | 7 +++-- src/resources/Font.cpp | 7 +++++ 15 files changed, 120 insertions(+), 30 deletions(-) diff --git a/DEVNOTES.md b/DEVNOTES.md index d9d207aec..808a47f17 100644 --- a/DEVNOTES.md +++ b/DEVNOTES.md @@ -33,3 +33,13 @@ Creating a new GameListView Class ================================= 1. Don't allow the user to navigate to the root node's parent. If you use a stack of some sort to keep track of past cursor states this will be a natural side effect. + + + +Creating a new Component +======================== + +If your component is not made up of other components, and you draw something to the screen with OpenGL, make sure: + +* Your vertex positions are rounded before you render (you can use round(float) in Util.h to do this). +* Your transform matrix's translation is rounded (you can use roundMatrix(affine3f) in Util.h to do this). \ No newline at end of file diff --git a/src/Renderer.h b/src/Renderer.h index bd3cc0d48..c286974ee 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -38,6 +38,7 @@ namespace Renderer void setMatrix(const Eigen::Affine3f& transform); void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); + void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); } #endif diff --git a/src/Renderer_draw_gl.cpp b/src/Renderer_draw_gl.cpp index a5bb90642..2ca93a2e4 100644 --- a/src/Renderer_draw_gl.cpp +++ b/src/Renderer_draw_gl.cpp @@ -6,6 +6,7 @@ #include #include "Log.h" #include +#include "Util.h" namespace Renderer { std::stack clipStack; @@ -87,6 +88,11 @@ namespace Renderer { } } + void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) + { + drawRect((int)round(x), (int)round(y), (int)round(w), (int)round(h), color, blend_sfactor, blend_dfactor); + } + void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) { #ifdef USE_OPENGL_ES diff --git a/src/Renderer_init_sdlgl.cpp b/src/Renderer_init_sdlgl.cpp index aedc1a5d9..f4a5da1ee 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/src/Renderer_init_sdlgl.cpp @@ -43,6 +43,10 @@ namespace Renderer SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + // multisample anti-aliasing + //SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); + //SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2); + #ifdef USE_OPENGL_ES SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); #endif @@ -91,12 +95,6 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(sdlWindow); - //usually display width/height are not specified, i.e. zero, which SDL automatically takes as "native resolution" - //so, since other things rely on the size of the screen (damn currently unnormalized coordinate system), we set it here - //even though the system was already initialized - this makes sure it gets reinitialized to the original resolution when we return from a game - //display_width = sdlWindow->w; - //display_height = sdlWindow->h; - //hide mouse cursor initialCursorState = SDL_ShowCursor(0) == 1; diff --git a/src/Util.cpp b/src/Util.cpp index d96434299..f23f3d0bf 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -19,4 +19,40 @@ std::string& strToUpper(std::string& str) std::string strToUpper(const std::string& str) { return strToUpper(str.c_str()); -} \ No newline at end of file +} + +float round(float num) +{ + return (float)((int)(num + 0.5f)); +} + +Eigen::Affine3f& roundMatrix(Eigen::Affine3f& mat) +{ + mat.translation()[0] = round(mat.translation()[0]); + mat.translation()[1] = round(mat.translation()[1]); + return mat; +} + +Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat) +{ + Eigen::Affine3f ret = mat; + roundMatrix(ret); + return ret; +} + +Eigen::Vector3f roundVector(const Eigen::Vector3f& vec) +{ + Eigen::Vector3f ret = vec; + ret[0] = round(ret[0]); + ret[1] = round(ret[1]); + ret[2] = round(ret[2]); + return ret; +} + +Eigen::Vector2f roundVector(const Eigen::Vector2f& vec) +{ + Eigen::Vector2f ret = vec; + ret[0] = round(ret[0]); + ret[1] = round(ret[1]); + return ret; +} diff --git a/src/Util.h b/src/Util.h index 42c8222d0..c057cb747 100644 --- a/src/Util.h +++ b/src/Util.h @@ -1,5 +1,14 @@ #include +#include std::string strToUpper(const char* from); std::string& strToUpper(std::string& str); -std::string strToUpper(const std::string& str); \ No newline at end of file +std::string strToUpper(const std::string& str); + +Eigen::Affine3f& roundMatrix(Eigen::Affine3f& mat); +Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat); + +Eigen::Vector3f roundVector(const Eigen::Vector3f& vec); +Eigen::Vector2f roundVector(const Eigen::Vector2f& vec); + +float round(float num); diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 3a914113e..75cc8b52d 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -85,13 +85,14 @@ void ButtonComponent::updateImage() void ButtonComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); - + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + mBox.render(trans); if(mTextCache) { Eigen::Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); + centerOffset = roundVector(centerOffset); trans = trans.translate(centerOffset); Renderer::setMatrix(trans); diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 96f3cebe7..c6085ea0a 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -1,4 +1,5 @@ #include "ComponentList.h" +#include "../Util.h" #define TOTAL_HORIZONTAL_PADDING_PX 20 @@ -128,16 +129,16 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) if(!size()) return; - Eigen::Affine3f trans = parentTrans * getTransform(); - + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + // clip everything to be inside our bounds Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), - (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + Eigen::Vector2i((int)round(dim.x()), (int)round(dim.y()))); // scroll the camera - trans.translate(Eigen::Vector3f(0, -mCameraOffset, 0)); + trans.translate(Eigen::Vector3f(0, -round(mCameraOffset), 0)); // draw our entries renderChildren(trans); @@ -154,24 +155,24 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) // (1 - dst) + 0x77 const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); - Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0xFFFFFFFF, + Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0xFFFFFFFF, GL_ONE_MINUS_DST_COLOR, GL_ZERO); - Renderer::drawRect(0, (int)mSelectorBarOffset, (int)mSize.x(), (int)selectedRowHeight, 0x777777FF, + Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0x777777FF, GL_ONE, GL_ONE); // hack to draw 2px dark on left/right of the bar - Renderer::drawRect(0, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); - Renderer::drawRect((int)mSize.x() - 2, (int)mSelectorBarOffset, 2, (int)selectedRowHeight, 0x878787FF); + Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); + Renderer::drawRect(mSize.x() - 2.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); } // draw separators float y = 0; for(unsigned int i = 0; i < mEntries.size(); i++) { - Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C6FF); + Renderer::drawRect(0.0f, y, mSize.x(), 1.0f, 0xC6C7C6FF); y += getRowHeight(mEntries.at(i).data); } - Renderer::drawRect(0, (int)y, (int)mSize.x(), 1, 0xC6C7C6FF); + Renderer::drawRect(0.0f, y, mSize.x(), 1.0f, 0xC6C7C6FF); Renderer::popClipRect(); } diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index a705612ac..aeda8cbc4 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -3,6 +3,7 @@ #include "../Renderer.h" #include "../Window.h" #include "../Log.h" +#include "../Util.h" DateTimeComponent::DateTimeComponent(Window* window) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(DISP_DATE), mRelativeUpdateAccumulator(0), @@ -136,7 +137,7 @@ void DateTimeComponent::update(int deltaTime) void DateTimeComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); Renderer::setMatrix(trans); if(mTextCache) diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index cb5c32723..732b5b2c9 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -5,6 +5,7 @@ #include "../Log.h" #include "../Renderer.h" #include "../ThemeData.h" +#include "../Util.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -136,7 +137,7 @@ void ImageComponent::setColorShift(unsigned int color) void ImageComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); Renderer::setMatrix(trans); if(mTexture && getOpacity() > 0) @@ -172,6 +173,9 @@ void ImageComponent::buildImageArray(int posX, int posY, GLfloat* points, GLfloa points[8] = posX - (mSize.x() * mOrigin.x()); points[9] = posY + (mSize.y() * (1 - mOrigin.y())); points[10] = posX + (mSize.x() * (1 -mOrigin.x())); points[11] = posY + (mSize.y() * (1 - mOrigin.y())); + // round vertices + for(int i = 0; i < 12; i++) + points[i] = round(points[i]); texs[0] = 0; texs[1] = py; diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index 8cda3e697..75615f065 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -3,6 +3,7 @@ #include "../Log.h" #include "../Renderer.h" #include "../ThemeData.h" +#include "../Util.h" NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), mEdgeColor(edgeColor), mCenterColor(centerColor), @@ -121,11 +122,18 @@ void NinePatchComponent::buildVertices() v += 6; } + + // round vertices + for(int i = 0; i < 6*9; i++) + { + mVertices[i].pos = roundVector(mVertices[i].pos); + } } void NinePatchComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + if(mTexture && mVertices != NULL) { Renderer::setMatrix(trans); diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index ec2d04535..dacfd7329 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -1,6 +1,7 @@ #include "RatingComponent.h" #include "../Renderer.h" #include "../Window.h" +#include "../Util.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { @@ -71,11 +72,14 @@ void RatingComponent::updateVertices() mVertices[10].pos << fw, 0.0f; mVertices[10].tex << numStars, 1.0f; mVertices[11] = mVertices[7]; + + for(int i = 0; i < 12; i++) + mVertices[i].pos = roundVector(mVertices[i].pos); } void RatingComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); Renderer::setMatrix(trans); glEnable(GL_TEXTURE_2D); diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 4a2029b06..c9d848838 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -3,6 +3,7 @@ #include "../Renderer.h" #include "../resources/Font.h" #include "../Log.h" +#include "../Util.h" SliderComponent::SliderComponent(Window* window, float min, float max, float increment, const std::string& suffix) : GuiComponent(window), mMin(min), mMax(max), mIncrement(increment), mMoveRate(0), mRepeatWaitTimer(0), mKnob(window), mSuffix(suffix) @@ -74,7 +75,7 @@ void SliderComponent::update(int deltaTime) void SliderComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); Renderer::setMatrix(trans); // render suffix @@ -84,8 +85,8 @@ void SliderComponent::render(const Eigen::Affine3f& parentTrans) float width = mSize.x() - mKnob.getSize().x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0); //render line - const int lineWidth = 2; - Renderer::drawRect((int)mKnob.getSize().x() / 2, (int)mSize.y() / 2 - lineWidth / 2, (int)width, lineWidth, 0x777777FF); + const float lineWidth = 2; + Renderer::drawRect(mKnob.getSize().x() / 2, mSize.y() / 2 - lineWidth / 2, width, lineWidth, 0x777777FF); //render knob mKnob.render(trans); diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index d450c59c2..cd997a66a 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -3,6 +3,7 @@ #include "../Log.h" #include "../Window.h" #include "../ThemeData.h" +#include "../Util.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(Font::get(FONT_SIZE_MEDIUM)), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) @@ -68,11 +69,12 @@ void TextComponent::setCentered(bool center) void TextComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); if(mTextCache) { @@ -80,6 +82,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) { const Eigen::Vector2f& textSize = mTextCache->metrics.size; Eigen::Vector3f off((getSize().x() - textSize.x()) / 2, (getSize().y() - textSize.y()) / 2, 0); + off = roundVector(off); trans.translate(off); Renderer::setMatrix(trans); diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index aa628f73a..7d53c47fc 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -5,6 +5,7 @@ #include "../Renderer.h" #include #include "../Log.h" +#include "../Util.h" FT_Library Font::sLibrary; bool Font::libraryInitialized = false; @@ -475,6 +476,12 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of vert[i + 5].tex[0] = vert[i + 1].tex.x(); vert[i + 5].tex[1] = vert[i + 0].tex.y(); + // round + for(int j = 0; j < 6; j++) + { + vert[i + j].pos = roundVector(vert[i + j].pos); + } + x += charData[letter].advX * fontScale; } From a82ef25886f6960a741b002b46dd234b6a764263 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 19 Mar 2014 20:13:59 -0500 Subject: [PATCH 203/386] Added .svg vector graphics file support. Should "just work" for any TextureResource::get("*.svg"). dynamic_cast it to an SVGResource and call rasterizeAt(w, h) if you need to re-rasterize it. Only supports scaling that maintains aspect ratio. --- CMakeLists.txt | 7 + src/components/ImageComponent.cpp | 7 + src/nanosvg/nanosvg.h | 2525 +++++++++++++++++++++++++++++ src/nanosvg/nanosvg_impl.cpp | 6 + src/nanosvg/nanosvg_license.txt | 18 + src/nanosvg/nanosvgrast.h | 794 +++++++++ src/resources/SVGResource.cpp | 88 + src/resources/SVGResource.h | 25 + src/resources/TextureResource.cpp | 55 +- src/resources/TextureResource.h | 19 +- 10 files changed, 3504 insertions(+), 40 deletions(-) create mode 100644 src/nanosvg/nanosvg.h create mode 100644 src/nanosvg/nanosvg_impl.cpp create mode 100644 src/nanosvg/nanosvg_license.txt create mode 100644 src/nanosvg/nanosvgrast.h create mode 100644 src/resources/SVGResource.cpp create mode 100644 src/resources/SVGResource.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d24e30115..c60009dfb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,6 +200,9 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg/nanosvg.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg/nanosvgrast.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.h @@ -216,6 +219,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h ${CMAKE_CURRENT_SOURCE_DIR}/data/Resources.h ) @@ -279,8 +283,11 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg/nanosvg_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.cpp diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 732b5b2c9..0d9e7410d 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -6,6 +6,7 @@ #include "../Renderer.h" #include "../ThemeData.h" #include "../Util.h" +#include "../resources/SVGResource.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -73,6 +74,12 @@ void ImageComponent::resize() } } } + + SVGResource* svg = dynamic_cast(mTexture.get()); + if(svg) + { + svg->rasterizeAt((int)mSize.x(), (int)mSize.y()); + } } void ImageComponent::setImage(std::string path, bool tile) diff --git a/src/nanosvg/nanosvg.h b/src/nanosvg/nanosvg.h new file mode 100644 index 000000000..99bd608b9 --- /dev/null +++ b/src/nanosvg/nanosvg.h @@ -0,0 +1,2525 @@ +/* + * Copyright (c) 2013-14 Mikko Mononen memon@inside.org + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * The SVG parser is based on Anti-Graim Geometry 2.4 SVG example + * Copyright (C) 2002-2004 Maxim Shemanarev (McSeem) (http://www.antigrain.com/) + * + * Arc calculation code based on canvg (https://code.google.com/p/canvg/) + * + * Bounding box calculation based on http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + * + */ + +#ifndef NANOSVG_H +#define NANOSVG_H + +#ifdef __cplusplus +extern "C" { +#endif + +// NanoSVG is a simple stupid single-header-file SVG parse. The output of the parser is a list of cubic bezier shapes. +// +// The library suits well for anything from rendering scalable icons in your editor application to prototyping a game. +// +// NanoSVG supports a wide range of SVG features, but something may be missing, feel free to create a pull request! +// +// The shapes in the SVG images are transformed by the viewBox and converted to specified units. +// That is, you should get the same looking data as your designed in your favorite app. +// +// NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose +// to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters. +// +// The units passed to NanoVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'. +// DPI (dots-per-inch) controls how the unit conversion is done. +// +// If you don't know or care about the units stuff, "px" and 96 should get you going. + + +/* Example Usage: + // Load + struct SNVGImage* image; + image = nsvgParseFromFile("test.svg", "px", 96); + printf("size: %f x %f\n", image->width, image->height); + // Use... + for (shape = image->shapes; shape != NULL; shape = shape->next) { + for (path = shape->paths; path != NULL; path = path->next) { + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; + drawCubicBez(p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7]); + } + } + } + // Delete + nsvgDelete(image); +*/ + +#define NSVG_PAINT_NONE 0 +#define NSVG_PAINT_COLOR 1 +#define NSVG_PAINT_LINEAR_GRADIENT 2 +#define NSVG_PAINT_RADIAL_GRADIENT 3 + +#define NSVG_SPREAD_PAD 0 +#define NSVG_SPREAD_REFLECT 1 +#define NSVG_SPREAD_REPEAT 2 + +struct NSVGgradientStop { + unsigned int color; + float offset; +}; + +struct NSVGgradient { + float xform[6]; + char spread; + float fx, fy; + int nstops; + struct NSVGgradientStop stops[1]; +}; + +struct NSVGpaint { + char type; + union { + unsigned int color; + struct NSVGgradient* gradient; + }; +}; + +struct NSVGpath +{ + float* pts; // Cubic bezier points: x0,y0, [cpx1,cpx1,cpx2,cpy2,x1,y1], ... + int npts; // Total number of bezier points. + char closed; // Flag indicating if shapes should be treated as closed. + float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. + struct NSVGpath* next; // Pointer to next path, or NULL if last element. +}; + +struct NSVGshape +{ + struct NSVGpaint fill; // Fill paint + struct NSVGpaint stroke; // Stroke paint + float strokeWidth; // Stroke width (scaled) + float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. + struct NSVGpath* paths; // Linked list of paths in the image. + struct NSVGshape* next; // Pointer to next shape, or NULL if last element. +}; + +struct NSVGimage +{ + float width; // Width of the image. + float height; // Height of the image. + struct NSVGshape* shapes; // Linked list of shapes in the image. +}; + +// Parses SVG file from a file, returns SVG image as paths. +struct NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi); + +// Parses SVG file from a null terminated string, returns SVG image as paths. +struct NSVGimage* nsvgParse(char* input, const char* units, float dpi); + +// Deletes list of paths. +void nsvgDelete(struct NSVGimage* image); + +#ifdef __cplusplus +}; +#endif + +#endif // NANOSVG_H + +#ifdef NANOSVG_IMPLEMENTATION + +#include +#include +#include + +#define NSVG_PI (3.14159265358979323846264338327f) +#define NSVG_KAPPA90 (0.5522847493f) // Lenght proportional to radius of a cubic bezier handle for 90deg arcs. + +#define NSVG_ALIGN_MIN 0 +#define NSVG_ALIGN_MID 1 +#define NSVG_ALIGN_MAX 2 +#define NSVG_ALIGN_NONE 0 +#define NSVG_ALIGN_MEET 1 +#define NSVG_ALIGN_SLICE 2 + +#ifdef _MSC_VER + #pragma warning (disable: 4996) // Switch off security warnings + #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings + #ifdef __cplusplus + #define NSVG_INLINE inline + #else + #define NSVG_INLINE + #endif +#else + #define NSVG_INLINE inline +#endif + + +static int nsvg__isspace(char c) +{ + return strchr(" \t\n\v\f\r", c) != 0; +} + +static int nsvg__isdigit(char c) +{ + return strchr("0123456789", c) != 0; +} + +static int nsvg__isnum(char c) +{ + return strchr("0123456789+-.eE", c) != 0; +} + +static NSVG_INLINE float nsvg__minf(float a, float b) { return a < b ? a : b; } +static NSVG_INLINE float nsvg__maxf(float a, float b) { return a > b ? a : b; } + + +// Simple XML parser + +#define NSVG_XML_TAG 1 +#define NSVG_XML_CONTENT 2 +#define NSVG_XML_MAX_ATTRIBS 256 + +static void nsvg__parseContent(char* s, + void (*contentCb)(void* ud, const char* s), + void* ud) +{ + // Trim start white spaces + while (*s && nsvg__isspace(*s)) s++; + if (!*s) return; + + if (contentCb) + (*contentCb)(ud, s); +} + +static void nsvg__parseElement(char* s, + void (*startelCb)(void* ud, const char* el, const char** attr), + void (*endelCb)(void* ud, const char* el), + void* ud) +{ + const char* attr[NSVG_XML_MAX_ATTRIBS]; + int nattr = 0; + char* name; + int start = 0; + int end = 0; + + // Skip white space after the '<' + while (*s && nsvg__isspace(*s)) s++; + + // Check if the tag is end tag + if (*s == '/') { + s++; + end = 1; + } else { + start = 1; + } + + // Skip comments, data and preprocessor stuff. + if (!*s || *s == '?' || *s == '!') + return; + + // Get tag name + name = s; + while (*s && !nsvg__isspace(*s)) s++; + if (*s) { *s++ = '\0'; } + + // Get attribs + while (!end && *s && nattr < NSVG_XML_MAX_ATTRIBS-3) { + // Skip white space before the attrib name + while (*s && nsvg__isspace(*s)) s++; + if (!*s) break; + if (*s == '/') { + end = 1; + break; + } + attr[nattr++] = s; + // Find end of the attrib name. + while (*s && !nsvg__isspace(*s) && *s != '=') s++; + if (*s) { *s++ = '\0'; } + // Skip until the beginning of the value. + while (*s && *s != '\"') s++; + if (!*s) break; + s++; + // Store value and find the end of it. + attr[nattr++] = s; + while (*s && *s != '\"') s++; + if (*s) { *s++ = '\0'; } + } + + // List terminator + attr[nattr++] = 0; + attr[nattr++] = 0; + + // Call callbacks. + if (start && startelCb) + (*startelCb)(ud, name, attr); + if (end && endelCb) + (*endelCb)(ud, name); +} + +int nsvg__parseXML(char* input, + void (*startelCb)(void* ud, const char* el, const char** attr), + void (*endelCb)(void* ud, const char* el), + void (*contentCb)(void* ud, const char* s), + void* ud) +{ + char* s = input; + char* mark = s; + int state = NSVG_XML_CONTENT; + while (*s) { + if (*s == '<' && state == NSVG_XML_CONTENT) { + // Start of a tag + *s++ = '\0'; + nsvg__parseContent(mark, contentCb, ud); + mark = s; + state = NSVG_XML_TAG; + } else if (*s == '>' && state == NSVG_XML_TAG) { + // Start of a content or new tag. + *s++ = '\0'; + nsvg__parseElement(mark, startelCb, endelCb, ud); + mark = s; + state = NSVG_XML_CONTENT; + } else { + s++; + } + } + + return 1; +} + + +/* Simple SVG parser. */ + +#define NSVG_MAX_ATTR 128 + +#define NSVG_USER_SPACE 0 +#define NSVG_OBJECT_SPACE 1 + +struct NSVGgradientData +{ + char id[64]; + char ref[64]; + char type; + union { + struct { + float x1, y1, x2, y2; + } linear; + struct { + float cx, cy, r, fx, fy; + } radial; + }; + char spread; + char units; + float xform[6]; + int nstops; + struct NSVGgradientStop* stops; + struct NSVGgradientData* next; +}; + +struct NSVGattrib +{ + float xform[6]; + unsigned int fillColor; + unsigned int strokeColor; + float fillOpacity; + float strokeOpacity; + char fillGradient[64]; + char strokeGradient[64]; + float strokeWidth; + float fontSize; + unsigned int stopColor; + float stopOpacity; + float stopOffset; + char hasFill; + char hasStroke; + char visible; +}; + +struct NSVGparser +{ + struct NSVGattrib attr[NSVG_MAX_ATTR]; + int attrHead; + float* pts; + int npts; + int cpts; + struct NSVGpath* plist; + struct NSVGimage* image; + struct NSVGgradientData* gradients; + float viewMinx, viewMiny, viewWidth, viewHeight; + int alignX, alignY, alignType; + float dpi; + char pathFlag; + char defsFlag; +}; + +static void nsvg__xformIdentity(float* t) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = 0.0f; t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetTranslation(float* t, float tx, float ty) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = 0.0f; t[3] = 1.0f; + t[4] = tx; t[5] = ty; +} + +static void nsvg__xformSetScale(float* t, float sx, float sy) +{ + t[0] = sx; t[1] = 0.0f; + t[2] = 0.0f; t[3] = sy; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetSkewX(float* t, float a) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = tanf(a); t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetSkewY(float* t, float a) +{ + t[0] = 1.0f; t[1] = tanf(a); + t[2] = 0.0f; t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformSetRotation(float* t, float a) +{ + float cs = cosf(a), sn = sinf(a); + t[0] = cs; t[1] = sn; + t[2] = -sn; t[3] = cs; + t[4] = 0.0f; t[5] = 0.0f; +} + +static void nsvg__xformMultiply(float* t, float* s) +{ + float t0 = t[0] * s[0] + t[1] * s[2]; + float t2 = t[2] * s[0] + t[3] * s[2]; + float t4 = t[4] * s[0] + t[5] * s[2] + s[4]; + t[1] = t[0] * s[1] + t[1] * s[3]; + t[3] = t[2] * s[1] + t[3] * s[3]; + t[5] = t[4] * s[1] + t[5] * s[3] + s[5]; + t[0] = t0; + t[2] = t2; + t[4] = t4; +} + +static void nsvg__xformInverse(float* inv, float* t) +{ + double det = (double)t[0] * t[3] - (double)t[2] * t[1]; + if (det > -1e-6 && det < -1e-6) { + nsvg__xformIdentity(t); + return; + } + double invdet = 1.0 / det; + inv[0] = (float)(t[3] * invdet); + inv[2] = (float)(-t[2] * invdet); + inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet); + inv[1] = (float)(-t[1] * invdet); + inv[3] = (float)(t[0] * invdet); + inv[5] = (float)(((double)t[1] * t[4] - (double)t[0] * t[5]) * invdet); +} + +static void nsvg__xformPremultiply(float* t, float* s) +{ + float s2[6]; + memcpy(s2, s, sizeof(float)*6); + nsvg__xformMultiply(s2, t); + memcpy(t, s2, sizeof(float)*6); +} + +static void nsvg__xformPoint(float* dx, float* dy, float x, float y, float* t) +{ + *dx = x*t[0] + y*t[2] + t[4]; + *dy = x*t[1] + y*t[3] + t[5]; +} + +static void nsvg__xformVec(float* dx, float* dy, float x, float y, float* t) +{ + *dx = x*t[0] + y*t[2]; + *dy = x*t[1] + y*t[3]; +} + +#define NSVG_EPSILON (1e-12) + +static int nsvg__ptInBounds(float* pt, float* bounds) +{ + return pt[0] >= bounds[0] && pt[0] <= bounds[2] && pt[1] >= bounds[1] && pt[1] <= bounds[3]; +} + + +static double nsvg__evalBezier(double t, double p0, double p1, double p2, double p3) +{ + float it = 1.0-t; + return it*it*it*p0 + 3.0*it*it*t*p1 + 3.0*it*t*t*p2 + t*t*t*p3; +} + +static void nsvg__curveBounds(float* bounds, float* curve) +{ + int i, j, count; + double roots[2], a, b, c, b2ac, t, v; + float* v0 = &curve[0]; + float* v1 = &curve[2]; + float* v2 = &curve[4]; + float* v3 = &curve[6]; + + // Start the bounding box by end points + bounds[0] = nsvg__minf(v0[0], v3[0]); + bounds[1] = nsvg__minf(v0[1], v3[1]); + bounds[2] = nsvg__maxf(v0[0], v3[0]); + bounds[3] = nsvg__maxf(v0[1], v3[1]); + + // Bezier curve fits inside the convex hull of it's control points. + // If control points are inside the bounds, we're done. + if (nsvg__ptInBounds(v1, bounds) && nsvg__ptInBounds(v2, bounds)) + return; + + // Add bezier curve inflection points in X and Y. + for (i = 0; i < 2; i++) { + a = -3.0 * v0[i] + 9.0 * v1[i] - 9.0 * v2[i] + 3.0 * v3[i]; + b = 6.0 * v0[i] - 12.0 * v1[i] + 6.0 * v2[i]; + c = 3.0 * v1[i] - 3.0 * v0[i]; + count = 0; + if (fabs(a) < NSVG_EPSILON) { + if (fabs(b) > NSVG_EPSILON) { + t = -c / b; + if (t > NSVG_EPSILON && t < 1.0-NSVG_EPSILON) + roots[count++] = t; + } + } else { + b2ac = b*b - 4.0*c*a; + if (b2ac > NSVG_EPSILON) { + t = (-b + sqrt(b2ac)) / (2.0 * a); + if (t > NSVG_EPSILON && t < 1.0-NSVG_EPSILON) + roots[count++] = t; + t = (-b - sqrt(b2ac)) / (2.0 * a); + if (t > NSVG_EPSILON && t < 1.0-NSVG_EPSILON) + roots[count++] = t; + } + } + for (j = 0; j < count; j++) { + v = nsvg__evalBezier(roots[j], v0[i], v1[i], v2[i], v3[i]); + bounds[0+i] = nsvg__minf(bounds[0+i], (float)v); + bounds[2+i] = nsvg__maxf(bounds[2+i], (float)v); + } + } +} + +static struct NSVGparser* nsvg__createParser() +{ + struct NSVGparser* p; + p = (struct NSVGparser*)malloc(sizeof(struct NSVGparser)); + if (p == NULL) goto error; + memset(p, 0, sizeof(struct NSVGparser)); + + p->image = (struct NSVGimage*)malloc(sizeof(struct NSVGimage)); + if (p->image == NULL) goto error; + memset(p->image, 0, sizeof(struct NSVGimage)); + + // Init style + nsvg__xformIdentity(p->attr[0].xform); + p->attr[0].fillColor = 0; + p->attr[0].strokeColor = 0; + p->attr[0].fillOpacity = 1; + p->attr[0].strokeOpacity = 1; + p->attr[0].stopOpacity = 1; + p->attr[0].strokeWidth = 1; + p->attr[0].hasFill = 0; + p->attr[0].hasStroke = 0; + p->attr[0].visible = 1; + + return p; + +error: + if (p) { + if (p->image) free(p->image); + free(p); + } + return NULL; +} + +static void nsvg__deletePaths(struct NSVGpath* path) +{ + while (path) { + struct NSVGpath *next = path->next; + if (path->pts != NULL) + free(path->pts); + free(path); + path = next; + } +} + +static void nsvg__deletePaint(struct NSVGpaint* paint) +{ + if (paint->type == NSVG_PAINT_LINEAR_GRADIENT || paint->type == NSVG_PAINT_LINEAR_GRADIENT) + free(paint->gradient); +} + +static void nsvg__deleteGradientData(struct NSVGgradientData* grad) +{ + struct NSVGgradientData* next; + while (grad != NULL) { + next = grad->next; + free(grad->stops); + free(grad); + grad = next; + } +} + +static void nsvg__deleteParser(struct NSVGparser* p) +{ + if (p != NULL) { + nsvg__deletePaths(p->plist); + nsvg__deleteGradientData(p->gradients); + nsvgDelete(p->image); + free(p->pts); + free(p); + } +} + +static void nsvg__resetPath(struct NSVGparser* p) +{ + p->npts = 0; +} + +static void nsvg__addPoint(struct NSVGparser* p, float x, float y) +{ + if (p->npts+1 > p->cpts) { + p->cpts = p->cpts ? p->cpts*2 : 8; + p->pts = (float*)realloc(p->pts, p->cpts*2*sizeof(float)); + if (!p->pts) return; + } + p->pts[p->npts*2+0] = x; + p->pts[p->npts*2+1] = y; + p->npts++; +} + +static void nsvg__moveTo(struct NSVGparser* p, float x, float y) +{ + nsvg__addPoint(p, x, y); +} + +static void nsvg__lineTo(struct NSVGparser* p, float x, float y) +{ + float px,py, dx,dy; + if (p->npts > 0) { + px = p->pts[(p->npts-1)*2+0]; + py = p->pts[(p->npts-1)*2+1]; + dx = x - px; + dy = y - py; + nsvg__addPoint(p, px + dx/3.0f, py + dy/3.0f); + nsvg__addPoint(p, x - dx/3.0f, y - dy/3.0f); + nsvg__addPoint(p, x, y); + } +} + +static void nsvg__cubicBezTo(struct NSVGparser* p, float cpx1, float cpy1, float cpx2, float cpy2, float x, float y) +{ + nsvg__addPoint(p, cpx1, cpy1); + nsvg__addPoint(p, cpx2, cpy2); + nsvg__addPoint(p, x, y); +} + +static struct NSVGattrib* nsvg__getAttr(struct NSVGparser* p) +{ + return &p->attr[p->attrHead]; +} + +static void nsvg__pushAttr(struct NSVGparser* p) +{ + if (p->attrHead < NSVG_MAX_ATTR-1) { + p->attrHead++; + memcpy(&p->attr[p->attrHead], &p->attr[p->attrHead-1], sizeof(struct NSVGattrib)); + } +} + +static void nsvg__popAttr(struct NSVGparser* p) +{ + if (p->attrHead > 0) + p->attrHead--; +} + +static struct NSVGgradientData* nsvg__findGradientData(struct NSVGparser* p, const char* id) +{ + struct NSVGgradientData* grad = p->gradients; + while (grad) { + if (strcmp(grad->id, id) == 0) + return grad; + } + return NULL; +} + +static struct NSVGgradient* nsvg__createGradient(struct NSVGparser* p, const char* id, const float* bounds, char* paintType) +{ + struct NSVGattrib* attr = nsvg__getAttr(p); + struct NSVGgradientData* data = NULL; + struct NSVGgradientData* ref = NULL; + struct NSVGgradientStop* stops = NULL; + struct NSVGgradient* grad; + float dx, dy, d; + int nstops = 0; + + data = nsvg__findGradientData(p, id); + if (data == NULL) return NULL; + + // TODO: use ref to fill in all unset values too. + ref = data; + while (ref != NULL) { + if (ref->stops != NULL) { + stops = ref->stops; + nstops = ref->nstops; + break; + } + ref = nsvg__findGradientData(p, ref->ref); + } + if (stops == NULL) return NULL; + + grad = (struct NSVGgradient*)malloc(sizeof(struct NSVGgradient) + sizeof(struct NSVGgradientStop)*(nstops-1)); + if (grad == NULL) return NULL; + + // TODO: handle data->units == NSVG_OBJECT_SPACE. + + if (data->type == NSVG_PAINT_LINEAR_GRADIENT) { + // Calculate transform aligned to the line + dx = data->linear.x2 - data->linear.x1; + dy = data->linear.y2 - data->linear.y1; + d = sqrtf(dx*dx + dy*dy); + grad->xform[0] = dy; grad->xform[1] = -dx; + grad->xform[2] = dx; grad->xform[3] = dy; + grad->xform[4] = data->linear.x1; grad->xform[5] = data->linear.y1; + } else { + // Calculate transform aligned to the circle + grad->xform[0] = data->radial.r; grad->xform[1] = 0; + grad->xform[2] = 0; grad->xform[3] = data->radial.r; + grad->xform[4] = data->radial.cx; grad->xform[5] = data->radial.cy; + grad->fx = data->radial.fx / data->radial.r; + grad->fy = data->radial.fy / data->radial.r; + } + + nsvg__xformMultiply(grad->xform, attr->xform); + nsvg__xformMultiply(grad->xform, data->xform); + + grad->spread = data->spread; + memcpy(grad->stops, stops, nstops*sizeof(struct NSVGgradientStop)); + grad->nstops = nstops; + + *paintType = data->type; + + return grad; +} + +static void nsvg__addShape(struct NSVGparser* p) +{ + struct NSVGattrib* attr = nsvg__getAttr(p); + float scale = 1.0f; + struct NSVGshape *shape, *cur, *prev; + struct NSVGpath* path; + + if (p->plist == NULL) + return; + + shape = (struct NSVGshape*)malloc(sizeof(struct NSVGshape)); + if (shape == NULL) goto error; + memset(shape, 0, sizeof(struct NSVGshape)); + + scale = nsvg__maxf(fabsf(attr->xform[0]), fabsf(attr->xform[3])); + shape->strokeWidth = attr->strokeWidth * scale; + + shape->paths = p->plist; + p->plist = NULL; + + // Calculate shape bounds + shape->bounds[0] = shape->paths->bounds[0]; + shape->bounds[1] = shape->paths->bounds[1]; + shape->bounds[2] = shape->paths->bounds[2]; + shape->bounds[3] = shape->paths->bounds[3]; + for (path = shape->paths->next; path != NULL; path = path->next) { + shape->bounds[0] = nsvg__minf(shape->bounds[0], path->bounds[0]); + shape->bounds[1] = nsvg__minf(shape->bounds[1], path->bounds[1]); + shape->bounds[2] = nsvg__maxf(shape->bounds[2], path->bounds[2]); + shape->bounds[3] = nsvg__maxf(shape->bounds[3], path->bounds[3]); + } + + // Set fill + if (attr->hasFill == 0) { + shape->fill.type = NSVG_PAINT_NONE; + } else if (attr->hasFill == 1) { + shape->fill.type = NSVG_PAINT_COLOR; + shape->fill.color = attr->fillColor; + shape->fill.color |= (unsigned int)(attr->fillOpacity*255) << 24; + } else if (attr->hasFill == 2) { + shape->fill.gradient = nsvg__createGradient(p, attr->fillGradient, shape->bounds, &shape->fill.type); + if (shape->fill.gradient == NULL) { + shape->fill.type = NSVG_PAINT_NONE; + } + } + + // Set stroke + if (attr->hasStroke == 0) { + shape->stroke.type = NSVG_PAINT_NONE; + } else if (attr->hasStroke == 1) { + shape->stroke.type = NSVG_PAINT_COLOR; + shape->stroke.color = attr->strokeColor; + shape->stroke.color |= (unsigned int)(attr->strokeOpacity*255) << 24; + } else if (attr->hasStroke == 2) { + shape->stroke.gradient = nsvg__createGradient(p, attr->strokeGradient, shape->bounds, &shape->stroke.type); + if (shape->stroke.gradient == NULL) + shape->stroke.type = NSVG_PAINT_NONE; + } + + // Add to tail + prev = NULL; + cur = p->image->shapes; + while (cur != NULL) { + prev = cur; + cur = cur->next; + } + if (prev == NULL) + p->image->shapes = shape; + else + prev->next = shape; + + return; + +error: + if (shape) free(shape); +} + +static void nsvg__addPath(struct NSVGparser* p, char closed) +{ + struct NSVGattrib* attr = nsvg__getAttr(p); + struct NSVGpath* path = NULL; + float bounds[4]; + float* curve; + int i; + + if (p->npts == 0) + return; + + if (closed) + nsvg__lineTo(p, p->pts[0], p->pts[1]); + + path = (struct NSVGpath*)malloc(sizeof(struct NSVGpath)); + if (path == NULL) goto error; + memset(path, 0, sizeof(struct NSVGpath)); + + path->pts = (float*)malloc(p->npts*2*sizeof(float)); + if (path->pts == NULL) goto error; + path->closed = closed; + path->npts = p->npts; + + // Transform path. + for (i = 0; i < p->npts; ++i) + nsvg__xformPoint(&path->pts[i*2], &path->pts[i*2+1], p->pts[i*2], p->pts[i*2+1], attr->xform); + + // Find bounds + for (i = 0; i < path->npts-1; i += 3) { + curve = &path->pts[i*2]; + nsvg__curveBounds(bounds, curve); + if (i == 0) { + path->bounds[0] = bounds[0]; + path->bounds[1] = bounds[1]; + path->bounds[2] = bounds[2]; + path->bounds[3] = bounds[3]; + } else { + path->bounds[0] = nsvg__minf(path->bounds[0], bounds[0]); + path->bounds[1] = nsvg__minf(path->bounds[1], bounds[1]); + path->bounds[2] = nsvg__maxf(path->bounds[2], bounds[2]); + path->bounds[3] = nsvg__maxf(path->bounds[3], bounds[3]); + } + } + + path->next = p->plist; + p->plist = path; + + return; + +error: + if (path != NULL) { + if (path->pts != NULL) free(path->pts); + free(path); + } +} + +static const char* nsvg__getNextPathItem(const char* s, char* it) +{ + int i = 0; + it[0] = '\0'; + // Skip white spaces and commas + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + if (!*s) return s; + if (*s == '-' || *s == '+' || nsvg__isdigit(*s)) { + // sign + if (*s == '-' || *s == '+') { + if (i < 63) it[i++] = *s; + s++; + } + // integer part + while (*s && nsvg__isdigit(*s)) { + if (i < 63) it[i++] = *s; + s++; + } + if (*s == '.') { + // decimal point + if (i < 63) it[i++] = *s; + s++; + // fraction part + while (*s && nsvg__isdigit(*s)) { + if (i < 63) it[i++] = *s; + s++; + } + } + // exponent + if (*s == 'e' || *s == 'E') { + if (i < 63) it[i++] = *s; + s++; + if (*s == '-' || *s == '+') { + if (i < 63) it[i++] = *s; + s++; + } + while (*s && nsvg__isdigit(*s)) { + if (i < 63) it[i++] = *s; + s++; + } + } + it[i] = '\0'; + } else { + // Parse command + it[0] = *s++; + it[1] = '\0'; + return s; + } + + return s; +} + +static float nsvg__actualWidth(struct NSVGparser* p) +{ + return p->viewWidth; +} + +static float nsvg__actualHeight(struct NSVGparser* p) +{ + return p->viewHeight; +} + +static float nsvg__actualLength(struct NSVGparser* p) +{ + float w = nsvg__actualWidth(p), h = nsvg__actualHeight(p); + return sqrtf(w*w + h*h) / sqrtf(2.0f); +} + + +#define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) + +static unsigned int nsvg__parseColorHex(const char* str) +{ + unsigned int c = 0, r = 0, g = 0, b = 0; + int n = 0; + str++; // skip # + // Calculate number of characters. + while(str[n] && !nsvg__isspace(str[n])) + n++; + if (n == 6) { + sscanf(str, "%x", &c); + } else if (n == 3) { + sscanf(str, "%x", &c); + c = (c&0xf) | ((c&0xf0) << 4) | ((c&0xf00) << 8); + c |= c<<4; + } + r = (c >> 16) & 0xff; + g = (c >> 8) & 0xff; + b = c & 0xff; + return NSVG_RGB(r,g,b); +} + +static unsigned int nsvg__parseColorRGB(const char* str) +{ + int r = -1, g = -1, b = -1; + char s1[32]="", s2[32]=""; + sscanf(str + 4, "%d%[%%, \t]%d%[%%, \t]%d", &r, s1, &g, s2, &b); + if (strchr(s1, '%')) { + return NSVG_RGB((r*255)/100,(g*255)/100,(b*255)/100); + } else { + return NSVG_RGB(r,g,b); + } +} + +struct NSVGNamedColor { + const char* name; + unsigned int color; +}; + +struct NSVGNamedColor nsvg__colors[] = { + + { "red", NSVG_RGB(255, 0, 0) }, + { "green", NSVG_RGB( 0, 128, 0) }, + { "blue", NSVG_RGB( 0, 0, 255) }, + { "yellow", NSVG_RGB(255, 255, 0) }, + { "cyan", NSVG_RGB( 0, 255, 255) }, + { "magenta", NSVG_RGB(255, 0, 255) }, + { "black", NSVG_RGB( 0, 0, 0) }, + { "grey", NSVG_RGB(128, 128, 128) }, + { "gray", NSVG_RGB(128, 128, 128) }, + { "white", NSVG_RGB(255, 255, 255) }, + +#ifdef NANOSVG_ALL_COLOR_KEYWORDS + { "aliceblue", NSVG_RGB(240, 248, 255) }, + { "antiquewhite", NSVG_RGB(250, 235, 215) }, + { "aqua", NSVG_RGB( 0, 255, 255) }, + { "aquamarine", NSVG_RGB(127, 255, 212) }, + { "azure", NSVG_RGB(240, 255, 255) }, + { "beige", NSVG_RGB(245, 245, 220) }, + { "bisque", NSVG_RGB(255, 228, 196) }, + { "blanchedalmond", NSVG_RGB(255, 235, 205) }, + { "blueviolet", NSVG_RGB(138, 43, 226) }, + { "brown", NSVG_RGB(165, 42, 42) }, + { "burlywood", NSVG_RGB(222, 184, 135) }, + { "cadetblue", NSVG_RGB( 95, 158, 160) }, + { "chartreuse", NSVG_RGB(127, 255, 0) }, + { "chocolate", NSVG_RGB(210, 105, 30) }, + { "coral", NSVG_RGB(255, 127, 80) }, + { "cornflowerblue", NSVG_RGB(100, 149, 237) }, + { "cornsilk", NSVG_RGB(255, 248, 220) }, + { "crimson", NSVG_RGB(220, 20, 60) }, + { "darkblue", NSVG_RGB( 0, 0, 139) }, + { "darkcyan", NSVG_RGB( 0, 139, 139) }, + { "darkgoldenrod", NSVG_RGB(184, 134, 11) }, + { "darkgray", NSVG_RGB(169, 169, 169) }, + { "darkgreen", NSVG_RGB( 0, 100, 0) }, + { "darkgrey", NSVG_RGB(169, 169, 169) }, + { "darkkhaki", NSVG_RGB(189, 183, 107) }, + { "darkmagenta", NSVG_RGB(139, 0, 139) }, + { "darkolivegreen", NSVG_RGB( 85, 107, 47) }, + { "darkorange", NSVG_RGB(255, 140, 0) }, + { "darkorchid", NSVG_RGB(153, 50, 204) }, + { "darkred", NSVG_RGB(139, 0, 0) }, + { "darksalmon", NSVG_RGB(233, 150, 122) }, + { "darkseagreen", NSVG_RGB(143, 188, 143) }, + { "darkslateblue", NSVG_RGB( 72, 61, 139) }, + { "darkslategray", NSVG_RGB( 47, 79, 79) }, + { "darkslategrey", NSVG_RGB( 47, 79, 79) }, + { "darkturquoise", NSVG_RGB( 0, 206, 209) }, + { "darkviolet", NSVG_RGB(148, 0, 211) }, + { "deeppink", NSVG_RGB(255, 20, 147) }, + { "deepskyblue", NSVG_RGB( 0, 191, 255) }, + { "dimgray", NSVG_RGB(105, 105, 105) }, + { "dimgrey", NSVG_RGB(105, 105, 105) }, + { "dodgerblue", NSVG_RGB( 30, 144, 255) }, + { "firebrick", NSVG_RGB(178, 34, 34) }, + { "floralwhite", NSVG_RGB(255, 250, 240) }, + { "forestgreen", NSVG_RGB( 34, 139, 34) }, + { "fuchsia", NSVG_RGB(255, 0, 255) }, + { "gainsboro", NSVG_RGB(220, 220, 220) }, + { "ghostwhite", NSVG_RGB(248, 248, 255) }, + { "gold", NSVG_RGB(255, 215, 0) }, + { "goldenrod", NSVG_RGB(218, 165, 32) }, + { "greenyellow", NSVG_RGB(173, 255, 47) }, + { "honeydew", NSVG_RGB(240, 255, 240) }, + { "hotpink", NSVG_RGB(255, 105, 180) }, + { "indianred", NSVG_RGB(205, 92, 92) }, + { "indigo", NSVG_RGB( 75, 0, 130) }, + { "ivory", NSVG_RGB(255, 255, 240) }, + { "khaki", NSVG_RGB(240, 230, 140) }, + { "lavender", NSVG_RGB(230, 230, 250) }, + { "lavenderblush", NSVG_RGB(255, 240, 245) }, + { "lawngreen", NSVG_RGB(124, 252, 0) }, + { "lemonchiffon", NSVG_RGB(255, 250, 205) }, + { "lightblue", NSVG_RGB(173, 216, 230) }, + { "lightcoral", NSVG_RGB(240, 128, 128) }, + { "lightcyan", NSVG_RGB(224, 255, 255) }, + { "lightgoldenrodyellow", NSVG_RGB(250, 250, 210) }, + { "lightgray", NSVG_RGB(211, 211, 211) }, + { "lightgreen", NSVG_RGB(144, 238, 144) }, + { "lightgrey", NSVG_RGB(211, 211, 211) }, + { "lightpink", NSVG_RGB(255, 182, 193) }, + { "lightsalmon", NSVG_RGB(255, 160, 122) }, + { "lightseagreen", NSVG_RGB( 32, 178, 170) }, + { "lightskyblue", NSVG_RGB(135, 206, 250) }, + { "lightslategray", NSVG_RGB(119, 136, 153) }, + { "lightslategrey", NSVG_RGB(119, 136, 153) }, + { "lightsteelblue", NSVG_RGB(176, 196, 222) }, + { "lightyellow", NSVG_RGB(255, 255, 224) }, + { "lime", NSVG_RGB( 0, 255, 0) }, + { "limegreen", NSVG_RGB( 50, 205, 50) }, + { "linen", NSVG_RGB(250, 240, 230) }, + { "maroon", NSVG_RGB(128, 0, 0) }, + { "mediumaquamarine", NSVG_RGB(102, 205, 170) }, + { "mediumblue", NSVG_RGB( 0, 0, 205) }, + { "mediumorchid", NSVG_RGB(186, 85, 211) }, + { "mediumpurple", NSVG_RGB(147, 112, 219) }, + { "mediumseagreen", NSVG_RGB( 60, 179, 113) }, + { "mediumslateblue", NSVG_RGB(123, 104, 238) }, + { "mediumspringgreen", NSVG_RGB( 0, 250, 154) }, + { "mediumturquoise", NSVG_RGB( 72, 209, 204) }, + { "mediumvioletred", NSVG_RGB(199, 21, 133) }, + { "midnightblue", NSVG_RGB( 25, 25, 112) }, + { "mintcream", NSVG_RGB(245, 255, 250) }, + { "mistyrose", NSVG_RGB(255, 228, 225) }, + { "moccasin", NSVG_RGB(255, 228, 181) }, + { "navajowhite", NSVG_RGB(255, 222, 173) }, + { "navy", NSVG_RGB( 0, 0, 128) }, + { "oldlace", NSVG_RGB(253, 245, 230) }, + { "olive", NSVG_RGB(128, 128, 0) }, + { "olivedrab", NSVG_RGB(107, 142, 35) }, + { "orange", NSVG_RGB(255, 165, 0) }, + { "orangered", NSVG_RGB(255, 69, 0) }, + { "orchid", NSVG_RGB(218, 112, 214) }, + { "palegoldenrod", NSVG_RGB(238, 232, 170) }, + { "palegreen", NSVG_RGB(152, 251, 152) }, + { "paleturquoise", NSVG_RGB(175, 238, 238) }, + { "palevioletred", NSVG_RGB(219, 112, 147) }, + { "papayawhip", NSVG_RGB(255, 239, 213) }, + { "peachpuff", NSVG_RGB(255, 218, 185) }, + { "peru", NSVG_RGB(205, 133, 63) }, + { "pink", NSVG_RGB(255, 192, 203) }, + { "plum", NSVG_RGB(221, 160, 221) }, + { "powderblue", NSVG_RGB(176, 224, 230) }, + { "purple", NSVG_RGB(128, 0, 128) }, + { "rosybrown", NSVG_RGB(188, 143, 143) }, + { "royalblue", NSVG_RGB( 65, 105, 225) }, + { "saddlebrown", NSVG_RGB(139, 69, 19) }, + { "salmon", NSVG_RGB(250, 128, 114) }, + { "sandybrown", NSVG_RGB(244, 164, 96) }, + { "seagreen", NSVG_RGB( 46, 139, 87) }, + { "seashell", NSVG_RGB(255, 245, 238) }, + { "sienna", NSVG_RGB(160, 82, 45) }, + { "silver", NSVG_RGB(192, 192, 192) }, + { "skyblue", NSVG_RGB(135, 206, 235) }, + { "slateblue", NSVG_RGB(106, 90, 205) }, + { "slategray", NSVG_RGB(112, 128, 144) }, + { "slategrey", NSVG_RGB(112, 128, 144) }, + { "snow", NSVG_RGB(255, 250, 250) }, + { "springgreen", NSVG_RGB( 0, 255, 127) }, + { "steelblue", NSVG_RGB( 70, 130, 180) }, + { "tan", NSVG_RGB(210, 180, 140) }, + { "teal", NSVG_RGB( 0, 128, 128) }, + { "thistle", NSVG_RGB(216, 191, 216) }, + { "tomato", NSVG_RGB(255, 99, 71) }, + { "turquoise", NSVG_RGB( 64, 224, 208) }, + { "violet", NSVG_RGB(238, 130, 238) }, + { "wheat", NSVG_RGB(245, 222, 179) }, + { "whitesmoke", NSVG_RGB(245, 245, 245) }, + { "yellowgreen", NSVG_RGB(154, 205, 50) }, +#endif +}; + +static unsigned int nsvg__parseColorName(const char* str) +{ + int i, ncolors = sizeof(nsvg__colors) / sizeof(struct NSVGNamedColor); + + for (i = 0; i < ncolors; i++) { + if (strcmp(nsvg__colors[i].name, str) == 0) { + return nsvg__colors[i].color; + } + } + + return NSVG_RGB(128, 128, 128); +} + +static unsigned int nsvg__parseColor(const char* str) +{ + int len = 0; + while(*str == ' ') ++str; + len = strlen(str); + if (len >= 1 && *str == '#') + return nsvg__parseColorHex(str); + else if (len >= 4 && str[0] == 'r' && str[1] == 'g' && str[2] == 'b' && str[3] == '(') + return nsvg__parseColorRGB(str); + return nsvg__parseColorName(str); +} + +static float nsvg__convertToPixels(struct NSVGparser* p, float val, const char* units, int dir) +{ + struct NSVGattrib* attr; + + if (p != NULL) { + // Convert units to pixels. + if (units[0] == '\0') { + return val; + } else if (units[0] == 'p' && units[1] == 'x') { + return val; + } else if (units[0] == 'p' && units[1] == 't') { + return val / 72.0f * p->dpi; + } else if (units[0] == 'p' && units[1] == 'c') { + return val / 6.0f * p->dpi; + } else if (units[0] == 'm' && units[1] == 'm') { + return val / 25.4f * p->dpi; + } else if (units[0] == 'c' && units[1] == 'm') { + return val / 2.54f * p->dpi; + } else if (units[0] == 'i' && units[1] == 'n') { + return val * p->dpi; + } else if (units[0] == '%') { + if (p != NULL) { + attr = nsvg__getAttr(p); + if (dir == 0) + return (val/100.0f) * nsvg__actualWidth(p); + else if (dir == 1) + return (val/100.0f) * nsvg__actualHeight(p); + else if (dir == 2) + return (val/100.0f) * nsvg__actualLength(p); + } else { + return (val/100.0f); + } + } else if (units[0] == 'e' && units[1] == 'm') { + if (p != NULL) { + attr = nsvg__getAttr(p); + return val * attr->fontSize; + } + } else if (units[0] == 'e' && units[1] == 'x') { + if (p != NULL) { + attr = nsvg__getAttr(p); + return val * attr->fontSize * 0.52f; // x-height of Helvetica. + } + } + } else { + // Convert units to pixels. + if (units[0] == '\0') { + return val; + } else if (units[0] == 'p' && units[1] == 'x') { + return val; + } else if (units[0] == '%') { + return (val/100.0f); + } + } + return val; +} + +static float nsvg__parseFloat(struct NSVGparser* p, const char* str, int dir) +{ + float val = 0; + char units[32]=""; + sscanf(str, "%f%s", &val, units); + return nsvg__convertToPixels(p, val, units, dir); +} + +static int nsvg__parseTransformArgs(const char* str, float* args, int maxNa, int* na) +{ + const char* end; + const char* ptr; + + *na = 0; + ptr = str; + while (*ptr && *ptr != '(') ++ptr; + if (*ptr == 0) + return 1; + end = ptr; + while (*end && *end != ')') ++end; + if (*end == 0) + return 1; + + while (ptr < end) { + if (nsvg__isnum(*ptr)) { + if (*na >= maxNa) return 0; + args[(*na)++] = (float)atof(ptr); + while (ptr < end && nsvg__isnum(*ptr)) ++ptr; + } else { + ++ptr; + } + } + return (int)(end - str); +} + +static int nsvg__parseMatrix(float* xform, const char* str) +{ + float t[6]; + int na = 0; + int len = nsvg__parseTransformArgs(str, t, 6, &na); + if (na != 6) return len; + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseTranslate(float* xform, const char* str) +{ + float args[2]; + float t[6]; + int na = 0; + int len = nsvg__parseTransformArgs(str, args, 2, &na); + if (na == 1) args[1] = 0.0; + nsvg__xformSetTranslation(t, args[0], args[1]); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseScale(float* xform, const char* str) +{ + float args[2]; + int na = 0; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 2, &na); + if (na == 1) args[1] = args[0]; + nsvg__xformSetScale(t, args[0], args[1]); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseSkewX(float* xform, const char* str) +{ + float args[1]; + int na = 0; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 1, &na); + nsvg__xformSetSkewX(t, args[0]/180.0f*NSVG_PI); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseSkewY(float* xform, const char* str) +{ + float args[1]; + int na = 0; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 1, &na); + nsvg__xformSetSkewY(t, args[0]/180.0f*NSVG_PI); + memcpy(xform, t, sizeof(float)*6); + return len; +} + +static int nsvg__parseRotate(float* xform, const char* str) +{ + float args[3]; + int na = 0; + float m[6]; + float t[6]; + int len = nsvg__parseTransformArgs(str, args, 3, &na); + if (na == 1) + args[1] = args[2] = 0.0f; + nsvg__xformIdentity(m); + + if (na > 1) { + nsvg__xformSetTranslation(t, -args[1], -args[2]); + nsvg__xformPremultiply(m, t); + } + + nsvg__xformSetRotation(t, args[0]/180.0f*NSVG_PI); + nsvg__xformPremultiply(0, t); + + if (na > 1) { + nsvg__xformSetTranslation(xform, args[1], args[2]); + nsvg__xformPremultiply(m, t); + } + + memcpy(xform, m, sizeof(float)*6); + + return len; +} + +static void nsvg__parseTransform(float* xform, const char* str) +{ + while (*str) + { + if (strncmp(str, "matrix", 6) == 0) + str += nsvg__parseMatrix(xform, str); + else if (strncmp(str, "translate", 9) == 0) + str += nsvg__parseTranslate(xform, str); + else if (strncmp(str, "scale", 5) == 0) + str += nsvg__parseScale(xform, str); + else if (strncmp(str, "rotate", 6) == 0) + str += nsvg__parseRotate(xform, str); + else if (strncmp(str, "skewX", 5) == 0) + str += nsvg__parseSkewX(xform, str); + else if (strncmp(str, "skewY", 5) == 0) + str += nsvg__parseSkewY(xform, str); + else + ++str; + } +} + +static void nsvg__parseUrl(char* id, const char* str) +{ + int i = 0; + str += 4; // "url("; + if (*str == '#') + str++; + while (i < 63 && *str != ')') { + id[i] = *str++; + i++; + } + id[i] = '\0'; +} + +static void nsvg__parseStyle(struct NSVGparser* p, const char* str); + +static int nsvg__parseAttr(struct NSVGparser* p, const char* name, const char* value) +{ + float xform[6]; + struct NSVGattrib* attr = nsvg__getAttr(p); + if (!attr) return 0; + + if (strcmp(name, "style") == 0) { + nsvg__parseStyle(p, value); + } else if (strcmp(name, "display") == 0) { + if (strcmp(value, "none") == 0) + attr->visible = 0; + else + attr->visible = 1; + } else if (strcmp(name, "fill") == 0) { + if (strcmp(value, "none") == 0) { + attr->hasFill = 0; + } else if (strncmp(value, "url(", 4) == 0) { + attr->hasFill = 2; + nsvg__parseUrl(attr->fillGradient, value); + } else { + attr->hasFill = 1; + attr->fillColor = nsvg__parseColor(value); + } + } else if (strcmp(name, "fill-opacity") == 0) { + attr->fillOpacity = nsvg__parseFloat(p, value, 2); + } else if (strcmp(name, "stroke") == 0) { + if (strcmp(value, "none") == 0) { + attr->hasStroke = 0; + } else if (strncmp(value, "url(", 4) == 0) { + attr->hasStroke = 2; + nsvg__parseUrl(attr->strokeGradient, value); + } else { + attr->hasStroke = 1; + attr->strokeColor = nsvg__parseColor(value); + } + } else if (strcmp(name, "stroke-width") == 0) { + attr->strokeWidth = nsvg__parseFloat(p, value, 2); + } else if (strcmp(name, "stroke-opacity") == 0) { + attr->strokeOpacity = nsvg__parseFloat(NULL, value, 2); + } else if (strcmp(name, "font-size") == 0) { + attr->fontSize = nsvg__parseFloat(p, value, 2); + } else if (strcmp(name, "transform") == 0) { + nsvg__parseTransform(xform, value); + nsvg__xformPremultiply(attr->xform, xform); + } else if (strcmp(name, "stop-color") == 0) { + attr->stopColor = nsvg__parseColor(value); + } else if (strcmp(name, "stop-opacity") == 0) { + attr->stopOpacity = nsvg__parseFloat(NULL, value, 2); + } else if (strcmp(name, "offset") == 0) { + attr->stopOffset = nsvg__parseFloat(NULL, value, 2); + } else { + return 0; + } + return 1; +} + +static int nsvg__parseNameValue(struct NSVGparser* p, const char* start, const char* end) +{ + const char* str; + const char* val; + char name[512]; + char value[512]; + int n; + + str = start; + while (str < end && *str != ':') ++str; + + val = str; + + // Right Trim + while (str > start && (*str == ':' || nsvg__isspace(*str))) --str; + ++str; + + n = (int)(str - start); + if (n > 511) n = 511; + if (n) memcpy(name, start, n); + name[n] = 0; + + while (val < end && (*val == ':' || nsvg__isspace(*val))) ++val; + + n = (int)(end - val); + if (n > 511) n = 511; + if (n) memcpy(value, val, n); + value[n] = 0; + + return nsvg__parseAttr(p, name, value); +} + +static void nsvg__parseStyle(struct NSVGparser* p, const char* str) +{ + const char* start; + const char* end; + + while (*str) { + // Left Trim + while(*str && nsvg__isspace(*str)) ++str; + start = str; + while(*str && *str != ';') ++str; + end = str; + + // Right Trim + while (end > start && (*end == ';' || nsvg__isspace(*end))) --end; + ++end; + + nsvg__parseNameValue(p, start, end); + if (*str) ++str; + } +} + +static void nsvg__parseAttribs(struct NSVGparser* p, const char** attr) +{ + int i; + for (i = 0; attr[i]; i += 2) + { + if (strcmp(attr[i], "style") == 0) + nsvg__parseStyle(p, attr[i + 1]); + else + nsvg__parseAttr(p, attr[i], attr[i + 1]); + } +} + +static int nsvg__getArgsPerElement(char cmd) +{ + switch (cmd) { + case 'v': + case 'V': + case 'h': + case 'H': + return 1; + case 'm': + case 'M': + case 'l': + case 'L': + case 't': + case 'T': + return 2; + case 'q': + case 'Q': + case 's': + case 'S': + return 4; + case 'c': + case 'C': + return 6; + case 'a': + case 'A': + return 7; + } + return 0; +} + +static void nsvg__pathMoveTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) { + *cpx += args[0]; + *cpy += args[1]; + } else { + *cpx = args[0]; + *cpy = args[1]; + } + nsvg__moveTo(p, *cpx, *cpy); +} + +static void nsvg__pathLineTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) { + *cpx += args[0]; + *cpy += args[1]; + } else { + *cpx = args[0]; + *cpy = args[1]; + } + nsvg__lineTo(p, *cpx, *cpy); +} + +static void nsvg__pathHLineTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) + *cpx += args[0]; + else + *cpx = args[0]; + nsvg__lineTo(p, *cpx, *cpy); +} + +static void nsvg__pathVLineTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + if (rel) + *cpy += args[0]; + else + *cpy = args[0]; + nsvg__lineTo(p, *cpx, *cpy); +} + +static void nsvg__pathCubicBezTo(struct NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + cx1 = *cpx + args[0]; + cy1 = *cpy + args[1]; + cx2 = *cpx + args[2]; + cy2 = *cpy + args[3]; + x2 = *cpx + args[4]; + y2 = *cpy + args[5]; + } else { + cx1 = args[0]; + cy1 = args[1]; + cx2 = args[2]; + cy2 = args[3]; + x2 = args[4]; + y2 = args[5]; + } + + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx2; + *cpy2 = cy2; + *cpx = x2; + *cpy = y2; +} + +static void nsvg__pathCubicBezShortTo(struct NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + cx2 = *cpx + args[0]; + cy2 = *cpy + args[1]; + x2 = *cpx + args[2]; + y2 = *cpy + args[3]; + } else { + cx2 = args[0]; + cy2 = args[1]; + x2 = args[2]; + y2 = args[3]; + } + + cx1 = 2*x1 - *cpx2; + cy1 = 2*y1 - *cpy2; + + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx2; + *cpy2 = cy2; + *cpx = x2; + *cpy = y2; +} + +static void nsvg__pathQuadBezTo(struct NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx, cy; + float cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + cx = *cpx + args[0]; + cy = *cpy + args[1]; + x2 = *cpx + args[2]; + y2 = *cpy + args[3]; + } else { + cx = args[0]; + cy = args[1]; + x2 = args[2]; + y2 = args[3]; + } + + // Convert to cubix bezier + cx1 = x1 + 2.0f/3.0f*(cx - x1); + cy1 = y1 + 2.0f/3.0f*(cy - y1); + cx2 = x2 + 2.0f/3.0f*(cx - x2); + cy2 = y2 + 2.0f/3.0f*(cy - y2); + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx; + *cpy2 = cy; + *cpx = x2; + *cpy = y2; +} + +static void nsvg__pathQuadBezShortTo(struct NSVGparser* p, float* cpx, float* cpy, + float* cpx2, float* cpy2, float* args, int rel) +{ + float x1, y1, x2, y2, cx, cy; + float cx1, cy1, cx2, cy2; + + x1 = *cpx; + y1 = *cpy; + if (rel) { + x2 = *cpx + args[0]; + y2 = *cpy + args[1]; + } else { + x2 = args[0]; + y2 = args[1]; + } + + cx = 2*x1 - *cpx2; + cy = 2*y1 - *cpy2; + + // Convert to cubix bezier + cx1 = x1 + 2.0f/3.0f*(cx - x1); + cy1 = y1 + 2.0f/3.0f*(cy - y1); + cx2 = x2 + 2.0f/3.0f*(cx - x2); + cy2 = y2 + 2.0f/3.0f*(cy - y2); + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); + + *cpx2 = cx; + *cpy2 = cy; + *cpx = x2; + *cpy = y2; +} + +static float nsvg__sqr(float x) { return x*x; } +static float nsvg__vmag(float x, float y) { return sqrtf(x*x + y*y); } + +static float nsvg__vecrat(float ux, float uy, float vx, float vy) +{ + return (ux*vx + uy*vy) / (nsvg__vmag(ux,uy) * nsvg__vmag(vx,vy)); +} + +static float nsvg__vecang(float ux, float uy, float vx, float vy) +{ + float r = nsvg__vecrat(ux,uy, vx,vy); + if (r < -1.0f) r = -1.0f; + if (r > 1.0f) r = 1.0f; + return ((ux*vy < uy*vx) ? -1.0f : 1.0f) * acosf(r); +} + +static void nsvg__pathArcTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +{ + // Ported from canvg (https://code.google.com/p/canvg/) + float rx, ry, rotx; + float x1, y1, x2, y2, cx, cy, dx, dy, d; + float x1p, y1p, cxp, cyp, s, sa, sb; + float ux, uy, vx, vy, a1, da; + float x, y, tanx, tany, a, px, py, ptanx, ptany, t[6]; + float sinrx, cosrx; + int fa, fs; + int i, ndivs; + float hda, kappa; + + rx = fabsf(args[0]); // y radius + ry = fabsf(args[1]); // x radius + rotx = args[2] / 180.0f * NSVG_PI; // x rotation engle + fa = fabsf(args[3]) > 1e-6 ? 1 : 0; // Large arc + fs = fabsf(args[4]) > 1e-6 ? 1 : 0; // Sweep direction + x1 = *cpx; // start point + y1 = *cpy; + if (rel) { // end point + x2 = *cpx + args[5]; + y2 = *cpy + args[6]; + } else { + x2 = args[5]; + y2 = args[6]; + } + + dx = x1 - x2; + dy = y1 - y2; + d = sqrtf(dx*dx + dy*dy); + if (d < 1e-6f || rx < 1e-6f || ry < 1e-6f) { + // The arc degenerates to a line + nsvg__lineTo(p, x2, y2); + *cpx = x2; + *cpy = y2; + return; + } + + sinrx = sinf(rotx); + cosrx = cosf(rotx); + + // Convert to center point parameterization. + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + // 1) Compute x1', y1' + x1p = cosrx * dx / 2.0f + sinrx * dy / 2.0f; + y1p = -sinrx * dx / 2.0f + cosrx * dy / 2.0f; + d = nsvg__sqr(x1p)/nsvg__sqr(rx) + nsvg__sqr(y1p)/nsvg__sqr(ry); + if (d > 1) { + d = sqrtf(d); + rx *= d; + ry *= d; + } + // 2) Compute cx', cy' + s = 0.0f; + sa = nsvg__sqr(rx)*nsvg__sqr(ry) - nsvg__sqr(rx)*nsvg__sqr(y1p) - nsvg__sqr(ry)*nsvg__sqr(x1p); + sb = nsvg__sqr(rx)*nsvg__sqr(y1p) + nsvg__sqr(ry)*nsvg__sqr(x1p); + if (sa < 0.0f) sa = 0.0f; + if (sb > 0.0f) + s = sqrtf(sa / sb); + if (fa == fs) + s = -s; + cxp = s * rx * y1p / ry; + cyp = s * -ry * x1p / rx; + + // 3) Compute cx,cy from cx',cy' + cx = (x1 + x2)/2.0f + cosrx*cxp - sinrx*cyp; + cy = (y1 + y2)/2.0f + sinrx*cxp + cosrx*cyp; + + // 4) Calculate theta1, and delta theta. + ux = (x1p - cxp) / rx; + uy = (y1p - cyp) / ry; + vx = (-x1p - cxp) / rx; + vy = (-y1p - cyp) / ry; + a1 = nsvg__vecang(1.0f,0.0f, ux,uy); // Initial angle + da = nsvg__vecang(ux,uy, vx,vy); // Delta angle + +// if (vecrat(ux,uy,vx,vy) <= -1.0f) da = NSVG_PI; +// if (vecrat(ux,uy,vx,vy) >= 1.0f) da = 0; + + if (fa) { + // Choose large arc + if (da > 0.0f) + da = da - 2*NSVG_PI; + else + da = 2*NSVG_PI + da; + } + + // Approximate the arc using cubic spline segments. + t[0] = cosrx; t[1] = sinrx; + t[2] = -sinrx; t[3] = cosrx; + t[4] = cx; t[5] = cy; + + // Split arc into max 90 degree segments. + ndivs = (int)(fabsf(da) / (NSVG_PI*0.5f) + 0.5f); + hda = (da / (float)ndivs) / 2.0f; + kappa = fabsf(4.0f / 3.0f * (1.0f - cosf(hda)) / sinf(hda)); + if (da < 0.0f) + kappa = -kappa; + + for (i = 0; i <= ndivs; i++) { + a = a1 + da * (i/(float)ndivs); + dx = cosf(a); + dy = sinf(a); + nsvg__xformPoint(&x, &y, dx*rx, dy*ry, t); // position + nsvg__xformVec(&tanx, &tany, -dy*rx * kappa, dx*ry * kappa, t); // tangent + if (i > 0) + nsvg__cubicBezTo(p, px+ptanx,py+ptany, x-tanx, y-tany, x, y); + px = x; + py = y; + ptanx = tanx; + ptany = tany; + } + + *cpx = x2; + *cpy = y2; +} + +static void nsvg__parsePath(struct NSVGparser* p, const char** attr) +{ + const char* s = NULL; + char cmd; + float args[10]; + int nargs; + int rargs; + float cpx, cpy, cpx2, cpy2; + const char* tmp[4]; + char closedFlag; + int i; + char item[64]; + + for (i = 0; attr[i]; i += 2) { + if (strcmp(attr[i], "d") == 0) { + s = attr[i + 1]; + } else { + tmp[0] = attr[i]; + tmp[1] = attr[i + 1]; + tmp[2] = 0; + tmp[3] = 0; + nsvg__parseAttribs(p, tmp); + } + } + + if(s) + { + nsvg__resetPath(p); + cpx = 0; cpy = 0; + closedFlag = 0; + nargs = 0; + + while (*s) { + s = nsvg__getNextPathItem(s, item); + if (!*item) break; + if (nsvg__isnum(item[0])) { + if (nargs < 10) + args[nargs++] = (float)atof(item); + if (nargs >= rargs) { + switch (cmd) { + case 'm': + case 'M': + nsvg__pathMoveTo(p, &cpx, &cpy, args, cmd == 'm' ? 1 : 0); + // Moveto can be followed by multiple coordinate pairs, + // which should be treated as linetos. + cmd = (cmd =='m') ? 'l' : 'L'; + rargs = nsvg__getArgsPerElement(cmd); + break; + case 'l': + case 'L': + nsvg__pathLineTo(p, &cpx, &cpy, args, cmd == 'l' ? 1 : 0); + break; + case 'H': + case 'h': + nsvg__pathHLineTo(p, &cpx, &cpy, args, cmd == 'h' ? 1 : 0); + break; + case 'V': + case 'v': + nsvg__pathVLineTo(p, &cpx, &cpy, args, cmd == 'v' ? 1 : 0); + break; + case 'C': + case 'c': + nsvg__pathCubicBezTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 'c' ? 1 : 0); + break; + case 'S': + case 's': + nsvg__pathCubicBezShortTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 's' ? 1 : 0); + break; + case 'Q': + case 'q': + nsvg__pathQuadBezTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 'q' ? 1 : 0); + break; + case 'T': + case 't': + nsvg__pathQuadBezShortTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 's' ? 1 : 0); + break; + case 'A': + case 'a': + nsvg__pathArcTo(p, &cpx, &cpy, args, cmd == 'a' ? 1 : 0); + break; + default: + if (nargs >= 2) { + cpx = args[nargs-2]; + cpy = args[nargs-1]; + } + break; + } + nargs = 0; + } + } else { + cmd = item[0]; + rargs = nsvg__getArgsPerElement(cmd); + if (cmd == 'M' || cmd == 'm') { + // Commit path. + if (p->npts > 0) + nsvg__addPath(p, closedFlag); + // Start new subpath. + nsvg__resetPath(p); + closedFlag = 0; + nargs = 0; + } else if (cmd == 'Z' || cmd == 'z') { + closedFlag = 1; + // Commit path. + if (p->npts > 0) + nsvg__addPath(p, closedFlag); + // Start new subpath. + nsvg__resetPath(p); + closedFlag = 0; + nargs = 0; + } + } + } + // Commit path. + if (p->npts) + nsvg__addPath(p, closedFlag); + } + + nsvg__addShape(p); +} + +static void nsvg__parseRect(struct NSVGparser* p, const char** attr) +{ + float x = 0.0f; + float y = 0.0f; + float w = 0.0f; + float h = 0.0f; + float rx = -1.0f; // marks not set + float ry = -1.0f; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "x") == 0) x = nsvg__parseFloat(p, attr[i+1], 0); + if (strcmp(attr[i], "y") == 0) y = nsvg__parseFloat(p, attr[i+1], 1); + if (strcmp(attr[i], "width") == 0) w = nsvg__parseFloat(p, attr[i+1], 0); + if (strcmp(attr[i], "height") == 0) h = nsvg__parseFloat(p, attr[i+1], 1); + if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseFloat(p, attr[i+1], 0)); + if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseFloat(p, attr[i+1], 1)); + } + } + + if (rx < 0.0f && ry > 0.0f) rx = ry; + if (ry < 0.0f && rx > 0.0f) ry = rx; + if (rx < 0.0f) rx = 0.0f; + if (ry < 0.0f) ry = 0.0f; + if (rx > w/2.0f) rx = w/2.0f; + if (ry > h/2.0f) ry = h/2.0f; + + if (w != 0.0f && h != 0.0f) { + nsvg__resetPath(p); + + if (rx < 0.00001f || ry < 0.0001f) { + nsvg__moveTo(p, x, y); + nsvg__lineTo(p, x+w, y); + nsvg__lineTo(p, x+w, y+h); + nsvg__lineTo(p, x, y+h); + } else { + // Rounded rectangle + nsvg__moveTo(p, x+rx, y); + nsvg__lineTo(p, x+w-rx, y); + nsvg__cubicBezTo(p, x+w-rx*(1-NSVG_KAPPA90), y, x+w, y+ry*(1-NSVG_KAPPA90), x+w, y+ry); + nsvg__lineTo(p, x+w, y+h-ry); + nsvg__cubicBezTo(p, x+w, y+h-ry*(1-NSVG_KAPPA90), x+w-rx*(1-NSVG_KAPPA90), y+h, x+w-rx, y+h); + nsvg__lineTo(p, x+rx, y+h); + nsvg__cubicBezTo(p, x+rx*(1-NSVG_KAPPA90), y+h, x, y+h-ry*(1-NSVG_KAPPA90), x, y+h-ry); + nsvg__lineTo(p, x, y+ry); + nsvg__cubicBezTo(p, x, y+ry*(1-NSVG_KAPPA90), x+rx*(1-NSVG_KAPPA90), y, x+rx, y); + } + + nsvg__addPath(p, 1); + + nsvg__addShape(p); + } +} + +static void nsvg__parseCircle(struct NSVGparser* p, const char** attr) +{ + float cx = 0.0f; + float cy = 0.0f; + float r = 0.0f; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseFloat(p, attr[i+1], 0); + if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseFloat(p, attr[i+1], 1); + if (strcmp(attr[i], "r") == 0) r = fabsf(nsvg__parseFloat(p, attr[i+1], 2)); + } + } + + if (r > 0.0f) { + nsvg__resetPath(p); + + nsvg__moveTo(p, cx+r, cy); + nsvg__cubicBezTo(p, cx+r, cy+r*NSVG_KAPPA90, cx+r*NSVG_KAPPA90, cy+r, cx, cy+r); + nsvg__cubicBezTo(p, cx-r*NSVG_KAPPA90, cy+r, cx-r, cy+r*NSVG_KAPPA90, cx-r, cy); + nsvg__cubicBezTo(p, cx-r, cy-r*NSVG_KAPPA90, cx-r*NSVG_KAPPA90, cy-r, cx, cy-r); + nsvg__cubicBezTo(p, cx+r*NSVG_KAPPA90, cy-r, cx+r, cy-r*NSVG_KAPPA90, cx+r, cy); + + nsvg__addPath(p, 1); + + nsvg__addShape(p); + } +} + +static void nsvg__parseEllipse(struct NSVGparser* p, const char** attr) +{ + float cx = 0.0f; + float cy = 0.0f; + float rx = 0.0f; + float ry = 0.0f; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseFloat(p, attr[i+1], 0); + if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseFloat(p, attr[i+1], 1); + if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseFloat(p, attr[i+1], 0)); + if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseFloat(p, attr[i+1], 1)); + } + } + + if (rx > 0.0f && ry > 0.0f) { + + nsvg__resetPath(p); + + nsvg__moveTo(p, cx+rx, cy); + nsvg__cubicBezTo(p, cx+rx, cy+ry*NSVG_KAPPA90, cx+rx*NSVG_KAPPA90, cy+ry, cx, cy+ry); + nsvg__cubicBezTo(p, cx-rx*NSVG_KAPPA90, cy+ry, cx-rx, cy+ry*NSVG_KAPPA90, cx-rx, cy); + nsvg__cubicBezTo(p, cx-rx, cy-ry*NSVG_KAPPA90, cx-rx*NSVG_KAPPA90, cy-ry, cx, cy-ry); + nsvg__cubicBezTo(p, cx+rx*NSVG_KAPPA90, cy-ry, cx+rx, cy-ry*NSVG_KAPPA90, cx+rx, cy); + + nsvg__addPath(p, 1); + + nsvg__addShape(p); + } +} + +static void nsvg__parseLine(struct NSVGparser* p, const char** attr) +{ + float x1 = 0.0; + float y1 = 0.0; + float x2 = 0.0; + float y2 = 0.0; + int i; + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "x1") == 0) x1 = nsvg__parseFloat(p, attr[i + 1], 0); + if (strcmp(attr[i], "y1") == 0) y1 = nsvg__parseFloat(p, attr[i + 1], 1); + if (strcmp(attr[i], "x2") == 0) x2 = nsvg__parseFloat(p, attr[i + 1], 0); + if (strcmp(attr[i], "y2") == 0) y2 = nsvg__parseFloat(p, attr[i + 1], 1); + } + } + + nsvg__resetPath(p); + + nsvg__moveTo(p, x1, y1); + nsvg__lineTo(p, x2, y2); + + nsvg__addPath(p, 0); + + nsvg__addShape(p); +} + +static void nsvg__parsePoly(struct NSVGparser* p, const char** attr, int closeFlag) +{ + int i; + const char* s; + float args[2]; + int nargs, npts = 0; + char item[64]; + + nsvg__resetPath(p); + + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "points") == 0) { + s = attr[i + 1]; + nargs = 0; + while (*s) { + s = nsvg__getNextPathItem(s, item); + args[nargs++] = (float)atof(item); + if (nargs >= 2) { + if (npts == 0) + nsvg__moveTo(p, args[0], args[1]); + else + nsvg__lineTo(p, args[0], args[1]); + nargs = 0; + npts++; + } + } + } + } + } + + nsvg__addPath(p, (char)closeFlag); + + nsvg__addShape(p); +} + +static void nsvg__parseSVG(struct NSVGparser* p, const char** attr) +{ + int i; + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "width") == 0) { + p->image->width = nsvg__parseFloat(p, attr[i + 1], 0); + } else if (strcmp(attr[i], "height") == 0) { + p->image->height = nsvg__parseFloat(p, attr[i + 1], 1); + } else if (strcmp(attr[i], "viewBox") == 0) { + sscanf(attr[i + 1], "%f%*[%%, \t]%f%*[%%, \t]%f%*[%%, \t]%f", &p->viewMinx, &p->viewMiny, &p->viewWidth, &p->viewHeight); + } else if (strcmp(attr[i], "preserveAspectRatio") == 0) { + if (strstr(attr[i + 1], "none") != 0) { + // No uniform scaling + p->alignType = NSVG_ALIGN_NONE; + } else { + // Parse X align + if (strstr(attr[i + 1], "xMin") != 0) + p->alignX = NSVG_ALIGN_MIN; + else if (strstr(attr[i + 1], "xMid") != 0) + p->alignX = NSVG_ALIGN_MID; + else if (strstr(attr[i + 1], "xMax") != 0) + p->alignX = NSVG_ALIGN_MAX; + // Parse X align + if (strstr(attr[i + 1], "yMin") != 0) + p->alignY = NSVG_ALIGN_MIN; + else if (strstr(attr[i + 1], "yMid") != 0) + p->alignY = NSVG_ALIGN_MID; + else if (strstr(attr[i + 1], "yMax") != 0) + p->alignY = NSVG_ALIGN_MAX; + // Parse meet/slice + p->alignType = NSVG_ALIGN_MEET; + if (strstr(attr[i + 1], "slice") != 0) + p->alignType = NSVG_ALIGN_SLICE; + } + } + } + } +} + +static void nsvg__parseGradient(struct NSVGparser* p, const char** attr, char type) +{ + int i; + struct NSVGgradientData* grad = (struct NSVGgradientData*)malloc(sizeof(struct NSVGgradientData)); + if (grad == NULL) return; + memset(grad, 0, sizeof(struct NSVGgradientData)); + + grad->type = type; + nsvg__xformIdentity(grad->xform); + + // TODO: does not handle percent and objectBoundingBox correctly yet. + for (i = 0; attr[i]; i += 2) { + if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "gradientUnits") == 0) { + if (strcmp(attr[i+1], "objectBoundingBox") == 0) + grad->units = NSVG_OBJECT_SPACE; + else + grad->units = NSVG_USER_SPACE; + } else if (strcmp(attr[i], "gradientTransform") == 0) { + nsvg__parseTransform(grad->xform, attr[i + 1]); + } else if (strcmp(attr[i], "cx") == 0) { + grad->radial.cx = nsvg__parseFloat(p, attr[i + 1], 0); + } else if (strcmp(attr[i], "cy") == 0) { + grad->radial.cy = nsvg__parseFloat(p, attr[i + 1], 1); + } else if (strcmp(attr[i], "r") == 0) { + grad->radial.r = nsvg__parseFloat(p, attr[i + 1], 2); + } else if (strcmp(attr[i], "fx") == 0) { + grad->radial.fx = nsvg__parseFloat(p, attr[i + 1], 0); + } else if (strcmp(attr[i], "fy") == 0) { + grad->radial.fy = nsvg__parseFloat(p, attr[i + 1], 1); + } else if (strcmp(attr[i], "x1") == 0) { + grad->linear.x1 = nsvg__parseFloat(p, attr[i + 1], 0); + } else if (strcmp(attr[i], "y1") == 0) { + grad->linear.y1 = nsvg__parseFloat(p, attr[i + 1], 1); + } else if (strcmp(attr[i], "x2") == 0) { + grad->linear.x2 = nsvg__parseFloat(p, attr[i + 1], 0); + } else if (strcmp(attr[i], "y2") == 0) { + grad->linear.y2 = nsvg__parseFloat(p, attr[i + 1], 1); + } else if (strcmp(attr[i], "spreadMethod") == 0) { + if (strcmp(attr[i+1], "pad") == 0) + grad->spread = NSVG_SPREAD_PAD; + else if (strcmp(attr[i+1], "reflect") == 0) + grad->spread = NSVG_SPREAD_REFLECT; + else if (strcmp(attr[i+1], "repeat") == 0) + grad->spread = NSVG_SPREAD_REPEAT; + } else if (strcmp(attr[i], "xlink:href") == 0) { + strncpy(grad->ref, attr[i+1], 63); + grad->ref[63] = '\0'; + } else if (strcmp(attr[i], "id") == 0) { + strncpy(grad->id, attr[i+1], 63); + grad->id[63] = '\0'; + } + } + } + + grad->next = p->gradients; + p->gradients = grad; +} + +static void nsvg__parseGradientStop(struct NSVGparser* p, const char** attr) +{ + struct NSVGattrib* curAttr = nsvg__getAttr(p); + struct NSVGgradientData* grad; + struct NSVGgradientStop* stop; + int i, idx; + + curAttr->stopOffset = 0; + curAttr->stopColor = 0; + curAttr->stopOpacity = 1.0f; + + for (i = 0; attr[i]; i += 2) { + nsvg__parseAttr(p, attr[i], attr[i + 1]); + } + + // Add stop to the last gradient. + grad = p->gradients; + if (grad == NULL) return; + + grad->nstops++; + grad->stops = (struct NSVGgradientStop*)realloc(grad->stops, sizeof(struct NSVGgradientStop)*grad->nstops); + if (grad->stops == NULL) return; + + // Insert + idx = grad->nstops-1; + for (i = 0; i < grad->nstops-1; i++) { + if (curAttr->stopOffset < grad->stops[i].offset) { + idx = i; + break; + } + } + if (idx != grad->nstops-1) { + for (i = grad->nstops-1; i > idx; i--) + grad->stops[i] = grad->stops[i-1]; + } + + stop = &grad->stops[idx]; + stop->color = curAttr->stopColor; + stop->color |= (unsigned int)(curAttr->stopOpacity*255) << 24; + stop->offset = curAttr->stopOffset; +} + +static void nsvg__startElement(void* ud, const char* el, const char** attr) +{ + struct NSVGparser* p = (struct NSVGparser*)ud; + + if (p->defsFlag) { + // Skip everything but gradients in defs + if (strcmp(el, "linearGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_LINEAR_GRADIENT); + } else if (strcmp(el, "radialGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_RADIAL_GRADIENT); + } else if (strcmp(el, "stop") == 0) { + nsvg__parseGradientStop(p, attr); + } + return; + } + + if (strcmp(el, "g") == 0) { + nsvg__pushAttr(p); + nsvg__parseAttribs(p, attr); + } else if (strcmp(el, "path") == 0) { + if (p->pathFlag) // Do not allow nested paths. + return; + nsvg__pushAttr(p); + nsvg__parsePath(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "rect") == 0) { + nsvg__pushAttr(p); + nsvg__parseRect(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "circle") == 0) { + nsvg__pushAttr(p); + nsvg__parseCircle(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "ellipse") == 0) { + nsvg__pushAttr(p); + nsvg__parseEllipse(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "line") == 0) { + nsvg__pushAttr(p); + nsvg__parseLine(p, attr); + nsvg__popAttr(p); + } else if (strcmp(el, "polyline") == 0) { + nsvg__pushAttr(p); + nsvg__parsePoly(p, attr, 0); + nsvg__popAttr(p); + } else if (strcmp(el, "polygon") == 0) { + nsvg__pushAttr(p); + nsvg__parsePoly(p, attr, 1); + nsvg__popAttr(p); + } else if (strcmp(el, "linearGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_LINEAR_GRADIENT); + } else if (strcmp(el, "radialGradient") == 0) { + nsvg__parseGradient(p, attr, NSVG_PAINT_RADIAL_GRADIENT); + } else if (strcmp(el, "stop") == 0) { + nsvg__parseGradientStop(p, attr); + } else if (strcmp(el, "defs") == 0) { + p->defsFlag = 1; + } else if (strcmp(el, "svg") == 0) { + nsvg__parseSVG(p, attr); + } +} + +static void nsvg__endElement(void* ud, const char* el) +{ + struct NSVGparser* p = (struct NSVGparser*)ud; + + if (strcmp(el, "g") == 0) { + nsvg__popAttr(p); + } else if (strcmp(el, "path") == 0) { + p->pathFlag = 0; + } else if (strcmp(el, "defs") == 0) { + p->defsFlag = 0; + } +} + +static void nsvg__content(void* ud, const char* s) +{ + // empty +} + +static void nsvg__imageBounds(struct NSVGparser* p, float* bounds) +{ + struct NSVGshape* shape; + shape = p->image->shapes; + bounds[0] = shape->bounds[0]; + bounds[1] = shape->bounds[1]; + bounds[2] = shape->bounds[2]; + bounds[3] = shape->bounds[3]; + for (shape = shape->next; shape != NULL; shape = shape->next) { + bounds[0] = nsvg__minf(bounds[0], shape->bounds[0]); + bounds[1] = nsvg__minf(bounds[1], shape->bounds[1]); + bounds[2] = nsvg__maxf(bounds[2], shape->bounds[2]); + bounds[3] = nsvg__maxf(bounds[3], shape->bounds[3]); + } +} + +static float nsvg__viewAlign(float content, float container, int type) +{ + if (type == NSVG_ALIGN_MIN) + return 0; + else if (type == NSVG_ALIGN_MAX) + return container - content; + // mid + return (container - content) * 0.5f; +} + +static void nsvg__scaleGradient(struct NSVGgradient* grad, float tx, float ty, float sx, float sy) +{ + grad->xform[0] *= sx; + grad->xform[1] *= sx; + grad->xform[2] *= sy; + grad->xform[3] *= sy; + grad->xform[4] += tx*sx; + grad->xform[5] += ty*sx; +} + +static void nsvg__scaleToViewbox(struct NSVGparser* p, const char* units) +{ + struct NSVGshape* shape; + struct NSVGpath* path; + float tx, ty, sx, sy, us, bounds[4], t[6]; + int i; + float* pt; + + // Guess image size if not set completely. + nsvg__imageBounds(p, bounds); + if (p->viewWidth == 0) { + if (p->image->width > 0) + p->viewWidth = p->image->width; + else + p->viewWidth = bounds[2]; + } + if (p->viewHeight == 0) { + if (p->image->height > 0) + p->viewHeight = p->image->height; + else + p->viewHeight = bounds[3]; + } + if (p->image->width == 0) + p->image->width = p->viewWidth; + if (p->image->height == 0) + p->image->height = p->viewHeight; + + tx = -p->viewMinx; + ty = -p->viewMiny; + sx = p->viewWidth > 0 ? p->image->width / p->viewWidth : 0; + sy = p->viewHeight > 0 ? p->image->height / p->viewHeight : 0; + us = 1.0f / nsvg__convertToPixels(p, 1.0f, units, 0); + + // Fix aspect ratio + if (p->alignType == NSVG_ALIGN_MEET) { + // fit whole image into viewbox + sx = sy = nsvg__minf(sx, sy); + tx += nsvg__viewAlign(p->viewWidth*sx, p->image->width, p->alignX) / sx; + ty += nsvg__viewAlign(p->viewHeight*sy, p->image->height, p->alignY) / sy; + } else if (p->alignType == NSVG_ALIGN_SLICE) { + // fill whole viewbox with image + sx = sy = nsvg__maxf(sx, sy); + tx += nsvg__viewAlign(p->viewWidth*sx, p->image->width, p->alignX) / sx; + ty += nsvg__viewAlign(p->viewHeight*sy, p->image->height, p->alignY) / sy; + } + + // Transform + sx *= us; + sy *= us; + for (shape = p->image->shapes; shape != NULL; shape = shape->next) { + shape->bounds[0] = (shape->bounds[0] + tx) * sx; + shape->bounds[1] = (shape->bounds[1] + ty) * sy; + shape->bounds[2] = (shape->bounds[2] + tx) * sx; + shape->bounds[3] = (shape->bounds[3] + ty) * sy; + for (path = shape->paths; path != NULL; path = path->next) { + path->bounds[0] = (path->bounds[0] + tx) * sx; + path->bounds[1] = (path->bounds[1] + ty) * sy; + path->bounds[2] = (path->bounds[2] + tx) * sx; + path->bounds[3] = (path->bounds[3] + ty) * sy; + for (i =0; i < path->npts; i++) { + pt = &path->pts[i*2]; + pt[0] = (pt[0] + tx) * sx; + pt[1] = (pt[1] + ty) * sy; + } + } + + if (shape->fill.type == NSVG_PAINT_LINEAR_GRADIENT || shape->fill.type == NSVG_PAINT_RADIAL_GRADIENT) { + nsvg__scaleGradient(shape->fill.gradient, tx,ty, sx,sy); + memcpy(t, shape->fill.gradient->xform, sizeof(float)*6); + nsvg__xformInverse(shape->fill.gradient->xform, t); + } + if (shape->stroke.type == NSVG_PAINT_LINEAR_GRADIENT || shape->stroke.type == NSVG_PAINT_RADIAL_GRADIENT) { + nsvg__scaleGradient(shape->stroke.gradient, tx,ty, sx,sy); + memcpy(t, shape->stroke.gradient->xform, sizeof(float)*6); + nsvg__xformInverse(shape->stroke.gradient->xform, t); + } + + } + + sx *= us; + sy *= us; +} + +struct NSVGimage* nsvgParse(char* input, const char* units, float dpi) +{ + struct NSVGparser* p; + struct NSVGimage* ret = 0; + + p = nsvg__createParser(); + if (p == NULL) { + return NULL; + } + p->dpi = dpi; + + nsvg__parseXML(input, nsvg__startElement, nsvg__endElement, nsvg__content, p); + + // Scale to viewBox + nsvg__scaleToViewbox(p, units); + + ret = p->image; + p->image = NULL; + + nsvg__deleteParser(p); + + return ret; +} + +struct NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) +{ + FILE* fp = NULL; + int size; + char* data = NULL; + struct NSVGimage* image = NULL; + + fp = fopen(filename, "rb"); + if (!fp) goto error; + fseek(fp, 0, SEEK_END); + size = ftell(fp); + fseek(fp, 0, SEEK_SET); + data = (char*)malloc(size+1); + if (data == NULL) goto error; + fread(data, size, 1, fp); + data[size] = '\0'; // Must be null terminated. + fclose(fp); + image = nsvgParse(data, units, dpi); + free(data); + + return image; + +error: + if (fp) fclose(fp); + if (data) free(data); + if (image) nsvgDelete(image); + return NULL; +} + +void nsvgDelete(struct NSVGimage* image) +{ + struct NSVGshape *snext, *shape; + if (image == NULL) return; + shape = image->shapes; + while (shape != NULL) { + snext = shape->next; + nsvg__deletePaths(shape->paths); + nsvg__deletePaint(&shape->fill); + nsvg__deletePaint(&shape->stroke); + free(shape); + shape = snext; + } + free(image); +} + +#endif diff --git a/src/nanosvg/nanosvg_impl.cpp b/src/nanosvg/nanosvg_impl.cpp new file mode 100644 index 000000000..995d3372c --- /dev/null +++ b/src/nanosvg/nanosvg_impl.cpp @@ -0,0 +1,6 @@ +#define NANOSVG_IMPLEMENTATION +#define NANOSVGRAST_IMPLEMENTATION + +#include +#include "nanosvg.h" +#include "nanosvgrast.h" diff --git a/src/nanosvg/nanosvg_license.txt b/src/nanosvg/nanosvg_license.txt new file mode 100644 index 000000000..f896f2eb0 --- /dev/null +++ b/src/nanosvg/nanosvg_license.txt @@ -0,0 +1,18 @@ +Copyright (c) 2013-14 Mikko Mononen memon@inside.org + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/src/nanosvg/nanosvgrast.h b/src/nanosvg/nanosvgrast.h new file mode 100644 index 000000000..c489f3076 --- /dev/null +++ b/src/nanosvg/nanosvgrast.h @@ -0,0 +1,794 @@ +/* + * Copyright (c) 2013-14 Mikko Mononen memon@inside.org + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * The polygon rasterization is heavily based on stb_truetype rasterizer + * by Sean Barrett - http://nothings.org/ + * + */ + +#ifndef NANOSVGRAST_H +#define NANOSVGRAST_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Example Usage: + // Load SVG + struct SNVGImage* image = nsvgParseFromFile("test.svg."); + + // Create rasterizer (can be used to render multiple images). + struct NSVGrasterizer* rast = nsvgCreateRasterizer(); + // Allocate memory for image + unsigned char* img = malloc(w*h*4); + // Rasterize + nsvgRasterize(rast, image, 0,0,1, img, w, h, w*4); +*/ + +// Allocated rasterizer context. +struct NSVGrasterizer* nsvgCreateRasterizer(); + +// Rasterizes SVG image, returns RGBA image (non-premultiplied alpha) +// r - pointer to rasterizer context +// image - pointer to image to rasterize +// tx,ty - image offset (applied after scaling) +// scale - image scale +// dst - pointer to destination image data, 4 bytes per pixel (RGBA) +// w - width of the image to render +// h - height of the image to render +// stride - number of bytes per scaleline in the destination buffer +void nsvgRasterize(struct NSVGrasterizer* r, + struct NSVGimage* image, float tx, float ty, float scale, + unsigned char* dst, int w, int h, int stride); + +// Deletes rasterizer context. +void nsvgDeleteRasterizer(struct NSVGrasterizer*); + + +#ifdef __cplusplus +}; +#endif + +#endif // NANOSVGRAST_H + +#ifdef NANOSVGRAST_IMPLEMENTATION + +#include + +#define NSVG__SUBSAMPLES 5 +#define NSVG__FIXSHIFT 10 +#define NSVG__FIX (1 << NSVG__FIXSHIFT) +#define NSVG__FIXMASK (NSVG__FIX-1) +#define NSVG__MEMPAGE_SIZE 1024 + +struct NSVGedge { + float x0,y0, x1,y1; + int dir; + struct NSVGedge* next; +}; + +struct NSVGactiveEdge { + int x,dx; + float ey; + int dir; + struct NSVGactiveEdge *next; +}; + +struct NSVGmemPage { + unsigned char mem[NSVG__MEMPAGE_SIZE]; + int size; + struct NSVGmemPage* next; +}; + +struct NSVGcachedPaint { + char type; + char spread; + float xform[6]; + unsigned int colors[256]; +}; + +struct NSVGrasterizer +{ + float px, py; + + struct NSVGedge* edges; + int nedges; + int cedges; + + struct NSVGactiveEdge* freelist; + struct NSVGmemPage* pages; + struct NSVGmemPage* curpage; + + unsigned char* scanline; + int cscanline; + + unsigned char* bitmap; + int width, height, stride; +}; + +struct NSVGrasterizer* nsvgCreateRasterizer() +{ + struct NSVGrasterizer* r = (struct NSVGrasterizer*)malloc(sizeof(struct NSVGrasterizer)); + if (r == NULL) goto error; + memset(r, 0, sizeof(struct NSVGrasterizer)); + + return r; + +error: + nsvgDeleteRasterizer(r); + return NULL; +} + +void nsvgDeleteRasterizer(struct NSVGrasterizer* r) +{ + struct NSVGmemPage* p; + + if (r == NULL) return; + + p = r->pages; + while (p != NULL) { + struct NSVGmemPage* next = p->next; + free(p); + p = next; + } + + if (r->edges) free(r->edges); + if (r->scanline) free(r->scanline); + + free(r); +} + +static struct NSVGmemPage* nsvg__nextPage(struct NSVGrasterizer* r, struct NSVGmemPage* cur) +{ + struct NSVGmemPage *newp; + + // If using existing chain, return the next page in chain + if (cur != NULL && cur->next != NULL) { + return cur->next; + } + + // Alloc new page + newp = (struct NSVGmemPage*)malloc(sizeof(struct NSVGmemPage)); + if (newp == NULL) return NULL; + memset(newp, 0, sizeof(struct NSVGmemPage)); + + // Add to linked list + if (cur != NULL) + cur->next = newp; + else + r->pages = newp; + + return newp; +} + +static void nsvg__resetPool(struct NSVGrasterizer* r) +{ + struct NSVGmemPage* p = r->pages; + while (p != NULL) { + p->size = 0; + p = p->next; + } + r->curpage = r->pages; +} + +static unsigned char* nsvg__alloc(struct NSVGrasterizer* r, int size) +{ + unsigned char* buf; + if (size > NSVG__MEMPAGE_SIZE) return NULL; + if (r->curpage == NULL || r->curpage->size+size > NSVG__MEMPAGE_SIZE) { + r->curpage = nsvg__nextPage(r, r->curpage); + } + buf = &r->curpage->mem[r->curpage->size]; + r->curpage->size += size; + return buf; +} + +static void nsvg__addEdge(struct NSVGrasterizer* r, float x0, float y0, float x1, float y1) +{ + struct NSVGedge* e; + + // Skip horizontal edges + if (y0 == y1) + return; + + if (r->nedges+1 > r->cedges) { + r->cedges = r->cedges > 0 ? r->cedges * 2 : 64; + r->edges = (struct NSVGedge*)realloc(r->edges, sizeof(struct NSVGedge) * r->cedges); + if (r->edges == NULL) return; + } + + e = &r->edges[r->nedges]; + r->nedges++; + + if (y0 < y1) { + e->x0 = x0; + e->y0 = y0; + e->x1 = x1; + e->y1 = y1; + e->dir = 1; + } else { + e->x0 = x1; + e->y0 = y1; + e->x1 = x0; + e->y1 = y0; + e->dir = -1; + } +} + +static float nsvg__absf(float x) { return x < 0 ? -x : x; } + +static void nsvg__flattenCubicBez(struct NSVGrasterizer* r, + float x1, float y1, float x2, float y2, + float x3, float y3, float x4, float y4, + float tol, int level) +{ + float x12,y12,x23,y23,x34,y34,x123,y123,x234,y234,x1234,y1234; + + if (level > 10) return; + + if (nsvg__absf(x1+x3-x2-x2) + nsvg__absf(y1+y3-y2-y2) + nsvg__absf(x2+x4-x3-x3) + nsvg__absf(y2+y4-y3-y3) < tol) { + nsvg__addEdge(r, r->px, r->py, x4, y4); + r->px = x4; + r->py = y4; + return; + } + + x12 = (x1+x2)*0.5f; + y12 = (y1+y2)*0.5f; + x23 = (x2+x3)*0.5f; + y23 = (y2+y3)*0.5f; + x34 = (x3+x4)*0.5f; + y34 = (y3+y4)*0.5f; + x123 = (x12+x23)*0.5f; + y123 = (y12+y23)*0.5f; + x234 = (x23+x34)*0.5f; + y234 = (y23+y34)*0.5f; + x1234 = (x123+x234)*0.5f; + y1234 = (y123+y234)*0.5f; + + nsvg__flattenCubicBez(r, x1,y1, x12,y12, x123,y123, x1234,y1234, tol, level+1); + nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, tol, level+1); +} + +static void nsvg__flattenShape(struct NSVGrasterizer* r, struct NSVGshape* shape, float scale) +{ + struct NSVGpath* path; + float tol = 0.25f * 4.0f / scale; + int i; + + for (path = shape->paths; path != NULL; path = path->next) { + // Flatten path + r->px = path->pts[0]; + r->py = path->pts[1]; + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; + nsvg__flattenCubicBez(r, p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7], tol, 0); + } + // Close path + nsvg__addEdge(r, r->px,r->py, path->pts[0],path->pts[1]); + } +} + +static int nsvg__cmpEdge(const void *p, const void *q) +{ + struct NSVGedge* a = (struct NSVGedge*)p; + struct NSVGedge* b = (struct NSVGedge*)q; + + if (a->y0 < b->y0) return -1; + if (a->y0 > b->y0) return 1; + return 0; +} + + +static struct NSVGactiveEdge* nsvg__addActive(struct NSVGrasterizer* r, struct NSVGedge* e, float startPoint) +{ + struct NSVGactiveEdge* z; + + if (r->freelist != NULL) { + // Restore from freelist. + z = r->freelist; + r->freelist = z->next; + } else { + // Alloc new edge. + z = (struct NSVGactiveEdge*)nsvg__alloc(r, sizeof(struct NSVGactiveEdge)); + if (z == NULL) return NULL; + } + + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); +// STBTT_assert(e->y0 <= start_point); + // round dx down to avoid going too far + if (dxdy < 0) + z->dx = -floorf(NSVG__FIX * -dxdy); + else + z->dx = floorf(NSVG__FIX * dxdy); + z->x = floorf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0))); +// z->x -= off_x * FIX; + z->ey = e->y1; + z->next = 0; + z->dir = e->dir; + + return z; +} + +static void nsvg__freeActive(struct NSVGrasterizer* r, struct NSVGactiveEdge* z) +{ + z->next = r->freelist; + r->freelist = z; +} + +// note: this routine clips fills that extend off the edges... ideally this +// wouldn't happen, but it could happen if the truetype glyph bounding boxes +// are wrong, or if the user supplies a too-small bitmap +static void nsvg__fillActiveEdges(unsigned char* scanline, int len, struct NSVGactiveEdge* e, int maxWeight, int* xmin, int* xmax) +{ + // non-zero winding fill + int x0 = 0, w = 0; + + while (e != NULL) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->dir; + } else { + int x1 = e->x; w += e->dir; + // if we went to zero, we need to draw + if (w == 0) { + int i = x0 >> NSVG__FIXSHIFT; + int j = x1 >> NSVG__FIXSHIFT; + if (i < *xmin) *xmin = i; + if (j > *xmax) *xmax = j; + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] += (unsigned char)((x1 - x0) * maxWeight >> NSVG__FIXSHIFT); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] += (unsigned char)(((NSVG__FIX - (x0 & NSVG__FIXMASK)) * maxWeight) >> NSVG__FIXSHIFT); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] += (unsigned char)(((x1 & NSVG__FIXMASK) * maxWeight) >> NSVG__FIXSHIFT); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] += (unsigned char)maxWeight; + } + } + } + } + e = e->next; + } +} + +static float nsvg__clampf(float a, float mn, float mx) { return a < mn ? mn : (a > mx ? mx : a); } + +static unsigned int nsvg__RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return (r) | (g << 8) | (b << 16) | (a << 24); +} + +static unsigned int nsvg__lerpRGBA(unsigned int c0, unsigned int c1, float u) +{ + int iu = (float)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); + int r = (((c0) & 0xff)*(256-iu) + (((c1) & 0xff)*iu)) >> 8; + int g = (((c0>>8) & 0xff)*(256-iu) + (((c1>>8) & 0xff)*iu)) >> 8; + int b = (((c0>>16) & 0xff)*(256-iu) + (((c1>>16) & 0xff)*iu)) >> 8; + int a = (((c0>>24) & 0xff)*(256-iu) + (((c1>>24) & 0xff)*iu)) >> 8; + return nsvg__RGBA(r,g,b,a); +} + +static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, + float tx, float ty, float scale, struct NSVGcachedPaint* cache) +{ + + if (cache->type == NSVG_PAINT_COLOR) { + int i, cr, cg, cb, ca; + cr = cache->colors[0] & 0xff; + cg = (cache->colors[0] >> 8) & 0xff; + cb = (cache->colors[0] >> 16) & 0xff; + ca = (cache->colors[0] >> 24) & 0xff; + + for (i = 0; i < count; i++) { + int r,g,b; + int a = ((int)cover[0] * ca) >> 8; + int ia = 255 - a; + // Premultiply + r = (cr * a) >> 8; + g = (cg * a) >> 8; + b = (cb * a) >> 8; + + // Blend over + r += ((ia * (int)dst[0]) >> 8); + g += ((ia * (int)dst[1]) >> 8); + b += ((ia * (int)dst[2]) >> 8); + a += ((ia * (int)dst[3]) >> 8); + + dst[0] = (unsigned char)r; + dst[1] = (unsigned char)g; + dst[2] = (unsigned char)b; + dst[3] = (unsigned char)a; + + cover++; + dst += 4; + } + } else if (cache->type == NSVG_PAINT_LINEAR_GRADIENT) { + // TODO: spread modes. + // TODO: plenty of opportunities to optimize. + float fx, fy, dx, gy; + float* t = cache->xform; + int i, cr, cg, cb, ca; + unsigned int c; + + fx = (x - tx) / scale; + fy = (y - ty) / scale; + dx = 1.0f / scale; + + for (i = 0; i < count; i++) { + int r,g,b,a,ia; + gy = fx*t[1] + fy*t[3] + t[5]; + c = cache->colors[(int)nsvg__clampf(gy*255.0f, 0, 255.0f)]; + cr = (c) & 0xff; + cg = (c >> 8) & 0xff; + cb = (c >> 16) & 0xff; + ca = (c >> 24) & 0xff; + + a = ((int)cover[0] * ca) >> 8; + ia = 255 - a; + + // Premultiply + r = (cr * a) >> 8; + g = (cg * a) >> 8; + b = (cb * a) >> 8; + + // Blend over + r += ((ia * (int)dst[0]) >> 8); + g += ((ia * (int)dst[1]) >> 8); + b += ((ia * (int)dst[2]) >> 8); + a += ((ia * (int)dst[3]) >> 8); + + dst[0] = (unsigned char)r; + dst[1] = (unsigned char)g; + dst[2] = (unsigned char)b; + dst[3] = (unsigned char)a; + + cover++; + dst += 4; + fx += dx; + } + } else if (cache->type == NSVG_PAINT_RADIAL_GRADIENT) { + // TODO: spread modes. + // TODO: plenty of opportunities to optimize. + // TODO: focus (fx,fy) + float fx, fy, dx, gx, gy, gd; + float* t = cache->xform; + int i, cr, cg, cb, ca; + unsigned int c; + + fx = (x - tx) / scale; + fy = (y - ty) / scale; + dx = 1.0f / scale; + + for (i = 0; i < count; i++) { + int r,g,b,a,ia; + gx = fx*t[0] + fy*t[2] + t[4]; + gy = fx*t[1] + fy*t[3] + t[5]; + gd = sqrtf(gx*gx + gy*gy); + c = cache->colors[(int)nsvg__clampf(gd*255.0f, 0, 255.0f)]; + cr = (c) & 0xff; + cg = (c >> 8) & 0xff; + cb = (c >> 16) & 0xff; + ca = (c >> 24) & 0xff; + + a = ((int)cover[0] * ca) >> 8; + ia = 255 - a; + + // Premultiply + r = (cr * a) >> 8; + g = (cg * a) >> 8; + b = (cb * a) >> 8; + + // Blend over + r += ((ia * (int)dst[0]) >> 8); + g += ((ia * (int)dst[1]) >> 8); + b += ((ia * (int)dst[2]) >> 8); + a += ((ia * (int)dst[3]) >> 8); + + dst[0] = (unsigned char)r; + dst[1] = (unsigned char)g; + dst[2] = (unsigned char)b; + dst[3] = (unsigned char)a; + + cover++; + dst += 4; + fx += dx; + } + } +} + +static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float ty, float scale, struct NSVGcachedPaint* cache) +{ + struct NSVGactiveEdge *active = NULL; + int y, s; + int e = 0; + int maxWeight = (255 / NSVG__SUBSAMPLES); // weight per vertical scanline + int xmin, xmax; + + for (y = 0; y < r->height; y++) { + memset(r->scanline, 0, r->width); + xmin = r->width; + xmax = 0; + for (s = 0; s < NSVG__SUBSAMPLES; ++s) { + // find center of pixel for this scanline + float scany = y*NSVG__SUBSAMPLES + s + 0.5f; + struct NSVGactiveEdge **step = &active; + + // update all active edges; + // remove all active edges that terminate before the center of this scanline + while (*step) { + struct NSVGactiveEdge *z = *step; + if (z->ey <= scany) { + *step = z->next; // delete from list +// NSVG__assert(z->valid); + nsvg__freeActive(r, z); + } else { + z->x += z->dx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + } + + // resort the list if needed + for (;;) { + int changed = 0; + step = &active; + while (*step && (*step)->next) { + if ((*step)->x > (*step)->next->x) { + struct NSVGactiveEdge* t = *step; + struct NSVGactiveEdge* q = t->next; + t->next = q->next; + q->next = t; + *step = q; + changed = 1; + } + step = &(*step)->next; + } + if (!changed) break; + } + + // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline + while (e < r->nedges && r->edges[e].y0 <= scany) { + if (r->edges[e].y1 > scany) { + struct NSVGactiveEdge* z = nsvg__addActive(r, &r->edges[e], scany); + if (z == NULL) break; + // find insertion point + if (active == NULL) { + active = z; + } else if (z->x < active->x) { + // insert at front + z->next = active; + active = z; + } else { + // find thing to insert AFTER + struct NSVGactiveEdge* p = active; + while (p->next && p->next->x < z->x) + p = p->next; + // at this point, p->next->x is NOT < z->x + z->next = p->next; + p->next = z; + } + } + e++; + } + + // now process all active edges in non-zero fashion + if (active != NULL) + nsvg__fillActiveEdges(r->scanline, r->width, active, maxWeight, &xmin, &xmax); + } + // Blit + if (xmin < 0) xmin = 0; + if (xmax > r->width-1) xmax = r->width-1; + if (xmin <= xmax) { + nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty,scale,cache); + } + } + +} + +static void nsvg__unpremultiplyAlpha(unsigned char* image, int w, int h, int stride) +{ + int x,y; + + // Unpremultiply + for (y = 0; y < h; y++) { + unsigned char *row = &image[y*stride]; + for (x = 0; x < w; x++) { + int r = row[0], g = row[1], b = row[2], a = row[3]; + if (a != 0) { + row[0] = (int)(r*255/a); + row[1] = (int)(g*255/a); + row[2] = (int)(b*255/a); + } + row += 4; + } + } + + // Defringe + for (y = 0; y < h; y++) { + unsigned char *row = &image[y*stride]; + for (x = 0; x < w; x++) { + int r = 0, g = 0, b = 0, a = row[3], n = 0; + if (a == 0) { + if (x-1 > 0 && row[-1] != 0) { + r += row[-4]; + g += row[-3]; + b += row[-2]; + n++; + } + if (x+1 < w && row[7] != 0) { + r += row[4]; + g += row[5]; + b += row[6]; + n++; + } + if (y-1 > 0 && row[-stride+3] != 0) { + r += row[-stride]; + g += row[-stride+1]; + b += row[-stride+2]; + n++; + } + if (y+1 < h && row[stride+3] != 0) { + r += row[stride]; + g += row[stride+1]; + b += row[stride+2]; + n++; + } + if (n > 0) { + row[0] = r/n; + row[1] = g/n; + row[2] = b/n; + } + } + row += 4; + } + } +} + + +static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* paint) +{ + int i, j; + struct NSVGgradient* grad; + + cache->type = paint->type; + + if (paint->type == NSVG_PAINT_COLOR) { + cache->colors[0] = paint->color; + return; + } + + grad = paint->gradient; + + cache->spread = grad->spread; + memcpy(cache->xform, grad->xform, sizeof(float)*6); + + if (grad->nstops == 0) { + for (i = 0; i < 256; i++) + cache->colors[i] = 0; + } if (grad->nstops == 1) { + for (i = 0; i < 256; i++) + cache->colors[i] = grad->stops[i].color; + } else { + unsigned int ca, cb; + float ua, ub, du, u; + int ia, ib, count; + + ca = grad->stops[0].color; + cb = grad->stops[grad->nstops-1].color; + ua = nsvg__clampf(grad->stops[0].offset, 0, 1); + ub = nsvg__clampf(grad->stops[grad->nstops-1].offset, ua, 1); + ia = ua * 255.0f; + ib = ub * 255.0f; + for (i = 0; i < ia; i++) { + cache->colors[i] = ca; + } + + for (i = 0; i < grad->nstops-1; i++) { + ca = grad->stops[i].color; + cb = grad->stops[i+1].color; + ua = nsvg__clampf(grad->stops[i].offset, 0, 1); + ub = nsvg__clampf(grad->stops[i+1].offset, 0, 1); + ia = ua * 255.0f; + ib = ub * 255.0f; + count = ib - ia; + if (count <= 0) continue; + u = 0; + du = 1.0f / (float)count; + for (j = 0; j < count; j++) { + cache->colors[ia+j] = nsvg__lerpRGBA(ca,cb,u); + u += du; + } + } + + for (i = ib; i < 256; i++) + cache->colors[i] = cb; + } + +} + +void nsvgRasterize(struct NSVGrasterizer* r, + struct NSVGimage* image, float tx, float ty, float scale, + unsigned char* dst, int w, int h, int stride) +{ + struct NSVGshape *shape = NULL; + struct NSVGedge *e = NULL; + struct NSVGcachedPaint cache; + int i; + + r->bitmap = dst; + r->width = w; + r->height = h; + r->stride = stride; + + if (w > r->cscanline) { + r->cscanline = w; + r->scanline = (unsigned char*)realloc(r->scanline, w); + if (r->scanline == NULL) return; + } + + for (i = 0; i < h; i++) + memset(&dst[i*stride], 0, w*4); + + for (shape = image->shapes; shape != NULL; shape = shape->next) { + + if (shape->fill.type == NSVG_PAINT_NONE) + continue; + + nsvg__resetPool(r); + r->freelist = NULL; + r->nedges = 0; + + nsvg__flattenShape(r, shape, scale); + + // Scale and translate edges + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + e->x0 = tx + e->x0 * scale; + e->y0 = (ty + e->y0 * scale) * NSVG__SUBSAMPLES; + e->x1 = tx + e->x1 * scale; + e->y1 = (ty + e->y1 * scale) * NSVG__SUBSAMPLES; + } + + // Rasterize edges + qsort(r->edges, r->nedges, sizeof(struct NSVGedge), nsvg__cmpEdge); + + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->fill); + + nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache); + } + + nsvg__unpremultiplyAlpha(dst, w, h, stride); + + r->bitmap = NULL; + r->width = 0; + r->height = 0; + r->stride = 0; +} + +#endif diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp new file mode 100644 index 000000000..f11bbdfbe --- /dev/null +++ b/src/resources/SVGResource.cpp @@ -0,0 +1,88 @@ +#include "SVGResource.h" +#include "../nanosvg/nanosvg.h" +#include "../nanosvg/nanosvgrast.h" +#include "../Log.h" + +#define DPI 96 + +SVGResource::SVGResource(const std::string& path, bool tile) : TextureResource(path, tile), mSVGImage(NULL) +{ + assert(tile == false); +} + +SVGResource::~SVGResource() +{ + deinitSVG(); +} + +void SVGResource::unload(std::shared_ptr& rm) +{ + deinitSVG(); + TextureResource::unload(rm); +} + +void SVGResource::initFromMemory(const char* file, size_t length) +{ + deinit(); + deinitSVG(); + + // nsvgParse excepts a modifiable, null-terminated string + char* copy = (char*)malloc(length + 1); + memcpy(copy, file, length); + copy[length] = '\0'; + + mSVGImage = nsvgParse(copy, "px", DPI); + free(copy); + + if(!mSVGImage) + { + LOG(LogError) << "Error parsing SVG image."; + return; + } + + rasterizeAt((int)mSVGImage->width, (int)mSVGImage->height); +} + +void SVGResource::rasterizeAt(size_t width, size_t height) +{ + if(!mSVGImage) + return; + + unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); + + NSVGrasterizer* rast = nsvgCreateRasterizer(); + nsvgRasterize(rast, mSVGImage, 0, 0, width / mSVGImage->width, imagePx, width, height, width * 4); + nsvgDeleteRasterizer(rast); + + // flip the pixels + unsigned int temp; + unsigned int* arr = (unsigned int*)imagePx; + for(size_t y = 0; y < height / 2; y++) + { + for(size_t x = 0; x < width; x++) + { + temp = arr[x + (y * width)]; + arr[x + (y * width)] = arr[x + (height * width) - ((y + 1) * width)]; + arr[x + (height * width) - ((y + 1) * width)] = temp; + } + } + + initFromPixels(imagePx, width, height); + free(imagePx); +} + +Eigen::Vector2i SVGResource::getImageSize() const +{ + if(mSVGImage) + return Eigen::Vector2i((int)mSVGImage->width, (int)mSVGImage->height); + + return Eigen::Vector2i::Zero(); +} + +void SVGResource::deinitSVG() +{ + if(mSVGImage) + nsvgDelete(mSVGImage); + + mSVGImage = NULL; +} diff --git a/src/resources/SVGResource.h b/src/resources/SVGResource.h new file mode 100644 index 000000000..46519d799 --- /dev/null +++ b/src/resources/SVGResource.h @@ -0,0 +1,25 @@ +#pragma once + +#include "TextureResource.h" + +struct NSVGimage; + +class SVGResource : public TextureResource +{ +public: + virtual ~SVGResource(); + + virtual void unload(std::shared_ptr& rm) override; + + virtual void initFromMemory(const char* image, size_t length) override; + + void rasterizeAt(size_t width, size_t height); + Eigen::Vector2i getImageSize() const; + +protected: + friend TextureResource; + SVGResource(const std::string& path, bool tile); + void deinitSVG(); + + NSVGimage* mSVGImage; +}; diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index 398161122..98d3174c8 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -5,12 +5,13 @@ #include "../ImageIO.h" #include "../Renderer.h" +#include "SVGResource.h" + std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; TextureResource::TextureResource(const std::string& path, bool tile) : mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()), mTile(tile) { - reload(ResourceManager::getInstance()); } TextureResource::~TextureResource() @@ -26,28 +27,23 @@ void TextureResource::unload(std::shared_ptr& rm) void TextureResource::reload(std::shared_ptr& rm) { if(!mPath.empty()) - initFromResource(rm->getFileData(mPath)); + { + const ResourceData& data = rm->getFileData(mPath); + initFromMemory((const char*)data.ptr.get(), data.length); + } } -void TextureResource::initFromResource(const ResourceData data) +void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height) { - //make sure we aren't going to leak an old texture deinit(); - size_t width, height; - std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32(const_cast(data.ptr.get()), data.length, width, height); - - if(imageRGBA.size() == 0) - { - LOG(LogError) << "Could not initialize texture (invalid resource data)!"; - return; - } + assert(width > 0 && height > 0); //now for the openGL texture stuff glGenTextures(1, &mTextureID); glBindTexture(GL_TEXTURE_2D, mTextureID); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageRGBA.data()); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataRGBA); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -61,8 +57,6 @@ void TextureResource::initFromResource(const ResourceData data) void TextureResource::initFromMemory(const char* data, size_t length) { - deinit(); - size_t width, height; std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(data), length, width, height); @@ -72,20 +66,7 @@ void TextureResource::initFromMemory(const char* data, size_t length) return; } - //now for the openGL texture stuff - glGenTextures(1, &mTextureID); - glBindTexture(GL_TEXTURE_2D, mTextureID); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageRGBA.data()); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); - - mTextureSize << width, height; + initFromPixels(imageRGBA.data(), width, height); } void TextureResource::deinit() @@ -97,7 +78,7 @@ void TextureResource::deinit() } } -Eigen::Vector2i TextureResource::getSize() const +const Eigen::Vector2i& TextureResource::getSize() const { return mTextureSize; } @@ -135,8 +116,20 @@ std::shared_ptr TextureResource::get(const std::string& path, b return foundTexture->second.lock(); } - std::shared_ptr tex = std::shared_ptr(new TextureResource(path, tile)); + // need to create it + std::shared_ptr tex; + + // is it an SVG? + if(path.substr(path.size() - 4, std::string::npos) == ".svg") + { + // probably + tex = std::shared_ptr(new SVGResource(path, tile)); + }else{ + tex = std::shared_ptr(new TextureResource(path, tile)); + } + sTextureMap[key] = std::weak_ptr(tex); rm->addReloadable(tex); + tex->reload(ResourceManager::getInstance()); return tex; } diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index 2ec75e43f..4c3893e0a 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -16,28 +16,29 @@ public: virtual ~TextureResource(); - void unload(std::shared_ptr& rm) override; - void reload(std::shared_ptr& rm) override; + virtual void unload(std::shared_ptr& rm) override; + virtual void reload(std::shared_ptr& rm) override; bool isTiled() const; - Eigen::Vector2i getSize() const; + const Eigen::Vector2i& getSize() const; void bind() const; // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). - void initFromMemory(const char* image, size_t length); + virtual void initFromMemory(const char* file, size_t length); -private: + // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). + void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + +protected: TextureResource(const std::string& path, bool tile); - - void initFromPath(); - void initFromResource(const ResourceData data); void deinit(); Eigen::Vector2i mTextureSize; - GLuint mTextureID; const std::string mPath; const bool mTile; +private: + GLuint mTextureID; typedef std::pair TextureKeyType; static std::map< TextureKeyType, std::weak_ptr > sTextureMap; }; From ada4f83089140bb68b4498ba3c239db86764cfb8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 20 Mar 2014 21:47:45 -0500 Subject: [PATCH 204/386] Fixed ComponentList not passing focus to entries. Some improvements to TextEditComponent: - cursor now repeats if you hold left/right - use FONT_PATH_LIGHT instead of regular to match UI concepts - added some horizontal and vertical padding to the text area - cursor is a little thinner and not as freakishly tall --- src/components/ComponentGrid.cpp | 2 +- src/components/ComponentList.cpp | 17 +++ src/components/ComponentList.h | 1 + src/components/TextEditComponent.cpp | 169 ++++++++++++++++----------- src/components/TextEditComponent.h | 21 +++- 5 files changed, 139 insertions(+), 71 deletions(-) diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index e73b45629..d51f4e654 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -376,7 +376,7 @@ void ComponentGrid::render(const Eigen::Affine3f& parentTrans) void ComponentGrid::textInput(const char* text) { GridEntry* selectedEntry = getCellAt(mCursor); - if(selectedEntry != NULL) + if(selectedEntry != NULL && selectedEntry->canFocus) selectedEntry->component->textInput(text); } diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index c6085ea0a..e0068f5b0 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -121,6 +121,15 @@ void ComponentList::onCursorChanged(const CursorState& state) mCameraOffset = 0; } + // this is terribly inefficient but we don't know what we came from so... + if(size()) + { + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + it->data.elements.back().component->onFocusLost(); + + mEntries.at(mCursor).data.elements.back().component->onFocusGained(); + } + updateHelpPrompts(); } @@ -244,6 +253,14 @@ void ComponentList::updateElementSize(const ComponentListRow& row) } } +void ComponentList::textInput(const char* text) +{ + if(!size()) + return; + + mEntries.at(mCursor).data.elements.back().component->textInput(text); +} + std::vector ComponentList::getHelpPrompts() { if(!size()) diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index baf736e10..c7596bb51 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -47,6 +47,7 @@ public: void addRow(const ComponentListRow& row, bool setCursorHere = false); + void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index ed85aef23..49a0b6308 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -3,39 +3,39 @@ #include "../resources/Font.h" #include "../Window.h" #include "../Renderer.h" +#include "../Util.h" + +#define TEXT_PADDING_HORIZ 10 +#define TEXT_PADDING_VERT 2 + +#define CURSOR_REPEAT_START_DELAY 500 +#define CURSOR_REPEAT_SPEED 28 // lower is faster TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, ":/textbox.png"), mFocused(false), - mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false) + mBox(window, ":/button.png"), mFocused(false), + mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false), mFont(Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT)) { addChild(&mBox); onFocusLost(); - setSize(256, (float)getFont()->getHeight()); + setSize(256, mFont->getHeight() + TEXT_PADDING_VERT); } void TextEditComponent::onFocusGained() { - mBox.setImagePath(":/textbox_glow.png"); - mBox.setEdgeColor(0x51CCFF00 | getOpacity()); - - SDL_StartTextInput(); mFocused = true; } void TextEditComponent::onFocusLost() { - mBox.setImagePath(":/textbox.png"); - mBox.setEdgeColor(0xFFFFFF00 | getOpacity()); - - SDL_StopTextInput(); mFocused = false; } void TextEditComponent::onSizeChanged() { - mBox.fitTo(getSize()); + mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-34, -32 - TEXT_PADDING_VERT)); + onTextChanged(); // wrap point probably changed } void TextEditComponent::setValue(const std::string& val) @@ -53,6 +53,7 @@ void TextEditComponent::textInput(const char* text) { if(mEditing) { + mCursorRepeatDir = 0; if(text[0] == '\b') { if(mCursor > 0) @@ -70,15 +71,33 @@ void TextEditComponent::textInput(const char* text) onCursorChanged(); } +void TextEditComponent::startEditing() +{ + SDL_StartTextInput(); + mEditing = true; + updateHelpPrompts(); +} + +void TextEditComponent::stopEditing() +{ + SDL_StopTextInput(); + mEditing = false; + updateHelpPrompts(); +} + bool TextEditComponent::input(InputConfig* config, Input input) { if(input.value == 0) + { + if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + mCursorRepeatDir = 0; + return false; + } if(config->isMappedTo("a", input) && mFocused && !mEditing) { - mEditing = true; - updateHelpPrompts(); + startEditing(); return true; } @@ -90,8 +109,7 @@ bool TextEditComponent::input(InputConfig* config, Input input) { textInput("\n"); }else{ - mEditing = false; - updateHelpPrompts(); + stopEditing(); } return true; @@ -99,33 +117,21 @@ bool TextEditComponent::input(InputConfig* config, Input input) if((config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_ESCAPE) || (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("b", input))) { - mEditing = false; - updateHelpPrompts(); + stopEditing(); return true; } if(config->isMappedTo("up", input)) { - + // TODO }else if(config->isMappedTo("down", input)) { - - }else if(config->isMappedTo("left", input)) + // TODO + }else if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) { - mCursor--; - if(mCursor < 0) - mCursor = 0; - - onCursorChanged(); - }else if(config->isMappedTo("right", input)) - { - mCursor++; - if(mText.length() == 0) - mCursor = 0; - if(mCursor >= (int)mText.length()) - mCursor = mText.length(); - - onCursorChanged(); + mCursorRepeatDir = config->isMappedTo("left", input) ? -1 : 1; + mCursorRepeatTimer = -(CURSOR_REPEAT_START_DELAY - CURSOR_REPEAT_SPEED); + moveCursor(mCursorRepeatDir); } //consume all input when editing text @@ -135,12 +141,41 @@ bool TextEditComponent::input(InputConfig* config, Input input) return false; } +void TextEditComponent::update(int deltaTime) +{ + updateCursorRepeat(deltaTime); + GuiComponent::update(deltaTime); +} + +void TextEditComponent::updateCursorRepeat(int deltaTime) +{ + if(mCursorRepeatDir == 0) + return; + + mCursorRepeatTimer += deltaTime; + while(mCursorRepeatTimer >= CURSOR_REPEAT_SPEED) + { + moveCursor(mCursorRepeatDir); + mCursorRepeatTimer -= CURSOR_REPEAT_SPEED; + } +} + +void TextEditComponent::moveCursor(int amt) +{ + mCursor += amt; + + if(mCursor < 0) + mCursor = 0; + if(mCursor >= (int)mText.length()) + mCursor = mText.length(); + + onCursorChanged(); +} + void TextEditComponent::onTextChanged() { - std::shared_ptr f = getFont(); - - std::string wrappedText = (isMultiline() ? f->wrapText(mText, mSize.x()) : mText); - mTextCache = std::unique_ptr(f->buildTextCache(wrappedText, 0, 0, 0x00000000 | getOpacity())); + std::string wrappedText = (isMultiline() ? mFont->wrapText(mText, getTextAreaSize().x()) : mText); + mTextCache = std::unique_ptr(mFont->buildTextCache(wrappedText, 0, 0, 0x77777700 | getOpacity())); if(mCursor > (int)mText.length()) mCursor = mText.length(); @@ -148,25 +183,23 @@ void TextEditComponent::onTextChanged() void TextEditComponent::onCursorChanged() { - std::shared_ptr font = getFont(); - if(isMultiline()) { - Eigen::Vector2f textSize = font->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); + Eigen::Vector2f textSize = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); - if(mScrollOffset.y() + mSize.y() < textSize.y() + font->getHeight()) //need to scroll down? + if(mScrollOffset.y() + getTextAreaSize().y() < textSize.y() + mFont->getHeight()) //need to scroll down? { - mScrollOffset[1] = textSize.y() - mSize.y() + font->getHeight(); + mScrollOffset[1] = textSize.y() - getTextAreaSize().y() + mFont->getHeight(); }else if(mScrollOffset.y() > textSize.y()) //need to scroll up? { mScrollOffset[1] = textSize.y(); } }else{ - Eigen::Vector2f cursorPos = font->sizeText(mText.substr(0, mCursor)); + Eigen::Vector2f cursorPos = mFont->sizeText(mText.substr(0, mCursor)); - if(mScrollOffset.x() + mSize.x() < cursorPos.x()) + if(mScrollOffset.x() + getTextAreaSize().x() < cursorPos.x()) { - mScrollOffset[0] = cursorPos.x() - mSize.x(); + mScrollOffset[0] = cursorPos.x() - getTextAreaSize().x(); }else if(mScrollOffset.x() > cursorPos.x()) { mScrollOffset[0] = cursorPos.x(); @@ -179,52 +212,58 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = getTransform() * parentTrans; renderChildren(trans); + // text + cursor rendering + // offset into our "text area" (padding) + trans.translation() += Eigen::Vector3f(getTextAreaPos().x(), getTextAreaPos().y(), 0); + Eigen::Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); - Eigen::Vector3f dimScaled = trans * Eigen::Vector3f(mSize.x(), mSize.y(), 0); + Eigen::Vector3f dimScaled = trans * Eigen::Vector3f(getTextAreaSize().x(), getTextAreaSize().y(), 0); // use "text area" size for clipping Eigen::Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); Renderer::pushClipRect(clipPos, clipDim); trans.translate(Eigen::Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0)); + trans = roundMatrix(trans); Renderer::setMatrix(trans); - std::shared_ptr f = getFont(); - if(mTextCache != NULL) + if(mTextCache) { - f->renderTextCache(mTextCache.get()); + mFont->renderTextCache(mTextCache.get()); } - //draw cursor + // pop the clip early to allow the cursor to be drawn outside of the "text area" + Renderer::popClipRect(); + + // draw cursor if(mEditing) { Eigen::Vector2f cursorPos; if(isMultiline()) { - cursorPos = f->getWrappedTextCursorOffset(mText, mSize.x(), mCursor); + cursorPos = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); }else{ - cursorPos = f->sizeText(mText.substr(0, mCursor)); + cursorPos = mFont->sizeText(mText.substr(0, mCursor)); cursorPos[1] = 0; } - Renderer::drawRect((int)cursorPos.x(), (int)cursorPos.y(), 3, (int)f->getHeight(), 0x000000FF); + float cursorHeight = mFont->getHeight() * 0.8f; + Renderer::drawRect(cursorPos.x(), cursorPos.y() + (mFont->getHeight() - cursorHeight) / 2, 2.0f, cursorHeight, 0x000000FF); } - - Renderer::popClipRect(); -} - -std::shared_ptr TextEditComponent::getFont() -{ - return Font::get(FONT_SIZE_SMALL); } bool TextEditComponent::isMultiline() { - return (getSize().y() > (float)getFont()->getHeight()); + return (getSize().y() > mFont->getHeight() * 1.25f); } -bool TextEditComponent::isEditing() const +Eigen::Vector2f TextEditComponent::getTextAreaPos() const { - return mEditing; + return Eigen::Vector2f(TEXT_PADDING_HORIZ / 2.0f, TEXT_PADDING_VERT / 2.0f); +} + +Eigen::Vector2f TextEditComponent::getTextAreaSize() const +{ + return Eigen::Vector2f(mSize.x() - TEXT_PADDING_HORIZ, mSize.y() - TEXT_PADDING_VERT); } std::vector TextEditComponent::getHelpPrompts() diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index f1875dfba..62c24688f 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -14,6 +14,7 @@ public: void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; void onFocusGained() override; @@ -24,26 +25,36 @@ public: void setValue(const std::string& val) override; std::string getValue() const override; - bool isEditing() const; + inline bool isEditing() const { return mEditing; }; virtual std::vector getHelpPrompts() override; private: + void startEditing(); + void stopEditing(); + void onTextChanged(); void onCursorChanged(); + void updateCursorRepeat(int deltaTime); + void moveCursor(int amt); + bool isMultiline(); + Eigen::Vector2f getTextAreaPos() const; + Eigen::Vector2f getTextAreaSize() const; std::string mText; bool mFocused; - bool mEditing; - Eigen::Vector2f mScrollOffset; - int mCursor; + int mCursor; // cursor position in characters - std::shared_ptr getFont(); + int mCursorRepeatTimer; + int mCursorRepeatDir; + + Eigen::Vector2f mScrollOffset; NinePatchComponent mBox; + std::shared_ptr mFont; std::unique_ptr mTextCache; }; From 91546ac2bcc1baf8f080ca5138873f03bf4f49c8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 21 Mar 2014 11:10:19 -0500 Subject: [PATCH 205/386] Added new text editing style to GuiMetaDataEd as per UI concepts. --- CMakeLists.txt | 2 + src/MetaData.cpp | 36 ----------------- src/MetaData.h | 19 --------- src/components/DateTimeComponent.cpp | 4 +- src/components/DateTimeComponent.h | 17 ++++---- src/components/TextEditComponent.h | 1 + src/guis/GuiMetaDataEd.cpp | 60 +++++++++++++++++++++++++++- src/guis/GuiTextEditPopup.cpp | 59 +++++++++++++++++++++++++++ src/guis/GuiTextEditPopup.h | 27 +++++++++++++ 9 files changed, 157 insertions(+), 68 deletions(-) create mode 100644 src/guis/GuiTextEditPopup.cpp create mode 100644 src/guis/GuiTextEditPopup.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c60009dfb..359dcb081 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,6 +192,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h @@ -276,6 +277,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 917fb07f4..5ea5a5bb3 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -2,11 +2,6 @@ #include "components/TextComponent.h" #include "Log.h" -#include "components/TextEditComponent.h" -#include "components/RatingComponent.h" -#include "components/DateTimeComponent.h" - - MetaDataDecl gameDecls[] = { {"name", MD_STRING, "", false}, {"desc", MD_MULTILINE_STRING, "", false}, @@ -133,37 +128,6 @@ boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const return string_to_ptime(get(key), "%Y%m%dT%H%M%S%F%q"); } -std::shared_ptr MetaDataList::makeEditor(Window* window, MetaDataType as) -{ - switch(as) - { - case MD_RATING: - { - return std::make_shared(window); - } - case MD_MULTILINE_STRING: - { - auto comp = std::make_shared(window); - comp->setSize(comp->getSize().x(), comp->getSize().y() * 3); - return comp; - } - case MD_DATE: - { - return std::make_shared(window); - } - case MD_TIME: - { - auto comp = std::make_shared(window); - comp->setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); - return comp; - } - default: - { - return std::make_shared(window); - } - } -} - //util function boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt) { diff --git a/src/MetaData.h b/src/MetaData.h index f7a2b5c0a..9842edfb7 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -55,8 +55,6 @@ public: float getFloat(const std::string& key) const; boost::posix_time::ptime getTime(const std::string& key) const; - static std::shared_ptr makeEditor(Window* window, MetaDataType as); - inline MetaDataListType getType() const { return mType; } inline const std::vector& getMDD() const { return getMDDByType(getType()); } @@ -64,20 +62,3 @@ private: MetaDataListType mType; std::map mMap; }; - - - -//options for storing metadata... -//store internally everything as a string - this is all going to be read to/from XML anyway, after all -// - problem: this does not play nice with lists of values -//store using individual get/set functions ala Settings - this is a fair amount of work but the most explicit and type-safe, for better or worse - -//let's think about some of the special types we would like to support... -//image paths, sound paths, ratings, play counts -//these get represented behind-the-scenes as strings, floats, and integers, and are eventually saved as strings -//the only specialty is how they're edited and viewed, really - -//so we need... -//to be able to iterate through the available metadata -//create components designed to either DISPLAY or EDIT a given piece of metadata -//save and load metadata diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index aeda8cbc4..390807c85 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -5,8 +5,8 @@ #include "../Log.h" #include "../Util.h" -DateTimeComponent::DateTimeComponent(Window* window) : GuiComponent(window), - mEditing(false), mEditIndex(0), mDisplayMode(DISP_DATE), mRelativeUpdateAccumulator(0), +DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), + mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), mColor(0x000000FF) { mSize << 64, (float)getFont()->getHeight(); diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index 0fd5274fc..2df70b08b 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -8,8 +8,14 @@ class DateTimeComponent : public GuiComponent { public: - // Display mode will initialize to DISP_DATE. - DateTimeComponent(Window* window); + enum DisplayMode + { + DISP_DATE, + DISP_DATE_TIME, + DISP_RELATIVE_TO_NOW + }; + + DateTimeComponent(Window* window, DisplayMode dispMode = DISP_DATE); void setValue(const std::string& val) override; std::string getValue() const override; @@ -18,13 +24,6 @@ public: void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; - enum DisplayMode - { - DISP_DATE, - DISP_DATE_TIME, - DISP_RELATIVE_TO_NOW - }; - // Set how the point in time will be displayed: // * DISP_DATE - only display the date. // * DISP_DATE_TIME - display both the date and the time on that date. diff --git a/src/components/TextEditComponent.h b/src/components/TextEditComponent.h index 62c24688f..b0f8a7e0d 100644 --- a/src/components/TextEditComponent.h +++ b/src/components/TextEditComponent.h @@ -26,6 +26,7 @@ public: std::string getValue() const override; inline bool isEditing() const { return mEditing; }; + inline const std::shared_ptr& getFont() const { return mFont; } virtual std::vector getHelpPrompts() override; diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 5cee1ed57..83b83939c 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -7,6 +7,11 @@ #include "GuiMsgBox.h" #include +#include "../components/TextEditComponent.h" +#include "../components/DateTimeComponent.h" +#include "../components/RatingComponent.h" +#include "GuiTextEditPopup.h" + GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mScraperParams(scraperParams), @@ -22,10 +27,61 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector // populate list for(auto iter = mdd.begin(); iter != mdd.end(); iter++) { - auto ed = MetaDataList::makeEditor(mWindow, iter->type); + std::shared_ptr ed; + + // create ed and add it (and any related components) to mMenu + // ed's value will be set below + switch(iter->type) + { + case MD_RATING: + { + ed = std::make_shared(window); + mMenu.addWithLabel(iter->key, ed); + break; + } + case MD_DATE: + { + ed = std::make_shared(window); + mMenu.addWithLabel(iter->key, ed); + break; + } + case MD_TIME: + { + ed = std::make_shared(window, DateTimeComponent::DISP_RELATIVE_TO_NOW); + mMenu.addWithLabel(iter->key, ed); + break; + } + case MD_MULTILINE_STRING: + default: + { + // MD_STRING + ComponentListRow row; + auto lbl = std::make_shared(mWindow, iter->key, Font::get(FONT_SIZE_SMALL), 0x777777FF); + row.addElement(lbl, true); // label + + ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF); + row.addElement(ed, true); + + auto bracket = std::make_shared(mWindow); + bracket->setImage(":/sq_bracket.png"); + bracket->setResize(Eigen::Vector2f(0, lbl->getSize().y() * 0.8f)); + row.addElement(bracket, false); + + bool multiLine = iter->type == MD_MULTILINE_STRING; + const std::string& title = iter->key; + auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) + row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] { + mWindow->pushGui(new GuiTextEditPopup(mWindow, title, ed->getValue(), updateVal, multiLine)); + }); + + mMenu.addRow(row); + break; + } + } + + assert(ed); ed->setValue(mMetaData->get(iter->key)); mEditors.push_back(ed); - mMenu.addWithLabel(iter->key, ed); } //add buttons diff --git a/src/guis/GuiTextEditPopup.cpp b/src/guis/GuiTextEditPopup.cpp new file mode 100644 index 000000000..342f74785 --- /dev/null +++ b/src/guis/GuiTextEditPopup.cpp @@ -0,0 +1,59 @@ +#include "GuiTextEditPopup.h" +#include "../components/MenuComponent.h" + +using namespace Eigen; + +GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, + const std::function& okCallback, bool multiLine, const char* acceptBtnText) + : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 3)), mMultiLine(multiLine) +{ + addChild(&mBackground); + addChild(&mGrid); + + mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, true); + + mText = std::make_shared(mWindow); + mText->setValue(initValue); + + std::vector< std::shared_ptr > buttons; + buttons.push_back(std::make_shared(mWindow, acceptBtnText, acceptBtnText, [this, okCallback] { okCallback(mText->getValue()); delete this; })); + buttons.push_back(std::make_shared(mWindow, "CANCEL", "discard changes", [this] { delete this; })); + + mButtonGrid = makeButtonGrid(mWindow, buttons); + + mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); + mGrid.setEntry(mText, Vector2i(0, 1), true, true); + mGrid.setEntry(mButtonGrid, Vector2i(0, 2), true, false); + + float textHeight = mText->getFont()->getHeight(); + if(multiLine) + textHeight *= 3; + + setSize(Renderer::getScreenWidth() * 0.5f, mTitle->getFont()->getHeight() + textHeight + mButtonGrid->getSize().y()); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); +} + +void GuiTextEditPopup::onSizeChanged() +{ + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + + // update grid + mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(2, mButtonGrid->getSize().y() / mSize.y()); + mGrid.setSize(mSize); +} + +bool GuiTextEditPopup::input(InputConfig* config, Input input) +{ + if(GuiComponent::input(config, input)) + return true; + + // pressing back when not text editing closes us + if(config->isMappedTo("b", input) && input.value) + { + delete this; + return true; + } + + return false; +} \ No newline at end of file diff --git a/src/guis/GuiTextEditPopup.h b/src/guis/GuiTextEditPopup.h new file mode 100644 index 000000000..b891efb4f --- /dev/null +++ b/src/guis/GuiTextEditPopup.h @@ -0,0 +1,27 @@ +#include "../GuiComponent.h" + +#include "../components/NinePatchComponent.h" +#include "../components/ButtonComponent.h" +#include "../components/ComponentGrid.h" +#include "../components/TextEditComponent.h" +#include "../components/TextComponent.h" + +class GuiTextEditPopup : public GuiComponent +{ +public: + GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, + const std::function& okCallback, bool multiLine, const char* acceptBtnText = "OK"); + + bool input(InputConfig* config, Input input); + void onSizeChanged(); + +private: + NinePatchComponent mBackground; + ComponentGrid mGrid; + + std::shared_ptr mTitle; + std::shared_ptr mText; + std::shared_ptr mButtonGrid; + + bool mMultiLine; +}; From 9fe7ceeb72a6af80b7ee874b217338f25268f185 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 21 Mar 2014 11:54:48 -0500 Subject: [PATCH 206/386] Changed makeButtonGrid() to return a pre-padded ComponentGrid so every GUI doesn't have to do its own thing for vertical padding. --- src/components/MenuComponent.cpp | 18 ++++++---- src/components/MenuComponent.h | 1 + src/components/ScraperSearchComponent.cpp | 43 ++++++++++++----------- src/guis/GuiGameScraper.cpp | 33 +++++++++-------- src/guis/GuiGameScraper.h | 4 +++ src/guis/GuiMsgBox.cpp | 6 ++-- src/guis/GuiScraperMulti.cpp | 1 - src/guis/GuiTextEditPopup.cpp | 2 +- 8 files changed, 59 insertions(+), 49 deletions(-) diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 59b4187fa..010fd7b4b 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -1,7 +1,8 @@ #include "MenuComponent.h" #include "ButtonComponent.h" -#define BUTTON_GRID_HEIGHT ((float)Font::get(FONT_SIZE_MEDIUM)->getHeight() + 32) +#define BUTTON_GRID_VERT_PADDING 20 +#define BUTTON_GRID_HORIZ_PADDING 16 using namespace Eigen; @@ -27,9 +28,14 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w mGrid.resetCursor(); } +float MenuComponent::getButtonGridHeight() const +{ + return (mButtonGrid ? mButtonGrid->getSize().y() : Font::get(FONT_SIZE_MEDIUM)->getHeight() + BUTTON_GRID_VERT_PADDING); +} + void MenuComponent::updateSize() { - float height = mTitle->getSize().y() + mList->getTotalRowHeight() + BUTTON_GRID_HEIGHT + 2; + float height = mTitle->getSize().y() + mList->getTotalRowHeight() + getButtonGridHeight() + 2; if(height > Renderer::getScreenHeight() * 0.7f) height = Renderer::getScreenHeight() * 0.7f; @@ -42,7 +48,7 @@ void MenuComponent::onSizeChanged() // update grid row/col sizes mGrid.setRowHeightPerc(0, mTitle->getSize().y() / mSize.y()); - mGrid.setRowHeightPerc(2, (BUTTON_GRID_HEIGHT) / mSize.y()); + mGrid.setRowHeightPerc(2, getButtonGridHeight() / mSize.y()); mGrid.setSize(mSize); } @@ -77,7 +83,7 @@ std::shared_ptr makeButtonGrid(Window* window, const std::vector< { std::shared_ptr buttonGrid = std::make_shared(window, Vector2i(buttons.size(), 1)); - float buttonGridWidth = 16.0f * buttons.size(); // initialize to padding + float buttonGridWidth = (float)BUTTON_GRID_HORIZ_PADDING * buttons.size(); // initialize to padding for(int i = 0; i < (int)buttons.size(); i++) { buttonGrid->setEntry(buttons.at(i), Vector2i(i, 0), true, false); @@ -85,10 +91,10 @@ std::shared_ptr makeButtonGrid(Window* window, const std::vector< } for(unsigned int i = 0; i < buttons.size(); i++) { - buttonGrid->setColWidthPerc(i, (buttons.at(i)->getSize().x() + 16) / buttonGridWidth); + buttonGrid->setColWidthPerc(i, (buttons.at(i)->getSize().x() + BUTTON_GRID_HORIZ_PADDING) / buttonGridWidth); } - buttonGrid->setSize(buttonGridWidth, buttons.at(0)->getSize().y()); + buttonGrid->setSize(buttonGridWidth, buttons.at(0)->getSize().y() + BUTTON_GRID_VERT_PADDING); return buttonGrid; } diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index c1068908f..52e5bae24 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -37,6 +37,7 @@ public: private: void updateSize(); void updateGrid(); + float getButtonGridHeight() const; NinePatchComponent mBackground; ComponentGrid mGrid; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 0e5931376..06a485442 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -98,28 +98,31 @@ void ScraperSearchComponent::onSizeChanged() // metadata // (mMD_Grid has already been resized by mGrid) - const int fontHeight = (int)(mMD_Grid->getSize().y() / mMD_Pairs.size() * 0.8f); - auto fontLbl = Font::get(fontHeight, FONT_PATH_REGULAR); - auto fontComp = Font::get(fontHeight, FONT_PATH_LIGHT); - - // update label fonts - float maxLblWidth = 0; - for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) + if(mMD_Grid->getSize().y() > mMD_Pairs.size()) { - it->first->setFont(fontLbl); - it->first->setSize(0, 0); - if(it->first->getSize().x() > maxLblWidth) - maxLblWidth = it->first->getSize().x() + 6; + const int fontHeight = (int)(mMD_Grid->getSize().y() / mMD_Pairs.size() * 0.8f); + auto fontLbl = Font::get(fontHeight, FONT_PATH_REGULAR); + auto fontComp = Font::get(fontHeight, FONT_PATH_LIGHT); + + // update label fonts + float maxLblWidth = 0; + for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) + { + it->first->setFont(fontLbl); + it->first->setSize(0, 0); + if(it->first->getSize().x() > maxLblWidth) + maxLblWidth = it->first->getSize().x() + 6; + } + + // update component fonts + mMD_ReleaseDate->setFont(fontComp); + mMD_Developer->setFont(fontComp); + mMD_Publisher->setFont(fontComp); + mMD_Genre->setFont(fontComp); + mMD_Players->setFont(fontComp); + + mMD_Grid->setColWidthPerc(0, maxLblWidth / mMD_Grid->getSize().x()); } - - // update component fonts - mMD_ReleaseDate->setFont(fontComp); - mMD_Developer->setFont(fontComp); - mMD_Publisher->setFont(fontComp); - mMD_Genre->setFont(fontComp); - mMD_Players->setFont(fontComp); - - mMD_Grid->setColWidthPerc(0, maxLblWidth / mMD_Grid->getSize().x()); } void ScraperSearchComponent::updateViewStyle() diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 8e462f223..7d1f48af5 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -17,18 +17,9 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: addChild(&mBox); addChild(&mGrid); - setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - - mGrid.setSize(mSize.x() * 0.7f, mSize.y() * 0.65f); - - auto headerFont = Font::get(FONT_SIZE_LARGE); - - mGrid.setRowHeightPerc(0, headerFont->getHeight() / mGrid.getSize().y()); // header - mGrid.setRowHeightPerc(2, 0.19f); // buttons - // header - mGrid.setEntry(std::make_shared(mWindow, getCleanFileName(mSearchParams.game->getName()), - headerFont, 0x777777FF, true), Eigen::Vector2i(0, 0), false, true); + mHeader = std::make_shared(mWindow, getCleanFileName(mSearchParams.game->getName()), Font::get(FONT_SIZE_LARGE), 0x777777FF, true); + mGrid.setEntry(mHeader, Eigen::Vector2i(0, 0), false, true); // ScraperSearchComponent mSearch = std::make_shared(window, ScraperSearchComponent::NEVER_AUTO_ACCEPT); @@ -38,13 +29,9 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search")); buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); - auto buttonGrid = makeButtonGrid(mWindow, buttons); + mButtonGrid = makeButtonGrid(mWindow, buttons); - mGrid.setEntry(buttonGrid, Eigen::Vector2i(0, 2), true, false); - - // center everything - mGrid.setPosition((mSize.x() - mGrid.getSize().x()) / 2, (mSize.y() - mGrid.getSize().y()) / 2); - mBox.fitTo(mGrid.getSize(), mGrid.getPosition(), Eigen::Vector2f(-32, -32)); + mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 2), true, false); // we call this->close() instead of just delete this; in the accept callback: // this is because of how GuiComponent::update works. if it was just delete this, this would happen when the metadata resolver is done: @@ -71,10 +58,22 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mSearch->setAcceptCallback([this, doneFunc](const ScraperSearchResult& result) { doneFunc(result); close(); }); mSearch->setCancelCallback([&] { delete this; }); + setSize(Renderer::getScreenWidth() * 0.7f, Renderer::getScreenHeight() * 0.65f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); + mGrid.resetCursor(); mSearch->search(params); // start the search } +void GuiGameScraper::onSizeChanged() +{ + mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + + mGrid.setSize(mSize); + mGrid.setRowHeightPerc(0, mHeader->getFont()->getHeight() / mSize.y()); // header + mGrid.setRowHeightPerc(2, mButtonGrid->getSize().y() / mSize.y()); // buttons +} + bool GuiGameScraper::input(InputConfig* config, Input input) { if(config->isMappedTo("b", input) && input.value) diff --git a/src/guis/GuiGameScraper.h b/src/guis/GuiGameScraper.h index fa27ecc03..46c45db17 100644 --- a/src/guis/GuiGameScraper.h +++ b/src/guis/GuiGameScraper.h @@ -9,6 +9,8 @@ class GuiGameScraper : public GuiComponent public: GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc); + void onSizeChanged() override; + bool input(InputConfig* config, Input input) override; void update(int deltaTime); virtual std::vector getHelpPrompts() override; @@ -20,7 +22,9 @@ private: ComponentGrid mGrid; NinePatchComponent mBox; + std::shared_ptr mHeader; std::shared_ptr mSearch; + std::shared_ptr mButtonGrid; ScraperSearchParams mSearchParams; diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 0c997f61e..da58c6c5f 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -5,8 +5,6 @@ #include "../components/MenuComponent.h" // for makeButtonGrid #include "../Util.h" -#define BUTTON_VERT_PADDING 32.0f - GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, const std::string& name1, const std::function& func1, const std::string& name2, const std::function& func2, @@ -60,7 +58,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, } const float msgHeight = std::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()); - setSize(width, msgHeight + mButtonGrid->getSize().y() + BUTTON_VERT_PADDING); + setSize(width, msgHeight + mButtonGrid->getSize().y()); // center for good measure setPosition((Renderer::getScreenWidth() - mSize.x()) / 2.0f, (Renderer::getScreenHeight() - mSize.y()) / 2.0f); @@ -85,7 +83,7 @@ void GuiMsgBox::onSizeChanged() mGrid.setSize(mSize); mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); - mGrid.setRowHeightPerc(1, (mButtonGrid->getSize().y() + BUTTON_VERT_PADDING) / mSize.y()); + mGrid.setRowHeightPerc(1, mButtonGrid->getSize().y() / mSize.y()); } void GuiMsgBox::deleteMeAndCall(const std::function& func) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 179dfcd50..efa4d7d5b 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -37,7 +37,6 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SKIP", "skip this game", std::bind(&GuiScraperMulti::skip, this))); buttons.push_back(std::make_shared(mWindow, "STOP", "cancel scraping", std::bind(&GuiScraperMulti::finish, this))); mButtonGrid = makeButtonGrid(mWindow, buttons); - mButtonGrid->setSize(mButtonGrid->getSize().x(), mButtonGrid->getSize().y() + 32); mGrid.setEntry(mButtonGrid, Vector2i(0, 3), true, false); setSize(Renderer::getScreenWidth() * 0.7f, Renderer::getScreenHeight() * 0.65f); diff --git a/src/guis/GuiTextEditPopup.cpp b/src/guis/GuiTextEditPopup.cpp index 342f74785..1c540cb12 100644 --- a/src/guis/GuiTextEditPopup.cpp +++ b/src/guis/GuiTextEditPopup.cpp @@ -27,7 +27,7 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con float textHeight = mText->getFont()->getHeight(); if(multiLine) - textHeight *= 3; + textHeight *= 6; setSize(Renderer::getScreenWidth() * 0.5f, mTitle->getFont()->getHeight() + textHeight + mButtonGrid->getSize().y()); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); From b4f5577bd5f10e1b7bceb9bbbac7f215b8b03d78 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 21 Mar 2014 13:07:17 -0500 Subject: [PATCH 207/386] Hooked up the "INPUT" button on scraper searches. --- src/components/ScraperSearchComponent.cpp | 24 +++++++++++++++++++++++ src/components/ScraperSearchComponent.h | 2 ++ src/guis/GuiGameScraper.cpp | 7 ++++++- src/guis/GuiScraperMulti.cpp | 5 ++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 06a485442..e7dcd0199 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -11,6 +11,7 @@ #include "../Settings.h" #include "../Log.h" #include "../Util.h" +#include "../guis/GuiTextEditPopup.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), mGrid(window, Eigen::Vector2i(4, 3)), @@ -161,6 +162,14 @@ void ScraperSearchComponent::search(const ScraperSearchParams& params) mSearchHandle = Settings::getInstance()->getScraper()->getResultsAsync(params); } +void ScraperSearchComponent::stop() +{ + mThumbnailReq.reset(); + mSearchHandle.reset(); + mMDResolveHandle.reset(); + mBlockAccept = false; +} + void ScraperSearchComponent::onSearchDone(const std::vector& results) { mResultList->clear(); @@ -365,6 +374,21 @@ void ScraperSearchComponent::updateThumbnail() mGrid.onSizeChanged(); // a hack to fix the thumbnail position since its size changed } +void ScraperSearchComponent::openInputScreen(ScraperSearchParams& params) +{ + auto searchForFunc = [&](const std::string& name) + { + params.nameOverride = name; + search(params); + }; + + stop(); + mWindow->pushGui(new GuiTextEditPopup(mWindow, "SEARCH FOR", + // initial value is last search if there was one, otherwise the clean path name + params.nameOverride.empty() ? getCleanFileName(params.game->getPath()) : params.nameOverride, + searchForFunc, false, "SEARCH")); +} + std::vector ScraperSearchComponent::getHelpPrompts() { std::vector prompts = mGrid.getHelpPrompts(); diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index fa8f1cbf7..28dc49d27 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -29,6 +29,8 @@ public: ScraperSearchComponent(Window* window, SearchType searchType = NEVER_AUTO_ACCEPT); void search(const ScraperSearchParams& params); + void openInputScreen(ScraperSearchParams& from); + void stop(); // Metadata assets will be resolved before calling the accept callback (e.g. result.mdl's "image" is automatically downloaded and properly set). inline void setAcceptCallback(const std::function& acceptCallback) { mAcceptCallback = acceptCallback; } diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 7d1f48af5..422e3dbd9 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -7,6 +7,7 @@ #include "../components/TextComponent.h" #include "../components/ButtonComponent.h" #include "../components/MenuComponent.h" +#include "GuiTextEditPopup.h" GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), mGrid(window, Eigen::Vector2i(1, 3)), @@ -27,7 +28,11 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // buttons std::vector< std::shared_ptr > buttons; - buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search")); + + buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search by name", [&] { + mSearch->openInputScreen(mSearchParams); + mGrid.resetCursor(); + })); buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); mButtonGrid = makeButtonGrid(mWindow, buttons); diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index efa4d7d5b..96c766dc3 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -33,7 +33,10 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue > buttons; - buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search by name", nullptr)); + buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search by name", [&] { + mSearchComp->openInputScreen(mSearchQueue.front()); + mGrid.resetCursor(); + })); buttons.push_back(std::make_shared(mWindow, "SKIP", "skip this game", std::bind(&GuiScraperMulti::skip, this))); buttons.push_back(std::make_shared(mWindow, "STOP", "cancel scraping", std::bind(&GuiScraperMulti::finish, this))); mButtonGrid = makeButtonGrid(mWindow, buttons); From 9a3b0af33796a3f0cc320e2e244e742c4b78e62c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 21 Mar 2014 14:51:25 -0500 Subject: [PATCH 208/386] ComponentList elements can now choose not to be inverted when selected. TextComponent now has a proper "alignment" setting (left, center, and right). Did some more styling on GuiMetaDataEd. --- THEMES.md | 4 +- src/ThemeData.cpp | 2 +- src/components/ComponentList.cpp | 24 +++++++++- src/components/ComponentList.h | 8 ++-- src/components/DateTimeComponent.cpp | 4 +- src/components/MenuComponent.cpp | 2 +- src/components/MenuComponent.h | 6 +-- src/components/OptionListComponent.h | 2 +- src/components/TextComponent.cpp | 54 ++++++++++++++-------- src/components/TextComponent.h | 13 ++++-- src/guis/GuiFastSelect.cpp | 4 +- src/guis/GuiGameScraper.cpp | 2 +- src/guis/GuiMetaDataEd.cpp | 20 ++++---- src/guis/GuiMsgBox.cpp | 2 +- src/guis/GuiScraperMulti.cpp | 4 +- src/guis/GuiTextEditPopup.cpp | 2 +- src/views/SystemView.cpp | 2 +- src/views/gamelist/ISimpleGameListView.cpp | 2 +- 18 files changed, 103 insertions(+), 54 deletions(-) diff --git a/THEMES.md b/THEMES.md index 98f057ae2..30a5db44c 100644 --- a/THEMES.md +++ b/THEMES.md @@ -385,8 +385,8 @@ Can be created as an extra. - Path to a truetype font (.ttf). * `fontSize` - type: FLOAT. - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). -* `center` - type: BOOLEAN. - - True to center, false to left-align. +* `alignment` - type: STRING. + - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. #### textlist diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index c958d7bd1..3594d5f1e 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -38,7 +38,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("color", COLOR) ("fontPath", PATH) ("fontSize", FLOAT) - ("center", BOOLEAN))) + ("alignment", STRING))) ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index e0068f5b0..24e52d852 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -150,7 +150,22 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) trans.translate(Eigen::Vector3f(0, -round(mCameraOffset), 0)); // draw our entries - renderChildren(trans); + std::vector drawAfterCursor; + bool drawAll; + for(unsigned int i = 0; i < mEntries.size(); i++) + { + auto& entry = mEntries.at(i); + drawAll = !mFocused || i != mCursor; + for(auto it = entry.data.elements.begin(); it != entry.data.elements.end(); it++) + { + if(drawAll || it->invert_when_selected) + { + it->component->render(trans); + }else{ + drawAfterCursor.push_back(it->component.get()); + } + } + } // custom rendering Renderer::setMatrix(trans); @@ -172,6 +187,13 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) // hack to draw 2px dark on left/right of the bar Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); Renderer::drawRect(mSize.x() - 2.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); + + for(auto it = drawAfterCursor.begin(); it != drawAfterCursor.end(); it++) + (*it)->render(trans); + + // reset matrix if one of these components changed it + if(drawAfterCursor.size()) + Renderer::setMatrix(trans); } // draw separators diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index c7596bb51..049e89776 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -5,10 +5,12 @@ struct ComponentListElement { - ComponentListElement(const std::shared_ptr& cmp = nullptr, bool resize_w = true) : component(cmp), resize_width(resize_w) { }; + ComponentListElement(const std::shared_ptr& cmp = nullptr, bool resize_w = true, bool inv = true) + : component(cmp), resize_width(resize_w), invert_when_selected(inv) { }; std::shared_ptr component; bool resize_width; + bool invert_when_selected; }; struct ComponentListRow @@ -21,9 +23,9 @@ struct ComponentListRow // the rightmost element in the currently selected row. std::function input_handler; - inline void addElement(const std::shared_ptr& component, bool resize_width) + inline void addElement(const std::shared_ptr& component, bool resize_width, bool invert_when_selected = true) { - elements.push_back(ComponentListElement(component, resize_width)); + elements.push_back(ComponentListElement(component, resize_width, invert_when_selected)); } // Utility method for making an input handler for "when the users presses A on this, do func." diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index 390807c85..47a86b534 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -7,9 +7,9 @@ DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), - mColor(0x000000FF) + mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)) { - mSize << 64, (float)getFont()->getHeight(); + mSize << 64, getFont()->getHeight(); updateTextCache(); } diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 010fd7b4b..b6cd3a731 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -15,7 +15,7 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w mBackground.setImagePath(":/frame.png"); // set up title which will never change - mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, true); + mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false); // set up list which will never change (externally, anyway) diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 52e5bae24..7c23672fe 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -19,11 +19,11 @@ public: inline void addRow(const ComponentListRow& row, bool setCursorHere = false) { mList->addRow(row, setCursorHere); updateSize(); } - inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false) + inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false, bool invert_when_selected = true) { ComponentListRow row; - row.addElement(std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(comp, false); + row.addElement(std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), TextComponent::ALIGN_CENTER); + row.addElement(comp, false, invert_when_selected); addRow(row, setCursorHere); } diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index ee95eaf60..9d5cec1c7 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -116,7 +116,7 @@ public: auto font = Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT); mText.setFont(font); mText.setColor(0x777777FF); - mText.setCentered(true); + mText.setAlignment(TextComponent::ALIGN_CENTER); addChild(&mText); if(mMultiSelect) diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index cd997a66a..b2ca17845 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -6,13 +6,13 @@ #include "../Util.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(false) + mFont(Font::get(FONT_SIZE_MEDIUM)), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT) { } -TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, bool center, +TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), - mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mCentered(center) + mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align) { setFont(font); setColor(color); @@ -62,11 +62,6 @@ void TextComponent::setText(const std::string& text) onTextChanged(); } -void TextComponent::setCentered(bool center) -{ - mCentered = center; -} - void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); @@ -78,19 +73,28 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mTextCache) { - if(mCentered) - { - const Eigen::Vector2f& textSize = mTextCache->metrics.size; - Eigen::Vector3f off((getSize().x() - textSize.x()) / 2, (getSize().y() - textSize.y()) / 2, 0); - off = roundVector(off); + const Eigen::Vector2f& textSize = mTextCache->metrics.size; + Eigen::Vector3f off(0, 0, 0); - trans.translate(off); - Renderer::setMatrix(trans); - trans.translate(-off); - }else{ - Renderer::setMatrix(trans); + switch(mAlignment) + { + case ALIGN_LEFT: + break; + + case ALIGN_CENTER: + off << (getSize().x() - textSize.x()) / 2, (getSize().y() - textSize.y()) / 2, 0; + break; + + case ALIGN_RIGHT: + off << (getSize().x() - textSize.x()), 0, 0; + break; } + off = roundVector(off); + trans.translate(off); + Renderer::setMatrix(trans); + trans.translate(-off); + mFont->renderTextCache(mTextCache.get()); } @@ -171,8 +175,18 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st if(properties & COLOR && elem->has("color")) setColor(elem->get("color")); - if(properties & ALIGNMENT && elem->has("center")) - setCentered(elem->get("center")); + if(properties & ALIGNMENT && elem->has("alignment")) + { + std::string str = elem->get("alignment"); + if(str == "left") + setAlignment(ALIGN_LEFT); + else if(str == "center") + setAlignment(ALIGN_CENTER); + else if(str == "ALIGN_RIGHT") + setAlignment(ALIGN_RIGHT); + else + LOG(LogError) << "Unknown text alignment string: " << str; + } if(properties & TEXT && elem->has("text")) setText(elem->get("text")); diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index e3039a2a1..36d825c1b 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -14,15 +14,22 @@ class ThemeData; class TextComponent : public GuiComponent { public: + enum Alignment + { + ALIGN_LEFT, + ALIGN_CENTER, // centers both horizontally and vertically + ALIGN_RIGHT + }; + TextComponent(Window* window); - TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, bool center = false, + TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Alignment align = ALIGN_LEFT, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); void setFont(const std::shared_ptr& font); void onSizeChanged() override; void setText(const std::string& text); void setColor(unsigned int color); - void setCentered(bool center); // Will horizontally center text. Default is false. + inline void setAlignment(Alignment align) { mAlignment = align; } void render(const Eigen::Affine3f& parentTrans) override; @@ -47,7 +54,7 @@ private: Eigen::Matrix mAutoCalcExtent; std::string mText; std::shared_ptr mTextCache; - bool mCentered; + Alignment mAlignment; }; #endif diff --git a/src/guis/GuiFastSelect.cpp b/src/guis/GuiFastSelect.cpp index cecf73cfc..d5a36e8a6 100644 --- a/src/guis/GuiFastSelect.cpp +++ b/src/guis/GuiFastSelect.cpp @@ -19,14 +19,14 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo addChild(&mBackground); mLetterText.setSize(mSize.x(), mSize.y() * 0.75f); - mLetterText.setCentered(true); + mLetterText.setAlignment(TextComponent::ALIGN_CENTER); mLetterText.applyTheme(theme, "fastSelect", "letter", FONT_PATH | COLOR); // TODO - set font size addChild(&mLetterText); mSortText.setPosition(0, mSize.y() * 0.75f); mSortText.setSize(mSize.x(), mSize.y() * 0.25f); - mSortText.setCentered(true); + mSortText.setAlignment(TextComponent::ALIGN_CENTER); mSortText.applyTheme(theme, "fastSelect", "subtext", FONT_PATH | COLOR); // TODO - set font size addChild(&mSortText); diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 422e3dbd9..cc84870a3 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -19,7 +19,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: addChild(&mGrid); // header - mHeader = std::make_shared(mWindow, getCleanFileName(mSearchParams.game->getName()), Font::get(FONT_SIZE_LARGE), 0x777777FF, true); + mHeader = std::make_shared(mWindow, getCleanFileName(mSearchParams.game->getName()), Font::get(FONT_SIZE_LARGE), 0x777777FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mHeader, Eigen::Vector2i(0, 0), false, true); // ScraperSearchComponent diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 83b83939c..47f9f1b4f 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -31,35 +31,39 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector // create ed and add it (and any related components) to mMenu // ed's value will be set below + ComponentListRow row; + auto lbl = std::make_shared(mWindow, strToUpper(iter->key), Font::get(FONT_SIZE_SMALL), 0x777777FF); + row.addElement(lbl, true); // label + switch(iter->type) { case MD_RATING: { ed = std::make_shared(window); - mMenu.addWithLabel(iter->key, ed); + ed->setSize(0, lbl->getSize().y()); + row.addElement(ed, false, false); + mMenu.addRow(row); break; } case MD_DATE: { ed = std::make_shared(window); - mMenu.addWithLabel(iter->key, ed); + row.addElement(ed, false); + mMenu.addRow(row); break; } case MD_TIME: { ed = std::make_shared(window, DateTimeComponent::DISP_RELATIVE_TO_NOW); - mMenu.addWithLabel(iter->key, ed); + row.addElement(ed, false); + mMenu.addRow(row); break; } case MD_MULTILINE_STRING: default: { // MD_STRING - ComponentListRow row; - auto lbl = std::make_shared(mWindow, iter->key, Font::get(FONT_SIZE_SMALL), 0x777777FF); - row.addElement(lbl, true); // label - - ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF); + ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF, TextComponent::ALIGN_RIGHT); row.addElement(ed, true); auto bracket = std::make_shared(mWindow); diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index da58c6c5f..5f59a9d0b 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -14,7 +14,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, float width = Renderer::getScreenWidth() * 0.6f; // max width float minWidth = Renderer::getScreenWidth() * 0.3f; // minimum width - mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, true); + mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); // create the buttons mButtons.push_back(std::make_shared(mWindow, name1, name1, std::bind(&GuiMsgBox::deleteMeAndCall, this, func1))); diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 96c766dc3..27cdb2b9c 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -20,10 +20,10 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_SMALL), 0x777777FF, true); + mTitle = std::make_shared(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - mSubtitle = std::make_shared(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, true); + mSubtitle = std::make_shared(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mSubtitle, Vector2i(0, 1), false, true); mSearchComp = std::make_shared(mWindow, diff --git a/src/guis/GuiTextEditPopup.cpp b/src/guis/GuiTextEditPopup.cpp index 1c540cb12..74b076d90 100644 --- a/src/guis/GuiTextEditPopup.cpp +++ b/src/guis/GuiTextEditPopup.cpp @@ -10,7 +10,7 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con addChild(&mBackground); addChild(&mGrid); - mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, true); + mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); mText = std::make_shared(mWindow); mText->setValue(initValue); diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 8a8bd245e..d01679409 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -46,7 +46,7 @@ void SystemView::populate() text->setText((*it)->getName()); text->setSize(logoSize().x(), 0); text->setPosition(0, (logoSize().y() - text->getSize().y()) / 2); // vertically center - text->setCentered(true); // horizontally center + text->setAlignment(TextComponent::ALIGN_CENTER); e.data.logo = std::shared_ptr(text); } diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index 262954b96..ed1bf29d9 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -10,7 +10,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame mHeaderText.setText("Logo Text"); mHeaderText.setSize(mSize.x(), 0); mHeaderText.setPosition(0, 0); - mHeaderText.setCentered(true); + mHeaderText.setAlignment(TextComponent::ALIGN_CENTER); mHeaderImage.setResize(0, mSize.y() * 0.185f); mHeaderImage.setOrigin(0.5f, 0.0f); From 980a2c4ec6b207eabcf754c99caae258a9e79b13 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 21 Mar 2014 20:12:57 -0500 Subject: [PATCH 209/386] InputManager mostly redone to handle rolling joystick changes instead of completely deinitializing/reinitializing itself every time a change is detected. Some other slight changes to better fit with SDL2's joystick improvements. Completely redid GuiDetectDevice and GuiInputConfig. Inching closer and closer to beta. --- src/InputConfig.cpp | 21 +-- src/InputConfig.h | 18 +- src/InputManager.cpp | 287 +++++++++++++++++-------------- src/InputManager.h | 30 ++-- src/components/ComponentList.cpp | 7 + src/components/ComponentList.h | 1 + src/components/HelpComponent.cpp | 2 +- src/guis/GuiDetectDevice.cpp | 153 ++++++++-------- src/guis/GuiDetectDevice.h | 27 ++- src/guis/GuiInputConfig.cpp | 224 ++++++++++++++---------- src/guis/GuiInputConfig.h | 29 +++- src/guis/GuiMenu.cpp | 8 +- src/main.cpp | 4 +- src/views/ViewController.cpp | 4 +- 14 files changed, 458 insertions(+), 357 deletions(-) diff --git a/src/InputConfig.cpp b/src/InputConfig.cpp index e7c4add6e..47d976ad9 100644 --- a/src/InputConfig.cpp +++ b/src/InputConfig.cpp @@ -49,9 +49,8 @@ std::string toLower(std::string str) } //end util functions -InputConfig::InputConfig(int deviceId, const std::string& deviceName) : mDeviceId(deviceId), mDeviceName(deviceName) +InputConfig::InputConfig(int deviceId, const std::string& deviceName, const std::string& deviceGUID) : mDeviceId(deviceId), mDeviceName(deviceName), mDeviceGUID(deviceGUID) { - mPlayerNum = -1; } void InputConfig::clear() @@ -59,6 +58,11 @@ void InputConfig::clear() mNameMap.clear(); } +bool InputConfig::isConfigured() +{ + return mNameMap.size() > 0; +} + void InputConfig::mapInput(const std::string& name, Input input) { mNameMap[toLower(name)] = input; @@ -126,11 +130,9 @@ std::vector InputConfig::getMappedTo(Input input) return maps; } -void InputConfig::loadFromXML(pugi::xml_node node, int playerNum) +void InputConfig::loadFromXML(pugi::xml_node node) { - this->clear(); - - setPlayerNum(playerNum); + clear(); for(pugi::xml_node input = node.child("input"); input; input = input.next_sibling("input")) { @@ -161,11 +163,14 @@ void InputConfig::writeToXML(pugi::xml_node parent) if(mDeviceId == DEVICE_KEYBOARD) { cfg.append_attribute("type") = "keyboard"; + cfg.append_attribute("deviceName") = "Keyboard"; }else{ cfg.append_attribute("type") = "joystick"; cfg.append_attribute("deviceName") = mDeviceName.c_str(); } + cfg.append_attribute("deviceGUID") = mDeviceGUID.c_str(); + typedef std::map::iterator it_type; for(it_type iterator = mNameMap.begin(); iterator != mNameMap.end(); iterator++) { @@ -179,7 +184,3 @@ void InputConfig::writeToXML(pugi::xml_node parent) input.append_attribute("value").set_value(iterator->second.value); } } - -void InputConfig::setPlayerNum(int num) { mPlayerNum = num; } -int InputConfig::getPlayerNum() { return mPlayerNum; } -int InputConfig::getDeviceId() { return mDeviceId; } diff --git a/src/InputConfig.h b/src/InputConfig.h index 01957d3cd..e26844acd 100644 --- a/src/InputConfig.h +++ b/src/InputConfig.h @@ -56,9 +56,6 @@ public: std::string string() { - if(!configured) - return ""; - std::stringstream stream; switch(type) { @@ -86,14 +83,14 @@ public: class InputConfig { public: - InputConfig(int deviceId, const std::string& deviceName); + InputConfig(int deviceId, const std::string& deviceName, const std::string& deviceGUID); void clear(); void mapInput(const std::string& name, Input input); - void setPlayerNum(int num); - int getPlayerNum(); - int getDeviceId(); + inline int getDeviceId() const { return mDeviceId; }; + inline const std::string& getDeviceName() { return mDeviceName; } + inline const std::string& getDeviceGUIDString() { return mDeviceGUID; } //Returns the input mapped to this name. Input getInputByName(const std::string& name); @@ -104,13 +101,16 @@ public: //Returns a list of names this input is mapped to. std::vector getMappedTo(Input input); - void loadFromXML(pugi::xml_node root, int playerNum); + void loadFromXML(pugi::xml_node root); void writeToXML(pugi::xml_node parent); + + bool isConfigured(); + private: std::map mNameMap; const int mDeviceId; const std::string mDeviceName; - int mPlayerNum; + const std::string mDeviceGUID; }; #endif diff --git a/src/InputManager.cpp b/src/InputManager.cpp index ee24ccc01..142778445 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -6,11 +6,23 @@ #include #include "platform.h" +#define KEYBOARD_GUID_STRING "-1" + +// SO HEY POTENTIAL POOR SAP WHO IS TRYING TO MAKE SENSE OF ALL THIS (by which I mean my future self) +// There are like four distinct IDs used for joysticks (crazy, right?) +// 1. Device index - this is the "lowest level" identifier, and is just the Nth joystick plugged in to the system (like /dev/js#). +// It can change even if the device is the same, and is only used to open joysticks (required to receive SDL events). +// 2. SDL_JoystickID - this is an ID for each joystick that is supposed to remain consistent between plugging and unplugging. +// ES doesn't care if it does, though. +// 3. "Device ID" - this is something I made up and is what InputConfig's getDeviceID() returns. +// This is actually just an SDL_JoystickID (also called instance ID), but -1 means "keyboard" instead of "error." +// 4. Joystick GUID - this is some squashed version of joystick vendor, version, and a bunch of other device-specific things. +// It should remain the same across runs of the program/system restarts/device reordering and is what I use to identify which joystick to load. + namespace fs = boost::filesystem; InputManager::InputManager(Window* window) : mWindow(window), - mKeyboardInputConfig(NULL), - mNumJoysticks(0), mNumPlayers(0) + mKeyboardInputConfig(NULL) { } @@ -25,54 +37,95 @@ void InputManager::init() deinit(); SDL_InitSubSystem(SDL_INIT_JOYSTICK); + SDL_JoystickEventState(SDL_ENABLE); - mNumJoysticks = SDL_NumJoysticks(); - - for(int i = 0; i < mNumJoysticks; i++) + // first, open all currently present joysticks + int numJoysticks = SDL_NumJoysticks(); + for(int i = 0; i < numJoysticks; i++) { - SDL_Joystick* joy = SDL_JoystickOpen(i); - SDL_JoystickID joyId = SDL_JoystickInstanceID(joy); - mJoysticks.push_back(joy); - mInputConfigs[joyId] = new InputConfig(i, SDL_JoystickName(joy)); - - int numAxes = SDL_JoystickNumAxes(joy); - mPrevAxisValues[joyId] = new int[numAxes]; - std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 + addJoystickByDeviceIndex(i); } - mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard"); + mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard", KEYBOARD_GUID_STRING); + loadInputConfig(mKeyboardInputConfig); +} - loadConfig(); +void InputManager::addJoystickByDeviceIndex(int id) +{ + assert(id >= 0 && id < SDL_NumJoysticks()); + + // open joystick & add to our list + SDL_Joystick* joy = SDL_JoystickOpen(id); + assert(joy); - SDL_JoystickEventState(SDL_ENABLE); + // add it to our list so we can close it again later + SDL_JoystickID joyId = SDL_JoystickInstanceID(joy); + mJoysticks[joyId] = joy; + + char guid[65]; + SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joy), guid, 65); + + // create the InputConfig + mInputConfigs[joyId] = new InputConfig(joyId, SDL_JoystickName(joy), guid); + if(!loadInputConfig(mInputConfigs[joyId])) + { + LOG(LogInfo) << "Added unconfigured joystick " << SDL_JoystickName(joy) << " (GUID: " << guid << ", instance ID: " << joyId << ", device index: " << id << ")."; + }else{ + LOG(LogInfo) << "Added known joystick " << SDL_JoystickName(joy) << " (instance ID: " << joyId << ", device index: " << id << ")"; + } + + // set up the prevAxisValues + int numAxes = SDL_JoystickNumAxes(joy); + mPrevAxisValues[joyId] = new int[numAxes]; + std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 +} + +void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) +{ + assert(joyId != -1); + + // delete old prevAxisValues + auto axisIt = mPrevAxisValues.find(joyId); + delete[] axisIt->second; + mPrevAxisValues.erase(axisIt); + + // delete old InputConfig + auto it = mInputConfigs.find(joyId); + delete it->second; + mInputConfigs.erase(it); + + // close the joystick + auto joyIt = mJoysticks.find(joyId); + if(joyIt != mJoysticks.end()) + { + SDL_JoystickClose(joyIt->second); + mJoysticks.erase(joyIt); + }else{ + LOG(LogError) << "Could not find joystick to close (instance ID: " << joyId << ")"; + } } void InputManager::deinit() { - SDL_JoystickEventState(SDL_DISABLE); - if(!initialized()) return; for(auto iter = mJoysticks.begin(); iter != mJoysticks.end(); iter++) { - SDL_JoystickClose(*iter); + SDL_JoystickClose(iter->second); } - mJoysticks.clear(); for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) { delete iter->second; } - mInputConfigs.clear(); for(auto iter = mPrevAxisValues.begin(); iter != mPrevAxisValues.end(); iter++) { delete[] iter->second; } - mPrevAxisValues.clear(); if(mKeyboardInputConfig != NULL) @@ -81,11 +134,12 @@ void InputManager::deinit() mKeyboardInputConfig = NULL; } + SDL_JoystickEventState(SDL_DISABLE); SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } -int InputManager::getNumJoysticks() { return mNumJoysticks; } -int InputManager::getButtonCountByDevice(int id) +int InputManager::getNumJoysticks() { return mJoysticks.size(); } +int InputManager::getButtonCountByDevice(SDL_JoystickID id) { if(id == DEVICE_KEYBOARD) return 120; //it's a lot, okay. @@ -93,10 +147,7 @@ int InputManager::getButtonCountByDevice(int id) return SDL_JoystickNumButtons(mJoysticks[id]); } -int InputManager::getNumPlayers() { return mNumPlayers; } -void InputManager::setNumPlayers(int num) { mNumPlayers = num; } - -InputConfig* InputManager::getInputConfigByDevice(SDL_JoystickID device) +InputConfig* InputManager::getInputConfigByDevice(int device) { if(device == DEVICE_KEYBOARD) return mKeyboardInputConfig; @@ -104,23 +155,6 @@ InputConfig* InputManager::getInputConfigByDevice(SDL_JoystickID device) return mInputConfigs[device]; } -InputConfig* InputManager::getInputConfigByPlayer(int player) -{ - if(mKeyboardInputConfig->getPlayerNum() == player) - return mKeyboardInputConfig; - - for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) - { - if(iter->second->getPlayerNum() == player) - { - return iter->second; - } - } - - LOG(LogError) << "Could not find input config for player number " << player << "!"; - return NULL; -} - bool InputManager::parseEvent(const SDL_Event& ev) { bool causedEvent = false; @@ -188,102 +222,51 @@ bool InputManager::parseEvent(const SDL_Event& ev) break; case SDL_JOYDEVICEADDED: - deinit(); - init(); + addJoystickByDeviceIndex(ev.jdevice.which); // ev.jdevice.which is a device index return true; + + case SDL_JOYDEVICEREMOVED: + removeJoystickByJoystickID(ev.jdevice.which); // ev.jdevice.which is an SDL_JoystickID (instance ID) + return false; } return false; } -void InputManager::loadConfig() +bool InputManager::loadInputConfig(InputConfig* config) { - if(!initialized()) - { - LOG(LogError) << "ERROR - cannot load InputManager config without being initialized!"; - } - std::string path = getConfigPath(); if(!fs::exists(path)) - return; - + return false; + pugi::xml_document doc; pugi::xml_parse_result res = doc.load_file(path.c_str()); if(!res) { - LOG(LogError) << "Error loading input config: " << res.description(); - return; - } - - mNumPlayers = 0; - - bool* configuredDevice = new bool[mNumJoysticks]; - std::fill(configuredDevice, configuredDevice + mNumJoysticks, false); - - for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) - { - iter->second->setPlayerNum(-1); + LOG(LogError) << "Error parsing input config: " << res.description(); + return false; } pugi::xml_node root = doc.child("inputList"); + if(!root) + return false; - bool loadedKeyboard = false; - for(pugi::xml_node node = root.child("inputConfig"); node; node = node.next_sibling("inputConfig")) - { - std::string type = node.attribute("type").as_string(); + pugi::xml_node configNode = root.find_child_by_attribute("inputConfig", "deviceGUID", getDeviceGUIDString(config->getDeviceId()).c_str()); + if(!configNode) + return false; - if(type == "keyboard") - { - getInputConfigByDevice(DEVICE_KEYBOARD)->loadFromXML(node, mNumPlayers); - loadedKeyboard = true; - mNumPlayers++; - }else if(type == "joystick") - { - bool found = false; - std::string devName = node.attribute("deviceName").as_string(); - for(int i = 0; i < mNumJoysticks; i++) - { - if(!configuredDevice[i] && SDL_JoystickName(mJoysticks[i]) == devName) - { - SDL_JoystickID joyId = SDL_JoystickInstanceID(mJoysticks[i]); - mInputConfigs[joyId]->loadFromXML(node, mNumPlayers); - mNumPlayers++; - found = true; - configuredDevice[i] = true; - break; - } - } - - if(!found) - { - LOG(LogWarning) << "Could not find unconfigured joystick named \"" << devName << "\"! Skipping it.\n"; - continue; - } - }else{ - LOG(LogWarning) << "Device type \"" << type << "\" unknown!\n"; - } - } - - delete[] configuredDevice; - - if(!loadedKeyboard) - { - LOG(LogInfo) << "No keyboard input found. Loading default keyboard config."; - loadDefaultConfig(); - } - - LOG(LogInfo) << "Loaded InputConfig data for " << getNumPlayers() << " devices."; + config->loadFromXML(configNode); + return true; } -//used in an "emergency" where no configs could be loaded from the inputmanager config file +//used in an "emergency" where no keyboard config could be loaded from the inputmanager config file //allows the user to select to reconfigure in menus if this happens without having to delete es_input.cfg manually -void InputManager::loadDefaultConfig() +void InputManager::loadDefaultKBConfig() { InputConfig* cfg = getInputConfigByDevice(DEVICE_KEYBOARD); - mNumPlayers++; - cfg->setPlayerNum(0); + cfg->clear(); cfg->mapInput("up", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_UP, 1, true)); cfg->mapInput("down", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_DOWN, 1, true)); cfg->mapInput("left", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFT, 1, true)); @@ -291,35 +274,45 @@ void InputManager::loadDefaultConfig() cfg->mapInput("a", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RETURN, 1, true)); cfg->mapInput("b", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_ESCAPE, 1, true)); - cfg->mapInput("menu", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F1, 1, true)); + cfg->mapInput("start", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F1, 1, true)); cfg->mapInput("select", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F2, 1, true)); + cfg->mapInput("pageup", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); cfg->mapInput("pagedown", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); - - cfg->mapInput("mastervolup", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_PLUS, 1, true)); - cfg->mapInput("mastervoldown", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_MINUS, 1, true)); } -void InputManager::writeConfig() +void InputManager::writeDeviceConfig(InputConfig* config) { - if(!initialized()) - { - LOG(LogError) << "ERROR - cannot write config without being initialized!"; - return; - } + assert(initialized()); std::string path = getConfigPath(); pugi::xml_document doc; - pugi::xml_node root = doc.append_child("inputList"); - - mKeyboardInputConfig->writeToXML(root); - for(int i = 0; i < mNumJoysticks; i++) + if(fs::exists(path)) { - mInputConfigs[i]->writeToXML(root); + // merge files + pugi::xml_parse_result result = doc.load_file(path.c_str()); + if(!result) + { + LOG(LogError) << "Error parsing input config: " << result.description(); + }else{ + // successfully loaded, delete the old entry if it exists + pugi::xml_node root = doc.child("inputList"); + if(root) + { + pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", config->getDeviceGUIDString().c_str()); + if(oldEntry) + root.remove_child(oldEntry); + } + } } + pugi::xml_node root = doc.child("inputList"); + if(!root) + root = doc.append_child("inputList"); + + config->writeToXML(root); doc.save_file(path.c_str()); } @@ -334,3 +327,35 @@ bool InputManager::initialized() const { return mKeyboardInputConfig != NULL; } + +int InputManager::getNumConfiguredDevices() +{ + int num = 0; + for(auto it = mInputConfigs.begin(); it != mInputConfigs.end(); it++) + { + if(it->second->isConfigured()) + num++; + } + + if(mKeyboardInputConfig->isConfigured()) + num++; + + return num; +} + +std::string InputManager::getDeviceGUIDString(int deviceId) +{ + if(deviceId == DEVICE_KEYBOARD) + return KEYBOARD_GUID_STRING; + + auto it = mJoysticks.find(deviceId); + if(it == mJoysticks.end()) + { + LOG(LogError) << "getDeviceGUIDString - deviceId " << deviceId << " not found!"; + return "something went horribly wrong"; + } + + char guid[65]; + SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(it->second), guid, 65); + return std::string(guid); +} diff --git a/src/InputManager.h b/src/InputManager.h index 9c7ff22a3..a3fc0101d 100644 --- a/src/InputManager.h +++ b/src/InputManager.h @@ -12,19 +12,14 @@ class Window; //you should only ever instantiate one of these, by the way class InputManager { +private: static const int DEADZONE = 23000; Window* mWindow; - //non-InputManager classes shouldn't use this, as you can easily miss the keyboard and don't have SDL_JoystickIDs - InputConfig* getInputConfigByDevice(SDL_JoystickID device); + void loadDefaultKBConfig(); - void loadDefaultConfig(); - - int mNumJoysticks; - int mNumPlayers; - - std::vector mJoysticks; + std::map mJoysticks; std::map mInputConfigs; InputConfig* mKeyboardInputConfig; @@ -32,26 +27,29 @@ class InputManager bool initialized() const; + void addJoystickByDeviceIndex(int id); + void removeJoystickByJoystickID(SDL_JoystickID id); + bool loadInputConfig(InputConfig* config); // returns true if successfully loaded, false if not (or didn't exist) + public: InputManager(Window* window); ~InputManager(); - void loadConfig(); - void writeConfig(); + void writeDeviceConfig(InputConfig* config); static std::string getConfigPath(); void init(); void deinit(); - void setNumPlayers(int num); - int getNumPlayers(); - int getNumJoysticks(); - int getButtonCountByDevice(int id); + int getButtonCountByDevice(int deviceId); + int getNumConfiguredDevices(); + + std::string getDeviceGUIDString(int deviceId); + + InputConfig* getInputConfigByDevice(int deviceId); bool parseEvent(const SDL_Event& ev); - - InputConfig* getInputConfigByPlayer(int player); }; #endif diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 24e52d852..f3a9ecd0c 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -290,3 +290,10 @@ std::vector ComponentList::getHelpPrompts() return mEntries.at(mCursor).data.elements.back().component->getHelpPrompts(); } + +bool ComponentList::moveCursor(int amt) +{ + bool ret = listInput(amt); + listInput(0); + return ret; +} diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index 049e89776..fc33d6417 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -59,6 +59,7 @@ public: void onFocusGained() override; void onFocusLost() override; + bool moveCursor(int amt); inline int getCursorId() const { return mCursor; } float getTotalRowHeight() const; diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 14925f64e..74a7ff1c8 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -12,7 +12,7 @@ static const std::map ICON_PATH_MAP = boost::assign::m ("up/down/left/right", ":/help/dpad_all.png") ("a", ":/help/a.png") ("b", ":/help/b.png") - ("menu", ":/help/start.png") + ("start", ":/help/start.png") ("select", ":/help/select.png"); HelpComponent::HelpComponent(Window* window) : GuiComponent(window) diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index 8bd59400c..53451f84b 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -3,104 +3,101 @@ #include "../Renderer.h" #include "../resources/Font.h" #include "GuiInputConfig.h" +#include "../components/TextComponent.h" #include #include #include +#include "../views/ViewController.h" -GuiDetectDevice::GuiDetectDevice(Window* window) : GuiComponent(window) +#define HOLD_TIME 1000 + +using namespace Eigen; + +GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window), + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 4)) { - //clear any player information from the InputManager - for(int i = 0; i < mWindow->getInputManager()->getNumPlayers(); i++) - { - InputConfig* cfg = mWindow->getInputManager()->getInputConfigByPlayer(i); - cfg->setPlayerNum(-1); - cfg->clear(); - } - mWindow->getInputManager()->setNumPlayers(0); + mHoldingConfig = NULL; + mHoldTime = 0; - mCurrentPlayer = 0; - mHoldingFinish = false; + addChild(&mBackground); + addChild(&mGrid); + + if(firstRun) + { + mDoneCallback = [window] { + window->getViewController()->goToStart(); + }; + } + + mTitle = std::make_shared(mWindow, firstRun ? "WELCOME TO EMULATIONSTATION" : "SELECT A DEVICE", + Font::get(FONT_SIZE_MEDIUM), 0x666666FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); + + std::string msg = (firstRun ? "First, we need to configure your input device!\n" : ""); + msg += "Hold a button on your input device to configure it.\n" + "Press F4 to quit at any time."; + mMsg = std::make_shared(mWindow, msg, Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mMsg, Vector2i(0, 1), false, true); + + std::stringstream deviceInfo; + int numDevices = mWindow->getInputManager()->getNumJoysticks(); + + if(numDevices > 0) + deviceInfo << numDevices << " joystick" << (numDevices > 1 ? "s" : "") << " detected."; + else + deviceInfo << "No joysticks detected!"; + mDeviceInfo = std::make_shared(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x888888FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mDeviceInfo, Vector2i(0, 2), false, true); + + mDeviceHeld = std::make_shared(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mDeviceHeld, Vector2i(0, 3), false, true); + + setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.5f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); +} + +void GuiDetectDevice::onSizeChanged() +{ + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); + + // grid + mGrid.setSize(mSize); + mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(2, mDeviceInfo->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(3, mDeviceHeld->getFont()->getHeight() / mSize.y()); } bool GuiDetectDevice::input(InputConfig* config, Input input) { - if((input.type == TYPE_BUTTON || input.type == TYPE_KEY)) + if(input.type == TYPE_BUTTON || input.type == TYPE_KEY) { - if(config->getPlayerNum() != -1) + if(input.value && mHoldingConfig == NULL) { - if(config->getPlayerNum() == 0) - { - if(input.value) - { - mFinishTimer = 0; - mHoldingFinish = true; - }else{ - mHoldingFinish = false; - } - } - return true; - } - - if(!input.value) - return false; - - config->setPlayerNum(mCurrentPlayer); - mWindow->getInputManager()->setNumPlayers(mWindow->getInputManager()->getNumPlayers() + 1); //inc total number of players - mCurrentPlayer++; - - //mapped everything we possibly can? - if(mCurrentPlayer >= mWindow->getInputManager()->getNumJoysticks() + 1) //+1 for keyboard + // started holding + mHoldingConfig = config; + mHoldTime = HOLD_TIME; + mDeviceHeld->setText(config->getDeviceName()); + }else if(!input.value && mHoldingConfig == config) { - done(); + // cancel + mHoldingConfig = NULL; + mDeviceHeld->setText(""); } - - return true; } - return false; -} - -void GuiDetectDevice::done() -{ - mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(0))); - delete this; + return true; } void GuiDetectDevice::update(int deltaTime) { - if(mHoldingFinish) + if(mHoldingConfig) { - mFinishTimer += deltaTime; - - if(mFinishTimer > 1000) - done(); + mHoldTime -= deltaTime; + if(mHoldTime <= 0) + { + // picked one! + mWindow->pushGui(new GuiInputConfig(mWindow, mHoldingConfig, true, mDoneCallback)); + delete this; + } } } - -void GuiDetectDevice::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::setMatrix(trans); - - std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); - - std::string playerString; - std::stringstream stream; - stream << (mCurrentPlayer + 1); - stream >> playerString; - - font->drawCenteredText("Press a button on the device for", 0, Renderer::getScreenHeight() / 3.0f, 0x000000FF); - font->drawCenteredText("PLAYER " + playerString, 0, (Renderer::getScreenHeight()*1.5f) / 3.0f, 0x333333FF); - - if(mWindow->getInputManager()->getNumPlayers() > 0) - { - font->drawCenteredText("(P1 - hold a button to finish)", 0, (Renderer::getScreenHeight()*2) / 3.0f, (mHoldingFinish ? 0x0000FFFF : 0x000066FF)); - } - - if(mWindow->getInputManager()->getNumJoysticks() == 0) - { - font->drawCenteredText("No joysticks detected!", 0, Renderer::getScreenHeight() - (font->getHeight()*2.0f)-10, 0xFF0000FF); - } - - font->drawCenteredText("Press F4 to quit.", 0, Renderer::getScreenHeight() - font->getHeight() - 2.0f , 0x000000FF); -} diff --git a/src/guis/GuiDetectDevice.h b/src/guis/GuiDetectDevice.h index b96cdc0b5..57ff8b4bd 100644 --- a/src/guis/GuiDetectDevice.h +++ b/src/guis/GuiDetectDevice.h @@ -1,20 +1,31 @@ #pragma once #include "../GuiComponent.h" +#include "../components/NinePatchComponent.h" +#include "../components/ComponentGrid.h" + +class TextComponent; class GuiDetectDevice : public GuiComponent { public: - GuiDetectDevice(Window* window); + GuiDetectDevice(Window* window, bool firstRun); - bool input(InputConfig* config, Input input); - void update(int deltaTime); - void render(const Eigen::Affine3f& parentTrans) override; + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void onSizeChanged() override; private: - void done(); + InputConfig* mHoldingConfig; + int mHoldTime; - bool mHoldingFinish; - int mFinishTimer; - int mCurrentPlayer; + NinePatchComponent mBackground; + ComponentGrid mGrid; + + std::shared_ptr mTitle; + std::shared_ptr mMsg; + std::shared_ptr mDeviceInfo; + std::shared_ptr mDeviceHeld; + + std::function mDoneCallback; }; diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 68103d049..509986c47 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -1,115 +1,157 @@ #include "GuiInputConfig.h" #include "../Window.h" -#include "../Renderer.h" -#include "../resources/Font.h" #include "../Log.h" -#include "../views/ViewController.h" +#include "../components/TextComponent.h" +#include "../components/ImageComponent.h" +#include "../components/MenuComponent.h" +#include "../components/ButtonComponent.h" +#include "../Util.h" static const int inputCount = 10; -static std::string inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Menu", "Select", "PageUp", "PageDown"}; -static std::string inputDispName[inputCount] = { "Up", "Down", "Left", "Right", "Accept", "Back", "Menu", "Jump to Letter", "Page Up", "Page Down"}; +static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown"}; +static const char* inputDispName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "Page Up", "Page Down"}; +static const char* inputIcon[inputCount] = { ":/help/dpad_up.png", ":/help/dpad_down.png", ":/help/dpad_left.png", ":/help/dpad_right.png", + ":/help/a.png", ":/help/b.png", ":/help/start.png", ":/help/select.png", ":/help/l.png", ":/help/r.png" }; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. //If you want, you can manually add them to es_input.cfg. -GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target) : GuiComponent(window), mTargetConfig(target), mCanSkip(false) +using namespace Eigen; + +GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), + mTargetConfig(target) { - mCurInputId = 0; LOG(LogInfo) << "Configuring device " << target->getDeviceId(); + + if(reconfigureAll) + target->clear(); + + mConfiguringAll = reconfigureAll; + mConfiguringRow = mConfiguringAll; + + addChild(&mBackground); + addChild(&mGrid); + + mTitle = std::make_shared(mWindow, "PLEASE CONFIGURE INPUT FOR", Font::get(FONT_SIZE_SMALL), 0x555555FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); + + mSubtitle1 = std::make_shared(mWindow, target->getDeviceName(), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mSubtitle1, Vector2i(0, 1), false, true); + + mSubtitle2 = std::make_shared(mWindow, "(HOLD ANY BUTTON TO SKIP BUT NOT YET)", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mSubtitle2, Vector2i(0, 2), false, true); + + mList = std::make_shared(mWindow); + mGrid.setEntry(mList, Vector2i(0, 3), true, true); + for(int i = 0; i < inputCount; i++) + { + ComponentListRow row; + + // icon + auto icon = std::make_shared(mWindow); + icon->setImage(inputIcon[i]); + icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getHeight() * 0.8f); + row.addElement(icon, false); + + auto text = std::make_shared(mWindow, inputDispName[i], Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + row.addElement(text, true); + + auto mapping = std::make_shared(mWindow, "-NOT DEFINED-", Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT), 0x999999FF); + row.addElement(mapping, true); + + row.input_handler = [this, i, mapping](InputConfig* config, Input input) -> bool + { + if(!input.value) + return false; + + if(mConfiguringRow) + { + if(!process(config, input, i, mapping)) // button press invalid; try again + return true; + if(mConfiguringAll) + { + if(!mList->moveCursor(1)) // try to move to the next one + { + // at bottom of list + mConfiguringAll = false; + mConfiguringRow = false; + mGrid.moveCursor(Vector2i(0, 1)); + } + }else{ + mConfiguringRow = false; // we only wanted to configure one row + } + return true; + }else{ + // not configuring, start configuring when A is pressed + if(config->isMappedTo("a", input) && input.value) + { + mConfiguringRow = true; + return true; + } + return false; + } + + return false; + }; + mList->addRow(row); + } + + // buttons + std::vector< std::shared_ptr > buttons; + buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okCallback] { + mWindow->getInputManager()->writeDeviceConfig(mTargetConfig); // save + if(okCallback) + okCallback(); + delete this; + })); + mButtonGrid = makeButtonGrid(mWindow, buttons); + mGrid.setEntry(mButtonGrid, Vector2i(0, 4), true, false); + + setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.7f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } -void GuiInputConfig::update(int deltaTime) +void GuiInputConfig::onSizeChanged() { + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); + // update grid + mGrid.setSize(mSize); + + mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(1, mSubtitle1->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(2, mSubtitle2->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mSize.y()); } -bool GuiInputConfig::input(InputConfig* config, Input input) +void GuiInputConfig::error(const std::string& msg) { - if(config != mTargetConfig || input.value == 0) + // TODO + LOG(LogWarning) << msg; +} + +bool GuiInputConfig::process(InputConfig* config, Input input, int inputId, const std::shared_ptr& text) +{ + // from some other input source + if(config != mTargetConfig) return false; - if(mCurInputId >= inputCount) + // if this input is mapped to something other than "nothing" or the current row, error + // (if it's the same as what it was before, allow it) + if(config->getMappedTo(input).size() > 0 && !config->isMappedTo(inputName[inputId], input)) { - //done - if(input.type == TYPE_BUTTON || input.type == TYPE_KEY) - { - if(mTargetConfig->getPlayerNum() < mWindow->getInputManager()->getNumPlayers() - 1) - { - mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(mTargetConfig->getPlayerNum() + 1))); - }else{ - mWindow->getInputManager()->writeConfig(); - mWindow->getViewController()->goToStart(); - } - delete this; - return true; - } - }else{ - if(mCanSkip && config->isMappedTo("a", input)) - { - mCurInputId++; - return true; - } - - if(config->getMappedTo(input).size() > 0) - { - mErrorMsg = "Already mapped!"; - return true; - } - - input.configured = true; - LOG(LogInfo) << " [" << input.string() << "] -> " << inputName[mCurInputId]; - - config->mapInput(inputName[mCurInputId], input); - mCurInputId++; - mErrorMsg = ""; - - //for buttons with not enough buttons, press A to skip - if(mCurInputId >= 7) - { - mCanSkip = true; - } - return true; + error("Already mapped!"); + return false; } - return false; -} - -void GuiInputConfig::render(const Eigen::Affine3f& parentTrans) -{ - Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::setMatrix(trans); - - std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); - - std::stringstream stream; - stream << "PLAYER " << mTargetConfig->getPlayerNum() + 1 << ", press..."; - font->drawText(stream.str(), Eigen::Vector2f(10, 10), 0x000000FF); - - int y = 14 + (int)font->getHeight(); - for(int i = 0; i < mCurInputId; i++) - { - font->drawText(inputDispName[i], Eigen::Vector2f(10, y), 0x00CC00FF); - y += (int)font->getHeight() + 5; - } - - if(mCurInputId >= inputCount) - { - font->drawCenteredText("Basic config done!", 0, Renderer::getScreenHeight() * 0.4f, 0x00CC00FF); - font->drawCenteredText("Press any button to continue.", 0, Renderer::getScreenHeight() * 0.4f + font->getHeight() + 4, 0x000000FF); - }else{ - font->drawText(inputDispName[mCurInputId], Eigen::Vector2f(10, y), 0x000000FF); - if(mCanSkip) - { - Eigen::Vector2f textSize = font->sizeText(inputDispName[mCurInputId]); - textSize[0] += 14; - - if(Renderer::getScreenWidth() / 2.5f > textSize.x()) - textSize[0] = Renderer::getScreenWidth() / 2.5f; - - font->drawText("press Accept to skip", Eigen::Vector2f(textSize.x(), y), 0x0000AAFF); - } - } - - if(!mErrorMsg.empty()) - font->drawCenteredText(mErrorMsg, 0, (float)Renderer::getScreenHeight() - font->getHeight() - 10, 0xFF0000FF); + text->setText(strToUpper(input.string())); + text->setColor(0x777777FF); + + input.configured = true; + config->mapInput(inputName[inputId], input); + + LOG(LogInfo) << " Mapping [" << input.string() << "] -> " << inputName[inputId]; + + return true; } diff --git a/src/guis/GuiInputConfig.h b/src/guis/GuiInputConfig.h index 3b0fb9bb0..be701b029 100644 --- a/src/guis/GuiInputConfig.h +++ b/src/guis/GuiInputConfig.h @@ -1,20 +1,33 @@ #pragma once #include "../GuiComponent.h" -#include +#include "../components/NinePatchComponent.h" +#include "../components/ComponentGrid.h" +#include "../components/ComponentList.h" + +class TextComponent; class GuiInputConfig : public GuiComponent { public: - GuiInputConfig(Window* window, InputConfig* target); + GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback); - bool input(InputConfig* config, Input input); - void update(int deltaTime); - void render(const Eigen::Affine3f& parentTrans) override; + void onSizeChanged() override; private: - std::string mErrorMsg; + void error(const std::string& msg); + bool process(InputConfig* config, Input input, int inputId, const std::shared_ptr& text); + + NinePatchComponent mBackground; + ComponentGrid mGrid; + + std::shared_ptr mTitle; + std::shared_ptr mSubtitle1; + std::shared_ptr mSubtitle2; + std::shared_ptr mList; + std::shared_ptr mButtonGrid; + InputConfig* mTargetConfig; - int mCurInputId; - bool mCanSkip; + bool mConfiguringRow; // next input captured by mList will be interpretted as a remap + bool mConfiguringAll; // move the cursor down after configuring a row and start configuring the next row until we reach the bottom }; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 5a7f1981e..a9a0b5c97 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -6,6 +6,7 @@ #include "GuiMsgBox.h" #include "GuiSettings.h" #include "GuiScraperStart.h" +#include "GuiDetectDevice.h" #include "../components/ButtonComponent.h" #include "../components/SwitchComponent.h" @@ -120,6 +121,11 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mWindow->pushGui(s); }); + addEntry("CONFIGURE INPUT", 0x777777FF, true, + [this] { + mWindow->pushGui(new GuiDetectDevice(mWindow, false)); + }); + addEntry("QUIT", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "QUIT"); @@ -191,7 +197,7 @@ void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, con bool GuiMenu::input(InputConfig* config, Input input) { - if((config->isMappedTo("b", input) || config->isMappedTo("menu", input)) && input.value != 0) + if((config->isMappedTo("b", input) || config->isMappedTo("start", input)) && input.value != 0) { delete this; return true; diff --git a/src/main.cpp b/src/main.cpp index 6b9479917..548f6dc19 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -175,11 +175,11 @@ int main(int argc, char* argv[]) window.getViewController()->preload(); //choose which GUI to open depending on if an input configuration already exists - if(fs::exists(InputManager::getConfigPath())) + if(fs::exists(InputManager::getConfigPath()) && window.getInputManager()->getNumConfiguredDevices() > 0) { window.getViewController()->goToStart(); }else{ - window.pushGui(new GuiDetectDevice(&window)); + window.pushGui(new GuiDetectDevice(&window, true)); } //generate joystick events since we're done loading diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 9b75fd94c..c5f904964 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -161,7 +161,7 @@ bool ViewController::input(InputConfig* config, Input input) return true; // open menu - if(config->isMappedTo("menu", input) && input.value != 0) + if(config->isMappedTo("start", input) && input.value != 0) { // open menu mWindow->pushGui(new GuiMenu(mWindow)); @@ -255,7 +255,7 @@ std::vector ViewController::getHelpPrompts() return prompts; prompts = mCurrentView->getHelpPrompts(); - prompts.push_back(HelpPrompt("menu", "open menu")); + prompts.push_back(HelpPrompt("start", "open menu")); return prompts; } From 3c5fa89eaf20f74cc16a4dbcee34bf928e6c5ca5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 21 Mar 2014 20:38:16 -0500 Subject: [PATCH 210/386] Added "PRESS ANYTHING" and "ALREADY TAKEN" notifications to GuiInputConfig. --- src/components/ComponentList.h | 2 +- src/guis/GuiInputConfig.cpp | 37 +++++++++++++++++++++++++++++----- src/guis/GuiInputConfig.h | 5 ++++- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index fc33d6417..5a0730891 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -61,7 +61,7 @@ public: bool moveCursor(int amt); inline int getCursorId() const { return mCursor; } - + float getTotalRowHeight() const; protected: diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 509986c47..0b78a7ade 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -54,11 +54,18 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getHeight() * 0.8f); row.addElement(icon, false); + // spacer between icon and text + auto spacer = std::make_shared(mWindow); + spacer->setSize(16, 0); + row.addElement(spacer, false); + auto text = std::make_shared(mWindow, inputDispName[i], Font::get(FONT_SIZE_MEDIUM), 0x777777FF); row.addElement(text, true); - auto mapping = std::make_shared(mWindow, "-NOT DEFINED-", Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT), 0x999999FF); + auto mapping = std::make_shared(mWindow, "-NOT DEFINED-", Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT), 0x999999FF, TextComponent::ALIGN_RIGHT); + setNotDefined(mapping); // overrides text and color set above row.addElement(mapping, true); + mMappings.push_back(mapping); row.input_handler = [this, i, mapping](InputConfig* config, Input input) -> bool { @@ -77,6 +84,9 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mConfiguringAll = false; mConfiguringRow = false; mGrid.moveCursor(Vector2i(0, 1)); + }else{ + // on another one + setPress(mMappings.at(mList->getCursorId())); } }else{ mConfiguringRow = false; // we only wanted to configure one row @@ -87,6 +97,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi if(config->isMappedTo("a", input) && input.value) { mConfiguringRow = true; + setPress(mapping); return true; } return false; @@ -97,6 +108,10 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mList->addRow(row); } + // make the first one say "NOT DEFINED" if we're re-configuring everything + if(mConfiguringAll) + setPress(mMappings.front()); + // buttons std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okCallback] { @@ -125,10 +140,22 @@ void GuiInputConfig::onSizeChanged() mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mSize.y()); } -void GuiInputConfig::error(const std::string& msg) +void GuiInputConfig::setPress(const std::shared_ptr& text) { - // TODO - LOG(LogWarning) << msg; + text->setText("PRESS ANYTHING"); + text->setColor(0x656565FF); +} + +void GuiInputConfig::setNotDefined(const std::shared_ptr& text) +{ + text->setText("-NOT DEFINED-"); + text->setColor(0x999999FF); +} + +void GuiInputConfig::error(const std::shared_ptr& text, const std::string& msg) +{ + text->setText("ALREADY TAKEN"); + text->setColor(0x656565FF); } bool GuiInputConfig::process(InputConfig* config, Input input, int inputId, const std::shared_ptr& text) @@ -141,7 +168,7 @@ bool GuiInputConfig::process(InputConfig* config, Input input, int inputId, cons // (if it's the same as what it was before, allow it) if(config->getMappedTo(input).size() > 0 && !config->isMappedTo(inputName[inputId], input)) { - error("Already mapped!"); + error(text, "Already mapped!"); return false; } diff --git a/src/guis/GuiInputConfig.h b/src/guis/GuiInputConfig.h index be701b029..e5c28a376 100644 --- a/src/guis/GuiInputConfig.h +++ b/src/guis/GuiInputConfig.h @@ -15,7 +15,9 @@ public: void onSizeChanged() override; private: - void error(const std::string& msg); + void error(const std::shared_ptr& text, const std::string& msg); + void setPress(const std::shared_ptr& text); + void setNotDefined(const std::shared_ptr& text); bool process(InputConfig* config, Input input, int inputId, const std::shared_ptr& text); NinePatchComponent mBackground; @@ -25,6 +27,7 @@ private: std::shared_ptr mSubtitle1; std::shared_ptr mSubtitle2; std::shared_ptr mList; + std::vector< std::shared_ptr > mMappings; std::shared_ptr mButtonGrid; InputConfig* mTargetConfig; From 98b17bf2467f1e7fd53fd611ba767a73b1b8f274 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 11:43:33 -0500 Subject: [PATCH 211/386] Try to guess the proper inputConfig entry from deviceName if deviceGUID is missing. --- src/InputManager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 142778445..462275397 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -252,7 +252,9 @@ bool InputManager::loadInputConfig(InputConfig* config) if(!root) return false; - pugi::xml_node configNode = root.find_child_by_attribute("inputConfig", "deviceGUID", getDeviceGUIDString(config->getDeviceId()).c_str()); + pugi::xml_node configNode = root.find_child_by_attribute("inputConfig", "deviceGUID", config->getDeviceGUIDString().c_str()); + if(!configNode) + configNode = root.find_child_by_attribute("inputConfig", "deviceName", config->getDeviceName().c_str()); if(!configNode) return false; @@ -304,6 +306,9 @@ void InputManager::writeDeviceConfig(InputConfig* config) pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", config->getDeviceGUIDString().c_str()); if(oldEntry) root.remove_child(oldEntry); + oldEntry = root.find_child_by_attribute("inputConfig", "deviceName", config->getDeviceName().c_str()); + if(oldEntry) + root.remove_child(oldEntry); } } } From d0261dcc5a1d5bbcaa8fd4ae80ba1a5d5cf6d2b8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 11:44:57 -0500 Subject: [PATCH 212/386] Added "fade" transition between views in ViewController. You can change the "transition style" in the UI options. Added "string" type to "Settings". Fixed problems with loading settings when --home-path was not the exactly first argument supplied. --- src/Log.cpp | 4 +++- src/Settings.cpp | 13 +++++++++++++ src/Settings.h | 3 +++ src/guis/GuiMenu.cpp | 10 ++++++++++ src/main.cpp | 32 +++++++++++++++++++++++--------- src/views/ViewController.cpp | 25 ++++++++++++++++++++++--- 6 files changed, 74 insertions(+), 13 deletions(-) diff --git a/src/Log.cpp b/src/Log.cpp index 0e8522601..643aef16a 100644 --- a/src/Log.cpp +++ b/src/Log.cpp @@ -58,7 +58,9 @@ Log::~Log() if(getOutput() == NULL) { - std::cerr << "ERROR - tried to write to log file before it was open!\n"; + // not open yet, print to stdout + std::cerr << "ERROR - tried to write to log file before it was open! The following won't be logged:\n"; + std::cerr << os.str(); return; } diff --git a/src/Settings.cpp b/src/Settings.cpp index 62e282a7e..13e342a82 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -41,6 +41,8 @@ void Settings::setDefaults() mIntMap["GameListSortIndex"] = 0; + mStringMap["TransitionStyle"] = "fade"; + mScraper = std::shared_ptr(new GamesDBScraper()); } @@ -65,6 +67,14 @@ void Settings::saveFile() saveMap(doc, mIntMap, "int"); saveMap(doc, mFloatMap, "float"); + //saveMap(doc, mStringMap, "string"); + for(auto iter = mStringMap.begin(); iter != mStringMap.end(); iter++) + { + pugi::xml_node node = doc.append_child("string"); + node.append_attribute("name").set_value(iter->first.c_str()); + node.append_attribute("value").set_value(iter->second.c_str()); + } + pugi::xml_node scraperNode = doc.append_child("scraper"); scraperNode.append_attribute("value").set_value(mScraper->getName()); @@ -92,6 +102,8 @@ void Settings::loadFile() setInt(node.attribute("name").as_string(), node.attribute("value").as_int()); for(pugi::xml_node node = doc.child("float"); node; node = node.next_sibling("float")) setFloat(node.attribute("name").as_string(), node.attribute("value").as_float()); + for(pugi::xml_node node = doc.child("string"); node; node = node.next_sibling("string")) + setString(node.attribute("name").as_string(), node.attribute("value").as_string()); if(doc.child("scraper")) { @@ -128,3 +140,4 @@ void Settings::setMethodName(const std::string& name, type value) \ SETTINGS_GETSET(bool, mBoolMap, getBool, setBool); SETTINGS_GETSET(int, mIntMap, getInt, setInt); SETTINGS_GETSET(float, mFloatMap, getFloat, setFloat); +SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); \ No newline at end of file diff --git a/src/Settings.h b/src/Settings.h index 1ea193572..d4670801f 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -18,10 +18,12 @@ public: bool getBool(const std::string& name); int getInt(const std::string& name); float getFloat(const std::string& name); + const std::string& getString(const std::string& name); void setBool(const std::string& name, bool value); void setInt(const std::string& name, int value); void setFloat(const std::string& name, float value); + void setString(const std::string& name, const std::string& value); std::shared_ptr getScraper(); void setScraper(std::shared_ptr scraper); @@ -37,6 +39,7 @@ private: std::map mBoolMap; std::map mIntMap; std::map mFloatMap; + std::map mStringMap; std::shared_ptr mScraper; std::string mHomePathOverride; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index a9a0b5c97..9491a1162 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -118,6 +118,16 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("ON-SCREEN HELP", show_help); s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + // transition style + auto transition_style = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); + std::vector transitions; + transitions.push_back("fade"); + transitions.push_back("slide"); + for(auto it = transitions.begin(); it != transitions.end(); it++) + transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); + s->addWithLabel("TRANSITION STYLE", transition_style); + s->addSaveFunc([transition_style] { Settings::getInstance()->setString("TransitionStyle", transition_style->getSelected()); }); + mWindow->pushGui(s); }); diff --git a/src/main.cpp b/src/main.cpp index 548f6dc19..73534ad33 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,6 +22,26 @@ namespace fs = boost::filesystem; bool scrape_cmdline = false; +// we do this separately from the other args because the other args might call Settings::getInstance() +// which will load the file getHomePath() + "/.emulationstation/es_settings.cfg", and getHomePath() needs to be accurate by then +bool parseArgsForHomeDir(int argc, char* argv[]) +{ + for(int i = 1; i < argc; i++) + { + if(strcmp(argv[i], "--home-path") == 0) + { + if(i >= argc - 1) + { + std::cerr << "No home path specified!\n"; + return false; + } + setHomePathOverride(argv[i + 1]); + } + } + + return true; +} + bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height) { for(int i = 1; i < argc; i++) @@ -59,15 +79,6 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--scrape") == 0) { scrape_cmdline = true; - }else if(strcmp(argv[i], "--home-path") == 0) - { - if(i >= argc - 1) - { - std::cerr << "No home path specified!\n"; - return false; - } - - setHomePathOverride(argv[i + 1]); }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n"; @@ -121,6 +132,9 @@ int main(int argc, char* argv[]) unsigned int width = 0; unsigned int height = 0; + if(!parseArgsForHomeDir(argc, argv)) // returns false if an invalid path was specified + return 1; + if(!parseArgs(argc, argv, &width, &height)) return 0; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index c5f904964..6246553e8 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -1,6 +1,7 @@ #include "ViewController.h" #include "../Log.h" #include "../SystemData.h" +#include "../Settings.h" #include "gamelist/BasicGameListView.h" #include "gamelist/DetailedGameListView.h" @@ -13,8 +14,6 @@ ViewController::ViewController(Window* window) : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0), mLockInput(false) { - // slot 1 so the fade carries over - setAnimation(new LambdaAnimation([&] (float t) { mFadeOpacity = lerp(1.0f, 0.0f, t); }, 900), nullptr, false, 1); mState.viewing = NOTHING; } @@ -69,7 +68,27 @@ void ViewController::playViewTransition() Eigen::Vector3f target(Eigen::Vector3f::Identity()); if(mCurrentView) target = mCurrentView->getPosition(); - setAnimation(new MoveCameraAnimation(mCamera, target)); + + if(Settings::getInstance()->getString("TransitionStyle") == "fade") + { + // fade animation + auto fadeAnim = [this, target](float t) { + float fadeStart = lerp(0, 1, t / 0.3f); + float fadeEnd = lerp(1, 0, (t - 0.7f) / 0.3f); + + if(t <= 0.3f) + { + mFadeOpacity = fadeStart; + }else{ + this->mCamera.translation() = -target; + mFadeOpacity = fadeEnd; + } + }; + setAnimation(new LambdaAnimation(fadeAnim, 800)); + }else{ + // slide + setAnimation(new MoveCameraAnimation(mCamera, target)); + } } void ViewController::onFileChanged(FileData* file, FileChangeType change) From f2bd7004e10549f36e920d04e81a5a4e0a054009 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 13:04:14 -0500 Subject: [PATCH 213/386] Added SVGs for most resources. --- CMakeLists.txt | 48 +- data/ResourceUtil.cpp | 108 +- data/Resources.h | 104 +- data/converted/arrow_png.cpp | 127 -- data/converted/arrow_svg.cpp | 92 ++ data/converted/checkbox_checked_png.cpp | 137 -- data/converted/checkbox_checked_svg.cpp | 141 ++ data/converted/checkbox_unchecked_png.cpp | 121 -- data/converted/checkbox_unchecked_svg.cpp | 93 ++ data/converted/fav_add_svg.cpp | 72 + data/converted/fav_remove_svg.cpp | 65 + data/converted/help_a_png.cpp | 161 -- data/converted/help_b_png.cpp | 160 -- data/converted/help_button_a_svg.cpp | 88 + data/converted/help_button_b_svg.cpp | 142 ++ data/converted/help_button_l_svg.cpp | 109 ++ data/converted/help_button_r_svg.cpp | 134 ++ data/converted/help_button_select_svg.cpp | 177 ++ data/converted/help_button_start_svg.cpp | 178 ++ data/converted/help_button_x_svg.cpp | 88 + data/converted/help_button_y_svg.cpp | 84 + data/converted/help_dpad_all_png.cpp | 1645 ------------------- data/converted/help_dpad_all_svg.cpp | 353 ++++ data/converted/help_dpad_down_png.cpp | 187 --- data/converted/help_dpad_down_svg.cpp | 330 ++++ data/converted/help_dpad_left_png.cpp | 188 --- data/converted/help_dpad_left_right_png.cpp | 1637 ------------------ data/converted/help_dpad_left_svg.cpp | 330 ++++ data/converted/help_dpad_leftright_svg.cpp | 337 ++++ data/converted/help_dpad_right_png.cpp | 188 --- data/converted/help_dpad_right_svg.cpp | 190 +++ data/converted/help_dpad_up_down_png.cpp | 1638 ------------------ data/converted/help_dpad_up_png.cpp | 188 --- data/converted/help_dpad_up_svg.cpp | 329 ++++ data/converted/help_dpad_updown_svg.cpp | 337 ++++ data/converted/help_l_png.cpp | 154 -- data/converted/help_r_png.cpp | 157 -- data/converted/help_select_png.cpp | 155 -- data/converted/help_start_png.cpp | 152 -- data/converted/help_x_png.cpp | 165 -- data/converted/help_y_png.cpp | 157 -- data/converted/off_svg.cpp | 141 ++ data/converted/on_svg.cpp | 122 ++ data/converted/option_arrow_svg.cpp | 92 ++ data/converted/sq_bracket_png.cpp | 136 -- data/converted/star_filled_png.cpp | 180 -- data/converted/star_filled_svg.cpp | 124 ++ data/converted/star_unfilled_png.cpp | 132 -- data/converted/star_unfilled_svg.cpp | 199 +++ data/converted/textbox_glow_png.cpp | 359 ---- data/converted/textbox_png.cpp | 297 ---- data/resources/arrow.png | Bin 1193 -> 0 bytes data/resources/arrow.svg | 11 + data/resources/checkbox_checked.png | Bin 1296 -> 0 bytes data/resources/checkbox_checked.svg | 23 + data/resources/checkbox_unchecked.png | Bin 1131 -> 0 bytes data/resources/checkbox_unchecked.svg | 9 + data/resources/fav_add.svg | 12 + data/resources/fav_remove.svg | 9 + data/resources/help/a.png | Bin 1534 -> 0 bytes data/resources/help/b.png | Bin 1522 -> 0 bytes data/resources/help/button_a.svg | 13 + data/resources/help/button_b.svg | 18 + data/resources/help/button_l.svg | 15 + data/resources/help/button_r.svg | 16 + data/resources/help/button_select.svg | 23 + data/resources/help/button_start.svg | 21 + data/resources/help/button_x.svg | 13 + data/resources/help/button_y.svg | 12 + data/resources/help/dpad_all.png | Bin 16375 -> 0 bytes data/resources/help/dpad_all.svg | 51 + data/resources/help/dpad_down.png | Bin 1797 -> 0 bytes data/resources/help/dpad_down.svg | 48 + data/resources/help/dpad_left.png | Bin 1805 -> 0 bytes data/resources/help/dpad_left.svg | 48 + data/resources/help/dpad_left_right.png | Bin 16291 -> 0 bytes data/resources/help/dpad_leftright.svg | 49 + data/resources/help/dpad_right.png | Bin 1802 -> 0 bytes data/resources/help/dpad_right.svg | 24 + data/resources/help/dpad_up.png | Bin 1804 -> 0 bytes data/resources/help/dpad_up.svg | 48 + data/resources/help/dpad_up_down.png | Bin 16306 -> 0 bytes data/resources/help/dpad_updown.svg | 49 + data/resources/help/l.png | Bin 1464 -> 0 bytes data/resources/help/r.png | Bin 1495 -> 0 bytes data/resources/help/select.png | Bin 1477 -> 0 bytes data/resources/help/start.png | Bin 1446 -> 0 bytes data/resources/help/x.png | Bin 1576 -> 0 bytes data/resources/help/y.png | Bin 1498 -> 0 bytes data/resources/off.svg | 13 + data/resources/on.svg | 14 + data/resources/option_arrow.svg | 11 + data/resources/sq_bracket.png | Bin 1286 -> 0 bytes data/resources/star_filled.png | Bin 1729 -> 0 bytes data/resources/star_filled.svg | 12 + data/resources/star_unfilled.png | Bin 1245 -> 0 bytes data/resources/star_unfilled.svg | 19 + data/resources/textbox.png | Bin 2894 -> 0 bytes data/resources/textbox_glow.png | Bin 3517 -> 0 bytes src/components/HelpComponent.cpp | 18 +- src/components/OptionListComponent.h | 29 +- src/components/SwitchComponent.cpp | 8 +- src/components/TextComponent.cpp | 17 +- src/guis/GuiInputConfig.cpp | 5 +- src/guis/GuiMenu.cpp | 7 +- src/guis/GuiMetaDataEd.cpp | 2 +- src/resources/TextureResource.cpp | 4 + 107 files changed, 5105 insertions(+), 8594 deletions(-) delete mode 100644 data/converted/arrow_png.cpp create mode 100644 data/converted/arrow_svg.cpp delete mode 100644 data/converted/checkbox_checked_png.cpp create mode 100644 data/converted/checkbox_checked_svg.cpp delete mode 100644 data/converted/checkbox_unchecked_png.cpp create mode 100644 data/converted/checkbox_unchecked_svg.cpp create mode 100644 data/converted/fav_add_svg.cpp create mode 100644 data/converted/fav_remove_svg.cpp delete mode 100644 data/converted/help_a_png.cpp delete mode 100644 data/converted/help_b_png.cpp create mode 100644 data/converted/help_button_a_svg.cpp create mode 100644 data/converted/help_button_b_svg.cpp create mode 100644 data/converted/help_button_l_svg.cpp create mode 100644 data/converted/help_button_r_svg.cpp create mode 100644 data/converted/help_button_select_svg.cpp create mode 100644 data/converted/help_button_start_svg.cpp create mode 100644 data/converted/help_button_x_svg.cpp create mode 100644 data/converted/help_button_y_svg.cpp delete mode 100644 data/converted/help_dpad_all_png.cpp create mode 100644 data/converted/help_dpad_all_svg.cpp delete mode 100644 data/converted/help_dpad_down_png.cpp create mode 100644 data/converted/help_dpad_down_svg.cpp delete mode 100644 data/converted/help_dpad_left_png.cpp delete mode 100644 data/converted/help_dpad_left_right_png.cpp create mode 100644 data/converted/help_dpad_left_svg.cpp create mode 100644 data/converted/help_dpad_leftright_svg.cpp delete mode 100644 data/converted/help_dpad_right_png.cpp create mode 100644 data/converted/help_dpad_right_svg.cpp delete mode 100644 data/converted/help_dpad_up_down_png.cpp delete mode 100644 data/converted/help_dpad_up_png.cpp create mode 100644 data/converted/help_dpad_up_svg.cpp create mode 100644 data/converted/help_dpad_updown_svg.cpp delete mode 100644 data/converted/help_l_png.cpp delete mode 100644 data/converted/help_r_png.cpp delete mode 100644 data/converted/help_select_png.cpp delete mode 100644 data/converted/help_start_png.cpp delete mode 100644 data/converted/help_x_png.cpp delete mode 100644 data/converted/help_y_png.cpp create mode 100644 data/converted/off_svg.cpp create mode 100644 data/converted/on_svg.cpp create mode 100644 data/converted/option_arrow_svg.cpp delete mode 100644 data/converted/sq_bracket_png.cpp delete mode 100644 data/converted/star_filled_png.cpp create mode 100644 data/converted/star_filled_svg.cpp delete mode 100644 data/converted/star_unfilled_png.cpp create mode 100644 data/converted/star_unfilled_svg.cpp delete mode 100644 data/converted/textbox_glow_png.cpp delete mode 100644 data/converted/textbox_png.cpp delete mode 100644 data/resources/arrow.png create mode 100644 data/resources/arrow.svg delete mode 100644 data/resources/checkbox_checked.png create mode 100644 data/resources/checkbox_checked.svg delete mode 100644 data/resources/checkbox_unchecked.png create mode 100644 data/resources/checkbox_unchecked.svg create mode 100644 data/resources/fav_add.svg create mode 100644 data/resources/fav_remove.svg delete mode 100644 data/resources/help/a.png delete mode 100644 data/resources/help/b.png create mode 100644 data/resources/help/button_a.svg create mode 100644 data/resources/help/button_b.svg create mode 100644 data/resources/help/button_l.svg create mode 100644 data/resources/help/button_r.svg create mode 100644 data/resources/help/button_select.svg create mode 100644 data/resources/help/button_start.svg create mode 100644 data/resources/help/button_x.svg create mode 100644 data/resources/help/button_y.svg delete mode 100644 data/resources/help/dpad_all.png create mode 100644 data/resources/help/dpad_all.svg delete mode 100644 data/resources/help/dpad_down.png create mode 100644 data/resources/help/dpad_down.svg delete mode 100644 data/resources/help/dpad_left.png create mode 100644 data/resources/help/dpad_left.svg delete mode 100644 data/resources/help/dpad_left_right.png create mode 100644 data/resources/help/dpad_leftright.svg delete mode 100644 data/resources/help/dpad_right.png create mode 100644 data/resources/help/dpad_right.svg delete mode 100644 data/resources/help/dpad_up.png create mode 100644 data/resources/help/dpad_up.svg delete mode 100644 data/resources/help/dpad_up_down.png create mode 100644 data/resources/help/dpad_updown.svg delete mode 100644 data/resources/help/l.png delete mode 100644 data/resources/help/r.png delete mode 100644 data/resources/help/select.png delete mode 100644 data/resources/help/start.png delete mode 100644 data/resources/help/x.png delete mode 100644 data/resources/help/y.png create mode 100644 data/resources/off.svg create mode 100644 data/resources/on.svg create mode 100644 data/resources/option_arrow.svg delete mode 100644 data/resources/sq_bracket.png delete mode 100644 data/resources/star_filled.png create mode 100644 data/resources/star_filled.svg delete mode 100644 data/resources/star_unfilled.png create mode 100644 data/resources/star_unfilled.svg delete mode 100644 data/resources/textbox.png delete mode 100644 data/resources/textbox_glow.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 359dcb081..6d7ad177a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -308,34 +308,36 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textbox_glow_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_a_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_b_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_x_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_y_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_l_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_r_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_start_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_select_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_all_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_up_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_down_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_right_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_up_down_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_right_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_a_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_b_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_x_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_y_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_l_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_r_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_start_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_select_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_up_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_down_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_right_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_updown_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_leftright_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_all_svg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_light_ttf.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/sq_bracket_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_checked_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_unchecked_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/option_arrow_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_checked_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_unchecked_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/on_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/off_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_add_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_remove_svg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_png.cpp ) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 69cc4017f..b1d85b192 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,75 +2,79 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 32; +const size_t res2hNrOfFiles = 34; const Res2hEntry res2hFiles[res2hNrOfFiles] = { - {":/arrow.png", arrow_png_size, arrow_png_data}, + {":/arrow.svg", arrow_svg_size, arrow_svg_data}, {":/button.png", button_png_size, button_png_data}, {":/button_filled.png", button_filled_png_size, button_filled_png_data}, - {":/checkbox_checked.png", checkbox_checked_png_size, checkbox_checked_png_data}, - {":/checkbox_unchecked.png", checkbox_unchecked_png_size, checkbox_unchecked_png_data}, + {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, + {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, + {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, + {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, {":/frame.png", frame_png_size, frame_png_data}, + {":/off.svg", off_svg_size, off_svg_data}, + {":/on.svg", on_svg_size, on_svg_data}, {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, + {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, {":/slider_knob.png", slider_knob_png_size, slider_knob_png_data}, - {":/sq_bracket.png", sq_bracket_png_size, sq_bracket_png_data}, - {":/star_filled.png", star_filled_png_size, star_filled_png_data}, - {":/star_unfilled.png", star_unfilled_png_size, star_unfilled_png_data}, - {":/textbox.png", textbox_png_size, textbox_png_data}, - {":/textbox_glow.png", textbox_glow_png_size, textbox_glow_png_data}, - {":/help/a.png", help_a_png_size, help_a_png_data}, - {":/help/b.png", help_b_png_size, help_b_png_data}, - {":/help/dpad_all.png", help_dpad_all_png_size, help_dpad_all_png_data}, - {":/help/dpad_down.png", help_dpad_down_png_size, help_dpad_down_png_data}, - {":/help/dpad_left.png", help_dpad_left_png_size, help_dpad_left_png_data}, - {":/help/dpad_left_right.png", help_dpad_left_right_png_size, help_dpad_left_right_png_data}, - {":/help/dpad_right.png", help_dpad_right_png_size, help_dpad_right_png_data}, - {":/help/dpad_up.png", help_dpad_up_png_size, help_dpad_up_png_data}, - {":/help/dpad_up_down.png", help_dpad_up_down_png_size, help_dpad_up_down_png_data}, - {":/help/l.png", help_l_png_size, help_l_png_data}, - {":/help/r.png", help_r_png_size, help_r_png_data}, - {":/help/select.png", help_select_png_size, help_select_png_data}, - {":/help/start.png", help_start_png_size, help_start_png_data}, - {":/help/x.png", help_x_png_size, help_x_png_data}, - {":/help/y.png", help_y_png_size, help_y_png_data} + {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, + {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, + {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, + {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, + {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, + {":/help/button_r.svg", help_button_r_svg_size, help_button_r_svg_data}, + {":/help/button_select.svg", help_button_select_svg_size, help_button_select_svg_data}, + {":/help/button_start.svg", help_button_start_svg_size, help_button_start_svg_data}, + {":/help/button_x.svg", help_button_x_svg_size, help_button_x_svg_data}, + {":/help/button_y.svg", help_button_y_svg_size, help_button_y_svg_data}, + {":/help/dpad_all.svg", help_dpad_all_svg_size, help_dpad_all_svg_data}, + {":/help/dpad_down.svg", help_dpad_down_svg_size, help_dpad_down_svg_data}, + {":/help/dpad_left.svg", help_dpad_left_svg_size, help_dpad_left_svg_data}, + {":/help/dpad_leftright.svg", help_dpad_leftright_svg_size, help_dpad_leftright_svg_data}, + {":/help/dpad_right.svg", help_dpad_right_svg_size, help_dpad_right_svg_data}, + {":/help/dpad_up.svg", help_dpad_up_svg_size, help_dpad_up_svg_data}, + {":/help/dpad_updown.svg", help_dpad_updown_svg_size, help_dpad_updown_svg_data} }; res2hMapType::value_type mapTemp[] = { - std::make_pair(":/arrow.png", res2hFiles[0]), + std::make_pair(":/arrow.svg", res2hFiles[0]), std::make_pair(":/button.png", res2hFiles[1]), std::make_pair(":/button_filled.png", res2hFiles[2]), - std::make_pair(":/checkbox_checked.png", res2hFiles[3]), - std::make_pair(":/checkbox_unchecked.png", res2hFiles[4]), + std::make_pair(":/checkbox_checked.svg", res2hFiles[3]), + std::make_pair(":/checkbox_unchecked.svg", res2hFiles[4]), std::make_pair(":/ES_logo_16.png", res2hFiles[5]), std::make_pair(":/ES_logo_32.png", res2hFiles[6]), - std::make_pair(":/frame.png", res2hFiles[7]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[8]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[9]), - std::make_pair(":/scroll_gradient.png", res2hFiles[10]), - std::make_pair(":/slider_knob.png", res2hFiles[11]), - std::make_pair(":/sq_bracket.png", res2hFiles[12]), - std::make_pair(":/star_filled.png", res2hFiles[13]), - std::make_pair(":/star_unfilled.png", res2hFiles[14]), - std::make_pair(":/textbox.png", res2hFiles[15]), - std::make_pair(":/textbox_glow.png", res2hFiles[16]), - std::make_pair(":/help/a.png", res2hFiles[17]), - std::make_pair(":/help/b.png", res2hFiles[18]), - std::make_pair(":/help/dpad_all.png", res2hFiles[19]), - std::make_pair(":/help/dpad_down.png", res2hFiles[20]), - std::make_pair(":/help/dpad_left.png", res2hFiles[21]), - std::make_pair(":/help/dpad_left_right.png", res2hFiles[22]), - std::make_pair(":/help/dpad_right.png", res2hFiles[23]), - std::make_pair(":/help/dpad_up.png", res2hFiles[24]), - std::make_pair(":/help/dpad_up_down.png", res2hFiles[25]), - std::make_pair(":/help/l.png", res2hFiles[26]), - std::make_pair(":/help/r.png", res2hFiles[27]), - std::make_pair(":/help/select.png", res2hFiles[28]), - std::make_pair(":/help/start.png", res2hFiles[29]), - std::make_pair(":/help/x.png", res2hFiles[30]), - std::make_pair(":/help/y.png", res2hFiles[31]) + std::make_pair(":/fav_add.svg", res2hFiles[7]), + std::make_pair(":/fav_remove.svg", res2hFiles[8]), + std::make_pair(":/frame.png", res2hFiles[9]), + std::make_pair(":/off.svg", res2hFiles[10]), + std::make_pair(":/on.svg", res2hFiles[11]), + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[12]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[13]), + std::make_pair(":/option_arrow.svg", res2hFiles[14]), + std::make_pair(":/scroll_gradient.png", res2hFiles[15]), + std::make_pair(":/slider_knob.png", res2hFiles[16]), + std::make_pair(":/star_filled.svg", res2hFiles[17]), + std::make_pair(":/star_unfilled.svg", res2hFiles[18]), + std::make_pair(":/help/button_a.svg", res2hFiles[19]), + std::make_pair(":/help/button_b.svg", res2hFiles[20]), + std::make_pair(":/help/button_l.svg", res2hFiles[21]), + std::make_pair(":/help/button_r.svg", res2hFiles[22]), + std::make_pair(":/help/button_select.svg", res2hFiles[23]), + std::make_pair(":/help/button_start.svg", res2hFiles[24]), + std::make_pair(":/help/button_x.svg", res2hFiles[25]), + std::make_pair(":/help/button_y.svg", res2hFiles[26]), + std::make_pair(":/help/dpad_all.svg", res2hFiles[27]), + std::make_pair(":/help/dpad_down.svg", res2hFiles[28]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[29]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[30]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[31]), + std::make_pair(":/help/dpad_up.svg", res2hFiles[32]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[33]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 8da4df8c5..0f2d27b55 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -5,8 +5,8 @@ #include #include -extern const size_t arrow_png_size; -extern const unsigned char arrow_png_data[]; +extern const size_t arrow_svg_size; +extern const unsigned char arrow_svg_data[]; extern const size_t button_png_size; extern const unsigned char button_png_data[]; @@ -14,11 +14,11 @@ extern const unsigned char button_png_data[]; extern const size_t button_filled_png_size; extern const unsigned char button_filled_png_data[]; -extern const size_t checkbox_checked_png_size; -extern const unsigned char checkbox_checked_png_data[]; +extern const size_t checkbox_checked_svg_size; +extern const unsigned char checkbox_checked_svg_data[]; -extern const size_t checkbox_unchecked_png_size; -extern const unsigned char checkbox_unchecked_png_data[]; +extern const size_t checkbox_unchecked_svg_size; +extern const unsigned char checkbox_unchecked_svg_data[]; extern const size_t ES_logo_16_png_size; extern const unsigned char ES_logo_16_png_data[]; @@ -26,80 +26,86 @@ extern const unsigned char ES_logo_16_png_data[]; extern const size_t ES_logo_32_png_size; extern const unsigned char ES_logo_32_png_data[]; +extern const size_t fav_add_svg_size; +extern const unsigned char fav_add_svg_data[]; + +extern const size_t fav_remove_svg_size; +extern const unsigned char fav_remove_svg_data[]; + extern const size_t frame_png_size; extern const unsigned char frame_png_data[]; +extern const size_t off_svg_size; +extern const unsigned char off_svg_data[]; + +extern const size_t on_svg_size; +extern const unsigned char on_svg_data[]; + extern const size_t opensans_hebrew_condensed_light_ttf_size; extern const unsigned char opensans_hebrew_condensed_light_ttf_data[]; extern const size_t opensans_hebrew_condensed_regular_ttf_size; extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; +extern const size_t option_arrow_svg_size; +extern const unsigned char option_arrow_svg_data[]; + extern const size_t scroll_gradient_png_size; extern const unsigned char scroll_gradient_png_data[]; extern const size_t slider_knob_png_size; extern const unsigned char slider_knob_png_data[]; -extern const size_t sq_bracket_png_size; -extern const unsigned char sq_bracket_png_data[]; +extern const size_t star_filled_svg_size; +extern const unsigned char star_filled_svg_data[]; -extern const size_t star_filled_png_size; -extern const unsigned char star_filled_png_data[]; +extern const size_t star_unfilled_svg_size; +extern const unsigned char star_unfilled_svg_data[]; -extern const size_t star_unfilled_png_size; -extern const unsigned char star_unfilled_png_data[]; +extern const size_t help_button_a_svg_size; +extern const unsigned char help_button_a_svg_data[]; -extern const size_t textbox_png_size; -extern const unsigned char textbox_png_data[]; +extern const size_t help_button_b_svg_size; +extern const unsigned char help_button_b_svg_data[]; -extern const size_t textbox_glow_png_size; -extern const unsigned char textbox_glow_png_data[]; +extern const size_t help_button_l_svg_size; +extern const unsigned char help_button_l_svg_data[]; -extern const size_t help_a_png_size; -extern const unsigned char help_a_png_data[]; +extern const size_t help_button_r_svg_size; +extern const unsigned char help_button_r_svg_data[]; -extern const size_t help_b_png_size; -extern const unsigned char help_b_png_data[]; +extern const size_t help_button_select_svg_size; +extern const unsigned char help_button_select_svg_data[]; -extern const size_t help_dpad_all_png_size; -extern const unsigned char help_dpad_all_png_data[]; +extern const size_t help_button_start_svg_size; +extern const unsigned char help_button_start_svg_data[]; -extern const size_t help_dpad_down_png_size; -extern const unsigned char help_dpad_down_png_data[]; +extern const size_t help_button_x_svg_size; +extern const unsigned char help_button_x_svg_data[]; -extern const size_t help_dpad_left_png_size; -extern const unsigned char help_dpad_left_png_data[]; +extern const size_t help_button_y_svg_size; +extern const unsigned char help_button_y_svg_data[]; -extern const size_t help_dpad_left_right_png_size; -extern const unsigned char help_dpad_left_right_png_data[]; +extern const size_t help_dpad_all_svg_size; +extern const unsigned char help_dpad_all_svg_data[]; -extern const size_t help_dpad_right_png_size; -extern const unsigned char help_dpad_right_png_data[]; +extern const size_t help_dpad_down_svg_size; +extern const unsigned char help_dpad_down_svg_data[]; -extern const size_t help_dpad_up_png_size; -extern const unsigned char help_dpad_up_png_data[]; +extern const size_t help_dpad_left_svg_size; +extern const unsigned char help_dpad_left_svg_data[]; -extern const size_t help_dpad_up_down_png_size; -extern const unsigned char help_dpad_up_down_png_data[]; +extern const size_t help_dpad_leftright_svg_size; +extern const unsigned char help_dpad_leftright_svg_data[]; -extern const size_t help_l_png_size; -extern const unsigned char help_l_png_data[]; +extern const size_t help_dpad_right_svg_size; +extern const unsigned char help_dpad_right_svg_data[]; -extern const size_t help_r_png_size; -extern const unsigned char help_r_png_data[]; +extern const size_t help_dpad_up_svg_size; +extern const unsigned char help_dpad_up_svg_data[]; -extern const size_t help_select_png_size; -extern const unsigned char help_select_png_data[]; - -extern const size_t help_start_png_size; -extern const unsigned char help_start_png_data[]; - -extern const size_t help_x_png_size; -extern const unsigned char help_x_png_data[]; - -extern const size_t help_y_png_size; -extern const unsigned char help_y_png_data[]; +extern const size_t help_dpad_updown_svg_size; +extern const unsigned char help_dpad_updown_svg_data[]; struct Res2hEntry { const std::string relativeFileName; diff --git a/data/converted/arrow_png.cpp b/data/converted/arrow_png.cpp deleted file mode 100644 index cf691cef0..000000000 --- a/data/converted/arrow_png.cpp +++ /dev/null @@ -1,127 +0,0 @@ -//this file was auto-generated from "arrow.png" by res2h - -#include "../Resources.h" - -const size_t arrow_png_size = 1193; -const unsigned char arrow_png_data[1193] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x0c, - 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0xf4, - 0x38,0x7d,0x1a,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x39,0x33,0x41,0x30,0x43,0x42, - 0x45,0x30,0x39,0x44,0x37,0x45,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x39,0x33,0x41,0x30,0x43,0x42, - 0x45,0x31,0x39,0x44,0x37,0x45,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x43,0x36,0x39,0x45,0x38,0x46, - 0x46,0x46,0x39,0x44,0x37,0x44,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x43,0x36,0x39,0x45,0x39,0x30, - 0x30,0x30,0x39,0x44,0x37,0x44,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x28,0xbb,0x69,0xeb,0x00,0x00,0x01,0x1b, - 0x49,0x44,0x41,0x54,0x78,0xda,0x8c,0xd3,0xbf,0x4b, - 0x02,0x61,0x1c,0xc7,0xf1,0xa7,0x43,0xa4,0x20,0x50, - 0x70,0xd1,0x21,0x87,0x68,0x69,0x91,0x36,0x17,0xc5, - 0x45,0xc2,0xa1,0x82,0x26,0x83,0x20,0x6a,0x69,0xb0, - 0x2d,0x82,0xdb,0xfa,0x0f,0x6c,0x11,0xda,0x92,0x70, - 0x73,0xa8,0x10,0x0a,0xaa,0x29,0xd1,0xa5,0x2d,0x5a, - 0x5a,0x04,0xc1,0x06,0x11,0x12,0x24,0x82,0x24,0x14, - 0x7b,0x3f,0xf0,0x08,0xc7,0xc1,0xdd,0x7d,0xbf,0xf0, - 0x9a,0xee,0xfb,0xb9,0xe7,0xf7,0x82,0x6d,0xdb,0x65, - 0xa5,0xd4,0x19,0x66,0x4a,0x50,0x16,0x4e,0x71,0x8d, - 0x90,0x34,0xa0,0xeb,0x00,0x77,0x58,0x92,0x06,0x74, - 0x6d,0xe1,0x19,0x51,0x69,0xa0,0x87,0x0c,0x9a,0x48, - 0x48,0x02,0xba,0xf9,0x03,0x29,0xb4,0xb1,0x16,0x14, - 0xf8,0x44,0x16,0xaf,0x58,0x45,0x0b,0x1b,0x7e,0x01, - 0x5d,0x43,0xe4,0xcd,0x5a,0xe2,0x78,0x41,0xce,0x2f, - 0xa0,0xeb,0x07,0xdb,0xa8,0x23,0x82,0x47,0xec,0xf8, - 0x05,0x74,0xfd,0x61,0x1f,0x97,0x58,0xc4,0x2d,0x8e, - 0x54,0xc0,0x61,0x4d,0x71,0x82,0x2f,0x9c,0xe3,0x0a, - 0x31,0x4b,0x70,0xb8,0xce,0x2b,0x63,0x85,0x02,0xce, - 0xa8,0x82,0x92,0x19,0xed,0x18,0x55,0xaf,0x40,0x18, - 0x35,0x14,0x31,0xc6,0x1e,0x1a,0x5e,0x6b,0x58,0xc6, - 0x0d,0x36,0xf1,0x6d,0x76,0xa8,0x39,0xff,0xe8,0x0e, - 0xc4,0xf0,0x80,0x34,0x06,0x28,0xe0,0xcd,0xd9,0xe0, - 0x0c,0xac,0xe0,0x09,0xeb,0xe8,0x9a,0x11,0x3a,0xee, - 0xe1,0x9d,0x01,0x7d,0x7f,0x92,0x78,0x37,0x7f,0xee, - 0x07,0xdd,0xa5,0xa4,0x09,0xe5,0xbc,0x9a,0xdd,0x81, - 0x7b,0x33,0x8d,0x91,0xe4,0x3d,0xe8,0x2d,0xdc,0xc5, - 0xaf,0xe4,0xc5,0x5d,0xe0,0x10,0x13,0xc9,0x9b,0xfe, - 0x17,0x60,0x00,0x1d,0x24,0x35,0x2f,0xfe,0xb0,0x0a, - 0xfe,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae, - 0x42,0x60,0x82 -}; diff --git a/data/converted/arrow_svg.cpp b/data/converted/arrow_svg.cpp new file mode 100644 index 000000000..781bda059 --- /dev/null +++ b/data/converted/arrow_svg.cpp @@ -0,0 +1,92 @@ +//this file was auto-generated from "arrow.svg" by res2h + +#include "../Resources.h" + +const size_t arrow_svg_size = 849; +const unsigned char arrow_svg_data[849] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x32,0x2e,0x31,0x36,0x35,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x31,0x2e,0x39,0x32,0x31,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x36,0x35,0x20, + 0x32,0x31,0x2e,0x39,0x32,0x31,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x36, + 0x35,0x20,0x32,0x31,0x2e,0x39,0x32,0x31,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x30,0x2e,0x37,0x35,0x2c,0x32, + 0x31,0x2e,0x39,0x32,0x31,0x63,0x2d,0x30,0x2e,0x31, + 0x39,0x37,0x2c,0x30,0x2d,0x30,0x2e,0x33,0x39,0x35, + 0x2d,0x30,0x2e,0x30,0x37,0x37,0x2d,0x30,0x2e,0x35, + 0x34,0x32,0x2d,0x30,0x2e,0x32,0x33,0x31,0x63,0x2d, + 0x30,0x2e,0x32,0x38,0x37,0x2d,0x30,0x2e,0x32,0x39, + 0x39,0x2d,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e, + 0x37,0x37,0x33,0x2c,0x30,0x2e,0x30,0x32,0x33,0x2d, + 0x31,0x2e,0x30,0x36,0x31,0x6c,0x31,0x30,0x2e,0x30, + 0x39,0x38,0x2d,0x39,0x2e,0x36,0x36,0x38,0x0d,0x0a, + 0x09,0x09,0x4c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x31, + 0x2e,0x32,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x39, + 0x39,0x2d,0x30,0x2e,0x32,0x38,0x36,0x2d,0x30,0x2e, + 0x33,0x31,0x2d,0x30,0x2e,0x37,0x36,0x31,0x2d,0x30, + 0x2e,0x30,0x32,0x33,0x2d,0x31,0x2e,0x30,0x36,0x63, + 0x30,0x2e,0x32,0x38,0x36,0x2d,0x30,0x2e,0x33,0x2c, + 0x30,0x2e,0x37,0x36,0x31,0x2d,0x30,0x2e,0x33,0x31, + 0x2c,0x31,0x2e,0x30,0x36,0x2d,0x30,0x2e,0x30,0x32, + 0x33,0x6c,0x31,0x30,0x2e,0x36,0x36,0x35,0x2c,0x31, + 0x30,0x2e,0x32,0x31,0x31,0x0d,0x0a,0x09,0x09,0x63, + 0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x31,0x34, + 0x31,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, + 0x33,0x33,0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c, + 0x30,0x2e,0x35,0x34,0x32,0x73,0x2d,0x30,0x2e,0x30, + 0x38,0x34,0x2c,0x30,0x2e,0x34,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x35,0x34,0x32,0x4c,0x31, + 0x2e,0x32,0x36,0x39,0x2c,0x32,0x31,0x2e,0x37,0x31, + 0x33,0x43,0x31,0x2e,0x31,0x32,0x34,0x2c,0x32,0x31, + 0x2e,0x38,0x35,0x32,0x2c,0x30,0x2e,0x39,0x33,0x37, + 0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x2c,0x30,0x2e, + 0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/checkbox_checked_png.cpp b/data/converted/checkbox_checked_png.cpp deleted file mode 100644 index 8c4a629c4..000000000 --- a/data/converted/checkbox_checked_png.cpp +++ /dev/null @@ -1,137 +0,0 @@ -//this file was auto-generated from "checkbox_checked.png" by res2h - -#include "../Resources.h" - -const size_t checkbox_checked_png_size = 1296; -const unsigned char checkbox_checked_png_data[1296] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, - 0x00,0x00,0x00,0x18,0x08,0x06,0x00,0x00,0x00,0xe0, - 0x77,0x3d,0xf8,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x32,0x39,0x46,0x39,0x36,0x42, - 0x42,0x44,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x32,0x39,0x46,0x39,0x36,0x42, - 0x42,0x45,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, - 0x44,0x45,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x32,0x39,0x46,0x39,0x36,0x42, - 0x42,0x43,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0xf8,0x79,0xf8,0xc2,0x00,0x00,0x01,0x82, - 0x49,0x44,0x41,0x54,0x78,0xda,0xac,0x95,0xbd,0x4a, - 0x03,0x41,0x14,0x85,0x67,0x27,0xdb,0x5b,0xad,0x8d, - 0xf6,0x29,0x62,0xa7,0x85,0x82,0x16,0x82,0xe0,0x03, - 0x88,0xb1,0xd2,0xda,0xc2,0xc2,0x6e,0xbb,0xa0,0x79, - 0x03,0x51,0xc8,0xd6,0x5a,0x45,0xf4,0x19,0x2c,0x22, - 0x68,0xa1,0xa5,0x90,0xf4,0x6a,0x61,0x1a,0xd3,0x1b, - 0xd6,0x73,0xe5,0x2c,0x0c,0x61,0x9c,0xdc,0x64,0xf7, - 0xc2,0x97,0xd9,0x09,0x73,0xcf,0xd9,0xf9,0xb9,0x3b, - 0x51,0x9a,0xa6,0x06,0xb1,0x00,0xce,0xc0,0x1e,0x58, - 0x06,0x91,0x99,0x2f,0x72,0xf0,0x01,0xee,0xc0,0x39, - 0xf8,0x8e,0x29,0xfe,0x08,0x56,0x4c,0xf9,0x88,0xf8, - 0x82,0xa7,0x60,0x07,0x6c,0x5a,0xfc,0xb4,0x28,0xde, - 0x07,0x1b,0x20,0xe6,0xc0,0x79,0x88,0xa9,0xd1,0xa7, - 0x66,0x4b,0x0c,0xf6,0xe9,0x7e,0x04,0x9e,0xc1,0xb8, - 0xc4,0x0c,0xc6,0xd4,0x38,0x64,0xbf,0x69,0x39,0x25, - 0x89,0x17,0x67,0xe0,0x31,0x48,0x66,0x10,0x4e,0x98, - 0x53,0xc4,0x2b,0xdb,0x25,0xeb,0x6c,0x68,0xce,0xf6, - 0x04,0x74,0xc0,0x83,0xd2,0x24,0xe1,0xd8,0x0e,0x73, - 0x5d,0xad,0xc8,0x7a,0x12,0x6e,0xc1,0x1b,0x68,0x28, - 0x4c,0x0a,0xf1,0x06,0x73,0xba,0x93,0x03,0x7c,0x06, - 0x5f,0x60,0x5b,0x61,0x32,0x29,0x2e,0x39,0x43,0x8d, - 0x81,0xe1,0xc0,0x90,0x89,0x4a,0x3c,0x64,0x10,0x32, - 0x51,0x8b,0x1b,0x9e,0x5b,0xa3,0x30,0x29,0x04,0x7b, - 0xfc,0xbf,0xae,0x11,0xd7,0x18,0xb8,0x26,0x3d,0x0a, - 0x4b,0x0c,0x34,0xe2,0xd3,0x96,0xa8,0x92,0xb0,0x33, - 0x9c,0xf3,0x3a,0xdf,0x7c,0xc0,0x67,0x55,0x9d,0x58, - 0xa5,0x78,0xb1,0xa1,0x5b,0x44,0x5b,0x27,0x41,0x83, - 0xff,0x4e,0xcb,0x50,0x59,0x27,0x41,0x83,0x69,0x47, - 0x51,0x6d,0xe2,0x33,0x58,0x54,0x9e,0x73,0x95,0x89, - 0xcf,0xa0,0xa9,0x2d,0x22,0x8f,0xc9,0x81,0xaf,0x0e, - 0x72,0xe7,0xc2,0x90,0xe7,0x2b,0xf0,0x03,0xee,0x35, - 0xe7,0xdc,0x31,0x91,0xeb,0x36,0x73,0x6e,0xb6,0xbf, - 0xaf,0xaa,0xe5,0x1d,0x2a,0xb1,0xe6,0x24,0x65,0x4a, - 0x71,0xd7,0x24,0x73,0xfa,0xab,0x6c,0x3f,0x2d,0x3f, - 0xcf,0x12,0xd7,0x60,0x1d,0xd4,0x4a,0xd4,0x55,0x8d, - 0x1a,0x37,0xec,0x77,0x65,0x89,0xda,0x60,0x97,0x6b, - 0xf8,0x54,0x61,0x11,0xcb,0xbe,0xb4,0x65,0x06,0x23, - 0xb9,0xfd,0xc1,0x05,0x78,0xaf,0x40,0x58,0x34,0x2e, - 0xa9,0x39,0xfa,0x15,0x60,0x00,0x12,0x0c,0x71,0x62, - 0xd6,0x69,0x05,0x82,0x00,0x00,0x00,0x00,0x49,0x45, - 0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/checkbox_checked_svg.cpp b/data/converted/checkbox_checked_svg.cpp new file mode 100644 index 000000000..06848c955 --- /dev/null +++ b/data/converted/checkbox_checked_svg.cpp @@ -0,0 +1,141 @@ +//this file was auto-generated from "checkbox_checked.svg" by res2h + +#include "../Resources.h" + +const size_t checkbox_checked_svg_size = 1337; +const unsigned char checkbox_checked_svg_data[1337] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x39,0x36,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36, + 0x32,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x37, + 0x2e,0x37,0x31,0x2c,0x31,0x2e,0x35,0x63,0x31,0x2e, + 0x35,0x31,0x38,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x35, + 0x32,0x2c,0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e, + 0x37,0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x76, + 0x31,0x33,0x2e,0x34,0x35,0x35,0x63,0x30,0x2c,0x31, + 0x2e,0x35,0x31,0x38,0x2d,0x31,0x2e,0x32,0x33,0x34, + 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37, + 0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x48,0x34, + 0x2e,0x32,0x35,0x32,0x0d,0x0a,0x09,0x63,0x2d,0x31, + 0x2e,0x35,0x31,0x38,0x2c,0x30,0x2d,0x32,0x2e,0x37, + 0x35,0x32,0x2d,0x31,0x2e,0x32,0x33,0x34,0x2d,0x32, + 0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37,0x35,0x32, + 0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e,0x35, + 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x32,0x2e,0x37, + 0x33,0x34,0x2c,0x31,0x2e,0x35,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x2c,0x31,0x2e,0x35,0x48,0x31,0x37,0x2e, + 0x37,0x31,0x20,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c, + 0x30,0x48,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x30,0x2c,0x30,0x2c,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35,0x0d,0x0a, + 0x09,0x63,0x30,0x2c,0x32,0x2e,0x33,0x33,0x39,0x2c, + 0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e, + 0x32,0x35,0x32,0x48,0x31,0x37,0x2e,0x37,0x31,0x63, + 0x32,0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e, + 0x32,0x35,0x32,0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c, + 0x34,0x2e,0x32,0x35,0x32,0x2d,0x34,0x2e,0x32,0x35, + 0x32,0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x32,0x31, + 0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e,0x39,0x31,0x34, + 0x2c,0x32,0x30,0x2e,0x30,0x34,0x39,0x2c,0x30,0x2c, + 0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x4c,0x31,0x37, + 0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x72,0x65,0x63,0x74,0x20,0x78,0x3d,0x22,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x22,0x20,0x79,0x3d,0x22,0x31, + 0x2e,0x30,0x37,0x39,0x22,0x20,0x74,0x72,0x61,0x6e, + 0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74, + 0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37,0x31, + 0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d,0x30, + 0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37,0x30, + 0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x38,0x30,0x31, + 0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29,0x22, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x39,0x2e,0x38, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x0d,0x0a,0x09,0x09,0x09,0x3c,0x72,0x65,0x63,0x74, + 0x20,0x78,0x3d,0x22,0x31,0x30,0x2e,0x32,0x33,0x32, + 0x22,0x20,0x79,0x3d,0x22,0x31,0x2e,0x30,0x37,0x39, + 0x22,0x20,0x74,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72, + 0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28, + 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37, + 0x30,0x37,0x31,0x20,0x2d,0x30,0x2e,0x37,0x30,0x37, + 0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x31, + 0x30,0x2e,0x39,0x38,0x30,0x31,0x20,0x2d,0x34,0x2e, + 0x35,0x34,0x39,0x34,0x29,0x22,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, + 0x2e,0x35,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74, + 0x3d,0x22,0x31,0x39,0x2e,0x38,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x0d,0x0a,0x09,0x09, + 0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x78,0x3d,0x22, + 0x31,0x2e,0x30,0x38,0x32,0x22,0x20,0x79,0x3d,0x22, + 0x31,0x30,0x2e,0x32,0x33,0x22,0x20,0x74,0x72,0x61, + 0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61, + 0x74,0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37, + 0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d, + 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37, + 0x30,0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x37,0x39, + 0x33,0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x31,0x39,0x2e,0x38,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x2e, + 0x35,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/checkbox_unchecked_png.cpp b/data/converted/checkbox_unchecked_png.cpp deleted file mode 100644 index 16e2a3b06..000000000 --- a/data/converted/checkbox_unchecked_png.cpp +++ /dev/null @@ -1,121 +0,0 @@ -//this file was auto-generated from "checkbox_unchecked.png" by res2h - -#include "../Resources.h" - -const size_t checkbox_unchecked_png_size = 1131; -const unsigned char checkbox_unchecked_png_data[1131] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, - 0x00,0x00,0x00,0x18,0x08,0x06,0x00,0x00,0x00,0xe0, - 0x77,0x3d,0xf8,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, - 0x44,0x43,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, - 0x44,0x44,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, - 0x44,0x41,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x30,0x31,0x33,0x32,0x33,0x39, - 0x44,0x42,0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0xc7,0x8f,0x1f,0x43,0x00,0x00,0x00,0xdd, - 0x49,0x44,0x41,0x54,0x78,0xda,0xec,0x95,0x31,0x0a, - 0xc2,0x40,0x14,0x44,0x77,0x37,0xdb,0x7b,0x00,0xbd, - 0x81,0x76,0x5a,0x28,0x58,0x0a,0x1e,0x40,0xb4,0xd3, - 0x33,0xd8,0xa5,0x0b,0xea,0x0d,0xc4,0x1b,0x98,0x4a, - 0xf1,0x18,0x82,0x16,0x5a,0x0a,0x39,0x80,0x5a,0x9b, - 0x03,0x84,0x38,0x1f,0x46,0x49,0x9d,0xac,0x60,0xb1, - 0x03,0x2f,0x61,0x21,0xbc,0xc9,0x27,0x90,0xaf,0xc3, - 0x30,0x54,0x48,0x0d,0x2c,0xc0,0x08,0x34,0x80,0x56, - 0xe5,0x92,0x83,0x07,0x38,0x80,0x25,0x78,0x59,0xca, - 0x8f,0xa0,0xa5,0xaa,0x47,0xf3,0x05,0xe7,0x60,0x00, - 0xfa,0x06,0x97,0x88,0xf2,0x04,0xf4,0x80,0xe5,0x83, - 0x65,0xb0,0x74,0x24,0x74,0x46,0x52,0x30,0x66,0xfb, - 0x0c,0x9c,0x41,0x56,0x61,0x82,0x8c,0x8e,0x29,0xcf, - 0x13,0xc3,0x91,0x24,0x17,0xe5,0x2e,0x57,0xde,0xeb, - 0xa6,0xf0,0x41,0x73,0x87,0x05,0x1f,0x97,0x36,0xea, - 0xc7,0xf1,0x05,0xbe,0xc0,0x17,0xf8,0x82,0x7f,0x29, - 0xc8,0x0b,0xdb,0xc8,0x55,0xbe,0x7f,0x68,0xc3,0x1d, - 0x2a,0xe9,0x38,0x2c,0x68,0xf3,0xfe,0x94,0x82,0x3d, - 0x0f,0x5b,0xd0,0x05,0x41,0x05,0x71,0x40,0x47,0xcc, - 0xf3,0x4e,0x76,0xe8,0x0a,0x0c,0x41,0x13,0x9c,0x1c, - 0x4e,0x71,0x13,0xb7,0x4c,0x90,0xca,0xf6,0x07,0x6b, - 0x70,0x77,0x20,0x16,0xc7,0x86,0xce,0xf4,0x2d,0xc0, - 0x00,0xa5,0x0f,0x24,0x89,0xc3,0x06,0x4f,0xc8,0x00, - 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, - 0x82 -}; diff --git a/data/converted/checkbox_unchecked_svg.cpp b/data/converted/checkbox_unchecked_svg.cpp new file mode 100644 index 000000000..a800cb782 --- /dev/null +++ b/data/converted/checkbox_unchecked_svg.cpp @@ -0,0 +1,93 @@ +//this file was auto-generated from "checkbox_unchecked.svg" by res2h + +#include "../Resources.h" + +const size_t checkbox_unchecked_svg_size = 859; +const unsigned char checkbox_unchecked_svg_data[859] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x39,0x36,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36, + 0x32,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x37, + 0x2e,0x37,0x31,0x2c,0x31,0x2e,0x35,0x63,0x31,0x2e, + 0x35,0x31,0x38,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x35, + 0x32,0x2c,0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e, + 0x37,0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x76, + 0x31,0x33,0x2e,0x34,0x35,0x35,0x63,0x30,0x2c,0x31, + 0x2e,0x35,0x31,0x38,0x2d,0x31,0x2e,0x32,0x33,0x34, + 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37, + 0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x48,0x34, + 0x2e,0x32,0x35,0x32,0x0d,0x0a,0x09,0x63,0x2d,0x31, + 0x2e,0x35,0x31,0x38,0x2c,0x30,0x2d,0x32,0x2e,0x37, + 0x35,0x32,0x2d,0x31,0x2e,0x32,0x33,0x34,0x2d,0x32, + 0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37,0x35,0x32, + 0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e,0x35, + 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x32,0x2e,0x37, + 0x33,0x34,0x2c,0x31,0x2e,0x35,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x2c,0x31,0x2e,0x35,0x48,0x31,0x37,0x2e, + 0x37,0x31,0x20,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c, + 0x30,0x48,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x30,0x2c,0x30,0x2c,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35,0x0d,0x0a, + 0x09,0x63,0x30,0x2c,0x32,0x2e,0x33,0x33,0x39,0x2c, + 0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e, + 0x32,0x35,0x32,0x48,0x31,0x37,0x2e,0x37,0x31,0x63, + 0x32,0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e, + 0x32,0x35,0x32,0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c, + 0x34,0x2e,0x32,0x35,0x32,0x2d,0x34,0x2e,0x32,0x35, + 0x32,0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x32,0x31, + 0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e,0x39,0x31,0x34, + 0x2c,0x32,0x30,0x2e,0x30,0x34,0x39,0x2c,0x30,0x2c, + 0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x4c,0x31,0x37, + 0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/fav_add_svg.cpp b/data/converted/fav_add_svg.cpp new file mode 100644 index 000000000..4bd2a3304 --- /dev/null +++ b/data/converted/fav_add_svg.cpp @@ -0,0 +1,72 @@ +//this file was auto-generated from "fav_add.svg" by res2h + +#include "../Resources.h" + +const size_t fav_add_svg_size = 650; +const unsigned char fav_add_svg_data[650] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, + 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x72,0x65,0x63,0x74,0x20,0x79,0x3d,0x22,0x31,0x30, + 0x2e,0x32,0x35,0x31,0x22,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x31,0x2e,0x35,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74,0x20, + 0x78,0x3d,0x22,0x39,0x2e,0x37,0x35,0x31,0x22,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65,0x69, + 0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30,0x30, + 0x32,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/fav_remove_svg.cpp b/data/converted/fav_remove_svg.cpp new file mode 100644 index 000000000..086ae9e76 --- /dev/null +++ b/data/converted/fav_remove_svg.cpp @@ -0,0 +1,65 @@ +//this file was auto-generated from "fav_remove.svg" by res2h + +#include "../Resources.h" + +const size_t fav_remove_svg_size = 576; +const unsigned char fav_remove_svg_data[576] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, + 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x72,0x65,0x63,0x74,0x20,0x79,0x3d,0x22,0x31,0x30, + 0x2e,0x32,0x35,0x31,0x22,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x31,0x2e,0x35,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_a_png.cpp b/data/converted/help_a_png.cpp deleted file mode 100644 index d62cbae87..000000000 --- a/data/converted/help_a_png.cpp +++ /dev/null @@ -1,161 +0,0 @@ -//this file was auto-generated from "a.png" by res2h - -#include "../Resources.h" - -const size_t help_a_png_size = 1534; -const unsigned char help_a_png_data[1534] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, - 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x36,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x37,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x34,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x35,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x86,0x06,0x19,0x6c,0x00,0x00,0x02,0x70, - 0x49,0x44,0x41,0x54,0x78,0xda,0xbc,0x97,0x4f,0x48, - 0x14,0x61,0x18,0xc6,0x77,0x47,0xbb,0xb8,0x42,0x28, - 0xb1,0x5e,0x63,0x83,0x52,0xf3,0x12,0xe1,0x41,0x2d, - 0x22,0xf6,0x96,0xd5,0xae,0xa1,0x96,0x87,0x2e,0x82, - 0xe6,0x21,0xba,0x04,0xad,0x27,0xaf,0x52,0xc7,0xa0, - 0x43,0xb5,0xd0,0x2d,0xb4,0xd4,0xa8,0xf4,0x50,0x87, - 0x54,0xd4,0x28,0xc2,0x08,0x42,0x0b,0x8d,0xa8,0x8b, - 0x18,0x81,0xf8,0x27,0x02,0xd1,0xb4,0xe7,0x85,0x67, - 0xe0,0x63,0xd8,0x9d,0xf9,0xde,0x71,0xd7,0x07,0x7e, - 0xf8,0xb9,0x33,0xf3,0x3e,0x33,0xdf,0x7c,0xdf,0xfb, - 0xbe,0x13,0xcd,0x64,0x32,0x11,0x4b,0xd5,0x81,0x66, - 0x70,0x0a,0xd4,0x82,0x2a,0x10,0x03,0x7f,0xc1,0x32, - 0xf8,0x0a,0xa6,0xc0,0x18,0xf8,0x6c,0x13,0xb0,0x34, - 0xe0,0x78,0x14,0xb4,0x80,0x5e,0x50,0x9f,0xe7,0x9c, - 0x32,0x90,0x20,0xe7,0x40,0x3f,0xf8,0x00,0xee,0x80, - 0x61,0xb0,0x9b,0x2f,0xb8,0xe3,0x63,0x5c,0x0d,0x26, - 0x19,0xa0,0x3e,0xa2,0x93,0x9c,0xff,0x94,0x33,0x51, - 0xad,0x35,0x6f,0xe3,0xdd,0x9f,0x8e,0xec,0x4d,0x4d, - 0x60,0x16,0x5c,0xb1,0x35,0xef,0x02,0x03,0xa0,0x3c, - 0x52,0x18,0xc9,0x6b,0x79,0x0c,0xae,0x07,0x99,0x5f, - 0x06,0xf7,0x03,0x5e,0x47,0x18,0xc9,0xda,0xb9,0x0b, - 0x3a,0xf2,0x99,0x1f,0x05,0x59,0x9e,0x58,0x0c,0x49, - 0xdc,0x87,0xa0,0xc6,0x6b,0x2e,0x07,0x1e,0x14,0x70, - 0xaa,0xf3,0x29,0x46,0x9f,0xa8,0x69,0x9e,0x02,0x67, - 0x94,0x81,0x64,0x5d,0x5c,0x23,0xe3,0x8a,0xeb,0x24, - 0x4f,0x5c,0x32,0xf7,0xf9,0xad,0x10,0x4f,0xd1,0x07, - 0x16,0x39,0x96,0x24,0x73,0x56,0x71,0xad,0x64,0xb6, - 0x61,0x87,0xfb,0xb0,0x41,0x69,0x3c,0x6b,0x18,0x8b, - 0x5e,0x81,0x55,0x65,0x1e,0x38,0x2e,0xe6,0x17,0x42, - 0x3c,0xf5,0x20,0xff,0x1e,0x02,0x25,0x60,0x13,0x3c, - 0x53,0xc6,0x48,0x3b,0x7c,0x07,0x1a,0x49,0xba,0x7c, - 0xc2,0x71,0xbb,0x91,0x88,0x06,0x94,0x71,0x1a,0x1c, - 0x73,0xe9,0x5b,0xea,0x2d,0xf8,0xc9,0xb1,0xe4,0xfd, - 0x34,0xc7,0x6f,0xc0,0x6f,0x45,0x9c,0x1a,0x31,0x8f, - 0x87,0x9c,0xf2,0x0a,0xee,0x90,0x14,0xff,0xdf,0x06, - 0x43,0x8a,0x38,0x71,0x31,0x3f,0xa8,0xb8,0xe0,0x1f, - 0x0b,0x86,0xe8,0x3c,0x38,0x00,0x0e,0x83,0x13,0x9e, - 0x1b,0xb3,0x51,0xb9,0x98,0xaf,0x29,0x2e,0x98,0xe0, - 0xb6,0x72,0x57,0xec,0x77,0xd2,0xc8,0xdf,0xa4,0x8a, - 0x2d,0x59,0xc6,0xfa,0xe3,0x18,0xc1,0x6c,0x13,0x8b, - 0xab,0x1b,0xe0,0x08,0xb9,0xc7,0xdf,0x76,0x8c,0x99, - 0x09,0xd2,0x2f,0x87,0x1d,0x88,0x8d,0xb6,0xc0,0x88, - 0xf2,0x06,0xfd,0xf4,0xc5,0xe1,0x54,0xd9,0xe8,0x35, - 0x58,0xe1,0xf8,0x11,0xb7,0x9c,0xc9,0x4d,0x1e,0x7b, - 0x0f,0x7e,0x58,0xc4,0x9b,0x12,0xf3,0x97,0xca,0x29, - 0x97,0x94,0x7c,0x31,0xc7,0xf1,0x16,0x23,0x0f,0xd8, - 0x2c,0xbc,0x51,0x31,0x5f,0xe0,0xde,0xf5,0xd3,0x36, - 0x9b,0xc2,0x04,0x8b,0x42,0x65,0xae,0xa4,0xc1,0x55, - 0x9f,0xe0,0xd3,0xfb,0xe9,0x1d,0x98,0x77,0x0b,0x4b, - 0x7f,0xc0,0x0c,0xc8,0x79,0x9f,0x02,0x02,0xca,0x83, - 0x7c,0xb4,0x9c,0xc5,0xdb,0x66,0x49,0x1d,0x65,0x86, - 0xda,0x0f,0x49,0x53,0xfa,0xdc,0xdb,0xc9,0x48,0x5d, - 0x5e,0x2f,0xb2,0xf1,0x06,0xe8,0x76,0xdb,0x69,0xd3, - 0xfc,0x1b,0xb8,0xca,0x2c,0x56,0x0c,0x49,0xdc,0x4e, - 0xae,0xb1,0x9c,0x0d,0xe4,0x0b,0xd0,0xe3,0xd7,0xe8, - 0xef,0xc1,0xb8,0xc7,0x9b,0xfb,0x73,0x75,0xa9,0xd2, - 0x44,0xb6,0x16,0xf0,0x15,0xac,0xb3,0xf4,0x66,0x6d, - 0x3f,0x1a,0x24,0x93,0x9d,0x2c,0xc0,0x22,0x1c,0x67, - 0x9c,0x11,0xed,0xe7,0x92,0xac,0x81,0x24,0x3b,0x9d, - 0x69,0xa5,0xe9,0x0c,0xeb,0x7c,0x92,0x71,0x42,0x7d, - 0x28,0xba,0xdb,0x50,0x38,0xe6,0xf9,0x4a,0x8d,0xb3, - 0x1c,0xaf,0xb1,0x89,0x98,0xa3,0xe9,0x98,0x6d,0xbd, - 0xf8,0x2f,0xc0,0x00,0x7e,0x7d,0x81,0xa8,0x66,0x52, - 0x34,0x4b,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_b_png.cpp b/data/converted/help_b_png.cpp deleted file mode 100644 index 9a1b2a59b..000000000 --- a/data/converted/help_b_png.cpp +++ /dev/null @@ -1,160 +0,0 @@ -//this file was auto-generated from "b.png" by res2h - -#include "../Resources.h" - -const size_t help_b_png_size = 1522; -const unsigned char help_b_png_data[1522] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, - 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, - 0x37,0x31,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, - 0x37,0x32,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, - 0x36,0x46,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, - 0x37,0x30,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x3b,0xe4,0xb0,0xf3,0x00,0x00,0x02,0x64, - 0x49,0x44,0x41,0x54,0x78,0xda,0xbc,0x97,0x4d,0x48, - 0x14,0x61,0x18,0xc7,0x67,0x87,0x3d,0x88,0x2b,0x48, - 0x97,0x15,0xa1,0x43,0x69,0xea,0x6e,0x79,0xb3,0xa5, - 0xb6,0x0f,0x3a,0x04,0x1d,0x4c,0x31,0xb3,0xfc,0x02, - 0x2f,0x42,0x29,0xe1,0xc1,0x4b,0x6e,0xc7,0x20,0x41, - 0x0a,0x0f,0xe1,0x49,0xd3,0x83,0xa7,0x14,0x52,0x41, - 0xdb,0x3d,0xa6,0xc8,0x6e,0x22,0x88,0x20,0xe4,0x47, - 0x84,0x37,0x41,0x8c,0x28,0x2d,0x45,0xbb,0x48,0xfe, - 0x1f,0x78,0x06,0x5e,0x86,0x99,0x9d,0x67,0x66,0x67, - 0xfb,0xc3,0xef,0xb0,0x3b,0xf3,0x3e,0xff,0x77,0xde, - 0x8f,0xe7,0x79,0xdf,0x40,0x22,0x91,0xd0,0x84,0xaa, - 0x06,0xf7,0xc1,0x2d,0x70,0x19,0x94,0x80,0x10,0x38, - 0x06,0x7b,0xe0,0x2b,0x48,0x83,0x14,0xf8,0x22,0x09, - 0x18,0x74,0x78,0x1e,0x00,0x8d,0xe0,0x05,0x88,0xd9, - 0xbc,0x53,0x08,0xca,0x98,0x5a,0x30,0x00,0x56,0xc0, - 0x1b,0x30,0x0d,0xfe,0xd9,0x05,0xd7,0xb3,0x18,0x47, - 0xc0,0x22,0x07,0x88,0x69,0xee,0x44,0xef,0x7f,0xe0, - 0x91,0x88,0xb8,0x35,0x7f,0xcc,0xbd,0xbf,0xad,0xe5, - 0xa6,0x9b,0x60,0x15,0xb4,0x4a,0xcd,0x9f,0x80,0x49, - 0x50,0xa4,0xf9,0x23,0x9a,0x96,0xf7,0xa0,0xc7,0xc9, - 0xbc,0x05,0x8c,0x38,0x4c,0x87,0x17,0xd1,0xda,0x19, - 0x02,0x6d,0x76,0xe6,0x95,0x60,0x8c,0x5f,0xcc,0x87, - 0x28,0xee,0x28,0x88,0x9a,0xcd,0xe9,0xc1,0x3b,0x1f, - 0x87,0xda,0x4e,0x21,0xf6,0x09,0xa8,0x5b,0xad,0x01, - 0xdc,0x11,0x34,0xee,0x05,0x27,0x16,0xdb,0xb5,0x82, - 0x63,0x5c,0x14,0xc4,0xa0,0x3c,0xf1,0x90,0x76,0x91, - 0x61,0xde,0x27,0xec,0xf9,0x38,0xf8,0x6d,0xf3,0xec, - 0x39,0xe7,0x83,0x57,0x82,0x38,0x09,0xc3,0x9c,0xf6, - 0x61,0xdc,0xe5,0xf0,0x5d,0x00,0xdd,0x9c,0x40,0x76, - 0xc0,0x04,0xd8,0x07,0xfd,0xe0,0x1a,0xa8,0x13,0xe4, - 0x81,0x2b,0x64,0x5e,0xef,0x61,0xee,0xce,0x73,0xef, - 0x0d,0xb5,0xf3,0x70,0x92,0x3e,0x0a,0xcc,0x49,0x0f, - 0x74,0xa5,0x51,0x2e,0xaa,0xf0,0xd0,0x26,0xae,0xab, - 0x4b,0xdf,0xa3,0x7e,0x82,0x97,0xca,0xef,0x26,0x61, - 0xbb,0x28,0x0d,0x7b,0xd8,0x83,0x61,0xc6,0x22,0x1f, - 0x14,0x80,0xb7,0xe0,0x9e,0x30,0x46,0x98,0xbe,0xbc, - 0xd8,0x83,0x39,0x75,0xfa,0x1c,0x63,0xb4,0xff,0xcb, - 0x59,0x6c,0x5d,0x18,0xa3,0x48,0xcf,0xb2,0x75,0xb2, - 0xe9,0x3a,0xf8,0xc5,0x1c,0x70,0x2d,0xa7,0x11,0xdc, - 0x34,0xa7,0xd0,0x2c,0x3a,0xd2,0xf9,0x20,0x90,0xab, - 0xaa,0x94,0x5d,0x43,0x5f,0xbe,0x2b,0x68,0xf3,0x5d, - 0xe7,0x5e,0xfb,0xa1,0x3f,0xa6,0x3c,0xee,0xa4,0xad, - 0x20,0x17,0xfc,0x06,0x97,0x46,0x47,0x5c,0xa7,0x35, - 0x4e,0xb7,0x9f,0xc0,0x0c,0xff,0x2e,0x07,0xa5,0x82, - 0x18,0xe9,0x20,0x27,0x85,0x41,0x97,0xe6,0x6b,0xe0, - 0xaa,0xc5,0xff,0xb4,0xe2,0x87,0x85,0x31,0x92,0x64, - 0xfe,0x0d,0x2c,0x81,0x1b,0xc2,0xb4,0x7a,0x68,0xb5, - 0x6d,0x38,0x45,0x3f,0x03,0x97,0x04,0x71,0x96,0x69, - 0x71,0x1a,0x85,0x65,0x80,0x47,0x40,0xf2,0xc5,0x7e, - 0xe8,0xb5,0x5a,0xcf,0x93,0x60,0x5e,0xfb,0x3f,0xa2, - 0x43,0xe9,0xac,0xf9,0x24,0xd3,0x65,0x5a,0xb1,0xf9, - 0x10,0x4d,0xd9,0x53,0xe3,0x38,0xad,0x9a,0x6f,0x83, - 0x0e,0x70,0x9a,0x27,0x63,0x8a,0xdb,0xc9,0x6b,0xcc, - 0xf2,0x00,0x39,0xa7,0xd4,0x69,0xbf,0x8d,0x29,0xee, - 0x94,0xd3,0xd1,0x99,0x0e,0x91,0x8f,0x7c,0x9c,0x02, - 0x8a,0xd3,0xcc,0x71,0x45,0x97,0x06,0x4a,0x18,0x35, - 0x3e,0x2c,0xc2,0x05,0x8e,0x33,0xe3,0xf6,0xba,0x44, - 0x6b,0xe0,0x2e,0xe7,0xec,0x8c,0x4b,0xd3,0xcf,0x74, - 0x52,0xe1,0xf6,0xdb,0x5e,0x2f,0x8a,0xc6,0x36,0x4c, - 0x72,0xf1,0x50,0x6f,0xa9,0x61,0x2e,0xa7,0x54,0x15, - 0x7f,0x80,0x0d,0x36,0x4d,0x49,0xeb,0xc5,0x99,0x00, - 0x03,0x00,0x8d,0x70,0x73,0x99,0xca,0x99,0x33,0x28, - 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, - 0x60,0x82 -}; diff --git a/data/converted/help_button_a_svg.cpp b/data/converted/help_button_a_svg.cpp new file mode 100644 index 000000000..50d500412 --- /dev/null +++ b/data/converted/help_button_a_svg.cpp @@ -0,0 +1,88 @@ +//this file was auto-generated from "button_a.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_a_svg_size = 801; +const unsigned char help_button_a_svg_data[801] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, + 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, + 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, + 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, + 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, + 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x35,0x2e,0x38,0x38,0x33,0x2c,0x31,0x31,0x2e,0x35, + 0x35,0x6c,0x2d,0x31,0x2e,0x36,0x37,0x39,0x2c,0x35, + 0x2e,0x33,0x30,0x37,0x68,0x33,0x2e,0x34,0x30,0x35, + 0x6c,0x2d,0x31,0x2e,0x36,0x37,0x2d,0x35,0x2e,0x33, + 0x30,0x37,0x48,0x31,0x35,0x2e,0x38,0x38,0x33,0x7a, + 0x20,0x4d,0x31,0x35,0x2e,0x35,0x2c,0x30,0x43,0x36, + 0x2e,0x39,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2c,0x36, + 0x2e,0x39,0x34,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35, + 0x0d,0x0a,0x09,0x09,0x09,0x73,0x36,0x2e,0x39,0x33, + 0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31,0x2c,0x31, + 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, + 0x63,0x38,0x2e,0x35,0x36,0x2c,0x30,0x2c,0x31,0x35, + 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x34,0x31,0x2c,0x31, + 0x35,0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x31, + 0x53,0x32,0x34,0x2e,0x30,0x36,0x2c,0x30,0x2c,0x31, + 0x35,0x2e,0x35,0x2c,0x30,0x7a,0x20,0x4d,0x31,0x39, + 0x2e,0x31,0x39,0x35,0x2c,0x32,0x31,0x2e,0x38,0x39, + 0x34,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38,0x2d,0x32, + 0x2e,0x39,0x31,0x32,0x68,0x2d,0x34,0x2e,0x37,0x34, + 0x31,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38,0x2c,0x32, + 0x2e,0x39,0x31,0x32,0x48,0x39,0x2e,0x38,0x38,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x6c,0x34,0x2e,0x36,0x34, + 0x38,0x2d,0x31,0x33,0x2e,0x35,0x30,0x37,0x68,0x32, + 0x2e,0x37,0x37,0x33,0x6c,0x34,0x2e,0x36,0x32,0x39, + 0x2c,0x31,0x33,0x2e,0x35,0x30,0x37,0x48,0x31,0x39, + 0x2e,0x31,0x39,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, + 0x0a +}; diff --git a/data/converted/help_button_b_svg.cpp b/data/converted/help_button_b_svg.cpp new file mode 100644 index 000000000..0c91c6a21 --- /dev/null +++ b/data/converted/help_button_b_svg.cpp @@ -0,0 +1,142 @@ +//this file was auto-generated from "button_b.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_b_svg_size = 1342; +const unsigned char help_button_b_svg_data[1342] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, + 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, + 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, + 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, + 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, + 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x36,0x2e,0x34,0x34,0x2c,0x31,0x35,0x2e,0x39,0x32, + 0x68,0x2d,0x32,0x2e,0x37,0x76,0x33,0x2e,0x38,0x38, + 0x37,0x68,0x32,0x2e,0x34,0x39,0x36,0x63,0x30,0x2e, + 0x37,0x31,0x38,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x36, + 0x36,0x2d,0x30,0x2e,0x31,0x35,0x35,0x2c,0x31,0x2e, + 0x36,0x34,0x33,0x2d,0x30,0x2e,0x34,0x36,0x37,0x73, + 0x30,0x2e,0x35,0x36,0x35,0x2d,0x30,0x2e,0x37,0x37, + 0x32,0x2c,0x30,0x2e,0x35,0x36,0x35,0x2d,0x31,0x2e, + 0x33,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, + 0x2d,0x30,0x2e,0x36,0x36,0x2d,0x30,0x2e,0x31,0x36, + 0x31,0x2d,0x31,0x2e,0x31,0x36,0x34,0x2d,0x30,0x2e, + 0x34,0x38,0x32,0x2d,0x31,0x2e,0x35,0x31,0x34,0x43, + 0x31,0x37,0x2e,0x36,0x34,0x2c,0x31,0x36,0x2e,0x30, + 0x39,0x34,0x2c,0x31,0x37,0x2e,0x31,0x33,0x32,0x2c, + 0x31,0x35,0x2e,0x39,0x32,0x2c,0x31,0x36,0x2e,0x34, + 0x34,0x2c,0x31,0x35,0x2e,0x39,0x32,0x7a,0x20,0x4d, + 0x31,0x37,0x2e,0x33,0x35,0x39,0x2c,0x31,0x33,0x2e, + 0x36,0x30,0x31,0x63,0x30,0x2e,0x33,0x38,0x39,0x2d, + 0x30,0x2e,0x32,0x39,0x37,0x2c,0x30,0x2e,0x35,0x38, + 0x34,0x2d,0x30,0x2e,0x37,0x33,0x2c,0x30,0x2e,0x35, + 0x38,0x34,0x2d,0x31,0x2e,0x32,0x39,0x39,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x32, + 0x35,0x2d,0x30,0x2e,0x31,0x39,0x36,0x2d,0x31,0x2e, + 0x30,0x38,0x36,0x2d,0x30,0x2e,0x35,0x38,0x39,0x2d, + 0x31,0x2e,0x33,0x38,0x33,0x63,0x2d,0x30,0x2e,0x33, + 0x39,0x34,0x2d,0x30,0x2e,0x32,0x39,0x37,0x2d,0x30, + 0x2e,0x39,0x37,0x39,0x2d,0x30,0x2e,0x34,0x34,0x35, + 0x2d,0x31,0x2e,0x37,0x35,0x39,0x2d,0x30,0x2e,0x34, + 0x34,0x35,0x48,0x31,0x33,0x2e,0x37,0x34,0x76,0x33, + 0x2e,0x35,0x37,0x32,0x68,0x31,0x2e,0x39,0x34,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x43,0x31,0x36,0x2e,0x34, + 0x31,0x32,0x2c,0x31,0x34,0x2e,0x30,0x34,0x36,0x2c, + 0x31,0x36,0x2e,0x39,0x36,0x38,0x2c,0x31,0x33,0x2e, + 0x38,0x39,0x36,0x2c,0x31,0x37,0x2e,0x33,0x35,0x39, + 0x2c,0x31,0x33,0x2e,0x36,0x30,0x31,0x7a,0x20,0x4d, + 0x31,0x35,0x2e,0x35,0x2c,0x30,0x43,0x36,0x2e,0x39, + 0x33,0x39,0x2c,0x30,0x2c,0x30,0x2c,0x36,0x2e,0x39, + 0x33,0x39,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x63, + 0x30,0x2c,0x38,0x2e,0x35,0x36,0x32,0x2c,0x36,0x2e, + 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, + 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, + 0x30,0x31,0x53,0x33,0x31,0x2c,0x32,0x34,0x2e,0x30, + 0x36,0x32,0x2c,0x33,0x31,0x2c,0x31,0x35,0x2e,0x35, + 0x0d,0x0a,0x09,0x09,0x09,0x43,0x33,0x31,0x2c,0x36, + 0x2e,0x39,0x33,0x39,0x2c,0x32,0x34,0x2e,0x30,0x36, + 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x30,0x7a, + 0x20,0x4d,0x31,0x39,0x2e,0x38,0x36,0x33,0x2c,0x32, + 0x30,0x2e,0x38,0x39,0x37,0x63,0x2d,0x30,0x2e,0x38, + 0x35,0x34,0x2c,0x30,0x2e,0x36,0x36,0x34,0x2d,0x32, + 0x2e,0x30,0x36,0x33,0x2c,0x30,0x2e,0x39,0x39,0x37, + 0x2d,0x33,0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x39, + 0x39,0x37,0x68,0x2d,0x35,0x2e,0x32,0x30,0x35,0x56, + 0x38,0x2e,0x33,0x38,0x37,0x68,0x34,0x2e,0x35,0x36, + 0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x35, + 0x39,0x2c,0x30,0x2c,0x32,0x2e,0x38,0x33,0x2c,0x30, + 0x2e,0x33,0x30,0x39,0x2c,0x33,0x2e,0x37,0x32,0x31, + 0x2c,0x30,0x2e,0x39,0x32,0x38,0x63,0x30,0x2e,0x38, + 0x39,0x31,0x2c,0x30,0x2e,0x36,0x31,0x38,0x2c,0x31, + 0x2e,0x33,0x33,0x36,0x2c,0x31,0x2e,0x35,0x34,0x33, + 0x2c,0x31,0x2e,0x33,0x33,0x36,0x2c,0x32,0x2e,0x37, + 0x37,0x33,0x63,0x30,0x2c,0x30,0x2e,0x36,0x32,0x35, + 0x2d,0x30,0x2e,0x31,0x36,0x36,0x2c,0x31,0x2e,0x31, + 0x38,0x33,0x2d,0x30,0x2e,0x34,0x39,0x36,0x2c,0x31, + 0x2e,0x36,0x37,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x33,0x31,0x2c,0x30,0x2e,0x34, + 0x39,0x31,0x2d,0x30,0x2e,0x38,0x31,0x33,0x2c,0x30, + 0x2e,0x38,0x36,0x31,0x2d,0x31,0x2e,0x34,0x34,0x33, + 0x2c,0x31,0x2e,0x31,0x30,0x38,0x63,0x30,0x2e,0x38, + 0x31,0x31,0x2c,0x30,0x2e,0x31,0x37,0x33,0x2c,0x31, + 0x2e,0x34,0x31,0x38,0x2c,0x30,0x2e,0x35,0x34,0x34, + 0x2c,0x31,0x2e,0x38,0x32,0x34,0x2c,0x31,0x2e,0x31, + 0x31,0x33,0x63,0x30,0x2e,0x34,0x30,0x34,0x2c,0x30, + 0x2e,0x35,0x36,0x39,0x2c,0x30,0x2e,0x36,0x30,0x37, + 0x2c,0x31,0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e,0x36, + 0x30,0x37,0x2c,0x31,0x2e,0x39,0x37,0x37,0x0d,0x0a, + 0x09,0x09,0x09,0x43,0x32,0x31,0x2e,0x31,0x34,0x34, + 0x2c,0x31,0x39,0x2e,0x32,0x35,0x33,0x2c,0x32,0x30, + 0x2e,0x37,0x31,0x36,0x2c,0x32,0x30,0x2e,0x32,0x33, + 0x32,0x2c,0x31,0x39,0x2e,0x38,0x36,0x33,0x2c,0x32, + 0x30,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0d,0x0a +}; diff --git a/data/converted/help_button_l_svg.cpp b/data/converted/help_button_l_svg.cpp new file mode 100644 index 000000000..a0af35ed8 --- /dev/null +++ b/data/converted/help_button_l_svg.cpp @@ -0,0 +1,109 @@ +//this file was auto-generated from "button_l.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_l_svg_size = 1016; +const unsigned char help_button_l_svg_data[1016] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x38,0x2e,0x32,0x35,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x31,0x37,0x2e,0x30,0x30,0x37,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35,0x36,0x20, + 0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35, + 0x36,0x20,0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x30,0x2e,0x34,0x35,0x2c,0x31,0x2e,0x35, + 0x63,0x33,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x36, + 0x2e,0x33,0x30,0x36,0x2c,0x33,0x2e,0x31,0x33,0x39, + 0x2c,0x36,0x2e,0x33,0x30,0x36,0x2c,0x36,0x2e,0x39, + 0x39,0x37,0x63,0x30,0x2c,0x33,0x2e,0x38,0x36,0x36, + 0x2d,0x32,0x2e,0x38,0x32,0x39,0x2c,0x37,0x2e,0x30, + 0x31,0x2d,0x36,0x2e,0x33,0x30,0x36,0x2c,0x37,0x2e, + 0x30,0x31,0x48,0x37,0x2e,0x37,0x36,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x2d,0x33,0x2e,0x34,0x35,0x32,0x2d, + 0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e,0x32,0x36,0x2d, + 0x33,0x2e,0x31,0x37,0x35,0x2d,0x36,0x2e,0x32,0x36, + 0x2d,0x37,0x2e,0x30,0x31,0x43,0x31,0x2e,0x35,0x2c, + 0x34,0x2e,0x36,0x36,0x39,0x2c,0x34,0x2e,0x33,0x30, + 0x38,0x2c,0x31,0x2e,0x35,0x33,0x2c,0x37,0x2e,0x37, + 0x34,0x37,0x2c,0x31,0x2e,0x35,0x48,0x33,0x30,0x2e, + 0x34,0x35,0x20,0x4d,0x33,0x30,0x2e,0x34,0x35,0x2c, + 0x30,0x43,0x33,0x30,0x2e,0x34,0x32,0x38,0x2c,0x30, + 0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x30,0x2c,0x37, + 0x2e,0x37,0x34,0x37,0x2c,0x30,0x0d,0x0a,0x09,0x09, + 0x09,0x43,0x33,0x2e,0x34,0x36,0x36,0x2c,0x30,0x2e, + 0x30,0x33,0x38,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x31, + 0x39,0x2c,0x30,0x2c,0x38,0x2e,0x34,0x39,0x37,0x73, + 0x33,0x2e,0x34,0x36,0x36,0x2c,0x38,0x2e,0x34,0x37, + 0x33,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x38,0x2e, + 0x35,0x31,0x63,0x30,0x2c,0x30,0x2c,0x32,0x32,0x2e, + 0x36,0x38,0x31,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x37, + 0x30,0x33,0x2c,0x30,0x63,0x34,0x2e,0x33,0x31,0x32, + 0x2c,0x30,0x2c,0x37,0x2e,0x38,0x30,0x36,0x2d,0x33, + 0x2e,0x38,0x31,0x31,0x2c,0x37,0x2e,0x38,0x30,0x36, + 0x2d,0x38,0x2e,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x43,0x33,0x38,0x2e,0x32,0x35,0x36,0x2c,0x33,0x2e, + 0x37,0x39,0x36,0x2c,0x33,0x34,0x2e,0x37,0x36,0x32, + 0x2c,0x30,0x2c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30, + 0x4c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x09,0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x70,0x6f,0x69,0x6e, + 0x74,0x73,0x3d,0x22,0x31,0x36,0x2e,0x35,0x31,0x39, + 0x2c,0x31,0x32,0x2e,0x31,0x38,0x36,0x20,0x32,0x31, + 0x2e,0x37,0x33,0x38,0x2c,0x31,0x32,0x2e,0x31,0x38, + 0x36,0x20,0x32,0x31,0x2e,0x37,0x33,0x38,0x2c,0x31, + 0x30,0x2e,0x38,0x32,0x33,0x20,0x31,0x38,0x2e,0x31, + 0x34,0x31,0x2c,0x31,0x30,0x2e,0x38,0x32,0x33,0x20, + 0x31,0x38,0x2e,0x31,0x34,0x31,0x2c,0x34,0x2e,0x38, + 0x30,0x37,0x20,0x31,0x36,0x2e,0x35,0x31,0x39,0x2c, + 0x34,0x2e,0x38,0x30,0x37,0x20,0x09,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_button_r_svg.cpp b/data/converted/help_button_r_svg.cpp new file mode 100644 index 000000000..b527b5123 --- /dev/null +++ b/data/converted/help_button_r_svg.cpp @@ -0,0 +1,134 @@ +//this file was auto-generated from "button_r.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_r_svg_size = 1264; +const unsigned char help_button_r_svg_data[1264] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x38,0x2e,0x32,0x35,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x31,0x37,0x2e,0x30,0x30,0x37,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35,0x36,0x20, + 0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35, + 0x36,0x20,0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x33,0x30,0x2e,0x34,0x35,0x2c, + 0x31,0x2e,0x35,0x63,0x33,0x2e,0x34,0x37,0x37,0x2c, + 0x30,0x2c,0x36,0x2e,0x33,0x30,0x36,0x2c,0x33,0x2e, + 0x31,0x33,0x39,0x2c,0x36,0x2e,0x33,0x30,0x36,0x2c, + 0x36,0x2e,0x39,0x39,0x37,0x63,0x30,0x2c,0x33,0x2e, + 0x38,0x36,0x36,0x2d,0x32,0x2e,0x38,0x32,0x39,0x2c, + 0x37,0x2e,0x30,0x31,0x2d,0x36,0x2e,0x33,0x30,0x36, + 0x2c,0x37,0x2e,0x30,0x31,0x48,0x37,0x2e,0x37,0x36, + 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x34,0x35, + 0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e,0x32, + 0x36,0x2d,0x33,0x2e,0x31,0x37,0x35,0x2d,0x36,0x2e, + 0x32,0x36,0x2d,0x37,0x2e,0x30,0x31,0x43,0x31,0x2e, + 0x35,0x2c,0x34,0x2e,0x36,0x36,0x39,0x2c,0x34,0x2e, + 0x33,0x30,0x38,0x2c,0x31,0x2e,0x35,0x33,0x2c,0x37, + 0x2e,0x37,0x34,0x37,0x2c,0x31,0x2e,0x35,0x48,0x33, + 0x30,0x2e,0x34,0x35,0x20,0x4d,0x33,0x30,0x2e,0x34, + 0x35,0x2c,0x30,0x43,0x33,0x30,0x2e,0x34,0x32,0x38, + 0x2c,0x30,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x30, + 0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x30,0x0d,0x0a, + 0x09,0x09,0x43,0x33,0x2e,0x34,0x36,0x36,0x2c,0x30, + 0x2e,0x30,0x33,0x38,0x2c,0x30,0x2c,0x33,0x2e,0x38, + 0x31,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x34,0x39,0x37, + 0x73,0x33,0x2e,0x34,0x36,0x36,0x2c,0x38,0x2e,0x34, + 0x37,0x33,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x38, + 0x2e,0x35,0x31,0x63,0x30,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x36,0x38,0x31,0x2c,0x30,0x2c,0x32,0x32,0x2e, + 0x37,0x30,0x33,0x2c,0x30,0x63,0x34,0x2e,0x33,0x31, + 0x32,0x2c,0x30,0x2c,0x37,0x2e,0x38,0x30,0x36,0x2d, + 0x33,0x2e,0x38,0x31,0x31,0x2c,0x37,0x2e,0x38,0x30, + 0x36,0x2d,0x38,0x2e,0x35,0x31,0x0d,0x0a,0x09,0x09, + 0x43,0x33,0x38,0x2e,0x32,0x35,0x36,0x2c,0x33,0x2e, + 0x37,0x39,0x36,0x2c,0x33,0x34,0x2e,0x37,0x36,0x32, + 0x2c,0x30,0x2c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30, + 0x4c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x37,0x2e,0x35,0x36, + 0x39,0x2c,0x36,0x2e,0x30,0x36,0x37,0x68,0x31,0x2e, + 0x37,0x37,0x39,0x63,0x30,0x2e,0x37,0x32,0x33,0x2c, + 0x30,0x2c,0x31,0x2e,0x31,0x31,0x36,0x2c,0x30,0x2e, + 0x33,0x31,0x31,0x2c,0x31,0x2e,0x31,0x31,0x36,0x2c, + 0x31,0x2e,0x30,0x32,0x34,0x63,0x30,0x2c,0x30,0x2e, + 0x37,0x34,0x37,0x2d,0x30,0x2e,0x33,0x39,0x34,0x2c, + 0x31,0x2e,0x30,0x35,0x38,0x2d,0x31,0x2e,0x31,0x31, + 0x36,0x2c,0x31,0x2e,0x30,0x35,0x38,0x68,0x2d,0x31, + 0x2e,0x37,0x37,0x39,0x56,0x36,0x2e,0x30,0x36,0x37, + 0x7a,0x0d,0x0a,0x09,0x20,0x4d,0x31,0x35,0x2e,0x39, + 0x34,0x39,0x2c,0x31,0x32,0x2e,0x31,0x39,0x34,0x68, + 0x31,0x2e,0x36,0x32,0x31,0x56,0x39,0x2e,0x33,0x30, + 0x37,0x68,0x31,0x2e,0x36,0x32,0x35,0x63,0x30,0x2e, + 0x38,0x31,0x36,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x31, + 0x36,0x2c,0x30,0x2e,0x33,0x34,0x32,0x2c,0x31,0x2e, + 0x32,0x32,0x39,0x2c,0x31,0x2e,0x31,0x31,0x38,0x63, + 0x30,0x2e,0x30,0x38,0x32,0x2c,0x30,0x2e,0x35,0x39, + 0x2c,0x30,0x2e,0x30,0x36,0x32,0x2c,0x31,0x2e,0x33, + 0x30,0x35,0x2c,0x30,0x2e,0x32,0x35,0x38,0x2c,0x31, + 0x2e,0x37,0x37,0x68,0x31,0x2e,0x36,0x32,0x32,0x0d, + 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x32,0x39,0x2d,0x30, + 0x2e,0x34,0x31,0x34,0x2d,0x30,0x2e,0x32,0x38,0x2d, + 0x31,0x2e,0x32,0x38,0x33,0x2d,0x30,0x2e,0x33,0x31, + 0x31,0x2d,0x31,0x2e,0x37,0x34,0x38,0x63,0x2d,0x30, + 0x2e,0x30,0x35,0x32,0x2d,0x30,0x2e,0x37,0x34,0x36, + 0x2d,0x30,0x2e,0x32,0x37,0x38,0x2d,0x31,0x2e,0x35, + 0x32,0x32,0x2d,0x31,0x2e,0x30,0x37,0x33,0x2d,0x31, + 0x2e,0x37,0x32,0x38,0x63,0x30,0x2c,0x30,0x2c,0x31, + 0x2e,0x31,0x36,0x37,0x2d,0x30,0x2e,0x33,0x30,0x32, + 0x2c,0x31,0x2e,0x31,0x36,0x37,0x2d,0x31,0x2e,0x38, + 0x37,0x34,0x0d,0x0a,0x09,0x63,0x30,0x2d,0x31,0x2e, + 0x31,0x31,0x38,0x2d,0x30,0x2e,0x38,0x33,0x36,0x2d, + 0x32,0x2e,0x30,0x33,0x37,0x2d,0x32,0x2e,0x31,0x36, + 0x2d,0x32,0x2e,0x30,0x33,0x37,0x68,0x2d,0x33,0x2e, + 0x39,0x37,0x38,0x56,0x31,0x32,0x2e,0x31,0x39,0x34, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_button_select_svg.cpp b/data/converted/help_button_select_svg.cpp new file mode 100644 index 000000000..1040b9bdd --- /dev/null +++ b/data/converted/help_button_select_svg.cpp @@ -0,0 +1,177 @@ +//this file was auto-generated from "button_select.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_select_svg_size = 1693; +const unsigned char help_button_select_svg_data[1693] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x38,0x2e,0x34,0x34,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x31,0x39,0x2e,0x31,0x33,0x38,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34,0x36,0x20, + 0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34, + 0x36,0x20,0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, + 0x34,0x2e,0x36,0x30,0x31,0x2c,0x31,0x31,0x2e,0x32, + 0x32,0x33,0x48,0x33,0x2e,0x38,0x34,0x35,0x43,0x31, + 0x2e,0x37,0x32,0x32,0x2c,0x31,0x31,0x2e,0x32,0x32, + 0x33,0x2c,0x30,0x2c,0x31,0x32,0x2e,0x39,0x39,0x34, + 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x31,0x38,0x73,0x31, + 0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x38, + 0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39, + 0x35,0x38,0x68,0x33,0x30,0x2e,0x37,0x35,0x36,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x32,0x2e,0x31,0x32, + 0x33,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d, + 0x31,0x2e,0x37,0x37,0x32,0x2c,0x33,0x2e,0x38,0x34, + 0x34,0x2d,0x33,0x2e,0x39,0x35,0x38,0x53,0x33,0x36, + 0x2e,0x37,0x32,0x34,0x2c,0x31,0x31,0x2e,0x32,0x32, + 0x33,0x2c,0x33,0x34,0x2e,0x36,0x30,0x31,0x2c,0x31, + 0x31,0x2e,0x32,0x32,0x33,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x33,0x35,0x2e,0x30,0x32,0x39,0x2c,0x37, + 0x2e,0x36,0x34,0x38,0x68,0x31,0x2e,0x32,0x32,0x34, + 0x56,0x31,0x2e,0x33,0x37,0x35,0x68,0x32,0x2e,0x31, + 0x39,0x33,0x56,0x30,0x2e,0x32,0x30,0x39,0x68,0x2d, + 0x35,0x2e,0x36,0x30,0x39,0x76,0x31,0x2e,0x31,0x36, + 0x36,0x68,0x32,0x2e,0x31,0x39,0x32,0x56,0x37,0x2e, + 0x36,0x34,0x38,0x7a,0x20,0x4d,0x33,0x32,0x2e,0x30, + 0x33,0x33,0x2c,0x32,0x2e,0x39,0x35,0x39,0x0d,0x0a, + 0x09,0x09,0x43,0x33,0x31,0x2e,0x39,0x30,0x31,0x2c, + 0x31,0x2e,0x33,0x35,0x33,0x2c,0x33,0x30,0x2e,0x38, + 0x35,0x35,0x2c,0x30,0x2c,0x32,0x38,0x2e,0x38,0x34, + 0x33,0x2c,0x30,0x63,0x2d,0x32,0x2e,0x32,0x39,0x38, + 0x2c,0x30,0x2d,0x33,0x2e,0x32,0x36,0x34,0x2c,0x31, + 0x2e,0x38,0x33,0x32,0x2d,0x33,0x2e,0x32,0x36,0x34, + 0x2c,0x33,0x2e,0x39,0x32,0x39,0x63,0x30,0x2c,0x32, + 0x2e,0x30,0x39,0x34,0x2c,0x31,0x2e,0x30,0x30,0x38, + 0x2c,0x33,0x2e,0x39,0x32,0x39,0x2c,0x33,0x2e,0x31, + 0x31,0x37,0x2c,0x33,0x2e,0x39,0x32,0x39,0x0d,0x0a, + 0x09,0x09,0x63,0x32,0x2e,0x34,0x30,0x34,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x36,0x34,0x2d,0x31,0x2e,0x35, + 0x37,0x33,0x2c,0x33,0x2e,0x33,0x33,0x36,0x2d,0x33, + 0x2e,0x30,0x35,0x35,0x68,0x2d,0x31,0x2e,0x33,0x32, + 0x35,0x63,0x2d,0x30,0x2e,0x30,0x39,0x39,0x2c,0x30, + 0x2e,0x37,0x38,0x32,0x2d,0x30,0x2e,0x35,0x32,0x34, + 0x2c,0x31,0x2e,0x38,0x39,0x2d,0x31,0x2e,0x38,0x2c, + 0x31,0x2e,0x38,0x39,0x63,0x2d,0x31,0x2e,0x32,0x31, + 0x31,0x2c,0x30,0x2d,0x32,0x2e,0x30,0x35,0x33,0x2d, + 0x31,0x2e,0x30,0x37,0x38,0x2d,0x32,0x2e,0x30,0x35, + 0x33,0x2d,0x32,0x2e,0x36,0x33,0x0d,0x0a,0x09,0x09, + 0x63,0x30,0x2d,0x31,0x2e,0x39,0x33,0x39,0x2c,0x30, + 0x2e,0x38,0x34,0x32,0x2d,0x32,0x2e,0x38,0x39,0x38, + 0x2c,0x31,0x2e,0x39,0x37,0x31,0x2d,0x32,0x2e,0x38, + 0x39,0x38,0x63,0x31,0x2e,0x30,0x33,0x31,0x2c,0x30, + 0x2c,0x31,0x2e,0x37,0x36,0x2c,0x30,0x2e,0x36,0x36, + 0x37,0x2c,0x31,0x2e,0x38,0x38,0x32,0x2c,0x31,0x2e, + 0x37,0x39,0x34,0x48,0x33,0x32,0x2e,0x30,0x33,0x33, + 0x7a,0x20,0x4d,0x31,0x39,0x2e,0x34,0x33,0x37,0x2c, + 0x37,0x2e,0x36,0x34,0x38,0x68,0x35,0x2e,0x31,0x33, + 0x35,0x56,0x36,0x2e,0x34,0x38,0x33,0x68,0x2d,0x33, + 0x2e,0x39,0x31,0x31,0x56,0x34,0x2e,0x34,0x31,0x39, + 0x68,0x33,0x2e,0x36,0x39,0x31,0x56,0x33,0x2e,0x32, + 0x35,0x33,0x0d,0x0a,0x09,0x09,0x68,0x2d,0x33,0x2e, + 0x36,0x39,0x31,0x56,0x31,0x2e,0x33,0x37,0x35,0x68, + 0x33,0x2e,0x38,0x34,0x35,0x56,0x30,0x2e,0x32,0x30, + 0x39,0x68,0x2d,0x35,0x2e,0x30,0x36,0x39,0x56,0x37, + 0x2e,0x36,0x34,0x38,0x7a,0x20,0x4d,0x31,0x33,0x2e, + 0x35,0x37,0x31,0x2c,0x37,0x2e,0x36,0x34,0x38,0x68, + 0x34,0x2e,0x37,0x37,0x35,0x56,0x36,0x2e,0x34,0x32, + 0x32,0x68,0x2d,0x33,0x2e,0x35,0x35,0x56,0x30,0x2e, + 0x32,0x30,0x39,0x68,0x2d,0x31,0x2e,0x32,0x32,0x35, + 0x56,0x37,0x2e,0x36,0x34,0x38,0x7a,0x20,0x4d,0x37, + 0x2e,0x31,0x2c,0x37,0x2e,0x36,0x34,0x38,0x68,0x35, + 0x2e,0x31,0x33,0x36,0x56,0x36,0x2e,0x34,0x38,0x33, + 0x68,0x2d,0x33,0x2e,0x39,0x31,0x56,0x34,0x2e,0x34, + 0x31,0x39,0x0d,0x0a,0x09,0x09,0x68,0x33,0x2e,0x36, + 0x38,0x39,0x56,0x33,0x2e,0x32,0x35,0x33,0x48,0x38, + 0x2e,0x33,0x32,0x36,0x56,0x31,0x2e,0x33,0x37,0x35, + 0x68,0x33,0x2e,0x38,0x34,0x36,0x56,0x30,0x2e,0x32, + 0x30,0x39,0x48,0x37,0x2e,0x31,0x56,0x37,0x2e,0x36, + 0x34,0x38,0x7a,0x20,0x4d,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x32,0x2e,0x33,0x30,0x32,0x63,0x30,0x2c,0x33, + 0x2e,0x30,0x35,0x32,0x2c,0x34,0x2e,0x33,0x30,0x33, + 0x2c,0x31,0x2e,0x34,0x34,0x36,0x2c,0x34,0x2e,0x33, + 0x30,0x33,0x2c,0x33,0x2e,0x32,0x39,0x63,0x30,0x2c, + 0x30,0x2e,0x38,0x31,0x38,0x2d,0x30,0x2e,0x36,0x39, + 0x35,0x2c,0x31,0x2e,0x31,0x30,0x31,0x2d,0x31,0x2e, + 0x34,0x34,0x2c,0x31,0x2e,0x31,0x30,0x31,0x0d,0x0a, + 0x09,0x09,0x63,0x2d,0x31,0x2e,0x30,0x30,0x36,0x2c, + 0x30,0x2d,0x31,0x2e,0x36,0x34,0x34,0x2d,0x30,0x2e, + 0x34,0x37,0x32,0x2d,0x31,0x2e,0x36,0x37,0x37,0x2d, + 0x31,0x2e,0x34,0x35,0x34,0x48,0x30,0x2e,0x31,0x38, + 0x31,0x63,0x30,0x2e,0x30,0x31,0x36,0x2c,0x31,0x2e, + 0x35,0x36,0x34,0x2c,0x30,0x2e,0x38,0x35,0x38,0x2c, + 0x32,0x2e,0x36,0x31,0x39,0x2c,0x32,0x2e,0x39,0x36, + 0x31,0x2c,0x32,0x2e,0x36,0x31,0x39,0x63,0x31,0x2e, + 0x32,0x34,0x33,0x2c,0x30,0x2c,0x32,0x2e,0x38,0x30, + 0x35,0x2d,0x30,0x2e,0x35,0x30,0x31,0x2c,0x32,0x2e, + 0x38,0x30,0x35,0x2d,0x32,0x2e,0x34,0x32,0x0d,0x0a, + 0x09,0x09,0x63,0x30,0x2d,0x33,0x2e,0x31,0x37,0x38, + 0x2d,0x34,0x2e,0x33,0x35,0x32,0x2d,0x31,0x2e,0x35, + 0x30,0x32,0x2d,0x34,0x2e,0x33,0x35,0x32,0x2d,0x33, + 0x2e,0x32,0x35,0x63,0x30,0x2d,0x30,0x2e,0x36,0x39, + 0x39,0x2c,0x30,0x2e,0x35,0x34,0x2d,0x31,0x2e,0x30, + 0x32,0x33,0x2c,0x31,0x2e,0x33,0x35,0x37,0x2d,0x31, + 0x2e,0x30,0x32,0x33,0x63,0x31,0x2e,0x30,0x32,0x33, + 0x2c,0x30,0x2c,0x31,0x2e,0x34,0x33,0x33,0x2c,0x30, + 0x2e,0x36,0x32,0x35,0x2c,0x31,0x2e,0x34,0x37,0x34, + 0x2c,0x31,0x2e,0x32,0x68,0x31,0x2e,0x33,0x32,0x35, + 0x43,0x35,0x2e,0x35,0x39,0x36,0x2c,0x30,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x30, + 0x2c,0x32,0x2e,0x38,0x39,0x36,0x2c,0x30,0x0d,0x0a, + 0x09,0x09,0x43,0x31,0x2e,0x34,0x37,0x32,0x2c,0x30, + 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x36, + 0x34,0x35,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, + 0x2e,0x33,0x30,0x32,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_button_start_svg.cpp b/data/converted/help_button_start_svg.cpp new file mode 100644 index 000000000..eb92ba896 --- /dev/null +++ b/data/converted/help_button_start_svg.cpp @@ -0,0 +1,178 @@ +//this file was auto-generated from "button_start.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_start_svg_size = 1708; +const unsigned char help_button_start_svg_data[1708] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x38,0x2e,0x34,0x34,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x31,0x39,0x2e,0x31,0x33,0x38,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34,0x36,0x20, + 0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34, + 0x36,0x20,0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x34,0x2e,0x36,0x30,0x32,0x2c,0x31,0x31, + 0x2e,0x32,0x34,0x32,0x48,0x33,0x2e,0x38,0x34,0x35, + 0x43,0x31,0x2e,0x37,0x32,0x32,0x2c,0x31,0x31,0x2e, + 0x32,0x34,0x32,0x2c,0x30,0x2c,0x31,0x33,0x2e,0x30, + 0x31,0x34,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x31,0x39, + 0x39,0x73,0x31,0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e, + 0x39,0x35,0x39,0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c, + 0x33,0x2e,0x39,0x35,0x39,0x68,0x33,0x30,0x2e,0x37, + 0x35,0x37,0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e, + 0x31,0x32,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34, + 0x34,0x2d,0x31,0x2e,0x37,0x37,0x33,0x2c,0x33,0x2e, + 0x38,0x34,0x34,0x2d,0x33,0x2e,0x39,0x35,0x39,0x53, + 0x33,0x36,0x2e,0x37,0x32,0x35,0x2c,0x31,0x31,0x2e, + 0x32,0x34,0x32,0x2c,0x33,0x34,0x2e,0x36,0x30,0x32, + 0x2c,0x31,0x31,0x2e,0x32,0x34,0x32,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x34,0x2e,0x32,0x39,0x36,0x2c,0x37,0x2e, + 0x36,0x38,0x37,0x68,0x31,0x2e,0x34,0x39,0x56,0x31, + 0x2e,0x33,0x38,0x31,0x68,0x32,0x2e,0x36,0x35,0x39, + 0x56,0x30,0x2e,0x32,0x30,0x39,0x68,0x2d,0x36,0x2e, + 0x38,0x31,0x76,0x31,0x2e,0x31,0x37,0x31,0x68,0x32, + 0x2e,0x36,0x36,0x56,0x37,0x2e,0x36,0x38,0x37,0x7a, + 0x20,0x4d,0x32,0x35,0x2e,0x32,0x35,0x35,0x2c,0x33, + 0x2e,0x35,0x36,0x32,0x56,0x31,0x2e,0x33,0x38,0x31, + 0x68,0x32,0x2e,0x35,0x37,0x35,0x0d,0x0a,0x09,0x63, + 0x30,0x2e,0x37,0x38,0x33,0x2c,0x30,0x2c,0x31,0x2e, + 0x32,0x37,0x31,0x2c,0x30,0x2e,0x33,0x30,0x33,0x2c, + 0x31,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e,0x30,0x37, + 0x39,0x63,0x30,0x2c,0x30,0x2e,0x38,0x33,0x38,0x2d, + 0x30,0x2e,0x34,0x34,0x37,0x2c,0x31,0x2e,0x31,0x30, + 0x33,0x2d,0x31,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e, + 0x31,0x30,0x33,0x48,0x32,0x35,0x2e,0x32,0x35,0x35, + 0x7a,0x20,0x4d,0x32,0x33,0x2e,0x37,0x36,0x39,0x2c, + 0x37,0x2e,0x36,0x38,0x37,0x68,0x31,0x2e,0x34,0x38, + 0x36,0x56,0x34,0x2e,0x37,0x33,0x33,0x68,0x32,0x2e, + 0x35,0x33,0x34,0x0d,0x0a,0x09,0x63,0x31,0x2e,0x30, + 0x39,0x34,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x33,0x32, + 0x2c,0x30,0x2e,0x37,0x35,0x34,0x2c,0x31,0x2e,0x32, + 0x33,0x32,0x2c,0x31,0x2e,0x38,0x32,0x32,0x63,0x30, + 0x2c,0x30,0x2e,0x35,0x34,0x35,0x2c,0x30,0x2e,0x30, + 0x37,0x2c,0x30,0x2e,0x39,0x32,0x32,0x2c,0x30,0x2e, + 0x31,0x38,0x2c,0x31,0x2e,0x31,0x33,0x31,0x68,0x31, + 0x2e,0x36,0x30,0x37,0x43,0x33,0x30,0x2e,0x35,0x32, + 0x2c,0x37,0x2e,0x32,0x37,0x38,0x2c,0x33,0x30,0x2e, + 0x35,0x31,0x2c,0x36,0x2e,0x34,0x34,0x31,0x2c,0x33, + 0x30,0x2e,0x35,0x31,0x2c,0x36,0x2e,0x30,0x38,0x33, + 0x0d,0x0a,0x09,0x63,0x30,0x2d,0x31,0x2e,0x30,0x35, + 0x37,0x2d,0x30,0x2e,0x31,0x38,0x36,0x2d,0x31,0x2e, + 0x38,0x33,0x32,0x2d,0x31,0x2e,0x30,0x33,0x31,0x2d, + 0x32,0x2e,0x30,0x32,0x56,0x34,0x2e,0x30,0x34,0x31, + 0x63,0x30,0x2e,0x36,0x36,0x36,0x2d,0x30,0x2e,0x32, + 0x31,0x39,0x2c,0x31,0x2e,0x31,0x37,0x2d,0x30,0x2e, + 0x38,0x32,0x38,0x2c,0x31,0x2e,0x31,0x37,0x2d,0x31, + 0x2e,0x38,0x30,0x32,0x63,0x30,0x2d,0x31,0x2e,0x31, + 0x36,0x32,0x2d,0x30,0x2e,0x35,0x38,0x34,0x2d,0x32, + 0x2e,0x30,0x32,0x39,0x2d,0x32,0x2e,0x33,0x39,0x31, + 0x2d,0x32,0x2e,0x30,0x32,0x39,0x68,0x2d,0x34,0x2e, + 0x34,0x38,0x39,0x56,0x37,0x2e,0x36,0x38,0x37,0x7a, + 0x0d,0x0a,0x09,0x20,0x4d,0x31,0x34,0x2e,0x35,0x34, + 0x39,0x2c,0x37,0x2e,0x36,0x38,0x37,0x68,0x31,0x2e, + 0x36,0x30,0x39,0x6c,0x30,0x2e,0x37,0x33,0x35,0x2d, + 0x31,0x2e,0x38,0x35,0x34,0x68,0x33,0x2e,0x33,0x33, + 0x38,0x6c,0x30,0x2e,0x37,0x34,0x36,0x2c,0x31,0x2e, + 0x38,0x35,0x34,0x68,0x31,0x2e,0x36,0x35,0x39,0x6c, + 0x2d,0x33,0x2e,0x31,0x36,0x2d,0x37,0x2e,0x34,0x37, + 0x38,0x68,0x2d,0x31,0x2e,0x37,0x36,0x38,0x4c,0x31, + 0x34,0x2e,0x35,0x34,0x39,0x2c,0x37,0x2e,0x36,0x38, + 0x37,0x7a,0x20,0x4d,0x31,0x37,0x2e,0x33,0x34,0x31, + 0x2c,0x34,0x2e,0x36,0x36,0x32,0x6c,0x31,0x2e,0x32, + 0x33,0x2d,0x33,0x2e,0x31,0x35,0x36,0x6c,0x31,0x2e, + 0x32,0x31,0x33,0x2c,0x33,0x2e,0x31,0x35,0x36,0x0d, + 0x0a,0x09,0x48,0x31,0x37,0x2e,0x33,0x34,0x31,0x7a, + 0x20,0x4d,0x31,0x30,0x2e,0x33,0x35,0x37,0x2c,0x37, + 0x2e,0x36,0x38,0x37,0x68,0x31,0x2e,0x34,0x38,0x37, + 0x56,0x31,0x2e,0x33,0x38,0x31,0x68,0x32,0x2e,0x36, + 0x36,0x35,0x56,0x30,0x2e,0x32,0x30,0x39,0x48,0x37, + 0x2e,0x36,0x39,0x34,0x76,0x31,0x2e,0x31,0x37,0x31, + 0x68,0x32,0x2e,0x36,0x36,0x34,0x56,0x37,0x2e,0x36, + 0x38,0x37,0x7a,0x20,0x4d,0x30,0x2e,0x31,0x38,0x35, + 0x2c,0x32,0x2e,0x33,0x31,0x33,0x63,0x30,0x2c,0x33, + 0x2e,0x30,0x36,0x36,0x2c,0x35,0x2e,0x32,0x32,0x35, + 0x2c,0x31,0x2e,0x34,0x35,0x33,0x2c,0x35,0x2e,0x32, + 0x32,0x35,0x2c,0x33,0x2e,0x33,0x30,0x37,0x0d,0x0a, + 0x09,0x63,0x30,0x2c,0x30,0x2e,0x38,0x32,0x32,0x2d, + 0x30,0x2e,0x38,0x34,0x34,0x2c,0x31,0x2e,0x31,0x30, + 0x35,0x2d,0x31,0x2e,0x37,0x34,0x39,0x2c,0x31,0x2e, + 0x31,0x30,0x35,0x63,0x2d,0x31,0x2e,0x32,0x32,0x2c, + 0x30,0x2d,0x31,0x2e,0x39,0x39,0x36,0x2d,0x30,0x2e, + 0x34,0x37,0x33,0x2d,0x32,0x2e,0x30,0x33,0x36,0x2d, + 0x31,0x2e,0x34,0x35,0x39,0x48,0x30,0x2e,0x30,0x31, + 0x36,0x63,0x30,0x2e,0x30,0x32,0x2c,0x31,0x2e,0x35, + 0x37,0x32,0x2c,0x31,0x2e,0x30,0x34,0x33,0x2c,0x32, + 0x2e,0x36,0x33,0x31,0x2c,0x33,0x2e,0x35,0x39,0x36, + 0x2c,0x32,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x63, + 0x31,0x2e,0x35,0x31,0x2c,0x30,0x2c,0x33,0x2e,0x34, + 0x30,0x36,0x2d,0x30,0x2e,0x35,0x30,0x34,0x2c,0x33, + 0x2e,0x34,0x30,0x36,0x2d,0x32,0x2e,0x34,0x33,0x32, + 0x63,0x30,0x2d,0x33,0x2e,0x31,0x39,0x33,0x2d,0x35, + 0x2e,0x32,0x38,0x34,0x2d,0x31,0x2e,0x35,0x30,0x38, + 0x2d,0x35,0x2e,0x32,0x38,0x34,0x2d,0x33,0x2e,0x32, + 0x36,0x36,0x63,0x30,0x2d,0x30,0x2e,0x37,0x30,0x32, + 0x2c,0x30,0x2e,0x36,0x35,0x36,0x2d,0x31,0x2e,0x30, + 0x32,0x37,0x2c,0x31,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x30,0x32,0x37,0x63,0x31,0x2e,0x32,0x34,0x31, + 0x2c,0x30,0x2c,0x31,0x2e,0x37,0x33,0x39,0x2c,0x30, + 0x2e,0x36,0x32,0x38,0x2c,0x31,0x2e,0x37,0x38,0x39, + 0x2c,0x31,0x2e,0x32,0x30,0x35,0x0d,0x0a,0x09,0x68, + 0x31,0x2e,0x36,0x30,0x39,0x43,0x36,0x2e,0x35,0x39, + 0x31,0x2c,0x30,0x2e,0x32,0x30,0x37,0x2c,0x34,0x2e, + 0x34,0x30,0x36,0x2c,0x30,0x2c,0x33,0x2e,0x33,0x31, + 0x34,0x2c,0x30,0x43,0x31,0x2e,0x35,0x38,0x34,0x2c, + 0x30,0x2c,0x30,0x2e,0x31,0x38,0x35,0x2c,0x30,0x2e, + 0x36,0x34,0x36,0x2c,0x30,0x2e,0x31,0x38,0x35,0x2c, + 0x32,0x2e,0x33,0x31,0x33,0x22,0x2f,0x3e,0x0d,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_button_x_svg.cpp b/data/converted/help_button_x_svg.cpp new file mode 100644 index 000000000..f3f4b3622 --- /dev/null +++ b/data/converted/help_button_x_svg.cpp @@ -0,0 +1,88 @@ +//this file was auto-generated from "button_x.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_x_svg_size = 805; +const unsigned char help_button_x_svg_data[805] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, + 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, + 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, + 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, + 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, + 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x35,0x2e,0x35,0x2c,0x30,0x2e,0x30,0x30,0x31,0x63, + 0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d,0x31, + 0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x34,0x2d,0x31, + 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x53,0x36, + 0x2e,0x39,0x33,0x39,0x2c,0x33,0x31,0x2c,0x31,0x35, + 0x2e,0x35,0x2c,0x33,0x31,0x43,0x32,0x34,0x2e,0x30, + 0x36,0x31,0x2c,0x33,0x31,0x2c,0x33,0x31,0x2c,0x32, + 0x34,0x2e,0x30,0x36,0x31,0x2c,0x33,0x31,0x2c,0x31, + 0x35,0x2e,0x35,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x53,0x32,0x34,0x2e,0x30,0x36,0x31,0x2c,0x30,0x2e, + 0x30,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x30, + 0x2e,0x30,0x30,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x34,0x33,0x34,0x2c,0x32,0x31,0x2e,0x38,0x39,0x35, + 0x6c,0x2d,0x32,0x2e,0x36,0x30,0x36,0x2d,0x34,0x2e, + 0x38,0x37,0x6c,0x2d,0x32,0x2e,0x36,0x30,0x37,0x2c, + 0x34,0x2e,0x38,0x37,0x68,0x2d,0x33,0x2e,0x31,0x36, + 0x33,0x6c,0x34,0x2e,0x31,0x30,0x39,0x2d,0x36,0x2e, + 0x38,0x30,0x39,0x6c,0x2d,0x34,0x2e,0x30,0x30,0x38, + 0x2d,0x36,0x2e,0x36,0x39,0x38,0x68,0x33,0x2e,0x31, + 0x33,0x36,0x6c,0x32,0x2e,0x34,0x39,0x36,0x2c,0x34, + 0x2e,0x37,0x38,0x37,0x0d,0x0a,0x09,0x09,0x09,0x6c, + 0x32,0x2e,0x35,0x33,0x32,0x2d,0x34,0x2e,0x37,0x38, + 0x37,0x68,0x33,0x2e,0x31,0x35,0x34,0x6c,0x2d,0x34, + 0x2e,0x30,0x30,0x38,0x2c,0x36,0x2e,0x36,0x39,0x38, + 0x6c,0x34,0x2e,0x32,0x34,0x2c,0x36,0x2e,0x38,0x30, + 0x39,0x48,0x31,0x38,0x2e,0x34,0x33,0x34,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_button_y_svg.cpp b/data/converted/help_button_y_svg.cpp new file mode 100644 index 000000000..d9deee170 --- /dev/null +++ b/data/converted/help_button_y_svg.cpp @@ -0,0 +1,84 @@ +//this file was auto-generated from "button_y.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_y_svg_size = 762; +const unsigned char help_button_y_svg_data[762] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, + 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, + 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, + 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, + 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, + 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x35,0x2e,0x35,0x2c,0x30,0x43,0x36,0x2e,0x39,0x33, + 0x39,0x2c,0x30,0x2c,0x30,0x2c,0x36,0x2e,0x39,0x34, + 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x63,0x30,0x2c, + 0x38,0x2e,0x35,0x36,0x31,0x2c,0x36,0x2e,0x39,0x33, + 0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31,0x2c,0x31, + 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, + 0x63,0x38,0x2e,0x35,0x36,0x2c,0x30,0x2c,0x31,0x35, + 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x34,0x2c,0x31,0x35, + 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x33,0x31,0x2c,0x36,0x2e, + 0x39,0x34,0x2c,0x32,0x34,0x2e,0x30,0x36,0x2c,0x30, + 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x30,0x7a,0x20,0x4d, + 0x31,0x37,0x2e,0x30,0x37,0x31,0x2c,0x31,0x37,0x2e, + 0x31,0x34,0x35,0x76,0x34,0x2e,0x37,0x35,0x68,0x2d, + 0x32,0x2e,0x37,0x76,0x2d,0x34,0x2e,0x38,0x39,0x4c, + 0x39,0x2e,0x38,0x31,0x36,0x2c,0x38,0x2e,0x33,0x38, + 0x37,0x68,0x32,0x2e,0x39,0x36,0x39,0x6c,0x32,0x2e, + 0x39,0x35,0x2c,0x36,0x2e,0x32,0x32,0x35,0x68,0x30, + 0x2e,0x30,0x35,0x36,0x6c,0x32,0x2e,0x39,0x35,0x2d, + 0x36,0x2e,0x32,0x32,0x35,0x68,0x32,0x2e,0x39,0x36, + 0x39,0x4c,0x31,0x37,0x2e,0x30,0x37,0x31,0x2c,0x31, + 0x37,0x2e,0x31,0x34,0x35,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0d,0x0a +}; diff --git a/data/converted/help_dpad_all_png.cpp b/data/converted/help_dpad_all_png.cpp deleted file mode 100644 index 73bd5cda5..000000000 --- a/data/converted/help_dpad_all_png.cpp +++ /dev/null @@ -1,1645 +0,0 @@ -//this file was auto-generated from "dpad_all.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_all_png_size = 16375; -const unsigned char help_dpad_all_png_data[16375] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x3c,0xa0,0x69,0x54, - 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x00, - 0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61,0x63, - 0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e,0x3d, - 0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22, - 0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68,0x69, - 0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63,0x7a, - 0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c,0x78, - 0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,0x78, - 0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64, - 0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74, - 0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74, - 0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58, - 0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e, - 0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39,0x2e, - 0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32,0x30, - 0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d,0x31, - 0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20,0x20, - 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d, - 0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78, - 0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, - 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20, - 0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, - 0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73, - 0x74,0x52,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f, - 0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f, - 0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x65, - 0x66,0x23,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f, - 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, - 0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f, - 0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74, - 0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74, - 0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f, - 0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x74,0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66, - 0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30, - 0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69, - 0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d, - 0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70, - 0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e, - 0x74,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x35, - 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x3c,0x2f,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39, - 0x65,0x66,0x63,0x65,0x36,0x35,0x34,0x2d,0x62,0x31, - 0x65,0x31,0x2d,0x31,0x31,0x34,0x39,0x2d,0x38,0x65, - 0x32,0x30,0x2d,0x30,0x33,0x62,0x34,0x31,0x30,0x39, - 0x65,0x66,0x64,0x35,0x37,0x3c,0x2f,0x78,0x6d,0x70, - 0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d, - 0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46,0x72, - 0x6f,0x6d,0x20,0x72,0x64,0x66,0x3a,0x70,0x61,0x72, - 0x73,0x65,0x54,0x79,0x70,0x65,0x3d,0x22,0x52,0x65, - 0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e, - 0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e,0x73, - 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f,0x63, - 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, - 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, - 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66, - 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x72, - 0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54,0x79, - 0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76, - 0x65,0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x39,0x31,0x62,0x61,0x65,0x38,0x36,0x63, - 0x2d,0x38,0x39,0x30,0x38,0x2d,0x34,0x36,0x34,0x37, - 0x2d,0x62,0x30,0x34,0x37,0x2d,0x63,0x37,0x39,0x35, - 0x30,0x63,0x34,0x63,0x62,0x35,0x39,0x64,0x3c,0x2f, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, - 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x32,0x30, - 0x31,0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31, - 0x36,0x3a,0x32,0x35,0x3a,0x30,0x32,0x2d,0x30,0x35, - 0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74, - 0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, - 0x41,0x67,0x65,0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64, - 0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, - 0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x3e, - 0x2f,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, - 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, - 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, - 0x64,0x66,0x3a,0x6c,0x69,0x20,0x72,0x64,0x66,0x3a, - 0x70,0x61,0x72,0x73,0x65,0x54,0x79,0x70,0x65,0x3d, - 0x22,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x22, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, - 0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76,0x65,0x64,0x3c, - 0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, - 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39, - 0x65,0x66,0x63,0x65,0x36,0x35,0x34,0x2d,0x62,0x31, - 0x65,0x31,0x2d,0x31,0x31,0x34,0x39,0x2d,0x38,0x65, - 0x32,0x30,0x2d,0x30,0x33,0x62,0x34,0x31,0x30,0x39, - 0x65,0x66,0x64,0x35,0x37,0x3c,0x2f,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x77,0x68,0x65,0x6e,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x35,0x3a,0x34,0x37,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68, - 0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, - 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, - 0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73, - 0x29,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, - 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, - 0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, - 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x2f,0x3c,0x2f, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x63,0x68,0x61,0x6e, - 0x67,0x65,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x53,0x65, - 0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, - 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72, - 0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f, - 0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43, - 0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, - 0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31, - 0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36, - 0x3a,0x31,0x36,0x3a,0x30,0x36,0x2d,0x30,0x35,0x3a, - 0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43,0x72, - 0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66,0x79, - 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x35,0x3a,0x34,0x37,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69, - 0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d, - 0x70,0x3a,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61, - 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x35,0x3a,0x34,0x37,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61, - 0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e, - 0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x3c, - 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64, - 0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f, - 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, - 0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74, - 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75, - 0x6d,0x65,0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74, - 0x6f,0x72,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, - 0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e, - 0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x30,0x30, - 0x37,0x39,0x36,0x32,0x32,0x31,0x39,0x44,0x38,0x44, - 0x31,0x31,0x45,0x33,0x41,0x39,0x31,0x44,0x42,0x44, - 0x46,0x44,0x34,0x30,0x39,0x39,0x32,0x45,0x45,0x33, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a, - 0x6c,0x69,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69,0x64, - 0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x41,0x39, - 0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39,0x31, - 0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39,0x32, - 0x45,0x45,0x33,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, - 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, - 0x64,0x66,0x3a,0x6c,0x69,0x3e,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, - 0x37,0x45,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x3c,0x2f,0x72,0x64, - 0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, - 0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a, - 0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x41,0x6e, - 0x63,0x65,0x73,0x74,0x6f,0x72,0x73,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74, - 0x69,0x66,0x66,0x3a,0x4f,0x72,0x69,0x65,0x6e,0x74, - 0x61,0x74,0x69,0x6f,0x6e,0x3e,0x31,0x3c,0x2f,0x74, - 0x69,0x66,0x66,0x3a,0x4f,0x72,0x69,0x65,0x6e,0x74, - 0x61,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x66, - 0x66,0x3a,0x58,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74, - 0x69,0x6f,0x6e,0x3e,0x37,0x32,0x30,0x30,0x30,0x30, - 0x2f,0x31,0x30,0x30,0x30,0x30,0x3c,0x2f,0x74,0x69, - 0x66,0x66,0x3a,0x58,0x52,0x65,0x73,0x6f,0x6c,0x75, - 0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x66,0x66, - 0x3a,0x59,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74,0x69, - 0x6f,0x6e,0x3e,0x37,0x32,0x30,0x30,0x30,0x30,0x2f, - 0x31,0x30,0x30,0x30,0x30,0x3c,0x2f,0x74,0x69,0x66, - 0x66,0x3a,0x59,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74, - 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a, - 0x52,0x65,0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e, - 0x55,0x6e,0x69,0x74,0x3e,0x32,0x3c,0x2f,0x74,0x69, - 0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c,0x75,0x74, - 0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65, - 0x78,0x69,0x66,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x53, - 0x70,0x61,0x63,0x65,0x3e,0x36,0x35,0x35,0x33,0x35, - 0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f,0x6c, - 0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65, - 0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58, - 0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e, - 0x33,0x37,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x50, - 0x69,0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e, - 0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x65,0x78,0x69,0x66, - 0x3a,0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d, - 0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x33,0x37,0x3c, - 0x2f,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65, - 0x6c,0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f, - 0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, - 0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46, - 0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d, - 0x65,0x74,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x77,0x22, - 0x3f,0x3e,0x4d,0x56,0x3b,0x28,0x00,0x00,0x00,0x20, - 0x63,0x48,0x52,0x4d,0x00,0x00,0x7a,0x25,0x00,0x00, - 0x80,0x83,0x00,0x00,0xf9,0xff,0x00,0x00,0x80,0xe9, - 0x00,0x00,0x75,0x30,0x00,0x00,0xea,0x60,0x00,0x00, - 0x3a,0x98,0x00,0x00,0x17,0x6f,0x92,0x5f,0xc5,0x46, - 0x00,0x00,0x02,0xd1,0x49,0x44,0x41,0x54,0x78,0xda, - 0xdc,0x98,0xcf,0x4b,0x54,0x51,0x14,0xc7,0x3f,0x33, - 0xf3,0x82,0xa9,0x54,0x34,0xa4,0xe9,0x07,0xfd,0x5e, - 0x48,0x51,0x20,0x2d,0xa2,0x7f,0x60,0x2a,0x32,0x2b, - 0x21,0x71,0x11,0x28,0x54,0x44,0x9b,0x0a,0x5a,0x24, - 0xf5,0x0f,0x04,0xed,0xb2,0x45,0x54,0x14,0x84,0x2d, - 0x8a,0x8a,0x04,0x4d,0xfc,0xd1,0xa2,0x65,0xcb,0x36, - 0x11,0x46,0x3f,0xb0,0x1f,0xe8,0x14,0x46,0xe8,0x98, - 0x81,0x33,0xda,0xe6,0x2b,0x3c,0x2e,0xef,0xc7,0xbd, - 0x4e,0xe3,0x44,0x5f,0x18,0xce,0xbb,0xe7,0x9d,0x77, - 0xee,0xf7,0x9d,0x77,0xef,0xb9,0xe7,0x4c,0xa2,0xb3, - 0xb3,0x13,0x47,0xec,0x03,0xfa,0x80,0x65,0x16,0xb6, - 0x45,0xa0,0x05,0xe8,0x75,0x99,0xc0,0xc3,0x1d,0x03, - 0x40,0x02,0x98,0x01,0xf2,0x11,0x76,0x2b,0x81,0x15, - 0x40,0x0f,0x90,0x2a,0x27,0xa9,0x63,0x22,0x94,0x03, - 0xd6,0x58,0xd8,0xff,0x00,0xea,0x80,0x2c,0x30,0x6c, - 0x3b,0x49,0xd2,0x91,0xd4,0x1e,0xc9,0x11,0x43,0x7f, - 0x0f,0x98,0x07,0xee,0x1b,0xfa,0x2f,0x92,0x59,0x97, - 0x49,0x92,0x2c,0x0e,0xf3,0xbe,0xeb,0x5a,0xa0,0x5d, - 0xd7,0xc7,0x35,0x2e,0x09,0x49,0x4a,0xc7,0x1b,0x63, - 0x3c,0x52,0x69,0x52,0x1d,0x01,0x6b,0x6b,0x35,0x70, - 0xa2,0x92,0xa4,0xee,0x84,0xe8,0x6f,0x55,0x92,0x54, - 0xca,0x51,0x5f,0xb6,0x3c,0xe5,0x47,0x82,0x32,0x20, - 0xc9,0x3f,0x08,0x7f,0xa4,0x9a,0x81,0x83,0x31,0xf6, - 0x7b,0x17,0x39,0x4f,0x16,0xb8,0x11,0x63,0x33,0xa8, - 0xec,0x8f,0x27,0x22,0xbd,0x8e,0x51,0xfb,0x60,0x69, - 0xf7,0x1e,0xd8,0x05,0x34,0xea,0x17,0x85,0x33,0xca, - 0x7f,0x07,0x3c,0x1f,0xa1,0x09,0x60,0xd4,0x62,0xa2, - 0x77,0x0e,0x5b,0xbe,0x05,0x78,0x04,0x6c,0xb5,0xb0, - 0x5d,0xa7,0xf4,0xd2,0xe7,0x89,0xd0,0x34,0x50,0x1f, - 0x60,0x58,0x0f,0x5c,0x00,0x2e,0xc7,0x38,0xcc,0x00, - 0x6d,0xc0,0x43,0x9d,0x8b,0x7e,0xb4,0x1a,0xe3,0x34, - 0xf0,0x3b,0xc4,0xcf,0x0c,0x90,0x4e,0xfa,0x06,0x26, - 0x6e,0x03,0xdf,0x81,0x4b,0xc0,0xd1,0x10,0x27,0x55, - 0xc0,0x24,0x30,0x0e,0x5c,0x93,0x9c,0x94,0x9e,0x88, - 0x89,0x8b,0xc0,0xd9,0x80,0x7b,0xf9,0xb0,0xdd,0xb7, - 0x43,0x91,0x3b,0x65,0x44,0x2c,0x08,0x63,0x40,0x35, - 0x50,0xd0,0x3a,0x2b,0x68,0x3c,0x66,0xb1,0xeb,0xbb, - 0xf4,0xd2,0x99,0xb8,0x94,0x30,0x08,0xbc,0x56,0x1d, - 0x14,0x87,0x4d,0x8a,0x48,0x41,0x05,0xdf,0x36,0xc9, - 0x82,0xf4,0xeb,0x2d,0x7c,0xd4,0x2b,0xba,0x0f,0xc2, - 0x48,0xd5,0xaa,0xaa,0xb4,0x45,0x93,0xe4,0x27,0x43, - 0xff,0x59,0xf2,0x90,0x83,0xaf,0xb6,0x30,0x52,0x3f, - 0x81,0x7e,0x07,0x47,0xcf,0x24,0x37,0x1a,0xfa,0x0d, - 0x92,0x7d,0x0e,0xbe,0x1e,0x47,0x7d,0xbe,0x26,0xa0, - 0x01,0xf8,0x65,0xe1,0x68,0x54,0x0b,0xd3,0x03,0x66, - 0x81,0x8f,0x92,0x9e,0xf4,0x5f,0x2d,0x7c,0x4c,0x28, - 0x0d,0xb4,0xc6,0x1d,0x33,0x6f,0x55,0x5f,0xdf,0xf4, - 0xe9,0x72,0x21,0x4e,0xd7,0x02,0x53,0x22,0xb2,0x59, - 0x72,0x4a,0xfa,0x28,0xcc,0x01,0xe7,0xb5,0xa6,0x72, - 0x61,0x0b,0xbd,0x2a,0x24,0xc3,0xd6,0x01,0x57,0x22, - 0xba,0x91,0x3c,0x50,0xa3,0xb7,0x3d,0x27,0x59,0x13, - 0xd3,0x50,0x54,0xab,0x8a,0xe8,0x0a,0xb8,0xb7,0x1c, - 0x5f,0xe8,0xd3,0xda,0x05,0x61,0x21,0xdf,0x6f,0x1c, - 0x31,0x66,0x42,0xcc,0x01,0xd7,0x43,0x9e,0x7d,0xa2, - 0x28,0xc6,0x61,0x8b,0xbe,0x50,0xd1,0xd3,0x2e,0x19, - 0x50,0xbe,0xc8,0x58,0x3c,0xbc,0x5b,0x8d,0x42,0x87, - 0x85,0x6d,0x0f,0x70,0xc4,0x61,0xc1,0xcf,0x01,0x87, - 0x3d,0x60,0x48,0x9f,0xb1,0x59,0x11,0x49,0xc5,0x54, - 0x09,0x8d,0xca,0x51,0x36,0x58,0x38,0xf3,0x5e,0x01, - 0x2f,0x63,0x9a,0xd6,0xfe,0x85,0xdd,0xef,0x2f,0x5d, - 0x7a,0x2d,0x3a,0xd9,0xab,0x16,0xa7,0x7d,0x10,0x86, - 0x81,0x8b,0xff,0x4d,0x91,0x57,0x6a,0xff,0xf7,0xd7, - 0x4a,0xe5,0x52,0x23,0x55,0x74,0xd4,0x2f,0x09,0xa9, - 0xd3,0x21,0xfa,0x93,0x95,0x24,0x75,0x17,0xf8,0x66, - 0xe8,0xc6,0x95,0x32,0x2a,0xda,0xcd,0x34,0x18,0xe3, - 0xed,0x95,0x6a,0xb1,0x12,0x46,0x75,0xd1,0xad,0xeb, - 0x6e,0x8d,0x97,0x94,0xd4,0x73,0xc9,0x9d,0x86,0xbe, - 0x5d,0x44,0xdb,0x0d,0xfd,0xc2,0xff,0x0c,0x2f,0xca, - 0x99,0x12,0x86,0x74,0x14,0xac,0x52,0xc9,0x3c,0x1d, - 0x73,0xf0,0xa6,0x95,0x36,0xfa,0xcb,0x49,0x0a,0x35, - 0x11,0x4f,0x55,0x32,0xc7,0x95,0xcd,0xb3,0xbe,0x0a, - 0xd5,0x1a,0x7f,0x06,0x00,0xcc,0x4c,0x89,0x42,0x23, - 0x86,0xe8,0x9d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_dpad_all_svg.cpp b/data/converted/help_dpad_all_svg.cpp new file mode 100644 index 000000000..641dcaa04 --- /dev/null +++ b/data/converted/help_dpad_all_svg.cpp @@ -0,0 +1,353 @@ +//this file was auto-generated from "dpad_all.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_all_svg_size = 3453; +const unsigned char help_dpad_all_svg_data[3453] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, + 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, + 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, + 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, + 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, + 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, + 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, + 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, + 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, + 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, + 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, + 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, + 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, + 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, + 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, + 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, + 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, + 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, + 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, + 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, + 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, + 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, + 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, + 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, + 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, + 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, + 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, + 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, + 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x33,0x2e,0x31,0x36,0x32,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x6c,0x34,0x2e,0x36,0x38, + 0x34,0x2c,0x33,0x2e,0x30,0x30,0x35,0x76,0x2d,0x36, + 0x2e,0x30,0x31,0x31,0x4c,0x33,0x2e,0x31,0x36,0x32, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x37,0x2e,0x38,0x34,0x35,0x2c,0x32,0x32,0x2e,0x33, + 0x32,0x33,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e, + 0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30, + 0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x2d,0x33,0x2e,0x30,0x30,0x34,0x63,0x2d,0x30, + 0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38, + 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, + 0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73, + 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, + 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, + 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x31, + 0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x35, + 0x32,0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30, + 0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x63,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33, + 0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, + 0x38,0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, + 0x36,0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32, + 0x37,0x34,0x2d,0x30,0x2e,0x31,0x35,0x2c,0x30,0x2e, + 0x35,0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2e,0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x39,0x33, + 0x2c,0x32,0x32,0x2e,0x32,0x39,0x32,0x2c,0x37,0x2e, + 0x39,0x36,0x39,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33, + 0x2c,0x37,0x2e,0x38,0x34,0x35,0x2c,0x32,0x32,0x2e, + 0x33,0x32,0x33,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x6c,0x32,0x2e, + 0x35,0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x33,0x76, + 0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c,0x34,0x2e,0x35, + 0x35,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x39,0x31,0x36, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x6c,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x76,0x36,0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e,0x39, + 0x31,0x36,0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x32,0x63,0x2d,0x30,0x2e,0x31, + 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37, + 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, + 0x39,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d, + 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e, + 0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32, + 0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, + 0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31, + 0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e, + 0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e, + 0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, + 0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x35,0x31,0x34, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x32,0x2c,0x32,0x39, + 0x2e,0x33,0x37,0x33,0x2c,0x32,0x32,0x2e,0x33,0x32, + 0x32,0x2c,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x32,0x7a,0x20,0x4d,0x32,0x39, + 0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x56,0x32,0x30,0x2e,0x32,0x6c,0x32,0x2e,0x35, + 0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a, + 0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x38,0x32, + 0x2c,0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c, + 0x33,0x33,0x2e,0x39,0x31,0x35,0x6c,0x33,0x2e,0x30, + 0x30,0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31,0x35,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x35,0x4c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x63, + 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, + 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, + 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, + 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, + 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, + 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, + 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, + 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, + 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x36,0x2c, + 0x33,0x34,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e, + 0x38,0x32,0x32,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, + 0x2e,0x36,0x36,0x35,0x7a,0x20,0x4d,0x31,0x36,0x2e, + 0x39,0x33,0x34,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31, + 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, + 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_dpad_down_png.cpp b/data/converted/help_dpad_down_png.cpp deleted file mode 100644 index 05758d4e7..000000000 --- a/data/converted/help_dpad_down_png.cpp +++ /dev/null @@ -1,187 +0,0 @@ -//this file was auto-generated from "dpad_down.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_down_png_size = 1797; -const unsigned char help_dpad_down_png_data[1797] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x45, - 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x44, - 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0x24,0x4f,0xd7,0x28,0x00,0x00,0x03,0x33,0x49,0x44, - 0x41,0x54,0x78,0xda,0xd4,0x98,0x5b,0x6c,0x4c,0x41, - 0x18,0xc7,0xcf,0xae,0xa3,0x15,0xd4,0x83,0xba,0x94, - 0x56,0x42,0xd2,0x20,0x44,0x56,0x22,0x12,0x44,0x52, - 0xad,0x44,0x08,0x21,0x1e,0xc4,0x7a,0x12,0x7d,0xd0, - 0x96,0x50,0x82,0x6c,0x8b,0x28,0x2a,0x4b,0xe2,0xb2, - 0x22,0x22,0x95,0xf2,0xe0,0x49,0x89,0x27,0x97,0x78, - 0x71,0x8b,0x97,0x25,0xc1,0x43,0xd1,0x20,0x54,0xe2, - 0xd6,0x6a,0x17,0xa1,0x1b,0xea,0xa4,0x2e,0xff,0x49, - 0xfe,0x4d,0x36,0x93,0x73,0x66,0xce,0xd9,0x63,0x1d, - 0xbe,0xe4,0x97,0x93,0xce,0xce,0xe5,0x9b,0x99,0x6f, - 0xbe,0x4b,0x43,0xb1,0x58,0xcc,0xf0,0x28,0x23,0xc0, - 0x61,0xb0,0x1c,0x14,0x28,0xfa,0x7d,0x05,0x57,0xc1, - 0x3a,0xd0,0xe5,0x65,0x01,0xd3,0xf0,0x2e,0x2d,0x60, - 0x36,0x68,0x06,0x1d,0x8a,0x7e,0xa3,0x40,0x35,0x38, - 0x05,0x96,0xe6,0x52,0xa9,0x22,0x30,0x1f,0x6c,0x03, - 0x87,0x5c,0xf4,0xff,0x0c,0x1a,0x40,0x21,0xf8,0xe0, - 0x76,0x91,0xb0,0x47,0xa5,0x46,0xf2,0xfb,0x44,0x6a, - 0x9f,0x05,0x52,0x60,0x8e,0xd4,0xfe,0x9c,0x6b,0x8c, - 0xf5,0xb2,0x48,0xd8,0xc8,0x4e,0x7e,0x49,0xa7,0xdd, - 0xc4,0xd3,0x68,0xca,0xd2,0x24,0xfe,0x88,0x52,0x99, - 0xb2,0x11,0x44,0xc0,0x49,0x30,0x0d,0x6c,0x0e,0x5a, - 0xa9,0x12,0xb0,0x07,0x5c,0xa6,0x51,0x5f,0x04,0xbb, - 0xc0,0xb8,0x20,0x95,0x4a,0x80,0xa1,0xa0,0x07,0x1c, - 0x00,0x69,0xfe,0x9d,0xf0,0x33,0xa9,0xdf,0xfb,0x8f, - 0xf0,0xbb,0x4a,0x6a,0x9f,0x1e,0xa4,0x52,0x13,0x8d, - 0x1c,0x48,0xd8,0xf8,0x07,0xc5,0x94,0x3c,0xb0,0xce, - 0x40,0x4b,0xb3,0x5c,0x67,0x0a,0xc8,0xd3,0xf4,0x79, - 0x03,0xde,0xf7,0x2b,0x25,0x1c,0xe2,0x19,0xb0,0xc8, - 0x83,0x8f,0x4a,0xb9,0xec,0xfb,0x8e,0xfd,0x5b,0x5c, - 0xf6,0xbf,0x0e,0xa2,0x26,0x63,0x53,0x19,0xd8,0x4e, - 0x0f,0xac,0x93,0x4e,0x70,0xd7,0xe5,0x22,0xb7,0xc0, - 0x3c,0x30,0xda,0x45,0x5f,0x71,0x4b,0x8d,0xe0,0xa0, - 0x50,0x6a,0x21,0x38,0x06,0xf6,0xdb,0x74,0x1c,0x48, - 0x63,0x7e,0xac,0x99,0x30,0x8f,0x3e,0x4b,0x5c,0x81, - 0x25,0xfd,0x76,0xdb,0xc6,0x8e,0x7f,0x3a,0xcc,0x33, - 0x01,0xac,0x0e,0x73,0x42,0xbb,0x60,0x39,0x13,0xdc, - 0x03,0x0f,0x15,0x3b,0x1d,0x00,0xe2,0xe0,0x13,0x78, - 0xc1,0x6f,0x9c,0xed,0x4e,0xf2,0x16,0x5c,0xa2,0x02, - 0x76,0xbf,0x15,0xd8,0xbd,0xbe,0x21,0xe0,0x08,0x48, - 0xd2,0x40,0x43,0x20,0xdf,0x61,0x81,0x7d,0xa0,0x9e, - 0x9e,0x7c,0x2d,0xbf,0xf5,0x6c,0x57,0x65,0x1a,0x4b, - 0x78,0xfa,0x75,0x76,0x0f,0x40,0x56,0x6a,0x01,0x4f, - 0xa6,0x96,0xb1,0x6c,0x83,0x62,0xf2,0x41,0x8c,0x7b, - 0x67,0xe9,0x3c,0x9b,0xf9,0x3d,0xc7,0x71,0xf9,0x8a, - 0xb1,0xc7,0xc1,0x15,0x9a,0xcc,0x03,0x30,0xd7,0x49, - 0x29,0x33,0xe3,0x58,0x85,0xd1,0xaf,0x07,0x5f,0x34, - 0x3b,0x1e,0x0c,0x6e,0x4a,0xed,0x37,0x78,0xda,0x45, - 0x9a,0x2b,0x5c,0x01,0x8e,0x82,0xa9,0x5c,0xd7,0x56, - 0xa9,0x3e,0xb0,0x18,0xb4,0x73,0x07,0x27,0xc0,0x30, - 0xcd,0x2b,0x14,0x29,0x6f,0x85,0xd4,0x5e,0xc1,0x18, - 0xd8,0xa9,0x18,0x2b,0xf2,0xab,0xf3,0x60,0x13,0x73, - 0xb3,0x65,0xaa,0x30,0x73,0x8d,0xe9,0x47,0x23,0xaf, - 0x46,0x25,0xbd,0x7c,0xb5,0x75,0xd2,0xf3,0x5f,0xc9, - 0xe0,0xfc,0x5d,0x31,0x56,0x5c,0xef,0x37,0xb0,0x83, - 0x19,0xac,0xa5,0x8b,0x7d,0x62,0xf7,0x5b,0x68,0x2b, - 0xa7,0xa9,0x64,0xaf,0xc3,0xe4,0x3b,0xe9,0x1c,0x85, - 0x0d,0x46,0x79,0x42,0x71,0xa6,0x2f,0x4e,0x22,0xbc, - 0xf6,0x7d,0x2a,0xd6,0xee,0x14,0x66,0xd2,0xf4,0x31, - 0xb2,0x08,0x77,0x30,0x03,0x4c,0x52,0x54,0x23,0x3f, - 0x68,0x7f,0xbb,0x41,0x31,0x6d,0xc5,0xd2,0x9c,0x70, - 0x31,0xc7,0x39,0x55,0x4a,0x96,0x50,0xea,0x02,0x58, - 0x03,0x5e,0x82,0x57,0x8a,0xd8,0x95,0xb9,0x53,0xd9, - 0x21,0x5a,0x1c,0x6f,0x27,0x65,0x8c,0xab,0x3a,0x99, - 0x0c,0x6a,0xc4,0xab,0x34,0x59,0x99,0x8c,0x77,0x59, - 0x9d,0xf4,0xc7,0x3e,0x51,0x20,0xdc,0x71,0xd1,0xb7, - 0x9c,0xf1,0x2c,0xe4,0x72,0x5e,0x51,0x27,0x56,0x99, - 0x0c,0xae,0xe5,0xdc,0x4d,0x89,0x66,0x82,0x52,0x06, - 0xd7,0x42,0x97,0x1b,0x18,0xc3,0xf9,0xa2,0x9a,0xb8, - 0x2a,0x14,0x7a,0x0d,0xba,0x65,0x43,0xef,0x72,0x51, - 0xc9,0x5a,0x46,0x76,0xd2,0x46,0xa7,0xfc,0xff,0x26, - 0x79,0x7e,0x95,0x7a,0xc6,0xa3,0x97,0x79,0x1a,0xa4, - 0x52,0x8f,0x1c,0xda,0x5b,0x83,0x54,0xaa,0x96,0x7e, - 0x2e,0x53,0xd2,0x7e,0x0b,0x52,0xbf,0x4a,0x89,0x17, - 0xb3,0x57,0x6a,0x6b,0x60,0xb2,0x17,0x68,0x35,0x93, - 0xc8,0x78,0x59,0xad,0x8c,0x87,0x81,0x18,0x7a,0x48, - 0xca,0x2e,0xaa,0xc0,0x47,0x96,0xee,0x7d,0x7f,0x5b, - 0xa9,0x0e,0xe6,0xd7,0x11,0xa9,0x3d,0x49,0x87,0x9a, - 0xb4,0xf9,0x5f,0x83,0xa1,0x49,0x63,0x7c,0x57,0xc8, - 0x29,0x86,0x02,0x11,0x84,0x87,0x6b,0x9c,0xad,0xa8, - 0x4e,0x2a,0x99,0x0e,0x75,0xe7,0xba,0x6c,0xaf,0x64, - 0x02,0x58,0xcd,0xcc,0xd3,0x49,0x7a,0x98,0x1a,0x6f, - 0xf5,0xba,0xc0,0x6f,0x01,0x06,0x00,0x9b,0x19,0xb5, - 0xa2,0x6f,0x22,0x26,0x8a,0x00,0x00,0x00,0x00,0x49, - 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_dpad_down_svg.cpp b/data/converted/help_dpad_down_svg.cpp new file mode 100644 index 000000000..00861efe8 --- /dev/null +++ b/data/converted/help_dpad_down_svg.cpp @@ -0,0 +1,330 @@ +//this file was auto-generated from "dpad_down.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_down_svg_size = 3223; +const unsigned char help_dpad_down_svg_data[3223] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, + 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, + 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, + 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, + 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, + 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, + 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, + 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, + 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, + 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, + 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, + 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, + 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, + 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, + 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, + 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, + 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, + 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, + 0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35, + 0x32,0x36,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, + 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, + 0x30,0x2e,0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, + 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d, + 0x30,0x2e,0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, + 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, + 0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, + 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, + 0x38,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, + 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x43,0x32,0x32,0x2e,0x30,0x39,0x39,0x2c,0x38, + 0x2e,0x35,0x30,0x34,0x2c,0x32,0x31,0x2e,0x38,0x34, + 0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x2c,0x32,0x31, + 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, + 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, + 0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31,0x35,0x34, + 0x68,0x33,0x2e,0x32,0x36,0x37,0x6c,0x2d,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x4c, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31, + 0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e, + 0x38,0x34,0x35,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33, + 0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34, + 0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31, + 0x31,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d, + 0x33,0x2e,0x30,0x30,0x34,0x63,0x2d,0x30,0x2e,0x32, + 0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e, + 0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30, + 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, + 0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, + 0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x36,0x2e,0x30,0x31,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34, + 0x2d,0x30,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x35,0x32, + 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x43,0x38,0x2e,0x30,0x39,0x33,0x2c,0x32, + 0x32,0x2e,0x32,0x39,0x32,0x2c,0x37,0x2e,0x39,0x36, + 0x39,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x2c,0x37, + 0x2e,0x38,0x34,0x35,0x2c,0x32,0x32,0x2e,0x33,0x32, + 0x33,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x35,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x6c,0x32,0x2e,0x35,0x34, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x33,0x76,0x2d,0x33, + 0x2e,0x32,0x36,0x36,0x4c,0x34,0x2e,0x35,0x35,0x2c, + 0x31,0x38,0x2e,0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, + 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x32,0x63,0x2d,0x30,0x2e,0x31, + 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37, + 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, + 0x39,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d, + 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e, + 0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32, + 0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, + 0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31, + 0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e, + 0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e, + 0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, + 0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x35,0x31,0x34, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x32,0x2c,0x32,0x39, + 0x2e,0x33,0x37,0x33,0x2c,0x32,0x32,0x2e,0x33,0x32, + 0x32,0x2c,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x32,0x7a,0x20,0x4d,0x32,0x39, + 0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x56,0x32,0x30,0x2e,0x32,0x6c,0x32,0x2e,0x35, + 0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a, + 0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x38,0x32, + 0x2c,0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c, + 0x33,0x33,0x2e,0x39,0x31,0x35,0x6c,0x33,0x2e,0x30, + 0x30,0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31,0x35,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x35,0x4c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x63, + 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, + 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, + 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, + 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, + 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, + 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, + 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, + 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, + 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x36,0x2c, + 0x33,0x34,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e, + 0x38,0x32,0x32,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, + 0x2e,0x36,0x36,0x35,0x7a,0x20,0x4d,0x31,0x36,0x2e, + 0x39,0x33,0x34,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31, + 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, + 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_dpad_left_png.cpp b/data/converted/help_dpad_left_png.cpp deleted file mode 100644 index 17b28ac47..000000000 --- a/data/converted/help_dpad_left_png.cpp +++ /dev/null @@ -1,188 +0,0 @@ -//this file was auto-generated from "dpad_left.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_left_png_size = 1805; -const unsigned char help_dpad_left_png_data[1805] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x35, - 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x34, - 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0x7e,0xb4,0x24,0x5c,0x00,0x00,0x03,0x3b,0x49,0x44, - 0x41,0x54,0x78,0xda,0xd4,0x98,0x5b,0x6c,0x4c,0x41, - 0x18,0xc7,0xcf,0xae,0x55,0x82,0xbe,0xa8,0x4b,0x69, - 0x25,0x24,0x75,0x09,0x61,0x25,0x22,0x41,0x24,0xd5, - 0x4a,0x84,0xa0,0x89,0x07,0x51,0x5e,0x44,0x1f,0xb4, - 0x95,0x50,0x0d,0xb2,0x5b,0xc4,0xad,0xb2,0x24,0x2e, - 0x2b,0x8d,0x48,0xa5,0x3c,0x78,0xa1,0xc4,0x93,0x4b, - 0xbc,0xb8,0xc5,0xcb,0x56,0x82,0x07,0xb7,0x20,0x54, - 0x42,0xe9,0x6a,0x17,0x91,0x6e,0xa8,0x93,0xba,0xfc, - 0x27,0xf9,0x37,0xd9,0x4c,0xce,0x39,0x33,0x67,0x8f, - 0x75,0xf8,0x92,0x5f,0x4e,0x76,0x76,0xce,0xcc,0x37, - 0x33,0xdf,0x7c,0x97,0x13,0x88,0x44,0x22,0x86,0x4b, - 0x19,0x01,0x8e,0x80,0x15,0x20,0xdf,0xa1,0xdf,0x57, - 0x70,0x0d,0x6c,0x00,0x5d,0x6e,0x26,0x08,0x19,0xee, - 0xa5,0x15,0xcc,0x05,0x2d,0xa0,0xd3,0xa1,0xdf,0x28, - 0x50,0x03,0x4e,0x81,0x8a,0x5c,0x2a,0x55,0x08,0x16, - 0x82,0x6d,0xe0,0xb0,0x46,0xff,0x2f,0x60,0x37,0x28, - 0x00,0x1f,0x75,0x27,0x09,0xba,0x54,0x6a,0x24,0x9f, - 0xcf,0xa4,0xf6,0x39,0x20,0x05,0xe6,0x49,0xed,0x2f, - 0x39,0xc7,0x58,0x37,0x93,0x04,0x8d,0xec,0xe4,0x97, - 0xb4,0xdb,0xcd,0xdc,0x8d,0xe6,0x2c,0x4d,0xe2,0x8f, - 0x28,0x95,0x29,0x9b,0x40,0x18,0x9c,0x04,0xd3,0x41, - 0xbd,0xdf,0x4a,0x15,0x83,0xbd,0xe0,0x0a,0x8d,0xfa, - 0x12,0xd8,0x05,0xc6,0xf9,0xa9,0x54,0x1c,0x0c,0x03, - 0x3d,0xe0,0x20,0x48,0xf3,0x77,0xdc,0xcb,0xa0,0x5e, - 0xcf,0x3f,0xcc,0xe7,0x6a,0xa9,0x7d,0xa6,0x9f,0x4a, - 0x4d,0x32,0x72,0x20,0x41,0xe3,0x1f,0x94,0x90,0xe4, - 0x81,0x55,0x06,0x5a,0x92,0xe5,0x3c,0x53,0x41,0x9e, - 0xa2,0x4f,0x07,0xf8,0xd0,0xaf,0x94,0x70,0x88,0x67, - 0xc0,0x12,0x17,0x3e,0x2a,0xa5,0xd9,0xf7,0x3d,0xfb, - 0xb7,0x6a,0xf6,0xbf,0x01,0x2a,0x43,0x8c,0x4d,0xa5, - 0x60,0x3b,0x3d,0xb0,0x4a,0x92,0xe0,0xae,0xe6,0x24, - 0xb7,0xc1,0x02,0x30,0x5a,0xa3,0xaf,0x38,0xa5,0x46, - 0x70,0x48,0x28,0xb5,0x18,0x34,0x81,0x03,0x16,0x1d, - 0x07,0xd2,0x98,0x9f,0x28,0x06,0xcc,0xa3,0xcf,0x12, - 0x47,0x60,0x4a,0xff,0xdd,0xb1,0xb0,0xe3,0x9f,0x36, - 0xe3,0x4c,0x00,0x6b,0x83,0x1c,0xd0,0x2a,0x58,0xce, - 0x06,0xf7,0xc0,0x23,0x87,0x95,0x0e,0x00,0x31,0xf0, - 0x19,0xbc,0xe2,0x33,0xc6,0x76,0x3b,0x79,0x07,0x2e, - 0x53,0x01,0xab,0xff,0xf2,0xad,0x6e,0xdf,0x50,0x70, - 0x14,0x24,0xc0,0x0c,0x10,0x00,0x83,0x6c,0x26,0xd8, - 0x0f,0x1a,0xe8,0xc9,0xd7,0xf3,0xd9,0xc0,0x76,0xa7, - 0x4c,0x63,0x19,0x77,0x3f,0x6a,0x75,0x01,0x64,0xa5, - 0x16,0x71,0x67,0xea,0x15,0xab,0x15,0x32,0x98,0x71, - 0xef,0x1c,0x9d,0x67,0x0b,0x9f,0xe7,0xc1,0x46,0x87, - 0x85,0x08,0x39,0x0e,0xae,0xd2,0x64,0x1e,0x80,0xf9, - 0x76,0x4a,0x85,0x1c,0xb6,0xd5,0x6e,0xc5,0x43,0xc0, - 0x2d,0xa9,0xfd,0x26,0x77,0xbb,0x50,0x71,0x84,0x2b, - 0xc1,0x31,0x30,0x8d,0xb1,0xd3,0x52,0xa9,0x3e,0xb0, - 0x14,0xb4,0x6b,0x2a,0x95,0x64,0xca,0x5b,0x2e,0xb5, - 0x97,0x33,0x06,0x26,0x1d,0xde,0x15,0xf9,0xd5,0x05, - 0xb0,0x99,0xb9,0x59,0x85,0x53,0x98,0xb9,0xce,0xf4, - 0xa3,0x91,0x47,0xe3,0x14,0x86,0x7a,0x79,0x6b,0xa3, - 0xd2,0xf5,0x5f,0xc5,0xe0,0xfc,0xdd,0xe1,0x5d,0x71, - 0xbc,0xdf,0xc0,0x0e,0x66,0xb0,0xa6,0x2a,0xf6,0x89, - 0xd5,0x6f,0xa1,0xad,0x9c,0xa6,0x92,0xbd,0x36,0x83, - 0xef,0xa4,0x73,0xac,0x13,0x4e,0x8f,0x3b,0x14,0x63, - 0xfa,0x62,0x27,0xc2,0x6b,0xdf,0xa7,0x62,0xed,0x76, - 0x61,0x26,0x4d,0x1f,0x23,0x8b,0x70,0x07,0xb3,0xc0, - 0x64,0x87,0x6a,0xe4,0x07,0x9d,0xee,0x1e,0x50,0x44, - 0x5b,0x31,0x15,0xc7,0x5e,0xc4,0xf7,0xec,0x2a,0x25, - 0x53,0x28,0x75,0x11,0xac,0x03,0xaf,0xc1,0x1b,0x87, - 0xd8,0x95,0xb9,0x52,0xd9,0x21,0x9a,0x7c,0xdf,0x4a, - 0x4a,0x19,0x57,0x55,0x32,0x05,0xd4,0x8a,0x5b,0x19, - 0x62,0x65,0x32,0x5e,0xb3,0x3a,0xe9,0x8f,0x7d,0xa2, - 0x40,0x68,0xd3,0xe8,0x5b,0xc6,0x78,0x16,0xd0,0x1c, - 0x57,0xd4,0x89,0xd5,0x21,0x06,0xd7,0x32,0xae,0xa6, - 0x58,0x31,0x40,0x09,0x83,0x6b,0x81,0xe6,0x02,0xc6, - 0x70,0xbc,0x4a,0x45,0x5c,0x15,0x0a,0xbd,0x05,0xdd, - 0xb2,0xa1,0x77,0x69,0x54,0xb2,0xa6,0x91,0x9d,0x3c, - 0xa5,0x53,0xfe,0x7f,0x93,0x3c,0xaf,0x4a,0xbd,0xe0, - 0xd6,0xcb,0x3c,0xf7,0x33,0x47,0x7f,0x0c,0x26,0x82, - 0xb3,0xb4,0x09,0x91,0x13,0xad,0x01,0x0f,0xfd,0xdc, - 0xa9,0xba,0x8c,0xb2,0x2a,0xca,0xaf,0x30,0x69,0xaf, - 0x05,0xa9,0x57,0xa5,0xc4,0xee,0xec,0x63,0xec,0x3a, - 0x01,0x96,0xf3,0x83,0x46,0x87,0xdf,0xd5,0x4c,0x9c, - 0x37,0xab,0x96,0xc7,0xd6,0xe4,0x97,0xa1,0x07,0xa4, - 0xec,0xa2,0x1a,0x7c,0x62,0xe9,0xde,0xf7,0xb7,0x95, - 0xea,0x64,0x7e,0x1d,0x96,0xda,0x13,0x74,0xa8,0x09, - 0x8b,0x6f,0x0d,0x86,0x22,0x8d,0xf1,0x7c,0xfb,0x52, - 0x0c,0x05,0x22,0x08,0x0f,0x57,0x38,0x5b,0x71,0x13, - 0xab,0x98,0x0e,0x75,0xe7,0xda,0x25,0x54,0xd1,0xa8, - 0x6b,0x98,0x79,0xda,0x49,0x0f,0x53,0xe3,0xad,0x6e, - 0x27,0xf8,0x2d,0xc0,0x00,0x86,0xa8,0xb5,0xf9,0x24, - 0xe5,0xd1,0x9d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_dpad_left_right_png.cpp b/data/converted/help_dpad_left_right_png.cpp deleted file mode 100644 index a9768dcb7..000000000 --- a/data/converted/help_dpad_left_right_png.cpp +++ /dev/null @@ -1,1637 +0,0 @@ -//this file was auto-generated from "dpad_left_right.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_left_right_png_size = 16291; -const unsigned char help_dpad_left_right_png_data[16291] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x3c,0x0e,0x69,0x54, - 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x00, - 0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61,0x63, - 0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e,0x3d, - 0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22, - 0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68,0x69, - 0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63,0x7a, - 0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c,0x78, - 0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,0x78, - 0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64, - 0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74, - 0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74, - 0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58, - 0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e, - 0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39,0x2e, - 0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32,0x30, - 0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d,0x31, - 0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20,0x20, - 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d, - 0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78, - 0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, - 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20, - 0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, - 0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73, - 0x74,0x52,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f, - 0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f, - 0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x65, - 0x66,0x23,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f, - 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, - 0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f, - 0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74, - 0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74, - 0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f, - 0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x74,0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66, - 0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30, - 0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69, - 0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d, - 0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70, - 0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e, - 0x74,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x35, - 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x3c,0x2f,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, - 0x37,0x35,0x37,0x63,0x32,0x35,0x35,0x2d,0x65,0x37, - 0x32,0x36,0x2d,0x33,0x32,0x34,0x38,0x2d,0x38,0x33, - 0x37,0x65,0x2d,0x35,0x32,0x33,0x32,0x36,0x36,0x38, - 0x35,0x32,0x34,0x61,0x39,0x3c,0x2f,0x78,0x6d,0x70, - 0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d, - 0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46,0x72, - 0x6f,0x6d,0x20,0x72,0x64,0x66,0x3a,0x70,0x61,0x72, - 0x73,0x65,0x54,0x79,0x70,0x65,0x3d,0x22,0x52,0x65, - 0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e, - 0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e,0x73, - 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f,0x63, - 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, - 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, - 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66, - 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x72, - 0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54,0x79, - 0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76, - 0x65,0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x39,0x31,0x62,0x61,0x65,0x38,0x36,0x63, - 0x2d,0x38,0x39,0x30,0x38,0x2d,0x34,0x36,0x34,0x37, - 0x2d,0x62,0x30,0x34,0x37,0x2d,0x63,0x37,0x39,0x35, - 0x30,0x63,0x34,0x63,0x62,0x35,0x39,0x64,0x3c,0x2f, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, - 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x32,0x30, - 0x31,0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31, - 0x36,0x3a,0x32,0x35,0x3a,0x30,0x32,0x2d,0x30,0x35, - 0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74, - 0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, - 0x41,0x67,0x65,0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64, - 0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, - 0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x3e, - 0x2f,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, - 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, - 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, - 0x64,0x66,0x3a,0x6c,0x69,0x20,0x72,0x64,0x66,0x3a, - 0x70,0x61,0x72,0x73,0x65,0x54,0x79,0x70,0x65,0x3d, - 0x22,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x22, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, - 0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76,0x65,0x64,0x3c, - 0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, - 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, - 0x37,0x35,0x37,0x63,0x32,0x35,0x35,0x2d,0x65,0x37, - 0x32,0x36,0x2d,0x33,0x32,0x34,0x38,0x2d,0x38,0x33, - 0x37,0x65,0x2d,0x35,0x32,0x33,0x32,0x36,0x36,0x38, - 0x35,0x32,0x34,0x61,0x39,0x3c,0x2f,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x77,0x68,0x65,0x6e,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x35,0x3a,0x30,0x32,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68, - 0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, - 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, - 0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73, - 0x29,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, - 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, - 0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, - 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x2f,0x3c,0x2f, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x63,0x68,0x61,0x6e, - 0x67,0x65,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x53,0x65, - 0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, - 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72, - 0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f, - 0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43, - 0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, - 0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31, - 0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36, - 0x3a,0x31,0x36,0x3a,0x30,0x36,0x2d,0x30,0x35,0x3a, - 0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43,0x72, - 0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66,0x79, - 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x35,0x3a,0x30,0x32,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69, - 0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d, - 0x70,0x3a,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61, - 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x35,0x3a,0x30,0x32,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61, - 0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e, - 0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x3c, - 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64, - 0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f, - 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, - 0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74, - 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75, - 0x6d,0x65,0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74, - 0x6f,0x72,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, - 0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e, - 0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x30,0x30, - 0x37,0x39,0x36,0x32,0x32,0x31,0x39,0x44,0x38,0x44, - 0x31,0x31,0x45,0x33,0x41,0x39,0x31,0x44,0x42,0x44, - 0x46,0x44,0x34,0x30,0x39,0x39,0x32,0x45,0x45,0x33, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x42,0x61, - 0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73, - 0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74,0x6f,0x72, - 0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, - 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, - 0x31,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, - 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32, - 0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30, - 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65, - 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73,0x6f, - 0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32,0x30, - 0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30,0x3c, - 0x2f,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74, - 0x69,0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c,0x75, - 0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e,0x32, - 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69, - 0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f, - 0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x36, - 0x35,0x35,0x33,0x35,0x3c,0x2f,0x65,0x78,0x69,0x66, - 0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x53,0x70,0x61,0x63, - 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x50,0x69, - 0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e,0x73, - 0x69,0x6f,0x6e,0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78, - 0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58,0x44, - 0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c, - 0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e, - 0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a, - 0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d,0x65, - 0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44, - 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, - 0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, - 0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a, - 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x3c,0x3f,0x78, - 0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65,0x6e,0x64, - 0x3d,0x22,0x77,0x22,0x3f,0x3e,0x93,0x4e,0x9a,0xa4, - 0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00,0x00, - 0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9,0xff, - 0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00,0x00, - 0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17,0x6f, - 0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x0f,0x49,0x44, - 0x41,0x54,0x78,0xda,0xd4,0x98,0xcd,0x4b,0x54,0x51, - 0x18,0xc6,0x7f,0x33,0x0c,0x35,0x8a,0x44,0x25,0xa5, - 0x84,0x59,0x66,0x45,0x64,0x56,0xa8,0x51,0xba,0xd0, - 0xa4,0x0f,0xa1,0xb0,0x85,0x04,0x2d,0x02,0xdb,0x04, - 0x41,0x0b,0xa3,0xd5,0xd0,0x3f,0xd0,0xa2,0x45,0xd8, - 0xc7,0xae,0x88,0xc0,0x36,0x51,0x49,0xdf,0x44,0x81, - 0x95,0x0b,0x4b,0x4a,0x31,0x30,0x09,0x53,0x32,0xa1, - 0xac,0x34,0x89,0x1a,0x4a,0xad,0xb4,0xcd,0x73,0xe1, - 0x72,0xb8,0x33,0xf7,0x5c,0x87,0x69,0xea,0x81,0xcb, - 0x3b,0xf7,0xdc,0x77,0xce,0xfb,0x70,0xce,0xfb,0x75, - 0x4e,0x28,0x16,0x8b,0x11,0x10,0xab,0x81,0xbb,0xc0, - 0x0a,0x20,0xe4,0xa3,0xfb,0x0e,0xd8,0x09,0xf4,0x05, - 0x31,0x10,0x21,0x38,0x9e,0x00,0x0b,0x81,0x1e,0x60, - 0x24,0x89,0xde,0x62,0xa0,0x1c,0x68,0x03,0xf2,0xd3, - 0x49,0x6a,0xbd,0x08,0xdd,0x06,0xea,0x2d,0xf4,0xdb, - 0x80,0x5a,0x60,0x15,0xf0,0xda,0xd6,0x48,0x38,0x20, - 0xa9,0x95,0x92,0xdd,0xc6,0xf8,0x41,0x60,0x1a,0x38, - 0x64,0x8c,0x3b,0xdb,0x56,0x1a,0xc4,0x48,0x98,0xd9, - 0x61,0xc6,0xf5,0x3b,0x0a,0x9c,0x96,0x7f,0x35,0xeb, - 0x3d,0x25,0x84,0x49,0x1d,0x97,0x81,0x2c,0xad,0x4a, - 0x14,0xb8,0x9a,0x69,0x52,0x9b,0xe4,0x5b,0x1f,0x81, - 0x12,0xe0,0x03,0xb0,0x0b,0xd8,0x9c,0x49,0x52,0xad, - 0xda,0xb6,0x09,0x45,0xe5,0x84,0xde,0xaf,0xa5,0x32, - 0x69,0x24,0x45,0x52,0x79,0x92,0xcb,0xf4,0xb8,0xd3, - 0x41,0xc6,0x48,0xcd,0x21,0x0d,0x08,0xf3,0x0f,0xc2, - 0xbd,0x52,0x6b,0x81,0x32,0x1f,0xfd,0x8a,0x59,0xda, - 0xa9,0x06,0xb2,0x7d,0x74,0x7a,0x80,0x5e,0x87,0xd4, - 0x1a,0xa0,0x1d,0x58,0x14,0xc0,0xc8,0xb0,0xa5,0xde, - 0x80,0xe4,0x11,0x4b,0xfd,0x71,0xa0,0x32,0x02,0x3c, - 0x14,0xa1,0xfb,0xc0,0x4b,0x8b,0x3f,0x0e,0x02,0x17, - 0x2c,0x8d,0x34,0x03,0xbf,0x81,0x22,0x0b,0xdd,0x62, - 0x60,0x0f,0x70,0x27,0xa2,0x62,0xf9,0x0c,0xa8,0xf3, - 0x50,0xcc,0x06,0x76,0x00,0x37,0x7c,0x26,0xcc,0x51, - 0xf1,0xed,0x02,0xe2,0xc6,0xb7,0x33,0x1e,0x2e,0xf3, - 0x2b,0xc1,0x3c,0x2f,0x80,0xd2,0xb0,0x6b,0xd9,0x4c, - 0x1c,0x00,0x3e,0x03,0xd7,0x81,0x75,0x49,0xa2,0xaf, - 0x03,0xf8,0x06,0x3c,0x92,0xec,0xf0,0x89,0xca,0x49, - 0x25,0xd9,0x6a,0x8f,0x6f,0x23,0x40,0x28,0x9c,0xa0, - 0xe5,0xe8,0x02,0x2e,0xba,0xea,0x58,0x4e,0x02,0x03, - 0x8f,0x81,0x4a,0xf9,0x58,0x8b,0x64,0xa5,0xc6,0x93, - 0x45,0x7c,0x9e,0x74,0xee,0x79,0xcd,0x6d,0x92,0x3a, - 0xa6,0xc6,0xac,0xcc,0xc2,0x07,0xe6,0x03,0x5b,0x80, - 0xb7,0x4a,0x9c,0x8d,0x92,0xc3,0x1a,0x9f,0x67,0x31, - 0x47,0x1d,0x30,0x06,0x1c,0x4e,0x44,0x2a,0x0a,0x1c, - 0x0f,0x90,0x50,0x9d,0x2d,0x6d,0x37,0xc6,0xdb,0x8d, - 0xef,0x7e,0x98,0x0b,0x9c,0x4d,0x44,0x6a,0x02,0x88, - 0x01,0x3f,0x2d,0x27,0xeb,0x95,0xac,0xf1,0xc8,0x49, - 0x33,0xae,0xef,0x7e,0x98,0x32,0x53,0x86,0xb9,0x7d, - 0x27,0x80,0x25,0xf2,0x29,0x3f,0x7c,0x01,0x9e,0x02, - 0x85,0xda,0xc2,0x4b,0x92,0x85,0x40,0x27,0xf0,0xd5, - 0x62,0x8e,0x07,0x40,0xae,0x19,0xa1,0x5e,0x8e,0x3e, - 0xa6,0xcc,0xdd,0xa8,0xd5,0x23,0x89,0x81,0x1a,0x75, - 0x07,0x85,0xc0,0x7e,0x60,0xa9,0xa2,0xaf,0x26,0x09, - 0x91,0x69,0x60,0x14,0xd8,0xaa,0x43,0x45,0xdc,0xab, - 0xcc,0xcc,0x68,0x75,0x4c,0xb4,0x00,0x57,0xe4,0x8c, - 0x7d,0x49,0x96,0xbe,0x4a,0x11,0x54,0xa6,0x36,0x39, - 0xee,0xb3,0x3a,0x59,0xfa,0x9f,0x17,0x72,0x1d,0x52, - 0x83,0xea,0xa1,0x6f,0xba,0xca,0x82,0xd7,0x8a,0x38, - 0x78,0xe3,0x91,0x10,0xe3,0x1e,0x0e,0xef,0xa0,0x09, - 0x58,0x6e,0xb1,0x95,0x1b,0xb4,0x43,0xef,0x23,0xc0, - 0x6e,0xf9,0x40,0x3d,0xf6,0xf8,0x01,0x9c,0xb7,0xd0, - 0x3b,0x0a,0x9c,0x0c,0x30,0xef,0x28,0xb0,0x2d,0x02, - 0xf4,0x03,0x0b,0xd4,0x25,0x6c,0xf4,0x69,0x67,0x2a, - 0x14,0x29,0x05,0x96,0x46,0x8a,0x25,0x4f,0x01,0xcf, - 0x7d,0xfc,0xac,0x1b,0x78,0x65,0xb6,0x2e,0x7d,0x16, - 0x27,0xd9,0xef,0x01,0x2a,0xbe,0x99,0xbb,0x5a,0xff, - 0xeb,0x26,0x2f,0x55,0x52,0x53,0x8a,0x5e,0xf3,0x99, - 0xcc,0x24,0xa9,0x51,0xc9,0x21,0x25,0xd2,0x21,0xbd, - 0x7f,0xca,0x24,0xa9,0x06,0xad,0x4c,0x54,0xdd,0x41, - 0x96,0xde,0x1b,0x32,0x49,0xaa,0x53,0xd7,0x42,0xf9, - 0xaa,0x75,0x79,0xc0,0x2d,0x35,0x8d,0x19,0x3d,0xcd, - 0xec,0x55,0x39,0x2a,0x91,0xdc,0x97,0x29,0x47,0x0f, - 0x19,0xdd,0x45,0x93,0xb6,0xad,0xc9,0x55,0x2f,0xff, - 0xda,0x61,0xd4,0x69,0x47,0xaa,0x8c,0xf1,0x73,0x7a, - 0x4c,0x14,0x19,0x57,0x42,0x69,0x21,0xd5,0xaf,0xc8, - 0xda,0xae,0x0c,0x9d,0x2c,0xca,0x0a,0x54,0x53,0xc7, - 0x9d,0x4c,0x9d,0xce,0x63,0x7b,0xad,0x8e,0x63,0xe5, - 0x16,0x77,0x58,0x03,0xba,0x85,0x09,0x84,0x3f,0x03, - 0x00,0xe0,0x20,0xa8,0x96,0x09,0xf3,0x09,0x77,0x00, - 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, - 0x82 -}; diff --git a/data/converted/help_dpad_left_svg.cpp b/data/converted/help_dpad_left_svg.cpp new file mode 100644 index 000000000..2ca162b7c --- /dev/null +++ b/data/converted/help_dpad_left_svg.cpp @@ -0,0 +1,330 @@ +//this file was auto-generated from "dpad_left.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_left_svg_size = 3221; +const unsigned char help_dpad_left_svg_data[3221] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, + 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, + 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, + 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, + 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, + 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, + 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, + 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, + 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, + 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, + 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, + 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, + 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, + 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, + 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, + 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, + 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, + 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, + 0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35, + 0x32,0x36,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, + 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, + 0x30,0x2e,0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, + 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d, + 0x30,0x2e,0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, + 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, + 0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, + 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, + 0x38,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, + 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x43,0x32,0x32,0x2e,0x30,0x39,0x39,0x2c,0x38, + 0x2e,0x35,0x30,0x34,0x2c,0x32,0x31,0x2e,0x38,0x34, + 0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x2c,0x32,0x31, + 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, + 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, + 0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31,0x35,0x34, + 0x68,0x33,0x2e,0x32,0x36,0x37,0x6c,0x2d,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x4c, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31, + 0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, + 0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, + 0x30,0x35,0x76,0x2d,0x36,0x2e,0x30,0x31,0x31,0x4c, + 0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35, + 0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30, + 0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, + 0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e, + 0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c, + 0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, + 0x30,0x34,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d, + 0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e, + 0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63, + 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x37,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, + 0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d, + 0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34, + 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, + 0x2e,0x30,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e, + 0x31,0x35,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43, + 0x38,0x2e,0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32, + 0x39,0x32,0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34, + 0x35,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20, + 0x4d,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x38,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31, + 0x2e,0x36,0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36, + 0x36,0x4c,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x39,0x2e,0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33, + 0x32,0x32,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e, + 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30, + 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34, + 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39, + 0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35, + 0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30, + 0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, + 0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30, + 0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33, + 0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c, + 0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34, + 0x43,0x32,0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37, + 0x33,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32, + 0x39,0x2e,0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33, + 0x32,0x32,0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38, + 0x32,0x2c,0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32, + 0x30,0x2e,0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d, + 0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09, + 0x4c,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36, + 0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e, + 0x36,0x36,0x35,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37, + 0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x63,0x2d,0x30, + 0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34, + 0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, + 0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31, + 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35, + 0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30, + 0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32, + 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30, + 0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36, + 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c, + 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31, + 0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30, + 0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38, + 0x34,0x43,0x31,0x39,0x2e,0x30,0x36,0x2c,0x33,0x34, + 0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e,0x38,0x32, + 0x32,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36, + 0x36,0x35,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31,0x6c,0x31, + 0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35, + 0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33, + 0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36, + 0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, + 0x0a +}; diff --git a/data/converted/help_dpad_leftright_svg.cpp b/data/converted/help_dpad_leftright_svg.cpp new file mode 100644 index 000000000..ef3b91d2b --- /dev/null +++ b/data/converted/help_dpad_leftright_svg.cpp @@ -0,0 +1,337 @@ +//this file was auto-generated from "dpad_leftright.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_leftright_svg_size = 3299; +const unsigned char help_dpad_leftright_svg_data[3299] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, + 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, + 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, + 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, + 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, + 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, + 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, + 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, + 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, + 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, + 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, + 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, + 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, + 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, + 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, + 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, + 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, + 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, + 0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35, + 0x32,0x36,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, + 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, + 0x30,0x2e,0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, + 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d, + 0x30,0x2e,0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, + 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, + 0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, + 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, + 0x38,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, + 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x43,0x32,0x32,0x2e,0x30,0x39,0x39,0x2c,0x38, + 0x2e,0x35,0x30,0x34,0x2c,0x32,0x31,0x2e,0x38,0x34, + 0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x2c,0x32,0x31, + 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, + 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, + 0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31,0x35,0x34, + 0x68,0x33,0x2e,0x32,0x36,0x37,0x6c,0x2d,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x4c, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31, + 0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, + 0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, + 0x30,0x35,0x76,0x2d,0x36,0x2e,0x30,0x31,0x31,0x4c, + 0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35, + 0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30, + 0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, + 0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e, + 0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c, + 0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, + 0x30,0x34,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d, + 0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e, + 0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63, + 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x37,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, + 0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d, + 0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34, + 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, + 0x2e,0x30,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e, + 0x31,0x35,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43, + 0x38,0x2e,0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32, + 0x39,0x32,0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34, + 0x35,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20, + 0x4d,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x38,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31, + 0x2e,0x36,0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36, + 0x36,0x4c,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, + 0x33,0x2e,0x39,0x31,0x36,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31, + 0x4c,0x33,0x33,0x2e,0x39,0x31,0x36,0x2c,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, + 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, + 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, + 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, + 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, + 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, + 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, + 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, + 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, + 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, + 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, + 0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c, + 0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e, + 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e, + 0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e, + 0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32, + 0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39, + 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36, + 0x35,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32, + 0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33, + 0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, + 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37, + 0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36, + 0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34, + 0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38, + 0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e, + 0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30, + 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e, + 0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43, + 0x31,0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35, + 0x33,0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c, + 0x33,0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, + 0x7a,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, + 0x32,0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36, + 0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a, + 0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d, + 0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39, + 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_dpad_right_png.cpp b/data/converted/help_dpad_right_png.cpp deleted file mode 100644 index f74f76fc0..000000000 --- a/data/converted/help_dpad_right_png.cpp +++ /dev/null @@ -1,188 +0,0 @@ -//this file was auto-generated from "dpad_right.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_right_png_size = 1802; -const unsigned char help_dpad_right_png_data[1802] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x31, - 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x30,0x30,0x37,0x39,0x36,0x32,0x32,0x30, - 0x39,0x44,0x38,0x44,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0x94,0x89,0x63,0xf5,0x00,0x00,0x03,0x38,0x49,0x44, - 0x41,0x54,0x78,0xda,0xd4,0x98,0x4b,0x68,0x13,0x41, - 0x18,0xc7,0x37,0x71,0x6d,0x7d,0xd5,0x43,0xeb,0xa3, - 0xda,0x0a,0x0a,0xd5,0x8a,0x22,0x11,0x44,0x50,0x11, - 0x6a,0x2b,0x88,0xe2,0x03,0x3c,0x19,0xbd,0x88,0x3d, - 0xd8,0x56,0xd1,0x22,0x2a,0x49,0x45,0x7c,0x55,0xa2, - 0x60,0x35,0xd0,0x83,0x54,0xaa,0x07,0x2f,0x5a,0xc1, - 0x93,0x0f,0xbc,0xf8,0xc2,0x4b,0x14,0xb4,0x07,0x5f, - 0x54,0xd1,0x0a,0x5a,0x6d,0x6d,0xa3,0xa2,0x0d,0x5a, - 0x43,0x7d,0xfc,0x07,0xfe,0x85,0x30,0xec,0xee,0xcc, - 0x6e,0x8c,0xab,0x1f,0xfc,0x58,0x32,0x99,0x9d,0xf9, - 0x66,0xe6,0x7b,0xcd,0x06,0x22,0x91,0x88,0xe1,0x52, - 0xc6,0x81,0xe3,0x60,0x2d,0x28,0x70,0xe8,0xf7,0x15, - 0x5c,0x03,0x5b,0x40,0xaf,0x9b,0x09,0x4c,0xc3,0xbd, - 0xb4,0x81,0x85,0xa0,0x15,0x74,0x3b,0xf4,0x9b,0x00, - 0x6a,0xc1,0x69,0xb0,0x26,0x97,0x4a,0x15,0x83,0xa5, - 0x60,0x37,0x68,0xd2,0xe8,0xff,0x19,0xec,0x07,0x45, - 0xe0,0x83,0xee,0x24,0x41,0x97,0x4a,0x8d,0xe7,0xb3, - 0x43,0x6a,0x5f,0x00,0x92,0x60,0x91,0xd4,0xfe,0x82, - 0x73,0x4c,0x76,0x33,0x49,0xd0,0xf0,0x26,0xbf,0xa4, - 0xdd,0x6e,0xe1,0x6e,0xb4,0x78,0x34,0x89,0x3f,0xa2, - 0x54,0xa6,0x6c,0x07,0x21,0x70,0x0a,0xcc,0x01,0x3b, - 0xfc,0x56,0xaa,0x14,0x1c,0x04,0x57,0x68,0xd4,0x97, - 0xc0,0x3e,0x30,0xc5,0x4f,0xa5,0xe2,0x60,0x0c,0xe8, - 0x07,0x47,0x41,0x8a,0xbf,0xe3,0xd9,0x0c,0x9a,0xed, - 0xf9,0x87,0xf8,0x5c,0x2f,0xb5,0xcf,0xf5,0x53,0xa9, - 0x19,0x46,0x0e,0x24,0x68,0xfc,0x83,0x62,0x4a,0x11, - 0x58,0x65,0xa0,0x65,0x1e,0xe7,0x99,0x05,0xf2,0x14, - 0x7d,0xba,0xc0,0xfb,0x21,0xa5,0x44,0x40,0x3c,0x0b, - 0x56,0xb8,0x88,0x51,0x49,0xcd,0xbe,0xef,0xd8,0xbf, - 0x4d,0xb3,0xff,0x0d,0x10,0x36,0x99,0x9b,0x2a,0xc0, - 0x1e,0x46,0x60,0x95,0xf4,0x80,0x7b,0x9a,0x93,0xdc, - 0x06,0x4b,0xc0,0x44,0x8d,0xbe,0xe2,0x94,0x1a,0xc1, - 0x31,0xa1,0xd4,0x72,0xd0,0x0c,0x8e,0x58,0x74,0x1c, - 0x4e,0x63,0x7e,0xa2,0x18,0x30,0x8f,0x31,0x4b,0x1c, - 0x41,0x5a,0xfa,0xef,0x8e,0x85,0x1d,0xff,0xb4,0x19, - 0x67,0x1a,0xd8,0x18,0xe4,0x80,0x56,0xc9,0x72,0x3e, - 0xb8,0x0f,0x1e,0x39,0xac,0x74,0x18,0x88,0x81,0x4f, - 0xe0,0x25,0x9f,0x31,0xb6,0xdb,0xc9,0x5b,0x70,0x99, - 0x0a,0x58,0xfd,0x57,0x60,0xe5,0x7d,0xa3,0xc1,0x09, - 0x90,0xa0,0x81,0x06,0x40,0xbe,0xcd,0x04,0x87,0x41, - 0x03,0x23,0xf9,0x66,0x3e,0x1b,0xd8,0xee,0x54,0x69, - 0xac,0xe2,0xee,0x47,0xad,0x1c,0x40,0x56,0x6a,0x19, - 0x77,0xa6,0x9e,0xb9,0x6c,0x9b,0xc3,0xe0,0x23,0x98, - 0xf7,0xce,0x33,0x78,0xb6,0xf2,0x79,0x81,0xef,0xe5, - 0x2b,0x8e,0x7c,0x24,0x4d,0xa6,0x1d,0x2c,0xb6,0x53, - 0xca,0xcc,0xd8,0x56,0x61,0xf4,0x5b,0xc1,0x17,0xc5, - 0x8a,0x47,0x81,0x5b,0x52,0xfb,0x4d,0xee,0x76,0xb1, - 0xa6,0x33,0xcc,0x66,0xee,0xb4,0x54,0x6a,0x10,0xac, - 0x04,0x9d,0x5c,0xc1,0x49,0x30,0x56,0xe1,0x85,0xa2, - 0xe4,0xad,0x92,0xda,0xab,0x98,0x03,0x7b,0x34,0x95, - 0xea,0x90,0x2b,0x53,0x39,0xcd,0x5c,0x67,0xf9,0xd1, - 0xc8,0xa3,0x71,0x92,0x01,0x7a,0x6d,0x54,0x72,0xff, - 0x75,0x4c,0xce,0xdf,0x15,0xef,0x7f,0xa3,0xed,0x35, - 0xc9,0x1e,0x6b,0xda,0x14,0xfc,0x3b,0x69,0x2b,0x67, - 0xa8,0xe4,0x80,0xcd,0xc0,0x7b,0x19,0x1c,0x85,0x0d, - 0x86,0xb9,0x43,0x31,0x96,0x2f,0x76,0x22,0xa2,0xf6, - 0x03,0xda,0x5d,0xa7,0x5d,0x9a,0x49,0x31,0xc6,0xc8, - 0x22,0xc2,0xc1,0x3c,0x50,0xee,0x70,0x1b,0xf9,0x41, - 0xfb,0x3b,0x00,0x4a,0xe8,0xd2,0x69,0xc5,0x0e,0x95, - 0xf0,0x3d,0xbb,0x9b,0x52,0x5a,0x28,0x75,0x11,0x6c, - 0x02,0xaf,0xc0,0x6b,0x87,0xdc,0x95,0xb9,0x52,0x39, - 0x20,0xa6,0xf9,0xbe,0x95,0x54,0x30,0xaf,0xaa,0x64, - 0x26,0xa8,0x03,0x57,0x4d,0xde,0x4c,0xa6,0x6a,0xde, - 0x4e,0x86,0x72,0x9f,0xb8,0x20,0xdc,0xd5,0xe8,0x5b, - 0xc9,0x7c,0x16,0xd0,0x1c,0x57,0xdc,0x13,0x6b,0x4c, - 0x26,0xd7,0x4a,0xae,0xa6,0x54,0x31,0x40,0x19,0x93, - 0x6b,0x91,0xe6,0x02,0x26,0x71,0xbc,0xb0,0x22,0xaf, - 0x0a,0x85,0xde,0x80,0x3e,0xd9,0xd0,0x7b,0x35,0x6e, - 0xb2,0x69,0xc3,0x9b,0x3c,0x65,0x50,0xfe,0x7f,0x8b, - 0xbc,0x6c,0x95,0x7a,0xce,0xad,0x97,0x79,0xe6,0x67, - 0x8d,0xfe,0x18,0x4c,0x07,0xe7,0x68,0x13,0xa2,0x26, - 0xda,0x00,0x1e,0xfa,0xb9,0x53,0xf5,0x19,0xd7,0xaa, - 0x28,0xbf,0xc2,0xa4,0xb2,0xbd,0x90,0x66,0xab,0x94, - 0xd8,0x9d,0x43,0xcc,0x5d,0x22,0x57,0xae,0xe6,0x07, - 0x8d,0x2e,0xbf,0x6f,0x33,0x71,0x7a,0x56,0x1d,0x8f, - 0xad,0xd9,0x2f,0x43,0x0f,0x48,0xd5,0x45,0x0d,0xf8, - 0xc8,0xab,0xfb,0xe0,0xdf,0x56,0xaa,0x9b,0xf5,0x75, - 0x48,0x6a,0x4f,0x30,0xa0,0x26,0x2c,0xbe,0x35,0x18, - 0x2e,0xca,0x18,0x4f,0xde,0x97,0x64,0x2a,0x10,0x49, - 0xb8,0x50,0x11,0x6c,0x85,0x27,0x56,0xb3,0x1c,0xea, - 0xcb,0x75,0x48,0xa8,0xa6,0x51,0xd7,0xb2,0xf2,0xb4, - 0x93,0x7e,0x96,0xc6,0xbb,0xdc,0x4e,0xf0,0x5b,0x80, - 0x01,0x00,0x6d,0xd6,0xb5,0x52,0x54,0x06,0x6d,0xa8, - 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, - 0x60,0x82 -}; diff --git a/data/converted/help_dpad_right_svg.cpp b/data/converted/help_dpad_right_svg.cpp new file mode 100644 index 000000000..db8c4a7a8 --- /dev/null +++ b/data/converted/help_dpad_right_svg.cpp @@ -0,0 +1,190 @@ +//this file was auto-generated from "dpad_right.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_right_svg_size = 1822; +const unsigned char help_dpad_right_svg_data[1822] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x6e,0x6f, + 0x6e,0x65,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69, + 0x64,0x74,0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20, + 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74, + 0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31, + 0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e, + 0x39,0x37,0x36,0x2c,0x31,0x32,0x2e,0x36,0x34,0x31, + 0x68,0x2d,0x39,0x2e,0x34,0x38,0x32,0x56,0x33,0x2e, + 0x31,0x35,0x39,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, + 0x2c,0x30,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x37,0x31, + 0x2d,0x32,0x2e,0x33,0x37,0x31,0x2d,0x32,0x2e,0x33, + 0x37,0x31,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x30,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x36,0x39,0x2c, + 0x30,0x2d,0x32,0x2e,0x33,0x36,0x39,0x2c,0x32,0x2e, + 0x33,0x37,0x31,0x76,0x39,0x2e,0x34,0x38,0x32,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x30,0x2c,0x30,0x2d, + 0x32,0x2e,0x33,0x37,0x31,0x2c,0x30,0x2d,0x32,0x2e, + 0x33,0x37,0x31,0x2c,0x32,0x2e,0x33,0x37,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x30,0x2c,0x30, + 0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e,0x33, + 0x37,0x31,0x2c,0x32,0x2e,0x33,0x37,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x68,0x39,0x2e,0x34,0x38,0x34,0x76, + 0x39,0x2e,0x34,0x38,0x31,0x63,0x30,0x2c,0x30,0x2c, + 0x30,0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e, + 0x33,0x36,0x39,0x2c,0x32,0x2e,0x33,0x37,0x31,0x68, + 0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x30,0x2c, + 0x32,0x2e,0x33,0x37,0x31,0x2c,0x30,0x2c,0x32,0x2e, + 0x33,0x37,0x31,0x2d,0x32,0x2e,0x33,0x37,0x31,0x76, + 0x2d,0x39,0x2e,0x34,0x38,0x31,0x68,0x39,0x2e,0x34, + 0x38,0x32,0x63,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33, + 0x37,0x31,0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31, + 0x2d,0x32,0x2e,0x33,0x37,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x43,0x33, + 0x36,0x2e,0x33,0x34,0x37,0x2c,0x31,0x35,0x2e,0x30, + 0x31,0x31,0x2c,0x33,0x36,0x2e,0x33,0x34,0x37,0x2c, + 0x31,0x32,0x2e,0x36,0x34,0x31,0x2c,0x33,0x33,0x2e, + 0x39,0x37,0x36,0x2c,0x31,0x32,0x2e,0x36,0x34,0x31, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x6e,0x6f,0x6e,0x65, + 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73, + 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, + 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x31,0x2e,0x34,0x36,0x38,0x63,0x31, + 0x2e,0x36,0x30,0x32,0x2c,0x30,0x2c,0x32,0x2e,0x39, + 0x2d,0x31,0x2e,0x32,0x39,0x39,0x2c,0x32,0x2e,0x39, + 0x2d,0x32,0x2e,0x39,0x30,0x31,0x0d,0x0a,0x09,0x09, + 0x63,0x30,0x2d,0x31,0x2e,0x36,0x30,0x32,0x2d,0x31, + 0x2e,0x32,0x39,0x39,0x2d,0x32,0x2e,0x39,0x2d,0x32, + 0x2e,0x39,0x2d,0x32,0x2e,0x39,0x63,0x2d,0x31,0x2e, + 0x36,0x30,0x34,0x2c,0x30,0x2d,0x32,0x2e,0x39,0x2c, + 0x31,0x2e,0x32,0x39,0x39,0x2d,0x32,0x2e,0x39,0x2c, + 0x32,0x2e,0x39,0x43,0x31,0x35,0x2e,0x36,0x36,0x37, + 0x2c,0x32,0x30,0x2e,0x31,0x36,0x39,0x2c,0x31,0x36, + 0x2e,0x39,0x36,0x34,0x2c,0x32,0x31,0x2e,0x34,0x36, + 0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c,0x32, + 0x31,0x2e,0x34,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x20, + 0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72, + 0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d, + 0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f, + 0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69, + 0x6e,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20, + 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74, + 0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31, + 0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x0d,0x0a, + 0x09,0x09,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c, + 0x34,0x2e,0x36,0x38,0x34,0x68,0x36,0x2e,0x30,0x31, + 0x31,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, + 0x2e,0x32,0x32,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, + 0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, + 0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, + 0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d, + 0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, + 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31,0x36,0x32, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x0d,0x0a,0x09, + 0x09,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, + 0x30,0x30,0x35,0x76,0x2d,0x36,0x2e,0x30,0x31,0x31, + 0x4c,0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74,0x72, + 0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f, + 0x69,0x6e,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64,0x22, + 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69, + 0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22, + 0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, + 0x2e,0x39,0x31,0x36,0x2c,0x31,0x38,0x2e,0x35,0x36, + 0x37,0x0d,0x0a,0x09,0x09,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x35,0x76,0x36, + 0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e,0x39,0x31,0x36, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x6e,0x6f,0x6e,0x65, + 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73, + 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63, + 0x61,0x70,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64,0x22, + 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69, + 0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d,0x22,0x72,0x6f, + 0x75,0x6e,0x64,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, + 0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d, + 0x69,0x74,0x3d,0x22,0x31,0x30,0x22,0x20,0x64,0x3d, + 0x22,0x0d,0x0a,0x09,0x09,0x4d,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31,0x35,0x6c, + 0x33,0x2e,0x30,0x30,0x36,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, + 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x33,0x2e,0x39, + 0x31,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0d,0x0a +}; diff --git a/data/converted/help_dpad_up_down_png.cpp b/data/converted/help_dpad_up_down_png.cpp deleted file mode 100644 index 8f323dda1..000000000 --- a/data/converted/help_dpad_up_down_png.cpp +++ /dev/null @@ -1,1638 +0,0 @@ -//this file was auto-generated from "dpad_up_down.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_up_down_png_size = 16306; -const unsigned char help_dpad_up_down_png_data[16306] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x3c,0x0e,0x69,0x54, - 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x00, - 0x00,0x00,0x00,0x00,0x3c,0x3f,0x78,0x70,0x61,0x63, - 0x6b,0x65,0x74,0x20,0x62,0x65,0x67,0x69,0x6e,0x3d, - 0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22, - 0x57,0x35,0x4d,0x30,0x4d,0x70,0x43,0x65,0x68,0x69, - 0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63,0x7a, - 0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x0a,0x3c,0x78, - 0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,0x78, - 0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64, - 0x6f,0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74, - 0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74, - 0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58, - 0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e, - 0x35,0x2d,0x63,0x30,0x32,0x31,0x20,0x37,0x39,0x2e, - 0x31,0x35,0x34,0x39,0x31,0x31,0x2c,0x20,0x32,0x30, - 0x31,0x33,0x2f,0x31,0x30,0x2f,0x32,0x39,0x2d,0x31, - 0x31,0x3a,0x34,0x37,0x3a,0x31,0x36,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x22,0x3e,0x0a,0x20,0x20, - 0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d, - 0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78, - 0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, - 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20, - 0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, - 0x22,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73, - 0x74,0x52,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f, - 0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f, - 0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x52,0x65, - 0x66,0x23,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f, - 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, - 0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f, - 0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74, - 0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74, - 0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f, - 0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x74,0x69,0x66,0x66,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f, - 0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x74,0x69,0x66, - 0x66,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,0x69,0x66, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e, - 0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30, - 0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69, - 0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d, - 0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70, - 0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e, - 0x74,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x45, - 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x3c,0x2f,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, - 0x39,0x39,0x66,0x31,0x63,0x61,0x61,0x2d,0x36,0x33, - 0x63,0x62,0x2d,0x31,0x66,0x34,0x33,0x2d,0x39,0x65, - 0x62,0x32,0x2d,0x31,0x33,0x65,0x36,0x37,0x32,0x37, - 0x61,0x30,0x38,0x39,0x64,0x3c,0x2f,0x78,0x6d,0x70, - 0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x78,0x6d,0x70,0x4d,0x4d, - 0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46,0x72, - 0x6f,0x6d,0x20,0x72,0x64,0x66,0x3a,0x70,0x61,0x72, - 0x73,0x65,0x54,0x79,0x70,0x65,0x3d,0x22,0x52,0x65, - 0x73,0x6f,0x75,0x72,0x63,0x65,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e, - 0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x69,0x6e,0x73, - 0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x78, - 0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x30,0x31, - 0x35,0x37,0x37,0x33,0x42,0x31,0x31,0x32,0x30,0x36, - 0x38,0x31,0x31,0x38,0x30,0x38,0x33,0x43,0x37,0x45, - 0x33,0x31,0x45,0x41,0x35,0x41,0x37,0x35,0x33,0x3c, - 0x2f,0x73,0x74,0x52,0x65,0x66,0x3a,0x64,0x6f,0x63, - 0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, - 0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f, - 0x72,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66, - 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x72, - 0x64,0x66,0x3a,0x70,0x61,0x72,0x73,0x65,0x54,0x79, - 0x70,0x65,0x3d,0x22,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76, - 0x65,0x64,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x61,0x63,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x64,0x36,0x38,0x36,0x39,0x31,0x37,0x33, - 0x2d,0x63,0x37,0x62,0x30,0x2d,0x33,0x32,0x34,0x61, - 0x2d,0x62,0x33,0x66,0x39,0x2d,0x33,0x32,0x36,0x32, - 0x38,0x31,0x30,0x61,0x34,0x61,0x65,0x63,0x3c,0x2f, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74, - 0x61,0x6e,0x63,0x65,0x49,0x44,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x77,0x68,0x65,0x6e,0x3e,0x32,0x30, - 0x31,0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31, - 0x36,0x3a,0x32,0x34,0x3a,0x32,0x34,0x2d,0x30,0x35, - 0x3a,0x30,0x30,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74, - 0x3a,0x77,0x68,0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, - 0x41,0x67,0x65,0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64, - 0x6f,0x77,0x73,0x29,0x3c,0x2f,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, - 0x41,0x67,0x65,0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76, - 0x74,0x3a,0x63,0x68,0x61,0x6e,0x67,0x65,0x64,0x3e, - 0x2f,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, - 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c, - 0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72, - 0x64,0x66,0x3a,0x6c,0x69,0x20,0x72,0x64,0x66,0x3a, - 0x70,0x61,0x72,0x73,0x65,0x54,0x79,0x70,0x65,0x3d, - 0x22,0x52,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x22, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, - 0x69,0x6f,0x6e,0x3e,0x73,0x61,0x76,0x65,0x64,0x3c, - 0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74, - 0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3e,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x32, - 0x39,0x39,0x66,0x31,0x63,0x61,0x61,0x2d,0x36,0x33, - 0x63,0x62,0x2d,0x31,0x66,0x34,0x33,0x2d,0x39,0x65, - 0x62,0x32,0x2d,0x31,0x33,0x65,0x36,0x37,0x32,0x37, - 0x61,0x30,0x38,0x39,0x64,0x3c,0x2f,0x73,0x74,0x45, - 0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63, - 0x65,0x49,0x44,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a, - 0x77,0x68,0x65,0x6e,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x34,0x3a,0x32,0x34,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x77,0x68, - 0x65,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, - 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, - 0x6e,0x74,0x3e,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73, - 0x29,0x3c,0x2f,0x73,0x74,0x45,0x76,0x74,0x3a,0x73, - 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67,0x65, - 0x6e,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x73,0x74,0x45,0x76,0x74,0x3a,0x63, - 0x68,0x61,0x6e,0x67,0x65,0x64,0x3e,0x2f,0x3c,0x2f, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x63,0x68,0x61,0x6e, - 0x67,0x65,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x53,0x65, - 0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x78,0x6d,0x70,0x4d,0x4d,0x3a, - 0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78, - 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72, - 0x54,0x6f,0x6f,0x6c,0x3e,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x43,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f, - 0x77,0x73,0x29,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43, - 0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x78,0x6d,0x70,0x3a,0x43,0x72,0x65,0x61, - 0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31, - 0x34,0x2d,0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36, - 0x3a,0x31,0x36,0x3a,0x30,0x36,0x2d,0x30,0x35,0x3a, - 0x30,0x30,0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x43,0x72, - 0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66,0x79, - 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x34,0x3a,0x32,0x34,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69, - 0x66,0x79,0x44,0x61,0x74,0x65,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x78,0x6d, - 0x70,0x3a,0x4d,0x65,0x74,0x61,0x64,0x61,0x74,0x61, - 0x44,0x61,0x74,0x65,0x3e,0x32,0x30,0x31,0x34,0x2d, - 0x30,0x33,0x2d,0x31,0x35,0x54,0x31,0x36,0x3a,0x32, - 0x34,0x3a,0x32,0x34,0x2d,0x30,0x35,0x3a,0x30,0x30, - 0x3c,0x2f,0x78,0x6d,0x70,0x3a,0x4d,0x65,0x74,0x61, - 0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e, - 0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x3c, - 0x2f,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64, - 0x65,0x3e,0x33,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f, - 0x73,0x68,0x6f,0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72, - 0x4d,0x6f,0x64,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,0x6f,0x74, - 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75, - 0x6d,0x65,0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74, - 0x6f,0x72,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64, - 0x66,0x3a,0x42,0x61,0x67,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e, - 0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a,0x46,0x43, - 0x44,0x39,0x31,0x31,0x37,0x41,0x39,0x44,0x38,0x41, - 0x31,0x31,0x45,0x33,0x41,0x39,0x31,0x44,0x42,0x44, - 0x46,0x44,0x34,0x30,0x39,0x39,0x32,0x45,0x45,0x33, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x42,0x61, - 0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73, - 0x68,0x6f,0x70,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x41,0x6e,0x63,0x65,0x73,0x74,0x6f,0x72, - 0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, - 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, - 0x31,0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x4f,0x72, - 0x69,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32, - 0x30,0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30, - 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x58,0x52,0x65, - 0x73,0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73,0x6f, - 0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x37,0x32,0x30, - 0x30,0x30,0x30,0x2f,0x31,0x30,0x30,0x30,0x30,0x3c, - 0x2f,0x74,0x69,0x66,0x66,0x3a,0x59,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74, - 0x69,0x66,0x66,0x3a,0x52,0x65,0x73,0x6f,0x6c,0x75, - 0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69,0x74,0x3e,0x32, - 0x3c,0x2f,0x74,0x69,0x66,0x66,0x3a,0x52,0x65,0x73, - 0x6f,0x6c,0x75,0x74,0x69,0x6f,0x6e,0x55,0x6e,0x69, - 0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x43,0x6f, - 0x6c,0x6f,0x72,0x53,0x70,0x61,0x63,0x65,0x3e,0x36, - 0x35,0x35,0x33,0x35,0x3c,0x2f,0x65,0x78,0x69,0x66, - 0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x53,0x70,0x61,0x63, - 0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x50,0x69, - 0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e,0x73, - 0x69,0x6f,0x6e,0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78, - 0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58,0x44, - 0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c, - 0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e, - 0x3e,0x33,0x37,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a, - 0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d,0x65, - 0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44, - 0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, - 0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66, - 0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a, - 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x0a,0x3c,0x3f,0x78, - 0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65,0x6e,0x64, - 0x3d,0x22,0x77,0x22,0x3f,0x3e,0x97,0x58,0x4c,0x05, - 0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00,0x00, - 0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9,0xff, - 0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00,0x00, - 0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17,0x6f, - 0x92,0x5f,0xc5,0x46,0x00,0x00,0x03,0x1e,0x49,0x44, - 0x41,0x54,0x78,0xda,0xd4,0xd8,0xdf,0x8b,0x55,0x55, - 0x14,0x07,0xf0,0xcf,0xbd,0x5c,0x4a,0x45,0xc2,0x14, - 0x53,0x64,0x9a,0x32,0x2b,0xc2,0x52,0x6b,0x34,0x72, - 0x7c,0xc8,0xa4,0x5f,0x98,0xd4,0x83,0x08,0x11,0x81, - 0xbd,0x04,0x41,0x0f,0x13,0x3d,0x0d,0xfd,0x03,0x3d, - 0xf4,0x10,0x66,0xbd,0x29,0x11,0x18,0x84,0x68,0xd2, - 0x4f,0x8b,0x02,0xab,0x79,0x98,0x14,0x7f,0x16,0x26, - 0xe2,0x0f,0x22,0xfb,0x61,0x38,0x26,0x51,0x43,0xea, - 0x54,0x4e,0x2f,0xeb,0xc0,0x61,0x73,0xee,0xb9,0xe7, - 0xcc,0x30,0xdd,0xfa,0xc2,0x61,0xdf,0xbb,0xcf,0xda, - 0x7b,0x7d,0xd9,0xeb,0xc7,0x5e,0xeb,0x34,0x06,0x07, - 0x07,0xd5,0xc4,0xad,0xd8,0x8d,0x9b,0xd0,0xe8,0x20, - 0xfb,0x23,0x1e,0xc2,0xb1,0x3a,0x0a,0x5a,0xea,0xe3, - 0x4b,0xcc,0xc6,0x11,0x9c,0x2d,0x91,0xbb,0x0e,0xcb, - 0xb1,0x07,0xf3,0xa7,0x92,0xd4,0xd2,0x20,0xf4,0x01, - 0x1e,0xad,0x20,0xbf,0x07,0x6b,0x70,0x0b,0x4e,0x56, - 0x55,0xd2,0xac,0x49,0xea,0xe6,0x18,0x0f,0x25,0xf3, - 0x4f,0xe3,0x0a,0x9e,0x49,0xe6,0x33,0xb3,0x2d,0xa9, - 0xa3,0xa4,0x69,0x62,0x18,0xcf,0xfd,0x9e,0x86,0xcd, - 0xe1,0x5f,0x9b,0xe2,0xff,0xa4,0xd0,0x34,0x79,0x6c, - 0xc7,0xf4,0x1c,0xc1,0x9d,0xdd,0x26,0x75,0x77,0x81, - 0x6f,0x3d,0x82,0x7b,0xba,0x49,0x6a,0x57,0x41,0x5a, - 0x68,0xe0,0xed,0x6e,0x92,0x9a,0x57,0x92,0x0e,0x26, - 0x8c,0xd6,0x24,0x49,0x5d,0x65,0x0a,0xd0,0xf4,0x1f, - 0x44,0xfe,0xa4,0x16,0xa3,0xaf,0x83,0xfc,0x8a,0x09, - 0xea,0xb9,0x17,0x33,0x3a,0xc8,0x1c,0xc1,0xd1,0x8c, - 0xd4,0x6d,0x18,0xc2,0xdc,0x1a,0x4a,0xce,0x54,0x94, - 0x3b,0x15,0xe3,0x73,0x15,0xe5,0x2f,0xa0,0xbf,0x85, - 0xcf,0x82,0xd0,0x27,0xf8,0xa6,0xc2,0xc2,0xd3,0x78, - 0xbd,0xa2,0x92,0x4d,0xf8,0x1b,0x0b,0x2b,0xc8,0x2e, - 0xc2,0x63,0xf8,0xb0,0x15,0x97,0xe5,0x7e,0x3c,0x5c, - 0x20,0x38,0x03,0x0f,0xe2,0xdd,0x0e,0x1b,0xce,0x8c, - 0xcb,0xf7,0x20,0x46,0x93,0x77,0xaf,0x16,0xb8,0xcc, - 0x5f,0x6d,0xf6,0xf9,0x0a,0x4b,0x9a,0xb9,0x63,0x4b, - 0xf1,0x14,0x7e,0xc1,0x3b,0xb8,0xa3,0x24,0xfa,0x86, - 0xf1,0x3b,0x3e,0x8f,0x71,0xb8,0x43,0x54,0x5e,0xc6, - 0xcf,0xe1,0x67,0x29,0xce,0xa2,0xd1,0x6c,0x93,0x63, - 0x0e,0xe2,0x8d,0xdc,0x3d,0x36,0xb3,0x8d,0x82,0x2f, - 0xd0,0x1f,0x3e,0xb6,0x2d,0xc6,0xfe,0x98,0x2f,0x8b, - 0xf8,0x79,0x21,0xf3,0x71,0xd1,0xde,0x29,0xa9,0x17, - 0xa2,0x30,0xeb,0x8b,0x48,0x78,0xab,0x64,0xf3,0x59, - 0x58,0x89,0xef,0x70,0x03,0x36,0xc6,0x78,0x26,0xe6, - 0xaf,0x29,0x59,0xfb,0x35,0x7e,0x08,0x97,0x39,0x8f, - 0x67,0xdb,0x91,0x9a,0x86,0x17,0xc3,0xe6,0x1f,0x45, - 0xb9,0x71,0xa1,0x64,0xe3,0xcc,0xa4,0x43,0xc9,0xfc, - 0x50,0xf2,0x5e,0x1b,0x33,0x5d,0x8f,0xc3,0xb8,0x1a, - 0xaf,0xb5,0x23,0x75,0x09,0x83,0xf8,0x13,0x6b,0xe3, - 0xa4,0x66,0x97,0x6c,0x7c,0x34,0xc6,0xd5,0x05,0x39, - 0x69,0x3c,0xf7,0xbe,0x08,0xf3,0xf1,0x3d,0xee,0xc2, - 0x58,0x9a,0x32,0x52,0xf3,0xbd,0x84,0x05,0xe1,0x53, - 0xb7,0xe3,0x89,0x92,0x8d,0x7f,0xc5,0x5e,0xf4,0x86, - 0x09,0xdf,0x8c,0xb1,0x17,0xfb,0xf0,0x5b,0xc9,0xda, - 0x65,0xe8,0xc1,0xa7,0x98,0x93,0x46,0x68,0x91,0xa3, - 0x9f,0x8f,0xcc,0xbd,0x31,0x4e,0x4f,0x89,0x82,0xd5, - 0x51,0xb3,0xf7,0xe2,0xc9,0x30,0xc9,0x70,0xc1,0xe9, - 0xe5,0x71,0x05,0x23,0xb8,0x2f,0x9a,0x8a,0xd1,0xa2, - 0x6b,0x66,0x3c,0x4e,0x27,0xc5,0x36,0xec,0x08,0x67, - 0x6c,0xd7,0x8d,0x8c,0x61,0x55,0x44,0x50,0x5f,0x94, - 0xc9,0xa3,0x1d,0x72,0xda,0xf4,0x58,0x57,0x84,0x39, - 0x19,0xa9,0xd3,0xe1,0xd4,0xef,0xe5,0xae,0x85,0xa2, - 0x13,0xc9,0xf0,0x6d,0x41,0x42,0x1c,0x2d,0x70,0xf8, - 0x0c,0x03,0xb8,0xb1,0x42,0x46,0x5f,0x16,0x16,0xfa, - 0xa9,0x85,0x75,0xe1,0x03,0x55,0xba,0x93,0x0c,0x17, - 0xb1,0xb5,0x82,0xdc,0xf3,0x78,0xb9,0xc6,0xbe,0x23, - 0xb8,0xbf,0x85,0x13,0xb8,0x36,0xaa,0x84,0x3b,0x3b, - 0x94,0x33,0x2b,0x22,0x52,0x7a,0x2a,0x2a,0x59,0x14, - 0xe3,0x2b,0x38,0xd0,0xc1,0xcf,0x0e,0xe1,0x78,0x5a, - 0xba,0x1c,0xab,0xd0,0xc9,0xfe,0x51,0xe3,0xc6,0x4f, - 0x73,0xd7,0xae,0xff,0x75,0x91,0x37,0x59,0x52,0x63, - 0x11,0xbd,0xe9,0x73,0xb9,0x9b,0xa4,0x46,0xda,0xcc, - 0x9f,0xeb,0x26,0xa9,0xf5,0x49,0xb7,0x9c,0x75,0xcf, - 0xeb,0xbb,0x49,0x6a,0x5f,0x7c,0x16,0xca,0xe3,0xfd, - 0x28,0x1a,0xbb,0xda,0xcd,0x6c,0xc8,0x5d,0x47,0x97, - 0xf0,0x78,0xb7,0x1c,0xbd,0x91,0x54,0x17,0x03,0x61, - 0xb6,0x81,0x1c,0xc1,0x7f,0xad,0x19,0xcd,0xca,0x91, - 0x55,0xc9,0xfc,0x96,0x78,0x52,0x2c,0x4c,0x3e,0x09, - 0x4d,0x09,0xa9,0x13,0x11,0x59,0x0f,0x44,0x86,0x2e, - 0x8b,0xb2,0x9e,0x5c,0xa1,0x78,0x7c,0xaa,0xdb,0xf6, - 0x35,0xd1,0x8e,0x2d,0xaf,0xf0,0x0d,0xeb,0x54,0x7c, - 0x85,0xa9,0x85,0x7f,0x06,0x00,0xf4,0x2d,0xa8,0xcd, - 0x56,0x9a,0xd2,0xb6,0x00,0x00,0x00,0x00,0x49,0x45, - 0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_dpad_up_png.cpp b/data/converted/help_dpad_up_png.cpp deleted file mode 100644 index e910243ac..000000000 --- a/data/converted/help_dpad_up_png.cpp +++ /dev/null @@ -1,188 +0,0 @@ -//this file was auto-generated from "dpad_up.png" by res2h - -#include "../Resources.h" - -const size_t help_dpad_up_png_size = 1804; -const unsigned char help_dpad_up_png_data[1804] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x25, - 0x00,0x00,0x00,0x25,0x08,0x06,0x00,0x00,0x00,0xc5, - 0x9e,0x20,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x41, - 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31,0x37,0x39, - 0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x46,0x30,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0xe2,0x6a,0x11,0x2f,0x00,0x00,0x03,0x3a,0x49,0x44, - 0x41,0x54,0x78,0xda,0xd4,0x98,0x5b,0x6c,0x0c,0x51, - 0x18,0xc7,0x67,0xd7,0x68,0x85,0xad,0x07,0x75,0x29, - 0x2d,0x21,0xa9,0x4b,0x88,0x54,0x22,0x12,0x44,0x52, - 0x25,0x11,0xe2,0x16,0x0f,0x62,0x3d,0x89,0x3e,0x68, - 0x11,0xaa,0x41,0xb6,0x45,0xdc,0x2a,0x4b,0xe2,0x52, - 0x69,0x44,0x2a,0x78,0xf0,0x42,0x89,0x27,0x22,0x5e, - 0xdc,0xe2,0x65,0x2b,0xc1,0x83,0x5b,0x10,0x2a,0xa1, - 0x94,0x76,0x11,0x34,0xd4,0xa4,0x2e,0xff,0x2f,0xf9, - 0x37,0xd9,0x9c,0xcc,0xcc,0x99,0xd9,0xb5,0x86,0x2f, - 0xf9,0x65,0x76,0xcf,0x9c,0xcb,0x77,0xce,0xf9,0xce, - 0xf7,0x7d,0x67,0x42,0xb1,0x58,0xcc,0xf0,0x29,0x03, - 0xc1,0x41,0xb0,0x04,0xe4,0xb9,0xd4,0xfb,0x0a,0x2e, - 0x83,0x35,0xa0,0xdd,0xcf,0x00,0xa6,0xe1,0x5f,0x9a, - 0xc0,0x34,0x70,0x1c,0xb4,0xb9,0xd4,0x1b,0x0c,0x2a, - 0xc1,0x09,0xb0,0x28,0x9b,0x4a,0x15,0x80,0xd9,0x60, - 0x33,0x38,0xe0,0xa1,0xfe,0x27,0xb0,0x03,0xe4,0x83, - 0xf7,0x5e,0x07,0x09,0xfb,0x54,0x6a,0x10,0x9f,0x8f, - 0x95,0xf2,0xa9,0x20,0x09,0xa6,0x2b,0xe5,0xcf,0x38, - 0xc6,0x30,0x3f,0x83,0x84,0x8d,0xf4,0xe4,0x97,0xb2, - 0xda,0x8d,0x5c,0x8d,0xc6,0x34,0x4d,0xe2,0x8f,0x28, - 0x95,0x2a,0xeb,0x41,0x09,0x7f,0x4f,0x04,0xd5,0x41, - 0x2b,0x55,0x04,0x76,0x29,0x65,0xdb,0xc1,0xf0,0x20, - 0x95,0xaa,0x07,0x11,0xa5,0x2c,0xc2,0xf2,0xc0,0x94, - 0x2a,0x71,0x28,0x9f,0x94,0x49,0xa7,0x99,0x1a,0xe5, - 0x18,0x23,0x0b,0x12,0x36,0xfe,0x41,0x31,0x15,0x0f, - 0xac,0x33,0xd0,0xe2,0x34,0xc7,0x19,0x0f,0x72,0x34, - 0x75,0x5a,0xc1,0xbb,0x1e,0xa5,0xc4,0x21,0x9e,0x02, - 0xf3,0x7c,0xf8,0xa8,0xa4,0xc7,0xba,0x6f,0x58,0xbf, - 0xc9,0x63,0xfd,0xab,0x20,0x6a,0x32,0x36,0x95,0x82, - 0x2d,0xf4,0xc0,0x3a,0x79,0x0b,0x6e,0x79,0x1c,0xe4, - 0x06,0x98,0x09,0x86,0x78,0xa8,0x2b,0xbb,0x54,0x07, - 0xf6,0x8b,0x52,0x73,0x41,0x03,0xd8,0x6b,0x53,0xb1, - 0x37,0x8d,0xf9,0xa1,0xa6,0xc3,0x1c,0xfa,0x2c,0xd9, - 0x02,0x4b,0x79,0x77,0xd3,0xc6,0x8e,0x7f,0x3a,0xf4, - 0x33,0x0a,0xac,0x08,0xb3,0x43,0xbb,0x60,0x39,0x05, - 0xdc,0x06,0xf7,0x5d,0x66,0xda,0x0b,0xc4,0xc1,0x47, - 0xf0,0x9c,0xcf,0x38,0xcb,0x9d,0xe4,0x35,0xb8,0x48, - 0x05,0xec,0xde,0xe5,0xd9,0x9d,0xbe,0x7e,0xe0,0x10, - 0x48,0xd0,0x40,0x43,0x20,0xd7,0x61,0x80,0x3d,0xa0, - 0x16,0x5c,0x00,0xab,0xf8,0xac,0x65,0xb9,0x5b,0xa6, - 0xb1,0x80,0xab,0x5f,0x63,0x77,0x00,0x54,0xa5,0xe6, - 0x70,0x65,0xaa,0xc0,0x31,0xb0,0xce,0xa5,0xf3,0x3e, - 0x8c,0x7b,0x67,0xc0,0x72,0xe6,0x57,0xf2,0x3c,0xcb, - 0x76,0xb9,0x2e,0x6d,0x8f,0x80,0x4b,0x34,0x99,0xbb, - 0x60,0x86,0x93,0x52,0x66,0xca,0xb2,0x8a,0xd1,0xaf, - 0x05,0x9f,0x35,0x33,0xee,0x0b,0xae,0x2b,0xe5,0xd7, - 0xb8,0xda,0x05,0x9a,0x2d,0x5c,0x0a,0x0e,0x83,0x09, - 0x1c,0xd7,0x56,0xa9,0x6e,0x30,0x1f,0xb4,0x70,0x06, - 0x47,0x41,0x7f,0xcd,0x29,0x94,0x94,0x77,0x96,0x52, - 0x2e,0xff,0x3b,0xf9,0xde,0x49,0x24,0xbf,0x3a,0x07, - 0x36,0x30,0x37,0x5b,0xec,0x16,0x66,0xae,0x30,0xfd, - 0xa8,0xe3,0xd6,0xb8,0x49,0x17,0x4f,0x6d,0x8d,0x72, - 0xfc,0x97,0x81,0x7d,0xe0,0xbb,0x4b,0x5b,0xd9,0xde, - 0x6f,0x60,0x2b,0x33,0x58,0x4b,0x17,0xfb,0x64,0xf6, - 0x1b,0x69,0x2b,0x27,0xa9,0x64,0x97,0x43,0xe7,0xdb, - 0xe8,0x1c,0xc5,0x06,0xa3,0x5c,0xa1,0x38,0xd3,0x17, - 0x27,0x11,0xaf,0x7d,0x87,0x8a,0xb5,0x38,0x85,0x99, - 0x4e,0xfa,0x18,0x55,0xc4,0x1d,0x4c,0x06,0x63,0x5d, - 0x6e,0x23,0x3f,0x68,0x7f,0x3b,0x41,0x21,0x6d,0xc5, - 0xd2,0xac,0x70,0x21,0xdb,0x39,0xdd,0x94,0x2c,0x51, - 0xea,0x3c,0x58,0x09,0x5e,0x80,0x97,0x2e,0xb1,0x2b, - 0x75,0xa6,0xaa,0x43,0xb4,0xd8,0xde,0x4e,0x4a,0x19, - 0x57,0x75,0x32,0x0e,0xac,0x96,0x53,0x69,0xf2,0x66, - 0x32,0xd2,0xe3,0xed,0xa4,0x27,0xf6,0xc9,0x05,0xa1, - 0xd9,0x43,0xdd,0x32,0xc6,0xb3,0x90,0xc7,0x7e,0xe5, - 0x9e,0x58,0x61,0x32,0xb8,0x96,0x71,0x36,0x45,0x9a, - 0x0e,0x8a,0x19,0x5c,0xf3,0x3d,0x4e,0x60,0x28,0xfb, - 0x8b,0x6a,0xe2,0xaa,0x28,0xf4,0x0a,0x74,0xa8,0x86, - 0xde,0xee,0xe1,0x26,0x6b,0x19,0xe9,0xc9,0x23,0x3a, - 0xe5,0xff,0x37,0xc9,0xcb,0x54,0xa9,0xa7,0x5c,0x7a, - 0x95,0x27,0x41,0xe6,0xe8,0x0f,0xc0,0x68,0x70,0x9a, - 0x36,0x31,0x82,0xf1,0xef,0x5e,0x90,0x2b,0x55,0x45, - 0x3f,0x17,0xa1,0x67,0x8f,0xf0,0x7f,0x75,0x90,0x4a, - 0xc9,0xea,0xec,0xe6,0x57,0x15,0xb9,0xb2,0x2f,0xe4, - 0x07,0x8d,0xd6,0xa0,0x6f,0x33,0xf5,0x3c,0x59,0x15, - 0xdc,0xb6,0x86,0xa0,0x0c,0x3d,0xa4,0x64,0x17,0xa2, - 0xd0,0x07,0x7e,0x8f,0xea,0xfe,0xdb,0x4a,0xb5,0x31, - 0xbf,0x56,0x6f,0xc6,0x09,0x3a,0xd4,0x84,0xcd,0xb7, - 0x06,0x43,0x93,0xc6,0x64,0x7c,0xfa,0x92,0x0c,0x05, - 0x12,0x84,0x07,0x68,0x9c,0xad,0xdc,0x4e,0xca,0x99, - 0x0e,0x75,0x64,0xdb,0x25,0x94,0x33,0x01,0xac,0x64, - 0xe6,0xe9,0x24,0x5f,0x98,0x1a,0x6f,0xf2,0x3b,0xc0, - 0x6f,0x01,0x06,0x00,0x54,0xe1,0xb4,0xc2,0x8e,0x39, - 0x5d,0xa2,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_dpad_up_svg.cpp b/data/converted/help_dpad_up_svg.cpp new file mode 100644 index 000000000..405eb43dc --- /dev/null +++ b/data/converted/help_dpad_up_svg.cpp @@ -0,0 +1,329 @@ +//this file was auto-generated from "dpad_up.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_up_svg_size = 3219; +const unsigned char help_dpad_up_svg_data[3219] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, + 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, + 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, + 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, + 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, + 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, + 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, + 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, + 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, + 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, + 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, + 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, + 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, + 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, + 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, + 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, + 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, + 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, + 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, + 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, + 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, + 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, + 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, + 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, + 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, + 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, + 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, + 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, + 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, + 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, + 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x34, + 0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e, + 0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, + 0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38, + 0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e, + 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c, + 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, + 0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32,0x39,0x32, + 0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32,0x32,0x2e, + 0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34,0x35,0x2c, + 0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20,0x4d,0x34, + 0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, + 0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c, + 0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, + 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, + 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, + 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, + 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, + 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, + 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, + 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, + 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, + 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, + 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, + 0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c, + 0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e, + 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e, + 0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e, + 0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32, + 0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39, + 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36, + 0x35,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32, + 0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33, + 0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, + 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37, + 0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36, + 0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34, + 0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38, + 0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e, + 0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30, + 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e, + 0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43, + 0x31,0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35, + 0x33,0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c, + 0x33,0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, + 0x7a,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, + 0x32,0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36, + 0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a, + 0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d, + 0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39, + 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_dpad_updown_svg.cpp b/data/converted/help_dpad_updown_svg.cpp new file mode 100644 index 000000000..9e5d79ff1 --- /dev/null +++ b/data/converted/help_dpad_updown_svg.cpp @@ -0,0 +1,337 @@ +//this file was auto-generated from "dpad_updown.svg" by res2h + +#include "../Resources.h" + +const size_t help_dpad_updown_svg_size = 3298; +const unsigned char help_dpad_updown_svg_data[3298] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, + 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, + 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, + 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, + 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, + 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, + 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, + 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, + 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, + 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, + 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, + 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, + 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, + 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, + 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, + 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, + 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, + 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, + 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, + 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, + 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, + 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, + 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, + 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, + 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, + 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, + 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, + 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, + 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, + 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, + 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, + 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, + 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, + 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, + 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, + 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, + 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, + 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, + 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, + 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x34, + 0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e, + 0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, + 0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38, + 0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e, + 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c, + 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, + 0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32,0x39,0x32, + 0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32,0x32,0x2e, + 0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34,0x35,0x2c, + 0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20,0x4d,0x34, + 0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, + 0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c, + 0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, + 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, + 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, + 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, + 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, + 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, + 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, + 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, + 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, + 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, + 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, + 0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c, + 0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e, + 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c, + 0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e, + 0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e, + 0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32, + 0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39, + 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31, + 0x35,0x6c,0x33,0x2e,0x30,0x30,0x36,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31, + 0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x33, + 0x2e,0x39,0x31,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, + 0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, + 0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32,0x35, + 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d, + 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31, + 0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e, + 0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34, + 0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e, + 0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d, + 0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36, + 0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, + 0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e, + 0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c, + 0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e,0x32, + 0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e, + 0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c, + 0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30, + 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31, + 0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35,0x33, + 0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x7a, + 0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x32, + 0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36,0x33, + 0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/help_l_png.cpp b/data/converted/help_l_png.cpp deleted file mode 100644 index b03a58ccc..000000000 --- a/data/converted/help_l_png.cpp +++ /dev/null @@ -1,154 +0,0 @@ -//this file was auto-generated from "l.png" by res2h - -#include "../Resources.h" - -const size_t help_l_png_size = 1464; -const unsigned char help_l_png_data[1464] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, - 0x00,0x00,0x00,0x13,0x08,0x06,0x00,0x00,0x00,0xe2, - 0x43,0x4f,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, - 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x41,0x46,0x45,0x45,0x44,0x32,0x37,0x44, - 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x41,0x46,0x45,0x45,0x44,0x32,0x37,0x43, - 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, - 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, - 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0xc2,0x6d,0x14,0xe5,0x00,0x00,0x01,0xe6,0x49,0x44, - 0x41,0x54,0x78,0xda,0xcc,0xd6,0xcf,0x4b,0x54,0x51, - 0x18,0xc6,0xf1,0x3b,0xb7,0x31,0x15,0x45,0x2c,0x1c, - 0x1b,0x14,0x67,0xe5,0x22,0xd0,0x8a,0x10,0x5a,0x68, - 0x44,0x8b,0x16,0x09,0xea,0x84,0x9b,0xf0,0x47,0x8b, - 0x84,0xd0,0x64,0x68,0x13,0x34,0xfe,0x0f,0x41,0x81, - 0x88,0x46,0x14,0x04,0x29,0x2d,0x4a,0x34,0x88,0x02, - 0xb7,0x62,0xa0,0x4c,0x8b,0x8a,0x14,0x14,0x17,0xda, - 0x42,0x6b,0x6a,0x91,0x65,0x90,0x3f,0xd0,0xef,0x81, - 0xe7,0xc2,0xe5,0xa2,0x41,0x33,0x77,0xa6,0xfb,0xc2, - 0x07,0x74,0xee,0x70,0xe6,0xe1,0x1e,0xce,0x79,0xdf, - 0x50,0x32,0x99,0xb4,0x3c,0x15,0x42,0x1b,0xba,0xd0, - 0x88,0x28,0x8e,0x58,0xb9,0xab,0x75,0xcc,0xe2,0x19, - 0x5e,0x60,0xd7,0xfd,0x30,0xec,0xf9,0xf2,0x49,0x3c, - 0x56,0x30,0xa7,0x7e,0xe3,0x4f,0x8e,0xc2,0x15,0xe8, - 0x05,0xc4,0xe5,0x03,0x3a,0xf1,0xe9,0xa0,0x80,0xe7, - 0xf0,0x06,0xc7,0x31,0x8f,0xbb,0x78,0x8d,0xaf,0x56, - 0x6e,0xab,0x02,0x97,0x71,0x07,0xa7,0x31,0x8d,0x16, - 0xbc,0x35,0x0f,0x6d,0x7d,0xa9,0x06,0xaf,0x14,0xee, - 0x01,0xce,0xe2,0x49,0x1e,0xc2,0x99,0xfa,0x86,0x51, - 0x34,0xe0,0x1e,0x8e,0x61,0x02,0x55,0xee,0x80,0xf7, - 0x11,0xc1,0x53,0xdc,0xc4,0x96,0x95,0xff,0xda,0xc6, - 0x6d,0xbd,0x98,0x4a,0x0c,0x39,0x01,0x4f,0xa1,0x1d, - 0x5f,0xd0,0x9f,0xc5,0x0f,0xc4,0xf4,0x16,0xb2,0xad, - 0x04,0xd6,0x70,0xc5,0x6c,0xb9,0x09,0x78,0x5d,0x27, - 0x77,0x10,0xbf,0xb2,0x58,0x78,0x00,0x29,0x1f,0x02, - 0x6e,0xea,0xed,0x99,0x4c,0x1d,0x26,0xe0,0x05,0x3d, - 0x78,0x69,0x05,0xa7,0x9c,0x2c,0x97,0x6c,0x1d,0x90, - 0x6d,0x9d,0xdc,0xa0,0x94,0xc9,0xb2,0x63,0xae,0x3d, - 0x5b,0x87,0xe3,0x07,0xf6,0x02,0x14,0xd0,0x64,0xd9, - 0x40,0x89,0xad,0x3d,0x2f,0xd7,0x9e,0x07,0xa5,0x4c, - 0xae,0x32,0xa4,0xcd,0x1f,0x0b,0xba,0xb0,0xeb,0x7d, - 0x5a,0xbc,0xc1,0x25,0x96,0xe1,0x1a,0x75,0xca,0xb4, - 0x62,0x02,0x4e,0xe9,0xc3,0xb8,0x4f,0x01,0x53,0x2e, - 0x03,0x19,0xae,0xe1,0x64,0x99,0x0e,0x31,0x2c,0xd4, - 0xa9,0x07,0x9a,0x1b,0xbd,0x16,0x3f,0xb3,0xb8,0x07, - 0x23,0x9e,0xcf,0xd2,0x58,0xfd,0xc7,0x75,0x4a,0xb1, - 0xac,0xb5,0xce,0x84,0xd5,0x98,0x9f,0xe3,0x2a,0x46, - 0xd0,0x9d,0x61,0xc0,0xd5,0x0c,0xc2,0x1c,0x54,0xc3, - 0xea,0x24,0xe3,0xf8,0xe8,0xb4,0xba,0x5b,0xba,0xbd, - 0xbb,0x14,0xb2,0xf0,0x3f,0x1c,0x8c,0xa3,0x9a,0x03, - 0xae,0x69,0x04,0x4b,0xb8,0x7b,0xb1,0x19,0x0a,0x5a, - 0xb5,0x25,0x7d,0xda,0xf2,0x1b,0xa8,0xce,0xc3,0xe9, - 0x8e,0xaa,0x9b,0xbd,0x47,0x2f,0xbe,0x2b,0xcb,0xba, - 0x77,0xdc,0x7a,0x87,0x26,0x3c,0x52,0x77,0x79,0xf8, - 0x97,0x56,0xe4,0xd7,0x30,0x51,0x8c,0x22,0xd7,0xff, - 0x33,0xe8,0xc1,0xe2,0x61,0x03,0xeb,0x12,0x2e,0xa2, - 0x59,0x83,0xe3,0x79,0x9c,0xf0,0x2c,0x52,0x22,0x7e, - 0x4d,0x30,0x9f,0x31,0x87,0x31,0x4c,0x7a,0x1b,0xc6, - 0xbe,0x00,0x03,0x00,0xc2,0x08,0x63,0xad,0xd8,0xa6, - 0xa9,0xf6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_r_png.cpp b/data/converted/help_r_png.cpp deleted file mode 100644 index 33de5f230..000000000 --- a/data/converted/help_r_png.cpp +++ /dev/null @@ -1,157 +0,0 @@ -//this file was auto-generated from "r.png" by res2h - -#include "../Resources.h" - -const size_t help_r_png_size = 1495; -const unsigned char help_r_png_data[1495] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, - 0x00,0x00,0x00,0x13,0x08,0x06,0x00,0x00,0x00,0xe2, - 0x43,0x4f,0x03,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, - 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34,0x37,0x38, - 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34,0x37,0x37, - 0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, - 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x33,0x38,0x45,0x38,0x44,0x46,0x33,0x39, - 0x31,0x38,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0xde,0xa7,0x8d,0x87,0x00,0x00,0x02,0x05,0x49,0x44, - 0x41,0x54,0x78,0xda,0xcc,0xd6,0x4b,0x48,0x54,0x71, - 0x14,0xc7,0xf1,0x3b,0xb7,0x91,0x4c,0x09,0xec,0x2d, - 0x49,0xcb,0xb0,0x85,0x05,0x61,0x14,0x54,0x44,0x90, - 0x82,0x82,0x3a,0x83,0xad,0x46,0x41,0x34,0x10,0x4a, - 0xd4,0x4d,0xd0,0x14,0xb4,0x68,0x1f,0x14,0x44,0x90, - 0x48,0x81,0x90,0x52,0xa0,0xa4,0x42,0x24,0x84,0x0b, - 0x41,0x0c,0x0a,0x5c,0x68,0xa4,0xa0,0x08,0xb6,0xca, - 0x47,0x2d,0x02,0x13,0xf2,0x51,0x7d,0x0f,0xfc,0x2e, - 0xdc,0x86,0x0a,0x9c,0x7b,0x67,0xec,0xc0,0x07,0x66, - 0xee,0xe3,0xcf,0xb9,0xff,0xc7,0xf9,0xff,0x23,0xc9, - 0x64,0xd2,0x49,0x89,0x08,0x6a,0x50,0x8f,0xb3,0x28, - 0xc4,0x0e,0x27,0x73,0xb1,0x80,0xb7,0x78,0x86,0x3e, - 0x6c,0xfa,0x6f,0x46,0x53,0x1e,0x3e,0x86,0x27,0x4a, - 0xcc,0x8b,0x55,0x7c,0xcf,0x50,0x72,0x39,0xea,0x80, - 0x98,0x4c,0xa2,0x0e,0x1f,0xfe,0x94,0xe0,0x69,0x0c, - 0x61,0x2f,0xa6,0x70,0x17,0xaf,0xb0,0xe4,0x64,0x36, - 0xf6,0xa3,0x02,0x37,0x70,0x02,0xa3,0xa8,0xc2,0x1b, - 0xbb,0xe9,0xea,0xa1,0x23,0x78,0xa9,0xe4,0x3a,0x70, - 0x12,0x5d,0x59,0x48,0xce,0xe2,0x33,0xba,0x51,0x8a, - 0x7b,0xd8,0x83,0x7e,0x1c,0xf6,0x27,0x78,0x1f,0x07, - 0xf0,0x14,0xd7,0xb0,0xe6,0x64,0x3f,0xd6,0x71,0x5d, - 0x1d,0x73,0x10,0x0f,0xbd,0x04,0x8f,0xa3,0x16,0x8b, - 0x68,0x71,0xb6,0x3f,0x5a,0xf1,0x09,0x71,0x1b,0x72, - 0x4b,0xb0,0x49,0x2b,0xf7,0x01,0x56,0x02,0x34,0xfc, - 0x33,0xc5,0xb4,0xa6,0xca,0x56,0xe3,0x9b,0x7a,0xcf, - 0x72,0x4a,0x58,0x82,0x17,0x74,0x63,0x30,0x84,0xaf, - 0xb7,0xe1,0x39,0x85,0x4b,0xd8,0x87,0x3b,0x69,0xb6, - 0xe3,0xe5,0x52,0x16,0xd5,0x02,0x59,0xd7,0xca,0x0d, - 0xa3,0xa6,0x8d,0xeb,0xeb,0x97,0x7c,0x73,0x7c,0xab, - 0x61,0xb9,0x6c,0x58,0xd9,0x8b,0x6a,0x71,0x7c,0xd1, - 0xb0,0x04,0x8d,0x46,0x94,0xab,0x4d,0xab,0x08,0x89, - 0x00,0xd3,0xe5,0xab,0xb5,0xe1,0x6a,0xcc,0x0b,0xf4, - 0xd5,0x41,0x63,0x04,0x37,0x71,0x5b,0x45,0x38,0x1e, - 0xa0,0xad,0x3c,0x2c,0xbb,0x9a,0xcc,0xd6,0x93,0x25, - 0x21,0x24,0x38,0x8f,0x61,0x95,0x2b,0x1b,0xea,0x33, - 0x69,0xb6,0x73,0x08,0xbb,0xf0,0xd1,0x12,0x7c,0xad, - 0x8b,0xb1,0x90,0xcb,0xc5,0x1c,0x8e,0xa6,0xf9,0xae, - 0xb7,0xd5,0x8e,0xba,0xda,0xa4,0x7f,0xa0,0x0d,0xbb, - 0x03,0x24,0x64,0x53,0xe4,0x96,0xef,0x7f,0x03,0x8a, - 0xd3,0x6c,0x2b,0xa1,0x79,0xd8,0xe5,0x6a,0x63,0xee, - 0x55,0xf5,0x7e,0xf4,0x1f,0x14,0x6a,0xdb,0xf2,0x2e, - 0xe3,0x05,0xde,0x7b,0x65,0xa0,0x5d,0xd5,0xbb,0x5e, - 0x49,0xee,0xdc,0xa6,0xe4,0x8a,0xf0,0x5c,0x25,0xaa, - 0xd5,0xbf,0x17,0xdb,0x85,0x6a,0x5b,0x35,0xb8,0xaa, - 0x63,0x4f,0xb3,0x5e,0x88,0x64,0x29,0x31,0x9b,0x62, - 0x13,0x3a,0x2c,0x54,0xab,0xa6,0xfe,0x76,0xdc,0xb2, - 0x55,0x77,0x0e,0x8f,0xb5,0xbb,0x74,0xfe,0x63,0x2b, - 0x0a,0xf3,0x30,0x61,0xab,0x35,0x57,0xbf,0xc7,0x70, - 0x05,0x33,0x7f,0x3b,0xb0,0xce,0xe2,0x22,0x2a,0x75, - 0x70,0x3c,0xaf,0x25,0x9f,0xeb,0x7b,0x26,0x5f,0xc2, - 0x3a,0xc1,0x58,0x4f,0xbd,0x43,0x0f,0x06,0x52,0x37, - 0x8c,0x5f,0x02,0x0c,0x00,0xae,0xe8,0x68,0xbc,0x71, - 0xf2,0x9e,0xc2,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_select_png.cpp b/data/converted/help_select_png.cpp deleted file mode 100644 index 676d3d03d..000000000 --- a/data/converted/help_select_png.cpp +++ /dev/null @@ -1,155 +0,0 @@ -//this file was auto-generated from "select.png" by res2h - -#include "../Resources.h" - -const size_t help_select_png_size = 1477; -const unsigned char help_select_png_data[1477] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, - 0x00,0x00,0x00,0x14,0x08,0x06,0x00,0x00,0x00,0xff, - 0x46,0x7f,0xbb,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x37,0x33,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x37,0x34,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x37,0x31,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x37,0x32,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0xb2,0xa8,0xe0,0x6c,0x00,0x00,0x02,0x37, - 0x49,0x44,0x41,0x54,0x78,0xda,0xcc,0x95,0x5f,0x68, - 0xce,0x51,0x18,0xc7,0xcf,0xfb,0xdb,0x5b,0x2e,0x69, - 0x91,0x45,0xfe,0xc4,0x90,0x0b,0x85,0x49,0x8d,0xb4, - 0x76,0xb7,0xa4,0x94,0xa4,0xec,0x6a,0x73,0x49,0xca, - 0x85,0x7a,0xb1,0x62,0x69,0x17,0x16,0x17,0xd2,0x1b, - 0x56,0xd2,0x2e,0xb4,0x76,0x61,0x6a,0x85,0x6c,0x49, - 0x66,0x92,0xfc,0x5b,0xb8,0x40,0x34,0x11,0xb5,0x85, - 0xa2,0xd7,0x9f,0xf9,0x37,0x3e,0x4f,0x7d,0x7f,0x75, - 0x1c,0x7b,0x5f,0xbd,0x25,0xce,0x53,0x9f,0xce,0xf9, - 0x3d,0xbf,0xdf,0x73,0xce,0xf7,0x3c,0xe7,0x39,0xbf, - 0x93,0xc9,0xe5,0x72,0x73,0x9d,0x73,0xc7,0xa1,0x0e, - 0xde,0xc3,0x59,0xd8,0x01,0xef,0xe0,0x04,0x2c,0x75, - 0xbf,0x5a,0x27,0xe4,0xe1,0x96,0xbe,0xbb,0x1a,0xbc, - 0xb7,0xf8,0xaa,0xc0,0x97,0x57,0xdc,0x54,0x38,0x02, - 0x6b,0xe1,0x07,0xf4,0xc2,0x4e,0x78,0x0d,0xdd,0x50, - 0x1d,0xc4,0xb9,0x2c,0x1c,0x82,0x59,0xb0,0x11,0x2a, - 0xe1,0x30,0x7c,0x84,0x6d,0xb0,0x08,0x0a,0x70,0xc1, - 0x8b,0xb9,0xaf,0xb6,0x06,0x26,0xbb,0xdf,0x6d,0x09, - 0xdc,0x81,0xeb,0x9e,0xef,0xa1,0x5a,0x13,0x34,0x1d, - 0x9a,0x61,0x12,0xb4,0xc1,0x69,0xa8,0x87,0x7e,0x18, - 0x82,0x06,0x2d,0xb0,0x33,0x15,0xb8,0x10,0x06,0xe1, - 0x9c,0x06,0xb1,0xd5,0x4c,0xf3,0x06,0xb7,0x89,0xda, - 0x5d,0x79,0x66,0x93,0x1d,0x0b,0x7c,0x2b,0x60,0x95, - 0xc4,0x5c,0x96,0x6f,0x14,0x2e,0xc1,0x32,0x38,0x29, - 0xdf,0x14,0x2d,0xb2,0x3d,0x15,0x78,0x1e,0x72,0xb0, - 0x12,0x6e,0x2b,0xb8,0xdb,0x1b,0xb8,0x41,0x99,0x4d, - 0xad,0x0b,0x06,0xfe,0x20,0xb0,0x31,0x28,0x8d,0xbc, - 0x44,0x7c,0x81,0x2b,0x9e,0xdf,0xfa,0xf3,0x61,0xa4, - 0xd8,0x40,0x09,0xec,0x81,0x4d,0x70,0x17,0x56,0xc3, - 0x29,0xe8,0x71,0x7f,0xdf,0xbe,0xc3,0x27,0x18,0x0f, - 0x7c,0xc3,0x2a,0xa9,0x09,0xcd,0x32,0xb8,0x5f,0x59, - 0x6c,0x96,0xaf,0x15,0xf6,0x42,0x85,0x9e,0xad,0xfe, - 0x76,0x97,0x29,0xa6,0x6b,0x82,0x2d,0xae,0x54,0xcd, - 0x2e,0x80,0xc7,0xf2,0x2d,0xd7,0xae,0x59,0x62,0xae, - 0x15,0x13,0xb8,0x4e,0x75,0xb1,0x19,0xde,0xe8,0xc0, - 0x8c,0x6a,0x75,0x4e,0x05,0x5b,0xe3,0xc5,0xbc,0x82, - 0xe7,0xea,0xdb,0x36,0x7e,0xf6,0xde,0x5d,0x54,0x3b, - 0x3b,0x88,0x19,0x91,0x80,0x17,0xd0,0x01,0x5b,0xe0, - 0x03,0x1c,0x54,0x06,0x6f,0x94,0xca,0xe0,0x76,0x6d, - 0xeb,0x33,0xf9,0xde,0x42,0x93,0xf7,0x4d,0x53,0xf0, - 0x6c,0x99,0xd9,0xaa,0x7e,0x5b,0x30,0x5e,0x46,0xed, - 0x2e,0x91,0xda,0x01,0xed,0xc2,0x06,0x38,0x03,0x4f, - 0xe5,0x7f,0xa2,0xf2,0xfa,0x56,0x4a,0xe0,0xa0,0xfe, - 0x3f,0x8b,0x55,0x1f,0x16,0x34,0xa6,0xf7,0x6b,0x4a, - 0x6c,0x63,0xa6,0x88,0x7f,0x4e,0x89,0x98,0x9b,0x30, - 0x4f,0x73,0x7d,0x85,0x47,0x41,0x4d,0xba,0xb0,0x9c, - 0xb2,0x6a,0xed,0xe3,0x7b,0xee,0xdf,0x58,0x59,0x73, - 0x25,0x2e,0x72,0xcb,0x7a,0xfd,0x0a,0xa5,0xbe,0xea, - 0x3f,0x6b,0xb2,0x03,0xf5,0x20,0x3d,0xa4,0xa9,0xc0, - 0xf5,0x70,0x14,0x66,0x44,0x92,0xb8,0x97,0xba,0x6a, - 0x7b,0xb3,0x3a,0x08,0x3d,0xde,0x7f,0x2f,0x06,0x9b, - 0x29,0x4d,0xf5,0x56,0x83,0xfb,0x22,0x13,0xe7,0x97, - 0x5c,0x6b,0xa2,0x0b,0x3c,0x56,0xab,0x4d,0xbc,0x7f, - 0x5e,0x8c,0x36,0x66,0x02,0xfb,0x22,0x16,0xd8,0x67, - 0x02,0x5b,0x74,0xbf,0xc6,0x66,0xa6,0xa9,0x25,0xd1, - 0x65,0x5d,0xab,0x53,0x53,0x88,0x40,0x58,0x41,0x5a, - 0x4c,0xd3,0xf0,0x4f,0x01,0x06,0x00,0xc1,0x48,0x7e, - 0xf4,0x07,0x45,0x6c,0x0d,0x00,0x00,0x00,0x00,0x49, - 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_start_png.cpp b/data/converted/help_start_png.cpp deleted file mode 100644 index 02aa4e915..000000000 --- a/data/converted/help_start_png.cpp +++ /dev/null @@ -1,152 +0,0 @@ -//this file was auto-generated from "start.png" by res2h - -#include "../Resources.h" - -const size_t help_start_png_size = 1446; -const unsigned char help_start_png_data[1446] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x28, - 0x00,0x00,0x00,0x14,0x08,0x06,0x00,0x00,0x00,0xff, - 0x46,0x7f,0xbb,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x36,0x46,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x37,0x30,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x43,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x30,0x30,0x46,0x41,0x42,0x34, - 0x36,0x45,0x39,0x44,0x39,0x31,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x80,0xfc,0x29,0xc2,0x00,0x00,0x02,0x18, - 0x49,0x44,0x41,0x54,0x78,0xda,0xcc,0xd5,0x4b,0x48, - 0x15,0x51,0x1c,0xc7,0xf1,0xb9,0xe3,0x95,0x52,0x82, - 0x44,0xa2,0x22,0xc9,0x1e,0x48,0x91,0x58,0x14,0x45, - 0xa0,0x14,0x25,0xb5,0x8a,0xc8,0x8d,0x90,0xd8,0xce, - 0xa4,0xa4,0xa4,0xa8,0xa0,0xbb,0x30,0x28,0xa2,0x20, - 0x41,0xa4,0x42,0xc2,0x56,0x4a,0xd1,0xa6,0x17,0x89, - 0x1a,0xb8,0x09,0x17,0xae,0xc4,0xb5,0xd5,0x42,0x13, - 0x44,0x48,0xb4,0x07,0xdd,0x1e,0x82,0x59,0x7d,0xff, - 0xf0,0x4b,0x0e,0x83,0x7a,0x96,0x9e,0x3f,0x7c,0xb8, - 0x33,0xc3,0x99,0x39,0xbf,0x7b,0x1e,0x33,0xa9,0x4c, - 0x26,0x53,0x10,0x45,0x51,0x0b,0x8e,0x63,0x0d,0x26, - 0xd1,0x87,0xab,0x98,0xc6,0x50,0xb4,0x78,0x1d,0xc6, - 0x77,0x1d,0x3f,0xc4,0x5e,0xdc,0xc1,0x73,0xa7,0xcd, - 0x01,0xdc,0x4d,0xdc,0xf7,0x13,0xc3,0xb8,0x8d,0x59, - 0xf4,0x2c,0xd6,0x41,0x1a,0xad,0xa8,0xc5,0x65,0xdd, - 0xb4,0x47,0x9d,0x6c,0xc2,0x11,0x3c,0x53,0xdb,0xcd, - 0x68,0x40,0x27,0xde,0xe9,0xda,0xac,0x7e,0x4b,0x50, - 0x8f,0xaf,0xb8,0x92,0x08,0xb8,0x5a,0xc1,0xdb,0x31, - 0xa6,0x6b,0xeb,0x70,0x01,0xc5,0xa8,0x71,0xfa,0xd8, - 0xad,0xf3,0xf9,0xb6,0x16,0xb0,0x4c,0xa3,0xd6,0x81, - 0x5f,0xe8,0xc7,0x38,0xb6,0x22,0x85,0x66,0x67,0x24, - 0x1a,0xd4,0x79,0x6f,0xe2,0x8f,0xda,0xf5,0xcf,0xb8, - 0x84,0xc7,0xd8,0x8f,0xc1,0x44,0x9b,0x27,0x18,0x70, - 0xce,0x2b,0xb0,0x05,0xdf,0x9c,0x3e,0x6a,0x15,0x70, - 0xbe,0x6d,0x8c,0x97,0xfa,0x27,0x16,0xea,0xb5,0xa6, - 0x23,0x17,0xf7,0xf1,0x37,0xf2,0x57,0x3e,0x4e,0x2b, - 0x98,0x8d,0xc4,0x27,0x9c,0x5f,0xa0,0xdd,0x3e,0x1c, - 0x95,0x3a,0x0d,0xcc,0x53,0xdf,0xc3,0xd3,0x9a,0xce, - 0x7e,0xad,0xc1,0x9d,0xa8,0xc6,0x45,0xbc,0xd7,0xd4, - 0xfc,0xf0,0x3c,0xe3,0x14,0x6c,0x1d,0xbf,0x41,0x91, - 0xd6,0xef,0x49,0x4d,0xf5,0xb4,0xd3,0xee,0x26,0x7e, - 0xeb,0x78,0x95,0x9e,0xdb,0xe5,0x0b,0x68,0x23,0x78, - 0x0b,0xa5,0xb8,0x86,0x2a,0x6c,0xc4,0x3d,0x6c,0xd7, - 0x54,0xf9,0xaa,0x51,0xbf,0xdd,0x18,0xd1,0x34,0xad, - 0xc0,0xd9,0x44,0xbb,0x63,0x28,0x94,0x6d,0xc8,0xd3, - 0x46,0xf4,0x06,0xb4,0x21,0x6f,0x53,0xb8,0x95,0x58, - 0xab,0x0d,0xf2,0x07,0x1f,0x3c,0xf7,0x1f,0xc2,0x2e, - 0x4d,0x69,0xa1,0xc3,0x76,0xfe,0x19,0xcd,0xd0,0x42, - 0x65,0x1b,0x60,0x54,0x6f,0x0d,0x6f,0xc0,0x3a,0xed, - 0xde,0x57,0xda,0x24,0x1f,0x71,0x50,0x0b,0x7f,0xcc, - 0x73,0xff,0x39,0x64,0xf1,0x08,0x5f,0x1c,0xed,0x5a, - 0xd7,0x27,0x96,0xb8,0x77,0x52,0x6d,0x96,0xac,0x14, - 0xef,0xc1,0xff,0xc7,0xb6,0x7e,0xd6,0xeb,0xbd,0x36, - 0xe2,0xac,0x97,0x65,0x2d,0x77,0x0a,0x26,0x24,0xa8, - 0x8a,0xa3,0xc0,0xcb,0x1d,0xc1,0x1c,0xec,0xd0,0x34, - 0x2f,0x67,0xd9,0x1e,0x78,0x8b,0x39,0x37,0xa0,0xed, - 0xe0,0x07,0xd8,0x10,0xc8,0xc0,0x4d,0xe8,0xcd,0xd0, - 0x95,0xd6,0x8e,0x7d,0xa1,0x11,0x0c,0xa5,0x8a,0x94, - 0xa9,0xd2,0xd6,0xe0,0xf5,0xc0,0xc2,0xb9,0x4b,0xee, - 0x46,0xac,0x8f,0x76,0xa8,0x55,0x6e,0x01,0x67,0x02, - 0x0e,0x38,0x13,0xeb,0xe3,0x1e,0x6a,0xf5,0x59,0xc0, - 0x26,0x4c,0x05,0x18,0xce,0x32,0x35,0xc5,0xfa,0x68, - 0x97,0x6b,0xd7,0x64,0x03,0x08,0x96,0x55,0x16,0xcb, - 0x34,0xfa,0x4f,0x80,0x01,0x00,0x48,0x64,0x77,0x19, - 0x89,0x3e,0xfe,0x4c,0x00,0x00,0x00,0x00,0x49,0x45, - 0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_x_png.cpp b/data/converted/help_x_png.cpp deleted file mode 100644 index 58e28c57a..000000000 --- a/data/converted/help_x_png.cpp +++ /dev/null @@ -1,165 +0,0 @@ -//this file was auto-generated from "x.png" by res2h - -#include "../Resources.h" - -const size_t help_x_png_size = 1576; -const unsigned char help_x_png_data[1576] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, - 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x32,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x33,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, - 0x37,0x37,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x45,0x44,0x36,0x43,0x36,0x42, - 0x37,0x38,0x39,0x44,0x38,0x46,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x86,0x58,0x16,0xa2,0x00,0x00,0x02,0x9a, - 0x49,0x44,0x41,0x54,0x78,0xda,0xbc,0x97,0x4b,0x48, - 0x55,0x51,0x14,0x86,0xcf,0x3d,0x5a,0x83,0xb4,0xa2, - 0xc0,0x5b,0x34,0x11,0x1c,0xa4,0xf6,0x18,0x44,0x49, - 0x4a,0x49,0x83,0x26,0x92,0x54,0x1a,0x3d,0xa9,0x26, - 0x45,0x0f,0x48,0x28,0x0a,0xbc,0x11,0xd8,0x40,0x2d, - 0xad,0x49,0xa4,0xa3,0xcc,0x66,0x15,0x81,0x0f,0x7a, - 0xe8,0x28,0x2a,0x44,0x93,0xe8,0x31,0x8a,0x5e,0x62, - 0x36,0x0a,0x94,0x20,0xb0,0x42,0x85,0x94,0xdb,0xbf, - 0xe0,0xdf,0xb1,0xb9,0x78,0x3c,0x6b,0x9f,0xee,0xed, - 0x87,0x0f,0xf6,0xb9,0xfb,0x9c,0xb5,0xce,0xdd,0x6b, - 0xed,0xb5,0xd7,0x89,0x25,0x12,0x09,0x4f,0xa9,0x35, - 0xa0,0x12,0x6c,0x06,0xab,0xc0,0x32,0x90,0x03,0x26, - 0xc0,0x28,0xf8,0x08,0xfa,0x41,0x2f,0x78,0xab,0x31, - 0x98,0x1d,0x32,0x1f,0x03,0xd5,0xe0,0x3c,0x28,0x09, - 0xb8,0x67,0x01,0x28,0x20,0xdb,0x40,0x13,0x78,0x05, - 0xae,0x82,0x2e,0x90,0x0c,0x32,0xee,0xcf,0xe1,0xb8, - 0x08,0xf4,0xd1,0x40,0x89,0xe7,0x26,0xb9,0xbf,0x83, - 0x2b,0x51,0xe4,0xea,0x7c,0x0f,0xdf,0xbe,0xdc,0xfb, - 0x37,0x6d,0x02,0x6f,0xc0,0x7e,0xad,0xf3,0x63,0xe0, - 0x1e,0xc8,0xf5,0xd2,0x23,0x09,0xcb,0x5d,0x50,0x13, - 0xe6,0x7c,0x1f,0xb8,0x11,0x12,0x8e,0x28,0x92,0xdc, - 0x69,0x01,0x07,0x82,0x9c,0xaf,0x04,0xed,0xbc,0x31, - 0x13,0x12,0xbb,0x37,0x41,0x71,0xaa,0x73,0x99,0x68, - 0x4b,0xe3,0x52,0x07,0x29,0x87,0x7e,0x62,0xf6,0x56, - 0xdb,0x09,0xb6,0x84,0x3c,0x78,0x0b,0xbc,0xe4,0x58, - 0xb6,0x5f,0x45,0xca,0xfc,0x45,0x30,0xc6,0xb1,0xc4, - 0x77,0x6d,0x80,0x1d,0xa9,0x13,0xbb,0x64,0x17,0x19, - 0xe7,0xb5,0x8a,0xb7,0xde,0x08,0x4e,0x82,0x69,0xf0, - 0x18,0x7c,0x02,0xf3,0x38,0x27,0xd7,0x0d,0x1c,0x6f, - 0x60,0x11,0x9a,0x4b,0x52,0xd9,0xba,0x7c,0xee,0xc3, - 0x32,0x65,0x85,0x3b,0xc5,0xf1,0x17,0xe6,0x87,0xc7, - 0x22,0x72,0xc1,0x0a,0x5f,0x2b,0xc8,0x52,0xd4,0x81, - 0xd5,0xe2,0x7c,0xbb,0x43,0xcc,0xea,0xc1,0x72,0x8e, - 0x2f,0x81,0x49,0x16,0xa1,0xd7,0xfc,0xed,0x28,0x28, - 0x55,0xda,0xaa,0xf2,0x19,0x03,0xad,0x16,0xb1,0x6c, - 0x8a,0xbe,0x82,0xeb,0xa0,0x8e,0xd7,0x4b,0xc0,0x65, - 0x07,0x5b,0x65,0xbe,0x9d,0xfa,0x4a,0x1d,0xb2,0x2a, - 0x5f,0x1d,0x0f,0x14,0xb3,0x12,0x79,0x0e,0x76,0x8a, - 0xc5,0x79,0x3c,0x62,0xc1,0xc8,0x66,0xf2,0x89,0xd6, - 0x81,0xe3,0x8e,0x76,0xe2,0xe2,0x7c,0x71,0x84,0xfd, - 0x2a,0x4b,0x3c,0xdf,0xba,0x5e,0x1a,0xa1,0x2a,0xe6, - 0xca,0x03,0xe3,0x11,0x9c,0x9f,0xe1,0x39,0x6e,0xf4, - 0x04,0xdc,0x71,0xb4,0xf1,0xcb,0x67,0x23,0xe0,0x22, - 0x69,0x16,0xee,0x5b,0x87,0x50,0x3e,0xc7,0x67,0xc1, - 0x77,0x07,0x3b,0x63,0xbe,0x95,0x30,0x1a,0x4d,0x81, - 0xd3,0x1c,0x2f,0x04,0x8d,0x56,0x71,0xf9,0xc6,0xe2, - 0xa1,0xd5,0x07,0x9f,0x07,0xbe,0x56,0x57,0xc0,0x67, - 0xeb,0x9f,0x4a,0xb2,0x1e,0x64,0x01,0x32,0x25,0x78, - 0x40,0x69,0xab,0x5f,0x9c,0x3f,0x52,0xde,0x3c,0x02, - 0x9a,0x4d,0xa6,0x82,0x73,0xd6,0xe1,0xd4,0x6c,0x55, - 0xbb,0x13,0xe0,0xb7,0xc2,0x5e,0x8f,0x3c,0x38,0x04, - 0x06,0x15,0x37,0x5f,0x03,0x2b,0xd8,0xab,0xd5,0x73, - 0xd9,0x8d,0xa4,0xb1,0xdc,0xc1,0x39,0x09,0xcd,0xed, - 0x10,0x5b,0x2f,0xc0,0x7b,0x73,0xb0,0x34,0x29,0x56, - 0xa0,0x95,0x04,0xe9,0x81,0x63,0xf8,0xfe,0xee,0xcd, - 0x1e,0xf0,0xd4,0xfb,0x3f,0xea,0x33,0x2f,0x6a,0x17, - 0x06,0x89,0xd5,0x8f,0x0c,0x3b,0xfe,0xc9,0x4a,0x98, - 0x4c,0x75,0x3e,0x0c,0x0e,0x83,0x99,0x0c,0x39,0x16, - 0xbb,0x47,0x98,0x63,0xb3,0x36,0x90,0x0f,0xd9,0x30, - 0x24,0x33,0xe0,0x58,0xec,0x76,0x86,0xb5,0xce,0xd2, - 0x24,0xec,0x4e,0x63,0x08,0xc4,0xce,0x5e,0xab,0xf9, - 0x08,0xfd,0x68,0xe8,0x06,0xeb,0xd3,0x90,0x84,0xcf, - 0x68,0xa7,0xdb,0xf5,0x73,0x49,0x72,0x60,0x2b,0x3b, - 0x9d,0x01,0x47,0xa7,0xcf,0xa5,0x53,0xe1,0xf3,0xc3, - 0x51,0x3f,0x14,0xcd,0x36,0x14,0x0a,0x53,0xbe,0x52, - 0xe3,0x3c,0x8e,0xc7,0x59,0xd7,0xdf,0xd1,0x69,0xaf, - 0xf6,0xbc,0xf8,0x23,0xc0,0x00,0xfb,0xfe,0x80,0x69, - 0x45,0x01,0x0a,0xdf,0x00,0x00,0x00,0x00,0x49,0x45, - 0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/help_y_png.cpp b/data/converted/help_y_png.cpp deleted file mode 100644 index 3b950a5ee..000000000 --- a/data/converted/help_y_png.cpp +++ /dev/null @@ -1,157 +0,0 @@ -//this file was auto-generated from "y.png" by res2h - -#include "../Resources.h" - -const size_t help_y_png_size = 1498; -const unsigned char help_y_png_data[1498] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x1f, - 0x00,0x00,0x00,0x1f,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xae,0x16,0x39,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x41,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x42,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x38,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x39,0x44,0x41,0x36,0x46, - 0x46,0x39,0x39,0x44,0x39,0x30,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x79,0x6d,0x1d,0x54,0x00,0x00,0x02,0x4c, - 0x49,0x44,0x41,0x54,0x78,0xda,0xc4,0x97,0x4b,0x48, - 0x1b,0x51,0x14,0x86,0x27,0x83,0x52,0xa8,0x8a,0x64, - 0x13,0xc9,0x56,0x41,0x8d,0xba,0x93,0x50,0x44,0x8b, - 0x0b,0xc1,0x85,0x45,0xea,0xdb,0x74,0xd1,0x8d,0xd4, - 0xb6,0xa0,0xb8,0x11,0x4d,0x37,0xae,0x45,0x41,0x04, - 0x77,0x6a,0xb7,0x4a,0xa1,0x4d,0xc0,0x47,0x56,0xa2, - 0x21,0xc6,0x47,0x69,0x10,0x17,0x45,0x5b,0x8a,0xdd, - 0xb7,0x74,0xe5,0x03,0x41,0xc4,0xc7,0x7f,0xe0,0x0c, - 0x5c,0x86,0x4c,0xe6,0xcc,0x24,0x69,0x7e,0xf8,0x20, - 0x61,0x66,0xce,0x7f,0xe7,0xdc,0x7b,0xce,0xbd,0xe3, - 0x09,0x87,0xc3,0x9a,0x50,0x0d,0xe0,0x05,0x68,0x01, - 0x75,0xa0,0x02,0x94,0x80,0x6b,0xf0,0x07,0xfc,0x04, - 0x49,0x10,0x03,0xdf,0x25,0x01,0x8b,0x6c,0xae,0x7b, - 0x40,0x37,0xf8,0x00,0x82,0x16,0xf7,0x3c,0x05,0x95, - 0x4c,0x07,0x98,0x06,0x29,0x30,0x0b,0x22,0xe0,0xc1, - 0x2a,0xb8,0x9e,0xc1,0xb8,0x16,0x24,0x38,0x40,0x50, - 0x73,0x26,0xba,0xff,0x33,0x67,0xa2,0xd6,0xa9,0x79, - 0x3f,0x8f,0xfe,0xb9,0x96,0x9d,0x9a,0xc1,0x11,0x08, - 0x49,0xcd,0x87,0xc1,0x27,0x50,0xaa,0xe5,0x46,0x34, - 0x2d,0xab,0x60,0xd4,0xce,0x7c,0x10,0x2c,0xda,0x4c, - 0x87,0x1b,0xd1,0xda,0x59,0x00,0xaf,0xac,0xcc,0xab, - 0xc1,0x47,0xbe,0x31,0x1f,0xa2,0xb8,0xcb,0x20,0x60, - 0x36,0xa7,0x0b,0x4b,0x39,0x4c,0xb5,0x95,0x4a,0xd8, - 0xc7,0xa3,0x96,0xda,0x4b,0xd0,0x9a,0xe1,0xa1,0x1b, - 0x30,0x0e,0x6e,0x79,0x0e,0xe7,0xd2,0x4c,0xcd,0x2e, - 0x58,0xe1,0xdf,0xed,0xa0,0xd7,0x22,0x16,0xf5,0x89, - 0x1e,0xaa,0x22,0xc3,0x7c,0xd2,0x66,0xc4,0x4f,0xc0, - 0x3d,0x8f,0xda,0x08,0x60,0x0e,0x3e,0x01,0xbe,0x81, - 0x62,0x41,0x3c,0xea,0x6c,0x11,0x9d,0xeb,0xb0,0x49, - 0x90,0xb2,0x29,0x7e,0x6b,0x8d,0x1b,0x89,0xaa,0x6d, - 0x36,0x26,0xbd,0x01,0x55,0x82,0x3e,0x50,0x4f,0xe6, - 0x9d,0xc2,0xf9,0xf2,0x83,0x31,0xfe,0x4d,0xb5,0xbb, - 0xa5,0x5c,0x9b,0x56,0xca,0x6a,0x4a,0x18,0xaf,0x4b, - 0xe7,0x14,0x4a,0x45,0xe9,0xf4,0x9a,0x0c,0x53,0xfc, - 0xe6,0x1a,0x0f,0xce,0x2f,0x8c,0xd5,0xa4,0xab,0x4b, - 0x5f,0x20,0xaf,0x32,0x9f,0x71,0x70,0xa8,0x0c,0xc2, - 0x2b,0x98,0x6b,0x55,0x01,0x32,0xf7,0x39,0x2c,0x17, - 0xf5,0xed,0x46,0xc0,0x5a,0x9a,0xac,0x48,0xe4,0x23, - 0xf3,0x72,0x17,0xed,0xd2,0x98,0xd7,0x63,0xae,0x02, - 0x75,0x3d,0x48,0x55,0x4a,0xe6,0xe7,0x2e,0x9a,0x85, - 0x79,0x45,0xab,0x95,0x20,0xd5,0x95,0xce,0x07,0x01, - 0xa7,0xa2,0x5a,0x7e,0xa6,0xfc,0x0f,0xb9,0x88,0xf1, - 0x57,0xe7,0x13,0x48,0xb6,0x72,0xb3,0x11,0xfd,0xd0, - 0x79,0xc3,0x2f,0x84,0x92,0x64,0xbe,0x51,0x20,0xf3, - 0x4d,0x32,0xff,0x05,0x0e,0x5c,0x3c,0xec,0x53,0xce, - 0x6e,0x4e,0xd3,0xfe,0x15,0x9c,0xea,0x16,0xbd,0x5a, - 0xa2,0x79,0xf0,0x9b,0x29,0x73,0xf8,0xec,0x8c,0xba, - 0x50,0x36,0xc1,0xce,0x7f,0x4a,0x77,0xc2,0x68,0x4c, - 0x6a,0xba,0xde,0x81,0x8b,0x3c,0x1b,0x5f,0x82,0xb7, - 0xc6,0x71,0x5a,0x35,0x3f,0x03,0xaf,0xc1,0x5d,0x9e, - 0x8c,0x29,0xee,0x10,0xaf,0xb1,0xb4,0xf5,0xb9,0x0e, - 0xde,0x67,0x3a,0xe8,0x67,0x61,0x4c,0x71,0xbf,0xd8, - 0x35,0x07,0x3a,0x44,0xf6,0xe5,0x70,0x0a,0x28,0xce, - 0x00,0xc7,0x15,0x75,0xa6,0x28,0x68,0xcc,0xc1,0x22, - 0x8c,0x73,0x9c,0xa8,0xd3,0xb6,0x48,0x6b,0xa0,0x8d, - 0x4f,0x3a,0x7b,0x0e,0x4d,0xf7,0xe9,0xa4,0xc2,0xcf, - 0x9f,0xb9,0xfd,0x50,0x34,0xca,0x90,0xa8,0x31,0x7d, - 0xa5,0xfa,0x78,0x3b,0xa6,0x5d,0xf1,0x1f,0x38,0x61, - 0xd3,0x98,0x74,0xbf,0x78,0x14,0x60,0x00,0x19,0x2b, - 0x6d,0x27,0x7a,0xc0,0xec,0x28,0x00,0x00,0x00,0x00, - 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/off_svg.cpp b/data/converted/off_svg.cpp new file mode 100644 index 000000000..91198cf7b --- /dev/null +++ b/data/converted/off_svg.cpp @@ -0,0 +1,141 @@ +//this file was auto-generated from "off.svg" by res2h + +#include "../Resources.h" + +const size_t off_svg_size = 1338; +const unsigned char off_svg_data[1338] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x34,0x33,0x2e,0x39,0x31,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31, + 0x36,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39, + 0x2e,0x32,0x39,0x31,0x2c,0x31,0x35,0x2e,0x36,0x39, + 0x68,0x31,0x2e,0x39,0x33,0x34,0x76,0x2d,0x34,0x2e, + 0x31,0x31,0x33,0x68,0x35,0x2e,0x34,0x32,0x76,0x2d, + 0x31,0x2e,0x34,0x37,0x39,0x68,0x2d,0x35,0x2e,0x34, + 0x32,0x56,0x37,0x2e,0x37,0x30,0x34,0x68,0x35,0x2e, + 0x37,0x32,0x39,0x56,0x36,0x2e,0x32,0x32,0x35,0x68, + 0x2d,0x37,0x2e,0x36,0x36,0x32,0x56,0x31,0x35,0x2e, + 0x36,0x39,0x7a,0x20,0x4d,0x31,0x39,0x2e,0x38,0x31, + 0x2c,0x31,0x35,0x2e,0x36,0x39,0x68,0x31,0x2e,0x39, + 0x33,0x36,0x76,0x2d,0x34,0x2e,0x31,0x31,0x33,0x0d, + 0x0a,0x09,0x68,0x35,0x2e,0x34,0x31,0x36,0x76,0x2d, + 0x31,0x2e,0x34,0x37,0x39,0x68,0x2d,0x35,0x2e,0x34, + 0x31,0x36,0x56,0x37,0x2e,0x37,0x30,0x34,0x68,0x35, + 0x2e,0x37,0x32,0x35,0x56,0x36,0x2e,0x32,0x32,0x35, + 0x68,0x2d,0x37,0x2e,0x36,0x36,0x56,0x31,0x35,0x2e, + 0x36,0x39,0x7a,0x20,0x4d,0x31,0x32,0x2e,0x33,0x37, + 0x38,0x2c,0x31,0x34,0x2e,0x34,0x37,0x33,0x63,0x2d, + 0x32,0x2e,0x31,0x36,0x36,0x2c,0x30,0x2d,0x33,0x2e, + 0x34,0x30,0x34,0x2d,0x31,0x2e,0x34,0x33,0x35,0x2d, + 0x33,0x2e,0x34,0x30,0x34,0x2d,0x33,0x2e,0x35,0x31, + 0x37,0x0d,0x0a,0x09,0x63,0x30,0x2d,0x32,0x2e,0x30, + 0x38,0x33,0x2c,0x31,0x2e,0x32,0x33,0x38,0x2d,0x33, + 0x2e,0x35,0x31,0x38,0x2c,0x33,0x2e,0x34,0x30,0x34, + 0x2d,0x33,0x2e,0x35,0x31,0x38,0x63,0x32,0x2e,0x31, + 0x36,0x37,0x2c,0x30,0x2c,0x33,0x2e,0x34,0x30,0x36, + 0x2c,0x31,0x2e,0x34,0x33,0x35,0x2c,0x33,0x2e,0x34, + 0x30,0x36,0x2c,0x33,0x2e,0x35,0x31,0x38,0x43,0x31, + 0x35,0x2e,0x37,0x38,0x34,0x2c,0x31,0x33,0x2e,0x30, + 0x33,0x38,0x2c,0x31,0x34,0x2e,0x35,0x34,0x35,0x2c, + 0x31,0x34,0x2e,0x34,0x37,0x33,0x2c,0x31,0x32,0x2e, + 0x33,0x37,0x38,0x2c,0x31,0x34,0x2e,0x34,0x37,0x33, + 0x20,0x4d,0x31,0x32,0x2e,0x33,0x37,0x38,0x2c,0x31, + 0x35,0x2e,0x39,0x35,0x36,0x0d,0x0a,0x09,0x63,0x33, + 0x2e,0x38,0x39,0x36,0x2c,0x30,0x2c,0x35,0x2e,0x34, + 0x31,0x39,0x2d,0x32,0x2e,0x33,0x33,0x35,0x2c,0x35, + 0x2e,0x34,0x31,0x39,0x2d,0x35,0x73,0x2d,0x31,0x2e, + 0x35,0x32,0x32,0x2d,0x34,0x2e,0x39,0x39,0x37,0x2d, + 0x35,0x2e,0x34,0x31,0x39,0x2d,0x34,0x2e,0x39,0x39, + 0x37,0x63,0x2d,0x33,0x2e,0x38,0x39,0x36,0x2c,0x30, + 0x2d,0x35,0x2e,0x34,0x31,0x36,0x2c,0x32,0x2e,0x33, + 0x33,0x32,0x2d,0x35,0x2e,0x34,0x31,0x36,0x2c,0x34, + 0x2e,0x39,0x39,0x37,0x53,0x38,0x2e,0x34,0x38,0x32, + 0x2c,0x31,0x35,0x2e,0x39,0x35,0x36,0x2c,0x31,0x32, + 0x2e,0x33,0x37,0x38,0x2c,0x31,0x35,0x2e,0x39,0x35, + 0x36,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c,0x31,0x2e, + 0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30,0x2c, + 0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32,0x33, + 0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, + 0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d,0x31, + 0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32, + 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e,0x37, + 0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0d,0x0a, + 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, + 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, + 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, + 0x2e,0x37,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, + 0x43,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x37,0x33,0x34, + 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x31,0x2e,0x35, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x31,0x2e,0x35, + 0x48,0x33,0x39,0x2e,0x36,0x36,0x34,0x20,0x4d,0x33, + 0x39,0x2e,0x36,0x36,0x34,0x2c,0x30,0x48,0x34,0x2e, + 0x32,0x35,0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c, + 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c, + 0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33, + 0x2e,0x34,0x35,0x35,0x0d,0x0a,0x09,0x63,0x30,0x2c, + 0x32,0x2e,0x33,0x33,0x39,0x2c,0x31,0x2e,0x39,0x31, + 0x34,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e, + 0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x68, + 0x33,0x35,0x2e,0x34,0x31,0x32,0x63,0x32,0x2e,0x33, + 0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32, + 0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34, + 0x2e,0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31, + 0x36,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32, + 0x2e,0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e, + 0x36,0x36,0x34,0x2c,0x30,0x4c,0x33,0x39,0x2e,0x36, + 0x36,0x34,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/on_svg.cpp b/data/converted/on_svg.cpp new file mode 100644 index 000000000..a8c533a3f --- /dev/null +++ b/data/converted/on_svg.cpp @@ -0,0 +1,122 @@ +//this file was auto-generated from "on.svg" by res2h + +#include "../Resources.h" + +const size_t on_svg_size = 1148; +const unsigned char on_svg_data[1148] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x34,0x33,0x2e,0x39,0x31,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20, + 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31, + 0x36,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x33,0x39,0x2e,0x36,0x36,0x34, + 0x2c,0x30,0x48,0x34,0x2e,0x32,0x35,0x32,0x43,0x31, + 0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c,0x30,0x2c,0x31, + 0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35,0x63, + 0x30,0x2c,0x32,0x2e,0x33,0x33,0x39,0x2c,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c, + 0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x68,0x33,0x35,0x2e,0x34,0x31,0x32,0x0d,0x0a, + 0x09,0x09,0x63,0x32,0x2e,0x33,0x33,0x39,0x2c,0x30, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x31,0x2e,0x39, + 0x31,0x33,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x34, + 0x2e,0x32,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, + 0x43,0x34,0x33,0x2e,0x39,0x31,0x36,0x2c,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x34,0x32,0x2e,0x30,0x30,0x33, + 0x2c,0x30,0x2c,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c, + 0x30,0x4c,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c,0x30, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x33,0x2e, + 0x37,0x30,0x34,0x2c,0x31,0x35,0x2e,0x37,0x31,0x35, + 0x68,0x31,0x2e,0x39,0x38,0x38,0x56,0x38,0x2e,0x36, + 0x30,0x32,0x68,0x30,0x2e,0x30,0x32,0x37,0x6c,0x35, + 0x2e,0x39,0x30,0x36,0x2c,0x37,0x2e,0x31,0x31,0x33, + 0x68,0x32,0x2e,0x33,0x33,0x32,0x56,0x36,0x2e,0x32, + 0x34,0x34,0x68,0x2d,0x31,0x2e,0x39,0x38,0x37,0x76, + 0x37,0x2e,0x31,0x31,0x34,0x68,0x2d,0x30,0x2e,0x30, + 0x32,0x37,0x6c,0x2d,0x35,0x2e,0x38,0x36,0x36,0x2d, + 0x37,0x2e,0x31,0x31,0x34,0x68,0x2d,0x32,0x2e,0x33, + 0x37,0x33,0x56,0x31,0x35,0x2e,0x37,0x31,0x35,0x7a, + 0x0d,0x0a,0x09,0x20,0x4d,0x31,0x35,0x2e,0x37,0x35, + 0x34,0x2c,0x31,0x34,0x2e,0x35,0x63,0x2d,0x32,0x2e, + 0x33,0x31,0x38,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34, + 0x33,0x2d,0x31,0x2e,0x34,0x33,0x38,0x2d,0x33,0x2e, + 0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x32,0x31,0x63, + 0x30,0x2d,0x32,0x2e,0x30,0x38,0x34,0x2c,0x31,0x2e, + 0x33,0x32,0x34,0x2d,0x33,0x2e,0x35,0x31,0x38,0x2c, + 0x33,0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x31, + 0x38,0x63,0x32,0x2e,0x33,0x32,0x2c,0x30,0x2c,0x33, + 0x2e,0x36,0x34,0x35,0x2c,0x31,0x2e,0x34,0x33,0x34, + 0x2c,0x33,0x2e,0x36,0x34,0x35,0x2c,0x33,0x2e,0x35, + 0x31,0x38,0x0d,0x0a,0x09,0x43,0x31,0x39,0x2e,0x33, + 0x39,0x38,0x2c,0x31,0x33,0x2e,0x30,0x36,0x33,0x2c, + 0x31,0x38,0x2e,0x30,0x37,0x34,0x2c,0x31,0x34,0x2e, + 0x35,0x2c,0x31,0x35,0x2e,0x37,0x35,0x34,0x2c,0x31, + 0x34,0x2e,0x35,0x20,0x4d,0x31,0x35,0x2e,0x37,0x35, + 0x34,0x2c,0x31,0x35,0x2e,0x39,0x38,0x63,0x34,0x2e, + 0x31,0x37,0x2c,0x30,0x2c,0x35,0x2e,0x37,0x39,0x38, + 0x2d,0x32,0x2e,0x33,0x33,0x36,0x2c,0x35,0x2e,0x37, + 0x39,0x38,0x2d,0x35,0x2e,0x30,0x30,0x31,0x63,0x30, + 0x2d,0x32,0x2e,0x36,0x36,0x39,0x2d,0x31,0x2e,0x36, + 0x32,0x38,0x2d,0x35,0x2e,0x30,0x30,0x31,0x2d,0x35, + 0x2e,0x37,0x39,0x38,0x2d,0x35,0x2e,0x30,0x30,0x31, + 0x0d,0x0a,0x09,0x63,0x2d,0x34,0x2e,0x31,0x36,0x38, + 0x2c,0x30,0x2d,0x35,0x2e,0x37,0x39,0x36,0x2c,0x32, + 0x2e,0x33,0x33,0x32,0x2d,0x35,0x2e,0x37,0x39,0x36, + 0x2c,0x35,0x2e,0x30,0x30,0x31,0x43,0x39,0x2e,0x39, + 0x35,0x38,0x2c,0x31,0x33,0x2e,0x36,0x34,0x35,0x2c, + 0x31,0x31,0x2e,0x35,0x38,0x36,0x2c,0x31,0x35,0x2e, + 0x39,0x38,0x2c,0x31,0x35,0x2e,0x37,0x35,0x34,0x2c, + 0x31,0x35,0x2e,0x39,0x38,0x22,0x2f,0x3e,0x0d,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/option_arrow_svg.cpp b/data/converted/option_arrow_svg.cpp new file mode 100644 index 000000000..c07891afd --- /dev/null +++ b/data/converted/option_arrow_svg.cpp @@ -0,0 +1,92 @@ +//this file was auto-generated from "option_arrow.svg" by res2h + +#include "../Resources.h" + +const size_t option_arrow_svg_size = 850; +const unsigned char option_arrow_svg_data[850] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x32,0x2e,0x31,0x35,0x38,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x31,0x2e,0x39,0x31,0x33,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x35,0x38,0x20, + 0x32,0x31,0x2e,0x39,0x31,0x33,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x35, + 0x38,0x20,0x32,0x31,0x2e,0x39,0x31,0x33,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x30,0x2e,0x37,0x35,0x2c,0x32, + 0x31,0x2e,0x39,0x31,0x33,0x63,0x2d,0x30,0x2e,0x31, + 0x2c,0x30,0x2d,0x30,0x2e,0x32,0x2d,0x30,0x2e,0x30, + 0x32,0x2d,0x30,0x2e,0x32,0x39,0x34,0x2d,0x30,0x2e, + 0x30,0x36,0x31,0x43,0x30,0x2e,0x31,0x37,0x39,0x2c, + 0x32,0x31,0x2e,0x37,0x33,0x35,0x2c,0x30,0x2c,0x32, + 0x31,0x2e,0x34,0x36,0x33,0x2c,0x30,0x2c,0x32,0x31, + 0x2e,0x31,0x36,0x33,0x56,0x30,0x2e,0x37,0x35,0x0d, + 0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x2c, + 0x30,0x2e,0x31,0x37,0x39,0x2d,0x30,0x2e,0x35,0x37, + 0x32,0x2c,0x30,0x2e,0x34,0x35,0x36,0x2d,0x30,0x2e, + 0x36,0x39,0x43,0x30,0x2e,0x37,0x33,0x2d,0x30,0x2e, + 0x30,0x35,0x37,0x2c,0x31,0x2e,0x30,0x35,0x32,0x2c, + 0x30,0x2c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x30,0x2e, + 0x32,0x30,0x38,0x6c,0x31,0x30,0x2e,0x36,0x35,0x38, + 0x2c,0x31,0x30,0x2e,0x32,0x30,0x36,0x63,0x30,0x2e, + 0x31,0x34,0x37,0x2c,0x30,0x2e,0x31,0x34,0x31,0x2c, + 0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x33,0x33, + 0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, + 0x35,0x34,0x32,0x0d,0x0a,0x09,0x09,0x73,0x2d,0x30, + 0x2e,0x30,0x38,0x34,0x2c,0x30,0x2e,0x34,0x2d,0x30, + 0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x35,0x34,0x32, + 0x4c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x32,0x31,0x2e, + 0x37,0x30,0x35,0x43,0x31,0x2e,0x31,0x32,0x36,0x2c, + 0x32,0x31,0x2e,0x38,0x34,0x2c,0x30,0x2e,0x39,0x33, + 0x39,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33,0x2c,0x30, + 0x2e,0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33, + 0x7a,0x20,0x4d,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x35, + 0x30,0x36,0x76,0x31,0x36,0x2e,0x38,0x39,0x39,0x6c, + 0x38,0x2e,0x38,0x32,0x34,0x2d,0x38,0x2e,0x34,0x35, + 0x4c,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x35,0x30,0x36, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/sq_bracket_png.cpp b/data/converted/sq_bracket_png.cpp deleted file mode 100644 index 064cb9023..000000000 --- a/data/converted/sq_bracket_png.cpp +++ /dev/null @@ -1,136 +0,0 @@ -//this file was auto-generated from "sq_bracket.png" by res2h - -#include "../Resources.h" - -const size_t sq_bracket_png_size = 1286; -const unsigned char sq_bracket_png_data[1286] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x0d, - 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0x1b, - 0xfa,0x16,0x24,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x66,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x43,0x46,0x31,0x35,0x46,0x36,0x32,0x43, - 0x43,0x35,0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41, - 0x37,0x44,0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35, - 0x31,0x30,0x45,0x31,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x32,0x34,0x42,0x43,0x42,0x38,0x35,0x44, - 0x41,0x33,0x44,0x44,0x31,0x31,0x45,0x33,0x41,0x41, - 0x44,0x41,0x42,0x39,0x42,0x30,0x39,0x34,0x38,0x33, - 0x38,0x30,0x46,0x31,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x32,0x34,0x42,0x43,0x42,0x38,0x35,0x43, - 0x41,0x33,0x44,0x44,0x31,0x31,0x45,0x33,0x41,0x41, - 0x44,0x41,0x42,0x39,0x42,0x30,0x39,0x34,0x38,0x33, - 0x38,0x30,0x46,0x31,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77, - 0x73,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46, - 0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, - 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a, - 0x43,0x46,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, - 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, - 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, - 0x45,0x31,0x22,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, - 0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44, - 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a, - 0x43,0x46,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, - 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, - 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, - 0x45,0x31,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x72,0x64, - 0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74, - 0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72,0x64,0x66, - 0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f,0x78,0x3a, - 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x20,0x3c, - 0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65, - 0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e,0xd4,0x38, - 0xd4,0x9d,0x00,0x00,0x01,0x36,0x49,0x44,0x41,0x54, - 0x78,0xda,0x94,0xd3,0xbf,0x2b,0x45,0x61,0x1c,0xc7, - 0xf1,0xe7,0x5c,0x87,0x9b,0x6b,0x30,0x58,0x0c,0xfe, - 0x04,0xd3,0x1d,0x4d,0x52,0x0c,0xc4,0x20,0xa5,0x58, - 0x6e,0x06,0x45,0x8c,0x9c,0x41,0x37,0x94,0x45,0x46, - 0x37,0x49,0x06,0xbf,0x16,0x4a,0x24,0x19,0x28,0x2c, - 0x77,0x35,0xdd,0xc5,0x7f,0x60,0x31,0x18,0x10,0xf2, - 0xe3,0xfd,0xa9,0xef,0xa9,0xdb,0xad,0x73,0xce,0xe3, - 0x5b,0xaf,0x4e,0x9d,0x73,0x3e,0xcf,0x79,0x9e,0xe7, - 0xfb,0x9c,0x20,0x8a,0xa2,0x2e,0xe7,0xdc,0x3e,0x66, - 0xf1,0xe8,0x3c,0x2a,0x87,0x55,0xf4,0xe1,0x1e,0xdd, - 0xbe,0xa1,0x79,0xdc,0xa0,0xd3,0x82,0x45,0x9f,0xd0, - 0x1b,0x86,0x71,0x81,0x0e,0xdc,0xa2,0x27,0x2b,0xa4, - 0xfa,0xc0,0x18,0x8e,0xd1,0x8e,0x6b,0x9b,0x72,0x6a, - 0x48,0xf5,0x85,0x49,0xec,0xa1,0x0d,0x97,0x18,0xcc, - 0x0a,0xa9,0xbe,0x31,0x85,0x2d,0xb4,0xe2,0x0c,0xa3, - 0x59,0x21,0xd5,0x2f,0xe6,0xb0,0x81,0x16,0x9c,0xd8, - 0x0c,0x52,0x43,0x71,0x70,0xd1,0xda,0xd1,0x84,0x03, - 0x4c,0x67,0x85,0xe2,0x5a,0xb1,0x70,0x80,0x6d,0x2c, - 0xe9,0x66,0xe8,0xd1,0x4b,0x4d,0xf3,0x15,0x15,0xac, - 0x69,0xad,0x39,0xf7,0xff,0x0a,0x7c,0x42,0x0b,0xf6, - 0x15,0x55,0x59,0x53,0x0c,0x3d,0xd6,0xb4,0x8c,0x1f, - 0xcc,0x60,0x27,0x6d,0x4d,0x5a,0xf8,0xba,0x7d,0x45, - 0xbd,0x2b,0xe1,0x28,0x7e,0x18,0x26,0x04,0x2a,0xf6, - 0xab,0x7c,0x62,0x02,0xa7,0xf5,0x2f,0x34,0x86,0xd4, - 0x93,0x5d,0x1b,0xf9,0xdd,0xce,0xe3,0x55,0xe3,0xa8, - 0xf5,0xa1,0x66,0x1c,0x62,0xdc,0xb6,0x78,0xc4,0x4e, - 0xbc,0x4b,0x0a,0xe5,0xed,0xb8,0xe8,0xc5,0x17,0x0c, - 0xa1,0x9a,0xb4,0x3b,0x0a,0x15,0x70,0x8e,0x7e,0x3c, - 0x63,0x00,0x0f,0x69,0x5b,0xaa,0xd0,0xa6,0x05,0x9e, - 0xec,0x5a,0xf3,0xf9,0x73,0xd5,0x87,0x3b,0xf4,0xfa, - 0x04,0x54,0x7f,0x02,0x0c,0x00,0x5f,0x4a,0x3a,0x5d, - 0xf2,0x7e,0xec,0x5c,0x00,0x00,0x00,0x00,0x49,0x45, - 0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/star_filled_png.cpp b/data/converted/star_filled_png.cpp deleted file mode 100644 index 4308c2ba4..000000000 --- a/data/converted/star_filled_png.cpp +++ /dev/null @@ -1,180 +0,0 @@ -//this file was auto-generated from "star_filled.png" by res2h - -#include "../Resources.h" - -const size_t star_filled_png_size = 1729; -const unsigned char star_filled_png_data[1729] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, - 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0xda, - 0x7d,0x5c,0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, - 0x37,0x35,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, - 0x37,0x36,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x45,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x46,0x43,0x44,0x39,0x31,0x31, - 0x37,0x34,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x69,0x5e,0x78,0x11,0x00,0x00,0x03,0x33, - 0x49,0x44,0x41,0x54,0x78,0xda,0x8c,0x55,0xcf,0x8b, - 0x4f,0x51,0x14,0x3f,0xe7,0xbe,0x37,0x63,0x4c,0xca, - 0x2c,0x34,0xcd,0x42,0x21,0x23,0x62,0x43,0x52,0x52, - 0x9a,0x3f,0x80,0x05,0x76,0x36,0x2c,0x68,0x76,0x83, - 0xa5,0x29,0x36,0x9a,0xb2,0x52,0x92,0x15,0x59,0xd8, - 0x30,0x94,0x10,0x0d,0x1b,0x2b,0x1b,0x0b,0x35,0xa5, - 0xc6,0x8a,0xc2,0x42,0xa2,0xe4,0x47,0xf2,0x65,0xde, - 0xbd,0xc7,0xe7,0x9c,0x7b,0xdf,0x8f,0xef,0x7b,0x5f, - 0x72,0xeb,0xbc,0x77,0xdf,0xb9,0xe7,0x9e,0x1f,0x9f, - 0xf3,0xe3,0x71,0x6f,0x71,0x05,0xb1,0x0b,0x64,0x8b, - 0x89,0xb2,0x95,0x05,0x31,0x0b,0x91,0x50,0x7b,0x5d, - 0x02,0x1d,0x04,0xbd,0x03,0x1d,0x05,0xbd,0xea,0x3b, - 0xc5,0x5d,0x59,0x76,0x24,0x9e,0x49,0xb0,0xd7,0x87, - 0x80,0x5c,0x5b,0x8b,0x14,0xac,0xb2,0xed,0x75,0x1c, - 0x34,0x03,0x5a,0x0b,0xda,0x03,0xba,0xdd,0x56,0x4e, - 0x01,0x0a,0x83,0xa3,0xf6,0xe5,0xae,0x01,0xf5,0x22, - 0x50,0x5b,0xf0,0x4c,0x4b,0x6c,0x07,0x68,0xaa,0xc9, - 0x08,0xde,0xd1,0xa0,0x35,0x80,0xcb,0x14,0x96,0xf3, - 0xda,0x33,0xa2,0x59,0xd0,0xba,0x01,0x77,0xe7,0x2b, - 0x68,0x00,0x8b,0x46,0x40,0x2c,0xff,0x61,0x00,0x42, - 0x7a,0x21,0xfc,0xce,0x28,0x82,0xc9,0x73,0xf6,0x6e, - 0xde,0x8d,0xfb,0x09,0x28,0xdf,0x67,0xd0,0xa8,0xf7, - 0x03,0x94,0xff,0x25,0x02,0xe5,0xc2,0x08,0x2e,0x86, - 0xc2,0xcd,0x86,0x82,0x9d,0x98,0x77,0x8d,0x64,0x6a, - 0x02,0xbd,0xd1,0x05,0x28,0x1f,0xa1,0x7f,0xac,0x3c, - 0x5d,0xda,0x85,0xe7,0x06,0xd0,0x1a,0xd0,0x38,0x68, - 0x2b,0xbc,0xdc,0x84,0x84,0x6f,0x17,0x71,0x94,0x0d, - 0xf9,0xe8,0x4a,0x59,0x6c,0x30,0xe2,0x97,0x33,0xdd, - 0x6e,0x46,0xc5,0xbd,0xc6,0xfd,0x17,0xd8,0xbf,0x04, - 0xbd,0x07,0x7d,0x02,0x7d,0x04,0x3d,0x36,0xd9,0xde, - 0xe2,0xf0,0x39,0x08,0x9c,0x8d,0xa1,0x73,0x03,0x03, - 0x8e,0xe5,0x0a,0x72,0xc3,0x1e,0xa5,0x4c,0x35,0x4c, - 0xe0,0x85,0x22,0xb3,0x8a,0xab,0x93,0x25,0x55,0x94, - 0x1c,0xe1,0x7a,0x26,0xc4,0x47,0xf8,0xe7,0xf3,0x11, - 0x29,0x2f,0x55,0x4a,0x00,0x91,0x7a,0x69,0x82,0x6e, - 0x00,0xb6,0x1c,0xcf,0x45,0x92,0x53,0x56,0xf3,0x95, - 0x5f,0x06,0x6f,0x32,0x7b,0x3d,0xd7,0xf2,0x32,0x83, - 0x19,0x3c,0xcd,0x7c,0x23,0x2b,0x62,0x97,0xa4,0x3c, - 0x67,0xea,0x8b,0x4e,0xca,0xb4,0xa4,0x28,0x99,0x53, - 0x81,0x14,0x28,0x73,0x44,0x67,0x7b,0xa2,0x0f,0x39, - 0x12,0x75,0x18,0x49,0xbb,0x49,0x9e,0xec,0xd0,0x29, - 0xde,0x4c,0x7d,0x55,0x23,0x4d,0xe5,0x5c,0x37,0xa2, - 0x34,0x1a,0x8d,0x0d,0x36,0x67,0xc4,0xd1,0xf2,0x3d, - 0x44,0x3f,0xa7,0x49,0x9e,0x47,0x48,0x2a,0x3b,0x1f, - 0xb4,0x3c,0x81,0xab,0x1b,0x0e,0x51,0x48,0xa8,0xd9, - 0x0f,0x15,0x43,0xb8,0x0b,0x97,0x26,0x5d,0x52,0xb3, - 0x09,0xcb,0x5d,0x97,0xc9,0xa1,0xba,0x8a,0x88,0x6e, - 0xe1,0xf0,0x07,0x20,0x79,0x60,0x50,0x7a,0x8d,0x24, - 0x34,0x6a,0x3b,0x5a,0x63,0x66,0xea,0x8c,0x08,0xf0, - 0x15,0xe6,0xe8,0xb9,0x25,0xfa,0x2a,0x72,0x39,0x5d, - 0x3a,0xe3,0xd8,0x12,0x6a,0x38,0x3e,0x44,0x24,0x53, - 0xa0,0xcf,0x01,0xde,0x14,0xbf,0xf2,0x84,0x67,0x1a, - 0x60,0x49,0x89,0x91,0x46,0xea,0x23,0x3f,0x40,0xce, - 0xf7,0x72,0x4d,0x6c,0x11,0x82,0x9b,0x83,0xce,0x69, - 0xb6,0x82,0x49,0xf4,0xe5,0xc9,0x18,0x95,0x9d,0x9a, - 0xaa,0xe2,0x22,0x9e,0x27,0x4d,0x68,0x28,0x74,0x3c, - 0xe6,0x2a,0x17,0x65,0x52,0xb3,0xb2,0x93,0xbf,0x82, - 0x3f,0x96,0xa2,0xa8,0x92,0x9e,0xfb,0xde,0x50,0x5f, - 0x0d,0x63,0xbf,0x85,0xd5,0x60,0x06,0xe5,0xed,0x01, - 0x96,0xc6,0xb8,0x94,0x89,0xb6,0x92,0x24,0x8b,0x08, - 0xac,0xd5,0x38,0xd8,0x86,0xcf,0xa5,0x2a,0x49,0x90, - 0xcd,0x6d,0x72,0x52,0xc5,0x18,0x05,0xce,0x7b,0x6d, - 0x98,0x02,0x48,0xf6,0x92,0x0a,0x27,0x25,0x57,0x5c, - 0xdd,0x03,0xcd,0xd1,0x14,0xe2,0xec,0x87,0x1a,0x9d, - 0xb2,0x4b,0x7d,0xa3,0x42,0x31,0x6e,0xac,0x8d,0x90, - 0x1b,0x4d,0x03,0xb8,0xd2,0xa2,0x8a,0x4b,0x25,0x25, - 0xbe,0x54,0xe6,0x8e,0xd2,0x34,0x8d,0x06,0xc6,0xdb, - 0x3f,0xaa,0x5c,0xfa,0x61,0x98,0xa8,0x4b,0x0f,0x09, - 0xb4,0x9f,0x48,0x1a,0xc5,0x8d,0x41,0x67,0xdb,0x32, - 0x89,0x99,0xc4,0x4e,0x2e,0xcc,0xc0,0xfa,0xce,0xb0, - 0x53,0xfc,0x1a,0x6b,0x32,0xce,0x12,0x26,0xaf,0x8a, - 0xb4,0x7a,0xd2,0x70,0xc3,0xfb,0x11,0x3c,0xbe,0x86, - 0xcf,0x9d,0xe0,0xcc,0x00,0xda,0x55,0xd1,0x50,0xa8, - 0xff,0x68,0x44,0xbb,0x3b,0x06,0xec,0x37,0x57,0xf7, - 0xd1,0x5b,0xa2,0xd6,0xef,0x98,0xe9,0x3e,0x1a,0xe7, - 0x0a,0xbc,0x5d,0x48,0xed,0x70,0x07,0x51,0x5d,0xc6, - 0xfb,0x34,0xbe,0x8e,0x89,0xcf,0x46,0x1b,0xcd,0xf8, - 0xa6,0xfb,0x3f,0x28,0x87,0x54,0xd4,0xba,0x00,0xc8, - 0xce,0xa3,0xc6,0xbf,0x81,0x96,0xa0,0x68,0x3f,0xf8, - 0x07,0x94,0xdf,0x6a,0x31,0x1d,0xcb,0x27,0x70,0x3e, - 0x09,0xb9,0x1b,0x40,0xe1,0x3b,0x26,0xc0,0x53,0x44, - 0x71,0xaa,0x4f,0x1f,0xe8,0x8f,0x00,0x03,0x00,0xa3, - 0x22,0x9c,0x02,0x6c,0xe3,0xe8,0x90,0x00,0x00,0x00, - 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/star_filled_svg.cpp b/data/converted/star_filled_svg.cpp new file mode 100644 index 000000000..ef1e5863f --- /dev/null +++ b/data/converted/star_filled_svg.cpp @@ -0,0 +1,124 @@ +//this file was auto-generated from "star_filled.svg" by res2h + +#include "../Resources.h" + +const size_t star_filled_svg_size = 1169; +const unsigned char star_filled_svg_data[1169] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x30,0x2e,0x37,0x36,0x31,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x36,0x20, + 0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37, + 0x36,0x20,0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30, + 0x2e,0x38,0x38,0x38,0x2c,0x30,0x63,0x2d,0x30,0x2e, + 0x32,0x32,0x38,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x35, + 0x35,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2d,0x30,0x2e, + 0x36,0x32,0x37,0x2c,0x30,0x2e,0x35,0x32,0x34,0x4c, + 0x37,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x32,0x33, + 0x32,0x63,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x39,0x39,0x2d,0x31,0x2e,0x32,0x35,0x39, + 0x2c,0x31,0x2e,0x33,0x36,0x33,0x2d,0x32,0x2e,0x30, + 0x33,0x2c,0x31,0x2e,0x34,0x37,0x35,0x4c,0x30,0x2e, + 0x37,0x31,0x35,0x2c,0x37,0x2e,0x34,0x36,0x31,0x0d, + 0x0a,0x09,0x43,0x2d,0x30,0x2e,0x30,0x35,0x37,0x2c, + 0x37,0x2e,0x35,0x37,0x33,0x2d,0x30,0x2e,0x32,0x33, + 0x31,0x2c,0x38,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x33, + 0x32,0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x6c,0x33, + 0x2e,0x37,0x35,0x39,0x2c,0x33,0x2e,0x36,0x36,0x34, + 0x63,0x30,0x2e,0x35,0x35,0x39,0x2c,0x30,0x2e,0x35, + 0x34,0x34,0x2c,0x30,0x2e,0x39,0x30,0x37,0x2c,0x31, + 0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x37,0x37,0x35, + 0x2c,0x32,0x2e,0x33,0x38,0x36,0x6c,0x2d,0x30,0x2e, + 0x38,0x38,0x38,0x2c,0x35,0x2e,0x31,0x37,0x34,0x0d, + 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x39,0x36,0x2c, + 0x30,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e,0x31,0x31, + 0x38,0x2c,0x30,0x2e,0x38,0x38,0x34,0x2c,0x30,0x2e, + 0x35,0x30,0x36,0x2c,0x30,0x2e,0x38,0x38,0x34,0x63, + 0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2c,0x30,0x2e, + 0x33,0x31,0x39,0x2d,0x30,0x2e,0x30,0x34,0x37,0x2c, + 0x30,0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x31,0x34, + 0x36,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x32,0x2e, + 0x34,0x34,0x33,0x63,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x31,0x38,0x31,0x2c,0x30,0x2e,0x38,0x2d, + 0x30,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e,0x32,0x35, + 0x34,0x2d,0x30,0x2e,0x32,0x37,0x31,0x0d,0x0a,0x09, + 0x63,0x30,0x2e,0x34,0x35,0x35,0x2c,0x30,0x2c,0x30, + 0x2e,0x39,0x31,0x2c,0x30,0x2e,0x30,0x39,0x31,0x2c, + 0x31,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2e,0x32,0x37, + 0x31,0x6c,0x34,0x2e,0x36,0x34,0x35,0x2c,0x32,0x2e, + 0x34,0x34,0x33,0x63,0x30,0x2e,0x31,0x38,0x39,0x2c, + 0x30,0x2e,0x31,0x2c,0x30,0x2e,0x33,0x36,0x32,0x2c, + 0x30,0x2e,0x31,0x34,0x36,0x2c,0x30,0x2e,0x35,0x30, + 0x39,0x2c,0x30,0x2e,0x31,0x34,0x36,0x63,0x30,0x2e, + 0x33,0x38,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x36,0x30, + 0x33,0x2d,0x30,0x2e,0x33,0x32,0x37,0x2c,0x30,0x2e, + 0x35,0x30,0x37,0x2d,0x30,0x2e,0x38,0x38,0x34,0x6c, + 0x2d,0x30,0x2e,0x38,0x38,0x39,0x2d,0x35,0x2e,0x31, + 0x37,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x31, + 0x33,0x32,0x2d,0x30,0x2e,0x37,0x36,0x38,0x2c,0x30, + 0x2e,0x32,0x31,0x38,0x2d,0x31,0x2e,0x38,0x34,0x32, + 0x2c,0x30,0x2e,0x37,0x37,0x35,0x2d,0x32,0x2e,0x33, + 0x38,0x36,0x6c,0x33,0x2e,0x37,0x36,0x2d,0x33,0x2e, + 0x36,0x36,0x34,0x63,0x30,0x2e,0x35,0x35,0x38,0x2d, + 0x30,0x2e,0x35,0x34,0x34,0x2c,0x30,0x2e,0x33,0x38, + 0x34,0x2d,0x31,0x2e,0x30,0x38,0x31,0x2d,0x30,0x2e, + 0x33,0x38,0x38,0x2d,0x31,0x2e,0x31,0x39,0x33,0x6c, + 0x2d,0x35,0x2e,0x31,0x39,0x33,0x2d,0x30,0x2e,0x37, + 0x35,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x37, + 0x37,0x31,0x2d,0x30,0x2e,0x31,0x31,0x32,0x2d,0x31, + 0x2e,0x36,0x38,0x35,0x2d,0x30,0x2e,0x37,0x37,0x35, + 0x2d,0x32,0x2e,0x30,0x32,0x39,0x2d,0x31,0x2e,0x34, + 0x37,0x35,0x6c,0x2d,0x32,0x2e,0x33,0x32,0x34,0x2d, + 0x34,0x2e,0x37,0x30,0x38,0x43,0x31,0x31,0x2e,0x33, + 0x34,0x33,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2c,0x31, + 0x31,0x2e,0x31,0x31,0x36,0x2c,0x30,0x2c,0x31,0x30, + 0x2e,0x38,0x38,0x38,0x2c,0x30,0x4c,0x31,0x30,0x2e, + 0x38,0x38,0x38,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/star_unfilled_png.cpp b/data/converted/star_unfilled_png.cpp deleted file mode 100644 index a3f69fde3..000000000 --- a/data/converted/star_unfilled_png.cpp +++ /dev/null @@ -1,132 +0,0 @@ -//this file was auto-generated from "star_unfilled.png" by res2h - -#include "../Resources.h" - -const size_t star_unfilled_png_size = 1245; -const unsigned char star_unfilled_png_data[1245] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x18, - 0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,0x00,0xda, - 0x7d,0x5c,0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x43,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x44,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x41,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x42,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0xef,0x54,0xed,0xff,0x00,0x00,0x01,0x4f, - 0x49,0x44,0x41,0x54,0x78,0xda,0x62,0xac,0xaf,0xaf, - 0x67,0x20,0x12,0x4c,0x02,0xe2,0x40,0x20,0x7e,0x04, - 0xc4,0xf1,0x40,0x7c,0x07,0x24,0xd8,0xd0,0xd0,0x80, - 0x57,0x13,0x0b,0x91,0x86,0xa7,0x00,0x71,0x2e,0x94, - 0x2d,0x03,0xc4,0xab,0x80,0xd8,0x88,0x18,0x8d,0x4c, - 0x44,0x5a,0x50,0x83,0xc6,0x37,0x04,0x62,0x7b,0x6a, - 0x59,0x50,0x09,0xc4,0xf2,0x58,0xc4,0x57,0x50,0xcb, - 0x82,0x16,0x1c,0xe2,0x12,0x40,0xec,0x4d,0xa9,0x05, - 0x95,0x04,0xd4,0xf4,0x02,0x23,0x99,0x03,0x9f,0x01, - 0x8c,0xd0,0x54,0x64,0x0a,0xc4,0x8a,0x40,0x2c,0x02, - 0xc4,0x62,0x40,0xac,0x05,0xc4,0xaa,0x40,0x6c,0x40, - 0x84,0x0f,0x9f,0x01,0xf1,0x25,0x20,0xbe,0x06,0x65, - 0xbf,0x06,0xe2,0x57,0x40,0x8b,0x77,0xc0,0x2c,0x68, - 0x02,0xd2,0xb5,0x0c,0xd4,0x07,0x27,0x80,0x38,0x8e, - 0x89,0x46,0x86,0x83,0x80,0x05,0x10,0x57,0x33,0x31, - 0xd0,0x16,0xbc,0x00,0x59,0x10,0x49,0x23,0xc3,0x37, - 0x80,0x52,0x20,0x0b,0x34,0x3d,0xff,0x27,0x36,0x5d, - 0x13,0x09,0xd6,0x03,0x23,0x39,0x08,0x39,0x99,0xae, - 0x04,0x62,0x5f,0x2a,0x19,0x3e,0x1b,0x66,0x38,0x7a, - 0x3e,0xd8,0x02,0xcd,0xfe,0xef,0xc8,0x34,0xf8,0x0f, - 0x28,0x48,0x80,0x86,0xa7,0xe1,0xcb,0x68,0x87,0x80, - 0x78,0x31,0x99,0x16,0x7c,0x05,0x1a,0x5e,0x4b,0x4c, - 0x4e,0xd6,0x20,0xd3,0x02,0x7e,0xa0,0x05,0xda,0x84, - 0x2c,0xe0,0x02,0x62,0x5b,0x0a,0xc2,0xdf,0x90,0x90, - 0x05,0xca,0x50,0x4b,0xc8,0x05,0x62,0x84,0x2c,0x90, - 0xa0,0x30,0x05,0x29,0x10,0xb2,0x40,0x05,0x8f,0xe6, - 0xed,0x40,0x1c,0x02,0xc4,0xed,0x40,0xfc,0x05,0x4f, - 0xf1,0x80,0xd7,0x82,0x87,0x58,0x34,0x6d,0x84,0x96, - 0xfb,0x5e,0x40,0xbc,0x16,0x88,0xab,0x80,0x58,0x1d, - 0x88,0x27,0x03,0xf1,0x37,0x34,0xb5,0x0f,0x08,0x59, - 0xb0,0x0d,0xea,0xc2,0x4f,0x40,0x7c,0x15,0x88,0x7d, - 0x80,0x38,0x00,0x2a,0x8e,0x5e,0x44,0xe7,0x41,0x7d, - 0xbc,0x0c,0x88,0x3f,0x03,0xf1,0x61,0x20,0x2e,0x40, - 0xb7,0x00,0x20,0xc0,0x00,0x05,0x84,0x44,0xdb,0x7c, - 0x04,0x1f,0x70,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/star_unfilled_svg.cpp b/data/converted/star_unfilled_svg.cpp new file mode 100644 index 000000000..088a0e993 --- /dev/null +++ b/data/converted/star_unfilled_svg.cpp @@ -0,0 +1,199 @@ +//this file was auto-generated from "star_unfilled.svg" by res2h + +#include "../Resources.h" + +const size_t star_unfilled_svg_size = 1920; +const unsigned char star_unfilled_svg_data[1920] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x36,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x30,0x2e,0x37,0x36,0x31,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x36,0x20, + 0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37, + 0x36,0x20,0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30, + 0x2e,0x38,0x38,0x38,0x2c,0x30,0x2e,0x35,0x30,0x35, + 0x63,0x30,0x2e,0x30,0x33,0x32,0x2c,0x30,0x2e,0x30, + 0x32,0x31,0x2c,0x30,0x2e,0x31,0x30,0x33,0x2c,0x30, + 0x2e,0x30,0x38,0x37,0x2c,0x30,0x2e,0x31,0x37,0x39, + 0x2c,0x30,0x2e,0x32,0x34,0x31,0x6c,0x32,0x2e,0x33, + 0x32,0x34,0x2c,0x34,0x2e,0x37,0x30,0x38,0x63,0x30, + 0x2e,0x34,0x31,0x36,0x2c,0x30,0x2e,0x38,0x34,0x35, + 0x2c,0x31,0x2e,0x34,0x37,0x34,0x2c,0x31,0x2e,0x36, + 0x31,0x33,0x2c,0x32,0x2e,0x34,0x30,0x35,0x2c,0x31, + 0x2e,0x37,0x34,0x38,0x0d,0x0a,0x09,0x6c,0x35,0x2e, + 0x31,0x39,0x34,0x2c,0x30,0x2e,0x37,0x35,0x34,0x63, + 0x30,0x2e,0x31,0x38,0x38,0x2c,0x30,0x2e,0x30,0x32, + 0x37,0x2c,0x30,0x2e,0x32,0x37,0x32,0x2c,0x30,0x2e, + 0x30,0x38,0x33,0x2c,0x30,0x2e,0x32,0x38,0x34,0x2c, + 0x30,0x2e,0x30,0x38,0x33,0x63,0x30,0x2e,0x30,0x30, + 0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2c, + 0x30,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x63, + 0x30,0x2c,0x30,0x2e,0x30,0x32,0x33,0x2d,0x30,0x2e, + 0x30,0x33,0x33,0x2c,0x30,0x2e,0x31,0x31,0x39,0x2d, + 0x30,0x2e,0x31,0x37,0x35,0x2c,0x30,0x2e,0x32,0x35, + 0x38,0x6c,0x2d,0x33,0x2e,0x37,0x36,0x31,0x2c,0x33, + 0x2e,0x36,0x36,0x33,0x0d,0x0a,0x09,0x63,0x2d,0x30, + 0x2e,0x36,0x37,0x34,0x2c,0x30,0x2e,0x36,0x35,0x38, + 0x2d,0x31,0x2e,0x30,0x37,0x38,0x2c,0x31,0x2e,0x39, + 0x30,0x31,0x2d,0x30,0x2e,0x39,0x31,0x39,0x2c,0x32, + 0x2e,0x38,0x32,0x39,0x6c,0x30,0x2e,0x38,0x38,0x39, + 0x2c,0x35,0x2e,0x31,0x37,0x34,0x63,0x30,0x2e,0x30, + 0x33,0x34,0x2c,0x30,0x2e,0x31,0x39,0x35,0x2c,0x30, + 0x2e,0x30,0x30,0x34,0x2c,0x30,0x2e,0x32,0x39,0x33, + 0x2d,0x30,0x2e,0x30,0x31,0x34,0x2c,0x30,0x2e,0x32, + 0x39,0x39,0x63,0x2d,0x30,0x2e,0x30,0x33,0x31,0x2c, + 0x30,0x2d,0x30,0x2e,0x31,0x32,0x32,0x2d,0x30,0x2e, + 0x30,0x30,0x39,0x2d,0x30,0x2e,0x32,0x37,0x36,0x2d, + 0x30,0x2e,0x30,0x38,0x39,0x0d,0x0a,0x09,0x6c,0x2d, + 0x34,0x2e,0x36,0x34,0x35,0x2d,0x32,0x2e,0x34,0x34, + 0x33,0x63,0x2d,0x30,0x2e,0x34,0x30,0x34,0x2d,0x30, + 0x2e,0x32,0x31,0x33,0x2d,0x30,0x2e,0x39,0x33,0x33, + 0x2d,0x30,0x2e,0x33,0x32,0x39,0x2d,0x31,0x2e,0x34, + 0x38,0x37,0x2d,0x30,0x2e,0x33,0x32,0x39,0x73,0x2d, + 0x31,0x2e,0x30,0x38,0x33,0x2c,0x30,0x2e,0x31,0x31, + 0x36,0x2d,0x31,0x2e,0x34,0x38,0x37,0x2c,0x30,0x2e, + 0x33,0x32,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x34,0x35, + 0x2c,0x32,0x2e,0x34,0x34,0x33,0x63,0x2d,0x30,0x2e, + 0x31,0x35,0x34,0x2c,0x30,0x2e,0x30,0x38,0x2d,0x30, + 0x2e,0x32,0x34,0x35,0x2c,0x30,0x2e,0x30,0x38,0x39, + 0x2d,0x30,0x2e,0x32,0x38,0x2c,0x30,0x2e,0x31,0x30, + 0x32,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x31, + 0x33,0x2d,0x30,0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e, + 0x30,0x34,0x33,0x2d,0x30,0x2e,0x31,0x31,0x36,0x2d, + 0x30,0x2e,0x30,0x31,0x2d,0x30,0x2e,0x33,0x31,0x32, + 0x6c,0x30,0x2e,0x38,0x38,0x38,0x2d,0x35,0x2e,0x31, + 0x37,0x34,0x63,0x30,0x2e,0x31,0x36,0x2d,0x30,0x2e, + 0x39,0x32,0x39,0x2d,0x30,0x2e,0x32,0x34,0x34,0x2d, + 0x32,0x2e,0x31,0x37,0x32,0x2d,0x30,0x2e,0x39,0x31, + 0x39,0x2d,0x32,0x2e,0x38,0x32,0x39,0x4c,0x30,0x2e, + 0x36,0x37,0x36,0x2c,0x38,0x2e,0x32,0x39,0x35,0x0d, + 0x0a,0x09,0x43,0x30,0x2e,0x35,0x33,0x34,0x2c,0x38, + 0x2e,0x31,0x35,0x37,0x2c,0x30,0x2e,0x35,0x2c,0x38, + 0x2e,0x30,0x36,0x31,0x2c,0x30,0x2e,0x34,0x39,0x33, + 0x2c,0x38,0x2e,0x30,0x36,0x31,0x63,0x30,0x2c,0x30, + 0x2c,0x30,0x2c,0x30,0x2c,0x30,0x2c,0x30,0x43,0x30, + 0x2e,0x35,0x30,0x36,0x2c,0x38,0x2e,0x30,0x34,0x33, + 0x2c,0x30,0x2e,0x35,0x39,0x2c,0x37,0x2e,0x39,0x38, + 0x34,0x2c,0x30,0x2e,0x37,0x38,0x37,0x2c,0x37,0x2e, + 0x39,0x35,0x36,0x6c,0x35,0x2e,0x31,0x39,0x32,0x2d, + 0x30,0x2e,0x37,0x35,0x34,0x0d,0x0a,0x09,0x63,0x30, + 0x2e,0x39,0x33,0x33,0x2d,0x30,0x2e,0x31,0x33,0x35, + 0x2c,0x31,0x2e,0x39,0x39,0x2d,0x30,0x2e,0x39,0x30, + 0x33,0x2c,0x32,0x2e,0x34,0x30,0x37,0x2d,0x31,0x2e, + 0x37,0x34,0x38,0x6c,0x32,0x2e,0x33,0x32,0x33,0x2d, + 0x34,0x2e,0x37,0x30,0x38,0x43,0x31,0x30,0x2e,0x37, + 0x38,0x35,0x2c,0x30,0x2e,0x35,0x39,0x32,0x2c,0x31, + 0x30,0x2e,0x38,0x35,0x36,0x2c,0x30,0x2e,0x35,0x32, + 0x35,0x2c,0x31,0x30,0x2e,0x38,0x38,0x38,0x2c,0x30, + 0x2e,0x35,0x30,0x35,0x20,0x4d,0x31,0x30,0x2e,0x38, + 0x38,0x38,0x2c,0x30,0x0d,0x0a,0x09,0x63,0x2d,0x30, + 0x2e,0x32,0x32,0x38,0x2c,0x30,0x2d,0x30,0x2e,0x34, + 0x35,0x35,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2d,0x30, + 0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x35,0x32,0x34, + 0x4c,0x37,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x32, + 0x33,0x32,0x63,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x39,0x39,0x2d,0x31,0x2e,0x32,0x35, + 0x39,0x2c,0x31,0x2e,0x33,0x36,0x33,0x2d,0x32,0x2e, + 0x30,0x33,0x2c,0x31,0x2e,0x34,0x37,0x35,0x4c,0x30, + 0x2e,0x37,0x31,0x35,0x2c,0x37,0x2e,0x34,0x36,0x31, + 0x0d,0x0a,0x09,0x43,0x2d,0x30,0x2e,0x30,0x35,0x37, + 0x2c,0x37,0x2e,0x35,0x37,0x33,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x38,0x2e,0x31,0x31,0x2c,0x30,0x2e, + 0x33,0x32,0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x6c, + 0x33,0x2e,0x37,0x35,0x39,0x2c,0x33,0x2e,0x36,0x36, + 0x34,0x63,0x30,0x2e,0x35,0x35,0x39,0x2c,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x30,0x2e,0x39,0x30,0x37,0x2c, + 0x31,0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x37,0x37, + 0x35,0x2c,0x32,0x2e,0x33,0x38,0x36,0x6c,0x2d,0x30, + 0x2e,0x38,0x38,0x38,0x2c,0x35,0x2e,0x31,0x37,0x34, + 0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x39,0x36, + 0x2c,0x30,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e,0x31, + 0x31,0x38,0x2c,0x30,0x2e,0x38,0x38,0x34,0x2c,0x30, + 0x2e,0x35,0x30,0x36,0x2c,0x30,0x2e,0x38,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2c,0x30, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x30,0x34,0x37, + 0x2c,0x30,0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x31, + 0x34,0x36,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x32, + 0x2e,0x34,0x34,0x33,0x63,0x30,0x2e,0x33,0x34,0x35, + 0x2d,0x30,0x2e,0x31,0x38,0x31,0x2c,0x30,0x2e,0x38, + 0x2d,0x30,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e,0x32, + 0x35,0x34,0x2d,0x30,0x2e,0x32,0x37,0x31,0x0d,0x0a, + 0x09,0x63,0x30,0x2e,0x34,0x35,0x35,0x2c,0x30,0x2c, + 0x30,0x2e,0x39,0x31,0x2c,0x30,0x2e,0x30,0x39,0x31, + 0x2c,0x31,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2e,0x32, + 0x37,0x31,0x6c,0x34,0x2e,0x36,0x34,0x35,0x2c,0x32, + 0x2e,0x34,0x34,0x33,0x63,0x30,0x2e,0x31,0x38,0x39, + 0x2c,0x30,0x2e,0x31,0x2c,0x30,0x2e,0x33,0x36,0x32, + 0x2c,0x30,0x2e,0x31,0x34,0x36,0x2c,0x30,0x2e,0x35, + 0x30,0x39,0x2c,0x30,0x2e,0x31,0x34,0x36,0x63,0x30, + 0x2e,0x33,0x38,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x36, + 0x30,0x33,0x2d,0x30,0x2e,0x33,0x32,0x37,0x2c,0x30, + 0x2e,0x35,0x30,0x37,0x2d,0x30,0x2e,0x38,0x38,0x34, + 0x6c,0x2d,0x30,0x2e,0x38,0x38,0x39,0x2d,0x35,0x2e, + 0x31,0x37,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e, + 0x31,0x33,0x32,0x2d,0x30,0x2e,0x37,0x36,0x38,0x2c, + 0x30,0x2e,0x32,0x31,0x38,0x2d,0x31,0x2e,0x38,0x34, + 0x32,0x2c,0x30,0x2e,0x37,0x37,0x35,0x2d,0x32,0x2e, + 0x33,0x38,0x36,0x6c,0x33,0x2e,0x37,0x36,0x2d,0x33, + 0x2e,0x36,0x36,0x34,0x63,0x30,0x2e,0x35,0x35,0x38, + 0x2d,0x30,0x2e,0x35,0x34,0x34,0x2c,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x31,0x2e,0x30,0x38,0x31,0x2d,0x30, + 0x2e,0x33,0x38,0x38,0x2d,0x31,0x2e,0x31,0x39,0x33, + 0x6c,0x2d,0x35,0x2e,0x31,0x39,0x33,0x2d,0x30,0x2e, + 0x37,0x35,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e, + 0x37,0x37,0x31,0x2d,0x30,0x2e,0x31,0x31,0x32,0x2d, + 0x31,0x2e,0x36,0x38,0x35,0x2d,0x30,0x2e,0x37,0x37, + 0x35,0x2d,0x32,0x2e,0x30,0x32,0x39,0x2d,0x31,0x2e, + 0x34,0x37,0x35,0x6c,0x2d,0x32,0x2e,0x33,0x32,0x34, + 0x2d,0x34,0x2e,0x37,0x30,0x38,0x43,0x31,0x31,0x2e, + 0x33,0x34,0x33,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2c, + 0x31,0x31,0x2e,0x31,0x31,0x36,0x2c,0x30,0x2c,0x31, + 0x30,0x2e,0x38,0x38,0x38,0x2c,0x30,0x4c,0x31,0x30, + 0x2e,0x38,0x38,0x38,0x2c,0x30,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/textbox_glow_png.cpp b/data/converted/textbox_glow_png.cpp deleted file mode 100644 index 9c5293671..000000000 --- a/data/converted/textbox_glow_png.cpp +++ /dev/null @@ -1,359 +0,0 @@ -//this file was auto-generated from "textbox_glow.png" by res2h - -#include "../Resources.h" - -const size_t textbox_glow_png_size = 3517; -const unsigned char textbox_glow_png_data[3517] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x02,0xd8,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0x99,0x5d,0x72,0xda, - 0x30,0x14,0x46,0xcf,0x87,0x6d,0x20,0x21,0xdd,0x47, - 0xbb,0x8a,0xae,0xa0,0xfb,0x7f,0xcf,0x16,0x9a,0x50, - 0x0c,0x36,0x5f,0x1f,0x24,0x61,0xe1,0xc9,0x4c,0x0c, - 0x88,0xa4,0x99,0x5a,0x33,0x77,0x6c,0xcc,0x20,0xee, - 0x91,0xee,0xaf,0x2c,0xdb,0x7c,0xe5,0xb1,0xe0,0x8b, - 0x8f,0x19,0x60,0x06,0x98,0x01,0x66,0x80,0x19,0xe0, - 0xff,0x06,0xa8,0xef,0xb0,0x20,0xb9,0x28,0xfb,0xce, - 0xc0,0x71,0x24,0xff,0x0c,0x40,0x15,0xe7,0xaa,0xe3, - 0x7d,0x92,0x31,0x40,0x9f,0x49,0x17,0xa5,0xff,0x4c, - 0x80,0x05,0xd0,0xbc,0x21,0xf5,0x68,0x17,0xf2,0xd5, - 0xef,0x80,0xc3,0x1b,0x72,0xfc,0x68,0x80,0x0a,0x58, - 0x02,0x2b,0x60,0x65,0x58,0x29,0x7c,0x4e,0x10,0xd5, - 0x1b,0x00,0x7d,0xa6,0xf0,0x1e,0x68,0xa3,0x2c,0xe2, - 0xe7,0xfe,0xa3,0x00,0xea,0xa8,0xf8,0x3a,0x89,0xc2, - 0x75,0x15,0xa5,0xc1,0xd4,0x88,0x2a,0xfb,0x4d,0x8f, - 0xe9,0x10,0x07,0x70,0x8b,0xd5,0xa2,0xd3,0x6e,0x25, - 0xd8,0x36,0xee,0xd0,0x5d,0x01,0xaa,0xa8,0xe4,0x03, - 0xf0,0x20,0xe9,0xf9,0x16,0x1b,0xb4,0xfd,0x7d,0xe4, - 0xf0,0xbe,0x64,0x27,0xea,0x2b,0x6c,0x7e,0x19,0x57, - 0xfd,0x41,0xd2,0xb3,0x6d,0xdd,0x02,0x20,0xc9,0xb6, - 0x7f,0x44,0xcd,0xad,0x60,0x6a,0xed,0x54,0x9f,0xb8, - 0x14,0xa0,0x09,0xab,0xef,0x35,0xe8,0xb1,0x60,0xf8, - 0xdd,0x30,0x28,0xdf,0x33,0x40,0x14,0x05,0xa8,0x06, - 0x00,0xad,0xa3,0x09,0x95,0x04,0xc8,0x43,0xeb,0xe4, - 0x10,0x5b,0x5f,0xe8,0x2f,0x4d,0xe6,0xbc,0xc5,0x76, - 0xc0,0xb0,0xd1,0x29,0xbc,0xfa,0x00,0xda,0xc7,0x48, - 0xd5,0x4f,0xb1,0xe9,0xa9,0xb6,0x9f,0x00,0x96,0x19, - 0x44,0x91,0xa1,0xb0,0x18,0x21,0x8a,0x59,0xcb,0x51, - 0x2e,0x29,0x06,0x50,0x65,0x31,0xbe,0x28,0x40,0x16, - 0x8e,0x57,0x88,0x06,0x9f,0xe5,0x91,0x82,0x00,0x3e, - 0xed,0x42,0xe3,0xb0,0x13,0xa5,0xc6,0x0a,0x58,0x46, - 0xc5,0x1b,0x74,0x96,0x1b,0x0a,0x02,0x88,0x05,0xb8, - 0x02,0x6a,0x95,0x2d,0x04,0x83,0xc9,0x9c,0x2b,0x3e, - 0x09,0xa0,0x9e,0x6e,0xa6,0x08,0xbc,0x00,0x25,0x88, - 0xaa,0x70,0x55,0x5c,0x65,0x4a,0x2f,0x86,0xff,0x2c, - 0xda,0x0f,0x48,0x21,0x5c,0x2b,0xde,0x17,0x0b,0x43, - 0x69,0x81,0x98,0xaa,0xf8,0xb5,0x0d,0x8d,0x41,0xce, - 0x52,0x7e,0xa9,0x30,0xe4,0x38,0x77,0x9a,0xd7,0xa5, - 0x01,0x3c,0x2a,0x89,0xfb,0x5b,0xeb,0xf8,0xd1,0xe8, - 0x86,0x39,0x9d,0xfe,0x63,0x12,0xc8,0x54,0x80,0x23, - 0xd0,0x7b,0xb8,0x76,0x97,0x56,0x8d,0xef,0x8c,0x03, - 0xd0,0x85,0x79,0xd5,0x73,0x5e,0x52,0x94,0x03,0x48, - 0xd9,0x52,0x43,0x3d,0x5f,0xca,0x09,0x5a,0x60,0xaf, - 0xa1,0x57,0xe8,0xee,0x02,0x30,0xa4,0x7a,0x5a,0x60, - 0x57,0x0e,0x40,0xbb,0x38,0x5f,0x9b,0x35,0x3c,0xc5, - 0x01,0x62,0xad,0xa2,0x7d,0x69,0x00,0xc3,0x36,0x03, - 0xd8,0x67,0xbb,0xf0,0x2e,0x40,0x7d,0xa1,0xa3,0xa5, - 0xd5,0x0f,0xd9,0xd8,0xfe,0x29,0xe9,0xa6,0x68,0x64, - 0xfb,0x17,0xf8,0x15,0x14,0x20,0x4c,0x1b,0xba,0xb6, - 0x69,0x3e,0xa6,0x0b,0x5f,0x70,0xa4,0x4e,0x6c,0x03, - 0x3c,0x19,0x9e,0x04,0xdf,0x30,0x4f,0x88,0x27,0x60, - 0x63,0xfc,0xa8,0x50,0x6e,0x2f,0x71,0xca,0xde,0xc9, - 0x04,0xbd,0x8f,0xe6,0xb2,0x05,0x5e,0x81,0x17,0xf0, - 0x0b,0xe8,0x77,0xb8,0xe7,0x25,0x3e,0xff,0x73,0x8f, - 0x7e,0x20,0x45,0x8b,0x05,0x50,0x19,0x16,0x4a,0x09, - 0x47,0x83,0x8f,0x28,0x28,0xb8,0xc2,0x34,0xc8,0x35, - 0x48,0xb1,0xd3,0xea,0x8c,0x0e,0x82,0x16,0xb3,0x43, - 0x09,0x42,0xaf,0x51,0xe9,0x6d,0x7c,0x9e,0xfc,0xe0, - 0x2e,0x2d,0xe5,0x31,0xda,0xe8,0xa0,0xfc,0xd0,0xc3, - 0x76,0xe0,0xd6,0x68,0x2d,0x58,0x86,0xba,0x46,0x55, - 0x4a,0xdf,0x59,0x14,0xdb,0x23,0x92,0xd3,0x6e,0xe3, - 0x6a,0x87,0x6b,0x78,0xbe,0xbf,0xe4,0x88,0xe5,0x9a, - 0x82,0xac,0xcf,0xb6,0x37,0x25,0xb7,0xce,0xc1,0xc1, - 0x77,0x4a,0xa7,0x12,0xa9,0xbe,0xf1,0xa9,0x30,0xe8, - 0x47,0x7e,0x94,0x02,0x41,0x2e,0xed,0xa5,0x09,0xf2, - 0xda,0x8a,0xb2,0x1b,0x9d,0xf5,0x74,0xca,0x1c,0xdc, - 0xd0,0x28,0x15,0x66,0x9a,0x74,0x2e,0xd4,0x5e,0x7b, - 0x2e,0xa4,0x1b,0xdf,0x52,0x4e,0x3f,0x99,0x33,0xc7, - 0xe8,0x2b,0x5d,0x6c,0x1b,0x8b,0x9c,0xcc,0xa9,0xd0, - 0x6b,0xd6,0x4f,0x3b,0x1b,0x55,0xe1,0xf7,0xc4,0x1f, - 0x7e,0x3a,0xad,0xf9,0x45,0xf7,0x0c,0x30,0x03,0xcc, - 0x00,0x33,0xc0,0x2d,0xe3,0xef,0x00,0x24,0x2b,0x53, - 0x56,0xac,0xd2,0x8e,0xc8,0x00,0x00,0x00,0x00,0x49, - 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/textbox_png.cpp b/data/converted/textbox_png.cpp deleted file mode 100644 index 91444a5ee..000000000 --- a/data/converted/textbox_png.cpp +++ /dev/null @@ -1,297 +0,0 @@ -//this file was auto-generated from "textbox.png" by res2h - -#include "../Resources.h" - -const size_t textbox_png_size = 2894; -const unsigned char textbox_png_data[2894] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, - 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, - 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, - 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, - 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, - 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, - 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, - 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, - 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, - 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, - 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, - 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, - 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, - 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, - 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, - 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, - 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, - 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, - 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, - 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, - 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, - 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, - 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, - 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, - 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, - 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, - 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, - 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, - 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, - 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, - 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, - 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, - 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, - 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, - 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, - 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, - 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, - 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, - 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, - 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, - 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, - 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, - 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, - 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, - 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, - 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, - 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, - 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, - 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, - 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, - 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, - 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, - 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, - 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, - 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, - 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, - 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, - 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, - 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, - 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, - 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, - 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, - 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, - 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, - 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, - 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, - 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, - 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, - 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, - 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, - 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, - 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, - 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, - 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, - 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, - 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, - 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, - 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, - 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, - 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, - 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, - 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, - 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, - 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, - 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, - 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, - 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, - 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, - 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, - 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, - 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, - 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, - 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, - 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, - 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, - 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, - 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, - 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, - 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, - 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, - 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, - 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, - 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, - 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, - 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, - 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, - 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, - 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, - 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, - 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, - 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, - 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, - 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, - 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, - 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, - 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, - 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, - 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, - 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, - 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, - 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, - 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, - 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, - 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, - 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, - 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, - 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, - 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, - 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, - 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, - 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, - 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, - 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, - 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, - 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, - 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, - 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, - 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, - 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, - 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, - 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, - 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, - 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, - 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, - 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, - 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, - 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, - 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, - 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, - 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, - 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, - 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, - 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, - 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, - 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, - 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, - 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, - 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, - 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, - 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, - 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, - 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, - 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, - 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, - 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, - 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, - 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, - 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, - 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, - 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, - 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, - 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, - 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, - 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, - 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, - 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, - 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, - 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, - 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, - 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, - 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, - 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, - 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, - 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, - 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, - 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, - 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, - 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, - 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, - 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, - 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, - 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, - 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, - 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, - 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, - 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, - 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, - 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, - 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, - 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, - 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, - 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, - 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, - 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, - 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, - 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, - 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, - 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, - 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, - 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, - 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, - 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, - 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, - 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, - 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, - 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, - 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, - 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, - 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, - 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, - 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, - 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, - 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, - 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, - 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, - 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, - 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, - 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, - 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, - 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, - 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, - 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, - 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, - 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, - 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, - 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, - 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, - 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, - 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, - 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, - 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, - 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, - 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, - 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, - 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, - 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, - 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, - 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, - 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, - 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, - 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, - 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, - 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, - 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, - 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, - 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, - 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, - 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, - 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, - 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, - 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, - 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, - 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, - 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, - 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00, - 0x00,0x7a,0x25,0x00,0x00,0x80,0x83,0x00,0x00,0xf9, - 0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,0x00, - 0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17, - 0x6f,0x92,0x5f,0xc5,0x46,0x00,0x00,0x00,0x69,0x49, - 0x44,0x41,0x54,0x78,0xda,0xec,0xd9,0xc1,0x09,0x00, - 0x31,0x08,0x04,0xc0,0xec,0x91,0xfe,0x5b,0xde,0xeb, - 0x21,0x3e,0x42,0x60,0xb6,0x00,0x71,0x1e,0x82,0x62, - 0xda,0xae,0x97,0xf3,0xad,0xc7,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0x70,0xf6,0xb4,0x40, - 0x92,0xd1,0x3e,0xde,0x36,0xd7,0x00,0x49,0x3a,0x6d, - 0x60,0x5a,0xc3,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x9c,0xaf,0xe3,0xd3,0xff,0xc0, - 0xed,0x83,0x26,0x1e,0x1c,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xa7,0xf9,0x01,0x00,0x00, - 0xff,0xff,0x03,0x00,0x53,0xb1,0x19,0x59,0xd2,0x78, - 0x50,0x32,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; diff --git a/data/resources/arrow.png b/data/resources/arrow.png deleted file mode 100644 index cfd7353f8950d20a5f29420bb46df114c06c524a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1193 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eQ!3HG1Sky`ZDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WSsFVUI6Ju-Sh|?I8XCG9J6amLIJvmFm>5`E z8o9a}!}Pl3Czs}?=9R$orXchh;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%EaOpXERGz z3pY16pm{FX-2%~@g2gQ$y_N--UU0(X(zWb zomAjm@5qM+6E=+pXKy~>S@VGN^@~}8 zR_`9pWvs2ARAFBKj{WY^C7e(9%(~lHZQMKYiR}yBJ4e?)IU4&wK=|bBf8q%YvMQ$f T|2A;_0~H>gu6{1-oD!M + + + + + + + diff --git a/data/resources/checkbox_checked.png b/data/resources/checkbox_checked.png deleted file mode 100644 index c0253c3a3f0d9c9d56a32dadfff27b303e0a6966..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#RAbg?iuG;}p~v@~>aa&dDpF|f2W za&2=9ZF3nBND}m`vLFjeGsTY(OatnYqyQCInmZhe+73JqDfIV%MiN!4jhQ>z5 zmM*x>gX&Ge?G|U8ZqWxiMjsTlNKp+F0;V4j6P|E^9C*@C%>$az5;;-@-1iF59xd_Oe(CTH>an?HA22hLi?wvpl70l5gai8J+!J}|yJ zVELm@^B+f;&(Dq@P0JJ5bE5ui(YVJht?=wXWyi{k%hSAhzP+qtnRjr<5uRgLEK>Go zTB>%6r#~?CNE7gz5qw1Zw(9GgjC0>uN)9w%Qh9iTuQ+z?i7KJIgVGrqK3pH!ig!(B zu3?K$h)y)p)U$N%ZG3oOLZ_EaihxmIxAeT|#Ri%z)qnP{6TB|5L(P`Uo5$qQ zZ7`nm+3J4Hf%MS15lbsJE{t}GR(EXv?{_*N5=dvd2j)I9jtH4oJhk)uf|a^T{U;mO z^A$ZmG~v1S2j+LC&+iycd~H^ow{8FWRZnHLHa=5H^(wrsQv7Rmj=iq^d7 + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/checkbox_unchecked.png b/data/resources/checkbox_unchecked.png deleted file mode 100644 index 0b7cb6f66d5fe17f2201358e53357ccc014dad2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1131 zcmaJ=TSyd97#^^-*peQMw5!u(l;O^0S663n%5`T~H=0e>tu}jcoH@FK&Bd9cJK96G zMHh%}6a^XdVh<5rAn2i+WS~V<&`T6WFVYpd7!d{08FQ_Nwqa(@IX~a`{nxX0vdo4?r7U|n{#+#QkO$}*Gv)kBm{Qx#P6U|Vly5#EPz*& z0iR4W3?2-UOjUI-$W-Efn(EIGVbjlYx@kAOzlcT6i zCPQWdq+xYZ49l{vhTrc)2%p`jL&@>!_VS#90BqS(O{f|=?kY;{Mi1l(6zT62G;>;3 zx2MX43Pw4SNiihtrj!GU;{TzVHjTDn0{n^hpTc&s&jeHg*hY^fqsDbCcU_rW*a8wX ztfXOV%T=*CZ9v0L8zvrZ3F50nNmg~&P%+66MJ}e>P|{@(6L` zwKWVA34~ZiXb_@870t5#NFP>N#{IN9Tn=%KPOx)jf2LMZ7x zeSe(s-mae~WNMym$8PNGZC#b}F0H@vIPhd>_S>R6i%zclRGOXN>SYI7PZjL0EsMrZ zpKrTdKuOE4-(7k5;s~8=DykfwRW-0_{OGQkwF4`hE%y$c89LWE;d#}DeJ?z*@AHf= z1LM2EC0Gul3A*FQoWam0DSO~x#lzx}BjqLI5(O?-_%y7Cw?Bw@^iO7@`OCy^^Nx@;=QlEb3(;~i{stJSJxlD_jP8M hnZf6e?s@RVH;fI + + + + + diff --git a/data/resources/fav_add.svg b/data/resources/fav_add.svg new file mode 100644 index 000000000..94aea1560 --- /dev/null +++ b/data/resources/fav_add.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/data/resources/fav_remove.svg b/data/resources/fav_remove.svg new file mode 100644 index 000000000..c086952db --- /dev/null +++ b/data/resources/fav_remove.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/data/resources/help/a.png b/data/resources/help/a.png deleted file mode 100644 index 0cfcece38e1f730528c0608e165ea145f93a80e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1534 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4^64!{5;QX|b^2DN42FH~Aq*MjZ z+{EB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdXL-x;UD-xdAClV7R*)J6amLIJvmFm>5`E8o9a} z!}Pl3Czs}?=9R$orXcj1jm8{S5|xp zXb-ufafri-yLUymMB@*2ri)vix28WxzA^Xby~6A4bw73*f3`EeUvvNWKH;+|MuOf~ z8`BE7t~6;0FxMY6`oXpAfW(g+;SDAaDnzz4#0AWMKF4T+!gB}v9}Mpr5;x4&-|;v( zhF48;f!(6XbN){;4qR)R|M>3wzBj(U31TrDP2V#yFR%%cIGJ6^vyOdcJll8XICqJY zw{~({eVQrH8aXe5$Ma76f@9fw>~bOnt3GSG&0mo@k12ghV@hm{^5d@8D*iD>-+!(Z z@W03|W;sozIIM7O%C^Mz-y0k=ZL%f0;~GO#{4)!n zzhBlflk<{(yKG1AwgVlX*#3Sw`Y`0?3)6^)KLoeWIq54`&0iOBWVX=f>8CWOPpL6H z{!vVs|Ax+n|+9-+bMP3l7pf1A6)+ZQg%i;w|D&ko)eYxnV3#B*KC<{ z^mdx3Y--yre$U`vcW$5bh>g?V^pWjF+3n2Bf24Pu(g_2Gp5MBSb9kR{UwC}|#ruOh zj?eyGT)Og-%QmqOqH8vPNz1jDQkgtg=YWz-`W(Tx&nK;ERI#3$x%4H^>zYZ0PPH1l vZU+32P>Jm6>gTe~DWM4fKWj%3 diff --git a/data/resources/help/b.png b/data/resources/help/b.png deleted file mode 100644 index 0112405d17427f9788acb50d0f1be8f3bb24cdb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1522 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4^64!{5;QX|b^2DN42FH~Aq*MjZ z+{EB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdYYUm^qs{nHyTVShyJ)x*9uL8oD^SxVe}ZSXvsn zx*Eguy5uL9=BDPA!1Sgd^cvyR3rY;R1wfl!Qj0RnQd8WD@^clyp0>)w=@v6LoaRCG zrr>sq0ZzU8K*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*w#-rd}d%^O7V1Y45_%a zXS%P4NTS5?^mf}0ZI9`q3!O7x zTqMZxw(YVLc}g7$PuyF~9eXr%U3Yu@ldoWlYnwSYJuUtB;rAP?KimB;zt{h~^1g%8 z#0xE}*uEdsEs&hjAYj2({XpBJS>%Tjr$kAG97FE|){dKdf;mpjh%#UZJ0NYq`|l>} z_01CQ2b9=5GT*tpuYWMHV~1(|nZ5hhK3z6DL3E4P+4&8g0ZV==&zkmq!SR!OSbHpd z+Ql#4l4Qy)dp0$pC;m*k#ygFUS!Z7!w3ctb<)`?Kb4B!8#yf&0?^xBvZf|W$juAPs zz~uehjpg&^@Fok+!*jkR-g){Vmf`Lkhq41KH`xC^kXj-9q)|I1 z?tS9BbH(p@w|*{|WXE;JlfPtXpx&wv7u43R_P)Qku4($I_iBl|HF&FUG$$TYk{4;% z{$QSg+l+mCZZun#{*p=F^8a*XPOQXYkMo;KH@&p_aa5*2ce&slljRq5tSgfM1kJ?)eC#C%3)oGMIw52LzYp#W>J@a&y!fBa>Qmv^C?hc=h*1gyob$)U}+;96u z&M(*eRJoiQwehEb@6F)H7HenaH}e(DQcv!>eKPyZCkD&qS2FkaYQCFt`Ql8ziTyQm zn7S^XDRiCA<|Scjr*nw4&-n4TT`t)V^q#-z@xFY%B + + + + + + + + + diff --git a/data/resources/help/button_b.svg b/data/resources/help/button_b.svg new file mode 100644 index 000000000..f2e80e738 --- /dev/null +++ b/data/resources/help/button_b.svg @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/data/resources/help/button_l.svg b/data/resources/help/button_l.svg new file mode 100644 index 000000000..6f747cac4 --- /dev/null +++ b/data/resources/help/button_l.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/data/resources/help/button_r.svg b/data/resources/help/button_r.svg new file mode 100644 index 000000000..3049b961c --- /dev/null +++ b/data/resources/help/button_r.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/data/resources/help/button_select.svg b/data/resources/help/button_select.svg new file mode 100644 index 000000000..79e1854b1 --- /dev/null +++ b/data/resources/help/button_select.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + diff --git a/data/resources/help/button_start.svg b/data/resources/help/button_start.svg new file mode 100644 index 000000000..64ca0bdbb --- /dev/null +++ b/data/resources/help/button_start.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + diff --git a/data/resources/help/button_x.svg b/data/resources/help/button_x.svg new file mode 100644 index 000000000..bf5050812 --- /dev/null +++ b/data/resources/help/button_x.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/data/resources/help/button_y.svg b/data/resources/help/button_y.svg new file mode 100644 index 000000000..3956f78ca --- /dev/null +++ b/data/resources/help/button_y.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/data/resources/help/dpad_all.png b/data/resources/help/dpad_all.png deleted file mode 100644 index 3f9d937f4d139f593fb1806206308535647f947d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16375 zcmeI3dvFuS9mmg@mrcNNpg>6gA>80%q`Q-Jk|ksrTavK}GRDZkPD1SS>1+seW3kEGAg!QlJoc10@qN%Iv~ z2^cnPr1VL_w!JhK!^}H4XQf!_m~CQskD7MzwX8bm@qyYv%Mbc!W+5voYT0_uo2R^a z=yys5=gL#gryPXCXJs3>;w64|-jY%$vt%J-bSd*K>E@sb7NRrbO8iLf~B!O#;Dv~tm z3?@>qh#X2wI{0VyyXs8kwxURLAj(rVh@#JgEN94RbK8GXLlvjw*103-n?ZZhm zfqOi7vP?lNXXBkrnkhIJ`&hi375GL!!-DFQlN;F=f!;;V_AZR*lsM*s}SqyT&kyvPd;d_PUb zYe{77)lf<4N3`V_1Lm6$kHj=b!3yh?#&{kyA5k{lNZjad~r1r5b z@d_gCW!OlsInZk(TgR|^N~fwNSrV)&ol%v`Y6umft<{kPP+gQE+Vh0;KGrtY&n;qI zMSk8BS}Z==FR;?Y%~M8aZftc$h=!)ViR;^^ZztI&HQpa!ZVtw?fn`NmAbH6afN@8aqfC-DFaD?Ub& zM?y{51Ke)8Xpz1vm&CdWJ}$;o$NN3BXyH6`J&XIi^=3R?m{2peZJVsToA-lmu@bD>4DNl#i8xWb%+h_3bmsytrF3Z1AkBE6vV>s>X_eBp?QRU!H)sfO zfIDw+L{bxFIJF9$nkd7m@yrS@Ct5U-)}Z2qEa_$~JjdpN2Nc$#rzkCD#^GW(ql^o( z?n)a6?%@P!8`XlFoKOxdBu%X9FEK%gB!&kr;ZY(qWy7W5K?OV`;jxFLKC?NteSe>S z;%D@IxNQe|8a5OgTxLi2%C z85aZu9m=@Sd>~cE1pz^aGA=Y9NR@FxK+vI#3(W^oWn2&tbSUFO^MOc3vIw&Ev&$6{_}S zHB&V?lb+1XcG_M{eOqtZLo5fsTKjZfD=qXBOq}p4c_2sH?R}d+~2M zX7$a^!=;yP)nos7=t^7Q#+|mn&EH;`-M)A4$eEv|b}wf~@3-$5)YZ84$UEaxXAEdf z`7(1+PSX!&WNe%|Wf!B|l6t=KqaN(q@@a&7ddZnh=O!G_v@XkN9dhITZoIkbg_7oJ zBW`tEe`Lpk3!RiYtz=f`{fxPsD<7Y-a3SSuZ{B(1*)G1K*?D4a^?viGGgoL7$Mc6S z+qtc2CHar1#u(>}KA6d9fAQJ#Q0W{&(dnn)wTyl zJlZiRIMDsZ?gg*hK67R52fDI}HI*5UVd~D@lbGj-wQc<~`^H_?eKGyrQ}=8v?H>G~ zH}z7}Lq|^EJEh`C7BS+n%`a`){*$%qk9@rRsjqi`a=^N2I%}IYl$k-5ePGIIFxTz5 ze(3g@tp~RdL*IIM{HQgKb;SjPF6oc2xP4vq^tqfjGu|%#@YPrM**E`ninXWe%Z)34 zv!5u>Z+d3P%u`v0aoxk4myYO|Fmq|ggF8~bV*k?M9CkLfuIc&a?YFB{PtVRCzVFz0 zEniW6>GoCsq|yrm<|$vV^3UqdKACdmjhFrOu)|Zc-Z`H#U-{-HbJ@=idA7{? z+Pbdvg9jd{?mByM5IyM<{{UH6crxXJb^Frx>|^x$jD z@V!g_{#44Eyqe;l?y1TwIqFQ?aAK~$GWXWwDLAw3{J&RyauZ*$L}mK;wb8FEy?1rf z`X0xo`A_uRxiIU~^2rtAIXrFG*-71-Te2F*d{x(VtVJ{R;`_R>mp^ZLV$Xd=ji-Ng z-Mit1E$4*eZL2#L*#0#9o40%J!B1?xZ?!n;m*vOJ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/dpad_down.png b/data/resources/help/dpad_down.png deleted file mode 100644 index 6b10315e0d055854491a4d49e66a8a09aceaeb93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1797 zcmeAS@N?(olHy`uVBq!ia0vp^svyk41|*NpQ(y*Ck|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m@_g%B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|vzp{cpK zv6G>pk%5_op`nF=g|V}_tFfW0qp730sWHq9ta_bYEDa6KT`gTK91RU!jU6owU7TFp zTuclsEsb1V;d(vuic1pnl2c*!W`gX6=yk!X*UGslHL)bWC?r2W2bKZ?GV)9Ei!<^I z6r6+26f}GjlQZ)`0-B%*g80`ZwJ5VJHN~wcKUV=9!d98sTtLw05WOkngql9kG5Vn7 zfs|ZeLclZ#V!{(YkOR*?sd>OWQv}Q$D*o3sfO*c?)5S5Q;?|WJ(K$Yj635T4TP%8| zdDoOMr%MVhVM;`4uEb)cXua@Zj_x$H;Hn}+M+|6X!eNU!OK6mcv?3wxdyqz~jocW-kd?0ayjEKgs zTGsG`Ru`V8GG6|mr<-7w!6w^Px7fkdf_2)npp{An@;S`yF<<`kNI59}cu+QRgZomq zPrqHV=CcMR^j-NkC%fnCCXX8@{OUZH-#v0UJd)gSqPgE|=bPVsf1_i*?dMyhmK-d3!;gQ>WWR#zPnEVGuravh z8eiz$`(QypmZAmQx7#H$9?5lUW*YR{dB-%W{w=$Gtgqhcj4|UHzGA1{36{clnE6Gm zWf>kl5Ux0wKj*FAC$X4COlA8;Z|vQt_<+OXl7q9t{lv!F1@q?B=HS6yzpn&#^VP?XPsd-xbCTG{5YcZ;(GRY6Kgr1 zJg>Lr6}MbxX~!`3HLZ-f9=6hMgT$6%cJ%`WXSGE%^INaP9hA7SQbPOF>dy(n#hX)C z85H-vbXQ*Qrn>hyvy)o};y_v#ei9G;b(ut_|_bn=Oc$hAG~jS^KJr}S1GaG&xhDLCW*d`WOMCX5wJZFzX7ZIj-<7jIg(>3fnaiG4Go + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/dpad_left.png b/data/resources/help/dpad_left.png deleted file mode 100644 index a4a763cdedb047318cad183e4565d33c308a4d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1805 zcmeAS@N?(olHy`uVBq!ia0vp^svyk41|*NpQ(y*Ck|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m@_g%B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij|vzp{cpK zv6G>pk%5_op`nF=g|V}_tFfW0qp730sWHq9Y;(UEz8?^NLFn^O93x_GSX@h3YlItJli8C^fMpzbGU>KL?fq0y6ST@{2R_ z3lyA#%@j0z6O%LZKmwYe2!i<6CABECEH%ZgC_h&L9Ku$aSX@BZ=McRq3pI2ZXXQv-N6MITwaNkvb)*JG(o#lj<#z4z=mdOEC$ zeY--4)5|RJiFqp~@A{+u)BL8-IZNa8{?Z?l;{D3X&YdwgzF#w4xWh%M&0CVOuR&Dd z{=)m=1-v;7v3Y77lJAy^o?+EpaCzZ3#EL`j*>g@AN*?@qN^>DFq$r2ZY4!w3godZu@(C*0=qPTFyPbOB1YZH+W5Yujg8e{{Lxh-u-|A5tRcx0u0SLYB%_$UYxxC`R0MLt{=J!jA*9iOdTZ<(B zN>V?ReSdk<+pV-;c-WWuj>UR7kfZnSP$ zgrNgxb9Uo1reg(ryj){Mx%RT&-L$YgGi1}UiF0k12LG#{Y_r~L?}KZnZN3}3*Yl_~ zZQjB;QFtvQ|KB?+clB)2I`UG(lB!91dGGu7sjpJ%WT)K{E?L3ZozL5*)cdjKcMuP&5(j^{MRcL?>KS~c&u^)Q qTwIYoqwBYIA3d+;f&t;ucLK6T>4zD8s diff --git a/data/resources/help/dpad_left.svg b/data/resources/help/dpad_left.svg new file mode 100644 index 000000000..42af785fb --- /dev/null +++ b/data/resources/help/dpad_left.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/dpad_left_right.png b/data/resources/help/dpad_left_right.png deleted file mode 100644 index 265e70d56a0a06a809edec3435427d2cdfa7646e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16291 zcmeI3dvFuS9mmgBVz3PuS{H(OLDljy#toQi) zGAZN8kT(8pT zakVsj$&6{>pTXm()t8wI!p#9IM^?{qZas=NHa036l?v8VhvGV&4#fzRAmpHi+}q^h zD8Jn0ofrxdiDRa{b`Rs`7}h1_<5D%OkIRwC_=cia_`aNOn=RUu%NwQ#IHG>ajp7On zbvn^Ro?fnuj&(Ajr?;ZXO`~PBm-Tt-U8Lu6?)^fWX%DlQ zb`*G6XE0gZl*dc+6E{Z|nYq#I3KI=ZeLd5^Pv1_mpKGi?Ah;nUJN}z7>gO7Z9KjHG ztNkZPA>-v(Pg9)0cZgp;%IO#SmPUjI<}ryyxq(dAQ+9q~GI}XM-GF+zxUyK6LmqrX zp$Z9L>+l+i)~fAttq#-5Rce(+UW0)zyGBQ1c9p$`)J5aRxewe%V?FIMf|Xh&$CPrM ztiaWJg4AP#90T82q^rSN0|)W4wOk|Rp-pul$&8_`p)|5mNb~chQ|B`-2ixeK775tb zW8ld4ddgKtJB(<=F;W1#7*KxH8kqmZL3_Nc?KkG|EygCs|M#GUhO%!0MzXno!t!gd zKHo!AAdxFrw&7c*A6z>IITnaEQydK?1;`6b9Z8C4kWfu1hK+SFwM_|P^hqo}MqEue z1~_gxD2{rpDDidU;yCR3TGr#FI3wev>S)yMsxzRm!nm5zZCjtuHn1MhE!qgSs6@pH zy&}7q3G7zZ>>4k_u2sUW@iOch^PJ~mI3p2m z4JwZF;*Un55iJLg1GG_1l1kEm!o{#hDdVRbD$NWyF?sn-OQ{L_z(PXDs(~Eigs@|1 z;NlMM!3h#71&;;bi3E*4lJuK9(arL^{1dyQ?=mVBOKb!JB5aDdg!w?KhzkNDY>K#q z`9P|O3j!i+inxUNK&prf0wQdRxPK#q`9P|O3j!i+ zinxUNK&prf0wQdRxPK#q`9P|O3j!i+inxUNK&prf z0wQdRxPK#q`9P|O3j!i+inxUNK&prf0wQdRxPK#q`9P|O3j!i+inxUNK&prf0wQb*;!2CXrl_N{?Q!RkUpmf$5P9Q?fXz3b5!~Dk6vYN20oto_0`6+58Y=U z`bwsbTs30&yMf~!Y0~R&KOA-`_1=^C@Cn+jNP1v=^`sToYPOB7mwff9b>WG@Jt;Tk z_pY=&SN((A-G3<5O80DN?diO4s?O3nR?ochY}W4zH(jPW|1mSIZR1Pit(@#-)^TqH zX0#V&9^K58{rvj#PY1sDndD&lr8a9>d-vf~%Z+8%4(ueDNtUvv){pNU{nXT1cxJ-T z!FMxGo+w)sAfEnaWmWf{lwU68np+mUdOmC0xXR3qQwMimYq>sR&NnY?Ba#i7+aGq! zS(Q61dDM(GD#`l+S$a=Rb%uM&j+zHUcHb@SN?D9(mQ3!Nd*|=Tf9^b@9Iv?h!`~Rt zmQM~Yx?DUKF-k55eAXQYB==JctzX<;aoU=FdEx8q#933@w%zz^vf|jy%93Qs>w%&N zm8%>(JJ(y5Y~{XeI^%5B@9Nywb#l;OB+s`TDQa8O`rE9x>hRg)u#~YS=ILo;Gk#XO zMefveURl%o;->UAn|WdKYe~8CDYrK4yK~B_+z(2L@}K^C>6Di2ucqZLN!pscy!+&w z*5$LN+`dq=cF?T-qqi?uYuweweHJb>8t+r)+o=ovR7_yXOEqJ`Ql2g|MPXjKOaA=cUx+u z>lYiw9Ln#V*x`CGE9am0liH4)14A_g>z#T~o_tS|em=Y59#c0xbJ~*|3sz=7ll1$g z|K2yoPajq+9XaK4Z_@Pl-aP)?qg#{Fd1d7*7uFa3}M|{elhRCUSCs(oLnrp`07_pZL< zZ7$9nJwK0`aN)qI?)^iy%s8D^QU2kU;w@+GKWSfUzcI40QgUp0>atu3@|kq^#?-s1 Rjr?o$R!fO_e_r*={{e*A8`J;* diff --git a/data/resources/help/dpad_leftright.svg b/data/resources/help/dpad_leftright.svg new file mode 100644 index 000000000..eeea7ef6c --- /dev/null +++ b/data/resources/help/dpad_leftright.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/dpad_right.png b/data/resources/help/dpad_right.png deleted file mode 100644 index f86e5d489a5409b33341e7af10a4e8f5ccf72b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmbVNeNfY87_Z`BGEq5UqlzpBWlW?^T3TqKNNo!gC}8Od2Y6E2Km)WXX@CNvAcvwG zejy@qDg$KY3X4Vnu|^S#ND+l9 zHL(@(pioTIs4R>KlLT;;n1-e>>d*`t9f_t;JT@A13S~S(0MSS+s^x(rmm5I(~YFlZ9Adai*7PV;ify-`dDfoT;Y zo(Il26($J=1Q?D0EE>~U3BfSHX47C77Ml%k02mO=phM)%c7|QJEH;C0rMgDQ)z1n(N zst%z`5j~cKE6IAq*w2B<+g;t5o*+ogavsmbZSgrs^6abpZz)aPcR{_Nqk{6fFHrxyfqTPcU44t7rN)CVLp#T_pl8c+SM zeWrk~Y6ITPgHn~|r{p(J`mws!F&=r}7{S_MZB%`c(@qv;oQ?G{h zMZ5VX_G2-gtGb6}=$V0GpK4n#c^oyR{6u|1@%4WDqi=3A4VPY}W{o^?+P7`3qFtq-kXMR8qk02i7Ay%3iQq?c#f^Cfre{*ow!Q?M>-a+Z>Bs z^#b?^JsB+h)1+t1cUz8$;Tt!>Yt0_P!@5;t{Bd`R-_TvOWof}n-sNIxxMPxK!or%S z_}#q)^->N{KGskmgK8>O4izS$lD>fQxW2$$_{ln;w`(Y(b=#*MwxPW%;sYG+`JFA7 z!Cut-_=AHB9TKmc18dB4`Z7K5ccinl=h5rM9!T)yj<2sI6r|m*E=(Pa&6~6dFng+A zQR>h`v3pk^GD^Ky>DYMf)cLCiVyX^z9~ZQ30YlFYn&r_NF=k?#eD(h7`*guF-!75G z+nZJ6{SV}o#iL2SaY0at!-fWy4egdqP+y^H{c>?#uw_Ed7xD|X&wftwttj7o@BFLU k{Ow0>T<#5g8IiewqWSfrRA#EFF#esyqCnx + + + + + + + + + + + + + + diff --git a/data/resources/help/dpad_up.png b/data/resources/help/dpad_up.png deleted file mode 100644 index dcbada67af233abb83ba06e5009eac3203b798bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1804 zcmbVNYfuwc6pkXn0D?G!h|+cmS{{KUn|D?s4M~uIpoS=EK_ny#36N||HY89LDoU#s zaVm&VRIq@6sGw+}%oMN+gQ!@gA`clwplYpBq$*Oi8xh(cj-Bbw?%sRPp6@&F*_~^` zSI)CtY>UI;=81!a5^P;&dFJA=_k}}%6}GsdA{iQi#G@v;9>(#NNE{4^HSz>l0?U=D zo7!Q29L`Fmmda3B*eXbYXvlJl4%w{HVQ3uAKftV$E0SOoh=UWL2qqgCmvCSqB@8|F_}zc6P=9c6DS~;%e8ROXnvT6pCMI?%FTXSgU2+35H=|E zY8|RZw19os4!C3CzZ^)vEc>}H1tFfZUlZA-FsDZVpSjZz{U&u!ivxljDu*s$i|C+;&*Zb2^l6TFVg*7j2(tNHA%_owB08T73Il~fLI#z~ zrHMo{Sh3cC%C!o3+OFDScM8jWFBTH$VL6KEr3jKd-2rP<2#Od~hz<}$umG(wc+GDweTfHxV2)bH}(KO>*QD*sQ`D3~)8OMCpQU8Y4?4_dY}&5s>s z#s}77Go#0bV=&Q)g3TNx7V@R$-mU{t$@Xg(wIy_`b{w}cdi%LohJGa_E)YtVISnp! zjN|QGp>nF?pB44{gbqs7LLc*J;7(6sO#dKEYRQb6?^BYS;>74GCBLRjuzQLwT`K4~ zlSP?;Q#y+}OjjnZJlm2GSS!0U>TT7+ubDH{&^2jG&SVzf>co}b*;v@j(7Dw$bS<&> zX(7~jeH-GO(GyGO+%9?LSz|Sn`7FkUFey!(e>f*^tP&uUlZHDvt<-?b?b+i)`KNlb zqqAEXVS_ndc|O1K3F)in{K6-#o0H-V_qB`yc~v$}WxnUensa?Nc^%FbA1zosyvW0D z0qYeXbat$!Umaw$xjO0@#?M+BKP)@%erWcS&Ce@J+kQY~P3?-8$ACl{D{q_Mcr%o0 zr%iPm!XF@HnJY+*Qk$o{B?i9L&7_E0cJ@R``A=>ye0yexrkbv|?n#Hn>9*B#PYW7j zxz_#oXB*;s?asHX94+ePbQ~OF)(2ZZ92o97_~X{w^MkK`A^^JO8NA|!(YRyJtKo*I z^4g4J8xReH>`st|yX$+c3;m*P9Wn`S-Rmp0)Q{?P_?7(h%ig)Uru`D~>*W&z;-yWH4U5W- zdblwD1odUb-5d2{m(`kV{a^WCY`NVS8r3s^#FFT;P?t&N(XQeV<@N3^aw+s01 zqDwf}T|AvmZuxT88P1M^@E42Lo&R7JUa>*z5ui$6&Ue>bxK^!m@8jOe^-}~QX!td|y+c}gG&(KMlRt9Lv00@n zWP#iMcpS5rv`!S@Qj(A}nr_@1(*EG#NThSaDaw#d_KjkM{-^(^&i!YzitTx&N|z&7 zZMNn-c-0qj25ef7v=X4M?U%pD3-+}tH^2DC-g?1y8&%Qq{_u+h4n}3)vRwMCYURlN kr5g_{M#h#mBeU>0>7BZBd$=2pSpH99QMm9#VC=TP0g}G7x&QzG diff --git a/data/resources/help/dpad_up.svg b/data/resources/help/dpad_up.svg new file mode 100644 index 000000000..eb9c14e9c --- /dev/null +++ b/data/resources/help/dpad_up.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/dpad_up_down.png b/data/resources/help/dpad_up_down.png deleted file mode 100644 index 8dd62451581fcf2ec620de0b1b123c2d31a0995d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16306 zcmeI3e^3bUMkpu;eHYw3sWVBJ*sD(!2&%S%Vc{w&tCx3K0 zyTh^jywCf5-*-Rn`@HY&AG=7aO|+;7~|;Qy&Tq8M)xSLnnBu0c_eIZu?yxG0e#O(7vMDK1i}({P1cjpHwiq!=zkaSWBJB{;5; zt2DS$6gb5CIB=zPS*)6TV|Ji9VClr=Znsl|qLr1EX_c}x##M&mYPA~0q^MLX0W~CS zmBUSVB@Q;lFA~%-QY`7BooPqB>0MN*)8N_3&D6`*&4yL|$otQC~Q9aRd98NX1p z_AO*6#_4g{e4s5PO4%qoXom$1@TdTs<&2wQ%b8J{47q&}qc!ZNt)l?sJfntDUV4-; z&f^dB%_;v-YXKCqSu@{7gXvG$j11}F?#pD<14o*LwrH|3T%l6QGH_gqDbsO09ZQ#G zsx`rVfQW{gIJhLwXD zB5rl$1j(UUH{+^`aBv;smXC$h^5LaHhmC$hVj*rI(=`OiElhfr0MxZ8>y9W3ciA7o zHRP`l1-3<*u2kbHnS@l8ViK8DPDn~+RyDX%O4D(SkP{Rc)Q<=sy^YFp%Ap4G=?P>rx8&T z)&P%N7Q#(DkxFFU2ptQlu`(_@;nvf3qKrbFjxsG8E{v!d+O{>BjE!-DZc%!$MMW!) z8Wr5d3}Cn77F2e47Wx*{45Dm!DL0)1ISW|$H)a2>X&8OijF#m7`7&HTvh#es({fK8 z+;ak0xCq}8jcd^nWf3>+^A&NMq|M{2uaaWm0MEJL2!uwu;m~6K&`38N8jdV<&~Cjn z&>B=65yd?k`A2jicpaehN`*qE(4ufL9Fa$RDO-_|22V^Zw`s{#ff(2kHL!TJzz9bm z&_8ey5AMDR;x7fS1>lVY4ZV_#m^-1(^8369-_iG}3TX+AKtT9S0T(|X$SdH2fbg3F zE`C0cSHJ}U;Wq_b{CpsN|> zuYd~z!fy(=`1wFy0T%>>-xP51^MSkqE(i#}Dd6Jg19=5p5DhApE9) zi=PkV6>vd7_)P&9KOe{|;DUhgn*uI=K9EW?d;))A@~a5t!??CVPb-A z!owKd;E${=vnEYlUw(f6rXTFD+BtbmV(Qh2;`>B;>VnLh1-WSd9|`vB=D&Ahm+!R^ zS59>Gy!Erc^nbjpU;gyiu^0bz;EOH0y1x?LPnpqnSQEGSX5ZY-_DQ=XwI|{~Jv?^c zy}AqMMT1YxI3PMXw!%3+_w~Z_zcbyuK6T>r1M~ah_L#2Ajz}8!HPEF~yB_Y@aHh9p z*VV@j-SR5i$AihOzq*|2sa(tGs^28Pt;R2QGR`OnXpmQr!ugENhf z8WQ&%TKC}X*qhBsGR^7a)^nRL*r&E#n)ce+g6(sr^s!T}p}#&^(^cL5!q9Kp+CKBP z?5#5oO&>q|bXprZ^!q70uC3NC5v9jWym~o)`q|B&-W6qUt2~t0)LCNx=G(Zr_08nm zJCj$p&S~2B+`SEV=IFOBZ^|rK*51`yHtX!(bGB_{{M9X&bjl-Js?qM5`lFKeM?29? zLsdT+SbpxWvl^53V*Q(Py!$N!#YG!$Ib)RV-qh=dW)Mn-3@5zx~sW9_p*s_jYc}F0bA9&eqNrJa_)a z>Wd4G+`Za?bvRpZTw6XSr3tNn``q3Nt2XzAQ_6pgE3($RTe%5>8*0qB*dlNct+YK4X66eq}F-?avvP%*Z?={wVdSeQYZ+j-`@CVhG2E5Jf zAEq>&tVw86zQ2CXob9sN;{25_y;MB8Z+3cjYgc@)ck%J${oNgp7WB2xXFosq*i)-2 z&L=0e++dq`HDvd6zSE!D_;1s(-JY)g6Q(yyRwaJY_wdDOCwk7o~E4||rp>s|H!m)|JP{X%l+ k_Jsa|RW*$@Yo101CBHrMdj0vM+*kFctX$*4j5n(P1DZ@q-2eap diff --git a/data/resources/help/dpad_updown.svg b/data/resources/help/dpad_updown.svg new file mode 100644 index 000000000..d132ec272 --- /dev/null +++ b/data/resources/help/dpad_updown.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/l.png b/data/resources/help/l.png deleted file mode 100644 index d4051920a9b6d7eb2e826151e0e849cf1d11c7ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1464 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<}!3HEBIr}pMDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKW@b!fooL3ADC}5E3S0onb8|oS8=jMX^1y)^L5|oN?23FO@A(aKG`a!A1 z`K3k4!1zd0hG_S-E|!LdhOWkrmWD1) zE^aO+29}mauC8#so_WP3iFwJXFncqB_CobKylcOS(cjOR+OKs01jcROe`)S>~o0T6mmjMALtl; zQ1U=ZE-)cr8U!)ni66*;XP?wOV4f)gW{yL-B2O6@7@v8%IEGZ*I&~w{m^#7!!u!VOhn_BSG%jEE`w)A{yMkvA<<3>!4=|d!#YWUgde?;xjlPJT zt4q&3l8j5Z{@38m&rhBd&Tyc^5@pBWLq!tj`7?hPq{-gf3*dgJdo>4WD0%P@Llj=@SP*mrvATmEO+k= zFCI%q|An&g7v>-3Kk`Lv(^{5m1xIssa#qBumkaFQ6j8yTDbJMm>g`M)S+xhOwiTJI z%jf7!&yk&wJNM3lDJM52ud|JAf6V@kN#sJxO^434w))rSu`l&mXSC$3Jol~*uWO_B z98{h5P^$FQmLw*>mxp)wGY0E1ORjsEGLz3x=gLa^JXVSDttNQpDfmrCuA? zY(3X}7fu&thJe$>P1EdZQ#) z)K=BnTc4y?oICuoZ`JI*?)v+*Pwy(fQ`N3!6I5RLV|v(=>jr^6O4t7zzc~0Pk@>Zd y-lE9n$CYzF=maU%`5MeOY&Z0&l0LSNftleDNAlVm%T|5^m8G7pelF{r5}E+jJr&RZ diff --git a/data/resources/help/r.png b/data/resources/help/r.png deleted file mode 100644 index ce5429d19abd23c19622ac13c1c03d59a033260e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1495 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<}!3HEBIr}pMDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKW@b!fooL3ADC}5E3S0onb8|oS8=jMX^1y)^L5|oN?23FO@A(aKG`a!A1 z`K3k4!1zd0hG_ylcOS(cjOR+OKs01jcROe`)S>~o0T6mmjMALtl; zQ1U=ZE-)cr8U!)ni66*;XP?wOV4f)gW{!Kyd)pZpm{>hs978H@ow?@i5mG2}{G;{u zi9VcfbUjaRXk|?l32~Xw)MVAX*3HpG!0U?d1(7Wo@**x1JQ^niEm-2D(!%Y?!xfXU zWC6#vQ|`J~W2Wb()O=$2)t!XD4AI$z`!(Ij4yY|yfP`$NlC z?;GvbncE&e4HCP`6nXs=@8V^>uU}8EDXv+axHBi>W_MO$&BYBYy>3%h`>y8bWVrlv z_11@3XSlyybxdY4FN}7zkXx|UMrZe|GuI}oDymrYCr;Iter24wt(ar?hl@frYr8j2 zIDJ&6Z`sdv+pqTRy0xT!0q<^Rm6YHo)85xJcU{iWURZhKX;$*P(64o0f6{x* zdapWlLG0Dtah~t)EPK-RAx3r8)&1hPTeG4~cdSbG-yGMGqG>ogN!Us!Wc9LtWp_4( zmh<&*-Cgo8S)1##LE>uD@cqXNSdHtgH=KKuR<5LskbP{P#NZvjv&= c#53_Qtb38Mr|{FfL!hG8)78&qol`;+0N@NElK=n! diff --git a/data/resources/help/select.png b/data/resources/help/select.png deleted file mode 100644 index 8bb23ce38c20a5152e0ef7617ba8ef7330d15c93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1477 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<8U}fi7AzZCsS=07?@QuLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GB9v+bTTnFwsf&HG&FQIcC<8fadL5UF)^^T zG;(z{hUs<5PcF?(%`1WFO+n~2!KoLN7;+1MHoK%2WtOF;xE1B+Du6w0m5JLehB(cG z>P^Az79*T`^?{Dj2SqJXRKtXT=?BDwCtM&0p7c}mfa$#mn6Njkc#y-uz+~>};uunK z>&(>njB|k!$It)19j%u+(e>Yv3EZuoy<5t*FPXCBO;)kzsn)8ENtxne;+LeuF6nJ4 zOU!D`@l2caCwhm2iQv}OMc3#5G`I7wtuK|Sj^C?#E_nXApSJt&7oYoX^W1X(|w2FM=S zsUy=Axj|6tp+QYc?gkF7f`i>V*KcD}+kHQm^G@UIdG8lS37g2yN)+01FmpwFokSCx z?gnGg9Rh3*=df+O>hqaxd*`j#%CyO{+%?(>Q;)<<%NNl*Xk?*zUqpA4t!RZ@(FUPB z?H#wJcR0@UUCYh(Pho?hM(-Y%nnvw;_kVp(Tyn#K^G%~~fq2+q%@>9B_xBxEm*B5C zthJK!tkI76$ed~GMZY<<&RhGhY`W&M>?YlHA!qd(j(^g4lv5ANa$g(&yyrCeyKnG^ zoS8RQ)kPb`xxLk!c#HAvAvOzU|EKkfKK%;wda&T1eRrt5n8~v5*Lmq#e_D zWmRvs;;_9}ug^AH)Awsw^KT{L=hI`d7jfH!t@hnhAJ=1+#`IfB>_$3Mbjki>Y0Fls qUQCT$9UR=@5aAf*bNPcmBOAj(kGe1Ht~tD*g4NU2&t;ucLK6TW?kRcz diff --git a/data/resources/help/start.png b/data/resources/help/start.png deleted file mode 100644 index 7545c1e8196ffe52c0b753b22b86d40d621c65bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<8U}fi7AzZCsS=07?@QuLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GB9v+bTTn>vvjdEG&FQIcC<8fadL5UF)^^T zG;(z{hUs<5PcF?(%`1WFO@Zq*H^8YElo)agfHu3N7G;*DrnnX5=PH0bZIy||EoPQ3 zj%IFd&Oq~kX#ksBAbL}9y2Z>Dr(5)aj?o82EmBm&gn;P>#DphYAP1iGQ}cl7y$G1F z8~$h>VqjpB@N{tuskn9Ks<($|pv>`)J0DLCYI0embW+Y^VuXn60uj}%T_<`c+&H&n z$&wWdb{l9cQgB@2bSTX0;xh40sU4i+>yB)_>Ll#qv4#DvTvKH2{}0}L%~jLp+1Kna zK0MQMf3=+PN*}dg0oOq8zGPmti|wmt91GY|A$zP`*8WJ`orA^8&obWez4Kl8@Q&Wd zFFMy8rPi)EntFGO``nyEf;Pdo&t^EN-+Os$O`Uf@|N0%1ICexGyluEF`*i{1(G`Wi zZmj+MbDP)(pT*Z2<6j)N*rwE)maZaor856f|E;g*ceEV8(SOiowz@>YIqeOs_vhGU zi5Be3?V0{dUF_A?Wy<2;Kbn6ExAW7U(R)OFPW*zqb~00~c+UjiKYV%Cxw^Fn=dL*B zy65_pKObx!i{!}ecbs_by{GTjEtlV^)xEBmI`8&V?hNG$?xj20v~rHv=3Ec?xhin~ zU5Se(YY*IX*`2I0CHKT-w=Zm46!U|3OpRF0`-xrN=DYkMJ>SfQhs*v+p1t6dDxDCL z&zpb1>g~PoTPpH}0o?UxivL@teB_9ic^h?IecF!lpxkL|MBX3#e|%frwby&i9<7<4 zs$0&brm~`I@qyE_2W8$|FwsxHDOb^LX};j?1NIvNCl2_&ID290wZ7Vgf;>yRrmVbl z?ZMXrhjx0ub6eA2wjwl-F`bFeLiqJ#xvZ~|2h@C6CC(X{9{rUuJ^OkJGsm=0vC}5M b{2LeB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdXL-x;UD-xfxlySOUY{)!5O}(8bBc&BesP($dJ) z)flGNB|o_|H#M&WrZ)wl*BGZ>P-4g}0NU)5T9jFqn&MWJpQ`}&v{fb+x462PIh#3| zn_IeAxM6n-L~jZfw?Oq;;MA)Rbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3b-4-FX zh=GA=mZytjNX4x^)4e@H14Y`-+eS5SS#%)UL{MhQHwhO{FVAMRNg-0UE7e^2Jv6xX z2;OkeUF*4I@tHKyM*gZ78d@%sUl?}9C7E$eQP|+rI_38M2lqGbtgy+R|L$!&|F@mL z=WIQ9H~a0@>z%4Xoc=3K7YOCBtv+Bhfm!W<#t)8Pj`|g=4QI$2$unPlV57mgBb`x0 z;kJWt1?##dy$L)<@6JEm!SUsyL+5j~o%@@$1E0LA;lID{&TsQvru+kSYdYHS#+Ih59rm-N|HRZ<@272^rQH*_Tx%L2f5<4PXt|Qy!xnSxAU1-2aEdj8$HDqUjOq}LnHLo zs!x*4YsEI^bnR<;y`b;9_kmRQ=+u34e|gDn(u$Ym7uhUS$ye5Ow9+Q&;EA+Po!1&4 z_mw?*R8!dUSIgVx{;oKwg<8)}F+UcZGykDw-WQfTg2L| zcI)JQQw^ki8!yY~v-E}){yg?*;Z^qe?EAvP52U}I@3l!Th0#d0!Xa~Y{2cqBdp1n7 ze3vy9Uwe2ZCv>;)gYAdn`fV&&*hJ0anYC}MzFK^epKTut~!9+7` z!Bm!)jmba$y*n%S;mU9OSH}8T;%uE)`+2PYo%EXFQ)kw-;|1I6%M)78XDq+{wb-*LLECyRqxzopr03Kph ABLDyZ diff --git a/data/resources/help/y.png b/data/resources/help/y.png deleted file mode 100644 index db5fd21030459132ef168fcbaf8e0bfc45e091b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1498 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4^64!{5;QX|b^2DN42FH~Aq*MjZ z+{EB@w}FfdWj%4dKI|^K-~-sHue<-iOJciB??KY z>6v-9O7C~?S5nAKu~iB;^)>Jbs{}UJ3djZt>nkaMm6T-LDnT3-;TxdfoL`ixV5(=Vn`~fcs9E!^lV%s6w~6GOr}DLN~8i8D@e@YH@N=Wx*A$ZZ2GPaY;}r!o64xE)J1T?`q ze0{Av^NLFn^O93NU2K(rX6R*RrdXL-x;UD-xj9<8SOUY{)!5O}(8bBc&BesP($dJ) z)flGNB|o_|H#M&WrZ)wl*9oUyP-4g}0NU)5T9jFqn&MWJpQ`}&v{fc zw_7Z6>eUB2MjsTlNKp+F0;V4j6P|E^9C*@C%>$P0@b9H1X&)V*_(D#6Q z*doPa?wJDOuF+k0x0gI+c06*t{sB)+o6oZ|Dw%aZ6cW?U)jz*eeQxh#&i2Ez0(c*= zW-yj6V4Bj9{ek@ti>CndeO1QpoORU>=06yk#J=0GPW54*!KP`zt@Pla){c1xcZjK2 zI0O`{?fP$=zUbP@O8fqQJEzT^bx@GQ^KAP;^?+4R-Ar^>CtNvKBcOB3r(OEutw@IT zYtF1b=)TWTe$kH83JGS*xxFoYwodiBaeVQ#TizFDJzOYlz?WCa_xzI2S-psd_unqK zt|a!gQ*M>g;hIZnNBj@i_TS=2;Im`g*O=sJ^D0Mh?&}Sn6E`+Fd@0L2^U*EbNh?=#= z6|PP_$IiHXQB>WsKm0p8K88OR_SjamS@7?L%ES6ClT!8tDtz`e`p?Q2WAi5XT%O9 zC$N6wmajYc?xkD3NKf=B+<(KA-OA3wr&n zs`-4szg%+Y{QRAN158d$SYcSZ^jC%Tve=LE7KxW + + + + + + diff --git a/data/resources/on.svg b/data/resources/on.svg new file mode 100644 index 000000000..7a9f81ad5 --- /dev/null +++ b/data/resources/on.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/data/resources/option_arrow.svg b/data/resources/option_arrow.svg new file mode 100644 index 000000000..36d39eb8d --- /dev/null +++ b/data/resources/option_arrow.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/data/resources/sq_bracket.png b/data/resources/sq_bracket.png deleted file mode 100644 index 891f4359392ff78de13627d4d3932f77d7259faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 zcmeAS@N?(olHy`uVBq!ia0vp@KrF_=1|+3_iKzf7$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%xRe+5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8KW+g=7RhMR$W{Yl!|Z$R@KEJl?AE#L8-<0 zrA5iW_()TRX$FQJev3c~fv&OgFUkZ)N@9*nesXDUYF>$_i>(q+MlU5Z#md>u(A3S$ z$l2M{(b(14(9qJ++{MMf$iULX#njNi)evR|HoZnBPR>pirY?@gE-r?KuEvgzE{;x? zPC&gD#uf%{aJ`;+#U+V($*C}VGlBL(^*ZC#Yvo*&npl!w6q28x14{t`8Tlpo#Toep z3eLf13L4>=c`5nj#hRe#f%w)XwJ5VJHN~wcKUV=9zE+u7>?iDRh~5-(!b~6N7=2LU zKuRnyAz%swG2uxc$bn~`)I4C0DFSAVD;8JgGB7ZjdAc};RNR_!dB3)6qRjD+&tuwW zXB$ND{A0N+>l?&#L}6(}9-C{=97pphu5RX@Z2QH$R3tTY%1!SctxqtN5cu@?@5=Wp zZ?7#r_c(gJ-`rxm^Of_S|DL1JwMg&z9lNxTFKo2hL%%$fySr~;<(&nWn_TB#kZvn% zYKD(nH($q^X|FFp^sO5U6>}5bZ1+|5x+g& zTuDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WxjDO78XB6LTDn*`8XCG9J6amLIJvmFm>5`E z8o9a}!}Pl3Czs}?=9R$orXcj1;nWLC47mkBn_W_iGRsm^+=}vZ6~Lah%EaOpGdCAk zM`LGKoaRCGrr>sq2~NHGK*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*qLz^g24P@ z?CIhdQgN#%^nAB}posnRedftNr*urtIw>kAIR^#JvTtB5Gt%r7wp7N1Ig0xh^RByL zevDkri@!Zx$M{t#Ao_!kcMf~Ts*@b|E-o-_I4v^m^DW~=kr#F`mOt0dVCZ&p(D|Rp z;8dmf=bT2<$>MK$_j-SGYTQr1u;M%Ol>e$sPY-eEwH-R!)--oUd2dP<)831$8uAP4 z*Vx3~YJJXjLF$4xt(Y?q1ir?7JvX{MtN+mpZd(L}vLGzwZZK$&E(-`wbCQ`k;X6Z*RezJA3U+y{2-9yV-ev3`xYH7Ye zj}QynxvW`kld)347LG;;+ovOdI ziY#NT9^VkkvaoYe30`oX@t(;3Pc7+E37(x3-Cil%JDmGob@BoB{t8r#8ZPdZ<@Tn$$r|R6_e)uz84VBo4mjEY69ESw~W({?U>TJ zZIVhi$C|4aH`>lG)$*KhHn%9~s08b|>f9Mj9^WQ$sjG&^++{v{QRLB^cB#3WylWRb z8Ro6&ognSYyyMcME^k%UeId{KE}8VQ9lLG6D&|+>j1}JeoLlC5NFD8UOuuc^IrE60 z-kAfx&TR<(Bb9A*PDpKi*OsbF1&4nN+U#pPKli~IhFhT*16KUcaM^9m_QpK?`^D%* z*WS-~X(#oZYfr4l+XD8$*kiv<_Vsn1cauK*W7%(ejrNc$yBJQKTYPMP + + + + + diff --git a/data/resources/star_unfilled.png b/data/resources/star_unfilled.png deleted file mode 100644 index e34197407a36e545970a0325899683c42794edbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1245 zcmeAS@N?(olHy`uVBq!ia0vp^5DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*WnYp>RIvP7WTe?^{8XCG9J6amLIJvmFm>5`E z8o9a}!}Pl3Czs}?=9R$orXcjX;M5CB47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!N1WzC z^`_u$AErkR3Uw?;K04H}tK7J7p&?wDdt%#ihC;n5y39vbH{9ru==E`l3TQrN z&XQD}6&b*JEFJr_b!xQ=u==rA2ga#+K9 zWR*jXLks_W#*eBB``A+VvpouT=q^8?lfiUpE6){n^#+T+PPew^23CP^W5Ww#dl(`G zJe3cdHv}ngo7nzWH;WbKyvD3-$zeHj9ZOQYmZY6@nnjh}4W_gI-k&h}!LQ-b(6;>H z>5TS<3d5OVHLOx`-adZU6fQH>EnvOXqVs?$DVpoh{RtCTPX&0NU`=Y#nXtfsRa0P- z18e`Yw+=E)N8UR8VfFvmaJ{KL!X&q4+V41rJz^cJ8zN*o)R{k;n{4Ihh}^*Y>X5%f zjc7-0g9U?DU!2Qx$J#wS9rny06BYCvwlgRkU|?-=xn08|4=!;$UHx3vIVCg!0OPZr AXaE2J diff --git a/data/resources/star_unfilled.svg b/data/resources/star_unfilled.svg new file mode 100644 index 000000000..bb16674e9 --- /dev/null +++ b/data/resources/star_unfilled.svg @@ -0,0 +1,19 @@ + + + + + + diff --git a/data/resources/textbox.png b/data/resources/textbox.png deleted file mode 100644 index bb05004131e2524ad4626f4820c1f222053c7679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2894 zcmV-U3$gTxP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0001KNklmfcuV735p9)e=p zu9x$z#{&QW00000008iC_Ow8f(LUZb*8oX6ZD3l%3;+NC000000001-ujAAI!0m%3 s9vlDw0000000000r}+T@0RR6308_CUS<-k=G5`Po07*qoM6N<$g4-idrT_o{ diff --git a/data/resources/textbox_glow.png b/data/resources/textbox_glow.png deleted file mode 100644 index 2ec6276922287185f9ef1288ca9afcddd5ba4a77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3517 zcmV;u4MOsXP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0008mNklP#G3V2}gsEC@8qXG{`kbvD4~|4uTf5LkU8!QR!`bp8Vi0E#)!V=%D=2!*<}- zXf0TVx<*w>-&qvfBa+i@<7$U%c)q{nh~=7stk1SLCAZGO!FNih5~;rNsW9kAev|@1 zF72fW^4f~B8=duZ${gI#C>3U!bS~6hdoH9K-%?ILnKQ@eD_v|Gi=51<&}-IDI~!Hu r_rxE5I<5Id_Y5!t%m6dME#vP1Br8)^tkRCi00000NkvXXu0mjf+whAE diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 74a7ff1c8..b9e27f92e 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -7,13 +7,17 @@ #include static const std::map ICON_PATH_MAP = boost::assign::map_list_of - ("up/down", ":/help/dpad_up_down.png") - ("left/right", ":/help/dpad_left_right.png") - ("up/down/left/right", ":/help/dpad_all.png") - ("a", ":/help/a.png") - ("b", ":/help/b.png") - ("start", ":/help/start.png") - ("select", ":/help/select.png"); + ("up/down", ":/help/dpad_updown.svg") + ("left/right", ":/help/dpad_leftright.svg") + ("up/down/left/right", ":/help/dpad_all.svg") + ("a", ":/help/button_a.svg") + ("b", ":/help/button_b.svg") + ("x", ":/help/button_x.svg") + ("y", ":/help/button_y.svg") + ("l", ":/help/button_l.svg") + ("r", ":/help/button_r.svg") + ("start", ":/help/button_start.svg") + ("select", ":/help/button_select.svg"); HelpComponent::HelpComponent(Window* window) : GuiComponent(window) { diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 9d5cec1c7..8fbae485f 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -54,10 +54,7 @@ private: { // add checkbox auto checkbox = std::make_shared(mWindow); - checkbox->setImage(it->selected ? ":/checkbox_checked.png" : ":/checkbox_unchecked.png"); - - if(checkbox->getTextureSize().y() > (int)FONT_SIZE_MEDIUM) // downscale if necessary to match text - checkbox->setResize(0, (float)FONT_SIZE_MEDIUM); + checkbox->setImage(it->selected ? ":/checkbox_checked.svg" : ":/checkbox_unchecked.svg"); row.addElement(checkbox, false); @@ -66,7 +63,7 @@ private: row.makeAcceptInputHandler([this, &e, checkbox] { e.selected = !e.selected; - checkbox->setImage(e.selected ? ":/checkbox_checked.png" : ":/checkbox_unchecked.png"); + checkbox->setImage(e.selected ? ":/checkbox_checked.svg" : ":/checkbox_unchecked.svg"); mParent->onSelectedChanged(); }); }else{ @@ -121,38 +118,30 @@ public: if(mMultiSelect) { - mRightArrow.setImage(":/sq_bracket.png"); + mRightArrow.setImage(":/arrow.svg"); addChild(&mRightArrow); }else{ - mLeftArrow.setImage(":/arrow.png"); + mLeftArrow.setImage(":/option_arrow.svg"); mLeftArrow.setFlipX(true); addChild(&mLeftArrow); - mRightArrow.setImage(":/arrow.png"); + mRightArrow.setImage(":/option_arrow.svg"); addChild(&mRightArrow); } - setSize(mLeftArrow.getSize().x() + mRightArrow.getSize().x(), (float)font->getHeight()); + setSize(mLeftArrow.getSize().x() + mRightArrow.getSize().x(), font->getHeight()); } // handles positioning/resizing of text and arrows void onSizeChanged() override { - // size - if(mLeftArrow.getTextureSize().y() > mSize.y()) - mLeftArrow.setResize(0, mSize.y()); - else - mLeftArrow.setResize(0, 0); - - if(mRightArrow.getTextureSize().y() > mSize.y()) - mRightArrow.setResize(0, mSize.y()); - else - mRightArrow.setResize(0, 0); + mLeftArrow.setResize(0, mSize.y() * 0.5f); + mRightArrow.setResize(0, mSize.y() * 0.5f); if(mSize.x() < (mLeftArrow.getSize().x() + mRightArrow.getSize().x())) LOG(LogWarning) << "OptionListComponent too narrow!"; - mText.setSize(mSize.x() - mLeftArrow.getSize().x() - mRightArrow.getSize().x(), (float)mText.getFont()->getHeight()); + mText.setSize(mSize.x() - mLeftArrow.getSize().x() - mRightArrow.getSize().x(), mText.getFont()->getHeight()); // position mLeftArrow.setPosition(0, (mSize.y() - mLeftArrow.getSize().y()) / 2); diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index 15e3a7221..ed47a5757 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -5,12 +5,10 @@ SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { - mImage.setImage(":/checkbox_unchecked.png"); + mImage.setImage(":/checkbox_unchecked.svg"); float height = (float)FONT_SIZE_MEDIUM; - if(mImage.getTextureSize().y() > height) - mImage.setResize(0, height); - + mImage.setResize(0, height); mSize = mImage.getSize(); } @@ -48,7 +46,7 @@ void SwitchComponent::setState(bool state) void SwitchComponent::onStateChanged() { - mImage.setImage(mState ? ":/checkbox_checked.png" : ":/checkbox_unchecked.png"); + mImage.setImage(mState ? ":/checkbox_checked.svg" : ":/checkbox_unchecked.svg"); } std::vector SwitchComponent::getHelpPrompts() diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index b2ca17845..08586f7e1 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -64,12 +64,12 @@ void TextComponent::setText(const std::string& text) void TextComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Eigen::Affine3f trans = parentTrans * getTransform(); Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); + //Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + // Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); if(mTextCache) { @@ -79,6 +79,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) switch(mAlignment) { case ALIGN_LEFT: + off << 0, (getSize().y() - textSize.y()) / 2, 0; break; case ALIGN_CENTER: @@ -86,21 +87,17 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) break; case ALIGN_RIGHT: - off << (getSize().x() - textSize.x()), 0, 0; + off << (getSize().x() - textSize.x()), (getSize().y() - textSize.y()) / 2, 0; break; } - off = roundVector(off); trans.translate(off); + trans = roundMatrix(trans); Renderer::setMatrix(trans); - trans.translate(-off); - mFont->renderTextCache(mTextCache.get()); } - Renderer::popClipRect(); - - GuiComponent::renderChildren(trans); + //Renderer::popClipRect(); } void TextComponent::calculateExtent() diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 0b78a7ade..0c1ab47e4 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -10,8 +10,9 @@ static const int inputCount = 10; static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown"}; static const char* inputDispName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "Page Up", "Page Down"}; -static const char* inputIcon[inputCount] = { ":/help/dpad_up.png", ":/help/dpad_down.png", ":/help/dpad_left.png", ":/help/dpad_right.png", - ":/help/a.png", ":/help/b.png", ":/help/start.png", ":/help/select.png", ":/help/l.png", ":/help/r.png" }; +static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_down.svg", ":/help/dpad_left.svg", ":/help/dpad_right.svg", + ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", + ":/help/button_l.svg", ":/help/button_r.svg" }; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. //If you want, you can manually add them to es_input.cfg. diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 9491a1162..bab8438fb 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -20,12 +20,11 @@ std::shared_ptr makeBracket(Window* window) { auto bracket = std::make_shared(window); - bracket->setImage(":/sq_bracket.png"); + bracket->setImage(":/arrow.svg"); // resize - const float fontHeight = (float)Font::get(FONT_SIZE_MEDIUM)->getHeight(); - if(bracket->getTextureSize().y() > fontHeight) - bracket->setResize(0, fontHeight); + const float fontHeight = Font::get(FONT_SIZE_MEDIUM)->getHeight(); + bracket->setResize(0, round(fontHeight * 0.5f)); return bracket; } diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 47f9f1b4f..9afc6d4cf 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -67,7 +67,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector row.addElement(ed, true); auto bracket = std::make_shared(mWindow); - bracket->setImage(":/sq_bracket.png"); + bracket->setImage(":/arrow.svg"); bracket->setResize(Eigen::Vector2f(0, lbl->getSize().y() * 0.8f)); row.addElement(bracket, false); diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index 98d3174c8..b49c33cc2 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -123,7 +123,11 @@ std::shared_ptr TextureResource::get(const std::string& path, b if(path.substr(path.size() - 4, std::string::npos) == ".svg") { // probably + // don't add it to our map because 2 svgs might be rasterized at different sizes tex = std::shared_ptr(new SVGResource(path, tile)); + rm->addReloadable(tex); + tex->reload(rm); + return tex; }else{ tex = std::shared_ptr(new TextureResource(path, tile)); } From 2aa72928e541bfebb458dc0c26bac1b31eee74e0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 14:24:32 -0500 Subject: [PATCH 214/386] Fixed fonts not being centered. --- src/resources/Font.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 7d53c47fc..14a197d5c 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -250,7 +250,7 @@ Eigen::Vector2f Font::sizeText(std::string text) const float lineWidth = 0.0f; float highestWidth = 0.0f; - float y = (float)getHeight(); + float y = getHeight(); for(unsigned int i = 0; i < text.length(); i++) { @@ -433,7 +433,10 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of float th = (float)textureHeight; float x = offsetX; - float y = offsetY + mMaxGlyphHeight * 1.1f * fontScale; //padding (another 0.5% is added to the bottom through the sizeText function) + + float yTop = (charData['S'].bearingY); + float yBot = getHeight(); + float y = offsetY + (yBot + yTop)/2.0f; int charNum = 0; for(int i = 0; i < vertCount; i += 6, charNum++) From ec4ee70259a8c78b7b23a6bec175c94f426fb76a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 14:31:13 -0500 Subject: [PATCH 215/386] Fixed incorrect star texture path. RatingComponent now rasterizes SVGs to the ideal size. TextComponent's text is now vertically centered always. --- src/ImageIO.cpp | 2 +- src/components/RatingComponent.cpp | 14 ++++++++++++-- src/components/TextComponent.cpp | 6 +++--- src/guis/GuiMetaDataEd.cpp | 2 +- src/resources/TextureResource.cpp | 2 +- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/ImageIO.cpp b/src/ImageIO.cpp index c5106debb..006dd55a5 100644 --- a/src/ImageIO.cpp +++ b/src/ImageIO.cpp @@ -69,7 +69,7 @@ std::vector ImageIO::loadFromMemoryRGBA32(const unsigned char * d } else { - LOG(LogError) << "Error - File type unknown/unsupported!"; + LOG(LogError) << "Error - File type " << (format == FIF_UNKNOWN ? "unknown" : "unsupported") << "!"; } //free FIMEMORY again FreeImage_CloseMemory(fiMemory); diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index dacfd7329..61754c610 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -2,11 +2,12 @@ #include "../Renderer.h" #include "../Window.h" #include "../Util.h" +#include "../resources/SVGResource.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { - mFilledTexture = TextureResource::get(":/star_filled.png", true); - mUnfilledTexture = TextureResource::get(":/star_unfilled.png", true); + mFilledTexture = TextureResource::get(":/star_filled.svg", true); + mUnfilledTexture = TextureResource::get(":/star_unfilled.svg", true); mValue = 0.5f; mSize << 64 * 5.0f, 64; updateVertices(); @@ -40,6 +41,15 @@ void RatingComponent::onSizeChanged() else if(mSize.x() == 0) mSize[0] = mSize.y() * 5.0f; + auto filledSVG = dynamic_cast(mFilledTexture.get()); + auto unfilledSVG = dynamic_cast(mUnfilledTexture.get()); + + size_t sz = (size_t)round(mSize.y()); + if(filledSVG) + filledSVG->rasterizeAt(sz, sz); + if(unfilledSVG) + unfilledSVG->rasterizeAt(sz, sz); + updateVertices(); } diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 08586f7e1..21cab7b26 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -68,8 +68,8 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - //Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - // Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); if(mTextCache) { @@ -97,7 +97,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) mFont->renderTextCache(mTextCache.get()); } - //Renderer::popClipRect(); + Renderer::popClipRect(); } void TextComponent::calculateExtent() diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 9afc6d4cf..04c9144bf 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -41,7 +41,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector { ed = std::make_shared(window); ed->setSize(0, lbl->getSize().y()); - row.addElement(ed, false, false); + row.addElement(ed, false, true); mMenu.addRow(row); break; } diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index b49c33cc2..bd88248c0 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -62,7 +62,7 @@ void TextureResource::initFromMemory(const char* data, size_t length) if(imageRGBA.size() == 0) { - LOG(LogError) << "Could not initialize texture from memory (invalid data)!"; + LOG(LogError) << "Could not initialize texture from memory, invalid data! (" << mPath << ")"; return; } From 1d17bd99386a26567454cf98955d60fd56d3f721 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 16:02:25 -0500 Subject: [PATCH 216/386] Design tweaks. Fixed dpad_right.svg. --- CMakeLists.txt | 2 +- data/ResourceUtil.cpp | 4 +- data/Resources.h | 4 +- data/converted/help_dpad_right_svg.cpp | 429 +++++++++++++++++-------- data/converted/slider_knob_svg.cpp | 70 ++++ data/resources/help/dpad_right.svg | 55 +++- data/resources/slider_knob.png | Bin 1140 -> 0 bytes data/resources/slider_knob.svg | 8 + src/components/ButtonComponent.cpp | 5 +- src/components/ImageComponent.cpp | 2 +- src/components/MenuComponent.cpp | 12 +- src/components/MenuComponent.h | 2 + src/components/OptionListComponent.h | 6 +- src/components/SliderComponent.cpp | 12 +- src/components/SwitchComponent.cpp | 4 +- src/guis/GuiInputConfig.cpp | 2 +- src/guis/GuiMenu.cpp | 17 +- src/guis/GuiMetaDataEd.cpp | 2 +- src/resources/Font.cpp | 6 +- src/resources/Font.h | 1 + 20 files changed, 448 insertions(+), 195 deletions(-) create mode 100644 data/converted/slider_knob_svg.cpp delete mode 100644 data/resources/slider_knob.png create mode 100644 data/resources/slider_knob.svg diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d7ad177a..15b61c55e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -338,7 +338,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/off_svg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_add_svg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_remove_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_svg.cpp ) #SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index b1d85b192..588a0e5d9 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -20,7 +20,7 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, - {":/slider_knob.png", slider_knob_png_size, slider_knob_png_data}, + {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, @@ -57,7 +57,7 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[13]), std::make_pair(":/option_arrow.svg", res2hFiles[14]), std::make_pair(":/scroll_gradient.png", res2hFiles[15]), - std::make_pair(":/slider_knob.png", res2hFiles[16]), + std::make_pair(":/slider_knob.svg", res2hFiles[16]), std::make_pair(":/star_filled.svg", res2hFiles[17]), std::make_pair(":/star_unfilled.svg", res2hFiles[18]), std::make_pair(":/help/button_a.svg", res2hFiles[19]), diff --git a/data/Resources.h b/data/Resources.h index 0f2d27b55..090c2c4dd 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -53,8 +53,8 @@ extern const unsigned char option_arrow_svg_data[]; extern const size_t scroll_gradient_png_size; extern const unsigned char scroll_gradient_png_data[]; -extern const size_t slider_knob_png_size; -extern const unsigned char slider_knob_png_data[]; +extern const size_t slider_knob_svg_size; +extern const unsigned char slider_knob_svg_data[]; extern const size_t star_filled_svg_size; extern const unsigned char star_filled_svg_data[]; diff --git a/data/converted/help_dpad_right_svg.cpp b/data/converted/help_dpad_right_svg.cpp index db8c4a7a8..94ded25d2 100644 --- a/data/converted/help_dpad_right_svg.cpp +++ b/data/converted/help_dpad_right_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_right_svg_size = 1822; -const unsigned char help_dpad_right_svg_data[1822] = { +const size_t help_dpad_right_svg_size = 3338; +const unsigned char help_dpad_right_svg_data[3338] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -41,150 +41,301 @@ const unsigned char help_dpad_right_svg_data[1822] = { 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, + 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x33,0x70,0x78, 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x33,0x70,0x78,0x22,0x20, 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x33,0x20, + 0x33,0x37,0x2e,0x31,0x33,0x33,0x22,0x20,0x65,0x6e, 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, + 0x33,0x20,0x33,0x37,0x2e,0x31,0x33,0x33,0x22,0x20, 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x31,0x32,0x32,0x2c,0x33,0x37,0x2e,0x30, + 0x39,0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x48,0x33,0x2e, + 0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32,0x39,0x2c, + 0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d,0x31,0x2e, + 0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x63,0x30, + 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x68,0x38, + 0x2e,0x37,0x33,0x35,0x56,0x33,0x2e,0x31,0x35,0x39, + 0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c,0x31,0x2e, + 0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63,0x32,0x2e, + 0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x76,0x38, + 0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09, + 0x68,0x38,0x2e,0x37,0x33,0x31,0x63,0x31,0x2e,0x32, + 0x33,0x34,0x2c,0x30,0x2c,0x32,0x2e,0x32,0x30,0x31, + 0x2c,0x30,0x2e,0x35,0x35,0x32,0x2c,0x32,0x2e,0x37, + 0x32,0x32,0x2c,0x31,0x2e,0x35,0x35,0x34,0x63,0x30, + 0x2e,0x33,0x38,0x38,0x2c,0x30,0x2e,0x37,0x34,0x34, + 0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x31,0x2e,0x34, + 0x38,0x32,0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x31, + 0x2e,0x35,0x36,0x33,0x76,0x37,0x2e,0x31,0x31,0x35, + 0x63,0x30,0x2c,0x32,0x2e,0x32,0x39,0x2d,0x31,0x2e, + 0x38,0x36,0x36,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x68,0x2d,0x38,0x2e,0x37,0x33,0x32,0x76,0x38, + 0x2e,0x37,0x33,0x0d,0x0a,0x09,0x09,0x09,0x09,0x43, + 0x32,0x35,0x2e,0x32,0x34,0x33,0x2c,0x33,0x36,0x2e, + 0x32,0x36,0x35,0x2c,0x32,0x33,0x2e,0x33,0x37,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x39,0x36,0x2c,0x32,0x32, + 0x2e,0x31,0x32,0x32,0x2c,0x33,0x37,0x2e,0x30,0x39, + 0x36,0x7a,0x20,0x4d,0x33,0x2e,0x31,0x35,0x38,0x2c, + 0x31,0x33,0x2e,0x33,0x39,0x31,0x63,0x2d,0x30,0x2e, + 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x30,0x2e,0x31,0x33, + 0x39,0x2d,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, + 0x36,0x32,0x76,0x37,0x2e,0x31,0x31,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30,0x35, + 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31, + 0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x34,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x63,0x30,0x2e,0x30,0x30,0x35,0x2c, + 0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31,0x33, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, + 0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x68, + 0x37,0x2e,0x31,0x30,0x37,0x0d,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x32,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x31, + 0x30,0x2e,0x32,0x33,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x32,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, + 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x30,0x30,0x35,0x2d,0x30,0x2e,0x32, + 0x37,0x39,0x2d,0x30,0x2e,0x31,0x30,0x37,0x2d,0x31, + 0x2e,0x36,0x31,0x37,0x2d,0x31,0x2e,0x36,0x32,0x2d, + 0x31,0x2e,0x36,0x31,0x37,0x48,0x32,0x33,0x2e,0x37, + 0x34,0x35,0x56,0x33,0x2e,0x31,0x35,0x39,0x63,0x2d, + 0x30,0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37, + 0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x2d,0x37,0x2e,0x31,0x31, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36, + 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31, + 0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33, + 0x32,0x48,0x33,0x2e,0x31,0x35,0x38,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x6e,0x6f, - 0x6e,0x65,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69, - 0x64,0x74,0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20, - 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74, - 0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31, - 0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e, - 0x39,0x37,0x36,0x2c,0x31,0x32,0x2e,0x36,0x34,0x31, - 0x68,0x2d,0x39,0x2e,0x34,0x38,0x32,0x56,0x33,0x2e, - 0x31,0x35,0x39,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2c,0x30,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x37,0x31, - 0x2d,0x32,0x2e,0x33,0x37,0x31,0x2d,0x32,0x2e,0x33, - 0x37,0x31,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x30,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x36,0x39,0x2c, - 0x30,0x2d,0x32,0x2e,0x33,0x36,0x39,0x2c,0x32,0x2e, - 0x33,0x37,0x31,0x76,0x39,0x2e,0x34,0x38,0x32,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x30,0x2c,0x30,0x2d, - 0x32,0x2e,0x33,0x37,0x31,0x2c,0x30,0x2d,0x32,0x2e, - 0x33,0x37,0x31,0x2c,0x32,0x2e,0x33,0x37,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x30,0x2c,0x30, - 0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e,0x33, - 0x37,0x31,0x2c,0x32,0x2e,0x33,0x37,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x68,0x39,0x2e,0x34,0x38,0x34,0x76, - 0x39,0x2e,0x34,0x38,0x31,0x63,0x30,0x2c,0x30,0x2c, - 0x30,0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e, - 0x33,0x36,0x39,0x2c,0x32,0x2e,0x33,0x37,0x31,0x68, - 0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x30,0x2c, - 0x32,0x2e,0x33,0x37,0x31,0x2c,0x30,0x2c,0x32,0x2e, - 0x33,0x37,0x31,0x2d,0x32,0x2e,0x33,0x37,0x31,0x76, - 0x2d,0x39,0x2e,0x34,0x38,0x31,0x68,0x39,0x2e,0x34, - 0x38,0x32,0x63,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33, - 0x37,0x31,0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31, - 0x2d,0x32,0x2e,0x33,0x37,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x43,0x33, - 0x36,0x2e,0x33,0x34,0x37,0x2c,0x31,0x35,0x2e,0x30, - 0x31,0x31,0x2c,0x33,0x36,0x2e,0x33,0x34,0x37,0x2c, - 0x31,0x32,0x2e,0x36,0x34,0x31,0x2c,0x33,0x33,0x2e, - 0x39,0x37,0x36,0x2c,0x31,0x32,0x2e,0x36,0x34,0x31, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x6e,0x6f,0x6e,0x65, - 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73, - 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74, - 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, - 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x31,0x2e,0x34,0x36,0x38,0x63,0x31, - 0x2e,0x36,0x30,0x32,0x2c,0x30,0x2c,0x32,0x2e,0x39, - 0x2d,0x31,0x2e,0x32,0x39,0x39,0x2c,0x32,0x2e,0x39, - 0x2d,0x32,0x2e,0x39,0x30,0x31,0x0d,0x0a,0x09,0x09, - 0x63,0x30,0x2d,0x31,0x2e,0x36,0x30,0x32,0x2d,0x31, - 0x2e,0x32,0x39,0x39,0x2d,0x32,0x2e,0x39,0x2d,0x32, - 0x2e,0x39,0x2d,0x32,0x2e,0x39,0x63,0x2d,0x31,0x2e, - 0x36,0x30,0x34,0x2c,0x30,0x2d,0x32,0x2e,0x39,0x2c, - 0x31,0x2e,0x32,0x39,0x39,0x2d,0x32,0x2e,0x39,0x2c, - 0x32,0x2e,0x39,0x43,0x31,0x35,0x2e,0x36,0x36,0x37, - 0x2c,0x32,0x30,0x2e,0x31,0x36,0x39,0x2c,0x31,0x36, - 0x2e,0x39,0x36,0x34,0x2c,0x32,0x31,0x2e,0x34,0x36, - 0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c,0x32, - 0x31,0x2e,0x34,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x20, - 0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72, - 0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d, - 0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f, - 0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69, - 0x6e,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20, - 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74, - 0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31, - 0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x0d,0x0a, - 0x09,0x09,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x68,0x36,0x2e,0x30,0x31, - 0x31,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, - 0x2e,0x32,0x32,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x6e,0x6f,0x6e,0x65,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, - 0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, - 0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, - 0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d, - 0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, - 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31,0x36,0x32, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x0d,0x0a,0x09, - 0x09,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, - 0x30,0x30,0x35,0x76,0x2d,0x36,0x2e,0x30,0x31,0x31, - 0x4c,0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74,0x72, - 0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f, - 0x69,0x6e,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64,0x22, - 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69, - 0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22, - 0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, - 0x2e,0x39,0x31,0x36,0x2c,0x31,0x38,0x2e,0x35,0x36, - 0x37,0x0d,0x0a,0x09,0x09,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x35,0x76,0x36, - 0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e,0x39,0x31,0x36, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x6e,0x6f,0x6e,0x65, - 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73, - 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74, - 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63, - 0x61,0x70,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64,0x22, - 0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69, - 0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d,0x22,0x72,0x6f, - 0x75,0x6e,0x64,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, - 0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d, - 0x69,0x74,0x3d,0x22,0x31,0x30,0x22,0x20,0x64,0x3d, - 0x22,0x0d,0x0a,0x09,0x09,0x4d,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31,0x35,0x6c, - 0x33,0x2e,0x30,0x30,0x36,0x2d,0x34,0x2e,0x36,0x38, - 0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, - 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x33,0x2e,0x39, - 0x31,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0d,0x0a + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c,0x32,0x32, + 0x2e,0x32,0x31,0x38,0x63,0x2d,0x30,0x2e,0x39,0x37, + 0x36,0x2c,0x30,0x2d,0x31,0x2e,0x38,0x39,0x33,0x2d, + 0x30,0x2e,0x33,0x38,0x2d,0x32,0x2e,0x35,0x38,0x33, + 0x2d,0x31,0x2e,0x30,0x37,0x63,0x2d,0x30,0x2e,0x36, + 0x38,0x39,0x2d,0x30,0x2e,0x36,0x38,0x39,0x2d,0x31, + 0x2e,0x30,0x36,0x38,0x2d,0x31,0x2e,0x36,0x30,0x36, + 0x2d,0x31,0x2e,0x30,0x36,0x37,0x2d,0x32,0x2e,0x35, + 0x38,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x32,0x2c,0x31,0x2e,0x36,0x33, + 0x37,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2d,0x33,0x2e,0x36,0x34,0x39,0x73,0x33, + 0x2e,0x36,0x34,0x39,0x2c,0x31,0x2e,0x36,0x33,0x37, + 0x2c,0x33,0x2e,0x36,0x34,0x39,0x2c,0x33,0x2e,0x36, + 0x35,0x43,0x32,0x32,0x2e,0x32,0x31,0x37,0x2c,0x32, + 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x30,0x2e,0x35, + 0x38,0x31,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x2c, + 0x31,0x38,0x2e,0x35,0x36,0x38,0x2c,0x32,0x32,0x2e, + 0x32,0x31,0x38,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, + 0x36,0x38,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e,0x31,0x38, + 0x36,0x2c,0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30, + 0x2e,0x39,0x36,0x34,0x2d,0x32,0x2e,0x31,0x35,0x2c, + 0x32,0x2e,0x31,0x35,0x63,0x30,0x2c,0x30,0x2e,0x35, + 0x37,0x35,0x2c,0x30,0x2e,0x32,0x32,0x33,0x2c,0x31, + 0x2e,0x31,0x31,0x35,0x2c,0x30,0x2e,0x36,0x32,0x39, + 0x2c,0x31,0x2e,0x35,0x32,0x31,0x73,0x30,0x2e,0x39, + 0x34,0x36,0x2c,0x30,0x2e,0x36,0x33,0x2c,0x31,0x2e, + 0x35,0x32,0x31,0x2c,0x30,0x2e,0x36,0x33,0x63,0x31, + 0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e,0x31, + 0x34,0x39,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32, + 0x2e,0x31,0x34,0x39,0x2d,0x32,0x2e,0x31,0x35,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x43,0x32,0x30,0x2e,0x37, + 0x31,0x37,0x2c,0x31,0x37,0x2e,0x33,0x38,0x31,0x2c, + 0x31,0x39,0x2e,0x37,0x35,0x33,0x2c,0x31,0x36,0x2e, + 0x34,0x31,0x37,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, + 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, + 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, + 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, + 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x37,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x32,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x36,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, + 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, + 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, + 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, + 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, + 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, + 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, + 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x36,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, + 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, + 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e, + 0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x33,0x37,0x35,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, + 0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38, + 0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e, + 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c, + 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x39,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, + 0x30,0x39,0x34,0x2c,0x32,0x32,0x2e,0x32,0x39,0x32, + 0x2c,0x37,0x2e,0x39,0x37,0x2c,0x32,0x32,0x2e,0x33, + 0x32,0x33,0x2c,0x37,0x2e,0x38,0x34,0x36,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x33,0x7a,0x20,0x4d,0x34,0x2e, + 0x35,0x35,0x31,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, + 0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c, + 0x34,0x2e,0x35,0x35,0x31,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, + 0x2e,0x39,0x31,0x37,0x2c,0x31,0x38,0x2e,0x35,0x36, + 0x37,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c, + 0x33,0x33,0x2e,0x39,0x31,0x37,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x32, + 0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32,0x63, + 0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30, + 0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33,0x2d, + 0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30,0x39, + 0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30, + 0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d, + 0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e, + 0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c, + 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e, + 0x31,0x33,0x32,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d, + 0x30,0x2e,0x31,0x32,0x32,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e, + 0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63, + 0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33, + 0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, + 0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34, + 0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38, + 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x43,0x32,0x39, + 0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c,0x32, + 0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e,0x32, + 0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32,0x7a, + 0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c,0x31, + 0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e,0x32, + 0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36, + 0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39, + 0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, + 0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, + 0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32,0x35, + 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d, + 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31, + 0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e, + 0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34, + 0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e, + 0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d, + 0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36, + 0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, + 0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e, + 0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c, + 0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e,0x32, + 0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e, + 0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c, + 0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30, + 0x30,0x36,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31, + 0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35,0x33, + 0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x7a, + 0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x32, + 0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36,0x33, + 0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39,0x33, + 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/slider_knob_svg.cpp b/data/converted/slider_knob_svg.cpp new file mode 100644 index 000000000..ec7122501 --- /dev/null +++ b/data/converted/slider_knob_svg.cpp @@ -0,0 +1,70 @@ +//this file was auto-generated from "slider_knob.svg" by res2h + +#include "../Resources.h" + +const size_t slider_knob_svg_size = 627; +const unsigned char slider_knob_svg_data[627] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x36,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x36,0x70,0x78, + 0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d, + 0x22,0x30,0x20,0x30,0x20,0x31,0x36,0x20,0x31,0x36, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x31, + 0x36,0x20,0x31,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x2d, + 0x72,0x75,0x6c,0x65,0x3d,0x22,0x65,0x76,0x65,0x6e, + 0x6f,0x64,0x64,0x22,0x20,0x63,0x6c,0x69,0x70,0x2d, + 0x72,0x75,0x6c,0x65,0x3d,0x22,0x65,0x76,0x65,0x6e, + 0x6f,0x64,0x64,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x38,0x2c,0x30,0x63,0x34,0x2e, + 0x34,0x31,0x38,0x2c,0x30,0x2c,0x38,0x2c,0x33,0x2e, + 0x35,0x38,0x32,0x2c,0x38,0x2c,0x38,0x63,0x30,0x2c, + 0x34,0x2e,0x34,0x31,0x38,0x2d,0x33,0x2e,0x35,0x38, + 0x32,0x2c,0x38,0x2d,0x38,0x2c,0x38,0x73,0x2d,0x38, + 0x2d,0x33,0x2e,0x35,0x38,0x32,0x2d,0x38,0x2d,0x38, + 0x0d,0x0a,0x09,0x43,0x30,0x2c,0x33,0x2e,0x35,0x38, + 0x32,0x2c,0x33,0x2e,0x35,0x38,0x33,0x2c,0x30,0x2c, + 0x38,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/resources/help/dpad_right.svg b/data/resources/help/dpad_right.svg index fddf6bc91..989719d19 100644 --- a/data/resources/help/dpad_right.svg +++ b/data/resources/help/dpad_right.svg @@ -2,23 +2,48 @@ + width="37.133px" height="37.133px" viewBox="0 0 37.133 37.133" enable-background="new 0 0 37.133 37.133" xml:space="preserve"> - + + + + + + + + + + + + + + + + + + + - - - - - diff --git a/data/resources/slider_knob.png b/data/resources/slider_knob.png deleted file mode 100644 index 1a9d3d669840ea674dc28b4a0014543cff1c5e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmaJ>TWHfz7|sxfbPPJ!bXuk{Q}D7jNxNokY?ZEQU3D3?E37^U%aXG#Zn-Quv)K^b zsvs)JLeegj?8pA>>EL{*g0K{8Bo2-V3&sT2{xGaT}^Pky&YmuB33NNLl%n&6aWR>QaV+WwZg<0FN^lJnI!Nr7uXRd#zkfLBp%fa zfcrf@w@A@6&M+Rj+Rrd_74D^IFG-=BanseTpJBZ<_{2q^Xol3vrnvY-EOZJJ?GWlL zNoKQIPuAzrj5d-E27@+-*Xu?eZnH;)g5_4t$~*%HOwo{aC~GQiGYTzQHw+U<>39l? zK1r*Z6J*$g;#TaV{3| zMXQ5cAVSkIUnEF#wOpL5rh-9lEauB&IZfqfpDQ;*A zK9)2qPoc$ETT{#UYT}45FtwI(tTcs|acqG4CzeEFNV~OvwK{J?^J8x(2NxYCM<1wY z-VHR^E*HHLeH3pKTqJEhJGz^9+@hRuvGk6ZagG*T+k9#8J?*%nzdms>>2Nqk%5ytj zEj*PwklX4!((=`{uMV#1WWOA)|8ac_OzG>IM$<)sW^DcQ9Yb@!y*#z4>cTs3CRe$) zzi^P^KRv$cA6#<$=)Gl+W_^ei?Tj4CmY=Ms`Z+N2vH$X_PILX!{R2zC4{a|jcoQgX zE*d_+c<6pfb7I$-7n|naFVXjegkxpNp_!p#$=K+aaq}+TcQ9E&JnR{WEI&JZxt=c1 zmDQzgZ)uu)Zn)cZoSt6svcJgca|OE2JgD5*^kj8k0TwP>>b$wVWUc)lNW>br)3wdH E-)VMxr~m)} diff --git a/data/resources/slider_knob.svg b/data/resources/slider_knob.svg new file mode 100644 index 000000000..47d4e97ac --- /dev/null +++ b/data/resources/slider_knob.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/src/components/ButtonComponent.cpp b/src/components/ButtonComponent.cpp index 75cc8b52d..1dae3d043 100644 --- a/src/components/ButtonComponent.cpp +++ b/src/components/ButtonComponent.cpp @@ -44,8 +44,9 @@ void ButtonComponent::setText(const std::string& text, const std::string& helpTe mHelpText = helpText; mTextCache = std::unique_ptr(mFont->buildTextCache(mText, 0, 0, getCurTextColor())); - - setSize(mTextCache->metrics.size + Eigen::Vector2f(12, 0)); + + float minWidth = mFont->sizeText("DELETE").x() + 12; + setSize(std::max(mTextCache->metrics.size.x() + 12, minWidth), mTextCache->metrics.size.y()); updateHelpPrompts(); } diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 0d9e7410d..c202f3578 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -78,7 +78,7 @@ void ImageComponent::resize() SVGResource* svg = dynamic_cast(mTexture.get()); if(svg) { - svg->rasterizeAt((int)mSize.x(), (int)mSize.y()); + svg->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); } } diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index b6cd3a731..01d5c72ae 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -1,8 +1,8 @@ #include "MenuComponent.h" #include "ButtonComponent.h" -#define BUTTON_GRID_VERT_PADDING 20 -#define BUTTON_GRID_HORIZ_PADDING 16 +#define BUTTON_GRID_VERT_PADDING 32 +#define BUTTON_GRID_HORIZ_PADDING 10 using namespace Eigen; @@ -98,3 +98,11 @@ std::shared_ptr makeButtonGrid(Window* window, const std::vector< return buttonGrid; } + +std::shared_ptr makeArrow(Window* window) +{ + auto bracket = std::make_shared(window); + bracket->setImage(":/arrow.svg"); + bracket->setResize(0, round(Font::get(FONT_SIZE_MEDIUM)->getLetterHeight())); + return bracket; +} diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 7c23672fe..319152b09 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -7,8 +7,10 @@ #include "../Util.h" class ButtonComponent; +class ImageComponent; std::shared_ptr makeButtonGrid(Window* window, const std::vector< std::shared_ptr >& buttons); +std::shared_ptr makeArrow(Window* window); class MenuComponent : public GuiComponent { diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 8fbae485f..11a62156a 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -55,7 +55,7 @@ private: // add checkbox auto checkbox = std::make_shared(mWindow); checkbox->setImage(it->selected ? ":/checkbox_checked.svg" : ":/checkbox_unchecked.svg"); - + checkbox->setResize(0, font->getLetterHeight()); row.addElement(checkbox, false); // input handler @@ -135,8 +135,8 @@ public: // handles positioning/resizing of text and arrows void onSizeChanged() override { - mLeftArrow.setResize(0, mSize.y() * 0.5f); - mRightArrow.setResize(0, mSize.y() * 0.5f); + mLeftArrow.setResize(0, mText.getFont()->getLetterHeight()); + mRightArrow.setResize(0, mText.getFont()->getLetterHeight()); if(mSize.x() < (mLeftArrow.getSize().x() + mRightArrow.getSize().x())) LOG(LogWarning) << "OptionListComponent too narrow!"; diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index c9d848838..76d374d78 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -16,9 +16,9 @@ SliderComponent::SliderComponent(Window* window, float min, float max, float inc mMoveScale = ((max - min) * 0.0007f) / increment; mKnob.setOrigin(0.5f, 0.5f); - mKnob.setImage(":/slider_knob.png"); + mKnob.setImage(":/slider_knob.svg"); - setSize(196, 32); + setSize(Renderer::getScreenWidth() * 0.15f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()); } bool SliderComponent::input(InputConfig* config, Input input) @@ -108,7 +108,7 @@ float SliderComponent::getValue() void SliderComponent::onSizeChanged() { if(!mSuffix.empty()) - mFont = Font::get((int)(mSize.y() * 0.8f), FONT_PATH_LIGHT); + mFont = Font::get((int)(mSize.y()), FONT_PATH_LIGHT); onValueChanged(); } @@ -139,11 +139,7 @@ void SliderComponent::onValueChanged() } // update knob position/size - if(mKnob.getTextureSize().y() > mSize.y()) // only downscale - mKnob.setResize(0, mSize.y()); - else - mKnob.setResize(0, 0); - + mKnob.setResize(0, mSize.y() * 0.7f); float lineLength = mSize.x() - mKnob.getSize().x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0); mKnob.setPosition(((mValue + mMin) / mMax) * lineLength + mKnob.getSize().x()/2, mSize.y() / 2); } diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index ed47a5757..97536351c 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -6,9 +6,7 @@ SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { mImage.setImage(":/checkbox_unchecked.svg"); - - float height = (float)FONT_SIZE_MEDIUM; - mImage.setResize(0, height); + mImage.setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()); mSize = mImage.getSize(); } diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 0c1ab47e4..694e0d8a4 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -52,7 +52,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // icon auto icon = std::make_shared(mWindow); icon->setImage(inputIcon[i]); - icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getHeight() * 0.8f); + icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * ((i < 4) ? 1.2f : 1.0f)); // hack to enlarge dpad row.addElement(icon, false); // spacer between icon and text diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index bab8438fb..f0a819a9e 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -13,22 +13,11 @@ #include "../components/SliderComponent.h" #include "../components/TextComponent.h" #include "../components/OptionListComponent.h" +#include "../components/MenuComponent.h" #include "../VolumeControl.h" #include "../scrapers/GamesDBScraper.h" #include "../scrapers/TheArchiveScraper.h" -std::shared_ptr makeBracket(Window* window) -{ - auto bracket = std::make_shared(window); - bracket->setImage(":/arrow.svg"); - - // resize - const float fontHeight = Font::get(FONT_SIZE_MEDIUM)->getHeight(); - bracket->setResize(0, round(fontHeight * 0.5f)); - - return bracket; -} - GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU") { setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -68,7 +57,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN row.makeAcceptInputHandler(openAndSave); auto scrape_now = std::make_shared(mWindow, "SCRAPE NOW", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); - auto bracket = makeBracket(mWindow); + auto bracket = makeArrow(mWindow); row.addElement(scrape_now, true); row.addElement(bracket, false); s->addRow(row); @@ -195,7 +184,7 @@ void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, con if(add_arrow) { - std::shared_ptr bracket = makeBracket(mWindow); + std::shared_ptr bracket = makeArrow(mWindow); row.addElement(bracket, false); } diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 04c9144bf..98252686e 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -68,7 +68,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector auto bracket = std::make_shared(mWindow); bracket->setImage(":/arrow.svg"); - bracket->setResize(Eigen::Vector2f(0, lbl->getSize().y() * 0.8f)); + bracket->setResize(Eigen::Vector2f(0, lbl->getFont()->getLetterHeight())); row.addElement(bracket, false); bool multiLine = iter->type == MD_MULTILINE_STRING; diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 14a197d5c..9676c30da 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -282,6 +282,10 @@ float Font::getHeight() const return mMaxGlyphHeight * 1.5f * fontScale; } +float Font::getLetterHeight() const +{ + return charData['S'].texH * fontScale; +} void Font::drawCenteredText(std::string text, float xOffset, float y, unsigned int color) { @@ -434,7 +438,7 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of float x = offsetX; - float yTop = (charData['S'].bearingY); + float yTop = charData['S'].bearingY * fontScale; float yBot = getHeight(); float y = offsetY + (yBot + yTop)/2.0f; diff --git a/src/resources/Font.h b/src/resources/Font.h index 2ceefcc1a..51a39cc91 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -66,6 +66,7 @@ public: void drawCenteredText(std::string text, float xOffset, float y, unsigned int color); float getHeight() const; + float getLetterHeight() const; void unload(std::shared_ptr& rm) override; void reload(std::shared_ptr& rm) override; From 5f55288495c293551d1f46dccf82c903f99fce2c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 16:55:18 -0500 Subject: [PATCH 217/386] Fixed SVGs being cut off by scaling based on height instead of width. Fixed buttons not being quite vertically centered. Hooked up new switch graphics. Updated slider logic to only move in multiples of the specified increment. --- data/converted/slider_knob_png.cpp | 121 ----------------------------- src/components/MenuComponent.cpp | 7 +- src/components/SliderComponent.cpp | 51 ++++++------ src/components/SliderComponent.h | 8 +- src/components/SwitchComponent.cpp | 9 ++- src/components/SwitchComponent.h | 1 + src/guis/GuiMenu.cpp | 6 +- src/resources/SVGResource.cpp | 2 +- 8 files changed, 41 insertions(+), 164 deletions(-) delete mode 100644 data/converted/slider_knob_png.cpp diff --git a/data/converted/slider_knob_png.cpp b/data/converted/slider_knob_png.cpp deleted file mode 100644 index 26dc7a4ca..000000000 --- a/data/converted/slider_knob_png.cpp +++ /dev/null @@ -1,121 +0,0 @@ -//this file was auto-generated from "slider_knob.png" by res2h - -#include "../Resources.h" - -const size_t slider_knob_png_size = 1140; -const unsigned char slider_knob_png_data[1140] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x10, - 0x00,0x00,0x00,0x10,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xf3,0xff,0x61,0x00,0x00,0x00,0x19,0x74,0x45,0x58, - 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, - 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, - 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, - 0x00,0x00,0x03,0x24,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73, - 0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e, - 0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e, - 0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e, - 0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f, - 0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54, - 0x79,0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72, - 0x63,0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54, - 0x6f,0x6f,0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70, - 0x20,0x43,0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69, - 0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x34,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x36,0x46,0x44,0x45,0x41,0x33, - 0x43,0x35,0x39,0x44,0x38,0x41,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x3e,0x20,0x3c, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69, - 0x76,0x65,0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, - 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x69,0x69,0x64,0x3a,0x33,0x42,0x37,0x42,0x36,0x33, - 0x37,0x46,0x39,0x44,0x38,0x38,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x20,0x73,0x74, - 0x52,0x65,0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65, - 0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e, - 0x64,0x69,0x64,0x3a,0x33,0x42,0x37,0x42,0x36,0x33, - 0x38,0x30,0x39,0x44,0x38,0x38,0x31,0x31,0x45,0x33, - 0x41,0x39,0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30, - 0x39,0x39,0x32,0x45,0x45,0x33,0x22,0x2f,0x3e,0x20, - 0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63, - 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c, - 0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20, - 0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74, - 0x61,0x3e,0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b, - 0x65,0x74,0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22, - 0x3f,0x3e,0x1b,0x1b,0x31,0x47,0x00,0x00,0x00,0xe6, - 0x49,0x44,0x41,0x54,0x78,0xda,0xa4,0x93,0x4d,0x0a, - 0xc2,0x30,0x10,0x46,0x63,0x14,0xc5,0x63,0x58,0x10, - 0xfc,0x01,0xbd,0x83,0xb8,0xa8,0xe8,0x31,0x0a,0xba, - 0x70,0xe3,0xaa,0xb7,0x50,0x0a,0x0a,0x0a,0xf5,0x18, - 0x82,0x8b,0xe2,0x25,0xac,0x82,0x9b,0x82,0x87,0x10, - 0xa1,0x62,0xf1,0x1b,0x99,0x48,0x74,0x51,0x6c,0x3a, - 0xf0,0xa0,0x4c,0xfb,0xbe,0x84,0x74,0x52,0x70,0x5d, - 0x57,0xfc,0x54,0x0b,0x38,0x60,0x00,0x6a,0xdc,0x8b, - 0xc0,0x1e,0xf8,0xe0,0xac,0x7f,0x2c,0xb5,0xe7,0x32, - 0x58,0x82,0x23,0x98,0x81,0x06,0xa8,0x30,0x4d,0xee, - 0xd1,0xbb,0x35,0xa8,0x2a,0xa9,0xa4,0xc9,0x3b,0xd0, - 0x17,0xe9,0x45,0x0b,0x8e,0x41,0x9d,0x77,0x18,0xab, - 0x1d,0x2c,0xfe,0x90,0xf5,0xea,0x81,0xb9,0x4a,0x6c, - 0x73,0x6a,0xd6,0x9a,0x90,0x2b,0xf9,0xc0,0x8a,0x06, - 0x01,0xe4,0x38,0x14,0x60,0x0b,0xf3,0xb2,0x29,0xc0, - 0xca,0x11,0x60,0x49,0x91,0xaf,0xde,0x7f,0x21,0xca, - 0x11,0x70,0x95,0x3c,0x61,0xa6,0x15,0x50,0xc0,0x16, - 0x3c,0x0d,0x64,0x72,0x7c,0x0a,0x08,0xc1,0xc6,0x20, - 0x80,0x9c,0x50,0x1d,0x22,0xcd,0x79,0x90,0x41,0x3e, - 0xb0,0xf3,0xb9,0x4c,0x31,0x18,0x82,0x15,0x48,0x52, - 0xc4,0x84,0x57,0x1e,0xb1,0xf3,0x75,0x1b,0xa9,0x31, - 0x05,0x1d,0xe0,0x81,0x0b,0x78,0x80,0x1b,0x38,0x71, - 0xaf,0xcb,0x23,0x7c,0x57,0xd2,0x4b,0x80,0x01,0x00, - 0x3d,0x15,0x2b,0x10,0xc1,0x8a,0x11,0x59,0x00,0x00, - 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 01d5c72ae..3deddd040 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -81,7 +81,7 @@ std::vector MenuComponent::getHelpPrompts() std::shared_ptr makeButtonGrid(Window* window, const std::vector< std::shared_ptr >& buttons) { - std::shared_ptr buttonGrid = std::make_shared(window, Vector2i(buttons.size(), 1)); + std::shared_ptr buttonGrid = std::make_shared(window, Vector2i(buttons.size(), 2)); float buttonGridWidth = (float)BUTTON_GRID_HORIZ_PADDING * buttons.size(); // initialize to padding for(int i = 0; i < (int)buttons.size(); i++) @@ -93,8 +93,9 @@ std::shared_ptr makeButtonGrid(Window* window, const std::vector< { buttonGrid->setColWidthPerc(i, (buttons.at(i)->getSize().x() + BUTTON_GRID_HORIZ_PADDING) / buttonGridWidth); } - - buttonGrid->setSize(buttonGridWidth, buttons.at(0)->getSize().y() + BUTTON_GRID_VERT_PADDING); + + buttonGrid->setSize(buttonGridWidth, buttons.at(0)->getSize().y() + BUTTON_GRID_VERT_PADDING + 2); + buttonGrid->setRowHeightPerc(1, 2 / buttonGrid->getSize().y()); // spacer row to deal with dropshadow to make buttons look centered return buttonGrid; } diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 76d374d78..78dc0468b 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -5,16 +5,17 @@ #include "../Log.h" #include "../Util.h" +#define MOVE_REPEAT_DELAY 500 +#define MOVE_REPEAT_RATE 40 + SliderComponent::SliderComponent(Window* window, float min, float max, float increment, const std::string& suffix) : GuiComponent(window), - mMin(min), mMax(max), mIncrement(increment), mMoveRate(0), mRepeatWaitTimer(0), mKnob(window), mSuffix(suffix) + mMin(min), mMax(max), mSingleIncrement(increment), mMoveRate(0), mKnob(window), mSuffix(suffix) { assert((min - max) != 0); + // some sane default value mValue = (max + min) / 2; - //calculate move scale - mMoveScale = ((max - min) * 0.0007f) / increment; - mKnob.setOrigin(0.5f, 0.5f); mKnob.setImage(":/slider_knob.svg"); @@ -26,24 +27,19 @@ bool SliderComponent::input(InputConfig* config, Input input) if(config->isMappedTo("left", input)) { if(input.value) - mMoveRate = -mIncrement; - else - mMoveRate = 0; - - //setting mRepeatWaitTimer to 0 will trigger an initial move in our update method - mRepeatWaitTimer = 0; + setValue(mValue - mSingleIncrement); + mMoveRate = input.value ? -mSingleIncrement : 0; + mMoveAccumulator = -MOVE_REPEAT_DELAY; return true; } if(config->isMappedTo("right", input)) { if(input.value) - mMoveRate = mIncrement; - else - mMoveRate = 0; - - mRepeatWaitTimer = 0; + setValue(mValue + mSingleIncrement); + mMoveRate = input.value ? mSingleIncrement : 0; + mMoveAccumulator = -MOVE_REPEAT_DELAY; return true; } @@ -54,20 +50,12 @@ void SliderComponent::update(int deltaTime) { if(mMoveRate != 0) { - if(mRepeatWaitTimer == 0) - mValue += mMoveRate; - else if(mRepeatWaitTimer >= 450) - mValue += mMoveRate * deltaTime * mMoveScale; - - if(mValue < mMin) - mValue = mMin; - if(mValue > mMax) - mValue = mMax; - - onValueChanged(); - - if(mRepeatWaitTimer < 450) - mRepeatWaitTimer += deltaTime; + mMoveAccumulator += deltaTime; + while(mMoveAccumulator >= MOVE_REPEAT_RATE) + { + setValue(mValue + mMoveRate); + mMoveAccumulator -= MOVE_REPEAT_RATE; + } } GuiComponent::update(deltaTime); @@ -97,6 +85,11 @@ void SliderComponent::render(const Eigen::Affine3f& parentTrans) void SliderComponent::setValue(float value) { mValue = value; + if(value < mMin) + value = mMin; + else if(value > mMax) + value = mMax; + onValueChanged(); } diff --git a/src/components/SliderComponent.h b/src/components/SliderComponent.h index efdd81999..fc0d7ea68 100644 --- a/src/components/SliderComponent.h +++ b/src/components/SliderComponent.h @@ -29,15 +29,13 @@ private: float mMin, mMax; float mValue; - float mIncrement; - float mMoveScale; - int mRepeatWaitTimer; + float mSingleIncrement; + float mMoveRate; + int mMoveAccumulator; ImageComponent mKnob; std::string mSuffix; std::shared_ptr mFont; std::shared_ptr mValueCache; - - float mMoveRate; }; diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index 97536351c..c6fdf61f0 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -5,11 +5,16 @@ SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { - mImage.setImage(":/checkbox_unchecked.svg"); + mImage.setImage(":/off.svg"); mImage.setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()); mSize = mImage.getSize(); } +void SwitchComponent::onSizeChanged() +{ + mImage.setSize(mSize); +} + bool SwitchComponent::input(InputConfig* config, Input input) { if(config->isMappedTo("a", input) && input.value) @@ -44,7 +49,7 @@ void SwitchComponent::setState(bool state) void SwitchComponent::onStateChanged() { - mImage.setImage(mState ? ":/checkbox_checked.svg" : ":/checkbox_unchecked.svg"); + mImage.setImage(mState ? ":/on.svg" : ":/off.svg"); } std::vector SwitchComponent::getHelpPrompts() diff --git a/src/components/SwitchComponent.h b/src/components/SwitchComponent.h index 14c994808..cb267f8dc 100644 --- a/src/components/SwitchComponent.h +++ b/src/components/SwitchComponent.h @@ -12,6 +12,7 @@ public: bool input(InputConfig* config, Input input) override; void render(const Eigen::Affine3f& parentTrans) override; + void onSizeChanged() override; bool getState() const; void setState(bool state); diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index f0a819a9e..a67544567 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -89,10 +89,10 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN auto s = new GuiSettings(mWindow, "UI SETTINGS"); // dim time - auto dim_time = std::make_shared(mWindow, 0.f, 1200.f, 30.f, "s"); - dim_time->setValue((float)(Settings::getInstance()->getInt("DimTime") / 1000)); + auto dim_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); + dim_time->setValue((float)(Settings::getInstance()->getInt("DimTime") / (1000 * 60))); s->addWithLabel("DIM SCREEN AFTER", dim_time); - s->addSaveFunc([dim_time] { Settings::getInstance()->setInt("DimTime", (int)(dim_time->getValue() * 1000)); }); + s->addSaveFunc([dim_time] { Settings::getInstance()->setInt("DimTime", (int)round(dim_time->getValue()) * (1000 * 60)); }); // framerate auto framerate = std::make_shared(mWindow); diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index f11bbdfbe..39ece9e51 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -51,7 +51,7 @@ void SVGResource::rasterizeAt(size_t width, size_t height) unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); NSVGrasterizer* rast = nsvgCreateRasterizer(); - nsvgRasterize(rast, mSVGImage, 0, 0, width / mSVGImage->width, imagePx, width, height, width * 4); + nsvgRasterize(rast, mSVGImage, 0, 0, height / mSVGImage->height, imagePx, width, height, width * 4); nsvgDeleteRasterizer(rast); // flip the pixels From f084f29e6182588cf5cd0f95d096d9dd99de6889 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 17:37:40 -0500 Subject: [PATCH 218/386] Improved input config styling a little. --- src/guis/GuiDetectDevice.cpp | 22 +++++++++++++--------- src/guis/GuiInputConfig.cpp | 8 ++++---- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index 53451f84b..f2b96c5eb 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -8,6 +8,7 @@ #include #include #include "../views/ViewController.h" +#include "../Util.h" #define HOLD_TIME 1000 @@ -30,12 +31,12 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w } mTitle = std::make_shared(mWindow, firstRun ? "WELCOME TO EMULATIONSTATION" : "SELECT A DEVICE", - Font::get(FONT_SIZE_MEDIUM), 0x666666FF, TextComponent::ALIGN_CENTER); + Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - std::string msg = (firstRun ? "First, we need to configure your input device!\n" : ""); - msg += "Hold a button on your input device to configure it.\n" - "Press F4 to quit at any time."; + std::string msg = (firstRun ? "FIRST, WE NEED TO CONFIGURE YOUR INPUT DEVICE!\n" : ""); + msg += "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.\n" + "PRESS F4 TO QUIT AT ANY TIME."; mMsg = std::make_shared(mWindow, msg, Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mMsg, Vector2i(0, 1), false, true); @@ -43,13 +44,13 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w int numDevices = mWindow->getInputManager()->getNumJoysticks(); if(numDevices > 0) - deviceInfo << numDevices << " joystick" << (numDevices > 1 ? "s" : "") << " detected."; + deviceInfo << "(" << numDevices << " JOYSTICK" << (numDevices > 1 ? "S" : "") << " DETECTED)"; else - deviceInfo << "No joysticks detected!"; - mDeviceInfo = std::make_shared(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x888888FF, TextComponent::ALIGN_CENTER); + deviceInfo << "(NO JOYSTICKS DETECTED)"; + mDeviceInfo = std::make_shared(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mDeviceInfo, Vector2i(0, 2), false, true); - mDeviceHeld = std::make_shared(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mDeviceHeld = std::make_shared(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0xFFFFFFFF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mDeviceHeld, Vector2i(0, 3), false, true); setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.5f); @@ -76,7 +77,7 @@ bool GuiDetectDevice::input(InputConfig* config, Input input) // started holding mHoldingConfig = config; mHoldTime = HOLD_TIME; - mDeviceHeld->setText(config->getDeviceName()); + mDeviceHeld->setText(strToUpper(config->getDeviceName())); }else if(!input.value && mHoldingConfig == config) { // cancel @@ -93,6 +94,9 @@ void GuiDetectDevice::update(int deltaTime) if(mHoldingConfig) { mHoldTime -= deltaTime; + const float t = (float)mHoldTime / HOLD_TIME; + unsigned int c = (unsigned char)(t * 255); + mDeviceHeld->setColor((c << 24) | (c << 16) | (c << 8) | 0xFF); if(mHoldTime <= 0) { // picked one! diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 694e0d8a4..d7c106913 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -9,7 +9,7 @@ static const int inputCount = 10; static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown"}; -static const char* inputDispName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "Page Up", "Page Down"}; +static const char* inputDispName[inputCount] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGE UP", "PAGE DOWN"}; static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_down.svg", ":/help/dpad_left.svg", ":/help/dpad_right.svg", ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", ":/help/button_l.svg", ":/help/button_r.svg" }; @@ -23,7 +23,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), mTargetConfig(target) { - LOG(LogInfo) << "Configuring device " << target->getDeviceId(); + LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ")."; if(reconfigureAll) target->clear(); @@ -37,10 +37,10 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mTitle = std::make_shared(mWindow, "PLEASE CONFIGURE INPUT FOR", Font::get(FONT_SIZE_SMALL), 0x555555FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - mSubtitle1 = std::make_shared(mWindow, target->getDeviceName(), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); + mSubtitle1 = std::make_shared(mWindow, strToUpper(target->getDeviceName()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mSubtitle1, Vector2i(0, 1), false, true); - mSubtitle2 = std::make_shared(mWindow, "(HOLD ANY BUTTON TO SKIP BUT NOT YET)", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); + mSubtitle2 = std::make_shared(mWindow, /*"(HOLD ANY BUTTON TO SKIP)"*/ "", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mSubtitle2, Vector2i(0, 2), false, true); mList = std::make_shared(mWindow); From d18140536add38dabda4d2323fe2521ee696d555 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 18:03:01 -0500 Subject: [PATCH 219/386] Fixed on.svg. Updated CREDITS.md. --- CREDITS.md | 20 +++++- data/converted/on_svg.cpp | 130 +++++++++++++++++++------------------- data/resources/on.svg | 12 ++-- 3 files changed, 89 insertions(+), 73 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index e46f8bc28..3e3b2c363 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,14 +1,17 @@ Programming Alec "Aloshi" Lofquist - http://www.aloshi.com +UI Art & Design + Nils Bonenberger -Resources + +Libraries ========= PugiXML http://pugixml.org/ -SDL 1.2 +SDL 2 http://www.libsdl.org/ FreeImage @@ -16,3 +19,16 @@ FreeImage FreeType http://www.freetype.org + +cURL + http://curl.haxx.se/ + +Boost + http://www.boost.org/ + + +Resources +========= + +Open Sans font + http://www.google.com/fonts/specimen/Open+Sans \ No newline at end of file diff --git a/data/converted/on_svg.cpp b/data/converted/on_svg.cpp index a8c533a3f..7e3143077 100644 --- a/data/converted/on_svg.cpp +++ b/data/converted/on_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t on_svg_size = 1148; -const unsigned char on_svg_data[1148] = { +const size_t on_svg_size = 1146; +const unsigned char on_svg_data[1146] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -55,68 +55,68 @@ const unsigned char on_svg_data[1148] = { 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x33,0x39,0x2e,0x36,0x36,0x34, - 0x2c,0x30,0x48,0x34,0x2e,0x32,0x35,0x32,0x43,0x31, - 0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c,0x30,0x2c,0x31, - 0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35,0x63, - 0x30,0x2c,0x32,0x2e,0x33,0x33,0x39,0x2c,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c, - 0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x68,0x33,0x35,0x2e,0x34,0x31,0x32,0x0d,0x0a, - 0x09,0x09,0x63,0x32,0x2e,0x33,0x33,0x39,0x2c,0x30, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x31,0x2e,0x39, - 0x31,0x33,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x34, - 0x2e,0x32,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, - 0x43,0x34,0x33,0x2e,0x39,0x31,0x36,0x2c,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x34,0x32,0x2e,0x30,0x30,0x33, - 0x2c,0x30,0x2c,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c, - 0x30,0x4c,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c,0x30, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x35,0x2e,0x37,0x35,0x34, + 0x2c,0x37,0x2e,0x34,0x36,0x31,0x63,0x2d,0x32,0x2e, + 0x33,0x31,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34, + 0x33,0x2c,0x31,0x2e,0x34,0x33,0x34,0x2d,0x33,0x2e, + 0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x31,0x38,0x63, + 0x30,0x2c,0x32,0x2e,0x30,0x38,0x33,0x2c,0x31,0x2e, + 0x33,0x32,0x35,0x2c,0x33,0x2e,0x35,0x32,0x31,0x2c, + 0x33,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x32, + 0x31,0x0d,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33,0x32, + 0x2c,0x30,0x2c,0x33,0x2e,0x36,0x34,0x34,0x2d,0x31, + 0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x36,0x34,0x35, + 0x2d,0x33,0x2e,0x35,0x32,0x31,0x43,0x31,0x39,0x2e, + 0x33,0x39,0x39,0x2c,0x38,0x2e,0x38,0x39,0x35,0x2c, + 0x31,0x38,0x2e,0x30,0x37,0x34,0x2c,0x37,0x2e,0x34, + 0x36,0x31,0x2c,0x31,0x35,0x2e,0x37,0x35,0x34,0x2c, + 0x37,0x2e,0x34,0x36,0x31,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x33,0x2e, - 0x37,0x30,0x34,0x2c,0x31,0x35,0x2e,0x37,0x31,0x35, - 0x68,0x31,0x2e,0x39,0x38,0x38,0x56,0x38,0x2e,0x36, - 0x30,0x32,0x68,0x30,0x2e,0x30,0x32,0x37,0x6c,0x35, - 0x2e,0x39,0x30,0x36,0x2c,0x37,0x2e,0x31,0x31,0x33, - 0x68,0x32,0x2e,0x33,0x33,0x32,0x56,0x36,0x2e,0x32, - 0x34,0x34,0x68,0x2d,0x31,0x2e,0x39,0x38,0x37,0x76, - 0x37,0x2e,0x31,0x31,0x34,0x68,0x2d,0x30,0x2e,0x30, - 0x32,0x37,0x6c,0x2d,0x35,0x2e,0x38,0x36,0x36,0x2d, - 0x37,0x2e,0x31,0x31,0x34,0x68,0x2d,0x32,0x2e,0x33, - 0x37,0x33,0x56,0x31,0x35,0x2e,0x37,0x31,0x35,0x7a, - 0x0d,0x0a,0x09,0x20,0x4d,0x31,0x35,0x2e,0x37,0x35, - 0x34,0x2c,0x31,0x34,0x2e,0x35,0x63,0x2d,0x32,0x2e, - 0x33,0x31,0x38,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34, - 0x33,0x2d,0x31,0x2e,0x34,0x33,0x38,0x2d,0x33,0x2e, - 0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x32,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x38,0x34,0x2c,0x31,0x2e, - 0x33,0x32,0x34,0x2d,0x33,0x2e,0x35,0x31,0x38,0x2c, - 0x33,0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x31, - 0x38,0x63,0x32,0x2e,0x33,0x32,0x2c,0x30,0x2c,0x33, - 0x2e,0x36,0x34,0x35,0x2c,0x31,0x2e,0x34,0x33,0x34, - 0x2c,0x33,0x2e,0x36,0x34,0x35,0x2c,0x33,0x2e,0x35, - 0x31,0x38,0x0d,0x0a,0x09,0x43,0x31,0x39,0x2e,0x33, - 0x39,0x38,0x2c,0x31,0x33,0x2e,0x30,0x36,0x33,0x2c, - 0x31,0x38,0x2e,0x30,0x37,0x34,0x2c,0x31,0x34,0x2e, - 0x35,0x2c,0x31,0x35,0x2e,0x37,0x35,0x34,0x2c,0x31, - 0x34,0x2e,0x35,0x20,0x4d,0x31,0x35,0x2e,0x37,0x35, - 0x34,0x2c,0x31,0x35,0x2e,0x39,0x38,0x63,0x34,0x2e, - 0x31,0x37,0x2c,0x30,0x2c,0x35,0x2e,0x37,0x39,0x38, - 0x2d,0x32,0x2e,0x33,0x33,0x36,0x2c,0x35,0x2e,0x37, - 0x39,0x38,0x2d,0x35,0x2e,0x30,0x30,0x31,0x63,0x30, - 0x2d,0x32,0x2e,0x36,0x36,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x38,0x2d,0x35,0x2e,0x30,0x30,0x31,0x2d,0x35, - 0x2e,0x37,0x39,0x38,0x2d,0x35,0x2e,0x30,0x30,0x31, - 0x0d,0x0a,0x09,0x63,0x2d,0x34,0x2e,0x31,0x36,0x38, - 0x2c,0x30,0x2d,0x35,0x2e,0x37,0x39,0x36,0x2c,0x32, - 0x2e,0x33,0x33,0x32,0x2d,0x35,0x2e,0x37,0x39,0x36, - 0x2c,0x35,0x2e,0x30,0x30,0x31,0x43,0x39,0x2e,0x39, - 0x35,0x38,0x2c,0x31,0x33,0x2e,0x36,0x34,0x35,0x2c, - 0x31,0x31,0x2e,0x35,0x38,0x36,0x2c,0x31,0x35,0x2e, - 0x39,0x38,0x2c,0x31,0x35,0x2e,0x37,0x35,0x34,0x2c, - 0x31,0x35,0x2e,0x39,0x38,0x22,0x2f,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x39,0x2e, + 0x36,0x36,0x34,0x2c,0x30,0x48,0x34,0x2e,0x32,0x35, + 0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, + 0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, + 0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33,0x2e,0x34, + 0x35,0x35,0x63,0x30,0x2c,0x32,0x2e,0x33,0x33,0x39, + 0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34, + 0x2e,0x32,0x35,0x32,0x68,0x33,0x35,0x2e,0x34,0x31, + 0x32,0x0d,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33,0x33, + 0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d, + 0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34,0x2e, + 0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31,0x36, + 0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32,0x2e, + 0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e,0x36, + 0x36,0x34,0x2c,0x30,0x7a,0x20,0x4d,0x31,0x35,0x2e, + 0x37,0x35,0x34,0x2c,0x31,0x35,0x2e,0x39,0x37,0x39, + 0x63,0x2d,0x34,0x2e,0x31,0x36,0x38,0x2c,0x30,0x2d, + 0x35,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e,0x33,0x33, + 0x34,0x2d,0x35,0x2e,0x37,0x39,0x36,0x2d,0x35,0x0d, + 0x0a,0x09,0x09,0x63,0x30,0x2d,0x32,0x2e,0x36,0x36, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x38,0x2d,0x35,0x2e, + 0x30,0x30,0x31,0x2c,0x35,0x2e,0x37,0x39,0x36,0x2d, + 0x35,0x2e,0x30,0x30,0x31,0x63,0x34,0x2e,0x31,0x37, + 0x2c,0x30,0x2c,0x35,0x2e,0x37,0x39,0x38,0x2c,0x32, + 0x2e,0x33,0x33,0x32,0x2c,0x35,0x2e,0x37,0x39,0x38, + 0x2c,0x35,0x2e,0x30,0x30,0x31,0x43,0x32,0x31,0x2e, + 0x35,0x35,0x32,0x2c,0x31,0x33,0x2e,0x36,0x34,0x34, + 0x2c,0x31,0x39,0x2e,0x39,0x32,0x34,0x2c,0x31,0x35, + 0x2e,0x39,0x37,0x39,0x2c,0x31,0x35,0x2e,0x37,0x35, + 0x34,0x2c,0x31,0x35,0x2e,0x39,0x37,0x39,0x7a,0x20, + 0x4d,0x33,0x33,0x2e,0x39,0x35,0x37,0x2c,0x31,0x35, + 0x2e,0x37,0x31,0x35,0x0d,0x0a,0x09,0x09,0x68,0x2d, + 0x32,0x2e,0x33,0x33,0x32,0x4c,0x32,0x35,0x2e,0x37, + 0x32,0x2c,0x38,0x2e,0x36,0x30,0x32,0x68,0x2d,0x30, + 0x2e,0x30,0x32,0x37,0x76,0x37,0x2e,0x31,0x31,0x33, + 0x68,0x2d,0x31,0x2e,0x39,0x38,0x38,0x56,0x36,0x2e, + 0x32,0x34,0x34,0x68,0x32,0x2e,0x33,0x37,0x33,0x6c, + 0x35,0x2e,0x38,0x36,0x35,0x2c,0x37,0x2e,0x31,0x31, + 0x34,0x68,0x30,0x2e,0x30,0x32,0x37,0x56,0x36,0x2e, + 0x32,0x34,0x34,0x68,0x31,0x2e,0x39,0x38,0x37,0x56, + 0x31,0x35,0x2e,0x37,0x31,0x35,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/resources/on.svg b/data/resources/on.svg index 7a9f81ad5..ec61bdc64 100644 --- a/data/resources/on.svg +++ b/data/resources/on.svg @@ -4,11 +4,11 @@ - + + - From cf836c0f8ae2b273dbcd785157be5a147158f331 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 18:17:14 -0500 Subject: [PATCH 220/386] Fixed SliderComponent going beyond its min/max values. Defensive measures against a possible SVG reinitialization bug. --- src/components/SliderComponent.cpp | 8 ++++---- src/resources/SVGResource.cpp | 15 +++++++++++++-- src/resources/SVGResource.h | 2 ++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 78dc0468b..1de0065e1 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -85,10 +85,10 @@ void SliderComponent::render(const Eigen::Affine3f& parentTrans) void SliderComponent::setValue(float value) { mValue = value; - if(value < mMin) - value = mMin; - else if(value > mMax) - value = mMax; + if(mValue < mMin) + mValue = mMin; + else if(mValue > mMax) + mValue = mMax; onValueChanged(); } diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 39ece9e51..1f50466f5 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -2,12 +2,14 @@ #include "../nanosvg/nanosvg.h" #include "../nanosvg/nanosvgrast.h" #include "../Log.h" +#include "../Util.h" #define DPI 96 SVGResource::SVGResource(const std::string& path, bool tile) : TextureResource(path, tile), mSVGImage(NULL) { - assert(tile == false); + mLastWidth = 0; + mLastHeight = 0; } SVGResource::~SVGResource() @@ -40,11 +42,20 @@ void SVGResource::initFromMemory(const char* file, size_t length) return; } - rasterizeAt((int)mSVGImage->width, (int)mSVGImage->height); + if(mLastWidth && mLastHeight) + rasterizeAt(mLastWidth, mLastHeight); + else + rasterizeAt((int)round(mSVGImage->width), (int)round(mSVGImage->height)); } void SVGResource::rasterizeAt(size_t width, size_t height) { + if(width != (int)round(mSVGImage->width) && height != (int)round(mSVGImage->height)) + { + mLastWidth = width; + mLastHeight = height; + } + if(!mSVGImage) return; diff --git a/src/resources/SVGResource.h b/src/resources/SVGResource.h index 46519d799..c28b29396 100644 --- a/src/resources/SVGResource.h +++ b/src/resources/SVGResource.h @@ -22,4 +22,6 @@ protected: void deinitSVG(); NSVGimage* mSVGImage; + size_t mLastWidth; + size_t mLastHeight; }; From c3d6933298336389849bb2dcddca57a6ec2a713f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 22 Mar 2014 19:48:48 -0500 Subject: [PATCH 221/386] Some more re-styling. Fixed a crash with SVGResource (durr). --- src/components/ComponentList.h | 5 ++-- src/guis/GuiDetectDevice.cpp | 35 +++++++++++++++----------- src/guis/GuiDetectDevice.h | 3 ++- src/guis/GuiInputConfig.cpp | 46 ++++++++++++++++++++++------------ src/resources/SVGResource.cpp | 6 ++--- 5 files changed, 58 insertions(+), 37 deletions(-) diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index 5a0730891..247f3884d 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -63,6 +63,7 @@ public: inline int getCursorId() const { return mCursor; } float getTotalRowHeight() const; + inline float getRowHeight(int row) const { return getRowHeight(mEntries.at(row).data); } protected: void onCursorChanged(const CursorState& state) override; @@ -72,9 +73,9 @@ private: void updateElementPosition(const ComponentListRow& row); void updateElementSize(const ComponentListRow& row); - - float getRowHeight(const ComponentListRow& row) const; + float getRowHeight(const ComponentListRow& row) const; + float mSelectorBarOffset; float mCameraOffset; }; diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index f2b96c5eb..0a3123334 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -15,7 +15,7 @@ using namespace Eigen; GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window), - mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 4)) + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) { mHoldingConfig = NULL; mHoldTime = 0; @@ -30,28 +30,31 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w }; } - mTitle = std::make_shared(mWindow, firstRun ? "WELCOME TO EMULATIONSTATION" : "SELECT A DEVICE", + // title + mTitle = std::make_shared(mWindow, firstRun ? "WELCOME" : "CONFIGURE INPUT", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - - std::string msg = (firstRun ? "FIRST, WE NEED TO CONFIGURE YOUR INPUT DEVICE!\n" : ""); - msg += "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.\n" - "PRESS F4 TO QUIT AT ANY TIME."; - mMsg = std::make_shared(mWindow, msg, Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mMsg, Vector2i(0, 1), false, true); + mGrid.setEntry(mTitle, Vector2i(0, 0), false, true, Vector2i(1, 1), GridFlags::BORDER_BOTTOM); + // device info std::stringstream deviceInfo; int numDevices = mWindow->getInputManager()->getNumJoysticks(); if(numDevices > 0) - deviceInfo << "(" << numDevices << " JOYSTICK" << (numDevices > 1 ? "S" : "") << " DETECTED)"; + deviceInfo << numDevices << " GAMEPAD" << (numDevices > 1 ? "S" : "") << " DETECTED"; else - deviceInfo << "(NO JOYSTICKS DETECTED)"; + deviceInfo << "NO GAMEPADS DETECTED"; mDeviceInfo = std::make_shared(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mDeviceInfo, Vector2i(0, 2), false, true); + mGrid.setEntry(mDeviceInfo, Vector2i(0, 1), false, true); + // message + mMsg1 = std::make_shared(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mMsg1, Vector2i(0, 2), false, true); + mMsg2 = std::make_shared(mWindow, "PRESS F4 TO QUIT AT ANY TIME", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mMsg2, Vector2i(0, 3), false, true); + + // currently held device mDeviceHeld = std::make_shared(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0xFFFFFFFF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mDeviceHeld, Vector2i(0, 3), false, true); + mGrid.setEntry(mDeviceHeld, Vector2i(0, 4), false, true); setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.5f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); @@ -64,8 +67,10 @@ void GuiDetectDevice::onSizeChanged() // grid mGrid.setSize(mSize); mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); - mGrid.setRowHeightPerc(2, mDeviceInfo->getFont()->getHeight() / mSize.y()); - mGrid.setRowHeightPerc(3, mDeviceHeld->getFont()->getHeight() / mSize.y()); + //mGrid.setRowHeightPerc(1, mDeviceInfo->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(2, mMsg1->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(3, mMsg2->getFont()->getHeight() / mSize.y()); + //mGrid.setRowHeightPerc(4, mDeviceHeld->getFont()->getHeight() / mSize.y()); } bool GuiDetectDevice::input(InputConfig* config, Input input) diff --git a/src/guis/GuiDetectDevice.h b/src/guis/GuiDetectDevice.h index 57ff8b4bd..71d133692 100644 --- a/src/guis/GuiDetectDevice.h +++ b/src/guis/GuiDetectDevice.h @@ -23,7 +23,8 @@ private: ComponentGrid mGrid; std::shared_ptr mTitle; - std::shared_ptr mMsg; + std::shared_ptr mMsg1; + std::shared_ptr mMsg2; std::shared_ptr mDeviceInfo; std::shared_ptr mDeviceHeld; diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index d7c106913..b66ca8d77 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -20,7 +20,7 @@ static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_ using namespace Eigen; GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), - mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)), mTargetConfig(target) { LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ")."; @@ -34,17 +34,28 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi addChild(&mBackground); addChild(&mGrid); - mTitle = std::make_shared(mWindow, "PLEASE CONFIGURE INPUT FOR", Font::get(FONT_SIZE_SMALL), 0x555555FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - - mSubtitle1 = std::make_shared(mWindow, strToUpper(target->getDeviceName()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mSubtitle1, Vector2i(0, 1), false, true); + // 0 is a spacer row + mGrid.setEntry(std::make_shared(mWindow), Vector2i(0, 0), false); - mSubtitle2 = std::make_shared(mWindow, /*"(HOLD ANY BUTTON TO SKIP)"*/ "", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mSubtitle2, Vector2i(0, 2), false, true); + mTitle = std::make_shared(mWindow, "CONFIGURING", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mTitle, Vector2i(0, 1), false, true); + + std::stringstream ss; + if(target->getDeviceId() == DEVICE_KEYBOARD) + ss << "KEYBOARD"; + else + ss << "GAMEPAD " << (target->getDeviceId() + 1); + mSubtitle1 = std::make_shared(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); + + mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); + + // 4 is a spacer row + mGrid.setEntry(std::make_shared(mWindow), Vector2i(4, 0), false); mList = std::make_shared(mWindow); - mGrid.setEntry(mList, Vector2i(0, 3), true, true); + mGrid.setEntry(mList, Vector2i(0, 5), true, true); for(int i = 0; i < inputCount; i++) { ComponentListRow row; @@ -52,7 +63,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // icon auto icon = std::make_shared(mWindow); icon->setImage(inputIcon[i]); - icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * ((i < 4) ? 1.2f : 1.0f)); // hack to enlarge dpad + icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * ((i < 4) ? 1.25f : 1.0f)); // hack to enlarge dpad row.addElement(icon, false); // spacer between icon and text @@ -122,9 +133,9 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi delete this; })); mButtonGrid = makeButtonGrid(mWindow, buttons); - mGrid.setEntry(mButtonGrid, Vector2i(0, 4), true, false); + mGrid.setEntry(mButtonGrid, Vector2i(0, 6), true, false); - setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.7f); + setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.75f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } @@ -135,10 +146,13 @@ void GuiInputConfig::onSizeChanged() // update grid mGrid.setSize(mSize); - mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); - mGrid.setRowHeightPerc(1, mSubtitle1->getFont()->getHeight() / mSize.y()); - mGrid.setRowHeightPerc(2, mSubtitle2->getFont()->getHeight() / mSize.y()); - mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mSize.y()); + //mGrid.setRowHeightPerc(0, 0.025f); + mGrid.setRowHeightPerc(1, mTitle->getFont()->getHeight()*0.75f / mSize.y()); + mGrid.setRowHeightPerc(2, mSubtitle1->getFont()->getHeight() / mSize.y()); + mGrid.setRowHeightPerc(3, mSubtitle2->getFont()->getHeight() / mSize.y()); + //mGrid.setRowHeightPerc(4, 0.03f); + mGrid.setRowHeightPerc(5, (mList->getRowHeight(0) * 5 + 2) / mSize.y()); + mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y()); } void GuiInputConfig::setPress(const std::shared_ptr& text) diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 1f50466f5..65cee8a97 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -50,15 +50,15 @@ void SVGResource::initFromMemory(const char* file, size_t length) void SVGResource::rasterizeAt(size_t width, size_t height) { + if(!mSVGImage) + return; + if(width != (int)round(mSVGImage->width) && height != (int)round(mSVGImage->height)) { mLastWidth = width; mLastHeight = height; } - if(!mSVGImage) - return; - unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); NSVGrasterizer* rast = nsvgCreateRasterizer(); From 7ca0b0fe72b37b507d5548b4eb330cde0160feba Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 23 Mar 2014 20:33:27 -0500 Subject: [PATCH 222/386] Help is now horizontal instead of vertical. Shortened most help texts. --- src/Window.cpp | 6 +- src/components/ComponentGrid.cpp | 6 +- src/components/ComponentList.cpp | 20 +++++- src/components/HelpComponent.cpp | 89 +++++++++++++++--------- src/components/HelpComponent.h | 16 ++--- src/components/RatingComponent.cpp | 2 +- src/components/SliderComponent.cpp | 2 +- src/components/SwitchComponent.cpp | 2 +- src/guis/GuiGameScraper.cpp | 2 +- src/guis/GuiMenu.cpp | 4 +- src/guis/GuiMetaDataEd.cpp | 8 +-- src/guis/GuiMsgBox.cpp | 5 ++ src/guis/GuiMsgBox.h | 3 +- src/guis/GuiScraperMulti.cpp | 6 +- src/guis/GuiScraperStart.cpp | 6 +- src/guis/GuiSettings.cpp | 2 +- src/guis/GuiTextEditPopup.cpp | 9 ++- src/guis/GuiTextEditPopup.h | 1 + src/views/ViewController.cpp | 2 +- src/views/gamelist/BasicGameListView.cpp | 4 +- 20 files changed, 126 insertions(+), 69 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index c735e8cda..b4f456e02 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -214,11 +214,15 @@ void Window::setHelpPrompts(const std::vector& prompts) { mHelp->clearPrompts(); + std::vector addPrompts; + std::map seenMap; for(auto it = prompts.begin(); it != prompts.end(); it++) { // only add it if the same icon hasn't already been added if(seenMap.insert(std::make_pair(it->first, true)).second) - mHelp->addPrompt(it->first, it->second); + addPrompts.push_back(*it); } + + mHelp->setPrompts(addPrompts); } diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index d51f4e654..11a6522d7 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -436,11 +436,11 @@ std::vector ComponentGrid::getHelpPrompts() } if(canScrollHoriz && canScrollVert) - prompts.push_back(HelpPrompt("up/down/left/right", "move cursor")); + prompts.push_back(HelpPrompt("up/down/left/right", "move")); else if(canScrollHoriz) - prompts.push_back(HelpPrompt("left/right", "move cursor")); + prompts.push_back(HelpPrompt("left/right", "move")); else if(canScrollVert) - prompts.push_back(HelpPrompt("up/down", "move cursor")); + prompts.push_back(HelpPrompt("up/down", "move")); return prompts; } diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index f3a9ecd0c..ca285d851 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -288,7 +288,25 @@ std::vector ComponentList::getHelpPrompts() if(!size()) return std::vector(); - return mEntries.at(mCursor).data.elements.back().component->getHelpPrompts(); + std::vector prompts = mEntries.at(mCursor).data.elements.back().component->getHelpPrompts(); + + if(size() > 1) + { + bool addMovePrompt = true; + for(auto it = prompts.begin(); it != prompts.end(); it++) + { + if(it->first == "up/down" || it->first == "up/down/left/right") + { + addMovePrompt = false; + break; + } + } + + if(addMovePrompt) + prompts.push_back(HelpPrompt("up/down", "move")); + } + + return prompts; } bool ComponentList::moveCursor(int amt) diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index b9e27f92e..7fa9a3ddd 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -1,11 +1,22 @@ #include "HelpComponent.h" #include "../Renderer.h" -#include "ImageComponent.h" -#include "../resources/Font.h" #include "../Settings.h" #include "../Log.h" +#include "../Util.h" +#include "ImageComponent.h" +#include "TextComponent.h" +#include "ComponentGrid.h" + #include +#define OFFSET_X 6 // move the entire thing right by this amount (px) +#define OFFSET_Y 6 // move the entire thing up by this amount (px) + +#define ICON_TEXT_SPACING 8 // space between [icon] and [text] (px) +#define ENTRY_SPACING 16 // space between [text] and next [icon] (px) + +using namespace Eigen; + static const std::map ICON_PATH_MAP = boost::assign::map_list_of ("up/down", ":/help/dpad_updown.svg") ("left/right", ":/help/dpad_leftright.svg") @@ -26,37 +37,59 @@ HelpComponent::HelpComponent(Window* window) : GuiComponent(window) void HelpComponent::clearPrompts() { mPrompts.clear(); + updateGrid(); } -void HelpComponent::addPrompt(const char* icon, const char* text) +void HelpComponent::setPrompts(const std::vector& prompts) { - if(!Settings::getInstance()->getBool("ShowHelpPrompts")) + mPrompts = prompts; + updateGrid(); +} + +void HelpComponent::updateGrid() +{ + if(!Settings::getInstance()->getBool("ShowHelpPrompts") || mPrompts.empty()) + { + mGrid.reset(); return; + } - Prompt p; + mGrid = std::make_shared(mWindow, Vector2i(mPrompts.size() * 4, 1)); + // [icon] [spacer1] [text] [spacer2] - std::shared_ptr font = getFont(); - - // make the icon - p.icon = std::shared_ptr(new ImageComponent(mWindow)); - p.icon->setResize(0, (float)FONT_SIZE_SMALL); - p.icon->setImage(getIconTexture(icon)); - p.icon->setPosition(0.0f, mPrompts.size() ? mPrompts.back().icon->getPosition().y() + mPrompts.back().icon->getSize().y() + 10 : 0); - p.icon->setOpacity(0xEE); + std::shared_ptr font = Font::get(FONT_SIZE_SMALL); - // make the text - const float textY = (p.icon->getSize().y() - (float)font->getHeight())/2; - p.textCache = std::shared_ptr(font->buildTextCache(text, p.icon->getSize().x() + 6, textY, 0x888888EE)); + std::vector< std::shared_ptr > icons; + std::vector< std::shared_ptr > labels; - mPrompts.push_back(p); + float width = 0; + const float height = font->getHeight(); + for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) + { + auto icon = std::make_shared(mWindow); + icon->setImage(getIconTexture(it->first)); + icon->setResize(0, height * 0.8f); + icons.push_back(icon); - setPosition(0, (float)Renderer::getScreenHeight() - (p.icon->getPosition().y() + p.icon->getSize().y() + 6)); -} + auto lbl = std::make_shared(mWindow, strToUpper(it->second), font, 0x777777FF); + labels.push_back(lbl); -std::shared_ptr HelpComponent::getFont() const -{ - // font size controls icon height - return Font::get(FONT_SIZE_SMALL); + width += icon->getSize().x() + lbl->getSize().x() + ICON_TEXT_SPACING + ENTRY_SPACING; + } + + mGrid->setSize(width, height); + for(unsigned int i = 0; i < icons.size(); i++) + { + const int col = i*4; + mGrid->setColWidthPerc(col, icons.at(i)->getSize().x() / width); + mGrid->setColWidthPerc(col + 1, ICON_TEXT_SPACING / width); + mGrid->setColWidthPerc(col + 2, labels.at(i)->getSize().x() / width); + + mGrid->setEntry(icons.at(i), Vector2i(col, 0), false, false); + mGrid->setEntry(labels.at(i), Vector2i(col + 2, 0), false, false); + } + + mGrid->setPosition(OFFSET_X, Renderer::getScreenHeight() - mGrid->getSize().y() - OFFSET_Y); } std::shared_ptr HelpComponent::getIconTexture(const char* name) @@ -86,12 +119,6 @@ void HelpComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - std::shared_ptr font = getFont(); - for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) - { - it->icon->render(trans); - // we actually depend on it->icon->render to call Renderer::setMatrix to draw at the right Y offset (efficiency!) - // if for some reason this breaks in the future, it should be equivalent to translating parentTrans by it->icon->getPosition() - font->renderTextCache(it->textCache.get()); - } + if(mGrid) + mGrid->render(trans); } diff --git a/src/components/HelpComponent.h b/src/components/HelpComponent.h index 10cd185cf..9cc76082f 100644 --- a/src/components/HelpComponent.h +++ b/src/components/HelpComponent.h @@ -4,8 +4,7 @@ class ImageComponent; class TextureResource; -class TextCache; -class Font; +class ComponentGrid; class HelpComponent : public GuiComponent { @@ -13,21 +12,16 @@ public: HelpComponent(Window* window); void clearPrompts(); - void addPrompt(const char* icon, const char* text); + void setPrompts(const std::vector& prompts); void render(const Eigen::Affine3f& parent) override; private: - std::shared_ptr getFont() const; std::shared_ptr getIconTexture(const char* name); - std::map< std::string, std::shared_ptr > mIconCache; - struct Prompt - { - std::shared_ptr icon; - std::shared_ptr textCache; - }; + std::shared_ptr mGrid; + void updateGrid(); - std::vector mPrompts; + std::vector mPrompts; }; diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 61754c610..75266a35b 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -154,6 +154,6 @@ void RatingComponent::applyTheme(const std::shared_ptr& theme, const std::vector RatingComponent::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("a", "+1 star")); + prompts.push_back(HelpPrompt("a", "add star")); return prompts; } diff --git a/src/components/SliderComponent.cpp b/src/components/SliderComponent.cpp index 1de0065e1..65165cfb1 100644 --- a/src/components/SliderComponent.cpp +++ b/src/components/SliderComponent.cpp @@ -140,6 +140,6 @@ void SliderComponent::onValueChanged() std::vector SliderComponent::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("left/right", "adjust")); + prompts.push_back(HelpPrompt("left/right", "change")); return prompts; } diff --git a/src/components/SwitchComponent.cpp b/src/components/SwitchComponent.cpp index c6fdf61f0..bbf11bb09 100644 --- a/src/components/SwitchComponent.cpp +++ b/src/components/SwitchComponent.cpp @@ -55,6 +55,6 @@ void SwitchComponent::onStateChanged() std::vector SwitchComponent::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("a", "toggle")); + prompts.push_back(HelpPrompt("a", "change")); return prompts; } diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index cc84870a3..f2cae9480 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -29,7 +29,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // buttons std::vector< std::shared_ptr > buttons; - buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search by name", [&] { + buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { mSearch->openInputScreen(mSearchParams); mGrid.resetCursor(); })); diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index a67544567..9f1fa393f 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -207,7 +207,7 @@ bool GuiMenu::input(InputConfig* config, Input input) std::vector GuiMenu::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("up/down", "move cursor")); - prompts.push_back(HelpPrompt("a", "accept")); + prompts.push_back(HelpPrompt("up/down", "move")); + prompts.push_back(HelpPrompt("a", "go")); return prompts; } diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 98252686e..1e0274954 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -89,14 +89,14 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector } //add buttons - mMenu.addButton("SCRAPE", "download metadata from the Internet", std::bind(&GuiMetaDataEd::fetch, this)); - mMenu.addButton("SAVE", "save changes", [&] { save(); delete this; }); + mMenu.addButton("SCRAPE", "scrape", std::bind(&GuiMetaDataEd::fetch, this)); + mMenu.addButton("SAVE", "save", [&] { save(); delete this; }); if(mDeleteFunc) { auto deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBox(mWindow, "This will delete a file!\nAre you sure?", "YES", deleteFileAndSelf, "NO", nullptr)); }; - mMenu.addButton("DELETE", "delete this game on disk", deleteBtnFunc); + mMenu.addButton("DELETE", "delete", deleteBtnFunc); } // initially put cursor on "SCRAPE" @@ -154,6 +154,6 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) std::vector GuiMetaDataEd::getHelpPrompts() { std::vector prompts = mMenu.getHelpPrompts(); - prompts.push_back(HelpPrompt("b", "discard changes")); + prompts.push_back(HelpPrompt("b", "discard")); return prompts; } diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 5f59a9d0b..7168c70c9 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -93,3 +93,8 @@ void GuiMsgBox::deleteMeAndCall(const std::function& func) delete this; } + +std::vector GuiMsgBox::getHelpPrompts() +{ + return mGrid.getHelpPrompts(); +} diff --git a/src/guis/GuiMsgBox.h b/src/guis/GuiMsgBox.h index bd95889de..d24c23459 100644 --- a/src/guis/GuiMsgBox.h +++ b/src/guis/GuiMsgBox.h @@ -15,8 +15,9 @@ public: const std::string& name2 = "", const std::function& func2 = nullptr, const std::string& name3 = "", const std::function& func3 = nullptr); - bool input(InputConfig* config, Input input); + bool input(InputConfig* config, Input input) override; void onSizeChanged() override; + std::vector getHelpPrompts() override; private: void deleteMeAndCall(const std::function& func); diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 27cdb2b9c..a5017113e 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -33,12 +33,12 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue > buttons; - buttons.push_back(std::make_shared(mWindow, "INPUT", "manually search by name", [&] { + buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { mSearchComp->openInputScreen(mSearchQueue.front()); mGrid.resetCursor(); })); - buttons.push_back(std::make_shared(mWindow, "SKIP", "skip this game", std::bind(&GuiScraperMulti::skip, this))); - buttons.push_back(std::make_shared(mWindow, "STOP", "cancel scraping", std::bind(&GuiScraperMulti::finish, this))); + buttons.push_back(std::make_shared(mWindow, "SKIP", "skip", std::bind(&GuiScraperMulti::skip, this))); + buttons.push_back(std::make_shared(mWindow, "STOP", "stop (progress saved)", std::bind(&GuiScraperMulti::finish, this))); mButtonGrid = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mButtonGrid, Vector2i(0, 3), true, false); diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 8125c100a..033c17004 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -29,8 +29,8 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mApproveResults->setState(true); mMenu.addWithLabel("User decides on conflicts", mApproveResults); - mMenu.addButton("START", "start scraping", std::bind(&GuiScraperStart::pressedStart, this)); - mMenu.addButton("BACK", "cancel", [&] { delete this; }); + mMenu.addButton("START", "start", std::bind(&GuiScraperStart::pressedStart, this)); + mMenu.addButton("BACK", "back", [&] { delete this; }); mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } @@ -102,6 +102,6 @@ bool GuiScraperStart::input(InputConfig* config, Input input) std::vector GuiScraperStart::getHelpPrompts() { std::vector prompts = mMenu.getHelpPrompts(); - prompts.push_back(HelpPrompt("b", "cancel")); + prompts.push_back(HelpPrompt("b", "back")); return prompts; } diff --git a/src/guis/GuiSettings.cpp b/src/guis/GuiSettings.cpp index 427c0976b..a57b85c6d 100644 --- a/src/guis/GuiSettings.cpp +++ b/src/guis/GuiSettings.cpp @@ -42,7 +42,7 @@ std::vector GuiSettings::getHelpPrompts() { std::vector prompts = mMenu.getHelpPrompts(); - prompts.push_back(HelpPrompt("b", "go back")); + prompts.push_back(HelpPrompt("b", "back")); return prompts; } diff --git a/src/guis/GuiTextEditPopup.cpp b/src/guis/GuiTextEditPopup.cpp index 74b076d90..7992e685b 100644 --- a/src/guis/GuiTextEditPopup.cpp +++ b/src/guis/GuiTextEditPopup.cpp @@ -56,4 +56,11 @@ bool GuiTextEditPopup::input(InputConfig* config, Input input) } return false; -} \ No newline at end of file +} + +std::vector GuiTextEditPopup::getHelpPrompts() +{ + std::vector prompts = mGrid.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "back")); + return prompts; +} diff --git a/src/guis/GuiTextEditPopup.h b/src/guis/GuiTextEditPopup.h index b891efb4f..aaa8a596d 100644 --- a/src/guis/GuiTextEditPopup.h +++ b/src/guis/GuiTextEditPopup.h @@ -14,6 +14,7 @@ public: bool input(InputConfig* config, Input input); void onSizeChanged(); + std::vector getHelpPrompts() override; private: NinePatchComponent mBackground; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 6246553e8..9cf02ea1c 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -274,7 +274,7 @@ std::vector ViewController::getHelpPrompts() return prompts; prompts = mCurrentView->getHelpPrompts(); - prompts.push_back(HelpPrompt("start", "open menu")); + prompts.push_back(HelpPrompt("start", "menu")); return prompts; } diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index 24a3fa62f..4d4dc8e93 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -68,8 +68,8 @@ void BasicGameListView::launch(FileData* game) std::vector BasicGameListView::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("left/right", "change systems")); - prompts.push_back(HelpPrompt("up/down", "scroll")); + prompts.push_back(HelpPrompt("left/right", "switch")); + prompts.push_back(HelpPrompt("up/down", "choose")); prompts.push_back(HelpPrompt("a", "play")); prompts.push_back(HelpPrompt("b", "back")); return prompts; From 2203e9ff8127b596bad940bf622a8aa467d790d0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 24 Mar 2014 14:45:27 -0500 Subject: [PATCH 223/386] Fixed crash when RatingComponent's size was 0. --- src/components/RatingComponent.cpp | 13 ++++++++----- src/resources/SVGResource.cpp | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 75266a35b..dccc0a13c 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -44,11 +44,14 @@ void RatingComponent::onSizeChanged() auto filledSVG = dynamic_cast(mFilledTexture.get()); auto unfilledSVG = dynamic_cast(mUnfilledTexture.get()); - size_t sz = (size_t)round(mSize.y()); - if(filledSVG) - filledSVG->rasterizeAt(sz, sz); - if(unfilledSVG) - unfilledSVG->rasterizeAt(sz, sz); + if(mSize.y() > 0) + { + size_t sz = (size_t)round(mSize.y()); + if(filledSVG) + filledSVG->rasterizeAt(sz, sz); + if(unfilledSVG) + unfilledSVG->rasterizeAt(sz, sz); + } updateVertices(); } diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 65cee8a97..16b74287f 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -50,7 +50,7 @@ void SVGResource::initFromMemory(const char* file, size_t length) void SVGResource::rasterizeAt(size_t width, size_t height) { - if(!mSVGImage) + if(!mSVGImage || width == 0 || height == 0) return; if(width != (int)round(mSVGImage->width) && height != (int)round(mSVGImage->height)) From 7875c2271c6f6bf60da9358bf8dde111d9a75b18 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 24 Mar 2014 15:34:38 -0500 Subject: [PATCH 224/386] Fixed camera scrolling for ComponentLists to always be by row heights. --- src/components/ComponentList.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index ca285d851..eccfcca2f 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -111,7 +111,16 @@ void ComponentList::onCursorChanged(const CursorState& state) const float totalHeight = getTotalRowHeight(); if(totalHeight > mSize.y()) { - mCameraOffset = mSelectorBarOffset - (mSize.y() / 2); + float target = mSelectorBarOffset + getRowHeight(mEntries.at(mCursor).data)/2 - (mSize.y() / 2); + + // clamp it + mCameraOffset = 0; + unsigned int i = 0; + while(mCameraOffset < target && i < mEntries.size()) + { + mCameraOffset += getRowHeight(mEntries.at(i).data); + i++; + } if(mCameraOffset < 0) mCameraOffset = 0; From 0464776e6269bfbee6124d6142db5ca1cc79337f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 24 Mar 2014 16:29:56 -0500 Subject: [PATCH 225/386] Fixed console spam when an ImageComponent has an invalid texture. --- src/components/HelpComponent.cpp | 4 +-- src/components/ImageComponent.cpp | 34 +++++++++++++---------- src/components/ScraperSearchComponent.cpp | 19 +++++++------ src/guis/GuiDetectDevice.cpp | 4 +-- src/resources/TextureResource.cpp | 7 ++++- src/resources/TextureResource.h | 1 + 6 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 7fa9a3ddd..1b9c4dbbc 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -63,12 +63,12 @@ void HelpComponent::updateGrid() std::vector< std::shared_ptr > labels; float width = 0; - const float height = font->getHeight(); + const float height = font->getLetterHeight(); for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) { auto icon = std::make_shared(mWindow); icon->setImage(getIconTexture(it->first)); - icon->setResize(0, height * 0.8f); + icon->setResize(0, height); icons.push_back(icon); auto lbl = std::make_shared(mWindow, strToUpper(it->second), font, 0x777777FF); diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index c202f3578..9f82bed82 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -149,22 +149,28 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) if(mTexture && getOpacity() > 0) { - GLfloat points[12], texs[12]; - GLubyte colors[6*4]; - - if(mTexture->isTiled()) + if(mTexture->isInitialized()) { - float xCount = mSize.x() / getTextureSize().x(); - float yCount = mSize.y() / getTextureSize().y(); - - Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8)| (getOpacity()), 6); - buildImageArray(0, 0, points, texs, xCount, yCount); - }else{ - Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8) | (getOpacity()), 6); - buildImageArray(0, 0, points, texs); - } + GLfloat points[12], texs[12]; + GLubyte colors[6*4]; - drawImageArray(points, texs, colors, 6); + if(mTexture->isTiled()) + { + float xCount = mSize.x() / getTextureSize().x(); + float yCount = mSize.y() / getTextureSize().y(); + + Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8)| (getOpacity()), 6); + buildImageArray(0, 0, points, texs, xCount, yCount); + }else{ + Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8) | (getOpacity()), 6); + buildImageArray(0, 0, points, texs); + } + + drawImageArray(points, texs, colors, 6); + }else{ + LOG(LogError) << "Image texture is not initialized!"; + mTexture.reset(); + } } GuiComponent::renderChildren(trans); diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index e7dcd0199..ccfb60965 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -233,25 +233,26 @@ void ScraperSearchComponent::updateInfoPane() int i = getSelectedIndex(); if(i != -1 && (int)mScraperResults.size() > i) { - mResultName->setText(mScraperResults.at(i).mdl.get("name")); - mResultDesc->setText(mScraperResults.at(i).mdl.get("desc")); + ScraperSearchResult& res = mScraperResults.at(i); + mResultName->setText(res.mdl.get("name")); + mResultDesc->setText(res.mdl.get("desc")); mDescContainer->setScrollPos(Eigen::Vector2d(0, 0)); mDescContainer->resetAutoScrollTimer(); mResultThumbnail->setImage(""); - const std::string& thumb = mScraperResults.at(i).thumbnailUrl; + const std::string& thumb = res.thumbnailUrl.empty() ? res.imageUrl : res.thumbnailUrl; if(!thumb.empty()) mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); else mThumbnailReq.reset(); // metadata - mMD_Rating->setValue(strToUpper(mScraperResults.at(i).mdl.get("rating"))); - mMD_ReleaseDate->setValue(strToUpper(mScraperResults.at(i).mdl.get("releasedate"))); - mMD_Developer->setText(strToUpper(mScraperResults.at(i).mdl.get("developer"))); - mMD_Publisher->setText(strToUpper(mScraperResults.at(i).mdl.get("publisher"))); - mMD_Genre->setText(strToUpper(mScraperResults.at(i).mdl.get("genre"))); - mMD_Players->setText(strToUpper(mScraperResults.at(i).mdl.get("players"))); + mMD_Rating->setValue(strToUpper(res.mdl.get("rating"))); + mMD_ReleaseDate->setValue(strToUpper(res.mdl.get("releasedate"))); + mMD_Developer->setText(strToUpper(res.mdl.get("developer"))); + mMD_Publisher->setText(strToUpper(res.mdl.get("publisher"))); + mMD_Genre->setText(strToUpper(res.mdl.get("genre"))); + mMD_Players->setText(strToUpper(res.mdl.get("players"))); }else{ mResultName->setText(""); diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index 0a3123334..1bcb09db5 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -47,9 +47,9 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w mGrid.setEntry(mDeviceInfo, Vector2i(0, 1), false, true); // message - mMsg1 = std::make_shared(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mMsg1 = std::make_shared(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mMsg1, Vector2i(0, 2), false, true); - mMsg2 = std::make_shared(mWindow, "PRESS F4 TO QUIT AT ANY TIME", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mMsg2 = std::make_shared(mWindow, "PRESS F4 TO QUIT AT ANY TIME.", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mMsg2, Vector2i(0, 3), false, true); // currently held device diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index bd88248c0..4965da6a5 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -62,7 +62,7 @@ void TextureResource::initFromMemory(const char* data, size_t length) if(imageRGBA.size() == 0) { - LOG(LogError) << "Could not initialize texture from memory, invalid data! (" << mPath << ")"; + LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)data << ", reported size: " << length << ")"; return; } @@ -137,3 +137,8 @@ std::shared_ptr TextureResource::get(const std::string& path, b tex->reload(ResourceManager::getInstance()); return tex; } + +bool TextureResource::isInitialized() const +{ + return mTextureID != 0; +} diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index 4c3893e0a..4617ace9e 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -19,6 +19,7 @@ public: virtual void unload(std::shared_ptr& rm) override; virtual void reload(std::shared_ptr& rm) override; + bool isInitialized() const; bool isTiled() const; const Eigen::Vector2i& getSize() const; void bind() const; From 719483864c87cd701bd164d13cb308584fba7053 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 24 Mar 2014 17:55:36 -0500 Subject: [PATCH 226/386] Made ScraperSearchComponent use ComponentList callbacks instead of manually intercepting input. Tweaked IList and ComponentList for this. --- src/components/ComponentList.cpp | 33 +++++++++++++-------- src/components/ComponentList.h | 6 ++++ src/components/IList.h | 13 +++++++- src/components/ScraperSearchComponent.cpp | 36 ++++++++++------------- src/guis/GuiScraperMulti.cpp | 28 ++++++++++++------ src/guis/GuiScraperMulti.h | 1 + 6 files changed, 74 insertions(+), 43 deletions(-) diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index eccfcca2f..f5eaeea35 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -1,5 +1,6 @@ #include "ComponentList.h" #include "../Util.h" +#include "../Log.h" #define TOTAL_HORIZONTAL_PADDING_PX 20 @@ -40,7 +41,7 @@ void ComponentList::onSizeChanged() updateElementPosition(it->data); } - onCursorChanged(mScrollVelocity != 0 ? CURSOR_SCROLLING : CURSOR_STOPPED); + updateCameraOffset(); } void ComponentList::onFocusLost() @@ -107,6 +108,25 @@ void ComponentList::onCursorChanged(const CursorState& state) mSelectorBarOffset += getRowHeight(mEntries.at(i).data); } + updateCameraOffset(); + + // this is terribly inefficient but we don't know what we came from so... + if(size()) + { + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + it->data.elements.back().component->onFocusLost(); + + mEntries.at(mCursor).data.elements.back().component->onFocusGained(); + } + + if(mCursorChangedCallback) + mCursorChangedCallback(state); + + updateHelpPrompts(); +} + +void ComponentList::updateCameraOffset() +{ // move the camera to scroll const float totalHeight = getTotalRowHeight(); if(totalHeight > mSize.y()) @@ -129,17 +149,6 @@ void ComponentList::onCursorChanged(const CursorState& state) }else{ mCameraOffset = 0; } - - // this is terribly inefficient but we don't know what we came from so... - if(size()) - { - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - it->data.elements.back().component->onFocusLost(); - - mEntries.at(mCursor).data.elements.back().component->onFocusGained(); - } - - updateHelpPrompts(); } void ComponentList::render(const Eigen::Affine3f& parentTrans) diff --git a/src/components/ComponentList.h b/src/components/ComponentList.h index 247f3884d..99f06a4ec 100644 --- a/src/components/ComponentList.h +++ b/src/components/ComponentList.h @@ -65,12 +65,16 @@ public: float getTotalRowHeight() const; inline float getRowHeight(int row) const { return getRowHeight(mEntries.at(row).data); } + inline void setCursorChangedCallback(const std::function& callback) { mCursorChangedCallback = callback; }; + inline const std::function& getCursorChangedCallback() const { return mCursorChangedCallback; }; + protected: void onCursorChanged(const CursorState& state) override; private: bool mFocused; + void updateCameraOffset(); void updateElementPosition(const ComponentListRow& row); void updateElementSize(const ComponentListRow& row); @@ -78,4 +82,6 @@ private: float mSelectorBarOffset; float mCameraOffset; + + std::function mCursorChangedCallback; }; diff --git a/src/components/IList.h b/src/components/IList.h index 5b4c7f806..683cae0f3 100644 --- a/src/components/IList.h +++ b/src/components/IList.h @@ -185,6 +185,10 @@ protected: bool listInput(int velocity) // a velocity of 0 = stop scrolling { + // generate an onCursorChanged event in the stopped state when the user lets go of the key + if(velocity == 0 && mScrollVelocity != 0) + onCursorChanged(CURSOR_STOPPED); + mScrollVelocity = velocity; mScrollTier = 0; mScrollTierAccumulator = 0; @@ -268,9 +272,16 @@ protected: mLoopType == LIST_NEVER_LOOP) { if(cursor < 0) + { cursor = 0; - else if(cursor >= size()) + mScrollVelocity = 0; + mScrollTier = 0; + }else if(cursor >= size()) + { cursor = size() - 1; + mScrollVelocity = 0; + mScrollTier = 0; + } }else{ while(cursor < 0) cursor += size(); diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index ccfb60965..d7e109383 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -72,7 +72,8 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) // result list mResultList = std::make_shared(mWindow); - + mResultList->setCursorChangedCallback([this](CursorState state) { if(state == CURSOR_STOPPED) updateInfoPane(); }); + updateViewStyle(); } @@ -183,7 +184,11 @@ void ScraperSearchComponent::onSearchDone(const std::vector if(end == 0) { ComponentListRow row; - row.addElement(std::make_shared(mWindow, "No games found!", font, color), true); + row.addElement(std::make_shared(mWindow, "NO GAMES FOUND - SKIP", font, color), true); + + if(mSkipCallback) + row.makeAcceptInputHandler(mSkipCallback); + mResultList->addRow(row); mGrid.resetCursor(); }else{ @@ -191,7 +196,8 @@ void ScraperSearchComponent::onSearchDone(const std::vector for(int i = 0; i < end; i++) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, results.at(i).mdl.get("name"), font, color), true); + row.addElement(std::make_shared(mWindow, strToUpper(results.at(i).mdl.get("name")), font, color), true); + row.makeAcceptInputHandler([this, i] { returnResult(mScraperResults.at(i)); }); mResultList->addRow(row); } mGrid.resetCursor(); @@ -222,7 +228,7 @@ void ScraperSearchComponent::onSearchError(const std::string& error) int ScraperSearchComponent::getSelectedIndex() { - if(mScraperResults.size() && mGrid.getSelectedComponent() != mResultList) + if(!mScraperResults.size() || mGrid.getSelectedComponent() != mResultList) return -1; return mResultList->getCursorId(); @@ -242,9 +248,11 @@ void ScraperSearchComponent::updateInfoPane() mResultThumbnail->setImage(""); const std::string& thumb = res.thumbnailUrl.empty() ? res.imageUrl : res.thumbnailUrl; if(!thumb.empty()) + { mThumbnailReq = std::unique_ptr(new HttpReq(thumb)); - else + }else{ mThumbnailReq.reset(); + } // metadata mMD_Rating->setValue(strToUpper(res.mdl.get("rating"))); @@ -275,23 +283,9 @@ bool ScraperSearchComponent::input(InputConfig* config, Input input) { if(mBlockAccept) return true; - - //if you're on a result - if(getSelectedIndex() != -1) - { - returnResult(mScraperResults.at(getSelectedIndex())); - return true; - } } - bool ret = GuiComponent::input(config, input); - - if(config->isMappedTo("up", input) || config->isMappedTo("down", input) && input.value != 0) - { - updateInfoPane(); - } - - return ret; + return GuiComponent::input(config, input); } void ScraperSearchComponent::render(const Eigen::Affine3f& parentTrans) @@ -366,13 +360,13 @@ void ScraperSearchComponent::updateThumbnail() { std::string content = mThumbnailReq->getContent(); mResultThumbnail->setImage(content.data(), content.length()); + mGrid.onSizeChanged(); // a hack to fix the thumbnail position since its size changed }else{ LOG(LogWarning) << "thumbnail req failed: " << mThumbnailReq->getErrorMsg(); mResultThumbnail->setImage(""); } mThumbnailReq.reset(); - mGrid.onSizeChanged(); // a hack to fix the thumbnail position since its size changed } void ScraperSearchComponent::openInputScreen(ScraperSearchParams& params) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index a5017113e..2e7f22a54 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -1,5 +1,6 @@ #include "GuiScraperMulti.h" #include "../Renderer.h" +#include "../Log.h" #include "../components/TextComponent.h" #include "../components/ButtonComponent.h" @@ -10,7 +11,7 @@ using namespace Eigen; GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults) : - GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 4)), + GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), mSearchQueue(searches) { addChild(&mBackground); @@ -20,17 +21,21 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x777777FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); + mSystem = std::make_shared(mWindow, "SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mSystem, Vector2i(0, 1), false, true); + mSubtitle = std::make_shared(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mSubtitle, Vector2i(0, 1), false, true); + mGrid.setEntry(mSubtitle, Vector2i(0, 2), false, true); mSearchComp = std::make_shared(mWindow, approveResults ? ScraperSearchComponent::ALWAYS_ACCEPT_MATCHING_CRC : ScraperSearchComponent::ALWAYS_ACCEPT_FIRST_RESULT); mSearchComp->setAcceptCallback(std::bind(&GuiScraperMulti::acceptResult, this, std::placeholders::_1)); + mSearchComp->setSkipCallback(std::bind(&GuiScraperMulti::skip, this)); mSearchComp->setCancelCallback(std::bind(&GuiScraperMulti::finish, this)); - mGrid.setEntry(mSearchComp, Vector2i(0, 2), approveResults, true); + mGrid.setEntry(mSearchComp, Vector2i(0, 3), approveResults, true); std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { @@ -40,7 +45,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SKIP", "skip", std::bind(&GuiScraperMulti::skip, this))); buttons.push_back(std::make_shared(mWindow, "STOP", "stop (progress saved)", std::bind(&GuiScraperMulti::finish, this))); mButtonGrid = makeButtonGrid(mWindow, buttons); - mGrid.setEntry(mButtonGrid, Vector2i(0, 3), true, false); + mGrid.setEntry(mButtonGrid, Vector2i(0, 4), true, false); setSize(Renderer::getScreenWidth() * 0.7f, Renderer::getScreenHeight() * 0.65f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); @@ -54,8 +59,9 @@ void GuiScraperMulti::onSizeChanged() mGrid.setSize(mSize); mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mGrid.getSize().y()); - mGrid.setRowHeightPerc(1, mSubtitle->getFont()->getHeight() / mGrid.getSize().y()); - mGrid.setRowHeightPerc(3, mButtonGrid->getSize().y() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(1, mSystem->getFont()->getHeight() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(2, mSubtitle->getFont()->getHeight() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mGrid.getSize().y()); } void GuiScraperMulti::doNextSearch() @@ -66,9 +72,13 @@ void GuiScraperMulti::doNextSearch() return; } - // update subtitle + // update title std::stringstream ss; - ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames; + mSystem->setText(strToUpper(mSearchQueue.front().system->getName())); + + // update subtitle + ss.str(""); // clear + ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames << " - " << strToUpper(mSearchQueue.front().game->getPath().filename().string()); mSubtitle->setText(ss.str()); mSearchComp->search(mSearchQueue.front()); diff --git a/src/guis/GuiScraperMulti.h b/src/guis/GuiScraperMulti.h index 1f9919a89..dd2b51c08 100644 --- a/src/guis/GuiScraperMulti.h +++ b/src/guis/GuiScraperMulti.h @@ -33,6 +33,7 @@ private: ComponentGrid mGrid; std::shared_ptr mTitle; + std::shared_ptr mSystem; std::shared_ptr mSubtitle; std::shared_ptr mSearchComp; std::shared_ptr mButtonGrid; From b44703c71646a64f97d7a99f06cdc462b22595df Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 25 Mar 2014 12:13:41 -0500 Subject: [PATCH 227/386] More design tweaks. --- src/components/ComponentGrid.cpp | 2 ++ src/components/ScraperSearchComponent.cpp | 12 ++++++++---- src/components/ScraperSearchComponent.h | 2 +- src/guis/GuiScraperMulti.cpp | 12 ++++++------ src/resources/Font.h | 2 +- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index 11a6522d7..12e3e92b1 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -63,6 +63,7 @@ float ComponentGrid::getRowHeight(int row) void ComponentGrid::setColWidthPerc(int col, float width) { + assert(width >= 0 && width <= 1); assert(col >= 0 && col < mGridSize.x()); mColWidths[col] = width; onSizeChanged(); @@ -70,6 +71,7 @@ void ComponentGrid::setColWidthPerc(int col, float width) void ComponentGrid::setRowHeightPerc(int row, float height) { + assert(height >= 0 && height <= 1); assert(row >= 0 && row < mGridSize.y()); mRowHeights[row] = height; onSizeChanged(); diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index d7e109383..aa8539cc8 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -95,7 +95,6 @@ void ScraperSearchComponent::onSizeChanged() // limit thumbnail size using setMaxHeight - we do this instead of letting mGrid call setSize because it maintains the aspect ratio // we also pad a little so it doesn't rub up against the metadata labels mResultThumbnail->setMaxSize(mGrid.getColWidth(1) - 16, mGrid.getRowHeight(1)); - mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container // metadata // (mMD_Grid has already been resized by mGrid) @@ -124,7 +123,12 @@ void ScraperSearchComponent::onSizeChanged() mMD_Players->setFont(fontComp); mMD_Grid->setColWidthPerc(0, maxLblWidth / mMD_Grid->getSize().x()); + + // make result font follow label font + mResultDesc->setFont(Font::get(fontHeight, FONT_PATH_REGULAR)); } + + mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container } void ScraperSearchComponent::updateViewStyle() @@ -177,7 +181,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector mScraperResults = results; - const int end = results.size() > 5 ? 5 : results.size(); // at max display 5 + const int end = results.size() > MAX_SCRAPER_RESULTS ? MAX_SCRAPER_RESULTS : results.size(); // at max display 5 auto font = Font::get(FONT_SIZE_MEDIUM); unsigned int color = 0x777777FF; @@ -240,8 +244,8 @@ void ScraperSearchComponent::updateInfoPane() if(i != -1 && (int)mScraperResults.size() > i) { ScraperSearchResult& res = mScraperResults.at(i); - mResultName->setText(res.mdl.get("name")); - mResultDesc->setText(res.mdl.get("desc")); + mResultName->setText(strToUpper(res.mdl.get("name"))); + mResultDesc->setText(strToUpper(res.mdl.get("desc"))); mDescContainer->setScrollPos(Eigen::Vector2d(0, 0)); mDescContainer->resetAutoScrollTimer(); diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index 28dc49d27..68c600099 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -5,7 +5,7 @@ #include "../components/ComponentGrid.h" #include -#define MAX_SCRAPER_RESULTS 5 +#define MAX_SCRAPER_RESULTS 7 class ComponentList; class ImageComponent; diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 2e7f22a54..e34f54ec1 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -21,7 +21,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x777777FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); mSystem = std::make_shared(mWindow, "SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); @@ -47,7 +47,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queuegetFont()->getHeight() / mGrid.getSize().y()); - mGrid.setRowHeightPerc(1, mSystem->getFont()->getHeight() / mGrid.getSize().y()); - mGrid.setRowHeightPerc(2, mSubtitle->getFont()->getHeight() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(0, mTitle->getFont()->getLetterHeight() * 1.9725f / mGrid.getSize().y()); + mGrid.setRowHeightPerc(1, (mSystem->getFont()->getLetterHeight() + 2) / mGrid.getSize().y()); + mGrid.setRowHeightPerc(2, mSubtitle->getFont()->getHeight() * 1.75f / mGrid.getSize().y()); mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mGrid.getSize().y()); } @@ -74,7 +74,7 @@ void GuiScraperMulti::doNextSearch() // update title std::stringstream ss; - mSystem->setText(strToUpper(mSearchQueue.front().system->getName())); + mSystem->setText(strToUpper(mSearchQueue.front().system->getFullName())); // update subtitle ss.str(""); // clear diff --git a/src/resources/Font.h b/src/resources/Font.h index 51a39cc91..30f623450 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -14,7 +14,7 @@ class TextCache; #define FONT_SIZE_SMALL ((unsigned int)(0.035f * Renderer::getScreenHeight())) #define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Renderer::getScreenHeight())) -#define FONT_SIZE_LARGE ((unsigned int)(0.1f * Renderer::getScreenHeight())) +#define FONT_SIZE_LARGE ((unsigned int)(0.085f * Renderer::getScreenHeight())) #define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" #define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" From 4fafd58da0e16182211ce5895355d1a04ad48384 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 25 Mar 2014 12:51:40 -0500 Subject: [PATCH 228/386] More design tweaks. --- src/components/DateTimeComponent.cpp | 12 ++++++--- src/components/ScraperSearchComponent.cpp | 31 ++++++++++++++++++----- src/components/ScraperSearchComponent.h | 10 +++++++- src/guis/GuiScraperMulti.cpp | 2 +- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index 47a86b534..0bed43bd3 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -137,11 +137,17 @@ void DateTimeComponent::update(int deltaTime) void DateTimeComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); - Renderer::setMatrix(trans); + Eigen::Affine3f trans = parentTrans * getTransform(); if(mTextCache) { + // vertically center + Eigen::Vector3f off(0, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); + trans.translate(off); + trans = roundMatrix(trans); + + Renderer::setMatrix(trans); + std::shared_ptr font = getFont(); mTextCache->setColor((mColor & 0xFFFFFF00) | getOpacity()); @@ -156,8 +162,6 @@ void DateTimeComponent::render(const Eigen::Affine3f& parentTrans) } } } - - renderChildren(trans); } void DateTimeComponent::setValue(const std::string& val) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index aa8539cc8..abefdcaa3 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -28,7 +28,6 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) // selected result name mResultName = std::make_shared(mWindow, "Result name", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); - mGrid.setEntry(mResultName, Vector2i(1, 0), false, true, Vector2i(2, 1), GridFlags::BORDER_TOP); // selected result thumbnail mResultThumbnail = std::make_shared(mWindow); @@ -52,7 +51,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mMD_Genre = std::make_shared(mWindow, "", font, mdColor); mMD_Players = std::make_shared(mWindow, "", font, mdColor); - mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "RATING:", font, mdLblColor), mMD_Rating)); + mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "RATING:", font, mdLblColor), mMD_Rating, false)); mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "RELEASED:", font, mdLblColor), mMD_ReleaseDate)); mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "DEVELOPER:", font, mdLblColor), mMD_Developer)); mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "PUBLISHER:", font, mdLblColor), mMD_Publisher)); @@ -64,7 +63,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) { mMD_Grid->setEntry(it->first, Vector2i(0, i), false, true); - mMD_Grid->setEntry(it->second, Vector2i(1, i), false, true); + mMD_Grid->setEntry(it->second, Vector2i(1, i), false, it->resize); i++; } @@ -89,7 +88,12 @@ void ScraperSearchComponent::onSizeChanged() // row heights const float fontHeightPerc = (mResultName->getFont()->getHeight()) / mGrid.getSize().y(); - mGrid.setRowHeightPerc(0, fontHeightPerc); // result name + + if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) // show name + mGrid.setRowHeightPerc(0, fontHeightPerc); // result name + else + mGrid.setRowHeightPerc(0, 0.05f); // hide name but do padding + mGrid.setRowHeightPerc(2, 0.375f); // description // limit thumbnail size using setMaxHeight - we do this instead of letting mGrid call setSize because it maintains the aspect ratio @@ -124,6 +128,9 @@ void ScraperSearchComponent::onSizeChanged() mMD_Grid->setColWidthPerc(0, maxLblWidth / mMD_Grid->getSize().x()); + // rating is manually sized + mMD_Rating->setSize(mMD_Grid->getColWidth(1), fontLbl->getLetterHeight()); + // make result font follow label font mResultDesc->setFont(Font::get(fontHeight, FONT_PATH_REGULAR)); } @@ -135,17 +142,24 @@ void ScraperSearchComponent::updateViewStyle() { using namespace Eigen; - // unlink description and result list + // unlink description and result list and result name + mGrid.removeEntry(mResultName); mGrid.removeEntry(mResultDesc); mGrid.removeEntry(mResultList); // add them back depending on search type if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) { + // show name + mGrid.setEntry(mResultName, Vector2i(1, 0), false, true, Vector2i(2, 1), GridFlags::BORDER_TOP); + // show description on the right mGrid.setEntry(mDescContainer, Vector2i(3, 0), false, true, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container }else{ + // fake row where name would be + mGrid.setEntry(std::make_shared(mWindow), Vector2i(1, 0), false, true, Vector2i(2, 1), GridFlags::BORDER_TOP); + // show result list on the right mGrid.setEntry(mResultList, Vector2i(3, 0), true, true, Vector2i(1, 3), GridFlags::BORDER_LEFT | GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); @@ -241,6 +255,11 @@ int ScraperSearchComponent::getSelectedIndex() void ScraperSearchComponent::updateInfoPane() { int i = getSelectedIndex(); + if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT && mScraperResults.size()) + { + i = 0; + } + if(i != -1 && (int)mScraperResults.size() > i) { ScraperSearchResult& res = mScraperResults.at(i); @@ -265,7 +284,7 @@ void ScraperSearchComponent::updateInfoPane() mMD_Publisher->setText(strToUpper(res.mdl.get("publisher"))); mMD_Genre->setText(strToUpper(res.mdl.get("genre"))); mMD_Players->setText(strToUpper(res.mdl.get("players"))); - + mGrid.onSizeChanged(); }else{ mResultName->setText(""); mResultDesc->setText(""); diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index 68c600099..e1260acac 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -75,7 +75,15 @@ private: std::shared_ptr mMD_Players; // label-component pair - typedef std::pair< std::shared_ptr, std::shared_ptr > MetaDataPair; + struct MetaDataPair + { + std::shared_ptr first; + std::shared_ptr second; + bool resize; + + MetaDataPair(const std::shared_ptr& f, const std::shared_ptr& s, bool r = true) : first(f), second(s), resize(r) {}; + }; + std::vector mMD_Pairs; SearchType mSearchType; diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index e34f54ec1..7b606680e 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -47,7 +47,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue Date: Tue, 25 Mar 2014 14:14:09 -0500 Subject: [PATCH 229/386] More design tweaks. Fixed some DateTime sizing stuff to be less weird. --- src/components/DateTimeComponent.cpp | 15 +++++++++------ src/components/DateTimeComponent.h | 3 +++ src/components/ScraperSearchComponent.cpp | 13 ++++++------- src/guis/GuiScraperMulti.cpp | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index 0bed43bd3..cf62d06e6 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -7,9 +7,8 @@ DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), - mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)) + mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mSizeSet(false) { - mSize << 64, getFont()->getHeight(); updateTextCache(); } @@ -253,7 +252,9 @@ void DateTimeComponent::updateTextCache() const std::string dispString = getDisplayString(mode); std::shared_ptr font = getFont(); mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); - setSize(mTextCache->metrics.size); + + if(!mSizeSet) + mSize = mTextCache->metrics.size; //set up cursor positions mCursorBoxes.clear(); @@ -292,10 +293,12 @@ void DateTimeComponent::setColor(unsigned int color) void DateTimeComponent::setFont(std::shared_ptr font) { mFont = font; + updateTextCache(); +} - if(getSize().y() < mFont->getHeight()) - setSize(getSize().x(), (float)mFont->getHeight()); - +void DateTimeComponent::onSizeChanged() +{ + mSizeSet = true; updateTextCache(); } diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index 2df70b08b..039cf17bd 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -23,6 +23,7 @@ public: bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; + void onSizeChanged() override; // Set how the point in time will be displayed: // * DISP_DATE - only display the date. @@ -58,4 +59,6 @@ private: unsigned int mColor; std::shared_ptr mFont; + + bool mSizeSet; }; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index abefdcaa3..2bcfb81e1 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -67,7 +67,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) i++; } - mGrid.setEntry(mMD_Grid, Vector2i(2, 1), false, true); + mGrid.setEntry(mMD_Grid, Vector2i(2, 1), false, false); // result list mResultList = std::make_shared(mWindow); @@ -87,10 +87,8 @@ void ScraperSearchComponent::onSizeChanged() mGrid.setColWidthPerc(3, 0.49f); // row heights - const float fontHeightPerc = (mResultName->getFont()->getHeight()) / mGrid.getSize().y(); - if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) // show name - mGrid.setRowHeightPerc(0, fontHeightPerc); // result name + mGrid.setRowHeightPerc(0, (mResultName->getFont()->getHeight()) / mGrid.getSize().y()); // result name else mGrid.setRowHeightPerc(0, 0.05f); // hide name but do padding @@ -98,11 +96,10 @@ void ScraperSearchComponent::onSizeChanged() // limit thumbnail size using setMaxHeight - we do this instead of letting mGrid call setSize because it maintains the aspect ratio // we also pad a little so it doesn't rub up against the metadata labels - mResultThumbnail->setMaxSize(mGrid.getColWidth(1) - 16, mGrid.getRowHeight(1)); + mResultThumbnail->setMaxSize(mGrid.getColWidth(1) * 0.85f, mGrid.getRowHeight(1) * 0.85f); // metadata - // (mMD_Grid has already been resized by mGrid) - + mMD_Grid->setSize(mGrid.getColWidth(2), mGrid.getRowHeight(1) * 0.9f); if(mMD_Grid->getSize().y() > mMD_Pairs.size()) { const int fontHeight = (int)(mMD_Grid->getSize().y() / mMD_Pairs.size() * 0.8f); @@ -130,10 +127,12 @@ void ScraperSearchComponent::onSizeChanged() // rating is manually sized mMD_Rating->setSize(mMD_Grid->getColWidth(1), fontLbl->getLetterHeight()); + mMD_Grid->onSizeChanged(); // make result font follow label font mResultDesc->setFont(Font::get(fontHeight, FONT_PATH_REGULAR)); } + mGrid.onSizeChanged(); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container } diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 7b606680e..068e5a284 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -47,7 +47,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue Date: Tue, 25 Mar 2014 17:46:58 -0500 Subject: [PATCH 230/386] Can now press Ctrl-G to toggle show all borders on all ComponentGrids. --- src/Settings.cpp | 4 +++- src/Window.cpp | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Settings.cpp b/src/Settings.cpp index 13e342a82..2cae7bfab 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -29,12 +29,14 @@ void Settings::setDefaults() mBoolMap["ParseGamelistOnly"] = false; mBoolMap["DrawFramerate"] = false; mBoolMap["ShowExit"] = true; - mBoolMap["Debug"] = false; mBoolMap["Windowed"] = false; mBoolMap["EnableSounds"] = true; mBoolMap["ShowHelpPrompts"] = true; mBoolMap["ScrapeRatings"] = true; + mBoolMap["Debug"] = false; + mBoolMap["DebugGrid"] = false; + mIntMap["DimTime"] = 120*1000; mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; diff --git a/src/Window.cpp b/src/Window.cpp index b4f456e02..148979eca 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -104,7 +104,11 @@ void Window::deinit() void Window::input(InputConfig* config, Input input) { - if(config->isMappedTo("mastervolup", input)) + if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + { + // toggle debug grid + Settings::getInstance()->setBool("DebugGrid", !Settings::getInstance()->getBool("DebugGrid")); + }else if(config->isMappedTo("mastervolup", input)) { VolumeControl::getInstance()->setVolume(VolumeControl::getInstance()->getVolume() + 5); } From 41d82630868b6e97efb2986b3f6b893f925fd8e9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 25 Mar 2014 17:47:36 -0500 Subject: [PATCH 231/386] Finishing touches on ScraperSearchComponent. --- src/components/ComponentGrid.cpp | 13 ++++++---- src/components/ScraperSearchComponent.cpp | 29 +++++++++++++++-------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index 12e3e92b1..5a015daac 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -1,6 +1,7 @@ #include "ComponentGrid.h" #include "../Log.h" #include "../Renderer.h" +#include "../Settings.h" using namespace GridFlags; @@ -146,11 +147,13 @@ void ComponentGrid::updateSeparators() { mLines.clear(); + bool drawAll = Settings::getInstance()->getBool("DebugGrid"); + Eigen::Vector2f pos; Eigen::Vector2f size; for(auto it = mCells.begin(); it != mCells.end(); it++) { - if(!it->border) + if(!it->border && !drawAll) continue; // find component position + size @@ -165,22 +168,22 @@ void ComponentGrid::updateSeparators() for(int y = it->pos.y(); y < it->pos.y() + it->dim.y(); y++) size[1] += getRowHeight(y); - if(it->border & BORDER_TOP) + if(it->border & BORDER_TOP || drawAll) { mLines.push_back(Vert(pos.x(), pos.y())); mLines.push_back(Vert(pos.x() + size.x(), pos.y())); } - if(it->border & BORDER_BOTTOM) + if(it->border & BORDER_BOTTOM || drawAll) { mLines.push_back(Vert(pos.x(), pos.y() + size.y())); mLines.push_back(Vert(pos.x() + size.x(), mLines.back().y)); } - if(it->border & BORDER_LEFT) + if(it->border & BORDER_LEFT || drawAll) { mLines.push_back(Vert(pos.x(), pos.y())); mLines.push_back(Vert(pos.x(), pos.y() + size.y())); } - if(it->border & BORDER_RIGHT) + if(it->border & BORDER_RIGHT || drawAll) { mLines.push_back(Vert(pos.x() + size.x(), pos.y())); mLines.push_back(Vert(mLines.back().x, pos.y() + size.y())); diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 2bcfb81e1..5f1745ae6 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -58,13 +58,13 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "GENRE:", font, mdLblColor), mMD_Genre)); mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "PLAYERS:", font, mdLblColor), mMD_Players)); - mMD_Grid = std::make_shared(mWindow, Vector2i(2, mMD_Pairs.size())); + mMD_Grid = std::make_shared(mWindow, Vector2i(2, mMD_Pairs.size()*2 - 1)); unsigned int i = 0; for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) { mMD_Grid->setEntry(it->first, Vector2i(0, i), false, true); mMD_Grid->setEntry(it->second, Vector2i(1, i), false, it->resize); - i++; + i += 2; } mGrid.setEntry(mMD_Grid, Vector2i(2, 1), false, false); @@ -90,16 +90,18 @@ void ScraperSearchComponent::onSizeChanged() if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) // show name mGrid.setRowHeightPerc(0, (mResultName->getFont()->getHeight()) / mGrid.getSize().y()); // result name else - mGrid.setRowHeightPerc(0, 0.05f); // hide name but do padding + mGrid.setRowHeightPerc(0, 0.0825f); // hide name but do padding - mGrid.setRowHeightPerc(2, 0.375f); // description + mGrid.setRowHeightPerc(1, 0.505f); + + const float boxartCellScale = 0.85f; // limit thumbnail size using setMaxHeight - we do this instead of letting mGrid call setSize because it maintains the aspect ratio // we also pad a little so it doesn't rub up against the metadata labels - mResultThumbnail->setMaxSize(mGrid.getColWidth(1) * 0.85f, mGrid.getRowHeight(1) * 0.85f); + mResultThumbnail->setMaxSize(mGrid.getColWidth(1) * boxartCellScale, mGrid.getRowHeight(1)); // metadata - mMD_Grid->setSize(mGrid.getColWidth(2), mGrid.getRowHeight(1) * 0.9f); + mMD_Grid->setSize(mGrid.getColWidth(2), mGrid.getRowHeight(1)); if(mMD_Grid->getSize().y() > mMD_Pairs.size()) { const int fontHeight = (int)(mMD_Grid->getSize().y() / mMD_Pairs.size() * 0.8f); @@ -116,6 +118,11 @@ void ScraperSearchComponent::onSizeChanged() maxLblWidth = it->first->getSize().x() + 6; } + for(unsigned int i = 0; i < mMD_Pairs.size(); i++) + { + mMD_Grid->setRowHeightPerc(i*2, (fontLbl->getLetterHeight() + 2) / mMD_Grid->getSize().y()); + } + // update component fonts mMD_ReleaseDate->setFont(fontComp); mMD_Developer->setFont(fontComp); @@ -132,9 +139,11 @@ void ScraperSearchComponent::onSizeChanged() // make result font follow label font mResultDesc->setFont(Font::get(fontHeight, FONT_PATH_REGULAR)); } - mGrid.onSizeChanged(); - + + mDescContainer->setSize(mGrid.getColWidth(1)*boxartCellScale + mGrid.getColWidth(2), mResultDesc->getFont()->getHeight() * 3); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container + + mGrid.onSizeChanged(); } void ScraperSearchComponent::updateViewStyle() @@ -153,7 +162,7 @@ void ScraperSearchComponent::updateViewStyle() mGrid.setEntry(mResultName, Vector2i(1, 0), false, true, Vector2i(2, 1), GridFlags::BORDER_TOP); // show description on the right - mGrid.setEntry(mDescContainer, Vector2i(3, 0), false, true, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); + mGrid.setEntry(mDescContainer, Vector2i(3, 0), false, false, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container }else{ // fake row where name would be @@ -163,7 +172,7 @@ void ScraperSearchComponent::updateViewStyle() mGrid.setEntry(mResultList, Vector2i(3, 0), true, true, Vector2i(1, 3), GridFlags::BORDER_LEFT | GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); // show description under image/info - mGrid.setEntry(mDescContainer, Vector2i(1, 2), false, true, Vector2i(2, 1), GridFlags::BORDER_BOTTOM); + mGrid.setEntry(mDescContainer, Vector2i(1, 2), false, false, Vector2i(2, 1), GridFlags::BORDER_BOTTOM); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container } } From 45428dd17be5ad55dd6123ab884a46003bfebed4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 25 Mar 2014 18:10:35 -0500 Subject: [PATCH 232/386] Added new TextEditComponent graphics. --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 34 +++--- data/Resources.h | 3 + data/converted/textinput_ninepatch_png.cpp | 135 +++++++++++++++++++++ data/resources/textinput_ninepatch.png | Bin 0 -> 1275 bytes src/components/TextEditComponent.cpp | 2 +- 6 files changed, 158 insertions(+), 17 deletions(-) create mode 100644 data/converted/textinput_ninepatch_png.cpp create mode 100644 data/resources/textinput_ninepatch.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 15b61c55e..a777915f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -307,6 +307,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_filled_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textinput_ninepatch_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 588a0e5d9..11d5a1551 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 34; +const size_t res2hNrOfFiles = 35; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.svg", arrow_svg_size, arrow_svg_data}, {":/button.png", button_png_size, button_png_data}, @@ -23,6 +23,7 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, + {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, @@ -60,21 +61,22 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/slider_knob.svg", res2hFiles[16]), std::make_pair(":/star_filled.svg", res2hFiles[17]), std::make_pair(":/star_unfilled.svg", res2hFiles[18]), - std::make_pair(":/help/button_a.svg", res2hFiles[19]), - std::make_pair(":/help/button_b.svg", res2hFiles[20]), - std::make_pair(":/help/button_l.svg", res2hFiles[21]), - std::make_pair(":/help/button_r.svg", res2hFiles[22]), - std::make_pair(":/help/button_select.svg", res2hFiles[23]), - std::make_pair(":/help/button_start.svg", res2hFiles[24]), - std::make_pair(":/help/button_x.svg", res2hFiles[25]), - std::make_pair(":/help/button_y.svg", res2hFiles[26]), - std::make_pair(":/help/dpad_all.svg", res2hFiles[27]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[28]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[29]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[30]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[31]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[32]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[33]) + std::make_pair(":/textinput_ninepatch.png", res2hFiles[19]), + std::make_pair(":/help/button_a.svg", res2hFiles[20]), + std::make_pair(":/help/button_b.svg", res2hFiles[21]), + std::make_pair(":/help/button_l.svg", res2hFiles[22]), + std::make_pair(":/help/button_r.svg", res2hFiles[23]), + std::make_pair(":/help/button_select.svg", res2hFiles[24]), + std::make_pair(":/help/button_start.svg", res2hFiles[25]), + std::make_pair(":/help/button_x.svg", res2hFiles[26]), + std::make_pair(":/help/button_y.svg", res2hFiles[27]), + std::make_pair(":/help/dpad_all.svg", res2hFiles[28]), + std::make_pair(":/help/dpad_down.svg", res2hFiles[29]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[30]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[31]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[32]), + std::make_pair(":/help/dpad_up.svg", res2hFiles[33]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[34]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 090c2c4dd..1a7f4c031 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -62,6 +62,9 @@ extern const unsigned char star_filled_svg_data[]; extern const size_t star_unfilled_svg_size; extern const unsigned char star_unfilled_svg_data[]; +extern const size_t textinput_ninepatch_png_size; +extern const unsigned char textinput_ninepatch_png_data[]; + extern const size_t help_button_a_svg_size; extern const unsigned char help_button_a_svg_data[]; diff --git a/data/converted/textinput_ninepatch_png.cpp b/data/converted/textinput_ninepatch_png.cpp new file mode 100644 index 000000000..21387e40d --- /dev/null +++ b/data/converted/textinput_ninepatch_png.cpp @@ -0,0 +1,135 @@ +//this file was auto-generated from "textinput_ninepatch.png" by res2h + +#include "../Resources.h" + +const size_t textinput_ninepatch_png_size = 1275; +const unsigned char textinput_ninepatch_png_data[1275] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, + 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, + 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, + 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, + 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, + 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, + 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, + 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, + 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, + 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, + 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, + 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, + 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, + 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, + 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, + 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, + 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, + 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, + 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, + 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, + 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, + 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, + 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, + 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, + 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, + 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, + 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, + 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, + 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x45,0x39,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x33,0x42,0x37,0x42,0x36,0x33,0x37,0x36, + 0x39,0x44,0x38,0x38,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, + 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x45,0x34, + 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, + 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, + 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, + 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, + 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, + 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, + 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, + 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, + 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, + 0x64,0x3a,0x45,0x39,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, + 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x45,0x39,0x31,0x35,0x37,0x37,0x33,0x42, + 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, + 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, + 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, + 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, + 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, + 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, + 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, + 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, + 0x18,0xec,0x12,0x45,0x00,0x00,0x01,0x29,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9a,0x41,0x6a,0x02,0x31, + 0x18,0x85,0x7f,0x43,0xc0,0xad,0xd1,0x13,0x98,0x55, + 0xb1,0x17,0xa8,0x7b,0x6f,0xe0,0x62,0x4e,0xa0,0x14, + 0x7a,0xa1,0x62,0x6f,0x20,0x78,0x0d,0xa7,0xeb,0x2e, + 0xa4,0xba,0x88,0x37,0x98,0xb8,0x55,0xa6,0x33,0xfd, + 0x5f,0x49,0xc1,0x45,0x0f,0x90,0xd0,0xf7,0xe0,0x41, + 0x60,0x36,0xdf,0x97,0x64,0x56,0xf9,0x07,0x7d,0xdf, + 0x4b,0xfd,0x5e,0x1b,0x11,0x79,0xd6,0xae,0xb5,0x0f, + 0xda,0xa1,0xe4,0x99,0xab,0xf6,0x53,0xbb,0xd1,0xbe, + 0xce,0x9f,0xe6,0xdd,0x60,0x5f,0xef,0x01,0xbf,0xd5, + 0x2e,0xa5,0xac,0xec,0xb4,0x95,0x4d,0xbb,0xbe,0xb4, + 0xd6,0x8a,0xf7,0x5e,0xdc,0xc8,0x89,0x31,0x26,0x4b, + 0xe2,0xae,0xeb,0x24,0x5e,0xa2,0x84,0x10,0xa4,0x6d, + 0x5b,0x6c,0xf8,0x0a,0xa4,0x2b,0x7c,0xf4,0x53,0x2f, + 0x93,0xf1,0x24,0x5b,0x78,0x04,0x6c,0x60,0x04,0x6b, + 0xca,0x1a,0xb4,0x8f,0x58,0x39,0xe7,0x8a,0xb9,0x3b, + 0x77,0xac,0x33,0xf3,0xfb,0xc3,0xe6,0xbc,0xf3,0x7f, + 0x9d,0x44,0xca,0xd0,0x48,0xe1,0xa1,0x00,0x05,0x28, + 0x40,0x01,0x0a,0x50,0x80,0x02,0x14,0xa0,0x00,0x05, + 0x28,0x40,0x01,0x0a,0x50,0x80,0x02,0x14,0xa0,0x00, + 0x05,0x28,0x40,0x01,0x0a,0x50,0x80,0x02,0x14,0xa0, + 0x00,0x05,0xfe,0xa3,0x00,0x9e,0xef,0x7f,0x1e,0x91, + 0x4b,0xc9,0x1d,0xeb,0x15,0x02,0x07,0xac,0x62,0x8c, + 0xc5,0x08,0xe0,0xb5,0x3e,0xe5,0x00,0x01,0x0c,0x4e, + 0x48,0x38,0x07,0x69,0x9a,0x46,0x30,0xfc,0x91,0x6b, + 0xc0,0x06,0x46,0x8c,0x1a,0xa4,0x6c,0x6c,0x12,0x58, + 0x60,0xf6,0xe0,0x78,0x3a,0x96,0x74,0xfd,0x31,0xec, + 0xf1,0x66,0x30,0xb2,0xa2,0x8b,0x4a,0xfb,0xa2,0xfd, + 0xd0,0xde,0x32,0x86,0xbe,0x25,0x46,0xb0,0x56,0xca, + 0xfe,0xf5,0x2d,0xc0,0x00,0x3b,0xe6,0x51,0x95,0x79, + 0xeb,0x7d,0x04,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, + 0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/textinput_ninepatch.png b/data/resources/textinput_ninepatch.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba16d6f294c26d9a65989a72ee58c19fc38a044 GIT binary patch literal 1275 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%o&*>5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8KW+g=7RhMR$W{Yl!|Z$R@KEJl?AE#L8-<0 zrA5iW_()TRX$FQJev3c~fv&OgFUkZ)N@9*nesXDUYF>$_i>(q+MlU5Z#md#v(A3=A z*vZh)$iU3P(9pub!r0l|)!5M0(bUo0)EH(4HoeA9=1ykD=4O^I7C@b@#*UVTE>13P zE+z(+mPW3waJ`;+#U+V($*C}VGlBM6TDVvkSh|`3^_t_~2E*d&d1&^_H%Avt_F9 z?tNRXb$yS!bE4Bw&HK^1*D7&~S_GElM(6zCTB2R^C0Kv*N0sObmYf8Z>{C)(`Xel# zckQ$;Ut|3F_u*%IKG)B6Id#F~;X(#h4F^W9fCeU!1-O|17BkFyUoSV&`=sn^Q6}~^ zNj*n79&ELH%D~9u=V8H~Im^x9&&2ElY;HYLOLB6AA`-qmsIZz=^4IXq$25aYi@Lpj qFZz4oo>ALARksacr~ZA_J-}f7EO2V&>sl62apdXh=d#Wzp$Pze+_d`u literal 0 HcmV?d00001 diff --git a/src/components/TextEditComponent.cpp b/src/components/TextEditComponent.cpp index 49a0b6308..f69b0a902 100644 --- a/src/components/TextEditComponent.cpp +++ b/src/components/TextEditComponent.cpp @@ -12,7 +12,7 @@ #define CURSOR_REPEAT_SPEED 28 // lower is faster TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, ":/button.png"), mFocused(false), + mBox(window, ":/textinput_ninepatch.png"), mFocused(false), mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false), mFont(Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT)) { addChild(&mBox); From 58452b4e703b75948fca4d254d32bad89fb69422 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 25 Mar 2014 18:41:50 -0500 Subject: [PATCH 233/386] Updated help SVGs with better spacing. Fixed NinePatchComponent not accepting sizes less than the original texture. Design tweaks to GuiTextEditPopup. Statistics are no longer displayed in GuiMetaDataEd. --- data/converted/help_button_a_svg.cpp | 120 ++-- data/converted/help_button_b_svg.cpp | 236 ++++---- data/converted/help_button_l_svg.cpp | 172 +++--- data/converted/help_button_r_svg.cpp | 222 ++++---- data/converted/help_button_select_svg.cpp | 307 ++++++----- data/converted/help_button_start_svg.cpp | 308 ++++++----- data/converted/help_button_x_svg.cpp | 118 ++-- data/converted/help_button_y_svg.cpp | 112 ++-- data/converted/help_dpad_all_svg.cpp | 474 ++++++---------- data/converted/help_dpad_down_svg.cpp | 588 ++++++++++---------- data/converted/help_dpad_left_svg.cpp | 586 ++++++++++---------- data/converted/help_dpad_leftright_svg.cpp | 600 ++++++++++---------- data/converted/help_dpad_right_svg.cpp | 573 ++++++++++---------- data/converted/help_dpad_up_svg.cpp | 585 ++++++++++---------- data/converted/help_dpad_updown_svg.cpp | 602 ++++++++++----------- data/resources/help/button_a.svg | 13 +- data/resources/help/button_b.svg | 23 +- data/resources/help/button_l.svg | 19 +- data/resources/help/button_r.svg | 23 +- data/resources/help/button_select.svg | 32 +- data/resources/help/button_start.svg | 30 +- data/resources/help/button_x.svg | 13 +- data/resources/help/button_y.svg | 12 +- data/resources/help/dpad_all.svg | 57 +- data/resources/help/dpad_down.svg | 52 +- data/resources/help/dpad_left.svg | 52 +- data/resources/help/dpad_leftright.svg | 54 +- data/resources/help/dpad_right.svg | 55 +- data/resources/help/dpad_up.svg | 52 +- data/resources/help/dpad_updown.svg | 54 +- src/components/HelpComponent.cpp | 2 +- src/components/NinePatchComponent.cpp | 8 +- src/guis/GuiInputConfig.cpp | 2 +- src/guis/GuiMetaDataEd.cpp | 10 +- src/guis/GuiTextEditPopup.cpp | 9 +- 35 files changed, 3067 insertions(+), 3108 deletions(-) diff --git a/data/converted/help_button_a_svg.cpp b/data/converted/help_button_a_svg.cpp index 50d500412..e039d0cfc 100644 --- a/data/converted/help_button_a_svg.cpp +++ b/data/converted/help_button_a_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_a_svg_size = 801; -const unsigned char help_button_a_svg_data[801] = { +const size_t help_button_a_svg_size = 990; +const unsigned char help_button_a_svg_data[990] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,60 +29,78 @@ const unsigned char help_button_a_svg_data[801] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, - 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, - 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, - 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, - 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, - 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, - 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x35,0x2e,0x38,0x38,0x33,0x2c,0x31,0x31,0x2e,0x35, - 0x35,0x6c,0x2d,0x31,0x2e,0x36,0x37,0x39,0x2c,0x35, - 0x2e,0x33,0x30,0x37,0x68,0x33,0x2e,0x34,0x30,0x35, - 0x6c,0x2d,0x31,0x2e,0x36,0x37,0x2d,0x35,0x2e,0x33, - 0x30,0x37,0x48,0x31,0x35,0x2e,0x38,0x38,0x33,0x7a, - 0x20,0x4d,0x31,0x35,0x2e,0x35,0x2c,0x30,0x43,0x36, - 0x2e,0x39,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2c,0x36, - 0x2e,0x39,0x34,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35, - 0x0d,0x0a,0x09,0x09,0x09,0x73,0x36,0x2e,0x39,0x33, - 0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31,0x2c,0x31, - 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, - 0x63,0x38,0x2e,0x35,0x36,0x2c,0x30,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x34,0x31,0x2c,0x31, - 0x35,0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x31, - 0x53,0x32,0x34,0x2e,0x30,0x36,0x2c,0x30,0x2c,0x31, - 0x35,0x2e,0x35,0x2c,0x30,0x7a,0x20,0x4d,0x31,0x39, - 0x2e,0x31,0x39,0x35,0x2c,0x32,0x31,0x2e,0x38,0x39, - 0x34,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38,0x2d,0x32, - 0x2e,0x39,0x31,0x32,0x68,0x2d,0x34,0x2e,0x37,0x34, + 0x38,0x2e,0x39,0x31,0x34,0x2c,0x31,0x34,0x2e,0x35, + 0x37,0x39,0x6c,0x2d,0x31,0x2e,0x36,0x38,0x31,0x2c, + 0x35,0x2e,0x33,0x30,0x38,0x68,0x33,0x2e,0x34,0x30, + 0x35,0x6c,0x2d,0x31,0x2e,0x36,0x37,0x2d,0x35,0x2e, + 0x33,0x30,0x38,0x48,0x31,0x38,0x2e,0x39,0x31,0x34, + 0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x33,0x2e,0x30,0x32,0x39,0x63,0x2d,0x38,0x2e,0x35, + 0x36,0x32,0x2c,0x30,0x2d,0x31,0x35,0x2e,0x35,0x30, + 0x31,0x2c,0x36,0x2e,0x39,0x34,0x2d,0x31,0x35,0x2e, + 0x35,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36, + 0x32,0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35, + 0x2e,0x35,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x30, + 0x31,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31,0x63,0x38, + 0x2e,0x35,0x36,0x31,0x2c,0x30,0x2c,0x31,0x35,0x2e, + 0x34,0x39,0x39,0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c, + 0x31,0x35,0x2e,0x34,0x39,0x39,0x2d,0x31,0x35,0x2e, + 0x35,0x30,0x31,0x43,0x33,0x34,0x2e,0x30,0x33,0x2c, + 0x39,0x2e,0x39,0x37,0x2c,0x32,0x37,0x2e,0x30,0x39, + 0x31,0x2c,0x33,0x2e,0x30,0x32,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x33,0x2e,0x30,0x32,0x39, + 0x7a,0x20,0x4d,0x32,0x32,0x2e,0x32,0x32,0x37,0x2c, + 0x32,0x34,0x2e,0x39,0x32,0x35,0x0d,0x0a,0x09,0x09, + 0x09,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x39,0x2d,0x32, + 0x2e,0x39,0x31,0x33,0x68,0x2d,0x34,0x2e,0x37,0x34, 0x31,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38,0x2c,0x32, - 0x2e,0x39,0x31,0x32,0x48,0x39,0x2e,0x38,0x38,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x6c,0x34,0x2e,0x36,0x34, - 0x38,0x2d,0x31,0x33,0x2e,0x35,0x30,0x37,0x68,0x32, - 0x2e,0x37,0x37,0x33,0x6c,0x34,0x2e,0x36,0x32,0x39, - 0x2c,0x31,0x33,0x2e,0x35,0x30,0x37,0x48,0x31,0x39, - 0x2e,0x31,0x39,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, - 0x0a + 0x2e,0x39,0x31,0x33,0x68,0x2d,0x32,0x2e,0x37,0x33, + 0x36,0x6c,0x34,0x2e,0x36,0x34,0x37,0x2d,0x31,0x33, + 0x2e,0x35,0x30,0x39,0x68,0x32,0x2e,0x37,0x37,0x34, + 0x6c,0x34,0x2e,0x36,0x32,0x39,0x2c,0x31,0x33,0x2e, + 0x35,0x30,0x39,0x48,0x32,0x32,0x2e,0x32,0x32,0x37, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, + 0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31,0x2c,0x30, + 0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36,0x31,0x48, + 0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48,0x33,0x36, + 0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x30,0x48,0x30,0x56,0x33,0x37,0x2e, + 0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36,0x31,0x56, + 0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_button_b_svg.cpp b/data/converted/help_button_b_svg.cpp index 0c91c6a21..d0eb61373 100644 --- a/data/converted/help_button_b_svg.cpp +++ b/data/converted/help_button_b_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_b_svg_size = 1342; -const unsigned char help_button_b_svg_data[1342] = { +const size_t help_button_b_svg_size = 1502; +const unsigned char help_button_b_svg_data[1502] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,114 +29,130 @@ const unsigned char help_button_b_svg_data[1342] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, - 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, - 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, - 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, - 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, - 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, - 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x36,0x2e,0x34,0x34,0x2c,0x31,0x35,0x2e,0x39,0x32, - 0x68,0x2d,0x32,0x2e,0x37,0x76,0x33,0x2e,0x38,0x38, - 0x37,0x68,0x32,0x2e,0x34,0x39,0x36,0x63,0x30,0x2e, - 0x37,0x31,0x38,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x36, - 0x36,0x2d,0x30,0x2e,0x31,0x35,0x35,0x2c,0x31,0x2e, - 0x36,0x34,0x33,0x2d,0x30,0x2e,0x34,0x36,0x37,0x73, - 0x30,0x2e,0x35,0x36,0x35,0x2d,0x30,0x2e,0x37,0x37, - 0x32,0x2c,0x30,0x2e,0x35,0x36,0x35,0x2d,0x31,0x2e, - 0x33,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2d,0x30,0x2e,0x36,0x36,0x2d,0x30,0x2e,0x31,0x36, - 0x31,0x2d,0x31,0x2e,0x31,0x36,0x34,0x2d,0x30,0x2e, - 0x34,0x38,0x32,0x2d,0x31,0x2e,0x35,0x31,0x34,0x43, - 0x31,0x37,0x2e,0x36,0x34,0x2c,0x31,0x36,0x2e,0x30, - 0x39,0x34,0x2c,0x31,0x37,0x2e,0x31,0x33,0x32,0x2c, - 0x31,0x35,0x2e,0x39,0x32,0x2c,0x31,0x36,0x2e,0x34, - 0x34,0x2c,0x31,0x35,0x2e,0x39,0x32,0x7a,0x20,0x4d, - 0x31,0x37,0x2e,0x33,0x35,0x39,0x2c,0x31,0x33,0x2e, - 0x36,0x30,0x31,0x63,0x30,0x2e,0x33,0x38,0x39,0x2d, - 0x30,0x2e,0x32,0x39,0x37,0x2c,0x30,0x2e,0x35,0x38, - 0x34,0x2d,0x30,0x2e,0x37,0x33,0x2c,0x30,0x2e,0x35, - 0x38,0x34,0x2d,0x31,0x2e,0x32,0x39,0x39,0x0d,0x0a, - 0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x32, - 0x35,0x2d,0x30,0x2e,0x31,0x39,0x36,0x2d,0x31,0x2e, - 0x30,0x38,0x36,0x2d,0x30,0x2e,0x35,0x38,0x39,0x2d, - 0x31,0x2e,0x33,0x38,0x33,0x63,0x2d,0x30,0x2e,0x33, - 0x39,0x34,0x2d,0x30,0x2e,0x32,0x39,0x37,0x2d,0x30, - 0x2e,0x39,0x37,0x39,0x2d,0x30,0x2e,0x34,0x34,0x35, - 0x2d,0x31,0x2e,0x37,0x35,0x39,0x2d,0x30,0x2e,0x34, - 0x34,0x35,0x48,0x31,0x33,0x2e,0x37,0x34,0x76,0x33, - 0x2e,0x35,0x37,0x32,0x68,0x31,0x2e,0x39,0x34,0x38, - 0x0d,0x0a,0x09,0x09,0x09,0x43,0x31,0x36,0x2e,0x34, - 0x31,0x32,0x2c,0x31,0x34,0x2e,0x30,0x34,0x36,0x2c, - 0x31,0x36,0x2e,0x39,0x36,0x38,0x2c,0x31,0x33,0x2e, - 0x38,0x39,0x36,0x2c,0x31,0x37,0x2e,0x33,0x35,0x39, - 0x2c,0x31,0x33,0x2e,0x36,0x30,0x31,0x7a,0x20,0x4d, - 0x31,0x35,0x2e,0x35,0x2c,0x30,0x43,0x36,0x2e,0x39, - 0x33,0x39,0x2c,0x30,0x2c,0x30,0x2c,0x36,0x2e,0x39, - 0x33,0x39,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x63, - 0x30,0x2c,0x38,0x2e,0x35,0x36,0x32,0x2c,0x36,0x2e, - 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, - 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, - 0x30,0x31,0x53,0x33,0x31,0x2c,0x32,0x34,0x2e,0x30, - 0x36,0x32,0x2c,0x33,0x31,0x2c,0x31,0x35,0x2e,0x35, - 0x0d,0x0a,0x09,0x09,0x09,0x43,0x33,0x31,0x2c,0x36, - 0x2e,0x39,0x33,0x39,0x2c,0x32,0x34,0x2e,0x30,0x36, - 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x30,0x7a, - 0x20,0x4d,0x31,0x39,0x2e,0x38,0x36,0x33,0x2c,0x32, - 0x30,0x2e,0x38,0x39,0x37,0x63,0x2d,0x30,0x2e,0x38, - 0x35,0x34,0x2c,0x30,0x2e,0x36,0x36,0x34,0x2d,0x32, - 0x2e,0x30,0x36,0x33,0x2c,0x30,0x2e,0x39,0x39,0x37, - 0x2d,0x33,0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x39, - 0x39,0x37,0x68,0x2d,0x35,0x2e,0x32,0x30,0x35,0x56, - 0x38,0x2e,0x33,0x38,0x37,0x68,0x34,0x2e,0x35,0x36, - 0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x35, - 0x39,0x2c,0x30,0x2c,0x32,0x2e,0x38,0x33,0x2c,0x30, - 0x2e,0x33,0x30,0x39,0x2c,0x33,0x2e,0x37,0x32,0x31, - 0x2c,0x30,0x2e,0x39,0x32,0x38,0x63,0x30,0x2e,0x38, - 0x39,0x31,0x2c,0x30,0x2e,0x36,0x31,0x38,0x2c,0x31, - 0x2e,0x33,0x33,0x36,0x2c,0x31,0x2e,0x35,0x34,0x33, - 0x2c,0x31,0x2e,0x33,0x33,0x36,0x2c,0x32,0x2e,0x37, - 0x37,0x33,0x63,0x30,0x2c,0x30,0x2e,0x36,0x32,0x35, - 0x2d,0x30,0x2e,0x31,0x36,0x36,0x2c,0x31,0x2e,0x31, - 0x38,0x33,0x2d,0x30,0x2e,0x34,0x39,0x36,0x2c,0x31, - 0x2e,0x36,0x37,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x33,0x33,0x31,0x2c,0x30,0x2e,0x34, - 0x39,0x31,0x2d,0x30,0x2e,0x38,0x31,0x33,0x2c,0x30, - 0x2e,0x38,0x36,0x31,0x2d,0x31,0x2e,0x34,0x34,0x33, - 0x2c,0x31,0x2e,0x31,0x30,0x38,0x63,0x30,0x2e,0x38, - 0x31,0x31,0x2c,0x30,0x2e,0x31,0x37,0x33,0x2c,0x31, - 0x2e,0x34,0x31,0x38,0x2c,0x30,0x2e,0x35,0x34,0x34, - 0x2c,0x31,0x2e,0x38,0x32,0x34,0x2c,0x31,0x2e,0x31, - 0x31,0x33,0x63,0x30,0x2e,0x34,0x30,0x34,0x2c,0x30, - 0x2e,0x35,0x36,0x39,0x2c,0x30,0x2e,0x36,0x30,0x37, - 0x2c,0x31,0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e,0x36, - 0x30,0x37,0x2c,0x31,0x2e,0x39,0x37,0x37,0x0d,0x0a, - 0x09,0x09,0x09,0x43,0x32,0x31,0x2e,0x31,0x34,0x34, - 0x2c,0x31,0x39,0x2e,0x32,0x35,0x33,0x2c,0x32,0x30, - 0x2e,0x37,0x31,0x36,0x2c,0x32,0x30,0x2e,0x32,0x33, - 0x32,0x2c,0x31,0x39,0x2e,0x38,0x36,0x33,0x2c,0x32, - 0x30,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x42, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, + 0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30, + 0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39, + 0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0x20, + 0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79,0x3d, + 0x22,0x30,0x70,0x78,0x22,0x0d,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x39,0x2e,0x34,0x37, + 0x2c,0x31,0x38,0x2e,0x39,0x34,0x39,0x68,0x2d,0x32, + 0x2e,0x36,0x39,0x39,0x76,0x33,0x2e,0x38,0x38,0x37, + 0x68,0x32,0x2e,0x34,0x39,0x36,0x63,0x30,0x2e,0x37, + 0x31,0x37,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x36,0x36, + 0x2d,0x30,0x2e,0x31,0x35,0x34,0x2c,0x31,0x2e,0x36, + 0x34,0x33,0x2d,0x30,0x2e,0x34,0x36,0x37,0x63,0x30, + 0x2e,0x33,0x37,0x38,0x2d,0x30,0x2e,0x33,0x31,0x33, + 0x2c,0x30,0x2e,0x35,0x36,0x34,0x2d,0x30,0x2e,0x37, + 0x37,0x32,0x2c,0x30,0x2e,0x35,0x36,0x34,0x2d,0x31, + 0x2e,0x33,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2d,0x30,0x2e,0x36,0x36,0x2d,0x30,0x2e,0x31, + 0x36,0x2d,0x31,0x2e,0x31,0x36,0x35,0x2d,0x30,0x2e, + 0x34,0x38,0x31,0x2d,0x31,0x2e,0x35,0x31,0x33,0x43, + 0x32,0x30,0x2e,0x36,0x37,0x31,0x2c,0x31,0x39,0x2e, + 0x31,0x32,0x34,0x2c,0x32,0x30,0x2e,0x31,0x36,0x33, + 0x2c,0x31,0x38,0x2e,0x39,0x34,0x39,0x2c,0x31,0x39, + 0x2e,0x34,0x37,0x2c,0x31,0x38,0x2e,0x39,0x34,0x39, + 0x7a,0x20,0x4d,0x32,0x30,0x2e,0x33,0x38,0x39,0x2c, + 0x31,0x36,0x2e,0x36,0x33,0x63,0x30,0x2e,0x33,0x39, + 0x2d,0x30,0x2e,0x32,0x39,0x37,0x2c,0x30,0x2e,0x35, + 0x38,0x35,0x2d,0x30,0x2e,0x37,0x32,0x39,0x2c,0x30, + 0x2e,0x35,0x38,0x35,0x2d,0x31,0x2e,0x32,0x39,0x39, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x36,0x32,0x35,0x2d,0x30,0x2e,0x31,0x39,0x37,0x2d, + 0x31,0x2e,0x30,0x38,0x36,0x2d,0x30,0x2e,0x35,0x39, + 0x2d,0x31,0x2e,0x33,0x38,0x33,0x63,0x2d,0x30,0x2e, + 0x33,0x39,0x33,0x2d,0x30,0x2e,0x32,0x39,0x36,0x2d, + 0x30,0x2e,0x39,0x37,0x39,0x2d,0x30,0x2e,0x34,0x34, + 0x35,0x2d,0x31,0x2e,0x37,0x35,0x38,0x2d,0x30,0x2e, + 0x34,0x34,0x35,0x68,0x2d,0x31,0x2e,0x38,0x35,0x35, + 0x76,0x33,0x2e,0x35,0x37,0x32,0x68,0x31,0x2e,0x39, + 0x34,0x38,0x0d,0x0a,0x09,0x09,0x09,0x43,0x31,0x39, + 0x2e,0x34,0x34,0x32,0x2c,0x31,0x37,0x2e,0x30,0x37, + 0x35,0x2c,0x31,0x39,0x2e,0x39,0x39,0x39,0x2c,0x31, + 0x36,0x2e,0x39,0x32,0x37,0x2c,0x32,0x30,0x2e,0x33, + 0x38,0x39,0x2c,0x31,0x36,0x2e,0x36,0x33,0x7a,0x20, + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30, + 0x33,0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30, + 0x2d,0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x33, + 0x39,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e, + 0x35,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36,0x2c,0x36, + 0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x2c, + 0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x38,0x2e,0x35,0x36,0x32, + 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x2d,0x36,0x2e, + 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x2d,0x31, + 0x35,0x2e,0x35,0x53,0x32,0x37,0x2e,0x30,0x39,0x31, + 0x2c,0x33,0x2e,0x30,0x33,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x2e,0x30,0x33,0x7a,0x20,0x4d,0x32, + 0x32,0x2e,0x38,0x39,0x34,0x2c,0x32,0x33,0x2e,0x39, + 0x32,0x37,0x63,0x2d,0x30,0x2e,0x38,0x35,0x34,0x2c, + 0x30,0x2e,0x36,0x36,0x35,0x2d,0x32,0x2e,0x30,0x36, + 0x33,0x2c,0x30,0x2e,0x39,0x39,0x37,0x2d,0x33,0x2e, + 0x36,0x32,0x37,0x2c,0x30,0x2e,0x39,0x39,0x37,0x68, + 0x2d,0x35,0x2e,0x32,0x30,0x35,0x56,0x31,0x31,0x2e, + 0x34,0x31,0x36,0x68,0x34,0x2e,0x35,0x36,0x34,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x35,0x39,0x2c, + 0x30,0x2c,0x32,0x2e,0x38,0x33,0x2c,0x30,0x2e,0x33, + 0x31,0x2c,0x33,0x2e,0x37,0x32,0x31,0x2c,0x30,0x2e, + 0x39,0x32,0x39,0x63,0x30,0x2e,0x38,0x39,0x31,0x2c, + 0x30,0x2e,0x36,0x31,0x37,0x2c,0x31,0x2e,0x33,0x33, + 0x36,0x2c,0x31,0x2e,0x35,0x34,0x33,0x2c,0x31,0x2e, + 0x33,0x33,0x36,0x2c,0x32,0x2e,0x37,0x37,0x33,0x63, + 0x30,0x2c,0x30,0x2e,0x36,0x32,0x35,0x2d,0x30,0x2e, + 0x31,0x36,0x36,0x2c,0x31,0x2e,0x31,0x38,0x34,0x2d, + 0x30,0x2e,0x34,0x39,0x36,0x2c,0x31,0x2e,0x36,0x37, + 0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x33,0x33,0x32,0x2c,0x30,0x2e,0x34,0x39,0x32,0x2d, + 0x30,0x2e,0x38,0x31,0x33,0x2c,0x30,0x2e,0x38,0x36, + 0x31,0x2d,0x31,0x2e,0x34,0x34,0x32,0x2c,0x31,0x2e, + 0x31,0x30,0x39,0x63,0x30,0x2e,0x38,0x31,0x31,0x2c, + 0x30,0x2e,0x31,0x37,0x33,0x2c,0x31,0x2e,0x34,0x31, + 0x38,0x2c,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x2e, + 0x38,0x32,0x32,0x2c,0x31,0x2e,0x31,0x31,0x33,0x63, + 0x30,0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x35,0x36, + 0x38,0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c,0x31,0x2e, + 0x32,0x32,0x38,0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c, + 0x31,0x2e,0x39,0x37,0x36,0x0d,0x0a,0x09,0x09,0x09, + 0x43,0x32,0x34,0x2e,0x31,0x37,0x34,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x33,0x2c,0x32,0x33,0x2e,0x37,0x34, + 0x37,0x2c,0x32,0x33,0x2e,0x32,0x36,0x32,0x2c,0x32, + 0x32,0x2e,0x38,0x39,0x34,0x2c,0x32,0x33,0x2e,0x39, + 0x32,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, + 0x79,0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31, + 0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36, + 0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48, + 0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x56,0x33, + 0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f, 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, 0x0d,0x0a }; diff --git a/data/converted/help_button_l_svg.cpp b/data/converted/help_button_l_svg.cpp index a0af35ed8..aa08b2b60 100644 --- a/data/converted/help_button_l_svg.cpp +++ b/data/converted/help_button_l_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_l_svg_size = 1016; -const unsigned char help_button_l_svg_data[1016] = { +const size_t help_button_l_svg_size = 1151; +const unsigned char help_button_l_svg_data[1151] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,81 +29,95 @@ const unsigned char help_button_l_svg_data[1016] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x38,0x2e,0x32,0x35,0x36,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x31,0x37,0x2e,0x30,0x30,0x37,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35,0x36,0x20, - 0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35, - 0x36,0x20,0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x30,0x2e,0x34,0x35,0x2c,0x31,0x2e,0x35, - 0x63,0x33,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x36, - 0x2e,0x33,0x30,0x36,0x2c,0x33,0x2e,0x31,0x33,0x39, - 0x2c,0x36,0x2e,0x33,0x30,0x36,0x2c,0x36,0x2e,0x39, - 0x39,0x37,0x63,0x30,0x2c,0x33,0x2e,0x38,0x36,0x36, - 0x2d,0x32,0x2e,0x38,0x32,0x39,0x2c,0x37,0x2e,0x30, - 0x31,0x2d,0x36,0x2e,0x33,0x30,0x36,0x2c,0x37,0x2e, - 0x30,0x31,0x48,0x37,0x2e,0x37,0x36,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x2d,0x33,0x2e,0x34,0x35,0x32,0x2d, - 0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e,0x32,0x36,0x2d, - 0x33,0x2e,0x31,0x37,0x35,0x2d,0x36,0x2e,0x32,0x36, - 0x2d,0x37,0x2e,0x30,0x31,0x43,0x31,0x2e,0x35,0x2c, - 0x34,0x2e,0x36,0x36,0x39,0x2c,0x34,0x2e,0x33,0x30, - 0x38,0x2c,0x31,0x2e,0x35,0x33,0x2c,0x37,0x2e,0x37, - 0x34,0x37,0x2c,0x31,0x2e,0x35,0x48,0x33,0x30,0x2e, - 0x34,0x35,0x20,0x4d,0x33,0x30,0x2e,0x34,0x35,0x2c, - 0x30,0x43,0x33,0x30,0x2e,0x34,0x32,0x38,0x2c,0x30, - 0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x30,0x2c,0x37, - 0x2e,0x37,0x34,0x37,0x2c,0x30,0x0d,0x0a,0x09,0x09, - 0x09,0x43,0x33,0x2e,0x34,0x36,0x36,0x2c,0x30,0x2e, - 0x30,0x33,0x38,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x31, - 0x39,0x2c,0x30,0x2c,0x38,0x2e,0x34,0x39,0x37,0x73, - 0x33,0x2e,0x34,0x36,0x36,0x2c,0x38,0x2e,0x34,0x37, - 0x33,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x38,0x2e, - 0x35,0x31,0x63,0x30,0x2c,0x30,0x2c,0x32,0x32,0x2e, - 0x36,0x38,0x31,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x37, - 0x30,0x33,0x2c,0x30,0x63,0x34,0x2e,0x33,0x31,0x32, - 0x2c,0x30,0x2c,0x37,0x2e,0x38,0x30,0x36,0x2d,0x33, - 0x2e,0x38,0x31,0x31,0x2c,0x37,0x2e,0x38,0x30,0x36, - 0x2d,0x38,0x2e,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x43,0x33,0x38,0x2e,0x32,0x35,0x36,0x2c,0x33,0x2e, - 0x37,0x39,0x36,0x2c,0x33,0x34,0x2e,0x37,0x36,0x32, - 0x2c,0x30,0x2c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30, - 0x4c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x09,0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x70,0x6f,0x69,0x6e, - 0x74,0x73,0x3d,0x22,0x31,0x36,0x2e,0x35,0x31,0x39, - 0x2c,0x31,0x32,0x2e,0x31,0x38,0x36,0x20,0x32,0x31, - 0x2e,0x37,0x33,0x38,0x2c,0x31,0x32,0x2e,0x31,0x38, - 0x36,0x20,0x32,0x31,0x2e,0x37,0x33,0x38,0x2c,0x31, - 0x30,0x2e,0x38,0x32,0x33,0x20,0x31,0x38,0x2e,0x31, - 0x34,0x31,0x2c,0x31,0x30,0x2e,0x38,0x32,0x33,0x20, - 0x31,0x38,0x2e,0x31,0x34,0x31,0x2c,0x34,0x2e,0x38, - 0x30,0x37,0x20,0x31,0x36,0x2e,0x35,0x31,0x39,0x2c, - 0x34,0x2e,0x38,0x30,0x37,0x20,0x09,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31, + 0x31,0x2e,0x35,0x32,0x36,0x63,0x33,0x2e,0x34,0x37, + 0x38,0x2c,0x30,0x2c,0x36,0x2e,0x33,0x30,0x37,0x2c, + 0x33,0x2e,0x31,0x33,0x39,0x2c,0x36,0x2e,0x33,0x30, + 0x37,0x2c,0x36,0x2e,0x39,0x39,0x37,0x63,0x30,0x2c, + 0x33,0x2e,0x38,0x36,0x36,0x2d,0x32,0x2e,0x38,0x32, + 0x39,0x2c,0x37,0x2e,0x30,0x31,0x2d,0x36,0x2e,0x33, + 0x30,0x37,0x2c,0x37,0x2e,0x30,0x31,0x48,0x37,0x2e, + 0x37,0x36,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e, + 0x34,0x35,0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x36, + 0x2e,0x32,0x36,0x2d,0x33,0x2e,0x31,0x37,0x36,0x2d, + 0x36,0x2e,0x32,0x36,0x2d,0x37,0x2e,0x30,0x31,0x63, + 0x30,0x2d,0x33,0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e, + 0x38,0x30,0x38,0x2d,0x36,0x2e,0x39,0x36,0x36,0x2c, + 0x36,0x2e,0x32,0x34,0x37,0x2d,0x36,0x2e,0x39,0x39, + 0x37,0x48,0x32,0x39,0x2e,0x32,0x35,0x34,0x20,0x4d, + 0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x30,0x2e, + 0x30,0x32,0x36,0x63,0x2d,0x30,0x2e,0x30,0x32,0x31, + 0x2c,0x30,0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c, + 0x30,0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30, + 0x0d,0x0a,0x09,0x09,0x43,0x33,0x2e,0x34,0x36,0x36, + 0x2c,0x31,0x30,0x2e,0x30,0x36,0x34,0x2c,0x30,0x2c, + 0x31,0x33,0x2e,0x38,0x34,0x36,0x2c,0x30,0x2c,0x31, + 0x38,0x2e,0x35,0x32,0x33,0x73,0x33,0x2e,0x34,0x36, + 0x36,0x2c,0x38,0x2e,0x34,0x37,0x32,0x2c,0x37,0x2e, + 0x37,0x34,0x37,0x2c,0x38,0x2e,0x35,0x31,0x63,0x30, + 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34,0x38,0x34,0x2c, + 0x30,0x2c,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30, + 0x63,0x34,0x2e,0x33,0x31,0x33,0x2c,0x30,0x2c,0x37, + 0x2e,0x38,0x30,0x37,0x2d,0x33,0x2e,0x38,0x31,0x31, + 0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d,0x38,0x2e,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x43,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x31,0x33,0x2e,0x38,0x32,0x33,0x2c, + 0x33,0x33,0x2e,0x35,0x36,0x36,0x2c,0x31,0x30,0x2e, + 0x30,0x32,0x36,0x2c,0x32,0x39,0x2e,0x32,0x35,0x34, + 0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x4c,0x32,0x39, + 0x2e,0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30,0x32, + 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f, + 0x6e,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x70,0x6f,0x69, + 0x6e,0x74,0x73,0x3d,0x22,0x31,0x35,0x2e,0x39,0x32, + 0x2c,0x32,0x32,0x2e,0x32,0x31,0x32,0x20,0x32,0x31, + 0x2e,0x31,0x34,0x31,0x2c,0x32,0x32,0x2e,0x32,0x31, + 0x32,0x20,0x32,0x31,0x2e,0x31,0x34,0x31,0x2c,0x32, + 0x30,0x2e,0x38,0x35,0x20,0x31,0x37,0x2e,0x35,0x34, + 0x33,0x2c,0x32,0x30,0x2e,0x38,0x35,0x20,0x31,0x37, + 0x2e,0x35,0x34,0x33,0x2c,0x31,0x34,0x2e,0x38,0x33, + 0x33,0x20,0x31,0x35,0x2e,0x39,0x32,0x2c,0x31,0x34, + 0x2e,0x38,0x33,0x33,0x20,0x22,0x2f,0x3e,0x0d,0x0a, + 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, + 0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31,0x2c, + 0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36,0x31, + 0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48,0x33, + 0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x56,0x33,0x37, + 0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, + 0x0a }; diff --git a/data/converted/help_button_r_svg.cpp b/data/converted/help_button_r_svg.cpp index b527b5123..f406f30e3 100644 --- a/data/converted/help_button_r_svg.cpp +++ b/data/converted/help_button_r_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_r_svg_size = 1264; -const unsigned char help_button_r_svg_data[1264] = { +const size_t help_button_r_svg_size = 1423; +const unsigned char help_button_r_svg_data[1423] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,106 +29,122 @@ const unsigned char help_button_r_svg_data[1264] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x38,0x2e,0x32,0x35,0x36,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x31,0x37,0x2e,0x30,0x30,0x37,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35,0x36,0x20, - 0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x32,0x35, - 0x36,0x20,0x31,0x37,0x2e,0x30,0x30,0x37,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x33,0x30,0x2e,0x34,0x35,0x2c, - 0x31,0x2e,0x35,0x63,0x33,0x2e,0x34,0x37,0x37,0x2c, - 0x30,0x2c,0x36,0x2e,0x33,0x30,0x36,0x2c,0x33,0x2e, - 0x31,0x33,0x39,0x2c,0x36,0x2e,0x33,0x30,0x36,0x2c, - 0x36,0x2e,0x39,0x39,0x37,0x63,0x30,0x2c,0x33,0x2e, - 0x38,0x36,0x36,0x2d,0x32,0x2e,0x38,0x32,0x39,0x2c, - 0x37,0x2e,0x30,0x31,0x2d,0x36,0x2e,0x33,0x30,0x36, - 0x2c,0x37,0x2e,0x30,0x31,0x48,0x37,0x2e,0x37,0x36, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x34,0x35, - 0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e,0x32, - 0x36,0x2d,0x33,0x2e,0x31,0x37,0x35,0x2d,0x36,0x2e, - 0x32,0x36,0x2d,0x37,0x2e,0x30,0x31,0x43,0x31,0x2e, - 0x35,0x2c,0x34,0x2e,0x36,0x36,0x39,0x2c,0x34,0x2e, - 0x33,0x30,0x38,0x2c,0x31,0x2e,0x35,0x33,0x2c,0x37, - 0x2e,0x37,0x34,0x37,0x2c,0x31,0x2e,0x35,0x48,0x33, - 0x30,0x2e,0x34,0x35,0x20,0x4d,0x33,0x30,0x2e,0x34, - 0x35,0x2c,0x30,0x43,0x33,0x30,0x2e,0x34,0x32,0x38, - 0x2c,0x30,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x30, - 0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x30,0x0d,0x0a, - 0x09,0x09,0x43,0x33,0x2e,0x34,0x36,0x36,0x2c,0x30, - 0x2e,0x30,0x33,0x38,0x2c,0x30,0x2c,0x33,0x2e,0x38, - 0x31,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x34,0x39,0x37, - 0x73,0x33,0x2e,0x34,0x36,0x36,0x2c,0x38,0x2e,0x34, - 0x37,0x33,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c,0x38, - 0x2e,0x35,0x31,0x63,0x30,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x36,0x38,0x31,0x2c,0x30,0x2c,0x32,0x32,0x2e, - 0x37,0x30,0x33,0x2c,0x30,0x63,0x34,0x2e,0x33,0x31, - 0x32,0x2c,0x30,0x2c,0x37,0x2e,0x38,0x30,0x36,0x2d, - 0x33,0x2e,0x38,0x31,0x31,0x2c,0x37,0x2e,0x38,0x30, - 0x36,0x2d,0x38,0x2e,0x35,0x31,0x0d,0x0a,0x09,0x09, - 0x43,0x33,0x38,0x2e,0x32,0x35,0x36,0x2c,0x33,0x2e, - 0x37,0x39,0x36,0x2c,0x33,0x34,0x2e,0x37,0x36,0x32, - 0x2c,0x30,0x2c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30, - 0x4c,0x33,0x30,0x2e,0x34,0x35,0x2c,0x30,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x36,0x2e,0x39, + 0x37,0x33,0x2c,0x31,0x36,0x2e,0x30,0x38,0x36,0x68, + 0x31,0x2e,0x37,0x37,0x39,0x63,0x30,0x2e,0x37,0x32, + 0x32,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x31,0x37,0x2c, + 0x30,0x2e,0x33,0x31,0x32,0x2c,0x31,0x2e,0x31,0x31, + 0x37,0x2c,0x31,0x2e,0x30,0x32,0x33,0x63,0x30,0x2c, + 0x30,0x2e,0x37,0x34,0x37,0x2d,0x30,0x2e,0x33,0x39, + 0x36,0x2c,0x31,0x2e,0x30,0x35,0x39,0x2d,0x31,0x2e, + 0x31,0x31,0x37,0x2c,0x31,0x2e,0x30,0x35,0x39,0x68, + 0x2d,0x31,0x2e,0x37,0x37,0x39,0x56,0x31,0x36,0x2e, + 0x30,0x38,0x36,0x7a,0x0d,0x0a,0x09,0x20,0x4d,0x31, + 0x35,0x2e,0x33,0x35,0x33,0x2c,0x32,0x32,0x2e,0x32, + 0x31,0x32,0x68,0x31,0x2e,0x36,0x32,0x76,0x2d,0x32, + 0x2e,0x38,0x38,0x36,0x68,0x31,0x2e,0x36,0x32,0x35, + 0x63,0x30,0x2e,0x38,0x31,0x36,0x2c,0x30,0x2c,0x31, + 0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e,0x33,0x34,0x32, + 0x2c,0x31,0x2e,0x32,0x33,0x2c,0x31,0x2e,0x31,0x31, + 0x39,0x63,0x30,0x2e,0x30,0x38,0x32,0x2c,0x30,0x2e, + 0x35,0x38,0x38,0x2c,0x30,0x2e,0x30,0x36,0x31,0x2c, + 0x31,0x2e,0x33,0x30,0x33,0x2c,0x30,0x2e,0x32,0x35, + 0x38,0x2c,0x31,0x2e,0x37,0x36,0x38,0x68,0x31,0x2e, + 0x36,0x32,0x31,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e, + 0x32,0x38,0x39,0x2d,0x30,0x2e,0x34,0x31,0x34,0x2d, + 0x30,0x2e,0x32,0x37,0x39,0x2d,0x31,0x2e,0x32,0x38, + 0x2d,0x30,0x2e,0x33,0x31,0x32,0x2d,0x31,0x2e,0x37, + 0x34,0x38,0x63,0x2d,0x30,0x2e,0x30,0x35,0x31,0x2d, + 0x30,0x2e,0x37,0x34,0x34,0x2d,0x30,0x2e,0x32,0x37, + 0x36,0x2d,0x31,0x2e,0x35,0x32,0x31,0x2d,0x31,0x2e, + 0x30,0x37,0x31,0x2d,0x31,0x2e,0x37,0x32,0x37,0x63, + 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x36,0x36,0x2d, + 0x30,0x2e,0x33,0x30,0x33,0x2c,0x31,0x2e,0x31,0x36, + 0x36,0x2d,0x31,0x2e,0x38,0x37,0x34,0x0d,0x0a,0x09, + 0x63,0x30,0x2d,0x31,0x2e,0x31,0x31,0x38,0x2d,0x30, + 0x2e,0x38,0x33,0x37,0x2d,0x32,0x2e,0x30,0x33,0x36, + 0x2d,0x32,0x2e,0x31,0x36,0x2d,0x32,0x2e,0x30,0x33, + 0x36,0x68,0x2d,0x33,0x2e,0x39,0x37,0x38,0x56,0x32, + 0x32,0x2e,0x32,0x31,0x32,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31, + 0x31,0x2e,0x35,0x32,0x36,0x63,0x33,0x2e,0x34,0x37, + 0x38,0x2c,0x30,0x2c,0x36,0x2e,0x33,0x30,0x37,0x2c, + 0x33,0x2e,0x31,0x33,0x39,0x2c,0x36,0x2e,0x33,0x30, + 0x37,0x2c,0x36,0x2e,0x39,0x39,0x36,0x63,0x30,0x2c, + 0x33,0x2e,0x38,0x36,0x36,0x2d,0x32,0x2e,0x38,0x32, + 0x39,0x2c,0x37,0x2e,0x30,0x31,0x31,0x2d,0x36,0x2e, + 0x33,0x30,0x37,0x2c,0x37,0x2e,0x30,0x31,0x31,0x48, + 0x37,0x2e,0x37,0x36,0x0d,0x0a,0x09,0x09,0x63,0x2d, + 0x33,0x2e,0x34,0x35,0x32,0x2d,0x30,0x2e,0x30,0x33, + 0x2d,0x36,0x2e,0x32,0x36,0x2d,0x33,0x2e,0x31,0x37, + 0x36,0x2d,0x36,0x2e,0x32,0x36,0x2d,0x37,0x2e,0x30, + 0x31,0x31,0x63,0x30,0x2d,0x33,0x2e,0x38,0x32,0x37, + 0x2c,0x32,0x2e,0x38,0x30,0x38,0x2d,0x36,0x2e,0x39, + 0x36,0x36,0x2c,0x36,0x2e,0x32,0x34,0x37,0x2d,0x36, + 0x2e,0x39,0x39,0x36,0x48,0x32,0x39,0x2e,0x32,0x35, + 0x34,0x20,0x4d,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c, + 0x31,0x30,0x2e,0x30,0x32,0x36,0x63,0x2d,0x30,0x2e, + 0x30,0x32,0x31,0x2c,0x30,0x2d,0x32,0x31,0x2e,0x35, + 0x30,0x37,0x2c,0x30,0x2d,0x32,0x31,0x2e,0x35,0x30, + 0x37,0x2c,0x30,0x0d,0x0a,0x09,0x09,0x43,0x33,0x2e, + 0x34,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x36,0x33, + 0x2c,0x30,0x2c,0x31,0x33,0x2e,0x38,0x34,0x36,0x2c, + 0x30,0x2c,0x31,0x38,0x2e,0x35,0x32,0x32,0x63,0x30, + 0x2c,0x34,0x2e,0x36,0x37,0x38,0x2c,0x33,0x2e,0x34, + 0x36,0x36,0x2c,0x38,0x2e,0x34,0x37,0x32,0x2c,0x37, + 0x2e,0x37,0x34,0x37,0x2c,0x38,0x2e,0x35,0x31,0x31, + 0x63,0x30,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34,0x38, + 0x34,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x35,0x30,0x37, + 0x2c,0x30,0x63,0x34,0x2e,0x33,0x31,0x33,0x2c,0x30, + 0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d,0x33,0x2e,0x38, + 0x31,0x31,0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d,0x38, + 0x2e,0x35,0x31,0x31,0x0d,0x0a,0x09,0x09,0x53,0x33, + 0x33,0x2e,0x35,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30, + 0x32,0x36,0x2c,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c, + 0x31,0x30,0x2e,0x30,0x32,0x36,0x4c,0x32,0x39,0x2e, + 0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69, + 0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09, 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x37,0x2e,0x35,0x36, - 0x39,0x2c,0x36,0x2e,0x30,0x36,0x37,0x68,0x31,0x2e, - 0x37,0x37,0x39,0x63,0x30,0x2e,0x37,0x32,0x33,0x2c, - 0x30,0x2c,0x31,0x2e,0x31,0x31,0x36,0x2c,0x30,0x2e, - 0x33,0x31,0x31,0x2c,0x31,0x2e,0x31,0x31,0x36,0x2c, - 0x31,0x2e,0x30,0x32,0x34,0x63,0x30,0x2c,0x30,0x2e, - 0x37,0x34,0x37,0x2d,0x30,0x2e,0x33,0x39,0x34,0x2c, - 0x31,0x2e,0x30,0x35,0x38,0x2d,0x31,0x2e,0x31,0x31, - 0x36,0x2c,0x31,0x2e,0x30,0x35,0x38,0x68,0x2d,0x31, - 0x2e,0x37,0x37,0x39,0x56,0x36,0x2e,0x30,0x36,0x37, - 0x7a,0x0d,0x0a,0x09,0x20,0x4d,0x31,0x35,0x2e,0x39, - 0x34,0x39,0x2c,0x31,0x32,0x2e,0x31,0x39,0x34,0x68, - 0x31,0x2e,0x36,0x32,0x31,0x56,0x39,0x2e,0x33,0x30, - 0x37,0x68,0x31,0x2e,0x36,0x32,0x35,0x63,0x30,0x2e, - 0x38,0x31,0x36,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x31, - 0x36,0x2c,0x30,0x2e,0x33,0x34,0x32,0x2c,0x31,0x2e, - 0x32,0x32,0x39,0x2c,0x31,0x2e,0x31,0x31,0x38,0x63, - 0x30,0x2e,0x30,0x38,0x32,0x2c,0x30,0x2e,0x35,0x39, - 0x2c,0x30,0x2e,0x30,0x36,0x32,0x2c,0x31,0x2e,0x33, - 0x30,0x35,0x2c,0x30,0x2e,0x32,0x35,0x38,0x2c,0x31, - 0x2e,0x37,0x37,0x68,0x31,0x2e,0x36,0x32,0x32,0x0d, - 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x32,0x39,0x2d,0x30, - 0x2e,0x34,0x31,0x34,0x2d,0x30,0x2e,0x32,0x38,0x2d, - 0x31,0x2e,0x32,0x38,0x33,0x2d,0x30,0x2e,0x33,0x31, - 0x31,0x2d,0x31,0x2e,0x37,0x34,0x38,0x63,0x2d,0x30, - 0x2e,0x30,0x35,0x32,0x2d,0x30,0x2e,0x37,0x34,0x36, - 0x2d,0x30,0x2e,0x32,0x37,0x38,0x2d,0x31,0x2e,0x35, - 0x32,0x32,0x2d,0x31,0x2e,0x30,0x37,0x33,0x2d,0x31, - 0x2e,0x37,0x32,0x38,0x63,0x30,0x2c,0x30,0x2c,0x31, - 0x2e,0x31,0x36,0x37,0x2d,0x30,0x2e,0x33,0x30,0x32, - 0x2c,0x31,0x2e,0x31,0x36,0x37,0x2d,0x31,0x2e,0x38, - 0x37,0x34,0x0d,0x0a,0x09,0x63,0x30,0x2d,0x31,0x2e, - 0x31,0x31,0x38,0x2d,0x30,0x2e,0x38,0x33,0x36,0x2d, - 0x32,0x2e,0x30,0x33,0x37,0x2d,0x32,0x2e,0x31,0x36, - 0x2d,0x32,0x2e,0x30,0x33,0x37,0x68,0x2d,0x33,0x2e, - 0x39,0x37,0x38,0x56,0x31,0x32,0x2e,0x31,0x39,0x34, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0d,0x0a + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36, + 0x31,0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38, + 0x36,0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31, + 0x48,0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x56, + 0x33,0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0d,0x0a }; diff --git a/data/converted/help_button_select_svg.cpp b/data/converted/help_button_select_svg.cpp index 1040b9bdd..805d347d0 100644 --- a/data/converted/help_button_select_svg.cpp +++ b/data/converted/help_button_select_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_select_svg_size = 1693; -const unsigned char help_button_select_svg_data[1693] = { +const size_t help_button_select_svg_size = 1903; +const unsigned char help_button_select_svg_data[1903] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,149 +29,170 @@ const unsigned char help_button_select_svg_data[1693] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x38,0x2e,0x34,0x34,0x36,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x31,0x39,0x2e,0x31,0x33,0x38,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34,0x36,0x20, - 0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34, - 0x36,0x20,0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x34,0x2e,0x36,0x30,0x31,0x2c,0x31,0x31,0x2e,0x32, - 0x32,0x33,0x48,0x33,0x2e,0x38,0x34,0x35,0x43,0x31, - 0x2e,0x37,0x32,0x32,0x2c,0x31,0x31,0x2e,0x32,0x32, - 0x33,0x2c,0x30,0x2c,0x31,0x32,0x2e,0x39,0x39,0x34, - 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x31,0x38,0x73,0x31, - 0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x38, - 0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39, - 0x35,0x38,0x68,0x33,0x30,0x2e,0x37,0x35,0x36,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x32,0x2e,0x31,0x32, - 0x33,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d, - 0x31,0x2e,0x37,0x37,0x32,0x2c,0x33,0x2e,0x38,0x34, - 0x34,0x2d,0x33,0x2e,0x39,0x35,0x38,0x53,0x33,0x36, - 0x2e,0x37,0x32,0x34,0x2c,0x31,0x31,0x2e,0x32,0x32, - 0x33,0x2c,0x33,0x34,0x2e,0x36,0x30,0x31,0x2c,0x31, - 0x31,0x2e,0x32,0x32,0x33,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x33,0x35,0x2e,0x30,0x32,0x39,0x2c,0x37, - 0x2e,0x36,0x34,0x38,0x68,0x31,0x2e,0x32,0x32,0x34, - 0x56,0x31,0x2e,0x33,0x37,0x35,0x68,0x32,0x2e,0x31, - 0x39,0x33,0x56,0x30,0x2e,0x32,0x30,0x39,0x68,0x2d, - 0x35,0x2e,0x36,0x30,0x39,0x76,0x31,0x2e,0x31,0x36, - 0x36,0x68,0x32,0x2e,0x31,0x39,0x32,0x56,0x37,0x2e, - 0x36,0x34,0x38,0x7a,0x20,0x4d,0x33,0x32,0x2e,0x30, - 0x33,0x33,0x2c,0x32,0x2e,0x39,0x35,0x39,0x0d,0x0a, - 0x09,0x09,0x43,0x33,0x31,0x2e,0x39,0x30,0x31,0x2c, - 0x31,0x2e,0x33,0x35,0x33,0x2c,0x33,0x30,0x2e,0x38, - 0x35,0x35,0x2c,0x30,0x2c,0x32,0x38,0x2e,0x38,0x34, - 0x33,0x2c,0x30,0x63,0x2d,0x32,0x2e,0x32,0x39,0x38, - 0x2c,0x30,0x2d,0x33,0x2e,0x32,0x36,0x34,0x2c,0x31, - 0x2e,0x38,0x33,0x32,0x2d,0x33,0x2e,0x32,0x36,0x34, - 0x2c,0x33,0x2e,0x39,0x32,0x39,0x63,0x30,0x2c,0x32, - 0x2e,0x30,0x39,0x34,0x2c,0x31,0x2e,0x30,0x30,0x38, - 0x2c,0x33,0x2e,0x39,0x32,0x39,0x2c,0x33,0x2e,0x31, - 0x31,0x37,0x2c,0x33,0x2e,0x39,0x32,0x39,0x0d,0x0a, - 0x09,0x09,0x63,0x32,0x2e,0x34,0x30,0x34,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x36,0x34,0x2d,0x31,0x2e,0x35, - 0x37,0x33,0x2c,0x33,0x2e,0x33,0x33,0x36,0x2d,0x33, - 0x2e,0x30,0x35,0x35,0x68,0x2d,0x31,0x2e,0x33,0x32, - 0x35,0x63,0x2d,0x30,0x2e,0x30,0x39,0x39,0x2c,0x30, - 0x2e,0x37,0x38,0x32,0x2d,0x30,0x2e,0x35,0x32,0x34, - 0x2c,0x31,0x2e,0x38,0x39,0x2d,0x31,0x2e,0x38,0x2c, - 0x31,0x2e,0x38,0x39,0x63,0x2d,0x31,0x2e,0x32,0x31, - 0x31,0x2c,0x30,0x2d,0x32,0x2e,0x30,0x35,0x33,0x2d, - 0x31,0x2e,0x30,0x37,0x38,0x2d,0x32,0x2e,0x30,0x35, - 0x33,0x2d,0x32,0x2e,0x36,0x33,0x0d,0x0a,0x09,0x09, - 0x63,0x30,0x2d,0x31,0x2e,0x39,0x33,0x39,0x2c,0x30, - 0x2e,0x38,0x34,0x32,0x2d,0x32,0x2e,0x38,0x39,0x38, - 0x2c,0x31,0x2e,0x39,0x37,0x31,0x2d,0x32,0x2e,0x38, - 0x39,0x38,0x63,0x31,0x2e,0x30,0x33,0x31,0x2c,0x30, - 0x2c,0x31,0x2e,0x37,0x36,0x2c,0x30,0x2e,0x36,0x36, - 0x37,0x2c,0x31,0x2e,0x38,0x38,0x32,0x2c,0x31,0x2e, - 0x37,0x39,0x34,0x48,0x33,0x32,0x2e,0x30,0x33,0x33, - 0x7a,0x20,0x4d,0x31,0x39,0x2e,0x34,0x33,0x37,0x2c, - 0x37,0x2e,0x36,0x34,0x38,0x68,0x35,0x2e,0x31,0x33, - 0x35,0x56,0x36,0x2e,0x34,0x38,0x33,0x68,0x2d,0x33, - 0x2e,0x39,0x31,0x31,0x56,0x34,0x2e,0x34,0x31,0x39, - 0x68,0x33,0x2e,0x36,0x39,0x31,0x56,0x33,0x2e,0x32, - 0x35,0x33,0x0d,0x0a,0x09,0x09,0x68,0x2d,0x33,0x2e, - 0x36,0x39,0x31,0x56,0x31,0x2e,0x33,0x37,0x35,0x68, - 0x33,0x2e,0x38,0x34,0x35,0x56,0x30,0x2e,0x32,0x30, - 0x39,0x68,0x2d,0x35,0x2e,0x30,0x36,0x39,0x56,0x37, - 0x2e,0x36,0x34,0x38,0x7a,0x20,0x4d,0x31,0x33,0x2e, - 0x35,0x37,0x31,0x2c,0x37,0x2e,0x36,0x34,0x38,0x68, - 0x34,0x2e,0x37,0x37,0x35,0x56,0x36,0x2e,0x34,0x32, - 0x32,0x68,0x2d,0x33,0x2e,0x35,0x35,0x56,0x30,0x2e, - 0x32,0x30,0x39,0x68,0x2d,0x31,0x2e,0x32,0x32,0x35, - 0x56,0x37,0x2e,0x36,0x34,0x38,0x7a,0x20,0x4d,0x37, - 0x2e,0x31,0x2c,0x37,0x2e,0x36,0x34,0x38,0x68,0x35, - 0x2e,0x31,0x33,0x36,0x56,0x36,0x2e,0x34,0x38,0x33, - 0x68,0x2d,0x33,0x2e,0x39,0x31,0x56,0x34,0x2e,0x34, - 0x31,0x39,0x0d,0x0a,0x09,0x09,0x68,0x33,0x2e,0x36, - 0x38,0x39,0x56,0x33,0x2e,0x32,0x35,0x33,0x48,0x38, - 0x2e,0x33,0x32,0x36,0x56,0x31,0x2e,0x33,0x37,0x35, - 0x68,0x33,0x2e,0x38,0x34,0x36,0x56,0x30,0x2e,0x32, - 0x30,0x39,0x48,0x37,0x2e,0x31,0x56,0x37,0x2e,0x36, - 0x34,0x38,0x7a,0x20,0x4d,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x32,0x2e,0x33,0x30,0x32,0x63,0x30,0x2c,0x33, - 0x2e,0x30,0x35,0x32,0x2c,0x34,0x2e,0x33,0x30,0x33, - 0x2c,0x31,0x2e,0x34,0x34,0x36,0x2c,0x34,0x2e,0x33, - 0x30,0x33,0x2c,0x33,0x2e,0x32,0x39,0x63,0x30,0x2c, - 0x30,0x2e,0x38,0x31,0x38,0x2d,0x30,0x2e,0x36,0x39, - 0x35,0x2c,0x31,0x2e,0x31,0x30,0x31,0x2d,0x31,0x2e, - 0x34,0x34,0x2c,0x31,0x2e,0x31,0x30,0x31,0x0d,0x0a, - 0x09,0x09,0x63,0x2d,0x31,0x2e,0x30,0x30,0x36,0x2c, - 0x30,0x2d,0x31,0x2e,0x36,0x34,0x34,0x2d,0x30,0x2e, - 0x34,0x37,0x32,0x2d,0x31,0x2e,0x36,0x37,0x37,0x2d, - 0x31,0x2e,0x34,0x35,0x34,0x48,0x30,0x2e,0x31,0x38, - 0x31,0x63,0x30,0x2e,0x30,0x31,0x36,0x2c,0x31,0x2e, - 0x35,0x36,0x34,0x2c,0x30,0x2e,0x38,0x35,0x38,0x2c, - 0x32,0x2e,0x36,0x31,0x39,0x2c,0x32,0x2e,0x39,0x36, - 0x31,0x2c,0x32,0x2e,0x36,0x31,0x39,0x63,0x31,0x2e, - 0x32,0x34,0x33,0x2c,0x30,0x2c,0x32,0x2e,0x38,0x30, - 0x35,0x2d,0x30,0x2e,0x35,0x30,0x31,0x2c,0x32,0x2e, - 0x38,0x30,0x35,0x2d,0x32,0x2e,0x34,0x32,0x0d,0x0a, - 0x09,0x09,0x63,0x30,0x2d,0x33,0x2e,0x31,0x37,0x38, - 0x2d,0x34,0x2e,0x33,0x35,0x32,0x2d,0x31,0x2e,0x35, - 0x30,0x32,0x2d,0x34,0x2e,0x33,0x35,0x32,0x2d,0x33, - 0x2e,0x32,0x35,0x63,0x30,0x2d,0x30,0x2e,0x36,0x39, - 0x39,0x2c,0x30,0x2e,0x35,0x34,0x2d,0x31,0x2e,0x30, - 0x32,0x33,0x2c,0x31,0x2e,0x33,0x35,0x37,0x2d,0x31, - 0x2e,0x30,0x32,0x33,0x63,0x31,0x2e,0x30,0x32,0x33, - 0x2c,0x30,0x2c,0x31,0x2e,0x34,0x33,0x33,0x2c,0x30, - 0x2e,0x36,0x32,0x35,0x2c,0x31,0x2e,0x34,0x37,0x34, - 0x2c,0x31,0x2e,0x32,0x68,0x31,0x2e,0x33,0x32,0x35, - 0x43,0x35,0x2e,0x35,0x39,0x36,0x2c,0x30,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x30, - 0x2c,0x32,0x2e,0x38,0x39,0x36,0x2c,0x30,0x0d,0x0a, - 0x09,0x09,0x43,0x31,0x2e,0x34,0x37,0x32,0x2c,0x30, - 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x36, - 0x34,0x35,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, - 0x2e,0x33,0x30,0x32,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, + 0x33,0x2e,0x32,0x31,0x37,0x2c,0x31,0x39,0x2e,0x31, + 0x31,0x38,0x48,0x33,0x2e,0x38,0x34,0x35,0x43,0x31, + 0x2e,0x37,0x32,0x32,0x2c,0x31,0x39,0x2e,0x31,0x31, + 0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e,0x38,0x39,0x2c, + 0x30,0x2c,0x32,0x33,0x2e,0x30,0x37,0x35,0x63,0x30, + 0x2c,0x32,0x2e,0x31,0x38,0x36,0x2c,0x31,0x2e,0x37, + 0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x37,0x2c,0x33, + 0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39,0x35,0x37, + 0x68,0x32,0x39,0x2e,0x33,0x37,0x32,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x32,0x2e,0x31,0x32,0x33,0x2c,0x30, + 0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x31,0x2e,0x37, + 0x37,0x31,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x33, + 0x2e,0x39,0x35,0x37,0x43,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x32,0x30,0x2e,0x38,0x38,0x39,0x2c,0x33, + 0x35,0x2e,0x33,0x34,0x2c,0x31,0x39,0x2e,0x31,0x31, + 0x38,0x2c,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c,0x31, + 0x39,0x2e,0x31,0x31,0x38,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, + 0x33,0x2e,0x37,0x35,0x37,0x2c,0x31,0x35,0x2e,0x35, + 0x34,0x39,0x68,0x31,0x2e,0x31,0x38,0x36,0x56,0x39, + 0x2e,0x34,0x37,0x34,0x68,0x32,0x2e,0x31,0x32,0x34, + 0x56,0x38,0x2e,0x33,0x34,0x35,0x68,0x2d,0x35,0x2e, + 0x34,0x33,0x33,0x76,0x31,0x2e,0x31,0x32,0x38,0x68, + 0x32,0x2e,0x31,0x32,0x33,0x56,0x31,0x35,0x2e,0x35, + 0x34,0x39,0x7a,0x20,0x4d,0x33,0x30,0x2e,0x38,0x35, + 0x35,0x2c,0x31,0x31,0x2e,0x30,0x30,0x37,0x0d,0x0a, + 0x09,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2d,0x31, + 0x2e,0x35,0x35,0x34,0x2d,0x31,0x2e,0x31,0x34,0x31, + 0x2d,0x32,0x2e,0x38,0x36,0x34,0x2d,0x33,0x2e,0x30, + 0x38,0x37,0x2d,0x32,0x2e,0x38,0x36,0x34,0x63,0x2d, + 0x32,0x2e,0x32,0x32,0x35,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x36,0x32,0x2c,0x31,0x2e,0x37,0x37,0x33,0x2d, + 0x33,0x2e,0x31,0x36,0x32,0x2c,0x33,0x2e,0x38,0x30, + 0x34,0x63,0x30,0x2c,0x32,0x2e,0x30,0x32,0x37,0x2c, + 0x30,0x2e,0x39,0x37,0x38,0x2c,0x33,0x2e,0x38,0x30, + 0x34,0x2c,0x33,0x2e,0x30,0x32,0x31,0x2c,0x33,0x2e, + 0x38,0x30,0x34,0x0d,0x0a,0x09,0x63,0x32,0x2e,0x33, + 0x32,0x38,0x2c,0x30,0x2c,0x33,0x2e,0x30,0x36,0x33, + 0x2d,0x31,0x2e,0x35,0x32,0x31,0x2c,0x33,0x2e,0x32, + 0x32,0x39,0x2d,0x32,0x2e,0x39,0x35,0x38,0x68,0x2d, + 0x31,0x2e,0x32,0x38,0x31,0x63,0x2d,0x30,0x2e,0x30, + 0x39,0x38,0x2c,0x30,0x2e,0x37,0x35,0x37,0x2d,0x30, + 0x2e,0x35,0x30,0x39,0x2c,0x31,0x2e,0x38,0x32,0x39, + 0x2d,0x31,0x2e,0x37,0x34,0x33,0x2c,0x31,0x2e,0x38, + 0x32,0x39,0x63,0x2d,0x31,0x2e,0x31,0x37,0x35,0x2c, + 0x30,0x2d,0x31,0x2e,0x39,0x38,0x38,0x2d,0x31,0x2e, + 0x30,0x34,0x32,0x2d,0x31,0x2e,0x39,0x38,0x38,0x2d, + 0x32,0x2e,0x35,0x34,0x36,0x0d,0x0a,0x09,0x63,0x30, + 0x2d,0x31,0x2e,0x38,0x37,0x37,0x2c,0x30,0x2e,0x38, + 0x31,0x33,0x2d,0x32,0x2e,0x38,0x30,0x37,0x2c,0x31, + 0x2e,0x39,0x30,0x38,0x2d,0x32,0x2e,0x38,0x30,0x37, + 0x63,0x30,0x2e,0x39,0x39,0x39,0x2c,0x30,0x2c,0x31, + 0x2e,0x37,0x30,0x34,0x2c,0x30,0x2e,0x36,0x34,0x36, + 0x2c,0x31,0x2e,0x38,0x32,0x33,0x2c,0x31,0x2e,0x37, + 0x33,0x37,0x4c,0x33,0x30,0x2e,0x38,0x35,0x35,0x2c, + 0x31,0x31,0x2e,0x30,0x30,0x37,0x4c,0x33,0x30,0x2e, + 0x38,0x35,0x35,0x2c,0x31,0x31,0x2e,0x30,0x30,0x37, + 0x7a,0x20,0x4d,0x31,0x38,0x2e,0x36,0x35,0x39,0x2c, + 0x31,0x35,0x2e,0x35,0x34,0x39,0x68,0x34,0x2e,0x39, + 0x37,0x33,0x56,0x31,0x34,0x2e,0x34,0x32,0x68,0x2d, + 0x33,0x2e,0x37,0x38,0x36,0x0d,0x0a,0x09,0x76,0x2d, + 0x31,0x2e,0x39,0x39,0x38,0x68,0x33,0x2e,0x35,0x37, + 0x33,0x76,0x2d,0x31,0x2e,0x31,0x32,0x39,0x68,0x2d, + 0x33,0x2e,0x35,0x37,0x33,0x56,0x39,0x2e,0x34,0x37, + 0x34,0x68,0x33,0x2e,0x37,0x32,0x31,0x56,0x38,0x2e, + 0x33,0x34,0x35,0x48,0x31,0x38,0x2e,0x36,0x36,0x4c, + 0x31,0x38,0x2e,0x36,0x35,0x39,0x2c,0x31,0x35,0x2e, + 0x35,0x34,0x39,0x4c,0x31,0x38,0x2e,0x36,0x35,0x39, + 0x2c,0x31,0x35,0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d, + 0x31,0x32,0x2e,0x39,0x37,0x39,0x2c,0x31,0x35,0x2e, + 0x35,0x34,0x39,0x68,0x34,0x2e,0x36,0x32,0x35,0x76, + 0x2d,0x31,0x2e,0x31,0x38,0x38,0x68,0x2d,0x33,0x2e, + 0x34,0x33,0x37,0x56,0x38,0x2e,0x33,0x34,0x35,0x0d, + 0x0a,0x09,0x68,0x2d,0x31,0x2e,0x31,0x38,0x38,0x56, + 0x31,0x35,0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d,0x36, + 0x2e,0x37,0x31,0x34,0x2c,0x31,0x35,0x2e,0x35,0x34, + 0x39,0x68,0x34,0x2e,0x39,0x37,0x34,0x56,0x31,0x34, + 0x2e,0x34,0x32,0x48,0x37,0x2e,0x39,0x30,0x32,0x76, + 0x2d,0x31,0x2e,0x39,0x39,0x38,0x68,0x33,0x2e,0x35, + 0x37,0x32,0x76,0x2d,0x31,0x2e,0x31,0x32,0x39,0x48, + 0x37,0x2e,0x39,0x30,0x32,0x56,0x39,0x2e,0x34,0x37, + 0x34,0x68,0x33,0x2e,0x37,0x32,0x35,0x56,0x38,0x2e, + 0x33,0x34,0x35,0x48,0x36,0x2e,0x37,0x31,0x34,0x56, + 0x31,0x35,0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d,0x30, + 0x2e,0x31,0x34,0x39,0x2c,0x31,0x30,0x2e,0x33,0x37, + 0x32,0x0d,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x39, + 0x35,0x35,0x2c,0x34,0x2e,0x31,0x36,0x37,0x2c,0x31, + 0x2e,0x33,0x39,0x39,0x2c,0x34,0x2e,0x31,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x38,0x36,0x63,0x30,0x2c,0x30, + 0x2e,0x37,0x39,0x32,0x2d,0x30,0x2e,0x36,0x37,0x33, + 0x2c,0x31,0x2e,0x30,0x36,0x34,0x2d,0x31,0x2e,0x33, + 0x39,0x35,0x2c,0x31,0x2e,0x30,0x36,0x34,0x63,0x2d, + 0x30,0x2e,0x39,0x37,0x35,0x2c,0x30,0x2d,0x31,0x2e, + 0x35,0x39,0x31,0x2d,0x30,0x2e,0x34,0x35,0x36,0x2d, + 0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x34,0x30, + 0x37,0x48,0x30,0x2e,0x30,0x31,0x35,0x0d,0x0a,0x09, + 0x63,0x30,0x2e,0x30,0x31,0x35,0x2c,0x31,0x2e,0x35, + 0x31,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, + 0x2e,0x35,0x33,0x35,0x2c,0x32,0x2e,0x38,0x36,0x37, + 0x2c,0x32,0x2e,0x35,0x33,0x35,0x63,0x31,0x2e,0x32, + 0x30,0x35,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x31,0x36, + 0x2d,0x30,0x2e,0x34,0x38,0x34,0x2c,0x32,0x2e,0x37, + 0x31,0x36,0x2d,0x32,0x2e,0x33,0x34,0x33,0x63,0x30, + 0x2d,0x33,0x2e,0x30,0x37,0x37,0x2d,0x34,0x2e,0x32, + 0x31,0x33,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x34, + 0x2e,0x32,0x31,0x33,0x2d,0x33,0x2e,0x31,0x34,0x36, + 0x0d,0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x37, + 0x37,0x2c,0x30,0x2e,0x35,0x32,0x33,0x2d,0x30,0x2e, + 0x39,0x39,0x31,0x2c,0x31,0x2e,0x33,0x31,0x33,0x2d, + 0x30,0x2e,0x39,0x39,0x31,0x63,0x30,0x2e,0x39,0x39, + 0x31,0x2c,0x30,0x2c,0x31,0x2e,0x33,0x38,0x38,0x2c, + 0x30,0x2e,0x36,0x30,0x35,0x2c,0x31,0x2e,0x34,0x32, + 0x38,0x2c,0x31,0x2e,0x31,0x36,0x33,0x48,0x35,0x2e, + 0x34,0x31,0x63,0x2d,0x30,0x2e,0x31,0x35,0x32,0x2d, + 0x32,0x2e,0x30,0x39,0x31,0x2d,0x31,0x2e,0x38,0x39, + 0x35,0x2d,0x32,0x2e,0x32,0x39,0x2d,0x32,0x2e,0x37, + 0x36,0x36,0x2d,0x32,0x2e,0x32,0x39,0x0d,0x0a,0x09, + 0x43,0x31,0x2e,0x32,0x36,0x36,0x2c,0x38,0x2e,0x31, + 0x34,0x33,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x38, + 0x2e,0x37,0x36,0x37,0x2c,0x30,0x2e,0x31,0x34,0x39, + 0x2c,0x31,0x30,0x2e,0x33,0x37,0x32,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69, + 0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36, + 0x31,0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38, + 0x36,0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31, + 0x48,0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x56, + 0x33,0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, 0x3e,0x0d,0x0a }; diff --git a/data/converted/help_button_start_svg.cpp b/data/converted/help_button_start_svg.cpp index eb92ba896..e3c1699e1 100644 --- a/data/converted/help_button_start_svg.cpp +++ b/data/converted/help_button_start_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_start_svg_size = 1708; -const unsigned char help_button_start_svg_data[1708] = { +const size_t help_button_start_svg_size = 1927; +const unsigned char help_button_start_svg_data[1927] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,150 +29,172 @@ const unsigned char help_button_start_svg_data[1708] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x38,0x2e,0x34,0x34,0x36,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x31,0x39,0x2e,0x31,0x33,0x38,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34,0x36,0x20, - 0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x38,0x2e,0x34,0x34, - 0x36,0x20,0x31,0x39,0x2e,0x31,0x33,0x38,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x30, + 0x36,0x35,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68, + 0x31,0x2e,0x34,0x33,0x38,0x56,0x39,0x2e,0x34,0x37, + 0x31,0x68,0x32,0x2e,0x35,0x36,0x33,0x56,0x38,0x2e, + 0x33,0x34,0x31,0x68,0x2d,0x36,0x2e,0x35,0x36,0x33, + 0x76,0x31,0x2e,0x31,0x33,0x68,0x32,0x2e,0x35,0x36, + 0x33,0x4c,0x33,0x33,0x2e,0x30,0x36,0x35,0x2c,0x31, + 0x35,0x2e,0x35,0x34,0x38,0x4c,0x33,0x33,0x2e,0x30, + 0x36,0x35,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x7a, + 0x20,0x4d,0x32,0x34,0x2e,0x33,0x35,0x31,0x2c,0x31, + 0x31,0x2e,0x35,0x37,0x33,0x0d,0x0a,0x09,0x56,0x39, + 0x2e,0x34,0x37,0x31,0x68,0x32,0x2e,0x34,0x38,0x32, + 0x63,0x30,0x2e,0x37,0x35,0x35,0x2c,0x30,0x2c,0x31, + 0x2e,0x32,0x32,0x36,0x2c,0x30,0x2e,0x32,0x39,0x32, + 0x2c,0x31,0x2e,0x32,0x32,0x36,0x2c,0x31,0x2e,0x30, + 0x33,0x39,0x63,0x30,0x2c,0x30,0x2e,0x38,0x30,0x38, + 0x2d,0x30,0x2e,0x34,0x33,0x32,0x2c,0x31,0x2e,0x30, + 0x36,0x33,0x2d,0x31,0x2e,0x32,0x32,0x36,0x2c,0x31, + 0x2e,0x30,0x36,0x33,0x48,0x32,0x34,0x2e,0x33,0x35, + 0x31,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x39,0x31,0x37, + 0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31,0x2e, + 0x34,0x33,0x34,0x76,0x2d,0x32,0x2e,0x38,0x34,0x36, + 0x68,0x32,0x2e,0x34,0x34,0x33,0x0d,0x0a,0x09,0x63, + 0x31,0x2e,0x30,0x35,0x33,0x2c,0x30,0x2c,0x31,0x2e, + 0x31,0x38,0x38,0x2c,0x30,0x2e,0x37,0x32,0x37,0x2c, + 0x31,0x2e,0x31,0x38,0x38,0x2c,0x31,0x2e,0x37,0x35, + 0x35,0x63,0x30,0x2c,0x30,0x2e,0x35,0x32,0x37,0x2c, + 0x30,0x2e,0x30,0x36,0x38,0x2c,0x30,0x2e,0x38,0x39, + 0x2c,0x30,0x2e,0x31,0x37,0x34,0x2c,0x31,0x2e,0x30, + 0x39,0x31,0x68,0x31,0x2e,0x35,0x35,0x31,0x63,0x2d, + 0x30,0x2e,0x32,0x38,0x31,0x2d,0x30,0x2e,0x33,0x39, + 0x34,0x2d,0x30,0x2e,0x32,0x39,0x2d,0x31,0x2e,0x31, + 0x39,0x39,0x2d,0x30,0x2e,0x32,0x39,0x2d,0x31,0x2e, + 0x35,0x34,0x36,0x0d,0x0a,0x09,0x63,0x30,0x2d,0x31, + 0x2e,0x30,0x31,0x38,0x2d,0x30,0x2e,0x31,0x37,0x39, + 0x2d,0x31,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e,0x39, + 0x39,0x34,0x2d,0x31,0x2e,0x39,0x34,0x35,0x76,0x2d, + 0x30,0x2e,0x30,0x32,0x31,0x63,0x30,0x2e,0x36,0x34, + 0x33,0x2d,0x30,0x2e,0x32,0x31,0x31,0x2c,0x31,0x2e, + 0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x39,0x37,0x2c, + 0x31,0x2e,0x31,0x32,0x38,0x2d,0x31,0x2e,0x37,0x33, + 0x37,0x63,0x30,0x2d,0x31,0x2e,0x31,0x31,0x39,0x2d, + 0x30,0x2e,0x35,0x36,0x33,0x2d,0x31,0x2e,0x39,0x35, + 0x34,0x2d,0x32,0x2e,0x33,0x30,0x35,0x2d,0x31,0x2e, + 0x39,0x35,0x34,0x68,0x2d,0x34,0x2e,0x33,0x32,0x37, + 0x0d,0x0a,0x09,0x4c,0x32,0x32,0x2e,0x39,0x31,0x37, + 0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x4c,0x32,0x32, + 0x2e,0x39,0x31,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, + 0x38,0x7a,0x20,0x4d,0x31,0x34,0x2e,0x30,0x33,0x32, + 0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31,0x2e, + 0x35,0x35,0x31,0x6c,0x30,0x2e,0x37,0x30,0x38,0x2d, + 0x31,0x2e,0x37,0x38,0x36,0x68,0x33,0x2e,0x32,0x31, + 0x37,0x6c,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x2e, + 0x37,0x38,0x36,0x68,0x31,0x2e,0x36,0x30,0x32,0x6c, + 0x2d,0x33,0x2e,0x30,0x34,0x35,0x2d,0x37,0x2e,0x32, + 0x30,0x37,0x68,0x2d,0x31,0x2e,0x37,0x30,0x34,0x4c, + 0x31,0x34,0x2e,0x30,0x33,0x32,0x2c,0x31,0x35,0x2e, + 0x35,0x34,0x38,0x7a,0x0d,0x0a,0x09,0x20,0x4d,0x31, + 0x36,0x2e,0x37,0x32,0x33,0x2c,0x31,0x32,0x2e,0x36, + 0x33,0x32,0x6c,0x31,0x2e,0x31,0x38,0x37,0x2d,0x33, + 0x2e,0x30,0x34,0x32,0x6c,0x31,0x2e,0x31,0x36,0x38, + 0x2c,0x33,0x2e,0x30,0x34,0x32,0x48,0x31,0x36,0x2e, + 0x37,0x32,0x33,0x7a,0x20,0x4d,0x39,0x2e,0x39,0x39, + 0x32,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31, + 0x2e,0x34,0x33,0x34,0x56,0x39,0x2e,0x34,0x37,0x31, + 0x68,0x32,0x2e,0x35,0x36,0x37,0x56,0x38,0x2e,0x33, + 0x34,0x31,0x48,0x37,0x2e,0x34,0x32,0x35,0x76,0x31, + 0x2e,0x31,0x33,0x68,0x32,0x2e,0x35,0x36,0x37,0x56, + 0x31,0x35,0x2e,0x35,0x34,0x38,0x7a,0x20,0x4d,0x30, + 0x2e,0x31,0x38,0x37,0x2c,0x31,0x30,0x2e,0x33,0x36, + 0x38,0x0d,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x39, + 0x35,0x36,0x2c,0x35,0x2e,0x30,0x33,0x36,0x2c,0x31, + 0x2e,0x34,0x30,0x31,0x2c,0x35,0x2e,0x30,0x33,0x36, + 0x2c,0x33,0x2e,0x31,0x38,0x38,0x63,0x30,0x2c,0x30, + 0x2e,0x37,0x39,0x32,0x2d,0x30,0x2e,0x38,0x31,0x33, + 0x2c,0x31,0x2e,0x30,0x36,0x34,0x2d,0x31,0x2e,0x36, + 0x38,0x34,0x2c,0x31,0x2e,0x30,0x36,0x34,0x63,0x2d, + 0x31,0x2e,0x31,0x37,0x38,0x2c,0x30,0x2d,0x31,0x2e, + 0x39,0x32,0x33,0x2d,0x30,0x2e,0x34,0x35,0x36,0x2d, + 0x31,0x2e,0x39,0x36,0x33,0x2d,0x31,0x2e,0x34,0x30, + 0x37,0x48,0x30,0x2e,0x30,0x32,0x36,0x0d,0x0a,0x09, + 0x63,0x30,0x2e,0x30,0x32,0x2c,0x31,0x2e,0x35,0x31, + 0x36,0x2c,0x31,0x2e,0x30,0x30,0x35,0x2c,0x32,0x2e, + 0x35,0x33,0x38,0x2c,0x33,0x2e,0x34,0x36,0x38,0x2c, + 0x32,0x2e,0x35,0x33,0x38,0x63,0x31,0x2e,0x34,0x35, + 0x35,0x2c,0x30,0x2c,0x33,0x2e,0x32,0x38,0x31,0x2d, + 0x30,0x2e,0x34,0x38,0x36,0x2c,0x33,0x2e,0x32,0x38, + 0x31,0x2d,0x32,0x2e,0x33,0x34,0x35,0x63,0x30,0x2d, + 0x33,0x2e,0x30,0x37,0x39,0x2d,0x35,0x2e,0x30,0x39, + 0x33,0x2d,0x31,0x2e,0x34,0x35,0x34,0x2d,0x35,0x2e, + 0x30,0x39,0x33,0x2d,0x33,0x2e,0x31,0x34,0x38,0x0d, + 0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x37,0x36, + 0x2c,0x30,0x2e,0x36,0x33,0x32,0x2d,0x30,0x2e,0x39, + 0x38,0x38,0x2c,0x31,0x2e,0x35,0x38,0x39,0x2d,0x30, + 0x2e,0x39,0x38,0x38,0x63,0x31,0x2e,0x31,0x39,0x36, + 0x2c,0x30,0x2c,0x31,0x2e,0x36,0x37,0x36,0x2c,0x30, + 0x2e,0x36,0x30,0x34,0x2c,0x31,0x2e,0x37,0x32,0x35, + 0x2c,0x31,0x2e,0x31,0x36,0x31,0x68,0x31,0x2e,0x35, + 0x35,0x31,0x43,0x36,0x2e,0x33,0x36,0x33,0x2c,0x38, + 0x2e,0x33,0x33,0x38,0x2c,0x34,0x2e,0x32,0x35,0x37, + 0x2c,0x38,0x2e,0x31,0x33,0x39,0x2c,0x33,0x2e,0x32, + 0x30,0x32,0x2c,0x38,0x2e,0x31,0x33,0x39,0x0d,0x0a, + 0x09,0x43,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e, + 0x31,0x33,0x39,0x2c,0x30,0x2e,0x31,0x38,0x37,0x2c, + 0x38,0x2e,0x37,0x36,0x32,0x2c,0x30,0x2e,0x31,0x38, + 0x37,0x2c,0x31,0x30,0x2e,0x33,0x36,0x38,0x22,0x2f, 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x34,0x2e,0x36,0x30,0x32,0x2c,0x31,0x31, - 0x2e,0x32,0x34,0x32,0x48,0x33,0x2e,0x38,0x34,0x35, - 0x43,0x31,0x2e,0x37,0x32,0x32,0x2c,0x31,0x31,0x2e, - 0x32,0x34,0x32,0x2c,0x30,0x2c,0x31,0x33,0x2e,0x30, - 0x31,0x34,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x31,0x39, - 0x39,0x73,0x31,0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e, - 0x39,0x35,0x39,0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c, - 0x33,0x2e,0x39,0x35,0x39,0x68,0x33,0x30,0x2e,0x37, - 0x35,0x37,0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e, - 0x31,0x32,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34, - 0x34,0x2d,0x31,0x2e,0x37,0x37,0x33,0x2c,0x33,0x2e, - 0x38,0x34,0x34,0x2d,0x33,0x2e,0x39,0x35,0x39,0x53, - 0x33,0x36,0x2e,0x37,0x32,0x35,0x2c,0x31,0x31,0x2e, - 0x32,0x34,0x32,0x2c,0x33,0x34,0x2e,0x36,0x30,0x32, - 0x2c,0x31,0x31,0x2e,0x32,0x34,0x32,0x7a,0x22,0x2f, + 0x4d,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c,0x31,0x39, + 0x2e,0x31,0x31,0x38,0x48,0x33,0x2e,0x38,0x34,0x35, + 0x43,0x31,0x2e,0x37,0x32,0x32,0x2c,0x31,0x39,0x2e, + 0x31,0x31,0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e,0x38, + 0x39,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x30,0x37,0x35, + 0x63,0x30,0x2c,0x32,0x2e,0x31,0x38,0x36,0x2c,0x31, + 0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x37, + 0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39, + 0x35,0x37,0x68,0x32,0x39,0x2e,0x33,0x37,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x31,0x32,0x33, + 0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x31, + 0x2e,0x37,0x37,0x31,0x2c,0x33,0x2e,0x38,0x34,0x34, + 0x2d,0x33,0x2e,0x39,0x35,0x37,0x43,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x2c,0x32,0x30,0x2e,0x38,0x38,0x39, + 0x2c,0x33,0x35,0x2e,0x33,0x34,0x2c,0x31,0x39,0x2e, + 0x31,0x31,0x38,0x2c,0x33,0x33,0x2e,0x32,0x31,0x37, + 0x2c,0x31,0x39,0x2e,0x31,0x31,0x38,0x7a,0x22,0x2f, 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x34,0x2e,0x32,0x39,0x36,0x2c,0x37,0x2e, - 0x36,0x38,0x37,0x68,0x31,0x2e,0x34,0x39,0x56,0x31, - 0x2e,0x33,0x38,0x31,0x68,0x32,0x2e,0x36,0x35,0x39, - 0x56,0x30,0x2e,0x32,0x30,0x39,0x68,0x2d,0x36,0x2e, - 0x38,0x31,0x76,0x31,0x2e,0x31,0x37,0x31,0x68,0x32, - 0x2e,0x36,0x36,0x56,0x37,0x2e,0x36,0x38,0x37,0x7a, - 0x20,0x4d,0x32,0x35,0x2e,0x32,0x35,0x35,0x2c,0x33, - 0x2e,0x35,0x36,0x32,0x56,0x31,0x2e,0x33,0x38,0x31, - 0x68,0x32,0x2e,0x35,0x37,0x35,0x0d,0x0a,0x09,0x63, - 0x30,0x2e,0x37,0x38,0x33,0x2c,0x30,0x2c,0x31,0x2e, - 0x32,0x37,0x31,0x2c,0x30,0x2e,0x33,0x30,0x33,0x2c, - 0x31,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e,0x30,0x37, - 0x39,0x63,0x30,0x2c,0x30,0x2e,0x38,0x33,0x38,0x2d, - 0x30,0x2e,0x34,0x34,0x37,0x2c,0x31,0x2e,0x31,0x30, - 0x33,0x2d,0x31,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e, - 0x31,0x30,0x33,0x48,0x32,0x35,0x2e,0x32,0x35,0x35, - 0x7a,0x20,0x4d,0x32,0x33,0x2e,0x37,0x36,0x39,0x2c, - 0x37,0x2e,0x36,0x38,0x37,0x68,0x31,0x2e,0x34,0x38, - 0x36,0x56,0x34,0x2e,0x37,0x33,0x33,0x68,0x32,0x2e, - 0x35,0x33,0x34,0x0d,0x0a,0x09,0x63,0x31,0x2e,0x30, - 0x39,0x34,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x33,0x32, - 0x2c,0x30,0x2e,0x37,0x35,0x34,0x2c,0x31,0x2e,0x32, - 0x33,0x32,0x2c,0x31,0x2e,0x38,0x32,0x32,0x63,0x30, - 0x2c,0x30,0x2e,0x35,0x34,0x35,0x2c,0x30,0x2e,0x30, - 0x37,0x2c,0x30,0x2e,0x39,0x32,0x32,0x2c,0x30,0x2e, - 0x31,0x38,0x2c,0x31,0x2e,0x31,0x33,0x31,0x68,0x31, - 0x2e,0x36,0x30,0x37,0x43,0x33,0x30,0x2e,0x35,0x32, - 0x2c,0x37,0x2e,0x32,0x37,0x38,0x2c,0x33,0x30,0x2e, - 0x35,0x31,0x2c,0x36,0x2e,0x34,0x34,0x31,0x2c,0x33, - 0x30,0x2e,0x35,0x31,0x2c,0x36,0x2e,0x30,0x38,0x33, - 0x0d,0x0a,0x09,0x63,0x30,0x2d,0x31,0x2e,0x30,0x35, - 0x37,0x2d,0x30,0x2e,0x31,0x38,0x36,0x2d,0x31,0x2e, - 0x38,0x33,0x32,0x2d,0x31,0x2e,0x30,0x33,0x31,0x2d, - 0x32,0x2e,0x30,0x32,0x56,0x34,0x2e,0x30,0x34,0x31, - 0x63,0x30,0x2e,0x36,0x36,0x36,0x2d,0x30,0x2e,0x32, - 0x31,0x39,0x2c,0x31,0x2e,0x31,0x37,0x2d,0x30,0x2e, - 0x38,0x32,0x38,0x2c,0x31,0x2e,0x31,0x37,0x2d,0x31, - 0x2e,0x38,0x30,0x32,0x63,0x30,0x2d,0x31,0x2e,0x31, - 0x36,0x32,0x2d,0x30,0x2e,0x35,0x38,0x34,0x2d,0x32, - 0x2e,0x30,0x32,0x39,0x2d,0x32,0x2e,0x33,0x39,0x31, - 0x2d,0x32,0x2e,0x30,0x32,0x39,0x68,0x2d,0x34,0x2e, - 0x34,0x38,0x39,0x56,0x37,0x2e,0x36,0x38,0x37,0x7a, - 0x0d,0x0a,0x09,0x20,0x4d,0x31,0x34,0x2e,0x35,0x34, - 0x39,0x2c,0x37,0x2e,0x36,0x38,0x37,0x68,0x31,0x2e, - 0x36,0x30,0x39,0x6c,0x30,0x2e,0x37,0x33,0x35,0x2d, - 0x31,0x2e,0x38,0x35,0x34,0x68,0x33,0x2e,0x33,0x33, - 0x38,0x6c,0x30,0x2e,0x37,0x34,0x36,0x2c,0x31,0x2e, - 0x38,0x35,0x34,0x68,0x31,0x2e,0x36,0x35,0x39,0x6c, - 0x2d,0x33,0x2e,0x31,0x36,0x2d,0x37,0x2e,0x34,0x37, - 0x38,0x68,0x2d,0x31,0x2e,0x37,0x36,0x38,0x4c,0x31, - 0x34,0x2e,0x35,0x34,0x39,0x2c,0x37,0x2e,0x36,0x38, - 0x37,0x7a,0x20,0x4d,0x31,0x37,0x2e,0x33,0x34,0x31, - 0x2c,0x34,0x2e,0x36,0x36,0x32,0x6c,0x31,0x2e,0x32, - 0x33,0x2d,0x33,0x2e,0x31,0x35,0x36,0x6c,0x31,0x2e, - 0x32,0x31,0x33,0x2c,0x33,0x2e,0x31,0x35,0x36,0x0d, - 0x0a,0x09,0x48,0x31,0x37,0x2e,0x33,0x34,0x31,0x7a, - 0x20,0x4d,0x31,0x30,0x2e,0x33,0x35,0x37,0x2c,0x37, - 0x2e,0x36,0x38,0x37,0x68,0x31,0x2e,0x34,0x38,0x37, - 0x56,0x31,0x2e,0x33,0x38,0x31,0x68,0x32,0x2e,0x36, - 0x36,0x35,0x56,0x30,0x2e,0x32,0x30,0x39,0x48,0x37, - 0x2e,0x36,0x39,0x34,0x76,0x31,0x2e,0x31,0x37,0x31, - 0x68,0x32,0x2e,0x36,0x36,0x34,0x56,0x37,0x2e,0x36, - 0x38,0x37,0x7a,0x20,0x4d,0x30,0x2e,0x31,0x38,0x35, - 0x2c,0x32,0x2e,0x33,0x31,0x33,0x63,0x30,0x2c,0x33, - 0x2e,0x30,0x36,0x36,0x2c,0x35,0x2e,0x32,0x32,0x35, - 0x2c,0x31,0x2e,0x34,0x35,0x33,0x2c,0x35,0x2e,0x32, - 0x32,0x35,0x2c,0x33,0x2e,0x33,0x30,0x37,0x0d,0x0a, - 0x09,0x63,0x30,0x2c,0x30,0x2e,0x38,0x32,0x32,0x2d, - 0x30,0x2e,0x38,0x34,0x34,0x2c,0x31,0x2e,0x31,0x30, - 0x35,0x2d,0x31,0x2e,0x37,0x34,0x39,0x2c,0x31,0x2e, - 0x31,0x30,0x35,0x63,0x2d,0x31,0x2e,0x32,0x32,0x2c, - 0x30,0x2d,0x31,0x2e,0x39,0x39,0x36,0x2d,0x30,0x2e, - 0x34,0x37,0x33,0x2d,0x32,0x2e,0x30,0x33,0x36,0x2d, - 0x31,0x2e,0x34,0x35,0x39,0x48,0x30,0x2e,0x30,0x31, - 0x36,0x63,0x30,0x2e,0x30,0x32,0x2c,0x31,0x2e,0x35, - 0x37,0x32,0x2c,0x31,0x2e,0x30,0x34,0x33,0x2c,0x32, - 0x2e,0x36,0x33,0x31,0x2c,0x33,0x2e,0x35,0x39,0x36, - 0x2c,0x32,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x63, - 0x31,0x2e,0x35,0x31,0x2c,0x30,0x2c,0x33,0x2e,0x34, - 0x30,0x36,0x2d,0x30,0x2e,0x35,0x30,0x34,0x2c,0x33, - 0x2e,0x34,0x30,0x36,0x2d,0x32,0x2e,0x34,0x33,0x32, - 0x63,0x30,0x2d,0x33,0x2e,0x31,0x39,0x33,0x2d,0x35, - 0x2e,0x32,0x38,0x34,0x2d,0x31,0x2e,0x35,0x30,0x38, - 0x2d,0x35,0x2e,0x32,0x38,0x34,0x2d,0x33,0x2e,0x32, - 0x36,0x36,0x63,0x30,0x2d,0x30,0x2e,0x37,0x30,0x32, - 0x2c,0x30,0x2e,0x36,0x35,0x36,0x2d,0x31,0x2e,0x30, - 0x32,0x37,0x2c,0x31,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x30,0x32,0x37,0x63,0x31,0x2e,0x32,0x34,0x31, - 0x2c,0x30,0x2c,0x31,0x2e,0x37,0x33,0x39,0x2c,0x30, - 0x2e,0x36,0x32,0x38,0x2c,0x31,0x2e,0x37,0x38,0x39, - 0x2c,0x31,0x2e,0x32,0x30,0x35,0x0d,0x0a,0x09,0x68, - 0x31,0x2e,0x36,0x30,0x39,0x43,0x36,0x2e,0x35,0x39, - 0x31,0x2c,0x30,0x2e,0x32,0x30,0x37,0x2c,0x34,0x2e, - 0x34,0x30,0x36,0x2c,0x30,0x2c,0x33,0x2e,0x33,0x31, - 0x34,0x2c,0x30,0x43,0x31,0x2e,0x35,0x38,0x34,0x2c, - 0x30,0x2c,0x30,0x2e,0x31,0x38,0x35,0x2c,0x30,0x2e, - 0x36,0x34,0x36,0x2c,0x30,0x2e,0x31,0x38,0x35,0x2c, - 0x32,0x2e,0x33,0x31,0x33,0x22,0x2f,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f, + 0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22, + 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, + 0x36,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76, + 0x33,0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31, + 0x56,0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36, + 0x31,0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x30,0x48,0x30,0x56,0x33,0x37,0x2e,0x30,0x36,0x68, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_button_x_svg.cpp b/data/converted/help_button_x_svg.cpp index f3f4b3622..4f62699ca 100644 --- a/data/converted/help_button_x_svg.cpp +++ b/data/converted/help_button_x_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_x_svg_size = 805; -const unsigned char help_button_x_svg_data[805] = { +const size_t help_button_x_svg_size = 966; +const unsigned char help_button_x_svg_data[966] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,60 +29,76 @@ const unsigned char help_button_x_svg_data[805] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, - 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, - 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, - 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, - 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, - 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, - 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x35,0x2e,0x35,0x2c,0x30,0x2e,0x30,0x30,0x31,0x63, - 0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d,0x31, - 0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x34,0x2d,0x31, - 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x53,0x36, - 0x2e,0x39,0x33,0x39,0x2c,0x33,0x31,0x2c,0x31,0x35, - 0x2e,0x35,0x2c,0x33,0x31,0x43,0x32,0x34,0x2e,0x30, - 0x36,0x31,0x2c,0x33,0x31,0x2c,0x33,0x31,0x2c,0x32, - 0x34,0x2e,0x30,0x36,0x31,0x2c,0x33,0x31,0x2c,0x31, - 0x35,0x2e,0x35,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x53,0x32,0x34,0x2e,0x30,0x36,0x31,0x2c,0x30,0x2e, - 0x30,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x30, - 0x2e,0x30,0x30,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, - 0x34,0x33,0x34,0x2c,0x32,0x31,0x2e,0x38,0x39,0x35, - 0x6c,0x2d,0x32,0x2e,0x36,0x30,0x36,0x2d,0x34,0x2e, - 0x38,0x37,0x6c,0x2d,0x32,0x2e,0x36,0x30,0x37,0x2c, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x32,0x39, + 0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d, + 0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x34,0x2d, + 0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x63, + 0x30,0x2c,0x38,0x2e,0x35,0x36,0x32,0x2c,0x36,0x2e, + 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, + 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, + 0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x38,0x2e, + 0x35,0x36,0x32,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35, + 0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e, + 0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x31,0x43,0x33, + 0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39,0x37,0x2c, + 0x32,0x37,0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e,0x30, + 0x32,0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, + 0x2e,0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x31,0x2e, + 0x34,0x36,0x35,0x2c,0x32,0x34,0x2e,0x39,0x32,0x35, + 0x6c,0x2d,0x32,0x2e,0x36,0x30,0x37,0x2d,0x34,0x2e, + 0x38,0x37,0x6c,0x2d,0x32,0x2e,0x36,0x30,0x35,0x2c, 0x34,0x2e,0x38,0x37,0x68,0x2d,0x33,0x2e,0x31,0x36, - 0x33,0x6c,0x34,0x2e,0x31,0x30,0x39,0x2d,0x36,0x2e, - 0x38,0x30,0x39,0x6c,0x2d,0x34,0x2e,0x30,0x30,0x38, - 0x2d,0x36,0x2e,0x36,0x39,0x38,0x68,0x33,0x2e,0x31, - 0x33,0x36,0x6c,0x32,0x2e,0x34,0x39,0x36,0x2c,0x34, - 0x2e,0x37,0x38,0x37,0x0d,0x0a,0x09,0x09,0x09,0x6c, - 0x32,0x2e,0x35,0x33,0x32,0x2d,0x34,0x2e,0x37,0x38, - 0x37,0x68,0x33,0x2e,0x31,0x35,0x34,0x6c,0x2d,0x34, - 0x2e,0x30,0x30,0x38,0x2c,0x36,0x2e,0x36,0x39,0x38, - 0x6c,0x34,0x2e,0x32,0x34,0x2c,0x36,0x2e,0x38,0x30, - 0x39,0x48,0x31,0x38,0x2e,0x34,0x33,0x34,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0d,0x0a + 0x34,0x6c,0x34,0x2e,0x31,0x31,0x2d,0x36,0x2e,0x38, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x2d,0x34, + 0x2e,0x30,0x30,0x39,0x2d,0x36,0x2e,0x36,0x39,0x38, + 0x68,0x33,0x2e,0x31,0x33,0x37,0x6c,0x32,0x2e,0x34, + 0x39,0x34,0x2c,0x34,0x2e,0x37,0x38,0x37,0x6c,0x32, + 0x2e,0x35,0x33,0x33,0x2d,0x34,0x2e,0x37,0x38,0x37, + 0x68,0x33,0x2e,0x31,0x35,0x34,0x4c,0x32,0x30,0x2e, + 0x35,0x2c,0x31,0x38,0x2e,0x31,0x31,0x34,0x6c,0x34, + 0x2e,0x32,0x34,0x2c,0x36,0x2e,0x38,0x31,0x31,0x48, + 0x32,0x31,0x2e,0x34,0x36,0x35,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0x3e, + 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36, + 0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33, + 0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56, + 0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31, + 0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30, + 0x48,0x30,0x56,0x33,0x37,0x2e,0x30,0x36,0x68,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_button_y_svg.cpp b/data/converted/help_button_y_svg.cpp index d9deee170..7f6bd0171 100644 --- a/data/converted/help_button_y_svg.cpp +++ b/data/converted/help_button_y_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_button_y_svg_size = 762; -const unsigned char help_button_y_svg_data[762] = { +const size_t help_button_y_svg_size = 926; +const unsigned char help_button_y_svg_data[926] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,56 +29,72 @@ const unsigned char help_button_y_svg_data[762] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x31,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x31,0x2e,0x30, - 0x30,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33, - 0x31,0x20,0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20, - 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, - 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, - 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x31,0x20, - 0x33,0x31,0x2e,0x30,0x30,0x31,0x22,0x20,0x78,0x6d, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x35,0x2e,0x35,0x2c,0x30,0x43,0x36,0x2e,0x39,0x33, - 0x39,0x2c,0x30,0x2c,0x30,0x2c,0x36,0x2e,0x39,0x34, - 0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35,0x63,0x30,0x2c, - 0x38,0x2e,0x35,0x36,0x31,0x2c,0x36,0x2e,0x39,0x33, - 0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31,0x2c,0x31, - 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, - 0x63,0x38,0x2e,0x35,0x36,0x2c,0x30,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x34,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x33,0x31,0x2c,0x36,0x2e, - 0x39,0x34,0x2c,0x32,0x34,0x2e,0x30,0x36,0x2c,0x30, - 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x30,0x7a,0x20,0x4d, - 0x31,0x37,0x2e,0x30,0x37,0x31,0x2c,0x31,0x37,0x2e, - 0x31,0x34,0x35,0x76,0x34,0x2e,0x37,0x35,0x68,0x2d, - 0x32,0x2e,0x37,0x76,0x2d,0x34,0x2e,0x38,0x39,0x4c, - 0x39,0x2e,0x38,0x31,0x36,0x2c,0x38,0x2e,0x33,0x38, - 0x37,0x68,0x32,0x2e,0x39,0x36,0x39,0x6c,0x32,0x2e, - 0x39,0x35,0x2c,0x36,0x2e,0x32,0x32,0x35,0x68,0x30, - 0x2e,0x30,0x35,0x36,0x6c,0x32,0x2e,0x39,0x35,0x2d, - 0x36,0x2e,0x32,0x32,0x35,0x68,0x32,0x2e,0x39,0x36, - 0x39,0x4c,0x31,0x37,0x2e,0x30,0x37,0x31,0x2c,0x31, - 0x37,0x2e,0x31,0x34,0x35,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0d,0x0a + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x32,0x39, + 0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d, + 0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x34,0x2d, + 0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x63, + 0x30,0x2c,0x38,0x2e,0x35,0x36,0x31,0x2c,0x36,0x2e, + 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x31, + 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, + 0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x38,0x2e, + 0x35,0x36,0x32,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35, + 0x2d,0x36,0x2e,0x39,0x34,0x2c,0x31,0x35,0x2e,0x35, + 0x2d,0x31,0x35,0x2e,0x35,0x30,0x31,0x43,0x33,0x34, + 0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39,0x37,0x2c,0x32, + 0x37,0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e,0x30,0x32, + 0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, + 0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x30,0x2e,0x31, + 0x30,0x32,0x2c,0x32,0x30,0x2e,0x31,0x37,0x34,0x76, + 0x34,0x2e,0x37,0x35,0x68,0x2d,0x32,0x2e,0x37,0x76, + 0x2d,0x34,0x2e,0x38,0x39,0x6c,0x2d,0x34,0x2e,0x35, + 0x35,0x35,0x2d,0x38,0x2e,0x36,0x31,0x38,0x68,0x32, + 0x2e,0x39,0x36,0x39,0x0d,0x0a,0x09,0x09,0x09,0x6c, + 0x32,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x32,0x32,0x36, + 0x68,0x30,0x2e,0x30,0x35,0x36,0x6c,0x32,0x2e,0x39, + 0x35,0x2d,0x36,0x2e,0x32,0x32,0x36,0x68,0x32,0x2e, + 0x39,0x37,0x4c,0x32,0x30,0x2e,0x31,0x30,0x32,0x2c, + 0x32,0x30,0x2e,0x31,0x37,0x34,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0x3e, + 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36, + 0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33, + 0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56, + 0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31, + 0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30, + 0x48,0x30,0x56,0x33,0x37,0x2e,0x30,0x36,0x68,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_dpad_all_svg.cpp b/data/converted/help_dpad_all_svg.cpp index 641dcaa04..eb6b5bbb2 100644 --- a/data/converted/help_dpad_all_svg.cpp +++ b/data/converted/help_dpad_all_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_all_svg_size = 3453; -const unsigned char help_dpad_all_svg_data[3453] = { +const size_t help_dpad_all_svg_size = 1817; +const unsigned char help_dpad_all_svg_data[1817] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,325 +29,161 @@ const unsigned char help_dpad_all_svg_data[3453] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, - 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, - 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, - 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, - 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, - 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, - 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, - 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, - 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, - 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, - 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, - 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, - 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, - 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, - 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, - 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, - 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, - 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, - 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x6c, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x6e,0x6f,0x6e,0x65,0x22,0x20,0x73,0x74,0x72, + 0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, + 0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x2e, + 0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d, + 0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74, + 0x3d,0x22,0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x33,0x33,0x2e,0x39,0x33,0x39,0x2c,0x31,0x32,0x2e, + 0x36,0x30,0x34,0x68,0x2d,0x39,0x2e,0x34,0x38,0x32, + 0x56,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x63,0x30,0x2c,0x30,0x2c,0x30,0x2d,0x32, + 0x2e,0x33,0x37,0x31,0x2d,0x32,0x2e,0x33,0x37,0x31, + 0x2d,0x32,0x2e,0x33,0x37,0x31,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x30,0x2c,0x30,0x2d,0x32,0x2e, + 0x33,0x36,0x39,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x36, + 0x39,0x2c,0x32,0x2e,0x33,0x37,0x31,0x76,0x39,0x2e, + 0x34,0x38,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x63, + 0x30,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x37,0x31,0x2c, + 0x30,0x2d,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e, + 0x33,0x37,0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30, + 0x2c,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31, + 0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e,0x33, + 0x37,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x68,0x39, + 0x2e,0x34,0x38,0x34,0x76,0x39,0x2e,0x34,0x38,0x32, + 0x63,0x30,0x2c,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33, + 0x37,0x31,0x2c,0x32,0x2e,0x33,0x36,0x39,0x2c,0x32, + 0x2e,0x33,0x37,0x31,0x68,0x37,0x2e,0x31,0x31,0x31, + 0x63,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31, + 0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31,0x2d,0x32, + 0x2e,0x33,0x37,0x31,0x76,0x2d,0x39,0x2e,0x34,0x38, + 0x32,0x68,0x39,0x2e,0x34,0x38,0x32,0x63,0x30,0x2c, + 0x30,0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x30,0x2c, + 0x32,0x2e,0x33,0x37,0x31,0x2d,0x32,0x2e,0x33,0x37, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x43,0x33,0x36,0x2e,0x33,0x31, + 0x31,0x2c,0x31,0x34,0x2e,0x39,0x37,0x34,0x2c,0x33, + 0x36,0x2e,0x33,0x31,0x31,0x2c,0x31,0x32,0x2e,0x36, + 0x30,0x34,0x2c,0x33,0x33,0x2e,0x39,0x33,0x39,0x2c, + 0x31,0x32,0x2e,0x36,0x30,0x34,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x6e,0x6f,0x6e,0x65,0x22,0x20,0x73,0x74,0x72,0x6f, + 0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d, + 0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x2e,0x35, + 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d, + 0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d, + 0x22,0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x31,0x2e,0x34, + 0x33,0x31,0x63,0x31,0x2e,0x36,0x30,0x32,0x2c,0x30, + 0x2c,0x32,0x2e,0x39,0x2d,0x31,0x2e,0x32,0x39,0x39, + 0x2c,0x32,0x2e,0x39,0x2d,0x32,0x2e,0x39,0x30,0x31, + 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x31,0x2e,0x36, + 0x30,0x32,0x2d,0x31,0x2e,0x32,0x39,0x39,0x2d,0x32, + 0x2e,0x39,0x2d,0x32,0x2e,0x39,0x2d,0x32,0x2e,0x39, + 0x63,0x2d,0x31,0x2e,0x36,0x30,0x34,0x2c,0x30,0x2d, + 0x32,0x2e,0x39,0x2c,0x31,0x2e,0x32,0x39,0x39,0x2d, + 0x32,0x2e,0x39,0x2c,0x32,0x2e,0x39,0x43,0x31,0x35, + 0x2e,0x36,0x33,0x31,0x2c,0x32,0x30,0x2e,0x31,0x33, + 0x32,0x2c,0x31,0x36,0x2e,0x39,0x32,0x38,0x2c,0x32, + 0x31,0x2e,0x34,0x33,0x31,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x32,0x31,0x2e,0x34,0x33,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72, + 0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, + 0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x2e, + 0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d, + 0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d,0x22, + 0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74,0x72, + 0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c, + 0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x2e,0x31,0x38,0x33,0x0d,0x0a,0x09,0x09,0x6c, 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, - 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, - 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, - 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, - 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, - 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, - 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x33,0x2e,0x31,0x36,0x32,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x6c,0x34,0x2e,0x36,0x38, - 0x34,0x2c,0x33,0x2e,0x30,0x30,0x35,0x76,0x2d,0x36, - 0x2e,0x30,0x31,0x31,0x4c,0x33,0x2e,0x31,0x36,0x32, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x37,0x2e,0x38,0x34,0x35,0x2c,0x32,0x32,0x2e,0x33, - 0x32,0x33,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c, - 0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e, - 0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30, - 0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38, - 0x34,0x2d,0x33,0x2e,0x30,0x30,0x34,0x63,0x2d,0x30, - 0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33, - 0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, - 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x31, - 0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x35, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30, - 0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x63,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x38,0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32, - 0x37,0x34,0x2d,0x30,0x2e,0x31,0x35,0x2c,0x30,0x2e, - 0x35,0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x39,0x33, - 0x2c,0x32,0x32,0x2e,0x32,0x39,0x32,0x2c,0x37,0x2e, - 0x39,0x36,0x39,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33, - 0x2c,0x37,0x2e,0x38,0x34,0x35,0x2c,0x32,0x32,0x2e, - 0x33,0x32,0x33,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x35, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x6c,0x32,0x2e, - 0x35,0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x33,0x76, - 0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c,0x34,0x2e,0x35, - 0x35,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x39,0x31,0x36, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x6c,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x76,0x36,0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e,0x39, - 0x31,0x36,0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x32,0x63,0x2d,0x30,0x2e,0x31, - 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37, - 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, - 0x39,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, - 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, - 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d, - 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39, - 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e, - 0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c, - 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32, - 0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e, - 0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, - 0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31, - 0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e, - 0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e, - 0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, - 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, - 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, - 0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x35,0x31,0x34, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x32,0x2c,0x32,0x39, - 0x2e,0x33,0x37,0x33,0x2c,0x32,0x32,0x2e,0x33,0x32, - 0x32,0x2c,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x32,0x7a,0x20,0x4d,0x32,0x39, - 0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x56,0x32,0x30,0x2e,0x32,0x6c,0x32,0x2e,0x35, - 0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a, - 0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x38,0x32, - 0x2c,0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c, - 0x33,0x33,0x2e,0x39,0x31,0x35,0x6c,0x33,0x2e,0x30, - 0x30,0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d, - 0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31,0x35,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, + 0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, + 0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, + 0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d, + 0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, + 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31,0x32,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x0d,0x0a,0x09,0x09, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, + 0x30,0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33, + 0x2e,0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x35,0x4c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x63, - 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, - 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, - 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, - 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, - 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, - 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, - 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, - 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x36,0x2c, - 0x33,0x34,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e, - 0x38,0x32,0x32,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, - 0x2e,0x36,0x36,0x35,0x7a,0x20,0x4d,0x31,0x36,0x2e, - 0x39,0x33,0x34,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31, - 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, - 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, - 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, - 0x3e,0x0d,0x0a + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, + 0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, + 0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, + 0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d, + 0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, + 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x37, + 0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39,0x0d,0x0a, + 0x09,0x09,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31, + 0x4c,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73, + 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74, + 0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a, + 0x6f,0x69,0x6e,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64, + 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d, + 0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d, + 0x22,0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37, + 0x36,0x0d,0x0a,0x09,0x09,0x6c,0x33,0x2e,0x30,0x30, + 0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d,0x36, + 0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_dpad_down_svg.cpp b/data/converted/help_dpad_down_svg.cpp index 00861efe8..eb8988dd8 100644 --- a/data/converted/help_dpad_down_svg.cpp +++ b/data/converted/help_dpad_down_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_down_svg_size = 3223; -const unsigned char help_dpad_down_svg_data[3223] = { +const size_t help_dpad_down_svg_size = 3205; +const unsigned char help_dpad_down_svg_data[3205] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,302 +29,300 @@ const unsigned char help_dpad_down_svg_data[3223] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, - 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, - 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x31, + 0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x31,0x32,0x31,0x76,0x2d,0x38,0x2e, + 0x37,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x30,0x2e,0x38,0x33,0x31,0x2c,0x32,0x35,0x2e,0x32, + 0x30,0x36,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x33,0x34, + 0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31, + 0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e, + 0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31, + 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32, + 0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, + 0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, - 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, - 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, - 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, - 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, - 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, - 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, - 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, - 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, - 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, - 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, - 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, - 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, - 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, - 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, - 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, - 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x36,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d, - 0x30,0x2e,0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36, - 0x35,0x43,0x32,0x32,0x2e,0x30,0x39,0x39,0x2c,0x38, - 0x2e,0x35,0x30,0x34,0x2c,0x32,0x31,0x2e,0x38,0x34, - 0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x2c,0x32,0x31, - 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31,0x35,0x34, - 0x68,0x33,0x2e,0x32,0x36,0x37,0x6c,0x2d,0x31,0x2e, - 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x4c, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31, - 0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e, - 0x38,0x34,0x35,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33, - 0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34, - 0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31, - 0x31,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d, - 0x33,0x2e,0x30,0x30,0x34,0x63,0x2d,0x30,0x2e,0x32, - 0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30, - 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e, - 0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30, - 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31, - 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, - 0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, - 0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, - 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x36,0x2e,0x30,0x31,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34, - 0x2d,0x30,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x35,0x32, - 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x43,0x38,0x2e,0x30,0x39,0x33,0x2c,0x32, - 0x32,0x2e,0x32,0x39,0x32,0x2c,0x37,0x2e,0x39,0x36, - 0x39,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x2c,0x37, - 0x2e,0x38,0x34,0x35,0x2c,0x32,0x32,0x2e,0x33,0x32, - 0x33,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x35,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x6c,0x32,0x2e,0x35,0x34, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x33,0x76,0x2d,0x33, - 0x2e,0x32,0x36,0x36,0x4c,0x34,0x2e,0x35,0x35,0x2c, - 0x31,0x38,0x2e,0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x32,0x63,0x2d,0x30,0x2e,0x31, - 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37, - 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, - 0x39,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, - 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, - 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d, - 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39, - 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e, - 0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c, - 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32, - 0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e, - 0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, - 0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31, - 0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e, - 0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e, - 0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, - 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, - 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, - 0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x35,0x31,0x34, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x32,0x2c,0x32,0x39, - 0x2e,0x33,0x37,0x33,0x2c,0x32,0x32,0x2e,0x33,0x32, - 0x32,0x2c,0x32,0x39,0x2e,0x32,0x33,0x32,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x32,0x7a,0x20,0x4d,0x32,0x39, - 0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x56,0x32,0x30,0x2e,0x32,0x6c,0x32,0x2e,0x35, - 0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a, - 0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x38,0x32, - 0x2c,0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f, + 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, + 0x2e,0x37,0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x32, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, + 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, + 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, + 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, + 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30, + 0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30,0x30, + 0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48,0x32, + 0x33,0x2e,0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32, + 0x31,0x43,0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36, + 0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30, + 0x38,0x36,0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30, + 0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67, 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c, - 0x33,0x33,0x2e,0x39,0x31,0x35,0x6c,0x33,0x2e,0x30, - 0x30,0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d, - 0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31,0x35,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x35,0x4c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x63, - 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, - 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, - 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, - 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, - 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, - 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, - 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, - 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x36,0x2c, - 0x33,0x34,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e, - 0x38,0x32,0x32,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, - 0x2e,0x36,0x36,0x35,0x7a,0x20,0x4d,0x31,0x36,0x2e, - 0x39,0x33,0x34,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31, - 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, - 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, - 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, - 0x3e,0x0d,0x0a + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e,0x36,0x33, + 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c, + 0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d, + 0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39,0x36,0x35, + 0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32,0x2e,0x31, + 0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43,0x32, + 0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33, + 0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c, + 0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e, + 0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33, + 0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d, + 0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x34, + 0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c, + 0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x38,0x2c, + 0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31,0x35, + 0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x43, + 0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34, + 0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a,0x0d, + 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, + 0x2e,0x32,0x36,0x37,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30,0x39, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30, + 0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, + 0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e, + 0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x4c, + 0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x36, + 0x32,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30, + 0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x33, + 0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30, + 0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36, + 0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30, + 0x2e,0x32,0x33,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c, + 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x30, + 0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34,0x39, + 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, + 0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35,0x34, + 0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32,0x2e, + 0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x34, + 0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, + 0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35,0x4c, + 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, + 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, + 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, + 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, + 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, + 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, + 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, + 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, + 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, + 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, + 0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32, + 0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e, + 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c, + 0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32, + 0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31, + 0x2e,0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c, + 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, + 0x38,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37, + 0x36,0x6c,0x33,0x2e,0x30,0x30,0x36,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e, + 0x38,0x37,0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30, + 0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31, + 0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30, + 0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38, + 0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30, + 0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30, + 0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31, + 0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, + 0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x31, + 0x63,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30, + 0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33, + 0x39,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x31,0x33,0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30, + 0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, + 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c, + 0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30, + 0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c, + 0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39, + 0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32, + 0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c, + 0x31,0x2e,0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34, + 0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_dpad_left_svg.cpp b/data/converted/help_dpad_left_svg.cpp index 2ca162b7c..cb2601717 100644 --- a/data/converted/help_dpad_left_svg.cpp +++ b/data/converted/help_dpad_left_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_left_svg_size = 3221; -const unsigned char help_dpad_left_svg_data[3221] = { +const size_t help_dpad_left_svg_size = 3202; +const unsigned char help_dpad_left_svg_data[3202] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,302 +29,300 @@ const unsigned char help_dpad_left_svg_data[3221] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, - 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, - 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x31, + 0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x31,0x32,0x31,0x76,0x2d,0x38,0x2e, + 0x37,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x30,0x2e,0x38,0x33,0x31,0x2c,0x32,0x35,0x2e,0x32, + 0x30,0x36,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x33,0x34, + 0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31, + 0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e, + 0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31, + 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32, + 0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, + 0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, - 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, - 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, - 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, - 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, - 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, - 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, - 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, - 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, + 0x2e,0x37,0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x32, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, + 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, + 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, + 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, + 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30, + 0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30,0x30, + 0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48,0x32, + 0x33,0x2e,0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32, + 0x31,0x43,0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36, + 0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30, + 0x38,0x36,0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30, + 0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e,0x36,0x33, + 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c, + 0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d, + 0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39,0x36,0x35, + 0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32,0x2e,0x31, + 0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43,0x32, + 0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33, + 0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c, + 0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e, + 0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33, + 0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d, + 0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x34, + 0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c, + 0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x38,0x2c, + 0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31,0x35, + 0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x43, + 0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34, + 0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a,0x0d, + 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, + 0x2e,0x32,0x36,0x37,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, - 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, - 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, - 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, - 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, - 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, - 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, - 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, - 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x36,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d, - 0x30,0x2e,0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36, - 0x35,0x43,0x32,0x32,0x2e,0x30,0x39,0x39,0x2c,0x38, - 0x2e,0x35,0x30,0x34,0x2c,0x32,0x31,0x2e,0x38,0x34, - 0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x2c,0x32,0x31, - 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31,0x35,0x34, - 0x68,0x33,0x2e,0x32,0x36,0x37,0x6c,0x2d,0x31,0x2e, - 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x4c, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31, - 0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, - 0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, - 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, - 0x30,0x35,0x76,0x2d,0x36,0x2e,0x30,0x31,0x31,0x4c, - 0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35, - 0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30, - 0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, - 0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e, - 0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c, - 0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, - 0x30,0x34,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d, - 0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e, - 0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63, - 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x37,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d, - 0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34, - 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, - 0x2e,0x30,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e, - 0x31,0x35,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43, - 0x38,0x2e,0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32, - 0x39,0x32,0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34, - 0x35,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20, - 0x4d,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x38,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31, - 0x2e,0x36,0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36, - 0x36,0x4c,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31,0x32,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x76,0x2d, + 0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e,0x31,0x32,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x39,0x2e,0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33, - 0x32,0x32,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e, - 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30, - 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, - 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34, - 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35, - 0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, - 0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39, - 0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35, - 0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30, - 0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, - 0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30, - 0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33, - 0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c, - 0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34, - 0x43,0x32,0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37, - 0x33,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32, - 0x39,0x2e,0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33, - 0x32,0x32,0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38, - 0x32,0x2c,0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32, - 0x30,0x2e,0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d, - 0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09, - 0x4c,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36, - 0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67, - 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e, - 0x36,0x36,0x35,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37, - 0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x63,0x2d,0x30, - 0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34, - 0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, - 0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31, - 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35, - 0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30, - 0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32, - 0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36, - 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c, - 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31, - 0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30, - 0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d, - 0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38, - 0x34,0x43,0x31,0x39,0x2e,0x30,0x36,0x2c,0x33,0x34, - 0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e,0x38,0x32, - 0x32,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36, - 0x36,0x35,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31,0x6c,0x31, - 0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35, - 0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33, - 0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36, - 0x2e,0x39,0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, - 0x0a + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37, + 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30, + 0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30, + 0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e, + 0x31,0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31, + 0x39,0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32, + 0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e, + 0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30, + 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, + 0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30,0x2e, + 0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e, + 0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38, + 0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30, + 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, + 0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35, + 0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e, + 0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32, + 0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37,0x2d, + 0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x39, + 0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e, + 0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33,0x38, + 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e, + 0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30, + 0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x31, + 0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32, + 0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30, + 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30, + 0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33, + 0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35, + 0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33, + 0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31, + 0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c, + 0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, + 0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37,0x38,0x2c, + 0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32,0x39,0x2e, + 0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32,0x39,0x2e, + 0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36, + 0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e,0x35, + 0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a, + 0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35, + 0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, + 0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d, + 0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30, + 0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35, + 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, + 0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32,0x33, + 0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e, + 0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d, + 0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31,0x33, + 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e, + 0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c, + 0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30,0x2e, + 0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32, + 0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e, + 0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x32, + 0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32, + 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c, + 0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e, + 0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c, + 0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34, + 0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36, + 0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0d,0x0a }; diff --git a/data/converted/help_dpad_leftright_svg.cpp b/data/converted/help_dpad_leftright_svg.cpp index ef3b91d2b..9df6d8c58 100644 --- a/data/converted/help_dpad_leftright_svg.cpp +++ b/data/converted/help_dpad_leftright_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_leftright_svg_size = 3299; -const unsigned char help_dpad_leftright_svg_data[3299] = { +const size_t help_dpad_leftright_svg_size = 3280; +const unsigned char help_dpad_leftright_svg_data[3280] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,309 +29,307 @@ const unsigned char help_dpad_leftright_svg_data[3299] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, - 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, - 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x31, + 0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x31,0x32,0x31,0x76,0x2d,0x38,0x2e, + 0x37,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x30,0x2e,0x38,0x33,0x31,0x2c,0x32,0x35,0x2e,0x32, + 0x30,0x36,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x33,0x34, + 0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31, + 0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e, + 0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31, + 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32, + 0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, + 0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, - 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, - 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, - 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, - 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, - 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, - 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, - 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, - 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, + 0x2e,0x37,0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x32, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, + 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, + 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, + 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, + 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30, + 0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30,0x30, + 0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48,0x32, + 0x33,0x2e,0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32, + 0x31,0x43,0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36, + 0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30, + 0x38,0x36,0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30, + 0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e,0x36,0x33, + 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c, + 0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d, + 0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39,0x36,0x35, + 0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32,0x2e,0x31, + 0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43,0x32, + 0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33, + 0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c, + 0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e, + 0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33, + 0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d, + 0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x34, + 0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c, + 0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x38,0x2c, + 0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31,0x35, + 0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x43, + 0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34, + 0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a,0x0d, + 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, + 0x2e,0x32,0x36,0x37,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, - 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, - 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, - 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, - 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, - 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, - 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, - 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, - 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x36,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d, - 0x30,0x2e,0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36, - 0x35,0x43,0x32,0x32,0x2e,0x30,0x39,0x39,0x2c,0x38, - 0x2e,0x35,0x30,0x34,0x2c,0x32,0x31,0x2e,0x38,0x34, - 0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x2c,0x32,0x31, - 0x2e,0x35,0x37,0x33,0x2c,0x38,0x2e,0x36,0x35,0x34, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31,0x35,0x34, - 0x68,0x33,0x2e,0x32,0x36,0x37,0x6c,0x2d,0x31,0x2e, - 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x4c, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x37,0x2e,0x31, - 0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, - 0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, - 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, - 0x30,0x35,0x76,0x2d,0x36,0x2e,0x30,0x31,0x31,0x4c, - 0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35, - 0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30, - 0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, - 0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e, - 0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c, - 0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, - 0x30,0x34,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d, - 0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e, - 0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63, - 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x37,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d, - 0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34, - 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, - 0x2e,0x30,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e, - 0x31,0x35,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43, - 0x38,0x2e,0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32, - 0x39,0x32,0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34, - 0x35,0x2c,0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20, - 0x4d,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x38,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31, - 0x2e,0x36,0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36, - 0x36,0x4c,0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31,0x32,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x76,0x2d, + 0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e,0x31,0x32,0x35, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x33,0x2e,0x39,0x31,0x36,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d, - 0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31, - 0x4c,0x33,0x33,0x2e,0x39,0x31,0x36,0x2c,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, - 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, - 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, - 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, - 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, - 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, - 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, - 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, - 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, - 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, - 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, - 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, - 0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c, - 0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e, - 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e, - 0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e, - 0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32, - 0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39, - 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36, - 0x35,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32, - 0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33, - 0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, - 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37, - 0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30, - 0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36, - 0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34, - 0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38, - 0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e, - 0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30, - 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e, - 0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43, - 0x31,0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35, - 0x33,0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c, - 0x33,0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, - 0x7a,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, - 0x32,0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36, - 0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a, - 0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d, - 0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39, - 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37, + 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30, + 0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30, + 0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e, + 0x31,0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31, + 0x39,0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32, + 0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e, + 0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30, + 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30, + 0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30,0x2e, + 0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e, + 0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38, + 0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30, + 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, + 0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35, + 0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e, + 0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x32,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x2d,0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e, + 0x30,0x31,0x4c,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c, + 0x31,0x38,0x2e,0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e, + 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30, + 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34, + 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39, + 0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35, + 0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30, + 0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, + 0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30, + 0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33, + 0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c, + 0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34, + 0x43,0x32,0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32, + 0x2e,0x32,0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33, + 0x36,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32, + 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33, + 0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a,0x09,0x09, + 0x09,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31, + 0x36,0x2e,0x38,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e, + 0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39, + 0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x31,0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d, + 0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32, + 0x34,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d, + 0x30,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38, + 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e, + 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68, + 0x36,0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37, + 0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c, + 0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, + 0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, + 0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38, + 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, + 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e, + 0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34, + 0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_dpad_right_svg.cpp b/data/converted/help_dpad_right_svg.cpp index 94ded25d2..3483be531 100644 --- a/data/converted/help_dpad_right_svg.cpp +++ b/data/converted/help_dpad_right_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_right_svg_size = 3338; -const unsigned char help_dpad_right_svg_data[3338] = { +const size_t help_dpad_right_svg_size = 3206; +const unsigned char help_dpad_right_svg_data[3206] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,313 +29,300 @@ const unsigned char help_dpad_right_svg_data[3338] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x33,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x33,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x33,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x33,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x33,0x20,0x33,0x37,0x2e,0x31,0x33,0x33,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x32,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x48,0x33,0x2e, - 0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d,0x31,0x2e, - 0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x63,0x30, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x68,0x38, - 0x2e,0x37,0x33,0x35,0x56,0x33,0x2e,0x31,0x35,0x39, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c,0x31,0x2e, - 0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63,0x32,0x2e, - 0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x76,0x38, - 0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09, - 0x68,0x38,0x2e,0x37,0x33,0x31,0x63,0x31,0x2e,0x32, - 0x33,0x34,0x2c,0x30,0x2c,0x32,0x2e,0x32,0x30,0x31, - 0x2c,0x30,0x2e,0x35,0x35,0x32,0x2c,0x32,0x2e,0x37, - 0x32,0x32,0x2c,0x31,0x2e,0x35,0x35,0x34,0x63,0x30, - 0x2e,0x33,0x38,0x38,0x2c,0x30,0x2e,0x37,0x34,0x34, - 0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x31,0x2e,0x34, - 0x38,0x32,0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x31, - 0x2e,0x35,0x36,0x33,0x76,0x37,0x2e,0x31,0x31,0x35, - 0x63,0x30,0x2c,0x32,0x2e,0x32,0x39,0x2d,0x31,0x2e, - 0x38,0x36,0x36,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x31, + 0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x31,0x32,0x31,0x76,0x2d,0x38,0x2e, + 0x37,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x30,0x2e,0x38,0x33,0x31,0x2c,0x32,0x35,0x2e,0x32, + 0x30,0x36,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x33,0x34, + 0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31, + 0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e, + 0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31, + 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32, + 0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c, 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x68,0x2d,0x38,0x2e,0x37,0x33,0x32,0x76,0x38, - 0x2e,0x37,0x33,0x0d,0x0a,0x09,0x09,0x09,0x09,0x43, - 0x32,0x35,0x2e,0x32,0x34,0x33,0x2c,0x33,0x36,0x2e, - 0x32,0x36,0x35,0x2c,0x32,0x33,0x2e,0x33,0x37,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x39,0x36,0x2c,0x32,0x32, - 0x2e,0x31,0x32,0x32,0x2c,0x33,0x37,0x2e,0x30,0x39, - 0x36,0x7a,0x20,0x4d,0x33,0x2e,0x31,0x35,0x38,0x2c, - 0x31,0x33,0x2e,0x33,0x39,0x31,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x30,0x2e,0x31,0x33, - 0x39,0x2d,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x76,0x37,0x2e,0x31,0x31,0x32,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30,0x35, - 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31, - 0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x34,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x63,0x30,0x2e,0x30,0x30,0x35,0x2c, - 0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31,0x33, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x68, - 0x37,0x2e,0x31,0x30,0x37,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x32,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x31, - 0x30,0x2e,0x32,0x33,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x32,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x30,0x30,0x35,0x2d,0x30,0x2e,0x32, - 0x37,0x39,0x2d,0x30,0x2e,0x31,0x30,0x37,0x2d,0x31, - 0x2e,0x36,0x31,0x37,0x2d,0x31,0x2e,0x36,0x32,0x2d, - 0x31,0x2e,0x36,0x31,0x37,0x48,0x32,0x33,0x2e,0x37, - 0x34,0x35,0x56,0x33,0x2e,0x31,0x35,0x39,0x63,0x2d, - 0x30,0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37, - 0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x68,0x2d,0x37,0x2e,0x31,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31, - 0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, - 0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33, - 0x32,0x48,0x33,0x2e,0x31,0x35,0x38,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c,0x32,0x32, - 0x2e,0x32,0x31,0x38,0x63,0x2d,0x30,0x2e,0x39,0x37, - 0x36,0x2c,0x30,0x2d,0x31,0x2e,0x38,0x39,0x33,0x2d, - 0x30,0x2e,0x33,0x38,0x2d,0x32,0x2e,0x35,0x38,0x33, - 0x2d,0x31,0x2e,0x30,0x37,0x63,0x2d,0x30,0x2e,0x36, - 0x38,0x39,0x2d,0x30,0x2e,0x36,0x38,0x39,0x2d,0x31, - 0x2e,0x30,0x36,0x38,0x2d,0x31,0x2e,0x36,0x30,0x36, - 0x2d,0x31,0x2e,0x30,0x36,0x37,0x2d,0x32,0x2e,0x35, - 0x38,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, - 0x32,0x2e,0x30,0x31,0x32,0x2c,0x31,0x2e,0x36,0x33, - 0x37,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2d,0x33,0x2e,0x36,0x34,0x39,0x73,0x33, - 0x2e,0x36,0x34,0x39,0x2c,0x31,0x2e,0x36,0x33,0x37, - 0x2c,0x33,0x2e,0x36,0x34,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x43,0x32,0x32,0x2e,0x32,0x31,0x37,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x30,0x2e,0x35, - 0x38,0x31,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x2c, - 0x31,0x38,0x2e,0x35,0x36,0x38,0x2c,0x32,0x32,0x2e, - 0x32,0x31,0x38,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x36,0x38,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e,0x31,0x38, - 0x36,0x2c,0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30, - 0x2e,0x39,0x36,0x34,0x2d,0x32,0x2e,0x31,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x63,0x30,0x2c,0x30,0x2e,0x35, - 0x37,0x35,0x2c,0x30,0x2e,0x32,0x32,0x33,0x2c,0x31, - 0x2e,0x31,0x31,0x35,0x2c,0x30,0x2e,0x36,0x32,0x39, - 0x2c,0x31,0x2e,0x35,0x32,0x31,0x73,0x30,0x2e,0x39, - 0x34,0x36,0x2c,0x30,0x2e,0x36,0x33,0x2c,0x31,0x2e, - 0x35,0x32,0x31,0x2c,0x30,0x2e,0x36,0x33,0x63,0x31, - 0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e,0x31, - 0x34,0x39,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32, - 0x2e,0x31,0x34,0x39,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x43,0x32,0x30,0x2e,0x37, - 0x31,0x37,0x2c,0x31,0x37,0x2e,0x33,0x38,0x31,0x2c, - 0x31,0x39,0x2e,0x37,0x35,0x33,0x2c,0x31,0x36,0x2e, - 0x34,0x31,0x37,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, - 0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x7a,0x22,0x2f, + 0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, + 0x2e,0x37,0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x32, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, + 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, + 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, + 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, + 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30, + 0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30,0x30, + 0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48,0x32, + 0x33,0x2e,0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32, + 0x31,0x43,0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36, + 0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30, + 0x38,0x36,0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30, + 0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67, 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x37,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x32,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x36,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, - 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, - 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, - 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, - 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, - 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x36,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, - 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, - 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e, - 0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x33,0x37,0x35,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, - 0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38, - 0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e, - 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e,0x36,0x33, + 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c, + 0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d, + 0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39,0x36,0x35, + 0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32,0x2e,0x31, + 0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43,0x32, + 0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33, + 0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c, + 0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x63,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e, + 0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33, + 0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d, + 0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x34, + 0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c, + 0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x38,0x2c, + 0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31,0x35, + 0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x43, + 0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34, + 0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a,0x0d, + 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, + 0x2e,0x32,0x36,0x37,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30,0x39, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30, + 0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, + 0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e, + 0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x4c, + 0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x36, + 0x32,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30, + 0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x33, + 0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30, + 0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36, + 0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30, + 0x2e,0x32,0x33,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c, 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, - 0x39,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, + 0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, - 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x30, + 0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34,0x39, 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, - 0x30,0x39,0x34,0x2c,0x32,0x32,0x2e,0x32,0x39,0x32, - 0x2c,0x37,0x2e,0x39,0x37,0x2c,0x32,0x32,0x2e,0x33, - 0x32,0x33,0x2c,0x37,0x2e,0x38,0x34,0x36,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x33,0x7a,0x20,0x4d,0x34,0x2e, - 0x35,0x35,0x31,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, + 0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35,0x34, + 0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32,0x2e, + 0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x34, + 0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35,0x33, 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, - 0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c, - 0x34,0x2e,0x35,0x35,0x31,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, - 0x2e,0x39,0x31,0x37,0x2c,0x31,0x38,0x2e,0x35,0x36, - 0x37,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c, - 0x33,0x33,0x2e,0x39,0x31,0x37,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x32, - 0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32,0x63, - 0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30, - 0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33,0x2d, - 0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30,0x39, - 0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30, - 0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d, - 0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e, - 0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c, - 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e, - 0x31,0x33,0x32,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d, - 0x30,0x2e,0x31,0x32,0x32,0x2c,0x30,0x2e,0x37,0x36, - 0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e, - 0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63, - 0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33, - 0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34, - 0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38, - 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x43,0x32,0x39, - 0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32,0x38, - 0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e,0x32, - 0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32,0x7a, - 0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c,0x31, - 0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e,0x32, - 0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36, + 0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35,0x4c, + 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e, + 0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39, + 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, + 0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c,0x33, + 0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35, + 0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39, + 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, + 0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e, + 0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30, + 0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30,0x39,0x32, + 0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d, + 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36, + 0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, + 0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31, + 0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30, + 0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38, + 0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31, + 0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, + 0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35, + 0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36, + 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30, + 0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38, + 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33, + 0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73, + 0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39, + 0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, + 0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34, + 0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e, + 0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34, + 0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39, + 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20, + 0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36, + 0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36, + 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e,0x36, 0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39, - 0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, + 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, - 0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, - 0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32,0x35, - 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e, - 0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34, - 0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d, - 0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36, - 0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, - 0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d, - 0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e, - 0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c, - 0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e,0x32, - 0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e, - 0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c, - 0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x36,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31, - 0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35,0x33, - 0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x7a, - 0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x32, - 0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36,0x33, - 0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09, - 0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36, + 0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c, + 0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e, + 0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d, + 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35, + 0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x63, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31, + 0x31,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c, + 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x31,0x34, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e, + 0x33,0x39,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c, + 0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33, + 0x33,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e, + 0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e, + 0x30,0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, + 0x2c,0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d, + 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e, + 0x39,0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c, + 0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09,0x09,0x09, + 0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32,0x2e,0x35, + 0x34,0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/help_dpad_up_svg.cpp b/data/converted/help_dpad_up_svg.cpp index 405eb43dc..17e871ece 100644 --- a/data/converted/help_dpad_up_svg.cpp +++ b/data/converted/help_dpad_up_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_up_svg_size = 3219; -const unsigned char help_dpad_up_svg_data[3219] = { +const size_t help_dpad_up_svg_size = 3203; +const unsigned char help_dpad_up_svg_data[3203] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,301 +29,300 @@ const unsigned char help_dpad_up_svg_data[3219] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, - 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, - 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x31, + 0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x31,0x32,0x31,0x76,0x2d,0x38,0x2e, + 0x37,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x30,0x2e,0x38,0x33,0x31,0x2c,0x32,0x35,0x2e,0x32, + 0x30,0x36,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x33,0x34, + 0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31, + 0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e, + 0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31, + 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32, + 0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, + 0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, - 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, - 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, - 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, - 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, - 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, - 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, - 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, - 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, - 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, - 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, - 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, - 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, - 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, - 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, - 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, - 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, - 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, - 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, - 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, - 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, - 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, - 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, + 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, + 0x2e,0x37,0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x32, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, + 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, + 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, + 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, + 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30, + 0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30,0x30, + 0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48,0x32, + 0x33,0x2e,0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32, + 0x31,0x43,0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36, + 0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30, + 0x38,0x36,0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30, + 0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67, 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, - 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, - 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x34, - 0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e, - 0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, - 0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38, - 0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e, - 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c, - 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, - 0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, - 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, - 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x35, - 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, - 0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32,0x39,0x32, - 0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32,0x32,0x2e, - 0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34,0x35,0x2c, - 0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20,0x4d,0x34, - 0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, - 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, - 0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c, - 0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, - 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, - 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, - 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, - 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, - 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, - 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, - 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, - 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, - 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, - 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, - 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, - 0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c, - 0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e, - 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e, - 0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e, - 0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32, - 0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39, - 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36, - 0x35,0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32, - 0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33, - 0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e,0x36,0x33, + 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c, + 0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d, + 0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39,0x36,0x35, + 0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32,0x2e,0x31, + 0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43,0x32, + 0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33, + 0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c, + 0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e, + 0x36,0x31,0x36,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31, + 0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x31,0x35, + 0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, + 0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x32,0x31, + 0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30,0x2e,0x30, + 0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x6c,0x33, 0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, - 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37, - 0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30, - 0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36, - 0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34, - 0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38, - 0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e, - 0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30, - 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e, - 0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43, - 0x31,0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35, - 0x33,0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c, - 0x33,0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, - 0x7a,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, - 0x32,0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36, - 0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a, - 0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d, - 0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39, - 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x32,0x37, + 0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e, + 0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31, + 0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30, + 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x63,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32,0x33,0x31, + 0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30,0x2e,0x35, + 0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30, + 0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e,0x30,0x36, + 0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c,0x32,0x31, + 0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36,0x31,0x36, + 0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e, + 0x36,0x31,0x36,0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20, + 0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e, + 0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x37,0x4c, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35,0x37, + 0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e, + 0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30, + 0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c, + 0x31,0x39,0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e, + 0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37, + 0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, + 0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x30, + 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, + 0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x35,0x32, + 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32, + 0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33, + 0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37, + 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33, + 0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, + 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31, + 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37, + 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, + 0x39,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d, + 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e, + 0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32, + 0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, + 0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31, + 0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e, + 0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e, + 0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, + 0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37,0x38, + 0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32,0x39, + 0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32,0x39, + 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, + 0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e, + 0x35,0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d, + 0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63, + 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, + 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, + 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, + 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, + 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x31,0x63,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, + 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, + 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, + 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, + 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, + 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38, + 0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, + 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, + 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, + 0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0d,0x0a }; diff --git a/data/converted/help_dpad_updown_svg.cpp b/data/converted/help_dpad_updown_svg.cpp index 9e5d79ff1..7a95f8189 100644 --- a/data/converted/help_dpad_updown_svg.cpp +++ b/data/converted/help_dpad_updown_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_updown_svg_size = 3298; -const unsigned char help_dpad_updown_svg_data[3298] = { +const size_t help_dpad_updown_svg_size = 3280; +const unsigned char help_dpad_updown_svg_data[3280] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -29,309 +29,307 @@ const unsigned char help_dpad_updown_svg_data[3298] = { 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x20, - 0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x31,0x33, - 0x34,0x20,0x33,0x37,0x2e,0x31,0x33,0x34,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x31,0x32,0x33,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36, - 0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x31,0x48, - 0x33,0x2e,0x31,0x35,0x38,0x63,0x2d,0x32,0x2e,0x32, - 0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32, - 0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31,0x32,0x2c, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, + 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, + 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, + 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, + 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31,0x39,0x2d,0x31, + 0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x31,0x32,0x31,0x76,0x2d,0x38,0x2e, + 0x37,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x30,0x2e,0x38,0x33,0x31,0x2c,0x32,0x35,0x2e,0x32, + 0x30,0x36,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x33,0x34, + 0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x76,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32,0x38,0x39, + 0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33,0x2e,0x31, + 0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e, + 0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, + 0x39,0x2c,0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d, + 0x33,0x2e,0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31, + 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32, + 0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c, + 0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32, + 0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x68,0x38,0x2e,0x37,0x33,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x30,0x2d,0x32,0x2e,0x32,0x39,0x2c, - 0x31,0x2e,0x38,0x36,0x35,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x37,0x2e,0x31,0x31,0x31,0x63, - 0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x38,0x2e,0x37,0x33,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x68,0x38,0x2e,0x37,0x33,0x32,0x63,0x32, - 0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x33,0x2e,0x31,0x32,0x76,0x37, - 0x2e,0x31,0x31,0x32,0x63,0x30,0x2c,0x32,0x2e,0x32, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37, - 0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32,0x34, - 0x34,0x2c,0x33,0x36,0x2e,0x32,0x36,0x36,0x2c,0x32, - 0x33,0x2e,0x33,0x37,0x37,0x2c,0x33,0x37,0x2e,0x30, - 0x39,0x37,0x2c,0x32,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x33,0x37,0x2e,0x30,0x39,0x37,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x35,0x38,0x2c,0x31,0x33,0x2e,0x33,0x39, - 0x31,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x76,0x37,0x2e, - 0x31,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x31,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30, - 0x38,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x32,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x36,0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x34,0x35, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34, - 0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48, - 0x32,0x33,0x2e,0x37,0x34,0x34,0x56,0x33,0x2e,0x31, - 0x35,0x39,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x68,0x2d, - 0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x35, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x35,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63, - 0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e, - 0x36,0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33, - 0x2e,0x36,0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33, - 0x2e,0x36,0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c, - 0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x43,0x32,0x32,0x2e,0x32,0x31, - 0x38,0x2c,0x32,0x30,0x2e,0x35,0x38,0x31,0x2c,0x32, - 0x30,0x2e,0x35,0x38,0x31,0x2c,0x32,0x32,0x2e,0x32, - 0x31,0x38,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x38,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c, - 0x30,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x37, - 0x2e,0x33,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x35, - 0x33,0x2c,0x31,0x36,0x2e,0x34,0x31,0x37,0x2c,0x31, - 0x38,0x2e,0x35,0x36,0x38,0x2c,0x31,0x36,0x2e,0x34, - 0x31,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, - 0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x2e,0x32,0x32, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, - 0x30,0x39,0x39,0x2c,0x38,0x2e,0x35,0x30,0x34,0x2c, - 0x32,0x31,0x2e,0x38,0x34,0x37,0x2c,0x38,0x2e,0x36, - 0x35,0x34,0x2c,0x32,0x31,0x2e,0x35,0x37,0x33,0x2c, - 0x38,0x2e,0x36,0x35,0x34,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c, - 0x37,0x2e,0x31,0x35,0x34,0x68,0x33,0x2e,0x32,0x36, - 0x37,0x6c,0x2d,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x4c,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x2c,0x37,0x2e,0x31,0x35,0x34,0x7a,0x22,0x2f, + 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, + 0x2e,0x37,0x33,0x32,0x76,0x38,0x2e,0x37,0x33,0x32, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, + 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, + 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, + 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, + 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, + 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, + 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x34,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30, + 0x2e,0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36, + 0x32,0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30,0x30, + 0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e, + 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x48,0x32, + 0x33,0x2e,0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32, + 0x31,0x43,0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36, + 0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30, + 0x38,0x36,0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e, + 0x31,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30, + 0x2e,0x31,0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67, 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x34,0x35,0x2c,0x32, - 0x32,0x2e,0x33,0x32,0x33,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, - 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, - 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x6c,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x34, - 0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e, - 0x31,0x33,0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e, - 0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38, - 0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e, - 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c, - 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31,0x35, - 0x38,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e, - 0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e,0x30, - 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x35, - 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38,0x2e, - 0x30,0x39,0x33,0x2c,0x32,0x32,0x2e,0x32,0x39,0x32, - 0x2c,0x37,0x2e,0x39,0x36,0x39,0x2c,0x32,0x32,0x2e, - 0x33,0x32,0x33,0x2c,0x37,0x2e,0x38,0x34,0x35,0x2c, - 0x32,0x32,0x2e,0x33,0x32,0x33,0x7a,0x20,0x4d,0x34, - 0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36,0x38, - 0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e,0x36, - 0x33,0x33,0x76,0x2d,0x33,0x2e,0x32,0x36,0x36,0x4c, - 0x34,0x2e,0x35,0x35,0x2c,0x31,0x38,0x2e,0x35,0x36, - 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, - 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, - 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, - 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, - 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, - 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, - 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, - 0x2c,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36, - 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, - 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x35, - 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, - 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, - 0x39,0x2e,0x35,0x31,0x34,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x32,0x2c,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c, - 0x32,0x32,0x2e,0x33,0x32,0x32,0x2c,0x32,0x39,0x2e, - 0x32,0x33,0x32,0x2c,0x32,0x32,0x2e,0x33,0x32,0x32, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x38,0x32,0x2c, - 0x31,0x36,0x2e,0x39,0x33,0x34,0x56,0x32,0x30,0x2e, - 0x32,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2d,0x31,0x2e, - 0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32, - 0x39,0x2e,0x39,0x38,0x32,0x2c,0x31,0x36,0x2e,0x39, - 0x33,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x2c,0x33,0x33,0x2e,0x39,0x31, - 0x35,0x6c,0x33,0x2e,0x30,0x30,0x36,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31, - 0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x33, - 0x2e,0x39,0x31,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35, - 0x4c,0x31,0x38,0x2e,0x35,0x36,0x37,0x2c,0x33,0x34, - 0x2e,0x36,0x36,0x35,0x63,0x2d,0x30,0x2e,0x32,0x35, - 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e, - 0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34, - 0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d, - 0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36, - 0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, - 0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d, - 0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e, - 0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c, - 0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30,0x2e,0x32, - 0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e, - 0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c, - 0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31, - 0x39,0x2e,0x30,0x36,0x2c,0x33,0x34,0x2e,0x35,0x33, - 0x35,0x2c,0x31,0x38,0x2e,0x38,0x32,0x32,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x35,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x2c,0x33,0x34,0x2e,0x36,0x36,0x35,0x7a, - 0x20,0x4d,0x31,0x36,0x2e,0x39,0x33,0x34,0x2c,0x32, - 0x39,0x2e,0x39,0x38,0x31,0x6c,0x31,0x2e,0x36,0x33, - 0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09, - 0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x39,0x33, - 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x35, + 0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x31,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x31,0x33,0x2c,0x31,0x2e,0x36,0x33, + 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, + 0x35,0x2d,0x33,0x2e,0x36,0x35,0x73,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c, + 0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e, + 0x35,0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x63,0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d, + 0x32,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x39,0x36,0x35, + 0x2d,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x35,0x2c,0x32,0x2e,0x31,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x32,0x2e,0x31, + 0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43,0x32, + 0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33, + 0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c, + 0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e, + 0x36,0x31,0x36,0x68,0x2d,0x36,0x2e,0x30,0x31,0x31, + 0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x31,0x35, + 0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, + 0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x32,0x31, + 0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30,0x2e,0x30, + 0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x32,0x37, + 0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e, + 0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31, + 0x2e,0x32,0x36,0x33,0x2c,0x30,0x6c,0x33,0x2e,0x30, + 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x63,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32,0x33,0x31, + 0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30,0x2e,0x35, + 0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30, + 0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e,0x30,0x36, + 0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c,0x32,0x31, + 0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36,0x31,0x36, + 0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e, + 0x36,0x31,0x36,0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20, + 0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e, + 0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x37,0x4c, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35,0x37, + 0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e, + 0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30, + 0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c, + 0x31,0x39,0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e, + 0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37, + 0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, + 0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x30, + 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, + 0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x35,0x32, + 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32, + 0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33, + 0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37, + 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33, + 0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, + 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31, + 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x37, + 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, + 0x39,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d, + 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e, + 0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32, + 0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e, + 0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, + 0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31, + 0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e, + 0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e, + 0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, + 0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, + 0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37,0x38, + 0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32,0x39, + 0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32,0x39, + 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, + 0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e, + 0x35,0x34,0x35,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d, + 0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x33,0x2e,0x38,0x37,0x36,0x6c,0x33,0x2e,0x30, + 0x30,0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, + 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e, + 0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39, + 0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x31,0x34,0x38,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d, + 0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32, + 0x34,0x2d,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x63,0x30,0x2e,0x31,0x33,0x32,0x2d, + 0x30,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x33,0x38, + 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e, + 0x36,0x35,0x38,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68, + 0x36,0x2e,0x30,0x31,0x31,0x63,0x30,0x2e,0x32,0x37, + 0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c, + 0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x32,0x2c,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, + 0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, + 0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38, + 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, + 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e, + 0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x34, + 0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/resources/help/button_a.svg b/data/resources/help/button_a.svg index 6a5e44039..749ccfa3a 100644 --- a/data/resources/help/button_a.svg +++ b/data/resources/help/button_a.svg @@ -1,13 +1,16 @@ - + - + + + + diff --git a/data/resources/help/button_b.svg b/data/resources/help/button_b.svg index f2e80e738..306fc56f3 100644 --- a/data/resources/help/button_b.svg +++ b/data/resources/help/button_b.svg @@ -1,18 +1,21 @@ - + - + + + + diff --git a/data/resources/help/button_l.svg b/data/resources/help/button_l.svg index 6f747cac4..0ca94fd9f 100644 --- a/data/resources/help/button_l.svg +++ b/data/resources/help/button_l.svg @@ -1,15 +1,16 @@ - + - - - - + + + + + diff --git a/data/resources/help/button_r.svg b/data/resources/help/button_r.svg index 3049b961c..f2383d526 100644 --- a/data/resources/help/button_r.svg +++ b/data/resources/help/button_r.svg @@ -1,16 +1,19 @@ - + + - + + + + - diff --git a/data/resources/help/button_select.svg b/data/resources/help/button_select.svg index 79e1854b1..a94dd1f0b 100644 --- a/data/resources/help/button_select.svg +++ b/data/resources/help/button_select.svg @@ -1,23 +1,25 @@ - + - - - + - + + + + diff --git a/data/resources/help/button_start.svg b/data/resources/help/button_start.svg index 64ca0bdbb..f77300307 100644 --- a/data/resources/help/button_start.svg +++ b/data/resources/help/button_start.svg @@ -1,21 +1,25 @@ - + + - + - + + + diff --git a/data/resources/help/button_x.svg b/data/resources/help/button_x.svg index bf5050812..a3b289c57 100644 --- a/data/resources/help/button_x.svg +++ b/data/resources/help/button_x.svg @@ -1,13 +1,16 @@ - + - + + + + diff --git a/data/resources/help/button_y.svg b/data/resources/help/button_y.svg index 3956f78ca..b7d2d3228 100644 --- a/data/resources/help/button_y.svg +++ b/data/resources/help/button_y.svg @@ -1,12 +1,16 @@ - + - + + + + diff --git a/data/resources/help/dpad_all.svg b/data/resources/help/dpad_all.svg index 84574cecb..b0f43af65 100644 --- a/data/resources/help/dpad_all.svg +++ b/data/resources/help/dpad_all.svg @@ -1,51 +1,26 @@ - + - + - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/data/resources/help/dpad_down.svg b/data/resources/help/dpad_down.svg index b8b42abac..84114006d 100644 --- a/data/resources/help/dpad_down.svg +++ b/data/resources/help/dpad_down.svg @@ -1,48 +1,48 @@ - + - + - + - + - + - + s-0.13,0.493-0.345,0.631l-4.684,3.004C29.478,22.244,29.336,22.284,29.195,22.284z M29.945,16.896v3.266l2.545-1.633 + L29.945,16.896z"/> - - + + c0.132,0.24,0.121,0.533-0.027,0.765l-3.005,4.684C19.023,34.496,18.786,34.626,18.53,34.626z M16.897,29.942l1.633,2.545 + l1.634-2.545H16.897z"/> diff --git a/data/resources/help/dpad_left.svg b/data/resources/help/dpad_left.svg index 42af785fb..374718702 100644 --- a/data/resources/help/dpad_left.svg +++ b/data/resources/help/dpad_left.svg @@ -1,48 +1,48 @@ - + - + - + - + - - + + - + s-0.13,0.493-0.345,0.631l-4.684,3.004C29.478,22.244,29.336,22.284,29.195,22.284z M29.945,16.896v3.266l2.545-1.633 + L29.945,16.896z"/> - + c0.132,0.24,0.121,0.533-0.027,0.765l-3.005,4.684C19.023,34.496,18.786,34.626,18.53,34.626z M16.897,29.942l1.633,2.545 + l1.634-2.545H16.897z"/> diff --git a/data/resources/help/dpad_leftright.svg b/data/resources/help/dpad_leftright.svg index eeea7ef6c..a7b3d8a30 100644 --- a/data/resources/help/dpad_leftright.svg +++ b/data/resources/help/dpad_leftright.svg @@ -1,49 +1,49 @@ - + - + - + - + - - + + - - + + s-0.13,0.493-0.345,0.631l-4.684,3.004C29.478,22.244,29.336,22.284,29.195,22.284z M29.945,16.896v3.266l2.545-1.633 + L29.945,16.896z"/> - + c0.132,0.24,0.121,0.533-0.027,0.765l-3.005,4.684C19.023,34.496,18.786,34.626,18.53,34.626z M16.897,29.942l1.633,2.545 + l1.634-2.545H16.897z"/> diff --git a/data/resources/help/dpad_right.svg b/data/resources/help/dpad_right.svg index 989719d19..ef99f1937 100644 --- a/data/resources/help/dpad_right.svg +++ b/data/resources/help/dpad_right.svg @@ -1,49 +1,48 @@ - + - + - + - + - + - - + + - + c0.132,0.24,0.121,0.533-0.027,0.765l-3.005,4.684C19.023,34.496,18.786,34.626,18.53,34.626z M16.897,29.942l1.633,2.545 + l1.634-2.545H16.897z"/> diff --git a/data/resources/help/dpad_up.svg b/data/resources/help/dpad_up.svg index eb9c14e9c..b903a6851 100644 --- a/data/resources/help/dpad_up.svg +++ b/data/resources/help/dpad_up.svg @@ -1,48 +1,48 @@ - + - + - + - - + + - + - + s-0.13,0.493-0.345,0.631l-4.684,3.004C29.478,22.244,29.336,22.284,29.195,22.284z M29.945,16.896v3.266l2.545-1.633 + L29.945,16.896z"/> - + c0.132,0.24,0.121,0.533-0.027,0.765l-3.005,4.684C19.023,34.496,18.786,34.626,18.53,34.626z M16.897,29.942l1.633,2.545 + l1.634-2.545H16.897z"/> diff --git a/data/resources/help/dpad_updown.svg b/data/resources/help/dpad_updown.svg index d132ec272..76d9bfba6 100644 --- a/data/resources/help/dpad_updown.svg +++ b/data/resources/help/dpad_updown.svg @@ -1,49 +1,49 @@ - + - + - + - - + + - + - + s-0.13,0.493-0.345,0.631l-4.684,3.004C29.478,22.244,29.336,22.284,29.195,22.284z M29.945,16.896v3.266l2.545-1.633 + L29.945,16.896z"/> - - + + c0.132,0.24,0.121,0.533-0.027,0.765l-3.005,4.684C19.023,34.496,18.786,34.626,18.53,34.626z M16.897,29.942l1.633,2.545 + l1.634-2.545H16.897z"/> diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 1b9c4dbbc..58c4bb2cf 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -63,7 +63,7 @@ void HelpComponent::updateGrid() std::vector< std::shared_ptr > labels; float width = 0; - const float height = font->getLetterHeight(); + const float height = font->getLetterHeight() * 1.25f; for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) { auto icon = std::make_shared(mWindow); diff --git a/src/components/NinePatchComponent.cpp b/src/components/NinePatchComponent.cpp index 75615f065..eafa908bd 100644 --- a/src/components/NinePatchComponent.cpp +++ b/src/components/NinePatchComponent.cpp @@ -61,12 +61,12 @@ void NinePatchComponent::buildVertices() //corners never stretch, so we calculate a width and height for slices 1, 3, 5, and 7 float borderWidth = mSize.x() - (pieceSizes.x() * 2); //should be pieceSizes[0] and pieceSizes[2] - if(borderWidth < pieceSizes.x()) - borderWidth = pieceSizes.x(); + //if(borderWidth < pieceSizes.x()) + // borderWidth = pieceSizes.x(); float borderHeight = mSize.y() - (pieceSizes.y() * 2); //should be pieceSizes[0] and pieceSizes[6] - if(borderHeight < pieceSizes.y()) - borderHeight = pieceSizes.y(); + //if(borderHeight < pieceSizes.y()) + // borderHeight = pieceSizes.y(); mVertices[0 * 6].pos = pieceCoords[0]; //top left mVertices[1 * 6].pos = pieceCoords[1]; //top middle diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index b66ca8d77..109194cd6 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -63,7 +63,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // icon auto icon = std::make_shared(mWindow); icon->setImage(inputIcon[i]); - icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * ((i < 4) ? 1.25f : 1.0f)); // hack to enlarge dpad + icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * 1.25f); row.addElement(icon, false); // spacer between icon and text diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 1e0274954..ac033497b 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -29,6 +29,10 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector { std::shared_ptr ed; + // don't add statistics + if(iter->isStatistic) + continue; + // create ed and add it (and any related components) to mMenu // ed's value will be set below ComponentListRow row; @@ -72,7 +76,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector row.addElement(bracket, false); bool multiLine = iter->type == MD_MULTILINE_STRING; - const std::string& title = iter->key; + const std::string title = "INPUT GAME " + iter->key; auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] { mWindow->pushGui(new GuiTextEditPopup(mWindow, title, ed->getValue(), updateVal, multiLine)); @@ -110,6 +114,9 @@ void GuiMetaDataEd::save() { for(unsigned int i = 0; i < mEditors.size(); i++) { + if(mMetaDataDecl.at(i).isStatistic) + continue; + mMetaData->set(mMetaDataDecl.at(i).key, mEditors.at(i)->getValue()); } @@ -127,7 +134,6 @@ void GuiMetaDataEd::fetchDone(const ScraperSearchResult& result) { for(unsigned int i = 0; i < mEditors.size(); i++) { - //don't overwrite statistics if(mMetaDataDecl.at(i).isStatistic) continue; diff --git a/src/guis/GuiTextEditPopup.cpp b/src/guis/GuiTextEditPopup.cpp index 7992e685b..8491dfb3c 100644 --- a/src/guis/GuiTextEditPopup.cpp +++ b/src/guis/GuiTextEditPopup.cpp @@ -10,7 +10,7 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con addChild(&mBackground); addChild(&mGrid); - mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); mText = std::make_shared(mWindow); mText->setValue(initValue); @@ -22,14 +22,15 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con mButtonGrid = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - mGrid.setEntry(mText, Vector2i(0, 1), true, true); + mGrid.setEntry(mText, Vector2i(0, 1), true, false, Vector2i(1, 1), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); mGrid.setEntry(mButtonGrid, Vector2i(0, 2), true, false); float textHeight = mText->getFont()->getHeight(); if(multiLine) textHeight *= 6; + mText->setSize(0, textHeight); - setSize(Renderer::getScreenWidth() * 0.5f, mTitle->getFont()->getHeight() + textHeight + mButtonGrid->getSize().y()); + setSize(Renderer::getScreenWidth() * 0.5f, mTitle->getFont()->getHeight() + textHeight + mButtonGrid->getSize().y() + 40); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } @@ -37,6 +38,8 @@ void GuiTextEditPopup::onSizeChanged() { mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mText->setSize(mSize.x() - 40, mText->getSize().y()); + // update grid mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); mGrid.setRowHeightPerc(2, mButtonGrid->getSize().y() / mSize.y()); From b3dcdb52eb6e83877cad231f39788037614f011a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 27 Mar 2014 16:47:25 -0500 Subject: [PATCH 234/386] Added vram usage tracking (font textures + normal textures). --- src/Window.cpp | 7 ++++++ src/resources/Font.cpp | 28 +++++++++++++++++++++ src/resources/Font.h | 3 +++ src/resources/TextureResource.cpp | 42 +++++++++++++++++++++++++++---- src/resources/TextureResource.h | 8 +++++- 5 files changed, 82 insertions(+), 6 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index 148979eca..b1318b67b 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -141,8 +141,15 @@ void Window::update(int deltaTime) if(Settings::getInstance()->getBool("DrawFramerate")) { std::stringstream ss; + + // fps ss << std::fixed << std::setprecision(1) << (1000.0f * (float)mFrameCountElapsed / (float)mFrameTimeElapsed) << "fps, "; ss << std::fixed << std::setprecision(2) << ((float)mFrameTimeElapsed / (float)mFrameCountElapsed) << "ms"; + + // vram + float vramUsageMb = (TextureResource::getTotalMemUsage() + Font::getTotalMemUsage()) / 1000.0f / 1000.0f; + ss << "\nVRAM: " << vramUsageMb << "mb"; + mFrameDataString = ss.str(); } diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 9676c30da..d1150bd7d 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -27,6 +27,34 @@ void Font::initLibrary() } } +size_t Font::getMemUsage() const +{ + if(!textureID) + return 0; + + return textureWidth * textureHeight * 4; +} + +size_t Font::getTotalMemUsage() +{ + size_t total = 0; + + auto it = sFontMap.begin(); + while(it != sFontMap.end()) + { + if(it->second.expired()) + { + it = sFontMap.erase(it); + continue; + } + + total += it->second.lock()->getMemUsage(); + it++; + } + + return total; +} + Font::Font(int size, const std::string& path) : fontScale(1.0f), mSize(size), mPath(path) { reload(ResourceManager::getInstance()); diff --git a/src/resources/Font.h b/src/resources/Font.h index 30f623450..c0008515c 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -78,6 +78,9 @@ public: static std::shared_ptr getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig); + size_t getMemUsage() const; // returns an approximation of VRAM used by this font's texture (in bytes) + static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by font textures (in bytes) + private: static int getDpiX(); static int getDpiY(); diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index 4965da6a5..af87506b6 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -8,6 +8,7 @@ #include "SVGResource.h" std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; +std::list< std::weak_ptr > TextureResource::sTextureList; TextureResource::TextureResource(const std::string& path, bool tile) : mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()), mTile(tile) @@ -125,20 +126,51 @@ std::shared_ptr TextureResource::get(const std::string& path, b // probably // don't add it to our map because 2 svgs might be rasterized at different sizes tex = std::shared_ptr(new SVGResource(path, tile)); + sTextureList.push_back(tex); // add it to our list though rm->addReloadable(tex); tex->reload(rm); return tex; }else{ + // normal texture tex = std::shared_ptr(new TextureResource(path, tile)); + sTextureMap[key] = std::weak_ptr(tex); + sTextureList.push_back(tex); + rm->addReloadable(tex); + tex->reload(ResourceManager::getInstance()); + return tex; } - - sTextureMap[key] = std::weak_ptr(tex); - rm->addReloadable(tex); - tex->reload(ResourceManager::getInstance()); - return tex; } bool TextureResource::isInitialized() const { return mTextureID != 0; } + +size_t TextureResource::getMemUsage() const +{ + if(!mTextureID || mTextureSize.x() == 0 || mTextureSize.y() == 0) + return 0; + + return mTextureSize.x() * mTextureSize.y() * 4; +} + +size_t TextureResource::getTotalMemUsage() +{ + size_t total = 0; + + auto it = sTextureList.begin(); + while(it != sTextureList.end()) + { + if((*it).expired()) + { + // remove expired textures from the list + it = sTextureList.erase(it); + continue; + } + + total += (*it).lock()->getMemUsage(); + it++; + } + + return total; +} diff --git a/src/resources/TextureResource.h b/src/resources/TextureResource.h index 4617ace9e..578fb7913 100644 --- a/src/resources/TextureResource.h +++ b/src/resources/TextureResource.h @@ -30,6 +30,9 @@ public: // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + size_t getMemUsage() const; // returns an approximation of the VRAM used by this texture (in bytes) + static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by textures (in bytes) + protected: TextureResource(const std::string& path, bool tile); void deinit(); @@ -40,6 +43,9 @@ protected: private: GLuint mTextureID; + typedef std::pair TextureKeyType; - static std::map< TextureKeyType, std::weak_ptr > sTextureMap; + static std::map< TextureKeyType, std::weak_ptr > sTextureMap; // map of textures, used to prevent duplicate textures + + static std::list< std::weak_ptr > sTextureList; // list of all textures, used for memory approximations }; From 391e299f7941480a9d1b278e961e46cfef075344 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 28 Mar 2014 20:08:59 -0500 Subject: [PATCH 235/386] Give an error message if a scrape is started with no games selected. --- src/guis/GuiScraperMulti.cpp | 2 ++ src/guis/GuiScraperStart.cpp | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 068e5a284..44e46b8c2 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -14,6 +14,8 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue searches = getSearches(mSystems->getSelectedObjects(), mFilters->getSelected()); - GuiScraperMulti* gsm = new GuiScraperMulti(mWindow, searches, mApproveResults->getState()); - mWindow->pushGui(gsm); - delete this; + if(searches.empty()) + { + mWindow->pushGui(new GuiMsgBox(mWindow, + "NO GAMES FIT THAT CRITERIA.")); + }else{ + GuiScraperMulti* gsm = new GuiScraperMulti(mWindow, searches, mApproveResults->getState()); + mWindow->pushGui(gsm); + delete this; + } } std::queue GuiScraperStart::getSearches(std::vector systems, GameFilterFunc selector) From 6f64e647b97416619966a920d4006722fea5489a Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 28 Mar 2014 20:58:45 -0500 Subject: [PATCH 236/386] GuiScraperMulti now reports the number of games scraped. Added proper horizontal padding to GuiMsgBox. --- src/guis/GuiMsgBox.cpp | 34 ++++++++++++++++++---------------- src/guis/GuiScraperMulti.cpp | 10 +++++++++- src/guis/GuiScraperMulti.h | 1 + 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 7168c70c9..5a7487a4f 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -5,6 +5,8 @@ #include "../components/MenuComponent.h" // for makeButtonGrid #include "../Util.h" +#define HORIZONTAL_PADDING_PX 20 + GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, const std::string& name1, const std::function& func1, const std::string& name2, const std::function& func2, @@ -15,7 +17,8 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, float minWidth = Renderer::getScreenWidth() * 0.3f; // minimum width mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); - + mGrid.setEntry(mMsg, Eigen::Vector2i(0, 0), false, false); + // create the buttons mButtons.push_back(std::make_shared(mWindow, name1, name1, std::bind(&GuiMsgBox::deleteMeAndCall, this, func1))); if(!name2.empty()) @@ -40,25 +43,20 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, // put the buttons into a ComponentGrid mButtonGrid = makeButtonGrid(mWindow, mButtons); - - mGrid.setEntry(mMsg, Eigen::Vector2i(0, 0), false, true); mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 1), true, false, Eigen::Vector2i(1, 1), GridFlags::BORDER_TOP); - if(mMsg->getSize().x() > width) + // decide final width + if(mMsg->getSize().x() < width && mButtonGrid->getSize().x() < width) { - mMsg->setSize(width, 0); - }else{ - // mMsg is narrower than width - // are buttons? - if(mButtonGrid->getSize().x() < width) - { - width = std::max(mButtonGrid->getSize().x(), mMsg->getSize().x()); - width = std::max(width, minWidth); - } + // mMsg and buttons are narrower than width + width = std::max(mButtonGrid->getSize().x(), mMsg->getSize().x()); + width = std::max(width, minWidth); } + // now that we know width, we can find height + mMsg->setSize(width, 0); // mMsg->getSize.y() now returns the proper length const float msgHeight = std::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()); - setSize(width, msgHeight + mButtonGrid->getSize().y()); + setSize(width + HORIZONTAL_PADDING_PX*2, msgHeight + mButtonGrid->getSize().y()); // center for good measure setPosition((Renderer::getScreenWidth() - mSize.x()) / 2.0f, (Renderer::getScreenHeight() - mSize.y()) / 2.0f); @@ -81,9 +79,13 @@ bool GuiMsgBox::input(InputConfig* config, Input input) void GuiMsgBox::onSizeChanged() { mGrid.setSize(mSize); - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); - mGrid.setRowHeightPerc(1, mButtonGrid->getSize().y() / mSize.y()); + + // update messagebox size + mMsg->setSize(mSize.x() - HORIZONTAL_PADDING_PX*2, mGrid.getRowHeight(0)); + mGrid.onSizeChanged(); + + mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); } void GuiMsgBox::deleteMeAndCall(const std::function& func) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 44e46b8c2..bbe9d9072 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -21,6 +21,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); @@ -94,6 +95,7 @@ void GuiScraperMulti::acceptResult(const ScraperSearchResult& result) mSearchQueue.pop(); mCurrentGame++; + mTotalSuccessful++; doNextSearch(); } @@ -106,7 +108,13 @@ void GuiScraperMulti::skip() void GuiScraperMulti::finish() { - mWindow->pushGui(new GuiMsgBox(mWindow, "SCRAPING COMPLETE!", + std::stringstream ss; + if(mTotalSuccessful == 0) + ss << "NO GAMES SUCCESSFULLY SCRAPED."; + else + ss << mTotalSuccessful << " GAME" << ((mTotalSuccessful > 1) ? "S" : "") << "SUCCESSFULLY SCRAPED!"; + + mWindow->pushGui(new GuiMsgBox(mWindow, ss.str(), "OK", [&] { delete this; })); } diff --git a/src/guis/GuiScraperMulti.h b/src/guis/GuiScraperMulti.h index dd2b51c08..526c75afa 100644 --- a/src/guis/GuiScraperMulti.h +++ b/src/guis/GuiScraperMulti.h @@ -27,6 +27,7 @@ private: unsigned int mTotalGames; unsigned int mCurrentGame; + unsigned int mTotalSuccessful; std::queue mSearchQueue; NinePatchComponent mBackground; From e719a867be0b19637f8cc9addf5f514c57052c89 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 29 Mar 2014 08:51:59 -0500 Subject: [PATCH 237/386] Updated nanosvg. --- src/nanosvg/nanosvg.h | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/nanosvg/nanosvg.h b/src/nanosvg/nanosvg.h index 99bd608b9..76c4b4ba3 100644 --- a/src/nanosvg/nanosvg.h +++ b/src/nanosvg/nanosvg.h @@ -663,6 +663,7 @@ static struct NSVGgradientData* nsvg__findGradientData(struct NSVGparser* p, con while (grad) { if (strcmp(grad->id, id) == 0) return grad; + grad = grad->next; } return NULL; } @@ -1311,10 +1312,10 @@ static int nsvg__parseRotate(float* xform, const char* str) } nsvg__xformSetRotation(t, args[0]/180.0f*NSVG_PI); - nsvg__xformPremultiply(0, t); + nsvg__xformPremultiply(m, t); if (na > 1) { - nsvg__xformSetTranslation(xform, args[1], args[2]); + nsvg__xformSetTranslation(t, args[1], args[2]); nsvg__xformPremultiply(m, t); } @@ -1325,22 +1326,28 @@ static int nsvg__parseRotate(float* xform, const char* str) static void nsvg__parseTransform(float* xform, const char* str) { + float t[6]; + nsvg__xformIdentity(xform); while (*str) { if (strncmp(str, "matrix", 6) == 0) - str += nsvg__parseMatrix(xform, str); + str += nsvg__parseMatrix(t, str); else if (strncmp(str, "translate", 9) == 0) - str += nsvg__parseTranslate(xform, str); + str += nsvg__parseTranslate(t, str); else if (strncmp(str, "scale", 5) == 0) - str += nsvg__parseScale(xform, str); + str += nsvg__parseScale(t, str); else if (strncmp(str, "rotate", 6) == 0) - str += nsvg__parseRotate(xform, str); + str += nsvg__parseRotate(t, str); else if (strncmp(str, "skewX", 5) == 0) - str += nsvg__parseSkewX(xform, str); + str += nsvg__parseSkewX(t, str); else if (strncmp(str, "skewY", 5) == 0) - str += nsvg__parseSkewY(xform, str); - else + str += nsvg__parseSkewY(t, str); + else{ ++str; + continue; + } + + nsvg__xformPremultiply(xform, t); } } From aa65a800399e90e534d8bbe709dba8d4265c5d9f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 29 Mar 2014 16:55:32 -0500 Subject: [PATCH 238/386] Redid SystemView to keep "selected" versions of logos. Should make SVG logos look better + no more pixelated text. --- src/views/SystemView.cpp | 57 ++++++++++++++++++++++------------------ src/views/SystemView.h | 1 + 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index d01679409..5f8f7d2de 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -37,17 +37,32 @@ void SystemView::populate() ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(logoSize()); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); - logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // vertically and horizontally center + logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr(logo); + + ImageComponent* logoSelected = new ImageComponent(mWindow); + logoSelected->setMaxSize(logoSize() * SELECTED_SCALE); + logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); + logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, + (logoSize().y() - logoSelected->getSize().y()) / 2); // center + e.data.logoSelected = std::shared_ptr(logoSelected); }else{ // no logo in theme; use text - TextComponent* text = new TextComponent(mWindow); - text->setFont(Font::get(FONT_SIZE_LARGE)); - text->setText((*it)->getName()); - text->setSize(logoSize().x(), 0); - text->setPosition(0, (logoSize().y() - text->getSize().y()) / 2); // vertically center - text->setAlignment(TextComponent::ALIGN_CENTER); + TextComponent* text = new TextComponent(mWindow, + (*it)->getName(), + Font::get(FONT_SIZE_LARGE), + 0x000000FF, + TextComponent::ALIGN_CENTER); + text->setSize(logoSize()); e.data.logo = std::shared_ptr(text); + + TextComponent* textSelected = new TextComponent(mWindow, + (*it)->getName(), + Font::get((int)(FONT_SIZE_LARGE * SELECTED_SCALE)), + 0x000000FF, + TextComponent::ALIGN_CENTER); + textSelected->setSize(logoSize()); + e.data.logoSelected = std::shared_ptr(textSelected); } // make background extras @@ -178,25 +193,17 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) logoTrans.translation() = trans.translation() + Eigen::Vector3f(i * logoSizeX + xOff, yOff, 0); - std::shared_ptr comp = mEntries.at(index).data.logo; - if(comp) + if(index == mCursor) //scale our selection up { - if(index == mCursor) //scale our selection up - { - comp->setOpacity(0xFF); - - // fix the centering because we go by left corner and not center (bleh) - // CAN SOMEONE WHO ACTUALLY UNDERSTANDS MATRICES GIVE AN ACTUAL IMPLEMENTATION OF THIS THAT ACTUALLY WORKS? - logoTrans.translation() -= Eigen::Vector3f(((comp->getSize().x() + comp->getPosition().x()) * (1/SELECTED_SCALE)) / 2, - ((comp->getSize().y() + comp->getPosition().y()) * (1/SELECTED_SCALE)) / 2, 0); - - logoTrans.scale(Eigen::Vector3f(SELECTED_SCALE, SELECTED_SCALE, 1.0f)); - mEntries.at(index).data.logo->render(logoTrans); - logoTrans.scale(Eigen::Vector3f(1/SELECTED_SCALE, 1/SELECTED_SCALE, 1.0f)); - }else{ - comp->setOpacity(0x80); - mEntries.at(index).data.logo->render(logoTrans); - } + // selected + const std::shared_ptr& comp = mEntries.at(index).data.logoSelected; + comp->setOpacity(0xFF); + comp->render(logoTrans); + }else{ + // not selected + const std::shared_ptr& comp = mEntries.at(index).data.logo; + comp->setOpacity(0x80); + comp->render(logoTrans); } } } diff --git a/src/views/SystemView.h b/src/views/SystemView.h index df7e0ab70..59c6f3230 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -12,6 +12,7 @@ class SystemData; struct SystemViewData { std::shared_ptr logo; + std::shared_ptr logoSelected; std::shared_ptr backgroundExtras; }; From 8d67cc10531fca1d9db84d015fddca14043e1f8f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 29 Mar 2014 18:03:38 -0500 Subject: [PATCH 239/386] Fix edge case with image vertex rounding leading to texture-ImageComponent size incongruencies. --- src/components/ImageComponent.cpp | 32 +++++++++++++++++++------------ src/components/ImageComponent.h | 2 +- src/resources/SVGResource.cpp | 2 +- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 9f82bed82..9e8fd4ce9 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -160,10 +160,10 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) float yCount = mSize.y() / getTextureSize().y(); Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8)| (getOpacity()), 6); - buildImageArray(0, 0, points, texs, xCount, yCount); + buildImageArray(points, texs, xCount, yCount); }else{ Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8) | (getOpacity()), 6); - buildImageArray(0, 0, points, texs); + buildImageArray(points, texs); } drawImageArray(points, texs, colors, 6); @@ -176,20 +176,28 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) GuiComponent::renderChildren(trans); } -void ImageComponent::buildImageArray(int posX, int posY, GLfloat* points, GLfloat* texs, float px, float py) +void ImageComponent::buildImageArray(GLfloat* points, GLfloat* texs, float px, float py) { - points[0] = posX - (mSize.x() * mOrigin.x()); points[1] = posY - (mSize.y() * mOrigin.y()); - points[2] = posX - (mSize.x() * mOrigin.x()); points[3] = posY + (mSize.y() * (1 - mOrigin.y())); - points[4] = posX + (mSize.x() * (1 - mOrigin.x())); points[5] = posY - (mSize.y() * mOrigin.y()); + // we go through this mess to make sure everything is properly rounded + // if we just round vertices at the end, edge cases occur near sizes of 0.5 + Eigen::Vector2f topLeft(-mSize.x() * mOrigin.x(), -mSize.y() * mOrigin.y()); + Eigen::Vector2f bottomRight(mSize.x() * (1 -mOrigin.x()), mSize.y() * (1 - mOrigin.y())); - points[6] = posX + (mSize.x() * (1 - mOrigin.x())); points[7] = posY - (mSize.y() * mOrigin.y()); - points[8] = posX - (mSize.x() * mOrigin.x()); points[9] = posY + (mSize.y() * (1 - mOrigin.y())); - points[10] = posX + (mSize.x() * (1 -mOrigin.x())); points[11] = posY + (mSize.y() * (1 - mOrigin.y())); + const float width = round(bottomRight.x() - topLeft.x()); + const float height = round(bottomRight.y() - topLeft.y()); - // round vertices - for(int i = 0; i < 12; i++) - points[i] = round(points[i]); + topLeft[0] = round(topLeft[0]); + topLeft[1] = round(topLeft[1]); + bottomRight[0] = topLeft[0] + width; + bottomRight[1] = topLeft[1] + height; + points[0] = topLeft.x(); points[1] = topLeft.y(); + points[2] = topLeft.x(); points[3] = bottomRight.y(); + points[4] = bottomRight.x(); points[5] = topLeft.y(); + + points[6] = bottomRight.x(); points[7] = topLeft.y(); + points[8] = topLeft.x(); points[9] = bottomRight.y(); + points[10] = bottomRight.x(); points[11] = bottomRight.y(); texs[0] = 0; texs[1] = py; texs[2] = 0; texs[3] = 0; diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index 2e7b8576b..c9cc30601 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -68,7 +68,7 @@ private: void resize(); // Writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position. - void buildImageArray(int x, int y, GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); + void buildImageArray(GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); // Draws the given set of points and texture coordinates, number of coordinate pairs may be specified. void drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* colors, unsigned int count = 6); diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 16b74287f..8a2138100 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -85,7 +85,7 @@ void SVGResource::rasterizeAt(size_t width, size_t height) Eigen::Vector2i SVGResource::getImageSize() const { if(mSVGImage) - return Eigen::Vector2i((int)mSVGImage->width, (int)mSVGImage->height); + return Eigen::Vector2i((int)round(mSVGImage->width), (int)round(mSVGImage->height)); return Eigen::Vector2i::Zero(); } From 526c0bb0389ce24b46d3b687308d4a43c68d59f4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 29 Mar 2014 18:42:40 -0500 Subject: [PATCH 240/386] Fixed an error with GuiInputConfig initialization that was triggering an assert. --- src/guis/GuiInputConfig.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 109194cd6..a96868f91 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -52,7 +52,6 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); // 4 is a spacer row - mGrid.setEntry(std::make_shared(mWindow), Vector2i(4, 0), false); mList = std::make_shared(mWindow); mGrid.setEntry(mList, Vector2i(0, 5), true, true); From 480b19dccae286cc52ca0c4b24cc6958390abe49 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 4 Apr 2014 14:12:28 -0500 Subject: [PATCH 241/386] Fixed some missing settings. --- src/Settings.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Settings.cpp b/src/Settings.cpp index 2cae7bfab..66840bad5 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -33,6 +33,8 @@ void Settings::setDefaults() mBoolMap["EnableSounds"] = true; mBoolMap["ShowHelpPrompts"] = true; mBoolMap["ScrapeRatings"] = true; + mBoolMap["IgnoreGamelist"] = false; + mBoolMap["ParseGamelistOnly"] = false; mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; From c1385d4834ec83d1e369895b2046e4a680fc2e20 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 4 Apr 2014 15:00:54 -0500 Subject: [PATCH 242/386] Updated nanosvg. --- src/nanosvg/nanosvg.h | 16 +++++++++++----- src/nanosvg/nanosvgrast.h | 25 +++++++++++++++++-------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/nanosvg/nanosvg.h b/src/nanosvg/nanosvg.h index 76c4b4ba3..ad2ee5260 100644 --- a/src/nanosvg/nanosvg.h +++ b/src/nanosvg/nanosvg.h @@ -112,6 +112,7 @@ struct NSVGshape { struct NSVGpaint fill; // Fill paint struct NSVGpaint stroke; // Stroke paint + float opacity; // Opacity of the shape. float strokeWidth; // Stroke width (scaled) float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. struct NSVGpath* paths; // Linked list of paths in the image. @@ -156,6 +157,8 @@ void nsvgDelete(struct NSVGimage* image); #define NSVG_ALIGN_MEET 1 #define NSVG_ALIGN_SLICE 2 +#define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) + #ifdef _MSC_VER #pragma warning (disable: 4996) // Switch off security warnings #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings @@ -335,6 +338,7 @@ struct NSVGattrib float xform[6]; unsigned int fillColor; unsigned int strokeColor; + float opacity; float fillOpacity; float strokeOpacity; char fillGradient[64]; @@ -536,13 +540,14 @@ static struct NSVGparser* nsvg__createParser() // Init style nsvg__xformIdentity(p->attr[0].xform); - p->attr[0].fillColor = 0; - p->attr[0].strokeColor = 0; + p->attr[0].fillColor = NSVG_RGB(0,0,0); + p->attr[0].strokeColor = NSVG_RGB(0,0,0); + p->attr[0].opacity = 1; p->attr[0].fillOpacity = 1; p->attr[0].strokeOpacity = 1; p->attr[0].stopOpacity = 1; p->attr[0].strokeWidth = 1; - p->attr[0].hasFill = 0; + p->attr[0].hasFill = 1; p->attr[0].hasStroke = 0; p->attr[0].visible = 1; @@ -743,6 +748,7 @@ static void nsvg__addShape(struct NSVGparser* p) scale = nsvg__maxf(fabsf(attr->xform[0]), fabsf(attr->xform[3])); shape->strokeWidth = attr->strokeWidth * scale; + shape->opacity = attr->opacity; shape->paths = p->plist; p->plist = NULL; @@ -929,8 +935,6 @@ static float nsvg__actualLength(struct NSVGparser* p) } -#define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) - static unsigned int nsvg__parseColorHex(const char* str) { unsigned int c = 0, r = 0, g = 0, b = 0; @@ -1389,6 +1393,8 @@ static int nsvg__parseAttr(struct NSVGparser* p, const char* name, const char* v attr->hasFill = 1; attr->fillColor = nsvg__parseColor(value); } + } else if (strcmp(name, "opacity") == 0) { + attr->opacity = nsvg__parseFloat(p, value, 2); } else if (strcmp(name, "fill-opacity") == 0) { attr->fillOpacity = nsvg__parseFloat(p, value, 2); } else if (strcmp(name, "stroke") == 0) { diff --git a/src/nanosvg/nanosvgrast.h b/src/nanosvg/nanosvgrast.h index c489f3076..60eac66ea 100644 --- a/src/nanosvg/nanosvgrast.h +++ b/src/nanosvg/nanosvgrast.h @@ -394,6 +394,16 @@ static unsigned int nsvg__lerpRGBA(unsigned int c0, unsigned int c1, float u) return nsvg__RGBA(r,g,b,a); } +static unsigned int nsvg__applyOpacity(unsigned int c, float u) +{ + int iu = (float)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); + int r = (c) & 0xff; + int g = (c>>8) & 0xff; + int b = (c>>16) & 0xff; + int a = (((c>>24) & 0xff)*iu) >> 8; + return nsvg__RGBA(r,g,b,a); +} + static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, float tx, float ty, float scale, struct NSVGcachedPaint* cache) { @@ -670,7 +680,7 @@ static void nsvg__unpremultiplyAlpha(unsigned char* image, int w, int h, int str } -static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* paint) +static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* paint, float opacity) { int i, j; struct NSVGgradient* grad; @@ -678,7 +688,7 @@ static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* pai cache->type = paint->type; if (paint->type == NSVG_PAINT_COLOR) { - cache->colors[0] = paint->color; + cache->colors[0] = nsvg__applyOpacity(paint->color, opacity); return; } @@ -692,14 +702,13 @@ static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* pai cache->colors[i] = 0; } if (grad->nstops == 1) { for (i = 0; i < 256; i++) - cache->colors[i] = grad->stops[i].color; + cache->colors[i] = nsvg__applyOpacity(grad->stops[i].color, opacity); } else { unsigned int ca, cb; float ua, ub, du, u; int ia, ib, count; - ca = grad->stops[0].color; - cb = grad->stops[grad->nstops-1].color; + ca = nsvg__applyOpacity(grad->stops[0].color, opacity); ua = nsvg__clampf(grad->stops[0].offset, 0, 1); ub = nsvg__clampf(grad->stops[grad->nstops-1].offset, ua, 1); ia = ua * 255.0f; @@ -709,8 +718,8 @@ static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* pai } for (i = 0; i < grad->nstops-1; i++) { - ca = grad->stops[i].color; - cb = grad->stops[i+1].color; + ca = nsvg__applyOpacity(grad->stops[i].color, opacity); + cb = nsvg__applyOpacity(grad->stops[i+1].color, opacity); ua = nsvg__clampf(grad->stops[i].offset, 0, 1); ub = nsvg__clampf(grad->stops[i+1].offset, 0, 1); ia = ua * 255.0f; @@ -778,7 +787,7 @@ void nsvgRasterize(struct NSVGrasterizer* r, qsort(r->edges, r->nedges, sizeof(struct NSVGedge), nsvg__cmpEdge); // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule - nsvg__initPaint(&cache, &shape->fill); + nsvg__initPaint(&cache, &shape->fill, shape->opacity); nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache); } From 9acfda6e1af1ca73008c9ebf6b9b1d2fd3e09414 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 5 Apr 2014 00:41:08 -0500 Subject: [PATCH 243/386] New "GuiGamelistOptions" to replace fast select. --- CMakeLists.txt | 2 + src/guis/GuiGamelistOptions.cpp | 76 ++++++++++++++++++++++++ src/guis/GuiGamelistOptions.h | 27 +++++++++ src/views/gamelist/BasicGameListView.cpp | 5 +- src/views/gamelist/IGameListView.cpp | 27 +++------ 5 files changed, 115 insertions(+), 22 deletions(-) create mode 100644 src/guis/GuiGamelistOptions.cpp create mode 100644 src/guis/GuiGamelistOptions.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a777915f7..7470bd21a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -187,6 +187,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h @@ -272,6 +273,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp diff --git a/src/guis/GuiGamelistOptions.cpp b/src/guis/GuiGamelistOptions.cpp new file mode 100644 index 000000000..658be0d7d --- /dev/null +++ b/src/guis/GuiGamelistOptions.cpp @@ -0,0 +1,76 @@ +#include "GuiGamelistOptions.h" +#include "GuiMetaDataEd.h" +#include "../views/gamelist/IGameListView.h" + +GuiGamelistOptions::GuiGamelistOptions(Window* window, IGameListView* gamelist) : GuiComponent(window), + mGamelist(gamelist), + mMenu(window, "OPTIONS") +{ + addChild(&mMenu); + + // sort list by + mListSort = std::make_shared(mWindow, "SORT GAMES BY", false); + for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) + { + const FileData::SortType& sort = FileSorts::SortTypes.at(i); + mListSort->add(sort.description, &sort, i == 0); // TODO - actually make the sort type persistent + } + + mMenu.addWithLabel("SORT GAMES BY", mListSort); + + // edit game metadata + ComponentListRow row; + row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this)); + mMenu.addRow(row); + + // center the menu + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); +} + +GuiGamelistOptions::~GuiGamelistOptions() +{ + // apply sort + FileData* root = mGamelist->getCursor()->getSystem()->getRootFolder(); + root->sort(*mListSort->getSelected()); // will also recursively sort children + + // notify that the root folder was sorted + mGamelist->onFileChanged(root, FILE_SORTED); +} + +void GuiGamelistOptions::openMetaDataEd() +{ + // open metadata editor + FileData* file = mGamelist->getCursor(); + ScraperSearchParams p; + p.game = file; + p.system = file->getSystem(); + mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), + std::bind(&IGameListView::onFileChanged, mGamelist, file, FILE_METADATA_CHANGED), [this, file] { + boost::filesystem::remove(file->getPath()); //actually delete the file on the filesystem + file->getParent()->removeChild(file); //unlink it so list repopulations triggered from onFileChanged won't see it + mGamelist->onFileChanged(file, FILE_REMOVED); //tell the view + delete file; //free it + })); + delete this; +} + +bool GuiGamelistOptions::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("b", input) && input.value) + { + delete this; + return true; + } + + return mMenu.input(config, input); +} + +std::vector GuiGamelistOptions::getHelpPrompts() +{ + auto prompts = mMenu.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "close")); + return prompts; +} diff --git a/src/guis/GuiGamelistOptions.h b/src/guis/GuiGamelistOptions.h new file mode 100644 index 000000000..eef60bd7e --- /dev/null +++ b/src/guis/GuiGamelistOptions.h @@ -0,0 +1,27 @@ +#include "../GuiComponent.h" +#include "../components/MenuComponent.h" +#include "../components/OptionListComponent.h" + +#include "../FileSorts.h" + +class IGameListView; + +class GuiGamelistOptions : public GuiComponent +{ +public: + GuiGamelistOptions(Window* window, IGameListView* gamelist); + virtual ~GuiGamelistOptions(); + + virtual bool input(InputConfig* config, Input input) override; + virtual std::vector getHelpPrompts() override; + +private: + void openMetaDataEd(); + + MenuComponent mMenu; + + typedef OptionListComponent SortList; + std::shared_ptr mListSort; + + IGameListView* mGamelist; +}; diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index 4d4dc8e93..75bf2b8c5 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -68,9 +68,10 @@ void BasicGameListView::launch(FileData* game) std::vector BasicGameListView::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("left/right", "switch")); + prompts.push_back(HelpPrompt("left/right", "system")); prompts.push_back(HelpPrompt("up/down", "choose")); - prompts.push_back(HelpPrompt("a", "play")); + prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); + prompts.push_back(HelpPrompt("select", "options")); return prompts; } diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index f8aad2629..8a46bef29 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -2,7 +2,7 @@ #include "../../Window.h" #include "../../guis/GuiMetaDataEd.h" #include "../../guis/GuiMenu.h" -#include "../../guis/GuiFastSelect.h" +#include "../../guis/GuiGamelistOptions.h" #include "../ViewController.h" #include "../../Settings.h" #include "../../Log.h" @@ -13,19 +13,13 @@ bool IGameListView::input(InputConfig* config, Input input) // F3 to open metadata editor if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_F3 && input.value != 0) { - // open metadata editor - FileData* file = getCursor(); - ScraperSearchParams p; - p.game = file; - p.system = file->getSystem(); - mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), - std::bind(&IGameListView::onFileChanged, this, file, FILE_METADATA_CHANGED), [file, this] { - boost::filesystem::remove(file->getPath()); //actually delete the file on the filesystem - file->getParent()->removeChild(file); //unlink it so list repopulations triggered from onFileChanged won't see it - onFileChanged(file, FILE_REMOVED); //tell the view - delete file; //free it - })); + + + // select to open GuiGamelistOptions + }else if(config->isMappedTo("select", input) && input.value) + { Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); + mWindow->pushGui(new GuiGamelistOptions(mWindow, this)); return true; // Ctrl-R to reload a view when debugging @@ -35,13 +29,6 @@ bool IGameListView::input(InputConfig* config, Input input) LOG(LogDebug) << "reloading view"; mWindow->getViewController()->reloadGameListView(this, true); return true; - // select opens the fast select GUI - }else if(config->isMappedTo("select", input) && input.value != 0) - { - // open fast select - Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); - mWindow->pushGui(new GuiFastSelect(mWindow, this)); - return true; } return GuiComponent::input(config, input); From cafa1b5b8d64daa336949a27cad65896e8f856f4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 5 Apr 2014 12:48:38 -0500 Subject: [PATCH 244/386] Fixed dpad_all.svg. Added "DebugText" setting that causes TextComponents to draw a background of their size + the area of their TextCache. It can be toggled with Ctrl-T when running with --debug. Added std::cout output when specifying overriding home path. --- data/converted/help_dpad_all_svg.cpp | 453 ++++++++++++++------ data/resources/help/dpad_all.svg | 57 ++- src/Settings.cpp | 1 + src/Window.cpp | 10 +- src/components/TextComponent.cpp | 15 +- src/platform.cpp | 3 + src/views/gamelist/DetailedGameListView.cpp | 2 +- 7 files changed, 381 insertions(+), 160 deletions(-) diff --git a/data/converted/help_dpad_all_svg.cpp b/data/converted/help_dpad_all_svg.cpp index eb6b5bbb2..9be1af6fa 100644 --- a/data/converted/help_dpad_all_svg.cpp +++ b/data/converted/help_dpad_all_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t help_dpad_all_svg_size = 1817; -const unsigned char help_dpad_all_svg_data[1817] = { +const size_t help_dpad_all_svg_size = 3523; +const unsigned char help_dpad_all_svg_data[3523] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -43,147 +43,318 @@ const unsigned char help_dpad_all_svg_data[1817] = { 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x70,0x78,0x22,0x20,0x76,0x69,0x65, - 0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, - 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, - 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x6e,0x6f,0x6e,0x65,0x22,0x20,0x73,0x74,0x72, - 0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, - 0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x2e, - 0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d, - 0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74, - 0x3d,0x22,0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x33,0x33,0x2e,0x39,0x33,0x39,0x2c,0x31,0x32,0x2e, - 0x36,0x30,0x34,0x68,0x2d,0x39,0x2e,0x34,0x38,0x32, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x63,0x30,0x2c,0x30,0x2c,0x30,0x2d,0x32, - 0x2e,0x33,0x37,0x31,0x2d,0x32,0x2e,0x33,0x37,0x31, - 0x2d,0x32,0x2e,0x33,0x37,0x31,0x68,0x2d,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x30,0x2c,0x30,0x2d,0x32,0x2e, - 0x33,0x36,0x39,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x36, - 0x39,0x2c,0x32,0x2e,0x33,0x37,0x31,0x76,0x39,0x2e, - 0x34,0x38,0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x63, - 0x30,0x2c,0x30,0x2d,0x32,0x2e,0x33,0x37,0x31,0x2c, - 0x30,0x2d,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e, - 0x33,0x37,0x76,0x37,0x2e,0x31,0x31,0x31,0x63,0x30, - 0x2c,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31, - 0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x32,0x2e,0x33, - 0x37,0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x68,0x39, - 0x2e,0x34,0x38,0x34,0x76,0x39,0x2e,0x34,0x38,0x32, - 0x63,0x30,0x2c,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33, - 0x37,0x31,0x2c,0x32,0x2e,0x33,0x36,0x39,0x2c,0x32, - 0x2e,0x33,0x37,0x31,0x68,0x37,0x2e,0x31,0x31,0x31, - 0x63,0x30,0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31, - 0x2c,0x30,0x2c,0x32,0x2e,0x33,0x37,0x31,0x2d,0x32, - 0x2e,0x33,0x37,0x31,0x76,0x2d,0x39,0x2e,0x34,0x38, - 0x32,0x68,0x39,0x2e,0x34,0x38,0x32,0x63,0x30,0x2c, - 0x30,0x2c,0x32,0x2e,0x33,0x37,0x31,0x2c,0x30,0x2c, - 0x32,0x2e,0x33,0x37,0x31,0x2d,0x32,0x2e,0x33,0x37, - 0x31,0x76,0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x43,0x33,0x36,0x2e,0x33,0x31, - 0x31,0x2c,0x31,0x34,0x2e,0x39,0x37,0x34,0x2c,0x33, - 0x36,0x2e,0x33,0x31,0x31,0x2c,0x31,0x32,0x2e,0x36, - 0x30,0x34,0x2c,0x33,0x33,0x2e,0x39,0x33,0x39,0x2c, - 0x31,0x32,0x2e,0x36,0x30,0x34,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x6e,0x6f,0x6e,0x65,0x22,0x20,0x73,0x74,0x72,0x6f, - 0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d, - 0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x2e,0x35, - 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d, - 0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d, - 0x22,0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x31,0x2e,0x34, - 0x33,0x31,0x63,0x31,0x2e,0x36,0x30,0x32,0x2c,0x30, - 0x2c,0x32,0x2e,0x39,0x2d,0x31,0x2e,0x32,0x39,0x39, - 0x2c,0x32,0x2e,0x39,0x2d,0x32,0x2e,0x39,0x30,0x31, - 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x31,0x2e,0x36, - 0x30,0x32,0x2d,0x31,0x2e,0x32,0x39,0x39,0x2d,0x32, - 0x2e,0x39,0x2d,0x32,0x2e,0x39,0x2d,0x32,0x2e,0x39, - 0x63,0x2d,0x31,0x2e,0x36,0x30,0x34,0x2c,0x30,0x2d, - 0x32,0x2e,0x39,0x2c,0x31,0x2e,0x32,0x39,0x39,0x2d, - 0x32,0x2e,0x39,0x2c,0x32,0x2e,0x39,0x43,0x31,0x35, - 0x2e,0x36,0x33,0x31,0x2c,0x32,0x30,0x2e,0x31,0x33, - 0x32,0x2c,0x31,0x36,0x2e,0x39,0x32,0x38,0x2c,0x32, - 0x31,0x2e,0x34,0x33,0x31,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x32,0x31,0x2e,0x34,0x33,0x31,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72, - 0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, - 0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x2e, - 0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d, - 0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d,0x22, - 0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74,0x72, - 0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c, - 0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x2e,0x31,0x38,0x33,0x0d,0x0a,0x09,0x09,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x31,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, - 0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, - 0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, - 0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d, - 0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, - 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31,0x32,0x35, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x0d,0x0a,0x09,0x09, - 0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30, - 0x30,0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33, - 0x2e,0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b, - 0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, - 0x2e,0x35,0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65, - 0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3d, - 0x22,0x72,0x6f,0x75,0x6e,0x64,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72, - 0x6c,0x69,0x6d,0x69,0x74,0x3d,0x22,0x31,0x30,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x37, - 0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39,0x0d,0x0a, - 0x09,0x09,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x34,0x2d, - 0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31, - 0x4c,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, + 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, + 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, + 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09, 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x73, - 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74, - 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x73,0x74, - 0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a, - 0x6f,0x69,0x6e,0x3d,0x22,0x72,0x6f,0x75,0x6e,0x64, - 0x22,0x20,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d, - 0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3d, - 0x22,0x31,0x30,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30, + 0x38,0x35,0x2c,0x33,0x37,0x2e,0x30,0x35,0x38,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, + 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, + 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, + 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, + 0x35,0x2e,0x32,0x30,0x35,0x2c,0x30,0x2c,0x32,0x33, + 0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x32,0x32,0x2e, + 0x30,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09, + 0x76,0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32, + 0x2e,0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37, + 0x2d,0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37, + 0x33,0x34,0x56,0x33,0x2e,0x31,0x32,0x31,0x63,0x30, + 0x2d,0x32,0x2e,0x32,0x39,0x2c,0x31,0x2e,0x38,0x36, + 0x35,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x68, + 0x37,0x2e,0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39, + 0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, + 0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37, + 0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x68, + 0x38,0x2e,0x37,0x33,0x31,0x63,0x31,0x2e,0x32,0x30, + 0x31,0x2c,0x30,0x2c,0x32,0x2e,0x31,0x35,0x34,0x2c, + 0x30,0x2e,0x35,0x32,0x35,0x2c,0x32,0x2e,0x36,0x38, + 0x34,0x2c,0x31,0x2e,0x34,0x38,0x63,0x30,0x2e,0x32, + 0x30,0x37,0x2c,0x30,0x2e,0x33,0x37,0x35,0x2c,0x30, + 0x2e,0x34,0x35,0x36,0x2c,0x31,0x2e,0x31,0x31,0x32, + 0x2c,0x30,0x2e,0x34,0x32,0x39,0x2c,0x31,0x2e,0x36, + 0x33,0x39,0x68,0x30,0x2e,0x30,0x30,0x38,0x76,0x37, + 0x2e,0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x32,0x39, + 0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e,0x31, + 0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37,0x33, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x76,0x38, + 0x2e,0x37,0x33,0x32,0x43,0x32,0x35,0x2e,0x32,0x30, + 0x36,0x2c,0x33,0x36,0x2e,0x32,0x32,0x37,0x2c,0x32, + 0x33,0x2e,0x33,0x34,0x2c,0x33,0x37,0x2e,0x30,0x35, + 0x38,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x2c,0x33, + 0x37,0x2e,0x30,0x35,0x38,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x33, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x32,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x33,0x76,0x37,0x2e,0x31,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, + 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, + 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e, + 0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d, + 0x0a,0x09,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, + 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, + 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x35,0x68, + 0x31,0x30,0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33, + 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x31,0x76,0x2d,0x37,0x2e,0x31,0x32,0x31,0x0d,0x0a, + 0x09,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x30,0x35,0x2d,0x30,0x2e,0x32,0x38,0x37,0x2d,0x30, + 0x2e,0x31,0x31,0x32,0x2d,0x31,0x2e,0x36,0x30,0x39, + 0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x30, + 0x39,0x48,0x32,0x33,0x2e,0x37,0x30,0x37,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x38,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e, + 0x31,0x32,0x31,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x63, + 0x2d,0x32,0x2e,0x30,0x31,0x32,0x2c,0x30,0x2d,0x33, + 0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e,0x36,0x33,0x38, + 0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e,0x36, + 0x35,0x31,0x63,0x30,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x31,0x2e,0x36,0x33,0x37,0x2d,0x33,0x2e,0x36, + 0x35,0x2c,0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e, + 0x36,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e, + 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, + 0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x33,0x2e,0x36,0x35,0x43,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x2c,0x32,0x30,0x2e,0x35,0x34,0x34, + 0x2c,0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x32, + 0x2e,0x31,0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x31,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x7a,0x20, + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36, + 0x2e,0x33,0x38,0x63,0x2d,0x31,0x2e,0x31,0x38,0x35, + 0x2c,0x30,0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2d,0x32,0x2e,0x31,0x34,0x39, + 0x2c,0x32,0x2e,0x31,0x35,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x37,0x2c,0x30, + 0x2e,0x39,0x36,0x34,0x2c,0x32,0x2e,0x31,0x35,0x31, + 0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, + 0x35,0x31,0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, + 0x2c,0x32,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31, + 0x35,0x31,0x43,0x32,0x30,0x2e,0x36,0x38,0x31,0x2c, + 0x31,0x37,0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e, + 0x37,0x31,0x36,0x2c,0x31,0x36,0x2e,0x33,0x38,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e, + 0x33,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x37,0x68,0x2d,0x36,0x2e,0x30, + 0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, + 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, + 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, + 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, + 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x37,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x32,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x37,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x37,0x2c, + 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, + 0x31,0x37,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x37,0x7a,0x0d,0x0a,0x09,0x09, + 0x09,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, + 0x37,0x2e,0x31,0x31,0x37,0x68,0x33,0x2e,0x32,0x36, + 0x37,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e, + 0x35,0x37,0x32,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37, + 0x2c,0x37,0x2e,0x31,0x31,0x37,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, + 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, + 0x33,0x2e,0x30,0x30,0x34,0x76,0x2d,0x36,0x2e,0x30, + 0x31,0x4c,0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30, + 0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, + 0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e, + 0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30, + 0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39, + 0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e,0x31, + 0x36,0x31,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d, + 0x30,0x2e,0x31,0x33,0x37,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x33,0x37,0x35,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34, + 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e, + 0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63, + 0x30,0x2e,0x32,0x33,0x2d,0x30,0x2e,0x31,0x34,0x37, + 0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31, + 0x35,0x39,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30, + 0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c, + 0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e, + 0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x39,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38, + 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, + 0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, + 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e, + 0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35, + 0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, + 0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32, + 0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c, + 0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31, + 0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63, + 0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30, + 0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33,0x2d, + 0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30,0x39, + 0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30, + 0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d, + 0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e, + 0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c, + 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e, + 0x31,0x33,0x32,0x2c,0x30,0x2e,0x35,0x33,0x32,0x2d, + 0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36, + 0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e, + 0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63, + 0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33, + 0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, + 0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34, + 0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x33,0x31,0x4c,0x32,0x39,0x2e,0x36,0x2c, + 0x32,0x32,0x2e,0x31,0x36,0x35,0x43,0x32,0x39,0x2e, + 0x34,0x37,0x37,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34, + 0x2c,0x32,0x39,0x2e,0x33,0x33,0x35,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39, + 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20, + 0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36, + 0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36, + 0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36, + 0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39, + 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, + 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x6c, + 0x33,0x2e,0x30,0x30,0x37,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31, 0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37, - 0x36,0x0d,0x0a,0x09,0x09,0x6c,0x33,0x2e,0x30,0x30, - 0x36,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d,0x36, - 0x2e,0x30,0x31,0x31,0x4c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63, + 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, + 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, + 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, + 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, + 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30, + 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, + 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, + 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, + 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x34,0x2d,0x30, + 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, + 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x37,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, + 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38, + 0x2e,0x37,0x38,0x35,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, + 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, + 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, + 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, + 0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0d,0x0a }; diff --git a/data/resources/help/dpad_all.svg b/data/resources/help/dpad_all.svg index b0f43af65..c34f6241e 100644 --- a/data/resources/help/dpad_all.svg +++ b/data/resources/help/dpad_all.svg @@ -2,25 +2,52 @@ + width="37.061px" height="37.061px" viewBox="0 0 37.061 37.061" enable-background="new 0 0 37.061 37.061" xml:space="preserve"> - + + + - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/Settings.cpp b/src/Settings.cpp index 66840bad5..f0f750529 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -38,6 +38,7 @@ void Settings::setDefaults() mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; + mBoolMap["DebugText"] = false; mIntMap["DimTime"] = 120*1000; mIntMap["ScraperResizeWidth"] = 400; diff --git a/src/Window.cpp b/src/Window.cpp index b1318b67b..e69a1c1bb 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -106,9 +106,15 @@ void Window::input(InputConfig* config, Input input) { if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) { - // toggle debug grid + // toggle debug grid with Ctrl-G Settings::getInstance()->setBool("DebugGrid", !Settings::getInstance()->getBool("DebugGrid")); - }else if(config->isMappedTo("mastervolup", input)) + } + else if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_t && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + { + // toggle TextComponent debug view with Ctrl-T + Settings::getInstance()->setBool("DebugText", !Settings::getInstance()->getBool("DebugText")); + } + else if(config->isMappedTo("mastervolup", input)) { VolumeControl::getInstance()->setVolume(VolumeControl::getInstance()->getVolume() + 5); } diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 21cab7b26..191ffedd6 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -4,6 +4,7 @@ #include "../Window.h" #include "../ThemeData.h" #include "../Util.h" +#include "../Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(Font::get(FONT_SIZE_MEDIUM)), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT) @@ -91,9 +92,21 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) break; } + if(Settings::getInstance()->getBool("DebugText")) + { + // draw the "textbox" area, what we are aligned within + Renderer::setMatrix(trans); + Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0xFF000033); + } + trans.translate(off); trans = roundMatrix(trans); Renderer::setMatrix(trans); + + // draw the text area, where the text actually is going + if(Settings::getInstance()->getBool("DebugText")) + Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + mFont->renderTextCache(mTextCache.get()); } @@ -179,7 +192,7 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st setAlignment(ALIGN_LEFT); else if(str == "center") setAlignment(ALIGN_CENTER); - else if(str == "ALIGN_RIGHT") + else if(str == "right") setAlignment(ALIGN_RIGHT); else LOG(LogError) << "Unknown text alignment string: " << str; diff --git a/src/platform.cpp b/src/platform.cpp index be7752d91..2220143f7 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -1,6 +1,7 @@ #include "platform.h" #include #include +#include std::string sHomePathOverride; @@ -8,6 +9,8 @@ void setHomePathOverride(const std::string& path) { // make it use generic directory separators sHomePathOverride = boost::filesystem::path(path).generic_string(); + + std::cout << "Using home path: " << sHomePathOverride; } std::string getHomePath() diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 2c5f31696..395a7350c 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -88,7 +88,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them for(unsigned int i = 0; i < labels.size(); i++) { - labels[i]->applyTheme(theme, getName(), lblElements[i], ALL ^ ThemeFlags::TEXT); + labels[i]->applyTheme(theme, getName(), lblElements[i], ALL); } From 062a004e4a9b85edac5c921bf62fc8eea435e413 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 6 Apr 2014 18:55:57 -0500 Subject: [PATCH 245/386] Added support for automatic rasterization sizes (leave width or height as 0). --- src/resources/SVGResource.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 8a2138100..6dc773a47 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -45,15 +45,25 @@ void SVGResource::initFromMemory(const char* file, size_t length) if(mLastWidth && mLastHeight) rasterizeAt(mLastWidth, mLastHeight); else - rasterizeAt((int)round(mSVGImage->width), (int)round(mSVGImage->height)); + rasterizeAt((size_t)round(mSVGImage->width), (size_t)round(mSVGImage->height)); } void SVGResource::rasterizeAt(size_t width, size_t height) { - if(!mSVGImage || width == 0 || height == 0) + if(!mSVGImage || (width == 0 && height == 0)) return; - if(width != (int)round(mSVGImage->width) && height != (int)round(mSVGImage->height)) + if(width == 0) + { + // auto scale width to keep aspect + width = (size_t)round((height / mSVGImage->height) * mSVGImage->width); + }else if(height == 0) + { + // auto scale height to keep aspect + height = (size_t)round((width / mSVGImage->width) * mSVGImage->height); + } + + if(width != (size_t)round(mSVGImage->width) && height != (size_t)round(mSVGImage->height)) { mLastWidth = width; mLastHeight = height; From e5bada7f519419b9086b86ac6d2e6e7b1ebb1d2e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 6 Apr 2014 19:15:02 -0500 Subject: [PATCH 246/386] Some styling changes, a little refactoring of RatingComponent. --- src/components/HelpComponent.cpp | 4 +-- src/components/RatingComponent.cpp | 30 +++++++++++------------ src/components/RatingComponent.h | 6 +++-- src/components/ScraperSearchComponent.cpp | 2 +- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 58c4bb2cf..255f32f85 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -9,8 +9,8 @@ #include -#define OFFSET_X 6 // move the entire thing right by this amount (px) -#define OFFSET_Y 6 // move the entire thing up by this amount (px) +#define OFFSET_X 12 // move the entire thing right by this amount (px) +#define OFFSET_Y 12 // move the entire thing up by this amount (px) #define ICON_TEXT_SPACING 8 // space between [icon] and [text] (px) #define ENTRY_SPACING 16 // space between [text] and next [icon] (px) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index dccc0a13c..980a4f3d2 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -9,7 +9,7 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window) mFilledTexture = TextureResource::get(":/star_filled.svg", true); mUnfilledTexture = TextureResource::get(":/star_unfilled.svg", true); mValue = 0.5f; - mSize << 64 * 5.0f, 64; + mSize << 64 * NUM_RATING_STARS, 64; updateVertices(); } @@ -18,14 +18,14 @@ void RatingComponent::setValue(const std::string& value) if(value.empty()) { mValue = 0.0f; - return; + }else{ + mValue = stof(value); + if(mValue > 1.0f) + mValue = 1.0f; + else if(mValue < 0.0f) + mValue = 0.0f; } - mValue = stof(value); - if(mValue > 1.0f) - mValue = 1.0f; - else if(mValue < 0.0f) - mValue = 0.0f; updateVertices(); } @@ -37,20 +37,20 @@ std::string RatingComponent::getValue() const void RatingComponent::onSizeChanged() { if(mSize.y() == 0) - mSize[1] = mSize.x() / 5.0f; + mSize[1] = mSize.x() / NUM_RATING_STARS; else if(mSize.x() == 0) - mSize[0] = mSize.y() * 5.0f; + mSize[0] = mSize.y() * NUM_RATING_STARS; auto filledSVG = dynamic_cast(mFilledTexture.get()); auto unfilledSVG = dynamic_cast(mUnfilledTexture.get()); if(mSize.y() > 0) { - size_t sz = (size_t)round(mSize.y()); + size_t heightPx = (size_t)round(mSize.y()); if(filledSVG) - filledSVG->rasterizeAt(sz, sz); + filledSVG->rasterizeAt(heightPx, heightPx); if(unfilledSVG) - unfilledSVG->rasterizeAt(sz, sz); + unfilledSVG->rasterizeAt(heightPx, heightPx); } updateVertices(); @@ -58,9 +58,9 @@ void RatingComponent::onSizeChanged() void RatingComponent::updateVertices() { - const float numStars = 5.0f; + const float numStars = NUM_RATING_STARS; - const float h = getSize().y(); + const float h = getSize().y(); // is the same as a single star's width const float w = h * mValue * numStars; const float fw = h * numStars; @@ -128,7 +128,7 @@ bool RatingComponent::input(InputConfig* config, Input input) { if(config->isMappedTo("a", input) && input.value != 0) { - mValue += 0.2f; + mValue += 1.f / NUM_RATING_STARS; if(mValue > 1.0f) mValue = 0.0f; diff --git a/src/components/RatingComponent.h b/src/components/RatingComponent.h index 125ee5a83..bd587636b 100644 --- a/src/components/RatingComponent.h +++ b/src/components/RatingComponent.h @@ -3,6 +3,8 @@ #include "../GuiComponent.h" #include "../resources/TextureResource.h" +#define NUM_RATING_STARS 5 + // Used to visually display/edit some sort of "score" - e.g. 5/10, 3/5, etc. // setSize(x, y) works a little differently than you might expect: // * (0, y != 0) - x will be automatically calculated (5*y). @@ -36,7 +38,7 @@ private: Eigen::Vector2f tex; } mVertices[12]; - std::shared_ptr mFilledTexture; // Must be square (width == height)! - std::shared_ptr mUnfilledTexture; // Must be square (width == height)! + std::shared_ptr mFilledTexture; + std::shared_ptr mUnfilledTexture; }; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 5f1745ae6..27bf603e5 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -246,7 +246,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector void ScraperSearchComponent::onSearchError(const std::string& error) { - mWindow->pushGui(new GuiMsgBox(mWindow, error, + mWindow->pushGui(new GuiMsgBox(mWindow, strToUpper(error), "RETRY", std::bind(&ScraperSearchComponent::search, this, mLastSearch), "SKIP", mSkipCallback, "CANCEL", mCancelCallback)); From 1b66150fe7ce20d5e1d6600bf47c934649f53ba4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 6 Apr 2014 19:24:01 -0500 Subject: [PATCH 247/386] Help prompts are now sorted, to the order [dpad] [face buttons] [start/select]. --- src/Window.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/Window.cpp b/src/Window.cpp index e69a1c1bb..72952b524 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -241,5 +241,30 @@ void Window::setHelpPrompts(const std::vector& prompts) addPrompts.push_back(*it); } + // sort prompts so it goes [dpad_all] [dpad_u/d] [dpad_l/r] [a/b/x/y/l/r] [start/select] + std::sort(addPrompts.begin(), addPrompts.end(), [](const HelpPrompt& a, const HelpPrompt& b) -> bool { + + static const char* map[] = { + "up/down/left/right", + "up/down", + "left/right", + "a", "b", "x", "y", "l", "r", + "start", "select", + NULL + }; + + int i = 0; + while(map[i] != NULL) + { + if(a.first == map[i]) + return true; + else if(b.first == map[i]) + return false; + i++; + } + + return true; + }); + mHelp->setPrompts(addPrompts); } From 9955261a1e08bd39aa157b4a3391c1b659350127 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 11 Apr 2014 19:42:04 -0500 Subject: [PATCH 248/386] Changed Window to cache the framerate string as a TextCache instead of regenerate it every frame which was significantly impacting the framerate because I am dumb. --- src/Window.cpp | 4 ++-- src/Window.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index 72952b524..2fbb08a4d 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -156,7 +156,7 @@ void Window::update(int deltaTime) float vramUsageMb = (TextureResource::getTotalMemUsage() + Font::getTotalMemUsage()) / 1000.0f / 1000.0f; ss << "\nVRAM: " << vramUsageMb << "mb"; - mFrameDataString = ss.str(); + mFrameDataText = std::unique_ptr(mDefaultFonts.at(1)->buildTextCache(ss.str(), 50.f, 50.f, 0xFF00FFFF)); } mFrameTimeElapsed = 0; @@ -200,7 +200,7 @@ void Window::render() if(Settings::getInstance()->getBool("DrawFramerate")) { Renderer::setMatrix(Eigen::Affine3f::Identity()); - mDefaultFonts.at(1)->drawText(mFrameDataString, Eigen::Vector2f(50, 50), 0xFF00FFFF); + mDefaultFonts.at(1)->renderTextCache(mFrameDataText.get()); } } diff --git a/src/Window.h b/src/Window.h index 0860f7f20..c71b8d742 100644 --- a/src/Window.h +++ b/src/Window.h @@ -52,7 +52,8 @@ private: int mFrameTimeElapsed; int mFrameCountElapsed; int mAverageDeltaTime; - std::string mFrameDataString; + + std::unique_ptr mFrameDataText; bool mNormalizeNextUpdate; From ac0bdb47ed84cd658bf1761a4df489ce61cdf6f2 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 11 Apr 2014 20:48:13 -0500 Subject: [PATCH 249/386] Optimized the hell out of ImageComponent. (been saving this one for a rainy day...) Fixed sort order assert triggered by std::sort when sorting help prompts. --- src/Window.cpp | 12 ++- src/components/ImageComponent.cpp | 164 ++++++++++++++++-------------- src/components/ImageComponent.h | 17 +++- 3 files changed, 105 insertions(+), 88 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index 2fbb08a4d..279bf29a7 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -197,7 +197,7 @@ void Window::render() mHelp->render(transform); - if(Settings::getInstance()->getBool("DrawFramerate")) + if(Settings::getInstance()->getBool("DrawFramerate") && mFrameDataText) { Renderer::setMatrix(Eigen::Affine3f::Identity()); mDefaultFonts.at(1)->renderTextCache(mFrameDataText.get()); @@ -254,16 +254,18 @@ void Window::setHelpPrompts(const std::vector& prompts) }; int i = 0; + int aVal = 0; + int bVal = 0; while(map[i] != NULL) { if(a.first == map[i]) - return true; - else if(b.first == map[i]) - return false; + aVal = i; + if(b.first == map[i]) + bVal = i; i++; } - return true; + return aVal > bVal; }); mHelp->setPrompts(addPrompts); diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 9e8fd4ce9..e851739a2 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -25,6 +25,7 @@ Eigen::Vector2f ImageComponent::getCenter() const ImageComponent::ImageComponent(Window* window) : GuiComponent(window), mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) { + updateColors(); } ImageComponent::~ImageComponent() @@ -80,6 +81,13 @@ void ImageComponent::resize() { svg->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); } + + onSizeChanged(); +} + +void ImageComponent::onSizeChanged() +{ + updateVertices(); } void ImageComponent::setImage(std::string path, bool tile) @@ -111,6 +119,7 @@ void ImageComponent::setImage(const std::shared_ptr& texture) void ImageComponent::setOrigin(float originX, float originY) { mOrigin << originX, originY; + updateVertices(); } void ImageComponent::setResize(float width, float height) @@ -130,54 +139,33 @@ void ImageComponent::setMaxSize(float width, float height) void ImageComponent::setFlipX(bool flip) { mFlipX = flip; + updateVertices(); } void ImageComponent::setFlipY(bool flip) { mFlipY = flip; + updateVertices(); } void ImageComponent::setColorShift(unsigned int color) { mColorShift = color; + updateColors(); } -void ImageComponent::render(const Eigen::Affine3f& parentTrans) +void ImageComponent::setOpacity(unsigned char opacity) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); - Renderer::setMatrix(trans); - - if(mTexture && getOpacity() > 0) - { - if(mTexture->isInitialized()) - { - GLfloat points[12], texs[12]; - GLubyte colors[6*4]; - - if(mTexture->isTiled()) - { - float xCount = mSize.x() / getTextureSize().x(); - float yCount = mSize.y() / getTextureSize().y(); - - Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8)| (getOpacity()), 6); - buildImageArray(points, texs, xCount, yCount); - }else{ - Renderer::buildGLColorArray(colors, (mColorShift >> 8 << 8) | (getOpacity()), 6); - buildImageArray(points, texs); - } - - drawImageArray(points, texs, colors, 6); - }else{ - LOG(LogError) << "Image texture is not initialized!"; - mTexture.reset(); - } - } - - GuiComponent::renderChildren(trans); + mOpacity = opacity; + mColorShift = (mColorShift >> 8 << 8) | mOpacity; + updateColors(); } -void ImageComponent::buildImageArray(GLfloat* points, GLfloat* texs, float px, float py) +void ImageComponent::updateVertices() { + if(!mTexture || !mTexture->isInitialized()) + return; + // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 Eigen::Vector2f topLeft(-mSize.x() * mOrigin.x(), -mSize.y() * mOrigin.y()); @@ -191,70 +179,88 @@ void ImageComponent::buildImageArray(GLfloat* points, GLfloat* texs, float px, f bottomRight[0] = topLeft[0] + width; bottomRight[1] = topLeft[1] + height; - points[0] = topLeft.x(); points[1] = topLeft.y(); - points[2] = topLeft.x(); points[3] = bottomRight.y(); - points[4] = bottomRight.x(); points[5] = topLeft.y(); + mVertices[0].pos << topLeft.x(), topLeft.y(); + mVertices[1].pos << topLeft.x(), bottomRight.y(); + mVertices[2].pos << bottomRight.x(), topLeft.y(); - points[6] = bottomRight.x(); points[7] = topLeft.y(); - points[8] = topLeft.x(); points[9] = bottomRight.y(); - points[10] = bottomRight.x(); points[11] = bottomRight.y(); + mVertices[3].pos << bottomRight.x(), topLeft.y(); + mVertices[4].pos << topLeft.x(), bottomRight.y(); + mVertices[5].pos << bottomRight.x(), bottomRight.y(); - texs[0] = 0; texs[1] = py; - texs[2] = 0; texs[3] = 0; - texs[4] = px; texs[5] = py; + float px, py; + if(mTexture->isTiled()) + { + px = mSize.x() / getTextureSize().x(); + py = mSize.y() / getTextureSize().y(); + }else{ + px = 1; + py = 1; + } - texs[6] = px; texs[7] = py; - texs[8] = 0; texs[9] = 0; - texs[10] = px; texs[11] = 0; + mVertices[0].tex << 0, py; + mVertices[1].tex << 0, 0; + mVertices[2].tex << px, py; + + mVertices[3].tex << px, py; + mVertices[4].tex << 0, 0; + mVertices[5].tex << px, 0; if(mFlipX) { - for(int i = 0; i < 11; i += 2) - if(texs[i] == px) - texs[i] = 0; - else - texs[i] = px; + for(int i = 0; i < 6; i++) + mVertices[i].tex[0] = mVertices[i].tex[0] == px ? 0 : px; } if(mFlipY) { - for(int i = 1; i < 12; i += 2) - if(texs[i] == py) - texs[i] = 0; - else - texs[i] = py; + for(int i = 1; i < 6; i++) + mVertices[i].tex[1] = mVertices[i].tex[1] == py ? 0 : py; } } -void ImageComponent::drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* colors, unsigned int numArrays) +void ImageComponent::updateColors() { - mTexture->bind(); + Renderer::buildGLColorArray(mColors, (mColorShift >> 8 << 8)| (getOpacity()), 6); +} - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - if(colors != NULL) +void ImageComponent::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Renderer::setMatrix(trans); + + if(mTexture && mOpacity > 0) { - glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors); + if(mTexture->isInitialized()) + { + // actually draw the image + mTexture->bind(); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); + + glDrawArrays(GL_TRIANGLES, 0, 6); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + }else{ + LOG(LogError) << "Image texture is not initialized!"; + mTexture.reset(); + } } - glVertexPointer(2, GL_FLOAT, 0, points); - glTexCoordPointer(2, GL_FLOAT, 0, texs); - - glDrawArrays(GL_TRIANGLES, 0, numArrays); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - - if(colors != NULL) - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); + GuiComponent::renderChildren(trans); } bool ImageComponent::hasImage() diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index c9cc30601..7ce531d59 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -22,6 +22,9 @@ public: //Use an already existing texture. void setImage(const std::shared_ptr& texture); + void onSizeChanged() override; + void setOpacity(unsigned char opacity) override; + //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) void setOrigin(float originX, float originY); inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } @@ -67,10 +70,16 @@ private: // Used internally whenever the resizing parameters or texture change. void resize(); - // Writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position. - void buildImageArray(GLfloat* points, GLfloat* texs, float percentageX = 1, float percentageY = 1); - // Draws the given set of points and texture coordinates, number of coordinate pairs may be specified. - void drawImageArray(GLfloat* points, GLfloat* texs, GLubyte* colors, unsigned int count = 6); + struct Vertex + { + Eigen::Vector2f pos; + Eigen::Vector2f tex; + } mVertices[6]; + + GLubyte mColors[6*4]; + + void updateVertices(); + void updateColors(); unsigned int mColorShift; From 11f19a80d3abe8bdd3e47a76bc480d0ed3b2a2f8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 12 Apr 2014 15:14:40 -0500 Subject: [PATCH 250/386] Add -O3 flags back to gcc compilation. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7470bd21a..1f4b1e168 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,8 +83,8 @@ if(CMAKE_COMPILER_IS_GNUCXX) message(SEND_ERROR "You need at least G++ 4.7 to compile EmulationStation!") endif() #set up compiler flags for GCC - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes") #support C++11 for std::, optimize - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") #strip binary + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O3") #support C++11 for std::, optimize + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O3") #-s = strip binary endif() if(${GLSystem} MATCHES "Desktop OpenGL") From b88e99b9bf05ebef5bad70111e7a225b61341832 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 12 Apr 2014 21:09:54 -0500 Subject: [PATCH 251/386] GuiInputConfig now supports hold-to-skip for certain inputs. InputManager now properly sends Backspace keydown input events. InputConfig now supports unmapping particular inputs by name. --- src/InputConfig.cpp | 7 ++ src/InputConfig.h | 1 + src/InputManager.cpp | 2 - src/guis/GuiInputConfig.cpp | 156 +++++++++++++++++++++++++++--------- src/guis/GuiInputConfig.h | 21 ++++- 5 files changed, 142 insertions(+), 45 deletions(-) diff --git a/src/InputConfig.cpp b/src/InputConfig.cpp index 47d976ad9..1c6035fe3 100644 --- a/src/InputConfig.cpp +++ b/src/InputConfig.cpp @@ -68,6 +68,13 @@ void InputConfig::mapInput(const std::string& name, Input input) mNameMap[toLower(name)] = input; } +void InputConfig::unmapInput(const std::string& name) +{ + auto it = mNameMap.find(toLower(name)); + if(it != mNameMap.end()) + mNameMap.erase(it); +} + Input InputConfig::getInputByName(const std::string& name) { return mNameMap[toLower(name)]; diff --git a/src/InputConfig.h b/src/InputConfig.h index e26844acd..e498edba5 100644 --- a/src/InputConfig.h +++ b/src/InputConfig.h @@ -87,6 +87,7 @@ public: void clear(); void mapInput(const std::string& name, Input input); + void unmapInput(const std::string& name); // unmap all Inputs mapped to this name inline int getDeviceId() const { return mDeviceId; }; inline const std::string& getDeviceName() { return mDeviceName; } diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 462275397..de676e988 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -194,8 +194,6 @@ bool InputManager::parseEvent(const SDL_Event& ev) { if(mWindow->peekGui() != NULL) mWindow->peekGui()->textInput("\b"); - - return true; } if(ev.key.repeat) diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index a96868f91..656e78c27 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -8,8 +8,9 @@ #include "../Util.h" static const int inputCount = 10; -static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown"}; -static const char* inputDispName[inputCount] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGE UP", "PAGE DOWN"}; +static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown" }; +static const bool inputSkippable[inputCount] = { false, false, false, false, false, false, false, false, true, true }; +static const char* inputDispName[inputCount] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGE UP", "PAGE DOWN" }; static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_down.svg", ":/help/dpad_left.svg", ":/help/dpad_right.svg", ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", ":/help/button_l.svg", ":/help/button_r.svg" }; @@ -19,9 +20,11 @@ static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_ using namespace Eigen; +#define HOLD_TO_SKIP_MS 5000 + GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)), - mTargetConfig(target) + mTargetConfig(target), mHoldingInput(false) { LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ")."; @@ -48,7 +51,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mSubtitle1 = std::make_shared(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); - mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); + mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x99999900, TextComponent::ALIGN_CENTER); mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); // 4 is a spacer row @@ -80,46 +83,63 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi row.input_handler = [this, i, mapping](InputConfig* config, Input input) -> bool { - if(!input.value) + // ignore input not from our target device + if(config != mTargetConfig) return false; - if(mConfiguringRow) + // if we're not configuring, start configuring when A is pressed + if(!mConfiguringRow) { - if(!process(config, input, i, mapping)) // button press invalid; try again - return true; - if(mConfiguringAll) - { - if(!mList->moveCursor(1)) // try to move to the next one - { - // at bottom of list - mConfiguringAll = false; - mConfiguringRow = false; - mGrid.moveCursor(Vector2i(0, 1)); - }else{ - // on another one - setPress(mMappings.at(mList->getCursorId())); - } - }else{ - mConfiguringRow = false; // we only wanted to configure one row - } - return true; - }else{ - // not configuring, start configuring when A is pressed if(config->isMappedTo("a", input) && input.value) { mConfiguringRow = true; setPress(mapping); return true; } + + // we're not configuring and they didn't press A to start, so ignore this return false; } - - return false; + + // we are configuring + if(input.value != 0) + { + // input down + // if we're already holding something, ignore this, otherwise plan to map this input + if(mHoldingInput) + return true; + + mHoldingInput = true; + mHeldInput = input; + mHeldTime = 0; + mHeldInputId = i; + + return true; + }else{ + // input up + // make sure we were holding something and we let go of what we were previously holding + if(!mHoldingInput || mHeldInput.device != input.device || mHeldInput.id != input.id || mHeldInput.type != input.type) + return true; + + mHoldingInput = false; + + if(assign(input, i)) + rowDone(); // if successful, move cursor/stop configuring - if not, we'll just try again + + return true; + } }; + mList->addRow(row); } - // make the first one say "NOT DEFINED" if we're re-configuring everything + // only show "HOLD TO SKIP" if this input is skippable + mList->setCursorChangedCallback([this](CursorState state) { + bool skippable = inputSkippable[mList->getCursorId()]; + mSubtitle2->setOpacity(skippable * 255); + }); + + // make the first one say "PRESS ANYTHING" if we're re-configuring everything if(mConfiguringAll) setPress(mMappings.front()); @@ -154,6 +174,56 @@ void GuiInputConfig::onSizeChanged() mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y()); } +void GuiInputConfig::update(int deltaTime) +{ + if(mConfiguringRow && mHoldingInput && inputSkippable[mHeldInputId]) + { + int prevSec = mHeldTime / 1000; + mHeldTime += deltaTime; + int curSec = mHeldTime / 1000; + + if(mHeldTime >= HOLD_TO_SKIP_MS) + { + setNotDefined(mMappings.at(mHeldInputId)); + clearAssignment(mHeldInputId); + mHoldingInput = false; + rowDone(); + }else{ + if(prevSec != curSec) + { + // crossed the second boundary, update text + const auto& text = mMappings.at(mHeldInputId); + std::stringstream ss; + ss << "HOLD FOR " << HOLD_TO_SKIP_MS/1000 - curSec << "S TO SKIP"; + text->setText(ss.str()); + text->setColor(0x777777FF); + } + } + } +} + +// move cursor to the next thing if we're configuring all, +// or come out of "configure mode" if we were only configuring one row +void GuiInputConfig::rowDone() +{ + if(mConfiguringAll) + { + if(!mList->moveCursor(1)) // try to move to the next one + { + // at bottom of list, done + mConfiguringAll = false; + mConfiguringRow = false; + mGrid.moveCursor(Vector2i(0, 1)); + }else{ + // on another one + setPress(mMappings.at(mList->getCursorId())); + } + }else{ + // only configuring one row, so stop + mConfiguringRow = false; + } +} + void GuiInputConfig::setPress(const std::shared_ptr& text) { text->setText("PRESS ANYTHING"); @@ -166,33 +236,41 @@ void GuiInputConfig::setNotDefined(const std::shared_ptr& text) text->setColor(0x999999FF); } +void GuiInputConfig::setAssignedTo(const std::shared_ptr& text, Input input) +{ + text->setText(strToUpper(input.string())); + text->setColor(0x777777FF); +} + void GuiInputConfig::error(const std::shared_ptr& text, const std::string& msg) { text->setText("ALREADY TAKEN"); text->setColor(0x656565FF); } -bool GuiInputConfig::process(InputConfig* config, Input input, int inputId, const std::shared_ptr& text) +bool GuiInputConfig::assign(Input input, int inputId) { - // from some other input source - if(config != mTargetConfig) - return false; + // input is from InputConfig* mTargetConfig // if this input is mapped to something other than "nothing" or the current row, error // (if it's the same as what it was before, allow it) - if(config->getMappedTo(input).size() > 0 && !config->isMappedTo(inputName[inputId], input)) + if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(inputName[inputId], input)) { - error(text, "Already mapped!"); + error(mMappings.at(inputId), "Already mapped!"); return false; } - text->setText(strToUpper(input.string())); - text->setColor(0x777777FF); - + setAssignedTo(mMappings.at(inputId), input); + input.configured = true; - config->mapInput(inputName[inputId], input); + mTargetConfig->mapInput(inputName[inputId], input); LOG(LogInfo) << " Mapping [" << input.string() << "] -> " << inputName[inputId]; return true; } + +void GuiInputConfig::clearAssignment(int inputId) +{ + mTargetConfig->unmapInput(inputName[inputId]); +} \ No newline at end of file diff --git a/src/guis/GuiInputConfig.h b/src/guis/GuiInputConfig.h index e5c28a376..490d69f47 100644 --- a/src/guis/GuiInputConfig.h +++ b/src/guis/GuiInputConfig.h @@ -12,13 +12,21 @@ class GuiInputConfig : public GuiComponent public: GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback); + void update(int deltaTime) override; + void onSizeChanged() override; private: - void error(const std::shared_ptr& text, const std::string& msg); - void setPress(const std::shared_ptr& text); - void setNotDefined(const std::shared_ptr& text); - bool process(InputConfig* config, Input input, int inputId, const std::shared_ptr& text); + void error(const std::shared_ptr& text, const std::string& msg); // set text to "msg" + not greyed out + + void setPress(const std::shared_ptr& text); // set text to "PRESS ANYTHING" + not greyed out + void setNotDefined(const std::shared_ptr& text); // set text to -NOT DEFINED- + greyed out + void setAssignedTo(const std::shared_ptr& text, Input input); // set text to "BUTTON 2"/"AXIS 2+", etc. + + bool assign(Input input, int inputId); + void clearAssignment(int inputId); + + void rowDone(); NinePatchComponent mBackground; ComponentGrid mGrid; @@ -33,4 +41,9 @@ private: InputConfig* mTargetConfig; bool mConfiguringRow; // next input captured by mList will be interpretted as a remap bool mConfiguringAll; // move the cursor down after configuring a row and start configuring the next row until we reach the bottom + + bool mHoldingInput; + Input mHeldInput; + int mHeldTime; + int mHeldInputId; }; From fc5ca0019ceaa70b8e333786e3be0457631878fd Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 13 Apr 2014 19:30:24 -0500 Subject: [PATCH 252/386] Added version string to bottom of the menu. Changed around some version string constants. Fixed GuiInputConfig assigning "key up" Input instead of the "key down" input (breaks joystick axes, generates warnings). --- src/EmulationStation.h | 3 ++- src/EmulationStation.rc | 4 ++-- src/guis/GuiInputConfig.cpp | 3 ++- src/guis/GuiMenu.cpp | 24 +++++++++++++++++++++--- src/guis/GuiMenu.h | 2 ++ src/main.cpp | 2 +- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/EmulationStation.h b/src/EmulationStation.h index 0543d3d54..666fdccd5 100644 --- a/src/EmulationStation.h +++ b/src/EmulationStation.h @@ -6,7 +6,8 @@ #define PROGRAM_VERSION_MINOR 0 #define PROGRAM_VERSION_MAINTENANCE 2 #define PROGRAM_VERSION_REVISION 0 -#define PROGRAM_VERSION_STRING "1.0.2.0 - built " __DATE__ " - " __TIME__ +#define PROGRAM_VERSION_STRING "1.0.2.0" +#define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ #define RESOURCE_VERSION_STRING "1,0,2,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE,PROGRAM_VERSION_REVISION diff --git a/src/EmulationStation.rc b/src/EmulationStation.rc index eff407b20..f9d101bdd 100644 --- a/src/EmulationStation.rc +++ b/src/EmulationStation.rc @@ -27,12 +27,12 @@ BEGIN VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "emulationstation.exe\0" VALUE "ProductName", "EmulationStation\0" - VALUE "ProductVersion", RESOURCE_VERSION_STRING + VALUE "ProductVersion", PROGRAM_VERSION_STRING END END BLOCK "VarFileInfo" BEGIN - VALUE "Translation", 0x407, 1200 + VALUE "Translation", 0x409, 1252 END END diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 656e78c27..14f0e6e26 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -92,6 +92,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi { if(config->isMappedTo("a", input) && input.value) { + mList->stopScrolling(); mConfiguringRow = true; setPress(mapping); return true; @@ -123,7 +124,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mHoldingInput = false; - if(assign(input, i)) + if(assign(mHeldInput, i)) rowDone(); // if successful, move cursor/stop configuring - if not, we'll just try again return true; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 9f1fa393f..a7ad70abe 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -1,3 +1,4 @@ +#include "../EmulationStation.h" #include "GuiMenu.h" #include "../Window.h" #include "../Sound.h" @@ -18,14 +19,17 @@ #include "../scrapers/GamesDBScraper.h" #include "../scrapers/TheArchiveScraper.h" -GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU") +GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { - setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + // MAIN MENU // SCRAPER > // SOUND SETTINGS > // UI SETTINGS > + // CONFIGURE INPUT > // QUIT > + + // [version] auto openScrapeNow = [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); }; addEntry("SCRAPER", 0x777777FF, true, @@ -170,8 +174,22 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mWindow->pushGui(s); }); + mVersion.setFont(Font::get(FONT_SIZE_SMALL)); + mVersion.setColor(0xC6C6C6FF); + mVersion.setText("EMULATIONSTATION V" PROGRAM_VERSION_STRING); + mVersion.setAlignment(TextComponent::ALIGN_CENTER); + addChild(&mMenu); - mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); + addChild(&mVersion); + + setSize(mMenu.getSize()); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.15f); +} + +void GuiMenu::onSizeChanged() +{ + mVersion.setSize(mSize.x(), 0); + mVersion.setPosition(0, mSize.y() - mVersion.getSize().y()); } void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func) diff --git a/src/guis/GuiMenu.h b/src/guis/GuiMenu.h index a9f746e38..bf686897e 100644 --- a/src/guis/GuiMenu.h +++ b/src/guis/GuiMenu.h @@ -10,10 +10,12 @@ public: GuiMenu(Window* window); bool input(InputConfig* config, Input input) override; + void onSizeChanged() override; std::vector getHelpPrompts() override; private: void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); MenuComponent mMenu; + TextComponent mVersion; }; diff --git a/src/main.cpp b/src/main.cpp index 73534ad33..96df4d39a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -144,7 +144,7 @@ int main(int argc, char* argv[]) //start the logger Log::open(); - LOG(LogInfo) << "EmulationStation - " << PROGRAM_VERSION_STRING; + LOG(LogInfo) << "EmulationStation - v" << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING; //always close the log on exit atexit(&onExit); From 8608ecc9eb12842011ee309afb278243371a180c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 14 Apr 2014 21:03:11 -0500 Subject: [PATCH 253/386] Added cancelAnimation(slot) to GuiComponent. Like stopAnimation, but does not call finishedCallback. All animations are now canceled when a GuiComponent is deleted (fixes a crash when closing ES while the "launch game" animation is playing). --- src/GuiComponent.cpp | 29 +++++++++++++++++++++++----- src/GuiComponent.h | 3 +++ src/animations/AnimationController.h | 4 +++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index bc488f2e8..c6ab22a3e 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -16,11 +16,7 @@ GuiComponent::~GuiComponent() { mWindow->removeGui(this); - for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) - { - if(mAnimationMap[i]) - delete mAnimationMap[i]; - } + cancelAllAnimations(); if(mParent) mParent->removeChild(this); @@ -227,6 +223,29 @@ void GuiComponent::stopAnimation(unsigned char slot) } } +void GuiComponent::cancelAnimation(unsigned char slot) +{ + assert(slot < MAX_ANIMATIONS); + if(mAnimationMap[slot]) + { + mAnimationMap[slot]->removeFinishedCallback(); + delete mAnimationMap[slot]; + mAnimationMap[slot] = NULL; + } +} + +void GuiComponent::stopAllAnimations() +{ + for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) + stopAnimation(i); +} + +void GuiComponent::cancelAllAnimations() +{ + for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) + cancelAnimation(i); +} + bool GuiComponent::isAnimationPlaying(unsigned char slot) const { return mAnimationMap[slot] != NULL; diff --git a/src/GuiComponent.h b/src/GuiComponent.h index fe53ad008..cea2765c5 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -60,6 +60,9 @@ public: int getAnimationTime(unsigned char slot) const; void setAnimation(Animation* animation, std::function finishedCallback = nullptr, bool reverse = false, unsigned char slot = 0); void stopAnimation(unsigned char slot); + void cancelAnimation(unsigned char slot); // like stopAnimation, but doesn't call finishedCallback - only removes the animation, leaving things in their current state + void stopAllAnimations(); + void cancelAllAnimations(); virtual unsigned char getOpacity() const; virtual void setOpacity(unsigned char opacity); diff --git a/src/animations/AnimationController.h b/src/animations/AnimationController.h index 91a086b9b..4df334809 100644 --- a/src/animations/AnimationController.h +++ b/src/animations/AnimationController.h @@ -7,7 +7,6 @@ class AnimationController { public: - // FinishedCallback is guaranteed to be called exactly once, even if the animation does not finish normally. // Takes ownership of anim (will delete in destructor). AnimationController(Animation* anim, std::function finishedCallback = nullptr, bool reverse = false); virtual ~AnimationController(); @@ -17,6 +16,9 @@ public: inline bool isReversed() const { return mReverse; } inline int getTime() const { return mTime; } + inline const std::function& getFinishedCallback() const { return mFinishedCallback; } + + inline void removeFinishedCallback() { mFinishedCallback = nullptr; } private: Animation* mAnimation; From e842321b00cb20e66a35a31df12bfddeeb573bb4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 16 Apr 2014 12:32:40 -0500 Subject: [PATCH 254/386] Removed dependency on libboost-regex. It was kind of silly to pull in the entire lib for exactly one regular expression. --- CMakeLists.txt | 2 +- README.md | 4 ++-- src/FileData.cpp | 29 +++++++++++++++++++++++++++-- src/HttpReq.cpp | 1 - 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f4b1e168..3ab3b2948 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ endif() find_package(Freetype REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) -find_package(Boost REQUIRED COMPONENTS system filesystem regex date_time) +find_package(Boost REQUIRED COMPONENTS system filesystem date_time) find_package(Eigen3 REQUIRED) find_package(CURL REQUIRED) diff --git a/README.md b/README.md index c68daaf24..a3d1829eb 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,12 @@ Building EmulationStation uses some C++11 code, which means you'll need to install at least g++-4.7 on Linux, or VS2010 on Windows. For installing and switching to g++-4.7 see [here](http://lektiondestages.blogspot.de/2013/05/installing-and-switching-gccg-versions.html). You can also just use `export CXX=g++-4.7` to explicitly specify the compiler for CMake (make sure you delete your CMake cache files if it's not working). -EmulationStation has a few dependencies. For building, you'll need SDL2, Boost (System, Filesystem, Regex, DateTime), FreeImage, FreeType, Eigen3, and cURL. +EmulationStation has a few dependencies. For building, you'll need SDL2, Boost (System, Filesystem, DateTime), FreeImage, FreeType, Eigen3, and cURL. **On Linux:** All of this be easily installed with apt-get: ```bash -sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl-dev libasound2-dev +sudo apt-get install libsdl2-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-date-time-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl-dev libasound2-dev ``` Unless you're on the Raspberry Pi, you'll also need OpenGL: diff --git a/src/FileData.cpp b/src/FileData.cpp index 710313f85..0c7c652d2 100644 --- a/src/FileData.cpp +++ b/src/FileData.cpp @@ -1,11 +1,36 @@ #include "FileData.h" -#include namespace fs = boost::filesystem; std::string getCleanFileName(const fs::path& path) { - return regex_replace(path.stem().generic_string(), boost::regex("\\((.*)\\)|\\[(.*)\\]"), ""); + // remove anything in parenthesis or brackets + // should be roughly equivalent to the regex replace "\((.*)\)|\[(.*)\]" with "" + // I would love to just use regex, but it's not worth pulling in another boost lib for one function that is used once + + std::string ret = path.stem().generic_string(); + size_t start, end; + + static const int NUM_TO_REPLACE = 2; + static const char toReplace[NUM_TO_REPLACE*2] = { '(', ')', '[', ']' }; + + bool done = false; + while(!done) + { + done = true; + for(int i = 0; i < NUM_TO_REPLACE; i++) + { + start = ret.find(toReplace[i*2]); + end = ret.find(toReplace[i*2+1], start != std::string::npos ? start + 1 : 0); + if(start != std::string::npos && end != std::string::npos) + { + ret.replace(start, end, ""); + done = false; + } + } + } + + return ret; } diff --git a/src/HttpReq.cpp b/src/HttpReq.cpp index 05423dfa0..5171da636 100644 --- a/src/HttpReq.cpp +++ b/src/HttpReq.cpp @@ -1,6 +1,5 @@ #include #include "HttpReq.h" -#include #include "Log.h" #include From b9683498646e2e1ef2672dac02bec5b983c0c04c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Apr 2014 12:19:46 -0500 Subject: [PATCH 255/386] Improved animation system. Now supports animation delays, canceling, and forcibly finishing animations. See GuiComponent::cancelAnimation(), finishAnimation(), and new parameters for setAnimation(). --- src/GuiComponent.cpp | 31 ++++++++++++++++++--- src/GuiComponent.h | 7 +++-- src/animations/AnimationController.cpp | 8 ++++-- src/animations/AnimationController.h | 5 +++- src/views/ViewController.cpp | 4 +-- src/views/gamelist/DetailedGameListView.cpp | 2 +- 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index c6ab22a3e..75f6d7e08 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -202,28 +202,31 @@ void GuiComponent::textInput(const char* text) } } -void GuiComponent::setAnimation(Animation* anim, std::function finishedCallback, bool reverse, unsigned char slot) +void GuiComponent::setAnimation(Animation* anim, int delay, std::function finishedCallback, bool reverse, unsigned char slot) { assert(slot < MAX_ANIMATIONS); AnimationController* oldAnim = mAnimationMap[slot]; - mAnimationMap[slot] = new AnimationController(anim, finishedCallback, reverse); + mAnimationMap[slot] = new AnimationController(anim, delay, finishedCallback, reverse); if(oldAnim) delete oldAnim; } -void GuiComponent::stopAnimation(unsigned char slot) +bool GuiComponent::stopAnimation(unsigned char slot) { assert(slot < MAX_ANIMATIONS); if(mAnimationMap[slot]) { delete mAnimationMap[slot]; mAnimationMap[slot] = NULL; + return true; + }else{ + return false; } } -void GuiComponent::cancelAnimation(unsigned char slot) +bool GuiComponent::cancelAnimation(unsigned char slot) { assert(slot < MAX_ANIMATIONS); if(mAnimationMap[slot]) @@ -231,6 +234,26 @@ void GuiComponent::cancelAnimation(unsigned char slot) mAnimationMap[slot]->removeFinishedCallback(); delete mAnimationMap[slot]; mAnimationMap[slot] = NULL; + return true; + }else{ + return false; + } +} + +bool GuiComponent::finishAnimation(unsigned char slot) +{ + assert(slot < MAX_ANIMATIONS); + if(mAnimationMap[slot]) + { + // skip to animation's end + const bool done = mAnimationMap[slot]->update(mAnimationMap[slot]->getAnimation()->getDuration() - mAnimationMap[slot]->getTime()); + assert(done); + + delete mAnimationMap[slot]; // will also call finishedCallback + mAnimationMap[slot] = NULL; + return true; + }else{ + return false; } } diff --git a/src/GuiComponent.h b/src/GuiComponent.h index cea2765c5..39b01c282 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -58,9 +58,10 @@ public: bool isAnimationPlaying(unsigned char slot) const; bool isAnimationReversed(unsigned char slot) const; int getAnimationTime(unsigned char slot) const; - void setAnimation(Animation* animation, std::function finishedCallback = nullptr, bool reverse = false, unsigned char slot = 0); - void stopAnimation(unsigned char slot); - void cancelAnimation(unsigned char slot); // like stopAnimation, but doesn't call finishedCallback - only removes the animation, leaving things in their current state + void setAnimation(Animation* animation, int delay = 0, std::function finishedCallback = nullptr, bool reverse = false, unsigned char slot = 0); + bool stopAnimation(unsigned char slot); + bool cancelAnimation(unsigned char slot); // like stopAnimation, but doesn't call finishedCallback - only removes the animation, leaving things in their current state + bool finishAnimation(unsigned char slot); // calls update(1.f) and finishedCallback, then deletes the animation - basically skips to the end void stopAllAnimations(); void cancelAllAnimations(); diff --git a/src/animations/AnimationController.cpp b/src/animations/AnimationController.cpp index 3c92105d2..09f751477 100644 --- a/src/animations/AnimationController.cpp +++ b/src/animations/AnimationController.cpp @@ -1,7 +1,7 @@ #include "AnimationController.h" -AnimationController::AnimationController(Animation* anim, std::function finishedCallback, bool reverse) - : mAnimation(anim), mFinishedCallback(finishedCallback), mReverse(reverse), mTime(0) +AnimationController::AnimationController(Animation* anim, int delay, std::function finishedCallback, bool reverse) + : mAnimation(anim), mFinishedCallback(finishedCallback), mReverse(reverse), mTime(-delay), mDelay(delay) { } @@ -16,6 +16,10 @@ AnimationController::~AnimationController() bool AnimationController::update(int deltaTime) { mTime += deltaTime; + + if(mTime < 0) // are we still in delay? + return false; + float t = (float)mTime / mAnimation->getDuration(); if(t > 1.0f) diff --git a/src/animations/AnimationController.h b/src/animations/AnimationController.h index 4df334809..7a648546d 100644 --- a/src/animations/AnimationController.h +++ b/src/animations/AnimationController.h @@ -8,7 +8,7 @@ class AnimationController { public: // Takes ownership of anim (will delete in destructor). - AnimationController(Animation* anim, std::function finishedCallback = nullptr, bool reverse = false); + AnimationController(Animation* anim, int delay = 0, std::function finishedCallback = nullptr, bool reverse = false); virtual ~AnimationController(); // Returns true if the animation is complete. @@ -16,7 +16,9 @@ public: inline bool isReversed() const { return mReverse; } inline int getTime() const { return mTime; } + inline int getDelay() const { return mDelay; } inline const std::function& getFinishedCallback() const { return mFinishedCallback; } + inline Animation* getAnimation() const { return mAnimation; } inline void removeFinishedCallback() { mFinishedCallback = nullptr; } @@ -25,4 +27,5 @@ private: std::function mFinishedCallback; bool mReverse; int mTime; + int mDelay; }; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 9cf02ea1c..caf420b31 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -112,12 +112,12 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) center += mCurrentView->getPosition(); stopAnimation(1); // make sure the fade in isn't still playing mLockInput = true; - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), [this, origCamera, center, game] + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { game->getSystem()->launchGame(mWindow, game); mCamera = origCamera; mLockInput = false; - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), nullptr, true); + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); } diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 395a7350c..5285f372c 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -224,7 +224,7 @@ void DetailedGameListView::updateInfoPanel() { comp->setOpacity((unsigned char)(lerp(0.0f, 1.0f, t)*255)); }; - comp->setAnimation(new LambdaAnimation(func, 150), nullptr, fadingOut); + comp->setAnimation(new LambdaAnimation(func, 150), 0, nullptr, fadingOut); } } } From 7ef4d2f89eac79e6b75b9fccb02470fb3629a2a7 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Apr 2014 12:27:00 -0500 Subject: [PATCH 256/386] Display number of games available under SystemView. --- src/views/SystemView.cpp | 47 ++++++++++++++++++++++++++++++++++++++-- src/views/SystemView.h | 2 ++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 5f8f7d2de..8070400e0 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -6,16 +6,24 @@ #include "ViewController.h" #include "../animations/LambdaAnimation.h" #include "../SystemData.h" +#include "../Util.h" #define SELECTED_SCALE 1.5f #define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.06f)) -SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP) +SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP), + mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x77777700, TextComponent::ALIGN_CENTER) { mCamOffset = 0; setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mSystemInfo.setSize(mSize.x(), 0); + + float yOff = (mSize.y() - logoSize().y())/2; + mSystemInfo.setPosition(0, (yOff - (logoSize().y() * (SELECTED_SCALE - 1)) / 2) + (logoSize().y() * SELECTED_SCALE) - mSystemInfo.getSize().y()); + //(mSize.y() - mSystemInfo.getSize().y()) / 2); + populate(); } @@ -141,8 +149,41 @@ void SystemView::onCursorChanged(const CursorState& state) f -= posMax; this->mCamOffset = f; }, 500); + setAnimation(anim, 0, nullptr, false, 0); - setAnimation(anim); + // animate mSystemInfo's opacity (fade out, wait, fade back in) + + cancelAnimation(1); + cancelAnimation(2); + + const float infoStartOpacity = mSystemInfo.getOpacity() / 255.f; + + Animation* infoFadeOut = new LambdaAnimation( + [infoStartOpacity, this] (float t) + { + mSystemInfo.setOpacity((unsigned char)(lerp(infoStartOpacity, 0.f, t) * 255)); + }, (int)(infoStartOpacity * 300)); + + // also change the text after we've fully faded out + setAnimation(infoFadeOut, 0, [this] { + std::stringstream ss; + unsigned int gameCount = getSelected()->getGameCount(); + + // only display a game count if there are at least 2 games + if(gameCount > 1) + ss << gameCount << " GAMES AVAILABLE"; + + mSystemInfo.setText(ss.str()); + }, false, 1); + + Animation* infoFadeIn = new LambdaAnimation( + [this] (float t) + { + mSystemInfo.setOpacity((unsigned char)(lerp(0.f, 1.f, t) * 255)); + }, 300); + + // wait 600ms to fade in + setAnimation(infoFadeIn, 700, nullptr, false, 2); } void SystemView::render(const Eigen::Affine3f& parentTrans) @@ -206,6 +247,8 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) comp->render(logoTrans); } } + + mSystemInfo.render(trans); } std::vector SystemView::getHelpPrompts() diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 59c6f3230..bd42dd3e5 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -37,6 +37,8 @@ private: void populate(); + TextComponent mSystemInfo; + // unit is list index float mCamOffset; }; From 43bc4f5fe239692f0bced0cc80e3924650314e10 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Apr 2014 13:07:32 -0500 Subject: [PATCH 257/386] Changed InputManager to be a singleton. Considering it has global state I don't know why it was being kept as part of the Window class. --- src/InputManager.cpp | 31 +++++++++++++++++++------------ src/InputManager.h | 13 ++++++++----- src/Window.cpp | 12 ++++++++---- src/Window.h | 5 ++--- src/guis/GuiDetectDevice.cpp | 2 +- src/guis/GuiInputConfig.cpp | 2 +- src/main.cpp | 4 ++-- 7 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/InputManager.cpp b/src/InputManager.cpp index de676e988..e1816ed57 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -21,8 +21,9 @@ namespace fs = boost::filesystem; -InputManager::InputManager(Window* window) : mWindow(window), - mKeyboardInputConfig(NULL) +InputManager* InputManager::mInstance = NULL; + +InputManager::InputManager() : mKeyboardInputConfig(NULL) { } @@ -31,6 +32,14 @@ InputManager::~InputManager() deinit(); } +InputManager* InputManager::getInstance() +{ + if(!mInstance) + mInstance = new InputManager(); + + return mInstance; +} + void InputManager::init() { if(initialized()) @@ -155,7 +164,7 @@ InputConfig* InputManager::getInputConfigByDevice(int device) return mInputConfigs[device]; } -bool InputManager::parseEvent(const SDL_Event& ev) +bool InputManager::parseEvent(const SDL_Event& ev, Window* window) { bool causedEvent = false; switch(ev.type) @@ -173,7 +182,7 @@ bool InputManager::parseEvent(const SDL_Event& ev) else normValue = -1; - mWindow->input(getInputConfigByDevice(ev.jaxis.which), Input(ev.jaxis.which, TYPE_AXIS, ev.jaxis.axis, normValue, false)); + window->input(getInputConfigByDevice(ev.jaxis.which), Input(ev.jaxis.which, TYPE_AXIS, ev.jaxis.axis, normValue, false)); causedEvent = true; } @@ -182,18 +191,17 @@ bool InputManager::parseEvent(const SDL_Event& ev) case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: - mWindow->input(getInputConfigByDevice(ev.jbutton.which), Input(ev.jbutton.which, TYPE_BUTTON, ev.jbutton.button, ev.jbutton.state == SDL_PRESSED, false)); + window->input(getInputConfigByDevice(ev.jbutton.which), Input(ev.jbutton.which, TYPE_BUTTON, ev.jbutton.button, ev.jbutton.state == SDL_PRESSED, false)); return true; case SDL_JOYHATMOTION: - mWindow->input(getInputConfigByDevice(ev.jhat.which), Input(ev.jhat.which, TYPE_HAT, ev.jhat.hat, ev.jhat.value, false)); + window->input(getInputConfigByDevice(ev.jhat.which), Input(ev.jhat.which, TYPE_HAT, ev.jhat.hat, ev.jhat.value, false)); return true; case SDL_KEYDOWN: if(ev.key.keysym.sym == SDLK_BACKSPACE && SDL_IsTextInputActive()) { - if(mWindow->peekGui() != NULL) - mWindow->peekGui()->textInput("\b"); + window->textInput("\b"); } if(ev.key.repeat) @@ -207,16 +215,15 @@ bool InputManager::parseEvent(const SDL_Event& ev) return false; } - mWindow->input(getInputConfigByDevice(DEVICE_KEYBOARD), Input(DEVICE_KEYBOARD, TYPE_KEY, ev.key.keysym.sym, 1, false)); + window->input(getInputConfigByDevice(DEVICE_KEYBOARD), Input(DEVICE_KEYBOARD, TYPE_KEY, ev.key.keysym.sym, 1, false)); return true; case SDL_KEYUP: - mWindow->input(getInputConfigByDevice(DEVICE_KEYBOARD), Input(DEVICE_KEYBOARD, TYPE_KEY, ev.key.keysym.sym, 0, false)); + window->input(getInputConfigByDevice(DEVICE_KEYBOARD), Input(DEVICE_KEYBOARD, TYPE_KEY, ev.key.keysym.sym, 0, false)); return true; case SDL_TEXTINPUT: - if(mWindow->peekGui() != NULL) - mWindow->peekGui()->textInput(ev.text.text); + window->textInput(ev.text.text); break; case SDL_JOYDEVICEADDED: diff --git a/src/InputManager.h b/src/InputManager.h index a3fc0101d..5ec8d8848 100644 --- a/src/InputManager.h +++ b/src/InputManager.h @@ -13,9 +13,11 @@ class Window; class InputManager { private: - static const int DEADZONE = 23000; + InputManager(); - Window* mWindow; + static InputManager* mInstance; + + static const int DEADZONE = 23000; void loadDefaultKBConfig(); @@ -32,8 +34,9 @@ private: bool loadInputConfig(InputConfig* config); // returns true if successfully loaded, false if not (or didn't exist) public: - InputManager(Window* window); - ~InputManager(); + virtual ~InputManager(); + + static InputManager* getInstance(); void writeDeviceConfig(InputConfig* config); static std::string getConfigPath(); @@ -49,7 +52,7 @@ public: InputConfig* getInputConfigByDevice(int deviceId); - bool parseEvent(const SDL_Event& ev); + bool parseEvent(const SDL_Event& ev, Window* window); }; #endif diff --git a/src/Window.cpp b/src/Window.cpp index 279bf29a7..dc38877b7 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -13,7 +13,6 @@ Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true) { - mInputManager = new InputManager(this); mViewController = new ViewController(this); mHelp = new HelpComponent(this); @@ -33,7 +32,6 @@ Window::~Window() delete peekGui(); delete mHelp; - delete mInputManager; } void Window::pushGui(GuiComponent* gui) @@ -74,7 +72,7 @@ bool Window::init(unsigned int width, unsigned int height) return false; } - mInputManager->init(); + InputManager::getInstance()->init(); ResourceManager::getInstance()->reloadAll(); @@ -97,11 +95,17 @@ bool Window::init(unsigned int width, unsigned int height) void Window::deinit() { - mInputManager->deinit(); + InputManager::getInstance()->deinit(); ResourceManager::getInstance()->unloadAll(); Renderer::deinit(); } +void Window::textInput(const char* text) +{ + if(peekGui()) + peekGui()->textInput(text); +} + void Window::input(InputConfig* config, Input input) { if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) diff --git a/src/Window.h b/src/Window.h index c71b8d742..5c87e9e75 100644 --- a/src/Window.h +++ b/src/Window.h @@ -2,9 +2,9 @@ #define _WINDOW_H_ #include "GuiComponent.h" -#include "InputManager.h" #include #include "resources/Font.h" +#include "InputManager.h" class ViewController; class HelpComponent; @@ -20,6 +20,7 @@ public: void removeGui(GuiComponent* gui); GuiComponent* peekGui(); + void textInput(const char* text); void input(InputConfig* config, Input input); void update(int deltaTime); void render(); @@ -27,7 +28,6 @@ public: bool init(unsigned int width = 0, unsigned int height = 0); void deinit(); - inline InputManager* getInputManager() { return mInputManager; } inline ViewController* getViewController() { return mViewController; } void normalizeNextUpdate(); @@ -40,7 +40,6 @@ public: void setHelpPrompts(const std::vector& prompts); private: - InputManager* mInputManager; ViewController* mViewController; HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index 1bcb09db5..7825270fa 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -37,7 +37,7 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w // device info std::stringstream deviceInfo; - int numDevices = mWindow->getInputManager()->getNumJoysticks(); + int numDevices = InputManager::getInstance()->getNumJoysticks(); if(numDevices > 0) deviceInfo << numDevices << " GAMEPAD" << (numDevices > 1 ? "S" : "") << " DETECTED"; diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 14f0e6e26..10c56bdf7 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -147,7 +147,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // buttons std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okCallback] { - mWindow->getInputManager()->writeDeviceConfig(mTargetConfig); // save + InputManager::getInstance()->writeDeviceConfig(mTargetConfig); // save if(okCallback) okCallback(); delete this; diff --git a/src/main.cpp b/src/main.cpp index 96df4d39a..d8a78ac0f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -189,7 +189,7 @@ int main(int argc, char* argv[]) window.getViewController()->preload(); //choose which GUI to open depending on if an input configuration already exists - if(fs::exists(InputManager::getConfigPath()) && window.getInputManager()->getNumConfiguredDevices() > 0) + if(fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { window.getViewController()->goToStart(); }else{ @@ -221,7 +221,7 @@ int main(int argc, char* argv[]) case SDL_TEXTEDITING: case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEREMOVED: - if(window.getInputManager()->parseEvent(event)) + if(InputManager::getInstance()->parseEvent(event, &window)) { sleeping = false; timeSinceLastEvent = 0; From da581b70f2df2dc1c39419e6c3a7bb535998c631 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Apr 2014 17:28:28 -0500 Subject: [PATCH 258/386] Changed how game count is shown. --- src/views/SystemView.cpp | 20 ++++++++++++-------- src/views/SystemView.h | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 8070400e0..9045b263c 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -10,19 +10,21 @@ #define SELECTED_SCALE 1.5f #define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.06f)) +#define BAND_HEIGHT (logoSize().y() * SELECTED_SCALE) SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP), - mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x77777700, TextComponent::ALIGN_CENTER) + mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, TextComponent::ALIGN_CENTER) { mCamOffset = 0; setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - mSystemInfo.setSize(mSize.x(), 0); + mSystemInfo.setSize(mSize.x(), mSystemInfo.getSize().y() * 2.f); + mSystemInfo.setPosition(0, (mSize.y() + BAND_HEIGHT) / 2); - float yOff = (mSize.y() - logoSize().y())/2; - mSystemInfo.setPosition(0, (yOff - (logoSize().y() * (SELECTED_SCALE - 1)) / 2) + (logoSize().y() * SELECTED_SCALE) - mSystemInfo.getSize().y()); - //(mSize.y() - mSystemInfo.getSize().y()) / 2); + //const float sysInfoHeight = mSystemInfo.getSize().y() * 1.3f; + //mSystemInfo.setSize(mSize.x(), sysInfoHeight); + //mSystemInfo.setPosition(0, (mSize.y() - BAND_HEIGHT) / 2 + BAND_HEIGHT - sysInfoHeight); populate(); } @@ -183,7 +185,7 @@ void SystemView::onCursorChanged(const CursorState& state) }, 300); // wait 600ms to fade in - setAnimation(infoFadeIn, 700, nullptr, false, 2); + setAnimation(infoFadeIn, 2000, nullptr, false, 2); } void SystemView::render(const Eigen::Affine3f& parentTrans) @@ -220,8 +222,7 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) // background behind the logos Renderer::setMatrix(trans); - Renderer::drawRect(0, (int)(yOff - (logoSize().y() * (SELECTED_SCALE - 1)) / 2), - (int)mSize.x(), (int)(logoSize().y() * SELECTED_SCALE), 0xDDDDDDD8); + Renderer::drawRect(0.f, (mSize.y() - BAND_HEIGHT) / 2, mSize.x(), BAND_HEIGHT, 0xFFFFFFD8); Eigen::Affine3f logoTrans = trans; for(int i = center - logoCount/2; i < center + logoCount/2 + 1; i++) @@ -248,6 +249,9 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) } } + Renderer::setMatrix(trans); + Renderer::drawRect(mSystemInfo.getPosition().x(), mSystemInfo.getPosition().y() - 1, mSize.x(), mSystemInfo.getSize().y(), 0xDDDDDD00 | (unsigned char)(mSystemInfo.getOpacity() / 255.f * 0xD8)); + //Renderer::drawRect(mSystemInfo.getPosition().x() + mSize.x() * 0.025f, mSystemInfo.getPosition().y() - 1, mSize.x() * 0.95f, 2.f, 0x777777FF); mSystemInfo.render(trans); } diff --git a/src/views/SystemView.h b/src/views/SystemView.h index bd42dd3e5..4272ad9bc 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -33,7 +33,7 @@ protected: void onCursorChanged(const CursorState& state) override; private: - inline Eigen::Vector2f logoSize() const { return Eigen::Vector2f(mSize.x() * 0.25f, mSize.y() * 0.175f); } + inline Eigen::Vector2f logoSize() const { return Eigen::Vector2f(mSize.x() * 0.25f, mSize.y() * 0.155f); } void populate(); From a9622126cb3b5a175cb79ea06a27717627a29e53 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Apr 2014 17:31:56 -0500 Subject: [PATCH 259/386] Tweaked search window size. --- src/components/ScraperSearchComponent.cpp | 2 +- src/guis/GuiScraperMulti.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 27bf603e5..22cb648f7 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -94,7 +94,7 @@ void ScraperSearchComponent::onSizeChanged() mGrid.setRowHeightPerc(1, 0.505f); - const float boxartCellScale = 0.85f; + const float boxartCellScale = 0.9f; // limit thumbnail size using setMaxHeight - we do this instead of letting mGrid call setSize because it maintains the aspect ratio // we also pad a little so it doesn't rub up against the metadata labels diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index bbe9d9072..1e98901d0 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -50,7 +50,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue Date: Fri, 18 Apr 2014 19:00:49 -0500 Subject: [PATCH 260/386] Added AnimatedImageComponent. Just animates a sequence of images, very straightforward. Added files for busy animation. --- CMakeLists.txt | 7 ++ data/ResourceUtil.cpp | 78 ++++++------ data/Resources.h | 12 ++ data/converted/busy_0_svg.cpp | 144 ++++++++++++++++++++++ data/converted/busy_1_svg.cpp | 144 ++++++++++++++++++++++ data/converted/busy_2_svg.cpp | 144 ++++++++++++++++++++++ data/converted/busy_3_svg.cpp | 144 ++++++++++++++++++++++ data/resources/busy_0.svg | 22 ++++ data/resources/busy_1.svg | 22 ++++ data/resources/busy_2.svg | 22 ++++ data/resources/busy_3.svg | 22 ++++ src/components/AnimatedImageComponent.cpp | 90 ++++++++++++++ src/components/AnimatedImageComponent.h | 43 +++++++ src/views/SystemView.cpp | 5 - src/views/SystemView.h | 1 + 15 files changed, 860 insertions(+), 40 deletions(-) create mode 100644 data/converted/busy_0_svg.cpp create mode 100644 data/converted/busy_1_svg.cpp create mode 100644 data/converted/busy_2_svg.cpp create mode 100644 data/converted/busy_3_svg.cpp create mode 100644 data/resources/busy_0.svg create mode 100644 data/resources/busy_1.svg create mode 100644 data/resources/busy_2.svg create mode 100644 data/resources/busy_3.svg create mode 100644 src/components/AnimatedImageComponent.cpp create mode 100644 src/components/AnimatedImageComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ab3b2948..f30355664 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h @@ -251,6 +252,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/XMLReader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp @@ -342,6 +344,11 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_add_svg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_remove_svg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_svg.cpp + + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_0_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_1_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_2_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_3_svg.cpp ) #SOURCE_GROUP(resources FILES ResourceUtil.cpp) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 11d5a1551..11ac955c6 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,9 +2,13 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 35; +const size_t res2hNrOfFiles = 39; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.svg", arrow_svg_size, arrow_svg_data}, + {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, + {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, + {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, + {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, {":/button.png", button_png_size, button_png_data}, {":/button_filled.png", button_filled_png_size, button_filled_png_data}, {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, @@ -43,40 +47,44 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { res2hMapType::value_type mapTemp[] = { std::make_pair(":/arrow.svg", res2hFiles[0]), - std::make_pair(":/button.png", res2hFiles[1]), - std::make_pair(":/button_filled.png", res2hFiles[2]), - std::make_pair(":/checkbox_checked.svg", res2hFiles[3]), - std::make_pair(":/checkbox_unchecked.svg", res2hFiles[4]), - std::make_pair(":/ES_logo_16.png", res2hFiles[5]), - std::make_pair(":/ES_logo_32.png", res2hFiles[6]), - std::make_pair(":/fav_add.svg", res2hFiles[7]), - std::make_pair(":/fav_remove.svg", res2hFiles[8]), - std::make_pair(":/frame.png", res2hFiles[9]), - std::make_pair(":/off.svg", res2hFiles[10]), - std::make_pair(":/on.svg", res2hFiles[11]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[12]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[13]), - std::make_pair(":/option_arrow.svg", res2hFiles[14]), - std::make_pair(":/scroll_gradient.png", res2hFiles[15]), - std::make_pair(":/slider_knob.svg", res2hFiles[16]), - std::make_pair(":/star_filled.svg", res2hFiles[17]), - std::make_pair(":/star_unfilled.svg", res2hFiles[18]), - std::make_pair(":/textinput_ninepatch.png", res2hFiles[19]), - std::make_pair(":/help/button_a.svg", res2hFiles[20]), - std::make_pair(":/help/button_b.svg", res2hFiles[21]), - std::make_pair(":/help/button_l.svg", res2hFiles[22]), - std::make_pair(":/help/button_r.svg", res2hFiles[23]), - std::make_pair(":/help/button_select.svg", res2hFiles[24]), - std::make_pair(":/help/button_start.svg", res2hFiles[25]), - std::make_pair(":/help/button_x.svg", res2hFiles[26]), - std::make_pair(":/help/button_y.svg", res2hFiles[27]), - std::make_pair(":/help/dpad_all.svg", res2hFiles[28]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[29]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[30]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[31]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[32]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[33]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[34]) + std::make_pair(":/busy_0.svg", res2hFiles[1]), + std::make_pair(":/busy_1.svg", res2hFiles[2]), + std::make_pair(":/busy_2.svg", res2hFiles[3]), + std::make_pair(":/busy_3.svg", res2hFiles[4]), + std::make_pair(":/button.png", res2hFiles[5]), + std::make_pair(":/button_filled.png", res2hFiles[6]), + std::make_pair(":/checkbox_checked.svg", res2hFiles[7]), + std::make_pair(":/checkbox_unchecked.svg", res2hFiles[8]), + std::make_pair(":/ES_logo_16.png", res2hFiles[9]), + std::make_pair(":/ES_logo_32.png", res2hFiles[10]), + std::make_pair(":/fav_add.svg", res2hFiles[11]), + std::make_pair(":/fav_remove.svg", res2hFiles[12]), + std::make_pair(":/frame.png", res2hFiles[13]), + std::make_pair(":/off.svg", res2hFiles[14]), + std::make_pair(":/on.svg", res2hFiles[15]), + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[16]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[17]), + std::make_pair(":/option_arrow.svg", res2hFiles[18]), + std::make_pair(":/scroll_gradient.png", res2hFiles[19]), + std::make_pair(":/slider_knob.svg", res2hFiles[20]), + std::make_pair(":/star_filled.svg", res2hFiles[21]), + std::make_pair(":/star_unfilled.svg", res2hFiles[22]), + std::make_pair(":/textinput_ninepatch.png", res2hFiles[23]), + std::make_pair(":/help/button_a.svg", res2hFiles[24]), + std::make_pair(":/help/button_b.svg", res2hFiles[25]), + std::make_pair(":/help/button_l.svg", res2hFiles[26]), + std::make_pair(":/help/button_r.svg", res2hFiles[27]), + std::make_pair(":/help/button_select.svg", res2hFiles[28]), + std::make_pair(":/help/button_start.svg", res2hFiles[29]), + std::make_pair(":/help/button_x.svg", res2hFiles[30]), + std::make_pair(":/help/button_y.svg", res2hFiles[31]), + std::make_pair(":/help/dpad_all.svg", res2hFiles[32]), + std::make_pair(":/help/dpad_down.svg", res2hFiles[33]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[34]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[35]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[36]), + std::make_pair(":/help/dpad_up.svg", res2hFiles[37]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[38]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 1a7f4c031..bc001b46d 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -8,6 +8,18 @@ extern const size_t arrow_svg_size; extern const unsigned char arrow_svg_data[]; +extern const size_t busy_0_svg_size; +extern const unsigned char busy_0_svg_data[]; + +extern const size_t busy_1_svg_size; +extern const unsigned char busy_1_svg_data[]; + +extern const size_t busy_2_svg_size; +extern const unsigned char busy_2_svg_data[]; + +extern const size_t busy_3_svg_size; +extern const unsigned char busy_3_svg_data[]; + extern const size_t button_png_size; extern const unsigned char button_png_data[]; diff --git a/data/converted/busy_0_svg.cpp b/data/converted/busy_0_svg.cpp new file mode 100644 index 000000000..732d087fc --- /dev/null +++ b/data/converted/busy_0_svg.cpp @@ -0,0 +1,144 @@ +//this file was auto-generated from "busy_0.svg" by res2h + +#include "../Resources.h" + +const size_t busy_0_svg_size = 1369; +const unsigned char busy_0_svg_data[1369] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, + 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, + 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e, + 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0d,0x0a, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, + 0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, + 0x2c,0x39,0x2e,0x30,0x38,0x38,0x63,0x30,0x2c,0x30, + 0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x68,0x2d,0x37, + 0x2e,0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x56,0x30,0x2e,0x37, + 0x30,0x38,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30, + 0x39,0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e, + 0x39,0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69, + 0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, + 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33, + 0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x63, + 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30,0x32,0x2c, + 0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33,0x2c,0x30, + 0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76,0x2d,0x38, + 0x2e,0x33,0x37,0x39,0x0d,0x0a,0x09,0x09,0x63,0x30, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39,0x68, + 0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31,0x2e, + 0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, + 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, + 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, + 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, + 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, + 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, + 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, + 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/busy_1_svg.cpp b/data/converted/busy_1_svg.cpp new file mode 100644 index 000000000..6bbc474e1 --- /dev/null +++ b/data/converted/busy_1_svg.cpp @@ -0,0 +1,144 @@ +//this file was auto-generated from "busy_1.svg" by res2h + +#include "../Resources.h" + +const size_t busy_1_svg_size = 1369; +const unsigned char busy_1_svg_data[1369] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, + 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, + 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e, + 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0d,0x0a, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x39,0x2e,0x30, + 0x38,0x38,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d, + 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, + 0x38,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37, + 0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x56,0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, + 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, + 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, + 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, + 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, + 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33, + 0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, + 0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, + 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, + 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, + 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, + 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, + 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, + 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, + 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/busy_2_svg.cpp b/data/converted/busy_2_svg.cpp new file mode 100644 index 000000000..46896deb6 --- /dev/null +++ b/data/converted/busy_2_svg.cpp @@ -0,0 +1,144 @@ +//this file was auto-generated from "busy_2.svg" by res2h + +#include "../Resources.h" + +const size_t busy_2_svg_size = 1369; +const unsigned char busy_2_svg_data[1369] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, + 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, + 0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c, + 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d, + 0x37,0x2e,0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, + 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38, + 0x2e,0x33,0x37,0x39,0x0d,0x0a,0x09,0x09,0x63,0x30, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x68, + 0x37,0x2e,0x39,0x33,0x37,0x63,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31,0x2e, + 0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35, + 0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x39,0x2e,0x30, + 0x38,0x38,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d, + 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, + 0x38,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37, + 0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x56,0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, + 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, + 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, + 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, + 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, + 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33, + 0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, + 0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, + 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, + 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, + 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, + 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, + 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, + 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, + 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/converted/busy_3_svg.cpp b/data/converted/busy_3_svg.cpp new file mode 100644 index 000000000..8172c7c5f --- /dev/null +++ b/data/converted/busy_3_svg.cpp @@ -0,0 +1,144 @@ +//this file was auto-generated from "busy_3.svg" by res2h + +#include "../Resources.h" + +const size_t busy_3_svg_size = 1369; +const unsigned char busy_3_svg_data[1369] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, + 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, + 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, + 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e, + 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0d,0x0a, + 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, + 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, + 0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, + 0x2c,0x39,0x2e,0x30,0x38,0x38,0x63,0x30,0x2c,0x30, + 0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x68,0x2d,0x37, + 0x2e,0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x56,0x30,0x2e,0x37, + 0x30,0x38,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30, + 0x39,0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e, + 0x39,0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, + 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, + 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, + 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, + 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, + 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33, + 0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, + 0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, + 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, + 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, + 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, + 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, + 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, + 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, + 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a +}; diff --git a/data/resources/busy_0.svg b/data/resources/busy_0.svg new file mode 100644 index 000000000..6dc4abb27 --- /dev/null +++ b/data/resources/busy_0.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/data/resources/busy_1.svg b/data/resources/busy_1.svg new file mode 100644 index 000000000..d13089132 --- /dev/null +++ b/data/resources/busy_1.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/data/resources/busy_2.svg b/data/resources/busy_2.svg new file mode 100644 index 000000000..95862598b --- /dev/null +++ b/data/resources/busy_2.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/data/resources/busy_3.svg b/data/resources/busy_3.svg new file mode 100644 index 000000000..cf35d9cfc --- /dev/null +++ b/data/resources/busy_3.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/src/components/AnimatedImageComponent.cpp b/src/components/AnimatedImageComponent.cpp new file mode 100644 index 000000000..665045df7 --- /dev/null +++ b/src/components/AnimatedImageComponent.cpp @@ -0,0 +1,90 @@ +#include "AnimatedImageComponent.h" +#include "ImageComponent.h" +#include "../Log.h" + +// animation definitions because there's only one right now and i'm too lazy to make another file +AnimationFrame BUSY_ANIMATION_FRAMES[] = { + {":/busy_0.svg", 500}, + {":/busy_1.svg", 500}, + {":/busy_2.svg", 500}, + {":/busy_3.svg", 500}, +}; +const AnimationDef BUSY_ANIMATION_DEF = { BUSY_ANIMATION_FRAMES, 4, true }; + + +AnimatedImageComponent::AnimatedImageComponent(Window* window, const AnimationDef* def) : GuiComponent(window), mEnabled(false) +{ + if(def) + load(def); +} + +void AnimatedImageComponent::load(const AnimationDef* def) +{ + mFrames.clear(); + + assert(def->frameCount >= 1); + + for(size_t i = 0; i < def->frameCount; i++) + { + if(def->frames[i].path != NULL && !ResourceManager::getInstance()->fileExists(def->frames[i].path)) + { + LOG(LogError) << "Missing animation frame " << i << " (\"" << def->frames[i].path << "\")"; + continue; + } + + auto img = std::unique_ptr(new ImageComponent(mWindow)); + img->setResize(mSize.x(), mSize.y()); + img->setImage(std::string(def->frames[i].path), false); + + mFrames.push_back(ImageFrame(std::move(img), def->frames[i].time)); + } + + mLoop = def->loop; + + mCurrentFrame = 0; + mFrameAccumulator = 0; + mEnabled = true; +} + +void AnimatedImageComponent::onSizeChanged() +{ + for(auto it = mFrames.begin(); it != mFrames.end(); it++) + { + it->first->setResize(mSize.x(), mSize.y()); + } +} + +void AnimatedImageComponent::update(int deltaTime) +{ + if(!mEnabled || mFrames.size() == 0) + return; + + mFrameAccumulator += deltaTime; + + while(mFrames.at(mCurrentFrame).second <= mFrameAccumulator) + { + mCurrentFrame++; + + if(mCurrentFrame == mFrames.size()) + { + if(mLoop) + { + // restart + mCurrentFrame = 0; + }else{ + // done, stop at last frame + mCurrentFrame--; + mEnabled = false; + break; + } + } + + mFrameAccumulator -= mFrames.at(mCurrentFrame).second; + } +} + +void AnimatedImageComponent::render(const Eigen::Affine3f& trans) +{ + if(mFrames.size()) + mFrames.at(mCurrentFrame).first->render(getTransform() * trans); +} diff --git a/src/components/AnimatedImageComponent.h b/src/components/AnimatedImageComponent.h new file mode 100644 index 000000000..a49bc0804 --- /dev/null +++ b/src/components/AnimatedImageComponent.h @@ -0,0 +1,43 @@ +#include "../GuiComponent.h" + +class ImageComponent; + +struct AnimationFrame +{ + const char* path; + int time; +}; + +struct AnimationDef +{ + AnimationFrame* frames; + size_t frameCount; + bool loop; +}; + +class AnimatedImageComponent : public GuiComponent +{ +public: + AnimatedImageComponent(Window* window, const AnimationDef* def = NULL); + + void load(const AnimationDef* def); // no reference to def is kept after loading is complete + + void update(int deltaTime) override; + void render(const Eigen::Affine3f& trans) override; + + void onSizeChanged() override; + +private: + typedef std::pair, int> ImageFrame; + + std::vector mFrames; + + bool mLoop; + bool mEnabled; + int mFrameAccumulator; + int mCurrentFrame; +}; + + +// animation declarations because there's only one right now and I'm too lazy to make another file +extern const AnimationDef BUSY_ANIMATION_DEF; diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 9045b263c..6707742cb 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -22,10 +22,6 @@ SystemView::SystemView(Window* window) : IList(wind mSystemInfo.setSize(mSize.x(), mSystemInfo.getSize().y() * 2.f); mSystemInfo.setPosition(0, (mSize.y() + BAND_HEIGHT) / 2); - //const float sysInfoHeight = mSystemInfo.getSize().y() * 1.3f; - //mSystemInfo.setSize(mSize.x(), sysInfoHeight); - //mSystemInfo.setPosition(0, (mSize.y() - BAND_HEIGHT) / 2 + BAND_HEIGHT - sysInfoHeight); - populate(); } @@ -251,7 +247,6 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); Renderer::drawRect(mSystemInfo.getPosition().x(), mSystemInfo.getPosition().y() - 1, mSize.x(), mSystemInfo.getSize().y(), 0xDDDDDD00 | (unsigned char)(mSystemInfo.getOpacity() / 255.f * 0xD8)); - //Renderer::drawRect(mSystemInfo.getPosition().x() + mSize.x() * 0.025f, mSystemInfo.getPosition().y() - 1, mSize.x() * 0.95f, 2.f, 0x777777FF); mSystemInfo.render(trans); } diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 4272ad9bc..65664ff65 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -8,6 +8,7 @@ #include "../resources/TextureResource.h" class SystemData; +class AnimatedImageComponent; struct SystemViewData { From 6d4288f245347f4ebc075ed5a83a314b04aa34dd Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 18 Apr 2014 19:46:55 -0500 Subject: [PATCH 261/386] Added busy animation + "WORKING..." to the ScraperSearchComponent. --- src/components/AnimatedImageComponent.cpp | 10 ++++--- src/components/AnimatedImageComponent.h | 4 ++- src/components/ScraperSearchComponent.cpp | 32 ++++++++++++++++++++++- src/components/ScraperSearchComponent.h | 6 ++++- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/components/AnimatedImageComponent.cpp b/src/components/AnimatedImageComponent.cpp index 665045df7..deb3d584a 100644 --- a/src/components/AnimatedImageComponent.cpp +++ b/src/components/AnimatedImageComponent.cpp @@ -12,10 +12,8 @@ AnimationFrame BUSY_ANIMATION_FRAMES[] = { const AnimationDef BUSY_ANIMATION_DEF = { BUSY_ANIMATION_FRAMES, 4, true }; -AnimatedImageComponent::AnimatedImageComponent(Window* window, const AnimationDef* def) : GuiComponent(window), mEnabled(false) +AnimatedImageComponent::AnimatedImageComponent(Window* window) : GuiComponent(window), mEnabled(false) { - if(def) - load(def); } void AnimatedImageComponent::load(const AnimationDef* def) @@ -46,6 +44,12 @@ void AnimatedImageComponent::load(const AnimationDef* def) mEnabled = true; } +void AnimatedImageComponent::reset() +{ + mCurrentFrame = 0; + mFrameAccumulator = 0; +} + void AnimatedImageComponent::onSizeChanged() { for(auto it = mFrames.begin(); it != mFrames.end(); it++) diff --git a/src/components/AnimatedImageComponent.h b/src/components/AnimatedImageComponent.h index a49bc0804..fc44034e0 100644 --- a/src/components/AnimatedImageComponent.h +++ b/src/components/AnimatedImageComponent.h @@ -18,10 +18,12 @@ struct AnimationDef class AnimatedImageComponent : public GuiComponent { public: - AnimatedImageComponent(Window* window, const AnimationDef* def = NULL); + AnimatedImageComponent(Window* window); void load(const AnimationDef* def); // no reference to def is kept after loading is complete + void reset(); // set to frame 0 + void update(int deltaTime) override; void render(const Eigen::Affine3f& trans) override; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 22cb648f7..794b59a3e 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -6,6 +6,7 @@ #include "ImageComponent.h" #include "RatingComponent.h" #include "DateTimeComponent.h" +#include "AnimatedImageComponent.h" #include "ComponentList.h" #include "../HttpReq.h" #include "../Settings.h" @@ -14,7 +15,7 @@ #include "../guis/GuiTextEditPopup.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), - mGrid(window, Eigen::Vector2i(4, 3)), + mGrid(window, Eigen::Vector2i(4, 3)), mBusyGrid(window, Eigen::Vector2i(3, 1)), mSearchType(type) { addChild(&mGrid); @@ -73,6 +74,14 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mResultList = std::make_shared(mWindow); mResultList->setCursorChangedCallback([this](CursorState state) { if(state == CURSOR_STOPPED) updateInfoPane(); }); + mBusyAnimation = std::make_shared(mWindow); + mBusyAnimation->load(&BUSY_ANIMATION_DEF); + mBusyText = std::make_shared(mWindow, "WORKING...", Font::get(FONT_SIZE_LARGE), 0x777777FF); + + // col 0 = animation, col 1 = spacer, col 2 = text + mBusyGrid.setEntry(mBusyAnimation, Vector2i(0, 0), false, true); + mBusyGrid.setEntry(mBusyText, Vector2i(2, 0), false, true); + updateViewStyle(); } @@ -143,6 +152,20 @@ void ScraperSearchComponent::onSizeChanged() mDescContainer->setSize(mGrid.getColWidth(1)*boxartCellScale + mGrid.getColWidth(2), mResultDesc->getFont()->getHeight() * 3); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container + const float busyGridHeight = mBusyText->getSize().y(); + const float busyGridWidth = (busyGridHeight + mBusyText->getSize().x()) * 1.03f; + if(busyGridWidth > 0 && busyGridHeight > 0) + { + mBusyGrid.setSize(busyGridWidth, busyGridHeight); + + mBusyGrid.setColWidthPerc(0, (busyGridHeight) / busyGridWidth); + mBusyGrid.setColWidthPerc(1, 0.025f); + + // in the far right + mBusyGrid.setPosition(mGrid.getColWidth(0) + mGrid.getColWidth(1) + mGrid.getColWidth(2) + (mGrid.getColWidth(3) - busyGridWidth)/2, + mGrid.getRowHeight(0) + mGrid.getRowHeight(1) + (mGrid.getRowHeight(2) - busyGridHeight) / 2); + } + mGrid.onSizeChanged(); } @@ -330,6 +353,8 @@ void ScraperSearchComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x00000011); + + mBusyGrid.render(trans); } } @@ -351,6 +376,11 @@ void ScraperSearchComponent::update(int deltaTime) { GuiComponent::update(deltaTime); + if(mBlockAccept) + { + mBusyAnimation->update(deltaTime); + } + if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) { updateThumbnail(); diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index e1260acac..a4cfb9b74 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -14,7 +14,7 @@ class TextComponent; class DateTimeComponent; class ScrollableContainer; class HttpReq; - +class AnimatedImageComponent; class ScraperSearchComponent : public GuiComponent { @@ -97,4 +97,8 @@ private: std::unique_ptr mMDResolveHandle; std::vector mScraperResults; std::unique_ptr mThumbnailReq; + + ComponentGrid mBusyGrid; + std::shared_ptr mBusyAnimation; + std::shared_ptr mBusyText; }; From dedfcfea4c5c69b6b3c4c5e46470650bc61951d4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 13:37:10 -0500 Subject: [PATCH 262/386] Split busy animation into its own component for reusability. Changed the design a bit. The ScraperSearchComponent now grays out entirely + displays the busy animation in the center. --- CMakeLists.txt | 2 + src/components/AnimatedImageComponent.cpp | 10 ---- src/components/AnimatedImageComponent.h | 4 -- src/components/BusyComponent.cpp | 58 +++++++++++++++++++++++ src/components/BusyComponent.h | 23 +++++++++ src/components/ScraperSearchComponent.cpp | 37 ++++----------- src/components/ScraperSearchComponent.h | 5 +- 7 files changed, 95 insertions(+), 44 deletions(-) create mode 100644 src/components/BusyComponent.cpp create mode 100644 src/components/BusyComponent.h diff --git a/CMakeLists.txt b/CMakeLists.txt index f30355664..b610736c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,6 +164,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h @@ -255,6 +256,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp diff --git a/src/components/AnimatedImageComponent.cpp b/src/components/AnimatedImageComponent.cpp index deb3d584a..aef223198 100644 --- a/src/components/AnimatedImageComponent.cpp +++ b/src/components/AnimatedImageComponent.cpp @@ -2,16 +2,6 @@ #include "ImageComponent.h" #include "../Log.h" -// animation definitions because there's only one right now and i'm too lazy to make another file -AnimationFrame BUSY_ANIMATION_FRAMES[] = { - {":/busy_0.svg", 500}, - {":/busy_1.svg", 500}, - {":/busy_2.svg", 500}, - {":/busy_3.svg", 500}, -}; -const AnimationDef BUSY_ANIMATION_DEF = { BUSY_ANIMATION_FRAMES, 4, true }; - - AnimatedImageComponent::AnimatedImageComponent(Window* window) : GuiComponent(window), mEnabled(false) { } diff --git a/src/components/AnimatedImageComponent.h b/src/components/AnimatedImageComponent.h index fc44034e0..5d6c988b3 100644 --- a/src/components/AnimatedImageComponent.h +++ b/src/components/AnimatedImageComponent.h @@ -39,7 +39,3 @@ private: int mFrameAccumulator; int mCurrentFrame; }; - - -// animation declarations because there's only one right now and I'm too lazy to make another file -extern const AnimationDef BUSY_ANIMATION_DEF; diff --git a/src/components/BusyComponent.cpp b/src/components/BusyComponent.cpp new file mode 100644 index 000000000..003aa51b8 --- /dev/null +++ b/src/components/BusyComponent.cpp @@ -0,0 +1,58 @@ +#include "BusyComponent.h" + +#include "AnimatedImageComponent.h" +#include "TextComponent.h" +#include "../Renderer.h" + +// animation definition +AnimationFrame BUSY_ANIMATION_FRAMES[] = { + {":/busy_0.svg", 300}, + {":/busy_1.svg", 300}, + {":/busy_2.svg", 300}, + {":/busy_3.svg", 300}, +}; +const AnimationDef BUSY_ANIMATION_DEF = { BUSY_ANIMATION_FRAMES, 4, true }; + +using namespace Eigen; + +BusyComponent::BusyComponent(Window* window) : GuiComponent(window), + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(5, 3)) +{ + mAnimation = std::make_shared(mWindow); + mAnimation->load(&BUSY_ANIMATION_DEF); + mText = std::make_shared(mWindow, "WORKING...", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + + // col 0 = animation, col 1 = spacer, col 2 = text + mGrid.setEntry(mAnimation, Vector2i(1, 1), false, true); + mGrid.setEntry(mText, Vector2i(3, 1), false, true); + + addChild(&mBackground); + addChild(&mGrid); +} + +void BusyComponent::onSizeChanged() +{ + mGrid.setSize(mSize); + + if(mSize.x() == 0 || mSize.y() == 0) + return; + + const float middleSpacerWidth = 0.01f * Renderer::getScreenWidth(); + const float textHeight = mText->getFont()->getLetterHeight(); + mText->setSize(0, textHeight); + const float textWidth = mText->getSize().x(); + + mGrid.setColWidthPerc(1, textHeight / mSize.x()); // animation is square + mGrid.setColWidthPerc(2, middleSpacerWidth / mSize.x()); + mGrid.setColWidthPerc(3, textWidth / mSize.x()); + + mGrid.setRowHeightPerc(1, textHeight / mSize.y()); + + mBackground.fitTo(Vector2f(mGrid.getColWidth(1) + mGrid.getColWidth(2) + mGrid.getColWidth(3), textHeight + 2), + mAnimation->getPosition(), Vector2f(0, 0)); +} + +void BusyComponent::reset() +{ + mAnimation->reset(); +} diff --git a/src/components/BusyComponent.h b/src/components/BusyComponent.h new file mode 100644 index 000000000..44d6d4d2e --- /dev/null +++ b/src/components/BusyComponent.h @@ -0,0 +1,23 @@ +#include "../GuiComponent.h" +#include "ComponentGrid.h" +#include "NinePatchComponent.h" + +class AnimatedImageComponent; +class TextComponent; + +class BusyComponent : public GuiComponent +{ +public: + BusyComponent(Window* window); + + void onSizeChanged() override; + + void reset(); // reset to frame 0 + +private: + NinePatchComponent mBackground; + ComponentGrid mGrid; + + std::shared_ptr mAnimation; + std::shared_ptr mText; +}; diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 794b59a3e..ef8c95ad7 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -15,7 +15,7 @@ #include "../guis/GuiTextEditPopup.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), - mGrid(window, Eigen::Vector2i(4, 3)), mBusyGrid(window, Eigen::Vector2i(3, 1)), + mGrid(window, Eigen::Vector2i(4, 3)), mBusyAnim(window), mSearchType(type) { addChild(&mGrid); @@ -74,14 +74,6 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mResultList = std::make_shared(mWindow); mResultList->setCursorChangedCallback([this](CursorState state) { if(state == CURSOR_STOPPED) updateInfoPane(); }); - mBusyAnimation = std::make_shared(mWindow); - mBusyAnimation->load(&BUSY_ANIMATION_DEF); - mBusyText = std::make_shared(mWindow, "WORKING...", Font::get(FONT_SIZE_LARGE), 0x777777FF); - - // col 0 = animation, col 1 = spacer, col 2 = text - mBusyGrid.setEntry(mBusyAnimation, Vector2i(0, 0), false, true); - mBusyGrid.setEntry(mBusyText, Vector2i(2, 0), false, true); - updateViewStyle(); } @@ -152,21 +144,11 @@ void ScraperSearchComponent::onSizeChanged() mDescContainer->setSize(mGrid.getColWidth(1)*boxartCellScale + mGrid.getColWidth(2), mResultDesc->getFont()->getHeight() * 3); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container - const float busyGridHeight = mBusyText->getSize().y(); - const float busyGridWidth = (busyGridHeight + mBusyText->getSize().x()) * 1.03f; - if(busyGridWidth > 0 && busyGridHeight > 0) - { - mBusyGrid.setSize(busyGridWidth, busyGridHeight); - - mBusyGrid.setColWidthPerc(0, (busyGridHeight) / busyGridWidth); - mBusyGrid.setColWidthPerc(1, 0.025f); - - // in the far right - mBusyGrid.setPosition(mGrid.getColWidth(0) + mGrid.getColWidth(1) + mGrid.getColWidth(2) + (mGrid.getColWidth(3) - busyGridWidth)/2, - mGrid.getRowHeight(0) + mGrid.getRowHeight(1) + (mGrid.getRowHeight(2) - busyGridHeight) / 2); - } - mGrid.onSizeChanged(); + + mBusyAnim.setSize(mSize); + //mBusyAnim.setPosition(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT ? mDescContainer->getPosition() : mResultList->getPosition()); + //mBusyAnim.setSize(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT ? mDescContainer->getSize() : mResultList->getSize()); } void ScraperSearchComponent::updateViewStyle() @@ -351,10 +333,11 @@ void ScraperSearchComponent::render(const Eigen::Affine3f& parentTrans) if(mBlockAccept) { Renderer::setMatrix(trans); - Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), - (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x00000011); + Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0x00000011); + //Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), + // (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x00000011); - mBusyGrid.render(trans); + mBusyAnim.render(trans); } } @@ -378,7 +361,7 @@ void ScraperSearchComponent::update(int deltaTime) if(mBlockAccept) { - mBusyAnimation->update(deltaTime); + mBusyAnim.update(deltaTime); } if(mThumbnailReq && mThumbnailReq->status() != HttpReq::REQ_IN_PROGRESS) diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index a4cfb9b74..c943aa548 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -3,6 +3,7 @@ #include "../GuiComponent.h" #include "../scrapers/Scraper.h" #include "../components/ComponentGrid.h" +#include "../components/BusyComponent.h" #include #define MAX_SCRAPER_RESULTS 7 @@ -98,7 +99,5 @@ private: std::vector mScraperResults; std::unique_ptr mThumbnailReq; - ComponentGrid mBusyGrid; - std::shared_ptr mBusyAnimation; - std::shared_ptr mBusyText; + BusyComponent mBusyAnim; }; From c7434c52fd1e2bf879721a406522b95d5845c3c0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 13:52:56 -0500 Subject: [PATCH 263/386] Added spacing to rating stars. --- data/converted/star_filled_svg.cpp | 146 ++++++------- data/converted/star_unfilled_svg.cpp | 293 +++++++++++++-------------- data/resources/star_filled.svg | 14 +- data/resources/star_unfilled.svg | 27 ++- src/guis/GuiMetaDataEd.cpp | 3 +- 5 files changed, 240 insertions(+), 243 deletions(-) diff --git a/data/converted/star_filled_svg.cpp b/data/converted/star_filled_svg.cpp index ef1e5863f..3cec60910 100644 --- a/data/converted/star_filled_svg.cpp +++ b/data/converted/star_filled_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t star_filled_svg_size = 1169; -const unsigned char star_filled_svg_data[1169] = { +const size_t star_filled_svg_size = 1164; +const unsigned char star_filled_svg_data[1164] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -41,84 +41,84 @@ const unsigned char star_filled_svg_data[1169] = { 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x36,0x70,0x78, + 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x35,0x70,0x78, 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x30,0x2e,0x37,0x36,0x31,0x70,0x78,0x22,0x20, + 0x32,0x30,0x2e,0x37,0x36,0x32,0x70,0x78,0x22,0x20, 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x36,0x20, - 0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20,0x65,0x6e, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20, + 0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20,0x65,0x6e, 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37, - 0x36,0x20,0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20, + 0x35,0x20,0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20, 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30, - 0x2e,0x38,0x38,0x38,0x2c,0x30,0x63,0x2d,0x30,0x2e, - 0x32,0x32,0x38,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x35, - 0x35,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2d,0x30,0x2e, - 0x36,0x32,0x37,0x2c,0x30,0x2e,0x35,0x32,0x34,0x4c, - 0x37,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x32,0x33, - 0x32,0x63,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x36,0x39,0x39,0x2d,0x31,0x2e,0x32,0x35,0x39, - 0x2c,0x31,0x2e,0x33,0x36,0x33,0x2d,0x32,0x2e,0x30, - 0x33,0x2c,0x31,0x2e,0x34,0x37,0x35,0x4c,0x30,0x2e, - 0x37,0x31,0x35,0x2c,0x37,0x2e,0x34,0x36,0x31,0x0d, - 0x0a,0x09,0x43,0x2d,0x30,0x2e,0x30,0x35,0x37,0x2c, - 0x37,0x2e,0x35,0x37,0x33,0x2d,0x30,0x2e,0x32,0x33, - 0x31,0x2c,0x38,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x33, - 0x32,0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x6c,0x33, - 0x2e,0x37,0x35,0x39,0x2c,0x33,0x2e,0x36,0x36,0x34, - 0x63,0x30,0x2e,0x35,0x35,0x39,0x2c,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x30,0x2e,0x39,0x30,0x37,0x2c,0x31, - 0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x37,0x37,0x35, - 0x2c,0x32,0x2e,0x33,0x38,0x36,0x6c,0x2d,0x30,0x2e, - 0x38,0x38,0x38,0x2c,0x35,0x2e,0x31,0x37,0x34,0x0d, - 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x39,0x36,0x2c, - 0x30,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e,0x31,0x31, - 0x38,0x2c,0x30,0x2e,0x38,0x38,0x34,0x2c,0x30,0x2e, - 0x35,0x30,0x36,0x2c,0x30,0x2e,0x38,0x38,0x34,0x63, - 0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2c,0x30,0x2e, - 0x33,0x31,0x39,0x2d,0x30,0x2e,0x30,0x34,0x37,0x2c, - 0x30,0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x31,0x34, - 0x36,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x32,0x2e, - 0x34,0x34,0x33,0x63,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x31,0x38,0x31,0x2c,0x30,0x2e,0x38,0x2d, - 0x30,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e,0x32,0x35, - 0x34,0x2d,0x30,0x2e,0x32,0x37,0x31,0x0d,0x0a,0x09, - 0x63,0x30,0x2e,0x34,0x35,0x35,0x2c,0x30,0x2c,0x30, - 0x2e,0x39,0x31,0x2c,0x30,0x2e,0x30,0x39,0x31,0x2c, - 0x31,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2e,0x32,0x37, - 0x31,0x6c,0x34,0x2e,0x36,0x34,0x35,0x2c,0x32,0x2e, - 0x34,0x34,0x33,0x63,0x30,0x2e,0x31,0x38,0x39,0x2c, - 0x30,0x2e,0x31,0x2c,0x30,0x2e,0x33,0x36,0x32,0x2c, - 0x30,0x2e,0x31,0x34,0x36,0x2c,0x30,0x2e,0x35,0x30, - 0x39,0x2c,0x30,0x2e,0x31,0x34,0x36,0x63,0x30,0x2e, - 0x33,0x38,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x36,0x30, - 0x33,0x2d,0x30,0x2e,0x33,0x32,0x37,0x2c,0x30,0x2e, - 0x35,0x30,0x37,0x2d,0x30,0x2e,0x38,0x38,0x34,0x6c, - 0x2d,0x30,0x2e,0x38,0x38,0x39,0x2d,0x35,0x2e,0x31, - 0x37,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x31, - 0x33,0x32,0x2d,0x30,0x2e,0x37,0x36,0x38,0x2c,0x30, - 0x2e,0x32,0x31,0x38,0x2d,0x31,0x2e,0x38,0x34,0x32, - 0x2c,0x30,0x2e,0x37,0x37,0x35,0x2d,0x32,0x2e,0x33, - 0x38,0x36,0x6c,0x33,0x2e,0x37,0x36,0x2d,0x33,0x2e, - 0x36,0x36,0x34,0x63,0x30,0x2e,0x35,0x35,0x38,0x2d, - 0x30,0x2e,0x35,0x34,0x34,0x2c,0x30,0x2e,0x33,0x38, - 0x34,0x2d,0x31,0x2e,0x30,0x38,0x31,0x2d,0x30,0x2e, - 0x33,0x38,0x38,0x2d,0x31,0x2e,0x31,0x39,0x33,0x6c, - 0x2d,0x35,0x2e,0x31,0x39,0x33,0x2d,0x30,0x2e,0x37, - 0x35,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x37, - 0x37,0x31,0x2d,0x30,0x2e,0x31,0x31,0x32,0x2d,0x31, - 0x2e,0x36,0x38,0x35,0x2d,0x30,0x2e,0x37,0x37,0x35, - 0x2d,0x32,0x2e,0x30,0x32,0x39,0x2d,0x31,0x2e,0x34, - 0x37,0x35,0x6c,0x2d,0x32,0x2e,0x33,0x32,0x34,0x2d, - 0x34,0x2e,0x37,0x30,0x38,0x43,0x31,0x31,0x2e,0x33, - 0x34,0x33,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2c,0x31, - 0x31,0x2e,0x31,0x31,0x36,0x2c,0x30,0x2c,0x31,0x30, - 0x2e,0x38,0x38,0x38,0x2c,0x30,0x4c,0x31,0x30,0x2e, - 0x38,0x38,0x38,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x38,0x2e, + 0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x63,0x2d, + 0x30,0x2e,0x31,0x38,0x32,0x2c,0x30,0x2d,0x30,0x2e, + 0x33,0x36,0x34,0x2c,0x30,0x2e,0x31,0x34,0x2d,0x30, + 0x2e,0x35,0x30,0x31,0x2c,0x30,0x2e,0x34,0x31,0x39, + 0x4c,0x36,0x2e,0x33,0x35,0x2c,0x36,0x2e,0x32,0x36, + 0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x36,0x2c,0x30, + 0x2e,0x35,0x36,0x2d,0x31,0x2e,0x30,0x30,0x37,0x2c, + 0x31,0x2e,0x30,0x39,0x31,0x2d,0x31,0x2e,0x36,0x32, + 0x34,0x2c,0x31,0x2e,0x31,0x38,0x4c,0x30,0x2e,0x35, + 0x37,0x32,0x2c,0x38,0x2e,0x30,0x34,0x35,0x0d,0x0a, + 0x09,0x43,0x2d,0x30,0x2e,0x30,0x34,0x36,0x2c,0x38, + 0x2e,0x31,0x33,0x35,0x2d,0x30,0x2e,0x31,0x38,0x35, + 0x2c,0x38,0x2e,0x35,0x36,0x34,0x2c,0x30,0x2e,0x32, + 0x36,0x32,0x2c,0x39,0x6c,0x33,0x2e,0x30,0x30,0x37, + 0x2c,0x32,0x2e,0x39,0x33,0x31,0x63,0x30,0x2e,0x34, + 0x34,0x37,0x2c,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30, + 0x2e,0x37,0x32,0x36,0x2c,0x31,0x2e,0x32,0x39,0x35, + 0x2c,0x30,0x2e,0x36,0x32,0x2c,0x31,0x2e,0x39,0x30, + 0x39,0x6c,0x2d,0x30,0x2e,0x37,0x31,0x2c,0x34,0x2e, + 0x31,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x37,0x37,0x2c,0x30,0x2e,0x34,0x34,0x36,0x2c,0x30, + 0x2e,0x30,0x39,0x34,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x37, + 0x30,0x38,0x63,0x30,0x2e,0x31,0x31,0x38,0x2c,0x30, + 0x2c,0x30,0x2e,0x32,0x35,0x35,0x2d,0x30,0x2e,0x30, + 0x33,0x38,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2d,0x30, + 0x2e,0x31,0x31,0x37,0x6c,0x33,0x2e,0x37,0x31,0x37, + 0x2d,0x31,0x2e,0x39,0x35,0x36,0x63,0x30,0x2e,0x32, + 0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x34,0x2d,0x30,0x2e,0x32,0x31,0x36,0x2c, + 0x31,0x2e,0x30,0x30,0x33,0x2d,0x30,0x2e,0x32,0x31, + 0x36,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x33,0x36,0x34, + 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x32,0x39,0x2c,0x30, + 0x2e,0x30,0x37,0x32,0x2c,0x31,0x2e,0x30,0x30,0x34, + 0x2c,0x30,0x2e,0x32,0x31,0x36,0x6c,0x33,0x2e,0x37, + 0x31,0x37,0x2c,0x31,0x2e,0x39,0x35,0x36,0x63,0x30, + 0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x37,0x39,0x2c, + 0x30,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2e,0x31,0x31, + 0x37,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2c,0x30,0x2e, + 0x31,0x31,0x37,0x63,0x30,0x2e,0x33,0x31,0x31,0x2c, + 0x30,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2d,0x30,0x2e, + 0x32,0x36,0x32,0x2c,0x30,0x2e,0x34,0x30,0x35,0x2d, + 0x30,0x2e,0x37,0x30,0x38,0x6c,0x2d,0x30,0x2e,0x37, + 0x31,0x31,0x2d,0x34,0x2e,0x31,0x34,0x0d,0x0a,0x09, + 0x63,0x2d,0x30,0x2e,0x31,0x30,0x35,0x2d,0x30,0x2e, + 0x36,0x31,0x34,0x2c,0x30,0x2e,0x31,0x37,0x34,0x2d, + 0x31,0x2e,0x34,0x37,0x34,0x2c,0x30,0x2e,0x36,0x31, + 0x39,0x2d,0x31,0x2e,0x39,0x30,0x39,0x4c,0x31,0x37, + 0x2e,0x31,0x36,0x2c,0x39,0x63,0x30,0x2e,0x34,0x34, + 0x36,0x2d,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30,0x2e, + 0x33,0x30,0x37,0x2d,0x30,0x2e,0x38,0x36,0x35,0x2d, + 0x30,0x2e,0x33,0x31,0x31,0x2d,0x30,0x2e,0x39,0x35, + 0x35,0x6c,0x2d,0x34,0x2e,0x31,0x35,0x34,0x2d,0x30, + 0x2e,0x36,0x30,0x33,0x0d,0x0a,0x09,0x63,0x2d,0x30, + 0x2e,0x36,0x31,0x37,0x2d,0x30,0x2e,0x30,0x38,0x39, + 0x2d,0x31,0x2e,0x33,0x34,0x39,0x2d,0x30,0x2e,0x36, + 0x32,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, + 0x31,0x38,0x4c,0x39,0x2e,0x32,0x31,0x33,0x2c,0x32, + 0x2e,0x34,0x39,0x35,0x43,0x39,0x2e,0x30,0x37,0x34, + 0x2c,0x32,0x2e,0x32,0x31,0x36,0x2c,0x38,0x2e,0x38, + 0x39,0x33,0x2c,0x32,0x2e,0x30,0x37,0x36,0x2c,0x38, + 0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x4c, + 0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0x0d,0x0a }; diff --git a/data/converted/star_unfilled_svg.cpp b/data/converted/star_unfilled_svg.cpp index 088a0e993..5d6b43bda 100644 --- a/data/converted/star_unfilled_svg.cpp +++ b/data/converted/star_unfilled_svg.cpp @@ -2,8 +2,8 @@ #include "../Resources.h" -const size_t star_unfilled_svg_size = 1920; -const unsigned char star_unfilled_svg_data[1920] = { +const size_t star_unfilled_svg_size = 1889; +const unsigned char star_unfilled_svg_data[1889] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, @@ -41,159 +41,156 @@ const unsigned char star_unfilled_svg_data[1920] = { 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x36,0x70,0x78, + 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x35,0x70,0x78, 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x30,0x2e,0x37,0x36,0x31,0x70,0x78,0x22,0x20, + 0x32,0x30,0x2e,0x37,0x36,0x32,0x70,0x78,0x22,0x20, 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x36,0x20, - 0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20,0x65,0x6e, + 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20, + 0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20,0x65,0x6e, 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37, - 0x36,0x20,0x32,0x30,0x2e,0x37,0x36,0x31,0x22,0x20, + 0x35,0x20,0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20, 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30, - 0x2e,0x38,0x38,0x38,0x2c,0x30,0x2e,0x35,0x30,0x35, - 0x63,0x30,0x2e,0x30,0x33,0x32,0x2c,0x30,0x2e,0x30, - 0x32,0x31,0x2c,0x30,0x2e,0x31,0x30,0x33,0x2c,0x30, - 0x2e,0x30,0x38,0x37,0x2c,0x30,0x2e,0x31,0x37,0x39, - 0x2c,0x30,0x2e,0x32,0x34,0x31,0x6c,0x32,0x2e,0x33, - 0x32,0x34,0x2c,0x34,0x2e,0x37,0x30,0x38,0x63,0x30, - 0x2e,0x34,0x31,0x36,0x2c,0x30,0x2e,0x38,0x34,0x35, - 0x2c,0x31,0x2e,0x34,0x37,0x34,0x2c,0x31,0x2e,0x36, - 0x31,0x33,0x2c,0x32,0x2e,0x34,0x30,0x35,0x2c,0x31, - 0x2e,0x37,0x34,0x38,0x0d,0x0a,0x09,0x6c,0x35,0x2e, - 0x31,0x39,0x34,0x2c,0x30,0x2e,0x37,0x35,0x34,0x63, - 0x30,0x2e,0x31,0x38,0x38,0x2c,0x30,0x2e,0x30,0x32, - 0x37,0x2c,0x30,0x2e,0x32,0x37,0x32,0x2c,0x30,0x2e, - 0x30,0x38,0x33,0x2c,0x30,0x2e,0x32,0x38,0x34,0x2c, - 0x30,0x2e,0x30,0x38,0x33,0x63,0x30,0x2e,0x30,0x30, - 0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2c, - 0x30,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x63, - 0x30,0x2c,0x30,0x2e,0x30,0x32,0x33,0x2d,0x30,0x2e, - 0x30,0x33,0x33,0x2c,0x30,0x2e,0x31,0x31,0x39,0x2d, - 0x30,0x2e,0x31,0x37,0x35,0x2c,0x30,0x2e,0x32,0x35, - 0x38,0x6c,0x2d,0x33,0x2e,0x37,0x36,0x31,0x2c,0x33, - 0x2e,0x36,0x36,0x33,0x0d,0x0a,0x09,0x63,0x2d,0x30, - 0x2e,0x36,0x37,0x34,0x2c,0x30,0x2e,0x36,0x35,0x38, - 0x2d,0x31,0x2e,0x30,0x37,0x38,0x2c,0x31,0x2e,0x39, - 0x30,0x31,0x2d,0x30,0x2e,0x39,0x31,0x39,0x2c,0x32, - 0x2e,0x38,0x32,0x39,0x6c,0x30,0x2e,0x38,0x38,0x39, - 0x2c,0x35,0x2e,0x31,0x37,0x34,0x63,0x30,0x2e,0x30, - 0x33,0x34,0x2c,0x30,0x2e,0x31,0x39,0x35,0x2c,0x30, - 0x2e,0x30,0x30,0x34,0x2c,0x30,0x2e,0x32,0x39,0x33, - 0x2d,0x30,0x2e,0x30,0x31,0x34,0x2c,0x30,0x2e,0x32, - 0x39,0x39,0x63,0x2d,0x30,0x2e,0x30,0x33,0x31,0x2c, - 0x30,0x2d,0x30,0x2e,0x31,0x32,0x32,0x2d,0x30,0x2e, - 0x30,0x30,0x39,0x2d,0x30,0x2e,0x32,0x37,0x36,0x2d, - 0x30,0x2e,0x30,0x38,0x39,0x0d,0x0a,0x09,0x6c,0x2d, - 0x34,0x2e,0x36,0x34,0x35,0x2d,0x32,0x2e,0x34,0x34, - 0x33,0x63,0x2d,0x30,0x2e,0x34,0x30,0x34,0x2d,0x30, - 0x2e,0x32,0x31,0x33,0x2d,0x30,0x2e,0x39,0x33,0x33, - 0x2d,0x30,0x2e,0x33,0x32,0x39,0x2d,0x31,0x2e,0x34, - 0x38,0x37,0x2d,0x30,0x2e,0x33,0x32,0x39,0x73,0x2d, - 0x31,0x2e,0x30,0x38,0x33,0x2c,0x30,0x2e,0x31,0x31, - 0x36,0x2d,0x31,0x2e,0x34,0x38,0x37,0x2c,0x30,0x2e, - 0x33,0x32,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x34,0x35, - 0x2c,0x32,0x2e,0x34,0x34,0x33,0x63,0x2d,0x30,0x2e, - 0x31,0x35,0x34,0x2c,0x30,0x2e,0x30,0x38,0x2d,0x30, - 0x2e,0x32,0x34,0x35,0x2c,0x30,0x2e,0x30,0x38,0x39, - 0x2d,0x30,0x2e,0x32,0x38,0x2c,0x30,0x2e,0x31,0x30, - 0x32,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x31, - 0x33,0x2d,0x30,0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e, - 0x30,0x34,0x33,0x2d,0x30,0x2e,0x31,0x31,0x36,0x2d, - 0x30,0x2e,0x30,0x31,0x2d,0x30,0x2e,0x33,0x31,0x32, - 0x6c,0x30,0x2e,0x38,0x38,0x38,0x2d,0x35,0x2e,0x31, - 0x37,0x34,0x63,0x30,0x2e,0x31,0x36,0x2d,0x30,0x2e, - 0x39,0x32,0x39,0x2d,0x30,0x2e,0x32,0x34,0x34,0x2d, - 0x32,0x2e,0x31,0x37,0x32,0x2d,0x30,0x2e,0x39,0x31, - 0x39,0x2d,0x32,0x2e,0x38,0x32,0x39,0x4c,0x30,0x2e, - 0x36,0x37,0x36,0x2c,0x38,0x2e,0x32,0x39,0x35,0x0d, - 0x0a,0x09,0x43,0x30,0x2e,0x35,0x33,0x34,0x2c,0x38, - 0x2e,0x31,0x35,0x37,0x2c,0x30,0x2e,0x35,0x2c,0x38, - 0x2e,0x30,0x36,0x31,0x2c,0x30,0x2e,0x34,0x39,0x33, - 0x2c,0x38,0x2e,0x30,0x36,0x31,0x63,0x30,0x2c,0x30, - 0x2c,0x30,0x2c,0x30,0x2c,0x30,0x2c,0x30,0x43,0x30, - 0x2e,0x35,0x30,0x36,0x2c,0x38,0x2e,0x30,0x34,0x33, - 0x2c,0x30,0x2e,0x35,0x39,0x2c,0x37,0x2e,0x39,0x38, - 0x34,0x2c,0x30,0x2e,0x37,0x38,0x37,0x2c,0x37,0x2e, - 0x39,0x35,0x36,0x6c,0x35,0x2e,0x31,0x39,0x32,0x2d, - 0x30,0x2e,0x37,0x35,0x34,0x0d,0x0a,0x09,0x63,0x30, - 0x2e,0x39,0x33,0x33,0x2d,0x30,0x2e,0x31,0x33,0x35, - 0x2c,0x31,0x2e,0x39,0x39,0x2d,0x30,0x2e,0x39,0x30, - 0x33,0x2c,0x32,0x2e,0x34,0x30,0x37,0x2d,0x31,0x2e, - 0x37,0x34,0x38,0x6c,0x32,0x2e,0x33,0x32,0x33,0x2d, - 0x34,0x2e,0x37,0x30,0x38,0x43,0x31,0x30,0x2e,0x37, - 0x38,0x35,0x2c,0x30,0x2e,0x35,0x39,0x32,0x2c,0x31, - 0x30,0x2e,0x38,0x35,0x36,0x2c,0x30,0x2e,0x35,0x32, - 0x35,0x2c,0x31,0x30,0x2e,0x38,0x38,0x38,0x2c,0x30, - 0x2e,0x35,0x30,0x35,0x20,0x4d,0x31,0x30,0x2e,0x38, - 0x38,0x38,0x2c,0x30,0x0d,0x0a,0x09,0x63,0x2d,0x30, - 0x2e,0x32,0x32,0x38,0x2c,0x30,0x2d,0x30,0x2e,0x34, - 0x35,0x35,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2d,0x30, - 0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x35,0x32,0x34, - 0x4c,0x37,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x32, - 0x33,0x32,0x63,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x39,0x39,0x2d,0x31,0x2e,0x32,0x35, - 0x39,0x2c,0x31,0x2e,0x33,0x36,0x33,0x2d,0x32,0x2e, - 0x30,0x33,0x2c,0x31,0x2e,0x34,0x37,0x35,0x4c,0x30, - 0x2e,0x37,0x31,0x35,0x2c,0x37,0x2e,0x34,0x36,0x31, - 0x0d,0x0a,0x09,0x43,0x2d,0x30,0x2e,0x30,0x35,0x37, - 0x2c,0x37,0x2e,0x35,0x37,0x33,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x38,0x2e,0x31,0x31,0x2c,0x30,0x2e, - 0x33,0x32,0x37,0x2c,0x38,0x2e,0x36,0x35,0x34,0x6c, - 0x33,0x2e,0x37,0x35,0x39,0x2c,0x33,0x2e,0x36,0x36, - 0x34,0x63,0x30,0x2e,0x35,0x35,0x39,0x2c,0x30,0x2e, - 0x35,0x34,0x34,0x2c,0x30,0x2e,0x39,0x30,0x37,0x2c, - 0x31,0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x37,0x37, - 0x35,0x2c,0x32,0x2e,0x33,0x38,0x36,0x6c,0x2d,0x30, - 0x2e,0x38,0x38,0x38,0x2c,0x35,0x2e,0x31,0x37,0x34, - 0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x39,0x36, - 0x2c,0x30,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e,0x31, - 0x31,0x38,0x2c,0x30,0x2e,0x38,0x38,0x34,0x2c,0x30, - 0x2e,0x35,0x30,0x36,0x2c,0x30,0x2e,0x38,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2c,0x30, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x30,0x34,0x37, - 0x2c,0x30,0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x31, - 0x34,0x36,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x32, - 0x2e,0x34,0x34,0x33,0x63,0x30,0x2e,0x33,0x34,0x35, - 0x2d,0x30,0x2e,0x31,0x38,0x31,0x2c,0x30,0x2e,0x38, - 0x2d,0x30,0x2e,0x32,0x37,0x31,0x2c,0x31,0x2e,0x32, - 0x35,0x34,0x2d,0x30,0x2e,0x32,0x37,0x31,0x0d,0x0a, - 0x09,0x63,0x30,0x2e,0x34,0x35,0x35,0x2c,0x30,0x2c, - 0x30,0x2e,0x39,0x31,0x2c,0x30,0x2e,0x30,0x39,0x31, - 0x2c,0x31,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2e,0x32, - 0x37,0x31,0x6c,0x34,0x2e,0x36,0x34,0x35,0x2c,0x32, - 0x2e,0x34,0x34,0x33,0x63,0x30,0x2e,0x31,0x38,0x39, - 0x2c,0x30,0x2e,0x31,0x2c,0x30,0x2e,0x33,0x36,0x32, - 0x2c,0x30,0x2e,0x31,0x34,0x36,0x2c,0x30,0x2e,0x35, - 0x30,0x39,0x2c,0x30,0x2e,0x31,0x34,0x36,0x63,0x30, - 0x2e,0x33,0x38,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x36, - 0x30,0x33,0x2d,0x30,0x2e,0x33,0x32,0x37,0x2c,0x30, - 0x2e,0x35,0x30,0x37,0x2d,0x30,0x2e,0x38,0x38,0x34, - 0x6c,0x2d,0x30,0x2e,0x38,0x38,0x39,0x2d,0x35,0x2e, - 0x31,0x37,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e, - 0x31,0x33,0x32,0x2d,0x30,0x2e,0x37,0x36,0x38,0x2c, - 0x30,0x2e,0x32,0x31,0x38,0x2d,0x31,0x2e,0x38,0x34, - 0x32,0x2c,0x30,0x2e,0x37,0x37,0x35,0x2d,0x32,0x2e, - 0x33,0x38,0x36,0x6c,0x33,0x2e,0x37,0x36,0x2d,0x33, - 0x2e,0x36,0x36,0x34,0x63,0x30,0x2e,0x35,0x35,0x38, - 0x2d,0x30,0x2e,0x35,0x34,0x34,0x2c,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x31,0x2e,0x30,0x38,0x31,0x2d,0x30, - 0x2e,0x33,0x38,0x38,0x2d,0x31,0x2e,0x31,0x39,0x33, - 0x6c,0x2d,0x35,0x2e,0x31,0x39,0x33,0x2d,0x30,0x2e, - 0x37,0x35,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e, - 0x37,0x37,0x31,0x2d,0x30,0x2e,0x31,0x31,0x32,0x2d, - 0x31,0x2e,0x36,0x38,0x35,0x2d,0x30,0x2e,0x37,0x37, - 0x35,0x2d,0x32,0x2e,0x30,0x32,0x39,0x2d,0x31,0x2e, - 0x34,0x37,0x35,0x6c,0x2d,0x32,0x2e,0x33,0x32,0x34, - 0x2d,0x34,0x2e,0x37,0x30,0x38,0x43,0x31,0x31,0x2e, - 0x33,0x34,0x33,0x2c,0x30,0x2e,0x31,0x37,0x35,0x2c, - 0x31,0x31,0x2e,0x31,0x31,0x36,0x2c,0x30,0x2c,0x31, - 0x30,0x2e,0x38,0x38,0x38,0x2c,0x30,0x4c,0x31,0x30, - 0x2e,0x38,0x38,0x38,0x2c,0x30,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x38,0x2e, + 0x37,0x31,0x2c,0x32,0x2e,0x34,0x38,0x63,0x30,0x2e, + 0x30,0x32,0x36,0x2c,0x30,0x2e,0x30,0x31,0x38,0x2c, + 0x30,0x2e,0x30,0x38,0x33,0x2c,0x30,0x2e,0x30,0x37, + 0x2c,0x30,0x2e,0x31,0x34,0x33,0x2c,0x30,0x2e,0x31, + 0x39,0x33,0x6c,0x31,0x2e,0x38,0x35,0x39,0x2c,0x33, + 0x2e,0x37,0x36,0x36,0x63,0x30,0x2e,0x33,0x33,0x33, + 0x2c,0x30,0x2e,0x36,0x37,0x36,0x2c,0x31,0x2e,0x31, + 0x38,0x2c,0x31,0x2e,0x32,0x39,0x31,0x2c,0x31,0x2e, + 0x39,0x32,0x34,0x2c,0x31,0x2e,0x33,0x39,0x38,0x6c, + 0x34,0x2e,0x31,0x35,0x35,0x2c,0x30,0x2e,0x36,0x30, + 0x33,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x31,0x35,0x2c, + 0x30,0x2e,0x30,0x32,0x32,0x2c,0x30,0x2e,0x32,0x31, + 0x38,0x2c,0x30,0x2e,0x30,0x36,0x36,0x2c,0x30,0x2e, + 0x32,0x32,0x37,0x2c,0x30,0x2e,0x30,0x36,0x36,0x63, + 0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e, + 0x30,0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x30, + 0x31,0x2c,0x30,0x63,0x30,0x2c,0x30,0x2e,0x30,0x31, + 0x39,0x2d,0x30,0x2e,0x30,0x32,0x35,0x2c,0x30,0x2e, + 0x30,0x39,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x30, + 0x2e,0x32,0x30,0x37,0x6c,0x2d,0x33,0x2e,0x30,0x30, + 0x39,0x2c,0x32,0x2e,0x39,0x33,0x31,0x0d,0x0a,0x09, + 0x63,0x2d,0x30,0x2e,0x35,0x33,0x39,0x2c,0x30,0x2e, + 0x35,0x32,0x36,0x2d,0x30,0x2e,0x38,0x36,0x32,0x2c, + 0x31,0x2e,0x35,0x32,0x31,0x2d,0x30,0x2e,0x37,0x33, + 0x35,0x2c,0x32,0x2e,0x32,0x36,0x33,0x6c,0x30,0x2e, + 0x37,0x31,0x31,0x2c,0x34,0x2e,0x31,0x34,0x63,0x30, + 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x31,0x35,0x36, + 0x2c,0x30,0x2e,0x30,0x30,0x33,0x2c,0x30,0x2e,0x32, + 0x33,0x34,0x2d,0x30,0x2e,0x30,0x31,0x31,0x2c,0x30, + 0x2e,0x32,0x33,0x39,0x63,0x2d,0x30,0x2e,0x30,0x32, + 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x30,0x39,0x38,0x2d, + 0x30,0x2e,0x30,0x30,0x38,0x2d,0x30,0x2e,0x32,0x32, + 0x31,0x2d,0x30,0x2e,0x30,0x37,0x31,0x4c,0x39,0x2e, + 0x39,0x2c,0x31,0x36,0x2e,0x32,0x36,0x0d,0x0a,0x09, + 0x63,0x2d,0x30,0x2e,0x33,0x32,0x34,0x2d,0x30,0x2e, + 0x31,0x37,0x31,0x2d,0x30,0x2e,0x37,0x34,0x37,0x2d, + 0x30,0x2e,0x32,0x36,0x34,0x2d,0x31,0x2e,0x31,0x39, + 0x2d,0x30,0x2e,0x32,0x36,0x34,0x53,0x37,0x2e,0x38, + 0x34,0x33,0x2c,0x31,0x36,0x2e,0x30,0x39,0x2c,0x37, + 0x2e,0x35,0x32,0x2c,0x31,0x36,0x2e,0x32,0x36,0x6c, + 0x2d,0x33,0x2e,0x37,0x31,0x36,0x2c,0x31,0x2e,0x39, + 0x35,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c, + 0x30,0x2e,0x30,0x36,0x33,0x2d,0x30,0x2e,0x31,0x39, + 0x36,0x2c,0x30,0x2e,0x30,0x37,0x31,0x2d,0x30,0x2e, + 0x32,0x32,0x34,0x2c,0x30,0x2e,0x30,0x38,0x32,0x0d, + 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x31,0x2d,0x30, + 0x2e,0x30,0x31,0x36,0x2d,0x30,0x2e,0x30,0x33,0x34, + 0x2d,0x30,0x2e,0x30,0x39,0x34,0x2d,0x30,0x2e,0x30, + 0x30,0x38,0x2d,0x30,0x2e,0x32,0x35,0x6c,0x30,0x2e, + 0x37,0x31,0x2d,0x34,0x2e,0x31,0x34,0x63,0x30,0x2e, + 0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x34,0x33,0x2d, + 0x30,0x2e,0x31,0x39,0x35,0x2d,0x31,0x2e,0x37,0x33, + 0x37,0x2d,0x30,0x2e,0x37,0x33,0x35,0x2d,0x32,0x2e, + 0x32,0x36,0x33,0x4c,0x30,0x2e,0x35,0x34,0x31,0x2c, + 0x38,0x2e,0x37,0x31,0x32,0x43,0x30,0x2e,0x34,0x32, + 0x37,0x2c,0x38,0x2e,0x36,0x30,0x32,0x2c,0x30,0x2e, + 0x34,0x2c,0x38,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e, + 0x33,0x39,0x35,0x2c,0x38,0x2e,0x35,0x32,0x35,0x0d, + 0x0a,0x09,0x6c,0x30,0x2c,0x30,0x43,0x30,0x2e,0x34, + 0x30,0x35,0x2c,0x38,0x2e,0x35,0x31,0x2c,0x30,0x2e, + 0x34,0x37,0x32,0x2c,0x38,0x2e,0x34,0x36,0x34,0x2c, + 0x30,0x2e,0x36,0x33,0x2c,0x38,0x2e,0x34,0x34,0x31, + 0x6c,0x34,0x2e,0x31,0x35,0x33,0x2d,0x30,0x2e,0x36, + 0x30,0x33,0x43,0x35,0x2e,0x35,0x33,0x2c,0x37,0x2e, + 0x37,0x33,0x2c,0x36,0x2e,0x33,0x37,0x35,0x2c,0x37, + 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x37,0x30,0x39, + 0x2c,0x36,0x2e,0x34,0x33,0x39,0x6c,0x31,0x2e,0x38, + 0x35,0x39,0x2d,0x33,0x2e,0x37,0x36,0x36,0x0d,0x0a, + 0x09,0x43,0x38,0x2e,0x36,0x32,0x38,0x2c,0x32,0x2e, + 0x35,0x35,0x2c,0x38,0x2e,0x36,0x38,0x35,0x2c,0x32, + 0x2e,0x34,0x39,0x36,0x2c,0x38,0x2e,0x37,0x31,0x2c, + 0x32,0x2e,0x34,0x38,0x20,0x4d,0x38,0x2e,0x37,0x31, + 0x2c,0x32,0x2e,0x30,0x37,0x36,0x63,0x2d,0x30,0x2e, + 0x31,0x38,0x32,0x2c,0x30,0x2d,0x30,0x2e,0x33,0x36, + 0x34,0x2c,0x30,0x2e,0x31,0x34,0x2d,0x30,0x2e,0x35, + 0x30,0x31,0x2c,0x30,0x2e,0x34,0x31,0x39,0x4c,0x36, + 0x2e,0x33,0x35,0x2c,0x36,0x2e,0x32,0x36,0x32,0x63, + 0x2d,0x30,0x2e,0x32,0x37,0x36,0x2c,0x30,0x2e,0x35, + 0x36,0x2d,0x31,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e, + 0x30,0x39,0x31,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2c, + 0x31,0x2e,0x31,0x38,0x0d,0x0a,0x09,0x4c,0x30,0x2e, + 0x35,0x37,0x32,0x2c,0x38,0x2e,0x30,0x34,0x35,0x63, + 0x2d,0x30,0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x30, + 0x39,0x2d,0x30,0x2e,0x37,0x35,0x37,0x2c,0x30,0x2e, + 0x35,0x32,0x2d,0x30,0x2e,0x33,0x31,0x2c,0x30,0x2e, + 0x39,0x35,0x35,0x6c,0x33,0x2e,0x30,0x30,0x37,0x2c, + 0x32,0x2e,0x39,0x33,0x31,0x63,0x30,0x2e,0x34,0x34, + 0x37,0x2c,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30,0x2e, + 0x37,0x32,0x36,0x2c,0x31,0x2e,0x32,0x39,0x35,0x2c, + 0x30,0x2e,0x36,0x32,0x2c,0x31,0x2e,0x39,0x30,0x39, + 0x6c,0x2d,0x30,0x2e,0x37,0x31,0x2c,0x34,0x2e,0x31, + 0x33,0x39,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30, + 0x37,0x37,0x2c,0x30,0x2e,0x34,0x34,0x36,0x2c,0x30, + 0x2e,0x30,0x39,0x34,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x37, + 0x30,0x38,0x63,0x30,0x2e,0x31,0x31,0x38,0x2c,0x30, + 0x2c,0x30,0x2e,0x32,0x35,0x35,0x2d,0x30,0x2e,0x30, + 0x33,0x38,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2d,0x30, + 0x2e,0x31,0x31,0x37,0x6c,0x33,0x2e,0x37,0x31,0x37, + 0x2d,0x31,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x32, + 0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x34,0x2d,0x30,0x2e,0x32,0x31,0x36,0x2c, + 0x31,0x2e,0x30,0x30,0x33,0x2d,0x30,0x2e,0x32,0x31, + 0x36,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x33,0x36,0x34, + 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x32,0x39,0x2c,0x30, + 0x2e,0x30,0x37,0x32,0x2c,0x31,0x2e,0x30,0x30,0x34, + 0x2c,0x30,0x2e,0x32,0x31,0x36,0x6c,0x33,0x2e,0x37, + 0x31,0x37,0x2c,0x31,0x2e,0x39,0x35,0x35,0x63,0x30, + 0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x37,0x39,0x2c, + 0x30,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2e,0x31,0x31, + 0x37,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2c,0x30,0x2e, + 0x31,0x31,0x37,0x63,0x30,0x2e,0x33,0x31,0x31,0x2c, + 0x30,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2d,0x30,0x2e, + 0x32,0x36,0x32,0x2c,0x30,0x2e,0x34,0x30,0x35,0x2d, + 0x30,0x2e,0x37,0x30,0x38,0x6c,0x2d,0x30,0x2e,0x37, + 0x31,0x31,0x2d,0x34,0x2e,0x31,0x33,0x39,0x0d,0x0a, + 0x09,0x63,0x2d,0x30,0x2e,0x31,0x30,0x35,0x2d,0x30, + 0x2e,0x36,0x31,0x34,0x2c,0x30,0x2e,0x31,0x37,0x34, + 0x2d,0x31,0x2e,0x34,0x37,0x34,0x2c,0x30,0x2e,0x36, + 0x31,0x39,0x2d,0x31,0x2e,0x39,0x30,0x39,0x6c,0x33, + 0x2e,0x30,0x30,0x39,0x2d,0x32,0x2e,0x39,0x33,0x31, + 0x63,0x30,0x2e,0x34,0x34,0x36,0x2d,0x30,0x2e,0x34, + 0x33,0x35,0x2c,0x30,0x2e,0x33,0x30,0x37,0x2d,0x30, + 0x2e,0x38,0x36,0x35,0x2d,0x30,0x2e,0x33,0x31,0x31, + 0x2d,0x30,0x2e,0x39,0x35,0x35,0x6c,0x2d,0x34,0x2e, + 0x31,0x35,0x34,0x2d,0x30,0x2e,0x36,0x30,0x33,0x0d, + 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x36,0x31,0x37,0x2d, + 0x30,0x2e,0x30,0x38,0x39,0x2d,0x31,0x2e,0x33,0x34, + 0x39,0x2d,0x30,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36, + 0x32,0x34,0x2d,0x31,0x2e,0x31,0x38,0x4c,0x39,0x2e, + 0x32,0x31,0x33,0x2c,0x32,0x2e,0x34,0x39,0x35,0x43, + 0x39,0x2e,0x30,0x37,0x34,0x2c,0x32,0x2e,0x32,0x31, + 0x36,0x2c,0x38,0x2e,0x38,0x39,0x33,0x2c,0x32,0x2e, + 0x30,0x37,0x36,0x2c,0x38,0x2e,0x37,0x31,0x2c,0x32, + 0x2e,0x30,0x37,0x36,0x4c,0x38,0x2e,0x37,0x31,0x2c, + 0x32,0x2e,0x30,0x37,0x36,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a }; diff --git a/data/resources/star_filled.svg b/data/resources/star_filled.svg index 2dc3920e2..11d7e0f41 100644 --- a/data/resources/star_filled.svg +++ b/data/resources/star_filled.svg @@ -2,11 +2,11 @@ - + width="21.775px" height="20.762px" viewBox="0 0 21.775 20.762" enable-background="new 0 0 21.775 20.762" xml:space="preserve"> + diff --git a/data/resources/star_unfilled.svg b/data/resources/star_unfilled.svg index bb16674e9..d1063e40a 100644 --- a/data/resources/star_unfilled.svg +++ b/data/resources/star_unfilled.svg @@ -2,18 +2,17 @@ - + width="21.775px" height="20.762px" viewBox="0 0 21.775 20.762" enable-background="new 0 0 21.775 20.762" xml:space="preserve"> + diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index ac033497b..300bdf1af 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -44,7 +44,8 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector case MD_RATING: { ed = std::make_shared(window); - ed->setSize(0, lbl->getSize().y()); + const float height = lbl->getSize().y() * 0.71f; + ed->setSize(height * 4.9f, height); row.addElement(ed, false, true); mMenu.addRow(row); break; From d0416f86344e4f863ba2677aa91cad32c06be6ab Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 14:15:44 -0500 Subject: [PATCH 264/386] Can now specify font for MenuComponent's title. --- src/components/MenuComponent.cpp | 21 ++++++++++++++++----- src/components/MenuComponent.h | 4 +++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 3deddd040..622d9e6bc 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -4,9 +4,11 @@ #define BUTTON_GRID_VERT_PADDING 32 #define BUTTON_GRID_HORIZ_PADDING 10 +#define TITLE_HEIGHT (mTitle->getFont()->getLetterHeight() + Renderer::getScreenHeight()*0.0637f) + using namespace Eigen; -MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(window), +MenuComponent::MenuComponent(Window* window, const char* title, const std::shared_ptr& titleFont) : GuiComponent(window), mBackground(window), mGrid(window, Vector2i(1, 3)) { addChild(&mBackground); @@ -14,8 +16,11 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w mBackground.setImagePath(":/frame.png"); - // set up title which will never change - mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); + // set up title + mTitle = std::make_shared(mWindow); + mTitle->setAlignment(TextComponent::ALIGN_CENTER); + mTitle->setColor(0x555555FF); + setTitle(title, titleFont); mGrid.setEntry(mTitle, Vector2i(0, 0), false); // set up list which will never change (externally, anyway) @@ -28,6 +33,12 @@ MenuComponent::MenuComponent(Window* window, const char* title) : GuiComponent(w mGrid.resetCursor(); } +void MenuComponent::setTitle(const char* title, const std::shared_ptr& font) +{ + mTitle->setText(strToUpper(title)); + mTitle->setFont(font); +} + float MenuComponent::getButtonGridHeight() const { return (mButtonGrid ? mButtonGrid->getSize().y() : Font::get(FONT_SIZE_MEDIUM)->getHeight() + BUTTON_GRID_VERT_PADDING); @@ -35,7 +46,7 @@ float MenuComponent::getButtonGridHeight() const void MenuComponent::updateSize() { - float height = mTitle->getSize().y() + mList->getTotalRowHeight() + getButtonGridHeight() + 2; + float height = TITLE_HEIGHT + mList->getTotalRowHeight() + getButtonGridHeight() + 2; if(height > Renderer::getScreenHeight() * 0.7f) height = Renderer::getScreenHeight() * 0.7f; @@ -47,7 +58,7 @@ void MenuComponent::onSizeChanged() mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); // update grid row/col sizes - mGrid.setRowHeightPerc(0, mTitle->getSize().y() / mSize.y()); + mGrid.setRowHeightPerc(0, TITLE_HEIGHT / mSize.y()); mGrid.setRowHeightPerc(2, getButtonGridHeight() / mSize.y()); mGrid.setSize(mSize); diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index 319152b09..a1e570596 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -15,7 +15,7 @@ std::shared_ptr makeArrow(Window* window); class MenuComponent : public GuiComponent { public: - MenuComponent(Window* window, const char* title); + MenuComponent(Window* window, const char* title, const std::shared_ptr& titleFont = Font::get(FONT_SIZE_LARGE)); void onSizeChanged() override; @@ -31,6 +31,8 @@ public: void addButton(const std::string& label, const std::string& helpText, const std::function& callback); + void setTitle(const char* title, const std::shared_ptr& font); + inline void setCursorToList() { mGrid.setCursorTo(mList); } inline void setCursorToButtons() { assert(mButtonGrid); mGrid.setCursorTo(mButtonGrid); } From 8ffa56e652905248da4c0193cf107029d864d184 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 15:21:15 -0500 Subject: [PATCH 265/386] Changed title format for GuiMetaDataEd. Started fixing some alignment stuff for the editors too. --- src/components/MenuComponent.cpp | 2 +- src/components/MenuComponent.h | 2 + src/guis/GuiMetaDataEd.cpp | 80 +++++++++++++++++++++++++------- src/guis/GuiMetaDataEd.h | 11 ++++- 4 files changed, 74 insertions(+), 21 deletions(-) diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 622d9e6bc..36cb2f596 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -4,7 +4,7 @@ #define BUTTON_GRID_VERT_PADDING 32 #define BUTTON_GRID_HORIZ_PADDING 10 -#define TITLE_HEIGHT (mTitle->getFont()->getLetterHeight() + Renderer::getScreenHeight()*0.0637f) +#define TITLE_HEIGHT (mTitle->getFont()->getLetterHeight() + TITLE_VERT_PADDING) using namespace Eigen; diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index a1e570596..a95d622c8 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -12,6 +12,8 @@ class ImageComponent; std::shared_ptr makeButtonGrid(Window* window, const std::vector< std::shared_ptr >& buttons); std::shared_ptr makeArrow(Window* window); +#define TITLE_VERT_PADDING (Renderer::getScreenHeight()*0.0637f) + class MenuComponent : public GuiComponent { public: diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 300bdf1af..b195e1d42 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -12,17 +12,34 @@ #include "../components/RatingComponent.h" #include "GuiTextEditPopup.h" +using namespace Eigen; + GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mScraperParams(scraperParams), - mMenu(window, header.c_str()), + + mBackground(window, ":/frame.png"), + mGrid(window, Vector2i(1, 3)), + mMetaDataDecl(mdd), mMetaData(md), mSavedCallback(saveCallback), mDeleteFunc(deleteFunc) { - setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + addChild(&mBackground); + addChild(&mGrid); + + mHeaderGrid = std::make_shared(mWindow, Vector2i(1, 5)); - addChild(&mMenu); + mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x333333FF, TextComponent::ALIGN_CENTER); + mSubtitle = std::make_shared(mWindow, strToUpper(scraperParams.game->getPath().filename().generic_string()), + Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mHeaderGrid->setEntry(mTitle, Vector2i(0, 1), false, true); + mHeaderGrid->setEntry(mSubtitle, Vector2i(0, 3), false, true); + + mGrid.setEntry(mHeaderGrid, Vector2i(0, 0), false, true); + + mList = std::make_shared(mWindow); + mGrid.setEntry(mList, Vector2i(0, 1), true, true); // populate list for(auto iter = mdd.begin(); iter != mdd.end(); iter++) @@ -47,21 +64,23 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector const float height = lbl->getSize().y() * 0.71f; ed->setSize(height * 4.9f, height); row.addElement(ed, false, true); - mMenu.addRow(row); break; } case MD_DATE: { ed = std::make_shared(window); row.addElement(ed, false); - mMenu.addRow(row); + + auto spacer = std::make_shared(mWindow); + spacer->setSize(Renderer::getScreenWidth() * 0.0025f, 0); + row.addElement(spacer, false); + break; } case MD_TIME: { ed = std::make_shared(window, DateTimeComponent::DISP_RELATIVE_TO_NOW); row.addElement(ed, false); - mMenu.addRow(row); break; } case MD_MULTILINE_STRING: @@ -71,6 +90,10 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF, TextComponent::ALIGN_RIGHT); row.addElement(ed, true); + auto spacer = std::make_shared(mWindow); + spacer->setSize(Renderer::getScreenWidth() * 0.005f, 0); + row.addElement(spacer, false); + auto bracket = std::make_shared(mWindow); bracket->setImage(":/arrow.svg"); bracket->setResize(Eigen::Vector2f(0, lbl->getFont()->getLetterHeight())); @@ -82,33 +105,54 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] { mWindow->pushGui(new GuiTextEditPopup(mWindow, title, ed->getValue(), updateVal, multiLine)); }); - - mMenu.addRow(row); break; } } assert(ed); + mList->addRow(row); ed->setValue(mMetaData->get(iter->key)); mEditors.push_back(ed); } - //add buttons - mMenu.addButton("SCRAPE", "scrape", std::bind(&GuiMetaDataEd::fetch, this)); - mMenu.addButton("SAVE", "save", [&] { save(); delete this; }); - + std::vector< std::shared_ptr > buttons; + buttons.push_back(std::make_shared(mWindow, "SCRAPE", "scrape", std::bind(&GuiMetaDataEd::fetch, this))); + buttons.push_back(std::make_shared(mWindow, "SAVE", "save", [&] { save(); delete this; })); + if(mDeleteFunc) { auto deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBox(mWindow, "This will delete a file!\nAre you sure?", "YES", deleteFileAndSelf, "NO", nullptr)); }; - mMenu.addButton("DELETE", "delete", deleteBtnFunc); + buttons.push_back(std::make_shared(mWindow, "DELETE", "delete", deleteBtnFunc)); } - // initially put cursor on "SCRAPE" - mMenu.setCursorToButtons(); + mButtons = makeButtonGrid(mWindow, buttons); + mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); - // position menu - mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); //center it + // initially put cursor on "SCRAPE" + mGrid.setCursorTo(mButtons); + + // resize + center + setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.71f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); +} + +void GuiMetaDataEd::onSizeChanged() +{ + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); + + mGrid.setSize(mSize); + + const float titleHeight = mTitle->getFont()->getLetterHeight(); + const float subtitleHeight = mSubtitle->getFont()->getLetterHeight() + 2; + const float titleSubtitleSpacing = mSize.y() * 0.03f; + + mGrid.setRowHeightPerc(0, (titleHeight + titleSubtitleSpacing + subtitleHeight + TITLE_VERT_PADDING) / mSize.y()); + mGrid.setRowHeightPerc(2, mButtons->getSize().y() / mSize.y()); + + mHeaderGrid->setRowHeightPerc(1, titleHeight / mHeaderGrid->getSize().y()); + mHeaderGrid->setRowHeightPerc(2, titleSubtitleSpacing / mHeaderGrid->getSize().y()); + mHeaderGrid->setRowHeightPerc(3, subtitleHeight / mHeaderGrid->getSize().y()); } void GuiMetaDataEd::save() @@ -160,7 +204,7 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) std::vector GuiMetaDataEd::getHelpPrompts() { - std::vector prompts = mMenu.getHelpPrompts(); + std::vector prompts = mGrid.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "discard")); return prompts; } diff --git a/src/guis/GuiMetaDataEd.h b/src/guis/GuiMetaDataEd.h index 295f4e312..3b86772ab 100644 --- a/src/guis/GuiMetaDataEd.h +++ b/src/guis/GuiMetaDataEd.h @@ -14,7 +14,7 @@ public: const std::string& header, std::function savedCallback, std::function deleteFunc); bool input(InputConfig* config, Input input) override; - + void onSizeChanged() override; virtual std::vector getHelpPrompts() override; private: @@ -22,7 +22,14 @@ private: void fetch(); void fetchDone(const ScraperSearchResult& result); - MenuComponent mMenu; + NinePatchComponent mBackground; + ComponentGrid mGrid; + + std::shared_ptr mTitle; + std::shared_ptr mSubtitle; + std::shared_ptr mHeaderGrid; + std::shared_ptr mList; + std::shared_ptr mButtons; ScraperSearchParams mScraperParams; From f601531ec6feebd3688f7b4e49fb2922a458cc04 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 15:38:55 -0500 Subject: [PATCH 266/386] Added "displayName" to MetaDataDecls and updated GuiMetaDataEd accordingly. This was "desc" gets displayed as "description", spaces can be used, etc. --- src/MetaData.cpp | 24 ++++++++++++------------ src/MetaData.h | 1 + src/guis/GuiMetaDataEd.cpp | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 5ea5a5bb3..3e3682552 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -3,18 +3,18 @@ #include "Log.h" MetaDataDecl gameDecls[] = { - {"name", MD_STRING, "", false}, - {"desc", MD_MULTILINE_STRING, "", false}, - {"image", MD_IMAGE_PATH, "", false}, - {"thumbnail", MD_IMAGE_PATH, "", false}, - {"rating", MD_RATING, "0", false}, - {"releasedate", MD_DATE, "0", false}, - {"developer", MD_STRING, "unknown", false}, - {"publisher", MD_STRING, "unknown", false}, - {"genre", MD_STRING, "unknown", false}, - {"players", MD_INT, "1", false}, - {"playcount", MD_INT, "0", true}, - {"lastplayed", MD_TIME, "0", true} + {"name", MD_STRING, "", false, "name"}, + {"desc", MD_MULTILINE_STRING, "", false, "description"}, + {"image", MD_IMAGE_PATH, "", false, "image"}, + {"thumbnail", MD_IMAGE_PATH, "", false, "thumbnail"}, + {"rating", MD_RATING, "0", false, "rating"}, + {"releasedate", MD_DATE, "0", false, "release date"}, + {"developer", MD_STRING, "unknown", false, "developer"}, + {"publisher", MD_STRING, "unknown", false, "publisher"}, + {"genre", MD_STRING, "unknown", false, "genre"}, + {"players", MD_INT, "1", false, "players"}, + {"playcount", MD_INT, "0", true, "play count"}, + {"lastplayed", MD_TIME, "0", true, "last played"} }; const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); diff --git a/src/MetaData.h b/src/MetaData.h index 9842edfb7..d2a9e26b8 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -27,6 +27,7 @@ struct MetaDataDecl MetaDataType type; std::string defaultValue; bool isStatistic; //if true, ignore scraper values for this metadata + std::string displayName; // displayed as this in editors }; boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index b195e1d42..b4c547773 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -53,7 +53,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector // create ed and add it (and any related components) to mMenu // ed's value will be set below ComponentListRow row; - auto lbl = std::make_shared(mWindow, strToUpper(iter->key), Font::get(FONT_SIZE_SMALL), 0x777777FF); + auto lbl = std::make_shared(mWindow, strToUpper(iter->displayName), Font::get(FONT_SIZE_SMALL), 0x777777FF); row.addElement(lbl, true); // label switch(iter->type) From b4f6f98e1a7a6f23595d8a173d096f7b9b7afe7c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 16:29:59 -0500 Subject: [PATCH 267/386] Fixed RatingComponent height on ScraperSearchComponent. Removed clip rect for TextComponent. Needed to set TextComponent texst area size to letter height keep spacing right, but special characters like ()[!] drop lower even when capitalized, and would get cut off. --- src/components/ScraperSearchComponent.cpp | 4 +--- src/components/TextComponent.cpp | 5 +++-- src/guis/GuiMetaDataEd.cpp | 7 ++----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index ef8c95ad7..a3e0730a2 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -134,7 +134,7 @@ void ScraperSearchComponent::onSizeChanged() mMD_Grid->setColWidthPerc(0, maxLblWidth / mMD_Grid->getSize().x()); // rating is manually sized - mMD_Rating->setSize(mMD_Grid->getColWidth(1), fontLbl->getLetterHeight()); + mMD_Rating->setSize(mMD_Grid->getColWidth(1), fontLbl->getHeight() * 0.65f); mMD_Grid->onSizeChanged(); // make result font follow label font @@ -147,8 +147,6 @@ void ScraperSearchComponent::onSizeChanged() mGrid.onSizeChanged(); mBusyAnim.setSize(mSize); - //mBusyAnim.setPosition(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT ? mDescContainer->getPosition() : mResultList->getPosition()); - //mBusyAnim.setSize(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT ? mDescContainer->getSize() : mResultList->getSize()); } void ScraperSearchComponent::updateViewStyle() diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 191ffedd6..d64586769 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -67,10 +67,11 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); + /*Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); + */ if(mTextCache) { @@ -110,7 +111,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) mFont->renderTextCache(mTextCache.get()); } - Renderer::popClipRect(); + //Renderer::popClipRect(); } void TextComponent::calculateExtent() diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index b4c547773..331dda0f2 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -129,11 +129,8 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mButtons = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); - // initially put cursor on "SCRAPE" - mGrid.setCursorTo(mButtons); - // resize + center - setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.71f); + setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.82f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } @@ -144,7 +141,7 @@ void GuiMetaDataEd::onSizeChanged() mGrid.setSize(mSize); const float titleHeight = mTitle->getFont()->getLetterHeight(); - const float subtitleHeight = mSubtitle->getFont()->getLetterHeight() + 2; + const float subtitleHeight = mSubtitle->getFont()->getLetterHeight(); const float titleSubtitleSpacing = mSize.y() * 0.03f; mGrid.setRowHeightPerc(0, (titleHeight + titleSubtitleSpacing + subtitleHeight + TITLE_VERT_PADDING) / mSize.y()); From 04df8fece61e892e93bcf16f925e39a4fe906f2b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 16:58:01 -0500 Subject: [PATCH 268/386] Added active/inactive state to TextEditComponent. --- CMakeLists.txt | 1 + data/ResourceUtil.cpp | 34 +- data/Resources.h | 3 + .../textinput_ninepatch_active_png.cpp | 316 ++++++++++++++++++ data/resources/textinput_ninepatch_active.png | Bin 0 -> 3084 bytes src/components/TextEditComponent.cpp | 2 + 6 files changed, 340 insertions(+), 16 deletions(-) create mode 100644 data/converted/textinput_ninepatch_active_png.cpp create mode 100644 data/resources/textinput_ninepatch_active.png diff --git a/CMakeLists.txt b/CMakeLists.txt index b610736c0..7981c873b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -314,6 +314,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textinput_ninepatch_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textinput_ninepatch_active_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 11ac955c6..27584f48d 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,7 +2,7 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 39; +const size_t res2hNrOfFiles = 40; const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/arrow.svg", arrow_svg_size, arrow_svg_data}, {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, @@ -28,6 +28,7 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, + {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, @@ -70,21 +71,22 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/star_filled.svg", res2hFiles[21]), std::make_pair(":/star_unfilled.svg", res2hFiles[22]), std::make_pair(":/textinput_ninepatch.png", res2hFiles[23]), - std::make_pair(":/help/button_a.svg", res2hFiles[24]), - std::make_pair(":/help/button_b.svg", res2hFiles[25]), - std::make_pair(":/help/button_l.svg", res2hFiles[26]), - std::make_pair(":/help/button_r.svg", res2hFiles[27]), - std::make_pair(":/help/button_select.svg", res2hFiles[28]), - std::make_pair(":/help/button_start.svg", res2hFiles[29]), - std::make_pair(":/help/button_x.svg", res2hFiles[30]), - std::make_pair(":/help/button_y.svg", res2hFiles[31]), - std::make_pair(":/help/dpad_all.svg", res2hFiles[32]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[33]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[34]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[35]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[36]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[37]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[38]) + std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[24]), + std::make_pair(":/help/button_a.svg", res2hFiles[25]), + std::make_pair(":/help/button_b.svg", res2hFiles[26]), + std::make_pair(":/help/button_l.svg", res2hFiles[27]), + std::make_pair(":/help/button_r.svg", res2hFiles[28]), + std::make_pair(":/help/button_select.svg", res2hFiles[29]), + std::make_pair(":/help/button_start.svg", res2hFiles[30]), + std::make_pair(":/help/button_x.svg", res2hFiles[31]), + std::make_pair(":/help/button_y.svg", res2hFiles[32]), + std::make_pair(":/help/dpad_all.svg", res2hFiles[33]), + std::make_pair(":/help/dpad_down.svg", res2hFiles[34]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[35]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[36]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[37]), + std::make_pair(":/help/dpad_up.svg", res2hFiles[38]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[39]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index bc001b46d..9d649621c 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -77,6 +77,9 @@ extern const unsigned char star_unfilled_svg_data[]; extern const size_t textinput_ninepatch_png_size; extern const unsigned char textinput_ninepatch_png_data[]; +extern const size_t textinput_ninepatch_active_png_size; +extern const unsigned char textinput_ninepatch_active_png_data[]; + extern const size_t help_button_a_svg_size; extern const unsigned char help_button_a_svg_data[]; diff --git a/data/converted/textinput_ninepatch_active_png.cpp b/data/converted/textinput_ninepatch_active_png.cpp new file mode 100644 index 000000000..aae67003b --- /dev/null +++ b/data/converted/textinput_ninepatch_active_png.cpp @@ -0,0 +1,316 @@ +//this file was auto-generated from "textinput_ninepatch_active.png" by res2h + +#include "../Resources.h" + +const size_t textinput_ninepatch_active_png_size = 3084; +const unsigned char textinput_ninepatch_active_png_data[3084] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, + 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, + 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, + 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, + 0x00,0x9a,0x9c,0x18,0x00,0x00,0x0a,0x4f,0x69,0x43, + 0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66, + 0x69,0x6c,0x65,0x00,0x00,0x78,0xda,0x9d,0x53,0x67, + 0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,0xf4,0x42,0x4b, + 0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x08,0x20,0x52, + 0x42,0x8b,0x80,0x14,0x91,0x26,0x2a,0x21,0x09,0x10, + 0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,0x45, + 0x45,0x04,0x1b,0xc8,0xa0,0x88,0x03,0x8e,0x8e,0x80, + 0x8c,0x15,0x51,0x2c,0x0c,0x8a,0x0a,0xd8,0x07,0xe4, + 0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1, + 0x7b,0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5, + 0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,0xcf,0x07,0xc0, + 0x08,0x0c,0x96,0x48,0x33,0x51,0x35,0x80,0x0c,0xa9, + 0x42,0x1e,0x11,0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4, + 0x2e,0x40,0x81,0x0a,0x24,0x70,0x00,0x10,0x08,0xb3, + 0x64,0x21,0x73,0xfd,0x23,0x01,0x00,0xf8,0x7e,0x3c, + 0x3c,0x2b,0x22,0xc0,0x07,0xbe,0x00,0x01,0x78,0xd3, + 0x0b,0x08,0x00,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87, + 0xff,0x0f,0xea,0x42,0x99,0x5c,0x01,0x80,0x84,0x01, + 0xc0,0x74,0x91,0x38,0x4b,0x08,0x80,0x14,0x00,0x40, + 0x7a,0x8e,0x42,0xa6,0x00,0x40,0x46,0x01,0x80,0x9d, + 0x98,0x26,0x53,0x00,0xa0,0x04,0x00,0x60,0xcb,0x63, + 0x62,0xe3,0x00,0x50,0x2d,0x00,0x60,0x27,0x7f,0xe6, + 0xd3,0x00,0x80,0x9d,0xf8,0x99,0x7b,0x01,0x00,0x5b, + 0x94,0x21,0x15,0x01,0xa0,0x91,0x00,0x20,0x13,0x65, + 0x88,0x44,0x00,0x68,0x3b,0x00,0xac,0xcf,0x56,0x8a, + 0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4b,0xc4,0x39, + 0x00,0xd8,0x2d,0x00,0x30,0x49,0x57,0x66,0x48,0x00, + 0xb0,0xb7,0x00,0xc0,0xce,0x10,0x0b,0xb2,0x00,0x08, + 0x0c,0x00,0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7b, + 0x00,0x60,0xc8,0x23,0x23,0x78,0x00,0x84,0x99,0x00, + 0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7, + 0x2a,0x00,0x00,0x78,0x99,0xb2,0x3c,0xb9,0x24,0x39, + 0x45,0x81,0x5b,0x08,0x2d,0x71,0x07,0x57,0x57,0x2e, + 0x1e,0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x02, + 0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,0x19,0x32,0x81, + 0x34,0x0f,0xe0,0xf3,0xcc,0x00,0x00,0xa0,0x91,0x15, + 0x11,0xe0,0x83,0xf3,0xfd,0x78,0xce,0x0e,0xae,0xce, + 0xce,0x36,0x8e,0xb6,0x0e,0x5f,0x2d,0xea,0xbf,0x06, + 0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70, + 0x40,0x00,0x00,0xe1,0x74,0x7e,0xd1,0xfe,0x2c,0x2f, + 0xb3,0x1a,0x80,0x3b,0x06,0x80,0x6d,0xfe,0xa2,0x25, + 0xee,0x04,0x68,0x5e,0x0b,0xa0,0x75,0xf7,0x8b,0x66, + 0xb2,0x0f,0x40,0xb5,0x00,0xa0,0xe9,0xda,0x57,0xf3, + 0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9, + 0xd9,0xe5,0xe4,0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61, + 0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,0xfd, + 0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2, + 0x24,0x81,0x32,0x5d,0x81,0x47,0x04,0xf8,0xe0,0xc2, + 0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x09,0x84,0x62, + 0xdc,0xe6,0x8f,0x47,0xfc,0xb7,0x0b,0xff,0xfc,0x1d, + 0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,0x2a,0x14,0xe3, + 0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5, + 0x22,0x89,0x42,0x92,0x29,0xc5,0x25,0xd2,0xff,0x64, + 0xe2,0xdf,0x2c,0xfb,0x03,0x3e,0xdf,0x35,0x00,0xb0, + 0x6a,0x3e,0x01,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x03, + 0xf6,0x4b,0x27,0x10,0x58,0x74,0xc0,0xe2,0xf7,0x00, + 0x00,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x08,0x03,0x80, + 0x68,0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47, + 0xa0,0x25,0x00,0x80,0x66,0x49,0x92,0x71,0x00,0x00, + 0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x08, + 0x00,0x00,0x44,0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4, + 0xc1,0x18,0x2c,0xc0,0x06,0x1c,0xc1,0x05,0xdc,0xc1, + 0x0b,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42, + 0x10,0x42,0x0a,0x64,0x80,0x1c,0x72,0x60,0x29,0xac, + 0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f, + 0xd4,0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70, + 0x0e,0x2e,0xc2,0x55,0xb8,0x0e,0x3d,0x70,0x0f,0xfa, + 0x61,0x08,0x9e,0xc1,0x28,0xbc,0x81,0x09,0x04,0x41, + 0xc8,0x08,0x13,0x61,0x21,0xda,0x88,0x01,0x62,0x8a, + 0x58,0x23,0x8e,0x08,0x17,0x99,0x85,0xf8,0x21,0xc1, + 0x48,0x04,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51, + 0x22,0x4b,0x91,0x35,0x48,0x31,0x52,0x8a,0x54,0x20, + 0x55,0x48,0x1d,0xf2,0x3d,0x72,0x02,0x39,0x87,0x5c, + 0x46,0xba,0x91,0x3b,0xc8,0x00,0x32,0x82,0xfc,0x86, + 0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3d,0xd4,0x0c, + 0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0x0b, + 0xd0,0x64,0x74,0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0, + 0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,0xab, + 0x68,0x0f,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8, + 0x18,0x07,0x33,0xc4,0x6c,0x30,0x2e,0xc6,0xc3,0x42, + 0xb1,0x38,0x2c,0x09,0x93,0x63,0xcb,0xb1,0x22,0xac, + 0x0c,0xab,0xc6,0x1a,0xb0,0x56,0xac,0x03,0xbb,0x89, + 0xf5,0x63,0xcf,0xb1,0x77,0x04,0x12,0x81,0x45,0xc0, + 0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1e,0x41,0x48, + 0x58,0x4c,0x58,0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24, + 0x34,0x11,0xda,0x09,0x37,0x09,0x03,0x84,0x51,0xc2, + 0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9, + 0xc4,0x18,0x62,0x32,0x31,0x87,0x58,0x48,0x2c,0x23, + 0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4, + 0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x02, + 0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,0x46,0xd2,0x6e, + 0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23, + 0x93,0xc9,0xda,0x64,0x6b,0xb2,0x07,0x39,0x94,0x2c, + 0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,0x33, + 0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0x0a,0x9d,0x62,0x40, + 0x71,0xa4,0xf8,0x53,0xe2,0x28,0x52,0xca,0x6a,0x4a, + 0x19,0xe5,0x10,0xe5,0x34,0xe5,0x06,0x65,0x98,0x32, + 0x41,0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11, + 0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,0x52,0xaf,0x51, + 0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16, + 0x49,0x4b,0xa5,0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17, + 0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,0x95, + 0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8, + 0x97,0xe8,0x03,0xf4,0x77,0x0c,0x0d,0x86,0x15,0x83, + 0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x07,0x18,0x67, + 0x19,0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b, + 0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,0x98,0xe7,0x99, + 0x0f,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15, + 0x91,0xca,0x0a,0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a, + 0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0x0b,0x55, + 0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae, + 0x46,0x55,0x33,0x53,0xe3,0xa9,0x09,0xd4,0x96,0xab, + 0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9, + 0x3b,0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4, + 0x7e,0x59,0xfd,0x89,0x06,0x59,0xc3,0x4c,0xc3,0x4f, + 0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20, + 0x0b,0x63,0x19,0xb3,0x78,0x2c,0x21,0x6b,0x0d,0xab, + 0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,0x7c, + 0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa, + 0xa9,0xa1,0x39,0x43,0x33,0x4a,0x33,0x57,0xb3,0x52, + 0xf3,0x94,0x66,0x3f,0x07,0xe3,0x98,0x71,0xf8,0x9c, + 0x74,0x4e,0x09,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a, + 0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,0xa6,0x34,0x4c, + 0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58, + 0xab,0x48,0xab,0x51,0xab,0x47,0xeb,0xbd,0x36,0xae, + 0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,0x81, + 0x0e,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f, + 0xce,0x05,0x9d,0xe7,0x53,0xd9,0x53,0xdd,0xa7,0x0a, + 0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b, + 0xa5,0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee, + 0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,0x6f,0xa7,0xde, + 0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd, + 0x6d,0xfa,0xa7,0xf5,0x47,0x0c,0x58,0x06,0xb3,0x0c, + 0x24,0x06,0xdb,0x0c,0xce,0x18,0x3c,0xc5,0x35,0x71, + 0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d, + 0xc3,0x40,0x43,0xa5,0x61,0x95,0x61,0x97,0xe1,0x84, + 0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0x0f, + 0x8c,0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d, + 0xc6,0xa3,0x26,0x06,0x26,0x21,0x26,0x4b,0x4d,0xea, + 0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b, + 0x4c,0x3b,0x4c,0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6, + 0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,0xe7, + 0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c, + 0xb6,0xa8,0xb6,0xb8,0x65,0x49,0xb2,0xe4,0x5a,0xa6, + 0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5, + 0x58,0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25, + 0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,0xb9,0x4e,0x93, + 0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9, + 0xb6,0xa9,0xb7,0x19,0xb0,0xe5,0xd8,0x06,0xdb,0xae, + 0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,0xb7, + 0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d, + 0x8d,0xfd,0x3d,0x07,0x0d,0x87,0xd9,0x0e,0xab,0x1d, + 0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a, + 0xde,0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96, + 0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,0xd8,0x33,0xe3, + 0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3, + 0x47,0x67,0x17,0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b, + 0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,0x1b, + 0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d, + 0xe1,0x7a,0xd2,0xf5,0x9d,0x9b,0xb3,0x9b,0xc2,0xed, + 0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc, + 0x9f,0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0, + 0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,0x3f,0x0b,0x9f, + 0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81, + 0x67,0xb5,0xe7,0x23,0x2f,0x63,0x2f,0x91,0x57,0xad, + 0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,0x17, + 0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37, + 0xde,0x32,0xde,0x59,0x5f,0xcc,0x37,0xc0,0xb7,0xc8, + 0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43, + 0x7f,0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x00,0xa7, + 0x80,0x25,0x01,0x67,0x03,0x89,0x81,0x41,0x81,0x5b, + 0x02,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a, + 0xdb,0x65,0xf6,0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9, + 0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,0xad, + 0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98, + 0xce,0x91,0xce,0x69,0x0e,0x85,0x50,0x7e,0xe8,0xd6, + 0xd0,0x07,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0x0c,0x27, + 0x85,0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58, + 0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,0xdc,0x43,0x73, + 0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31, + 0x4f,0x39,0xaf,0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e, + 0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,0x2e, + 0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b, + 0x1c,0x39,0x2e,0x2a,0xae,0x36,0x6e,0x6c,0xbe,0xdf, + 0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0x0b,0xe3,0x7b, + 0x17,0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2, + 0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,0x2c,0x3a,0x96, + 0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a, + 0xa8,0x16,0x8c,0x25,0xf2,0x13,0x77,0x25,0x8e,0x0a, + 0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,0xd1, + 0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a, + 0x4d,0x7a,0x92,0xec,0x91,0xbc,0x35,0x79,0x24,0xc5, + 0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc, + 0x4c,0x0d,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76, + 0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,0x83,0x92,0x91, + 0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea, + 0x67,0xe6,0x66,0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe, + 0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x07,0xc9,0x6b, + 0xb3,0x90,0xac,0x05,0x59,0x2d,0x0a,0xb6,0x42,0xa6, + 0xe8,0x54,0x5a,0x28,0xd7,0x2a,0x07,0xb2,0x67,0x65, + 0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e, + 0x2b,0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c, + 0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,0xe1,0x92,0xb6, + 0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac, + 0x6a,0x39,0xb2,0x3c,0x71,0x79,0xdb,0x0a,0xe3,0x15, + 0x05,0x2b,0x86,0x56,0x06,0xac,0x3c,0xb8,0x8a,0xb6, + 0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e, + 0xbd,0x26,0x7a,0x4d,0x6b,0x81,0x5e,0xc1,0xca,0x82, + 0xc1,0xb5,0x01,0x6b,0xeb,0x0b,0x55,0x0a,0xe5,0x85, + 0x7d,0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59, + 0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,0x3e,0x15,0x89, + 0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28, + 0xdc,0x78,0xe5,0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc, + 0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,0xd2, + 0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0x0e,0x96,0xaa, + 0x97,0xe6,0x97,0x0e,0x6e,0x0d,0xd9,0xda,0xb4,0x0d, + 0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97, + 0xcd,0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf, + 0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,0xcd,0x3b,0x3f, + 0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2, + 0xdd,0xb5,0x61,0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b, + 0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,0xfd, + 0x3e,0xc9,0xbe,0xdb,0x55,0x01,0x55,0x4d,0xd5,0x66, + 0xd5,0x65,0xfb,0x49,0xfb,0xb3,0xf7,0x3f,0xae,0x89, + 0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d, + 0x71,0xed,0xc7,0x03,0xd2,0x03,0xfd,0x07,0x23,0x0e, + 0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,0x3d,0x54,0x52, + 0x8f,0xd6,0x2b,0xeb,0x47,0x0e,0xc7,0x1f,0xbe,0xfe, + 0x9d,0xef,0x77,0x2d,0x0d,0x36,0x0d,0x55,0x8d,0x9c, + 0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,0x09, + 0xdf,0xf7,0x1e,0x0d,0x3a,0xda,0x76,0x8c,0x7b,0xac, + 0xe1,0x07,0xd3,0x1f,0x76,0x1d,0x67,0x1d,0x2f,0x6a, + 0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b, + 0x62,0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde, + 0x7a,0xfc,0x47,0xdb,0x1f,0x0f,0x9c,0x34,0x3c,0x59, + 0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3, + 0x93,0x67,0xf2,0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e, + 0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,0x63, + 0xce,0xdf,0x6a,0x0f,0x6f,0xef,0xba,0x10,0x74,0xe1, + 0xd2,0x45,0xff,0x8b,0xe7,0x3b,0xbc,0x3b,0xce,0x5c, + 0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8, + 0x57,0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c, + 0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,0xbb,0x9a,0xae, + 0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66, + 0xf7,0xe9,0x1b,0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79, + 0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,0xbd, + 0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd, + 0x7e,0x72,0x27,0xfd,0xce,0xcb,0xbb,0xd9,0x77,0x27, + 0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41, + 0xd9,0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8, + 0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,0xf3,0xd1,0xdc, + 0x47,0xf7,0x06,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f, + 0x0f,0x43,0x05,0x8f,0x99,0x8f,0xcb,0x86,0x0d,0x86, + 0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,0xfd, + 0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17, + 0xfe,0xa2,0xfe,0xcb,0xae,0x17,0x16,0x2f,0x7e,0xf8, + 0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2, + 0x97,0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb, + 0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,0xbe,0xc9,0x78, + 0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc, + 0x77,0x1d,0xef,0xa3,0xdf,0x0f,0x4f,0xe4,0x7c,0x20, + 0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,0xa7, + 0xfb,0x93,0x19,0x93,0x93,0xff,0x04,0x03,0x98,0xf3, + 0xfc,0x63,0x33,0x2d,0xdb,0x00,0x00,0x00,0x20,0x63, + 0x48,0x52,0x4d,0x00,0x00,0x7a,0x25,0x00,0x00,0x80, + 0x83,0x00,0x00,0xf9,0xff,0x00,0x00,0x80,0xe9,0x00, + 0x00,0x75,0x30,0x00,0x00,0xea,0x60,0x00,0x00,0x3a, + 0x98,0x00,0x00,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x00, + 0x00,0x01,0x37,0x49,0x44,0x41,0x54,0x78,0xda,0xec, + 0xda,0xbd,0x4d,0xc3,0x40,0x00,0xc5,0xf1,0x7f,0x2e, + 0x27,0x45,0x4a,0x47,0x47,0x43,0x8f,0x0d,0x9e,0x84, + 0x26,0x56,0x0a,0x26,0x48,0xc4,0x00,0x48,0x71,0x4d, + 0xe5,0x11,0x50,0x46,0x40,0xb2,0xbd,0x80,0x4b,0x8f, + 0x10,0xc7,0x5e,0x81,0x05,0xa2,0x18,0xf9,0x30,0x45, + 0x62,0x89,0x82,0x01,0xce,0xe2,0xbd,0xea,0x74,0xd5, + 0xfb,0xdd,0x47,0x75,0x37,0x1b,0x86,0x81,0x24,0x49, + 0x0c,0xf0,0x02,0x6c,0x81,0x7b,0x60,0x81,0x9f,0xe9, + 0x80,0x16,0xd8,0x03,0xef,0x69,0x9a,0x7e,0xcf,0xcf, + 0xe7,0xb3,0x01,0x3e,0x80,0x57,0xe0,0x16,0xb0,0xf8, + 0x1b,0x7b,0xed,0xf8,0x04,0x3c,0x96,0x65,0x99,0xd9, + 0xeb,0xaa,0xaf,0x97,0xcb,0x25,0x71,0x1c,0x13,0x04, + 0x01,0xd6,0xfa,0x69,0xe8,0xfb,0x9e,0xa6,0x69,0x28, + 0x8a,0x82,0xd3,0xe9,0xb4,0x06,0x36,0x06,0xd8,0x00, + 0xac,0x56,0x2b,0xa2,0x28,0xf2,0xb6,0x3c,0x80,0xb5, + 0x96,0x28,0x8a,0x88,0xe3,0x78,0x9c,0xda,0x1a,0xe0, + 0x01,0x20,0x0c,0x43,0xa6,0x92,0x20,0x08,0xc6,0x61, + 0x68,0xc6,0x0b,0xeb,0xf3,0xca,0xff,0xb5,0x13,0xd7, + 0x2c,0x0c,0x13,0x8f,0x00,0x02,0x08,0x20,0x80,0x00, + 0x02,0x08,0x20,0x80,0x00,0x02,0x08,0x20,0x80,0x00, + 0x02,0x08,0x20,0x80,0x00,0x02,0x08,0x20,0x80,0x00, + 0x02,0x08,0x20,0x80,0x00,0x02,0xfc,0x47,0x40,0x07, + 0x97,0x47,0xe4,0xa9,0xe4,0x57,0xd7,0xce,0x00,0x47, + 0x80,0xa6,0x69,0x26,0x03,0x68,0xdb,0x76,0x1c,0x1e, + 0x0d,0x97,0x8f,0x13,0x14,0x45,0xc1,0xe1,0x70,0xc0, + 0x39,0xe7,0x6d,0x71,0xe7,0x1c,0x75,0x5d,0x93,0xe7, + 0xf9,0x38,0xb5,0x9f,0xed,0x76,0xbb,0xf1,0xb3,0xc7, + 0x7a,0x62,0xc7,0x3f,0x03,0x9e,0xe7,0x55,0x55,0x0d, + 0x65,0x59,0x66,0xc0,0x27,0x70,0x07,0xdc,0x00,0x73, + 0x4f,0x4b,0x7f,0x01,0x35,0xf0,0x06,0x24,0x69,0x9a, + 0xba,0x9f,0x01,0x00,0x79,0x0c,0x54,0x84,0x18,0x0e, + 0x50,0x30,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 +}; diff --git a/data/resources/textinput_ninepatch_active.png b/data/resources/textinput_ninepatch_active.png new file mode 100644 index 0000000000000000000000000000000000000000..2381af87e71766444e1a9fe33edc8be08f79c7fe GIT binary patch literal 3084 zcmV+n4D<7eP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003uNklU7on-A8pd8-{@-Neu7;Y=L`VfuHGs7T5#tX_|h|&*!rN zK7d!?7O?mmd+qoHJeFmd+3TvWm&+w_91{cq*7|Aa`<|w0D2js9>9htm2G{_sRx6?? z^0qvHwU#J~h~s#i+8W>iAPhsMk{}4iVQ9t+>+{P0wG-DY3=@w40tg_000IagfB*sr zAb|4p1-v0000 Date: Sat, 19 Apr 2014 17:24:59 -0500 Subject: [PATCH 269/386] No longer show "input" and "skip" buttons when scraping in auto mode. Fixed ScraperSearchComponent stopping in auto mode when it found a game with no results. --- src/components/ScraperSearchComponent.cpp | 25 ++++++++++++++++------- src/guis/GuiScraperMulti.cpp | 17 ++++++++++----- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index a3e0730a2..339076bb4 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -81,6 +81,9 @@ void ScraperSearchComponent::onSizeChanged() { mGrid.setSize(mSize); + if(mSize.x() == 0 || mSize.y() == 0) + return; + // column widths mGrid.setColWidthPerc(0, 0.01f); mGrid.setColWidthPerc(1, 0.25f); @@ -249,6 +252,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector void ScraperSearchComponent::onSearchError(const std::string& error) { + LOG(LogInfo) << "ScraperSearchComponent search error: " << error; mWindow->pushGui(new GuiMsgBox(mWindow, strToUpper(error), "RETRY", std::bind(&ScraperSearchComponent::search, this, mLastSearch), "SKIP", mSkipCallback, @@ -369,14 +373,21 @@ void ScraperSearchComponent::update(int deltaTime) if(mSearchHandle && mSearchHandle->status() != ASYNC_IN_PROGRESS) { - if(mSearchHandle->status() == ASYNC_DONE) - { - onSearchDone(mSearchHandle->getResults()); - }else if(mSearchHandle->status() == ASYNC_ERROR) - { - onSearchError(mSearchHandle->getStatusString()); - } + auto status = mSearchHandle->status(); + auto results = mSearchHandle->getResults(); + auto statusString = mSearchHandle->getStatusString(); + + // we reset here because onSearchDone in auto mode can call mSkipCallback() which can call + // another search() which will set our mSearchHandle to something important mSearchHandle.reset(); + + if(status == ASYNC_DONE) + { + onSearchDone(results); + }else if(status == ASYNC_ERROR) + { + onSearchError(statusString); + } } if(mMDResolveHandle && mMDResolveHandle->status() != ASYNC_IN_PROGRESS) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 1e98901d0..55eb246d8 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -41,12 +41,19 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue > buttons; - buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { - mSearchComp->openInputScreen(mSearchQueue.front()); - mGrid.resetCursor(); - })); - buttons.push_back(std::make_shared(mWindow, "SKIP", "skip", std::bind(&GuiScraperMulti::skip, this))); + + if(approveResults) + { + buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { + mSearchComp->openInputScreen(mSearchQueue.front()); + mGrid.resetCursor(); + })); + + buttons.push_back(std::make_shared(mWindow, "SKIP", "skip", std::bind(&GuiScraperMulti::skip, this))); + } + buttons.push_back(std::make_shared(mWindow, "STOP", "stop (progress saved)", std::bind(&GuiScraperMulti::finish, this))); + mButtonGrid = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mButtonGrid, Vector2i(0, 4), true, false); From b0f36b0a912d1108bc226d0b5993eca4d5c83721 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 18:18:17 -0500 Subject: [PATCH 270/386] Adjusted design of ScraperSearchComponent in "auto" mode. "Select" now closes the game options menu if it's already open. --- src/components/ScraperSearchComponent.cpp | 37 ++++++++++++++++------- src/components/ScraperSearchComponent.h | 2 ++ src/guis/GuiGamelistOptions.cpp | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 339076bb4..5a6bf5091 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -85,14 +85,17 @@ void ScraperSearchComponent::onSizeChanged() return; // column widths - mGrid.setColWidthPerc(0, 0.01f); + if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) + mGrid.setColWidthPerc(0, 0.02f); // looks better when this is higher in auto mode + else + mGrid.setColWidthPerc(0, 0.01f); + mGrid.setColWidthPerc(1, 0.25f); mGrid.setColWidthPerc(2, 0.25f); - mGrid.setColWidthPerc(3, 0.49f); - + // row heights if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) // show name - mGrid.setRowHeightPerc(0, (mResultName->getFont()->getHeight()) / mGrid.getSize().y()); // result name + mGrid.setRowHeightPerc(0, (mResultName->getFont()->getHeight() * 1.6f) / mGrid.getSize().y()); // result name else mGrid.setRowHeightPerc(0, 0.0825f); // hide name but do padding @@ -105,6 +108,22 @@ void ScraperSearchComponent::onSizeChanged() mResultThumbnail->setMaxSize(mGrid.getColWidth(1) * boxartCellScale, mGrid.getRowHeight(1)); // metadata + resizeMetadata(); + + if(mSearchType != ALWAYS_ACCEPT_FIRST_RESULT) + mDescContainer->setSize(mGrid.getColWidth(1)*boxartCellScale + mGrid.getColWidth(2), mResultDesc->getFont()->getHeight() * 3); + else + mDescContainer->setSize(mGrid.getColWidth(3)*boxartCellScale, mResultDesc->getFont()->getHeight() * 8); + + mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container + + mGrid.onSizeChanged(); + + mBusyAnim.setSize(mSize); +} + +void ScraperSearchComponent::resizeMetadata() +{ mMD_Grid->setSize(mGrid.getColWidth(2), mGrid.getRowHeight(1)); if(mMD_Grid->getSize().y() > mMD_Pairs.size()) { @@ -143,13 +162,6 @@ void ScraperSearchComponent::onSizeChanged() // make result font follow label font mResultDesc->setFont(Font::get(fontHeight, FONT_PATH_REGULAR)); } - - mDescContainer->setSize(mGrid.getColWidth(1)*boxartCellScale + mGrid.getColWidth(2), mResultDesc->getFont()->getHeight() * 3); - mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container - - mGrid.onSizeChanged(); - - mBusyAnim.setSize(mSize); } void ScraperSearchComponent::updateViewStyle() @@ -167,6 +179,9 @@ void ScraperSearchComponent::updateViewStyle() // show name mGrid.setEntry(mResultName, Vector2i(1, 0), false, true, Vector2i(2, 1), GridFlags::BORDER_TOP); + // need a border on the bottom left + mGrid.setEntry(std::make_shared(mWindow), Vector2i(0, 2), false, false, Vector2i(3, 1), GridFlags::BORDER_BOTTOM); + // show description on the right mGrid.setEntry(mDescContainer, Vector2i(3, 0), false, false, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index c943aa548..612bb1e85 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -51,6 +51,8 @@ private: void updateThumbnail(); void updateInfoPane(); + void resizeMetadata(); + void onSearchError(const std::string& error); void onSearchDone(const std::vector& results); diff --git a/src/guis/GuiGamelistOptions.cpp b/src/guis/GuiGamelistOptions.cpp index 658be0d7d..8beaadc77 100644 --- a/src/guis/GuiGamelistOptions.cpp +++ b/src/guis/GuiGamelistOptions.cpp @@ -59,7 +59,7 @@ void GuiGamelistOptions::openMetaDataEd() bool GuiGamelistOptions::input(InputConfig* config, Input input) { - if(config->isMappedTo("b", input) && input.value) + if((config->isMappedTo("b", input) || config->isMappedTo("select", input)) && input.value) { delete this; return true; From bff6295bb0eea35c6b7c865d4bb89a349d1e9929 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 19 Apr 2014 18:56:10 -0500 Subject: [PATCH 271/386] More repositioning for ScraperSearchComponent in auto mode. --- src/components/ScraperSearchComponent.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 5a6bf5091..a097550f2 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -99,7 +99,12 @@ void ScraperSearchComponent::onSizeChanged() else mGrid.setRowHeightPerc(0, 0.0825f); // hide name but do padding - mGrid.setRowHeightPerc(1, 0.505f); + if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) + { + mGrid.setRowHeightPerc(2, 0.2f); + }else{ + mGrid.setRowHeightPerc(1, 0.505f); + } const float boxartCellScale = 0.9f; From 0b3a0d0e4ed70904111bfb414d31374b9375ca15 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 20 Apr 2014 14:23:49 -0500 Subject: [PATCH 272/386] Fixed compiling on Linux. --- src/components/AnimatedImageComponent.cpp | 1 - src/components/AnimatedImageComponent.h | 3 +-- src/components/BusyComponent.cpp | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/AnimatedImageComponent.cpp b/src/components/AnimatedImageComponent.cpp index aef223198..1ef4e3073 100644 --- a/src/components/AnimatedImageComponent.cpp +++ b/src/components/AnimatedImageComponent.cpp @@ -1,5 +1,4 @@ #include "AnimatedImageComponent.h" -#include "ImageComponent.h" #include "../Log.h" AnimatedImageComponent::AnimatedImageComponent(Window* window) : GuiComponent(window), mEnabled(false) diff --git a/src/components/AnimatedImageComponent.h b/src/components/AnimatedImageComponent.h index 5d6c988b3..53ffc2dd6 100644 --- a/src/components/AnimatedImageComponent.h +++ b/src/components/AnimatedImageComponent.h @@ -1,6 +1,5 @@ #include "../GuiComponent.h" - -class ImageComponent; +#include "ImageComponent.h" struct AnimationFrame { diff --git a/src/components/BusyComponent.cpp b/src/components/BusyComponent.cpp index 003aa51b8..3416530dc 100644 --- a/src/components/BusyComponent.cpp +++ b/src/components/BusyComponent.cpp @@ -54,5 +54,5 @@ void BusyComponent::onSizeChanged() void BusyComponent::reset() { - mAnimation->reset(); + //mAnimation->reset(); } From 2abc4f2f3a934c89b5d09873393c3bb7d5d2823e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 27 Apr 2014 21:47:06 -0500 Subject: [PATCH 273/386] Add number of games skipped to scraper result dialog. After pressing the "SKIP" button, the cursor is now reset to the result list. --- src/guis/GuiScraperMulti.cpp | 11 +++++++++-- src/guis/GuiScraperMulti.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 55eb246d8..949940539 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -22,6 +22,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); @@ -49,7 +50,10 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SKIP", "skip", std::bind(&GuiScraperMulti::skip, this))); + buttons.push_back(std::make_shared(mWindow, "SKIP", "skip", [&] { + skip(); + mGrid.resetCursor(); + })); } buttons.push_back(std::make_shared(mWindow, "STOP", "stop (progress saved)", std::bind(&GuiScraperMulti::finish, this))); @@ -110,6 +114,7 @@ void GuiScraperMulti::skip() { mSearchQueue.pop(); mCurrentGame++; + mTotalSkipped++; doNextSearch(); } @@ -119,7 +124,9 @@ void GuiScraperMulti::finish() if(mTotalSuccessful == 0) ss << "NO GAMES SUCCESSFULLY SCRAPED."; else - ss << mTotalSuccessful << " GAME" << ((mTotalSuccessful > 1) ? "S" : "") << "SUCCESSFULLY SCRAPED!"; + ss << mTotalSuccessful << " GAME" << ((mTotalSuccessful > 1) ? "S" : "") << " SUCCESSFULLY SCRAPED!"; + if(mTotalSkipped > 0) + ss << "\n" << mTotalSkipped << " GAME" << ((mTotalSkipped > 1) ? "S" : "") << " SKIPPED."; mWindow->pushGui(new GuiMsgBox(mWindow, ss.str(), "OK", [&] { delete this; })); diff --git a/src/guis/GuiScraperMulti.h b/src/guis/GuiScraperMulti.h index 526c75afa..33b04b2b9 100644 --- a/src/guis/GuiScraperMulti.h +++ b/src/guis/GuiScraperMulti.h @@ -28,6 +28,7 @@ private: unsigned int mTotalGames; unsigned int mCurrentGame; unsigned int mTotalSuccessful; + unsigned int mTotalSkipped; std::queue mSearchQueue; NinePatchComponent mBackground; From fc96849f08e3f54abcb1385100aad9beee31c4da Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 27 Apr 2014 22:03:55 -0500 Subject: [PATCH 274/386] Fixed input not getting passed to DateTimeComponents in GuiMetaDataEd. Fixed vertex rounding for RatingComponent. Rating no longer "wiggles" as you change the value in GuiMetaDataEd. --- src/components/RatingComponent.cpp | 9 +++------ src/guis/GuiMetaDataEd.cpp | 13 ++++++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index 980a4f3d2..df77bb642 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -60,9 +60,9 @@ void RatingComponent::updateVertices() { const float numStars = NUM_RATING_STARS; - const float h = getSize().y(); // is the same as a single star's width - const float w = h * mValue * numStars; - const float fw = h * numStars; + const float h = round(getSize().y()); // is the same as a single star's width + const float w = round(h * mValue * numStars); + const float fw = round(h * numStars); mVertices[0].pos << 0.0f, 0.0f; mVertices[0].tex << 0.0f, 1.0f; @@ -85,9 +85,6 @@ void RatingComponent::updateVertices() mVertices[10].pos << fw, 0.0f; mVertices[10].tex << numStars, 1.0f; mVertices[11] = mVertices[7]; - - for(int i = 0; i < 12; i++) - mVertices[i].pos = roundVector(mVertices[i].pos); } void RatingComponent::render(const Eigen::Affine3f& parentTrans) diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 331dda0f2..ea2977b89 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -62,8 +62,16 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector { ed = std::make_shared(window); const float height = lbl->getSize().y() * 0.71f; - ed->setSize(height * 4.9f, height); + ed->setSize(0, height); row.addElement(ed, false, true); + + auto spacer = std::make_shared(mWindow); + spacer->setSize(Renderer::getScreenWidth() * 0.0025f, 0); + row.addElement(spacer, false); + + // pass input to the actual RatingComponent instead of the spacer + row.input_handler = std::bind(&GuiComponent::input, ed.get(), std::placeholders::_1, std::placeholders::_2); + break; } case MD_DATE: @@ -75,6 +83,9 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector spacer->setSize(Renderer::getScreenWidth() * 0.0025f, 0); row.addElement(spacer, false); + // pass input to the actual DateTimeComponent instead of the spacer + row.input_handler = std::bind(&GuiComponent::input, ed.get(), std::placeholders::_1, std::placeholders::_2); + break; } case MD_TIME: From 63113aeea7a4139be6ad76eed2ace291da1cc8d2 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 30 Apr 2014 11:55:10 -0500 Subject: [PATCH 275/386] Start now closes most submenus. --- src/guis/GuiScraperStart.cpp | 11 +++++++++++ src/guis/GuiSettings.cpp | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 3a7e7f68d..8ea805472 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -1,6 +1,7 @@ #include "GuiScraperStart.h" #include "GuiScraperMulti.h" #include "GuiMsgBox.h" +#include "../views/ViewController.h" #include "../components/TextComponent.h" #include "../components/OptionListComponent.h" @@ -102,6 +103,15 @@ bool GuiScraperStart::input(InputConfig* config, Input input) return true; } + if(config->isMappedTo("start", input) && input.value != 0) + { + // close everything + Window* window = mWindow; + while(window->peekGui() && window->peekGui() != window->getViewController()) + delete window->peekGui(); + } + + return false; } @@ -109,5 +119,6 @@ std::vector GuiScraperStart::getHelpPrompts() { std::vector prompts = mMenu.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "back")); + prompts.push_back(HelpPrompt("start", "close")); return prompts; } diff --git a/src/guis/GuiSettings.cpp b/src/guis/GuiSettings.cpp index a57b85c6d..d9867b6c7 100644 --- a/src/guis/GuiSettings.cpp +++ b/src/guis/GuiSettings.cpp @@ -1,5 +1,6 @@ #include "GuiSettings.h" #include "../Settings.h" +#include "../views/ViewController.h" GuiSettings::GuiSettings(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { @@ -34,6 +35,14 @@ bool GuiSettings::input(InputConfig* config, Input input) delete this; return true; } + + if(config->isMappedTo("start", input) && input.value != 0) + { + // close everything + Window* window = mWindow; + while(window->peekGui() && window->peekGui() != window->getViewController()) + delete window->peekGui(); + } return GuiComponent::input(config, input); } @@ -43,6 +52,7 @@ std::vector GuiSettings::getHelpPrompts() std::vector prompts = mMenu.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "back")); + prompts.push_back(HelpPrompt("start", "close")); return prompts; } From a9514843b487c9df90589d61012cad3edef1fc1b Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 30 Apr 2014 12:16:56 -0500 Subject: [PATCH 276/386] Changed metadata text entry prompts to be more descriptive. --- src/MetaData.cpp | 25 +++++++++++++------------ src/MetaData.h | 1 + src/guis/GuiMetaDataEd.cpp | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 3e3682552..6b742af12 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -3,18 +3,19 @@ #include "Log.h" MetaDataDecl gameDecls[] = { - {"name", MD_STRING, "", false, "name"}, - {"desc", MD_MULTILINE_STRING, "", false, "description"}, - {"image", MD_IMAGE_PATH, "", false, "image"}, - {"thumbnail", MD_IMAGE_PATH, "", false, "thumbnail"}, - {"rating", MD_RATING, "0", false, "rating"}, - {"releasedate", MD_DATE, "0", false, "release date"}, - {"developer", MD_STRING, "unknown", false, "developer"}, - {"publisher", MD_STRING, "unknown", false, "publisher"}, - {"genre", MD_STRING, "unknown", false, "genre"}, - {"players", MD_INT, "1", false, "players"}, - {"playcount", MD_INT, "0", true, "play count"}, - {"lastplayed", MD_TIME, "0", true, "last played"} + // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd + {"name", MD_STRING, "", false, "name", "enter game name"}, + {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, + {"image", MD_IMAGE_PATH, "", false, "image", "enter path to image"}, + {"thumbnail", MD_IMAGE_PATH, "", false, "thumbnail", "enter path to thumbnail"}, + {"rating", MD_RATING, "0", false, "rating", "enter rating"}, + {"releasedate", MD_DATE, "0", false, "release date", "enter release date"}, + {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, + {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, + {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, + {"players", MD_INT, "1", false, "players", "enter number of players"}, + {"playcount", MD_INT, "0", true, "play count", "enter number of times played"}, + {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date"} }; const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); diff --git a/src/MetaData.h b/src/MetaData.h index d2a9e26b8..fa28fc547 100644 --- a/src/MetaData.h +++ b/src/MetaData.h @@ -28,6 +28,7 @@ struct MetaDataDecl std::string defaultValue; bool isStatistic; //if true, ignore scraper values for this metadata std::string displayName; // displayed as this in editors + std::string displayPrompt; // phrase displayed in editors when prompted to enter value (currently only for strings) }; boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index ea2977b89..c56514ecd 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -111,7 +111,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector row.addElement(bracket, false); bool multiLine = iter->type == MD_MULTILINE_STRING; - const std::string title = "INPUT GAME " + iter->key; + const std::string title = iter->displayPrompt; auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] { mWindow->pushGui(new GuiTextEditPopup(mWindow, title, ed->getValue(), updateVal, multiLine)); From b33a03fe83136bf6348d896cecd7ad852d22281f Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 30 Apr 2014 12:40:25 -0500 Subject: [PATCH 277/386] Transition style now also affects launch transition. "Fade" only does a fade. "Slide" does the old move camera + fade effect. --- src/views/ViewController.cpp | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index caf420b31..11b4f87ed 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -112,14 +112,32 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) center += mCurrentView->getPosition(); stopAnimation(1); // make sure the fade in isn't still playing mLockInput = true; - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] + + if(Settings::getInstance()->getString("TransitionStyle") == "fade") { - game->getSystem()->launchGame(mWindow, game); - mCamera = origCamera; - mLockInput = false; - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, nullptr, true); - this->onFileChanged(game, FILE_METADATA_CHANGED); - }); + // fade out, launch game, fade back in + auto fadeFunc = [this](float t) { + t -= 1; + mFadeOpacity = lerp(0.0f, 1.0f, t*t*t + 1); + }; + setAnimation(new LambdaAnimation(fadeFunc, 1500), 0, [this, game, fadeFunc] + { + game->getSystem()->launchGame(mWindow, game); + mLockInput = false; + setAnimation(new LambdaAnimation(fadeFunc, 1500), 0, nullptr, true); + this->onFileChanged(game, FILE_METADATA_CHANGED); + }); + }else{ + // move camera to zoom in on center + fade out, launch game, come back in + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] + { + game->getSystem()->launchGame(mWindow, game); + mCamera = origCamera; + mLockInput = false; + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, nullptr, true); + this->onFileChanged(game, FILE_METADATA_CHANGED); + }); + } } std::shared_ptr ViewController::getGameListView(SystemData* system) From e33e76cb5ed96f2dda33b0f5f6b33708361306b5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 30 Apr 2014 15:57:12 -0500 Subject: [PATCH 278/386] Better styling for single game scraping screen. --- src/guis/GuiGameScraper.cpp | 30 ++++++++++++++++++++++-------- src/guis/GuiGameScraper.h | 3 ++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index f2cae9480..0a40d84af 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -10,7 +10,7 @@ #include "GuiTextEditPopup.h" GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), - mGrid(window, Eigen::Vector2i(1, 3)), + mGrid(window, Eigen::Vector2i(1, 7)), mBox(window, ":/frame.png"), mSearchParams(params), mClose(false) @@ -18,13 +18,23 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: addChild(&mBox); addChild(&mGrid); - // header - mHeader = std::make_shared(mWindow, getCleanFileName(mSearchParams.game->getName()), Font::get(FONT_SIZE_LARGE), 0x777777FF, TextComponent::ALIGN_CENTER); - mGrid.setEntry(mHeader, Eigen::Vector2i(0, 0), false, true); + // row 0 is a spacer + + mGameName = std::make_shared(mWindow, strToUpper(mSearchParams.game->getPath().filename().generic_string()), + Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mGameName, Eigen::Vector2i(0, 1), false, true); + + // row 2 is a spacer + + mSystemName = std::make_shared(mWindow, strToUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), + 0x888888FF, TextComponent::ALIGN_CENTER); + mGrid.setEntry(mSystemName, Eigen::Vector2i(0, 3), false, true); + + // row 4 is a spacer // ScraperSearchComponent mSearch = std::make_shared(window, ScraperSearchComponent::NEVER_AUTO_ACCEPT); - mGrid.setEntry(mSearch, Eigen::Vector2i(0, 1), true); + mGrid.setEntry(mSearch, Eigen::Vector2i(0, 5), true); // buttons std::vector< std::shared_ptr > buttons; @@ -36,7 +46,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); mButtonGrid = makeButtonGrid(mWindow, buttons); - mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 2), true, false); + mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 6), true, false); // we call this->close() instead of just delete this; in the accept callback: // this is because of how GuiComponent::update works. if it was just delete this, this would happen when the metadata resolver is done: @@ -75,8 +85,12 @@ void GuiGameScraper::onSizeChanged() mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); mGrid.setSize(mSize); - mGrid.setRowHeightPerc(0, mHeader->getFont()->getHeight() / mSize.y()); // header - mGrid.setRowHeightPerc(2, mButtonGrid->getSize().y() / mSize.y()); // buttons + mGrid.setRowHeightPerc(0, 0.04f); + mGrid.setRowHeightPerc(1, mGameName->getFont()->getLetterHeight() / mSize.y()); // game name + mGrid.setRowHeightPerc(2, 0.04f); + mGrid.setRowHeightPerc(3, mSystemName->getFont()->getLetterHeight() / mSize.y()); // system name + mGrid.setRowHeightPerc(4, 0.04f); + mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y()); // buttons } bool GuiGameScraper::input(InputConfig* config, Input input) diff --git a/src/guis/GuiGameScraper.h b/src/guis/GuiGameScraper.h index 46c45db17..d35694cd9 100644 --- a/src/guis/GuiGameScraper.h +++ b/src/guis/GuiGameScraper.h @@ -22,7 +22,8 @@ private: ComponentGrid mGrid; NinePatchComponent mBox; - std::shared_ptr mHeader; + std::shared_ptr mGameName; + std::shared_ptr mSystemName; std::shared_ptr mSearch; std::shared_ptr mButtonGrid; From 78a3f94e1efc605a27469c9cd3969cd81f1f2851 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 30 Apr 2014 21:12:45 -0500 Subject: [PATCH 279/386] Changed folder structure significantly. The ~/.emulationstation folder is now organized into categories. Everything probably broke again. Added support for "theme sets," instead of just one theme for each system. Read the top of THEMES.md for more information. Added support for reading from `/etc/emulationstation/` for themes, gamelists, and es_systems.cfg. Updated documentation to match. --- README.md | 60 +++++++++++++++++++++++----------- THEMES.md | 36 +++++++++++++++++++-- src/Settings.cpp | 1 + src/SystemData.cpp | 63 ++++++++++++++++++++---------------- src/SystemData.h | 6 ++-- src/ThemeData.cpp | 52 +++++++++++++++++++++++++++++ src/ThemeData.h | 11 +++++++ src/XMLReader.cpp | 42 ++++++++++++------------ src/guis/GuiMenu.cpp | 29 +++++++++++++++++ src/main.cpp | 2 +- src/views/ViewController.cpp | 32 ++++++++++++++++++ src/views/ViewController.h | 2 ++ 12 files changed, 264 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index a3d1829eb..2fd0e5150 100644 --- a/README.md +++ b/README.md @@ -77,24 +77,27 @@ Configuring **~/.emulationstation/es_systems.cfg:** When first run, an example systems configuration file will be created at $HOME/.emulationstation/es_systems.cfg. This example has some comments explaining how to write the configuration file, and an example RetroArch launch command. See the "Writing an es_systems.cfg" section for more information. -**~/.emulationstation/es_input.cfg:** -When you first start EmulationStation, you will be prompted to configure any input devices you wish to use. The process is thus: - -1. Press a button on any device you wish to use. *This includes the keyboard.* Once you have selected all the devices you wish to configure, hold a button on the first device to continue to step 2. - -2. Press the displayed input for each device in sequence. You will be prompted for Up, Down, Left, Right, A (Select), B (Back), Menu, Select (fast select), PageUp, and PageDown. If your controller doesn't have enough buttons for everything, you can press A to skip the remaining inputs. - -3. Your config will be saved to `~/.emulationstation/es_input.cfg`. *If you wish to reconfigure, just delete this file.* - -*NOTE: If `~/.emulationstation/es_input.cfg` is present but does not contain any available joysticks or a keyboard, an emergency default keyboard mapping will be used.* - -As long as ES hasn't frozen, you can always press F4 to close the application. - - **Keep in mind you'll have to set up your emulator separately from EmulationStation!** After you launch a game, EmulationStation will return once your system's command terminates (i.e. your emulator closes). +**~/.emulationstation/es_input.cfg:** +When you first start EmulationStation, you will be prompted to configure an input device. The process is thus: + +1. Hold a button on the device you want to configure. This includes the keyboard. + +2. Press the buttons as they appear in the list. Some inputs can be skipped by holding any button down for a few seconds (e.g. page up/page down). + +3. You can review your mappings by pressing up and down, making any changes by pressing A. + +4. Choose "SAVE" to save this device and close the input configuration screen. + +The new configuration will be added to the `~/.emulationstation/es_input.cfg` file. + +**Both new and old devices can be (re)configured at any time by pressing the Start button and choosing "CONFIGURE INPUT".** From here, you may unplug the device you used to open the menu and plug in a new one, if necessary. New devices will be appended to the existing input configuration file, so your old devices will remain configured. + +**If things stop working, you can delete the `~/.emulationstation/es_input.cfg` file to make the input configuration screen reappear on next run.** + You can use `--help` or `-h` to view a list of command-line options. Briefly outlined here: ``` @@ -109,9 +112,17 @@ You can use `--help` or `-h` to view a list of command-line options. Briefly out --home-path [path] - use [path] instead of the "home" environment variable (useful for portable installations). ``` +As long as ES hasn't frozen, you can always press F4 to close the application. + + Writing an es_systems.cfg ========================= -The file `~/.emulationstation/es_systems.cfg` contains the system configuration data for EmulationStation, written in XML. + +The `es_systems.cfg` file contains the system configuration data for EmulationStation, written in XML. This tells EmulationStation what systems you have, what platform they correspond to (for scraping), and where the games are located. + +ES will check two places for an es_systems.cfg file, in the following order: +* `~/.emulationstation/es_systems.cfg` +* `/etc/emulationstation/es_systems.cfg` The order EmulationStation displays systems reflects the order you define them in. @@ -163,7 +174,12 @@ gamelist.xml The gamelist.xml for a system defines metadata for a system's games, such as a name, image (like a screenshot or box art), description, release date, and rating. -If a file named gamelist.xml is found in the root of a system's search directory OR within `~/.emulationstation/%NAME%/`, game metadata will be loaded from it. This allows you to define images, descriptions, and different names for files. Note that only standard ASCII characters are supported for text (if you see a weird [X] symbol, you're probably using unicode!). +ES will check three places for a gamelist.xml, in the following order: +* `[SYSTEM_PATH]/gamelist.xml` +* `~/.emulationstation/gamelists/[SYSTEM_NAME]/gamelist.xml` +* `/etc/emulationstation/gamelists/[SYSTEM_NAME]/gamelist.xml` + +This file allows you to define images, descriptions, and different names for files. Note that only standard ASCII characters are supported for text (if you see a weird [X] symbol, you're probably using Unicode!). Images will be automatically resized to fit within the left column of the screen. Smaller images will load faster, so try to keep your resolution low. An example gamelist.xml: ```xml @@ -177,12 +193,17 @@ An example gamelist.xml: ``` -The path element should be the absolute path of the ROM. Special characters SHOULD NOT be escaped. The image element is the path to an image to display above the description (like a screenshot or boxart). Most formats can be used (including png, jpg, gif, etc.). Not all elements need to be used. +The path element should be the *absolute path* of the ROM. Special characters SHOULD NOT be escaped. The image element is the path to an image to display above the description (like a screenshot or boxart). Most formats can be used (including png, jpg, gif, etc.). Not all elements need to be used. The switch `--gamelist-only` can be used to skip automatic searching, and only display games defined in the system's gamelist.xml. -The switch `--ignore-gamelist` can be used to ignore the gamelist and use the non-detailed view. +The switch `--ignore-gamelist` can be used to ignore the gamelist and force ES to use the non-detailed view. -*You can use ES's [scraping](http://en.wikipedia.org/wiki/Web_scraping) tools to avoid creating a gamelist.xml by hand.* A command-line version is also provided - just run emulationstation with `--scrape`. +*You can use ES's [scraping](http://en.wikipedia.org/wiki/Web_scraping) tools to avoid creating a gamelist.xml by hand.* There are two ways to run the scraper: + +* **If you want to scrape multiple games:** press start to open the menu and choose the "SCRAPER" option. Adjust your settings and press "SCRAPE NOW". +* **If you just want to scrape one game:** find the game on the game list in ES and press select. Choose "EDIT THIS GAME'S METADATA" and then press the "SCRAPE" button at the bottom of the metadata editor. + +A command-line version of the scraper is also provided - just run emulationstation with `--scrape` *(currently broken)*. Themes ====== @@ -190,6 +211,7 @@ Themes By default, EmulationStation looks pretty ugly. You can fix that. If you want to know more about making your own themes (or editing existing ones), read THEMES.md! I've put some themes up for download on my EmulationStation webpage: http://aloshi.com/emulationstation#themes + If you're using RetroPie, you should already have a nice set of themes automatically installed! -Aloshi diff --git a/THEMES.md b/THEMES.md index 30a5db44c..a4741ccce 100644 --- a/THEMES.md +++ b/THEMES.md @@ -3,9 +3,41 @@ Themes EmulationStation allows each system to have its own "theme." A theme is a collection **views** that define some **elements**, each with their own **properties**. -Themes are loaded from two places. If it is not in the first, it will try the next: +The first place ES will check for a theme is in the system's `` folder, for a theme.xml file: * `[SYSTEM_PATH]/theme.xml` -* `[HOME]/.emulationstation/[SYSTEM_NAME]/theme.xml` (where `[HOME]` is the `$HOME` environment variable on Linux and `%HOMEPATH%` on Windows) + +If that file doesn't exist, ES will try to find the theme in the current **theme set**. Theme sets are just a collection of individual system themes arranged in the "themes" folder under some name. Here's an example: + +``` +... + themes/ + my_theme_set/ + snes/ + theme.xml + my_cool_background.jpg + + nes/ + theme.xml + my_other_super_cool_background.jpg + + common_resources/ + scroll_sound.wav + + another_theme_set/ + snes/ + theme.xml + some_resource.svg +``` + +The theme set system makes it easy for users to try different themes and allows distributions to include multiple theme options. Users can change the currently active theme set in the "UI Settings" menu. The option is only visible if at least one theme set exists. + +There are two places ES can load theme sets from: +* `[HOME]/.emulationstation/themes/[CURRENT_THEME_SET]/[SYSTEM_NAME]/theme.xml` +* `/etc/emulationstation/themes/[CURRENT_THEME_SET]/[SYSTEM_NAME]/theme.xml` + +If both files happen to exist, ES will pick the first one (the one located in the home directory). + +Again, the `[CURRENT_THEME_SET]` value is set in the "UI Settings" menu. If it has not been set yet or the previously selected theme set is missing, the first available theme set will be used as the default. Simple Example ============== diff --git a/src/Settings.cpp b/src/Settings.cpp index f0f750529..b3d36298b 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -47,6 +47,7 @@ void Settings::setDefaults() mIntMap["GameListSortIndex"] = 0; mStringMap["TransitionStyle"] = "fade"; + mStringMap["ThemeSet"] = ""; mScraper = std::shared_ptr(new GamesDBScraper()); } diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 1748ce77b..988477071 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -201,19 +201,18 @@ void SystemData::populateFolder(FileData* folder) } //creates systems from information located in a config file -bool SystemData::loadConfig(const std::string& path, bool writeExample) +bool SystemData::loadConfig() { deleteSystems(); + std::string path = getConfigPath(false); + LOG(LogInfo) << "Loading system config file " << path << "..."; if(!fs::exists(path)) { - LOG(LogError) << "File does not exist!"; - - if(writeExample) - writeExampleConfig(path); - + LOG(LogError) << "es_systems.cfg file does not exist!"; + writeExampleConfig(getConfigPath(true)); return false; } @@ -222,7 +221,7 @@ bool SystemData::loadConfig(const std::string& path, bool writeExample) if(!res) { - LOG(LogError) << "Could not parse config file!"; + LOG(LogError) << "Could not parse es_systems.cfg file!"; LOG(LogError) << res.description(); return false; } @@ -330,20 +329,16 @@ void SystemData::deleteSystems() sSystemVector.clear(); } -std::string SystemData::getConfigPath() +std::string SystemData::getConfigPath(bool forWrite) { - std::string home = getHomePath(); - if(home.empty()) - { - LOG(LogError) << "Home path environment variable empty or nonexistant!"; - exit(1); - return ""; - } + fs::path path = getHomePath() + "/.emulationstation/es_systems.cfg"; + if(forWrite || fs::exists(path)) + return path.generic_string(); - return(home + "/.emulationstation/es_systems.cfg"); + return "/etc/emulationstation/es_systems.cfg"; } -std::string SystemData::getGamelistPath() const +std::string SystemData::getGamelistPath(bool forWrite) const { fs::path filePath; @@ -351,25 +346,33 @@ std::string SystemData::getGamelistPath() const if(fs::exists(filePath)) return filePath.generic_string(); - filePath = getHomePath() + "/.emulationstation/"+ getName() + "/gamelist.xml"; - return filePath.generic_string(); + filePath = getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; + if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen + fs::create_directories(filePath.parent_path()); + if(forWrite || fs::exists(filePath)) + return filePath.generic_string(); + + return "/etc/emulationstation/gamelists/" + mName + "/gamelist.xml"; } std::string SystemData::getThemePath() const { - fs::path filePath; + // where we check for themes, in order: + // 1. [SYSTEM_PATH]/theme.xml + // 2. currently selected theme set - filePath = mRootFolder->getPath() / "theme.xml"; - if(fs::exists(filePath)) - return filePath.generic_string(); + // first, check game folder + fs::path localThemePath = mRootFolder->getPath() / "theme.xml"; + if(fs::exists(localThemePath)) + return localThemePath.generic_string(); - filePath = getHomePath() + "/.emulationstation/" + getName() + "/theme.xml"; - return filePath.generic_string(); + // not in game folder, try theme sets + return ThemeData::getThemeFromCurrentSet(mName).generic_string(); } bool SystemData::hasGamelist() const { - return (fs::exists(getGamelistPath())); + return (fs::exists(getGamelistPath(false))); } unsigned int SystemData::getGameCount() const @@ -380,9 +383,15 @@ unsigned int SystemData::getGameCount() const void SystemData::loadTheme() { mTheme = std::make_shared(); + + std::string path = getThemePath(); + + if(!fs::exists(path)) // no theme available for this platform + return; + try { - mTheme->loadFile(getThemePath()); + mTheme->loadFile(path); } catch(ThemeException& e) { LOG(LogError) << e.what(); diff --git a/src/SystemData.h b/src/SystemData.h index 149a3afd4..6b9887ac8 100644 --- a/src/SystemData.h +++ b/src/SystemData.h @@ -24,7 +24,7 @@ public: inline PlatformIds::PlatformId getPlatformId() const { return mPlatformId; } inline const std::shared_ptr& getTheme() const { return mTheme; } - std::string getGamelistPath() const; + std::string getGamelistPath(bool forWrite) const; bool hasGamelist() const; std::string getThemePath() const; @@ -33,9 +33,9 @@ public: void launchGame(Window* window, FileData* game); static void deleteSystems(); - static bool loadConfig(const std::string& path, bool writeExampleIfNonexistant = true); //Load the system config file at getConfigPath(). Returns true if no errors were encountered. An example can be written if the file doesn't exist. + static bool loadConfig(); //Load the system config file at getConfigPath(). Returns true if no errors were encountered. An example will be written if the file doesn't exist. static void writeExampleConfig(const std::string& path); - static std::string getConfigPath(); + static std::string getConfigPath(bool forWrite); // if forWrite, will only return ~/.emulationstation/es_systems.cfg, never /etc/emulationstation/es_systems.cfg static std::vector sSystemVector; diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index 3594d5f1e..f7712d29a 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -4,6 +4,7 @@ #include "Sound.h" #include "resources/TextureResource.h" #include "Log.h" +#include "Settings.h" #include "pugiXML/pugixml.hpp" #include @@ -411,3 +412,54 @@ ThemeExtras::~ThemeExtras() for(auto it = mExtras.begin(); it != mExtras.end(); it++) delete *it; } + + +std::map ThemeData::getThemeSets() +{ + std::map sets; + + static const size_t pathCount = 2; + fs::path paths[pathCount] = { + "/etc/emulationstation/themes", + getHomePath() + "/.emulationstation/themes" + }; + + fs::directory_iterator end; + + for(size_t i = 0; i < pathCount; i++) + { + if(!fs::is_directory(paths[i])) + continue; + + for(fs::directory_iterator it(paths[i]); it != end; ++it) + { + if(fs::is_directory(*it)) + { + ThemeSet set = {*it}; + sets[set.getName()] = set; + } + } + } + + return sets; +} + +fs::path ThemeData::getThemeFromCurrentSet(const std::string& system) +{ + auto themeSets = ThemeData::getThemeSets(); + if(themeSets.empty()) + { + // no theme sets available + return ""; + } + + auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(set == themeSets.end()) + { + // currently selected theme set is missing, so just pick the first available set + set = themeSets.begin(); + Settings::getInstance()->setString("ThemeSet", set->first); + } + + return set->second.getThemePath(system); +} diff --git a/src/ThemeData.h b/src/ThemeData.h index 19743636f..0e23fa5c5 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -81,6 +81,14 @@ private: std::vector mExtras; }; +struct ThemeSet +{ + boost::filesystem::path path; + + inline std::string getName() const { return path.stem().string(); } + inline boost::filesystem::path getThemePath(const std::string& system) const { return path/system/"theme.xml"; } +}; + class ThemeData { public: @@ -131,6 +139,9 @@ public: static const std::shared_ptr& getDefault(); + static std::map getThemeSets(); + static boost::filesystem::path getThemeFromCurrentSet(const std::string& system); + private: static std::map< std::string, std::map > sElementMap; diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 1dcc9b059..0aeef8f23 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -119,7 +119,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa void parseGamelist(SystemData* system) { - std::string xmlpath = system->getGamelistPath(); + std::string xmlpath = system->getGamelistPath(false); if(!boost::filesystem::exists(xmlpath)) return; @@ -227,37 +227,33 @@ void updateGamelist(SystemData* system) if(Settings::getInstance()->getBool("IgnoreGamelist")) return; - std::string xmlpath = system->getGamelistPath(); - pugi::xml_document doc; + pugi::xml_node root; + std::string xmlReadPath = system->getGamelistPath(false); - if(boost::filesystem::exists(xmlpath)) + if(boost::filesystem::exists(xmlReadPath)) { //parse an existing file first - pugi::xml_parse_result result = doc.load_file(xmlpath.c_str()); + pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); if(!result) { - LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); + LOG(LogError) << "Error parsing XML file \"" << xmlReadPath << "\"!\n " << result.description(); + return; + } + + root = doc.child("gameList"); + if(!root) + { + LOG(LogError) << "Could not find node in gamelist \"" << xmlReadPath << "\"!"; return; } }else{ //set up an empty gamelist to append to - doc.append_child("gameList"); - - //make sure the folders leading up to this path exist (or the XML file write will fail later on) - boost::filesystem::path path(xmlpath); - boost::filesystem::create_directories(path.parent_path()); + root = doc.append_child("gameList"); } - pugi::xml_node root = doc.child("gameList"); - if(!root) - { - LOG(LogError) << "Could not find node in gamelist \"" << xmlpath << "\"!"; - return; - } - //now we have all the information from the XML. now iterate through all our games and add information from there FileData* rootFolder = system->getRootFolder(); if (rootFolder != nullptr) @@ -296,9 +292,15 @@ void updateGamelist(SystemData* system) ++fit; } + //now write the file - if (!doc.save_file(xmlpath.c_str())) { - LOG(LogError) << "Error saving gamelist.xml file \"" << xmlpath << "\"!"; + + //make sure the folders leading up to this path exist (or the write will fail) + boost::filesystem::path xmlWritePath(system->getGamelistPath(true)); + boost::filesystem::create_directories(xmlWritePath.parent_path()); + + if (!doc.save_file(xmlWritePath.c_str())) { + LOG(LogError) << "Error saving gamelist.xml to \"" << xmlWritePath << "\" (for system " << system->getName() << ")!"; } }else{ LOG(LogError) << "Found no root folder for system \"" << system->getName() << "\"!"; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index a7ad70abe..d13269b37 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -8,6 +8,7 @@ #include "GuiSettings.h" #include "GuiScraperStart.h" #include "GuiDetectDevice.h" +#include "../views/ViewController.h" #include "../components/ButtonComponent.h" #include "../components/SwitchComponent.h" @@ -120,6 +121,34 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("TRANSITION STYLE", transition_style); s->addSaveFunc([transition_style] { Settings::getInstance()->setString("TransitionStyle", transition_style->getSelected()); }); + // theme set + auto themeSets = ThemeData::getThemeSets(); + + if(!themeSets.empty()) + { + auto selectedSet = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(selectedSet == themeSets.end()) + selectedSet = themeSets.begin(); + + auto theme_set = std::make_shared< OptionListComponent >(mWindow, "THEME SET", false); + for(auto it = themeSets.begin(); it != themeSets.end(); it++) + theme_set->add(it->first, it->first, it == selectedSet); + s->addWithLabel("THEME SET", theme_set); + + Window* window = mWindow; + s->addSaveFunc([window, theme_set] + { + bool needReload = false; + if(Settings::getInstance()->getString("ThemeSet") != theme_set->getSelected()) + needReload = true; + + Settings::getInstance()->setString("ThemeSet", theme_set->getSelected()); + + if(needReload) + window->getViewController()->reloadAll(); // TODO - replace this with some sort of signal-based implementation + }); + } + mWindow->pushGui(s); }); diff --git a/src/main.cpp b/src/main.cpp index d8a78ac0f..ecdf69fa1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -162,7 +162,7 @@ int main(int argc, char* argv[]) } //try loading the system config file - if(!SystemData::loadConfig(SystemData::getConfigPath(), true)) + if(!SystemData::loadConfig()) { LOG(LogError) << "Error parsing system config file!"; return 1; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 11b4f87ed..f1a3de88b 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -7,6 +7,7 @@ #include "gamelist/DetailedGameListView.h" #include "gamelist/GridGameListView.h" #include "../guis/GuiMenu.h" +#include "../guis/GuiMsgBox.h" #include "../animations/LaunchAnimation.h" #include "../animations/MoveCameraAnimation.h" #include "../animations/LambdaAnimation.h" @@ -285,6 +286,37 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) } } +void ViewController::reloadAll() +{ + std::map cursorMap; + for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) + { + cursorMap[it->first] = it->second->getCursor(); + } + mGameListViews.clear(); + + for(auto it = cursorMap.begin(); it != cursorMap.end(); it++) + { + it->first->loadTheme(); + getGameListView(it->first)->setCursor(it->second); + } + + mSystemListView.reset(); + getSystemListView(); + + // update mCurrentView since the pointers changed + if(mState.viewing == GAME_LIST) + { + mCurrentView = getGameListView(mState.getSystem()); + }else if(mState.viewing == SYSTEM_SELECT) + { + mSystemListView->goToSystem(mState.getSystem()); + mCurrentView = mSystemListView; + }else{ + goToSystemView(SystemData::sSystemVector.front()); + } +} + std::vector ViewController::getHelpPrompts() { std::vector prompts; diff --git a/src/views/ViewController.h b/src/views/ViewController.h index 6c052b310..52f9121f3 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -18,6 +18,7 @@ public: // If a basic view detected a metadata change, it can request to recreate // the current gamelist view (as it may change to be detailed). void reloadGameListView(IGameListView* gamelist, bool reloadTheme = false); + void reloadAll(); // Reload everything with a theme. Used when the "ThemeSet" setting changes. // Navigation. void goToNextGameList(); @@ -61,6 +62,7 @@ public: private: void playViewTransition(); + std::shared_ptr getGameListView(SystemData* system); std::shared_ptr getSystemListView(); From fd5508a749b2ed91de92af96021b039c515d62fb Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 1 May 2014 11:37:40 -0500 Subject: [PATCH 280/386] Fixed rare crash when pressing start in GuiSettings to close windows. Changed scraping complete message a bit. Made spacing in GuiMsgBox better when there are multiple lines. --- src/guis/GuiMsgBox.cpp | 2 +- src/guis/GuiScraperMulti.cpp | 11 +++++++---- src/guis/GuiSettings.cpp | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 5a7487a4f..b929841c0 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -55,7 +55,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, // now that we know width, we can find height mMsg->setSize(width, 0); // mMsg->getSize.y() now returns the proper length - const float msgHeight = std::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()); + const float msgHeight = std::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()*1.225f); setSize(width + HORIZONTAL_PADDING_PX*2, msgHeight + mButtonGrid->getSize().y()); // center for good measure diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 949940539..a4d20929b 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -122,11 +122,14 @@ void GuiScraperMulti::finish() { std::stringstream ss; if(mTotalSuccessful == 0) - ss << "NO GAMES SUCCESSFULLY SCRAPED."; - else + { + ss << "NO GAMES WERE SCRAPED."; + }else{ ss << mTotalSuccessful << " GAME" << ((mTotalSuccessful > 1) ? "S" : "") << " SUCCESSFULLY SCRAPED!"; - if(mTotalSkipped > 0) - ss << "\n" << mTotalSkipped << " GAME" << ((mTotalSkipped > 1) ? "S" : "") << " SKIPPED."; + + if(mTotalSkipped > 0) + ss << "\n" << mTotalSkipped << " GAME" << ((mTotalSkipped > 1) ? "S" : "") << " SKIPPED."; + } mWindow->pushGui(new GuiMsgBox(mWindow, ss.str(), "OK", [&] { delete this; })); diff --git a/src/guis/GuiSettings.cpp b/src/guis/GuiSettings.cpp index d9867b6c7..29ec79249 100644 --- a/src/guis/GuiSettings.cpp +++ b/src/guis/GuiSettings.cpp @@ -42,6 +42,7 @@ bool GuiSettings::input(InputConfig* config, Input input) Window* window = mWindow; while(window->peekGui() && window->peekGui() != window->getViewController()) delete window->peekGui(); + return true; } return GuiComponent::input(config, input); From cf8801701a2ac3dfd57f5df0e216159dafad6f5e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 1 May 2014 12:57:31 -0500 Subject: [PATCH 281/386] Improved "slide" transition. Still not happy with the implementation, it's not a true carousel like the SystemList. --- src/views/SystemView.cpp | 5 ++++- src/views/SystemView.h | 2 +- src/views/ViewController.cpp | 27 ++++++++++++++++++++++++--- src/views/ViewController.h | 1 + 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 6707742cb..f910b9b98 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -79,9 +79,12 @@ void SystemView::populate() } } -void SystemView::goToSystem(SystemData* system) +void SystemView::goToSystem(SystemData* system, bool animate) { setCursor(system); + + if(!animate) + finishAnimation(0); } bool SystemView::input(InputConfig* config, Input input) diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 65664ff65..09aee10bc 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -22,7 +22,7 @@ class SystemView : public IList public: SystemView(Window* window); - void goToSystem(SystemData* system); + void goToSystem(SystemData* system, bool animate); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index f1a3de88b..9698502e0 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -27,13 +27,23 @@ void ViewController::goToStart() goToSystemView(SystemData::sSystemVector.at(0)); } +int ViewController::getSystemId(SystemData* system) +{ + std::vector& sysVec = SystemData::sSystemVector; + return std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); +} + void ViewController::goToSystemView(SystemData* system) { mState.viewing = SYSTEM_SELECT; mState.system = system; - getSystemListView()->goToSystem(system); - mCurrentView = getSystemListView(); + auto systemList = getSystemListView(); + systemList->setPosition(getSystemId(system) * (float)Renderer::getScreenWidth(), systemList->getPosition().y()); + + systemList->goToSystem(system, false); + mCurrentView = systemList; + updateHelpPrompts(); playViewTransition(); } @@ -56,6 +66,17 @@ void ViewController::goToPrevGameList() void ViewController::goToGameList(SystemData* system) { + if(mState.viewing == SYSTEM_SELECT) + { + // move system list + auto sysList = getSystemListView(); + float offX = sysList->getPosition().x(); + int sysId = getSystemId(system); + sysList->setPosition(sysId * (float)Renderer::getScreenWidth(), sysList->getPosition().y()); + offX = sysList->getPosition().x() - offX; + mCamera.translation().x() -= offX; + } + mState.viewing = GAME_LIST; mState.system = system; @@ -310,7 +331,7 @@ void ViewController::reloadAll() mCurrentView = getGameListView(mState.getSystem()); }else if(mState.viewing == SYSTEM_SELECT) { - mSystemListView->goToSystem(mState.getSystem()); + mSystemListView->goToSystem(mState.getSystem(), false); mCurrentView = mSystemListView; }else{ goToSystemView(SystemData::sSystemVector.front()); diff --git a/src/views/ViewController.h b/src/views/ViewController.h index 52f9121f3..aab5f19e4 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -62,6 +62,7 @@ public: private: void playViewTransition(); + int getSystemId(SystemData* system); std::shared_ptr getGameListView(SystemData* system); std::shared_ptr getSystemListView(); From 64d6af09b4e4d1c58c966a20a7efb71901d29fa0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 1 May 2014 14:47:33 -0500 Subject: [PATCH 282/386] Moved Alignment enum from inside TextComponent to global namespace in Font.h. Removed some old functions in Font. --- src/Window.cpp | 12 +++++-- src/components/IList.h | 5 ++- src/components/MenuComponent.cpp | 2 +- src/components/MenuComponent.h | 2 +- src/components/OptionListComponent.h | 2 +- src/components/TextComponent.h | 7 ---- src/components/TextListComponent.h | 2 -- src/guis/GuiDetectDevice.cpp | 10 +++--- src/guis/GuiFastSelect.cpp | 4 +-- src/guis/GuiGameScraper.cpp | 4 +-- src/guis/GuiInputConfig.cpp | 8 ++--- src/guis/GuiMenu.cpp | 2 +- src/guis/GuiMetaDataEd.cpp | 6 ++-- src/guis/GuiMsgBox.cpp | 2 +- src/guis/GuiScraperMulti.cpp | 6 ++-- src/guis/GuiTextEditPopup.cpp | 2 +- src/resources/Font.cpp | 40 +++++++--------------- src/resources/Font.h | 23 +++++++------ src/views/SystemView.cpp | 6 ++-- src/views/gamelist/ISimpleGameListView.cpp | 2 +- 20 files changed, 68 insertions(+), 79 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index dc38877b7..e843eca34 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -225,9 +225,17 @@ void Window::setAllowSleep(bool sleep) void Window::renderLoadingScreen() { - Renderer::setMatrix(Eigen::Affine3f::Identity()); + Eigen::Affine3f trans = Eigen::Affine3f::Identity(); + Renderer::setMatrix(trans); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF); - mDefaultFonts.at(2)->drawCenteredText("LOADING", 0, (Renderer::getScreenHeight() - mDefaultFonts.at(2)->getHeight()) / 2.0f , 0xFFFFFFFF); + + auto& font = mDefaultFonts.at(2); + TextCache* cache = font->buildTextCache("LOADING", 0, 0, 0xFFFFFFFF); + trans.translation() = Eigen::Vector3f((Renderer::getScreenWidth() - cache->metrics.size.x())/2, (Renderer::getScreenHeight() - cache->metrics.size.y())/2, 0); + Renderer::setMatrix(trans); + font->renderTextCache(cache); + delete cache; + Renderer::swapBuffers(); } diff --git a/src/components/IList.h b/src/components/IList.h index 683cae0f3..f6bca9dc3 100644 --- a/src/components/IList.h +++ b/src/components/IList.h @@ -254,7 +254,10 @@ protected: mGradient.setOpacity(mTitleOverlayOpacity); mGradient.render(identTrans); - mTitleOverlayFont->drawText(text, off, (mTitleOverlayColor & 0xFFFFFF00) | mTitleOverlayOpacity); // relies on mGradient's render for Renderer::setMatrix() + + TextCache* cache = mTitleOverlayFont->buildTextCache(text, off.x(), off.y(), 0xFFFFFF00 | mTitleOverlayOpacity); + mTitleOverlayFont->renderTextCache(cache); // relies on mGradient's render for Renderer::setMatrix() + delete cache; } void scroll(int amt) diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 36cb2f596..9855410d5 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -18,7 +18,7 @@ MenuComponent::MenuComponent(Window* window, const char* title, const std::share // set up title mTitle = std::make_shared(mWindow); - mTitle->setAlignment(TextComponent::ALIGN_CENTER); + mTitle->setAlignment(ALIGN_CENTER); mTitle->setColor(0x555555FF); setTitle(title, titleFont); mGrid.setEntry(mTitle, Vector2i(0, 0), false); diff --git a/src/components/MenuComponent.h b/src/components/MenuComponent.h index a95d622c8..f1f3c096a 100644 --- a/src/components/MenuComponent.h +++ b/src/components/MenuComponent.h @@ -26,7 +26,7 @@ public: inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false, bool invert_when_selected = true) { ComponentListRow row; - row.addElement(std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), TextComponent::ALIGN_CENTER); + row.addElement(std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), ALIGN_CENTER); row.addElement(comp, false, invert_when_selected); addRow(row, setCursorHere); } diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index 11a62156a..b20e9e389 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -113,7 +113,7 @@ public: auto font = Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT); mText.setFont(font); mText.setColor(0x777777FF); - mText.setAlignment(TextComponent::ALIGN_CENTER); + mText.setAlignment(ALIGN_CENTER); addChild(&mText); if(mMultiSelect) diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 36d825c1b..db6931cd5 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -14,13 +14,6 @@ class ThemeData; class TextComponent : public GuiComponent { public: - enum Alignment - { - ALIGN_LEFT, - ALIGN_CENTER, // centers both horizontally and vertically - ALIGN_RIGHT - }; - TextComponent(Window* window); TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Alignment align = ALIGN_LEFT, Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index b0503d1ee..dc88f7c50 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -123,8 +123,6 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(size() == 0) { - Renderer::setMatrix(trans); - font->drawText("The list is empty.", Eigen::Vector2f(0, 0), 0xFF0000FF); return; } diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index 7825270fa..70ed69401 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -32,7 +32,7 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w // title mTitle = std::make_shared(mWindow, firstRun ? "WELCOME" : "CONFIGURE INPUT", - Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); + Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true, Vector2i(1, 1), GridFlags::BORDER_BOTTOM); // device info @@ -43,17 +43,17 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w deviceInfo << numDevices << " GAMEPAD" << (numDevices > 1 ? "S" : "") << " DETECTED"; else deviceInfo << "NO GAMEPADS DETECTED"; - mDeviceInfo = std::make_shared(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); + mDeviceInfo = std::make_shared(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x999999FF, ALIGN_CENTER); mGrid.setEntry(mDeviceInfo, Vector2i(0, 1), false, true); // message - mMsg1 = std::make_shared(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mMsg1 = std::make_shared(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.", Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mMsg1, Vector2i(0, 2), false, true); - mMsg2 = std::make_shared(mWindow, "PRESS F4 TO QUIT AT ANY TIME.", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + mMsg2 = std::make_shared(mWindow, "PRESS F4 TO QUIT AT ANY TIME.", Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mMsg2, Vector2i(0, 3), false, true); // currently held device - mDeviceHeld = std::make_shared(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0xFFFFFFFF, TextComponent::ALIGN_CENTER); + mDeviceHeld = std::make_shared(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0xFFFFFFFF, ALIGN_CENTER); mGrid.setEntry(mDeviceHeld, Vector2i(0, 4), false, true); setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.5f); diff --git a/src/guis/GuiFastSelect.cpp b/src/guis/GuiFastSelect.cpp index d5a36e8a6..50a3f1808 100644 --- a/src/guis/GuiFastSelect.cpp +++ b/src/guis/GuiFastSelect.cpp @@ -19,14 +19,14 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo addChild(&mBackground); mLetterText.setSize(mSize.x(), mSize.y() * 0.75f); - mLetterText.setAlignment(TextComponent::ALIGN_CENTER); + mLetterText.setAlignment(ALIGN_CENTER); mLetterText.applyTheme(theme, "fastSelect", "letter", FONT_PATH | COLOR); // TODO - set font size addChild(&mLetterText); mSortText.setPosition(0, mSize.y() * 0.75f); mSortText.setSize(mSize.x(), mSize.y() * 0.25f); - mSortText.setAlignment(TextComponent::ALIGN_CENTER); + mSortText.setAlignment(ALIGN_CENTER); mSortText.applyTheme(theme, "fastSelect", "subtext", FONT_PATH | COLOR); // TODO - set font size addChild(&mSortText); diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 0a40d84af..6430ebf6f 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -21,13 +21,13 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // row 0 is a spacer mGameName = std::make_shared(mWindow, strToUpper(mSearchParams.game->getPath().filename().generic_string()), - Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mGameName, Eigen::Vector2i(0, 1), false, true); // row 2 is a spacer mSystemName = std::make_shared(mWindow, strToUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), - 0x888888FF, TextComponent::ALIGN_CENTER); + 0x888888FF, ALIGN_CENTER); mGrid.setEntry(mSystemName, Eigen::Vector2i(0, 3), false, true); // row 4 is a spacer diff --git a/src/guis/GuiInputConfig.cpp b/src/guis/GuiInputConfig.cpp index 10c56bdf7..06bbcef64 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/src/guis/GuiInputConfig.cpp @@ -40,7 +40,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // 0 is a spacer row mGrid.setEntry(std::make_shared(mWindow), Vector2i(0, 0), false); - mTitle = std::make_shared(mWindow, "CONFIGURING", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, "CONFIGURING", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 1), false, true); std::stringstream ss; @@ -48,10 +48,10 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi ss << "KEYBOARD"; else ss << "GAMEPAD " << (target->getDeviceId() + 1); - mSubtitle1 = std::make_shared(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER); + mSubtitle1 = std::make_shared(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); - mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x99999900, TextComponent::ALIGN_CENTER); + mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x99999900, ALIGN_CENTER); mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); // 4 is a spacer row @@ -76,7 +76,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi auto text = std::make_shared(mWindow, inputDispName[i], Font::get(FONT_SIZE_MEDIUM), 0x777777FF); row.addElement(text, true); - auto mapping = std::make_shared(mWindow, "-NOT DEFINED-", Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT), 0x999999FF, TextComponent::ALIGN_RIGHT); + auto mapping = std::make_shared(mWindow, "-NOT DEFINED-", Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT), 0x999999FF, ALIGN_RIGHT); setNotDefined(mapping); // overrides text and color set above row.addElement(mapping, true); mMappings.push_back(mapping); diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index d13269b37..7a1089be8 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -206,7 +206,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mVersion.setFont(Font::get(FONT_SIZE_SMALL)); mVersion.setColor(0xC6C6C6FF); mVersion.setText("EMULATIONSTATION V" PROGRAM_VERSION_STRING); - mVersion.setAlignment(TextComponent::ALIGN_CENTER); + mVersion.setAlignment(ALIGN_CENTER); addChild(&mMenu); addChild(&mVersion); diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index c56514ecd..ef9281bb7 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -30,9 +30,9 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mHeaderGrid = std::make_shared(mWindow, Vector2i(1, 5)); - mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x333333FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x333333FF, ALIGN_CENTER); mSubtitle = std::make_shared(mWindow, strToUpper(scraperParams.game->getPath().filename().generic_string()), - Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER); + Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mHeaderGrid->setEntry(mTitle, Vector2i(0, 1), false, true); mHeaderGrid->setEntry(mSubtitle, Vector2i(0, 3), false, true); @@ -98,7 +98,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector default: { // MD_STRING - ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF, TextComponent::ALIGN_RIGHT); + ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF, ALIGN_RIGHT); row.addElement(ed, true); auto spacer = std::make_shared(mWindow); diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index b929841c0..9261ab167 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -16,7 +16,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, float width = Renderer::getScreenWidth() * 0.6f; // max width float minWidth = Renderer::getScreenWidth() * 0.3f; // minimum width - mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mMsg, Eigen::Vector2i(0, 0), false, false); // create the buttons diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index a4d20929b..0d4068088 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -25,13 +25,13 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, "SCRAPING IN PROGRESS", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); - mSystem = std::make_shared(mWindow, "SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, TextComponent::ALIGN_CENTER); + mSystem = std::make_shared(mWindow, "SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mSystem, Vector2i(0, 1), false, true); - mSubtitle = std::make_shared(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, TextComponent::ALIGN_CENTER); + mSubtitle = std::make_shared(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, ALIGN_CENTER); mGrid.setEntry(mSubtitle, Vector2i(0, 2), false, true); mSearchComp = std::make_shared(mWindow, diff --git a/src/guis/GuiTextEditPopup.cpp b/src/guis/GuiTextEditPopup.cpp index 8491dfb3c..7fed7635b 100644 --- a/src/guis/GuiTextEditPopup.cpp +++ b/src/guis/GuiTextEditPopup.cpp @@ -10,7 +10,7 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con addChild(&mBackground); addChild(&mGrid); - mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); + mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mText = std::make_shared(mWindow); mText->setValue(initValue); diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index d1150bd7d..31bdea113 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -228,14 +228,6 @@ void Font::buildAtlas(ResourceData data) } } - -void Font::drawText(std::string text, const Eigen::Vector2f& offset, unsigned int color) -{ - TextCache* cache = buildTextCache(text, offset[0], offset[1], color); - renderTextCache(cache); - delete cache; -} - void Font::renderTextCache(TextCache* cache) { if(!textureID) @@ -315,25 +307,6 @@ float Font::getLetterHeight() const return charData['S'].texH * fontScale; } -void Font::drawCenteredText(std::string text, float xOffset, float y, unsigned int color) -{ - Eigen::Vector2f pos = sizeText(text); - - pos[0] = (Renderer::getScreenWidth() - pos.x()); - pos[0] = (pos.x() / 2) + (xOffset / 2); - pos[1] = y; - - drawText(text, pos, color); -} - -//this could probably be optimized -//draws text and ensures it's never longer than xLen -void Font::drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color) -{ - text = wrapText(text, xLen); - drawText(text, offset, color); -} - //the worst algorithm ever written //breaks up a normal string with newlines to make it fit xLen std::string Font::wrapText(std::string text, float xLen) const @@ -447,6 +420,19 @@ Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, i //TextCache //============================================================================================================= +TextCache* Font::buildWrappedTextCache(const std::string& text, const Eigen::Vector2f& offset, float xLen, Alignment alignment, unsigned int color) +{ + if(!textureID) + { + LOG(LogError) << "Error - tried to build TextCache with Font that has no texture loaded!"; + return NULL; + } + + // todo + + return NULL; +} + TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) { if(!textureID) diff --git a/src/resources/Font.h b/src/resources/Font.h index c0008515c..7f52ef85c 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -19,6 +19,13 @@ class TextCache; #define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" #define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" +enum Alignment +{ + ALIGN_LEFT, + ALIGN_CENTER, // centers both horizontally and vertically + ALIGN_RIGHT +}; + //A TrueType Font renderer that uses FreeType and OpenGL. //The library is automatically initialized when it's needed. class Font : public IReloadable @@ -50,20 +57,14 @@ public: GLuint textureID; + Eigen::Vector2f sizeText(std::string text) const; // Returns the expected size of a string when rendered. Extra spacing is applied to the Y axis. TextCache* buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color); + TextCache* buildWrappedTextCache(const std::string& text, const Eigen::Vector2f& offset, float xLen, Alignment alignment, unsigned int color); void renderTextCache(TextCache* cache); - - //Create a TextCache, render with it, then delete it. Best used for short text or text that changes frequently. - void drawText(std::string text, const Eigen::Vector2f& offset, unsigned int color); - Eigen::Vector2f sizeText(std::string text) const; //Sets the width and height of a given string to supplied pointers. A dimension is skipped if its pointer is NULL. - std::string wrapText(std::string text, float xLen) const; - - void drawWrappedText(std::string text, const Eigen::Vector2f& offset, float xLen, unsigned int color); - Eigen::Vector2f sizeWrappedText(std::string text, float xLen) const; - Eigen::Vector2f getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const; - - void drawCenteredText(std::string text, float xOffset, float y, unsigned int color); + std::string wrapText(std::string text, float xLen) const; // Inserts newlines into text to make it wrap properly. + Eigen::Vector2f sizeWrappedText(std::string text, float xLen) const; // Returns the expected size of a string after wrapping is applied. + Eigen::Vector2f getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const; // Returns the position of of the cursor after moving "cursor" characters. float getHeight() const; float getLetterHeight() const; diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index f910b9b98..db1a5fa6c 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -13,7 +13,7 @@ #define BAND_HEIGHT (logoSize().y() * SELECTED_SCALE) SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP), - mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, TextComponent::ALIGN_CENTER) + mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, ALIGN_CENTER) { mCamOffset = 0; @@ -58,7 +58,7 @@ void SystemView::populate() (*it)->getName(), Font::get(FONT_SIZE_LARGE), 0x000000FF, - TextComponent::ALIGN_CENTER); + ALIGN_CENTER); text->setSize(logoSize()); e.data.logo = std::shared_ptr(text); @@ -66,7 +66,7 @@ void SystemView::populate() (*it)->getName(), Font::get((int)(FONT_SIZE_LARGE * SELECTED_SCALE)), 0x000000FF, - TextComponent::ALIGN_CENTER); + ALIGN_CENTER); textSelected->setSize(logoSize()); e.data.logoSelected = std::shared_ptr(textSelected); } diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index ed1bf29d9..d6d5719eb 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -10,7 +10,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame mHeaderText.setText("Logo Text"); mHeaderText.setSize(mSize.x(), 0); mHeaderText.setPosition(0, 0); - mHeaderText.setAlignment(TextComponent::ALIGN_CENTER); + mHeaderText.setAlignment(ALIGN_CENTER); mHeaderImage.setResize(0, mSize.y() * 0.185f); mHeaderImage.setOrigin(0.5f, 0.0f); From 11065cc582a32592ceb8a76e963efb366618d171 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 2 May 2014 10:31:10 -0500 Subject: [PATCH 283/386] Fixed color of GuiMetaDataEd title. Tweaked "fade" transition when launching a game. --- src/guis/GuiMetaDataEd.cpp | 3 ++- src/views/ViewController.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index ef9281bb7..36d2d3c28 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -30,7 +30,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mHeaderGrid = std::make_shared(mWindow, Vector2i(1, 5)); - mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x333333FF, ALIGN_CENTER); + mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mSubtitle = std::make_shared(mWindow, strToUpper(scraperParams.game->getPath().filename().generic_string()), Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mHeaderGrid->setEntry(mTitle, Vector2i(0, 1), false, true); @@ -214,5 +214,6 @@ std::vector GuiMetaDataEd::getHelpPrompts() { std::vector prompts = mGrid.getHelpPrompts(); prompts.push_back(HelpPrompt("b", "discard")); + prompts.push_back(HelpPrompt("start", "close")); return prompts; } diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index 9698502e0..ab456f714 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -139,14 +139,15 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) { // fade out, launch game, fade back in auto fadeFunc = [this](float t) { - t -= 1; - mFadeOpacity = lerp(0.0f, 1.0f, t*t*t + 1); + //t -= 1; + //mFadeOpacity = lerp(0.0f, 1.0f, t*t*t + 1); + mFadeOpacity = lerp(0.0f, 1.0f, t); }; - setAnimation(new LambdaAnimation(fadeFunc, 1500), 0, [this, game, fadeFunc] + setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this, game, fadeFunc] { game->getSystem()->launchGame(mWindow, game); mLockInput = false; - setAnimation(new LambdaAnimation(fadeFunc, 1500), 0, nullptr, true); + setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); }else{ From e2458f5d927bfeb694656bac668cf5fa814ef7a9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 3 May 2014 14:51:50 -0500 Subject: [PATCH 284/386] Added theming tag. Applies to , , and elements. See THEMES.md for details. --- THEMES.md | 4 ++++ src/ThemeData.cpp | 9 ++++--- src/ThemeData.h | 1 + src/components/DateTimeComponent.cpp | 14 +++++++++-- src/components/DateTimeComponent.h | 2 ++ src/components/TextComponent.cpp | 26 ++++++++++++++------- src/components/TextComponent.h | 2 ++ src/components/TextListComponent.h | 17 +++++++++++--- src/views/gamelist/DetailedGameListView.cpp | 2 +- 9 files changed, 60 insertions(+), 17 deletions(-) diff --git a/THEMES.md b/THEMES.md index a4741ccce..1394950d9 100644 --- a/THEMES.md +++ b/THEMES.md @@ -342,6 +342,7 @@ Reference * `image name="logo"` - PATH - A logo image, to be displayed in the system logo carousel. * You can use extra elements (elements with `extra="true"`) to add your own backgrounds, etc. They will be displayed behind the carousel, and scroll relative to the carousel. + --- #### fastSelect @@ -419,6 +420,7 @@ Can be created as an extra. - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). * `alignment` - type: STRING. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. +* `forceUppercase` - type: BOOLEAN. Draw text in uppercase. #### textlist @@ -440,6 +442,7 @@ Can be created as an extra. - Valid values are "left", "center", or "right". Controls alignment on the X axis. * `horizontalMargin` - type: FLOAT. - Horizontal offset for text from the alignment point. If `alignment` is "left", offsets the text to the right. If `alignment` is "right", offsets text to the left. No effect if `alignment` is "center". Given as a percentage of the element's parent's width (same unit as `size`'s X value). +* `forceUppercase` - type: BOOLEAN. Draw text in uppercase. #### ninepatch @@ -467,6 +470,7 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `color` - type: COLOR. * `fontPath` - type: PATH. * `fontSize` - type: FLOAT. +* `forceUppercase` - type: BOOLEAN. Draw text in uppercase. #### sound diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index f7712d29a..e3b7ede1a 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -39,7 +39,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("color", COLOR) ("fontPath", PATH) ("fontSize", FLOAT) - ("alignment", STRING))) + ("alignment", STRING) + ("forceUppercase", BOOLEAN))) ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) @@ -51,7 +52,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("fontSize", FLOAT) ("scrollSound", PATH) ("alignment", STRING) - ("horizontalMargin", FLOAT))) + ("horizontalMargin", FLOAT) + ("forceUppercase", BOOLEAN))) ("container", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR))) @@ -64,7 +66,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("size", NORMALIZED_PAIR) ("color", COLOR) ("fontPath", PATH) - ("fontSize", FLOAT))) + ("fontSize", FLOAT) + ("forceUppercase", BOOLEAN))) ("rating", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) diff --git a/src/ThemeData.h b/src/ThemeData.h index 0e23fa5c5..b9653d9ba 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -35,6 +35,7 @@ namespace ThemeFlags SOUND = 128, ALIGNMENT = 256, TEXT = 512, + FORCE_UPPERCASE = 1024, ALL = 0xFFFFFFFF }; diff --git a/src/components/DateTimeComponent.cpp b/src/components/DateTimeComponent.cpp index cf62d06e6..c9ed78ee1 100644 --- a/src/components/DateTimeComponent.cpp +++ b/src/components/DateTimeComponent.cpp @@ -7,7 +7,7 @@ DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), - mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mSizeSet(false) + mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mUppercase(false), mSizeSet(false) { updateTextCache(); } @@ -15,6 +15,7 @@ DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : Gui void DateTimeComponent::setDisplayMode(DisplayMode mode) { mDisplayMode = mode; + updateTextCache(); } bool DateTimeComponent::input(InputConfig* config, Input input) @@ -249,7 +250,7 @@ std::shared_ptr DateTimeComponent::getFont() const void DateTimeComponent::updateTextCache() { DisplayMode mode = getCurrentDisplayMode(); - const std::string dispString = getDisplayString(mode); + const std::string dispString = mUppercase ? strToUpper(getDisplayString(mode)) : getDisplayString(mode); std::shared_ptr font = getFont(); mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); @@ -302,6 +303,12 @@ void DateTimeComponent::onSizeChanged() updateTextCache(); } +void DateTimeComponent::setUppercase(bool uppercase) +{ + mUppercase = uppercase; + updateTextCache(); +} + void DateTimeComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { GuiComponent::applyTheme(theme, view, element, properties); @@ -315,5 +322,8 @@ void DateTimeComponent::applyTheme(const std::shared_ptr& theme, cons if(properties & COLOR && elem->has("color")) setColor(elem->get("color")); + if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) + setUppercase(elem->get("forceUppercase")); + setFont(Font::getFromTheme(elem, properties, mFont)); } diff --git a/src/components/DateTimeComponent.h b/src/components/DateTimeComponent.h index 039cf17bd..17e5ee920 100644 --- a/src/components/DateTimeComponent.h +++ b/src/components/DateTimeComponent.h @@ -34,6 +34,7 @@ public: void setColor(unsigned int color); // Text color. void setFont(std::shared_ptr font); // Font to display with. Default is Font::get(FONT_SIZE_MEDIUM). + void setUppercase(bool uppercase); // Force text to be uppercase when in DISP_RELATIVE_TO_NOW mode. virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; @@ -59,6 +60,7 @@ private: unsigned int mColor; std::shared_ptr mFont; + bool mUppercase; bool mSizeSet; }; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index d64586769..dde58662d 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -7,13 +7,13 @@ #include "../Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT) + mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT) { } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), - mFont(NULL), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align) + mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align) { setFont(font); setColor(color); @@ -63,6 +63,12 @@ void TextComponent::setText(const std::string& text) onTextChanged(); } +void TextComponent::setUppercase(bool uppercase) +{ + mUppercase = uppercase; + onTextChanged(); +} + void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); @@ -118,11 +124,11 @@ void TextComponent::calculateExtent() { if(mAutoCalcExtent.x()) { - mSize = mFont->sizeText(mText); + mSize = mFont->sizeText(mUppercase ? strToUpper(mText) : mText); }else{ if(mAutoCalcExtent.y()) { - mSize[1] = mFont->sizeWrappedText(mText, getSize().x()).y(); + mSize[1] = mFont->sizeWrappedText(mUppercase ? strToUpper(mText) : mText, getSize().x()).y(); } } } @@ -131,16 +137,17 @@ void TextComponent::onTextChanged() { calculateExtent(); + std::string text = mUppercase ? strToUpper(mText) : mText; + std::shared_ptr f = getFont(); const bool wrap = (mSize.y() == 0 || (int)mSize.y() > f->getHeight()); - Eigen::Vector2f size = f->sizeText(mText); - if(!wrap && mSize.x() && mText.size() && size.x() > mSize.x()) + Eigen::Vector2f size = f->sizeText(text); + if(!wrap && mSize.x() && text.size() && size.x() > mSize.x()) { // abbreviate text const std::string abbrev = "..."; Eigen::Vector2f abbrevSize = f->sizeText(abbrev); - std::string text = mText; while(text.size() && size.x() + abbrevSize.x() > mSize.x()) { text.erase(text.size() - 1, 1); @@ -151,7 +158,7 @@ void TextComponent::onTextChanged() mTextCache = std::shared_ptr(f->buildTextCache(text, 0, 0, (mColor >> 8 << 8) | mOpacity)); }else{ - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(mText, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); } } @@ -202,5 +209,8 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st if(properties & TEXT && elem->has("text")) setText(elem->get("text")); + if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) + setUppercase(elem->get("forceUppercase")); + setFont(Font::getFromTheme(elem, properties, mFont)); } diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index db6931cd5..52dfcb2a0 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -19,6 +19,7 @@ public: Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); void setFont(const std::shared_ptr& font); + void setUppercase(bool uppercase); void onSizeChanged() override; void setText(const std::string& text); void setColor(unsigned int color); @@ -44,6 +45,7 @@ private: unsigned int mColor; std::shared_ptr mFont; + bool mUppercase; Eigen::Matrix mAutoCalcExtent; std::string mText; std::shared_ptr mTextCache; diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index dc88f7c50..31267d42f 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -10,6 +10,7 @@ #include "../Sound.h" #include "../Log.h" #include "../ThemeData.h" +#include "../Util.h" #include struct TextListData @@ -60,7 +61,13 @@ public: inline void setFont(const std::shared_ptr& font) { mFont = font; - + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + it->data.textCache.reset(); + } + + inline void setUppercase(bool uppercase) + { + mUppercase = true; for(auto it = mEntries.begin(); it != mEntries.end(); it++) it->data.textCache.reset(); } @@ -75,7 +82,6 @@ protected: virtual void onScroll(int amt) { if(mScrollSound) mScrollSound->play(); } virtual void onCursorChanged(const CursorState& state); - private: static const int MARQUEE_DELAY = 900; static const int MARQUEE_SPEED = 16; @@ -90,6 +96,7 @@ private: std::function mCursorChangedCallback; std::shared_ptr mFont; + bool mUppercase; unsigned int mSelectorColor; unsigned int mSelectedColor; std::shared_ptr mScrollSound; @@ -108,6 +115,7 @@ TextListComponent::TextListComponent(Window* window) : mAlignment = ALIGN_CENTER; mFont = Font::get(FONT_SIZE_MEDIUM); + mUppercase = false; mSelectorColor = 0x000000FF; mSelectedColor = 0; mColors[0] = 0x0000FFFF; @@ -171,7 +179,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) color = mColors[entry.data.colorId]; if(!entry.data.textCache) - entry.data.textCache = std::unique_ptr(font->buildTextCache(entry.name, 0, 0, 0x000000FF)); + entry.data.textCache = std::unique_ptr(font->buildTextCache(mUppercase ? strToUpper(entry.name) : entry.name, 0, 0, 0x000000FF)); entry.data.textCache->setColor(color); @@ -351,4 +359,7 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c mHorizontalMargin = elem->get("horizontalMargin") * (this->mParent ? this->mParent->getSize().x() : (float)Renderer::getScreenWidth()); } } + + if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) + setUppercase(elem->get("forceUppercase")); } diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 5285f372c..6aa464c6d 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -107,7 +107,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); mDescription.setSize(mDescContainer.getSize().x(), 0); - mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR); + mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR | FORCE_UPPERCASE); } void DetailedGameListView::initMDLabels() From b2193c3bf555f128422001796053900bb04fe861 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 3 May 2014 16:19:28 -0500 Subject: [PATCH 285/386] Fixed TextListComponent scrolling so text always clips within margins. Made all gamelists get recreated when GuiScraperMulti closes since there isn't a way to catch FileData changes efficiently yet. --- src/components/TextListComponent.h | 28 ++++++++++++++-------------- src/guis/GuiScraperMulti.cpp | 8 ++++++++ src/guis/GuiScraperMulti.h | 1 + src/views/ViewController.h | 1 + 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 31267d42f..b896c1aff 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -130,12 +130,9 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) std::shared_ptr& font = mFont; if(size() == 0) - { return; - } - const int cutoff = 0; - const int entrySize = (int)font->getHeight() + 5; + const float entrySize = font->getHeight() + 5; int startEntry = 0; @@ -144,32 +141,34 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(size() >= screenCount) { - startEntry = mCursor - (int)(screenCount * 0.5); + startEntry = mCursor - screenCount/2; if(startEntry < 0) startEntry = 0; if(startEntry >= size() - screenCount) startEntry = size() - screenCount; } - float y = (float)cutoff; + float y = 0; int listCutoff = startEntry + screenCount; if(listCutoff > size()) listCutoff = size(); + // draw selector bar + if(startEntry < listCutoff) + { + Renderer::setMatrix(trans); + Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize, mSize.x(), font->getHeight(), mSelectorColor); + } + + // clip to inside margins Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)dim.x(), (int)dim.y())); + Renderer::pushClipRect(Eigen::Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), + Eigen::Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); for(int i = startEntry; i < listCutoff; i++) { - //draw selector bar - if(mCursor == i) - { - Renderer::setMatrix(trans); - Renderer::drawRect(0, (int)y, (int)mSize.x(), (int)font->getHeight(), mSelectorColor); - } - typename IList::Entry& entry = mEntries.at((unsigned int)i); unsigned int color; @@ -276,6 +275,7 @@ void TextListComponent::update(int deltaTime) Eigen::Vector2f textSize = mFont->sizeText(text); //it's long enough to marquee + mMarqueeTime += deltaTime; if(textSize.x() - mMarqueeOffset > mSize.x() - 12 - (mAlignment != ALIGN_CENTER ? mHorizontalMargin : 0)) { mMarqueeTime += deltaTime; diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 0d4068088..4cc13e9fe 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -1,6 +1,7 @@ #include "GuiScraperMulti.h" #include "../Renderer.h" #include "../Log.h" +#include "../views/ViewController.h" #include "../components/TextComponent.h" #include "../components/ButtonComponent.h" @@ -67,6 +68,13 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue detailed) + for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + mWindow->getViewController()->reloadGameListView(*it, false); +} + void GuiScraperMulti::onSizeChanged() { mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); diff --git a/src/guis/GuiScraperMulti.h b/src/guis/GuiScraperMulti.h index 33b04b2b9..37a0b02f5 100644 --- a/src/guis/GuiScraperMulti.h +++ b/src/guis/GuiScraperMulti.h @@ -14,6 +14,7 @@ class GuiScraperMulti : public GuiComponent { public: GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults); + virtual ~GuiScraperMulti(); void onSizeChanged() override; std::vector getHelpPrompts() override; diff --git a/src/views/ViewController.h b/src/views/ViewController.h index aab5f19e4..ad7882c8e 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -18,6 +18,7 @@ public: // If a basic view detected a metadata change, it can request to recreate // the current gamelist view (as it may change to be detailed). void reloadGameListView(IGameListView* gamelist, bool reloadTheme = false); + inline void reloadGameListView(SystemData* system, bool reloadTheme = false) { reloadGameListView(getGameListView(system).get(), reloadTheme); } void reloadAll(); // Reload everything with a theme. Used when the "ThemeSet" setting changes. // Navigation. From 4cf206d3eb0e19c78643e6e26be9bc7f5289f079 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 12 May 2014 17:05:28 -0500 Subject: [PATCH 286/386] Some refactoring to the Font class. --- src/resources/Font.cpp | 177 +++++++++++++++++------------------------ src/resources/Font.h | 71 ++++++++--------- 2 files changed, 104 insertions(+), 144 deletions(-) diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 31bdea113..a6cb7ff89 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -7,11 +7,7 @@ #include "../Log.h" #include "../Util.h" -FT_Library Font::sLibrary; -bool Font::libraryInitialized = false; - -int Font::getDpiX() { return 96; } -int Font::getDpiY() { return 96; } +FT_Library Font::sLibrary = NULL; int Font::getSize() const { return mSize; } @@ -19,20 +15,20 @@ std::map< std::pair, std::weak_ptr > Font::sFontMap; void Font::initLibrary() { + assert(sLibrary == NULL); if(FT_Init_FreeType(&sLibrary)) { + sLibrary = NULL; LOG(LogError) << "Error initializing FreeType!"; - }else{ - libraryInitialized = true; } } size_t Font::getMemUsage() const { - if(!textureID) + if(!mTextureID) return 0; - return textureWidth * textureHeight * 4; + return mTextureWidth * mTextureHeight * 4; } size_t Font::getTotalMemUsage() @@ -55,7 +51,7 @@ size_t Font::getTotalMemUsage() return total; } -Font::Font(int size, const std::string& path) : fontScale(1.0f), mSize(size), mPath(path) +Font::Font(int size, const std::string& path) : mFontScale(1.0f), mSize(size), mPath(path), mTextureID(0) { reload(ResourceManager::getInstance()); } @@ -93,9 +89,11 @@ std::shared_ptr Font::get(int size, const std::string& path) void Font::init(ResourceData data) { - if(!libraryInitialized) + if(sLibrary == NULL) initLibrary(); + deinit(); + mMaxGlyphHeight = 0; buildAtlas(data); @@ -103,51 +101,33 @@ void Font::init(ResourceData data) void Font::deinit() { - if(textureID) + if(mTextureID) { - glDeleteTextures(1, &textureID); - textureID = 0; + glDeleteTextures(1, &mTextureID); + mTextureID = 0; } } void Font::buildAtlas(ResourceData data) -{ +{ + assert(mSize > 0); + + FT_Face face; if(FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face)) { LOG(LogError) << "Error creating font face! (mPath: " << mPath << ", data.length: " << data.length << ")"; return; } - //FT_Set_Char_Size(face, 0, size * 64, getDpiX(), getDpiY()); FT_Set_Pixel_Sizes(face, 0, mSize); - //find the size we should use - FT_GlyphSlot g = face->glyph; - int w = 0; - int h = 0; + // hardcoded texture size right now + mTextureWidth = 2048; + mTextureHeight = 512; - /*for(int i = 32; i < 128; i++) - { - if(FT_Load_Char(face, i, FT_LOAD_RENDER)) - { - fprintf(stderr, "Loading character %c failed!\n", i); - continue; - } - - w += g->bitmap.width; - h = std::max(h, g->bitmap.rows); - }*/ - - //the max size (GL_MAX_TEXTURE_SIZE) is like 3300 - w = 2048; - h = 512; - - textureWidth = w; - textureHeight = h; - - //create the texture - glGenTextures(1, &textureID); - glBindTexture(GL_TEXTURE_2D, textureID); + // create the texture + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); @@ -158,33 +138,19 @@ void Font::buildAtlas(ResourceData data) glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, w, h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, mTextureWidth, mTextureHeight, 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); //copy the glyphs into the texture int x = 0; int y = 0; int maxHeight = 0; + FT_GlyphSlot g = face->glyph; for(int i = 32; i < 128; i++) { if(FT_Load_Char(face, i, FT_LOAD_RENDER)) continue; - //prints rendered texture to the console - /*std::cout << "uploading at x: " << x << ", w: " << g->bitmap.width << " h: " << g->bitmap.rows << "\n"; - - for(int k = 0; k < g->bitmap.rows; k++) - { - for(int j = 0; j < g->bitmap.width; j++) - { - if(g->bitmap.buffer[g->bitmap.width * k + j]) - std::cout << "."; - else - std::cout << " "; - } - std::cout << "\n"; - }*/ - - if(x + g->bitmap.width >= textureWidth) + if(x + g->bitmap.width >= mTextureWidth) { x = 0; y += maxHeight + 1; //leave one pixel of space between glyphs @@ -197,17 +163,17 @@ void Font::buildAtlas(ResourceData data) glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, g->bitmap.width, g->bitmap.rows, GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap.buffer); - charData[i].texX = x; - charData[i].texY = y; - charData[i].texW = g->bitmap.width; - charData[i].texH = g->bitmap.rows; - charData[i].advX = (float)g->metrics.horiAdvance / 64.0f; - charData[i].advY = (float)g->metrics.vertAdvance / 64.0f; - charData[i].bearingX = (float)g->metrics.horiBearingX / 64.0f; - charData[i].bearingY = (float)g->metrics.horiBearingY / 64.0f; + mCharData[i].texX = x; + mCharData[i].texY = y; + mCharData[i].texW = g->bitmap.width; + mCharData[i].texH = g->bitmap.rows; + mCharData[i].advX = (float)g->metrics.horiAdvance / 64.0f; + mCharData[i].advY = (float)g->metrics.vertAdvance / 64.0f; + mCharData[i].bearingX = (float)g->metrics.horiBearingX / 64.0f; + mCharData[i].bearingY = (float)g->metrics.horiBearingY / 64.0f; - if(charData[i].texH > mMaxGlyphHeight) - mMaxGlyphHeight = charData[i].texH; + if(mCharData[i].texH > mMaxGlyphHeight) + mMaxGlyphHeight = mCharData[i].texH; x += g->bitmap.width + 1; //leave one pixel of space between glyphs } @@ -216,13 +182,13 @@ void Font::buildAtlas(ResourceData data) FT_Done_Face(face); - if((y + maxHeight) >= textureHeight) + if((y + maxHeight) >= mTextureHeight) { //failed to create a proper font texture LOG(LogWarning) << "Font \"" << mPath << "\" with size " << mSize << " exceeded max texture size! Trying again..."; //try a 3/4th smaller size and redo initialization - fontScale *= 1.25f; - mSize = (int)(mSize * (1.0f / fontScale)); + mFontScale *= 1.25f; + mSize = (int)(mSize * (1.0f / mFontScale)); deinit(); init(data); } @@ -230,7 +196,7 @@ void Font::buildAtlas(ResourceData data) void Font::renderTextCache(TextCache* cache) { - if(!textureID) + if(!mTextureID) { LOG(LogError) << "Error - tried to draw with Font that has no texture loaded!"; return; @@ -242,7 +208,7 @@ void Font::renderTextCache(TextCache* cache) return; } - glBindTexture(GL_TEXTURE_2D, textureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -265,12 +231,12 @@ void Font::renderTextCache(TextCache* cache) glDisable(GL_BLEND); } -Eigen::Vector2f Font::sizeText(std::string text) const +Eigen::Vector2f Font::sizeText(std::string text, float lineSpacing) const { float lineWidth = 0.0f; float highestWidth = 0.0f; - float y = getHeight(); + float y = getHeight(lineSpacing); for(unsigned int i = 0; i < text.length(); i++) { @@ -282,13 +248,13 @@ Eigen::Vector2f Font::sizeText(std::string text) const highestWidth = lineWidth; lineWidth = 0.0f; - y += getHeight(); + y += getHeight(lineSpacing); } if(letter < 32 || letter >= 128) letter = 127; - lineWidth += charData[letter].advX * fontScale; + lineWidth += mCharData[letter].advX * mFontScale; } if(lineWidth > highestWidth) @@ -297,14 +263,14 @@ Eigen::Vector2f Font::sizeText(std::string text) const return Eigen::Vector2f(highestWidth, y); } -float Font::getHeight() const +float Font::getHeight(float lineSpacing) const { - return mMaxGlyphHeight * 1.5f * fontScale; + return mMaxGlyphHeight * lineSpacing * mFontScale; } float Font::getLetterHeight() const { - return charData['S'].texH * fontScale; + return mCharData['S'].texH * mFontScale; } //the worst algorithm ever written @@ -368,13 +334,13 @@ std::string Font::wrapText(std::string text, float xLen) const return out; } -Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen) const +Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) const { text = wrapText(text, xLen); - return sizeText(text); + return sizeText(text, lineSpacing); } -Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, int cursor) const +Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, int cursor, float lineSpacing) const { std::string wrappedText = wrapText(text, xLen); @@ -393,7 +359,7 @@ Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, i //this is where the wordwrap inserted a newline //reset lineWidth and increment y, but don't consume a cursor character lineWidth = 0.0f; - y += getHeight(); + y += getHeight(lineSpacing); wrapOffset++; i--; @@ -403,14 +369,14 @@ Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, i if(letter == '\n') { lineWidth = 0.0f; - y += getHeight(); + y += getHeight(lineSpacing); continue; } if(letter < 32 || letter >= 128) letter = 127; - lineWidth += charData[letter].advX * fontScale; + lineWidth += mCharData[letter].advX * mFontScale; } return Eigen::Vector2f(lineWidth, y); @@ -420,9 +386,9 @@ Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, i //TextCache //============================================================================================================= -TextCache* Font::buildWrappedTextCache(const std::string& text, const Eigen::Vector2f& offset, float xLen, Alignment alignment, unsigned int color) +TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) { - if(!textureID) + if(!mTextureID) { LOG(LogError) << "Error - tried to build TextCache with Font that has no texture loaded!"; return NULL; @@ -430,12 +396,14 @@ TextCache* Font::buildWrappedTextCache(const std::string& text, const Eigen::Vec // todo + + return NULL; } TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) { - if(!textureID) + if(!mTextureID) { LOG(LogError) << "Error - tried to build TextCache with Font that has no texture loaded!"; return NULL; @@ -446,13 +414,18 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of TextCache::Vertex* vert = new TextCache::Vertex[vertCount]; GLubyte* colors = new GLubyte[vertCount * 4]; + // all glyph sizes/texture offsets are in pixels, + // so the only rounding we have to worry about is the offset + offsetX = round(offsetX); + offsetY = round(offsetY); + //texture atlas width/height - float tw = (float)textureWidth; - float th = (float)textureHeight; + float tw = (float)mTextureWidth; + float th = (float)mTextureHeight; float x = offsetX; - float yTop = charData['S'].bearingY * fontScale; + float yTop = mCharData['S'].bearingY * mFontScale; float yBot = getHeight(); float y = offsetY + (yBot + yTop)/2.0f; @@ -473,14 +446,14 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of letter = 127; //print [X] if character is not standard ASCII //the glyph might not start at the cursor position, but needs to be shifted a bit - const float glyphStartX = x + charData[letter].bearingX * fontScale; + const float glyphStartX = x + mCharData[letter].bearingX * mFontScale; //order is bottom left, top right, top left - vert[i + 0].pos << glyphStartX, y + (charData[letter].texH - charData[letter].bearingY) * fontScale; - vert[i + 1].pos << glyphStartX + charData[letter].texW * fontScale, y - charData[letter].bearingY * fontScale; + vert[i + 0].pos << glyphStartX, y + (mCharData[letter].texH - mCharData[letter].bearingY) * mFontScale; + vert[i + 1].pos << glyphStartX + mCharData[letter].texW * mFontScale, y - mCharData[letter].bearingY * mFontScale; vert[i + 2].pos << glyphStartX, vert[i + 1].pos.y(); - Eigen::Vector2i charTexCoord(charData[letter].texX, charData[letter].texY); - Eigen::Vector2i charTexSize(charData[letter].texW, charData[letter].texH); + Eigen::Vector2i charTexCoord(mCharData[letter].texX, mCharData[letter].texY); + Eigen::Vector2i charTexSize(mCharData[letter].texW, mCharData[letter].texH); vert[i + 0].tex << charTexCoord.x() / tw, (charTexCoord.y() + charTexSize.y()) / th; vert[i + 1].tex << (charTexCoord.x() + charTexSize.x()) / tw, charTexCoord.y() / th; @@ -497,13 +470,7 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of vert[i + 5].tex[0] = vert[i + 1].tex.x(); vert[i + 5].tex[1] = vert[i + 0].tex.y(); - // round - for(int j = 0; j < 6; j++) - { - vert[i + j].pos = roundVector(vert[i + j].pos); - } - - x += charData[letter].advX * fontScale; + x += mCharData[letter].advX * mFontScale; } TextCache::CacheMetrics metrics = { sizeText(text) }; diff --git a/src/resources/Font.h b/src/resources/Font.h index 7f52ef85c..edb68f8db 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -1,5 +1,4 @@ -#ifndef _FONT_H_ -#define _FONT_H_ +#pragma once #include #include "../platform.h" @@ -35,38 +34,18 @@ public: static std::shared_ptr get(int size, const std::string& path = getDefaultPath()); - ~Font(); + virtual ~Font(); - FT_Face face; - - //contains sizing information for every glyph. - struct charPosData { - int texX; - int texY; - int texW; - int texH; - - float advX; //!& rm) override; @@ -83,12 +62,7 @@ public: static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by font textures (in bytes) private: - static int getDpiX(); - static int getDpiY(); - static FT_Library sLibrary; - static bool libraryInitialized; - static std::map< std::pair, std::weak_ptr > sFontMap; Font(int size, const std::string& path); @@ -98,18 +72,39 @@ private: void buildAtlas(ResourceData data); //Builds a "texture atlas," one big OpenGL texture with glyphs 32 to 128. - int textureWidth; //OpenGL texture width - int textureHeight; //OpenGL texture height + //contains sizing information for every glyph. + struct CharData + { + int texX; + int texY; + int texW; + int texH; + + float advX; //! 1.0 if the font would be to big for the texture + float mFontScale; //! 1.0 if the font would be to big for the texture int mSize; const std::string mPath; + + friend TextCache; }; // Used to store a sort of "pre-rendered" string. // When a TextCache is constructed (Font::buildTextCache()), the vertices and texture coordinates of the string are calculated and stored in the TextCache object. -// Rendering a TextCache (Font::renderTextCache) every frame is MUCH faster than calling Font::drawText() and its variants. +// Rendering a previously constructed TextCache (Font::renderTextCache) every frame is MUCH faster than rebuilding one every frame. // Keep in mind you still need the Font object to render a TextCache (as the Font holds the OpenGL texture), and if a Font changes your TextCache may become invalid. class TextCache { @@ -134,5 +129,3 @@ public: Vertex* verts; GLubyte* colors; }; - -#endif From 5d0df7acf865ca4b69f164bd6bbf65994839ddd0 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 12 May 2014 20:03:02 -0500 Subject: [PATCH 287/386] Added proper text alignment to the Font class. Multiline text is now centered/right-aligned correctly. --- src/components/TextComponent.cpp | 38 ++++++----- src/resources/Font.cpp | 71 ++++++++++++--------- src/resources/Font.h | 2 + src/views/gamelist/DetailedGameListView.cpp | 2 +- 4 files changed, 62 insertions(+), 51 deletions(-) diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index dde58662d..08a711f74 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -82,22 +82,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mTextCache) { const Eigen::Vector2f& textSize = mTextCache->metrics.size; - Eigen::Vector3f off(0, 0, 0); - - switch(mAlignment) - { - case ALIGN_LEFT: - off << 0, (getSize().y() - textSize.y()) / 2, 0; - break; - - case ALIGN_CENTER: - off << (getSize().x() - textSize.x()) / 2, (getSize().y() - textSize.y()) / 2, 0; - break; - - case ALIGN_RIGHT: - off << (getSize().x() - textSize.x()), (getSize().y() - textSize.y()) / 2, 0; - break; - } + Eigen::Vector3f off(0, (getSize().y() - textSize.y()) / 2.0f, 0); if(Settings::getInstance()->getBool("DebugText")) { @@ -112,7 +97,20 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) // draw the text area, where the text actually is going if(Settings::getInstance()->getBool("DebugText")) - Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + { + switch(mAlignment) + { + case ALIGN_LEFT: + Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + break; + case ALIGN_CENTER: + Renderer::drawRect((mSize.x() - mTextCache->metrics.size.x()) / 2.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + break; + case ALIGN_RIGHT: + Renderer::drawRect(mSize.x() - mTextCache->metrics.size.x(), 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + break; + } + } mFont->renderTextCache(mTextCache.get()); } @@ -140,7 +138,7 @@ void TextComponent::onTextChanged() std::string text = mUppercase ? strToUpper(mText) : mText; std::shared_ptr f = getFont(); - const bool wrap = (mSize.y() == 0 || (int)mSize.y() > f->getHeight()); + const bool wrap = (mSize.y() == 0 || mSize.y() > f->getHeight()*1.2f); Eigen::Vector2f size = f->sizeText(text); if(!wrap && mSize.x() && text.size() && size.x() > mSize.x()) { @@ -156,9 +154,9 @@ void TextComponent::onTextChanged() text.append(abbrev); - mTextCache = std::shared_ptr(f->buildTextCache(text, 0, 0, (mColor >> 8 << 8) | mOpacity)); + mTextCache = std::shared_ptr(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment)); }else{ - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), 0, 0, (mColor >> 8 << 8) | mOpacity)); + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment)); } } diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index a6cb7ff89..c01641475 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -386,6 +386,27 @@ Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, i //TextCache //============================================================================================================= +float Font::getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment) +{ + switch(alignment) + { + case ALIGN_LEFT: + return 0; + case ALIGN_CENTER: + { + unsigned int endChar = text.find('\n', charStart); + return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; + } + case ALIGN_RIGHT: + { + unsigned int endChar = text.find('\n', charStart); + return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); + } + default: + return 0; + } +} + TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) { if(!mTextureID) @@ -394,50 +415,28 @@ TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, return NULL; } - // todo - - - - return NULL; -} - -TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) -{ - if(!mTextureID) - { - LOG(LogError) << "Error - tried to build TextCache with Font that has no texture loaded!"; - return NULL; - } - - const int triCount = text.length() * 2; - const int vertCount = triCount * 3; + const unsigned int vertCount = text.length() * 2 * 3; // 2 triangles of 3 vertices per character TextCache::Vertex* vert = new TextCache::Vertex[vertCount]; GLubyte* colors = new GLubyte[vertCount * 4]; - // all glyph sizes/texture offsets are in pixels, - // so the only rounding we have to worry about is the offset - offsetX = round(offsetX); - offsetY = round(offsetY); - //texture atlas width/height float tw = (float)mTextureWidth; float th = (float)mTextureHeight; - float x = offsetX; - + float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); + float yTop = mCharData['S'].bearingY * mFontScale; - float yBot = getHeight(); - float y = offsetY + (yBot + yTop)/2.0f; + float yBot = getHeight(lineSpacing); + float y = offset[1] + (yBot + yTop)/2.0f; - int charNum = 0; - for(int i = 0; i < vertCount; i += 6, charNum++) + for(unsigned int i = 0, charNum = 0; i < vertCount; i += 6, charNum++) { unsigned char letter = text[charNum]; if(letter == '\n') { - y += (float)getHeight(); - x = offsetX; + y += getHeight(lineSpacing); + x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, charNum+1, xLen, alignment) : 0); memset(&vert[i], 0, 6 * sizeof(TextCache::Vertex)); continue; } @@ -470,6 +469,13 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of vert[i + 5].tex[0] = vert[i + 1].tex.x(); vert[i + 5].tex[1] = vert[i + 0].tex.y(); + // round to fix some weird "cut off" text bugs + for(unsigned int j = i; j < i + 6; j++) + { + vert[j].pos[0] = round(vert[j].pos[0]); + vert[j].pos[1] = round(vert[j].pos[1]); + } + x += mCharData[letter].advX * mFontScale; } @@ -481,6 +487,11 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of return cache; } +TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) +{ + return buildTextCache(text, Eigen::Vector2f(offsetX, offsetY), color, 0.0f); +} + TextCache::TextCache(int verts, Vertex* v, GLubyte* c, const CacheMetrics& m) : vertCount(verts), verts(v), colors(c), metrics(m) { } diff --git a/src/resources/Font.h b/src/resources/Font.h index edb68f8db..070322f5d 100644 --- a/src/resources/Font.h +++ b/src/resources/Font.h @@ -99,6 +99,8 @@ private: int mSize; const std::string mPath; + float getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment); + friend TextCache; }; diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 6aa464c6d..82bbabb93 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -107,7 +107,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); mDescription.setSize(mDescContainer.getSize().x(), 0); - mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR | FORCE_UPPERCASE); + mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR | FORCE_UPPERCASE | ALIGNMENT); } void DetailedGameListView::initMDLabels() From 7e5f161271f3152f76a524ade3ab8ad87dab1139 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 13 May 2014 13:49:52 -0500 Subject: [PATCH 288/386] Approximate size for MenuComponents that exceed max height so that scrolling still fits within row height multiples. --- src/components/MenuComponent.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 9855410d5..6094547c4 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -46,9 +46,21 @@ float MenuComponent::getButtonGridHeight() const void MenuComponent::updateSize() { + const float maxHeight = Renderer::getScreenHeight() * 0.7f; float height = TITLE_HEIGHT + mList->getTotalRowHeight() + getButtonGridHeight() + 2; - if(height > Renderer::getScreenHeight() * 0.7f) - height = Renderer::getScreenHeight() * 0.7f; + if(height > maxHeight) + { + height = TITLE_HEIGHT + getButtonGridHeight() + 2; + int i = 0; + while(height < maxHeight && i < mList->size()) + { + float rowHeight = mList->getRowHeight(i); + if(height + rowHeight < maxHeight) + height += rowHeight; + i++; + } + height += 2; + } setSize(Renderer::getScreenWidth() * 0.5f, height); } From fe7f7f983b9637a9561b574d873fa03d9eeee7fe Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 17:01:40 -0500 Subject: [PATCH 289/386] Added tag to text elements. Accessable with TextComponent::setLineSpacing(float spacing) in C++. --- THEMES.md | 1 + src/ThemeData.cpp | 3 ++- src/ThemeData.h | 1 + src/components/TextComponent.cpp | 23 +++++++++++++++++---- src/components/TextComponent.h | 4 +++- src/guis/GuiScraperStart.cpp | 2 +- src/views/gamelist/DetailedGameListView.cpp | 2 +- 7 files changed, 28 insertions(+), 8 deletions(-) diff --git a/THEMES.md b/THEMES.md index 1394950d9..cbcf06bfb 100644 --- a/THEMES.md +++ b/THEMES.md @@ -421,6 +421,7 @@ Can be created as an extra. * `alignment` - type: STRING. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. +* `lineSpacing` - type: FLOAT. Controls the space between lines. Default is 1.5. #### textlist diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index e3b7ede1a..bf16d6765 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -40,7 +40,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("fontPath", PATH) ("fontSize", FLOAT) ("alignment", STRING) - ("forceUppercase", BOOLEAN))) + ("forceUppercase", BOOLEAN) + ("lineSpacing", FLOAT))) ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) diff --git a/src/ThemeData.h b/src/ThemeData.h index b9653d9ba..eea92e67f 100644 --- a/src/ThemeData.h +++ b/src/ThemeData.h @@ -36,6 +36,7 @@ namespace ThemeFlags ALIGNMENT = 256, TEXT = 512, FORCE_UPPERCASE = 1024, + LINE_SPACING = 2048, ALL = 0xFFFFFFFF }; diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index 08a711f74..a4d968b6d 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -7,13 +7,13 @@ #include "../Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT) + mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f) { } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), - mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align) + mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f) { setFont(font); setColor(color); @@ -154,9 +154,9 @@ void TextComponent::onTextChanged() text.append(abbrev); - mTextCache = std::shared_ptr(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment)); + mTextCache = std::shared_ptr(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment, mLineSpacing)); }else{ - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment)); + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment, mLineSpacing)); } } @@ -168,6 +168,18 @@ void TextComponent::onColorChanged() } } +void TextComponent::setAlignment(Alignment align) +{ + mAlignment = align; + onTextChanged(); +} + +void TextComponent::setLineSpacing(float spacing) +{ + mLineSpacing = spacing; + onTextChanged(); +} + void TextComponent::setValue(const std::string& value) { setText(value); @@ -210,5 +222,8 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) setUppercase(elem->get("forceUppercase")); + if(properties & LINE_SPACING && elem->has("lineSpacing")) + setLineSpacing(elem->get("lineSpacing")); + setFont(Font::getFromTheme(elem, properties, mFont)); } diff --git a/src/components/TextComponent.h b/src/components/TextComponent.h index 52dfcb2a0..6d288c5e6 100644 --- a/src/components/TextComponent.h +++ b/src/components/TextComponent.h @@ -23,7 +23,8 @@ public: void onSizeChanged() override; void setText(const std::string& text); void setColor(unsigned int color); - inline void setAlignment(Alignment align) { mAlignment = align; } + void setAlignment(Alignment align); + void setLineSpacing(float spacing); void render(const Eigen::Affine3f& parentTrans) override; @@ -50,6 +51,7 @@ private: std::string mText; std::shared_ptr mTextCache; Alignment mAlignment; + float mLineSpacing; }; #endif diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 8ea805472..fc7afd651 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -44,7 +44,7 @@ void GuiScraperStart::pressedStart() if((*it)->getPlatformId() == PlatformIds::PLATFORM_UNKNOWN) { mWindow->pushGui(new GuiMsgBox(mWindow, - "Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?", + strToUpper("Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?"), "YES", std::bind(&GuiScraperStart::start, this), "NO", nullptr)); return; diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index 82bbabb93..a87492a7c 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -107,7 +107,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); mDescription.setSize(mDescContainer.getSize().x(), 0); - mDescription.applyTheme(theme, getName(), "md_description", FONT_PATH | FONT_SIZE | COLOR | FORCE_UPPERCASE | ALIGNMENT); + mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT)); } void DetailedGameListView::initMDLabels() From 330f45d5fe84db5c989e8785013f2a9c690685cd Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 17:24:01 -0500 Subject: [PATCH 290/386] Added ZX Spectrum to PlatformIds.h and TheGamesDB scraper. --- src/PlatformId.h | 3 ++- src/scrapers/GamesDBScraper.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/PlatformId.h b/src/PlatformId.h index 40483dbb3..ca22fe511 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -49,7 +49,8 @@ namespace PlatformIds PLAYSTATION_PORTABLE = 41, SUPER_NINTENDO = 42, TURBOGRAFX_16 = 43, + ZX_SPECTRUM = 44, - PLATFORM_COUNT = 44 + PLATFORM_COUNT = 45 }; } diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 83a04d3f2..10be75df4 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -52,7 +52,8 @@ const std::map gamesdb_platformid_map = boost::assign:: (PLAYSTATION_VITA, "Sony Playstation Vita") (PLAYSTATION_PORTABLE, "Sony PSP") (SUPER_NINTENDO, "Super Nintendo (SNES)") - (TURBOGRAFX_16, "TurboGrafx 16"); + (TURBOGRAFX_16, "TurboGrafx 16") + (ZX_SPECTRUM, "Sinclair ZX Spectrum"); std::unique_ptr GamesDBScraper::getResultsAsync(const ScraperSearchParams& params) From 654b93dd94a8560ed2f4b8e7b323889e88fa9571 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 17:47:28 -0500 Subject: [PATCH 291/386] Scraper GUIs open faster. The ScraperSearchComponent uses a custom font size for metadata/descriptions. This was causing a short hang when it got resized multiple times (because it would rasterize like 4 fonts unnecessarily). So, I added an "update" parameter to ComponentGrid::setRowHeightPerc/setColWidthPerc. This can be used to only cause *one* resize/reposition "event" when setting multiple cell sizes (as is typical) by passing "false" as the last argument and then using ComponentGrid::setSize after setting all of the cell sizes. --- src/components/ComponentGrid.cpp | 12 ++++++++---- src/components/ComponentGrid.h | 4 ++-- src/components/ScraperSearchComponent.h | 1 + src/guis/GuiGameScraper.cpp | 12 ++++++------ src/guis/GuiScraperMulti.cpp | 12 ++++++------ 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index 5a015daac..18bff6bab 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -62,20 +62,24 @@ float ComponentGrid::getRowHeight(int row) return (freeHeightPerc * mSize.y()) / between; } -void ComponentGrid::setColWidthPerc(int col, float width) +void ComponentGrid::setColWidthPerc(int col, float width, bool update) { assert(width >= 0 && width <= 1); assert(col >= 0 && col < mGridSize.x()); mColWidths[col] = width; - onSizeChanged(); + + if(update) + onSizeChanged(); } -void ComponentGrid::setRowHeightPerc(int row, float height) +void ComponentGrid::setRowHeightPerc(int row, float height, bool update) { assert(height >= 0 && height <= 1); assert(row >= 0 && row < mGridSize.y()); mRowHeights[row] = height; - onSizeChanged(); + + if(update) + onSizeChanged(); } void ComponentGrid::setEntry(const std::shared_ptr& comp, const Eigen::Vector2i& pos, bool canFocus, bool resize, const Eigen::Vector2i& size, diff --git a/src/components/ComponentGrid.h b/src/components/ComponentGrid.h index 0cd756cce..68a45ab1b 100644 --- a/src/components/ComponentGrid.h +++ b/src/components/ComponentGrid.h @@ -46,8 +46,8 @@ public: float getColWidth(int col); float getRowHeight(int row); - void setColWidthPerc(int col, float width); - void setRowHeightPerc(int row, float height); + void setColWidthPerc(int col, float width, bool update = true); // if update is false, will not call an onSizeChanged() which triggers a (potentially costly) repositioning + resizing of every element + void setRowHeightPerc(int row, float height, bool update = true); // if update is false, will not call an onSizeChanged() which triggers a (potentially costly) repositioning + resizing of every element bool moveCursor(Eigen::Vector2i dir); void setCursorTo(const std::shared_ptr& comp); diff --git a/src/components/ScraperSearchComponent.h b/src/components/ScraperSearchComponent.h index 612bb1e85..80e339b82 100644 --- a/src/components/ScraperSearchComponent.h +++ b/src/components/ScraperSearchComponent.h @@ -32,6 +32,7 @@ public: void search(const ScraperSearchParams& params); void openInputScreen(ScraperSearchParams& from); void stop(); + inline SearchType getSearchType() const { return mSearchType; } // Metadata assets will be resolved before calling the accept callback (e.g. result.mdl's "image" is automatically downloaded and properly set). inline void setAcceptCallback(const std::function& acceptCallback) { mAcceptCallback = acceptCallback; } diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 6430ebf6f..6307fad8d 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -84,13 +84,13 @@ void GuiGameScraper::onSizeChanged() { mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mGrid.setRowHeightPerc(0, 0.04f, false); + mGrid.setRowHeightPerc(1, mGameName->getFont()->getLetterHeight() / mSize.y(), false); // game name + mGrid.setRowHeightPerc(2, 0.04f, false); + mGrid.setRowHeightPerc(3, mSystemName->getFont()->getLetterHeight() / mSize.y(), false); // system name + mGrid.setRowHeightPerc(4, 0.04f, false); + mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y(), false); // buttons mGrid.setSize(mSize); - mGrid.setRowHeightPerc(0, 0.04f); - mGrid.setRowHeightPerc(1, mGameName->getFont()->getLetterHeight() / mSize.y()); // game name - mGrid.setRowHeightPerc(2, 0.04f); - mGrid.setRowHeightPerc(3, mSystemName->getFont()->getLetterHeight() / mSize.y()); // system name - mGrid.setRowHeightPerc(4, 0.04f); - mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y()); // buttons } bool GuiGameScraper::input(InputConfig* config, Input input) diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index 4cc13e9fe..a5b1a879f 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -40,7 +40,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queuesetAcceptCallback(std::bind(&GuiScraperMulti::acceptResult, this, std::placeholders::_1)); mSearchComp->setSkipCallback(std::bind(&GuiScraperMulti::skip, this)); mSearchComp->setCancelCallback(std::bind(&GuiScraperMulti::finish, this)); - mGrid.setEntry(mSearchComp, Vector2i(0, 3), approveResults, true); + mGrid.setEntry(mSearchComp, Vector2i(0, 3), mSearchComp->getSearchType() != ScraperSearchComponent::ALWAYS_ACCEPT_FIRST_RESULT, true); std::vector< std::shared_ptr > buttons; @@ -78,12 +78,12 @@ GuiScraperMulti::~GuiScraperMulti() void GuiScraperMulti::onSizeChanged() { mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); - mGrid.setSize(mSize); - mGrid.setRowHeightPerc(0, mTitle->getFont()->getLetterHeight() * 1.9725f / mGrid.getSize().y()); - mGrid.setRowHeightPerc(1, (mSystem->getFont()->getLetterHeight() + 2) / mGrid.getSize().y()); - mGrid.setRowHeightPerc(2, mSubtitle->getFont()->getHeight() * 1.75f / mGrid.getSize().y()); - mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mGrid.getSize().y()); + mGrid.setRowHeightPerc(0, mTitle->getFont()->getLetterHeight() * 1.9725f / mSize.y(), false); + mGrid.setRowHeightPerc(1, (mSystem->getFont()->getLetterHeight() + 2) / mSize.y(), false); + mGrid.setRowHeightPerc(2, mSubtitle->getFont()->getHeight() * 1.75f / mSize.y(), false); + mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mSize.y(), false); + mGrid.setSize(mSize); } void GuiScraperMulti::doNextSearch() From fd2281afff58b392b67650b1d99b69ab80f6302c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 18:02:32 -0500 Subject: [PATCH 292/386] Fix renderer not deinitializing when no systems are found (affects RPi). --- src/main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index ecdf69fa1..07f70635a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -165,6 +165,8 @@ int main(int argc, char* argv[]) if(!SystemData::loadConfig()) { LOG(LogError) << "Error parsing system config file!"; + if(!scrape_cmdline) + Renderer::deinit(); return 1; } @@ -172,6 +174,8 @@ int main(int argc, char* argv[]) if(SystemData::sSystemVector.size() == 0) { LOG(LogError) << "No systems found! Does at least one system have a game present? (check that extensions match!)\n(Also, make sure you've updated your es_systems.cfg for XML!)"; + if(!scrape_cmdline) + Renderer::deinit(); return 1; } From 91561480b3ea17e01cfc50a39cb6655de406b5ab Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 18:27:22 -0500 Subject: [PATCH 293/386] Added tag to textlist element. --- THEMES.md | 3 ++- src/ThemeData.cpp | 3 ++- src/components/TextListComponent.h | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/THEMES.md b/THEMES.md index cbcf06bfb..323c232a8 100644 --- a/THEMES.md +++ b/THEMES.md @@ -421,7 +421,7 @@ Can be created as an extra. * `alignment` - type: STRING. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. -* `lineSpacing` - type: FLOAT. Controls the space between lines. Default is 1.5. +* `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. #### textlist @@ -444,6 +444,7 @@ Can be created as an extra. * `horizontalMargin` - type: FLOAT. - Horizontal offset for text from the alignment point. If `alignment` is "left", offsets the text to the right. If `alignment` is "right", offsets text to the left. No effect if `alignment` is "center". Given as a percentage of the element's parent's width (same unit as `size`'s X value). * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. +* `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. #### ninepatch diff --git a/src/ThemeData.cpp b/src/ThemeData.cpp index bf16d6765..775bb6a6d 100644 --- a/src/ThemeData.cpp +++ b/src/ThemeData.cpp @@ -54,7 +54,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("scrollSound", PATH) ("alignment", STRING) ("horizontalMargin", FLOAT) - ("forceUppercase", BOOLEAN))) + ("forceUppercase", BOOLEAN) + ("lineSpacing", FLOAT))) ("container", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR))) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index b896c1aff..34e2c8f2d 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -77,6 +77,7 @@ public: inline void setScrollSound(const std::shared_ptr& sound) { mScrollSound = sound; } inline void setColor(unsigned int id, unsigned int color) { mColors[id] = color; } inline void setSound(const std::shared_ptr& sound) { mScrollSound = sound; } + inline void setLineSpacing(float lineSpacing) { mLineSpacing = lineSpacing; } protected: virtual void onScroll(int amt) { if(mScrollSound) mScrollSound->play(); } @@ -97,6 +98,7 @@ private: std::shared_ptr mFont; bool mUppercase; + float mLineSpacing; unsigned int mSelectorColor; unsigned int mSelectedColor; std::shared_ptr mScrollSound; @@ -116,6 +118,7 @@ TextListComponent::TextListComponent(Window* window) : mFont = Font::get(FONT_SIZE_MEDIUM); mUppercase = false; + mLineSpacing = 1.5f; mSelectorColor = 0x000000FF; mSelectedColor = 0; mColors[0] = 0x0000FFFF; @@ -132,7 +135,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(size() == 0) return; - const float entrySize = font->getHeight() + 5; + const float entrySize = font->getHeight(mLineSpacing); int startEntry = 0; @@ -199,7 +202,6 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) offset[0] -= mHorizontalMargin; if(offset[0] < 0) offset[0] = 0; - break; } @@ -361,5 +363,8 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c } if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) - setUppercase(elem->get("forceUppercase")); + setUppercase(elem->get("forceUppercase")); + + if(properties & LINE_SPACING && elem->has("lineSpacing")) + setLineSpacing(elem->get("lineSpacing")); } From f32e8fff5aad1279797e6a56944e7b4797ebf2cb Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 19:06:40 -0500 Subject: [PATCH 294/386] Fixed getCleanName(path). --- src/FileData.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/FileData.cpp b/src/FileData.cpp index 0c7c652d2..97c39f269 100644 --- a/src/FileData.cpp +++ b/src/FileData.cpp @@ -20,11 +20,12 @@ std::string getCleanFileName(const fs::path& path) done = true; for(int i = 0; i < NUM_TO_REPLACE; i++) { - start = ret.find(toReplace[i*2]); - end = ret.find(toReplace[i*2+1], start != std::string::npos ? start + 1 : 0); + end = ret.find_first_of(toReplace[i*2+1]); + start = ret.find_last_of(toReplace[i*2], end); + if(start != std::string::npos && end != std::string::npos) { - ret.replace(start, end, ""); + ret.erase(start, end - start + 1); done = false; } } From f8355ef8b367f9dff3c2dd83e9781cde7c678891 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 19:20:18 -0500 Subject: [PATCH 295/386] Merge identical help names for dpad-mapped actions. --- src/Window.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index e843eca34..7a7b3be59 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -245,12 +245,36 @@ void Window::setHelpPrompts(const std::vector& prompts) std::vector addPrompts; - std::map seenMap; + std::map inputSeenMap; + std::map mappedToSeenMap; for(auto it = prompts.begin(); it != prompts.end(); it++) { // only add it if the same icon hasn't already been added - if(seenMap.insert(std::make_pair(it->first, true)).second) - addPrompts.push_back(*it); + if(inputSeenMap.insert(std::make_pair(it->first, true)).second) + { + // this symbol hasn't been seen yet, what about the action name? + auto mappedTo = mappedToSeenMap.find(it->second); + if(mappedTo != mappedToSeenMap.end()) + { + // yes, it has! + + // can we combine? (dpad only) + if((it->first == "up/down" && addPrompts.at(mappedTo->second).first == "left/right") || + (it->first == "left/right" && addPrompts.at(mappedTo->second).first == "up/down")) + { + // yes! + addPrompts.at(mappedTo->second).first = "up/down/left/right"; + // don't need to add this to addPrompts since we just merged + }else{ + // no, we can't combine! + addPrompts.push_back(*it); + } + }else{ + // no, it hasn't! + mappedToSeenMap.insert(std::pair(it->second, addPrompts.size())); + addPrompts.push_back(*it); + } + } } // sort prompts so it goes [dpad_all] [dpad_u/d] [dpad_l/r] [a/b/x/y/l/r] [start/select] From b8ebbc84bbe12e86851757edb0aa225c91b7e5a5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 20:05:34 -0500 Subject: [PATCH 296/386] Added a prompt when you try to close GuiMetaDataEd with unsaved changes. --- src/MetaData.cpp | 26 +++++++++++++------------- src/guis/GuiMetaDataEd.cpp | 32 +++++++++++++++++++++++++++++--- src/guis/GuiMetaDataEd.h | 1 + 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/MetaData.cpp b/src/MetaData.cpp index 6b742af12..f812b7be9 100644 --- a/src/MetaData.cpp +++ b/src/MetaData.cpp @@ -3,19 +3,19 @@ #include "Log.h" MetaDataDecl gameDecls[] = { - // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd - {"name", MD_STRING, "", false, "name", "enter game name"}, - {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, - {"image", MD_IMAGE_PATH, "", false, "image", "enter path to image"}, - {"thumbnail", MD_IMAGE_PATH, "", false, "thumbnail", "enter path to thumbnail"}, - {"rating", MD_RATING, "0", false, "rating", "enter rating"}, - {"releasedate", MD_DATE, "0", false, "release date", "enter release date"}, - {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, - {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, - {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, - {"players", MD_INT, "1", false, "players", "enter number of players"}, - {"playcount", MD_INT, "0", true, "play count", "enter number of times played"}, - {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date"} + // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd + {"name", MD_STRING, "", false, "name", "enter game name"}, + {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, + {"image", MD_IMAGE_PATH, "", false, "image", "enter path to image"}, + {"thumbnail", MD_IMAGE_PATH, "", false, "thumbnail", "enter path to thumbnail"}, + {"rating", MD_RATING, "0", false, "rating", "enter rating"}, + {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, + {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, + {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, + {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, + {"players", MD_INT, "1", false, "players", "enter number of players"}, + {"playcount", MD_INT, "0", true, "play count", "enter number of times played"}, + {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date"} }; const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 36d2d3c28..1fe748b3b 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -195,15 +195,41 @@ void GuiMetaDataEd::fetchDone(const ScraperSearchResult& result) } } +void GuiMetaDataEd::close() +{ + // find out if the user made any changes + bool dirty = false; + for(unsigned int i = 0; i < mEditors.size(); i++) + { + const std::string& key = mMetaDataDecl.at(i).key; + if(mMetaData->get(key) != mEditors.at(i)->getValue()) + { + dirty = true; + break; + } + } + + if(dirty) + { + // changes were made, ask if the user wants to save them + mWindow->pushGui(new GuiMsgBox(mWindow, + "SAVE CHANGES?", + "YES", [&] { save(); delete this; }, + "NO", [&] { delete this; } + )); + }else{ + delete this; + } +} bool GuiMetaDataEd::input(InputConfig* config, Input input) { if(GuiComponent::input(config, input)) return true; - if(input.value != 0 && config->isMappedTo("b", input)) + if(input.value != 0 && (config->isMappedTo("b", input) || config->isMappedTo("start", input))) { - delete this; + close(); return true; } @@ -213,7 +239,7 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) std::vector GuiMetaDataEd::getHelpPrompts() { std::vector prompts = mGrid.getHelpPrompts(); - prompts.push_back(HelpPrompt("b", "discard")); + prompts.push_back(HelpPrompt("b", "close")); prompts.push_back(HelpPrompt("start", "close")); return prompts; } diff --git a/src/guis/GuiMetaDataEd.h b/src/guis/GuiMetaDataEd.h index 3b86772ab..ee1aca5c7 100644 --- a/src/guis/GuiMetaDataEd.h +++ b/src/guis/GuiMetaDataEd.h @@ -21,6 +21,7 @@ private: void save(); void fetch(); void fetchDone(const ScraperSearchResult& result); + void close(); NinePatchComponent mBackground; ComponentGrid mGrid; From 4f33a3a963eb2d41e5babe8b47f458bd26d5c58e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 20:58:16 -0500 Subject: [PATCH 297/386] ViewController renders help prompts early so they appear "below" the fade. The "fade" transition style can now be "cancelled" out of like the slide animations. --- src/GuiComponent.cpp | 29 ++++++++++++++-------- src/GuiComponent.h | 5 ++-- src/Window.cpp | 11 ++++++++- src/Window.h | 2 ++ src/components/HelpComponent.cpp | 10 ++++++++ src/components/HelpComponent.h | 1 + src/views/ViewController.cpp | 42 +++++++++++++++++++++----------- 7 files changed, 73 insertions(+), 27 deletions(-) diff --git a/src/GuiComponent.cpp b/src/GuiComponent.cpp index 75f6d7e08..8ef8aa381 100644 --- a/src/GuiComponent.cpp +++ b/src/GuiComponent.cpp @@ -40,16 +40,7 @@ void GuiComponent::update(int deltaTime) { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) { - AnimationController* anim = mAnimationMap[i]; - if(anim) - { - bool done = anim->update(deltaTime); - if(done) - { - mAnimationMap[i] = NULL; - delete anim; - } - } + advanceAnimation(i, deltaTime); } for(unsigned int i = 0; i < getChildCount(); i++) @@ -257,6 +248,24 @@ bool GuiComponent::finishAnimation(unsigned char slot) } } +bool GuiComponent::advanceAnimation(unsigned char slot, unsigned int time) +{ + assert(slot < MAX_ANIMATIONS); + AnimationController* anim = mAnimationMap[slot]; + if(anim) + { + bool done = anim->update(time); + if(done) + { + mAnimationMap[slot] = NULL; + delete anim; + } + return true; + }else{ + return false; + } +} + void GuiComponent::stopAllAnimations() { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) diff --git a/src/GuiComponent.h b/src/GuiComponent.h index 39b01c282..4ccfc6d03 100644 --- a/src/GuiComponent.h +++ b/src/GuiComponent.h @@ -60,8 +60,9 @@ public: int getAnimationTime(unsigned char slot) const; void setAnimation(Animation* animation, int delay = 0, std::function finishedCallback = nullptr, bool reverse = false, unsigned char slot = 0); bool stopAnimation(unsigned char slot); - bool cancelAnimation(unsigned char slot); // like stopAnimation, but doesn't call finishedCallback - only removes the animation, leaving things in their current state - bool finishAnimation(unsigned char slot); // calls update(1.f) and finishedCallback, then deletes the animation - basically skips to the end + bool cancelAnimation(unsigned char slot); // Like stopAnimation, but doesn't call finishedCallback - only removes the animation, leaving things in their current state. Returns true if successful (an animation was in this slot). + bool finishAnimation(unsigned char slot); // Calls update(1.f) and finishedCallback, then deletes the animation - basically skips to the end. Returns true if successful (an animation was in this slot). + bool advanceAnimation(unsigned char slot, unsigned int time); // Returns true if successful (an animation was in this slot). void stopAllAnimations(); void cancelAllAnimations(); diff --git a/src/Window.cpp b/src/Window.cpp index 7a7b3be59..13f82568d 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -175,6 +175,8 @@ void Window::render() { Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + mRenderedHelpPrompts = false; + // draw only bottom and top of GuiStack (if they are different) if(mGuiStack.size()) { @@ -199,7 +201,8 @@ void Window::render() mBackgroundOverlay->render(transform); }*/ - mHelp->render(transform); + if(!mRenderedHelpPrompts) + mHelp->render(transform); if(Settings::getInstance()->getBool("DrawFramerate") && mFrameDataText) { @@ -239,6 +242,12 @@ void Window::renderLoadingScreen() Renderer::swapBuffers(); } +void Window::renderHelpPromptsEarly() +{ + mHelp->render(Eigen::Affine3f::Identity()); + mRenderedHelpPrompts = true; +} + void Window::setHelpPrompts(const std::vector& prompts) { mHelp->clearPrompts(); diff --git a/src/Window.h b/src/Window.h index 5c87e9e75..752ee66fd 100644 --- a/src/Window.h +++ b/src/Window.h @@ -37,6 +37,7 @@ public: void renderLoadingScreen(); + void renderHelpPromptsEarly(); // used by ViewController to render HelpPrompts before a fade void setHelpPrompts(const std::vector& prompts); private: @@ -57,6 +58,7 @@ private: bool mNormalizeNextUpdate; bool mAllowSleep; + bool mRenderedHelpPrompts; }; #endif diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 255f32f85..984652887 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -115,6 +115,16 @@ std::shared_ptr HelpComponent::getIconTexture(const char* name) return tex; } +void HelpComponent::setOpacity(unsigned char opacity) +{ + GuiComponent::setOpacity(opacity); + + for(unsigned int i = 0; i < mGrid->getChildCount(); i++) + { + mGrid->getChild(i)->setOpacity(opacity); + } +} + void HelpComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); diff --git a/src/components/HelpComponent.h b/src/components/HelpComponent.h index 9cc76082f..7a3a6ef06 100644 --- a/src/components/HelpComponent.h +++ b/src/components/HelpComponent.h @@ -15,6 +15,7 @@ public: void setPrompts(const std::vector& prompts); void render(const Eigen::Affine3f& parent) override; + void setOpacity(unsigned char opacity) override; private: std::shared_ptr getIconTexture(const char* name); diff --git a/src/views/ViewController.cpp b/src/views/ViewController.cpp index ab456f714..6eb81900e 100644 --- a/src/views/ViewController.cpp +++ b/src/views/ViewController.cpp @@ -44,7 +44,6 @@ void ViewController::goToSystemView(SystemData* system) systemList->goToSystem(system, false); mCurrentView = systemList; - updateHelpPrompts(); playViewTransition(); } @@ -81,7 +80,6 @@ void ViewController::goToGameList(SystemData* system) mState.system = system; mCurrentView = getGameListView(system); - updateHelpPrompts(); playViewTransition(); } @@ -93,23 +91,36 @@ void ViewController::playViewTransition() if(Settings::getInstance()->getString("TransitionStyle") == "fade") { - // fade animation - auto fadeAnim = [this, target](float t) { - float fadeStart = lerp(0, 1, t / 0.3f); - float fadeEnd = lerp(1, 0, (t - 0.7f) / 0.3f); + // fade + // stop whatever's currently playing, leaving mFadeOpacity wherever it is + cancelAnimation(0); - if(t <= 0.3f) - { - mFadeOpacity = fadeStart; - }else{ - this->mCamera.translation() = -target; - mFadeOpacity = fadeEnd; - } + auto fadeFunc = [this](float t) { + mFadeOpacity = lerp(0, 1, t); }; - setAnimation(new LambdaAnimation(fadeAnim, 800)); + + const static int FADE_DURATION = 240; // fade in/out time + const static int FADE_WAIT = 320; // time to wait between in/out + setAnimation(new LambdaAnimation(fadeFunc, FADE_DURATION), 0, [this, fadeFunc, target] { + this->mCamera.translation() = -target; + updateHelpPrompts(); + setAnimation(new LambdaAnimation(fadeFunc, FADE_DURATION), FADE_WAIT, nullptr, true); + }); + + // fast-forward animation if we're partway faded + if(target == -mCamera.translation()) + { + // not changing screens, so cancel the first half entirely + advanceAnimation(0, FADE_DURATION); + advanceAnimation(0, FADE_WAIT); + advanceAnimation(0, FADE_DURATION - (int)(mFadeOpacity * FADE_DURATION)); + }else{ + advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); + } }else{ // slide setAnimation(new MoveCameraAnimation(mCamera, target)); + updateHelpPrompts(); // update help prompts immediately } } @@ -267,6 +278,9 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) it->second->render(trans); } + if(mWindow->peekGui() == this) + mWindow->renderHelpPromptsEarly(); + // fade out if(mFadeOpacity) { From 0743828b7729fda87e1cc1b02007717e4ea433d9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 14 May 2014 21:31:26 -0500 Subject: [PATCH 298/386] Added toggle for left/right changing system. Analog controller users everywhere rejoice! --- src/Settings.cpp | 1 + src/guis/GuiMenu.cpp | 6 ++++++ src/views/gamelist/BasicGameListView.cpp | 5 ++++- src/views/gamelist/ISimpleGameListView.cpp | 19 +++++++++++++------ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/Settings.cpp b/src/Settings.cpp index b3d36298b..c82cf72df 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -35,6 +35,7 @@ void Settings::setDefaults() mBoolMap["ScrapeRatings"] = true; mBoolMap["IgnoreGamelist"] = false; mBoolMap["ParseGamelistOnly"] = false; + mBoolMap["QuickSystemSelect"] = true; mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 7a1089be8..3599580f2 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -111,6 +111,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("ON-SCREEN HELP", show_help); s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + // quick system select (left/right in game list view) + auto quick_sys_select = std::make_shared(mWindow); + quick_sys_select->setState(Settings::getInstance()->getBool("QuickSystemSelect")); + s->addWithLabel("QUICK SYSTEM SELECT", quick_sys_select); + s->addSaveFunc([quick_sys_select] { Settings::getInstance()->setBool("QuickSystemSelect", quick_sys_select->getState()); }); + // transition style auto transition_style = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); std::vector transitions; diff --git a/src/views/gamelist/BasicGameListView.cpp b/src/views/gamelist/BasicGameListView.cpp index 75bf2b8c5..a45916614 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/src/views/gamelist/BasicGameListView.cpp @@ -4,6 +4,7 @@ #include "../../Window.h" #include "../../ThemeData.h" #include "../../SystemData.h" +#include "../../Settings.h" BasicGameListView::BasicGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mList(window) @@ -68,7 +69,9 @@ void BasicGameListView::launch(FileData* game) std::vector BasicGameListView::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("left/right", "system")); + + if(Settings::getInstance()->getBool("QuickSystemSelect")) + prompts.push_back(HelpPrompt("left/right", "system")); prompts.push_back(HelpPrompt("up/down", "choose")); prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/src/views/gamelist/ISimpleGameListView.cpp index d6d5719eb..974ab459e 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/src/views/gamelist/ISimpleGameListView.cpp @@ -3,6 +3,7 @@ #include "../../Window.h" #include "../ViewController.h" #include "../../Sound.h" +#include "../../Settings.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window), mThemeExtras(window) @@ -87,14 +88,20 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) return true; }else if(config->isMappedTo("right", input)) { - onFocusLost(); - mWindow->getViewController()->goToNextGameList(); - return true; + if(Settings::getInstance()->getBool("QuickSystemSelect")) + { + onFocusLost(); + mWindow->getViewController()->goToNextGameList(); + return true; + } }else if(config->isMappedTo("left", input)) { - onFocusLost(); - mWindow->getViewController()->goToPrevGameList(); - return true; + if(Settings::getInstance()->getBool("QuickSystemSelect")) + { + onFocusLost(); + mWindow->getViewController()->goToPrevGameList(); + return true; + } } } From 90cc0991a3fe24a866c0a614a66e731bee5ea9b9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 15:42:37 -0500 Subject: [PATCH 299/386] Changed "B" to "Back" in the metadata editor. "Start" closes all windows. --- src/guis/GuiGamelistOptions.cpp | 1 - src/guis/GuiMetaDataEd.cpp | 29 ++++++++++++++++++++++------- src/guis/GuiMetaDataEd.h | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/guis/GuiGamelistOptions.cpp b/src/guis/GuiGamelistOptions.cpp index 8beaadc77..f1287e856 100644 --- a/src/guis/GuiGamelistOptions.cpp +++ b/src/guis/GuiGamelistOptions.cpp @@ -54,7 +54,6 @@ void GuiGamelistOptions::openMetaDataEd() mGamelist->onFileChanged(file, FILE_REMOVED); //tell the view delete file; //free it })); - delete this; } bool GuiGamelistOptions::input(InputConfig* config, Input input) diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 1fe748b3b..0d6f00430 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -3,6 +3,7 @@ #include "../Log.h" #include "../components/AsyncReqComponent.h" #include "../Settings.h" +#include "../views/ViewController.h" #include "GuiGameScraper.h" #include "GuiMsgBox.h" #include @@ -195,7 +196,7 @@ void GuiMetaDataEd::fetchDone(const ScraperSearchResult& result) } } -void GuiMetaDataEd::close() +void GuiMetaDataEd::close(bool closeAllWindows) { // find out if the user made any changes bool dirty = false; @@ -209,16 +210,29 @@ void GuiMetaDataEd::close() } } + std::function closeFunc; + if(closeAllWindows) + { + closeFunc = [this] { delete this; }; + }else{ + Window* window = mWindow; + closeFunc = [window, this] { + while(window->peekGui() != window->getViewController()) + delete window->peekGui(); + }; + } + + if(dirty) { // changes were made, ask if the user wants to save them mWindow->pushGui(new GuiMsgBox(mWindow, "SAVE CHANGES?", - "YES", [&] { save(); delete this; }, - "NO", [&] { delete this; } + "YES", [this, closeFunc] { save(); closeFunc(); }, + "NO", closeFunc )); }else{ - delete this; + closeFunc(); } } @@ -227,9 +241,10 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) if(GuiComponent::input(config, input)) return true; - if(input.value != 0 && (config->isMappedTo("b", input) || config->isMappedTo("start", input))) + const bool isStart = config->isMappedTo("start", input); + if(input.value != 0 && (config->isMappedTo("b", input) || isStart)) { - close(); + close(isStart); return true; } @@ -239,7 +254,7 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input) std::vector GuiMetaDataEd::getHelpPrompts() { std::vector prompts = mGrid.getHelpPrompts(); - prompts.push_back(HelpPrompt("b", "close")); + prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("start", "close")); return prompts; } diff --git a/src/guis/GuiMetaDataEd.h b/src/guis/GuiMetaDataEd.h index ee1aca5c7..be9727a4c 100644 --- a/src/guis/GuiMetaDataEd.h +++ b/src/guis/GuiMetaDataEd.h @@ -21,7 +21,7 @@ private: void save(); void fetch(); void fetchDone(const ScraperSearchResult& result); - void close(); + void close(bool closeAllWindows); NinePatchComponent mBackground; ComponentGrid mGrid; From e051b75b4fc19eacd2334404f44f16ddddf2e3a5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 15:58:17 -0500 Subject: [PATCH 300/386] Fix +/- 1px uneven line spacing in textlists. Center selector bar on selected row when selector bar height does not match row height. --- src/components/TextListComponent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/TextListComponent.h b/src/components/TextListComponent.h index 34e2c8f2d..05d569f1d 100644 --- a/src/components/TextListComponent.h +++ b/src/components/TextListComponent.h @@ -135,7 +135,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(size() == 0) return; - const float entrySize = font->getHeight(mLineSpacing); + const float entrySize = round(font->getHeight(mLineSpacing)); int startEntry = 0; @@ -161,7 +161,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(startEntry < listCutoff) { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize, mSize.x(), font->getHeight(), mSelectorColor); + Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize + (entrySize - font->getHeight())/2, mSize.x(), font->getHeight(), mSelectorColor); } // clip to inside margins From 95e1d8c7d8660c495aa99335666c11e7eda37112 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 16:21:33 -0500 Subject: [PATCH 301/386] Changed some help prompts. Added back button to OptionListComponent in single select mode. --- src/components/ComponentGrid.cpp | 6 +++--- src/components/ComponentList.cpp | 2 +- src/components/ImageComponent.cpp | 7 +++++++ src/components/ImageComponent.h | 1 + src/components/OptionListComponent.h | 9 +++++---- src/guis/GuiMenu.cpp | 5 +++-- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/components/ComponentGrid.cpp b/src/components/ComponentGrid.cpp index 18bff6bab..07bc8fd83 100644 --- a/src/components/ComponentGrid.cpp +++ b/src/components/ComponentGrid.cpp @@ -445,11 +445,11 @@ std::vector ComponentGrid::getHelpPrompts() } if(canScrollHoriz && canScrollVert) - prompts.push_back(HelpPrompt("up/down/left/right", "move")); + prompts.push_back(HelpPrompt("up/down/left/right", "choose")); else if(canScrollHoriz) - prompts.push_back(HelpPrompt("left/right", "move")); + prompts.push_back(HelpPrompt("left/right", "choose")); else if(canScrollVert) - prompts.push_back(HelpPrompt("up/down", "move")); + prompts.push_back(HelpPrompt("up/down", "choose")); return prompts; } diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index f5eaeea35..9a2d1c1dd 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -321,7 +321,7 @@ std::vector ComponentList::getHelpPrompts() } if(addMovePrompt) - prompts.push_back(HelpPrompt("up/down", "move")); + prompts.push_back(HelpPrompt("up/down", "choose")); } return prompts; diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index e851739a2..5f33cd718 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -310,3 +310,10 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if(properties & COLOR && elem->has("color")) setColorShift(elem->get("color")); } + +std::vector ImageComponent::getHelpPrompts() +{ + std::vector ret; + ret.push_back(HelpPrompt("a", "select")); + return ret; +} diff --git a/src/components/ImageComponent.h b/src/components/ImageComponent.h index 7ce531d59..a05be6d29 100644 --- a/src/components/ImageComponent.h +++ b/src/components/ImageComponent.h @@ -60,6 +60,7 @@ public: virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + virtual std::vector getHelpPrompts() override; private: Eigen::Vector2f mTargetSize; Eigen::Vector2f mOrigin; diff --git a/src/components/OptionListComponent.h b/src/components/OptionListComponent.h index b20e9e389..903a4e468 100644 --- a/src/components/OptionListComponent.h +++ b/src/components/OptionListComponent.h @@ -82,8 +82,7 @@ private: mMenu.addRow(row, (!mParent->mMultiSelect && it->selected)); } - if(mParent->mMultiSelect) - mMenu.addButton("BACK", "accept", [this] { delete this; }); + mMenu.addButton("BACK", "accept", [this] { delete this; }); mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); addChild(&mMenu); @@ -102,7 +101,9 @@ private: std::vector getHelpPrompts() override { - return mMenu.getHelpPrompts(); + auto prompts = mMenu.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "back")); + return prompts; } }; @@ -274,7 +275,7 @@ private: if(!mMultiSelect) prompts.push_back(HelpPrompt("left/right", "change")); - prompts.push_back(HelpPrompt("a", "change")); + prompts.push_back(HelpPrompt("a", "select")); return prompts; } diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index 3599580f2..df56a96cb 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -260,7 +260,8 @@ bool GuiMenu::input(InputConfig* config, Input input) std::vector GuiMenu::getHelpPrompts() { std::vector prompts; - prompts.push_back(HelpPrompt("up/down", "move")); - prompts.push_back(HelpPrompt("a", "go")); + prompts.push_back(HelpPrompt("up/down", "choose")); + prompts.push_back(HelpPrompt("a", "select")); + prompts.push_back(HelpPrompt("start", "close")); return prompts; } From bfdec378b8561d5711594311d8c629ce1f6dbf2d Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 16:26:11 -0500 Subject: [PATCH 302/386] Fixed rounding in HelpComponent. Floating point is a bitch. --- src/components/HelpComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/HelpComponent.cpp b/src/components/HelpComponent.cpp index 984652887..6cd83710e 100644 --- a/src/components/HelpComponent.cpp +++ b/src/components/HelpComponent.cpp @@ -63,7 +63,7 @@ void HelpComponent::updateGrid() std::vector< std::shared_ptr > labels; float width = 0; - const float height = font->getLetterHeight() * 1.25f; + const float height = round(font->getLetterHeight() * 1.25f); for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) { auto icon = std::make_shared(mWindow); From cf2294380a5ec0657295171a24f2ba9cd1e948a1 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 17:19:25 -0500 Subject: [PATCH 303/386] Fixed some crashes. Corrected "B" vs. "Start" behavior in GuiMetaDataEd (was inverted). --- src/guis/GuiMetaDataEd.cpp | 3 ++- src/guis/GuiMsgBox.cpp | 8 +++++--- src/main.cpp | 3 +++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 0d6f00430..5149bee96 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -130,6 +130,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "SCRAPE", "scrape", std::bind(&GuiMetaDataEd::fetch, this))); buttons.push_back(std::make_shared(mWindow, "SAVE", "save", [&] { save(); delete this; })); + buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); if(mDeleteFunc) { @@ -211,7 +212,7 @@ void GuiMetaDataEd::close(bool closeAllWindows) } std::function closeFunc; - if(closeAllWindows) + if(!closeAllWindows) { closeFunc = [this] { delete this; }; }else{ diff --git a/src/guis/GuiMsgBox.cpp b/src/guis/GuiMsgBox.cpp index 9261ab167..24fb2574e 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/src/guis/GuiMsgBox.cpp @@ -90,10 +90,12 @@ void GuiMsgBox::onSizeChanged() void GuiMsgBox::deleteMeAndCall(const std::function& func) { - if(func) - func(); - + auto funcCopy = func; delete this; + + if(funcCopy) + funcCopy(); + } std::vector GuiMsgBox::getHelpPrompts() diff --git a/src/main.cpp b/src/main.cpp index 07f70635a..06dc8a229 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -273,6 +273,9 @@ int main(int argc, char* argv[]) } window.deinit(); + while(window.peekGui() != window.getViewController()) + delete window.peekGui(); + SystemData::deleteSystems(); LOG(LogInfo) << "EmulationStation cleanly shutting down."; From 2f02ebeada96abe7aded06271a509d57e4064630 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 17:40:58 -0500 Subject: [PATCH 304/386] Fixed crash when gamelist view gets recreated while GuiGamelistOptions is open. Ugly hack to fix it, but it will probably get rewritten in the future anyway. --- src/guis/GuiGamelistOptions.cpp | 20 +++++++++++++------- src/guis/GuiGamelistOptions.h | 5 +++-- src/views/SystemView.cpp | 2 +- src/views/ViewController.h | 6 +++--- src/views/gamelist/IGameListView.cpp | 9 ++------- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/guis/GuiGamelistOptions.cpp b/src/guis/GuiGamelistOptions.cpp index f1287e856..1b18d0c49 100644 --- a/src/guis/GuiGamelistOptions.cpp +++ b/src/guis/GuiGamelistOptions.cpp @@ -1,9 +1,10 @@ #include "GuiGamelistOptions.h" #include "GuiMetaDataEd.h" #include "../views/gamelist/IGameListView.h" +#include "../views/ViewController.h" -GuiGamelistOptions::GuiGamelistOptions(Window* window, IGameListView* gamelist) : GuiComponent(window), - mGamelist(gamelist), +GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), + mSystem(system), mMenu(window, "OPTIONS") { addChild(&mMenu); @@ -33,25 +34,25 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, IGameListView* gamelist) GuiGamelistOptions::~GuiGamelistOptions() { // apply sort - FileData* root = mGamelist->getCursor()->getSystem()->getRootFolder(); + FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); root->sort(*mListSort->getSelected()); // will also recursively sort children // notify that the root folder was sorted - mGamelist->onFileChanged(root, FILE_SORTED); + getGamelist()->onFileChanged(root, FILE_SORTED); } void GuiGamelistOptions::openMetaDataEd() { // open metadata editor - FileData* file = mGamelist->getCursor(); + FileData* file = getGamelist()->getCursor(); ScraperSearchParams p; p.game = file; p.system = file->getSystem(); mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), - std::bind(&IGameListView::onFileChanged, mGamelist, file, FILE_METADATA_CHANGED), [this, file] { + std::bind(&IGameListView::onFileChanged, getGamelist(), file, FILE_METADATA_CHANGED), [this, file] { boost::filesystem::remove(file->getPath()); //actually delete the file on the filesystem file->getParent()->removeChild(file); //unlink it so list repopulations triggered from onFileChanged won't see it - mGamelist->onFileChanged(file, FILE_REMOVED); //tell the view + getGamelist()->onFileChanged(file, FILE_REMOVED); //tell the view delete file; //free it })); } @@ -73,3 +74,8 @@ std::vector GuiGamelistOptions::getHelpPrompts() prompts.push_back(HelpPrompt("b", "close")); return prompts; } + +IGameListView* GuiGamelistOptions::getGamelist() +{ + return mWindow->getViewController()->getGameListView(mSystem).get(); +} diff --git a/src/guis/GuiGamelistOptions.h b/src/guis/GuiGamelistOptions.h index eef60bd7e..fe9b477ba 100644 --- a/src/guis/GuiGamelistOptions.h +++ b/src/guis/GuiGamelistOptions.h @@ -9,7 +9,7 @@ class IGameListView; class GuiGamelistOptions : public GuiComponent { public: - GuiGamelistOptions(Window* window, IGameListView* gamelist); + GuiGamelistOptions(Window* window, SystemData* system); virtual ~GuiGamelistOptions(); virtual bool input(InputConfig* config, Input input) override; @@ -23,5 +23,6 @@ private: typedef OptionListComponent SortList; std::shared_ptr mListSort; - IGameListView* mGamelist; + SystemData* mSystem; + IGameListView* getGamelist(); }; diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index db1a5fa6c..a512683ca 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -19,7 +19,7 @@ SystemView::SystemView(Window* window) : IList(wind setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - mSystemInfo.setSize(mSize.x(), mSystemInfo.getSize().y() * 2.f); + mSystemInfo.setSize(mSize.x(), mSystemInfo.getSize().y() * 1.333f); mSystemInfo.setPosition(0, (mSize.y() + BAND_HEIGHT) / 2); populate(); diff --git a/src/views/ViewController.h b/src/views/ViewController.h index ad7882c8e..1eff1696c 100644 --- a/src/views/ViewController.h +++ b/src/views/ViewController.h @@ -61,12 +61,12 @@ public: virtual std::vector getHelpPrompts() override; + std::shared_ptr getGameListView(SystemData* system); + std::shared_ptr getSystemListView(); + private: void playViewTransition(); int getSystemId(SystemData* system); - - std::shared_ptr getGameListView(SystemData* system); - std::shared_ptr getSystemListView(); std::shared_ptr mCurrentView; std::map< SystemData*, std::shared_ptr > mGameListViews; diff --git a/src/views/gamelist/IGameListView.cpp b/src/views/gamelist/IGameListView.cpp index 8a46bef29..dc2c39d62 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/src/views/gamelist/IGameListView.cpp @@ -10,16 +10,11 @@ bool IGameListView::input(InputConfig* config, Input input) { - // F3 to open metadata editor - if(config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_F3 && input.value != 0) - { - - // select to open GuiGamelistOptions - }else if(config->isMappedTo("select", input) && input.value) + if(config->isMappedTo("select", input) && input.value) { Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); - mWindow->pushGui(new GuiGamelistOptions(mWindow, this)); + mWindow->pushGui(new GuiGamelistOptions(mWindow, this->mRoot->getSystem())); return true; // Ctrl-R to reload a view when debugging From ed1612a341b5379d69385043c9dc2c3d85321766 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 17:49:02 -0500 Subject: [PATCH 305/386] Fixed RatingComponent theme image path changes not triggering a proper resize (making pixelized SVGs). --- src/components/RatingComponent.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/RatingComponent.cpp b/src/components/RatingComponent.cpp index df77bb642..daa00e863 100644 --- a/src/components/RatingComponent.cpp +++ b/src/components/RatingComponent.cpp @@ -145,10 +145,20 @@ void RatingComponent::applyTheme(const std::shared_ptr& theme, const if(!elem) return; + bool imgChanged = false; if(properties & PATH && elem->has("filledPath")) + { mFilledTexture = TextureResource::get(elem->get("filledPath"), true); + imgChanged = true; + } if(properties & PATH && elem->has("unfilledPath")) + { mUnfilledTexture = TextureResource::get(elem->get("unfilledPath"), true); + imgChanged = true; + } + + if(imgChanged) + onSizeChanged(); } std::vector RatingComponent::getHelpPrompts() From b57c6b412cb17ac1222b881660cfda66219e3a58 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 18:13:19 -0500 Subject: [PATCH 306/386] Fix buildTextCache not taking line spacing into account for metrics. Fix TextComponent's calculateExtent not taking line spacing into account. --- src/components/TextComponent.cpp | 4 ++-- src/resources/Font.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index a4d968b6d..a0a8db48c 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -122,11 +122,11 @@ void TextComponent::calculateExtent() { if(mAutoCalcExtent.x()) { - mSize = mFont->sizeText(mUppercase ? strToUpper(mText) : mText); + mSize = mFont->sizeText(mUppercase ? strToUpper(mText) : mText, mLineSpacing); }else{ if(mAutoCalcExtent.y()) { - mSize[1] = mFont->sizeWrappedText(mUppercase ? strToUpper(mText) : mText, getSize().x()).y(); + mSize[1] = mFont->sizeWrappedText(mUppercase ? strToUpper(mText) : mText, getSize().x(), mLineSpacing).y(); } } } diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index c01641475..60355a361 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -479,7 +479,7 @@ TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, x += mCharData[letter].advX * mFontScale; } - TextCache::CacheMetrics metrics = { sizeText(text) }; + TextCache::CacheMetrics metrics = { sizeText(text, lineSpacing) }; TextCache* cache = new TextCache(vertCount, vert, colors, metrics); if(color != 0x00000000) cache->setColor(color); From 44163b88115394a11b1512d4354840dbfb7c73f2 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 19:04:40 -0500 Subject: [PATCH 307/386] Adjusted size of single game scraper window. --- src/guis/GuiGameScraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/guis/GuiGameScraper.cpp b/src/guis/GuiGameScraper.cpp index 6307fad8d..3eb336c48 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/src/guis/GuiGameScraper.cpp @@ -73,7 +73,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mSearch->setAcceptCallback([this, doneFunc](const ScraperSearchResult& result) { doneFunc(result); close(); }); mSearch->setCancelCallback([&] { delete this; }); - setSize(Renderer::getScreenWidth() * 0.7f, Renderer::getScreenHeight() * 0.65f); + setSize(Renderer::getScreenWidth() * 0.95f, Renderer::getScreenHeight() * 0.747f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); mGrid.resetCursor(); From 75e31d915c6c80888860fb5631636f99c5f6a52c Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 16 May 2014 19:14:22 -0500 Subject: [PATCH 308/386] Escape now closes the "configure a device" dialog. Does not work on the first run. --- src/guis/GuiDetectDevice.cpp | 13 +++++++++++-- src/guis/GuiDetectDevice.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/guis/GuiDetectDevice.cpp b/src/guis/GuiDetectDevice.cpp index 70ed69401..51578705f 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/src/guis/GuiDetectDevice.cpp @@ -14,7 +14,7 @@ using namespace Eigen; -GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window), +GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window), mFirstRun(firstRun), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) { mHoldingConfig = NULL; @@ -49,7 +49,9 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w // message mMsg1 = std::make_shared(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.", Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mMsg1, Vector2i(0, 2), false, true); - mMsg2 = std::make_shared(mWindow, "PRESS F4 TO QUIT AT ANY TIME.", Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); + + const char* msg2str = firstRun ? "PRESS F4 TO QUIT AT ANY TIME." : "PRESS ESC TO CANCEL."; + mMsg2 = std::make_shared(mWindow, msg2str, Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mMsg2, Vector2i(0, 3), false, true); // currently held device @@ -75,6 +77,13 @@ void GuiDetectDevice::onSizeChanged() bool GuiDetectDevice::input(InputConfig* config, Input input) { + if(!mFirstRun && input.device == DEVICE_KEYBOARD && input.type == TYPE_KEY && input.value && input.id == SDLK_ESCAPE) + { + // cancel configuring + delete this; + return true; + } + if(input.type == TYPE_BUTTON || input.type == TYPE_KEY) { if(input.value && mHoldingConfig == NULL) diff --git a/src/guis/GuiDetectDevice.h b/src/guis/GuiDetectDevice.h index 71d133692..ebc43b7b5 100644 --- a/src/guis/GuiDetectDevice.h +++ b/src/guis/GuiDetectDevice.h @@ -16,6 +16,7 @@ public: void onSizeChanged() override; private: + bool mFirstRun; InputConfig* mHoldingConfig; int mHoldTime; From 0d39586c2de85c53bd99ed8ab49c4a2792e5e8e9 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 18 May 2014 20:15:15 -0500 Subject: [PATCH 309/386] Adjusted ScrollableContainer autoscroll. Scroll delay and speed are now hardcoded instead of arguments. Changed resetAutoscroll() to just reset(), which now also resets cursor position. Autoscroll now automatically returns to the top (via reset()) after 10 seconds. --- src/components/ScraperSearchComponent.cpp | 5 +- src/components/ScrollableContainer.cpp | 83 +++++++++++++-------- src/components/ScrollableContainer.h | 20 ++--- src/views/gamelist/DetailedGameListView.cpp | 5 +- 4 files changed, 65 insertions(+), 48 deletions(-) diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index a097550f2..4fed43c8f 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -38,7 +38,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mDescContainer = std::make_shared(mWindow); mResultDesc = std::make_shared(mWindow, "Result desc", Font::get(FONT_SIZE_SMALL), 0x777777FF); mDescContainer->addChild(mResultDesc.get()); - mDescContainer->setAutoScroll(2200, 0.015f); + mDescContainer->setAutoScroll(true); // metadata auto font = Font::get(FONT_SIZE_SMALL); // this gets replaced in onSizeChanged() so its just a placeholder @@ -300,8 +300,7 @@ void ScraperSearchComponent::updateInfoPane() ScraperSearchResult& res = mScraperResults.at(i); mResultName->setText(strToUpper(res.mdl.get("name"))); mResultDesc->setText(strToUpper(res.mdl.get("desc"))); - mDescContainer->setScrollPos(Eigen::Vector2d(0, 0)); - mDescContainer->resetAutoScrollTimer(); + mDescContainer->reset(); mResultThumbnail->setImage(""); const std::string& thumb = res.thumbnailUrl.empty() ? res.imageUrl : res.thumbnailUrl; diff --git a/src/components/ScrollableContainer.cpp b/src/components/ScrollableContainer.cpp index 87e948c78..f6b41072e 100644 --- a/src/components/ScrollableContainer.cpp +++ b/src/components/ScrollableContainer.cpp @@ -2,8 +2,12 @@ #include "../Renderer.h" #include "../Log.h" +#define AUTO_SCROLL_RESET_DELAY 10000 // ms to reset to top after we reach the bottom +#define AUTO_SCROLL_DELAY 8000 // ms to wait before we start to scroll +#define AUTO_SCROLL_SPEED 50 // ms between scrolls + ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), - mAutoScrollDelay(0), mAutoScrollSpeed(0), mAutoScrollTimer(0), mScrollPos(0, 0), mScrollDir(0, 0) + mAutoScrollDelay(0), mAutoScrollSpeed(0), mAutoScrollAccumulator(0), mScrollPos(0, 0), mScrollDir(0, 0), mAutoScrollResetAccumulator(0) { } @@ -18,7 +22,7 @@ void ScrollableContainer::render(const Eigen::Affine3f& parentTrans) Renderer::pushClipRect(clipPos, clipDim); - trans.translate(Eigen::Vector3f((float)-mScrollPos.x(), (float)-mScrollPos.y(), 0)); + trans.translate(-Eigen::Vector3f(mScrollPos.x(), mScrollPos.y(), 0)); Renderer::setMatrix(trans); GuiComponent::renderChildren(trans); @@ -26,65 +30,75 @@ void ScrollableContainer::render(const Eigen::Affine3f& parentTrans) Renderer::popClipRect(); } -void ScrollableContainer::setAutoScroll(int delay, double speed) +void ScrollableContainer::setAutoScroll(bool autoScroll) { - mAutoScrollDelay = delay; - mAutoScrollSpeed = speed; - mAutoScrollTimer = 0; + if(autoScroll) + { + mScrollDir << 0, 1; + mAutoScrollDelay = AUTO_SCROLL_DELAY; + mAutoScrollSpeed = AUTO_SCROLL_SPEED; + reset(); + }else{ + mScrollDir << 0, 0; + mAutoScrollDelay = 0; + mAutoScrollSpeed = 0; + mAutoScrollAccumulator = 0; + } } -Eigen::Vector2d ScrollableContainer::getScrollPos() const +Eigen::Vector2f ScrollableContainer::getScrollPos() const { return mScrollPos; } -void ScrollableContainer::setScrollPos(const Eigen::Vector2d& pos) +void ScrollableContainer::setScrollPos(const Eigen::Vector2f& pos) { mScrollPos = pos; } void ScrollableContainer::update(int deltaTime) { - double scrollAmt = (double)deltaTime; - if(mAutoScrollSpeed != 0) { - mAutoScrollTimer += deltaTime; + mAutoScrollAccumulator += deltaTime; - scrollAmt = (float)(mAutoScrollTimer - mAutoScrollDelay); - - if(scrollAmt > 0) + //scale speed by our width! more text per line = slower scrolling + const float widthMod = (680.0f / getSize().x()); + while(mAutoScrollAccumulator >= mAutoScrollSpeed) { - //scroll the amount of time left over from the delay - mAutoScrollTimer = mAutoScrollDelay; - - //scale speed by our width! more text per line = slower scrolling - const double widthMod = (680.0 / getSize().x()); - mScrollDir = Eigen::Vector2d(0, mAutoScrollSpeed * widthMod); - }else{ - //not enough to pass the delay, do nothing - scrollAmt = 0; + mScrollPos += mScrollDir; + mAutoScrollAccumulator -= mAutoScrollSpeed; } } - Eigen::Vector2d scroll = mScrollDir * scrollAmt; - mScrollPos += scroll; - //clip scrolling within bounds if(mScrollPos.x() < 0) mScrollPos[0] = 0; if(mScrollPos.y() < 0) mScrollPos[1] = 0; - - Eigen::Vector2f contentSize = getContentSize(); + const Eigen::Vector2f contentSize = getContentSize(); if(mScrollPos.x() + getSize().x() > contentSize.x()) - mScrollPos[0] = (double)contentSize.x() - getSize().x(); + { + mScrollPos[0] = contentSize.x() - getSize().x(); + mAtEnd = true; + } if(contentSize.y() < getSize().y()) + { mScrollPos[1] = 0; - else if(mScrollPos.y() + getSize().y() > contentSize.y()) - mScrollPos[1] = (double)contentSize.y() - getSize().y(); + }else if(mScrollPos.y() + getSize().y() > contentSize.y()) + { + mScrollPos[1] = contentSize.y() - getSize().y(); + mAtEnd = true; + } + + if(mAtEnd) + { + mAutoScrollResetAccumulator += deltaTime; + if(mAutoScrollResetAccumulator >= AUTO_SCROLL_RESET_DELAY) + reset(); + } GuiComponent::update(deltaTime); } @@ -106,7 +120,10 @@ Eigen::Vector2f ScrollableContainer::getContentSize() return max; } -void ScrollableContainer::resetAutoScrollTimer() +void ScrollableContainer::reset() { - mAutoScrollTimer = 0; + mScrollPos << 0, 0; + mAutoScrollResetAccumulator = 0; + mAutoScrollAccumulator = -mAutoScrollDelay + mAutoScrollSpeed; + mAtEnd = false; } diff --git a/src/components/ScrollableContainer.h b/src/components/ScrollableContainer.h index eea48888e..486a64595 100644 --- a/src/components/ScrollableContainer.h +++ b/src/components/ScrollableContainer.h @@ -7,10 +7,10 @@ class ScrollableContainer : public GuiComponent public: ScrollableContainer(Window* window); - Eigen::Vector2d getScrollPos() const; - void setScrollPos(const Eigen::Vector2d& pos); - void setAutoScroll(int delay, double speed); //Use 0 for speed to disable. - void resetAutoScrollTimer(); + Eigen::Vector2f getScrollPos() const; + void setScrollPos(const Eigen::Vector2f& pos); + void setAutoScroll(bool autoScroll); + void reset(); void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; @@ -18,9 +18,11 @@ public: private: Eigen::Vector2f getContentSize(); - Eigen::Vector2d mScrollPos; - Eigen::Vector2d mScrollDir; - int mAutoScrollDelay; - double mAutoScrollSpeed; - int mAutoScrollTimer; + Eigen::Vector2f mScrollPos; + Eigen::Vector2f mScrollDir; + int mAutoScrollDelay; // ms to wait before starting to autoscroll + int mAutoScrollSpeed; // ms to wait before scrolling down by mScrollDir + int mAutoScrollAccumulator; + bool mAtEnd; + int mAutoScrollResetAccumulator; }; diff --git a/src/views/gamelist/DetailedGameListView.cpp b/src/views/gamelist/DetailedGameListView.cpp index a87492a7c..72eaaa511 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/src/views/gamelist/DetailedGameListView.cpp @@ -58,7 +58,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); - mDescContainer.setAutoScroll((int)(1600 + mDescContainer.getSize().x()), 0.025f); + mDescContainer.setAutoScroll(true); addChild(&mDescContainer); mDescription.setFont(Font::get(FONT_SIZE_SMALL)); @@ -199,8 +199,7 @@ void DetailedGameListView::updateInfoPanel() mPlayCount.setValue(file->metadata.get("playcount")); mDescription.setText(file->metadata.get("desc")); - mDescContainer.resetAutoScrollTimer(); - mDescContainer.setScrollPos(Eigen::Vector2d(0, 0)); + mDescContainer.reset(); fadingOut = false; } From 4dd60c14e72a6ed61a188feedc9f39a42fd456ee Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sun, 18 May 2014 21:13:36 -0500 Subject: [PATCH 310/386] Rewrote the text wrapping algorithm. Fixes some subtle issues with newlines at the end of a word that would be at the end of a line. Still not quite perfect (sometimes goes to a new line when it's not necessary), but at least things aren't overflowing out of TextComponents anymore. --- src/resources/Font.cpp | 43 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 60355a361..9056e7f0b 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -280,56 +280,37 @@ std::string Font::wrapText(std::string text, float xLen) const std::string out; std::string line, word, temp; - size_t space, newline; + size_t space; Eigen::Vector2f textSize; - while(text.length() > 0 || !line.empty()) //while there's text or we still have text to render + while(text.length() > 0) //while there's text or we still have text to render { - space = text.find(' ', 0); + space = text.find_first_of(" \t\n"); if(space == std::string::npos) space = text.length() - 1; word = text.substr(0, space + 1); - - //check if the next word contains a newline - newline = word.find('\n', 0); - if(newline != std::string::npos) - { - //get everything up to the newline - word = word.substr(0, newline); - text.erase(0, newline + 1); - }else{ - text.erase(0, space + 1); - } + text.erase(0, space + 1); temp = line + word; textSize = sizeText(temp); - //if we're on the last word and it'll fit on the line, just add it to the line - if((textSize.x() <= xLen && text.length() == 0) || newline != std::string::npos) + // if the word will fit on the line, add it to our line, and continue + if(textSize.x() <= xLen) { line = temp; - word = ""; - } - - //if the next line will be too long or we're on the last of the text, render it - if(textSize.x() > xLen || text.length() == 0 || newline != std::string::npos) - { - //output line now - out += line + '\n'; - - //move the word we skipped to the next line - line = word; + continue; }else{ - //there's still space, continue building the line - line = temp; + // the next word won't fit, so break here + out += line + '\n'; + line = word; } } - if(!out.empty() && newline == std::string::npos) //chop off the last newline if we added one - out.erase(out.length() - 1, 1); + // whatever's left should fit + out += line; return out; } From 7f62b06d1a8239fe33dd0881a7a1f9c20ea00456 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 May 2014 13:10:39 -0500 Subject: [PATCH 311/386] Single-line TextComponents now stop at the first newline. Prevents text going outside of the text area if there's a newline early in a description. --- src/components/TextComponent.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/TextComponent.cpp b/src/components/TextComponent.cpp index a0a8db48c..63f38a4e1 100644 --- a/src/components/TextComponent.cpp +++ b/src/components/TextComponent.cpp @@ -135,12 +135,27 @@ void TextComponent::onTextChanged() { calculateExtent(); + if(!mFont || mText.empty()) + { + mTextCache.reset(); + return; + } + std::string text = mUppercase ? strToUpper(mText) : mText; - std::shared_ptr f = getFont(); - const bool wrap = (mSize.y() == 0 || mSize.y() > f->getHeight()*1.2f); + std::shared_ptr f = mFont; + const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight()*1.2f); + + bool addAbbrev = false; + if(!isMultiline) + { + size_t newline = text.find('\n'); + text = text.substr(0, newline); // single line of text - stop at the first newline since it'll mess everything up + addAbbrev = newline != std::string::npos; + } + Eigen::Vector2f size = f->sizeText(text); - if(!wrap && mSize.x() && text.size() && size.x() > mSize.x()) + if(!isMultiline && mSize.x() && text.size() && (size.x() > mSize.x() || addAbbrev)) { // abbreviate text const std::string abbrev = "..."; From 9aaa5e79d93bef747aa532550b49ee71161ee7e4 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 21 May 2014 16:33:10 -0500 Subject: [PATCH 312/386] Fixed missing bottom spacer on ComponentLists. --- src/components/ComponentList.cpp | 2 +- src/components/MenuComponent.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/ComponentList.cpp b/src/components/ComponentList.cpp index 9a2d1c1dd..73aa9961a 100644 --- a/src/components/ComponentList.cpp +++ b/src/components/ComponentList.cpp @@ -162,7 +162,7 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - Eigen::Vector2i((int)round(dim.x()), (int)round(dim.y()))); + Eigen::Vector2i((int)round(dim.x()), (int)round(dim.y() + 1))); // scroll the camera trans.translate(Eigen::Vector3f(0, -round(mCameraOffset), 0)); diff --git a/src/components/MenuComponent.cpp b/src/components/MenuComponent.cpp index 6094547c4..443b847b1 100644 --- a/src/components/MenuComponent.cpp +++ b/src/components/MenuComponent.cpp @@ -50,16 +50,17 @@ void MenuComponent::updateSize() float height = TITLE_HEIGHT + mList->getTotalRowHeight() + getButtonGridHeight() + 2; if(height > maxHeight) { - height = TITLE_HEIGHT + getButtonGridHeight() + 2; + height = TITLE_HEIGHT + getButtonGridHeight(); int i = 0; - while(height < maxHeight && i < mList->size()) + while(i < mList->size()) { float rowHeight = mList->getRowHeight(i); if(height + rowHeight < maxHeight) height += rowHeight; + else + break; i++; } - height += 2; } setSize(Renderer::getScreenWidth() * 0.5f, height); From 8f3a02d85965756c4cbf31603ca04bd5dd205904 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 22 May 2014 15:11:19 -0500 Subject: [PATCH 313/386] Save gamelist.xml after each game is scraped in multi-scrape mode. Show more detailed breakdown of VRAM. Looks like there's a bug with duplicate fonts right now. --- src/Window.cpp | 6 ++++-- src/guis/GuiScraperMulti.cpp | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Window.cpp b/src/Window.cpp index 13f82568d..b7d418dc3 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -157,8 +157,10 @@ void Window::update(int deltaTime) ss << std::fixed << std::setprecision(2) << ((float)mFrameTimeElapsed / (float)mFrameCountElapsed) << "ms"; // vram - float vramUsageMb = (TextureResource::getTotalMemUsage() + Font::getTotalMemUsage()) / 1000.0f / 1000.0f; - ss << "\nVRAM: " << vramUsageMb << "mb"; + float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f;; + float fontVramUsageMb = Font::getTotalMemUsage() / 1000.0f / 1000.0f;; + float totalVramUsageMb = textureVramUsageMb + fontVramUsageMb; + ss << "\nVRAM: " << totalVramUsageMb << "mb (texs: " << textureVramUsageMb << "mb, fonts: " << fontVramUsageMb << "mb)"; mFrameDataText = std::unique_ptr(mDefaultFonts.at(1)->buildTextCache(ss.str(), 50.f, 50.f, 0xFF00FFFF)); } diff --git a/src/guis/GuiScraperMulti.cpp b/src/guis/GuiScraperMulti.cpp index a5b1a879f..56bb0232b 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/src/guis/GuiScraperMulti.cpp @@ -2,6 +2,7 @@ #include "../Renderer.h" #include "../Log.h" #include "../views/ViewController.h" +#include "../XMLReader.h" #include "../components/TextComponent.h" #include "../components/ButtonComponent.h" @@ -111,6 +112,7 @@ void GuiScraperMulti::acceptResult(const ScraperSearchResult& result) ScraperSearchParams& search = mSearchQueue.front(); search.game->metadata = result.mdl; + updateGamelist(search.system); mSearchQueue.pop(); mCurrentGame++; From d2c7de38020dbbb90cc8e405f72f1a78ce7773ce Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 May 2014 16:51:24 -0500 Subject: [PATCH 314/386] Fix for building with VS2013. --- src/Util.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Util.cpp b/src/Util.cpp index f23f3d0bf..79fe55bcf 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -21,10 +21,13 @@ std::string strToUpper(const std::string& str) return strToUpper(str.c_str()); } + +#if _MSC_VER < 1800 float round(float num) { return (float)((int)(num + 0.5f)); } +#endif Eigen::Affine3f& roundMatrix(Eigen::Affine3f& mat) { From 1e7ced2c6656ee749989114c4d17bf8133ddbcee Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 May 2014 16:51:56 -0500 Subject: [PATCH 315/386] Two fixes with SVG rasterizing: 1. Original width/height were being returned as integers, even though they can be floats (see SVGResource::getImageSize()). Function also renamed to be more descriptive (renamed to getSourceImageSize()). 2. Now we always round height and scale width from the rounded height when doing scaling, since SVG rasterization scale is determined from height. This seems to fix some 1px cutoff I was seeing, but I'm not sure if it still works for images with extreme aspect ratios that are taller rather than wider. --- src/components/ImageComponent.cpp | 25 +++++++++++++++++++------ src/resources/SVGResource.cpp | 10 +++++++--- src/resources/SVGResource.h | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 5f33cd718..9da04aab7 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -37,12 +37,20 @@ void ImageComponent::resize() if(!mTexture) return; - const Eigen::Vector2f textureSize((float)getTextureSize().x(), (float)getTextureSize().y()); + SVGResource* svg = dynamic_cast(mTexture.get()); + + const Eigen::Vector2f textureSize = svg ? svg->getSourceImageSize() : Eigen::Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); if(mTexture->isTiled()) { mSize = mTargetSize; }else{ + // SVG rasterization is determined by height (see SVGResource.cpp), and rasterization is done in terms of pixels + // if rounding is off enough in the rasterization step (for images with extreme aspect ratios), it can cause cutoff when the aspect ratio breaks + // so, we always make sure the resultant height is an integer to make sure cutoff doesn't happen, and scale width from that + // (you'll see this scattered throughout the function) + // this is probably not the best way, so if you're familiar with this problem and have a better solution, please make a pull request! + if(mTargetIsMax) { mSize = textureSize; @@ -58,27 +66,32 @@ void ImageComponent::resize() mSize[1] *= resizeScale.y(); } + // for SVG rasterization, always calculate width from rounded height (see comment above) + mSize[1] = round(mSize[1]); + mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); + }else{ // if both components are set, we just stretch // if no components are set, we don't resize at all mSize = mTargetSize.isZero() ? textureSize : mTargetSize; // if only one component is set, we resize in a way that maintains aspect ratio + // for SVG rasterization, we always calculate width from rounded height (see comment above) if(!mTargetSize.x() && mTargetSize.y()) { - mSize[0] = (mTargetSize.y() / textureSize.y()) * textureSize.x(); - mSize[1] = mTargetSize.y(); + mSize[1] = round(mTargetSize.y()); + mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); }else if(mTargetSize.x() && !mTargetSize.y()) { - mSize[0] = mTargetSize.x(); - mSize[1] = (mTargetSize.x() / textureSize.x()) * textureSize.y(); + mSize[1] = round((mTargetSize.x() / textureSize.x()) * textureSize.y()); + mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); } } } - SVGResource* svg = dynamic_cast(mTexture.get()); if(svg) { + // mSize.y() should already be rounded svg->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); } diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 6dc773a47..1051303f4 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -69,6 +69,10 @@ void SVGResource::rasterizeAt(size_t width, size_t height) mLastHeight = height; } + LOG(LogInfo) << "Rasterizing \"" << mPath << "\"..."; + LOG(LogInfo) << " Original width: " << mSVGImage->width << ", original height: " << mSVGImage->height; + LOG(LogInfo) << " width: " << width << ", height: " << height << ", scale: " << height / mSVGImage->height; + unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); NSVGrasterizer* rast = nsvgCreateRasterizer(); @@ -92,12 +96,12 @@ void SVGResource::rasterizeAt(size_t width, size_t height) free(imagePx); } -Eigen::Vector2i SVGResource::getImageSize() const +Eigen::Vector2f SVGResource::getSourceImageSize() const { if(mSVGImage) - return Eigen::Vector2i((int)round(mSVGImage->width), (int)round(mSVGImage->height)); + return Eigen::Vector2f(mSVGImage->width, mSVGImage->height); - return Eigen::Vector2i::Zero(); + return Eigen::Vector2f::Zero(); } void SVGResource::deinitSVG() diff --git a/src/resources/SVGResource.h b/src/resources/SVGResource.h index c28b29396..c68ae4879 100644 --- a/src/resources/SVGResource.h +++ b/src/resources/SVGResource.h @@ -14,7 +14,7 @@ public: virtual void initFromMemory(const char* image, size_t length) override; void rasterizeAt(size_t width, size_t height); - Eigen::Vector2i getImageSize() const; + Eigen::Vector2f getSourceImageSize() const; protected: friend TextureResource; From b15f3aeec01f423fc2f1f037e45db4b2b72c25dc Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 May 2014 17:21:01 -0500 Subject: [PATCH 316/386] Use canonical path names for resource lookup (Font, TextureResource). Fixes "./../art/file.png" causing duplicates when used in multiple systems, even if it refers to the same file. Remove debug messages for SVGResource and ImageComponent. --- src/Util.cpp | 9 +++++++++ src/Util.h | 2 ++ src/components/ImageComponent.cpp | 3 --- src/resources/Font.cpp | 4 +++- src/resources/SVGResource.cpp | 4 ---- src/resources/TextureResource.cpp | 14 ++++++++------ 6 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Util.cpp b/src/Util.cpp index 79fe55bcf..888ffbbb5 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -1,4 +1,5 @@ #include "Util.h" +#include std::string strToUpper(const char* from) { @@ -59,3 +60,11 @@ Eigen::Vector2f roundVector(const Eigen::Vector2f& vec) ret[1] = round(ret[1]); return ret; } + +std::string getCanonicalPath(const std::string& path) +{ + if(boost::filesystem::exists(path)) + return boost::filesystem::canonical(path).generic_string(); + else + return ""; +} diff --git a/src/Util.h b/src/Util.h index c057cb747..254520619 100644 --- a/src/Util.h +++ b/src/Util.h @@ -12,3 +12,5 @@ Eigen::Vector3f roundVector(const Eigen::Vector3f& vec); Eigen::Vector2f roundVector(const Eigen::Vector2f& vec); float round(float num); + +std::string getCanonicalPath(const std::string& str); \ No newline at end of file diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 9da04aab7..09fbfeb82 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -283,14 +283,11 @@ bool ImageComponent::hasImage() void ImageComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { - LOG(LogInfo) << " req image [" << view << "." << element << "] (flags: " << properties << ")"; - using namespace ThemeFlags; const ThemeData::ThemeElement* elem = theme->getElement(view, element, "image"); if(!elem) { - LOG(LogInfo) << " (missing)"; return; } diff --git a/src/resources/Font.cpp b/src/resources/Font.cpp index 9056e7f0b..0bba66bc3 100644 --- a/src/resources/Font.cpp +++ b/src/resources/Font.cpp @@ -73,7 +73,9 @@ void Font::unload(std::shared_ptr& rm) std::shared_ptr Font::get(int size, const std::string& path) { - std::pair def(path.empty() ? getDefaultPath() : path, size); + const std::string canonicalPath = getCanonicalPath(path); + + std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); auto foundFont = sFontMap.find(def); if(foundFont != sFontMap.end()) { diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index 1051303f4..f6d8608ad 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -69,10 +69,6 @@ void SVGResource::rasterizeAt(size_t width, size_t height) mLastHeight = height; } - LOG(LogInfo) << "Rasterizing \"" << mPath << "\"..."; - LOG(LogInfo) << " Original width: " << mSVGImage->width << ", original height: " << mSVGImage->height; - LOG(LogInfo) << " width: " << width << ", height: " << height << ", scale: " << height / mSVGImage->height; - unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); NSVGrasterizer* rast = nsvgCreateRasterizer(); diff --git a/src/resources/TextureResource.cpp b/src/resources/TextureResource.cpp index af87506b6..120f01d19 100644 --- a/src/resources/TextureResource.cpp +++ b/src/resources/TextureResource.cpp @@ -4,7 +4,7 @@ #include GLHEADER #include "../ImageIO.h" #include "../Renderer.h" - +#include "../Util.h" #include "SVGResource.h" std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; @@ -102,14 +102,16 @@ std::shared_ptr TextureResource::get(const std::string& path, b { std::shared_ptr& rm = ResourceManager::getInstance(); - if(path.empty()) + const std::string canonicalPath = getCanonicalPath(path); + + if(canonicalPath.empty()) { std::shared_ptr tex(new TextureResource("", tile)); rm->addReloadable(tex); //make sure we get properly deinitialized even though we do nothing on reinitialization return tex; } - TextureKeyType key(path, tile); + TextureKeyType key(canonicalPath, tile); auto foundTexture = sTextureMap.find(key); if(foundTexture != sTextureMap.end()) { @@ -121,18 +123,18 @@ std::shared_ptr TextureResource::get(const std::string& path, b std::shared_ptr tex; // is it an SVG? - if(path.substr(path.size() - 4, std::string::npos) == ".svg") + if(key.first.substr(key.first.size() - 4, std::string::npos) == ".svg") { // probably // don't add it to our map because 2 svgs might be rasterized at different sizes - tex = std::shared_ptr(new SVGResource(path, tile)); + tex = std::shared_ptr(new SVGResource(key.first, tile)); sTextureList.push_back(tex); // add it to our list though rm->addReloadable(tex); tex->reload(rm); return tex; }else{ // normal texture - tex = std::shared_ptr(new TextureResource(path, tile)); + tex = std::shared_ptr(new TextureResource(key.first, tile)); sTextureMap[key] = std::weak_ptr(tex); sTextureList.push_back(tex); rm->addReloadable(tex); From 3eda72b82b6a9c544470ef23af6de44e106925a8 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 May 2014 18:38:31 -0500 Subject: [PATCH 317/386] Fix breaking embedded resources with getCanonicalPath. --- src/Util.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Util.cpp b/src/Util.cpp index 888ffbbb5..a6540fd76 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -1,5 +1,6 @@ #include "Util.h" #include +#include "resources/ResourceManager.h" std::string strToUpper(const char* from) { @@ -63,8 +64,14 @@ Eigen::Vector2f roundVector(const Eigen::Vector2f& vec) std::string getCanonicalPath(const std::string& path) { - if(boost::filesystem::exists(path)) - return boost::filesystem::canonical(path).generic_string(); - else - return ""; + // embedded resources, e.g. ":/font.ttf", need to be properly handled too + try + { + const std::string canonical = boost::filesystem::canonical(path).generic_string(); + return canonical.empty() ? path : canonical; + } + catch (boost::filesystem::filesystem_error& e) + { + return path; + } } From 7ba1bce1331e0d7884536ac0fc6d4cc254f85398 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Fri, 23 May 2014 19:03:10 -0500 Subject: [PATCH 318/386] Assert malloc() calls do not return NULL. --- src/resources/SVGResource.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/resources/SVGResource.cpp b/src/resources/SVGResource.cpp index f6d8608ad..c2c03974c 100644 --- a/src/resources/SVGResource.cpp +++ b/src/resources/SVGResource.cpp @@ -30,6 +30,7 @@ void SVGResource::initFromMemory(const char* file, size_t length) // nsvgParse excepts a modifiable, null-terminated string char* copy = (char*)malloc(length + 1); + assert(copy != NULL); memcpy(copy, file, length); copy[length] = '\0'; @@ -70,6 +71,7 @@ void SVGResource::rasterizeAt(size_t width, size_t height) } unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); + assert(imagePx != NULL); NSVGrasterizer* rast = nsvgCreateRasterizer(); nsvgRasterize(rast, mSVGImage, 0, 0, height / mSVGImage->height, imagePx, width, height, width * 4); From 6cf6e62b85c23fc30d53d9a38ba056a60b043209 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 24 May 2014 10:49:59 -0500 Subject: [PATCH 319/386] Fixed ImageComponent not using mColorShift's transparency. Fixes using transparency in tag. Updated documentation to emphasize the fact that you can control transparency with the tag. --- THEMES.md | 2 +- src/components/ImageComponent.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THEMES.md b/THEMES.md index 323c232a8..65c8504ee 100644 --- a/THEMES.md +++ b/THEMES.md @@ -400,7 +400,7 @@ Can be created as an extra. * `tile` - type: BOOLEAN. - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. * `color` - type: COLOR. - - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. + - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. #### text diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index 09fbfeb82..c8b228e1a 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -232,7 +232,7 @@ void ImageComponent::updateVertices() void ImageComponent::updateColors() { - Renderer::buildGLColorArray(mColors, (mColorShift >> 8 << 8)| (getOpacity()), 6); + Renderer::buildGLColorArray(mColors, mColorShift, 6); } void ImageComponent::render(const Eigen::Affine3f& parentTrans) From e5ac2253622de3d1199dd8f82b447d8f2067cb93 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Sat, 24 May 2014 11:09:45 -0500 Subject: [PATCH 320/386] Ctrl-R now also reloads the system view when in debug mode. --- THEMES.md | 2 +- src/views/SystemView.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/THEMES.md b/THEMES.md index 65c8504ee..bff94baf8 100644 --- a/THEMES.md +++ b/THEMES.md @@ -112,7 +112,7 @@ Or, you can create your own elements by adding `extra="true"` (as is done in the Advanced Features ================= -It is recommended that if you are writing a theme you launch EmulationStation with the `--debug` and `--windowed` switches. This way you can read error messages without having to check the log file. You can also reload the current gamelist view with `Ctrl-R` if `--debug` is specified. +It is recommended that if you are writing a theme you launch EmulationStation with the `--debug` and `--windowed` switches. This way you can read error messages without having to check the log file. You can also reload the current gamelist view and system view with `Ctrl-R` if `--debug` is specified. ### The `` tag diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index a512683ca..702f9de42 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -6,6 +6,7 @@ #include "ViewController.h" #include "../animations/LambdaAnimation.h" #include "../SystemData.h" +#include "../Settings.h" #include "../Util.h" #define SELECTED_SCALE 1.5f @@ -91,6 +92,17 @@ bool SystemView::input(InputConfig* config, Input input) { if(input.value != 0) { + if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_r && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + { + LOG(LogInfo) << " Reloading SystemList view"; + + // reload themes + for(auto it = mEntries.begin(); it != mEntries.end(); it++) + it->object->loadTheme(); + + populate(); + return true; + } if(config->isMappedTo("left", input)) { listInput(-1); From b221ecdd948611fd249defe4e96a51a850bd53a5 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 26 May 2014 17:21:48 -0500 Subject: [PATCH 321/386] Fix for empty paths breaking in getCanonicalPath(). --- src/Util.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Util.cpp b/src/Util.cpp index a6540fd76..acff2d28a 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -62,16 +62,11 @@ Eigen::Vector2f roundVector(const Eigen::Vector2f& vec) return ret; } +// embedded resources, e.g. ":/font.ttf", need to be properly handled too std::string getCanonicalPath(const std::string& path) { - // embedded resources, e.g. ":/font.ttf", need to be properly handled too - try - { - const std::string canonical = boost::filesystem::canonical(path).generic_string(); - return canonical.empty() ? path : canonical; - } - catch (boost::filesystem::filesystem_error& e) - { + if(path.empty() || !boost::filesystem::exists(path)) return path; - } + + return boost::filesystem::canonical(path).generic_string(); } From cb54d8ae6d91af1b0bd3eb63f4648d2376e5dff2 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 26 May 2014 17:31:16 -0500 Subject: [PATCH 322/386] Changed "platform IDs" to just "platform", and now names are used instead of numerical IDs. Check src/PlatformIds.cpp for a complete list. --- CMakeLists.txt | 1 + README.md | 4 +- src/PlatformId.cpp | 76 +++++++++++++++++++++++++++++++++ src/PlatformId.h | 65 +++++++++++++++------------- src/SystemData.cpp | 13 +++++- src/guis/GuiScraperStart.cpp | 2 +- src/scrapers/GamesDBScraper.cpp | 2 + 7 files changed, 129 insertions(+), 34 deletions(-) create mode 100644 src/PlatformId.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7981c873b..6c0171d9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,6 +241,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp diff --git a/README.md b/README.md index 2fd0e5150..57695ee04 100644 --- a/README.md +++ b/README.md @@ -154,8 +154,8 @@ All systems must be contained within the tag.--> snesemulator %ROM% - - 42 + + snes ``` diff --git a/src/PlatformId.cpp b/src/PlatformId.cpp new file mode 100644 index 000000000..0ab9d180c --- /dev/null +++ b/src/PlatformId.cpp @@ -0,0 +1,76 @@ +#include "PlatformId.h" + +namespace PlatformIds +{ + const char* PlatformNames[PLATFORM_COUNT + 1] = { + "unknown", // = 0, + + "3do", // = 1, + "amiga", // = 2, + "arcade", // = 3, + "atari2600", // = 4, + "atari5200", // = 5, + "atari7800", // = 6, + "atariJaguar", // = 7, + "atariJaguarCD", // = 8, + "atariXE", // = 9, + "colecovision", // = 10, + "commodore64", // = 11, + "intellivision", // = 12, + "mac", // = 13, + "xbox", // = 14, + "xbox360", // = 15, + "neogeo", // = 16, + "ngp", // = 17, + "ngpc", // = 18, + "n3ds", // = 19, + "n64", // = 20, + "nds", // = 21, + "nes", // = 22, + "gb", // = 23, + "gba", // = 24, + "gbc", // = 25, + "gamecube", // = 26, + "wii", // = 27, + "wiiu", // = 28, + "pc", // = 29, + "sega32x", // = 30, + "segacd", // = 31, + "dreamcast", // = 32, + "gamegear", // = 33, + "genesis", // = 34, + "mastersystem", // = 35, + "megadrive", // = 36, + "saturn", // = 37, + "psx", // = 38, + "ps2", // = 39, + "ps3", // = 40, + "ps4", // = 41, + "psvita", // = 42, + "psp", // = 43, + "snes", // = 44, + "pcengine", // = 45, + "zxspectrum", // = 46, + + "invalid" // = 47 + }; + + PlatformId getPlatformId(const char* str) + { + if(str == NULL) + return PLATFORM_UNKNOWN; + + for(unsigned int i = 1; i < PLATFORM_COUNT; i++) + { + if(strcmp(PlatformNames[i], str) == 0) + return (PlatformId)i; + } + + return PLATFORM_UNKNOWN; + } + + const char* getPlatformName(PlatformId id) + { + return PlatformNames[id]; + } +} diff --git a/src/PlatformId.h b/src/PlatformId.h index ca22fe511..45659def1 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -1,5 +1,7 @@ #pragma once +#include + namespace PlatformIds { enum PlatformId : unsigned int @@ -22,35 +24,40 @@ namespace PlatformIds XBOX = 14, XBOX_360 = 15, NEOGEO = 16, - NINTENDO_3DS = 17, - NINTENDO_64 = 18, - NINTENDO_DS = 19, - NINTENDO_ENTERTAINMENT_SYSTEM = 20, - GAME_BOY = 21, - GAME_BOY_ADVANCE = 22, - GAME_BOY_COLOR = 23, - NINTENDO_GAMECUBE = 24, - NINTENDO_WII = 25, - NINTENDO_WII_U = 26, - PC = 27, - SEGA_32X = 28, - SEGA_CD = 29, - SEGA_DREAMCAST = 30, - SEGA_GAME_GEAR = 31, - SEGA_GENESIS = 32, - SEGA_MASTER_SYSTEM = 33, - SEGA_MEGA_DRIVE = 34, - SEGA_SATURN = 35, - PLAYSTATION = 36, - PLAYSTATION_2 = 37, - PLAYSTATION_3 = 38, - PLAYSTATION_4 = 39, - PLAYSTATION_VITA = 40, - PLAYSTATION_PORTABLE = 41, - SUPER_NINTENDO = 42, - TURBOGRAFX_16 = 43, - ZX_SPECTRUM = 44, + NEOGEO_POCKET = 17, + NEOGEO_POCKET_COLOR = 18, + NINTENDO_3DS = 19, + NINTENDO_64 = 20, + NINTENDO_DS = 21, + NINTENDO_ENTERTAINMENT_SYSTEM = 22, + GAME_BOY = 23, + GAME_BOY_ADVANCE = 24, + GAME_BOY_COLOR = 25, + NINTENDO_GAMECUBE = 26, + NINTENDO_WII = 27, + NINTENDO_WII_U = 28, + PC = 29, + SEGA_32X = 30, + SEGA_CD = 31, + SEGA_DREAMCAST = 32, + SEGA_GAME_GEAR = 33, + SEGA_GENESIS = 34, + SEGA_MASTER_SYSTEM = 35, + SEGA_MEGA_DRIVE = 36, + SEGA_SATURN = 37, + PLAYSTATION = 38, + PLAYSTATION_2 = 39, + PLAYSTATION_3 = 40, + PLAYSTATION_4 = 41, + PLAYSTATION_VITA = 42, + PLAYSTATION_PORTABLE = 43, + SUPER_NINTENDO = 44, + TURBOGRAFX_16 = 45, + ZX_SPECTRUM = 46, - PLATFORM_COUNT = 45 + PLATFORM_COUNT = 47 }; + + PlatformId getPlatformId(const char* str); + const char* getPlatformName(PlatformId id); } diff --git a/src/SystemData.cpp b/src/SystemData.cpp index 988477071..0cc3b4613 100644 --- a/src/SystemData.cpp +++ b/src/SystemData.cpp @@ -257,7 +257,13 @@ bool SystemData::loadConfig() } cmd = system.child("command").text().get(); - platformId = (PlatformIds::PlatformId)system.child("platformid").text().as_uint(PlatformIds::PLATFORM_UNKNOWN); + + const char* platformIdString = system.child("platform").text().as_string(); + platformId = PlatformIds::getPlatformId(platformIdString); + + // if there appears to be an actual platform ID supplied but it didn't match the list, warn + if(platformIdString != NULL && platformIdString[0] != '\0' && platformId == PlatformIds::PLATFORM_UNKNOWN) + LOG(LogWarning) << " Unknown platform for system \"" << name << "\" (platform \"" << platformIdString << "\")"; //validate if(name.empty() || path.empty() || extensions.empty() || cmd.empty()) @@ -300,7 +306,7 @@ void SystemData::writeExampleConfig(const std::string& path) " \n" " Nintendo Entertainment System\n" "\n" - " \n" + " \n" " ~/roms/nes\n" "\n" " \n" @@ -312,6 +318,9 @@ void SystemData::writeExampleConfig(const std::string& path) " %ROM_RAW% is the raw, unescaped path to the ROM. -->\n" " retroarch -L ~/cores/libretro-fceumm.so %ROM%\n" "\n" + " \n" + " nes\n" + "\n" " \n" "\n"; diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index fc7afd651..9b382d2a9 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -44,7 +44,7 @@ void GuiScraperStart::pressedStart() if((*it)->getPlatformId() == PlatformIds::PLATFORM_UNKNOWN) { mWindow->pushGui(new GuiMsgBox(mWindow, - strToUpper("Warning: some of your selected systems do not have a platform ID set. Results may be even more inaccurate than usual!\nContinue anyway?"), + strToUpper("Warning: some of your selected systems do not have a platform set. Results may be even more inaccurate than usual!\nContinue anyway?"), "YES", std::bind(&GuiScraperStart::start, this), "NO", nullptr)); return; diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 10be75df4..88a5526c6 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -27,6 +27,8 @@ const std::map gamesdb_platformid_map = boost::assign:: (XBOX, "Microsoft Xbox") (XBOX_360, "Microsoft Xbox 360") (NEOGEO, "NeoGeo") + (NEOGEO_POCKET, "Neo Geo Pocket") + (NEOGEO_POCKET_COLOR, "Neo Geo Pocket Color") (NINTENDO_3DS, "Nintendo 3DS") (NINTENDO_64, "Nintendo 64") (NINTENDO_DS, "Nintendo DS") From 67e266338e76743a81842d4658312b102b700793 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 26 May 2014 17:52:55 -0500 Subject: [PATCH 323/386] Fixed assert being triggered due to divide by zero in HelpComponent::updateGrid due to SVG textures being deinitialized when closing ES with a menu open. --- src/components/ImageComponent.cpp | 2 ++ src/main.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/ImageComponent.cpp b/src/components/ImageComponent.cpp index c8b228e1a..8420d2dc4 100644 --- a/src/components/ImageComponent.cpp +++ b/src/components/ImageComponent.cpp @@ -40,6 +40,8 @@ void ImageComponent::resize() SVGResource* svg = dynamic_cast(mTexture.get()); const Eigen::Vector2f textureSize = svg ? svg->getSourceImageSize() : Eigen::Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); + if(textureSize.isZero()) + return; if(mTexture->isTiled()) { diff --git a/src/main.cpp b/src/main.cpp index 06dc8a229..ccd4bfc8f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -272,9 +272,9 @@ int main(int argc, char* argv[]) Log::flush(); } - window.deinit(); while(window.peekGui() != window.getViewController()) delete window.peekGui(); + window.deinit(); SystemData::deleteSystems(); From d102ef1485a46a8e2bf294b58cf078e7ba1c8e17 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 26 May 2014 19:51:07 -0500 Subject: [PATCH 324/386] Add missing #include to fix building on Linux. --- src/PlatformId.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/PlatformId.cpp b/src/PlatformId.cpp index 0ab9d180c..124a5eefb 100644 --- a/src/PlatformId.cpp +++ b/src/PlatformId.cpp @@ -1,4 +1,5 @@ #include "PlatformId.h" +#include namespace PlatformIds { From 1122476de653fb6f59e11418bdc5bf1b6c9999ae Mon Sep 17 00:00:00 2001 From: Aloshi Date: Mon, 26 May 2014 20:17:17 -0500 Subject: [PATCH 325/386] Added "ignore" plaform. If is set to "ignore", the system will not show up in the "SCRAPE NOW" systems list, and the "SCRAPE" button will be missing in the "EDIT METADATA" screen. Useful for single-game systems, systems made up of shortcuts, and pre-configured systems in distributions. --- src/PlatformId.cpp | 3 ++- src/PlatformId.h | 3 ++- src/guis/GuiMetaDataEd.cpp | 5 ++++- src/guis/GuiScraperStart.cpp | 5 ++++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/PlatformId.cpp b/src/PlatformId.cpp index 124a5eefb..2f7b4ac9b 100644 --- a/src/PlatformId.cpp +++ b/src/PlatformId.cpp @@ -53,7 +53,8 @@ namespace PlatformIds "pcengine", // = 45, "zxspectrum", // = 46, - "invalid" // = 47 + "ignore", // = 47 // do not allow scraping for this system + "invalid" // = 48 }; PlatformId getPlatformId(const char* str) diff --git a/src/PlatformId.h b/src/PlatformId.h index 45659def1..4c5e1d845 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -55,7 +55,8 @@ namespace PlatformIds TURBOGRAFX_16 = 45, ZX_SPECTRUM = 46, - PLATFORM_COUNT = 47 + PLATFORM_IGNORE = 47, // do not allow scraping for this system + PLATFORM_COUNT = 48 }; PlatformId getPlatformId(const char* str); diff --git a/src/guis/GuiMetaDataEd.cpp b/src/guis/GuiMetaDataEd.cpp index 5149bee96..6c6c2a58d 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/src/guis/GuiMetaDataEd.cpp @@ -128,7 +128,10 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector } std::vector< std::shared_ptr > buttons; - buttons.push_back(std::make_shared(mWindow, "SCRAPE", "scrape", std::bind(&GuiMetaDataEd::fetch, this))); + + if(scraperParams.system->getPlatformId() != PlatformIds::PLATFORM_IGNORE) + buttons.push_back(std::make_shared(mWindow, "SCRAPE", "scrape", std::bind(&GuiMetaDataEd::fetch, this))); + buttons.push_back(std::make_shared(mWindow, "SAVE", "save", [&] { save(); delete this; })); buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); diff --git a/src/guis/GuiScraperStart.cpp b/src/guis/GuiScraperStart.cpp index 9b382d2a9..188b56785 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/src/guis/GuiScraperStart.cpp @@ -23,7 +23,10 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), //add systems (all with a platformid specified selected) mSystems = std::make_shared< OptionListComponent >(mWindow, "SCRAPE THESE SYSTEMS", true); for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) - mSystems->add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); + { + if((*it)->getPlatformId() != PlatformIds::PLATFORM_IGNORE) + mSystems->add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN); + } mMenu.addWithLabel("Systems", mSystems); mApproveResults = std::make_shared(mWindow); From 234252131615229b548923ab391290c7891e5c0e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Tue, 27 May 2014 17:12:08 -0500 Subject: [PATCH 326/386] "Fade" transition style now affects system list extra transition style. --- src/views/SystemView.cpp | 68 +++++++++++++++++++++++++++++++++------- src/views/SystemView.h | 2 ++ 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/views/SystemView.cpp b/src/views/SystemView.cpp index 702f9de42..c8d6ab2f0 100644 --- a/src/views/SystemView.cpp +++ b/src/views/SystemView.cpp @@ -17,6 +17,8 @@ SystemView::SystemView(Window* window) : IList(wind mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, ALIGN_CENTER) { mCamOffset = 0; + mExtrasCamOffset = 0; + mExtrasFadeOpacity = 0.0f; setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -151,17 +153,51 @@ void SystemView::onCursorChanged(const CursorState& state) if(abs(target - posMax - startPos) < dist) endPos = target - posMax; // loop around the start (max - 1 -> -1) - Animation* anim = new LambdaAnimation( - [startPos, endPos, posMax, this] (float t) + Animation* anim; + if(Settings::getInstance()->getString("TransitionStyle") == "fade") { - t -= 1; - float f = lerp(startPos, endPos, t*t*t + 1); - if(f < 0) - f += posMax; - if(f >= posMax) - f -= posMax; - this->mCamOffset = f; - }, 500); + float startExtrasFade = mExtrasFadeOpacity; + anim = new LambdaAnimation( + [startExtrasFade, startPos, endPos, posMax, this](float t) + { + t -= 1; + float f = lerp(startPos, endPos, t*t*t + 1); + if(f < 0) + f += posMax; + if(f >= posMax) + f -= posMax; + + this->mCamOffset = f; + + t += 1; + if(t < 0.3f) + this->mExtrasFadeOpacity = lerp(0.0f, 1.0f, t / 0.3f + startExtrasFade); + else if(t < 0.7f) + this->mExtrasFadeOpacity = 1.0f; + else + this->mExtrasFadeOpacity = lerp(1.0f, 0.0f, (t - 0.7f) / 0.3f); + + if(t > 0.5f) + this->mExtrasCamOffset = endPos; + + }, 500); + }else{ // slide + anim = new LambdaAnimation( + [startPos, endPos, posMax, this](float t) + { + t -= 1; + float f = lerp(startPos, endPos, t*t*t + 1); + if(f < 0) + f += posMax; + if(f >= posMax) + f -= posMax; + + this->mCamOffset = f; + this->mExtrasCamOffset = f; + }, 500); + } + + setAnimation(anim, 0, nullptr, false, 0); // animate mSystemInfo's opacity (fade out, wait, fade back in) @@ -214,7 +250,8 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) // draw background extras Eigen::Affine3f extrasTrans = trans; - for(int i = center - 1; i < center + 2; i++) + int extrasCenter = (int)mExtrasCamOffset; + for(int i = extrasCenter - 1; i < extrasCenter + 2; i++) { int index = i; while(index < 0) @@ -222,11 +259,18 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) while(index >= (int)mEntries.size()) index -= mEntries.size(); - extrasTrans.translation() = trans.translation() + Eigen::Vector3f((i - mCamOffset) * mSize.x(), 0, 0); + extrasTrans.translation() = trans.translation() + Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0); mEntries.at(index).data.backgroundExtras->render(extrasTrans); } + // fade extras if necessary + if(mExtrasFadeOpacity) + { + Renderer::setMatrix(trans); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000000 | (unsigned char)(mExtrasFadeOpacity * 255)); + } + // draw logos float xOff = (mSize.x() - logoSize().x())/2 - (mCamOffset * logoSizeX); float yOff = (mSize.y() - logoSize().y())/2; diff --git a/src/views/SystemView.h b/src/views/SystemView.h index 09aee10bc..69bb4952c 100644 --- a/src/views/SystemView.h +++ b/src/views/SystemView.h @@ -42,4 +42,6 @@ private: // unit is list index float mCamOffset; + float mExtrasCamOffset; + float mExtrasFadeOpacity; }; From 7250d0b00bc2aaed3742349ff86e7733618ca1b2 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 28 May 2014 09:34:25 -0500 Subject: [PATCH 327/386] Added a "MAME name to real name" translator. Uses the latest version of MAME for names. Hopefully will be replaced by emulator scripting in the future... --- CMakeLists.txt | 1 + src/FileData.cpp | 16 +- src/FileData.h | 5 +- src/MameNameMap.cpp | 30048 ++++++++++++++++++++ src/PlatformId.cpp | 15 + src/PlatformId.h | 2 + src/XMLReader.cpp | 4 +- src/components/ScraperSearchComponent.cpp | 2 +- src/scrapers/GamesDBScraper.cpp | 2 +- src/scrapers/Scraper.cpp | 2 +- src/scrapers/TheArchiveScraper.cpp | 2 +- 11 files changed, 30089 insertions(+), 10 deletions(-) create mode 100644 src/MameNameMap.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c0171d9b..38242e77c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,6 +238,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNameMap.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp diff --git a/src/FileData.cpp b/src/FileData.cpp index 97c39f269..38a2acaf3 100644 --- a/src/FileData.cpp +++ b/src/FileData.cpp @@ -1,14 +1,15 @@ #include "FileData.h" +#include "SystemData.h" namespace fs = boost::filesystem; -std::string getCleanFileName(const fs::path& path) +std::string removeParenthesis(const std::string& str) { // remove anything in parenthesis or brackets // should be roughly equivalent to the regex replace "\((.*)\)|\[(.*)\]" with "" // I would love to just use regex, but it's not worth pulling in another boost lib for one function that is used once - std::string ret = path.stem().generic_string(); + std::string ret = str; size_t start, end; static const int NUM_TO_REPLACE = 2; @@ -40,7 +41,7 @@ FileData::FileData(FileType type, const fs::path& path, SystemData* system) { // metadata needs at least a name field (since that's what getName() will return) if(metadata.get("name").empty()) - metadata.set("name", getCleanFileName(mPath)); + metadata.set("name", getCleanName()); } FileData::~FileData() @@ -52,6 +53,15 @@ FileData::~FileData() delete mChildren.back(); } +std::string FileData::getCleanName() const +{ + std::string stem = mPath.stem().generic_string(); + if(mSystem && mSystem->getPlatformId() == PlatformIds::ARCADE || mSystem->getPlatformId() == PlatformIds::NEOGEO) + stem = PlatformIds::getCleanMameName(stem.c_str()); + + return removeParenthesis(stem); +} + const std::string& FileData::getThumbnailPath() const { if(!metadata.get("thumbnail").empty()) diff --git a/src/FileData.h b/src/FileData.h index b5f221093..add6345f4 100644 --- a/src/FileData.h +++ b/src/FileData.h @@ -25,7 +25,8 @@ enum FileChangeType const char* fileTypeToString(FileType type); FileType stringToFileType(const char* str); -std::string getCleanFileName(const boost::filesystem::path& path); +// Remove (.*) and [.*] from str +std::string removeParenthesis(const std::string& str); // A tree node that holds information for a file. class FileData @@ -48,6 +49,8 @@ public: void addChild(FileData* file); // Error if mType != FOLDER void removeChild(FileData* file); //Error if mType != FOLDER + // Returns our best guess at the "real" name for this file (will strip parenthesis and attempt to perform MAME name translation) + std::string getCleanName() const; typedef bool ComparisonFunction(const FileData* a, const FileData* b); struct SortType diff --git a/src/MameNameMap.cpp b/src/MameNameMap.cpp new file mode 100644 index 000000000..b1bb0fcf9 --- /dev/null +++ b/src/MameNameMap.cpp @@ -0,0 +1,30048 @@ +#include + +const char* mameNameToRealName[] = { + "005", "005", + "10yard", "10-Yard Fight (World, set 1)", + "10yard85", "10-Yard Fight '85 (US, Taito license)", + "10yardj", "10-Yard Fight (Japan)", + "11beat", "Eleven Beat", + "18w", "18 Wheeler (set 1)", + "18w2", "18 Wheeler (set 2)", + "18wheelr", "18 Wheeler (Deluxe) (Rev A)", + "18wheels", "18 Wheeler (Standard)", + "18wheelu", "18 Wheeler (Upright)", + "1941", "1941: Counter Attack (World 900227)", + "1941j", "1941: Counter Attack (Japan)", + "1941r1", "1941: Counter Attack (World)", + "1941u", "1941: Counter Attack (USA 900227)", + "1942", "1942 (Revision B)", + "1942a", "1942 (Revision A)", + "1942abl", "1942 (Revision A, bootleg)", + "1942b", "1942 (First Version)", + "1942p", "1942 (prototype)", + "1942w", "1942 (Williams Electronics license)", + "1943", "1943: The Battle of Midway (Euro)", + "1943b", "1943: Battle of Midway (bootleg, hack of Japan set)", + "1943j", "1943: Midway Kaisen (Japan, Rev B)", + "1943ja", "1943: Midway Kaisen (Japan)", + "1943kai", "1943 Kai: Midway Kaisen (Japan)", + "1943u", "1943: The Battle of Midway (US, Rev C)", + "1944", "1944: The Loop Master (USA 000620)", + "1944d", "1944: The Loop Master (USA 000620 Phoenix Edition) (bootleg)", + "1944j", "1944: The Loop Master (Japan 000620)", + "1945kiii", "1945k III", + "19in1", "19 in 1 MAME bootleg", + "19xx", "19XX: The War Against Destiny (USA 951207)", + "19xxa", "19XX: The War Against Destiny (Asia 951207)", + "19xxb", "19XX: The War Against Destiny (Brazil 951218)", + "19xxd", "19XX: The War Against Destiny (USA 951207 Phoenix Edition) (bootleg)", + "19xxh", "19XX: The War Against Destiny (Hispanic 951218)", + "19xxj", "19XX: The War Against Destiny (Japan 960104, yellow case)", + "19xxjr1", "19XX: The War Against Destiny (Japan 951225)", + "19xxjr2", "19XX: The War Against Destiny (Japan 951207)", + "1on1gov", "1 on 1 Government (Japan)", + "2020bb", "2020 Super Baseball (set 1)", + "2020bba", "2020 Super Baseball (set 2)", + "2020bbh", "2020 Super Baseball (set 3)", + "20pacgal", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.08)", + "20pacgalr0", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.00)", + "20pacgalr1", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.01)", + "20pacgalr2", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.02)", + "20pacgalr3", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.03)", + "20pacgalr4", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.04)", + "24cdjuke", "Midcoin Juke Box 24CD", + "25pacman", "Pac-Man - 25th Anniversary Edition (Rev 3.00)", + "25pacmano", "Pac-Man - 25th Anniversary Edition (Rev 2.00)", + "280zzzap", "280-ZZZAP", + "2mindril", "Two Minute Drill", + "30test", "30 Test (Remake)", + "39in1", "39 in 1 MAME bootleg", + "3bagflnz", "3 Bags Full (3VXFC5345, New Zealand)", + "3bagflvt", "3 Bags Full (5VXFC790, Victoria)", + "3countb", "3 Count Bout / Fire Suplex (NGM-043)(NGH-043)", + "3dobios", "3DO Bios", + "3ds", "Three Ds - Three Dealers Casino House", + "3in1semi", "XESS - The New Revolution (SemiCom 3-in-1)", + "3kokushi", "Sankokushi (Japan)", + "3on3dunk", "3 On 3 Dunk Madness (US, prototype? 1997/02/04)", + "3stooges", "The Three Stooges In Brides Is Brides (set 1)", + "3stoogesa", "The Three Stooges In Brides Is Brides (set 2)", + "3super8", "3 Super 8 (Italy)", + "3wishrd", "Three Wishes Red (Russia) (Atronic)", + "3wonders", "Three Wonders (World 910520)", + "3wondersb", "Three Wonders (bootleg)", + "3wondersh", "Three Wonders (hack)", + "3wondersr1", "Three Wonders (World 910513)", + "3wondersu", "Three Wonders (USA 910520)", + "3x3puzzl", "3X3 Puzzle (Enterprise)", + "3x3puzzla", "3X3 Puzzle (Normal)", + "40love", "Forty-Love", + "47pie2", "Idol Janshi Su-Chi-Pie 2 (v1.1)", + "47pie2o", "Idol Janshi Su-Chi-Pie 2 (v1.0)", + "48in1", "48 in 1 MAME bootleg (set 1, ver 3.09)", + "48in1a", "48 in 1 MAME bootleg (set 3, ver 3.02)", + "48in1b", "48 in 1 MAME bootleg (set 2, ver 3.09, alt flash)", + "4dwarrio", "4-D Warriors (315-5162)", + "4enlinea", "Cuatro en Linea", + "4enraya", "4 En Raya (set 1)", + "4enrayaa", "4 En Raya (set 2)", + "4in1", "4 Fun in 1", + "4in1a", "4 in 1 MAME bootleg (set 1, ver 3.00)", + "4in1b", "4 in 1 MAME bootleg (set 2)", + "4in1boot", "Puzzle King (includes bootleg of Snow Bros.)", + "4psimasy", "Mahjong 4P Simasyo (Japan)", + "4roses", "Four Roses (encrypted, set 1)", + "4rosesa", "Four Roses (encrypted, set 2)", + "500gp", "500 GP (5GP3 Ver. C)", + "50lions", "50 Lions (10120511, NSW/ACT)", + "50lionsa", "50 Lions (10156111, Malaysia)", + "5acespkr", "5-Aces Poker", + "5clown", "Five Clown (English, set 1)", + "5clowna", "Five Clown (English, set 2)", + "5clownsp", "Five Clown (Spanish hack)", + "600", "600", + "60in1", "60 in 1 MAME bootleg (ver 3.00)", + "64street", "64th. Street - A Detective Story (World)", + "64streetj", "64th. Street - A Detective Story (Japan)", + "720", "720 Degrees (rev 4)", + "720g", "720 Degrees (German, rev 2)", + "720gr1", "720 Degrees (German, rev 1)", + "720r1", "720 Degrees (rev 1)", + "720r2", "720 Degrees (rev 2)", + "720r3", "720 Degrees (rev 3)", + "7jigen", "7jigen no Youseitachi - Mahjong 7 Dimensions (Japan)", + "7mezzo", "7 e Mezzo", + "7ordi", "7 Ordi (Korea)", + "7smash", "7 Smash", + "7toitsu", "Chi-Toitsu", + "800fath", "800 Fathoms", + "86lions", "86 Lions", + "88games", "'88 Games", + "8ball", "Video Eight Ball", + "8ball1", "Video Eight Ball (Rev.1)", + "8ballact", "Eight Ball Action (DK conversion)", + "8ballact2", "Eight Ball Action (DKJr conversion)", + "8bpm", "Eight Ball Action (Pac-Man conversion)", + "98best44", "Neo Print - '98 NeoPri Best 44 (Japan)", + "99bottles", "99 Bottles of Beer", + "99lstwar", "'99: The Last War (set 1)", + "99lstwara", "'99: The Last War (set 2)", + "99lstwark", "'99: The Last War (Kyugo)", + "9ballsht", "9-Ball Shootout (set 1)", + "9ballsht2", "9-Ball Shootout (set 2)", + "9ballsht3", "9-Ball Shootout (set 3)", + "9ballshtc", "9-Ball Shootout Championship", + "a51mxr3k", "Area 51 / Maximum Force Duo (R3000)", + "a51site4", "Area 51: Site 4 (HD Rev 2.01, September 7, 1998)", + "a51site4a", "Area 51: Site 4 (HD Rev 2.0, September 11, 1998)", + "aadvent", "African Adventure (Konami Endeavour)", + "aafb", "All American Football (rev E)", + "aafbb", "All American Football (rev B)", + "aafbc", "All American Football (rev C)", + "aafbd2p", "All American Football (rev D, 2 Players)", + "aar_101", "Aaron Spelling (1.01)", + "aavenger", "Airborne Avenger", + "abacus", "Abacus (Ver 1.0)", + "abaseb", "Atari Baseball (set 1)", + "abaseb2", "Atari Baseball (set 2)", + "abattle", "Astro Battle (set 1)", + "abattle2", "Astro Battle (set 2)", + "abcop", "A.B. Cop (World, FD1094 317-0169b)", + "abcopj", "A.B. Cop (Japan, FD1094 317-0169b)", + "abigchs", "Big Cheese (Russia) (Atronic)", + "abnudge", "Animal Bonus Nudge (Version 2.1 Dual)", + "abnudgeb", "Animal Bonus Nudge (Version 2.0, set 1)", + "abnudged", "Animal Bonus Nudge (Version 2.0, set 2)", + "abnudgeo", "Animal Bonus Nudge (Version 1.7)", + "abscam", "Abscam", + "abunai", "Abunai Houkago - Mou Matenai (Japan 890325)", + "aburner", "After Burner", + "aburner2", "After Burner II", + "aburner2g", "After Burner II (German)", + "abv106", "Airborne", + "abv106r", "Airborne (Redemption)", + "ac1bbclb", "Big Break Club (Ace) (ACESYS1) (set 1)", + "ac1bbclba", "Big Break Club (Ace) (ACESYS1) (set 2)", + "ac1bluec", "Blue Chip (Pcp) (ACESYS1) (set 1)", + "ac1blueca", "Blue Chip (Pcp) (ACESYS1) (set 2)", + "ac1bluecb", "Blue Chip (Pcp) (ACESYS1) (set 3)", + "ac1bluecc", "Blue Chip (Pcp) (ACESYS1) (set 4)", + "ac1bluecd", "Blue Chip (Pcp) (ACESYS1) (set 5)", + "ac1clbmn", "Club Money (Ace) (ACESYS1) (set 1)", + "ac1clbsv", "Club Sovereign (Ace) (ACESYS1)", + "ac1clbxt", "Club Xtra (Ace) (ACESYS1) (set 1)", + "ac1clbxta", "Club Xtra (Ace) (ACESYS1) (set 2)", + "ac1dbldx", "Double Deluxe (Pcp) (ACESYS1)", + "ac1gogld", "Go For Gold (Ace) (ACESYS1) (set 1)", + "ac1hideh", "Hi De Hi Deluxe (Ace) (ACESYS1) (set 1)", + "ac1hideha", "Hi De Hi Deluxe (Ace) (ACESYS1) (set 2)", + "ac1hotpf", "Hot Profit (Ace) (ACESYS1)", + "ac1nudbk", "Nudge Break (Pcp) (ACESYS1) (set 1)", + "ac1nudbka", "Nudge Break (Pcp) (ACESYS1) (set 2)", + "ac1nudbkb", "Nudge Break (Pcp) (ACESYS1) (set 3)", + "ac1nudbkc", "Nudge Break (Pcp) (ACESYS1) (set 4)", + "ac1nudbkd", "Nudge Break (Pcp) (ACESYS1) (set 5)", + "ac1piaca", "Play It Again Casino (Ace) (ACESYS1)", + "ac1piacl", "Play It Again Club (Ace) (ACESYS1) (set 1)", + "ac1piacla", "Play It Again Club (Ace) (ACESYS1) (set 2)", + "ac1piaclb", "Play It Again Club (Ace) (ACESYS1) (set 3)", + "ac1piaclc", "Play It Again Club (Ace) (ACESYS1) (set 4)", + "ac1primt", "Primetime (Ace) (ACESYS1) (set 1)", + "ac1prmcl", "Premier Club (Ace) (ACESYS1) (set 1)", + "ac1prmcla", "Premier Club (Ace) (ACESYS1) (set 2)", + "ac1prmclb", "Premier Club (Ace) (ACESYS1) (set 3)", + "ac1prmclc", "Premier Club (Ace) (ACESYS1) (set 4)", + "ac1pster", "Pound Sterling (Ace) (ACESYS1)", + "ac1pstrt", "Pound Stretcher (Pcp) (ACESYS1)", + "ac1roll", "Roll Up (Pcp) (ACESYS1) (set 1)", + "ac1rolla", "Roll Up (Pcp) (ACESYS1) (set 2)", + "ac1rollb", "Roll Up (Pcp) (ACESYS1) (set 3)", + "ac1rundx", "Runner Deluxe Club (Ace) (ACESYS1) (set 1)", + "ac1rundxa", "Runner Deluxe Club (Ace) (ACESYS1) (set 2)", + "ac1shid", "Super Hi De Hi (Ace) (ACESYS1) (set 1)", + "ac1shida", "Super Hi De Hi (Ace) (ACESYS1) (set 2)", + "ac1sstrk", "Starstruck (Pcp) (ACESYS1) (set 1)", + "ac1sstrka", "Starstruck (Pcp) (ACESYS1) (set 2)", + "ac1sstrkb", "Starstruck (Pcp) (ACESYS1) (set 3)", + "ac1taklv", "Take It Or Leave It (Ace) (ACESYS1) (set 1)", + "ac1totb", "Top Of The Bill (Ace) (ACESYS1)", + "ac1xpres", "Xpress (Pcp) (ACESYS1)", + "ace", "Ace", + "aceattac", "Ace Attacker (FD1094 317-0059)", + "aceattaca", "Ace Attacker (Japan, System 16A, FD1094 317-0060)", + "acedrvrw", "Ace Driver: Racing Evolution (Rev. AD2)", + "acefruit", "Silhouette", + "acheart", "Arcana Heart", + "acheartf", "Arcana Heart Full", + "acitya", "Atlantic City Action", + "aclown", "Clown (Russia) (Atronic)", + "acombat", "Astro Combat (newer, CB)", + "acombat3", "Astro Combat (unencrypted)", + "acombato", "Astro Combat (older, PZ)", + "acommand", "Alien Command", + "acpsx", "Acclaim PSX", + "acrobatm", "Acrobat Mission", + "act2000", "Action 2000 (Version 3.5E Dual)", + "act2000b1", "Action 2000 (Version 3.5R, set 2)", + "act2000bx", "Action 2000 (Version 3.30XT, set 2)", + "act2000d1", "Action 2000 (Version 3.5R, set 1)", + "act2000dx", "Action 2000 (Version 3.30XT, set 1)", + "act2000o", "Action 2000 (Version 3.3)", + "act2000o2", "Action 2000 (Version 3.10XT)", + "act2000o3", "Action 2000 (Version 1.2)", + "act2000v1", "Action 2000 (Version 3.5R Dual)", + "act2000vx", "Action 2000 (Version 3.30XT Dual)", + "actfancr", "Act-Fancer Cybernetick Hyper Weapon (World revision 2)", + "actfancr1", "Act-Fancer Cybernetick Hyper Weapon (World revision 1)", + "actfancrj", "Act-Fancer Cybernetick Hyper Weapon (Japan revision 1)", + "actionhw", "Action Hollywood", + "ad2083", "A. D. 2083", + "ad4ctl", "Cop The Lot Club (Video) (Bellfruit) (Adder 4) (set 1)", + "ad4ctla", "Cop The Lot Club (Video) (Bellfruit) (Adder 4) (set 2)", + "ad4film", "Film Premiere (Video?) (Bellfruit) (Adder 4) (set 1)", + "ad4filma", "Film Premiere (Video?) (Bellfruit) (Adder 4) (set 2)", + "ad4skill", "Skill Dice (BFM) (Scorpion 4 + Adder 4)", + "ad5bpfpm", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 1)", + "ad5bpfpma", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 2)", + "ad5bpfpmb", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 3)", + "ad5bpfpmc", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 4)", + "ad5bpfpmd", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 5)", + "ad5btc", "Bullseye Triple Club (PR1758, BFGPBULS) (Bellfruit) (Adder 5) (set 1)", + "ad5btca", "Bullseye Triple Club (PR1758, BFGPBULS) (Bellfruit) (Adder 5) (set 3)", + "ad5btcb", "Bullseye Triple Club (PR1758, BFGNBULS) (Bellfruit) (Adder 5) (set 4)", + "ad5cmons", "Crazy Money (Bellfruit) (Adder 5) (set 1)", + "ad5cmonsa", "Crazy Money (Bellfruit) (Adder 5) (set 2)", + "ad5copsr", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 1)", + "ad5copsr0", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 7)", + "ad5copsr1", "Cops 'n' Robbers (PR2497) (Mazooma) (Adder 5) (set 2)", + "ad5copsr2", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 8)", + "ad5copsr3", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 1)", + "ad5copsr4", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 5)", + "ad5copsr5", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 2)", + "ad5copsr6", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 6)", + "ad5copsr7", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 4)", + "ad5copsra", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 2)", + "ad5copsrb", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 3)", + "ad5copsrc", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 1)", + "ad5copsrd", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 4)", + "ad5copsre", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 5)", + "ad5copsrf", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 6)", + "ad5copsrg", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 2)", + "ad5copsrh", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 1)", + "ad5copsri", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 2)", + "ad5copsrj", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 5)", + "ad5copsrk", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 7)", + "ad5copsrl", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 8)", + "ad5copsrm", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 9)", + "ad5copsrn", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 3)", + "ad5copsro", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 10)", + "ad5copsrp", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 11)", + "ad5copsrq", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 12)", + "ad5copsrr", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 4)", + "ad5copsrs", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 3)", + "ad5copsrt", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 4)", + "ad5copsru", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 6)", + "ad5copsrv", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 13)", + "ad5copsrw", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 14)", + "ad5copsrx", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 5)", + "ad5copsry", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 6)", + "ad5copsrz", "Cops 'n' Robbers (PR2497) (Mazooma) (Adder 5) (set 1)", + "ad5crcpt", "Cops 'n' Robbers Community Party (Bellfruit) (Adder 5) (set 1)", + "ad5crcpta", "Cops 'n' Robbers Community Party (Bellfruit) (Adder 5) (set 2)", + "ad5crsc", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 1)", + "ad5crsca", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 2)", + "ad5crscb", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 3)", + "ad5crscc", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 4)", + "ad5crscd", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 7)", + "ad5crsce", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 8)", + "ad5crscf", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 9)", + "ad5crscg", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 10)", + "ad5crsch", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 3)", + "ad5dnd", "Deal Or No Deal (Bellfruit) (Adder 5) (set 1)", + "ad5dnda", "Deal Or No Deal (Bellfruit) (Adder 5) (set 2)", + "ad5dndb", "Deal Or No Deal (Bellfruit) (Adder 5) (set 3)", + "ad5dndc", "Deal Or No Deal (Bellfruit) (Adder 5) (set 4)", + "ad5dndcl", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 1)", + "ad5dndcla", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 2)", + "ad5dndclb", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 3)", + "ad5dndclc", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 4)", + "ad5dndcld", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 5)", + "ad5dndcle", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 6)", + "ad5dndclf", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 20)", + "ad5dndclg", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 21)", + "ad5dndd", "Deal Or No Deal (Bellfruit) (Adder 5) (set 5)", + "ad5dnddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 1)", + "ad5dnddda", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 2)", + "ad5dnde", "Deal Or No Deal (Bellfruit) (Adder 5) (set 6)", + "ad5dndf", "Deal Or No Deal (Bellfruit) (Adder 5) (set 7)", + "ad5dndg", "Deal Or No Deal (Bellfruit) (Adder 5) (set 8)", + "ad5dndh", "Deal Or No Deal (Bellfruit) (Adder 5) (set 9)", + "ad5dndi", "Deal Or No Deal (Bellfruit) (Adder 5) (set 10)", + "ad5dndj", "Deal Or No Deal (Bellfruit) (Adder 5) (set 11)", + "ad5dndk", "Deal Or No Deal (Bellfruit) (Adder 5) (set 12)", + "ad5dndl", "Deal Or No Deal (Bellfruit) (Adder 5) (set 13)", + "ad5dndm", "Deal Or No Deal (Bellfruit) (Adder 5) (set 14)", + "ad5dndn", "Deal Or No Deal (Bellfruit) (Adder 5) (set 15)", + "ad5dndo", "Deal Or No Deal (Bellfruit) (Adder 5) (set 16)", + "ad5dndp", "Deal Or No Deal (Bellfruit) (Adder 5) (set 17)", + "ad5dndpg", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 1)", + "ad5dndpga", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 2)", + "ad5dndpgb", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 3)", + "ad5dndpgc", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 4)", + "ad5dndpl", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 1)", + "ad5dndpla", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 2)", + "ad5dndplb", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 3)", + "ad5dndplc", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 4)", + "ad5dndq", "Deal Or No Deal (Bellfruit) (Adder 5) (set 18)", + "ad5dndr", "Deal Or No Deal (Bellfruit) (Adder 5) (set 19)", + "ad5dndu", "Deal Or No Deal (Bellfruit) (Adder 5) (set 22)", + "ad5dndv", "Deal Or No Deal (Bellfruit) (Adder 5) (set 23)", + "ad5eyes", "Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 1)", + "ad5eyesa", "Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 2)", + "ad5eyesb", "Eyes Down (PR2246, MAZNEYDW) (Mazooma) (Adder 5) (set 1)", + "ad5eyesc", "Eyes Down (PR2246, MAZPEYDW) (Mazooma) (Adder 5) (set 1)", + "ad5eyesd", "Eyes Down (PR2242, MAZPEYDW) (Mazooma) (Adder 5) (set 1)", + "ad5eyese", "Eyes Down (PR2242, MAZPEYDW) (Mazooma) (Adder 5) (set 2)", + "ad5eyesf", "Eyes Down (PR2246, MAZPEYDW) (Mazooma) (Adder 5) (set 2)", + "ad5eyesg", "Eyes Down (PR2246, MAZNEYDW) (Mazooma) (Adder 5) (set 2)", + "ad5gldmn", "Gold Mine (Bellfruit) (Adder 5) (set 1)", + "ad5gldmna", "Gold Mine (Bellfruit) (Adder 5) (set 2)", + "ad5gldmnb", "Gold Mine (Bellfruit) (Adder 5) (set 3)", + "ad5gldmnc", "Gold Mine (Bellfruit) (Adder 5) (set 4)", + "ad5gldmnd", "Gold Mine (Bellfruit) (Adder 5) (set 5)", + "ad5gldmne", "Gold Mine (Bellfruit) (Adder 5) (set 6)", + "ad5gldmnf", "Gold Mine (Bellfruit) (Adder 5) (set 7)", + "ad5gldmng", "Gold Mine (Bellfruit) (Adder 5) (set 8)", + "ad5gldmnh", "Gold Mine (Bellfruit) (Adder 5) (set 9)", + "ad5gldmni", "Gold Mine (Bellfruit) (Adder 5) (set 10)", + "ad5gldmnj", "Gold Mine (Bellfruit) (Adder 5) (set 11)", + "ad5gldmnk", "Gold Mine (Bellfruit) (Adder 5) (set 12)", + "ad5gldwn", "Golden Winner (Mazooma) (Adder 5) (set 1)", + "ad5gldwna", "Golden Winner (Mazooma) (Adder 5) (set 2)", + "ad5hir", "Hi Roller (Bellfruit) (Adder 5) (set 1)", + "ad5hira", "Hi Roller (Bellfruit) (Adder 5) (set 2)", + "ad5hirb", "Hi Roller (Bellfruit) (Adder 5) (set 3)", + "ad5hirc", "Hi Roller (Bellfruit) (Adder 5) (set 4)", + "ad5hircl", "Hi Roller Club (Bellfruit) (Adder 5) (set 1)", + "ad5hircla", "Hi Roller Club (Bellfruit) (Adder 5) (set 2)", + "ad5hirclb", "Hi Roller Club (Bellfruit) (Adder 5) (set 3)", + "ad5jckmo", "Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 1)", + "ad5jckmoa", "Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 2)", + "ad5jckmob", "Jackpot Monopoly (PR2253, MAZNJACM) (Mazooma) (Adder 5)", + "ad5jckmoc", "Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 3)", + "ad5jckmod", "Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 1)", + "ad5jckmoe", "Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 2)", + "ad5mcob", "Monte Carlo Or Bust (Qps) (Adder 5) (set 1)", + "ad5mcoba", "Monte Carlo Or Bust (Qps) (Adder 5) (set 2)", + "ad5mcobb", "Monte Carlo Or Bust (Qps) (Adder 5) (set 3)", + "ad5mcobc", "Monte Carlo Or Bust (Qps) (Adder 5) (set 4)", + "ad5monop", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 1)", + "ad5monopa", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 2)", + "ad5monopb", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 3)", + "ad5monopc", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 4)", + "ad5monopd", "Random Monopoly (PR2221, MAZNRNDN) (Mazooma) (Adder 5) (set 1)", + "ad5monope", "Random Monopoly (PR2221, MAZNRNDN) (Mazooma) (Adder 5) (set 2)", + "ad5monopf", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 1)", + "ad5monopg", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 2)", + "ad5monoph", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 3)", + "ad5monopi", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 4)", + "ad5monopj", "Random Monopoly (PR2221, MAZPRNDN) (Mazooma) (Adder 5) (set 1)", + "ad5monopk", "Random Monopoly (PR2221, MAZPRNDN) (Mazooma) (Adder 5) (set 2)", + "ad5mowow", "Monopoly Wheel Of Wealth (PR2365, MAZNBPFP) (Mazooma) (Adder 5) (set 1)", + "ad5mowowa", "Monopoly Wheel Of Wealth (PR2365, MAZNWOWT) (Mazooma) (Adder 5) (set 1)", + "ad5mowowb", "Monopoly Wheel Of Wealth (PR2365, MAZNWOWT) (Mazooma) (Adder 5) (set 2)", + "ad5mowowc", "Monopoly Wheel Of Wealth (PR2389, MAZNWWBU) (Mazooma) (Adder 5)", + "ad5mowowd", "Monopoly Wheel Of Wealth (PR2365, MAZNMWOW) (Mazooma) (Adder 5)", + "ad5mowowe", "Monopoly Wheel Of Wealth (PR2365, MAZPBPFP) (Mazooma) (Adder 5) (set 1)", + "ad5mowowf", "Monopoly Wheel Of Wealth (PR2365, MAZPWOWT) (Mazooma) (Adder 5) (set 1)", + "ad5mowowg", "Monopoly Wheel Of Wealth (PR2365, MAZPWOWT) (Mazooma) (Adder 5) (set 2)", + "ad5mowowh", "Monopoly Wheel Of Wealth (PR2389, MAZPWWBU) (Mazooma) (Adder 5)", + "ad5mowowi", "Monopoly Wheel Of Wealth (PR2365, MAZPMWOW) (Mazooma) (Adder 5)", + "ad5mowowj", "Monopoly Wheel Of Wealth (PR3075) (Adder 5) (set 1)", + "ad5mowowk", "Monopoly Wheel Of Wealth (PR3075) (Adder 5) (set 2)", + "ad5mowowl", "Monopoly Wheel Of Wealth (PR2365, MAZNBPFP) (Mazooma) (Adder 5) (set 2)", + "ad5mowowm", "Monopoly Wheel Of Wealth (PR2365, MAZPBPFP) (Mazooma) (Adder 5) (set 2)", + "ad5mr2r", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 1)", + "ad5mr2ra", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 2)", + "ad5mr2rb", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 3)", + "ad5mr2rc", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 4)", + "ad5mr2rd", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 5)", + "ad5mr2re", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 6)", + "ad5mr2rf", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 7)", + "ad5mr2rg", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 8)", + "ad5mr2rh", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 9)", + "ad5mww", "Random Monopoly Wonders Of The World (PR2284) (Mazooma) (Adder 5)", + "ad5mwwa", "Random Monopoly Wonders Of The World (PR2291) (Mazooma) (Adder 5)", + "ad5pking", "Poker King (Bellfruit) (Adder 5) (set 1)", + "ad5pkinga", "Poker King (Bellfruit) (Adder 5) (set 2)", + "ad5pp", "Pink Panther (PR2283, QPSNPINK) (Mazooma) (Adder 5) (set 1)", + "ad5ppa", "Pink Panther (PR2283, QPSNPINK) (Mazooma) (Adder 5) (set 2)", + "ad5ppb", "Pink Panther (PR2267, MAZNPINK) (Mazooma) (Adder 5) (set 1)", + "ad5ppbtb", "Pink Panther Break The Bank (PR2304, QPSNPPBB) (Qps) (Adder 5) (set 1)", + "ad5ppbtba", "Pink Panther Break The Bank (PR2304, QPSNPPBB) (Qps) (Adder 5) (set 2)", + "ad5ppbtbb", "Pink Panther Break The Bank (PR2304, QPSPPPBB) (Qps) (Adder 5) (set 1)", + "ad5ppbtbc", "Pink Panther Break The Bank (PR2304, QPSPPPBB) (Qps) (Adder 5) (set 2)", + "ad5ppc", "Pink Panther (PR2267, MAZNPINK) (Mazooma) (Adder 5) (set 2)", + "ad5ppd", "Pink Panther (MAZNPINK) (Mazooma) (Adder 5) (set 1)", + "ad5ppe", "Pink Panther (MAZNPINK) (Mazooma) (Adder 5) (set 2)", + "ad5ppf", "Pink Panther (PR2283, QPSPPINK) (Mazooma) (Adder 5) (set 1)", + "ad5ppg", "Pink Panther (PR2283, QPSPPINK) (Mazooma) (Adder 5) (set 2)", + "ad5pph", "Pink Panther (PR2267, MAZPPINK) (Mazooma) (Adder 5)", + "ad5ppi", "Pink Panther (MAZPPINK) (Mazooma) (Adder 5) (set 1)", + "ad5ppj", "Pink Panther (MAZPPINK) (Mazooma) (Adder 5) (set 2)", + "ad5rapid", "Rapid Pay (Bellfruit) (Adder 5) (set 1)", + "ad5rapida", "Rapid Pay (Bellfruit) (Adder 5) (set 2)", + "ad5rcash", "Reel Cash (Mazooma) (Adder 5) (set 1)", + "ad5rcasha", "Reel Cash (Mazooma) (Adder 5) (set 2)", + "ad5rroul", "Reel Roulette (QPSNRLRO) (Mazooma) (Adder 5)", + "ad5rroula", "Reel Roulette (QPSPRLRO) (Mazooma) (Adder 5)", + "ad5rroulb", "Reel Roulette (MAZNRERO) (Mazooma) (Adder 5)", + "ad5rroulc", "Reel Roulette (MAZPRERO) (Mazooma) (Adder 5)", + "ad5rsclb", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 1)", + "ad5rsclba", "Random Spinner Club (PR1826, BFGNRNDN) (Bellfruit) (Adder 5) (set 1)", + "ad5rsclbb", "Random Spinner Club (PR1826, BFGNRNDN) (Bellfruit) (Adder 5) (set 2)", + "ad5rsclbc", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 2)", + "ad5rsclbd", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 3)", + "ad5rsclbe", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 4)", + "ad5rsclbf", "Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 1)", + "ad5rsclbg", "Random Spinner Club (PR1826, BFGPRNDN) (Bellfruit) (Adder 5) (set 1)", + "ad5rsclbh", "Random Spinner Club (PR1826, BFGPRNDN) (Bellfruit) (Adder 5) (set 2)", + "ad5rsclbi", "Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 2)", + "ad5rsclbj", "Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 3)", + "ad5rsnw", "Random Spin 'n' Win (PR2226, MAZNRNDN) (Mazooma) (Adder 5) (set 1)", + "ad5rsnwa", "Random Spin 'n' Win (PR2226, MAZNRNDN) (Mazooma) (Adder 5) (set 2)", + "ad5rsnwb", "Random Spin 'n' Win (PR2226, MAZPRNDN) (Mazooma) (Adder 5) (set 1)", + "ad5rsnwc", "Random Spin 'n' Win (PR2226, MAZPRNDN) (Mazooma) (Adder 5) (set 2)", + "ad5rspin", "Random Spinner (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 1)", + "ad5rspinb", "Random Spinner (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 2)", + "ad5rspinc", "Random Spinner (Bellfruit) (Adder 5) (set 1)", + "ad5rsrm", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 1)", + "ad5rsrma", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 2)", + "ad5rsrr", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 3)", + "ad5rsrra", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 4)", + "ad5rwclb", "Random Winner Club (PR1756, BFGNRWSX) (Bellfruit) (Adder 5) (set 1)", + "ad5rwclba", "Random Winner Club (PR1756, BFGNRWSX) (Bellfruit) (Adder 5) (set 2)", + "ad5rwclbb", "Random Winner Club (PR1756, BFGPRWSX) (Bellfruit) (Adder 5) (set 1)", + "ad5rwclbc", "Random Winner Club (PR1756, BFGPRWSX) (Bellfruit) (Adder 5) (set 2)", + "ad5rwclbd", "Random Winner Club (PR1757, BFGPRWCL) (Bellfruit) (Adder 5)", + "ad5rwclbe", "Random Winner Club (PR1757, BFGNRWCL) (Bellfruit) (Adder 5)", + "ad5sslam", "Super Slam (Bellfruit) (Adder 5) (set 1)", + "ad5sslama", "Super Slam (Bellfruit) (Adder 5) (set 2)", + "ad5sslamb", "Super Slam (Bellfruit) (Adder 5) (set 3)", + "ad5sslamc", "Super Slam (Bellfruit) (Adder 5) (set 4)", + "ad5sslamd", "Super Slam (Bellfruit) (Adder 5) (set 5)", + "ad5sslame", "Super Slam (Bellfruit) (Adder 5) (set 6)", + "ad5sslamf", "Super Slam (Bellfruit) (Adder 5) (set 7)", + "ad5tornc", "Tornado Club (PR1629, 5.5, rv 8, BFGNTORD) (Bellfruit) (Adder 5)", + "ad5tornca", "Tornado Club (PR1629, 5.8, rv 7, BFGNTORD) (Bellfruit) (Adder 5)", + "ad5torncb", "Tornado Club (PR1629, 5.5, rv 8, BFGPTORD) (Bellfruit) (Adder 5)", + "ad5torncc", "Tornado Club (PR1629, 5.8, rv 7, BFGPTORD) (Bellfruit) (Adder 5)", + "ad5torncd", "Tornado Club (PR1627, 0.1, rv 1, BFGPTORN) (Bellfruit) (Adder 5)", + "ad5tornce", "Tornado Club (PR1627, 0.1, rv 1, BFGNTORN) (Bellfruit) (Adder 5)", + "ad5vlv", "Viva Las Vegas (Bellfruit) (Adder 5) (set 1)", + "ad5vlvb", "Viva Las Vegas (Bellfruit) (Adder 5) (set 2)", + "ad5vlvc", "Viva Las Vegas (Bellfruit) (Adder 5) (set 3)", + "ad5vlvd", "Viva Las Vegas (Bellfruit) (Adder 5) (set 4)", + "ad5vlve", "Viva Las Vegas (Bellfruit) (Adder 5) (set 5)", + "ad5vlvf", "Viva Las Vegas (Bellfruit) (Adder 5) (set 6)", + "ad5vpa", "Video Poker Ace (Bellfruit) (Adder 5) (set 1)", + "ad5vpaa", "Video Poker Ace (Bellfruit) (Adder 5) (set 2)", + "ad5vpab", "Video Poker Ace (Bellfruit) (Adder 5) (set 3)", + "ad5vpac", "Video Poker Ace (Bellfruit) (Adder 5) (set 4)", + "adillor", "Armadillo Racing (Rev. AM1 Ver.A)", + "adonis", "Adonis (0200751V, NSW/ACT)", + "adults", "Adults Only (Russia) (Extrema)", + "aerfboo2", "Aero Fighters (bootleg set 2)", + "aerfboot", "Aero Fighters (bootleg set 1)", + "aeroboto", "Aeroboto", + "aerofgt", "Aero Fighters (World / USA + Canada / Korea / Hong Kong / Taiwan) (newer hardware)", + "aerofgtb", "Aero Fighters (Taiwan / Japan, set 1)", + "aerofgtc", "Aero Fighters (Taiwan / Japan, set 2)", + "aerofgts", "Aero Fighters Special (Taiwan)", + "aerolitos", "Aerolitos (Spanish bootleg of Asteroids)", + "afighter", "Action Fighter (FD1089A 317-0018)", + "afire", "Astro Fire", + "afm_10", "Attack From Mars (1.0)", + "afm_11", "Attack From Mars (1.1)", + "afm_113", "Attack From Mars (1.13)", + "afm_113b", "Attack From Mars (1.13b)", + "afm_11u", "Attack From Mars (1.1 Ultrapin)", + "aftor", "Af-Tor", + "afv_l4", "Addams Family Values (Coin Dropper L-4)", + "agallet", "Air Gallet (Europe)", + "agalleth", "Air Gallet (Hong Kong)", + "agalletj", "Akuu Gallet (Japan)", + "agalletk", "Air Gallet (Korea)", + "agallett", "Air Gallet (Taiwan)", + "agalletu", "Air Gallet (USA)", + "agent777", "Agents 777", + "agentx1", "Agent X (prototype, rev 1)", + "agentx2", "Agent X (prototype, rev 2)", + "agentx3", "Agent X (prototype, rev 3)", + "agentx4", "Agent X (prototype, rev 4)", + "agress", "Agress - Missile Daisenryaku (Japan)", + "agressb", "Agress - Missile Daisenryaku (English bootleg)", + "agsoccer", "A.G. Soccer Ball", + "ainferno", "Air Inferno (US)", + "ainfernoj", "Air Inferno (Japan)", + "airass", "Air Assault (World)", + "airattck", "Air Attack (set 1)", + "airattcka", "Air Attack (set 2)", + "airbustr", "Air Buster: Trouble Specialty Raid Unit (World)", + "airbustrb", "Air Buster: Trouble Specialty Raid Unit (bootleg)", + "airbustrj", "Air Buster: Trouble Specialty Raid Unit (Japan)", + "airco22b", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)", + "aircomb", "Air Combat (US)", + "aircombj", "Air Combat (Japan)", + "airduel", "Air Duel (Japan)", + "airlbios", "Naomi Airline Pilots Deluxe Bios", + "airrace", "Air Race (prototype)", + "airraid", "Air Raid (encrypted)", + "airtrix", "Air Trix", + "airwolf", "Airwolf", + "airwolfa", "Airwolf (US)", + "ajax", "Ajax", + "ajaxj", "Ajax (Japan)", + "akamaru", "Panel & Variety Akamaru Q Jousyou Dont-R", + "aking", "Angler King (AG1 Ver. A)", + "akiss", "Mahjong Angel Kiss", + "akkanvdr", "Akkanbeder (Ver 2.5J 1995/06/14)", + "akumajou", "Akuma-Jou Dracula (Japan version P)", + "akumajoun", "Akuma-Jou Dracula (Japan version N)", + "aladmdb", "Aladdin (bootleg of Japanese Megadrive version)", + "albatross", "Albatross (US Prototype?)", + "alcapone", "Al Capone", + "alcat_l7", "Alley Cats (Shuffle) (L-7)", + "alcon", "Alcon (US)", + "aleck64", "Aleck64 PIF BIOS", + "alexkidd", "Alex Kidd: The Lost Stars (set 2, unprotected)", + "alexkidd1", "Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021)", + "alg_bios", "American Laser Games BIOS", + "algar_l1", "Algar (L-1)", + "ali", "Ali", + "alibaba", "Ali Baba and 40 Thieves", + "alibabab", "Mustafa and 40 Thieves (bootleg)", + "alien", "Alien: The Arcade Medal Edition", + "alien3", "Alien3: The Gun (World)", + "alien3u", "Alien3: The Gun (US)", + "alienar", "Alien Arena", + "alienaru", "Alien Arena (Stargate upgrade)", + "aliencha", "Alien Challenge (World)", + "alienchac", "Alien Challenge (China)", + "aliencr", "Alien Crush", + "alienfnt", "Alien Front (Rev T)", + "alienfnta", "Alien Front (Rev A)", + "alieninv", "Alien Invasion", + "alieninvp2", "Alien Invasion Part II", + "aliens", "Aliens (World set 1)", + "aliens2", "Aliens (World set 2)", + "aliens3", "Aliens (World set 3)", + "aliensa", "Aliens (Asia)", + "aliensec", "Alien Sector", + "aliensj", "Aliens (Japan set 1)", + "aliensj2", "Aliens (Japan set 2)", + "alienstr", "Alien Star", + "aliensu", "Aliens (US)", + "aliensyn", "Alien Syndrome (set 4, System 16B, unprotected)", + "aliensyn2", "Alien Syndrome (set 2, System 16A, FD1089A 317-0033)", + "aliensyn3", "Alien Syndrome (set 3, System 16B, FD1089A 317-0033)", + "aliensyn5", "Alien Syndrome (set 5, System 16A, FD1089B 317-0037)", + "aliensyn7", "Alien Syndrome (set 7, System 16B, MC-8123B 317-00xx)", + "aliensynj", "Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033)", + "aliensynjo", "Alien Syndrome (set 1, Japan, old, System 16A, FD1089A 317-0033)", + "aligator", "Alligator Hunt", + "aligatorun", "Alligator Hunt (unprotected)", + "alleymas", "Alley Master", + "allied", "Allied System", + "alpha1v", "Alpha One (Vision Electronics)", + "alphaho", "Alpha Fighter / Head On", + "alpham2", "Alpha Mission II / ASO II - Last Guardian (NGM-007)(NGH-007)", + "alpham2p", "Alpha Mission II / ASO II - Last Guardian (prototype)", + "alphamis", "Alpha Mission", + "alphaone", "Alpha One (prototype, 3 lives)", + "alphaonea", "Alpha One (prototype, 5 lives)", + "alphaxz", "The Alphax Z (Japan)", + "alpilota", "Airline Pilots (Rev A)", + "alpiltdx", "Airline Pilots Deluxe (Rev B)", + "alpine", "Alpine Ski (set 1)", + "alpinea", "Alpine Ski (set 2)", + "alpinerc", "Alpine Racer (Rev. AR2 Ver.C)", + "alpinerd", "Alpine Racer (Rev. AR2 Ver.D)", + "alpinesa", "Alpine Surfer (Rev. AF2 Ver.A)", + "alpinr2a", "Alpine Racer 2 (Rev. ARS2 Ver.A)", + "alpinr2b", "Alpine Racer 2 (Rev. ARS2 Ver.B)", + "alpok_f6", "Alien Poker (L-6 French speech)", + "alpok_l2", "Alien Poker (L-2)", + "alpok_l6", "Alien Poker (L-6)", + "altair", "Altair", + "altbeast", "Altered Beast (set 8, 8751 317-0078)", + "altbeast2", "Altered Beast (set 2, MC-8123B 317-0066)", + "altbeast4", "Altered Beast (set 4, MC-8123B 317-0066)", + "altbeast5", "Altered Beast (set 5, FD1094 317-0069)", + "altbeast6", "Altered Beast (set 6, 8751 317-0076)", + "altbeastbl", "Altered Beast (Datsu bootleg)", + "altbeastj", "Juuouki (set 7, Japan, 8751 317-0077)", + "altbeastj1", "Juuouki (set 1, Japan, FD1094 317-0065)", + "altbeastj3", "Juuouki (set 3, Japan, FD1094 317-0068)", + "am_mg24", "Multi Game I (V.Ger 2.4)", + "am_mg3", "Multi Game III (V.Ger 3.5)", + "am_mg31i", "Multi Game III (S.Ita 3.1)", + "am_mg33i", "Multi Game III (S.Ita 3.3)", + "am_mg34i", "Multi Game III (S.Ita 3.4)", + "am_mg35i", "Multi Game III (S.Ita 3.5)", + "am_mg3a", "Multi Game III (V.Ger 3.64)", + "amatelas", "Sei Senshi Amatelass", + "amazon", "Soldier Girl Amazon", + "amazonh", "Amazon Hunt", + "ambush", "Ambush", + "ambushh", "Ambush (hack?)", + "ambushj", "Ambush (Japan)", + "ambushv", "Ambush (Volt Electronics)", + "amclink", "Amcoe Link Control Box (Version 2.2)", + "amerdart", "AmeriDarts (set 1)", + "amerdart2", "AmeriDarts (set 2)", + "amerdart3", "AmeriDarts (set 3)", + "america", "America 1492", + "amidar", "Amidar", + "amidar1", "Amidar (older)", + "amidarb", "Amidar (bootleg)", + "amidaro", "Amidar (Olympia)", + "amidars", "Amidar (Scramble hardware)", + "amidaru", "Amidar (Stern Electronics)", + "amigo", "Amigo", + "ampkr228", "American Poker II (iamp2 v28)", + "ampkr2b1", "American Poker II (bootleg, set 1)", + "ampkr2b2", "American Poker II (bootleg, set 2)", + "ampkr2b3", "American Poker II (bootleg, set 3)", + "ampkr2b4", "American Poker II (bootleg, set 4)", + "ampkr95", "American Poker 95", + "ampoker2", "American Poker II", + "amspdwy", "American Speedway (set 1)", + "amspdwya", "American Speedway (set 2)", + "amusco", "American Music Poker (V1.4)", + "amuse", "Amuse (Version 50.08 IBA)", + "amuse1", "Amuse (Version 30.08 IBA)", + "ancienta", "Ancient Atlantis (set 1)", + "ancientaa", "Ancient Atlantis (set 2)", + "ancientab", "Ancient Atlantis (set 3)", + "ancientac", "Ancient Atlantis (set 4)", + "ancientad", "Ancient Atlantis (set 5)", + "andretti", "Mario Andretti", + "andretti4", "Mario Andretti (rev.T4)", + "androdun", "Andro Dunos (NGM-049)(NGH-049)", + "andromed", "Andromeda (Japan?)", + "andromep", "Andromeda (set 1)", + "andromepa", "Andromeda (set 2)", + "angelkds", "Angel Kids (Japan)", + "anibonus", "Animal Bonus (Version 1.8E Dual)", + "anibonusb1", "Animal Bonus (Version 1.7R, set 1)", + "anibonusb2", "Animal Bonus (Version 1.7LT, set 1)", + "anibonusd1", "Animal Bonus (Version 1.7R, set 2)", + "anibonusd2", "Animal Bonus (Version 1.7LT, set 2)", + "anibonuso", "Animal Bonus (Version 1.5)", + "anibonuso2", "Animal Bonus (Version 1.4, set 1)", + "anibonuso3", "Animal Bonus (Version 1.4, set 2)", + "anibonusv1", "Animal Bonus (Version 1.8R Dual)", + "anibonusv2", "Animal Bonus (Version 1.8LT Dual)", + "anibonusxo", "Animal Bonus (Version 1.50XT)", + "anibonusxo2", "Animal Bonus (Version 1.40XT, set 1)", + "anibonusxo3", "Animal Bonus (Version 1.40XT, set 2)", + "animalc", "Animal Catch", + "animaljr", "Exciting Animal Land Jr. (USA)", + "animaljrj", "Waiwai Animal Land Jr. (Japan)", + "animaljrs", "Animalandia Jr. (Spanish)", + "anithunt", "Animal Treasure Hunt (Version 1.9R, set 1)", + "anithuntd1", "Animal Treasure Hunt (Version 1.9R, set 2)", + "anithunto", "Animal Treasure Hunt (Version 1.7)", + "anithunto2", "Animal Treasure Hunt (Version 1.5)", + "anithuntv1", "Animal Treasure Hunt (Version 1.9R Dual)", + "anmlbskt", "Animal Basket", + "antar", "Antar (set 1)", + "antar2", "Antar (set 2)", + "antcleo", "Antony and Cleopatra (10177211, Malaysia)", + "anteater", "Anteater", + "anteaterg", "Ameisenbaer (German)", + "anteateruk", "The Anteater (UK)", + "antiairc", "Anti-Aircraft [TTL]", + "aodk", "Aggressors of Dark Kombat / Tsuukai GANGAN Koushinkyoku (ADM-008)(ADH-008)", + "aof", "Art of Fighting / Ryuuko no Ken (NGM-044)(NGH-044)", + "aof2", "Art of Fighting 2 / Ryuuko no Ken 2 (NGM-056)", + "aof2a", "Art of Fighting 2 / Ryuuko no Ken 2 (NGH-056)", + "aof3", "Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden", + "aof3k", "Art of Fighting 3 - The Path of the Warrior (Korean release)", + "aoh", "Age Of Heroes - Silkroad 2 (v0.63 - 2001/02/07)", + "apache3", "Apache 3", + "apache3a", "Apache 3 (Kana Corporation license)", + "apb", "APB - All Points Bulletin (rev 7)", + "apb1", "APB - All Points Bulletin (rev 1)", + "apb2", "APB - All Points Bulletin (rev 2)", + "apb3", "APB - All Points Bulletin (rev 3)", + "apb4", "APB - All Points Bulletin (rev 4)", + "apb5", "APB - All Points Bulletin (rev 5)", + "apb6", "APB - All Points Bulletin (rev 6)", + "apbf", "APB - All Points Bulletin (French)", + "apbg", "APB - All Points Bulletin (German)", + "aplatoon", "Platoon V.?.? US", + "apollo13", "Apollo 13", + "aponow", "Apocaljpse Now (bootleg of Rescue)", + "apparel", "Apparel Night (Japan 860929)", + "apple10", "Apple 10 (Ver 1.21)", + "appoooh", "Appoooh", + "aquajack", "Aqua Jack (World)", + "aquajackj", "Aqua Jack (Japan)", + "aquajacku", "Aqua Jack (US)", + "aquajet", "Aqua Jet (Rev. AJ2 Ver.B)", + "aqualand", "Aqualand", + "aquarium", "Aquarium (Japan)", + "aquarush", "Aqua Rush (Japan, AQ1/VER.A1)", + "ar_airh", "SportTime Table Hockey (Arcadia, set 1, V 2.1)", + "ar_airh2", "SportTime Table Hockey (Arcadia, set 2)", + "ar_argh", "Aaargh (Arcadia)", + "ar_bios", "Arcadia System BIOS", + "ar_blast", "Blastaball (Arcadia, V 2.1)", + "ar_bowl", "SportTime Bowling (Arcadia, V 2.1)", + "ar_dart", "World Darts (Arcadia, set 1, V 2.1)", + "ar_dart2", "World Darts (Arcadia, set 2)", + "ar_dlta", "Delta Command (Arcadia)", + "ar_fast", "Magic Johnson's Fast Break (Arcadia, V 2.8)", + "ar_fasta", "Magic Johnson's Fast Break (Arcadia, V 2.7)", + "ar_ldrb", "Leader Board (Arcadia, set 1, V 2.5)", + "ar_ldrba", "Leader Board (Arcadia, set 2, V 2.4)", + "ar_ldrbb", "Leader Board (Arcadia, set 3)", + "ar_ninj", "Ninja Mission (Arcadia, set 1, V 2.5)", + "ar_ninj2", "Ninja Mission (Arcadia, set 2)", + "ar_pm", "Pharaohs Match (Arcadia)", + "ar_rdwr", "RoadWars (Arcadia, V 2.3)", + "ar_sdwr", "Sidewinder (Arcadia, set 1, V 2.1)", + "ar_sdwr2", "Sidewinder (Arcadia, set 2)", + "ar_socc", "World Trophy Soccer (Arcadia, V 3.0)", + "ar_spot", "Spot (Arcadia, V 2.0)", + "ar_sprg", "Space Ranger (Arcadia, V 2.0)", + "ar_xeon", "Xenon (Arcadia, V 2.3)", + "arabfgt", "Arabian Fight (World)", + "arabfgtj", "Arabian Fight (Japan)", + "arabfgtu", "Arabian Fight (US)", + "arabian", "Arabian", + "arabiana", "Arabian (Atari)", + "arabianm", "Arabian Magic (Ver 1.0O 1992/07/06)", + "arabianmj", "Arabian Magic (Ver 1.0J 1992/07/06)", + "arabianmu", "Arabian Magic (Ver 1.0A 1992/07/06)", + "arac6000", "Super Six Plus II English Mark Darts", + "aracnis", "Aracnis (bootleg of Scorpion on Moon Cresta hardware)", + "arbalest", "Arbalester", + "arcadecl", "Arcade Classics (prototype)", + "arcadian", "Arcadia (NMK)", + "archrivl", "Arch Rivals (rev 4.0 6/29/89)", + "archrivla", "Arch Rivals (rev 2.0 5/03/89)", + "archrivlb", "Arch Rivals (rev 2.0 5/03/89, 8-way Joystick bootleg)", + "arctthnd", "Arctic Thunder (v1.002)", + "arctthndult", "Ultimate Arctic Thunder", + "arcwins", "Arctic Wins (4XF5227H03, USA)", + "area51", "Area 51 (R3000)", + "area51a", "Area 51 (Atari Games license)", + "area51mx", "Area 51 / Maximum Force Duo v2.0", + "area51t", "Area 51 (Time Warner license)", + "area88", "Area 88 (Japan)", + "area88r", "Area 88 (Japan Resale Ver.)", + "arena", "Arena", + "arescue", "Air Rescue", + "argus", "Argus", + "argusg", "Argus (Gottlieb, prototype)", + "arian", "Arian Mission", + "arist_l1", "Aristocrat (Shuffle) (L-1)", + "aristmk5", "MKV Set/Clear Chips (USA)", + "aristmk6", "Aristocrat MK6 Base (15011025, Malaysia)", + "ark1ball", "Arkanoid (bootleg with MCU, harder)", + "arkangc", "Arkanoid (Game Corporation bootleg, set 1)", + "arkangc2", "Arkanoid (Game Corporation bootleg, set 2)", + "arkanoid", "Arkanoid (World)", + "arkanoidj", "Arkanoid (Japan)", + "arkanoidjb", "Arkanoid (bootleg with MCU, set 1)", + "arkanoidjb2", "Arkanoid (bootleg with MCU, set 2)", + "arkanoidjo", "Arkanoid (Japan, older)", + "arkanoidu", "Arkanoid (US)", + "arkanoiduo", "Arkanoid (US, older)", + "arkarea", "Ark Area", + "arkatayt", "Arkanoid (Tayto bootleg)", + "arkatour", "Tournament Arkanoid (US)", + "arkbloc2", "Block (Game Corporation bootleg, set 2)", + "arkbloc3", "Block (Game Corporation bootleg, set 3)", + "arkblock", "Block (Game Corporation bootleg, set 1)", + "arkgcbl", "Arkanoid (bootleg on Block hardware, set 1)", + "arkgcbla", "Arkanoid (bootleg on Block hardware, set 2)", + "arknoid2", "Arkanoid - Revenge of DOH (World)", + "arknoid2b", "Arkanoid - Revenge of DOH (Japan bootleg)", + "arknoid2j", "Arkanoid - Revenge of DOH (Japan)", + "arknoid2u", "Arkanoid - Revenge of DOH (US)", + "arkretrn", "Arkanoid Returns (Ver 2.02O 1997/02/10)", + "arkretrnj", "Arkanoid Returns (Ver 2.02J 1997/02/10)", + "arktayt2", "Arkanoid (Tayto bootleg, harder)", + "arlingtn", "Arlington Horse Racing (v1.21-D)", + "armchmp2", "Arm Champs II v2.6", + "armchmp2o", "Arm Champs II v1.7", + "armedf", "Armed Formation", + "armedff", "Armed Formation (Fillmore license)", + "armora", "Armor Attack", + "armorap", "Armor Attack (prototype)", + "armorar", "Armor Attack (Rock-Ola)", + "armorcar", "Armored Car (set 1)", + "armorcar2", "Armored Car (set 2)", + "armwar", "Armored Warriors (Euro 941024)", + "armwar1d", "Armored Warriors (Euro 941011 Phoenix Edition) (bootleg)", + "armwara", "Armored Warriors (Asia 940920)", + "armwarr1", "Armored Warriors (Euro 941011)", + "armwaru", "Armored Warriors (USA 941024)", + "armwaru1", "Armored Warriors (USA 940920)", + "armwrest", "Arm Wrestling", + "as_acp", "unknown Astra 'ACP' (Astra, V403)", + "as_bbr", "Bullion Bars (Astra, V101)", + "as_bbra", "Bullion Bars (Astra, V102,alt)", + "as_bbrb", "Bullion Bars (Astra, V201)", + "as_bbrc", "Bullion Bars (Astra, V003)", + "as_bbrd", "Bullion Bars (Astra, V102)", + "as_bbre", "Bullion Bars (Astra, V105)", + "as_bbrf", "Bullion Bars (Astra, V004)", + "as_big10", "Big 10 (Astra, V500)", + "as_big10a", "Big 10 (Astra, V503)", + "as_big10b", "Big 10 (Astra, V507)", + "as_big10c", "Big 10 (Astra, V601)", + "as_big10d", "Big 10 (Astra, V605)", + "as_big15", "Big 15 (Astra, V101)", + "as_bigcs", "Big Cash (Astra, V101)", + "as_bigcsa", "Big Cash (Astra, V103)", + "as_bigtm", "Big Time (Astra, V003)", + "as_celeb", "Celebration (Astra, V100)", + "as_celeba", "Celebration (Astra, V101)", + "as_celebb", "Celebration (Astra, V201)", + "as_colmn", "Colour Of Money (Astra, V200)", + "as_colmna", "Colour Of Money (Astra, V107)", + "as_colmnb", "Colour Of Money (Astra, V108)", + "as_colmnc", "Colour Of Money (Astra, V109)", + "as_colmnd", "Colour Of Money (Astra, V908)", + "as_cshah", "Cash Ahoi (Lowen, V105)", + "as_cshcs", "Cash Castle (Lowen, V006)", + "as_csv", "Slot Slant (?) (Astra, V202)", + "as_dblcs", "Double Cash (Astra, V110)", + "as_dblcsa", "Double Cash (Astra, V112)", + "as_dblcsb", "Double Cash (Astra, V108)", + "as_dblcsc", "Double Cash (Astra, V109)", + "as_dblcsd", "Double Cash (Astra, V106)", + "as_dblcse", "Double Cash (Astra, V102)", + "as_dblcsf", "Double Cash (Astra, V100)", + "as_dblcsg", "Double Cash (Astra, V100, alt)", + "as_dblcsh", "Double Cash (Astra, V004)", + "as_djp", "Double Jackpot (Astra, V107)", + "as_djpa", "Double Jackpot (Astra, V004)", + "as_djpb", "Double Jackpot (Astra, V109)", + "as_fortn", "Fortune Teller (Astra, V009)", + "as_gof", "Game Of Fortune (Lowen, V208)", + "as_hc", "Hokey Cokey (Astra, V107)", + "as_hca", "Hokey Cokey (Astra, V109)", + "as_hcb", "Hokey Cokey (Astra, V110)", + "as_hcc", "Hokey Cokey (Astra, V111)", + "as_hcd", "Hokey Cokey (Astra, V909)", + "as_hog", "Hearts Of Gold (Astra, V002)", + "as_hr", "Hot Reel (Astra, V004)", + "as_hxr", "Hot Cross Run (Astra, V108)", + "as_jackb", "Jackpot Bell (Astra, V104)", + "as_jjive", "Jungle Jive (Astra, V107)", + "as_jjivea", "Jungle Jive (Astra, V106)", + "as_jjiveb", "Jungle Jive (Astra, V104)", + "as_jjivec", "Jungle Jive (Astra, V102)", + "as_jjived", "Jungle Jive (Astra, V101)", + "as_jjivee", "Jungle Jive (Astra, V101, alt)", + "as_jjivef", "Jungle Jive (Astra, V004)", + "as_jjiveg", "Jungle Jive (Astra, V005)", + "as_jmpj", "Jumping Jackpots (Astra, V100)", + "as_jmpja", "Jumping Jackpots (Astra, V102)", + "as_jolly", "Jolly Roger (Astra, V103)", + "as_jpx", "Jackpot X (Astra, V100)", + "as_jpxa", "Jackpot X (Astra, V101)", + "as_jpxb", "Jackpot X (Astra, V002)", + "as_kingc", "King Cash (Astra, V106)", + "as_kingca", "King Cash (Astra, V103)", + "as_koc", "King Of Clubs (Astra, V200)", + "as_koca", "King Of Clubs (Astra, V101)", + "as_lbt", "Little Big 10 (Astra, V103)", + "as_lbta", "Little Big 10 (Astra, V102)", + "as_ldl", "Little Devils (Astra, V700)", + "as_ldla", "Little Devils (Astra, V600)", + "as_ldlb", "Little Devils (Astra, V312)", + "as_ldlc", "Little Devils (Astra, V003)", + "as_ldld", "Little Devils (Astra, V102)", + "as_ldle", "Little Devils (Astra, V103)", + "as_letsp", "Let's Party (Astra, V904)", + "as_mp", "Mission Possible (Lowen, V118)", + "as_mp2", "Mission Possible 2 (Lowen, V114)", + "as_otr", "Over The Rainbow (Astra, V104)", + "as_otra", "Over The Rainbow (Astra, V102)", + "as_party", "Party Time (Astra, V105)", + "as_partya", "Party Time (Astra, V110)", + "as_partyb", "Party Time (Astra, V112)", + "as_partyc", "Party Time (Astra, V206)", + "as_partyd", "Party Time (Astra, V401)", + "as_partye", "Party Time (Astra, V907)", + "as_partyf", "Party Time (Astra, V906)", + "as_pb", "Piggy Banking (Astra, V105)", + "as_pharg", "Pharaoh's Gold (Astra, V005)", + "as_pharga", "Pharaoh's Gold (Astra, V101)", + "as_phargb", "Pharaoh's Gold (Astra, V102)", + "as_phargc", "Pharaoh's Gold (Astra, V104)", + "as_phargd", "Pharaoh's Gold (Astra, V106)", + "as_pharge", "Pharaoh's Gold (Astra, V107)", + "as_pia", "Pay It Again (Astra, V202)", + "as_piaa", "Pay It Again (Astra, V206)", + "as_piab", "Pay It Again (Astra, V904)", + "as_ptf", "Party Fruits (Astra, V102)", + "as_ptfa", "Party Fruits (Astra, V803)", + "as_ptfb", "Party Fruits (Astra, V905)", + "as_ptfc", "Party Fruits (Astra)", + "as_rab", "Ring A Bell (Astra, V105)", + "as_raba", "Ring A Bell (Astra, V106)", + "as_rabb", "Ring A Bell (Astra, V107)", + "as_rabc", "Ring A Bell (Astra, V104)", + "as_rbg", "River Boat Gambler (Astra, V304)", + "as_rbga", "River Boat Gambler (Astra, V303)", + "as_rbgb", "River Boat Gambler (Astra, V104)", + "as_rbgc", "River Boat Gambler (Astra, V102)", + "as_rbgd", "River Boat Gambler (Astra, V101)", + "as_rbge", "River Boat Gambler (Astra, V008)", + "as_rbglo", "River Boat Gambler (Lowen, V106)", + "as_rox", "Roll X (Astra, V006)", + "as_rtr", "Ready To Roll (Astra, V101)", + "as_rtra", "Ready To Roll (Astra, V101, alt 1)", + "as_rtrb", "Ready To Roll (Astra, V101, alt 2)", + "as_rtrc", "Ready To Roll (Astra, V101, alt 3)", + "as_rtrd", "Ready To Roll (Astra, V100, )", + "as_rtre", "Ready To Roll (Astra, V100, alt)", + "as_rtrf", "Ready To Roll (Astra, V200)", + "as_rtrg", "Ready To Roll (Astra, V200, alt)", + "as_rtrh", "Ready To Roll (Astra, V202)", + "as_siu", "Step It Up (Astra, V202)", + "as_siua", "Step It Up (Astra, V203)", + "as_sld", "Super Little Devil (Astra, V700)", + "as_slda", "Super Little Devil (Astra, V600)", + "as_sldb", "Super Little Devil (Astra, V500)", + "as_sldc", "Super Little Devil (Astra, V400)", + "as_sldd", "Super Little Devil (Astra, V200)", + "as_slde", "Super Little Devil (Astra, V101)", + "as_sltcl", "Slots Classic (?) (Astra)", + "as_srb", "Super Ring a Bell (Astra, V004)", + "as_srba", "Super Ring a Bell (Astra, V100)", + "as_srbb", "Super Ring a Bell (Astra, V101)", + "as_srbc", "Super Ring a Bell (Astra, V201)", + "as_srbd", "Super Ring a Bell (Astra, V202)", + "as_srbe", "Super Ring a Bell (Astra, V203)", + "as_stp", "Stampede (Astra, V103)", + "as_stpa", "Stampede (Astra, V102)", + "as_stpb", "Stampede (Astra, V105)", + "as_tbl", "Triple Bells (Astra, V104)", + "as_tbla", "Triple Bells (Astra, V105)", + "as_tblb", "Triple Bells (Astra, V106)", + "as_tblc", "Triple Bells (Astra, V103)", + "as_tbld", "Triple Bells (Astra, V304)", + "as_tble", "Triple Bells (Astra, V303)", + "as_tblf", "Triple Bells (Astra, V301)", + "as_td", "Twin Dragons (Astra, V103)", + "as_tem", "Temptation (Astra, V101)", + "as_tema", "Temptation (Astra, V006)", + "as_topsl", "Top Slot (Astra, V103)", + "as_topsla", "Top Slot (Astra, V104)", + "as_topslb", "Top Slot (Astra, V201)", + "as_topslc", "Top Slot (Astra, V203)", + "as_topsld", "Top Slot (Astra, V205)", + "as_twp", "Twin Pots (Astra, V106)", + "as_twpa", "Twin Pots (Astra, V104)", + "as_vcv", "Viva Cash Vegas (Astra, V005)", + "as_vcva", "Viva Cash Vegas (Astra, V107)", + "as_vcvb", "Viva Cash Vegas (Astra, V106)", + "as_vcvc", "Viva Cash Vegas (Astra, V104)", + "as_vcvd", "Viva Cash Vegas (Astra, V102)", + "as_vcve", "Viva Cash Vegas (Astra, V101)", + "as_vn", "Vegas Nights (Astra, V205)", + "as_ws", "Win Streak (Astra, V100)", + "as_ww", "Wicked Willy (Astra, V203)", + "as_wwa", "Wicked Willy (Astra, V204)", + "as_wwb", "Wicked Willy (Astra, V205)", + "as_wwc", "Wicked Willy (Astra, V104)", + "as_wwd", "Wicked Willy (Astra, V103)", + "as_wwe", "Wicked Willy (Astra, V102)", + "ashnojoe", "Ashita no Joe (Japan)", + "ashura", "Ashura Blaster (World)", + "ashuraj", "Ashura Blaster (Japan)", + "ashurau", "Ashura Blaster (US)", + "asideral", "Ataque Sideral (Spanish bootleg of UniWar S)", + "asndynmt", "Asian Dynamite", + "aso", "ASO - Armored Scrum Object", + "asoccer", "American Soccer", + "assault", "Assault (Rev B)", + "assaultj", "Assault (Japan)", + "assaultp", "Assault Plus (Japan)", + "astannie", "Asteroid Annie and the Aliens", + "astdelux", "Asteroids Deluxe (rev 3)", + "astdelux1", "Asteroids Deluxe (rev 1)", + "astdelux2", "Asteroids Deluxe (rev 2)", + "asterix", "Asterix (ver EAD)", + "asterixaad", "Asterix (ver AAD)", + "asterixeaa", "Asterix (ver EAA)", + "asterixeac", "Asterix (ver EAC)", + "asterixj", "Asterix (ver JAD)", + "asterock", "Asterock (Sidam bootleg of Asteroids)", + "asterockv", "Asterock (Videotron bootleg of Asteroids)", + "asteroid", "Asteroids (rev 4)", + "asteroid1", "Asteroids (rev 1)", + "asteroid2", "Asteroids (rev 2)", + "asteroidb", "Asteroids (bootleg on Lunar Lander hardware)", + "astinvad", "Astro Invader", + "astoneag", "Stone Age (Astro, Ver. ENG.03.A)", + "astorm", "Alien Storm (World, 2 Players, FD1094 317-0154)", + "astorm3", "Alien Storm (World, 3 Players, FD1094 317-0148)", + "astormb2", "Alien Storm (bootleg, set 2)", + "astormbl", "Alien Storm (bootleg, set 1)", + "astormj", "Alien Storm (Japan, 2 Players, FD1094 317-0146)", + "astormu", "Alien Storm (US, 3 Players, FD1094 317-0147)", + "astrass", "Astra SuperStars (J 980514 V1.002)", + "astrians", "Astrians (clone of Swarm)", + "astrob", "Astro Blaster (version 3)", + "astrob1", "Astro Blaster (version 1)", + "astrob2", "Astro Blaster (version 2)", + "astrob2a", "Astro Blaster (version 2a)", + "astrobg", "Astro Blaster (German)", + "astrof", "Astro Fighter (set 1)", + "astrof2", "Astro Fighter (set 2)", + "astrof3", "Astro Fighter (set 3)", + "astrofl", "Astro Flash (Japan)", + "astron", "Astron Belt", + "astronp", "Astron Belt (Pioneer LDV1000)", + "astropal", "Astropal", + "astrowar", "Astro Wars", + "astyanax", "The Astyanax", + "asuka", "Asuka & Asuka (World)", + "asukaj", "Asuka & Asuka (Japan)", + "asurabld", "Asura Blade - Sword of Dynasty (Japan)", + "asurabus", "Asura Buster - Eternal Warriors (Japan)", + "asylum", "Asylum (prototype)", + "atamanot", "Computer Quiz Atama no Taisou (Japan)", + "atarians", "The Atarians", + "atarifb", "Atari Football (revision 2)", + "atarifb1", "Atari Football (revision 1)", + "atarifb4", "Atari Football (4 players)", + "atarisy1", "Atari System 1 BIOS", + "ataxx", "Ataxx (set 1)", + "ataxxa", "Ataxx (set 2)", + "ataxxe", "Ataxx (Europe)", + "ataxxj", "Ataxx (Japan)", + "atehate", "Athena no Hatena ?", + "atetris", "Tetris (set 1)", + "atetrisa", "Tetris (set 2)", + "atetrisb", "Tetris (bootleg set 1)", + "atetrisb2", "Tetris (bootleg set 2)", + "atetrisc", "Tetris (cocktail set 1)", + "atetrisc2", "Tetris (cocktail set 2)", + "athena", "Athena", + "atla_ltd", "Atlantis (LTD)", + "atlantca", "Atlantica (Russia) (Atronic) (set 1)", + "atlantcaa", "Atlantica (Russia) (Atronic) (set 2)", + "atlantip", "Atlantis", + "atlantis", "Battle of Atlantis (set 1)", + "atlantis2", "Battle of Atlantis (set 2)", + "atlantisb", "Battle of Atlantis (bootleg)", + "atlantol", "Atlant Olimpic", + "atleta", "Atleta", + "atluspsx", "Atlus PSX", + "atombjt", "Atom (bootleg of Bombjack Twin)", + "atomboy", "Atomic Boy (revision B)", + "atomboya", "Atomic Boy (revision A)", + "atomicp", "Atomic Point (Korea)", + "atompunk", "Atomic Punk (US)", + "atpsx", "Atari PSX", + "atronic", "Atronic SetUp/Clear Chips (Russia, set 1)", + "atronica", "Atronic SetUp/Clear Chips (Russia, set 2)", + "attack", "Attack", + "attackfc", "Attack Force", + "attckexd", "Attack [TTL]", + "attckufo", "Attack Ufo", + "attila", "Attila The Hun", + "atvtrack", "ATV Track (set 1)", + "atvtracka", "ATV Track (set 2)", + "atworld", "Around The World (Version 1.4R CGA)", + "atworldd1", "Around The World (Version 1.3R CGA)", + "atworlde1", "Around The World (Version 1.3E CGA)", + "aurail", "Aurail (set 3, US, unprotected)", + "aurail1", "Aurail (set 2, World, FD1089B 317-0168)", + "aurailj", "Aurail (set 1, Japan, FD1089A 317-0167)", + "ausfache", "Akatsuki Blitzkampf Ausf Achse", + "aust201", "Austin Powers (2.01)", + "aust300", "Austin Powers (3.00)", + "aust301", "Austin Powers (3.01)", + "austin", "Austin Powers (3.02)", + "austinf", "Austin Powers (France)", + "austing", "Austin Powers (Germany)", + "austini", "Austin Powers (Italy)", + "austnew", "Austin Powers (ARM7 Sound Board)", + "autmoon", "Autumn Moon (1VXFC5488, New Zealand)", + "automat", "Automat (bootleg of Robocop)", + "av2mj1bb", "AV2Mahjong No.1 Bay Bridge no Seijo (Japan)", + "av2mj2rg", "AV2Mahjong No.2 Rouge no Kaori (Japan)", + "avalnche", "Avalanche", + "avalon13", "The Key Of Avalon 1.3 - Chaotic Sabbat (client) (Rev C) (GDT-0010C)", + "avalon20", "The Key Of Avalon 2.0 - Eutaxy and Commandment (client) (Rev B) (GDT-0017B)", + "avalons", "The Key Of Avalon - The Wizard Master (server) (Rev C) (GDT-0005C)", + "avefenix", "Ave Fenix (Spanish bootleg of Phoenix)", + "avenger", "Avenger [TTL]", + "avengers", "Avengers (US set 1)", + "avengers2", "Avengers (US set 2)", + "avengrgs", "Avengers In Galactic Storm (US)", + "avengrgsj", "Avengers In Galactic Storm (Japan)", + "avsp", "Alien vs. Predator (Euro 940520)", + "avspa", "Alien vs. Predator (Asia 940520)", + "avspd", "Alien vs. Predator (Euro 940520 Phoenix Edition) (bootleg)", + "avsph", "Alien vs. Predator (Hispanic 940520)", + "avspirit", "Avenging Spirit", + "avspj", "Alien vs. Predator (Japan 940520)", + "avspu", "Alien vs. Predator (USA 940520)", + "avtbingo", "Arrow Bingo", + "avtnfl", "NFL (ver 109)", + "avtsym14", "Symbols (ver 1.4)", + "avtsym25", "Symbols (ver 2.5)", + "awbios", "Atomiswave Bios", + "aztarac", "Aztarac", + "azumanga", "Azumanga Daioh Puzzle Bobble (GDL-0018)", + "azurian", "Azurian Attack", + "b83catms", "Cat & Mouse (Bellfruit) (System 83)", + "b83cops", "Cops & Robbers (Bellfruit) (System 83)", + "b85bdclb", "Big Deal Club (System 85, set 1)", + "b85bdclba", "Big Deal Club (System 85, set 2)", + "b85bdclbb", "Big Deal Club (System 85, set 3)", + "b85cb7p", "Bar Sevens (Bellfruit) (Protocol) (System 85)", + "b85cblit", "Cash Blitz (System 85, set 1)", + "b85cblita", "Cash Blitz (System 85, set 2)", + "b85cblitb", "Cash Blitz (System 85, set 3)", + "b85cexpl", "Cash Explosion (System 85)", + "b85clbpm", "Club Premier (System 85)", + "b85cops", "Cops 'n' Robbers (Dutch) (Bellfruit) (System 85)", + "b85dbldl", "Double Dealer (System 85, set 1)", + "b85dbldla", "Double Dealer (System 85, set 2)", + "b85dbldlb", "Double Dealer (System 85, set 3)", + "b85disc", "Discovey (Dutch) (Bellfruit) (System 85)", + "b85hilo", "Hi Lo Silver (System 85, set 1)", + "b85hiloa", "Hi Lo Silver (System 85, set 2)", + "b85jkwld", "Jokers Wild (Dutch) (System 85)", + "b85jpclb", "Jackpot Club (System 85, set 1)", + "b85jpclba", "Jackpot Club (System 85, set 2)", + "b85jpclbb", "Jackpot Club (System 85, set 3)", + "b85jpclbc", "Jackpot Club (System 85, set 4)", + "b85koc", "King of Clubs (Bellfruit) (System 85, set 1)", + "b85koca", "King of Clubs (Bellfruit) (System 85, set 2)", + "b85luckd", "Lucky Dice (Dutch) (System 85)", + "b85lucky", "Lucky Cards (Dutch) (System 85)", + "b85potp", "Pick Of The Pack (System 85)", + "b85ritz", "The Ritz (System 85, set 1)", + "b85ritza", "The Ritz (System 85, set 2)", + "b85ritzb", "The Ritz (System 85, set 3)", + "b85ritzc", "The Ritz (System 85, set 4)", + "b85ritzd", "The Ritz (System 85, set 5)", + "b85royal", "The Royal (System 85)", + "b85scard", "Supercards (Dutch, Game Card 39-340-271?) (System 85)", + "b85sngam", "Super Nudge Gambler (System 85)", + "baboshka", "Baboshka (Russia) (Atronic)", + "babydad", "Baby Dado", + "babypac", "Baby Pac-Man (set 1)", + "babypac2", "Baby Pac-Man (set 2)", + "babypkr", "Baby Poker", + "backfire", "Backfire! (set 1)", + "backfirea", "Backfire! (set 2)", + "backfirt", "Back Fire (Tecmo, bootleg)", + "backgamn", "Backgammon", + "baddudes", "Bad Dudes vs. Dragonninja (US)", + "badgirls", "Bad Girls", + "badlands", "Bad Lands", + "badlandsb", "Bad Lands (bootleg)", + "badlandsb2", "Bad Lands (bootleg, alternate)", + "bagman", "Bagman", + "bagmanf", "Bagman (bootleg on Crazy Kong hardware)", + "bagmanm2", "Bagman (bootleg on Moon Cresta hardware, set 2)", + "bagmanmc", "Bagman (bootleg on Moon Cresta hardware, set 1)", + "bagmans", "Bagman (Stern Electronics, set 1)", + "bagmans2", "Bagman (Stern Electronics, set 2)", + "bagnard", "Le Bagnard (set 1)", + "bagnarda", "Le Bagnard (set 2)", + "bagnardi", "Le Bagnard (Itisa, Spain)", + "bakatono", "Bakatonosama Mahjong Manyuuki (MOM-002)(MOH-002)", + "bakubaku", "Baku Baku Animal (J 950407 V1.000)", + "bakubrkr", "Bakuretsu Breaker", + "bakuhatu", "Mahjong Bakuhatsu Junjouden (Japan)", + "bakutotu", "Bakutotsu Kijuutei", + "balcube", "Bal Cube", + "ballbomb", "Balloon Bomber", + "ballboy", "Ball Boy", + "ballbros", "Balloon Brothers", + "balonfgt", "Vs. Balloon Fight (set BF4 A-3)", + "baluba", "Baluba-louk no Densetsu (Japan)", + "bam2", "Bust a Move 2 (Japanese ROM ver. 1999/07/17 10:00:00)", + "bananadr", "Mahjong Banana Dream [BET] (Japan 891124)", + "bananas", "Bananas Go Bahamas (set 1)", + "bananasa", "Bananas Go Bahamas (set 2)", + "banbam", "BanBam", + "bandido", "Bandido", + "bang", "Bang!", + "bangball", "Bang Bang Ball (v1.05)", + "bangbead", "Bang Bead", + "bangj", "Gun Gabacho (Japan)", + "bankp", "Bank Panic", + "bankrob", "Bank Robbery (Ver. 3.32)", + "bankroba", "Bank Robbery (Ver. 2.00)", + "baraduke", "Baraduke", + "barbball", "Barroom Baseball (prototype)", + "barbwire", "Barb Wire", + "barline", "Barline (Japan?)", + "barra_l1", "Barracora (L-1)", + "barricad", "Barricade", + "barrier", "Barrier", + "baryon", "Baryon - Future Assault", + "basebal2", "Baseball: The Season II", + "bass", "Sega Bass Fishing (Japan)", + "bassang2", "Bass Angler 2 (GE865 VER. JAA)", + "bassangl", "Bass Angler (GE765 VER. JAA)", + "basschal", "Sega Bass Fishing Challenge", + "bassdx", "Sega Bass Fishing Deluxe (Japan)", + "batcir", "Battle Circuit (Euro 970319)", + "batcira", "Battle Circuit (Asia 970319)", + "batcird", "Battle Circuit (Euro 970319 Phoenix Edition) (bootleg)", + "batcirj", "Battle Circuit (Japan 970319)", + "batlball", "Battle Balls (Germany)", + "batlballa", "Battle Balls (Hong Kong)", + "batlballe", "Battle Balls (Hong Kong, earlier)", + "batlballu", "Battle Balls (US)", + "batlbubl", "Battle Bubble (v2.00)", + "batlgear", "Battle Gear", + "batlgr2", "Battle Gear 2 (v2.04J)", + "batlgr2a", "Battle Gear 2 (v2.01J)", + "batlzone", "Battle Zone (bootleg of Mayday)", + "batman", "Batman", + "batman2", "Batman Part 2", + "batmanf", "Batman Forever (4.0)", + "batmanf3", "Batman Forever (3.0)", + "batmanfr", "Batman Forever (JUE 960507 V1.000)", + "batrider", "Armed Police Batrider (Europe) (Fri Feb 13 1998)", + "batriderc", "Armed Police Batrider (China) (Fri Feb 13 1998)", + "batriderj", "Armed Police Batrider (Japan, B version) (Fri Feb 13 1998)", + "batriderja", "Armed Police Batrider (Japan, older version) (Mon Dec 22 1997)", + "batriderk", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", + "batridert", "Armed Police Batrider (Taiwan) (Mon Dec 22 1997)", + "batrideru", "Armed Police Batrider (USA) (Fri Feb 13 1998)", + "batsugun", "Batsugun", + "batsuguna", "Batsugun (older set)", + "batsugunsp", "Batsugun - Special Version", + "battlane", "Battle Lane! Vol. 5 (set 1)", + "battlane2", "Battle Lane! Vol. 5 (set 2)", + "battlane3", "Battle Lane! Vol. 5 (set 3)", + "battlcry", "Battlecry", + "battlera", "Battle Rangers (World)", + "battles", "Battles", + "battlex", "Battle Cross", + "battlnts", "Battlantis (program code G)", + "battlntsa", "Battlantis (program code F)", + "battlntsj", "Battlantis (Japan, program code E)", + "battroad", "The Battle-Road", + "bayroute", "Bay Route (set 3, World, FD1094 317-0116)", + "bayroute1", "Bay Route (set 1, US, unprotected)", + "bayrouteb1", "Bay Route (encrypted, protected bootleg)", + "bayrouteb2", "Bay Route (Datsu bootleg)", + "bayroutej", "Bay Route (set 2, Japan, FD1094 317-0115)", + "baywatch", "Baywatch", + "bbakraid", "Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999)", + "bbakraidj", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", + "bbakraidja", "Battle Bakraid (Japan) (Wed Apr 7 1999)", + "bballoon", "BnB Arcade", + "bballrmt", "Baseball (Ramtek) [TTL]", + "bballs", "Bouncing Balls", + "bbb108", "Big Bang Bar (Beta 1.8 US)", + "bbb109", "Big Bang Bar (Beta 1.9 US)", + "bbbowlin", "Big Ball Bowling (Bowler)", + "bbbxing", "Best Bout Boxing", + "bbeltzac", "Black Belt (Zaccaria)", + "bbmanw", "Bomber Man World / New Dyna Blaster - Global Quest", + "bbmanwj", "Bomber Man World (Japan)", + "bbmanwja", "Bomber Man World (Japan, revised sound hardware)", + "bbnny_l2", "Bugs Bunny Birthday Ball (L-2)", + "bbnny_lu", "Bugs Bunny Birthday Ball (LU-2) European", + "bbonk", "Bigfoot Bonkers", + "bbprot", "unknown fighting game 'BB' (prototype)", + "bbros", "Buster Bros. (USA)", + "bbust2", "Beast Busters 2nd Nightmare", + "bbusters", "Beast Busters (World)", + "bbustersu", "Beast Busters (US, Version 2)", + "bcats_l2", "Bad Cats (LA-2)", + "bcats_l5", "Bad Cats (L-5)", + "bchance", "Bonne Chance! (French/English)", + "bchancep", "Bonne Chance! (Golden Poker prequel HW)", + "bchopper", "Battle Chopper", + "bcrusher", "Bone Crusher", + "bcruzm12", "Battle Cruiser M-12", + "bcstry", "B.C. Story (set 1)", + "bcstrya", "B.C. Story (set 2)", + "bdrdown", "Border Down (Rev A) (GDL-0023A)", + "beachpt", "Beach Patrol (Russia) (Atronic)", + "beachspi", "Beach Spikers (GDS-0014)", + "beaminv", "Beam Invader", + "bearnec", "Bear Necessities (Russia) (Atronic)", + "beastf", "Beastie Feastie", + "beastrzr", "Beastorizer (USA)", + "beastrzrb", "Beastorizer (USA bootleg)", + "beatclck", "Beat the Clock", + "beathead", "BeatHead (prototype)", + "beautyb", "Beauty Block", + "beebop", "Bee Bop (set 1)", + "beebopa", "Bee Bop (set 2)", + "beebopb", "Bee Bop (set 3)", + "beebopc", "Bee Bop (set 4)", + "beebopd", "Bee Bop (set 5)", + "beebope", "Bee Bop (set 6)", + "beeline", "Beeline (39-360-075)", + "beetlem", "Beetlemania (set 1)", + "beetlema", "Beetlemania (set 2)", + "beetlemb", "Beetlemania (set 3)", + "beetlemc", "Beetlemania (set 4)", + "beetlemd", "Beetlemania (set 5)", + "beetleup", "Beetles Unplugged (Russia) (Atronic)", + "beezer", "Beezer (set 1)", + "beezer1", "Beezer (set 2)", + "begas", "Bega's Battle (Revision 3)", + "begas1", "Bega's Battle (Revision 1)", + "bel", "Behind Enemy Lines", + "bellring", "Bell Ringer", + "benberob", "Ben Bero Beh (Japan)", + "berabohm", "Beraboh Man (Japan, Rev C)", + "berabohmb", "Beraboh Man (Japan, Rev B)", + "berenstn", "The Berenstain Bears in Big Paw's Cave", + "berlwall", "The Berlin Wall", + "berlwallt", "The Berlin Wall (bootleg ?)", + "bermudat", "Bermuda Triangle (World?)", + "bermudata", "Bermuda Triangle (World Wars) (US)", + "bermudatj", "Bermuda Triangle (Japan)", + "berzerk", "Berzerk (set 1)", + "berzerk1", "Berzerk (set 2)", + "berzerkg", "Berzerk (German Speech)", + "bestbest", "Best Of Best", + "bestleag", "Best League (bootleg of Big Striker, Italian Serie A)", + "bestleaw", "Best League (bootleg of Big Striker, World Cup)", + "bestri", "Bestri (Korea)", + "bg_barmy", "Barmy Army (BGT)", + "bg_ddb", "Ding Dong Bells (BGT)", + "bg_max", "Max A Million (BGT) (set 1)", + "bg_maxa", "Max A Million (BGT) (set 2)", + "bgaregga", "Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996)", + "bgareggabl", "1945 Part-2 (Chinese hack of Battle Garegga)", + "bgareggacn", "Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996)", + "bgareggahk", "Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996)", + "bgaregganv", "Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996)", + "bgareggat2", "Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996)", + "bgareggatw", "Battle Garegga (Taiwan / Germany) (Thu Feb 1 1996)", + "bguns_l7", "Big Guns (L-7)", + "bguns_l8", "Big Guns (L-8)", + "bguns_la", "Big Guns (L-A)", + "bguns_p1", "Big Guns (P-1)", + "bhead2k", "Beach Head 2000 Install - 05/27/03", + "bhead2k2", "Beach Head 2002 Install - 05/27/03", + "bhead2k3", "Beach Head 2003 Desert War Install - 05/27/03", + "bhead2ka", "Beach Head 2000 Install - 09/16/01", + "bhol_ltd", "Black Hole (LTD)", + "big10", "Big 10", + "bigappg", "The Big Apple (2131-13, U5-0)", + "bigbang", "Big Bang (9th Nov. 1993)", + "bigblue", "Big Blue (Russia) (Atronic)", + "bigbucks", "Big Bucks", + "bigd2", "Big D2", + "bigdeal", "Big Deal (Hungarian, set 1)", + "bigdealb", "Big Deal (Hungarian, set 2)", + "bigevglf", "Big Event Golf (US)", + "bigevglfj", "Big Event Golf (Japan)", + "bigfghtr", "Tatakae! Big Fighter (Japan)", + "bigfight", "Big Fight - Big Trouble In The Atlantic Ocean", + "biggame", "Big Game", + "bighouse", "Big House", + "bighurt", "Frank Thomas' Big Hurt (rev.3)", + "bigkarnk", "Big Karnak", + "bigkong", "Big Kong", + "bigprowr", "The Big Pro Wrestling!", + "bigrun", "Big Run (11th Rallye version)", + "bigstrik", "Big Striker", + "bigstrkb", "Big Striker (bootleg)", + "bigstrkba", "Big Striker (bootleg w/Italian teams)", + "bigtown", "Big Town", + "bigtwin", "Big Twin", + "bigtwinb", "Big Twin (No Girls Conversion)", + "bijokkog", "Bijokko Gakuen (Japan 880116)", + "bijokkoy", "Bijokko Yume Monogatari (Japan 870925)", + "bikiniko", "BiKiNikko - Okinawa de Ippai Shichaimashita (Japan)", + "bikkuric", "Bikkuri Card (Japan)", + "billiard", "The Billiards (Video Hustler bootleg)", + "billlist", "Billard List", + "bilyard", "Billiard", + "bingo", "Bingo", + "bingoc", "Bingo Circus (Rev. A 891001)", + "bingoman", "Bingo Mania (P03-P07-P14)", + "bingomana", "Bingo Mania (A03)", + "bingor1", "Bingo Roll / Bell Star? (set 1)", + "bingor2", "Bingo Roll / Bell Star? (set 2)", + "bingor3", "Bingo Roll / Bell Star? (set 3)", + "bingor4", "Bingo Roll / Bell Star? (set 4)", + "bingor5", "Bingo Roll / Bell Star V3? (set 5)", + "bingowng", "Bingo (set 1)", + "bingownga", "Bingo (set 2)", + "bioatack", "Bio Attack", + "biofreak", "BioFreaks (prototype)", + "biomtoy", "Biomechanical Toy (Ver. 1.0.1885)", + "biomtoya", "Biomechanical Toy (Ver. 1.0.1884)", + "bionicc", "Bionic Commando (Euro)", + "bionicc1", "Bionic Commando (US set 1)", + "bionicc2", "Bionic Commando (US set 2)", + "bioship", "Bio-ship Paladin", + "biplane4", "Biplane 4 [TTL]", + "birdiy", "Birdiy", + "birdtry", "Birdie Try (Japan)", + "bishi", "Bishi Bashi Championship Mini Game Senshuken (ver JAA, 3 Players)", + "bishjan", "Bishou Jan (Japan, Ver. 2.03)", + "bjourney", "Blue's Journey / Raguy (ALM-001)(ALH-001)", + "bjpoker", "Poker / Black Jack (Model 7521)", + "bjtwin", "Bombjack Twin (set 1)", + "bjtwina", "Bombjack Twin (set 2)", + "bjtwinp", "Bombjack Twin (prototype? with adult pictures)", + "bk2k_l4", "Black Knight 2000 (L-4)", + "bk2k_lg1", "Black Knight 2000 (LG-1)", + "bk2k_lg3", "Black Knight 2000 (LG-3)", + "bk2k_pu1", "Black Knight 2000 (PU-1)", + "bk_f4", "Black Knight (L-4, French speech)", + "bk_l3", "Black Knight (L-3)", + "bk_l4", "Black Knight (L-4)", + "bking", "Birdie King", + "bking2", "Birdie King 2", + "bking3", "Birdie King 3", + "bkrtmaq", "Bakuretsu Quiz Ma-Q Dai Bouken (Japan)", + "black", "Czernyj Korabl (Arcade bootleg of ZX Spectrum 'Blackbeard')", + "black100", "Blackwater 100", + "black100s", "Blackwater 100 (Single Ball Play)", + "blackbd", "Black Beard (Russia, set 1)", + "blackbda", "Black Beard (Russia, set 2)", + "blackbdb", "Black Beard (Russia, set 3)", + "blackblt", "Black Belt", + "blackjck", "Black Jack (Pinball)", + "blackt96", "Black Touch '96", + "bladestl", "Blades of Steel (version T)", + "bladestle", "Blades of Steel (version E)", + "bladestll", "Blades of Steel (version L)", + "blakpyra", "Black Pyramid", + "blandia", "Blandia", + "blandiap", "Blandia (prototype)", + "blasted", "Blasted", + "blaster", "Blaster", + "blasterkit", "Blaster (conversion kit)", + "blastero", "Blaster (location test)", + "blasto", "Blasto", + "blastoff", "Blast Off (Japan)", + "blazeon", "Blaze On (Japan)", + "blazer", "Blazer (Japan)", + "blazlaz", "Blazing Lazers", + "blazstar", "Blazing Star", + "blbeauty", "Black Beauty (Shuffle)", + "blckhole", "Black Hole (Rev. 4)", + "blckhole2", "Black Hole (Rev. 2)", + "blckhols", "Black Hole (Sound Only)", + "blckjack", "Black Jack", + "bldwolf", "Bloody Wolf (US)", + "bldwolfj", "Narazumono Sentoubutai Bloody Wolf (Japan)", + "bldyr3b", "Bloody Roar 3 (bootleg)", + "bldyroar", "Bloody Roar (Japan)", + "bldyror2", "Bloody Roar 2 (World)", + "bldyror2a", "Bloody Roar 2 (Asia)", + "bldyror2j", "Bloody Roar 2 (Japan)", + "bldyror2u", "Bloody Roar 2 (USA)", + "blitz", "NFL Blitz (boot ROM 1.2)", + "blitz11", "NFL Blitz (boot ROM 1.1)", + "blitz2k", "NFL Blitz 2000 Gold Edition", + "blitz99", "NFL Blitz '99", + "blkbustr", "BlockBuster", + "blkdrgon", "Black Dragon (Japan)", + "blkdrgonb", "Black Dragon (bootleg)", + "blkfever", "Black Fever", + "blkheart", "Black Heart", + "blkheartj", "Black Heart (Japan)", + "blkhole", "Black Hole", + "blkou_f1", "Blackout (L-1, French Speech)", + "blkou_l1", "Blackout (L-1)", + "blkou_t1", "Blackout (T-1)", + "blkpnthr", "Black Panther", + "blkrhino", "Black Rhino (3VXFC5344, New Zealand)", + "blkshpsq", "Black Sheep Squadron", + "blktiger", "Black Tiger", + "blktigera", "Black Tiger (older)", + "blktigerb1", "Black Tiger (bootleg set 1)", + "blktigerb2", "Black Tiger (bootleg set 2)", + "blktouch", "Black Touch (Korea)", + "blmbycar", "Blomby Car", + "blmbycaru", "Blomby Car (not encrypted)", + "block", "Block Block (World 910910)", + "block2", "Block 2 (S.P.A. Co. bootleg)", + "blockade", "Blockade", + "blockbl", "Block Block (bootleg)", + "blockcar", "Block Carnival / Thunder & Lightning 2", + "blockcarb", "Block Carnival / Thunder & Lightning 2 (bootleg)", + "blocken", "Blocken (Japan)", + "blockgal", "Block Gal (MC-8123B, 317-0029)", + "blockgalb", "Block Gal (bootleg)", + "blockhl", "Block Hole", + "blockj", "Block Block (Japan 910910)", + "blockjoy", "Block Block (World 911106 Joystick)", + "blockout", "Block Out (set 1)", + "blockout2", "Block Out (set 2)", + "blockoutj", "Block Out (Japan)", + "bloodbro", "Blood Bros. (set 1)", + "bloodbroa", "Blood Bros. (set 2)", + "bloodbrob", "Blood Bros. (set 3)", + "bloodstm", "Blood Storm (v2.22)", + "bloodstm10", "Blood Storm (v1.04)", + "bloodstm11", "Blood Storm (v1.10)", + "bloodstm21", "Blood Storm (v2.10)", + "bloodstm22", "Blood Storm (v2.20)", + "bloodwar", "Blood Warrior", + "bloto", "Blits Loto (Russia) (Extrema)", + "bloxeed", "Bloxeed (Japan, FD1094 317-0139)", + "bloxeedc", "Bloxeed (World, C System)", + "bloxeedu", "Bloxeed (US, C System)", + "blpearl", "Black Pearl (Russia) (Extrema)", + "blstroid", "Blasteroids (rev 4)", + "blstroid2", "Blasteroids (rev 2)", + "blstroid3", "Blasteroids (rev 3)", + "blstroidg", "Blasteroids (German, rev 2)", + "blstroidh", "Blasteroids (with heads)", + "blswhstl", "Bells & Whistles (Version L)", + "bluehawk", "Blue Hawk", + "bluehawkn", "Blue Hawk (NTC)", + "blueprnt", "Blue Print (Midway)", + "blueprntj", "Blue Print (Jaleco)", + "blueshrk", "Blue Shark", + "blvelvet", "Black Velvet", + "blzntrnd", "Blazing Tornado", + "bm1stmix", "beatmania (ver JA-B)", + "bm2ndmix", "beatmania 2nd MIX (ver JA-B)", + "bm2ndmxa", "beatmania 2nd MIX (ver JA-A)", + "bm37th", "Beatmania III Append 7th Mix", + "bm3final", "Beatmania III The Final", + "bm3rdmix", "beatmania 3rd MIX (ver JA-A)", + "bm4thmix", "beatmania 4th MIX (ver JA-A)", + "bm5thmix", "beatmania 5th MIX (ver JA-A)", + "bm6thmix", "beatmania 6th MIX (ver JA-A)", + "bm7thmix", "beatmania 7th MIX (ver JA-B)", + "bmaster", "Blade Master (World)", + "bmcbowl", "Konkyuu no Hoshi", + "bmclubmx", "beatmania Club MIX (ver JA-A)", + "bmcompm2", "beatmania complete MIX 2 (ver JA-A)", + "bmcompmx", "beatmania complete MIX (ver JA-B)", + "bmcorerm", "beatmania CORE REMIX (ver JA-A)", + "bmcpokr", "unknown BMC poker game", + "bmdct", "beatmania featuring Dreams Come True (ver JA-A)", + "bmf_at", "Batman Forever (Austrian)", + "bmf_be", "Batman Forever (Belgian)", + "bmf_ch", "Batman Forever (Swiss)", + "bmf_cn", "Batman Forever (Canadian)", + "bmf_de", "Batman Forever (German)", + "bmf_fr", "Batman Forever (French)", + "bmf_it", "Batman Forever (Italian)", + "bmf_jp", "Batman Forever (Japanese)", + "bmf_nl", "Batman Forever (Dutch)", + "bmf_no", "Batman Forever (Norwegian)", + "bmf_sp", "Batman Forever (Spanish)", + "bmf_sv", "Batman Forever (Swedish)", + "bmf_time", "Batman Forever (Timed Play)", + "bmf_uk", "Batman Forever (English)", + "bmfinal", "beatmania THE FINAL (ver JA-A)", + "bmiidx", "beatmania IIDX (863 JAB)", + "bmiidx2", "beatmania IIDX 2nd style (GC985 JAA)", + "bmiidx3", "beatmania IIDX 3rd style (GC992 JAC)", + "bmiidx3a", "beatmania IIDX 3rd style (GC992 JAA)", + "bmiidx4", "beatmania IIDX 4th style (GCA03 JAA)", + "bmiidx5", "beatmania IIDX 5th style (GCA17 JAA)", + "bmiidx6", "beatmania IIDX 6th style (GCB4U JAB)", + "bmiidx6a", "beatmania IIDX 6th style (GCB4U JAA)", + "bmiidx7", "beatmania IIDX 7th style (GCB44 JAA)", + "bmiidx8", "beatmania IIDX 8th style (GCC44 JAA)", + "bmiidxa", "beatmania IIDX (863 JAA)", + "bmiidxc", "beatmania IIDX with DDR 2nd Club Version (896 JAB)", + "bmiidxc2", "Beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM)", + "bmiidxca", "beatmania IIDX with DDR 2nd Club Version (896 JAA)", + "bmiidxs", "beatmania IIDX Substream (983 JAA)", + "bmx", "BMX", + "bnglngby", "Vs. Raid on Bungeling Bay (RD4-2 B)", + "bnj", "Bump 'n' Jump", + "bnjm", "Bump 'n' Jump (Midway)", + "bnstars", "Vs. Janshi Brandnew Stars (MegaSystem32 Version)", + "bnstars1", "Vs. Janshi Brandnew Stars", + "bntyhunt", "Bounty Hunter (GCTech Co., LTD)", + "bnzabros", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", + "bnzabrosj", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", + "bnzai_g3", "Banzai Run (L-3) Germany", + "bnzai_l1", "Banzai Run (L-1)", + "bnzai_l3", "Banzai Run (L-3)", + "bnzai_pa", "Banzai Run (P-A)", + "boblbobl", "Bobble Bobble (set 1)", + "boblbobl2", "Bobble Bobble (set 2)", + "bodyslam", "Body Slam (8751 317-0015)", + "bogeyman", "Bogey Manor", + "boggy84", "Boggy '84", + "boggy84b", "Boggy '84 (bootleg)", + "bombbee", "Bomb Bee", + "bomber", "Bomber (bootleg of Scramble)", + "bombjack", "Bomb Jack (set 1)", + "bombjack2", "Bomb Jack (set 2)", + "bombjackt", "Bomb Jack (Tecfri, Spain)", + "bombkick", "Bomb Kick (set 1)", + "bombkicka", "Bomb Kick (set 2)", + "bomblord", "Bomber Lord (bootleg)", + "bombrman", "Bomber Man (Japan)", + "bombsa", "Bombs Away", + "bonanza", "Touchstar Bonanza (Revision 3)", + "bonanzar2", "Touchstar Bonanza (Revision 2)", + "bonebstr", "Bone Busters Inc.", + "bongo", "Bongo", + "bonkadv", "B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin", + "bonuscrd", "Bonus Card (Austrian)", + "bonuscrda", "Bonus Card (Austrian, ATG Electronic hack)", + "bonzeadv", "Bonze Adventure (World, Newer)", + "bonzeadvo", "Bonze Adventure (World, Older)", + "bonzeadvu", "Bonze Adventure (US)", + "boobhack", "Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg))", + "boogwing", "Boogie Wings (Euro v1.5, 92.12.07)", + "boogwinga", "Boogie Wings (Asia v1.5, 92.12.07)", + "bookra", "Book Of Ra (set 1)", + "bookthr", "Book Theatre (Ver 1.2)", + "boomrang", "Boomer Rang'r / Genesis (set 1)", + "boomranga", "Boomer Rang'r / Genesis (set 2)", + "boonggab", "Boong-Ga Boong-Ga (Spank'em!)", + "bootcamp", "Boot Camp", + "boothill", "Boot Hill", + "bop_l2", "The Machine: Bride of Pinbot (L-2)", + "bop_l3", "The Machine: Bride of Pinbot (L-3)", + "bop_l4", "The Machine: Bride of Pinbot (L-4)", + "bop_l5", "The Machine: Bride of Pinbot (L-5)", + "bop_l6", "The Machine: Bride of Pinbot (L-6)", + "bop_l7", "The Machine: Bride of Pinbot (L-7)", + "borench", "Borench", + "borntofi", "Born To Fight", + "bosco", "Bosconian (new version)", + "boscomd", "Bosconian (Midway, new version)", + "boscomdo", "Bosconian (Midway, old version)", + "boscoo", "Bosconian (old version)", + "boscoo2", "Bosconian (older version)", + "botanic", "Botanic (French)", + "botss", "Battle of the Solar System (rev. 1.1a 7/23/92)", + "botss11", "Battle of the Solar System (rev. 1.1 3/24/92)", + "bottl10b", "Bottle 10 (Italian, set 2)", + "bottle10", "Bottle 10 (Italian, set 1)", + "bottom9", "Bottom of the Ninth (version T)", + "bottom9n", "Bottom of the Ninth (version N)", + "bouldash", "Boulder Dash / Boulder Dash Part 2 (World)", + "bouldashj", "Boulder Dash / Boulder Dash Part 2 (Japan)", + "bounty", "The Bounty", + "bountyh", "Bounty Hunter", + "bowarrow", "Bow & Arrow (Prototype)", + "bowl3d", "3-D Bowling", + "bowler", "Bowling Alley", + "bowlrama", "Bowl-O-Rama", + "bowltry", "Bowling Try", + "boxer", "Boxer (prototype)", + "boxingb", "Boxing Bugs", + "boxingm", "Boxing Mania (ver JAA)", + "boxyboy", "Boxy Boy (SB?)", + "bpoker", "Video Poker (v1403)", + "br_l1", "Black Rose (L-1)", + "br_l3", "Black Rose (L-3)", + "br_l4", "Black Rose (L-4)", + "br_p17", "Black Rose (SP-1)", + "bradley", "Bradley Trainer", + "brain", "Brain", + "brapboys", "B.Rap Boys (World)", + "brapboysj", "B.Rap Boys Special (Japan)", + "brapboysu", "B.Rap Boys Special (US)", + "brasil", "Bra$il (Version 3)", + "brasil86", "Brasil 86", + "brasil87", "Brasil 87", + "brasil89", "Brasil 89 (set 1)", + "brasil89a", "Brasil 89 (set 2)", + "brasil93", "Brasil 93", + "braveff", "Brave Fire Fighters", + "brdrlinb", "Borderline (Karateco bootleg)", + "brdrline", "Borderline", + "brdrlinet", "Borderline (Tranquilizer Gun conversion)", + "brdrlins", "Borderline (Sidam bootleg)", + "break86", "Break '86", + "breakers", "Breakers", + "breakrev", "Breakers Revenge", + "breywood", "Breywood (Japan revision 2)", + "brickyrd", "Brickyard", + "brickzn", "Brick Zone (v5.0, Joystick)", + "brickzn11", "Brick Zone (v1.1)", + "brickznv4", "Brick Zone (v4.0, Spinner)", + "brival", "Burning Rival (World)", + "brivalj", "Burning Rival (Japan)", + "brix", "Brix", + "brixian", "Brixian", + "brkthru", "Break Thru (US)", + "brkthruj", "Kyohkoh-Toppa (Japan)", + "brod", "Brodjaga (Arcade bootleg of ZX Spectrum 'Inspector Gadget and the Circus of Fear')", + "bronx", "Bronx", + "brooklyn", "Brooklyn (set 1) (Bingo)", + "brooklyna", "Brooklyn (set 2) (Bingo)", + "brooks", "Brooks & Dunn (rev.T1)", + "brubber", "Burnin' Rubber", + "brutforc", "Brute Force", + "brvblade", "Brave Blade (World)", + "brvbladea", "Brave Blade (Asia)", + "brvbladej", "Brave Blade (Japan)", + "brvbladeu", "Brave Blade (USA)", + "brvteam", "Brave Team", + "bs94", "Buena Suerte '94", + "bsb105", "Breakshot (Beta)", + "bshark", "Battle Shark (World)", + "bsharkj", "Battle Shark (Japan)", + "bsharkjjs", "Battle Shark (Japan, Joystick)", + "bsharku", "Battle Shark (US)", + "bsktball", "Basketball", + "bsplash", "Banana Splash (set 1)", + "bssoccer", "Back Street Soccer (KRB-0031 PCB)", + "bssoccera", "Back Street Soccer (KRB-0032A PCB)", + "bstars", "Baseball Stars Professional (NGM-002)", + "bstars2", "Baseball Stars 2", + "bstarsh", "Baseball Stars Professional (NGH-002)", + "bstrk_l1", "Big Strike (Shuffle) (L-1)", + "bsuerte", "Buena Suerte (Spanish, set 1)", + "bsuertea", "Buena Suerte (Spanish, set 2)", + "bsuerteb", "Buena Suerte (Spanish, set 3)", + "bsuertec", "Buena Suerte (Spanish, set 4)", + "bsuerted", "Buena Suerte (Spanish, set 5)", + "bsuertee", "Buena Suerte (Spanish, set 6)", + "bsuertef", "Buena Suerte (Spanish, set 7)", + "bsuerteg", "Buena Suerte (Spanish, set 8)", + "bsuerteh", "Buena Suerte (Spanish, set 9)", + "bsuertei", "Buena Suerte (Spanish, set 10)", + "bsuertej", "Buena Suerte (Spanish, set 11)", + "bsuertek", "Buena Suerte (Spanish, set 12)", + "bsuertel", "Buena Suerte (Spanish, set 13)", + "bsuertem", "Buena Suerte (Spanish, set 14)", + "bsuerten", "Buena Suerte (Spanish, set 15)", + "bsuerteo", "Buena Suerte (Spanish, set 16)", + "bsuertep", "Buena Suerte (Spanish, set 17)", + "bsuerteq", "Buena Suerte (Spanish, set 18)", + "bsuerter", "Buena Suerte (Spanish, set 19)", + "bsuertes", "Buena Suerte (Spanish, set 20)", + "bsuertet", "Buena Suerte (Spanish, set 21)", + "bsuerteu", "Buena Suerte (Spanish, set 22)", + "bsv100r", "Breakshot (Redemption 1.0)", + "bsv102r", "Breakshot (Redemption 1.2)", + "bsv103", "Breakshot", + "btchamp", "Beat the Champ (GV053 UAA01)", + "btime", "Burger Time (Data East set 1)", + "btime2", "Burger Time (Data East set 2)", + "btime3", "Burger Time (Data East USA)", + "btimem", "Burger Time (Midway)", + "btippers", "Big Tippers (Russia)", + "btlecity", "Vs. Battle City", + "btlfield", "Battle Field (Japan)", + "btlfieldb", "Battle Field (bootleg)", + "btlkroad", "Battle K-Road", + "btltryst", "Battle Tryst (ver JAC)", + "btmn_101", "Batman (1.01)", + "btmn_103", "Batman (1.03)", + "btmn_106", "Batman (1.06)", + "btmn_g13", "Batman (1.03 Germany)", + "btoads", "Battletoads", + "bttf_a20", "Back To the Future (2.0)", + "bttf_a21", "Back To The Future (2.1)", + "bttf_a27", "Back To the Future (2.7)", + "bttf_g27", "Back To the Future (2.7 Germany)", + "bub68705", "Bubble Bobble (bootleg with 68705)", + "bubblem", "Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15)", + "bubblemj", "Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07)", + "bubbles", "Bubbles", + "bubblesp", "Bubbles (prototype version)", + "bubblesr", "Bubbles (Solid Red label)", + "bubbletr", "Bubble Trouble (Japan, Rev C)", + "bubl2000", "Bubble 2000", + "bublbob2", "Bubble Bobble II (Ver 2.5O 1994/10/05)", + "bublbob2p", "Bubble Bobble II (Ver 0.0J 1993/12/13, prototype)", + "bublbobl", "Bubble Bobble (Japan, Ver 0.1)", + "bublbobl1", "Bubble Bobble (Japan, Ver 0.0)", + "bublboblr", "Bubble Bobble (US, Ver 5.1)", + "bublboblr1", "Bubble Bobble (US, Ver 1.0)", + "bublpong", "Bubble Pong Pong", + "bubsymphb", "Bubble Symphony (bootleg with OKI6295)", + "bubsymphe", "Bubble Symphony (Ver 2.5O 1994/10/05)", + "bubsymphj", "Bubble Symphony (Ver 2.5J 1994/10/05)", + "bubsymphu", "Bubble Symphony (Ver 2.5A 1994/10/05)", + "bubsys", "Bubble System BIOS", + "bucaner", "Buccaneer", + "buccanrs", "Buccaneers (set 1)", + "buccanrsa", "Buccaneers (set 2)", + "buckrgrs", "Buck Rogers", + "buckrog", "Buck Rogers: Planet of Zoom", + "buckrogn", "Buck Rogers: Planet of Zoom (not encrypted, set 1)", + "buckrogn2", "Buck Rogers: Planet of Zoom (not encrypted, set 2)", + "bucky", "Bucky O'Hare (ver EAB)", + "buckyaab", "Bucky O'Hare (ver AAB)", + "buckyea", "Bucky O'Hare (ver EA)", + "buckyuab", "Bucky O'Hare (ver UAB)", + "bugfever", "Bugs Fever (Version 1.7R CGA)", + "bugfeverd", "Bugs Fever (Version 1.7E CGA)", + "bugfevero", "Bugs Fever (Version 1.6R CGA)", + "bugfeverv", "Bugs Fever (Version 1.7R Dual)", + "bugfeverv2", "Bugs Fever (Version 1.7E Dual)", + "buggyboy", "Buggy Boy/Speed Buggy (cockpit)", + "buggyboyjr", "Buggy Boy Junior/Speed Buggy (upright)", + "buggychl", "Buggy Challenge", + "buggychlt", "Buggy Challenge (Tecfri)", + "bujutsu", "Fighting Bujutsu", + "bullet", "Bullet (FD1094 317-0041)", + "bullfgt", "Bullfight (315-5065)", + "bullfgtr", "Bull Fighter", + "bullfgtrs", "Bull Fighter (Sega)", + "bullsdrt", "Bulls Eye Darts", + "bullsdrtg", "Bulls Eye Darts (Galaxian conversion)", + "bullseye", "301/Bullseye", + "bungeem", "Bungee Monkey (set 1)", + "bungeema", "Bungee Monkey (set 2)", + "buraiken", "Hissatsu Buraiken (Japan)", + "burglarx", "Burglar X", + "buriki", "Buriki One (rev.B)", + "burnforc", "Burning Force (Japan, new version (Rev C))", + "burnforco", "Burning Force (Japan, old version)", + "burningf", "Burning Fight (NGM-018)(NGH-018)", + "burningfh", "Burning Fight (NGH-018)(US)", + "burningfp", "Burning Fight (prototype)", + "bushido", "Bushido (set 1)", + "bushidoa", "Bushido (set 2)", + "buster", "Buster", + "butasan", "Butasan - Pig's & Bomber's (Japan, English)", + "butasanj", "Butasan (Japan, Japanese)", + "butrfly", "Butterfly Video Game (version U350C)", + "buzzard", "Buzzard", + "buzzundr", "Buzzundrum (Ace)", + "bwcasino", "Boardwalk Casino", + "bwidow", "Black Widow", + "bwings", "B-Wings (Japan new Ver.)", + "bwingsa", "B-Wings (Alt Ver.?)", + "bwingso", "B-Wings (Japan old Ver.)", + "bygone", "Bygone", + "bzone", "Battle Zone (rev 2)", + "bzonea", "Battle Zone (rev 1)", + "bzonec", "Battle Zone (cocktail)", + "c3_ppays", "The Phrase That Pays (Bellfruit) (Cobra 3?)", + "c3_rtime", "Radio Times (Bellfruit) (Cobra 3)", + "c3_telly", "Telly Addicts (Bellfruit) (Cobra 3)", + "c3_totp", "Top of the Pops (Bellfruit) (Cobra 3?)", + "cabal", "Cabal (World, Joystick version)", + "cabala", "Cabal (Alpha Trading)", + "cabalbl", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", + "cabalbl2", "Cabal (bootleg of Joystick version, set 2)", + "cabalus", "Cabal (US set 1, Trackball version)", + "cabalus2", "Cabal (US set 2, Trackball version)", + "cabaret", "Cabaret", + "cachat", "Cachat (Japan)", + "cactjack", "Cactus Jack's", + "cactus", "Cactus (bootleg of Saboten Bombers)", + "cadanglr", "Angler Dangler (DECO Cassette)", + "cadash", "Cadash (World)", + "cadashf", "Cadash (France)", + "cadashg", "Cadash (Germany)", + "cadashi", "Cadash (Italy)", + "cadashj", "Cadash (Japan)", + "cadashp", "Cadash (World, prototype)", + "cadashu", "Cadash (US)", + "cafebrk", "Mahjong Cafe Break", + "cafedoll", "Mahjong Cafe Doll (Japan)", + "cafetime", "Mahjong Cafe Time", + "cairblad", "Change Air Blade (Japan)", + "calchase", "California Chase", + "calibr50", "Caliber 50", + "calipso", "Calipso", + "calorie", "Calorie Kun vs Moguranian", + "calorieb", "Calorie Kun vs Moguranian (bootleg)", + "calspeed", "California Speed (Version 2.1a, 4/17/98)", + "calspeeda", "California Speed (Version 1.0r7a 3/4/98)", + "cameltry", "Cameltry (US, YM2610)", + "cameltrya", "Cameltry (World, YM2203 + M6295)", + "cameltryau", "Cameltry (US, YM2203 + M6295)", + "cameltryj", "Cameltry (Japan, YM2610)", + "camlight", "Camel Lights", + "canasta", "Canasta '86'", + "candance", "Cannon Dancer (Japan)", + "candy", "Candy Candy", + "cannball", "Cannon Ball (Yun Sung, horizontal)", + "cannballv", "Cannon Ball (Yun Sung, vertical)", + "cannonb", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)", + "cannonb2", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", + "cannonb3", "Cannon Ball (bootleg on Crazy Kong hardware) (set 3, no bonus game)", + "cannonbp", "Cannon Ball (Pac-Man Hardware)", + "canvas", "Canvas Croquis", + "canyon", "Canyon Bomber", + "canyonp", "Canyon Bomber (prototype)", + "capbowl", "Capcom Bowling (set 1)", + "capbowl2", "Capcom Bowling (set 2)", + "capbowl3", "Capcom Bowling (set 3)", + "capbowl4", "Capcom Bowling (set 4)", + "capcor", "Capitani Coraggiosi (Ver 1.3)", + "capitol", "Capitol", + "capsnk", "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", + "capsnka", "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev A)", + "capsnkb", "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS)", + "captaven", "Captain America and The Avengers (Asia Rev 1.4)", + "captavena", "Captain America and The Avengers (Asia Rev 1.0)", + "captavene", "Captain America and The Avengers (UK Rev 1.4)", + "captavenj", "Captain America and The Avengers (Japan Rev 0.2)", + "captavenu", "Captain America and The Avengers (US Rev 1.9)", + "captavenua", "Captain America and The Avengers (US Rev 1.4)", + "captavenuu", "Captain America and The Avengers (US Rev 1.6)", + "captcomm", "Captain Commando (World 911202)", + "captcommb", "Captain Commando (bootleg)", + "captcommj", "Captain Commando (Japan 911202)", + "captcommjr1", "Captain Commando (Japan 910928)", + "captcommr1", "Captain Commando (World 911014)", + "captcommu", "Captain Commando (USA 910928)", + "capunc", "Capitan Uncino (Ver 1.2)", + "car2", "Car 2 (bootleg of Head On 2)", + "caractn", "Car Action (set 1)", + "caractn2", "Car Action (set 2)", + "carb2002", "Carriage Bonus 2002 (bootleg)", + "carb2003", "Carriage Bonus 2003 (bootleg)", + "cardline", "Card Line", + "carhop", "Car Hop", + "carjmbre", "Car Jamboree", + "carket", "Carket Ball", + "carnevil", "CarnEvil (v1.0.3)", + "carnevil1", "CarnEvil (v1.0.1)", + "carnival", "Carnival (upright)", + "carnivalc", "Carnival (cocktail)", + "carnivalh", "Carnival (Head On hardware, set 1)", + "carnivalha", "Carnival (Head On hardware, set 2)", + "carnking", "Carnival King (v1.00.11)", + "carpolo", "Car Polo", + "carrera", "Carrera (Version 6.7)", + "cartfury", "Cart Fury", + "casanova", "Casanova", + "casbjack", "Casino Black Jack (color, Standard 00-05)", + "cascade", "Cascade", + "cashcade", "Cashcade (JPM) (SYSTEM5 VIDEO)", + "cashcrop", "Cash Crop (Russia)", + "cashquiz", "Cash Quiz (Type B, Version 5)", + "cashtrn", "Cash Train (v1.10)", + "casino5", "Casino Five (3315-02, U5-0)", + "caspoker", "Casino Poker (Ver PM86LO-35-5, German)", + "castaway", "Castaway (Russia) (Atronic) (set 1)", + "castawaya", "Castaway (Russia) (Atronic) (set 2)", + "castfant", "Astro Fantasia (DECO Cassette)", + "castfpt", "Fortune Pot (Castle) (MACH2000 V2rvA)", + "castrev", "Revolution (Castle) (MACH2000 V1rvE)", + "caswin", "Casino Winner", + "catacomb", "Catacomb", + "catacomp", "Catacomb (Pinball)", + "catapult", "Catapult", + "catch22", "Catch-22 (version 8.0)", + "catchp", "Catch (prototype)", + "caterplr", "Caterpillar (bootleg of Centipede)", + "catnmous", "Cat and Mouse (set 1)", + "catnmousa", "Cat and Mouse (set 2)", + "catt", "Catt (Japan)", + "cavelon", "Cavelon", + "caveman", "Caveman (Pinball/Video Combo, set 1)", + "cavemana", "Caveman (Pinball/Video Combo, set 2)", + "cavenger", "Cosmic Avenger", + "cavnegro", "Cavaleiro Negro", + "cavnegro1", "Cavaleiro Negro (alternate set 1)", + "cavnegro2", "Cavaleiro Negro (alternate set 2)", + "cawing", "Carrier Air Wing (World 901012)", + "cawingb2", "Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 2)", + "cawingbl", "Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 1)", + "cawingj", "U.S. Navy (Japan 901012)", + "cawingr1", "Carrier Air Wing (World 901009)", + "cawingu", "Carrier Air Wing (USA 901012)", + "cb2001", "Cherry Bonus 2001", + "cb3", "Cherry Bonus III (ver.1.40, encrypted)", + "cb3a", "Cherry Bonus III (ver.1.40, set 2)", + "cb3b", "Cherry Bonus III (alt)", + "cb3c", "Cherry Bonus III (alt, set 2)", + "cb3d", "Cherry Bonus III (set 3)", + "cb3e", "Cherry Bonus III (set 4, encrypted bootleg)", + "cbaj", "Cool Boarders Arcade Jam", + "cball", "Cannonball (Atari, prototype)", + "cbasebal", "Capcom Baseball (Japan)", + "cbdash", "Boulder Dash (DECO Cassette)", + "cbnj", "Bump 'n' Jump (DECO Cassette)", + "cbombers", "Chase Bombers (World)", + "cbombersj", "Chase Bombers (Japan)", + "cbombersp", "Chase Bombers (Japan Prototype)", + "cbtime", "Burger Time (DECO Cassette)", + "cburnrub", "Burnin' Rubber (DECO Cassette, set 1)", + "cburnrub2", "Burnin' Rubber (DECO Cassette, set 2)", + "cbuster", "Crude Buster (World FX version)", + "cbusterj", "Crude Buster (Japan)", + "cbusterw", "Crude Buster (World FU version)", + "cc_12", "Cactus Canyon (1.2)", + "cc_13", "Cactus Canyon (1.3)", + "ccasino", "Chinese Casino [BET] (Japan)", + "ccastles", "Crystal Castles (version 4)", + "ccastles1", "Crystal Castles (version 1)", + "ccastles2", "Crystal Castles (version 2)", + "ccastles3", "Crystal Castles (version 3)", + "ccastlesf", "Crystal Castles (version 3, French)", + "ccastlesg", "Crystal Castles (version 3, German)", + "ccastlesj", "Crystal Castles (joystick version)", + "ccastlesp", "Crystal Castles (version 3, Spanish)", + "ccboot", "Crazy Climber (bootleg set 1)", + "ccboot2", "Crazy Climber (bootleg set 2)", + "ccbootmr", "Crazy Climber (Model Racing bootleg)", + "ccclass", "Country Club Classic (v1.10 03-apr-1997)", + "cchance", "Cherry Chance", + "cchasm", "Cosmic Chasm (set 1)", + "cchasm1", "Cosmic Chasm (set 2)", + "cclimber", "Crazy Climber (US)", + "cclimberj", "Crazy Climber (Japan)", + "cclimbr2", "Crazy Climber 2 (Japan)", + "cclimbr2a", "Crazy Climber 2 (Japan, Harder)", + "cclimbroper", "Crazy Climber (Spanish, Operamatic bootleg)", + "cclownz", "Crazzy Clownz (Version 1.0)", + "ccruise", "Caribbean Cruise", + "cd32bios", "CD32 Bios", + "cdibios", "CD-i Bios", + "cdiscon1", "Disco No.1 (DECO Cassette)", + "cdsteljn", "DS Telejan (DECO Cassette, Japan)", + "cecmatch", "ChuckECheese's Match Game", + "centaur", "Centaur", + "centipdb", "Centipede (bootleg)", + "centipdd", "Centipede Dux (hack)", + "centiped", "Centipede (revision 3)", + "centiped2", "Centipede (revision 2)", + "centtime", "Centipede (1 player, timed)", + "cerberup", "Cerberus (Pinball)", + "cerberus", "Cerberus", + "cexplore", "Explorer (DECO Cassette)", + "cfarm", "Chicken Farm (Version 2.0)", + "cfblue", "Crazy Fruits Blue (Russia) (Atronic) (set 1)", + "cfbluea", "Crazy Fruits Blue (Russia) (Atronic) (set 2)", + "cfever1k", "Casino Fever 1k", + "cfever40", "Casino Fever 4.0", + "cfever50", "Casino Fever 5.0", + "cfever51", "Casino Fever 5.1", + "cfever61", "Casino Fever 6.1", + "cfghtice", "Fighting Ice Hockey (DECO Cassette)", + "cfgreen", "Crazy Fruits Green (Russia) (Atronic)", + "cfield", "Chaos Field (GDL-0025)", + "cfishing", "Fishing (DECO Cassette)", + "cflyball", "Flying Ball (DECO Cassette)", + "cftbl_l3", "Creature from the Black Lagoon (L-3,SP-1)", + "cftbl_l4", "Creature from the Black Lagoon (L-4)", + "cgangpzl", "Cosmo Gang the Puzzle (US)", + "cgangpzlj", "Cosmo Gang the Puzzle (Japan)", + "cgip30cs", "Credit Poker (ver.30c, standard)", + "cgold", "Caribbean Gold (3VXEC449, USA)", + "cgold2", "Caribbean Gold II (3XF5182H04, USA)", + "cgraplop", "Cluster Buster (DECO Cassette)", + "cgraplop2", "Graplop (no title screen) (DECO Cassette)", + "ch2000", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4E Dual)", + "ch2000b1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 1)", + "ch2000b2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 1)", + "ch2000c1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 2)", + "ch2000c2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 2)", + "ch2000d1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 3)", + "ch2000d2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 3)", + "ch2000o", "Fruit Bonus 2000 / New Cherry 2000 (Version 3.9XT)", + "ch2000o2", "Fruit Bonus 2000 / New Cherry 2000 (Version 3.9D)", + "ch2000o3", "Fruit Bonus 2000 / New Cherry 2000 (Version 3.9)", + "ch2000v1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R Dual)", + "ch2000v2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT Dual)", + "chainrec", "Chain Reaction (World, Version 2.2, 1995.09.25)", + "chaknpop", "Chack'n Pop", + "challeng", "Challenger", + "cham24", "Chameleon 24", + "chamburger", "Hamburger (DECO Cassette, Japan)", + "chameleo", "Chameleon", + "champbas", "Champion Base Ball", + "champbasj", "Champion Base Ball (Japan set 1)", + "champbasja", "Champion Base Ball (Japan set 2)", + "champbb2", "Champion Base Ball Part-2: Pair Play (set 1)", + "champbb2a", "Champion Baseball II (set 2)", + "champbb2j", "Champion Baseball II (Japan)", + "champbwl", "Championship Bowling", + "champwr", "Champion Wrestler (World)", + "champwrj", "Champion Wrestler (Japan)", + "champwru", "Champion Wrestler (US)", + "chanbara", "Chanbara", + "chance", "Chance", + "chance32", "Chance Thirty Two", + "changela", "Change Lanes", + "changes", "Changes", + "changesa", "Changes (EME license)", + "chaosbrk", "Chaos Breaker (v2.02J)", + "chaoshea", "Chaos Heat (V2.09O)", + "chaosheaj", "Chaos Heat (V2.08J)", + "charlien", "Charlie Ninja", + "charlies", "Charlie's Angels", + "chasehq", "Chase H.Q. (World)", + "chasehq2", "Chase H.Q. 2 (v2.0.6.JP)", + "chasehqj", "Chase H.Q. (Japan)", + "chasehqju", "Chase H.Q. (Japan, upright?)", + "chasehqu", "Chase H.Q. (US)", + "chboxing", "Champion Boxing", + "checkman", "Check Man", + "checkmanj", "Check Man (Japan)", + "checkmat", "Checkmate", + "cheekyms", "Cheeky Mouse", + "cheesech", "Cheese Chase", + "cheetah", "Cheetah", + "chelnov", "Chelnov - Atomic Runner (World)", + "chelnovj", "Chelnov - Atomic Runner (Japan)", + "chelnovu", "Chelnov - Atomic Runner (US)", + "chessc2", "Chess Challenge 2", + "chewheel", "Cherry Wheel (Version 1.7)", + "chewing", "Chewing Gum", + "cheyenne", "Cheyenne (version 1.0)", + "chicken", "Chicken (Russia) (Atronic)", + "chihiro", "Chihiro Bios", + "chikij", "Chiki Chiki Boys (Japan 900619)", + "chiller", "Chiller (version 3.0)", + "chillicc", "Chilli Con Cash (set 1)", + "chimerab", "Chimera Beast (prototype)", + "chinagat", "China Gate (US)", + "chinatow", "China Town (Ver 1B, Dino4 HW)", + "chinatwn", "China Town (Japan)", + "chinhero", "Chinese Hero", + "chinhero2", "Chinese Hero (older, set 1)", + "chinhero3", "Chinese Hero (older, set 2)", + "chinherot", "Chinese Heroe (Taito)", + "chinmoku", "Mahjong Chinmoku no Hentai (Japan 900511)", + "chinsan", "Ganbare Chinsan Ooshoubu (MC-8123A, 317-5012)", + "chkun", "Chance Kun (Japan)", + "chleague", "Champion League (Poker)", + "chleagul", "Champion League (Lattine)", + "chmpnum", "Champion Number (V0.74)", + "chocomk", "Musapey's Choco Marker (Rev A) (GDL-0014A)", + "chocovdr", "Uchuu Daisakusen: Chocovader Contactee (Japan, CVC1 Ver.A)", + "chokchok", "Choky! Choky!", + "choko", "Janpai Puzzle Choukou (Japan 010820)", + "choplift", "Choplifter (8751 315-5151)", + "chopliftbl", "Choplifter (bootleg)", + "chopliftu", "Choplifter (unprotected)", + "chopper", "Chopper I (US set 1)", + "choppera", "Chopper I (US set 2)", + "chopperb", "Chopper I (US set 3)", + "choysun", "Choy Sun Doa (20131511, Malaysia)", + "chqflag", "Chequered Flag", + "chqflagj", "Chequered Flag (Japan)", + "chry10", "Cherry 10 (bootleg with PIC16F84)", + "chryangl", "Cherry Angel", + "chrygld", "Cherry Gold I", + "chsuper2", "Champion Super 2 (V0.13)", + "chsuper3", "Champion Super 3 (V0.35)", + "chucklck", "Chuck-A-Luck", + "chukatai", "Chuka Taisen (World)", + "chukataij", "Chuka Taisen (Japan)", + "chukataiu", "Chuka Taisen (US)", + "chwrestl", "Champion Pro Wrestling", + "chwy", "Highway Chase (DECO Cassette)", + "ciclone", "Ciclone", + "circa33", "Circa 1933", + "circus", "Circus / Acrobat TV", + "circusc", "Circus Charlie (level select, set 1)", + "circusc2", "Circus Charlie (level select, set 2)", + "circusc3", "Circus Charlie (no level select)", + "circuscc", "Circus Charlie (Centuri)", + "circusce", "Circus Charlie (Centuri, earlier)", + "circusp", "Circus", + "cischeat", "Cisco Heat", + "citalcup", "Champion Italian Cup (bootleg V220IT)", + "citybomb", "City Bomber (World)", + "citybombj", "City Bomber (Japan)", + "citycon", "City Connection (set 1)", + "citycona", "City Connection (set 2)", + "citylove", "City Love (Japan 860908)", + "cityslck", "City Slicker", + "cj3play", "Triple Play (Ver. 1.10)", + "cjddzsp", "Super Dou Di Zhu Special (V122CN)", + "cjdh2", "Chao Ji Da Heng 2 (V311CN)", + "cjdh2a", "Chao Ji Da Heng 2 (V311CNA)", + "cjdh2b", "Chao Ji Da Heng 2 (V311CNB)", + "cjdh2c", "Chao Ji Da Heng 2 (V215CN)", + "cjffruit", "Funny Fruit (Ver. 1.13)", + "ckong", "Crazy Kong", + "ckongalc", "Crazy Kong (Alca bootleg)", + "ckongcv", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 2)", + "ckongg", "Crazy Kong (bootleg on Galaxian hardware)", + "ckonggx", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 1)", + "ckongis", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 3)", + "ckongmc", "Crazy Kong (bootleg on Moon Cresta hardware)", + "ckongo", "Crazy Kong (Orca bootleg)", + "ckongpt2", "Crazy Kong Part II (set 1)", + "ckongpt2a", "Crazy Kong Part II (set 2)", + "ckongpt2b", "Crazy Kong Part II (alternative levels)", + "ckongpt2j", "Crazy Kong Part II (Japan)", + "ckongpt2jeu", "Crazy Kong Part II (Jeutel bootleg)", + "ckongs", "Crazy Kong (Scramble hardware)", + "ckpt_a17", "Checkpoint (1.7)", + "clapapa", "Rootin' Tootin' / La-Pa-Pa (DECO Cassette)", + "clapapa2", "Rootin' Tootin' (DECO Cassette)", + "clas1812", "Class of 1812", + "classice", "Classic Edition (Version 1.6E)", + "classice1", "Classic Edition (Version 1.6R, set 1)", + "classice2", "Classic Edition (Version 1.6LT, set 1)", + "classiced1", "Classic Edition (Version 1.6R, set 2)", + "classiced2", "Classic Edition (Version 1.6LT, set 2)", + "classicev", "Classic Edition (Version 1.6E Dual)", + "classicev1", "Classic Edition (Version 1.6R Dual)", + "classicev2", "Classic Edition (Version 1.6LT Dual)", + "claybust", "Claybuster", + "claychal", "Sega Clay Challenge", + "claypign", "Clay Pigeon (version 2.0)", + "clayshoo", "Clay Shoot", + "clbowl", "Coors Light Bowling", + "cleanswp", "Clean Sweep [TTL]", + "cleoftp", "Cleopatra Fortune Plus (GDL-0012)", + "cleopatr", "Cleopatra Fortune (Ver 2.1J 1996/09/05)", + "cleoptra", "Cleopatra", + "cliffhgr", "Cliff Hanger (set 1)", + "cliffhgra", "Cliff Hanger (set 2)", + "clkwise", "Clockwise (1VXEC534, New Zealand)", + "cloak", "Cloak & Dagger (rev 5)", + "cloakfr", "Cloak & Dagger (French)", + "cloakgr", "Cloak & Dagger (German)", + "cloaksp", "Cloak & Dagger (Spanish)", + "clocknch", "Lock'n'Chase (DECO Cassette)", + "closeenc", "Close Encounters of the Third Kind", + "cloud9", "Cloud 9 (prototype)", + "clown", "Clown", + "clowns", "Clowns (rev. 2)", + "clowns1", "Clowns (rev. 1)", + "clshroad", "Clash-Road", + "clshroadd", "Clash-Road (Data East license)", + "clshroads", "Clash-Road (Status license)", + "cltchitr", "Clutch Hitter (US, FD1094 317-0176)", + "cltchitrj", "Clutch Hitter (Japan, FD1094 317-0175)", + "club90s", "Mahjong CLUB 90's (set 1) (Japan 900919)", + "club90sa", "Mahjong CLUB 90's (set 2) (Japan 900919)", + "clubk2k3", "Club Kart: European Session (2003)", + "clubk2kf", "Club Kart: European Session (2003, not protected)", + "clubkprz", "Club Kart Prize", + "clubkpzb", "Club Kart Prize Ver. B", + "clubkrtd", "Club Kart: European Session (Rev D)", + "clubkrte", "Club Kart: European Session", + "cluckypo", "Lucky Poker (DECO Cassette)", + "cluclu", "Vs. Clu Clu Land", + "cluedo", "Cluedo (prod. 2D)", + "cluedo2", "Cluedo (prod. 2)", + "cluedo2c", "Cluedo (prod. 2C)", + "cluedod", "Cluedo (prod. 2D) (Protocol)", + "cmagica", "Carta Magica (Ver 1.8)", + "cmanhat", "Manhattan (DECO Cassette)", + "cmast91", "Cherry Master '91 (ver.1.30)", + "cmast92", "Cherry Master '92", + "cmast97", "Cherry Master '97", + "cmaster", "Cherry Master I (ver.1.01, set 1)", + "cmasterb", "Cherry Master I (ver.1.01, set 2)", + "cmasterbv", "Cherry Master I (ver.1.01, set 4, with Blitz Poker ROM?)", + "cmasterc", "Cherry Master I (ver.1.01, set 3)", + "cmasterd", "Cherry Master I (ver.1.01, set 5)", + "cmastere", "Cherry Master I (ver.1.01, set 6)", + "cmasterf", "Cherry Master I (ver.1.01, set 7)", + "cmehyou", "Mahjong Circuit no Mehyou (Japan)", + "cmezspin", "Cherry Master I (E-Z Spin bootleg / hack)", + "cmfun", "Cherry Master (Fun USA v2.5 bootleg / hack)", + "cmissnx", "Mission-X (DECO Cassette)", + "cmkenosp", "Coinmaster Keno (Y2K, Spanish, 2000-12-14)", + "cmkenospa", "Coinmaster Keno (Y2K, Spanish, 2000-12-02)", + "cmmb162", "Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62)", + "cmrltv75", "Coinmaster Roulette V75 (Y2K, Spanish)", + "cmv4", "Cherry Master (ver.4, set 1)", + "cmv4a", "Cherry Master (ver.4, set 2)", + "cmv801", "Cherry Master (Corsica, ver.8.01)", + "cmwm", "Cherry Master (Watermelon bootleg / hack)", + "cndypuzl", "Candy Puzzle (v1.0)", + "cnightst", "Night Star (DECO Cassette, set 1)", + "cnightst2", "Night Star (DECO Cassette, set 2)", + "cninja", "Caveman Ninja (World ver 4)", + "cninja1", "Caveman Ninja (World ver 1)", + "cninjabl", "Caveman Ninja (bootleg)", + "cninjabl2", "Caveman Ninja (bootleg, alt)", + "cninjau", "Caveman Ninja (US ver 4)", + "cntct_l1", "Contact (L-1)", + "cntforce", "Counterforce", + "cntine31", "Continental 3 in 1 (Bingo)", + "cntinntl", "Continental (Bingo)", + "cntrygrl", "Country Girl (Japan set 1)", + "cntrygrla", "Country Girl (Japan set 2)", + "cntsteer", "Counter Steer (Japan)", + "cobra", "Cobra Command (Data East LD, set 1)", + "cobraa", "Cobra Command (Data East LD, set 2)", + "cobracom", "Cobra-Command (World revision 5)", + "cobracomj", "Cobra-Command (Japan)", + "cobram3", "Cobra Command (M.A.C.H. 3 hardware)", + "cobrap", "Cobra", + "cobraseg", "Cobra Command (Sega LaserDisc Hardware)", + "code1d", "Code One Dispatch (ver D)", + "code1db", "Code One Dispatch (ver B)", + "colmns97", "Columns '97 (JET 961209 V1.000)", + "colony7", "Colony 7 (set 1)", + "colony7a", "Colony 7 (set 2)", + "colorama", "Colorama (English)", + "colt", "Colt", + "columbia", "Columbia", + "columbus", "Columbus (set 1)", + "columbusa", "Columbus (set 2)", + "columbusb", "Columbus (set 3)", + "columbusc", "Columbus (set 4)", + "columbusd", "Columbus (set 5)", + "columbuse", "Columbus (set 6)", + "columbusf", "Columbus (set 7)", + "column2j", "Columns II: The Voyage Through Time (Japan)", + "columns", "Columns (World)", + "columns2", "Columns II: The Voyage Through Time (World)", + "columnsj", "Columns (Japan)", + "columnsu", "Columns (US, cocktail)", + "combat", "Combat (version 3.0)", + "combatsc", "Combat School (joystick)", + "combatscb", "Combat School (bootleg)", + "combatscj", "Combat School (Japan trackball)", + "combatsct", "Combat School (trackball)", + "combh", "Combat Hawk", + "comebaby", "Come On Baby", + "comet_l4", "Comet (L-4)", + "comet_l5", "Comet (L-5)", + "comg074", "Cal Omega - Game 7.4 (Gaming Poker, W.Export)", + "comg076", "Cal Omega - Game 7.6 (Arcade Poker)", + "comg079", "Cal Omega - Game 7.9 (Arcade Poker)", + "comg080", "Cal Omega - Game 8.0 (Arcade Black Jack)", + "comg094", "Cal Omega - Game 9.4 (Keno)", + "comg107", "Cal Omega - Game 10.7c (Big Game)", + "comg123", "Cal Omega - Game 12.3 (Ticket Poker)", + "comg125", "Cal Omega - Game 12.5 (Bingo)", + "comg127", "Cal Omega - Game 12.7 (Keno)", + "comg128", "Cal Omega - Game 12.8 (Arcade Game)", + "comg134", "Cal Omega - Game 13.4 (Nudge Bingo)", + "comg145", "Cal Omega - Game 14.5 (Pixels)", + "comg157", "Cal Omega - Game 15.7 (Double-Draw Poker)", + "comg159", "Cal Omega - Game 15.9 (Wild Double-Up)", + "comg164", "Cal Omega - Game 16.4 (Keno)", + "comg168", "Cal Omega - Game 16.8 (Keno)", + "comg172", "Cal Omega - Game 17.2 (Double Double Poker)", + "comg175", "Cal Omega - Game 17.51 (Gaming Draw Poker)", + "comg176", "Cal Omega - Game 17.6 (Nudge Bingo)", + "comg181", "Cal Omega - Game 18.1 (Nudge Bingo)", + "comg183", "Cal Omega - Game 18.3 (Pixels)", + "comg185", "Cal Omega - Game 18.5 (Pixels)", + "comg186", "Cal Omega - Game 18.6 (Pixels)", + "comg187", "Cal Omega - Game 18.7 (Amusement Poker)", + "comg204", "Cal Omega - Game 20.4 (Super Blackjack)", + "comg208", "Cal Omega - Game 20.8 (Winner's Choice)", + "comg227", "Cal Omega - Game 22.7 (Amusement Poker, d/d)", + "comg230", "Cal Omega - Game 23.0 (FC Bingo (4-card))", + "comg236", "Cal Omega - Game 23.6 (Hotline)", + "comg239", "Cal Omega - Game 23.9 (Gaming Draw Poker)", + "comg240", "Cal Omega - Game 24.0 (Gaming Draw Poker, hold)", + "comg246", "Cal Omega - Game 24.6 (Hotline)", + "comg272a", "Cal Omega - Game 27.2 (Keno, amusement)", + "comg272b", "Cal Omega - Game 27.2 (Keno, gaming)", + "comg5108", "Cal Omega - Game 51.08 (CEI Video Poker, Jacks or Better)", + "comg903d", "Cal Omega - System 903 Diag.PROM", + "comg905d", "Cal Omega - System 905 Diag.PROM", + "commando", "Commando (World)", + "commandob", "Commando (bootleg set 1)", + "commandob2", "Commando (bootleg set 2)", + "commandoj", "Senjou no Ookami", + "commandou", "Commando (US set 1)", + "commandou2", "Commando (US set 2)", + "commandw", "Command War - Super Special Battle & War Game (Ver 0.0J) (Prototype)", + "commsega", "Commando (Sega)", + "comotion", "Comotion", + "compgolf", "Competition Golf Final Round (revision 3)", + "compgolfo", "Competition Golf Final Round (old version)", + "complexx", "Complex X", + "condor", "Condor (bootleg of Phoenix)", + "coneyis", "Old Coney Island!", + "confmiss", "Confidential Mission (GDS-0001)", + "congo", "Congo Bongo (Rev C, 2 board stack)", + "congo_13", "Congo (1.3)", + "congo_20", "Congo (2.0)", + "congo_21", "Congo (2.1)", + "congoa", "Congo Bongo (Rev C, 3 board stack)", + "conquer", "Conqueror", + "contcirc", "Continental Circus (World)", + "contcircj", "Continental Circus (Japan)", + "contcircu", "Continental Circus (US set 1)", + "contcircua", "Continental Circus (US set 2)", + "contra", "Contra (US, set 1)", + "contra1", "Contra (US, set 2)", + "contrab", "Contra (bootleg)", + "contrabj", "Contra (Japan bootleg, set 1)", + "contrabj1", "Contra (Japan bootleg, set 2)", + "contraj", "Contra (Japan, set 1)", + "contraj1", "Contra (Japan, set 2)", + "cookbib", "Cookie & Bibi (set 1)", + "cookbib2", "Cookie & Bibi 2", + "cookbib3", "Cookie & Bibi 3", + "cookbiba", "Cookie & Bibi (set 2)", + "cookrace", "Cook Race", + "coolmini", "Cool Minigame Collection", + "coolpool", "Cool Pool", + "coolridr", "Cool Riders", + "coozumou", "Oozumou - The Grand Sumo (DECO Cassette, Japan)", + "cop01", "Cop 01 (set 1)", + "cop01a", "Cop 01 (set 2)", + "cops", "Cops", + "copsnrob", "Cops'n Robbers", + "coralr2", "Coral Riches II (1VXFC5472, New Zealand)", + "coronatn", "Coronation Street Quiz Game", + "coronatnd", "Coronation Street Quiz Game (Protocol)", + "corsario", "Corsario", + "corv_21", "Corvette (2.1)", + "corv_lx1", "Corvette (LX1)", + "corv_px4", "Corvette (PX4)", + "cosflash", "Cosmic Flash", + "cosmccop", "Cosmic Cop (World)", + "cosmic", "Cosmic", + "cosmica", "Cosmic Alien (version II)", + "cosmica1", "Cosmic Alien (first version)", + "cosmica2", "Cosmic Alien (early version II?)", + "cosmicg", "Cosmic Guerilla", + "cosmicgi", "Cosmic Guerilla (Spanish bootleg)", + "cosmicm2", "Cosmic Monsters 2", + "cosmicmo", "Cosmic Monsters (version II)", + "cosmo", "Cosmo", + "cosmogng", "Cosmo Gang the Video (US)", + "cosmogngj", "Cosmo Gang the Video (Japan)", + "cosmos", "Cosmos", + "cotton", "Cotton (set 4, World, FD1094 317-0181a)", + "cotton2", "Cotton 2 (JUET 970902 V1.000)", + "cottonbm", "Cotton Boomerang (JUET 980709 V1.000)", + "cottong", "Cotocoto Cottong", + "cottonj", "Cotton (set 2, Japan, Rev B, FD1094 317-0179b)", + "cottonja", "Cotton (set 1, Japan, Rev A, FD1094 317-0179a)", + "cottonu", "Cotton (set 3, US, FD1094 317-0180)", + "countdwn", "Count-Down", + "countrun", "Counter Run (NS6201-A 1988.3)", + "countrunb", "Counter Run (bootleg set 1)", + "countrunb2", "Counter Run (bootleg set 2)", + "countryc", "Country Club", + "couple", "The Couples (set 1)", + "couplei", "The Couples (set 3)", + "couplep", "The Couples (set 2)", + "cowboy", "Cowboy Eight Ball", + "cowrace", "Cow Race (King Derby hack)", + "cp_15", "The Champion Pub (1.5)", + "cp_16", "The Champion Pub (1.6)", + "cpoker", "Champion Poker (v220I)", + "cpokerpk", "Champion Italian PK (bootleg, blue board)", + "cpokerpkg", "Champion Italian PK (bootleg, green board)", + "cpokert", "Champion Poker (v200G)", + "cpokerx", "Champion Poker (v100)", + "cppicf", "Peter Pepper's Ice Cream Factory (DECO Cassette, set 1)", + "cppicf2", "Peter Pepper's Ice Cream Factory (DECO Cassette, set 2)", + "cprobowl", "Pro Bowling (DECO Cassette)", + "cprogolf", "Tournament Pro Golf (DECO Cassette)", + "cprogolf18", "18 Challenge Pro Golf (DECO Cassette, Japan)", + "cprogolfj", "Tournament Pro Golf (DECO Cassette, Japan)", + "cps3boot", "CPS3 Multi-game bootleg for HD6417095 type SH2 (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure, Red Earth)", + "cps3boota", "CPS3 Multi-game bootleg for dead security cart (New Generation, 2nd Impact, 3rd Strike)", + "cps3bs32", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, V3)", + "cps3bs32a", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, older)", + "cpsoccer", "Pro Soccer (DECO Cassette)", + "cpsoccerj", "Pro Soccer (DECO Cassette, Japan)", + "cptennis", "Pro Tennis (DECO Cassette)", + "cpthook", "Captain Hook", + "cpzn1", "ZN1", + "cpzn2", "ZN2", + "cr589fw", "CD-ROM Drive Updater 2.0 (700B04)", + "cr589fwa", "CD-ROM Drive Updater (700A04)", + "crackndj", "Crackin' DJ", + "cracksht", "Crackshot (version 2.0)", + "crakndj2", "Crackin' DJ Part 2", + "crash", "Crash", + "crater", "Crater Raider", + "crazyblk", "Crazy Blocks", + "crazycop", "Crazy Cop (Japan)", + "crazyfgt", "Crazy Fight", + "crazywar", "Crazy War", + "crbaloon", "Crazy Balloon (set 1)", + "crbaloon2", "Crazy Balloon (set 2)", + "crgolf", "Crowns Golf (834-5419-04)", + "crgolfa", "Crowns Golf (834-5419-03)", + "crgolfb", "Crowns Golf (set 3)", + "crgolfbt", "Champion Golf (bootleg)", + "crgolfc", "Champion Golf", + "crgolfhi", "Crowns Golf in Hawaii", + "crimec", "Crime City (World)", + "crimecj", "Crime City (Japan)", + "crimecu", "Crime City (US)", + "crimep2", "Crime Patrol 2: Drug Wars v1.3", + "crimep211", "Crime Patrol 2: Drug Wars v1.1", + "crimepat", "Crime Patrol v1.4", + "crimfght", "Crime Fighters (US 4 players)", + "crimfght2", "Crime Fighters (World 2 Players)", + "crimfghtj", "Crime Fighters (Japan 2 Players)", + "crisscrs", "Criss Cross (Sweden)", + "critcrsh", "Critter Crusher (EA 951204 V1.000)", + "crkdown", "Crack Down (World, Floppy Based, FD1094 317-0058-04c)", + "crkdownj", "Crack Down (Japan, Floppy Based, FD1094 317-0058-04b Rev A)", + "crkdownu", "Crack Down (US, Floppy Based, FD1094 317-0058-04d)", + "crockman", "Crock-Man", + "croquis", "Croquis (Germany)", + "crospang", "Cross Pang", + "crossbld", "Cross Blades! (Japan)", + "crossbow", "Crossbow (version 2.0)", + "croupier", "Croupier (Playmark Roulette v.20.05)", + "croupiera", "Croupier (Playmark Roulette v.09.04)", + "crsbingo", "Poker Carnival", + "crshnscr", "Crash 'n Score [TTL]", + "crshrace", "Lethal Crash Race (set 1)", + "crshrace2", "Lethal Crash Race (set 2)", + "crsword", "Crossed Swords (ALM-002)(ALH-002)", + "crszone", "Crisis Zone (CSZO4 Ver. B)", + "crszonev2a", "Crisis Zone (CSZO2 Ver. A)", + "crszonev3a", "Crisis Zone (CSZO3 Ver. A)", + "crszonev3b", "Crisis Zone (CSZO3 Ver. B, set 1)", + "crszonev3b2", "Crisis Zone (CSZO3 Ver. B, set 2)", + "crszonev4a", "Crisis Zone (CSZO4 Ver. A)", + "crtaxihr", "Crazy Taxi High Roller (Rev B) (GDX-0002B)", + "cruisin", "Cruisin", + "crush", "Crush Roller (set 1)", + "crush2", "Crush Roller (set 2)", + "crush3", "Crush Roller (set 3)", + "crush4", "Crush Roller (set 4)", + "crushbl", "Crush Roller (bootleg set 1)", + "crushbl2", "Crush Roller (bootleg set 2)", + "crushbl3", "Crush Roller (bootleg set 3)", + "crusherm", "Crusher Makochan (Japan)", + "crushs", "Crush Roller (bootleg set 4)", + "crusnexo", "Cruis'n Exotica (version 2.4)", + "crusnexoa", "Cruis'n Exotica (version 2.0)", + "crusnexob", "Cruis'n Exotica (version 1.6)", + "crusnexoc", "Cruis'n Exotica (version 1.3)", + "crusnexod", "Cruis'n Exotica (version 1.0)", + "crusnusa", "Cruis'n USA (rev L4.1)", + "crusnusa21", "Cruis'n USA (rev L2.1)", + "crusnusa40", "Cruis'n USA (rev L4.0)", + "crusnwld", "Cruis'n World (rev L2.5)", + "crusnwld13", "Cruis'n World (rev L1.3)", + "crusnwld17", "Cruis'n World (rev L1.7)", + "crusnwld19", "Cruis'n World (rev L1.9)", + "crusnwld20", "Cruis'n World (rev L2.0)", + "crusnwld23", "Cruis'n World (rev L2.3)", + "crusnwld24", "Cruis'n World (rev L2.4)", + "cryptklr", "Crypt Killer (GQ420 UAA)", + "crysbios", "Crystal System BIOS", + "crysking", "The Crystal of Kings", + "crystal", "Crystal Colours (CMC hardware)", + "crystal2", "Crystal Gal 2 (Japan 860620)", + "crystalc", "Crystals Colours (Ver 1.01)", + "crystalg", "Crystal Gal (Japan 860512)", + "crystals", "Crystal Springs (10155811, Malaysia)", + "crzmon2", "Crazy Monkey 2 (100310)", + "crzmon2_2", "Crazy Monkey 2 (100311 Lottery)", + "crzmon2_3", "Crazy Monkey 2 (100315 Entertainment)", + "crzrally", "Crazy Rally (set 1)", + "crzrallya", "Crazy Rally (set 2)", + "crzrallyg", "Crazy Rally (Gecas license)", + "crzytaxi", "Crazy Taxi (JPN, USA, EXP, KOR, AUS)", + "csclub", "Capcom Sports Club (Euro 971017)", + "csclub1", "Capcom Sports Club (Euro 970722)", + "csclub1d", "Capcom Sports Club (Euro 970722 Phoenix Edition) (bootleg)", + "cscluba", "Capcom Sports Club (Asia 970722)", + "csclubh", "Capcom Sports Club (Hispanic 970722)", + "csclubj", "Capcom Sports Club (Japan 970722)", + "csclubjy", "Capcom Sports Club (Japan 970722, yellow case)", + "cscrtry", "Scrum Try (DECO Cassette, set 1)", + "cscrtry2", "Scrum Try (DECO Cassette, set 2)", + "csdtenis", "Super Doubles Tennis (DECO Cassette, Japan)", + "cshift", "Chicken Shift", + "cshooter", "Cross Shooter (not encrypted)", + "cshootere", "Cross Shooter (encrypted)", + "csilver", "Captain Silver (World)", + "csilverj", "Captain Silver (Japan)", + "csk227it", "Champion Skill (with Ability)", + "csk234it", "Champion Skill (Ability, Poker & Symbols)", + "cskater", "Skater (DECO Cassette, Japan)", + "csmash", "Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A)", + "csmasho", "Cosmic Smash (JPN, USA, EXP, KOR, AUS)", + "csmic_l1", "Cosmic Gunfight (L-1)", + "cspike", "Gun Spike (JPN) / Cannon Spike (USA, EXP, KOR, AUS)", + "csplayh1", "Super CD Dai8dan Mahjong Hanafuda Cosplay Tengoku (Japan)", + "csplayh5", "Mahjong Hanafuda Cosplay Tengoku 5 (Japan)", + "csplayh7", "Cosplay Tengoku 7 - Super Kogal Grandprix (Japan)", + "csprint", "Championship Sprint (rev 3)", + "csprint1", "Championship Sprint (rev 1)", + "csprint2", "Championship Sprint (rev 2)", + "csprintf", "Championship Sprint (French)", + "csprintg", "Championship Sprint (German, rev 2)", + "csprintg1", "Championship Sprint (German, rev 1)", + "csprints", "Championship Sprint (Spanish, rev 2)", + "csprints1", "Championship Sprint (Spanish, rev 1)", + "cstlevna", "Vs. Castlevania", + "cstripxi", "Casino Strip XI", + "csuperas", "Super Astro Fighter (DECO Cassette)", + "cswat", "Cosmoswat", + "csweetht", "Sweet Heart (DECO Cassette)", + "ct2k3sa", "Crouching Tiger Hidden Dragon 2003 Super Plus alternate (The King of Fighters 2001 bootleg)", + "ct2k3sp", "Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg)", + "ctcheese", "Cut The Cheese (Redemption)", + "ctchzdlx", "Cut The Cheese Deluxe (Redemption)", + "cterrani", "Terranean (DECO Cassette)", + "cthd2003", "Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg)", + "ctisland", "Treasure Island (DECO Cassette, set 1)", + "ctisland2", "Treasure Island (DECO Cassette, set 2)", + "ctisland3", "Treasure Island (DECO Cassette, set 3)", + "ctomaday", "Captain Tomaday", + "ctornado", "Tornado (DECO Cassette)", + "ctribe", "The Combatribes (US)", + "ctribe1", "The Combatribes (US set 1?)", + "ctribeb", "The Combatribes (bootleg set 1)", + "ctribeb2", "The Combatribes (bootleg set 2)", + "ctribej", "The Combatribes (Japan)", + "ctrpllrp", "Caterpillar Pacman Hack", + "ctsttape", "Test Tape (DECO Cassette)", + "cubeqst", "Cube Quest (01/04/84)", + "cubeqsta", "Cube Quest (12/30/83)", + "cubybop", "Cuby Bop (location test)", + "cueball", "Cue Ball Wizard", + "cuebrick", "Cue Brick (World version D)", + "cuebrickj", "Cue Brick (Japan)", + "cultname", "Seimei-Kantei-Meimei-Ki Cult Name", + "cultures", "Jibun wo Migaku Culture School Mahjong Hen", + "cuoreuno", "Cuore 1 (Italian)", + "cupfinal", "Taito Cup Finals (Ver 1.0O 1993/02/28)", + "cupsoc", "Seibu Cup Soccer (set 1)", + "cupsoca", "Seibu Cup Soccer (set 2)", + "cupsocb", "Seibu Cup Soccer (set 3)", + "cupsocs", "Seibu Cup Soccer :Selection: (set 1)", + "cupsocs2", "Seibu Cup Soccer :Selection: (set 2)", + "cupsocsb", "Seibu Cup Soccer :Selection: (bootleg, set 1)", + "cupsocsb2", "Seibu Cup Soccer :Selection: (bootleg, set 2)", + "cupsocsb3", "Seibu Cup Soccer :Selection: (bootleg, set 3)", + "curvebal", "Curve Ball", + "cutieq", "Cutie Q", + "cv_10", "Cirqus Voltaire (1.0)", + "cv_11", "Cirqus Voltaire (1.1)", + "cv_13", "Cirqus Voltaire (1.3)", + "cv_14", "Cirqus Voltaire (1.4)", + "cv_20h", "Cirqus Voltaire (2.0H)", + "cvs2gd", "Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A) (GDL-0007A)", + "cvsgd", "Capcom Vs. SNK Millennium Fight 2000 Pro (GDL-0004)", + "cworld", "Capcom World (Japan)", + "cworld2j", "Adventure Quiz Capcom World 2 (Japan 920611)", + "cybattlr", "Cybattler", + "cyberbal", "Cyberball (rev 4)", + "cyberbal2", "Cyberball (rev 2)", + "cyberbal2p", "Cyberball 2072 (2 player, rev 4)", + "cyberbal2p1", "Cyberball 2072 (2 player, rev 1)", + "cyberbal2p2", "Cyberball 2072 (2 player, rev 2)", + "cyberbal2p3", "Cyberball 2072 (2 player, rev 3)", + "cyberbalp", "Cyberball (prototype)", + "cyberbalt", "Tournament Cyberball 2072 (rev 2)", + "cyberbalt1", "Tournament Cyberball 2072 (rev 1)", + "cyberlip", "Cyber-Lip (NGM-010)", + "cybertnk", "Cyber Tank (v1.4)", + "cybots", "Cyberbots: Fullmetal Madness (Euro 950424)", + "cybotsj", "Cyberbots: Fullmetal Madness (Japan 950420)", + "cybotsjd", "Cyberbots: Fullmetal Madness (Japan 950424) (decrypted bootleg)", + "cybotsu", "Cyberbots: Fullmetal Madness (USA 950424)", + "cybotsud", "Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg)", + "cybrcomm", "Cyber Commando (Rev. CY1, Japan)", + "cybrcycc", "Cyber Cycles (Rev. CB2 Ver.C)", + "cybrnaut", "Cybernaut", + "cybsled", "Cyber Sled (World)", + "cybsledj", "Cyber Sled (Japan)", + "cyclemb", "Cycle Maabou (Japan)", + "cycln_l4", "Cyclone (L-4)", + "cycln_l5", "Cyclone (L-5)", + "cyclopes", "Cyclopes", + "cyclshtg", "Cycle Shooting", + "cyclwarr", "Cycle Warriors (set 1)", + "cyclwarra", "Cycle Warriors (set 2)", + "cyvern", "Cyvern (US)", + "cyvernj", "Cyvern (Japan)", + "czeroize", "Zeroize (DECO Cassette)", + "czmon_13", "Crazy Monkey (100311 World)", + "czmon_15", "Crazy Monkey (100311 Entertainment)", + "czmon_16", "Crazy Monkey (100312 Russia)", + "czmon_5", "Crazy Monkey (030421 World)", + "czmon_7", "Crazy Monkey (031110 World)", + "czmon_7a", "Crazy Monkey (bootleg, 031110, backdoor set 1)", + "czmon_7b", "Crazy Monkey (bootleg, 031110, backdoor set 2)", + "czmon_8", "Crazy Monkey (050120 World)", + "czmon_8a", "Crazy Monkey (bootleg, 050120, backdoor)", + "czmon_8b", "Crazy Monkey (bootleg, 050120, changed version text)", + "czmon_8c", "Crazy Monkey (bootleg, 050120, VIDEO GAME-1 CM01)", + "czmon_8d", "Crazy Monkey (bootleg, 050120, LOTTOGAME (I))", + "czmon_8e", "Crazy Monkey (bootleg, 050120, LOTO PROGRAM V-CM2)", + "czmon_8f", "Crazy Monkey (bootleg, 050120, LOTOS CM01)", + "czmon_9", "Crazy Monkey (070315 Russia)", + "czmon_9a", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 1)", + "czmon_9b", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 2)", + "czmon_9c", "Crazy Monkey (bootleg, 070315, payout percentage 70)", + "d9final", "Dream 9 Final (v2.24)", + "dacholer", "Dacholer", + "dadandrn", "Kyukyoku Sentai Dadandarn (ver JAA)", + "dai2kaku", "Dai-Dai-Kakumei (Japan)", + "dai3wksi", "Dai San Wakusei Meteor (Japan)", + "daikaiju", "Daikaiju no Gyakushu", + "daimakai", "Daimakaimura (Japan)", + "daimakair", "Daimakaimura (Japan Resale Ver.)", + "daimyojn", "Mahjong Daimyojin (Japan, T017-PB-00)", + "daioh", "Daioh (set 1)", + "daioha", "Daioh (set 2)", + "daireika", "Mahjong Daireikai (Japan)", + "dairesya", "Dai Ressya Goutou (Japan)", + "daisenpu", "Daisenpu (Japan)", + "daiskiss", "Daisu-Kiss (ver JAA)", + "daisyari", "Daisyarin [BET] (Japan)", + "daitorid", "Daitoride", + "daitorida", "Daitoride (YMF278B version)", + "daiyogen", "Mahjong Daiyogen (Japan)", + "dakar", "Dakar", + "dakkochn", "DakkoChan House (MC-8123B, 317-5014)", + "dambustr", "Dambusters (US, set 1)", + "dambustra", "Dambusters (US, set 2)", + "dambustruk", "Dambusters (UK)", + "danceyes", "Dancing Eyes (US, DC3/VER.C)", + "danceyesj", "Dancing Eyes (Japan, DC1/VER.A)", + "danchih", "Danchi de Hanafuda (J 990607 V1.400)", + "danchiq", "Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200)", + "dangar", "Ufo Robo Dangar (12/1/1986)", + "dangar2", "Ufo Robo Dangar (9/26/1986)", + "dangarb", "Ufo Robo Dangar (bootleg)", + "dangcurv", "Dangerous Curves (Ver 2.2 J)", + "dangerz", "Danger Zone", + "dangseed", "Dangerous Seed (Japan)", + "dankuga", "Dan-Ku-Ga (Ver 0.0J 1994/12/13) (Prototype)", + "daraku", "Daraku Tenshi - The Fallen Angels", + "darius", "Darius (World)", + "darius2", "Darius II (triple screen) (Japan)", + "darius2d", "Darius II (dual screen) (Japan, Rev 2)", + "darius2do", "Darius II (dual screen) (Japan, Rev 1)", + "dariuse", "Darius (Extra) (Japan)", + "dariusg", "Darius Gaiden - Silver Hawk (Ver 2.5O 1994/09/19)", + "dariusgj", "Darius Gaiden - Silver Hawk (Ver 2.5J 1994/09/19)", + "dariusgu", "Darius Gaiden - Silver Hawk (Ver 2.5A 1994/09/19)", + "dariusgx", "Darius Gaiden - Silver Hawk Extra Version (Ver 2.7J 1995/03/06) (Official Hack)", + "dariusj", "Darius (Japan)", + "dariuso", "Darius (Japan old version)", + "darkadv", "Dark Adventure", + "darkedge", "Dark Edge (World)", + "darkedgej", "Dark Edge (Japan)", + "darkhleg", "Dark Horse Legend (GX706 VER. JAA)", + "darkhors", "Dark Horse (bootleg of Jockey Club II)", + "darkmist", "The Lost Castle In Darkmist", + "darkplnt", "Dark Planet", + "darkseal", "Dark Seal (World revision 3)", + "darkseal1", "Dark Seal (World revision 1)", + "darkseal2", "Dark Seal 2 (Japan v2.1)", + "darksealj", "Dark Seal (Japan revision 4)", + "darkshad", "Dark Shadow", + "darktowr", "Dark Tower", + "darkwar", "Dark Warrior", + "darthvdr", "Darth Vader (bootleg of Space Invaders)", + "darwin", "Darwin 4078 (Japan)", + "dassault", "Desert Assault (US)", + "dassault4", "Desert Assault (US 4 Players)", + "dayto2pe", "Daytona USA 2 Power Edition", + "daytona", "Daytona USA (Japan, Revision A)", + "daytona2", "Daytona USA 2 (Revision A)", + "daytona93", "Daytona USA Deluxe '93", + "daytonam", "Daytona USA (Japan, To The MAXX)", + "daytonas", "Daytona USA (With Saturn Adverts)", + "daytonase", "Daytona USA Special Edition (Japan, Revision A)", + "daytonat", "Daytona USA (Japan, Turbo hack, set 1)", + "daytonata", "Daytona USA (Japan, Turbo hack, set 2)", + "dazzler", "Dazzler", + "dbc", "Da Ban Cheng (Hong Kong, V027H)", + "dblaxle", "Double Axle (US)", + "dblaxleu", "Double Axle (US, earlier)", + "dblchal", "Double Challenge (Version 1.5R, set 1)", + "dblchalc1", "Double Challenge (Version 1.5R, set 2)", + "dblchald1", "Double Challenge (Version 1.5R, set 3)", + "dblchalo", "Double Challenge (Version 1.1)", + "dblchalv1", "Double Challenge (Version 1.5R Dual)", + "dblcrown", "Double Crown (v1.0.3)", + "dbldynj", "The Double Dynamites (Japan)", + "dbldynu", "The Double Dynamites (US)", + "dblewing", "Double Wings", + "dblplay", "Super Baseball Double Play Home Run Derby", + "dblpoint", "Double Point", + "dblpointd", "Double Point (Dong Bang Electron, bootleg?)", + "dbreed", "Dragon Breed (M81 PCB version)", + "dbreedm72", "Dragon Breed (M72 PCB version)", + "dbz", "Dragonball Z (rev B)", + "dbz2", "Dragonball Z 2 - Super Battle", + "dbza", "Dragonball Z (rev A)", + "dbzvrvs", "Dragon Ball Z V.R.V.S. (Japan)", + "dcclub", "Dynamic Country Club (World, ROM Based)", + "dcclubfd", "Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d)", + "dcclubj", "Dynamic Country Club (Japan, ROM Based)", + "dcheese", "Double Cheese", + "dcon", "D-Con", + "dcrown", "Dream Crown (Set 1)", + "dcrowna", "Dream Crown (Set 2)", + "dd_l2", "Dr. Dude (LA-2)", + "dd_p06", "Dr. Dude (PA-6 WPC)", + "dd_p6", "Dr. Dude (PA-6)", + "dd_p7", "Dr. Dude (PA-7 WPC)", + "dday", "D-Day", + "ddayc", "D-Day (Centuri)", + "ddayjlc", "D-Day (Jaleco set 1)", + "ddayjlca", "D-Day (Jaleco set 2)", + "ddcrew", "D. D. Crew (World, 3 Players, FD1094 317-0190)", + "ddcrew1", "D. D. Crew (World, 4 Players, FD1094 317-0187)", + "ddcrew2", "D. D. Crew (World, 2 Players, FD1094 317-0184)", + "ddcrewj", "D. D. Crew (Japan, 4 Players, FD1094 317-0185)", + "ddcrewj2", "D. D. Crew (Japan, 2 Players, FD1094 317-0182)", + "ddcrewu", "D. D. Crew (US, 4 Players, FD1094 317-0186)", + "ddealer", "Double Dealer", + "ddenlovj", "Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan)", + "ddenlovr", "Don Den Lover Vol. 1 (Hong Kong)", + "ddenlovrb", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg)", + "ddenlovrk", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea)", + "ddonpach", "DoDonPachi (International, Master Ver. 97/02/05)", + "ddonpachj", "DoDonPachi (Japan, Master Ver. 97/02/05)", + "ddp2", "DoDonPachi II - Bee Storm (World, ver. 102)", + "ddp2100", "DoDonPachi II - Bee Storm (World, ver. 100)", + "ddp2100c", "DoDonPachi II - Bee Storm (China, ver. 100)", + "ddp2100hk", "DoDonPachi II - Bee Storm (Hong Kong, ver. 100)", + "ddp2100j", "DoDonPachi II - Bee Storm (Japan, ver. 100)", + "ddp2100k", "DoDonPachi II - Bee Storm (Korea, ver. 100)", + "ddp2100t", "DoDonPachi II - Bee Storm (Taiwan, ver. 100)", + "ddp2101", "DoDonPachi II - Bee Storm (World, ver. 101)", + "ddp2101c", "DoDonPachi II - Bee Storm (China, ver. 101)", + "ddp2101hk", "DoDonPachi II - Bee Storm (Hong Kong, ver. 101)", + "ddp2101j", "DoDonPachi II - Bee Storm (Japan, ver. 101)", + "ddp2101k", "DoDonPachi II - Bee Storm (Korea, ver. 101)", + "ddp2101t", "DoDonPachi II - Bee Storm (Taiwan, ver. 101)", + "ddp2c", "DoDonPachi II - Bee Storm (China, ver. 102)", + "ddp2hk", "DoDonPachi II - Bee Storm (Hong Kong, ver. 102)", + "ddp2j", "DoDonPachi II - Bee Storm (Japan, ver. 102)", + "ddp2k", "DoDonPachi II - Bee Storm (Korea, ver. 102)", + "ddp2t", "DoDonPachi II - Bee Storm (Taiwan, ver. 102)", + "ddpdfk", "DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5)", + "ddpdfk10", "DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER)", + "ddpdoj", "DoDonPachi Dai-Ou-Jou V101 (2002.04.05.Master Ver)", + "ddpdoja", "DoDonPachi Dai-Ou-Jou V100 (2002.04.05.Master Ver)", + "ddpdojb", "DoDonPachi Dai-Ou-Jou (2002.04.05 Master Ver)", + "ddpdojblk", "DoDonPachi Dai-Ou-Jou (2002.10.07.Black Ver)", + "ddpdojblka", "DoDonPachi Dai-Ou-Jou (2002.10.07 Black Ver)", + "ddpdojh", "Dodonpachi Daioujou Tamashii (V201, China)", + "ddr2m", "Dance Dance Revolution 2nd Mix (GN895 VER. JAA)", + "ddr2mc", "Dance Dance Revolution 2nd Mix with beatmaniaIIDX CLUB VERSiON (GE896 VER. JAA)", + "ddr2mc2", "Dance Dance Revolution 2nd Mix with beatmaniaIIDX substream CLUB VERSiON 2 (GE984 VER. JAA)", + "ddr2ml", "Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB)", + "ddr2mla", "Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAA)", + "ddr3ma", "Dance Dance Revolution 3rd Mix (GN887 VER. AAA)", + "ddr3mj", "Dance Dance Revolution 3rd Mix (GN887 VER. JAA)", + "ddr3mk", "Dance Dance Revolution 3rd Mix - Ver.Korea2 (GN887 VER. KBA)", + "ddr3mka", "Dance Dance Revolution 3rd Mix - Ver.Korea (GN887 VER. KAA)", + "ddr3mp", "Dance Dance Revolution 3rd Mix Plus (G*A22 VER. JAA)", + "ddr4m", "Dance Dance Revolution 4th Mix (G*A33 VER. AAA)", + "ddr4mj", "Dance Dance Revolution 4th Mix (G*A33 VER. JAA)", + "ddr4mp", "Dance Dance Revolution 4th Mix Plus (G*A34 VER. JAA)", + "ddr4mps", "Dance Dance Revolution 4th Mix Plus Solo (G*A34 VER. JBA)", + "ddr4ms", "Dance Dance Revolution 4th Mix Solo (G*A33 VER. ABA)", + "ddr4msj", "Dance Dance Revolution 4th Mix Solo (G*A33 VER. JBA)", + "ddr5m", "Dance Dance Revolution 5th Mix (G*A27 VER. JAA)", + "ddra", "Dance Dance Revolution (GN845 VER. AAA)", + "ddragon", "Double Dragon (Japan)", + "ddragon2", "Double Dragon II - The Revenge (World)", + "ddragon2u", "Double Dragon II - The Revenge (US)", + "ddragon3", "Double Dragon 3 - The Rosetta Stone (US)", + "ddragon3b", "Double Dragon 3 - The Rosetta Stone (bootleg)", + "ddragon3j", "Double Dragon 3 - The Rosetta Stone (Japan)", + "ddragon3p", "Double Dragon 3 - The Rosetta Stone (prototype)", + "ddragon6809", "Double Dragon (bootleg with 3xM6809, set 1)", + "ddragon6809a", "Double Dragon (bootleg with 3xM6809, set 2)", + "ddragonb", "Double Dragon (bootleg with HD6309)", + "ddragonb2", "Double Dragon (bootleg)", + "ddragonba", "Double Dragon (bootleg with M6803)", + "ddragonu", "Double Dragon (US set 1)", + "ddragonua", "Double Dragon (US set 2)", + "ddragonub", "Double Dragon (US set 3)", + "ddragonw", "Double Dragon (World set 1)", + "ddragonw1", "Double Dragon (World set 2)", + "ddrbocd", "Dance Dance Revolution Best of Cool Dancers (GE892 VER. JAA)", + "ddream95", "Dunk Dream '95 (Japan 1.4, EAM)", + "ddrextrm", "Dance Dance Revolution Extreme (G*C36 VER. JAA)", + "ddribble", "Double Dribble", + "ddribblep", "Double Dribble (prototype?)", + "ddrj", "Dance Dance Revolution - Internet Ranking Ver (GC845 VER. JBA)", + "ddrja", "Dance Dance Revolution (GC845 VER. JAA)", + "ddrjb", "Dance Dance Revolution (GC845 VER. JAB)", + "ddrmax", "DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA)", + "ddrmax2", "DDR Max 2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA)", + "ddrs2k", "Dance Dance Revolution Solo 2000 (GC905 VER. AAA)", + "ddrs2kj", "Dance Dance Revolution Solo 2000 (GC905 VER. JAA)", + "ddrsbm", "Dance Dance Revolution Solo Bass Mix (GQ894 VER. JAA)", + "ddru", "Dance Dance Revolution (GN845 VER. UAA)", + "ddrusa", "Dance Dance Revolution USA (G*A44 VER. UAA)", + "ddsom", "Dungeons & Dragons: Shadow over Mystara (Euro 960619)", + "ddsoma", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", + "ddsomb", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", + "ddsomh", "Dungeons & Dragons: Shadow over Mystara (Hispanic 960223)", + "ddsomj", "Dungeons & Dragons: Shadow over Mystara (Japan 960619)", + "ddsomjr1", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", + "ddsomr1", "Dungeons & Dragons: Shadow over Mystara (Euro 960223)", + "ddsomr2", "Dungeons & Dragons: Shadow over Mystara (Euro 960209)", + "ddsomr3", "Dungeons & Dragons: Shadow over Mystara (Euro 960208)", + "ddsomu", "Dungeons & Dragons: Shadow over Mystara (USA 960619)", + "ddsomud", "Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg)", + "ddsomur1", "Dungeons & Dragons: Shadow over Mystara (USA 960209)", + "ddtod", "Dungeons & Dragons: Tower of Doom (Euro 940412)", + "ddtoda", "Dungeons & Dragons: Tower of Doom (Asia 940412)", + "ddtodar1", "Dungeons & Dragons: Tower of Doom (Asia 940113)", + "ddtodd", "Dungeons & Dragons: Tower of Doom (Euro 940412 Phoenix Edition) (bootleg)", + "ddtodh", "Dungeons & Dragons: Tower of Doom (Hispanic 940412)", + "ddtodhr1", "Dungeons & Dragons: Tower of Doom (Hispanic 940125)", + "ddtodhr2", "Dungeons & Dragons: Tower of Doom (Hispanic 940113)", + "ddtodj", "Dungeons & Dragons: Tower of Doom (Japan 940412)", + "ddtodjr1", "Dungeons & Dragons: Tower of Doom (Japan 940125)", + "ddtodjr2", "Dungeons & Dragons: Tower of Doom (Japan 940113)", + "ddtodr1", "Dungeons & Dragons: Tower of Doom (Euro 940113)", + "ddtodu", "Dungeons & Dragons: Tower of Doom (USA 940125)", + "ddtodur1", "Dungeons & Dragons: Tower of Doom (USA 940113)", + "ddungeon", "Dangerous Dungeons (set 1)", + "ddungeone", "Dangerous Dungeons (set 2)", + "ddux", "Dynamite Dux (set 3, World, FD1094 317-0096)", + "ddux1", "Dynamite Dux (set 1, 8751 317-0095)", + "dduxbl", "Dynamite Dux (Datsu bootleg)", + "dduxj", "Dynamite Dux (set 2, Japan, FD1094 317-0094)", + "ddz", "Dou Di Zhu", + "deadang", "Dead Angle", + "deadconx", "Dead Connection (World)", + "deadconxj", "Dead Connection (Japan)", + "deadeye", "Dead Eye", + "deadweap", "Deadly Weapon", + "dealer", "The Dealer", + "deathbrd", "Death Brade (Japan ver JM-3)", + "deathcox", "Death Crimson OX (JPN, USA, EXP, KOR, AUS)", + "deathrac", "Death Race [TTL]", + "deathsm2", "Deathsmiles II: Makai no Merry Christmas (2009/10/14 MASTER VER 4.00)", + "deathsml", "Deathsmiles (2007/10/09 MASTER VER)", + "decathlt", "Decathlete (JUET 960709 V1.001)", + "decathlto", "Decathlete (JUET 960424 V1.000)", + "decocass", "DECO Cassette System", + "deerhunt", "Deer Hunting USA V4.3", + "deerhunta", "Deer Hunting USA V4.2", + "deerhuntb", "Deer Hunting USA V4.0", + "deerhuntc", "Deer Hunting USA V3", + "deerhuntd", "Deer Hunting USA V2", + "deerhunte", "Deer Hunting USA V1", + "defcmnd", "Defense Command (Defender bootleg)", + "defence", "Defence Command (Defender bootleg)", + "defender", "Defender (Red label)", + "defenderb", "Defender (Blue label)", + "defenderg", "Defender (Green label)", + "defenderw", "Defender (White label)", + "defense", "Defense (System 16B, FD1089A 317-0028)", + "defndjeu", "Defender (bootleg)", + "deltrace", "Delta Race", + "deluxe5", "Deluxe 5 (ver. 0107, 07/01/2000, set 1)", + "deluxe5a", "Deluxe 5 (ver. 0107, 07/01/2000, set 2)", + "deluxe5b", "Deluxe 5 (ver. 0107, 07/01/2000, set 3)", + "demndrgn", "Demons & Dragons (prototype)", + "demoderb", "Demolition Derby", + "demoderbc", "Demolition Derby (cocktail)", + "demoderm", "Demolition Derby (MCR-3 Mono Board Version)", + "demofist", "Demolish Fist", + "demon", "Demon", + "demoneye", "Demoneye-X", + "demonwld", "Demon's World / Horror Story (set 1)", + "demonwld1", "Demon's World / Horror Story (set 2)", + "demonwld2", "Demon's World / Horror Story (set 3)", + "demonwld3", "Demon's World / Horror Story (set 4)", + "dendego", "Densha de GO! (Ver 2.2 J)", + "dendego2", "Densha de GO! 2 Kousoku-hen (Ver 2.5 J)", + "dendego23k", "Densha de GO! 2 Kousoku-hen 3000-bandai (Ver 2.20 J)", + "dendegox", "Densha de GO! EX (Ver 2.4 J)", + "denjinmk", "Denjin Makai", + "denseib", "Ghost Chaser Densei (SNES bootleg)", + "depthch", "Depthcharge", + "depthcho", "Depthcharge (older)", + "derbyo2k", "Derby Owners Club 2000 (Rev A)", + "derbyoc", "Derby Owners Club (JPN, USA, EXP, KOR, AUS) (Rev B)", + "derbyoc2", "Derby Owners Club II (JPN, USA, EXP, KOR, AUS) (Rev B)", + "derbyocw", "Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev D)", + "deroon", "Deroon DeroDero", + "desert", "Desert Tank", + "desertbr", "Desert Breaker (World, FD1094 317-0196)", + "desertbrj", "Desert Breaker (Japan, FD1094 317-0194)", + "desertdn", "Desert Dan", + "desertgu", "Desert Gun", + "desertwr", "Desert War / Wangan Sensou", + "destdrby", "Destruction Derby [TTL]", + "desterth", "Destination Earth (bootleg of Lunar Rescue)", + "destiny", "Destiny - The Fortuneteller (USA)", + "destroyr", "Destroyer (version O2)", + "destroyr1", "Destroyer (version O1)", + "destryer", "Destroyer (Cidelsa) (set 1)", + "destryera", "Destroyer (Cidelsa) (set 2)", + "detatwin", "Detana!! Twin Bee (Japan ver. J)", + "detest", "Data East Test Chip", + "deucesw2", "Deuces Wild 2 - American Heritage (Ver. 2.02F)", + "devilfsg", "Devil Fish (Galaxian hardware, bootleg?)", + "devilfsh", "Devil Fish", + "devilw", "Devil World", + "devstors", "Devastators (ver. Z)", + "devstors2", "Devastators (ver. X)", + "devstors3", "Devastators (ver. V)", + "devzone", "Devil Zone", + "devzone2", "Devil Zone (easier)", + "df_djpkr", "Double Joker Poker (45%-75% payout)", + "dfeveron", "Dangun Feveron (Japan, Ver. 98/09/17)", + "dfndr_l4", "Defender (L-4)", + "dfruit", "Fruit Dream (Japan)", + "dh_lx2", "Dirty Harry (LX-2)", + "dharma", "Dharma Doujou", + "dharmak", "Dharma Doujou (Korea)", + "diamond", "Diamond Run", + "diamondp", "Diamond Lady", + "diehard", "Die Hard Arcade (UET 960515 V1.000)", + "dietgo", "Diet Go Go (Euro v1.1 1992.09.26)", + "dietgoe", "Diet Go Go (Euro v1.1 1992.08.04)", + "dietgoj", "Diet Go Go (Japan v1.1 1992.09.26)", + "dietgou", "Diet Go Go (USA v1.1 1992.09.26)", + "digdug", "Dig Dug (rev 2)", + "digdug1", "Dig Dug (rev 1)", + "digdug2", "Dig Dug II (New Ver.)", + "digdug2o", "Dig Dug II (Old Ver.)", + "digdugat", "Dig Dug (Atari, rev 2)", + "digdugat1", "Dig Dug (Atari, rev 1)", + "digger", "Digger", + "diggerc", "Digger (CVS)", + "diggerma", "Digger Man (prototype)", + "digsid", "Dig Dug (manufactured by Sidam)", + "dimahoo", "Dimahoo (Euro 000121)", + "dimahoou", "Dimahoo (USA 000121)", + "dimahoud", "Dimahoo (USA 000121 Phoenix Edition) (bootleg)", + "diner_l1", "Diner (L-1) Europe", + "diner_l3", "Diner (L-3)", + "diner_l4", "Diner (L-4)", + "dingo", "Dingo", + "dingoe", "Dingo (encrypted)", + "dino", "Cadillacs and Dinosaurs (World 930201)", + "dinoeggs", "Dinosaur Eggs", + "dinohunt", "Dinosaur Hunter (Chinese bootleg of Cadillacs and Dinosaurs)", + "dinoj", "Cadillacs: Kyouryuu Shin Seiki (Japan 930201)", + "dinopic", "Cadillacs and Dinosaurs (bootleg with PIC16c57, set 1)", + "dinopic2", "Cadillacs and Dinosaurs (bootleg with PIC16c57, set 2)", + "dinorex", "Dino Rex (World)", + "dinorexj", "Dino Rex (Japan)", + "dinorexu", "Dino Rex (US)", + "dinou", "Cadillacs and Dinosaurs (USA 930201)", + "dirtdash", "Dirt Dash (Rev. DT2)", + "dirtdvls", "Dirt Devils (set 1) (Revision A)", + "dirtdvlsa", "Dirt Devils (set 2) (Revision A)", + "dirtfoxj", "Dirt Fox (Japan)", + "dirtypig", "Dirty Pigskin Football", + "disco", "Disco No.1", + "disco79", "Disco '79", + "disco_l1", "Disco Fever (L-1)", + "discoboy", "Disco Boy", + "discoboyp", "Disco Boy (Promat license?)", + "discof", "Disco No.1 (Rev.F)", + "ditrio", "Diamond Trio (set 1)", + "diverboy", "Diver Boy", + "djboy", "DJ Boy (set 1)", + "djboya", "DJ Boy (set 2)", + "djboyj", "DJ Boy (Japan)", + "dkgensan", "Daiku no Gensan (Japan, M82)", + "dkgensanm72", "Daiku no Gensan (Japan, M72)", + "dking", "Donkey King", + "dkingjr", "Donkey King Jr. (bootleg of Donkey Kong Jr.)", + "dkong", "Donkey Kong (US set 1)", + "dkong3", "Donkey Kong 3 (US)", + "dkong3b", "Donkey Kong 3 (bootleg on Donkey Kong Jr. hardware)", + "dkong3j", "Donkey Kong 3 (Japan)", + "dkongf", "Donkey Kong Foundry (hack)", + "dkonghrd", "Donkey Kong (hard kit)", + "dkongj", "Donkey Kong (Japan set 1)", + "dkongjnrj", "Donkey Kong Junior (Japan?)", + "dkongjo", "Donkey Kong (Japan set 2)", + "dkongjo1", "Donkey Kong (Japan set 3)", + "dkongjr", "Donkey Kong Junior (US set F-2)", + "dkongjrb", "Donkey Kong Jr. (bootleg)", + "dkongjre", "Donkey Kong Junior (E kit)", + "dkongjrj", "Donkey Kong Jr. (Japan)", + "dkongjrm", "Donkey Kong Jr. (bootleg on Moon Cresta hardware)", + "dkongjrpb", "Donkey Kong Junior (P kit, bootleg)", + "dkongo", "Donkey Kong (US set 2)", + "dkongx", "Donkey Kong II - Jumpman Returns (V1.2) (hack)", + "dkongx11", "Donkey Kong II - Jumpman Returns (V1.1) (hack)", + "dlair", "Dragon's Lair (US Rev. F2)", + "dlair2", "Dragon's Lair 2: Time Warp (US v3.19)", + "dlair2_211", "Dragon's Lair 2: Time Warp (US v2.11)", + "dlair2_300", "Dragon's Lair 2: Time Warp (US v3.00)", + "dlair2_312", "Dragon's Lair 2: Time Warp (US v3.12)", + "dlair2_314", "Dragon's Lair 2: Time Warp (US v3.14)", + "dlair2_315", "Dragon's Lair 2: Time Warp (US v3.15)", + "dlair2_315s", "Dragon's Lair 2: Time Warp (Spanish v3.15)", + "dlair2_316e", "Dragon's Lair 2: Time Warp (Euro v3.16)", + "dlair2_317e", "Dragon's Lair 2: Time Warp (Euro v3.17)", + "dlair2_318", "Dragon's Lair 2: Time Warp (US v3.18)", + "dlair2_319e", "Dragon's Lair 2: Time Warp (Euro v3.19)", + "dlair2_319s", "Dragon's Lair 2: Time Warp (Spanish v3.19)", + "dlaira", "Dragon's Lair (US Rev. A, Pioneer PR-7820)", + "dlairb", "Dragon's Lair (US Rev. B, Pioneer PR-7820)", + "dlairc", "Dragon's Lair (US Rev. C, Pioneer PR-7820)", + "dlaird", "Dragon's Lair (US Rev. D, Pioneer LD-V1000)", + "dlaire", "Dragon's Lair (US Rev. E)", + "dlairf", "Dragon's Lair (US Rev. F)", + "dland", "Dream Land / Super Dream Land (bootleg of Bubble Bobble)", + "dleague", "Dynamite League (US)", + "dleaguej", "Dynamite League (Japan)", + "dleuro", "Dragon's Lair (European)", + "dlital", "Dragon's Lair (Italian)", + "dm_h5", "Demolition Man (H-5)", + "dm_h6", "Demolition Man (H-6)", + "dm_la1", "Demolition Man (LA-1)", + "dm_lx3", "Demolition Man (LX-3)", + "dm_lx4", "Demolition Man (LX-4)", + "dm_pa2", "Demolition Man (PA-2)", + "dm_px5", "Demolition Man (PX-5)", + "dmdtouch", "Diamond Touch (0400433V, Local)", + "dmndrby", "Diamond Derby (Newer)", + "dmndrbya", "Diamond Derby (Original)", + "dmnfrnt", "Demon Front (68k label V105, ROM M105XX 08/05/02) (ARM label V105, ROM 08/05/02 S105XX)", + "dmnfrnta", "Demon Front (68k label V102, ROM M102XX 06/19/02) (ARM label V102, ROM 05/24/02 S101XX)", + "dmnfrntb", "Demon Front (68k label V103, ROM M103XX 07/05/02) (ARM label V103, ROM 07/05/02 S103XX)", + "dmnfrntpcb", "Demon Front (68k label V107KR, ROM M107KR 11/03/03) (ARM label V106KR, ROM 10/16/03 S106KR) (JAMMA PCB)", + "dmx", "Dance Maniax (G*874 VER. JAA)", + "dmx2m", "Dance Maniax 2nd Mix (G*A39 VER. JAA)", + "dmx2majp", "Dance Maniax 2nd Mix Append J-Paradise (G*A38 VER. JAA)", + "dncfrks", "Dance Freaks (G*874 VER. KAA)", + "dncsprt", "Dancing Spirit (Russia) (Atronic)", + "dnmtdeka", "Dynamite Deka (J 960515 V1.000)", + "doa", "Dead or Alive (Model 2B, Revision B)", + "doa2", "Dead or Alive 2 (JPN, USA, EXP, KOR, AUS)", + "doa2m", "Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS)", + "doaa", "Dead or Alive (Model 2A, Revision A)", + "doapp", "Dead Or Alive ++ (Japan)", + "docastle", "Mr. Do's Castle (set 1)", + "docastle2", "Mr. Do's Castle (set 2)", + "docastleo", "Mr. Do's Castle (older)", + "dockman", "Dock Man", + "dodgecty", "Dodge City (9131-02)", + "dodgectya", "Dodge City (2131-82, U5-0D)", + "dodgectyb", "Dodge City (2131-82, U5-50)", + "dodgectyc", "Dodge City (2131-82, U5-0 GT)", + "dodgem", "Dodgem", + "dogfgt", "Acrobatic Dog-Fight", + "dogfgtj", "Dog-Fight (Japan)", + "dogfgtu", "Acrobatic Dog-Fight (USA)", + "dogfight", "Dog Fight (Thunderbolt)", + "dogosokb", "Dogou Souken (Joystick hack bootleg)", + "dogosoke", "Dogou Souken", + "dogpatch", "Dog Patch", + "dogyuun", "Dogyuun", + "dogyuuna", "Dogyuun (older set)", + "dogyuunt", "Dogyuun (location test)", + "dokaben", "Dokaben (Japan)", + "dokidoki", "Doki Doki Penguin Land", + "dokyusei", "Mahjong Doukyuusei", + "dokyusp", "Mahjong Doukyuusei Special", + "dollyptn", "Dolly Parton", + "dolmen", "Dolmen", + "dolphin", "Dolphin Blue", + "dolphinp", "Dolphin's Pearl (set 1)", + "dolphntr", "Dolphin Treasure (0200424V, NSW/ACT)", + "dolphtra", "Dolphin Treasure (0100424V, NSW/ACT)", + "domino", "Domino Man", + "domino2", "Domino II (Bingo)", + "dominob", "Domino Block", + "dominobv2", "Domino Block ver.2", + "dominos", "Dominos", + "dommy", "Dommy", + "doncdoon", "Hanabi de Doon! - Don-chan Puzzle", + "dondenmj", "Don Den Mahjong [BET] (Japan)", + "dondokod", "Don Doko Don (World)", + "dondokodj", "Don Doko Don (Japan)", + "dondokodu", "Don Doko Don (US)", + "donghaer", "Donggul Donggul Haerong", + "donpachi", "DonPachi (US)", + "donpachihk", "DonPachi (Hong Kong)", + "donpachij", "DonPachi (Japan)", + "donpachikr", "DonPachi (Korea)", + "dorachan", "Dorachan", + "doraemon", "Doraemon no Eawase Montage (prototype)", + "dorodon", "Dorodon (set 1)", + "dorodon2", "Dorodon (set 2)", + "dorunrun", "Do! Run Run (set 1)", + "dorunrun2", "Do! Run Run (set 2)", + "dorunrunc", "Do! Run Run (Do's Castle hardware, set 1)", + "dorunrunca", "Do! Run Run (Do's Castle hardware, set 2)", + "dotrikun", "Dottori Kun (new version)", + "dotrikun2", "Dottori Kun (old version)", + "dotron", "Discs of Tron (Upright)", + "dotrona", "Discs of Tron (Upright alternate)", + "dotrone", "Discs of Tron (Environmental)", + "doubledr", "Double Dragon (Neo-Geo)", + "douni", "Mr. Do vs. Unicorns", + "dowild", "Mr. Do's Wild Ride", + "downhill", "Downhill Bikers (DH3 Ver. A)", + "downtown", "DownTown / Mokugeki (set 1)", + "downtown2", "DownTown / Mokugeki (set 2)", + "downtownj", "DownTown / Mokugeki (joystick hack)", + "downtownp", "DownTown / Mokugeki (prototype)", + "dphl", "Draw Poker HI-LO (M.Kramer)", + "dphla", "Draw Poker HI-LO (Alt)", + "dphljp", "Draw Poker HI-LO (Japanese)", + "dphlunka", "Draw Poker HI-LO (unknown, rev 1)", + "dphlunkb", "Draw Poker HI-LO (unknown, rev 2)", + "dplay", "Double Play", + "dpoker", "Draw Poker (Bally, 03-20)", + "dquizgo", "Date Quiz Go Go (Korea)", + "dquizgo2", "Date Quiz Go Go Episode 2", + "drac_l1", "Bram Stoker's Dracula (L-1)", + "drac_p11", "Bram Stoker's Dracula (P-11)", + "draco", "Draco", + "dracula", "Dracula", + "dragchrn", "Dragon Chronicles (DC001 Ver. A)", + "dragfist", "Dragonfist", + "dragnblz", "Dragon Blaze", + "dragnfly", "Dragonfly (Konami Endeavour)", + "dragngun", "Dragon Gun (US)", + "dragngunj", "Dragon Gun (Japan)", + "dragon", "Dragon", + "dragoona", "Dragoon Might (ver AAB)", + "dragoonj", "Dragoon Might (ver JAA)", + "dragrace", "Drag Race", + "dragsphr", "Dragon Sphere", + "drakor", "Drakor", + "drakton", "Drakton (DK conversion)", + "drbyocwc", "Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev C)", + "dreambal", "Dream Ball (Japan V2.4)", + "dreamwld", "Dream World", + "dremshpr", "Dream Shopper", + "drgnbowl", "Dragon Bowl", + "drgnbstr", "Dragon Buster", + "drgninja", "Dragonninja (Japan)", + "drgninjab", "Dragonninja (bootleg)", + "drgnmst", "Dragon Master", + "drgnunit", "Dragon Unit / Castle of Dragon", + "drgnwrld", "Dragon World (World, V040O)", + "drgnwrldv10c", "Zhong Guo Long (China, V010C)", + "drgnwrldv11h", "Dong Fang Zhi Zhu (Hong Kong, V011H)", + "drgnwrldv20j", "Zhong Guo Long (Japan, V020J)", + "drgnwrldv21", "Dragon World (World, V021O)", + "drgnwrldv21j", "Zhong Guo Long (Japan, V021J)", + "drgnwrldv30", "Dragon World (World, V030O)", + "drgpunch", "Dragon Punch (Japan)", + "drgw2", "Dragon World II (ver. 110X, Export)", + "drgw2c", "Zhong Guo Long II (ver. 100C, China)", + "drgw2j", "Chuugokuryuu II (ver. 100J, Japan)", + "drgw3", "Dragon World 3 (ver. 106)", + "drgw3100", "Dragon World 3 (Japan, ver. 100)", + "drgw3105", "Dragon World 3 (ver. 105)", + "drhl", "Drews Revenge (v.2.89, set 1)", + "drhla", "Drews Revenge (v.2.89, set 2)", + "dribling", "Dribbling", + "driblingbr", "Dribbling (bootleg, Brazil)", + "driblingo", "Dribbling (Olympia)", + "drifto94", "Drift Out '94 - The Hard Order (Japan)", + "driftout", "Drift Out (Europe)", + "driftoutj", "Drift Out (Japan)", + "drivedge", "Driver's Edge", + "driveout", "Drive Out (bootleg)", + "driveyes", "Driver's Eyes (Japan)", + "drivfrcb", "Driving Force (Galaxian conversion bootleg)", + "drivfrcg", "Driving Force (Galaxian conversion)", + "drivfrcp", "Driving Force (Pac-Man conversion)", + "drivfrct", "Top Racer (bootleg of Driving Force)", + "drktnjr", "Drakton (DKJr conversion)", + "drmario", "Vs. Dr. Mario", + "drmicro", "Dr. Micro", + "drmmake", "Dream Maker (Russia) (Atronic)", + "drmn", "DrumMania (GQ881 VER. JAD)", + "drmn10m", "DrumMania 10th Mix (G*D40 VER. JAA)", + "drmn2m", "DrumMania 2nd Mix (GE912 VER. JAB)", + "drmn2mpu", "DrumMania 2nd Mix Session Power Up Kit (GE912 VER. JAB)", + "drmn3m", "DrumMania 3rd Mix (G*A23 VER. JAA)", + "drmn4m", "DrumMania 4th Mix (G*A25 VER. JAA)", + "drmn5m", "DrumMania 5th Mix (G*B05 VER. JAA)", + "drmn6m", "DrumMania 6th Mix (G*B16 VER. JAA)", + "drmn7m", "DrumMania 7th Mix power-up ver. (G*C07 VER. JBA)", + "drmn7ma", "DrumMania 7th Mix (G*C07 VER. JAA)", + "drmn8m", "DrumMania 8th Mix (G*C07 VER. JAA)", + "drmn9m", "DrumMania 9th Mix (G*D09 VER. JAA)", + "drtomy", "Dr. Tomy", + "drtoppel", "Dr. Toppel's Adventure (World)", + "drtoppelj", "Dr. Toppel's Tankentai (Japan)", + "drtoppelu", "Dr. Toppel's Adventure (US)", + "drw80pk2", "Draw 80 Poker - Minn", + "drw80pkr", "Draw 80 Poker", + "dsaber", "Dragon Saber", + "dsaberj", "Dragon Saber (Japan, Rev B)", + "dsem", "Dancing Stage Euro Mix (G*936 VER. EAA)", + "dsem2", "Dancing Stage Euro Mix 2 (G*C23 VER. EAA)", + "dsfdct", "Dancing Stage featuring Dreams Come True (GC910 VER. JCA)", + "dsfdcta", "Dancing Stage featuring Dreams Come True (GC910 VER. JAA)", + "dsfdr", "Dancing Stage Featuring Disney's Rave (GCA37JAA)", + "dsftkd", "Dancing Stage featuring TRUE KiSS DESTiNATiON (G*884 VER. JAA)", + "dslayrr", "Dragon Slayer (Russia, set 1)", + "dslayrra", "Dragon Slayer (Russia, set 2)", + "dsmbl", "Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER)", + "dsoccr94", "Dream Soccer '94 (World, M107 hardware)", + "dsoccr94j", "Dream Soccer '94 (Japan, M92 hardware)", + "dspirit", "Dragon Spirit (new version (DS3))", + "dspirit1", "Dragon Spirit (old version (DS1))", + "dspirit2", "Dragon Spirit (DS2)", + "dstage", "Dancing Stage - Internet Ranking Ver (GC845 VER. EBA)", + "dstagea", "Dancing Stage (GN845 VER. EAA)", + "dstlk", "Darkstalkers: The Night Warriors (Euro 940705)", + "dstlka", "Darkstalkers: The Night Warriors (Asia 940705)", + "dstlkh", "Darkstalkers: The Night Warriors (Hispanic 940818)", + "dstlku", "Darkstalkers: The Night Warriors (USA 940818)", + "dstlku1d", "Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg)", + "dstlkur1", "Darkstalkers: The Night Warriors (USA 940705)", + "dtfamily", "Diet Family", + "dtoyoken", "Mahjong Dai Touyouken (Japan)", + "dtrvwz5", "Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5)", + "dualaslt", "Dual Assault", + "dualgame", "Dual Games (prototype)", + "duckhunt", "Vs. Duck Hunt (set DH3 E)", + "dumpmtmt", "Dump Matsumoto (Japan, 8751 317-0011a)", + "dungdrag", "Dungeons & Dragons", + "dungeonm", "Dungeon Magic (Ver 2.1O 1994/02/18)", + "dungeonmu", "Dungeon Magic (Ver 2.1A 1994/02/18)", + "dunhuang", "Mahjong Dunhuang", + "dunkmnia", "Dunk Mania (Asia, DM2/VER.C)", + "dunkmniajc", "Dunk Mania (Japan, DM1/VER.C)", + "dunkshot", "Dunk Shot (FD1089A 317-0022)", + "dvisland", "Devil Island (Version 1.4R CGA)", + "dvislando", "Devil Island (Version 1.0R CGA)", + "dvlrider", "Devil Riders", + "dvlriderg", "Devil Riders (German speech)", + "dvlrideri", "Devil Riders (Italian speech)", + "dvlsdre", "Devil's Dare", + "dvlsdre2", "Devil's Dare (Sound Only)", + "dw2001", "Dragon World 2001 (V100?, Japan)", + "dw2v100x", "Dragon World II (ver. 100X, Export)", + "dw_l1", "Doctor Who (L-1)", + "dw_l2", "Doctor Who (L-2)", + "dw_p5", "Doctor Who (P-5)", + "dwarfd", "Draw Poker III / Dwarfs Den (Dwarf Gfx)", + "dwarfda", "Draw Poker III / Dwarfs Den (Card Gfx)", + "dwex", "Dragon World 3 EX (ver. 100)", + "dwpc", "Dragon World Pretty Chance (V101, Japan)", + "dybb99", "Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS) (Rev B)", + "dybbnao", "Dynamite Baseball NAOMI (JPN)", + "dyger", "Dyger (Korea set 1)", + "dygera", "Dyger (Korea set 2)", + "dygolf", "Dynamic Golf / Virtua Golf (Rev A) (GDS-0009A)", + "dynabb", "Dynamite Baseball", + "dynabb97", "Dynamite Baseball 97 (Revision A)", + "dynablst", "Dynablaster / Bomber Man", + "dynablstb", "Dynablaster / Bomber Man (bootleg)", + "dynablstb2", "Dynablaster / Bomber Man (bootleg, alt)", + "dynabomb", "Dynamite Bomber (Korea, Rev 1.5)", + "dynadice", "Dynamic Dice", + "dynagear", "Dyna Gear", + "dynamcop", "Dynamite Cop (Export, Model 2A)", + "dynamcopb", "Dynamite Cop (Export, Model 2B)", + "dynamcopc", "Dynamite Cop (USA, Model 2C)", + "dynamski", "Dynamic Ski", + "dynashot", "Dynamic Shoot Kyousou", + "dyndeka2", "Dynamite Deka 2 (Japan, Model 2A)", + "dyndeka2b", "Dynamite Deka 2 (Japan, Model 2B)", + "dynduke", "Dynamite Duke (Europe set 1)", + "dyndukea", "Dynamite Duke (Europe set 2)", + "dyndukej", "Dynamite Duke (Japan)", + "dyndukeu", "Dynamite Duke (US)", + "dynobop", "Dyno Bop", + "dynwar", "Dynasty Wars (USA, B-Board 89624B-?)", + "dynwara", "Dynasty Wars (USA, B-Board 88622B-3)", + "dynwarj", "Tenchi wo Kurau (Japan)", + "dynwarjr", "Tenchi wo Kurau (Japan Resale Ver.)", + "dzigzag", "Zig Zag (Dig Dug hardware)", + "eagle", "Eagle (set 1)", + "eagle2", "Eagle (set 2)", + "eagle3", "Eagle (set 3)", + "eaglshot", "Eagle Shot Golf", + "earthjkr", "U.N. Defense Force: Earth Joker (Japan)", + "earthjkrp", "U.N. Defense Force: Earth Joker (Japan, prototype?)", + "eatpm_4g", "Elvira and the Party Monsters (LG-4)", + "eatpm_4u", "Elvira and the Party Monsters (LU-4)", + "eatpm_l1", "Elvira and the Party Monsters (LA-1)", + "eatpm_l2", "Elvira and the Party Monsters (LA-2)", + "eatpm_l4", "Elvira and the Party Monsters (LA-4)", + "eatpm_p7", "Elvira and the Party Monsters (PA-7)", + "eballchp", "Eight Ball Champ", + "eballd14", "Eight Ball Deluxe (rev. 14)", + "eballdlx", "Eight Ball Deluxe (rev. 15)", + "eballdlxp1", "Eight Ball Deluxe (prototype rev. 1)", + "eballdlxp2", "Eight Ball Deluxe (prototype rev. 2)", + "eballdlxp3", "Eight Ball Deluxe (prototype rev. 3)", + "eballdlxp4", "Eight Ball Deluxe (prototype rev. 4)", + "ebases", "Extra Bases", + "ec_bar5", "Bar 5 (older PCB) (Electrocoin)", + "ec_bar7", "Bar 7 (Concept Games Ltd) (?)", + "ec_barx", "Bar X (Electrocoin) (set 1)", + "ec_barx__0", "Bar X (Electrocoin) (set 28)", + "ec_barx__1", "Bar X (Electrocoin) (set 29)", + "ec_barx__2", "Bar X (Electrocoin) (set 30)", + "ec_barx__3", "Bar X (Electrocoin) (set 31)", + "ec_barx__4", "Bar X (Electrocoin) (set 32)", + "ec_barx__5", "Bar X (Electrocoin) (set 33)", + "ec_barx__6", "Bar X (Electrocoin) (set 34)", + "ec_barx__7", "Bar X (Electrocoin) (set 35)", + "ec_barx__8", "Bar X (Electrocoin) (set 36)", + "ec_barx__9", "Bar X (Electrocoin) (set 37)", + "ec_barx__a", "Bar X (Electrocoin) (set 2)", + "ec_barx__a0", "Bar X (Electrocoin) (set 64)", + "ec_barx__a1", "Bar X (Electrocoin) (set 65)", + "ec_barx__a2", "Bar X (Electrocoin) (set 66)", + "ec_barx__a3", "Bar X (Electrocoin) (set 67)", + "ec_barx__a4", "Bar X (Electrocoin) (set 68)", + "ec_barx__a5", "Bar X (Electrocoin) (set 69)", + "ec_barx__a6", "Bar X (Electrocoin) (set 70)", + "ec_barx__a7", "Bar X (Electrocoin) (set 71)", + "ec_barx__a8", "Bar X (Electrocoin) (set 72)", + "ec_barx__a9", "Bar X (Electrocoin) (set 73)", + "ec_barx__aa", "Bar X (Electrocoin) (set 38)", + "ec_barx__ab", "Bar X (Electrocoin) (set 39)", + "ec_barx__ac", "Bar X (Electrocoin) (set 40)", + "ec_barx__ad", "Bar X (Electrocoin) (set 41)", + "ec_barx__ae", "Bar X (Electrocoin) (set 42)", + "ec_barx__af", "Bar X (Electrocoin) (set 43)", + "ec_barx__ag", "Bar X (Electrocoin) (set 44)", + "ec_barx__ah", "Bar X (Electrocoin) (set 45)", + "ec_barx__ai", "Bar X (Electrocoin) (set 46)", + "ec_barx__aj", "Bar X (Electrocoin) (set 47)", + "ec_barx__ak", "Bar X (Electrocoin) (set 48)", + "ec_barx__al", "Bar X (Electrocoin) (set 49)", + "ec_barx__am", "Bar X (Electrocoin) (set 50)", + "ec_barx__an", "Bar X (Electrocoin) (set 51)", + "ec_barx__ao", "Bar X (Electrocoin) (set 52)", + "ec_barx__ap", "Bar X (Electrocoin) (set 53)", + "ec_barx__aq", "Bar X (Electrocoin) (set 54)", + "ec_barx__ar", "Bar X (Electrocoin) (set 55)", + "ec_barx__as", "Bar X (Electrocoin) (set 56)", + "ec_barx__at", "Bar X (Electrocoin) (set 57)", + "ec_barx__au", "Bar X (Electrocoin) (set 58)", + "ec_barx__av", "Bar X (Electrocoin) (set 59)", + "ec_barx__aw", "Bar X (Electrocoin) (set 60)", + "ec_barx__ax", "Bar X (Electrocoin) (set 61)", + "ec_barx__ay", "Bar X (Electrocoin) (set 62)", + "ec_barx__az", "Bar X (Electrocoin) (set 63)", + "ec_barx__b", "Bar X (Electrocoin) (set 3)", + "ec_barx__ba", "Bar X (Electrocoin) (set 74)", + "ec_barx__bb", "Bar X (Electrocoin) (set 75)", + "ec_barx__bc", "Bar X (Electrocoin) (set 76)", + "ec_barx__bd", "Bar X (Electrocoin) (set 77)", + "ec_barx__be", "Bar X (Electrocoin) (set 78)", + "ec_barx__bf", "Bar X (Electrocoin) (set 79)", + "ec_barx__bg", "Bar X (Electrocoin) (set 80)", + "ec_barx__bh", "Bar X (Electrocoin) (set 81)", + "ec_barx__bi", "Bar X (Electrocoin) (set 82)", + "ec_barx__bj", "Bar X (Electrocoin) (set 83)", + "ec_barx__bk", "Bar X (Electrocoin) (set 84)", + "ec_barx__bl", "Bar X (Electrocoin) (set 85)", + "ec_barx__bm", "Bar X (Electrocoin) (set 86)", + "ec_barx__bn", "Bar X (Electrocoin) (set 87)", + "ec_barx__bo", "Bar X (Electrocoin) (set 88)", + "ec_barx__bp", "Bar X (Electrocoin) (set 89)", + "ec_barx__bq", "Bar X (Electrocoin) (set 90)", + "ec_barx__br", "Bar X (Electrocoin) (set 91)", + "ec_barx__bs", "Bar X (Electrocoin) (set 92)", + "ec_barx__bt", "Bar X (Electrocoin) (set 93)", + "ec_barx__bu", "Bar X (Electrocoin) (set 94)", + "ec_barx__c", "Bar X (Electrocoin) (set 4)", + "ec_barx__d", "Bar X (Electrocoin) (set 5)", + "ec_barx__e", "Bar X (Electrocoin) (set 6)", + "ec_barx__f", "Bar X (Electrocoin) (set 7)", + "ec_barx__g", "Bar X (Electrocoin) (set 8)", + "ec_barx__h", "Bar X (Electrocoin) (set 9)", + "ec_barx__i", "Bar X (Electrocoin) (set 10)", + "ec_barx__j", "Bar X (Electrocoin) (set 11)", + "ec_barx__k", "Bar X (Electrocoin) (set 12)", + "ec_barx__l", "Bar X (Electrocoin) (set 13)", + "ec_barx__m", "Bar X (Electrocoin) (set 14)", + "ec_barx__n", "Bar X (Electrocoin) (set 15)", + "ec_barx__o", "Bar X (Electrocoin) (set 16)", + "ec_barx__p", "Bar X (Electrocoin) (set 17)", + "ec_barx__q", "Bar X (Electrocoin) (set 18)", + "ec_barx__r", "Bar X (Electrocoin) (set 19)", + "ec_barx__s", "Bar X (Electrocoin) (set 20)", + "ec_barx__t", "Bar X (Electrocoin) (set 21)", + "ec_barx__u", "Bar X (Electrocoin) (set 22)", + "ec_barx__v", "Bar X (Electrocoin) (set 23)", + "ec_barx__w", "Bar X (Electrocoin) (set 24)", + "ec_barx__x", "Bar X (Electrocoin) (set 25)", + "ec_barx__y", "Bar X (Electrocoin) (set 26)", + "ec_barx__z", "Bar X (Electrocoin) (set 27)", + "ec_barxmab", "Bar X (MAB PCB) (Electrocoin)", + "ec_barxo", "Bar X (older PCB) (Electrocoin) (set 1)", + "ec_barxoa", "Bar X (older PCB) (Electrocoin) (set 2)", + "ec_barxob", "Bar X (older PCB) (Electrocoin) (set 3)", + "ec_barxoc", "Bar X (older PCB) (Electrocoin) (set 4)", + "ec_barxod", "Bar X (older PCB) (Electrocoin) (set 5)", + "ec_barxoe", "Bar X (older PCB) (Electrocoin) (set 6)", + "ec_big7", "Big 7 / Super Big 7 (Electrocoin) (set 1)", + "ec_big7__0", "Big 7 / Super Big 7 (Electrocoin) (set 28)", + "ec_big7__1", "Big 7 / Super Big 7 (Electrocoin) (set 29)", + "ec_big7__2", "Big 7 / Super Big 7 (Electrocoin) (set 30)", + "ec_big7__3", "Big 7 / Super Big 7 (Electrocoin) (set 31)", + "ec_big7__4", "Big 7 / Super Big 7 (Electrocoin) (set 32)", + "ec_big7__5", "Big 7 / Super Big 7 (Electrocoin) (set 33)", + "ec_big7__6", "Big 7 / Super Big 7 (Electrocoin) (set 34)", + "ec_big7__7", "Big 7 / Super Big 7 (Electrocoin) (set 35)", + "ec_big7__8", "Big 7 / Super Big 7 (Electrocoin) (set 36)", + "ec_big7__9", "Big 7 / Super Big 7 (Electrocoin) (set 37)", + "ec_big7__a", "Big 7 / Super Big 7 (Electrocoin) (set 2)", + "ec_big7__a0", "Big 7 / Super Big 7 (Electrocoin) (set 64)", + "ec_big7__a1", "Big 7 / Super Big 7 (Electrocoin) (set 65)", + "ec_big7__a2", "Big 7 / Super Big 7 (Electrocoin) (set 66)", + "ec_big7__aa", "Big 7 / Super Big 7 (Electrocoin) (set 38)", + "ec_big7__ab", "Big 7 / Super Big 7 (Electrocoin) (set 39)", + "ec_big7__ac", "Big 7 / Super Big 7 (Electrocoin) (set 40)", + "ec_big7__ad", "Big 7 / Super Big 7 (Electrocoin) (set 41)", + "ec_big7__ae", "Big 7 / Super Big 7 (Electrocoin) (set 42)", + "ec_big7__af", "Big 7 / Super Big 7 (Electrocoin) (set 43)", + "ec_big7__ag", "Big 7 / Super Big 7 (Electrocoin) (set 44)", + "ec_big7__ah", "Big 7 / Super Big 7 (Electrocoin) (set 45)", + "ec_big7__ai", "Big 7 / Super Big 7 (Electrocoin) (set 46)", + "ec_big7__aj", "Big 7 / Super Big 7 (Electrocoin) (set 47)", + "ec_big7__ak", "Big 7 / Super Big 7 (Electrocoin) (set 48)", + "ec_big7__al", "Big 7 / Super Big 7 (Electrocoin) (set 49)", + "ec_big7__am", "Big 7 / Super Big 7 (Electrocoin) (set 50)", + "ec_big7__an", "Big 7 / Super Big 7 (Electrocoin) (set 51)", + "ec_big7__ao", "Big 7 / Super Big 7 (Electrocoin) (set 52)", + "ec_big7__ap", "Big 7 / Super Big 7 (Electrocoin) (set 53)", + "ec_big7__aq", "Big 7 / Super Big 7 (Electrocoin) (set 54)", + "ec_big7__ar", "Big 7 / Super Big 7 (Electrocoin) (set 55)", + "ec_big7__as", "Big 7 / Super Big 7 (Electrocoin) (set 56)", + "ec_big7__at", "Big 7 / Super Big 7 (Electrocoin) (set 57)", + "ec_big7__au", "Big 7 / Super Big 7 (Electrocoin) (set 58)", + "ec_big7__av", "Big 7 / Super Big 7 (Electrocoin) (set 59)", + "ec_big7__aw", "Big 7 / Super Big 7 (Electrocoin) (set 60)", + "ec_big7__ax", "Big 7 / Super Big 7 (Electrocoin) (set 61)", + "ec_big7__ay", "Big 7 / Super Big 7 (Electrocoin) (set 62)", + "ec_big7__az", "Big 7 / Super Big 7 (Electrocoin) (set 63)", + "ec_big7__b", "Big 7 / Super Big 7 (Electrocoin) (set 3)", + "ec_big7__c", "Big 7 / Super Big 7 (Electrocoin) (set 4)", + "ec_big7__d", "Big 7 / Super Big 7 (Electrocoin) (set 5)", + "ec_big7__e", "Big 7 / Super Big 7 (Electrocoin) (set 6)", + "ec_big7__f", "Big 7 / Super Big 7 (Electrocoin) (set 7)", + "ec_big7__g", "Big 7 / Super Big 7 (Electrocoin) (set 8)", + "ec_big7__h", "Big 7 / Super Big 7 (Electrocoin) (set 9)", + "ec_big7__i", "Big 7 / Super Big 7 (Electrocoin) (set 10)", + "ec_big7__j", "Big 7 / Super Big 7 (Electrocoin) (set 11)", + "ec_big7__k", "Big 7 / Super Big 7 (Electrocoin) (set 12)", + "ec_big7__l", "Big 7 / Super Big 7 (Electrocoin) (set 13)", + "ec_big7__m", "Big 7 / Super Big 7 (Electrocoin) (set 14)", + "ec_big7__n", "Big 7 / Super Big 7 (Electrocoin) (set 15)", + "ec_big7__o", "Big 7 / Super Big 7 (Electrocoin) (set 16)", + "ec_big7__p", "Big 7 / Super Big 7 (Electrocoin) (set 17)", + "ec_big7__q", "Big 7 / Super Big 7 (Electrocoin) (set 18)", + "ec_big7__r", "Big 7 / Super Big 7 (Electrocoin) (set 19)", + "ec_big7__s", "Big 7 / Super Big 7 (Electrocoin) (set 20)", + "ec_big7__t", "Big 7 / Super Big 7 (Electrocoin) (set 21)", + "ec_big7__u", "Big 7 / Super Big 7 (Electrocoin) (set 22)", + "ec_big7__v", "Big 7 / Super Big 7 (Electrocoin) (set 23)", + "ec_big7__w", "Big 7 / Super Big 7 (Electrocoin) (set 24)", + "ec_big7__x", "Big 7 / Super Big 7 (Electrocoin) (set 25)", + "ec_big7__y", "Big 7 / Super Big 7 (Electrocoin) (set 26)", + "ec_big7__z", "Big 7 / Super Big 7 (Electrocoin) (set 27)", + "ec_bx125", "Bar X 125 (Electrocoin) (set 1)", + "ec_bx125a", "Bar X 125 (Electrocoin) (set 2)", + "ec_bx180", "Bar X (Z180 hardware) (Electrocoin) (set 1)", + "ec_bx180a", "Bar X (Z180 hardware) (Electrocoin) (set 2)", + "ec_bxd7s", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 1)", + "ec_bxd7s__a", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 2)", + "ec_bxd7s__b", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 3)", + "ec_bxd7s__c", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 4)", + "ec_bxd7s__d", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 5)", + "ec_casbx", "Casino Bar X (Electrocoin) (set 1)", + "ec_casbx__a", "Casino Bar X (Electrocoin) (set 2)", + "ec_casbx__b", "Casino Bar X (Electrocoin) (set 3)", + "ec_casbxcon", "Casino Bar X (Concept Games Ltd) (?)", + "ec_casbxo", "Casino Bar X (older PCB) (Electrocoin) (set 1)", + "ec_casbxoa", "Casino Bar X (older PCB) (Electrocoin) (set 2)", + "ec_casmb", "Casino Multi Bar (Concept Games Ltd) (?)", + "ec_fltr", "Flutter (Concept Games Ltd) (?)", + "ec_gold7", "Golden 7 (Concept Games Ltd) (?)", + "ec_jackb", "Jackpot Bars (MAB PCB?) (Concept Games Ltd) (?)", + "ec_laby", "Labyrinth (v8) (Electrocoin)", + "ec_labya", "Labyrinth (v10) (Electrocoin)", + "ec_mag7s", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 1)", + "ec_mag7s__0", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 28)", + "ec_mag7s__1", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 29)", + "ec_mag7s__2", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 30)", + "ec_mag7s__3", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 31)", + "ec_mag7s__4", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 32)", + "ec_mag7s__5", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 33)", + "ec_mag7s__6", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 34)", + "ec_mag7s__7", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 35)", + "ec_mag7s__8", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 36)", + "ec_mag7s__9", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 37)", + "ec_mag7s__a", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 2)", + "ec_mag7s__a0", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 64)", + "ec_mag7s__aa", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 38)", + "ec_mag7s__ab", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 39)", + "ec_mag7s__ac", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 40)", + "ec_mag7s__ad", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 41)", + "ec_mag7s__ae", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 42)", + "ec_mag7s__af", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 43)", + "ec_mag7s__ag", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 44)", + "ec_mag7s__ah", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 45)", + "ec_mag7s__ai", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 46)", + "ec_mag7s__aj", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 47)", + "ec_mag7s__ak", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 48)", + "ec_mag7s__al", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 49)", + "ec_mag7s__am", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 50)", + "ec_mag7s__an", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 51)", + "ec_mag7s__ao", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 52)", + "ec_mag7s__ap", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 53)", + "ec_mag7s__aq", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 54)", + "ec_mag7s__ar", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 55)", + "ec_mag7s__as", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 56)", + "ec_mag7s__at", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 57)", + "ec_mag7s__au", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 58)", + "ec_mag7s__av", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 59)", + "ec_mag7s__aw", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 60)", + "ec_mag7s__ax", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 61)", + "ec_mag7s__ay", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 62)", + "ec_mag7s__az", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 63)", + "ec_mag7s__b", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 3)", + "ec_mag7s__c", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 4)", + "ec_mag7s__d", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 5)", + "ec_mag7s__e", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 6)", + "ec_mag7s__f", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 7)", + "ec_mag7s__g", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 8)", + "ec_mag7s__h", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 9)", + "ec_mag7s__i", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 10)", + "ec_mag7s__j", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 11)", + "ec_mag7s__k", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 12)", + "ec_mag7s__l", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 13)", + "ec_mag7s__m", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 14)", + "ec_mag7s__n", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 15)", + "ec_mag7s__o", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 16)", + "ec_mag7s__p", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 17)", + "ec_mag7s__q", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 18)", + "ec_mag7s__r", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 19)", + "ec_mag7s__s", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 20)", + "ec_mag7s__t", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 21)", + "ec_mag7s__u", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 22)", + "ec_mag7s__v", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 23)", + "ec_mag7s__w", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 24)", + "ec_mag7s__x", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 25)", + "ec_mag7s__y", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 26)", + "ec_mag7s__z", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 27)", + "ec_mgbel", "Megabell (Concept Games Ltd) (?)", + "ec_multb", "Multi Bar (Concept Games Ltd) (?)", + "ec_ndgxs", "Nudge Xcess (MAB PCB?) (Concept Games Ltd) (?)", + "ec_oxocg", "Oxo Classic Gold (Electrocoin) (?)", + "ec_oxocl", "Oxo Club (Electrocoin) (?)", + "ec_oxogb", "Oxo Golden Bars (Electrocoin) (?)", + "ec_oxorl", "Oxo Reels (Electrocoin) (?)", + "ec_oxorv", "Oxo Revolution (Electrocoin) (?)", + "ec_penni", "Pennies From Heaven (v1) (Electrocoin)", + "ec_pennia", "Pennies From Heaven (v6) (Electrocoin)", + "ec_pyram", "Pyramid (v1) (Electrocoin)", + "ec_pyrama", "Pyramid (v6) (Electrocoin)", + "ec_rcc", "Royal Casino Club (Electrocoin) (?)", + "ec_rdht7", "Red Hot 7 (MAB PCB?) (Concept Games Ltd) (?)", + "ec_redbr", "Red Bar (Electrocoin) (set 1)", + "ec_redbr__0", "Red Bar (Electrocoin) (set 28)", + "ec_redbr__1", "Red Bar (Electrocoin) (set 29)", + "ec_redbr__2", "Red Bar (Electrocoin) (set 30)", + "ec_redbr__3", "Red Bar (Electrocoin) (set 31)", + "ec_redbr__4", "Red Bar (Electrocoin) (set 32)", + "ec_redbr__5", "Red Bar (Electrocoin) (set 33)", + "ec_redbr__6", "Red Bar (Electrocoin) (set 34)", + "ec_redbr__7", "Red Bar (Electrocoin) (set 35)", + "ec_redbr__8", "Red Bar (Electrocoin) (set 36)", + "ec_redbr__9", "Red Bar (Electrocoin) (set 37)", + "ec_redbr__a", "Red Bar (Electrocoin) (set 2)", + "ec_redbr__a0", "Red Bar (Electrocoin) (set 64)", + "ec_redbr__a1", "Red Bar (Electrocoin) (set 65)", + "ec_redbr__a2", "Red Bar (Electrocoin) (set 66)", + "ec_redbr__a3", "Red Bar (Electrocoin) (set 67)", + "ec_redbr__a4", "Red Bar (Electrocoin) (set 68)", + "ec_redbr__a5", "Red Bar (Electrocoin) (set 69)", + "ec_redbr__a6", "Red Bar (Electrocoin) (set 70)", + "ec_redbr__a7", "Red Bar (Electrocoin) (set 71)", + "ec_redbr__a8", "Red Bar (Electrocoin) (set 72)", + "ec_redbr__a9", "Red Bar (Electrocoin) (set 73)", + "ec_redbr__aa", "Red Bar (Electrocoin) (set 38)", + "ec_redbr__ab", "Red Bar (Electrocoin) (set 39)", + "ec_redbr__ac", "Red Bar (Electrocoin) (set 40)", + "ec_redbr__ad", "Red Bar (Electrocoin) (set 41)", + "ec_redbr__ae", "Red Bar (Electrocoin) (set 42)", + "ec_redbr__af", "Red Bar (Electrocoin) (set 43)", + "ec_redbr__ag", "Red Bar (Electrocoin) (set 44)", + "ec_redbr__ah", "Red Bar (Electrocoin) (set 45)", + "ec_redbr__ai", "Red Bar (Electrocoin) (set 46)", + "ec_redbr__aj", "Red Bar (Electrocoin) (set 47)", + "ec_redbr__ak", "Red Bar (Electrocoin) (set 48)", + "ec_redbr__al", "Red Bar (Electrocoin) (set 49)", + "ec_redbr__am", "Red Bar (Electrocoin) (set 50)", + "ec_redbr__an", "Red Bar (Electrocoin) (set 51)", + "ec_redbr__ao", "Red Bar (Electrocoin) (set 52)", + "ec_redbr__ap", "Red Bar (Electrocoin) (set 53)", + "ec_redbr__aq", "Red Bar (Electrocoin) (set 54)", + "ec_redbr__ar", "Red Bar (Electrocoin) (set 55)", + "ec_redbr__as", "Red Bar (Electrocoin) (set 56)", + "ec_redbr__at", "Red Bar (Electrocoin) (set 57)", + "ec_redbr__au", "Red Bar (Electrocoin) (set 58)", + "ec_redbr__av", "Red Bar (Electrocoin) (set 59)", + "ec_redbr__aw", "Red Bar (Electrocoin) (set 60)", + "ec_redbr__ax", "Red Bar (Electrocoin) (set 61)", + "ec_redbr__ay", "Red Bar (Electrocoin) (set 62)", + "ec_redbr__az", "Red Bar (Electrocoin) (set 63)", + "ec_redbr__b", "Red Bar (Electrocoin) (set 3)", + "ec_redbr__b0", "Red Bar (Electrocoin) (set 100)", + "ec_redbr__b1", "Red Bar (Electrocoin) (set 101)", + "ec_redbr__ba", "Red Bar (Electrocoin) (set 74)", + "ec_redbr__bb", "Red Bar (Electrocoin) (set 75)", + "ec_redbr__bc", "Red Bar (Electrocoin) (set 76)", + "ec_redbr__bd", "Red Bar (Electrocoin) (set 77)", + "ec_redbr__be", "Red Bar (Electrocoin) (set 78)", + "ec_redbr__bf", "Red Bar (Electrocoin) (set 79)", + "ec_redbr__bg", "Red Bar (Electrocoin) (set 80)", + "ec_redbr__bh", "Red Bar (Electrocoin) (set 81)", + "ec_redbr__bi", "Red Bar (Electrocoin) (set 82)", + "ec_redbr__bj", "Red Bar (Electrocoin) (set 83)", + "ec_redbr__bk", "Red Bar (Electrocoin) (set 84)", + "ec_redbr__bl", "Red Bar (Electrocoin) (set 85)", + "ec_redbr__bm", "Red Bar (Electrocoin) (set 86)", + "ec_redbr__bn", "Red Bar (Electrocoin) (set 87)", + "ec_redbr__bo", "Red Bar (Electrocoin) (set 88)", + "ec_redbr__bp", "Red Bar (Electrocoin) (set 89)", + "ec_redbr__bq", "Red Bar (Electrocoin) (set 90)", + "ec_redbr__br", "Red Bar (Electrocoin) (set 91)", + "ec_redbr__bs", "Red Bar (Electrocoin) (set 92)", + "ec_redbr__bt", "Red Bar (Electrocoin) (set 93)", + "ec_redbr__bu", "Red Bar (Electrocoin) (set 94)", + "ec_redbr__bv", "Red Bar (Electrocoin) (set 95)", + "ec_redbr__bw", "Red Bar (Electrocoin) (set 96)", + "ec_redbr__bx", "Red Bar (Electrocoin) (set 97)", + "ec_redbr__by", "Red Bar (Electrocoin) (set 98)", + "ec_redbr__c", "Red Bar (Electrocoin) (set 4)", + "ec_redbr__d", "Red Bar (Electrocoin) (set 5)", + "ec_redbr__e", "Red Bar (Electrocoin) (set 6)", + "ec_redbr__f", "Red Bar (Electrocoin) (set 7)", + "ec_redbr__g", "Red Bar (Electrocoin) (set 8)", + "ec_redbr__h", "Red Bar (Electrocoin) (set 9)", + "ec_redbr__i", "Red Bar (Electrocoin) (set 10)", + "ec_redbr__j", "Red Bar (Electrocoin) (set 11)", + "ec_redbr__k", "Red Bar (Electrocoin) (set 12)", + "ec_redbr__l", "Red Bar (Electrocoin) (set 13)", + "ec_redbr__m", "Red Bar (Electrocoin) (set 14)", + "ec_redbr__n", "Red Bar (Electrocoin) (set 15)", + "ec_redbr__o", "Red Bar (Electrocoin) (set 16)", + "ec_redbr__p", "Red Bar (Electrocoin) (set 17)", + "ec_redbr__q", "Red Bar (Electrocoin) (set 18)", + "ec_redbr__r", "Red Bar (Electrocoin) (set 19)", + "ec_redbr__s", "Red Bar (Electrocoin) (set 20)", + "ec_redbr__t", "Red Bar (Electrocoin) (set 21)", + "ec_redbr__u", "Red Bar (Electrocoin) (set 22)", + "ec_redbr__v", "Red Bar (Electrocoin) (set 23)", + "ec_redbr__w", "Red Bar (Electrocoin) (set 24)", + "ec_redbr__x", "Red Bar (Electrocoin) (set 25)", + "ec_redbr__y", "Red Bar (Electrocoin) (set 26)", + "ec_redbr__z", "Red Bar (Electrocoin) (set 27)", + "ec_sbarx", "Super Bar X (Electrocoin) (set 1)", + "ec_sbarx__0", "Super Bar X (Electrocoin) (set 28)", + "ec_sbarx__1", "Super Bar X (Electrocoin) (set 29)", + "ec_sbarx__2", "Super Bar X (Electrocoin) (set 30)", + "ec_sbarx__3", "Super Bar X (Electrocoin) (set 31)", + "ec_sbarx__4", "Super Bar X (Electrocoin) (set 32)", + "ec_sbarx__5", "Super Bar X (Electrocoin) (set 33)", + "ec_sbarx__6", "Super Bar X (Electrocoin) (set 34)", + "ec_sbarx__7", "Super Bar X (Electrocoin) (set 35)", + "ec_sbarx__8", "Super Bar X (Electrocoin) (set 36)", + "ec_sbarx__9", "Super Bar X (Electrocoin) (set 37)", + "ec_sbarx__a", "Super Bar X (Electrocoin) (set 2)", + "ec_sbarx__a0", "Super Bar X (Electrocoin) (set 64)", + "ec_sbarx__a1", "Super Bar X (Electrocoin) (set 65)", + "ec_sbarx__a2", "Super Bar X (Electrocoin) (set 66)", + "ec_sbarx__a3", "Super Bar X (Electrocoin) (set 67)", + "ec_sbarx__a4", "Super Bar X (Electrocoin) (set 68)", + "ec_sbarx__aa", "Super Bar X (Electrocoin) (set 38)", + "ec_sbarx__ab", "Super Bar X (Electrocoin) (set 39)", + "ec_sbarx__ac", "Super Bar X (Electrocoin) (set 40)", + "ec_sbarx__ad", "Super Bar X (Electrocoin) (set 41)", + "ec_sbarx__ae", "Super Bar X (Electrocoin) (set 42)", + "ec_sbarx__af", "Super Bar X (Electrocoin) (set 43)", + "ec_sbarx__ag", "Super Bar X (Electrocoin) (set 44)", + "ec_sbarx__ah", "Super Bar X (Electrocoin) (set 45)", + "ec_sbarx__ai", "Super Bar X (Electrocoin) (set 46)", + "ec_sbarx__aj", "Super Bar X (Electrocoin) (set 47)", + "ec_sbarx__ak", "Super Bar X (Electrocoin) (set 48)", + "ec_sbarx__al", "Super Bar X (Electrocoin) (set 49)", + "ec_sbarx__am", "Super Bar X (Electrocoin) (set 50)", + "ec_sbarx__an", "Super Bar X (Electrocoin) (set 51)", + "ec_sbarx__ao", "Super Bar X (Electrocoin) (set 52)", + "ec_sbarx__ap", "Super Bar X (Electrocoin) (set 53)", + "ec_sbarx__aq", "Super Bar X (Electrocoin) (set 54)", + "ec_sbarx__ar", "Super Bar X (Electrocoin) (set 55)", + "ec_sbarx__as", "Super Bar X (Electrocoin) (set 56)", + "ec_sbarx__at", "Super Bar X (Electrocoin) (set 57)", + "ec_sbarx__au", "Super Bar X (Electrocoin) (set 58)", + "ec_sbarx__av", "Super Bar X (Electrocoin) (set 59)", + "ec_sbarx__aw", "Super Bar X (Electrocoin) (set 60)", + "ec_sbarx__ax", "Super Bar X (Electrocoin) (set 61)", + "ec_sbarx__ay", "Super Bar X (Electrocoin) (set 62)", + "ec_sbarx__az", "Super Bar X (Electrocoin) (set 63)", + "ec_sbarx__b", "Super Bar X (Electrocoin) (set 3)", + "ec_sbarx__c", "Super Bar X (Electrocoin) (set 4)", + "ec_sbarx__d", "Super Bar X (Electrocoin) (set 5)", + "ec_sbarx__e", "Super Bar X (Electrocoin) (set 6)", + "ec_sbarx__f", "Super Bar X (Electrocoin) (set 7)", + "ec_sbarx__g", "Super Bar X (Electrocoin) (set 8)", + "ec_sbarx__h", "Super Bar X (Electrocoin) (set 9)", + "ec_sbarx__i", "Super Bar X (Electrocoin) (set 10)", + "ec_sbarx__j", "Super Bar X (Electrocoin) (set 11)", + "ec_sbarx__k", "Super Bar X (Electrocoin) (set 12)", + "ec_sbarx__l", "Super Bar X (Electrocoin) (set 13)", + "ec_sbarx__m", "Super Bar X (Electrocoin) (set 14)", + "ec_sbarx__n", "Super Bar X (Electrocoin) (set 15)", + "ec_sbarx__o", "Super Bar X (Electrocoin) (set 16)", + "ec_sbarx__p", "Super Bar X (Electrocoin) (set 17)", + "ec_sbarx__q", "Super Bar X (Electrocoin) (set 18)", + "ec_sbarx__r", "Super Bar X (Electrocoin) (set 19)", + "ec_sbarx__s", "Super Bar X (Electrocoin) (set 20)", + "ec_sbarx__t", "Super Bar X (Electrocoin) (set 21)", + "ec_sbarx__u", "Super Bar X (Electrocoin) (set 22)", + "ec_sbarx__v", "Super Bar X (Electrocoin) (set 23)", + "ec_sbarx__w", "Super Bar X (Electrocoin) (set 24)", + "ec_sbarx__x", "Super Bar X (Electrocoin) (set 25)", + "ec_sbarx__y", "Super Bar X (Electrocoin) (set 26)", + "ec_sbarx__z", "Super Bar X (Electrocoin) (set 27)", + "ec_sbxbr", "Super Bar X (Brunel Research) (set 1)", + "ec_sbxbra", "Super Bar X (Brunel Research) (set 2)", + "ec_sbxbrb", "Super Bar X (Brunel Research) (set 3)", + "ec_sbxbrc", "Super Bar X (Brunel Research) (set 4)", + "ec_sbxbrd", "Super Bar X (Brunel Research) (set 5)", + "ec_sbxbre", "Super Bar X (Brunel Research) (set 6)", + "ec_sbxbrf", "Super Bar X (Brunel Research) (set 7)", + "ec_sbxbrg", "Super Bar X (Brunel Research) (set 8)", + "ec_sbxbrh", "Super Bar X (Brunel Research) (set 9)", + "ec_secrt", "Secret Castle (v1) (Electrocoin)", + "ec_spbdx", "Super Bar X Deluxe (Electrocoin) (set 1)", + "ec_spbdx__a", "Super Bar X Deluxe (Electrocoin) (set 2)", + "ec_spbdx__b", "Super Bar X Deluxe (Electrocoin) (set 3)", + "ec_spbdx__c", "Super Bar X Deluxe (Electrocoin) (set 4)", + "ec_spbdx__d", "Super Bar X Deluxe (Electrocoin) (set 5)", + "ec_spbg7mab", "Super Big 7 (MAB PCB) (Electrocoin) (?)", + "ec_sphin", "Sphinx (v2) (Electrocoin) (set 1)", + "ec_sphina", "Sphinx (v2) (Electrocoin) (set 2)", + "ec_sphinb", "Sphinx (v1) (Electrocoin)", + "ec_stair", "Stairway To Heaven (v11) (Electrocoin)", + "ec_staira", "Stairway To Heaven (v1) (Electrocoin)", + "ec_stkex", "Stake X (Concept Games Ltd) (?)", + "ec_sumnc", "Casino Super Multi Nudger (Concept / Electrocoin Oxo) (?)", + "ec_sumnd", "Super Multi Nudger (Concept / Electrocoin Oxo) (?)", + "ec_supbxcon", "Super Bar X (MAB PCB) (Concept Games Ltd) (?)", + "ec_supbxmab", "Super Bar X (MAB PCB) (Electrocoin) (?)", + "ec_supmb", "Super Multi Bar (Concept Games Ltd) (?)", + "ec_suprl", "Super Reels (Electrocoin) (?)", + "ec_unk5", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 1)", + "ec_unk5__a", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 2)", + "ec_unk5__b", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 3)", + "ec_unk5__c", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 4)", + "ec_unkt", "unknown 'T' (MAB PCB?) (Concept Games Ltd) (?)", + "eca", "Emergency Call Ambulance", + "ecap", "Emergency Call Ambulance (US location test?)", + "ecax", "Emergency Call Ambulance (Export)", + "eclipse", "Eclipse", + "ecofghtr", "Eco Fighters (World 931203)", + "ecofghtra", "Eco Fighters (Asia 931203)", + "ecofghtrd", "Eco Fighters (World 931203 Phoenix Edition) (bootleg)", + "ecofghtrh", "Eco Fighters (Hispanic 931203)", + "ecofghtru", "Eco Fighters (USA 940215)", + "ecofghtru1", "Eco Fighters (USA 931203)", + "edf", "E.D.F. : Earth Defense Force", + "edfbl", "E.D.F. : Earth Defense Force (bootleg)", + "edfu", "E.D.F. : Earth Defense Force (North America)", + "edrandy", "The Cliffhanger - Edward Randy (World ver 3)", + "edrandy1", "The Cliffhanger - Edward Randy (World ver 1)", + "edrandy2", "The Cliffhanger - Edward Randy (World ver 2)", + "edrandyj", "The Cliffhanger - Edward Randy (Japan ver 3)", + "eforest", "Enchanted Forest (12XF528902, US)", + "eforesta", "Enchanted Forest (4VXFC818, NSW)", + "eforestb", "Enchanted Forest (3VXFC5343, New Zealand)", + "egghunt", "Egg Hunt", + "eggor", "Eggor", + "eggs", "Eggs (USA)", + "eggventr", "Egg Venture (Release 10)", + "eggventr2", "Egg Venture (Release 2)", + "eggventr7", "Egg Venture (Release 7)", + "eggventr8", "Egg Venture (Release 8)", + "eggventra", "Egg Venture (A.L. Release)", + "eggventrd", "Egg Venture Deluxe", + "ehrgeiz", "Ehrgeiz (US, EG3/VER.A)", + "ehrgeizaa", "Ehrgeiz (Asia, EG2/VER.A)", + "ehrgeizja", "Ehrgeiz (Japan, EG1/VER.A)", + "eightbll", "Eight Ball", + "eightfrc", "Eight Forces", + "eightman", "Eight Man (NGM-025)(NGH-025)", + "einning", "Extra Inning / Ball Park II", + "ejanhs", "E-Jan High School (Japan)", + "ejihon", "Ejihon Tantei Jimusyo (J 950613 V1.000)", + "ejollyx5", "Euro Jolly X5", + "ejollyx9", "Euro Jolly X9", + "ejsakura", "E-Jan Sakurasou (Japan, SYS386F V2.0)", + "ejsakura12", "E-Jan Sakurasou (Japan, SYS386F V1.2)", + "elandore", "Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)", + "eldorado", "El Dorado City of Gold", + "elecyoyo", "The Electric Yo-Yo (set 1)", + "elecyoyo2", "The Electric Yo-Yo (set 2)", + "elektra", "Elektra", + "elephfam", "Elephant Family (Italian, new)", + "elephfmb", "Elephant Family (Italian, old)", + "elevator", "Elevator Action", + "elevatorb", "Elevator Action (bootleg)", + "elgrande", "El Grande - 5 Card Draw (New)", + "elim2", "Eliminator (2 Players, set 1)", + "elim2a", "Eliminator (2 Players, set 2)", + "elim2c", "Eliminator (2 Players, cocktail)", + "elim4", "Eliminator (4 Players)", + "elim4p", "Eliminator (4 Players, prototype)", + "elvact2u", "Elevator Action II (Ver 2.2A 1995/02/20)", + "elvactr", "Elevator Action Returns (Ver 2.2O 1995/02/20)", + "elvactrj", "Elevator Action Returns (Ver 2.2J 1995/02/20)", + "elvis", "Elvis?", + "elvisf", "Elvis (5.00 France)", + "elvisf302", "Elvis (3.02 France)", + "elvisf303", "Elvis (3.03 France)", + "elvisf4", "Elvis (4.00 France)", + "elvisg", "Elvis (5.00 Germany)", + "elvisg302", "Elvis (3.02 Germany)", + "elvisg303", "Elvis (3.03 Germany)", + "elvisg4", "Elvis (4.00 Germany)", + "elvisi", "Elvis (5.00 Italy)", + "elvisi302", "Elvis (3.02 Italy)", + "elvisi303", "Elvis (3.03 Italy)", + "elvisi4", "Elvis (4.00 Italy)", + "elvisl", "Elvis (5.00 Spain)", + "elvisl302", "Elvis (3.02 Spain)", + "elvisl303", "Elvis (3.03 Spain)", + "elvisl4", "Elvis (4.00 Spain)", + "elvisp", "Elvis (5.00)", + "elvisp302", "Elvis (3.02)", + "elvisp303", "Elvis (3.03)", + "elvisp4", "Elvis (4.00)", + "embargo", "Embargo", + "embryon", "Embryon", + "emeralda", "Emeraldia (World)", + "emeraldaj", "Emeraldia (Japan Version B)", + "emeraldaja", "Emeraldia (Japan)", + "empcity", "Empire City: 1931 (bootleg?)", + "empcityi", "Empire City: 1931 (Italy)", + "empcityj", "Empire City: 1931 (Japan)", + "empcityu", "Empire City: 1931 (US)", + "empsback", "The Empire Strike Back", + "enchfrst", "Enchanted Forest (0400122V, Local)", + "enchlamp", "Enchanted Lamp (Konami Endeavour)", + "endless", "Gundam Wing: Endless Duel (SNES bootleg)", + "endurob2", "Enduro Racer (bootleg set 2)", + "endurobl", "Enduro Racer (bootleg set 1)", + "enduror", "Enduro Racer (YM2151, FD1089B 317-0013A)", + "enduror1", "Enduro Racer (YM2203, FD1089B 317-0013A)", + "enforce", "Enforce (World)", + "enforcej", "Enforce (Japan)", + "enforceja", "Enforce (Japan, Analog Controls)", + "enigma2", "Enigma II", + "enigma2a", "Enigma II (Space Invaders hardware)", + "enigma2b", "Phantoms II (Space Invaders hardware)", + "ep_21clb", "Twenty One Club (Maygay) (EPOCH) (3.2, set 1)", + "ep_21clba", "Twenty One Club (Maygay) (EPOCH) (3.2, set 2)", + "ep_25crt", "25 Carrot Gold (Maygay) (EPOCH) (1.2, set 1)", + "ep_25crta", "25 Carrot Gold (Maygay) (EPOCH) (1.1, set 2)", + "ep_25crtb", "25 Carrot Gold (Maygay) (EPOCH) (3.1, set 3)", + "ep_25crtc", "25 Carrot Gold (Maygay) (EPOCH) (4.1, set 4)", + "ep_25crtd", "25 Carrot Gold (Maygay) (EPOCH) (5.1, set 5)", + "ep_bartk", "Bar Trekkin (Maygay) (EPOCH) (4.5, set 1)", + "ep_bartka", "Bar Trekkin (Maygay) (EPOCH) (3.9, set 2)", + "ep_bartkb", "Bar Trekkin (Maygay) (EPOCH) (3.9, set 3)", + "ep_bartkc", "Bar Trekkin (Maygay) (EPOCH) (4.4, set 4)", + "ep_bartkd", "Bar Trekkin (Maygay) (EPOCH) (4.4, set 5)", + "ep_bartke", "Bar Trekkin (Maygay) (EPOCH) (4.5, set 6)", + "ep_bartkf", "Bar Trekkin (Maygay) (EPOCH) (4.2, set 7)", + "ep_baskr", "Pounds Of The Baskervilles (Maygay) (EPOCH) (1.7, set 1)", + "ep_baskra", "Pounds Of The Baskervilles (Maygay) (EPOCH) (2.2, set 2)", + "ep_baskrb", "Pounds Of The Baskervilles (Maygay) (EPOCH) (2.2, set 3)", + "ep_baskrc", "Pounds Of The Baskervilles (Maygay) (EPOCH) (1.7, set 4)", + "ep_baskrd", "Pounds Of The Baskervilles (Maygay) (EPOCH) (2.1, set 5)", + "ep_baskre", "Pounds Of The Baskervilles (Maygay) (EPOCH) (1.5, set 6)", + "ep_bathl", "Bat Outa Hell (Global) (EPOCH) (2.1, set 1)", + "ep_bathla", "Bat Outa Hell (Global) (EPOCH) (2.1, set 2)", + "ep_bathlb", "Bat Outa Hell (Global) (EPOCH) (2.2, set 3)", + "ep_bathlc", "Bat Outa Hell (Global) (EPOCH) (2.2, set 4)", + "ep_bathld", "Bat Outa Hell (Global) (EPOCH) (3.1, set 5)", + "ep_bathle", "Bat Outa Hell (Global) (EPOCH) (3.1, set 6)", + "ep_bathlf", "Bat Outa Hell (Global) (EPOCH) (4.1, set 7)", + "ep_bathlg", "Bat Outa Hell (Global) (EPOCH) (4.1, set 8)", + "ep_bathlh", "Bat Outa Hell (Global) (EPOCH) (3.3, set 9)", + "ep_batls", "Battleships (Maygay) (EPOCH) (2.2, set 1)", + "ep_batlsa", "Battleships (Maygay) (EPOCH) (2.2, set 2)", + "ep_batlsb", "Battleships (Maygay) (EPOCH) (1.9, set 3)", + "ep_batlsc", "Battleships (Maygay) (EPOCH) (1.9, set 4)", + "ep_bbars", "Balloon Bars (Maygay) (EPOCH) (1.2, set 1)", + "ep_bbarsa", "Balloon Bars (Maygay) (EPOCH) (1.2, set 2)", + "ep_bbarsb", "Balloon Bars (Maygay) (EPOCH) (2.0, set 3)", + "ep_bbarsc", "Balloon Bars (Maygay) (EPOCH) (2.0, set 4)", + "ep_bbonz", "Bingo Bonanza (Maygay - Union) (EPOCH) (set 1)", + "ep_bbonza", "Bingo Bonanza (Maygay - Union) (EPOCH) (set 2)", + "ep_beav3", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 3.3, set 1)", + "ep_beav3a", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 3.3, set 2)", + "ep_beav3b", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 4.2, set 3)", + "ep_beav3c", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 4.2, set 4)", + "ep_beavr", "Casino Beaver Las Vegas (Global) (EPOCH) (set 1)", + "ep_beavra", "Casino Beaver Las Vegas (Global) (EPOCH) (set 2)", + "ep_beavrb", "Casino Beaver Las Vegas (Global) (EPOCH) (set 3)", + "ep_beavrc", "Casino Beaver Las Vegas (Global) (EPOCH) (set 4)", + "ep_beavrd", "Casino Beaver Las Vegas (Global) (EPOCH) (set 5)", + "ep_beavre", "Casino Beaver Las Vegas (Global) (EPOCH) (set 6)", + "ep_beavrf", "Casino Beaver Las Vegas (Global) (EPOCH) (set 7)", + "ep_beavrg", "Casino Beaver Las Vegas (Global) (EPOCH) (set 8)", + "ep_beavrh", "Casino Beaver Las Vegas (Global) (EPOCH) (set 9)", + "ep_beavri", "Casino Beaver Las Vegas (Global) (EPOCH) (set 10)", + "ep_beavrj", "Casino Beaver Las Vegas (Global) (EPOCH) (set 11)", + "ep_beavrk", "Casino Beaver Las Vegas (Global) (EPOCH) (set 12)", + "ep_beavrl", "Casino Beaver Las Vegas (Global) (EPOCH) (set 13)", + "ep_beavrm", "Casino Beaver Las Vegas (Global) (EPOCH) (set 14)", + "ep_beavrn", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 2.3, set 5)", + "ep_beavro", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 2.3, set 6)", + "ep_bingb", "Bingo Belle (Maygay) (EPOCH) (1.3, set 1)", + "ep_bingba", "Bingo Belle (Maygay) (EPOCH) (1.3, set 2)", + "ep_bjclb", "Blackjack Club, The (Global) (EPOCH)", + "ep_braid", "Bank Raid (Extreme) (EPOCH) (BARA 0.1, set 1)", + "ep_braida", "Bank Raid (Extreme) (EPOCH) (BARA 0.1, set 2)", + "ep_braidb", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 3)", + "ep_braidc", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 4)", + "ep_braidd", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 5)", + "ep_braide", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 6)", + "ep_bubsq", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.2, set 1)", + "ep_bubsqa", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.2, set 2)", + "ep_bubsqb", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.3, set 3)", + "ep_bubsqc", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.3, set 4)", + "ep_bubsqd", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.4, set 5)", + "ep_bvrcl", "Beaver Las Vegas Club (Global) (EPOCH) (set 1)", + "ep_bvrcla", "Beaver Las Vegas Club (Global) (EPOCH) (set 2)", + "ep_bvrclb", "Beaver Las Vegas Club (Global) (EPOCH) (set 3)", + "ep_bvrclc", "Beaver Las Vegas Club (Global) (EPOCH) (set 4)", + "ep_bvrcld", "Beaver Las Vegas Club (Global) (EPOCH) (set 5)", + "ep_bvrcle", "Beaver Las Vegas Club (Global) (EPOCH) (set 6)", + "ep_bvrclf", "Beaver Las Vegas Club (Global) (EPOCH) (set 7)", + "ep_bvrclg", "Beaver Las Vegas Club (Global) (EPOCH) (set 8)", + "ep_bvrclh", "Beaver Las Vegas Club (Global) (EPOCH) (set 9)", + "ep_bvrcli", "Beaver Las Vegas Club (Global) (EPOCH) (set 10)", + "ep_bvrclj", "Beaver Las Vegas Club (Global) (EPOCH) (set 11)", + "ep_bvrclk", "Beaver Las Vegas Club (Global) (EPOCH) (set 12)", + "ep_bvruc", "Beaver Uncovered (Global) (EPOCH) (1.4, set 1)", + "ep_bvruca", "Beaver Uncovered (Global) (EPOCH) (1.4, set 2)", + "ep_bvrucb", "Beaver Uncovered (Global) (EPOCH) (1.6, set 3)", + "ep_bvrucc", "Beaver Uncovered (Global) (EPOCH) (2.3, set 4)", + "ep_cahoy", "Cash Ahoy (Maygay - Eclipse?) (EPOCH) (set 1)", + "ep_cahoya", "Cash Ahoy (Maygay) (EPOCH) (set 2)", + "ep_cahoyb", "Cash Ahoy (Maygay) (EPOCH) (set 3)", + "ep_calyp", "Calypso (Maygay) (EPOCH) (2.2, set 1)", + "ep_calypa", "Calypso (Maygay) (EPOCH) (2.2, set 2)", + "ep_cascz", "Casino Crazy (Global) (EPOCH) (set 1)", + "ep_cascza", "Casino Crazy (Global) (EPOCH) (2.1, set 2)", + "ep_casgc", "Casino Grand Club (Maygay) (EPOCH) (1.1, set 1)", + "ep_casgca", "Casino Grand Club (Maygay) (EPOCH) (1.1, set 2)", + "ep_casgcb", "Casino Grand Club (Maygay) (EPOCH) (1.4, set 3)", + "ep_casgcc", "Casino Grand Club (Maygay) (EPOCH) (1.4, set 4)", + "ep_cashn", "Cashino (Maygay - Extreme) (EPOCH) (CSHI 1.0, set 1)", + "ep_cashna", "Cashino (Maygay - Extreme) (EPOCH) (CSHI 1.0, set 2)", + "ep_casrd", "Casino Royale Deluxe Club (Maygay) (EPOCH) (1.5, set 1)", + "ep_casrda", "Casino Royale Deluxe Club (Maygay) (EPOCH) (1.3, set 2)", + "ep_cbrcl", "Cannonball Run Club (Global) (EPOCH) (set 1)", + "ep_cbrcla", "Cannonball Run Club (Global) (EPOCH) (set 2)", + "ep_cbrclb", "Cannonball Run Club (Global) (EPOCH) (set 3)", + "ep_cbrclc", "Cannonball Run Club (Global) (EPOCH) (set 4)", + "ep_cbrcld", "Cannonball Run Club (Global) (EPOCH) (set 5)", + "ep_cbrcle", "Cannonball Run Club (Global) (EPOCH) (set 6)", + "ep_cbrclf", "Cannonball Run Club (Global) (EPOCH) (set 7)", + "ep_cbrclg", "Cannonball Run Club (Global) (EPOCH) (set 8)", + "ep_cbrclh", "Cannonball Run Club (Global) (EPOCH) (set 9)", + "ep_cbrcli", "Cannonball Run Club (Global) (EPOCH) (set 10)", + "ep_cbrclj", "Cannonball Run Club (Global) (EPOCH) (set 11)", + "ep_cbrclk", "Cannonball Run Club (Global) (EPOCH) (set 12)", + "ep_cbrun", "Cannonball Run (Global) (EPOCH) (2.2, set 1)", + "ep_cbruna", "Cannonball Run (Global) (EPOCH) (2.2, set 2)", + "ep_cbrunb", "Cannonball Run (Global) (EPOCH) (2.4, set 3)", + "ep_cbrunc", "Cannonball Run (Global) (EPOCH) (2.4, set 4)", + "ep_cbrund", "Cannonball Run (Global) (EPOCH) (3.1, set 5)", + "ep_cbrune", "Cannonball Run (Global) (EPOCH) (3.1, set 6)", + "ep_cclas", "Casino Classic (Global) (EPOCH) (set 1)", + "ep_cclasa", "Casino Classic (Global) (EPOCH) (set 2)", + "ep_ccock", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 1)", + "ep_ccocka", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 2)", + "ep_ccockb", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 3)", + "ep_ccockc", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 4)", + "ep_cdspn", "Cardinal Spin (Maygay) (EPOCH) (1.1, set 1)", + "ep_cdspna", "Cardinal Spin (Maygay) (EPOCH) (1.1, set 2)", + "ep_cfall", "Cash Falls (Maygay) (EPOCH) (1.2, set 1)", + "ep_cfalla", "Cash Falls (Maygay) (EPOCH) (1.3, set 2)", + "ep_cfallb", "Cash Falls (Maygay) (EPOCH) (1.3, set 3)", + "ep_cfallc", "Cash Falls (Maygay) (EPOCH) (2.3, set 4)", + "ep_cfalld", "Cash Falls (Maygay) (EPOCH) (2.3, set 5)", + "ep_cfalle", "Cash Falls (Maygay) (EPOCH) (3.2, set 6)", + "ep_cfallf", "Cash Falls (Maygay) (EPOCH) (3.2, set 7)", + "ep_cflow", "Cash Flow (Maygay) (EPOCH) (3.7, set 1)", + "ep_cflowa", "Cash Flow (Maygay) (EPOCH) (3.2, set 2)", + "ep_cflowc", "Cash Flow (Maygay) (EPOCH) (3.A, set 3)", + "ep_cflowd", "Cash Flow (Maygay) (EPOCH) (3.A, set 4)", + "ep_cgord", "Cash Gordon (Maygay) (EPOCH) (2.1, set 1)", + "ep_cgorda", "Cash Gordon (Maygay) (EPOCH) (2.3, set 2)", + "ep_cgordb", "Cash Gordon (Maygay) (EPOCH) (2.3, set 3)", + "ep_cgordc", "Cash Gordon (Maygay) (EPOCH) (1.9, set 4)", + "ep_cgrc", "Casino Grand Classic (Global) (EPOCH) (set 1)", + "ep_cgrca", "Casino Grand Classic (Global) (EPOCH) (set 2)", + "ep_cgred", "Club Greed (Global) (EPOCH) (set 1)", + "ep_cgreda", "Club Greed (Global) (EPOCH) (set 2)", + "ep_chock", "Chocks Away (Maygay) (EPOCH) (1.1, set 1)", + "ep_chocka", "Chocks Away (Maygay) (EPOCH) (1.1, set 2)", + "ep_chockb", "Chocks Away (Maygay) (EPOCH) (1.1, set 3)", + "ep_cock", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 1)", + "ep_cocka", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 2)", + "ep_cockb", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 3)", + "ep_cockc", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 4)", + "ep_cockd", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 5)", + "ep_cocke", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 6)", + "ep_commd", "Complete Madness (Maygay) (EPOCH) (2.2, set 1)", + "ep_commda", "Complete Madness (Maygay) (EPOCH) (2.2, set 2)", + "ep_commdb", "Complete Madness (Maygay) (EPOCH) (1.1, set 3)", + "ep_commdc", "Complete Madness (Maygay) (EPOCH) (1.2, set 4)", + "ep_commdd", "Complete Madness (Maygay) (EPOCH) (2.1, set 5)", + "ep_cor2", "Coronation Street 2 (Maygay) (EPOCH) (3.7, set 1)", + "ep_cor2a", "Coronation Street 2 (Maygay) (EPOCH) (3.7, set 2)", + "ep_cor2b", "Coronation Street 2 (Maygay) (EPOCH) (3.8, set 3)", + "ep_cor2c", "Coronation Street 2 (Maygay) (EPOCH) (3.8, set 4)", + "ep_cormn", "Coronation Street Monopoly Club (Maygay) (EPOCH) (1.7, set 1)", + "ep_cormna", "Coronation Street Monopoly Club (Maygay) (EPOCH) (1.7, set 2)", + "ep_cosc", "Carry On Screaming (Maygay) (EPOCH) (1.3, set 1)", + "ep_cosca", "Carry On Screaming (Maygay) (EPOCH) (1.3, set 2)", + "ep_cow", "Carry On Winning (Maygay) (EPOCH) (1.3, set 1)", + "ep_cowa", "Carry On Winning (Maygay) (EPOCH) (1.3, set 2)", + "ep_crazy", "Reel Crazy (Maygay) (EPOCH) (1.6, set 1)", + "ep_crazya", "Reel Crazy (Maygay) (EPOCH) (1.6, set 2)", + "ep_crazyb", "Reel Crazy (Maygay) (EPOCH) (2.6, set 3)", + "ep_crazyc", "Reel Crazy (Maygay) (EPOCH) (2.6, set 4)", + "ep_crazyd", "Reel Crazy (Maygay) (EPOCH) (1.9, set 5)", + "ep_crazye", "Reel Crazy (Maygay) (EPOCH) (1.9, set 6)", + "ep_crzbn", "Crazy Bingo (Maygay) (EPOCH) (1.1, set 1)", + "ep_crzbna", "Crazy Bingo (Maygay) (EPOCH) (1.1, set 2)", + "ep_crzbnb", "Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 3)", + "ep_crzbnc", "Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 4)", + "ep_cshpn", "Cash In The Pan (Maygay) (EPOCH) (1.1, set 1)", + "ep_cshpna", "Cash In The Pan (Maygay) (EPOCH) (1.1, set 2)", + "ep_cslay", "Cash Slayer (Global) (EPOCH) (1.4, set 1)", + "ep_cslaya", "Cash Slayer (Global) (EPOCH) (set 2)", + "ep_cstrk", "Crazy Streak Club (Global) (EPOCH) (set 1)", + "ep_cstrka", "Crazy Streak Club (Global) (EPOCH) (set 2)", + "ep_cstrkb", "Crazy Streak Club (Global) (EPOCH) (set 3)", + "ep_cstrkc", "Crazy Streak Club (Global) (EPOCH) (set 4)", + "ep_cstrkd", "Crazy Streak Club (Global) (EPOCH) (set 5)", + "ep_cstrke", "Crazy Streak Club (Global) (EPOCH) (set 6)", + "ep_cstrkf", "Crazy Streak Club (Global) (EPOCH) (set 7)", + "ep_cstrkg", "Crazy Streak Club (Global) (EPOCH) (set 8)", + "ep_ctc", "Cut Throat Cash (Global) (EPOCH) (1.2, set 1)", + "ep_ctca", "Cut Throat Cash (Global) (EPOCH) (1.2, set 2)", + "ep_ctit", "Cash Of The Titans (Maygay) (EPOCH) (1.5, set 1)", + "ep_ctita", "Cash Of The Titans (Maygay) (EPOCH) (1.5, set 2)", + "ep_cyc", "Cyclone (Extreme) (EPOCH) (CYCL 0.2, set 1)", + "ep_cyca", "Cyclone (Extreme) (EPOCH) (CYCL 0.2, set 2)", + "ep_cycb", "Cyclone (Extreme) (EPOCH) (CYCL 0.3, set 3)", + "ep_cycc", "Cyclone (Extreme) (EPOCH) (CYCL 0.3, set 4)", + "ep_cycd", "Cyclone (Extreme) (EPOCH) (CYCL 0.1, set 5)", + "ep_cyce", "Cyclone (Extreme) (EPOCH) (CYCL 0.1, set 6)", + "ep_cycl", "Cyclone Club (Maygay) (EPOCH) (3.1, set 1)", + "ep_cycla", "Cyclone Club (Maygay) (EPOCH) (3.1, set 2)", + "ep_cyclb", "Cyclone Club (Maygay) (EPOCH) (2.1, set 3)", + "ep_dblim", "Double Impact (Maygay - Impulse) (EPOCH) (set 1)", + "ep_dblima", "Double Impact (Maygay - Impulse) (EPOCH) (set 2)", + "ep_dblimb", "Double Impact (Maygay - Impulse) (EPOCH) (set 3)", + "ep_dblimc", "Double Impact (Maygay - Impulse) (EPOCH) (set 4)", + "ep_dblimd", "Double Impact (Maygay - Impulse) (EPOCH) (set 5)", + "ep_ddq", "Dungeons & Drag Queens (Global) (EPOCH) (1.4, set 1)", + "ep_ddqa", "Dungeons & Drag Queens (Global) (EPOCH) (1.4, set 2)", + "ep_ddqb", "Dungeons & Drag Queens (Global) (EPOCH) (2.1, set 3)", + "ep_ddqc", "Dungeons & Drag Queens (Global) (EPOCH) (2.1, set 4)", + "ep_ddqcl", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 1)", + "ep_ddqcla", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 2)", + "ep_ddqclb", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 3)", + "ep_ddqclc", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 4)", + "ep_ddqcld", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 5)", + "ep_ddqcle", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 6)", + "ep_ddqclf", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 7)", + "ep_ddqclg", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 8)", + "ep_ddqd", "Dungeons & Drag Queens (Global) (EPOCH) (2.2, set 5)", + "ep_ddqe", "Dungeons & Drag Queens (Global) (EPOCH) (2.2, set 6)", + "ep_ddqf", "Dungeons & Drag Queens (Global) (EPOCH) (2.4, set 7)", + "ep_ddqg", "Dungeons & Drag Queens (Global) (EPOCH) (2.4, set 8)", + "ep_ddqh", "Dungeons & Drag Queens (Global) (EPOCH) (2.5, set 9)", + "ep_ddqi", "Dungeons & Drag Queens (Global) (EPOCH) (2.5, set 10)", + "ep_dmbus", "Dambusters (Impulse) (EPOCH) (set 1)", + "ep_dmbusa", "Dambusters (Impulse) (EPOCH) (set 2)", + "ep_dmbusb", "Dambusters (Impulse) (EPOCH) (set 3)", + "ep_dmbusc", "Dambusters (Impulse) (EPOCH) (set 4)", + "ep_dmbusd", "Dambusters (Impulse) (EPOCH) (set 5)", + "ep_dmbuse", "Dambusters (Impulse) (EPOCH) (set 6)", + "ep_dmbusf", "Dambusters (Impulse) (EPOCH) (set 7)", + "ep_doubl", "Double Top (Maygay) (EPOCH) (1.4, set 1)", + "ep_doubla", "Double Top (Maygay) (EPOCH) (1.4, set 2)", + "ep_doublb", "Double Top (Maygay) (EPOCH) (1.6, set 3)", + "ep_doublc", "Double Top (Maygay) (EPOCH) (1.6, set 4)", + "ep_doubld", "Double Top (Maygay) (EPOCH) (1.4, set 5)", + "ep_duff", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 1)", + "ep_duffa", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 2)", + "ep_duffb", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 3)", + "ep_duffc", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 4)", + "ep_evil", "Evil Streak (Maygay) (EPOCH) (1.6, set 1)", + "ep_evila", "Evil Streak (Maygay) (EPOCH) (1.6, set 2)", + "ep_evilb", "Evil Streak (Maygay) (EPOCH) (1.4, set 3)", + "ep_fgods", "Fruit Of The Gods (Maygay) (EPOCH) (1.2, set 1)", + "ep_fgodsa", "Fruit Of The Gods (Maygay) (EPOCH) (1.2, set 2)", + "ep_fgodsb", "Fruit Of The Gods (Maygay) (EPOCH) (2.2, set 3)", + "ep_fgodsc", "Fruit Of The Gods (Maygay) (EPOCH) (2.2, set 4)", + "ep_fgodsd", "Fruit Of The Gods (Maygay) (EPOCH) (2.1, set 5)", + "ep_fgodse", "Fruit Of The Gods (Maygay) (EPOCH) (3.2, set 6)", + "ep_fgodsf", "Fruit Of The Gods (Maygay) (EPOCH) (1.1, set 7)", + "ep_fgodsg", "Fruit Of The Gods (Maygay) (EPOCH) (1.1, set 8)", + "ep_flash", "Flashback (Maygay - Impulse) (EPOCH) (set 1)", + "ep_flasha", "Flashback (Maygay - Impulse) (EPOCH) (set 2)", + "ep_flashb", "Flashback (Maygay - Impulse) (EPOCH) (set 3)", + "ep_flashc", "Flashback (Maygay - Impulse) (EPOCH) (set 4)", + "ep_flashd", "Flashback (Maygay - Impulse) (EPOCH) (set 5)", + "ep_flashe", "Flashback (Maygay - Impulse) (EPOCH) (set 6)", + "ep_flashf", "Flashback (Maygay - Impulse) (EPOCH) (set 7)", + "ep_fmf", "Full Moon Fever (Global) (EPOCH) (set 1)", + "ep_fmfa", "Full Moon Fever (Global) (EPOCH) (set 2)", + "ep_fnclb", "Fruit & Nudge Club (Maygay) (EPOCH) (set 1)", + "ep_fnclba", "Fruit & Nudge Club (Maygay) (EPOCH) (set 2)", + "ep_fog", "Fields of Gold (Global) (EPOCH) (set 1)", + "ep_foga", "Fields of Gold (Global) (EPOCH) (set 2)", + "ep_fortg", "Fortune & Glory (Maygay - Impulse) (EPOCH) (set 1)", + "ep_fortga", "Fortune & Glory (Maygay - Impulse) (EPOCH) (set 2)", + "ep_fortgb", "Fortune & Glory (Maygay - Impulse) (EPOCH) (set 3)", + "ep_fran", "Frantic (Maygay) (EPOCH) (set 1)", + "ep_frana", "Frantic (Maygay) (EPOCH) (set 2)", + "ep_fullm", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 1)", + "ep_fullma", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 2)", + "ep_fullmb", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 3)", + "ep_fullmc", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 4)", + "ep_fullmd", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 5)", + "ep_fullme", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 6)", + "ep_fullmf", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 7)", + "ep_funny", "Funny Money (Maygay) (EPOCH) (set 1)", + "ep_funnya", "Funny Money (Maygay) (EPOCH) (set 2)", + "ep_funnyb", "Funny Money (Maygay) (EPOCH) (set 3)", + "ep_funnyc", "Funny Money (Maygay) (EPOCH) (set 4)", + "ep_funnyd", "Funny Money (Maygay) (EPOCH) (set 5)", + "ep_funnye", "Funny Money (Maygay) (EPOCH) (set 6)", + "ep_funnyf", "Funny Money (Maygay) (EPOCH) (set 7)", + "ep_funnyg", "Funny Money (Maygay) (EPOCH) (set 8)", + "ep_geclb", "Great Escape Club (Maygay) (EPOCH) (1.C, set 1)", + "ep_geclba", "Great Escape Club (Maygay) (EPOCH) (1.C, set 2)", + "ep_geclbb", "Great Escape Club (Maygay) (EPOCH) (1.9, set 3)", + "ep_geron", "Geronimo (Maygay - Impulse) (EPOCH) (set 1)", + "ep_gerona", "Geronimo (Maygay - Impulse) (EPOCH) (set 2)", + "ep_geronb", "Geronimo (Maygay - Impulse) (EPOCH) (set 3)", + "ep_geronc", "Geronimo (Maygay - Impulse) (EPOCH) (set 4)", + "ep_gerond", "Geronimo (Maygay - Impulse) (EPOCH) (set 5)", + "ep_gerone", "Geronimo (Maygay - Impulse) (EPOCH) (set 6)", + "ep_gesc2", "Great Escape 2 (Maygay) (EPOCH) (2.1, set 1)", + "ep_gesc2a", "Great Escape 2 (Maygay) (EPOCH) (2.1, set 2)", + "ep_gldtp", "Gold Top (Maygay) (EPOCH) (1.1, set 1)", + "ep_gldtpa", "Gold Top (Maygay) (EPOCH) (1.1, set 2)", + "ep_goldf", "Gold Fever (Impulse) (EPOCH)", + "ep_greed", "Greed (Global) (EPOCH) (1.3, set 1)", + "ep_greeda", "Greed (Global) (EPOCH) (1.3, set 2)", + "ep_gresc", "Great Escape (Maygay) (EPOCH) (1.1, set 1)", + "ep_gresca", "Great Escape (Maygay) (EPOCH) (1.1, set 2)", + "ep_gridr", "Gridrunner (Maygay - Impulse) (EPOCH) (set 1)", + "ep_gridra", "Gridrunner (Maygay - Impulse) (EPOCH) (set 2)", + "ep_gridrb", "Gridrunner (Maygay - Impulse) (EPOCH) (set 3)", + "ep_gridrc", "Gridrunner (Maygay - Impulse) (EPOCH) (set 4)", + "ep_gridrd", "Gridrunner (Maygay - Impulse) (EPOCH) (set 5)", + "ep_grncl", "Grid Runner Club (Global) (EPOCH) (set 1)", + "ep_grncla", "Grid Runner Club (Global) (EPOCH) (set 2)", + "ep_grnclb", "Grid Runner Club (Global) (EPOCH) (set 3)", + "ep_grnclc", "Grid Runner Club (Global) (EPOCH) (set 4)", + "ep_grun", "Grid Runner (Global) (EPOCH) (set 1)", + "ep_gruna", "Grid Runner (Global) (EPOCH) (set 2)", + "ep_gtrot", "Globe Trotter (Global) (EPOCH) (set 1)", + "ep_gtrota", "Globe Trotter (Global) (EPOCH) (set 2)", + "ep_heybc", "Hey Big Spender Club (Global) (EPOCH) (set 1)", + "ep_heybca", "Hey Big Spender Club (Global) (EPOCH) (set 2)", + "ep_heybg", "Hey Big Spender (Global) (EPOCH) (set 1)", + "ep_heybga", "Hey Big Spender (Global) (EPOCH) (set 2)", + "ep_heybgb", "Hey Big Spender (Global) (EPOCH) (set 3)", + "ep_heybgc", "Hey Big Spender (Global) (EPOCH) (set 4)", + "ep_hhclb", "Haunted House Club (Maygay) (EPOCH) (1.4, set 1)", + "ep_hhclba", "Haunted House Club (Maygay) (EPOCH) (1.4, set 2)", + "ep_hhclbb", "Haunted House Club (Maygay) (EPOCH) (1.1, set 3)", + "ep_hhclbc", "Haunted House Club (Maygay) (EPOCH) (1.1, set 4)", + "ep_highv", "High Voltage (Maygay - Impulse) (EPOCH) (set 1)", + "ep_highva", "High Voltage (Maygay - Impulse) (EPOCH) (set 2)", + "ep_highvb", "High Voltage (Maygay - Impulse) (EPOCH) (set 3)", + "ep_highvc", "High Voltage (Maygay - Impulse) (EPOCH) (set 4)", + "ep_highvd", "High Voltage (Maygay - Impulse) (EPOCH) (set 5)", + "ep_highve", "High Voltage (Maygay - Impulse) (EPOCH) (set 6)", + "ep_highvf", "High Voltage (Maygay - Impulse) (EPOCH) (set 7)", + "ep_hiscl", "Hi Spirits Club (Global) (EPOCH) (set 1)", + "ep_hiscla", "Hi Spirits Club (Global) (EPOCH) (set 2)", + "ep_hispr", "Hi Spirits (Global) (EPOCH) (1.A, set 1)", + "ep_hispra", "Hi Spirits (Global) (EPOCH) (1.A, set 2)", + "ep_hisprb", "Hi Spirits (Global) (EPOCH) (4.2, set 3)", + "ep_hisprc", "Hi Spirits (Global) (EPOCH) (4.2, set 4)", + "ep_hisprd", "Hi Spirits (Global) (EPOCH) (3.2, set 5)", + "ep_hispre", "Hi Spirits (Global) (EPOCH) (3.2, set 6)", + "ep_hogmn", "Hog Money (Maygay - Impulse) (EPOCH) (set 1)", + "ep_hogmna", "Hog Money (Maygay - Impulse) (EPOCH) (set 2)", + "ep_hogmnb", "Hog Money (Maygay - Impulse) (EPOCH) (set 3)", + "ep_homer", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.A, set 1)", + "ep_homera", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.2, set 3)", + "ep_homerb", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.2, set 4)", + "ep_homerc", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.B, set 5)", + "ep_homerd", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.B, set 6)", + "ep_homere", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.1, set 7)", + "ep_homerf", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.1, set 8)", + "ep_homerg", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.1, set 9)", + "ep_homerh", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.1, set 10)", + "ep_homeri", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.9, set 2)", + "ep_htdgs", "Hot Dogs (Maygay) (EPOCH) (set 1)", + "ep_htdgsa", "Hot Dogs (Maygay) (EPOCH) (set 2)", + "ep_hubbl", "Hubble Bubble (Maygay) (EPOCH) (set 1)", + "ep_hubbla", "Hubble Bubble (Maygay) (EPOCH) (set 2)", + "ep_hur", "Hurricane (Global) (EPOCH) (set 1)", + "ep_hura", "Hurricane (Global) (EPOCH) (set 2)", + "ep_hurb", "Hurricane (Global) (EPOCH) (set 3)", + "ep_huric", "Hurricane (Maygay - Impulse) (EPOCH) (set 1)", + "ep_hurica", "Hurricane (Maygay - Impulse) (EPOCH) (set 2)", + "ep_huricb", "Hurricane (Maygay - Impulse) (EPOCH) (set 3)", + "ep_huricc", "Hurricane (Maygay - Impulse) (EPOCH) (set 4)", + "ep_huricd", "Hurricane (Maygay - Impulse) (EPOCH) (set 5)", + "ep_hurice", "Hurricane (Maygay - Impulse) (EPOCH) (set 6)", + "ep_hvns", "Heavens Above (Maygay) (EPOCH) (set 1)", + "ep_hvnsa", "Heavens Above (Maygay) (EPOCH) (set 2)", + "ep_hyst", "Hysteria (Maygay - Impulse) (EPOCH) (set 1)", + "ep_hysta", "Hysteria (Maygay - Impulse) (EPOCH) (set 2)", + "ep_icebg", "Ice Burger (Maygay) (EPOCH) (1.4, set 1)", + "ep_icebga", "Ice Burger (Maygay) (EPOCH) (1.2, set 2)", + "ep_icebgb", "Ice Burger (Maygay) (EPOCH) (1.4, set 3)", + "ep_icebgc", "Ice Burger (Maygay) (EPOCH) (1.3, set 4)", + "ep_icebgd", "Ice Burger (Maygay) (EPOCH) (1.1, set 5)", + "ep_icebge", "Ice Burger (Maygay) (EPOCH) (1.1, set 6)", + "ep_icebgf", "Ice Burger (Maygay) (EPOCH) (1.3, set 7)", + "ep_icebgg", "Ice Burger (Maygay) (EPOCH) (1.3, set 8)", + "ep_icebgh", "Ice Burger (Maygay) (EPOCH) (1.4, set 9)", + "ep_icebgi", "Ice Burger (Maygay) (EPOCH) (1.4, set 10)", + "ep_ifern", "Inferno (Impulse) (EPOCH) (set 1)", + "ep_iferna", "Inferno (Impulse) (EPOCH) (set 2)", + "ep_ijcl", "Italian Job Club (Maygay) (EPOCH) (2.6, set 1)", + "ep_ijcla", "Italian Job Club (Maygay) (EPOCH) (2.5, set 2)", + "ep_ijob", "Italian Job (Maygay) (EPOCH, v2.1)", + "ep_ijoba", "Italian Job (Maygay) (EPOCH, v1.1)", + "ep_imj", "I'm A Jackpot (Global) (EPOCH) (1.5)", + "ep_inca", "Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.2, set 1)", + "ep_incaa", "Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.2, set 2)", + "ep_incab", "Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.1, set 3)", + "ep_itjb2", "Italian Job 2 (Maygay) (EPOCH) (1.5, set 1)", + "ep_itjb2a", "Italian Job 2 (Maygay) (EPOCH) (1.5, set 2)", + "ep_itjb2b", "Italian Job 2 (Maygay) (EPOCH) (2.3, set 3)", + "ep_itjb2c", "Italian Job 2 (Maygay) (EPOCH) (2.3, set 4)", + "ep_itjb3", "Italian Job 3 (Maygay) (EPOCH) (set 1)", + "ep_itjb3a", "Italian Job 3 (Maygay) (EPOCH) (set 2)", + "ep_jakbn", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.3, set 1)", + "ep_jakbna", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.3, set 2)", + "ep_jakbnb", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.5, set 3)", + "ep_jakbnc", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.5, set 4)", + "ep_jsttt", "Just The Ticket (Maygay) (EPOCH) (4.2, set 1)", + "ep_jsttta", "Just The Ticket (Maygay) (EPOCH) (4.2, set 2)", + "ep_jstttb", "Just The Ticket (Maygay) (EPOCH) (3.5, set 3)", + "ep_jstttc", "Just The Ticket (Maygay) (EPOCH) (3.4, set 4)", + "ep_jstttd", "Just The Ticket (Maygay) (EPOCH) (3.5, set 5)", + "ep_jsttte", "Just The Ticket (Maygay) (EPOCH) (3.5, set 6)", + "ep_jstttf", "Just The Ticket (Maygay) (EPOCH) (3.6, set 7)", + "ep_jstttg", "Just The Ticket (Maygay) (EPOCH) (3.6, set 8)", + "ep_kopcl", "Knockout Punch Club (Global) (EPOCH) (set 1)", + "ep_kopcla", "Knockout Punch Club (Global) (EPOCH) (set 2)", + "ep_kopclb", "Knockout Punch Club (Global) (EPOCH) (set 3)", + "ep_ll", "Lucky Ladders (Extreme) (EPOCH) (LULA 0.3, set 1)", + "ep_lla", "Lucky Ladders (Extreme) (EPOCH) (LULA 0.3, set 2)", + "ep_loadd", "Loaded (Maygay) (EPOCH) (LOAD 1.2, set 1)", + "ep_loadda", "Loaded (Maygay) (EPOCH) (LOAD 1.2, set 2)", + "ep_ltt", "Licence To Thrill (Global) (EPOCH) (set 1)", + "ep_ltta", "Licence To Thrill (Global) (EPOCH) (set 2)", + "ep_lug", "London Underground (Maygay) (EPOCH) (2.4, set 1)", + "ep_luga", "London Underground (Maygay) (EPOCH) (2.9, set 2)", + "ep_lugb", "London Underground (Maygay) (EPOCH) (3.1, set 3)", + "ep_lugc", "London Underground (Maygay) (EPOCH) (3.1, set 4)", + "ep_lukld", "Lucky Ladders (Maygay) (EPOCH) (LULA 0.2, set 1)", + "ep_luklda", "Lucky Ladders (Maygay) (EPOCH) (LULA 0.2, set 2)", + "ep_makmv", "Make Your Move (Global) (EPOCH) (set 1)", + "ep_makmva", "Make Your Move (Global) (EPOCH) (set 2)", + "ep_manic", "Manic Miner (Maygay - Impulse) (EPOCH) (set 1)", + "ep_manica", "Manic Miner (Maygay - Impulse) (EPOCH) (set 2)", + "ep_manicb", "Manic Miner (Maygay - Impulse) (EPOCH) (set 3)", + "ep_manicc", "Manic Miner (Maygay - Impulse) (EPOCH) (set 4)", + "ep_manicd", "Manic Miner (Maygay - Impulse) (EPOCH) (set 5)", + "ep_manice", "Manic Miner (Maygay - Impulse) (EPOCH) (set 6)", + "ep_manicf", "Manic Miner (Maygay - Impulse) (EPOCH) (set 7)", + "ep_mario", "Super Mario (Maygay) (EPOCH) (1.5, set 1)", + "ep_marioa", "Super Mario (Maygay) (EPOCH) (1.5, set 2)", + "ep_mariob", "Super Mario (Maygay) (EPOCH) (1.A, set 3)", + "ep_marioc", "Super Mario (Maygay) (EPOCH) (1.A, set 4)", + "ep_mariod", "Super Mario (Maygay) (EPOCH) (2.A, set 5)", + "ep_marioe", "Super Mario (Maygay) (EPOCH) (2.A, set 6)", + "ep_mariof", "Super Mario (Maygay) (EPOCH) (1.C, set 7)", + "ep_mariog", "Super Mario (Maygay) (EPOCH) (1.C, set 8)", + "ep_marioh", "Super Mario (Maygay) (EPOCH) (1.B, set 9)", + "ep_matrx", "Matrix (Maygay - Impulse) (EPOCH)", + "ep_merln", "Merlin's Magic (Maygay) (EPOCH) (1.91)", + "ep_midas", "Midas Touch Club (Maygay) (EPOCH) (1.1, set 1)", + "ep_midasa", "Midas Touch Club (Maygay) (EPOCH) (1.1, set 2)", + "ep_milhr", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 1)", + "ep_milhra", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 2)", + "ep_milhrb", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 3)", + "ep_milhrc", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 4)", + "ep_milhrd", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 5)", + "ep_milhre", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 6)", + "ep_milhrf", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 7)", + "ep_milhrg", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 8)", + "ep_mkart", "Mario Kart (Maygay) (EPOCH) (1.2, set 1)", + "ep_mkarta", "Mario Kart (Maygay) (EPOCH) (1.2, set 2)", + "ep_mkartb", "Mario Kart (Maygay) (EPOCH) (1.6, set 3)", + "ep_mkartc", "Mario Kart (Maygay) (EPOCH) (1.6, set 4)", + "ep_mkartd", "Mario Kart (Maygay) (EPOCH) (1.1, set 5)", + "ep_mkarte", "Mario Kart (Maygay) (EPOCH) (1.5, set 6)", + "ep_mlhrc", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 1)", + "ep_mlhrca", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 2)", + "ep_mlhrcb", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 3)", + "ep_mlhrcc", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 4)", + "ep_mlhrcd", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 5)", + "ep_mlhrce", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 6)", + "ep_monbs", "Monte Carlo Or Bust (Maygay) (EPOCH) (1.2, set 1)", + "ep_monbsa", "Monte Carlo Or Bust (Maygay) (EPOCH) (1.2, set 2)", + "ep_monky", "Monkey Business (Global) (EPOCH) (1.4, set 1)", + "ep_monkya", "Monkey Business (Global) (EPOCH) (1.5, set 2)", + "ep_monrt", "Money Returns Club, The (Global) (EPOCH) (set 1)", + "ep_monrta", "Money Returns Club, The (Global) (EPOCH) (set 2)", + "ep_monrtb", "Money Returns Club, The (Global) (EPOCH) (set 3)", + "ep_monrtc", "Money Returns Club, The (Global) (EPOCH) (set 4)", + "ep_monrtd", "Money Returns Club, The (Global) (EPOCH) (set 5)", + "ep_monrte", "Money Returns Club, The (Global) (EPOCH) (set 6)", + "ep_monrtf", "Money Returns Club, The (Global) (EPOCH) (set 7)", + "ep_monsh", "The Moonshine Club (Global) (EPOCH) (set 1)", + "ep_monsha", "The Moonshine Club (Global) (EPOCH) (set 2)", + "ep_monshb", "The Moonshine Club (Global) (EPOCH) (set 3)", + "ep_monshc", "The Moonshine Club (Global) (EPOCH) (set 4)", + "ep_monshd", "The Moonshine Club (Global) (EPOCH) (set 5)", + "ep_monshe", "The Moonshine Club (Global) (EPOCH) (set 6)", + "ep_monshf", "The Moonshine Club (Global) (EPOCH) (set 7)", + "ep_mrmus", "Mr Muscle (Maygay) (EPOCH) (1.2, set 1)", + "ep_mrmusa", "Mr Muscle (Maygay) (EPOCH) (1.2, set 2)", + "ep_mummy", "Mummy Talks (Impulse) (EPOCH) (set 1)", + "ep_mummya", "Mummy Talks (Impulse) (EPOCH) (set 2)", + "ep_mummyb", "Mummy Talks (Impulse) (EPOCH) (set 3)", + "ep_mummyc", "Mummy Talks (Impulse) (EPOCH) (set 4)", + "ep_mummyd", "Mummy Talks (Impulse) (EPOCH) (set 5)", + "ep_mummye", "Mummy Talks (Impulse) (EPOCH) (set 6)", + "ep_mummyf", "Mummy Talks (Impulse) (EPOCH) (set 7)", + "ep_mwom", "Mortal Wombat (Maygay) (EPOCH) (set 1)", + "ep_mwoma", "Mortal Wombat (Maygay) (EPOCH) (set 2)", + "ep_mwomb", "Mortal Wombat (Maygay) (EPOCH) (set 3)", + "ep_mwomc", "Mortal Wombat (Maygay) (EPOCH) (set 4)", + "ep_mwomd", "Mortal Wombat (Maygay) (EPOCH) (set 5)", + "ep_noter", "Note Runner (Maygay) (EPOCH) (NORU 0.1, set 1)", + "ep_notera", "Note Runner (Maygay) (EPOCH) (NORU 0.1, set 2)", + "ep_noterb", "Note Runner (Maygay) (EPOCH) (NORU 0.2, set 3)", + "ep_noterc", "Note Runner (Maygay) (EPOCH) (NORU 0.2, set 4)", + "ep_noterd", "Note Runner (Maygay) (EPOCH) (NORU 1.0, set 5)", + "ep_notere", "Note Runner (Maygay) (EPOCH) (NORU 1.0, set 6)", + "ep_nuns", "Nuns Of Navarone (Maygay) (EPOCH) (2.4, set 1)", + "ep_nunsa", "Nuns Of Navarone (Maygay) (EPOCH) (2.4, set 2)", + "ep_nyny", "New York New York (Maygay) (EPOCH) (3.6, set 1)", + "ep_nynya", "New York New York (Maygay) (EPOCH) (3.6, set 2)", + "ep_nynyb", "New York New York (Maygay) (EPOCH) (4.6, set 3)", + "ep_nynyc", "New York New York (Maygay) (EPOCH) (4.6, set 4)", + "ep_nynyd", "New York New York (Maygay) (EPOCH) (3.A, set 5)", + "ep_nynye", "New York New York (Maygay) (EPOCH) (3.A, set 6)", + "ep_nynyf", "New York New York (Maygay) (EPOCH) (3.9, set 7)", + "ep_otm", "Over The Moon (Maygay) (EPOCH) (1.2, set 1)", + "ep_otma", "Over The Moon (Maygay) (EPOCH) (1.2, set 2)", + "ep_otmcl", "Over The Moon Club (Maygay) (EPOCH) (set 1)", + "ep_otmcla", "Over The Moon Club (Maygay) (EPOCH) (set 2)", + "ep_ozzie", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (2.Z, set 1)", + "ep_ozziea", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) ( .2, set 2)", + "ep_ozzieb", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (5.J, set 3)", + "ep_ozziec", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (6.J, set 4)", + "ep_ozzied", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (1.1, set 5)", + "ep_ozziee", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (1.1, set 6)", + "ep_ozzief", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (2.Z, set 7)", + "ep_ozzieg", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (0.2, set 8)", + "ep_ozzieh", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (0.2, set 9)", + "ep_party", "Party Party (Global) (EPOCH) (1.1)", + "ep_pascl", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.2, set 1)", + "ep_pascla", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.2, set 2)", + "ep_passp", "Passport To Riches Club (Maygay) (EPOCH) (1.2, set 1)", + "ep_passpa", "Passport To Riches Club (Maygay) (EPOCH) (1.2, set 2)", + "ep_passpb", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.3, set 3)", + "ep_passpc", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.3, set 4)", + "ep_pesos", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 1)", + "ep_pesosa", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 2)", + "ep_pesosb", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 3)", + "ep_pesosc", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 4)", + "ep_pharo", "Pharaoh's Treasure (Maygay) (EPOCH) (set 1)", + "ep_pharoa", "Pharaoh's Treasure (Maygay) (EPOCH) (set 2)", + "ep_pizza", "Pizza The Action (Maygay) (EPOCH) (2.3, set 1)", + "ep_pizzaa", "Pizza The Action (Maygay) (EPOCH) (2.3, set 2)", + "ep_pizzab", "Pizza The Action (Maygay) (EPOCH) (2.1, set 3)", + "ep_pizzac", "Pizza The Action (Maygay) (EPOCH) (2.1, set 4)", + "ep_pkni", "The Phoenix Knights (Global) (EPOCH) (1.1, set 1)", + "ep_pknia", "The Phoenix Knights (Global) (EPOCH) (1.1, set 2)", + "ep_pknib", "The Phoenix Knights (Global) (EPOCH) (1.3, set 3)", + "ep_pknic", "The Phoenix Knights (Global) (EPOCH) (1.3, set 4)", + "ep_pknid", "The Phoenix Knights (Global) (EPOCH) (1.4, set 5)", + "ep_pknie", "The Phoenix Knights (Global) (EPOCH) (1.7, set 6)", + "ep_pknif", "The Phoenix Knights (Global) (EPOCH) (1.7, set 7)", + "ep_pwrpl", "Power Play (Maygay) (EPOCH) (PPLY 0.3, set 1)", + "ep_pwrpla", "Power Play (Maygay) (EPOCH) (PPLY 0.3, set 2)", + "ep_rags", "Rags To Riches Club (Maygay) (EPOCH) (1.10, set 1)", + "ep_ragsa", "Rags To Riches Club (Maygay) (EPOCH) (1.10, set 2)", + "ep_rchik", "Rich Chics Club (Global) (EPOCH) (set 1)", + "ep_rchika", "Rich Chics Club (Global) (EPOCH) (set 2)", + "ep_react", "Reactor (Maygay - Impulse) (EPOCH) (set 1)", + "ep_reacta", "Reactor (Maygay - Impulse) (EPOCH) (set 2)", + "ep_reactb", "Reactor (Maygay - Impulse) (EPOCH) (set 3)", + "ep_reactc", "Reactor (Maygay - Impulse) (EPOCH) (set 4)", + "ep_reactd", "Reactor (Maygay - Impulse) (EPOCH) (set 5)", + "ep_reacte", "Reactor (Maygay - Impulse) (EPOCH) (set 6)", + "ep_redl", "Red Line (Extreme) (EPOCH) (RELI 0.1, set 1)", + "ep_redla", "Red Line (Extreme) (EPOCH) (RELI 0.1, set 2)", + "ep_rlgdt", "Reel Good Time (Rebuild) (Global) (Version 1.0) (EPOCH)", + "ep_roost", "Roosters Millions (Maygay) (EPOCH) (1.2, set 1)", + "ep_roosta", "Roosters Millions (Maygay) (EPOCH) (1.2, set 2)", + "ep_royrc", "Royal Roulette Club (Impulse) (EPOCH) (set 1)", + "ep_royrca", "Royal Roulette Club (Impulse) (EPOCH) (set 2)", + "ep_royrl", "Royal Roulette (Maygay) (EPOCH) (set 1)", + "ep_royrla", "Royal Roulette (Maygay) (EPOCH) (set 2)", + "ep_royrlb", "Royal Roulette (Maygay) (EPOCH) (set 3)", + "ep_royrlc", "Royal Roulette (Maygay) (EPOCH) (set 4)", + "ep_royrld", "Royal Roulette (Maygay) (EPOCH) (set 5)", + "ep_royrle", "Royal Roulette (Maygay) (EPOCH) (set 6)", + "ep_rtt", "Round The Twist (Maygay) (EPOCH) (set 1)", + "ep_rtta", "Round The Twist (Maygay) (EPOCH) (set 2)", + "ep_scrm", "Screamin Demon (Maygay) (EPOCH) (SCDE 2.0, set 1)", + "ep_scrma", "Screamin Demon (Maygay) (EPOCH) (SCDE 2.0, set 2)", + "ep_scrmb", "Screamin Demon (Maygay) (EPOCH) (SCDE 1.0, set 3)", + "ep_scrmc", "Screamin Demon (Maygay) (EPOCH) (SCDE 1.0, set 4)", + "ep_sdcla", "Spotted Dick Classic (Global) (EPOCH) (set 1)", + "ep_sdclaa", "Spotted Dick Classic (Global) (EPOCH) (set 2)", + "ep_sdclab", "Spotted Dick Classic (Global) (EPOCH) (set 3)", + "ep_sdclac", "Spotted Dick Classic (Global) (EPOCH) (set 4)", + "ep_sdclad", "Spotted Dick Classic (Global) (EPOCH) (set 5)", + "ep_sdclae", "Spotted Dick Classic (Global) (EPOCH) (set 6)", + "ep_sdclaf", "Spotted Dick Classic (Global) (EPOCH) (set 7)", + "ep_sdclag", "Spotted Dick Classic (Global) (EPOCH) (set 8)", + "ep_sdclb", "Spotted Dick Club (Global) (EPOCH) (set 1)", + "ep_sdclba", "Spotted Dick Club (Global) (EPOCH) (set 2)", + "ep_secag", "Secret Agent (Maygay) (EPOCH) (1.5, set 1)", + "ep_secaga", "Secret Agent (Maygay) (EPOCH) (1.5, set 2)", + "ep_secagb", "Secret Agent (Maygay) (EPOCH) (1.3, set 3)", + "ep_simfr", "Simply Fruits (Maygay) (EPOCH) (1.2, set 1)", + "ep_simfra", "Simply Fruits (Maygay) (EPOCH) (1.2, set 2)", + "ep_simp", "The Simpsons (Maygay) (EPOCH) (3.6, set 1)", + "ep_simpa", "The Simpsons (Maygay) (EPOCH) (3.5, set 2)", + "ep_simpb", "The Simpsons (Maygay) (EPOCH) (3.5, set 3)", + "ep_simpc", "The Simpsons (Maygay) (EPOCH) (4.5, set 4)", + "ep_simpd", "The Simpsons (Maygay) (EPOCH) (4.5, set 5)", + "ep_simpe", "The Simpsons (Maygay) (EPOCH) (1.5, set 6)", + "ep_simpf", "The Simpsons (Maygay) (EPOCH) (1.5, set 7)", + "ep_simpg", "The Simpsons (Maygay) (EPOCH) (2.5, set 8)", + "ep_simph", "The Simpsons (Maygay) (EPOCH) (2.5, set 9)", + "ep_simpj", "The Simpsons (Maygay) (EPOCH) (1.8, set 10)", + "ep_simpk", "The Simpsons (Maygay) (EPOCH) (1.8, set 11)", + "ep_simpl", "The Simpsons (Maygay) (EPOCH) (3.7, set 12)", + "ep_simpm", "The Simpsons (Maygay) (EPOCH) (3.7, set 13)", + "ep_smoke", "Holy Smoke! (Impulse) (EPOCH) (set 1)", + "ep_smokea", "Holy Smoke! (Impulse) (EPOCH) (set 2)", + "ep_smokeb", "Holy Smoke! (Impulse) (EPOCH) (set 3)", + "ep_smokec", "Holy Smoke! (Impulse) (EPOCH) (set 4)", + "ep_smoked", "Holy Smoke! (Impulse) (EPOCH) (set 5)", + "ep_smokee", "Holy Smoke! (Impulse) (EPOCH) (set 6)", + "ep_smokef", "Holy Smoke! (Impulse) (EPOCH) (set 7)", + "ep_smokeg", "Holy Smoke! (Impulse) (EPOCH) (set 8)", + "ep_smokeh", "Holy Smoke! (Impulse) (EPOCH) (set 9)", + "ep_smokei", "Holy Smoke! (Impulse) (EPOCH) (set 10)", + "ep_smokej", "Holy Smoke! (Impulse) (EPOCH) (set 11)", + "ep_snbev", "Saturday Night Beaver (Global) (EPOCH) (1.8, set 1)", + "ep_snbeva", "Saturday Night Beaver (Global) (EPOCH) (1.8, set 2)", + "ep_snbevb", "Saturday Night Beaver (Global) (EPOCH) (1.9, set 3)", + "ep_snbevc", "Saturday Night Beaver (Global) (EPOCH) (1.9, set 4)", + "ep_snbevd", "Saturday Night Beaver (Global) (EPOCH) (2.1, set 5)", + "ep_snbeve", "Saturday Night Beaver (Global) (EPOCH) (2.1, set 6)", + "ep_snset", "Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 1)", + "ep_snseta", "Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 2)", + "ep_snw", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 1)", + "ep_snwa", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 2)", + "ep_snwb", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 3)", + "ep_snwc", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 4)", + "ep_snwd", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 5)", + "ep_spart", "Spartacash (Maygay - Impulse) (EPOCH) (set 1)", + "ep_sparta", "Spartacash (Maygay - Impulse) (EPOCH) (set 2)", + "ep_spartb", "Spartacash (Maygay - Impulse) (EPOCH) (set 3)", + "ep_spcbw", "Special Brew (Maygay) (EPOCH) (1.1, set 1)", + "ep_spcbwa", "Special Brew (Maygay) (EPOCH) (1.1, set 2)", + "ep_spcbwb", "Special Brew (Maygay) (EPOCH) (1.3, set 3)", + "ep_spcbwc", "Special Brew (Maygay) (EPOCH) (1.3, set 4)", + "ep_spcbwd", "Special Brew (Maygay) (EPOCH) (1.5, set 5)", + "ep_spcbwe", "Special Brew (Maygay) (EPOCH) (1.5, set 6)", + "ep_spcbwf", "Special Brew (Maygay) (EPOCH) (1.6, set 7)", + "ep_spcbwg", "Special Brew (Maygay) (EPOCH) (1.6, set 8)", + "ep_spcbwh", "Special Brew (Maygay) (EPOCH) (1.4, set 9)", + "ep_spcbwi", "Special Brew (Maygay) (EPOCH) (1.4, set 10)", + "ep_spcbwj", "Special Brew (Maygay) (EPOCH) (1.8, set 11)", + "ep_spcbwk", "Special Brew (Maygay) (EPOCH) (1.8, set 12)", + "ep_spcbwl", "Special Brew (Maygay) (EPOCH) (1.9, set 13)", + "ep_spcbwm", "Special Brew (Maygay) (EPOCH) (1.9, set 14)", + "ep_spec", "Spectre (Maygay) (EPOCH) (1.6, set 1)", + "ep_speca", "Spectre (Maygay) (EPOCH) (1.6, set 2)", + "ep_specb", "Spectre (Maygay) (EPOCH) (1.3, set 3)", + "ep_spin", "Spin On It (Maygay - Impulse) (EPOCH) (set 1)", + "ep_spina", "Spin On It (Maygay - Impulse) (EPOCH) (set 2)", + "ep_spinb", "Spin On It (Maygay - Impulse) (EPOCH) (set 3)", + "ep_spinc", "Spin On It (Maygay - Impulse) (EPOCH) (set 4)", + "ep_spind", "Spin On It (Maygay - Impulse) (EPOCH) (set 5)", + "ep_spine", "Spin On It (Maygay - Impulse) (EPOCH) (set 6)", + "ep_spirt", "Hi Spirits (Global) (EPOCH) (2.3, set 1)", + "ep_spirta", "Hi Spirits (Global) (EPOCH) (2.3, set 2)", + "ep_spirtb", "Hi Spirits (Global) (EPOCH) (4.1, set 3)", + "ep_spntn", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 1)", + "ep_spntna", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 2)", + "ep_spntnb", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 3)", + "ep_spntnc", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 4)", + "ep_spook", "Spooky Hollow (Global) (EPOCH) (1.3, set 1)", + "ep_spooka", "Spooky Hollow (Global) (EPOCH) (1.3, set 2)", + "ep_spookb", "Spooky Hollow (Global) (EPOCH) (2.7, set 3)", + "ep_srwin", "Sir Winalot (Maygay) (EPOCH) (2.6, set 1)", + "ep_srwina", "Sir Winalot (Maygay) (EPOCH) (3.3, set 2)", + "ep_srwinb", "Sir Winalot (Maygay) (EPOCH) (3.3, set 3)", + "ep_srwinc", "Sir Winalot (Maygay) (EPOCH) (2.6, set 4)", + "ep_srwind", "Sir Winalot (Maygay) (EPOCH) (2.1, set 5)", + "ep_step", "Stepping Stones (Maygay) (EPOCH) (1.0, set 1)", + "ep_stepa", "Stepping Stones (Maygay) (EPOCH) (1.0, set 2)", + "ep_stm", "Storm Force (Global) (EPOCH) (set 1)", + "ep_stma", "Storm Force (Global) (EPOCH) (set 2)", + "ep_stmb", "Storm Force (Global) (EPOCH) (set 3)", + "ep_stmc", "Storm Force (Global) (EPOCH) (set 4)", + "ep_stmcl", "Storm Force Club (Global) (EPOCH) (set 1)", + "ep_stmcla", "Storm Force Club (Global) (EPOCH) (set 2)", + "ep_strat", "Stratagem (Maygay) (EPOCH) (set 1)", + "ep_strata", "Stratagem (Maygay) (EPOCH) (set 2)", + "ep_subb", "Subbuteo (Maygay) (EPOCH) (set 1)", + "ep_subba", "Subbuteo (Maygay) (EPOCH) (set 2)", + "ep_subbb", "Subbuteo (Maygay) (EPOCH) (set 3)", + "ep_subbc", "Subbuteo (Maygay) (EPOCH) (set 4)", + "ep_subbd", "Subbuteo (Maygay) (EPOCH) (set 5)", + "ep_subbe", "Subbuteo (Maygay) (EPOCH) (set 6)", + "ep_subbf", "Subbuteo (Maygay) (EPOCH) (set 7)", + "ep_subbg", "Subbuteo (Maygay) (EPOCH) (set 8)", + "ep_survi", "Survival (Maygay) (EPOCH) (1.4, set 1)", + "ep_survia", "Survival (Maygay) (EPOCH) (1.4, set 2)", + "ep_tak5", "Take Five (Maygay - Union) (EPOCH) (set 1)", + "ep_tak5a", "Take Five (Maygay - Union) (EPOCH) (set 2)", + "ep_tcrwn", "Triple Crown (Maygay) (EPOCH) (2.2, set 1)", + "ep_tcrwna", "Triple Crown (Maygay) (EPOCH) (2.2, set 2)", + "ep_tcrwnb", "Triple Crown (Maygay) (EPOCH) (2.2, set 3)", + "ep_tcrwnc", "Triple Crown (Maygay) (EPOCH) (2.2, set 4)", + "ep_tcrwnd", "Triple Crown (Maygay) (EPOCH) (3.1, set 5)", + "ep_tcrwne", "Triple Crown (Maygay) (EPOCH) (3.1, set 6)", + "ep_tincn", "Tin Can Alley (Maygay) (EPOCH) (1.5, set 1)", + "ep_tincna", "Tin Can Alley (Maygay) (EPOCH) (1.5, set 2)", + "ep_tits", "Title Shot Club (Maygay) (EPOCH) (1.7, set 1)", + "ep_titsa", "Title Shot Club (Maygay) (EPOCH) (1.7, set 2)", + "ep_titsb", "Title Shot Club (Maygay) (EPOCH) (1.5, set 3)", + "ep_tod", "Truth Or Dare (Global) (EPOCH) (set 1)", + "ep_toda", "Truth Or Dare (Global) (EPOCH) (set 2)", + "ep_tonfn", "Tons Of Fun (Maygay) (EPOCH) (1.5, set 1)", + "ep_tonfna", "Tons Of Fun (Maygay) (EPOCH) (1.5, set 2)", + "ep_tortr", "Torture TV (Maygay) (EPOCH) (1.3, set 1)", + "ep_tortra", "Torture TV (Maygay) (EPOCH) (1.3, set 2)", + "ep_tp", "Trivial Pursuit (Maygay) (EPOCH) (3.5, set 1)", + "ep_tp2", "Trivial Pursuit 2 (Maygay) (EPOCH) (2.2, set 1)", + "ep_tp2a", "Trivial Pursuit 2 (Maygay) (EPOCH) (2.2, set 2)", + "ep_tpa", "Trivial Pursuit (Maygay) (EPOCH) (3.5, set 2)", + "ep_tpb", "Trivial Pursuit (Maygay) (EPOCH) (2.1, set 3)", + "ep_trail", "Trailblazer (Maygay - Impulse) (EPOCH) (set 1)", + "ep_traila", "Trailblazer (Maygay - Impulse) (EPOCH) (set 2)", + "ep_trailb", "Trailblazer (Maygay - Impulse) (EPOCH) (set 3)", + "ep_treas", "Treasure Hunt (Global) (EPOCH) (Version 1.6)", + "ep_tree", "Tree Amigos (Maygay) (EPOCH) (TRAM 0.3, set 1)", + "ep_treea", "Tree Amigos (Maygay) (EPOCH) (TRAM 0.3, set 2)", + "ep_trics", "Triple Cash (Maygay - Union) (EPOCH) (set 1)", + "ep_tricsa", "Triple Cash (Maygay - Union) (EPOCH) (set 2)", + "ep_tutcl", "Tutankhamun Club (Maygay) (EPOCH) (2.1, set 1)", + "ep_tutcla", "Tutankhamun Club (Maygay) (EPOCH) (2.1, set 2)", + "ep_tutclb", "Tutankhamun Club (Maygay) (EPOCH) (1.8, set 3)", + "ep_twarp", "Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 1)", + "ep_twarpa", "Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 2)", + "ep_twarpb", "Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 3)", + "ep_twarpc", "Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 4)", + "ep_utncl", "Utter Nutter Club (Global) (EPOCH) (set 1)", + "ep_utncla", "Utter Nutter Club (Global) (EPOCH) (set 2)", + "ep_utnut", "Utter Nutter (Global) (EPOCH) (set 1)", + "ep_utnuta", "Utter Nutter (Global) (EPOCH) (set 2)", + "ep_utnutb", "Utter Nutter (Global) (EPOCH) (set 3)", + "ep_utnutc", "Utter Nutter (Global) (EPOCH) (set 4)", + "ep_vipjv", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 1.1, set 1)", + "ep_vipjva", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 1.1, set 2)", + "ep_vipjvb", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.2, set 3)", + "ep_vipjvc", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.2, set 4)", + "ep_vipjvd", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.1, set 5)", + "ep_wf", "Wildfire (Global) (EPOCH) (set 1)", + "ep_wfa", "Wildfire (Global) (EPOCH) (set 2)", + "ep_wfb", "Wildfire (Global) (EPOCH) (set 3)", + "ep_wfc", "Wildfire (Global) (EPOCH) (set 4)", + "ep_wfd", "Wildfire (Global) (EPOCH) (set 5)", + "ep_wfe", "Wildfire (Global) (EPOCH) (set 6)", + "ep_wff", "Wildfire (Global) (EPOCH) (set 7)", + "ep_wfg", "Wildfire (Global) (EPOCH) (set 8)", + "ep_wildf", "Wildfire (Maygay - Impulse) (EPOCH) (set 1)", + "ep_wildfa", "Wildfire (Maygay - Impulse) (EPOCH) (set 2)", + "ep_wipeo", "Wipeout (Maygay) (EPOCH) (set 1)", + "ep_wipeoa", "Wipeout (Maygay) (EPOCH) (set 2)", + "ep_wipeob", "Wipeout (Maygay) (EPOCH) (set 3)", + "ep_wipeoc", "Wipeout (Maygay) (EPOCH) (set 4)", + "ep_wipeoe", "Wipeout (Maygay) (EPOCH) (set 5)", + "ep_wleek", "Weakest Leek Club (Global) (EPOCH) (set 1)", + "ep_wleeka", "Weakest Leek Club (Global) (EPOCH) (set 2)", + "ep_word", "Word Up (Maygay) (EPOCH) (1.4, set 1)", + "ep_worda", "Word Up (Maygay) (EPOCH) (1.4, set 2)", + "ep_wordb", "Word Up (Maygay) (EPOCH) (2.4, set 3)", + "ep_wordc", "Word Up (Maygay) (EPOCH) (2.4, set 4)", + "ep_wordd", "Word Up (Maygay) (EPOCH) (3.1, set 5)", + "ep_worde", "Word Up (Maygay) (EPOCH) (3.1, set 6)", + "ep_wordf", "Word Up (Maygay) (EPOCH) (4.1, set 7)", + "ep_wordg", "Word Up (Maygay) (EPOCH) (4.1, set 8)", + "ep_wside", "Wildside (Global) (EPOCH) (1.2, set 1)", + "ep_wsidea", "Wildside (Global) (EPOCH) (set 2)", + "ep_wud", "What's Up Doc (Global) (EPOCH) (set 1)", + "ep_wuda", "What's Up Doc (Global) (EPOCH) (set 2)", + "ep_wudb", "What's Up Doc (Global) (EPOCH) (set 3)", + "ep_wudc", "What's Up Doc (Global) (EPOCH) (set 4)", + "ep_wudd", "What's Up Doc (Global) (EPOCH) (set 5)", + "ep_wude", "What's Up Doc (Global) (EPOCH) (set 6)", + "ep_xspot", "X Marks The Spot (Maygay) (EPOCH) (1.5, set 1)", + "ep_xspota", "X Marks The Spot (Maygay) (EPOCH) (1.5, set 2)", + "ep_xspotb", "X Marks The Spot (Maygay) (EPOCH) (1.4, set 3)", + "ep_xtra", "X-tra X-tra (Maygay) (EPOCH) (1.5, set 1)", + "ep_xtraa", "X-tra X-tra (Maygay) (EPOCH) (1.5, set 2)", + "eprom", "Escape from the Planet of the Robot Monsters (set 1)", + "eprom2", "Escape from the Planet of the Robot Monsters (set 2)", + "equites", "Equites", + "equitess", "Equites (Sega)", + "erosone", "Eros One", + "ertictac", "Erotictac/Tactic", + "ertictaca", "Erotictac/Tactic (ver 01)", + "ertictacb", "Erotictac/Tactic (set 2)", + "esb", "The Empire Strikes Back", + "escape", "Escape", + "esckids", "Escape Kids (Asia, 4 Players)", + "esckidsj", "Escape Kids (Japan, 2 Players)", + "esclwrld", "Escape from the Lost World", + "esclwrldg", "Escape from the Lost World (German)", + "escounts", "Every Second Counts (39-360-053)", + "esh", "Esh's Aurunmilla (set 1)", + "esha", "Esh's Aurunmilla (set 2)", + "esha_la1", "Earthshaker (LA-1)", + "esha_la3", "Earthshaker (LA-3)", + "esha_lg1", "Earthshaker (German) (LG-1)", + "esha_lg2", "Earthshaker (German) (LG-2)", + "esha_ma3", "Earthshaker (Metallica) (LA-3)", + "esha_pa1", "Earthshaker (Prototype) (PA-1)", + "esha_pr4", "Earthshaker (Family version) (PR-4)", + "eshb", "Esh's Aurunmilla (set 3)", + "espgal", "Espgaluda (2003/10/15 Master Ver)", + "espgal2", "Espgaluda II (2005/11/14 MASTER VER)", + "espial", "Espial (Europe)", + "espialu", "Espial (US?)", + "esprade", "ESP Ra.De. (International, Ver. 98/04/22)", + "espradej", "ESP Ra.De. (Japan, Ver. 98/04/21)", + "espradejo", "ESP Ra.De. (Japan, Ver. 98/04/14)", + "eswat", "E-Swat - Cyber Police (set 4, World, FD1094 317-0130)", + "eswatbl", "E-Swat - Cyber Police (bootleg)", + "eswatj", "E-Swat - Cyber Police (set 2, Japan, FD1094 317-0128)", + "eswatj1", "E-Swat - Cyber Police (set 1, Japan, FD1094 317-0131)", + "eswatu", "E-Swat - Cyber Police (set 3, US, FD1094 317-0129)", + "eto", "Kokontouzai Eto Monogatari (Japan)", + "euro2k2", "Europa 2002 (Ver 2.0, set 1)", + "euro2k2a", "Europa 2002 (Ver 2.0, set 2)", + "euro2k2s", "Europa 2002 Space (Ver 3.0)", + "euroch92", "Euro Champ '92 (World)", + "eurogame", "The Euro Game (set 1)", + "eurogamea", "The Euro Game (set 2)", + "europass", "Euro Pass (Ver 1.1)", + "evelknie", "Evel Knievel", + "evilngt", "Evil Night (ver UBA)", + "evilngte", "Evil Night (ver EAA)", + "evilston", "Evil Stone", + "evlfight", "Evil Fight", + "evosocc", "Evolution Soccer", + "ewf", "Earth Wind Fire", + "excalibr", "Excalibur", + "excelsr", "Excelsior (set 1)", + "excelsra", "Excelsior (set 2)", + "excitbj", "Exciting Black Jack", + "excitebk", "Vs. Excitebike (set EB4-4 A)", + "excitebka", "Vs. Excitebike (set EB4-3 ?)", + "excthour", "Exciting Hour", + "exctleag", "Excite League (FD1094 317-0079)", + "exctscc2", "Exciting Soccer II", + "exctsccr", "Exciting Soccer", + "exctsccra", "Exciting Soccer (alternate music)", + "exctsccrb", "Exciting Soccer (bootleg)", + "exctsccrj", "Exciting Soccer (Japan)", + "exctsccrjo", "Exciting Soccer (Japan, older)", + "exctsccru", "Exciting Soccer (US)", + "exedexes", "Exed Exes", + "exerion", "Exerion", + "exerionb", "Exerion (bootleg)", + "exeriont", "Exerion (Taito)", + "exerizer", "Exerizer (Japan)", + "exerizerb", "Exerizer (Japan) (bootleg)", + "exodus", "Exodus (bootleg?)", + "expcard", "Express Card / Top Card (Ver. 1.5)", + "explbrkr", "Explosive Breaker", + "explorer", "Explorer (bootleg of Scramble)", + "exprraid", "Express Raider (World, Rev 4)", + "exprraidi", "Express Raider (Italy)", + "exprraidu", "Express Raider (US, rev 5)", + "exsafar", "Safari (Russia) (Extrema)", + "extdwnhl", "Extreme Downhill (v1.5)", + "exterm", "Exterminator", + "extrmatn", "Extermination (World)", + "extrmatnj", "Extermination (Japan)", + "extrmatnu", "Extermination (US)", + "extrmth", "Treasure Hunt (Russia) (Extrema)", + "extrmti", "Treasure Island (Russia) (Extrema)", + "exvania", "Exvania (World)", + "exvaniaj", "Exvania (Japan)", + "exzisus", "Exzisus (Japan, dedicated)", + "exzisusa", "Exzisus (Japan, conversion)", + "exzisust", "Exzisus (TAD license)", + "eyes", "Eyes (US set 1)", + "eyes2", "Eyes (US set 2)", + "eyesb", "Eyes (bootleg set 1)", + "eyeszac", "Eyes (Italy)", + "eyeszacb", "Eyes (bootleg set 2, decrypted)", + "eztouch", "EZ Touch (v116 China)", + "f14_l1", "F14 Tomcat (L-1)", + "f14_p3", "F14 Tomcat (P-3)", + "f14_p4", "F14 Tomcat (P-4)", + "f15se", "F-15 Strike Eagle (rev. 2.2 02/25/91)", + "f15se21", "F-15 Strike Eagle (rev. 2.1 02/04/91)", + "f1dream", "F-1 Dream", + "f1dreamb", "F-1 Dream (bootleg)", + "f1en", "F1 Exhaust Note", + "f1gp", "F-1 Grand Prix", + "f1gp2", "F-1 Grand Prix Part II", + "f1gpb", "F-1 Grand Prix (Playmark bootleg)", + "f1gpp", "F1 Grand Prix", + "f1gpstar", "Grand Prix Star", + "f1gpstr2", "F-1 Grand Prix Star II", + "f1lap", "F1 Super Lap (World)", + "f1lapj", "F1 Super Lap (Japan)", + "f1superb", "F1 Super Battle", + "f355", "Ferrari F355 Challenge", + "f355bios", "Naomi Ferrari F355 Challenge Bios", + "f355twin", "Ferrari F355 Challenge (Twin)", + "f355twn2", "Ferrari F355 Challenge 2 (Twin)", + "fa", "F/A (Japan)", + "faceoff", "Face Off (Japan)", + "faeton", "Faeton", + "fairyl2", "Fairy Land 2 (set 1)", + "fairyl2a", "Fairy Land 2 (set 2)", + "fairyl2b", "Fairy Land 2 (set 3)", + "fairyl2bl", "Fairy Land 2 (bootleg)", + "falcnwld", "Falcons Wild - Wild Card 1991 (TVG)", + "falcnwlda", "Falcons Wild - World Wide Poker (Video Klein, set 1)", + "falcnwldb", "Falcons Wild - World Wide Poker (Video Klein, set 2)", + "falcnwldc", "Falcons Wild - World Wide Poker (Falcon original)", + "falcon", "Falcon (bootleg of Phoenix) (8085A CPU)", + "falconz", "Falcon (bootleg of Phoenix) (Z80 CPU)", + "famibox", "FamicomBox", + "famlyfun", "Family Fun!", + "fantasia", "Fantasia (940429 PCB, set 1)", + "fantasiaa", "Fantasia (940307 PCB)", + "fantasiab", "Fantasia (940429 PCB, set 2)", + "fantastc", "Fantastic (Galaga conversion on Galaxian hardware)", + "fantasy", "Fantasy (World)", + "fantasyj", "Fantasy (Japan)", + "fantasyu", "Fantasy (US)", + "fantazia", "Fantazia (bootleg?)", + "fantjour", "Fantastic Journey (ver EAA)", + "fantjoura", "Fantastic Journey (ver AAA)", + "fantland", "Fantasy Land (set 1)", + "fantlanda", "Fantasy Land (set 2)", + "fantsia2", "Fantasia II (Explicit)", + "fantsia2a", "Fantasia II (Less Explicit)", + "fantsy95", "Fantasy '95", + "fantzn2", "Fantasy Zone II - The Tears of Opa-Opa (MC-8123, 317-0057)", + "fantzn2x", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", + "fantzn2xp", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", + "fantzone", "Fantasy Zone (Rev A, unprotected)", + "fantzone1", "Fantasy Zone (unprotected)", + "fantzonep", "Fantasy Zone (317-5000)", + "fantzonepr", "Fantasy Zone (prototype)", + "farfalla", "Farfalla", + "farfallag", "Farfalla (German speech)", + "farfallai", "Farfalla (Italian speech)", + "farmer", "Farmers Rebellion", + "farwest", "Far West", + "fashion", "Fashion (Version 2.14)", + "fashiong", "Fashion Gambler (set 1)", + "fashiong2", "Fashion Gambler (set 2)", + "fastdraw", "Fast Draw Showdown v1.3", + "fastdrwp", "Fast Draw (poker conversion kit)?", + "fastfred", "Fast Freddie", + "fastlane", "Fast Lane", + "fateulc", "Fate: Unlimited Codes (FUD1 ver. A)", + "fateulcb", "Fate: Unlimited Codes (bootleg)", + "fatfursp", "Fatal Fury Special / Garou Densetsu Special (set 1)(NGM-058)(NGH-058)", + "fatfurspa", "Fatal Fury Special / Garou Densetsu Special (set 2)(NGM-058)(NGH-058)", + "fatfurwa", "Fatal Fury: Wild Ambition (rev.A)", + "fatfury1", "Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (NGM-033)(NGH-033)", + "fatfury2", "Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai (NGM-047)(NGH-047)", + "fatfury3", "Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069)", + "fathom", "Fathom", + "fax", "FAX", + "fax2", "FAX 2", + "fb2010", "Fruit Bonus 2010", + "fb2gen", "Fruit Bonus 2nd Generation (Version 1.8E Dual)", + "fb2genc1", "Fruit Bonus 2nd Generation (Version 1.8R, set 1)", + "fb2genc2", "Fruit Bonus 2nd Generation (Version 1.8LT, set 1)", + "fb2gend1", "Fruit Bonus 2nd Generation (Version 1.8R, set 2)", + "fb2gend2", "Fruit Bonus 2nd Generation (Version 1.8LT, set 2)", + "fb2geno", "Fruit Bonus 2nd Generation (Version 1.6XT)", + "fb2geno2", "Fruit Bonus 2nd Generation (Version 1.5)", + "fb2genv1", "Fruit Bonus 2nd Generation (Version 1.8R Dual)", + "fb2genv2", "Fruit Bonus 2nd Generation (Version 1.8LT Dual)", + "fb2nd", "Fruit Bonus 2nd Edition (Version 1.8R, set 1)", + "fb2ndc2", "Fruit Bonus 2nd Edition (Version 1.8LT, set 1)", + "fb2ndd1", "Fruit Bonus 2nd Edition (Version 1.8R, set 2)", + "fb2ndd2", "Fruit Bonus 2nd Edition (Version 1.8LT, set 2)", + "fb2ndo", "Fruit Bonus 2nd Edition (Version 1.5)", + "fb2ndv1", "Fruit Bonus 2nd Edition (Version 1.8R Dual)", + "fb2ndv2", "Fruit Bonus 2nd Edition (Version 1.8LT Dual)", + "fb3g", "Fruit Bonus 3G (Version 1.0.3)", + "fb4", "Fruit Bonus 2004 (Version 1.5R, set 1)", + "fb4b2", "Fruit Bonus 2004 (Version 1.5LT, set 1)", + "fb4c1", "Fruit Bonus 2004 (Version 1.5R, set 2)", + "fb4c2", "Fruit Bonus 2004 (Version 1.5LT, set 2)", + "fb4d1", "Fruit Bonus 2004 (Version 1.5R, set 3)", + "fb4d2", "Fruit Bonus 2004 (Version 1.5LT, set 3)", + "fb4exp", "Fruit Bonus 2005 (2004 Export - Version 1.5E Dual)", + "fb4o", "Fruit Bonus 2004 (Version 1.3XT)", + "fb4o2", "Fruit Bonus 2004 (Version 1.2)", + "fb4v1", "Fruit Bonus 2004 (Version 1.5R Dual)", + "fb4v2", "Fruit Bonus 2004 (Version 1.5LT Dual)", + "fb5", "Fruit Bonus 2005 (Version 1.5SH, set 1)", + "fb5c", "Fruit Bonus 2005 (Version 1.5SH, set 2)", + "fb5d", "Fruit Bonus 2005 (Version 1.5SH, set 3)", + "fb5v", "Fruit Bonus 2005 (Version 1.5SH Dual)", + "fb6", "Fruit Bonus '06 - 10th anniversary (Version 1.7E CGA)", + "fb6d1", "Fruit Bonus '06 - 10th anniversary (Version 1.7R CGA)", + "fb6d2", "Fruit Bonus '06 - 10th anniversary (Version 1.7LT CGA)", + "fb6s1", "Fruit Bonus '06 - 10th anniversary (Version 1.7R CGA, Compact PCB)", + "fb6s2", "Fruit Bonus '06 - 10th anniversary (Version 1.7LT CGA, Compact PCB)", + "fb6s3", "Fruit Bonus '06 - 10th anniversary (Version 1.3R CGA, Compact PCB)", + "fb6se", "Fruit Bonus 2006 Special Edition (Version 1.4E CGA)", + "fb6sed1", "Fruit Bonus 2006 Special Edition (Version 1.4R CGA)", + "fb6sed2", "Fruit Bonus 2006 Special Edition (Version 1.4LT CGA)", + "fb6sev", "Fruit Bonus 2006 Special Edition (Version 1.4E Dual)", + "fb6sev1", "Fruit Bonus 2006 Special Edition (Version 1.4R Dual)", + "fb6sev2", "Fruit Bonus 2006 Special Edition (Version 1.4LT Dual)", + "fb6v", "Fruit Bonus '06 - 10th anniversary (Version 1.7E Dual)", + "fb6v1", "Fruit Bonus '06 - 10th anniversary (Version 1.7R Dual)", + "fb6v2", "Fruit Bonus '06 - 10th anniversary (Version 1.7LT Dual)", + "fbait2bc", "Fisherman's Bait 2 - A Bass Challenge (GE865 VER. UAB)", + "fbaitbc", "Fisherman's Bait - A Bass Challenge (GE765 VER. UAB)", + "fbaitmc", "Fisherman's Bait - Marlin Challenge (GX889 VER. EA)", + "fbaitmca", "Fisherman's Bait - Marlin Challenge (GX889 VER. AA)", + "fbaitmcj", "Fisherman's Bait - Marlin Challenge (GX889 VER. JA)", + "fbaitmcu", "Fisherman's Bait - Marlin Challenge (GX889 VER. UA)", + "fball_ii", "Fireball II", + "fbclass", "Fireball Classic", + "fbcrazy", "Football Crazy (Video Quiz)", + "fbdeluxe", "Fruit Bonus Deluxe (Version 1.0.9)", + "fbdeluxeo", "Fruit Bonus Deluxe (Version 1.0.7)", + "fbfrenzy", "Football Frenzy (NGM-034)(NGH-034)", + "fcnudge", "Fruit Carnival Nudge (Version 2.1 Dual)", + "fcnudgeo", "Fruit Carnival Nudge (Version 2.0, set 1)", + "fcnudgeo2", "Fruit Carnival Nudge (Version 2.0, set 2)", + "fcnudgeo3", "Fruit Carnival Nudge (Version 1.7)", + "fcockt2", "Fruit Cocktail 2 (080707 Russia)", + "fcockt2_3", "Fruit Cocktail 2 (080909 World)", + "fcockt2_4", "Fruit Cocktail 2 (081105 World)", + "fcockt2_4a", "Fruit Cocktail 2 (bootleg, 081105, banking address hack)", + "fcockt2_4b", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, no credit limit)", + "fcockt2_4d", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, payout percentage 70)", + "fcockt2_4f", "Fruit Cocktail 2 (bootleg, 081105, LOTOS FR02)", + "fcockt2_5", "Fruit Cocktail 2 (081106 Russia)", + "fcockt2_6", "Fruit Cocktail 2 (090528 Lottery)", + "fcockt2_7", "Fruit Cocktail 2 (090813 Entertainment)", + "fcockt2a", "Fruit Cocktail 2 (bootleg, 080707, banking address hack)", + "fcockt_10", "Fruit Cocktail (070517 Russia)", + "fcockt_11", "Fruit Cocktail (070822 Russia)", + "fcockt_12", "Fruit Cocktail (070911 Russia)", + "fcockt_14", "Fruit Cocktail (090708 Entertainment)", + "fcockt_3", "Fruit Cocktail (030623 World)", + "fcockt_5", "Fruit Cocktail (031111 World)", + "fcockt_6", "Fruit Cocktail (040216 World)", + "fcockt_6a", "Fruit Cocktail (bootleg, 040216, banking address hack)", + "fcockt_6b", "Fruit Cocktail (bootleg, 040216, backdoor)", + "fcockt_6c", "Fruit Cocktail (bootleg, 040216, LotoRossy+)", + "fcockt_6d", "Fruit Cocktail (bootleg, 040216, VIDEO GAME-1 FR01)", + "fcockt_7", "Fruit Cocktail (050118 World)", + "fcockt_7a", "Fruit Cocktail (bootleg, 050118, backdoor)", + "fcockt_7b", "Fruit Cocktail (bootleg, 050118, VIDEO GAME-1 FR01)", + "fcockt_7c", "Fruit Cocktail (bootleg, 050118, payout percentage 40)", + "fcockt_7d", "Fruit Cocktail (bootleg, 050118, payout percentage 60)", + "fcockt_7e", "Fruit Cocktail (bootleg, 050118, payout percentage 70)", + "fcockt_7f", "Fruit Cocktail (bootleg, 050118, changed version text)", + "fcockt_7g", "Fruit Cocktail (bootleg, 050118, LOTO PROGRAM V-FC2)", + "fcockt_7h", "Fruit Cocktail (bootleg, 050118, LOTOS FR01)", + "fcockt_8", "Fruit Cocktail (060111 World)", + "fcockt_8a", "Fruit Cocktail (bootleg, 060111, LOTO COCKTAIL V01-0001)", + "fcockt_8b", "Fruit Cocktail (bootleg, 060111, LOTTOGAME (I))", + "fcockt_9", "Fruit Cocktail (070305 Russia)", + "fcombat", "Field Combat", + "fcrash", "Final Crash (bootleg of Final Fight)", + "fearless", "Fearless Pinocchio (V101US)", + "fenix", "Fenix (bootleg of Phoenix)", + "feversoc", "Fever Soccer", + "feversos", "Fever SOS (International, Ver. 98/09/25)", + "ffantasy", "Fighting Fantasy (Japan revision 2)", + "ffantasya", "Fighting Fantasy (Japan)", + "ffantasybl", "Fighting Fantasy (bootleg with 68705)", + "ffight", "Final Fight (World, set 1)", + "ffight2b", "Final Fight 2 (SNES bootleg)", + "ffighta", "Final Fight (World, set 2)", + "ffightbl", "Final Fight (bootleg)", + "ffightj", "Final Fight (Japan)", + "ffightj1", "Final Fight (Japan 900112)", + "ffightj2", "Final Fight (Japan 900305)", + "ffightj3", "Final Fight (Japan 900613)", + "ffightjh", "Street Smart / Final Fight (Japan, hack)", + "ffightu", "Final Fight (USA, set 1)", + "ffightu1", "Final Fight (USA, set 2)", + "ffightua", "Final Fight (USA 900112)", + "ffightub", "Final Fight (USA 900613)", + "ffortune", "Fantasy Fortune (1VXFC5460, New Zealand)", + "ffreveng", "Final Fight Revenge (JUET 990714 V1.000)", + "ffv101", "Flipper Football (v1.01)", + "ffv104", "Flipper Football (v1.04)", + "fghtatck", "Fighter & Attacker (US)", + "fghtbskt", "Fighting Basketball", + "fghthist", "Fighter's History (World ver 43-07, DE-0380-2 PCB)", + "fghthistj", "Fighter's History (Japan ver 41-07, DE-0395-1 PCB)", + "fghthistja", "Fighter's History (Japan ver 41-05, DE-0380-2 PCB)", + "fghthistjb", "Fighter's History (Japan ver 41-04, DE-0380-1 PCB)", + "fghthistu", "Fighter's History (US ver 42-05, DE-0395-1 PCB)", + "fghthistua", "Fighter's History (US ver 42-03, DE-0380-2 PCB)", + "fghtjam", "Capcom Fighting Jam (JAM1 Ver. A)", + "fghtmn", "Fighting Mania (QG918 VER. EAA)", + "fghtmna", "Fighting Mania (QG918 VER. AAA)", + "fghtmnk", "Fighting Mania (QG918 VER. KAA)", + "fghtmnu", "Fighting Mania (QG918 VER. UAA)", + "fgoal", "Field Goal (set 1)", + "fgoala", "Field Goal (set 2)", + "fgtlayer", "Fighting Layer (Japan, FTL1/VER.A)", + "fh_905h", "Funhouse 9.05H", + "fh_l3", "Funhouse L-3", + "fh_l4", "Funhouse L-4", + "fh_l5", "Funhouse L-5", + "fh_l9", "Funhouse L-9 (SL-2m)", + "fh_l9b", "Funhouse L-9 (SL-2m) Bootleg Improved German translation", + "fhawk", "Fighting Hawk (World)", + "fhawkj", "Fighting Hawk (Japan)", + "fhboxers", "Funky Head Boxers (JUETBKAL 951218 V1.000)", + "fhunter", "Fortune Hunter (2XF5196I01, USA)", + "fhuntera", "Fortune Hunter (2XF5196I02, USA)", + "fieldday", "Field Day", + "fightfev", "Fight Fever (set 1)", + "fightfeva", "Fight Fever (set 2)", + "fightrol", "Fighting Roller", + "filetto", "Filetto (v1.05 901009)", + "filthyr", "Filthy Rich (Russia)", + "finalap2", "Final Lap 2", + "finalap2j", "Final Lap 2 (Japan)", + "finalap3", "Final Lap 3 (World, set 1)", + "finalap3a", "Final Lap 3 (World, set 2)", + "finalap3bl", "Final Lap 3 (bootleg)", + "finalap3j", "Final Lap 3 (Japan)", + "finalap3jc", "Final Lap 3 (Japan - Rev C)", + "finalapr", "Final Lap R (Rev. B)", + "finalaprj", "Final Lap R (Japan Rev. C)", + "finalapro", "Final Lap R", + "finalb", "Final Blow (World)", + "finalbj", "Final Blow (Japan)", + "finalbny", "Mahjong Final Bunny [BET] (Japan)", + "finalbu", "Final Blow (US)", + "finalgdr", "Final Godori (Korea, version 2.20.5915)", + "finalizr", "Finalizer - Super Transformation", + "finalizrb", "Finalizer - Super Transformation (bootleg)", + "finallap", "Final Lap (Rev E)", + "finallapc", "Final Lap (Rev C)", + "finallapd", "Final Lap (Rev D)", + "finallapjb", "Final Lap (Japan, Rev B)", + "finallapjc", "Final Lap (Japan, Rev C)", + "finalttr", "Final Tetris", + "findlove", "Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)", + "findout", "Find Out (Version 4.04)", + "finehour", "Finest Hour (Japan)", + "finfurl", "Final Furlong (FF2 Ver. A)", + "finfurl2", "Final Furlong 2 (World)", + "finfurl2j", "Final Furlong 2 (Japan)", + "finlarch", "Final Arch (J 950714 V1.001)", + "fire_l3", "Fire! (L-3)", + "fireact", "Fire Action", + "fireactd", "Fire Action Deluxe", + "firebarr", "Fire Barrel (Japan)", + "firebatl", "Fire Battle", + "firebeas", "Firebeast (prototype)", + "firebird", "Hot Fire Birds", + "firefox", "Fire Fox (set 1)", + "firefoxa", "Fire Fox (set 2)", + "firehawk", "Fire Hawk", + "firemntn", "Fire Mountain", + "fireone", "Fire One", + "fireshrk", "Fire Shark", + "fireshrka", "Fire Shark (earlier)", + "fireshrkd", "Fire Shark (Korea, set 1, easier)", + "fireshrkdh", "Fire Shark (Korea, set 2, harder)", + "firetrap", "Fire Trap (US)", + "firetrapbl", "Fire Trap (Japan bootleg)", + "firetrapj", "Fire Trap (Japan)", + "firetrk", "Fire Truck / Smokey Joe", + "firstcl", "First Class Traveller (set 1)", + "fishfren", "Fishin' Frenzy (prototype)", + "fitegolf", "Fighting Golf (World?)", + "fitegolfu", "Fighting Golf (US)", + "fitfight", "Fit of Fighting", + "fitter", "Fitter", + "fitterbl", "Fitter (bootleg of Round-Up)", + "fiveside", "Five a Side Soccer (ver UAA)", + "fixeight", "FixEight (Europe)", + "fixeighta", "FixEight (Southeast Asia)", + "fixeightat", "FixEight (Southeast Asia, Taito license)", + "fixeightbl", "FixEight (Korea, bootleg)", + "fixeighth", "FixEight (Hong Kong)", + "fixeightht", "FixEight (Hong Kong, Taito license)", + "fixeightj", "FixEight (Japan)", + "fixeightjt", "FixEight (Japan, Taito license)", + "fixeightk", "FixEight (Korea)", + "fixeightkt", "FixEight (Korea, Taito license)", + "fixeightt", "FixEight (Europe, Taito license)", + "fixeighttw", "FixEight (Taiwan)", + "fixeighttwt", "FixEight (Taiwan, Taito license)", + "fixeightu", "FixEight (USA)", + "fixeightut", "FixEight (USA, Taito license)", + "fjbuster", "Fujiyama Buster (Japan)", + "fjholden", "FJ Holden", + "flamegun", "Flame Gunner", + "flamegunj", "Flame Gunner (Japan)", + "flash_l1", "Flash (L-1)", + "flash_t1", "Flash (T-1) Ted Estes", + "flashgal", "Flashgal (set 1)", + "flashgala", "Flashgal (set 2)", + "flashgdn", "Flash Gordon", + "flashgdnf", "Flash Gordon (French)", + "flashgdnp1", "Flash Gordon (prototype rev. 1)", + "flashgdnp2", "Flash Gordon (prototype rev. 2)", + "flashgdnv", "Flash Gordon (Vocalizer sound)", + "flicker", "Flicker (prototype)", + "flicky", "Flicky (128k Version, System 2, 315-5051)", + "flickyo", "Flicky (64k Version, System 1, 315-5051, set 1)", + "flickys1", "Flicky (64k Version, System 1, 315-5051, set 2)", + "flickys2", "Flicky (128k Version, System 2, not encrypted)", + "flight2k", "Flight 2000", + "flipjack", "Flipper Jack", + "flipmaze", "Flip Maze (V2.04J)", + "flipshot", "Battle Flip Shot", + "flipull", "Flipull (Japan)", + "flkatck", "Flak Attack (Japan)", + "flkatcka", "Flak Attack (Japan, PWB 450593 sub-board)", + "flower", "Flower (US)", + "flowerj", "Flower (Japan)", + "flstory", "The FairyLand Story", + "flstoryj", "The FairyLand Story (Japan)", + "flyball", "Flyball (rev 2)", + "flyball1", "Flyball (rev 1)", + "flyboy", "Fly-Boy", + "flyboyb", "Fly-Boy (bootleg)", + "flytiger", "Flying Tiger (set 1)", + "flytigera", "Flying Tiger (set 2)", + "fmaniac3", "Fishing Maniac 3", + "fncywld", "Fancy World - Earth of Crisis", + "fnkyfish", "Funky Fish", + "fnshark", "Flyin' Shark (bootleg of Hishou Zame)", + "foathens", "Flame of Athens", + "foodf", "Food Fight (rev 3)", + "foodf2", "Food Fight (rev 2)", + "foodfc", "Food Fight (cocktail)", + "footchmp", "Football Champ (World)", + "footchmpbl", "Football Champ (World) (bootleg)", + "forcebrk", "Force Break (bootleg)", + "forceii", "Force II", + "forgottn", "Forgotten Worlds (World)", + "forgottnu", "Forgotten Worlds (USA, B-Board 88621B-2, Rev. C)", + "forgottnu1", "Forgotten Worlds (USA, B-Board 88618B-2, Rev. C)", + "forgottnua", "Forgotten Worlds (USA, B-Board 88618B-2, Rev. A)", + "forgottnuaa", "Forgotten Worlds (USA, B-Board 88618B-2, Rev. AA)", + "formatz", "Formation Z", + "fort2b", "Fortress 2 Blue Arcade (ver 1.01 / pcb ver 3.05)", + "fort2ba", "Fortress 2 Blue Arcade (ver 1.00 / pcb ver 3.05)", + "fortecar", "Forte Card (Ver 103, English)", + "fortecrd", "Forte Card (Ver 110, Spanish)", + "fortune1", "Fortune I (PK485-S) Draw Poker", + "fotns", "Fist Of The North Star", + "fourtrax", "Four Trax", + "foxylady", "Foxy Lady", + "fpoint", "Flash Point (set 2, Japan, FD1094 317-0127A)", + "fpoint1", "Flash Point (set 1, Japan, FD1094 317-0127A)", + "fpointbj", "Flash Point (Japan, bootleg)", + "fpointbl", "Flash Point (World, bootleg)", + "fpwr2_l2", "Firepower II (L-2)", + "frankst", "Mary Shelley's Frankenstein", + "frankstg", "Mary Shelley's Frankenstein (Germany)", + "franticf", "Frantic Fred", + "freddy", "Freddy: A Nightmare on Elm Street (rev.3)", + "freddy4", "Freddy: A Nightmare on Elm Street (rev.4)", + "fredmem", "Fred Flintstones' Memory Match (World?, Ticket version, 3/17/95)", + "fredmemc", "Fred Flintstones' Memory Match (Mandarin Chinese, 3/17/95)", + "fredmemj", "Fred Flintstones' Memory Match (Japan, High Score version, 3/20/95)", + "fredmemuk", "Fred Flintstones' Memory Match (UK, 3/17/95)", + "fredmemus", "Fred Flintstones' Memory Match (US, High Score version, 3/10/95)", + "fredmesp", "Fred Flintstones' Memory Match (Spanish, 3/17/95)", + "freedom", "Freedom", + "freefall", "Freefall", + "freekick", "Free Kick (NS6201-A 1987.10)", + "freekicka", "Free Kick (NS6201-A 1987.9)", + "freekickb1", "Free Kick (bootleg set 1)", + "freekickb2", "Free Kick (bootleg set 2)", + "freekickb3", "Free Kick (bootleg set 3)", + "freeze", "Freeze", + "freezeat", "Freeze (Atari) (prototype, English voice, 96/10/25)", + "freezeat2", "Freeze (Atari) (prototype, 96/10/18)", + "freezeat3", "Freeze (Atari) (prototype, 96/10/07)", + "freezeat4", "Freeze (Atari) (prototype, 96/10/03)", + "freezeat5", "Freeze (Atari) (prototype, 96/09/20, AMOA-96)", + "freezeat6", "Freeze (Atari) (prototype, 96/09/07, Jamma-96)", + "freezeatjp", "Freeze (Atari) (prototype, Japanese voice, 96/10/25)", + "frenzy", "Frenzy", + "fresh", "Fruit Fresh (Italy)", + "friskyt", "Frisky Tom (set 1)", + "friskyta", "Frisky Tom (set 2)", + "frogf", "Frog (Falcon bootleg)", + "frogg", "Frog (Galaxian hardware)", + "frogger", "Frogger", + "froggermc", "Frogger (Moon Cresta hardware)", + "froggers", "Frog", + "froggers1", "Frogger (Sega set 1)", + "froggers2", "Frogger (Sega set 2)", + "froggrs", "Frogger (Scramble hardware)", + "frogs", "Frogs", + "fromanc2", "Taisen Idol-Mahjong Final Romance 2 (Japan)", + "fromanc4", "Taisen Mahjong Final Romance 4 (Japan)", + "fromance", "Idol-Mahjong Final Romance (Japan)", + "fromancr", "Taisen Mahjong Final Romance R (Japan)", + "frontier", "Frontier", + "frontlin", "Front Line", + "fround", "The Final Round (version M)", + "froundl", "The Final Round (version L)", + "frpwr_l2", "Firepower (L-2)", + "frpwr_l6", "Firepower (L-6)", + "frpwr_t6", "Firepower (T-6)", + "fruitbun", "Fruits & Bunny (World?)", + "fruitpc", "Fruit Land", + "fruitstb", "Fruit Star Bonus (Ver 8.20PIR)", + "fruitstr", "Fruit Star (encrypted)", + "fs_lx2", "The Flintstones (LX-2)", + "fs_lx4", "The Flintstones (LX-4)", + "fs_lx5", "The Flintstones (LX-5)", + "fs_sp2", "The Flintstones (SP-2)", + "fshark", "Flying Shark (World)", + "fsharkbt", "Flying Shark (bootleg with 8741)", + "fsoccer", "Fighting Soccer (version 4)", + "fsoccerb", "Fighting Soccer (Joystick hack bootleg)", + "fsoccerba", "Fighting Soccer (Joystick hack bootleg, alt)", + "fsoccerj", "Fighting Soccer (Japan)", + "fspiderb", "Frog & Spiders (bootleg?)", + "fstarfrc", "Final Star Force (US)", + "fstarfrcj", "Final Star Force (Japan)", + "fstation", "Fun Station Spielekoffer 9 Spiele", + "fswords", "Fighters Swords (Korean release of Samurai Shodown III)", + "ft_l3", "Fish Tales (L-3)", + "ft_l4", "Fish Tales (L-4)", + "ft_l5", "Fish Tales (L-5)", + "ft_p4", "Fish Tales (P-4)", + "ftimpact", "Fighters' Impact (Ver 2.02O)", + "ftimpactj", "Fighters' Impact (Ver 2.02J)", + "ftimpactu", "Fighters' Impact (Ver 2.02A)", + "ftimpcta", "Fighters' Impact A (Ver 2.00J)", + "ftspeed", "Faster Than Speed", + "fullthrl", "Full Throttle (Japan)", + "fun4", "Fun Four (Set 1) [TTL]", + "fun4a", "Fun Four (Set 2) [TTL]", + "funcsino", "Status Fun Casino (V1.3s)", + "funcube", "Funcube (v1.5)", + "funcube2", "Funcube 2 (v1.1)", + "funcube3", "Funcube 3 (v1.1)", + "funcube4", "Funcube 4 (v1.0)", + "funcube5", "Funcube 5 (v1.0)", + "funkball", "Funky Ball", + "funkybee", "Funky Bee", + "funkybeeb", "Funky Bee (bootleg, harder)", + "funkyfig", "The First Funky Fighter (set 1)", + "funkyfiga", "The First Funky Fighter (set 2)", + "funkyjet", "Funky Jet (World, rev 1)", + "funkyjeta", "Funky Jet (World)", + "funkyjetj", "Funky Jet (Japan, rev 2)", + "funlddlx", "Funny Land de Luxe", + "funnyfm", "Funny Farm (v1.17)", + "funnyfma", "Funny Farm (v1.26)", + "funnyfmb", "Funny Farm (v1.30)", + "funnymou", "Funny Mouse (Japan)", + "funquiz", "Fun World Quiz (Austrian)", + "funriver", "Fun River (Version 1.4R CGA)", + "funriverd1", "Fun River (Version 1.3R CGA)", + "funriverv", "Fun River (Version 1.4R Dual)", + "funybubl", "Funny Bubble", + "funybublc", "Funny Bubble (Comad version)", + "funystrp", "Funny Strip", + "futari10", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", + "futari15", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", + "futari15a", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", + "futaribl", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", + "futflash", "Future Flash", + "futrquen", "Future Queen", + "futspy", "Future Spy (315-5061)", + "futurspa", "Future Spa", + "futurwld", "Future World", + "fuudol", "Fuudol (Japan)", + "fvipers", "Fighting Vipers (Revision D)", + "fvipers2", "Fighting Vipers 2 (Revision A)", + "fx", "F-X (bootleg of S.R.D. Mission)", + "g13knd", "Golgo 13 Kiseki no Dandou (Japan, GLS1/VER.A)", + "g4u2", "Games 4 U 2 (94 5.6-0)", + "g4u3", "Games 4 U 3 (94 5.6-4)", + "g4u3a", "Games 4 U 3 (94 5.6-5)", + "g4u4", "Games 4 U 4 (94 5.6-5)", + "g4u5", "Games 4 U 5 (94 5.6-5)", + "g4u6", "Games 4 U 6 (94 5.6-5)", + "g4u7", "Games 4 U 7 (94 5.6-5a)", + "ga2", "Golden Axe: The Revenge of Death Adder (World)", + "ga2j", "Golden Axe: The Revenge of Death Adder (Japan)", + "ga2u", "Golden Axe: The Revenge of Death Adder (US)", + "gaia", "Gaia Crusaders", + "gaiapols", "Gaiapolis (ver EAF)", + "gaiapolsj", "Gaiapolis (ver JAF)", + "gaiapolsu", "Gaiapolis (ver UAF)", + "gaiden", "Ninja Gaiden (US)", + "gakupara", "Quiz Gakuen Paradise (Japan)", + "gakusai", "Mahjong Gakuensai (Japan)", + "gakusai2", "Mahjong Gakuensai 2 (Japan)", + "gal10ren", "Mahjong Gal 10-renpatsu (Japan)", + "gal3", "Galaxian 3 - Theater 6 : Project Dragoon", + "galactic", "Galactica - Batalha Espacial", + "galaga", "Galaga (Namco rev. B)", + "galaga3", "Galaga 3 (GP3 rev. D)", + "galaga3a", "Galaga 3 (GP3 rev. C)", + "galaga3b", "Galaga 3 (GP3)", + "galaga3c", "Galaga 3 (set 4)", + "galaga3m", "Galaga 3 (set 5)", + "galaga88", "Galaga '88", + "galaga88j", "Galaga '88 (Japan)", + "galagamf", "Galaga (Midway set 1 with fast shoot hack)", + "galagamk", "Galaga (Midway set 2)", + "galagamw", "Galaga (Midway set 1)", + "galagao", "Galaga (Namco)", + "galap1", "Space Invaders Galactica (galaxiana hack)", + "galap4", "Galaxian Part 4 (hack)", + "galapx", "Galaxian Part X (moonaln hack)", + "galastrm", "Galactic Storm (Japan)", + "galaxbsf", "Galaxian (bootleg, set 1)", + "galaxbsf2", "Galaxian (bootleg, set 3)", + "galaxi", "Galaxi (v2.0)", + "galaxia", "Galaxia (set 1)", + "galaxiaa", "Galaxia (set 2)", + "galaxiab", "Galaxia (set 3)", + "galaxiac", "Galaxia (set 4)", + "galaxian", "Galaxian (Namco set 1)", + "galaxiana", "Galaxian (Namco set 2)", + "galaxianbl", "Galaxian (bootleg, set 2)", + "galaxiani", "Galaxian (Irem)", + "galaxianm", "Galaxian (Midway set 1)", + "galaxianmo", "Galaxian (Midway set 2)", + "galaxiant", "Galaxian (Taito)", + "galaxrf", "Galaxian (Recreativos Franco S.A. Spanish bootleg)", + "galaxrfgg", "Galaxian Growing Galaxip / Galaxian Nave Creciente (Recreativos Franco S.A. Spanish bootleg)", + "galaxyfg", "Galaxy Fight - Universal Warriors", + "galaxygn", "Galaxy Gunners", + "galaxypi", "Galaxy", + "galaxyr", "Galaxy Ranger", + "galaxyrp", "Galaxy Ranger (Pioneer LDV1000)", + "galds", "Gals Ds - Three Dealers Casino House (bootleg?)", + "galemp", "Galaxy Empire (bootleg?)", + "galgame", "Galaxy Game", + "galgame2", "Galaxy Games StarPak 2", + "galgbios", "Galaxy Games (BIOS v1.90)", + "galhustl", "Gals Hustler", + "galivan", "Cosmo Police Galivan (12/26/1985)", + "galivan2", "Cosmo Police Galivan (12/16/1985)", + "galivan3", "Cosmo Police Galivan (12/11/1985)", + "galkaika", "Mahjong Gal no Kaika (Japan)", + "galkoku", "Mahjong Gal no Kokuhaku (Japan)", + "gallag", "Gallag", + "gallgall", "Gallagher's Gallery v2.2", + "gallop", "Gallop - Armed Police Unit (Japan)", + "galmedes", "Galmedes (Japan)", + "galpani2", "Gals Panic II (Asia)", + "galpani2e", "Gals Panic II (English)", + "galpani2e2", "Gals Panic II (English, 2 PCB ver.)", + "galpani2g", "Gals Panic II (Germany, 2 PCB ver.)", + "galpani2gs", "Gals Panic II (Germany, single PCB)", + "galpani2i", "Gals Panic II (Italy, single PCB)", + "galpani2j", "Gals Panic II (Japan)", + "galpani2t", "Gals Panic II (Taiwan)", + "galpani3", "Gals Panic 3 (Euro)", + "galpani3hk", "Gals Panic 3 (Hong Kong)", + "galpani3j", "Gals Panic 3 (Japan)", + "galpani3k", "Gals Panic 3 (Korea)", + "galpani4", "Gals Panic 4 (Japan)", + "galpani4k", "Gals Panic 4 (Korea)", + "galpanic", "Gals Panic (Unprotected)", + "galpanica", "Gals Panic (MCU Protected)", + "galpanis", "Gals Panic S - Extra Edition (Europe)", + "galpanisj", "Gals Panic S - Extra Edition (Japan)", + "galpanisk", "Gals Panic S - Extra Edition (Korea)", + "galpans2", "Gals Panic S2 (Japan)", + "galpans2a", "Gals Panic S2 (Asia)", + "galpans3", "Gals Panic S3 (Japan)", + "galpansu", "Gals Panic SU (Korea)", + "galsnew", "Gals Panic (US, EXPRO-02 PCB)", + "galsnewa", "Gals Panic (Export, EXPRO-02 PCB)", + "galsnewj", "Gals Panic (Japan, EXPRO-02 PCB)", + "galsnewk", "Gals Panic (Korea, EXPRO-02 PCB)", + "galspnbl", "Gals Pinball", + "galturbo", "Galaxian Turbo (superg hack)", + "galxwars", "Galaxy Wars (Universal set 1)", + "galxwars2", "Galaxy Wars (Universal set 2)", + "galxwarst", "Galaxy Wars (Taito?)", + "gamatron", "Gamatron", + "gamatros", "Gamatron (Sonic)", + "gambl186", "unknown 186 based gambling game (V398)", + "gambl186a", "unknown 186 based gambling game (V399)", + "gamecst2", "GameCristal (version 2.613)", + "gamecstl", "GameCristal", + "gametngk", "The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise", + "gammagic", "Game Magic", + "gamshara", "Gamshara (10021 Ver.A)", + "gamt1", "Gaminator 1 (set 1)", + "gamt10", "Gaminator 10 (set 1)", + "gamt10a", "Gaminator 10 (set 2)", + "gamt10b", "Gaminator 10 (set 3)", + "gamt10bag", "Gaminator 10 (bootleg, Bag)", + "gamt10c", "Gaminator 10 (set 4)", + "gamt10d", "Gaminator 10 (set 5)", + "gamt10e", "Gaminator 10 (set 6)", + "gamt10ent", "Gaminator 10 (bootleg, Ent)", + "gamt10f", "Gaminator 10 (set 7)", + "gamt10g", "Gaminator 10 (set 8)", + "gamt10gmult", "Gaminator 10 (bootleg, Multiloto)", + "gamt10h", "Gaminator 10 (set 9)", + "gamt10i", "Gaminator 10 (set 10)", + "gamt10j", "Gaminator 10 (set 11)", + "gamt10k", "Gaminator 10 (set 12)", + "gamt10l", "Gaminator 10 (set 13)", + "gamt10lotc", "Gaminator 10 (bootleg, C-Loto)", + "gamt10lotm", "Gaminator 10 (bootleg, Lotomatic)", + "gamt10m", "Gaminator 10 (set 14)", + "gamt10n", "Gaminator 10 (set 15)", + "gamt10o", "Gaminator 10 (set 16)", + "gamt11", "Gaminator 11 (set 1)", + "gamt11a", "Gaminator 11 (set 2)", + "gamt11b", "Gaminator 11 (set 3)", + "gamt11bmult", "Gaminator 11 (bootleg, Multiloto)", + "gamt11c", "Gaminator 11 (set 4)", + "gamt12", "Gaminator 12 (set 1)", + "gamt12a", "Gaminator 12 (set 2)", + "gamt12b", "Gaminator 12 (set 3)", + "gamt16", "Gaminator 16 (set 1)", + "gamt16a", "Gaminator 16 (set 2)", + "gamt16b", "Gaminator 16 (set 3)", + "gamt16c", "Gaminator 16 (set 4)", + "gamt16d", "Gaminator 16 (set 5)", + "gamt16e", "Gaminator 16 (set 6)", + "gamt16f", "Gaminator 16 (set 7)", + "gamt16fmult", "Gaminator 16 (bootleg, Multiloto)", + "gamt16g", "Gaminator 16 (set 8)", + "gamt16h", "Gaminator 16 (set 9)", + "gamt16i", "Gaminator 16 (set 10)", + "gamt16j", "Gaminator 16 (set 11)", + "gamt16k", "Gaminator 16 (set 12)", + "gamt16lotc", "Gaminator 16 (bootleg, C-Loto)", + "gamt17", "Gaminator 17 (set 1)", + "gamt17a", "Gaminator 17 (set 2)", + "gamt17b", "Gaminator 17 (set 3)", + "gamt18", "Gaminator 18 (set 1)", + "gamt18a", "Gaminator 18 (set 2)", + "gamt18b", "Gaminator 18 (set 3)", + "gamt18bmult", "Gaminator 18 (bootleg, Multiloto)", + "gamt18c", "Gaminator 18 (set 4)", + "gamt18d", "Gaminator 18 (set 5)", + "gamt18ent", "Gaminator 18 (bootleg, Ent)", + "gamt18lotc", "Gaminator 18 (bootleg, C-Loto)", + "gamt19", "Gaminator 19 (set 1)", + "gamt19a", "Gaminator 19 (set 2)", + "gamt19ent", "Gaminator 19 (bootleg, Ent)", + "gamt19lotc", "Gaminator 19 (bootleg, C-Loto)", + "gamt19mult", "Gaminator 19 (bootleg, Multiloto)", + "gamt1a", "Gaminator 1 (set 2)", + "gamt1b", "Gaminator 1 (set 3)", + "gamt1ent", "Gaminator 1 (bootleg, Ent)", + "gamt1lotc", "Gaminator 1 (bootleg, C-Loto)", + "gamt20", "Gaminator 20 (set 1)", + "gamt20a", "Gaminator 20 (set 2)", + "gamt20b", "Gaminator 20 (set 3)", + "gamt20ent", "Gaminator 20 (bootleg, Ent)", + "gamt20lotc", "Gaminator 20 (bootleg, C-Loto)", + "gamt20lotm", "Gaminator 20 (bootleg, Lotomatic)", + "gamt21", "Gaminator 21 (set 1)", + "gamt21a", "Gaminator 21 (set 2)", + "gamt21amult", "Gaminator 21 (bootleg, Multiloto)", + "gamt22", "Gaminator 22 (set 1)", + "gamt22a", "Gaminator 22 (set 2)", + "gamt22amult", "Gaminator 22 (bootleg, Multiloto)", + "gamt22b", "Gaminator 22 (set 3)", + "gamt23", "Gaminator 23 (set 1)", + "gamt23a", "Gaminator 23 (set 2)", + "gamt23b", "Gaminator 23 (set 3)", + "gamt29", "Gaminator 29 (set 1)", + "gamt29a", "Gaminator 29 (set 2)", + "gamt30", "Gaminator 30 (set 1)", + "gamt31", "Gaminator 31 (set 1)", + "gamt31mult", "Gaminator 31 (bootleg, Multiloto)", + "gamt4", "Gaminator 4 (set 1)", + "gamt4a", "Gaminator 4 (set 2)", + "gamt4b", "Gaminator 4 (set 3)", + "gamt4c", "Gaminator 4 (set 4)", + "gamt4d", "Gaminator 4 (set 5)", + "gamt4dbag", "Gaminator 4 (bootleg, Bag, set 1)", + "gamt4e", "Gaminator 4 (set 6)", + "gamt4ent", "Gaminator 4 (bootleg, Ent)", + "gamt4f", "Gaminator 4 (set 7)", + "gamt4fbag", "Gaminator 4 (bootleg, Bag, set 2)", + "gamt4g", "Gaminator 4 (set 8)", + "gamt4h", "Gaminator 4 (set 9)", + "gamt4hbag", "Gaminator 4 (bootleg, Bag, set 3)", + "gamt4hmult", "Gaminator 4 (bootleg, Multiloto)", + "gamt4i", "Gaminator 4 (set 10)", + "gamt4ibag", "Gaminator 4 (bootleg, Bag, set 4)", + "gamt4j", "Gaminator 4 (set 11)", + "gamt4lotc", "Gaminator 4 (bootleg, C-Loto)", + "gamt4lotca", "Gaminator 4 (C-Loto, MK4)", + "gamt4lotm", "Gaminator 4 (bootleg, Lotomatic)", + "gamt5", "Gaminator 5 (set 1)", + "gamt6", "Gaminator 6 (set 1)", + "gamt6a", "Gaminator 6 (set 2)", + "gamt6b", "Gaminator 6 (set 3)", + "gamt6c", "Gaminator 6 (set 4)", + "gamt6d", "Gaminator 6 (set 5)", + "gamt6e", "Gaminator 6 (set 6)", + "gamt6ent", "Gaminator 6 (bootleg, Ent)", + "gamt6f", "Gaminator 6 (set 7)", + "gamt6lotc", "Gaminator 6 (bootleg, C-Loto)", + "gamt7", "Gaminator 7 (set 1)", + "gamt7a", "Gaminator 7 (set 2)", + "gamt7b", "Gaminator 7 (set 3)", + "gamt7c", "Gaminator 7 (set 4)", + "gamt7d", "Gaminator 7 (set 5)", + "gamt7e", "Gaminator 7 (set 6)", + "gamt7f", "Gaminator 7 (set 7)", + "gamt7g", "Gaminator 7 (set 8)", + "gamt7h", "Gaminator 7 (set 9)", + "gamt8", "Gaminator 8 (set 1)", + "gamt8a", "Gaminator 8 (set 2)", + "gamt8b", "Gaminator 8 (set 3)", + "gamt8c", "Gaminator 8 (set 4)", + "gamt8d", "Gaminator 8 (set 5)", + "gamt8lotc", "Gaminator 8 (bootleg, C-Loto)", + "gamt9", "Gaminator 9 (set 1)", + "gamt9a", "Gaminator 9 (set 2)", + "gamt9lotc", "Gaminator 9 (bootleg, C-Loto)", + "ganbare", "Ganbare! Marine Kun (Japan 2K0411)", + "gangonta", "Ganbare! Gonta!! 2 / Party Time: Gonta the Diver II (Japan Release)", + "gangrose", "Gangster's Roses (v4.70)", + "gangwars", "Gang Wars", + "gangwarsu", "Gang Wars (US)", + "ganjaja", "Ganbare Jajamaru Saisho wa Goo / Ganbare Jajamaru Hop Step & Jump", + "ganryu", "Ganryu / Musashi Ganryuki", + "gaplus", "Gaplus (GP2 rev. B)", + "gaplusa", "Gaplus (GP2)", + "gaplusd", "Gaplus (GP2 rev D, alternate hardware)", + "garage_4", "Garage (040219 World)", + "garage_4a", "Garage (bootleg, 040219, backdoor)", + "garage_4b", "Garage (bootleg, 040219, changed version text)", + "garage_4c", "Garage (bootleg, 040219, LOTO PROGRAM V-GG2)", + "garage_5", "Garage (050311 World)", + "garage_5a", "Garage (bootleg, 050311, backdoor)", + "garage_5b", "Garage (bootleg, 050311, VIDEO GAME-1 GA01)", + "garage_5c", "Garage (bootleg, 050311, payout percentage 70)", + "garage_5d", "Garage (bootleg, 050311, LOTTOGAME (I))", + "garage_5e", "Garage (bootleg, 050311, LOTOS GA01)", + "garage_6", "Garage (070213 Russia)", + "garage_7", "Garage (070329 Russia)", + "garage_9", "Garage (090715 Entertainment)", + "gardia", "Gardia (317-0006)", + "gardiab", "Gardia (317-0007?, bootleg)", + "garogun", "Garogun Seroyang (Korea)", + "garou", "Garou - Mark of the Wolves (NGM-2530)", + "garoubl", "Garou - Mark of the Wolves (bootleg)", + "garouh", "Garou - Mark of the Wolves (NGM-2530)(NGH-2530)", + "garoup", "Garou - Mark of the Wolves (prototype)", + "garuka", "Garuka (Japan ver. W)", + "garyoret", "Garyo Retsuden (Japan)", + "gatedoom", "Gate of Doom (US revision 4)", + "gatedoom1", "Gate of Doom (US revision 1)", + "gatsbee", "Gatsbee", + "gaunt2", "Gauntlet II", + "gaunt22p", "Gauntlet II (2 Players, rev 2)", + "gaunt22p1", "Gauntlet II (2 Players, rev 1)", + "gaunt22pg", "Gauntlet II (2 Players, German)", + "gaunt2g", "Gauntlet II (German)", + "gauntdl", "Gauntlet Dark Legacy (version DL 2.52)", + "gauntdl24", "Gauntlet Dark Legacy (version DL 2.4)", + "gauntleg", "Gauntlet Legends (version 1.6)", + "gauntleg12", "Gauntlet Legends (version 1.2)", + "gauntlet", "Gauntlet (rev 14)", + "gauntlet2p", "Gauntlet (2 Players, rev 6)", + "gauntlet2pg", "Gauntlet (2 Players, German, rev 4)", + "gauntlet2pg1", "Gauntlet (2 Players, German, rev 1)", + "gauntlet2pj", "Gauntlet (2 Players, Japanese, rev 5)", + "gauntlet2pj2", "Gauntlet (2 Players, Japanese, rev 2)", + "gauntlet2pr3", "Gauntlet (2 Players, rev 3)", + "gauntletg", "Gauntlet (German, rev 10)", + "gauntletgr3", "Gauntlet (German, rev 3)", + "gauntletgr6", "Gauntlet (German, rev 6)", + "gauntletgr8", "Gauntlet (German, rev 8)", + "gauntletj", "Gauntlet (Japanese, rev 13)", + "gauntletj12", "Gauntlet (Japanese, rev 12)", + "gauntletr1", "Gauntlet (rev 1)", + "gauntletr2", "Gauntlet (rev 2)", + "gauntletr4", "Gauntlet (rev 4)", + "gauntletr5", "Gauntlet (rev 5)", + "gauntletr7", "Gauntlet (rev 7)", + "gauntletr9", "Gauntlet (rev 9)", + "gauntlets", "Gauntlet (Spanish, rev 15)", + "gaxeduel", "Golden Axe - The Duel (JUETL 950117 V1.000)", + "gberet", "Green Beret", + "gberetb", "Green Beret (bootleg)", + "gblchmp", "Global Champion (Ver 2.1A 1994/07/29)", + "gbusters", "Gang Busters (set 1)", + "gbustersa", "Gang Busters (set 2)", + "gcastle", "Golden Castle (prototype?)", + "gchgchmp", "Gachaga Champ (GE877 VER. JAB)", + "gcpinbal", "Grand Cross", + "gdarius", "G-Darius (Ver 2.01J)", + "gdarius2", "G-Darius Ver.2 (Ver 2.03J)", + "gdariusb", "G-Darius (Ver 2.02A)", + "gdfs", "Mobil Suit Gundam Final Shooting (Japan)", + "gdvsgd", "Gundam vs. Gundam", + "geebee", "Gee Bee (Japan)", + "geebeeb", "Gee Bee (Europe)", + "geebeeg", "Gee Bee (US)", + "gegege", "GeGeGe no Kitarou Youkai Slot", + "geimulti", "GEI Multi Game", + "geishanz", "Geisha (0101408V, New Zealand)", + "gekiretu", "Quiz Gekiretsu Scramble (Japan)", + "gekiridn", "Gekirindan (Ver 2.3O 1995/09/21)", + "gekiridnj", "Gekirindan (Ver 2.3J 1995/09/21)", + "gekisha", "Mahjong Gekisha", + "gekisou", "Gekisou (Japan)", + "gekitsui", "Gekitsui Oh (Japan)", + "gekpurya", "Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev C) (GDT-0008C)", + "gemini", "Gemini Wing (Japan)", + "gemini2k", "Gemini 2000", + "gemini2k1", "Gemini 2000 (alternate set)", + "genesisp", "Genesis", + "genie", "Genie", + "geniep", "Genie (Pinball)", + "genix", "Genix Family", + "genpeitd", "Genpei ToumaDen", + "gensitou", "Genshi-Tou 1930's", + "geostorm", "Geo Storm (Japan)", + "gepoker", "Poker (Version 50.02 ICB, set 1)", + "gepoker1", "Poker (Version 50.02 ICB, set 2)", + "gepoker2", "Poker (Version 50.02 ICB, set 3)", + "getbass", "Get Bass", + "getrich", "Get Rich (Version 1.0.1)", + "getstarb1", "Get Star (bootleg set 1)", + "getstarb2", "Get Star (bootleg set 2)", + "getstarj", "Get Star (Japan)", + "gfire2", "Golden Fire II", + "gforce2", "Galaxy Force 2", + "gforce2j", "Galaxy Force 2 (Japan)", + "gforce2ja", "Galaxy Force 2 (Japan, Rev A)", + "ggate", "Golden Gate (set 1) (Bingo)", + "ggatea", "Golden Gate (set 2) (Bingo)", + "ggconnie", "Go! Go! Connie chan Jaka Jaka Janken", + "gghost", "Goalie Ghost", + "ggisuka", "Guilty Gear Isuka", + "ggram2", "Giant Gram: All Japan Pro Wrestling 2 (JPN, USA, EXP, KOR, AUS)", + "ggreats2", "Golfing Greats 2 (ver JAC)", + "gground", "Gain Ground (World, 3 Players, Floppy Based, FD1094 317-0058-03d Rev A)", + "ggroundj", "Gain Ground (Japan, 2 Players, Floppy Based, FD1094 317-0058-03b)", + "ggx", "Guilty Gear X (JPN)", + "ggx15", "Guilty Gear X ver. 1.5", + "ggxx", "Guilty Gear XX (GDL-0011)", + "ggxxac", "Guilty Gear XX Accent Core (GDL-0041)", + "ggxxrl", "Guilty Gear XX #Reload (Rev A) (GDL-0019A)", + "ggxxsla", "Guilty Gear XX Slash (Rev A) (GDL-0033A)", + "ghlpanic", "Ghoul Panic (Asia, OB2/VER.A)", + "ghoshunt", "Ghost Hunter", + "ghostb", "The Real Ghostbusters (US 2 Players, revision 2)", + "ghostb2a", "The Real Ghostbusters (US 2 Players)", + "ghostb3", "The Real Ghostbusters (US 3 Players)", + "ghostlop", "Ghostlop (prototype)", + "ghostmun", "Ghost Muncher", + "ghostsqu", "Ghost Squad (Rev A) (GDX-0012A)", + "ghouls", "Ghouls'n Ghosts (World)", + "ghoulsu", "Ghouls'n Ghosts (USA)", + "ghox", "Ghox (spinner)", + "ghoxj", "Ghox (joystick)", + "ghunter", "Gang Hunter (Spain)", + "ghv101", "Goofy Hoops", + "gi_l3", "Gilligan's Island (L-3)", + "gi_l4", "Gilligan's Island (L-4)", + "gi_l6", "Gilligan's Island (L-6)", + "gi_l9", "Gilligan's Island (L-9)", + "gigaman2", "Giga Man 2: The Power Fighters (bootleg of Mega Man 2: The Power Fighters)", + "gigandes", "Gigandes", + "gigandesa", "Gigandes (earlier)", + "gigas", "Gigas (MC-8123, 317-5002)", + "gigasb", "Gigas (bootleg)", + "gigasm2b", "Gigas Mark II (bootleg)", + "gigawing", "Giga Wing (USA 990222)", + "gigawinga", "Giga Wing (Asia 990222)", + "gigawingb", "Giga Wing (Brazil 990222)", + "gigawingd", "Giga Wing (USA 990222 Phoenix Edition) (bootleg)", + "gigawingh", "Giga Wing (Hispanic 990222)", + "gigawingj", "Giga Wing (Japan 990223)", + "gigawingjd", "Giga Wing (Japan 990223 Phoenix Edition) (bootleg)", + "gijoe", "G.I. Joe (World, EAB, set 1)", + "gijoea", "G.I. Joe (World, EB8, prototype?)", + "gijoej", "G.I. Joe (Japan, JAA)", + "gijoeu", "G.I. Joe (US, UAB)", + "gimeabrk", "Gimme A Break (7/7/85)", + "ginganin", "Ginga NinkyouDen (set 1)", + "ginganina", "Ginga NinkyouDen (set 2)", + "ginkun", "Ganbare Ginkun", + "gionbana", "Gionbana (Japan 890120)", + "girotutt", "GiroTutto", + "gjspace", "Gekitoride-Jong Space (10011 Ver.A)", + "gl_coc", "Carry On Clubbin' (Global) (v3.0) (Stealth)", + "gl_coc29", "Carry On Clubbin' (Global) (v2.9) (Stealth)", + "gl_coc29p", "Carry On Clubbin' (Global) (v2.9 Protocol) (Stealth)", + "gl_cocp", "Carry On Clubbin' (Global) (v3.0 Protocol) (Stealth)", + "gl_dow", "Deals On Wheels (Global) (v1.4) (Stealth)", + "gl_dowcl", "Deals On Wheels Club (Global) (v1.6) (Stealth)", + "gl_dowclp", "Deals On Wheels Club (Global) (v1.6 Protocol) (Stealth)", + "gl_dowp", "Deals On Wheels (Global) (v1.4 Protocol) (Stealth)", + "gl_grncl", "Grid Runner Club (Global) (Stealth?) (set 1)", + "gl_grncla", "Grid Runner Club (Global) (Stealth?) (set 2)", + "gl_hbh", "Heartbreak Hotel (Global) (v1.0) (Stealth)", + "gl_hbhcl", "Heartbreak Hotel Club (Global) (v1.9) (Stealth)", + "gl_hbhcla", "Heartbreak Hotel Club (Global) (Set 2) (Stealth)", + "gl_hbhclp", "Heartbreak Hotel Club (Global) (v1.9 Protocol) (Stealth)", + "gl_snbev", "Saturday Night Beaver (Global) (Stealth?) (set 1)", + "gl_snbeva", "Saturday Night Beaver (Global) (Stealth?) (set 2)", + "gl_uyr", "Up Yer Riggin Club (Global) (v2.8) (Stealth)", + "gl_uyrp", "Up Yer Riggin Club (Global) (v2.8 Protocol) (Stealth)", + "gl_wywh", "Wish You Were Here Club (Global) (v2.9) (Stealth)", + "gl_wywh24", "Wish You Were Here Club (Global) (v2.4) (Stealth)", + "gl_wywh24p", "Wish You Were Here Club (Global) (v2.4 Protocol) (Stealth)", + "gl_wywhp", "Wish You Were Here Club (Global) (v2.9 Protocol) (Stealth)", + "gladiatp", "Gladiators", + "gladiatr", "Gladiator (US)", + "glass", "Glass (Ver 1.1)", + "glass10", "Glass (Ver 1.0)", + "glassbrk", "Glass (Ver 1.0, Break Edition)", + "gldarrow", "Golden Arrow (Standard G8-03)", + "gldncrwn", "Golden Crown (Dutch, Game Card 95-752-011)", + "gldneye", "Goldeneye", + "gldnpkr", "Golden Poker (8VXEC037, New Zealand)", + "glfgreat", "Golfing Greats", + "glfgreatj", "Golfing Greats (Japan)", + "gloc", "G-LOC Air Battle (US)", + "glocr360", "G-LOC R360", + "glpracr", "Gallop Racer (English Ver 10.17.K)", + "glpracr2", "Gallop Racer 2 (USA)", + "glpracr2j", "Gallop Racer 2 (Japan)", + "glpracr2l", "Gallop Racer 2 Link HW (Japan)", + "glpracr3", "Gallop Racer 3 (Japan)", + "glpracrj", "Gallop Racer (Japanese Ver 9.01.12)", + "gluck2", "Good Luck II", + "gmahou", "Great Mahou Daisakusen (Japan 000121)", + "gmgalax", "Ghostmuncher Galaxian (bootleg)", + "gmine_l2", "Gold Mine (Shuffle) (L-2)", + "gmissile", "Guided Missile", + "gnbarich", "Gunbarich", + "gng", "Ghosts'n Goblins (World? set 1)", + "gnga", "Ghosts'n Goblins (World? set 2)", + "gngbl", "Ghosts'n Goblins (bootleg with Cross)", + "gngblita", "Ghosts'n Goblins (Italian bootleg, harder)", + "gngc", "Ghosts'n Goblins (World? set 3)", + "gngprot", "Ghosts'n Goblins (prototype)", + "gngt", "Ghosts'n Goblins (US)", + "gnome", "Gnome (070906 Russia)", + "gnome_10", "Gnome (100326 Lottery)", + "gnome_11", "Gnome (100326 Entertainment)", + "gnome_12", "Gnome (100326 Russia)", + "gnome_2", "Gnome (071115 Russia)", + "gnome_2a", "Gnome (bootleg, 071115, banking address hack)", + "gnome_3", "Gnome (080303 World)", + "gnome_3a", "Gnome (bootleg, 080303, banking address hack)", + "gnome_3b", "Gnome (bootleg, 080303, banking address hack, payout percentage 45)", + "gnome_3c", "Gnome (bootleg, 080303, banking address hack, payout percentage 60)", + "gnome_4", "Gnome (090402 Russia)", + "gnome_5", "Gnome (090406 World)", + "gnome_5a", "Gnome (bootleg, 090406, banking address hack, payout percentage 70)", + "gnome_5b", "Gnome (bootleg, 090406, LOTTOGAME (I))", + "gnome_7", "Gnome (090708 Lottery)", + "gnome_9", "Gnome (100326 World)", + "gnomea", "Gnome (bootleg, 070906, banking address hack set 1)", + "gnomeb", "Gnome (bootleg, 070906, banking address hack set 2)", + "gnomec", "Gnome (bootleg, 070906, banking address hack set 3)", + "gnomed", "Gnome (bootleg, 070906, VIDEO GAME-1 GN01)", + "gnomee", "Gnome (bootleg, 070906, LOTOS GN01)", + "gnr_300", "Guns N Roses (3.00)", + "go2000", "Go 2000", + "goal92", "Goal! '92", + "goaltogo", "Goal To Go", + "goalx3", "Goal! Goal! Goal!", + "gobyrc", "Go By RC (V2.03O)", + "godzilla", "Godzilla (Japan)", + "godzillp", "Godzilla (Pinball)", + "gogold", "Go For The Gold (Japan)", + "gogomile", "Go Go! Mile Smile", + "gogomilej", "Susume! Mile Smile (Japan)", + "goindol", "Goindol (World)", + "goindolk", "Goindol (Korea)", + "goindolu", "Goindol (US)", + "goinnuts", "Goin' Nuts", + "goketsuj", "Goketsuji Ichizoku: Matsuri Senzo Kuyou (v200906230)", + "gokuparo", "Gokujyou Parodius (ver JAD)", + "goldball", "Gold Ball (set 1)", + "goldballn", "Gold Ball (set 2)", + "goldbug", "Gold Bug", + "goldcity", "Gold City (Russia) (Atronic)", + "goldcue", "Golden Cue", + "goldenc", "Golden Canaries (1VXFC5462, New Zealand)", + "goldfish", "Gold Fish (020903, prototype)", + "goldfrui", "Gold Fruit", + "goldgame", "Golden Game (Bingo)", + "goldgkit1", "Golden Game Kit 1 Generation (Bingo)", + "goldgkitb", "Golden Game Kit Bingo Stake 6/10 (Bingo)", + "goldglen", "Golden Glenn (Russia) (Atronic)", + "goldgnew", "Golden Game Bingo New (Bingo)", + "goldgstake", "Golden Game Bingo Stake 6/10 (Bingo)", + "goldmedl", "Gold Medalist (set 1)", + "goldmedla", "Gold Medalist (set 2)", + "goldmedlb", "Gold Medalist (bootleg)", + "goldnaxe", "Golden Axe (set 6, US, 8751 317-123A)", + "goldnaxe1", "Golden Axe (set 1, World, FD1094 317-0110)", + "goldnaxe2", "Golden Axe (set 2, US, 8751 317-0112)", + "goldnaxe3", "Golden Axe (set 3, World, FD1094 317-0120)", + "goldnaxeb1", "Golden Axe (encrypted bootleg)", + "goldnaxeb2", "Golden Axe (bootleg)", + "goldnaxej", "Golden Axe (set 4, Japan, FD1094 317-0121)", + "goldnaxeu", "Golden Axe (set 5, US, FD1094 317-0122)", + "goldnpkb", "Golden Poker Double Up (Mini Boy)", + "goldnpkr", "Golden Poker Double Up (Big Boy)", + "goldprmd", "Golden Pyramids (MV4091, USA)", + "goldstar", "Golden Star", + "goldstbl", "Golden Star (Blue version)", + "goldwing", "Gold Wings", + "golgo13", "Golgo 13 (Japan, GLG1/VER.A)", + "gollygho", "Golly! Ghost!", + "gomoku", "Gomoku Narabe Renju", + "gondo", "Gondomania (US)", + "gonefsh2", "Gone Fishing 2", + "good", "Good (Korea)", + "goodejan", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", + "goodejana", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", + "goodluck", "Good Luck", + "goonies", "Vs. The Goonies (set E)", + "gorf", "Gorf", + "gorfpgm1", "Gorf (program 1)", + "gorfpgm1g", "Gorf (program 1, with German Language ROM)", + "gork", "Gork", + "gorkans", "Gorkans", + "gotcha", "Got-cha Mini Game Festival", + "gotya", "Got-Ya (12/24/1981, prototype?)", + "gowcaizr", "Voltage Fighter - Gowcaizer / Choujin Gakuen Gowcaizer", + "gp2quiz", "Gals Panic II - Quiz Version", + "gp2se", "Gals Panic II' - Special Edition (Japan)", + "gp98", "Grand Prix '98 (V100K)", + "gp_110", "Model 110", + "gpgolf", "Golden Par Golf (Joystick, V1.1)", + "gpilots", "Ghost Pilots (NGM-020)(NGH-020)", + "gpilotsh", "Ghost Pilots (NGH-020)(US)", + "gprider", "GP Rider (World, FD1094 317-0163)", + "gpriderj", "GP Rider (Japan, FD1094 317-0161)", + "gprideru", "GP Rider (US, FD1094 317-0162)", + "gprix", "Grand Prix (4.50)", + "gprix_301", "Grand Prix (3.01)", + "gprix_340", "Grand Prix (3.40)", + "gprix_350", "Grand Prix (3.50)", + "gprix_352", "Grand Prix (3.52)", + "gprix_400", "Grand Prix (4.00)", + "gprixf", "Grand Prix (4.50 France)", + "gprixf_301", "Grand Prix (3.01 France)", + "gprixf_340", "Grand Prix (3.40 France)", + "gprixf_350", "Grand Prix (3.50 France)", + "gprixf_352", "Grand Prix (3.52 France)", + "gprixf_400", "Grand Prix (4.00 France)", + "gprixg", "Grand Prix (4.50 Germany)", + "gprixg_301", "Grand Prix (3.01 Germany)", + "gprixg_340", "Grand Prix (3.40 Germany)", + "gprixg_350", "Grand Prix (3.50 Germany)", + "gprixg_352", "Grand Prix (3.52 Germany)", + "gprixg_400", "Grand Prix (4.00 Germany)", + "gprixi", "Grand Prix (4.50 Italy)", + "gprixi_301", "Grand Prix (3.01 Italy)", + "gprixi_340", "Grand Prix (3.40 Italy)", + "gprixi_350", "Grand Prix (3.50 Italy)", + "gprixi_352", "Grand Prix (3.52 Italy)", + "gprixi_400", "Grand Prix (4.00 Italy)", + "gprixl", "Grand Prix (4.50 Spain)", + "gprixl_301", "Grand Prix (3.01 Spain)", + "gprixl_340", "Grand Prix (3.40 Spain)", + "gprixl_350", "Grand Prix (3.50 Spain)", + "gprixl_352", "Grand Prix (3.52 Spain)", + "gprixl_400", "Grand Prix (4.00 Spain)", + "gpworld", "GP World", + "gq863", "Twinkle System", + "gradius", "Gradius (Japan, ROM version)", + "gradius2", "Gradius II - GOFER no Yabou (Japan New Ver.)", + "gradius2a", "Gradius II - GOFER no Yabou (Japan Old Ver.)", + "gradius2b", "Gradius II - GOFER no Yabou (Japan Older Ver.)", + "gradius3", "Gradius III (World, program code R)", + "gradius3a", "Gradius III (Asia)", + "gradius3j", "Gradius III (Japan, program code S)", + "gradius4", "Gradius 4: Fukkatsu", + "grainbow", "SD Gundam Sangokushi Rainbow Tairiku Senki", + "gram2000", "Giant Gram 2000 (JPN, USA, EXP, KOR, AUS)", + "grancan", "Grand Canyon (Russia) (Extrema)", + "grancapi", "Gran Capitan (Version 3)", + "grand_l4", "Grand Lizard (L-4)", + "grandprx", "Grand Prix", + "granny", "Granny and the Gators", + "granslam", "Grand Slam", + "granslam4", "Grand Slam (4 Players)", + "grasspin", "Grasspin", + "gratia", "Gratia - Second Earth (92047-01 version)", + "gratiaa", "Gratia - Second Earth (91022-10 version)", + "gravitar", "Gravitar (version 3)", + "gravitar2", "Gravitar (version 2)", + "gravp", "Gravitar (prototype)", + "grchamp", "Grand Champion", + "grdforce", "Guardian Force (JUET 980318 V0.105)", + "grdian", "Guardian (US)", + "grdians", "Guardians / Denjin Makai II", + "grdnstrm", "Guardian Storm (horizontal, not encrypted)", + "grdnstrmg", "Guardian Storm (Germany)", + "grdnstrmk", "Jeon Sin - Guardian Storm (Korea)", + "grdnstrmv", "Guardian Storm (vertical)", + "greatgun", "Great Guns", + "greatgur", "Great Gurianos (Japan?)", + "greenber", "Green Beret (Irem)", + "grescue", "Galaxy Rescue", + "grgar_l1", "Gorgar (L-1)", + "grgar_t1", "Gorgar (T-1)", + "gridiron", "Gridiron Fight", + "gridlee", "Gridlee", + "griffon", "Griffon (bootleg of Phoenix)", + "grindstm", "Grind Stormer", + "grindstma", "Grind Stormer (older set)", + "grmatch", "Grudge Match (Yankee Game Technology)", + "grndtour", "Grand Tour", + "grobda", "Grobda (New Ver.)", + "grobda2", "Grobda (Old Ver. set 1)", + "grobda3", "Grobda (Old Ver. set 2)", + "groovef", "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", + "groundfx", "Ground Effects / Super Ground Effects (Japan)", + "growl", "Growl (World)", + "growlp", "Growl (World, prototype)", + "growlu", "Growl (US)", + "grtesoro", "Gran Tesoro? / Play 2000 (v5.01) (Italy)", + "grtesoro4", "Gran Tesoro? / Play 2000 (v4.0) (Italy)", + "grudge", "Grudge Match (prototype)", + "gryzor", "Gryzor (set 1)", + "gryzor1", "Gryzor (set 2)", + "gs4002", "Selection (Version 40.02TMB, set 1)", + "gs4002a", "Selection (Version 40.02TMB, set 2)", + "gs_l3", "The Bally Game Show (L-3)", + "gs_l4", "The Bally Game Show (L-4)", + "gseeker", "Grid Seeker: Project Storm Hammer (Ver 1.3O)", + "gseekerj", "Grid Seeker: Project Storm Hammer (Ver 1.3J)", + "gseekeru", "Grid Seeker: Project Storm Hammer (Ver 1.3A)", + "gslgr94j", "Great Sluggers '94 (Japan)", + "gslgr94u", "Great Sluggers '94", + "gslugrsj", "Great Sluggers (Japan)", + "gstream", "G-Stream G2020", + "gstrik2", "Grand Striker 2 (Europe and Oceania)", + "gstrik2j", "Grand Striker 2 (Japan)", + "gstriker", "Grand Striker", + "gstrikera", "Grand Striker (Americas)", + "gstrikerj", "Grand Striker (Japan)", + "gsword", "Great Swordsman (World?)", + "gsword2", "Great Swordsman (Japan?)", + "gt103a1", "Trivia (Unsorted question roms)", + "gt103aa", "Trivia (Version 1.03a Alt questions 1)", + "gt103ab", "Trivia (Version 1.03a Alt questions 2)", + "gt103asx", "Trivia (Version 1.03a Sex questions)", + "gt2k", "Golden Tee 2K (v1.00)", + "gt2kp100", "Golden Tee 2K (v1.00) (alt protection)", + "gt2ks100", "Golden Tee 2K (v1.00S)", + "gt2kt500", "Golden Tee 2K Tournament (v5.00)", + "gt3d", "Golden Tee 3D Golf (v1.93N)", + "gt3dl19", "Golden Tee 3D Golf (v1.9L)", + "gt3dl191", "Golden Tee 3D Golf (v1.91L)", + "gt3dl192", "Golden Tee 3D Golf (v1.92L)", + "gt3ds192", "Golden Tee 3D Golf (v1.92S)", + "gt3dt211", "Golden Tee 3D Golf Tournament (v2.11)", + "gt3dt231", "Golden Tee 3D Golf Tournament (v2.31)", + "gt3dv14", "Golden Tee 3D Golf (v1.4)", + "gt3dv15", "Golden Tee 3D Golf (v1.5)", + "gt3dv16", "Golden Tee 3D Golf (v1.6)", + "gt3dv17", "Golden Tee 3D Golf (v1.7)", + "gt3dv18", "Golden Tee 3D Golf (v1.8)", + "gt507uk", "Trivia (UK Version 5.07)", + "gt97", "Golden Tee '97 (v1.30)", + "gt97s121", "Golden Tee '97 (v1.21S)", + "gt97t240", "Golden Tee '97 Tournament (v2.40)", + "gt97t243", "Golden Tee '97 Tournament (v2.43)", + "gt97v120", "Golden Tee '97 (v1.20)", + "gt97v121", "Golden Tee '97 (v1.21)", + "gt97v122", "Golden Tee '97 (v1.22)", + "gt98", "Golden Tee '98 (v1.10)", + "gt98s100", "Golden Tee '98 (v1.00S)", + "gt98t303", "Golden Tee '98 Tournament (v3.03)", + "gt98v100", "Golden Tee '98 (v1.00)", + "gt99", "Golden Tee '99 (v1.00)", + "gt99s100", "Golden Tee '99 (v1.00S)", + "gt99t400", "Golden Tee '99 Tournament (v4.00)", + "gtclassc", "Golden Tee Classic (v1.00)", + "gtclasscp", "Golden Tee Classic (v1.00) (alt protection)", + "gtclasscs", "Golden Tee Classic (v1.00S)", + "gtdiamond", "Golden Tee Diamond Edition Tournament (v3.05T ELC)", + "gteikob2", "Gingateikoku No Gyakushu (bootleg set 2)", + "gteikokb", "Gingateikoku No Gyakushu (bootleg set 1)", + "gteikoku", "Gingateikoku No Gyakushu", + "gtfore02", "Golden Tee Fore! 2002 (v2.01.04 UMV)", + "gtfore02o", "Golden Tee Fore! 2002 (v2.00.00)", + "gtfore04", "Golden Tee Fore! 2004", + "gtfore05", "Golden Tee Fore! 2005", + "gtfrk10m", "Guitar Freaks 10th Mix (G*D10 VER. JAB)", + "gtfrk10ma", "Guitar Freaks 10th Mix (G*D10 VER. JAA)", + "gtfrk10mb", "Guitar Freaks 10th Mix eAmusement (G*D10 VER. JBA)", + "gtfrk11m", "Guitar Freaks 11th Mix (G*D39 VER. JAA)", + "gtfrk3ma", "Guitar Freaks 3rd Mix (GE949 VER. JAB)", + "gtfrk3mb", "Guitar Freaks 3rd Mix - security cassette versionup (949JAZ02)", + "gtg", "Golden Tee Golf (Joystick, v3.1)", + "gtg2", "Golden Tee Golf II (Trackball, V2.2)", + "gtg2j", "Golden Tee Golf II (Joystick, V1.0)", + "gtg2t", "Golden Tee Golf II (Trackball, V1.1)", + "gtgt", "Golden Tee Golf (Trackball, v2.0)", + "gtgt1", "Golden Tee Golf (Trackball, v1.0)", + "gticlub", "GTI Club (ver EAA)", + "gticlub2", "GTI Club 2 (ver JAB)", + "gticlub2ea", "GTI Club 2 (ver EAA)", + "gticluba", "GTI Club (ver AAA)", + "gticlubj", "GTI Club (ver JAA)", + "gticlubu", "GTI Club (ver UAA)", + "gtipoker", "GTI Poker", + "gtipokra", "GTI Poker? (SMS hardware)", + "gtmr", "1000 Miglia: Great 1000 Miles Rally (94/07/18)", + "gtmr2", "Mille Miglia 2: Great 1000 Miles Rally (95/05/24)", + "gtmr2a", "Mille Miglia 2: Great 1000 Miles Rally (95/04/04)", + "gtmr2u", "Great 1000 Miles Rally 2 USA (95/05/18)", + "gtmra", "1000 Miglia: Great 1000 Miles Rally (94/06/13)", + "gtmre", "Great 1000 Miles Rally: Evolution Model!!! (94/09/06)", + "gtmrusa", "Great 1000 Miles Rally: U.S.A Version! (94/09/06)", + "gtrfrk2m", "Guitar Freaks 2nd Mix Ver 1.01 (GQ883 VER. JAD)", + "gtrfrk3m", "Guitar Freaks 3rd Mix (GE949 VER. JAC)", + "gtrfrk4m", "Guitar Freaks 4th Mix (G*A24 VER. JAA)", + "gtrfrk5m", "Guitar Freaks 5th Mix (G*A26 VER. JAA)", + "gtrfrk6m", "Guitar Freaks 6th Mix (G*B06 VER. JAA)", + "gtrfrk7m", "Guitar Freaks 7th Mix (G*B17 VER. JAA)", + "gtrfrk8m", "Guitar Freaks 8th Mix power-up ver. (G*C08 VER. JBA)", + "gtrfrk8ma", "Guitar Freaks 8th Mix (G*C08 VER. JAA)", + "gtrfrk9m", "Guitar Freaks 9th Mix (G*C39 VER. JAA)", + "gtrfrks", "Guitar Freaks (GQ886 VER. EAC)", + "gtrfrksa", "Guitar Freaks (GQ886 VER. AAC)", + "gtrfrksj", "Guitar Freaks (GQ886 VER. JAC)", + "gtrfrksu", "Guitar Freaks (GQ886 VER. UAC)", + "gtroppo", "Gone Troppo (1VXEC542, New Zealand)", + "gtroyal", "Golden Tee Royal Edition Tournament (v4.02T EDM)", + "gts1", "System 1", + "gts1s", "System 1 with sound board", + "gtsers1", "Trivia (Questions Series 1)", + "gtsers10", "Trivia (Questions Series 10)", + "gtsers10a", "Trivia (Questions Series 10 Alt Question Rom)", + "gtsers11", "Trivia (Questions Series 11)", + "gtsers11a", "Trivia (Questions Series 11 Alt Question Rom)", + "gtsers12", "Trivia (Questions Series 12)", + "gtsers14", "Trivia (Questions Series 14)", + "gtsers15", "Trivia (Questions Series 15)", + "gtsers2", "Trivia (Questions Series 2)", + "gtsers3", "Trivia (Questions Series 3)", + "gtsers4", "Trivia (Questions Series 4)", + "gtsers5", "Trivia (Questions Series 5)", + "gtsers7", "Trivia (Questions Series 7)", + "gtsers8", "Trivia (Questions Series 8)", + "gtsers9", "Trivia (Questions Series 9)", + "gtsersa", "Trivia (Alt revision questions set 1)", + "gtsersb", "Trivia (Alt revision questions set 2)", + "gtsupreme", "Golden Tee Supreme Edition Tournament (v5.10T ELC S)", + "guab", "Give us a Break (3rd edition)", + "guab21", "Give us a Break (21st edition)", + "guab3a", "Give us a Break (3rd edition alt?)", + "guab4", "Give us a Break (4th edition)", + "guab43", "Give us a Break (43rd edition)", + "guab6", "Give us a Break (6th edition)", + "guab6a", "Give us a Break (6th edition alt?)", + "guab7", "Give us a Break (7th edition)", + "guardian", "Guardians of the 'Hood", + "guiness", "The Guiness (Japan)", + "gulfstrm", "Gulf Storm (set 1)", + "gulfstrma", "Gulf Storm (set 2)", + "gulfstrmb", "Gulf Storm (set 3)", + "gulfstrmm", "Gulf Storm (Media Shoji)", + "gulfwar2", "Gulf War II (set 1)", + "gulfwar2a", "Gulf War II (set 2)", + "gumbo", "Gumbo", + "gunbalina", "Gunbalina (Japan, GNN1 Ver.A)", + "gunball", "Gun Ball (Japan)", + "gunbarl", "Gunbarl (Japan, GNB4/VER.A)", + "gunbird", "Gunbird (World)", + "gunbird2", "Gunbird 2", + "gunbirdj", "Gunbird (Japan)", + "gunbirdk", "Gunbird (Korea)", + "gunblade", "Gunblade NY (Revision A)", + "gunbuletj", "Gun Bullet (Japan, GN1)", + "gunbuletw", "Gun Bullet (World, GN3 Rev B)", + "gunbustr", "Gunbuster (World)", + "gunbustrj", "Gunbuster (Japan)", + "gunbustru", "Gunbuster (US)", + "gunchamp", "Gun Champ", + "gunchamps", "Gun Champ (newer, Super Shot hardware)", + "gundamex", "Mobile Suit Gundam EX Revue", + "gundamos", "Gundam Battle Operating Simulator (GDX-0013)", + "gundealr", "Gun Dealer", + "gundealra", "Gun Dealer (alt card set)", + "gundealrt", "Gun Dealer (Japan)", + "gundhara", "Gundhara", + "gundl94", "Gun Dealer '94", + "gundmct", "Mobile Suit Gundam: Federation Vs. Zeon (2001-02-08)", + "gundmgd", "Mobile Suit Gundam: Federation Vs. Zeon (GDL-0001)", + "gundmxgd", "Mobile Suit Gundam: Federation Vs. Zeon DX (GDL-0006)", + "gundzaft", "Gundam Seed: Federation vs. Z.A.F.T. (SED1 Ver. A)", + "gunfight", "Gun Fight (set 1)", + "gunfighto", "Gun Fight (set 2)", + "gunforc2", "Gun Force II (US)", + "gunforce", "Gunforce - Battle Fire Engulfed Terror Island (World)", + "gunforcej", "Gunforce - Battle Fire Engulfed Terror Island (Japan)", + "gunforceu", "Gunforce - Battle Fire Engulfed Terror Island (US)", + "gunfront", "Gun & Frontier (World)", + "gunfrontj", "Gun Frontier (Japan)", + "gunhard", "Gun Hard (Japan)", + "gunhohki", "Mahou Keibitai Gun Hohki (Japan)", + "gunlock", "Gunlock (Ver 2.3O 1994/01/20)", + "gunman", "Gunman [TTL]", + "gunmania", "GunMania (GL906 VER. JAA)", + "gunmast", "Gun Master", + "gunnail", "GunNail (28th May. 1992)", + "gunnrose", "Guns and Roses (C606191SMP, Australia)", + "gunpey", "Gunpey (Japan)", + "gunsmoke", "Gun.Smoke (World)", + "gunsmokej", "Gun.Smoke (Japan)", + "gunsmokeu", "Gun.Smoke (US set 1)", + "gunsmokeua", "Gun.Smoke (US set 2)", + "gunsur2", "Gun Survivor 2 Biohazard Code: Veronica (BHF1 Ver. E)", + "gunsur2e", "Gun Survivor 2 Biohazard Code: Veronica (BHF2 Ver. E)", + "gunwars", "Gunmen Wars (GM1 Ver. B)", + "gunwarsa", "Gunmen Wars (GM1 Ver. A)", + "gururin", "Gururin", + "gussun", "Gussun Oyoyo (Japan)", + "gutangtn", "Guttang Gottong", + "guts", "Guts n' Glory (prototype)", + "gutsn", "Guts'n (Japan)", + "guttangt", "Guttang Gottong (bootleg on Galaxian type hardware)", + "guwange", "Guwange (Japan, Master Ver. 99/06/24)", + "guwanges", "Guwange (Japan, Special Ver. 00/07/07)", + "guzzler", "Guzzler", + "guzzlers", "Guzzler (Swimmer Conversion)", + "gvrxpsup", "Global VR XP OS Update/Install - 06/11/02", + "gvrxpsys", "Global VR XP OS Install - 09/30/01", + "gw_l1", "The Getaway: High Speed II (L-1)", + "gw_l2", "The Getaway: High Speed II (L-2)", + "gw_l3", "The Getaway: High Speed II (L-3)", + "gw_l5", "The Getaway: High Speed II (L-5)", + "gw_p7", "The Getaway: High Speed II (P-7)", + "gw_pc", "The Getaway: High Speed II (P-C)", + "gwar", "Guerrilla War (US)", + "gwara", "Guerrilla War (Version 1)", + "gwarb", "Guerrilla War (Joystick hack bootleg)", + "gwarfare", "Global Warfare", + "gwarj", "Guevara (Japan)", + "gwarrior", "Galactic Warriors", + "gwing2", "Giga Wing 2 (JPN, USA, EXP, KOR, AUS)", + "gwinggen", "Giga Wing Generations (v2.02J)", + "gypmagic", "Gypsy Magic (Konami Endeavour)", + "gypsyjug", "Gypsy Juggler", + "gyrodine", "Gyrodine", + "gyrodinet", "Gyrodine (Taito Corporation license)", + "gyruss", "Gyruss", + "gyrussb", "Gyruss (bootleg?)", + "gyrussce", "Gyruss (Centuri)", + "hachamf", "Hacha Mecha Fighter (19th Sep. 1991)", + "hacher", "Hacher (hack of Win Win Bingo)", + "hachoo", "Hachoo!", + "haekaka", "Hae Hae Ka Ka Ka", + "hal21", "HAL21", + "hal21j", "HAL21 (Japan)", + "halley", "Halley Comet", + "halley87", "Halley's Comet '87", + "halleycj", "Halley's Comet (Japan, Older)", + "halleys", "Halley's Comet (US)", + "halleysc", "Halley's Comet (Japan, Newer)", + "hammer", "Hammer", + "hanaawas", "Hana Awase", + "hanagumi", "Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010)", + "hanakanz", "Hana Kanzashi (Japan)", + "hanamai", "Hana no Mai (Japan)", + "hanamomb", "Mahjong Hana no Momoko gumi (Japan 881125)", + "hanamomo", "Mahjong Hana no Momoko gumi (Japan 881201)", + "hanaoji", "Hana to Ojisan [BET] (Japan 911209)", + "hanaroku", "Hanaroku", + "hanayara", "Hana wo Yaraneba! (Japan)", + "hangly", "Hangly-Man (set 1)", + "hangly2", "Hangly-Man (set 2)", + "hangly3", "Hangly-Man (set 3)", + "hangman", "Hangman", + "hangon", "Hang-On (Rev A)", + "hangon1", "Hang-On", + "hangon2", "Hang-On (ride-on)", + "hangonjr", "Hang-On Jr.", + "hangplt", "Hang Pilot (ver JAB)", + "hangpltu", "Hang Pilot (ver UAA)", + "happy6", "Happy 6-in-1 (ver. 102CN)", + "happy6101", "Happy 6-in-1 (ver. 101CN)", + "hapytour", "Happy Tour", + "hardbody", "Hardbody", + "hardbodyg", "Hardbody (German)", + "harddriv", "Hard Drivin' (cockpit, rev 7)", + "harddriv1", "Hard Drivin' (cockpit, rev 1)", + "harddriv2", "Hard Drivin' (cockpit, rev 2)", + "harddriv3", "Hard Drivin' (cockpit, rev 3)", + "harddrivb", "Hard Drivin' (cockpit, British, rev 7)", + "harddrivb5", "Hard Drivin' (cockpit, British, rev 5)", + "harddrivb6", "Hard Drivin' (cockpit, British, rev 6)", + "harddrivc", "Hard Drivin' (compact, rev 2)", + "harddrivc1", "Hard Drivin' (compact, rev 1)", + "harddrivcb", "Hard Drivin' (compact, British, rev 2)", + "harddrivcg", "Hard Drivin' (compact, German, rev 2)", + "harddrivg", "Hard Drivin' (cockpit, German, rev 7)", + "harddrivg4", "Hard Drivin' (cockpit, German, rev 4)", + "harddrivj", "Hard Drivin' (cockpit, Japan, rev 7)", + "harddrivj6", "Hard Drivin' (cockpit, Japan, rev 6)", + "harddunk", "Hard Dunk (World)", + "harddunkj", "Hard Dunk (Japan)", + "hardhat", "Hard Hat", + "hardhea2", "Hard Head 2 (v2.0)", + "hardhead", "Hard Head", + "hardheadb", "Hard Head (bootleg)", + "hardyard", "Hard Yardage (v1.20)", + "hardyard10", "Hard Yardage (v1.00)", + "harem", "Harem", + "haremchl", "Harem Challenge", + "harl_a10", "Harley Davidson (1.03 Display rev. 1.00)", + "harl_a13", "Harley Davidson (1.03)", + "harl_a18", "Harley Davidson (1.08)", + "harl_a30", "Harley Davidson (3.00)", + "harl_a40", "Harley Davidson (4.00)", + "harl_f13", "Harley Davidson (1.03 France)", + "harl_f18", "Harley Davidson (1.08 France)", + "harl_f30", "Harley Davidson (3.00 France)", + "harl_f40", "Harley Davidson (4.00 France)", + "harl_g13", "Harley Davidson (1.03 Germany)", + "harl_g18", "Harley Davidson (1.08 Germany)", + "harl_g30", "Harley Davidson (3.00 Germany)", + "harl_g40", "Harley Davidson (4.00 Germany)", + "harl_i13", "Harley Davidson (1.03 Italy)", + "harl_i18", "Harley Davidson (1.08 Italy)", + "harl_i30", "Harley Davidson (3.00 Italy)", + "harl_i40", "Harley Davidson (4.00 Italy)", + "harl_l13", "Harley Davidson (1.03 Spain)", + "harl_l18", "Harley Davidson (1.08 Spain)", + "harl_l30", "Harley Davidson (3.00 Spain)", + "harl_l40", "Harley Davidson (4.00 Spain)", + "harley", "Harley-Davidson and L.A. Riders (Revision B)", + "harleya", "Harley-Davidson and L.A. Riders (Revision A)", + "hasamu", "Hasamu (Japan)", + "hatena", "Adventure Quiz 2 - Hatena? no Daibouken (Japan 900228)", + "hatris", "Hatris (US)", + "hatrisj", "Hatris (Japan)", + "hattrick", "Hat Trick", + "haunthig", "Haunted House (IGS)", + "hawaii", "Hawaii (Russia)", + "hawkman", "Hawkman", + "hawkman1", "Hawkman (alternate set)", + "hayaosi1", "Hayaoshi Quiz Ouza Ketteisen - The King Of Quiz", + "hayaosi2", "Hayaoshi Quiz Grand Champion Taikai", + "hayaosi3", "Hayaoshi Quiz Nettou Namahousou", + "hb_bar7", "Bar Seven (Fairgames) (set 1)", + "hb_bar7a", "Bar Seven (Fairgames) (set 2)", + "hb_bigx", "Big X (JPM) (set 1)", + "hb_bigxa", "Big X (JPM) (set 2)", + "hb_bigxb", "Big X (JPM) (set 3)", + "hb_bigxc", "Big X (JPM) (set 4)", + "hb_bigxd", "Big X (JPM) (set 5)", + "hb_cashc", "Cash Crusade (Qps) (set 1)", + "hb_cashca", "Cash Crusade (Qps) (set 2)", + "hb_cashcb", "Cash Crusade (Qps) (set 3)", + "hb_cashx", "Cash X (Fairgames) (set 1)", + "hb_cashxa", "Cash X (Fairgames) (set 2)", + "hb_ccow", "Cash Cow (Qps) (set 1)", + "hb_ccowa", "Cash Cow (Qps) (set 2)", + "hb_ccowb", "Cash Cow (Qps) (set 3)", + "hb_cr", "Cash Raker (Qps) (set 1)", + "hb_cra", "Cash Raker (Qps) (set 2)", + "hb_crb", "Cash Raker (Qps) (set 3)", + "hb_cwf", "Cherry Win Falls (Fairgames) (set 1)", + "hb_cwfa", "Cherry Win Falls (Fairgames) (set 2)", + "hb_dac", "Dough & Arrow Club (Qps, set 1)", + "hb_daca", "Dough & Arrow Club (Qps, set 2)", + "hb_dacb", "Dough & Arrow Club (Qps, set 3)", + "hb_dacc", "Dough & Arrow Club (Qps, set 4)", + "hb_dacd", "Dough & Arrow Club (Qps, set 5)", + "hb_dace", "Dough & Arrow Club (Qps, set 6)", + "hb_dacf", "Dough & Arrow Club (Qps, set 7)", + "hb_dacg", "Dough & Arrow Club (Qps, set 8)", + "hb_dacz", "Dough & Arrow Club (Qps, set 9)", + "hb_frtcl", "Fruitopia Club (Qps) (set 1)", + "hb_frtcla", "Fruitopia Club (Qps) (set 2)", + "hb_frtclb", "Fruitopia Club (Qps) (set 3)", + "hb_frtclc", "Fruitopia Club (Qps) (set 4)", + "hb_frtcld", "Fruitopia Club (Qps) (set 5)", + "hb_frtcle", "Fruitopia Club (Qps) (set 6)", + "hb_frtclf", "Fruitopia Club (Qps) (set 7)", + "hb_frtclg", "Fruitopia Club (Qps) (set 8)", + "hb_frtclh", "Fruitopia Club (Qps) (set 9)", + "hb_frtcli", "Fruitopia Club (Qps) (set 10)", + "hb_frtclj", "Fruitopia Club (Qps) (set 11)", + "hb_frtclk", "Fruitopia Club (Qps) (set 12)", + "hb_frtcll", "Fruitopia Club (Qps) (set 13)", + "hb_frtclm", "Fruitopia Club (Qps) (set 14)", + "hb_frtcln", "Fruitopia Club (Qps) (set 15)", + "hb_gldpl", "Golden Palace (Qps / Mazooma) (set 1)", + "hb_gldpla", "Golden Palace (Qps / Mazooma) (set 2)", + "hb_gldwn", "Golden Winner (Fairgames) (set 1)", + "hb_gldwna", "Golden Winner (Fairgames) (set 2)", + "hb_gpal", "Golden Palace (Qps) (set 1)", + "hb_gpala", "Golden Palace (Qps) (set 2)", + "hb_gpalb", "Golden Palace (Qps) (set 3)", + "hb_gpalc", "Golden Palace (Qps) (set 4)", + "hb_gpald", "Golden Palace (Qps) (set 5)", + "hb_gpale", "Golden Palace (Qps) (set 6)", + "hb_gpalf", "Golden Palace (Qps) (set 7)", + "hb_gpalg", "Golden Palace (Qps) (set 8)", + "hb_gpalh", "Golden Palace (Qps) (set 9)", + "hb_gpali", "Golden Palace (Qps) (set 10)", + "hb_hotst", "Hot Stuff (JPM?) (set 1)", + "hb_hotsta", "Hot Stuff (JPM?) (set 2)", + "hb_hotstb", "Hot Stuff (JPM?) (set 3)", + "hb_hotstc", "Hot Stuff (JPM?) (set 4)", + "hb_hotstd", "Hot Stuff (JPM?) (set 5)", + "hb_hotste", "Hot Stuff (JPM?) (set 6)", + "hb_hotstf", "Hot Stuff (JPM?) (set 7)", + "hb_hotstg", "Hot Stuff (JPM?) (set 8)", + "hb_hotsth", "Hot Stuff (JPM?) (set 9)", + "hb_jailb", "Jail Break (Qps) (set 1)", + "hb_jailba", "Jail Break (Qps) (set 2)", + "hb_jkrwl", "Jokers Wild (Fairgames) (set 1)", + "hb_jkrwla", "Jokers Wild (Fairgames) (set 2)", + "hb_medal", "Medallion Job (Qps)", + "hb_mrmon", "Mr. Money (Qps) (set 1)", + "hb_mrmona", "Mr. Money (Qps) (set 2)", + "hb_mrmonb", "Mr. Money (Qps) (set 3)", + "hb_mrmonc", "Mr. Money (Qps) (set 4)", + "hb_rckrl", "Rock 'n' Roll (Qps) (set 1)", + "hb_rckrla", "Rock 'n' Roll (Qps) (set 2)", + "hb_rckrlb", "Rock 'n' Roll (Qps) (set 3)", + "hb_rckrlc", "Rock 'n' Roll (Qps) (set 4)", + "hb_rckrld", "Rock 'n' Roll (Qps) (set 5)", + "hb_rckrle", "Rock 'n' Roll (Qps) (set 6)", + "hb_rckrlf", "Rock 'n' Roll (Qps) (set 7)", + "hb_rckrlg", "Rock 'n' Roll (Qps) (set 8)", + "hb_rhv", "Red Hot Voucher (Qps) (set 1)", + "hb_rhva", "Red Hot Voucher (Qps) (set 2)", + "hb_ringb", "Ring A Bell (JPM) (set 1)", + "hb_ringba", "Ring A Bell (JPM) (set 2)", + "hb_ringbb", "Ring A Bell (JPM) (set 3)", + "hb_ringbc", "Ring A Bell (JPM) (set 4)", + "hb_ringbd", "Ring A Bell (JPM) (set 5)", + "hb_ringbe", "Ring A Bell (JPM) (set 6)", + "hb_ydd", "Yabba-Dabba-Dough (Qps) (set 1)", + "hb_ydda", "Yabba-Dabba-Dough (Qps) (set 2)", + "hbarrel", "Heavy Barrel (US)", + "hbarrelw", "Heavy Barrel (World)", + "hcastle", "Haunted Castle (version M)", + "hcastlee", "Haunted Castle (version E)", + "hcastlek", "Haunted Castle (version K)", + "hcrash", "Hyper Crash (version D)", + "hcrashc", "Hyper Crash (version C)", + "hd_l1", "Harley Davidson (L-1)", + "hd_l3", "Harley Davidson (L-3)", + "hdrivair", "Hard Drivin's Airborne (prototype)", + "hdrivairp", "Hard Drivin's Airborne (prototype, early rev)", + "headon", "Head On (2 players)", + "headon1", "Head On (1 player)", + "headon2", "Head On 2", + "headon2s", "Head On 2 (Sidam bootleg)", + "headonb", "Head On (bootleg on dedicated hardware)", + "headoni", "Head On (Irem, M-15 Hardware)", + "headonmz", "Head On (bootleg, alt maze)", + "headons", "Head On (Sidam bootleg, set 1)", + "headonsa", "Head On (Sidam bootleg, set 2)", + "heartatk", "Heart Attack", + "heartspd", "Hearts & Spades", + "heatbrl", "Heated Barrel (World version 3)", + "heatbrl2", "Heated Barrel (World version 2)", + "heatbrle", "Heated Barrel (Electronic Devices license)", + "heatbrlo", "Heated Barrel (World old version)", + "heatbrlu", "Heated Barrel (US)", + "heatof11", "Heat of Eleven '98 (ver EAA)", + "heavymtl", "Heavy Metal", + "heberpop", "Hebereke no Popoon (Japan)", + "hedpanic", "Head Panic (ver. 0117, 17/01/2000)", + "hedpanicf", "Head Panic (ver. 0315, 15/03/2000)", + "hedpanico", "Head Panic (ver. 0615, 15/06/1999)", + "heiankyo", "Heiankyo Alien", + "helifire", "HeliFire (set 1)", + "helifirea", "HeliFire (set 2)", + "hellfire", "Hellfire (2P set)", + "hellfire1", "Hellfire (1P set)", + "hellfire1a", "Hellfire (1P set, older)", + "hellfire2a", "Hellfire (2P set, older)", + "hellngt", "Hell Night (ver EAA)", + "herbiedk", "Herbie at the Olympics (DK conversion)", + "hercules", "Hercules", + "hermit", "The Hermit (Ver. 1.14)", + "hero", "Hero", + "herodk", "Hero in the Castle of Doom (DK conversion)", + "herodku", "Hero in the Castle of Doom (DK conversion not encrypted)", + "heuksun", "Heuk Sun Baek Sa (Korea)", + "hexa", "Hexa", + "hexagone", "L'Hexagone", + "hexion", "Hexion (Japan ver JAB)", + "hexpool", "Hex Pool (Shinkai)", + "hexpoola", "Hex Pool (Senko)", + "hg_frd", "Fruit Deuce (Hazel Grove)", + "hginga", "Hanafuda Hana Ginga", + "hgkairak", "Taisen Hot Gimmick Kairakuten (Japan)", + "hglbtrtr", "Harlem Globetrotters On Tour", + "hgokbang", "Hanafuda Hana Gokou Bangaihen (Japan)", + "hgokou", "Hanafuda Hana Gokou (Japan)", + "hh", "Haunted House (Rev. 2)", + "hh_1", "Haunted House (Rev. 1)", + "hharry", "Hammerin' Harry (World)", + "hharryu", "Hammerin' Harry (US)", + "hidctch2", "Hidden Catch 2 (pcb ver 3.03) (Kor/Eng) (AT89c52 protected)", + "hidctch2a", "Hidden Catch 2 (pcb ver 1.00) (Kor/Eng/Jpn/Chi)", + "hidctch3", "Hidden Catch 3 (ver 1.00 / pcb ver 3.05)", + "hideseek", "Hide & Seek", + "hidnc2k", "Hidden Catch 2000 (AT89c52 protected)", + "hidnctch", "Hidden Catch (World) / Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.03)", + "higemaru", "Pirate Ship Higemaru", + "highsplt", "Space Fever High Splitter (set 1)", + "highsplta", "Space Fever High Splitter (set 2)", + "highspltb", "Space Fever High Splitter (alt Sound)", + "hiimpact", "High Impact Football (rev LA5 02/15/91)", + "hiimpact1", "High Impact Football (rev LA1 12/16/90)", + "hiimpact2", "High Impact Football (rev LA2 12/26/90)", + "hiimpact3", "High Impact Football (rev LA3 12/27/90)", + "hiimpact4", "High Impact Football (rev LA4 02/04/91)", + "hiimpactp", "High Impact Football (prototype, rev 8.6 12/09/90)", + "hikaru", "Hikaru Bios", + "himesiki", "Himeshikibu (Japan)", + "hipai", "Hi Pai Paradise", + "hippodrm", "Hippodrome (US)", + "hirol_fr", "High Roller Casino (3.00 France)", + "hirol_gr", "High Roller Casino (3.00 Germany)", + "hirol_gr_210", "High Roller Casino (2.10 Germany)", + "hirol_it", "High Roller Casino (3.00 Italy)", + "hirolcas", "High Roller Casino (3.00)", + "hirolcas_210", "High Roller Casino (2.10)", + "hirolcat", "High Roller Casino (3.00) TEST", + "hironew", "High Roller Casino (ARM7 Sound Board)", + "hiryuken", "Hokuha Syourin Hiryu no Ken", + "hishouza", "Hishou Zame (Japan)", + "histryma", "The History of Martial Arts", + "hitice", "Hit the Ice (US)", + "hiticej", "Hit the Ice (Japan)", + "hitme", "Hit Me (set 1)", + "hitme1", "Hit Me (set 2)", + "hitnmiss", "Hit 'n Miss (version 3.0)", + "hitnmiss2", "Hit 'n Miss (version 2.0)", + "hitpoker", "Hit Poker (Bulgaria)", + "hjingi", "Hana Jingi (Japan, Bet)", + "hkagerou", "Hana Kagerou [BET] (Japan)", + "hldspin1", "Hold & Spin I (Version 2.7T, set 1)", + "hldspin1dt", "Hold & Spin I (Version 2.7T, set 2)", + "hldspin1o", "Hold & Spin I (Version 2.5T)", + "hldspin1vt", "Hold & Spin I (Version 2.7T Dual)", + "hldspin2", "Hold & Spin II (Version 2.8R, set 1)", + "hldspin2d1", "Hold & Spin II (Version 2.8R, set 2)", + "hldspin2o", "Hold & Spin II (Version 2.6)", + "hldspin2v1", "Hold & Spin II (Version 2.8R Dual)", + "hlywoodh", "Hollywood Heat", + "hmcompm2", "hiphopmania complete MIX 2 (ver UA-A)", + "hmcompmx", "hiphopmania complete MIX (ver UA-B)", + "hmgeo", "Heavy Metal Geomatrix (JPN, USA, EUR, ASI, AUS) (Rev A)", + "hnageman", "AV Hanafuda Hana no Ageman (Japan 900716)", + "hnayayoi", "Hana Yayoi (Japan)", + "hncholms", "Hunchback Olympic (Scramble hardware)", + "hndlchmp", "Handle Champ (GQ710 VER. JAB)", + "hnfubuki", "Hana Fubuki [BET] (Japan)", + "hng64", "Hyper NeoGeo 64 Bios", + "hngmnjpm", "Hangman (JPM)", + "hngmnjpmd", "Hangman (JPM) (Protocol)", + "hnkochou", "Hana Kochou (Japan, Bet)", + "hnoridur", "Hana Oriduru (Japan)", + "hnxmasev", "AV Hanafuda Hana no Christmas Eve (Japan 901204)", + "hoccer", "Hoccer (set 1)", + "hoccer2", "Hoccer (set 2)", + "hocrash", "Crash (bootleg of Head On)", + "hod", "House of Diamonds", + "hod2bios", "Naomi House of the Dead 2 Bios", + "hoedown", "Hoe Down", + "hogalley", "Vs. Hogan's Alley (set HA4-1 E-1)", + "holeland", "Hole Land", + "holo", "Holosseum (US)", + "homerun", "Moero!! Pro Yakyuu Homerun Kyousou", + "homo", "Homo", + "homura", "Homura (v2.04J)", + "honeydol", "Honey Dolls", + "hook", "Hook (World)", + "hook_401", "Hook (4.01)", + "hook_404", "Hook (4.04)", + "hook_408", "Hook (4.08)", + "hookj", "Hook (Japan)", + "hooku", "Hook (US)", + "hoops", "Hoops", + "hoops95", "Hoops (Europe/Asia 1.7)", + "hoops96", "Hoops '96 (Europe/Asia 2.0)", + "hopmappy", "Hopping Mappy", + "hopper", "SWP Hopper Board", + "hopprobo", "Hopper Robo", + "horekid", "Kid no Hore Hore Daisakusen", + "horekidb", "Kid no Hore Hore Daisakusen (bootleg)", + "horizon", "Horizon (Irem)", + "horshoes", "American Horseshoes (US)", + "hotblock", "Hot Blocks - Tetrix II", + "hotbubl", "Hot Bubble", + "hotchase", "Hot Chase", + "hotd", "House of the Dead", + "hotd2", "House of the Dead 2", + "hotd2o", "House of the Dead 2 (original)", + "hotd2p", "House of the Dead 2 (prototype)", + "hotd3", "The House of the Dead III (GDX-0001)", + "hotdebut", "Quiz de Idol! Hot Debut (Japan)", + "hotdoggn", "Hotdoggin'", + "hotdogst", "Hotdog Storm (International)", + "hotgm4ev", "Taisen Hot Gimmick 4 Ever (Japan)", + "hotgmck", "Taisen Hot Gimmick (Japan)", + "hotgmck3", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", + "hotgmcki", "Mahjong Hot Gimmick Integral (Japan)", + "hotgmkmp", "Taisen Hot Gimmick Mix Party", + "hothand", "Hot Hand", + "hotmemry", "Hot Memory (V1.2, Germany, 12/28/94)", + "hotmemry11", "Hot Memory (V1.1, Germany, 11/30/94)", + "hotmind", "Hot Mind (Hard Times hardware)", + "hotminda", "Hot Mind (adjustable prize)", + "hotmindff", "Hot Mind (Fit of Fighting hardware)", + "hotpinbl", "Hot Pinball", + "hotrod", "Hot Rod (World, 3 Players, Turbo set 1, Floppy Based)", + "hotroda", "Hot Rod (World, 3 Players, Turbo set 2, Floppy Based)", + "hotrodj", "Hot Rod (Japan, 4 Players, Floppy Based)", + "hotshock", "Hot Shocker", + "hotshockb", "Hot Shocker (early revision?)", + "hotshots", "Hot Shots", + "hotslot", "Hot Slot (ver. 05.01)", + "hotslots", "Hot Slots (6.00)", + "hotsmash", "Vs. Hot Smash", + "hotstuff", "Olympic Hot Stuff (TAS 5 Reel System)", + "hottop", "Hot Toppings (Russia)", + "hotwheel", "Hot Wheels", + "hourouki", "Mahjong Hourouki Part 1 - Seisyun Hen (Japan)", + "housemn2", "House Mannequin Roppongi Live hen (Japan 870418)", + "housemnq", "House Mannequin (Japan 870217)", + "howzat", "Howzat!", + "hparadis", "Super Hana Paradise (Japan)", + "hpolym84", "Hyper Olympic '84", + "hpuncher", "Hard Puncher (Japan)", + "hrclass", "Home Run Classic (v1.21 12-feb-1997)", + "hrdtimes", "Hard Times (set 1)", + "hrdtimesa", "Hard Times (set 2)", + "hs_l3", "High Speed (L-3)", + "hs_l4", "High Speed (L-4)", + "hsf2", "Hyper Street Fighter 2: The Anniversary Edition (USA 040202)", + "hsf2a", "Hyper Street Fighter 2: The Anniversary Edition (Asia 040202)", + "hsf2d", "Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg)", + "hsf2j", "Hyper Street Fighter 2: The Anniversary Edition (Japan 031222)", + "hshavoc", "High Seas Havoc", + "hshot_p8", "Hot Shot Basketball (P-8)", + "hspot2", "Hot Spot 2", + "hspot3", "Hot Spot 3", + "hstennis", "Hot Shots Tennis (V1.1)", + "hstennis10", "Hot Shots Tennis (V1.0)", + "htchctch", "Hatch Catch", + "htengoku", "Hanafuda Hana Tengoku (Japan)", + "hthero", "Hat Trick Hero (Japan)", + "hthero93", "Hat Trick Hero '93 (Ver 1.0J 1993/02/28)", + "hthero94", "Hat Trick Hero '94 (Ver 2.2A 1994/05/26)", + "hthero95", "Hat Trick Hero '95 (Ver 2.5J 1994/11/03)", + "hthero95u", "Hat Trick Hero '95 (Ver 2.5A 1994/11/03)", + "httip_l1", "Hot Tip (L-1)", + "hulk", "Incredible Hulk,The", + "hunchbak", "Hunchback (set 1)", + "hunchbaka", "Hunchback (set 2)", + "hunchbkd", "Hunchback (DK conversion)", + "hunchbkg", "Hunchback (Galaxian hardware)", + "hunchbks", "Hunchback (Scramble hardware)", + "hunchbks2", "Hunchback (Scramble hardware, bootleg)", + "huncholy", "Hunchback Olympic", + "hurr_l2", "Hurricane (L-2)", + "hustle", "Hustle", + "hustler", "Video Hustler", + "hustlerb", "Video Hustler (bootleg, set 1)", + "hustlerb2", "Fatsy Gambler (Video Hustler bootleg)", + "hustlerb3", "Video Pool (Video Hustler bootleg)", + "hustlerb4", "Video Hustler (bootleg, set 2)", + "hustlerd", "Video Hustler (Dynamo Games)", + "hvnsgate", "Heaven's Gate", + "hvoltage", "High Voltage", + "hvymetal", "Heavy Metal (315-5135)", + "hvymetap", "Heavy Metal Meltdown", + "hvysmsh", "Heavy Smash (Europe version -2)", + "hvysmsha", "Heavy Smash (Asia version -4)", + "hvysmshj", "Heavy Smash (Japan version -2)", + "hvyunit", "Heavy Unit (World)", + "hvyunitj", "Heavy Unit (Japan, Newer)", + "hvyunitjo", "Heavy Unit (Japan, Older)", + "hvyunitu", "Heavy Unit -U.S.A. Version- (US)", + "hwchamp", "Heavyweight Champ", + "hwchampj", "Heavyweight Champ (Japan, FD1094 317-0046)", + "hwrace", "High Way Race", + "hydra", "Hydra", + "hydrap", "Hydra (prototype 5/14/90)", + "hydrap2", "Hydra (prototype 5/25/90)", + "hydrthnd", "Hydro Thunder", + "hyhoo", "Hayaoshi Taisen Quiz Hyhoo (Japan)", + "hyhoo2", "Hayaoshi Taisen Quiz Hyhoo 2 (Japan)", + "hyouban", "Mahjong Hyouban Musume [BET] (Japan)", + "hypbbc2p", "Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. JAA)", + "hypbbc2pk", "Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA)", + "hypbl_l4", "HyperBall (L-4)", + "hyperath", "Hyper Athlete (GV021 Japan 1.00)", + "hyperbbc", "Hyper Bishi Bashi Champ (GQ876 VER. EAA)", + "hyperbbca", "Hyper Bishi Bashi Champ (GQ876 VER. AAA)", + "hyperpac", "Hyper Pacman", + "hyperpacb", "Hyper Pacman (bootleg)", + "hyperspc", "Hyperspace (bootleg of Asteroids)", + "hyperspt", "Hyper Sports", + "hypersptb", "Hyper Sports (bootleg)", + "hyperv2", "Hyper V2 (Global VR) Install - 06/12/02", + "hyperv2a", "Hyper V2 (Global VR) Install - 09/30/01", + "hyprdriv", "Hyperdrive", + "hyprduel", "Hyper Duel (Japan set 1)", + "hyprduel2", "Hyper Duel (Japan set 2)", + "hypreac2", "Mahjong Hyper Reaction 2 (Japan)", + "hypreact", "Mahjong Hyper Reaction (Japan)", + "hyprolym", "Hyper Olympic", + "hyprolymb", "Hyper Olympic (bootleg)", + "hypsptsp", "Hyper Sports Special (Japan)", + "i500_11b", "Indianapolis 500 (1.1 Belgium)", + "i500_11r", "Indianapolis 500 (1.1R)", + "ibara", "Ibara (2005/03/22 MASTER VER..)", + "ibarablk", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", + "ibarablka", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", + "iccash", "I C Cash (Russia) (Atronic)", + "iceclimb", "Vs. Ice Climber (set IC4-4 B-1)", + "iceclimba", "Vs. Ice Climber (set IC4-4 ?)", + "iceclmrd", "Vs. Ice Climber Dual (set IC4-4 A-1)", + "icecold", "Ice Cold Beer", + "icefever", "Ice Fever", + "ichiban", "Ichi Ban Jyan", + "ichir", "Puzzle & Action: Ichidant-R (World)", + "ichirj", "Puzzle & Action: Ichidant-R (Japan)", + "ichirjbl", "Puzzle & Action: Ichidant-R (Japan) (bootleg)", + "ichirk", "Puzzle & Action: Ichidant-R (Korea)", + "id4", "Independence Day", + "idhimitu", "Idol no Himitsu [BET] (Japan 890304)", + "idolmj", "Idol-Mahjong Housoukyoku (Japan)", + "idsoccer", "Indoor Soccer (set 1)", + "idsoccera", "Indoor Soccer (set 2)", + "iemoto", "Iemoto (Japan 871020)", + "iemotom", "Iemoto [BET] (Japan 871118)", + "iganinju", "Iga Ninjyutsuden (Japan)", + "igmo", "IGMO", + "igromula", "Igrosoft Multigame Bootleg (15 Games)", + "igromult", "Igrosoft Multigame Bootleg (10 Games)", + "igs_ncs", "New Champion Skill (v100n)", + "igs_ncs2", "New Champion Skill (v100n 2000)", + "igsm312", "unknown 'IGS 6POKER2' game (V312CN)", + "ij_l3", "Indiana Jones (L-3)", + "ij_l4", "Indiana Jones (L-4)", + "ij_l5", "Indiana Jones (L-5)", + "ij_l6", "Indiana Jones (L-6)", + "ij_l7", "Indiana Jones (L-7)", + "ij_lg7", "Indiana Jones (LG-7)", + "ikari", "Ikari Warriors (US JAMMA)", + "ikari3", "Ikari III - The Rescue (World, 8-Way Joystick)", + "ikari3j", "Ikari Three (Japan, Rotary Joystick)", + "ikari3k", "Ikari Three (Korea, 8-Way Joystick)", + "ikari3u", "Ikari III - The Rescue (US, Rotary Joystick)", + "ikaria", "Ikari Warriors (US)", + "ikarijp", "Ikari (Japan No Continues)", + "ikarijpb", "Ikari (Joystick hack bootleg)", + "ikarinc", "Ikari Warriors (US No Continues)", + "ikaruga", "Ikaruga (GDL-0010)", + "ikki", "Ikki (Japan)", + "illvelo", "Illvelo (Illmatic Envelope)", + "ilpag", "Il Pagliaccio (Italy, Ver. 2.7C)", + "imago", "Imago (cocktail set)", + "imagoa", "Imago (no cocktail set)", + "imekura", "Imekura Mahjong (Japan)", + "imgfight", "Image Fight (World, revision A)", + "imgfightj", "Image Fight (Japan)", + "imolagp", "Imola Grand Prix (set 1)", + "imolagpo", "Imola Grand Prix (set 2)", + "imsorry", "I'm Sorry (315-5110, US)", + "imsorryj", "Gonbee no I'm Sorry (315-5110, Japan)", + "inca", "Inca", + "incanp", "Incan Pyramids (Konami Endeavour)", + "ind250cc", "250 CC", + "indianbt", "Indian Battle", + "indianbtbr", "Indian Battle (Brazil)", + "indiandr", "Indian Dreaming (0100845V, Local)", + "indianmm", "Indian Dreaming - Maximillion$ (10130711, NSW/ACT)", + "indy4", "Indy 4 [TTL]", + "indy500", "INDY 500 Twin (Revision A, Newer)", + "indy500d", "INDY 500 Deluxe (Revision A)", + "indy500to", "INDY 500 Twin (Revision A)", + "indy800", "Indy 800 [TTL]", + "indyheat", "Danny Sullivan's Indy Heat", + "indytemp", "Indiana Jones and the Temple of Doom (set 1)", + "indytemp2", "Indiana Jones and the Temple of Doom (set 2)", + "indytemp3", "Indiana Jones and the Temple of Doom (set 3)", + "indytemp4", "Indiana Jones and the Temple of Doom (set 4)", + "indytempc", "Indiana Jones and the Temple of Doom (Cocktail)", + "indytempd", "Indiana Jones and the Temple of Doom (German)", + "inferno", "Inferno (Williams)", + "inidv3cy", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev. B) (GDS-0039B)", + "initd", "Initial D Arcade Stage (Rev B) (Japan) (GDS-0020B)", + "initdexp", "Initial D Arcade Stage (Export) (GDS-0025)", + "initdv2e", "Initial D Arcade Stage Ver. 2 (Export) (GDS-0027)", + "initdv2j", "Initial D Arcade Stage Ver. 2 (Japan) (Rev. B) (GDS-0026B)", + "initdv2jo", "Initial D Arcade Stage Ver. 2 (Japan) (GDS-0026)", + "initdv3e", "Initial D Arcade Stage Ver. 3 (Export) (GDS-0033)", + "initdv3j", "Initial D Arcade Stage Ver. 3 (Japan) (Rev. C) (GDS-0032C)", + "initdv3jb", "Initial D Arcade Stage Ver. 3 (Japan) (Rev. B) (GDS-0032B)", + "inquiztr", "Inquizitor", + "insector", "Insector (prototype)", + "insectx", "Insector X (World)", + "insectxj", "Insector X (Japan)", + "intcup94", "International Cup '94 (Ver 2.2O 1994/05/26)", + "inthunt", "In The Hunt (World)", + "inthuntu", "In The Hunt (US)", + "intlaser", "International Team Laser (prototype)", + "intrepid", "Intrepid (set 1)", + "intrepid2", "Intrepid (set 2)", + "intrepidb", "Intrepid (Elsys bootleg, set 1)", + "intrepidb2", "Intrepid (Loris bootleg)", + "intrepidb3", "Intrepid (Elsys bootleg, set 2)", + "introdon", "Karaoke Quiz Intro Don Don! (J 960213 V1.000)", + "intrscti", "Intersecti", + "intruder", "Intruder", + "inttoote", "International Toote (Germany)", + "inttootea", "International Toote II (World?)", + "inufuku", "Quiz & Variety Sukusuku Inufuku (Japan)", + "inunoos", "Inu No Osanpo / Dog Walking (Rev A)", + "invad2ct", "Space Invaders II (Midway, cocktail)", + "invaddlx", "Space Invaders Deluxe", + "invader4", "Space Invaders Part Four", + "invaderl", "Space Invaders (Logitec)", + "invaders", "Space Invaders / Space Invaders M", + "invadpt2", "Space Invaders Part II (Taito)", + "invadpt2br", "Space Invaders Part II (Brazil)", + "invadrmr", "Space Invaders (Model Racing)", + "invasion", "Invasion (Sidam)", + "invasiona", "Invasion (bootleg set 1, normal graphics)", + "invasionb", "Invasion (bootleg set 2, no copyright)", + "invasionrz", "Invasion (bootleg set 3, R Z SRL Bologna)", + "invasionrza", "Invasion (bootleg set 4, R Z SRL Bologna)", + "invasnab", "Invasion - The Abductors (version 5.0)", + "invasnab3", "Invasion - The Abductors (version 3.0)", + "invasnab4", "Invasion - The Abductors (version 4.0)", + "invds", "Invinco / Deep Scan", + "invho2", "Invinco / Head On 2", + "invinco", "Invinco", + "invmulti", "Space Invaders Multigame (M8.03D)", + "invmultim1a", "Space Invaders Multigame (M8.01A)", + "invmultim2a", "Space Invaders Multigame (M8.02A)", + "invmultim2c", "Space Invaders Multigame (M8.02C)", + "invmultim3a", "Space Invaders Multigame (M8.03A)", + "invmultip", "Space Invaders Multigame (prototype)", + "invmultis1a", "Space Invaders Multigame (S0.81A)", + "invmultis2a", "Space Invaders Multigame (S0.82A)", + "invmultis3a", "Space Invaders Multigame (S0.83A)", + "invmultit3d", "Space Invaders Multigame (T8.03D)", + "invqix", "Space Invaders / Qix Silver Anniversary Edition (Ver. 2.03)", + "invrvnge", "Invader's Revenge (set 1)", + "invrvngea", "Invader's Revenge (set 2)", + "invrvngeb", "Invader's Revenge (set 3)", + "invrvngedu", "Invader's Revenge (Dutchford, single PCB)", + "invrvngegw", "Invader's Revenge (Game World, single PCB)", + "inwinner", "Instant Winner (Russia)", + "ipminvad", "IPM Invader", + "ipminvad1", "IPM Invader (Incomplete Dump)", + "ippatsu", "Ippatsu Gyakuten [BET] (Japan)", + "iqblock", "IQ-Block", + "iqblocka", "Shu Zi Le Yuan (V127M)", + "iqblockf", "Shu Zi Le Yuan (V113FR)", + "iqpipe", "IQ Pipe", + "irobot", "I, Robot", + "iron", "Iron (SNES bootleg)", + "ironclad", "Choutetsu Brikin'ger - Iron clad (Prototype)", + "ironclado", "Choutetsu Brikin'ger - Iron clad (Prototype, bootleg)", + "ironfort", "Iron Fortress", + "ironfortj", "Iron Fortress (Japan)", + "ironhors", "Iron Horse", + "ironmaid", "Iron Maiden", + "irrmaze", "The Irritating Maze / Ultra Denryu Iraira Bou", + "isgsm", "ISG Selection Master Type 2006 BIOS", + "island", "Island (050713 World)", + "island2", "Island 2 (060529 World)", + "island2_3", "Island 2 (061218 World)", + "island2_3a", "Island 2 (bootleg, 061218, VIDEO GAME-1 OS2-01)", + "island2_4", "Island 2 (070205 Russia)", + "island2_4a", "Island 2 (bootleg, 070205, banking address hack)", + "island2_5", "Island 2 (090528 Lottery)", + "island2_6", "Island 2 (090724 Entertainment)", + "island2a", "Island 2 (bootleg, 060529, banking address hack)", + "island2b", "Island 2 (bootleg, 060529, banking address hack, changed version text)", + "island2c", "Island 2 (bootleg, 060529, LOTTOGAME (I))", + "island_2", "Island (070409 Russia)", + "islanda", "Island (bootleg, 050713, backdoor)", + "islandb", "Island (bootleg, 050713, VIDEO GAME-1 OS01)", + "islandc", "Island (bootleg, 050713, LOTOS OS01)", + "istellar", "Interstellar Laser Fantasy", + "itaten", "Itazura Tenshi (Japan)", + "itazuram", "Itazura Monkey", + "iteagle", "Eagle BIOS", + "ivorytsk", "Ivory Tusk", + "ixion", "Ixion (prototype)", + "j2008", "unknown '008' (Unk) (MPS)", + "j2adnote", "Add A Note (JPM) (MPS, set 1)", + "j2adnotea", "Add A Note (JPM) (MPS, set 2)", + "j2adnoteb", "Add A Note (JPM) (MPS, set 3)", + "j2adnotec", "Add A Note (JPM) (MPS, set 4)", + "j2adnoted", "Add A Note (JPM) (MPS, set 5)", + "j2adnotee", "Add A Note (JPM) (MPS, set 6)", + "j2adnotef", "Add A Note (JPM) (MPS, set 7)", + "j2adnoteg", "Add A Note (JPM) (MPS, set 8)", + "j2adnoteh", "Add A Note (JPM) (MPS, set 9)", + "j2adnotei", "Add A Note (JPM) (MPS, set 10)", + "j2always", "Always Eight (Bwb) (MPS)", + "j2b7", "Bar 7? (JPM) (MPS)", + "j2bankch", "Bank Chase (JPM) (MPS)", + "j2bankrd", "Bank Raid (JPM) (MPS)", + "j2bigbnk", "Big Banker (JPM) (MPS)", + "j2bigbox", "Big Box (JPM) (MPS)", + "j2bigbuk", "Big Buck$ (JPM) (MPS)", + "j2bigdl", "Big Deal (JPM) (MPS)", + "j2bkroll", "Bank Roll (JPM) (MPS)", + "j2blkchy", "Black Cherry (JPM) (MPS)", + "j2blustr", "Blue Streak (Pcp) (MPS)", + "j2bodym", "Body Match (JPM) (MPS)", + "j2bonanz", "Bonanza (Eurocoin) (MPS)", + "j2cashab", "Cashablanca (JPM) (MPS)", + "j2cashbn", "Cash Bonus Club (JPM) (MPS)", + "j2cashfl", "Cash Falls (JPM) (MPS)", + "j2cashrl", "Cash Reels (JPM) (MPS)", + "j2cashro", "Cash Rolls (JPM) (MPS)", + "j2cashrv", "Cash Reserve (JPM) (MPS)", + "j2cashry", "Cashino Royale (Pcp) (MPS)", + "j2cashtd", "Cash Track Deluxe (JPM) (MPS)", + "j2cashtk", "Cash Track (JPM) (MPS)", + "j2casino", "Casino Classic (Pcp) (MPS)", + "j2chsn", "unknown 'chsnsn05' (Unk) (MPS)", + "j2clbbin", "Club Bingo (Crystal) (MPS)", + "j2club77", "Club 77 (Unk) (MPS)", + "j2coinct", "Coin Count (JPM) (MPS)", + "j2coinsh", "Coin Shoot (Bwb) (MPS)", + "j2contnd", "Continuous Nudger (Mdm) (MPS)", + "j2coppot", "Copper Pot (JPM) (MPS)", + "j2coprun", "Copper Run (JPM) (MPS)", + "j2cprndx", "Copper Run Deluxe (JPM) (MPS)", + "j2criscr", "Criss Cross Jackpot (Pcp) (MPS)", + "j2crkbnk", "Crack The Bank (JPM) (MPS)", + "j2crown", "Crown Dealer (Unk) (MPS)", + "j2cshalm", "Cash Alarm (Pcp) (MPS)", + "j2cshcrd", "Cash Cards (Pcp) (MPS)", + "j2cshfil", "Cash-Filla (Pcp) (MPS)", + "j2cshnud", "Cash Nudger (Mdm) (MPS)", + "j2cshsmh", "Cash Smash (Pcp) (MPS)", + "j2cvault", "Cash Vault (JPM) (MPS)", + "j2dropld", "Drop The Lot Deluxe (JPM) (MPS)", + "j2droplt", "Drop The Lot (JPM) (MPS)", + "j2ewn", "Each Way Nudger (JPM) (MPS)", + "j2ews", "Each Way Shuffle (JPM) (MPS)", + "j2exec", "Executive Club (JPM) (MPS)", + "j2fasttk", "Fast Trak (JPM) (MPS)", + "j2fiveal", "Five Alive (JPM) (MPS)", + "j2fiveln", "Five Liner (JPM) (MPS)", + "j2fivepn", "Fivepenny Nudger (Mdm) (MPS)", + "j2fqueen", "Find The Queen (JPM) (MPS)", + "j2frmtch", "Fruit Match (JPM) (MPS)", + "j2frucnx", "Fruit Connexion (Pcp) (MPS)", + "j2fullhs", "Full House Club (JPM) (MPS)", + "j2fws", "Five Way Shuffle (Set 1) (JPM) (MPS)", + "j2fwsa", "Five Way Shuffle (Set 2) (JPM) (MPS)", + "j2ghostb", "Ghostbuster (JPM) (MPS)", + "j2gldchy", "Golden Cherry (JPM) (MPS)", + "j2gldwin", "Golden Win (JPM) (MPS)", + "j2goldbr", "Golden Bars (JPM) (MPS)", + "j2goldrn", "Gold Run (JPM) (MPS)", + "j2hcash", "Hot Cash (Unk) (MPS)", + "j2hilocl", "Hi Lo Climber Club (Crystal) (MPS)", + "j2hinote", "Hi Note (JPM) (MPS)", + "j2hirola", "Hi Roll (Unk) (MPS)", + "j2hiroll", "Hi Roller (JPM) (MPS)", + "j2hitmon", "Hit Money (Pcp) (MPS)", + "j2hotpot", "Hot Pot (JPM) (MPS)", + "j2hotptd", "Hot Pot Deluxe (JPM) (MPS)", + "j2hotsht", "Hot Shot Club (JPM) (MPS)", + "j2hypnot", "Hypernote (JPM) (MPS)", + "j2jackbr", "Jackpot Bars (JPM) (MPS)", + "j2jackdc", "Jackpot Dice (JPM) (MPS)", + "j2jokers", "Jokers (JPM) (MPS)", + "j2kingcl", "King Of Clubs (JPM) (MPS)", + "j2lhs", "unknown 'lhs' (Unk) (MPS)", + "j2litean", "Lite A Nudge (JPM) (MPS)", + "j2litnot", "Lite A Note Club (Crystal) (MPS)", + "j2loots", "Loot Shoot (Pcp) (MPS)", + "j2lovshd", "Loot Shoot Deluxe (JPM) (MPS)", + "j2lovsht", "Loot Shoot (JPM) (MPS)", + "j2luckar", "Lucky Arrows (JPM) (MPS)", + "j2lucky2", "Lucky 2s (JPM) (MPS)", + "j2match", "Match It (JPM) (MPS)", + "j2maxima", "Maxima (Pcp) (MPS)", + "j2missis", "Mississippi Gambler Club (Crystal) (MPS)", + "j2monblt", "Money Belt (JPM) (MPS)", + "j2monbnd", "Money Bands (JPM) (MPS)", + "j2mongam", "Money Game (JPM) (MPS)", + "j2mongmd", "Money Game Deluxe (JPM) (MPS)", + "j2monmin", "Money Mine (Unk) (MPS)", + "j2monmtx", "Money Matrix (Bwb) (MPS)", + "j2montrp", "Money Trapper (Pcp) (MPS)", + "j2multwn", "Multi Win (JPM) (MPS)", + "j2nbz", "Nudge Bonanza (JPM) (MPS)", + "j2ncsp", "unknown 'ncsp0pp' (Bwb) (MPS)", + "j2nn2", "unknown 'nn_2' (Unk) (MPS)", + "j2nolimt", "No Limit Nudge (Mdm) (MPS)", + "j2notesh", "Note Shoot (JPM) (MPS)", + "j2notexc", "Note Exchange (Set 1) (JPM) (MPS)", + "j2notexca", "Note Exchange (Set 2) (JPM) (MPS)", + "j2notexcb", "Note Exchange (Set 3) (JPM) (MPS)", + "j2notspn", "Note Spinner (Unk) (MPS)", + "j2nrrp", "unknown 'nprpopp' (Bwb) (MPS)", + "j2nsc15", "unknown 'nsc15' (Pcp) (MPS)", + "j2nsw12", "unknown 'nsw12' (Pcp) (MPS)", + "j2nud5p", "5p Nudger (JPM) (MPS)", + "j2nudbnz", "Nudge Bonanza Deluxe (Set 1) (JPM) (MPS)", + "j2nudbnza", "Nudge Bonanza Deluxe (Set 2) (JPM) (MPS)", + "j2nuddud", "Nudge Double Up Deluxe (JPM) (MPS)", + "j2nuddup", "Nudge Double Up (JPM) (MPS)", + "j2nudfev", "Nudge Fever (Bwb) (MPS)", + "j2nudmon", "Nudge Money (Pcp) (MPS)", + "j2nudnud", "Nudge Nudge (JPM) (MPS)", + "j2nudshf", "Nudge Shuffler (JPM) (MPS)", + "j2nudup3", "Nudge Double Up MkIII (JPM) (MPS)", + "j2paypkt", "Pay Packet (Pcp) (MPS)", + "j2penny", "In For A Penny In For A Pound (Pcp) (MPS)", + "j2pharo", "Pharoah (Unk) (MPS)", + "j2pinac", "Pinnacle (JPM) (MPS)", + "j2pinclb", "Pinnacle Club (JPM) (MPS)", + "j2plsmnd", "Plus Money Deluxe (JPM) (MPS)", + "j2plsmon", "Plus Money (JPM) (MPS)", + "j2plsnud", "Plus Nudge (JPM) (MPS)", + "j2pndrsh", "Pound Rush (JPM) (MPS)", + "j2potlck", "Pot Luck (JPM) (MPS)", + "j2pyramd", "Pyramid (JPM) (MPS)", + "j2rdclb", "Royal Deal Club (JPM) (MPS)", + "j2reelbn", "Reel Bingo Club (Set 1) (JPM) (MPS)", + "j2reelbna", "Reel Bingo Club (Set 2) (JPM) (MPS)", + "j2reelbo", "Reel Bonus (JPM) (MPS)", + "j2reelcz", "Reel Crazy (JPM) (MPS)", + "j2reeldc", "Reel Deal Club (JPM) (MPS)", + "j2reelmc", "Reel Magic Club (JPM) (MPS)", + "j2reelmg", "Reel Magic (JPM) (MPS)", + "j2reelmgd", "Reel Magic (JPM) [Dutch] (MPS)", + "j2reelmo", "Reel Money (JPM) (MPS)", + "j2rm941", "unknown 'rm941' (Unk) (MPS)", + "j2rotnot", "Rota Note (JPM) (MPS)", + "j2roulcl", "Roulette Club (JPM) [Mps] (MPS)", + "j2sex", "Super Exchanger (Unk) (MPS)", + "j2silvcl", "Silver Classic (Pcp) (MPS)", + "j2silvsh", "Silver Shot (Pcp) (MPS)", + "j2sirich", "Strike It Rich (JPM) (MPS) (set 1)", + "j2siricha", "Strike It Rich (JPM) (MPS) (set 2)", + "j2sldgld", "Solid Gold (JPM) (MPS)", + "j2slvrgh", "Silver Ghost (JPM) (MPS)", + "j2sng", "Super Nudge Gambler (Cotswold Microsystems) (MPS)", + "j2spcrsv", "Special Reserve (JPM) (MPS)", + "j2ss", "Supa Stepper (JPM) (MPS)", + "j2sset", "Sunset Strip (v2.0) (Unk) (MPS?)", + "j2sstrea", "Supa Streak (Pcp) (MPS)", + "j2stahed", "Streets Ahead (JPM) (MPS)", + "j2strk10", "Strike Ten (Ace) (MPS)", + "j2supchy", "Super Cherry (Eurocoin) (MPS)", + "j2super7", "Super 7's (Unk) (MPS)", + "j2supfrc", "Supa Fruit Club (JPM) (MPS)", + "j2supfrt", "Supa Fruit (JPM) (MPS)", + "j2supln", "Super Line (JPM) (MPS)", + "j2suppot", "Super Pots (JPM) (MPS)", + "j2suprft", "Super Fruit (JPM) (MPS)", + "j2suprl", "Super Reel (JPM) (MPS)", + "j2suprsh", "Supershot (JPM) (MPS)", + "j2supsft", "Supashifta (JPM) (MPS)", + "j2supstp", "Supa Steppa (JPM) (MPS)", + "j2supstr", "Superstars (JPM) (MPS)", + "j2suptrk", "Supa Track (JPM) (MPS)", + "j2swbank", "Switch Back (JPM) (MPS)", + "j2take2", "Take 2 (JPM) (MPS)", + "j2topcd", "Top Card (Bwb) (MPS)", + "j2topsht", "Top Shot (JPM) (MPS)", + "j2trail", "Trailblazer (Bwb) (MPS)", + "j2tst", "MPS 1 Test Rom (JPM) (MPS)", + "j2tstplt", "Test Pilot (Set 1) (Pcp) (MPS)", + "j2tstplta", "Test Pilot (Set 2) (Pcp) (MPS)", + "j2tupnd", "Tuppenny Nudger (Mdm) (MPS)", + "j2tupnud", "Tuppenny Nudger (JPM) (MPS)", + "j2wag", "Win-A-Gain (Bwb) (MPS)", + "j2westrn", "Western (JPM) (MPS)", + "j2wrb", "Wild Reel Bingo (JPM) (MPS)", + "j2xxx", "Triple X (Bwb) (MPS)", + "j5ar80", "Around The World In Eighty Days (JPM) (SYSTEM5, set 1)", + "j5ar80a", "Around The World In Eighty Days (JPM) (SYSTEM5, set 2)", + "j5ar80b", "Around The World In Eighty Days (JPM) (SYSTEM5, set 3)", + "j5ar80c", "Around The World In Eighty Days (JPM) (SYSTEM5, set 4)", + "j5ar80cl", "Around The World Club (JPM) (SYSTEM5, set 1)", + "j5ar80cla", "Around The World Club (JPM) (SYSTEM5, set 2)", + "j5ar80clb", "Around The World Club (JPM) (SYSTEM5, set 3)", + "j5ar80clc", "Around The World Club (JPM) (SYSTEM5, set 4)", + "j5ar80d", "Around The World In Eighty Days (JPM) (SYSTEM5, set 5)", + "j5buc", "Buccaneer (JPM) (SYSTEM5)", + "j5cir", "Circus (JPM) (SYSTEM5, set 1)", + "j5cira", "Circus (JPM) (SYSTEM5, set 2)", + "j5cirb", "Circus (JPM) (SYSTEM5, set 3)", + "j5circ", "Circus (JPM) (SYSTEM5, set 4)", + "j5cird", "Circus (JPM) (SYSTEM5, set 5)", + "j5cire", "Circus (JPM) (SYSTEM5, set 6)", + "j5clbnud", "Club Nudger (JPM) (SYSTEM5-SAA, set 1)", + "j5clbnuda", "Club Nudger (JPM) (SYSTEM5-SAA, set 2)", + "j5daycls", "Daytona Classic (JPM) (SYSTEM5, set 1)", + "j5dayclsa", "Daytona Classic (JPM) (SYSTEM5, set 2)", + "j5daytn", "Daytona (JPM) (SYSTEM5, set 1)", + "j5daytna", "Daytona (JPM) (SYSTEM5, set 2)", + "j5dirty", "Dirty Dozen (JPM) (SYSTEM5, set 1)", + "j5dirtya", "Dirty Dozen (JPM) (SYSTEM5, set 2)", + "j5dirtyb", "Dirty Dozen (JPM) (SYSTEM5, set 3)", + "j5dirtyc", "Dirty Dozen (JPM) (SYSTEM5, set 4)", + "j5fair", "Fairground (JPM) (SYSTEM5, set 1)", + "j5faira", "Fairground (JPM) (SYSTEM5, set 2)", + "j5fairb", "Fairground (JPM) (SYSTEM5, set 3)", + "j5fairc", "Fairground (JPM) (SYSTEM5, set 4)", + "j5faird", "Fairground (JPM) (SYSTEM5, set 5)", + "j5faire", "Fairground (JPM) (SYSTEM5, set 6)", + "j5fairf", "Fairground (JPM) (SYSTEM5, set 7)", + "j5fairg", "Fairground (JPM) (SYSTEM5, set 8)", + "j5fairgd", "Fairground Attraction Club (JPM) (SYSTEM5, set 1)", + "j5fairgda", "Fairground Attraction Club (JPM) (SYSTEM5, set 2)", + "j5fairgdb", "Fairground Attraction Club (JPM) (SYSTEM5, set 3)", + "j5fairgdc", "Fairground Attraction Club (JPM) (SYSTEM5, set 4)", + "j5fairgdd", "Fairground Attraction Club (JPM) (SYSTEM5, set 5)", + "j5fairgde", "Fairground Attraction Club (JPM) (SYSTEM5, set 6)", + "j5fairh", "Fairground (JPM) (SYSTEM5, set 9)", + "j5fairi", "Fairground (JPM) (SYSTEM5, set 10)", + "j5fairj", "Fairground (JPM) (SYSTEM5, set 11)", + "j5fairk", "Fairground (JPM) (SYSTEM5, set 12)", + "j5fairl", "Fairground (JPM) (SYSTEM5, set 13)", + "j5fairm", "Fairground (JPM) (SYSTEM5, set 14)", + "j5fairn", "Fairground (JPM) (SYSTEM5, set 15)", + "j5fairo", "Fairground (JPM) (SYSTEM5, set 16)", + "j5fairp", "Fairground (JPM) (SYSTEM5, set 17)", + "j5fairq", "Fairground (JPM) (SYSTEM5, set 18)", + "j5fifth", "5th Avenue (JPM) (SYSTEM5-SAA)", + "j5filth", "Filthy Rich (JPM) (SYSTEM5, set 1)", + "j5filtha", "Filthy Rich (JPM) (SYSTEM5, set 2)", + "j5filthb", "Filthy Rich (JPM) (SYSTEM5, set 3)", + "j5filthc", "Filthy Rich (JPM) (SYSTEM5, set 4)", + "j5filthd", "Filthy Rich (JPM) (SYSTEM5, set 5)", + "j5filthe", "Filthy Rich (JPM) (SYSTEM5, set 6)", + "j5filthf", "Filthy Rich (JPM) (SYSTEM5, set 7)", + "j5filthg", "Filthy Rich (JPM) (SYSTEM5, set 8)", + "j5filthh", "Filthy Rich (JPM) (SYSTEM5, set 9)", + "j5filthi", "Filthy Rich (JPM) (SYSTEM5, set 10)", + "j5filthj", "Filthy Rich (JPM) (SYSTEM5, set 11)", + "j5firebl", "Fireball (JPM) (SYSTEM5-SAA, set 1)", + "j5firebla", "Fireball (JPM) (SYSTEM5-SAA, set 2)", + "j5fireblb", "Fireball (JPM) (SYSTEM5-SAA, set 3)", + "j5frmag", "Fruit Magic (JPM) (SYSTEM5-SAA)", + "j5goldbr", "Golden Bars (JPM) (SYSTEM5-SAA)", + "j5hagar", "Hagar (JPM) (SYSTEM5, set 1)", + "j5hagara", "Hagar (JPM) (SYSTEM5, set 2)", + "j5hagarb", "Hagar (JPM) (SYSTEM5, set 3)", + "j5hagarc", "Hagar (JPM) (SYSTEM5, set 4)", + "j5hagard", "Hagar (JPM) (SYSTEM5, set 5)", + "j5hagare", "Hagar (JPM) (SYSTEM5, set 6)", + "j5hagarf", "Hagar (JPM) (SYSTEM5, set 7)", + "j5hagarg", "Hagar (JPM) (SYSTEM5, set 8)", + "j5hagarh", "Hagar (JPM) (SYSTEM5, set 9)", + "j5hagari", "Hagar (JPM) (SYSTEM5, set 10)", + "j5hagarj", "Hagar (JPM) (SYSTEM5, set 11)", + "j5hagsho", "Hagar Showcase (JPM) (SYSTEM5, set 1)", + "j5hagshoa", "Hagar Showcase (JPM) (SYSTEM5, set 2)", + "j5hagshob", "Hagar Showcase (JPM) (SYSTEM5, set 3)", + "j5hagshoc", "Hagar Showcase (JPM) (SYSTEM5, set 4)", + "j5hilos", "Hi Lo Silver (JPM) (SYSTEM5)", + "j5holly", "Hollywood Nights (JPM) (SYSTEM5, set 1)", + "j5hollya", "Hollywood Nights (JPM) (SYSTEM5, set 2)", + "j5hollyb", "Hollywood Nights (JPM) (SYSTEM5, set 3)", + "j5hollyc", "Hollywood Nights (JPM) (SYSTEM5, set 4)", + "j5hollyd", "Hollywood Nights (JPM) (SYSTEM5, set 5)", + "j5hollye", "Hollywood Nights (JPM) (SYSTEM5, set 6)", + "j5hotdog", "Hot Dogs (JPM) (SYSTEM5, set 1)", + "j5hotdoga", "Hot Dogs (JPM) (SYSTEM5, set 2)", + "j5indsum", "Indian Summer (JPM) (SYSTEM5)", + "j5intr", "Intrigue (JPM) (SYSTEM5, set 1)", + "j5intra", "Intrigue (JPM) (SYSTEM5, set 2)", + "j5intrb", "Intrigue (JPM) (SYSTEM5, set 3)", + "j5intrc", "Intrigue (JPM) (SYSTEM5, set 4)", + "j5jokgld", "Jokers Gold (JPM) (SYSTEM5, set 1)", + "j5jokglda", "Jokers Gold (JPM) (SYSTEM5, set 2)", + "j5jokgldb", "Jokers Gold (JPM) (SYSTEM5, set 3)", + "j5jokgldc", "Jokers Gold (JPM) (SYSTEM5, set 4)", + "j5jokgldd", "Jokers Gold (JPM) (SYSTEM5, set 5)", + "j5jokglde", "Jokers Gold (JPM) (SYSTEM5, set 6)", + "j5jokgldf", "Jokers Gold (JPM) (SYSTEM5, set 7)", + "j5jokgldg", "Jokers Gold (JPM) (SYSTEM5, set 8)", + "j5jokgldh", "Jokers Gold (JPM) (SYSTEM5, set 9)", + "j5movie", "Movie Magic Club (Crystal) (SYSTEM5)", + "j5nite", "Nite Club (JPM) (SYSTEM5, set 1)", + "j5nitea", "Nite Club (JPM) (SYSTEM5, set 2)", + "j5nudfic", "Nudge Fiction (JPM) (SYSTEM5)", + "j5palm", "Palm Springs (JPM) (SYSTEM5, set 1)", + "j5palma", "Palm Springs (JPM) (SYSTEM5, set 2)", + "j5phnx", "Phoenix (JPM) (SYSTEM5, set 1)", + "j5phnxa", "Phoenix (JPM) (SYSTEM5, set 2)", + "j5popeye", "Popeye (JPM) (SYSTEM5, set 1)", + "j5popeyea", "Popeye (JPM) (SYSTEM5, set 2)", + "j5popeyeb", "Popeye (JPM) (SYSTEM5, set 3)", + "j5popeyec", "Popeye (JPM) (SYSTEM5, set 4)", + "j5popeyed", "Popeye (JPM) (SYSTEM5, set 5)", + "j5popeyee", "Popeye (JPM) (SYSTEM5, set 6)", + "j5popeyef", "Popeye (JPM) (SYSTEM5, set 7)", + "j5popeyeg", "Popeye (JPM) (SYSTEM5, set 8)", + "j5popeyeh", "Popeye (JPM) (SYSTEM5, set 9)", + "j5popeyei", "Popeye (JPM) (SYSTEM5, set 10)", + "j5popprz", "Prize Popeye Vending (JPM) (SYSTEM5, set 1)", + "j5popprza", "Prize Popeye Vending (JPM) (SYSTEM5, set 2)", + "j5popth", "Popeye's Treasure Hunt (JPM) (SYSTEM5, set 1)", + "j5poptha", "Popeye's Treasure Hunt (JPM) (SYSTEM5, set 2)", + "j5popthb", "Popeye's Treasure Hunt (JPM) (SYSTEM5, set 3)", + "j5reelgh", "Reel Ghost (JPM) (SYSTEM5-SAA)", + "j5revo", "Revolver (JPM) (SYSTEM5, set 1)", + "j5revoa", "Revolver (JPM) (SYSTEM5, set 2)", + "j5roul", "Roulette (JPM) (SYSTEM5)", + "j5roulcl", "Roulette Club (JPM) (SYSTEM5, set 1)", + "j5roulcla", "Roulette Club (JPM) (SYSTEM5, set 2)", + "j5roulclb", "Roulette Club (JPM) (SYSTEM5, set 3)", + "j5roulclc", "Roulette Club (JPM) (SYSTEM5, set 4)", + "j5sizl", "Sizzling (JPM) (SYSTEM5)", + "j5slvree", "Silver Reels (JPM) (SYSTEM5, set 1)", + "j5slvreea", "Silver Reels (JPM) (SYSTEM5, set 2)", + "j5slvstr", "Silver Streak (JPM) (SYSTEM5, set 1)", + "j5slvstra", "Silver Streak (JPM) (SYSTEM5, set 2)", + "j5slvstrb", "Silver Streak (JPM) (SYSTEM5, set 3)", + "j5street", "Streetwise (JPM) (SYSTEM5)", + "j5sup4", "Super 4 (JPM) (SYSTEM5-SAA)", + "j5supbar", "Super Bars (JPM) (SYSTEM5, set 1)", + "j5supbara", "Super Bars (JPM) (SYSTEM5, set 2)", + "j5suphi", "Super Hi-Lo (JPM) (SYSTEM5-SAA)", + "j5swop", "Swop A Fruit Club (JPM) (SYSTEM5-SAA)", + "j5td", "Tumbling Dice (JPM) (SYSTEM5-SAA)", + "j5term", "Terminator (JPM) (SYSTEM5)", + "j5topshp", "Top Of The Shop Club (JPM) (SYSTEM5)", + "j5trail", "Trailblazer Club (JPM) (SYSTEM5, set 1)", + "j5traila", "Trailblazer Club (JPM) (SYSTEM5, set 2)", + "j5trailb", "Trailblazer Club (JPM) (SYSTEM5, set 3)", + "j5tst1", "JPM System 5 Test Set (JPM) (SYSTEM5, set 1)", + "j5tst2", "JPM System 5 Test Set (JPM) (SYSTEM5, set 2)", + "j5tstal", "JPM System 5 Alpha Display Test Utility (JPM) (SYSTEM5)", + "j5uj", "Union Jackpot (JPM) (SYSTEM5, set 1)", + "j5uja", "Union Jackpot (JPM) (SYSTEM5, set 2)", + "j5ujb", "Union Jackpot (JPM) (SYSTEM5, set 3)", + "j5wsc", "Wall Street Club (JPM) (SYSTEM5, set 1)", + "j5wsca", "Wall Street Club (JPM) (SYSTEM5, set 2)", + "j6aceclb", "Ace Of Clubs (Crystal) (IMPACT, set 1)", + "j6aceclba", "Ace Of Clubs (Crystal) (IMPACT, set 2)", + "j6acehi", "Aces High (Ace) (IMPACT)", + "j6amdrm", "American Dream (Mdm) (IMPACT)", + "j6arcade", "Arcadia (JPM) (IMPACT) (V9, set 1)", + "j6arcadea", "Arcadia (JPM) (IMPACT) (V9, set 2)", + "j6arcadeb", "Arcadia (JPM) (IMPACT) (V9, set 3)", + "j6arcadec", "Arcadia (JPM) (IMPACT) (V9, set 4)", + "j6arcaded", "Arcadia (JPM) (IMPACT) (V9, set 5)", + "j6arcadee", "Arcadia (JPM) (IMPACT) (V10, set 1)", + "j6arcadef", "Arcadia (JPM) (IMPACT) (V10, set 2)", + "j6arcadeg", "Arcadia (JPM) (IMPACT) (V10, set 3)", + "j6arcadeh", "Arcadia (JPM) (IMPACT) (V10, set 4)", + "j6arcadei", "Arcadia (JPM) (IMPACT) (V10, set 5)", + "j6arcadej", "Arcadia (JPM) (IMPACT) (V10, set 6)", + "j6arcadek", "Arcadia (JPM) (IMPACT) (V10, set 7)", + "j6bags", "Three Bags Full (JPM) (IMPACT)", + "j6bbankr", "Big Banker (Crystal) (IMPACT) (BB 2 T 2)", + "j6big50", "Big 50 (JPM) (IMPACT) (set 1)", + "j6big50a", "Big 50 (JPM) (IMPACT) (set 2)", + "j6big50b", "Big 50 (JPM) (IMPACT) (set 3)", + "j6big50c", "Big 50 (JPM) (IMPACT) (set 4)", + "j6big50d", "Big 50 (JPM) (IMPACT) (set 5)", + "j6bigbnk", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 1)", + "j6bigbnka", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 2)", + "j6bigbnkb", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 3)", + "j6bigbnkc", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 4)", + "j6bigbnkd", "Big Banker (JPM) (IMPACT) (BB8 H18)", + "j6bigbnke", "Big Banker (JPM) (IMPACT) (BB8 P H18)", + "j6bigbnkf", "Big Banker (JPM) (IMPACT) (BB8 AH18)", + "j6bigbnkg", "Big Banker (JPM) (IMPACT) (BB6 C 16) (set 1)", + "j6bigbnkh", "Big Banker (JPM) (IMPACT) (BB6 C 16) (set 2)", + "j6bigbnki", "Big Banker (JPM) (IMPACT) (BB2B H11)", + "j6bigbnkj", "Big Banker (JPM) (IMPACT) (BB2BP H11)", + "j6bigbnkk", "Big Banker (JPM) (IMPACT) (BB2B AH11)", + "j6bigbnkl", "Big Banker (JPM) (IMPACT) (BB2BI H11)", + "j6bigbnkm", "Big Banker (JPM) (IMPACT) (BB2II H08)", + "j6bigbnkn", "Big Banker (JPM) (IMPACT) (BB 9C 19)", + "j6bigbnko", "Big Banker (JPM) (IMPACT) (BB5 I H15)", + "j6bigbnkp", "Big Banker (JPM) (IMPACT) (BB4 I H09)", + "j6bigbuk", "Big Bucks (JPM) (IMPACT) (set 1)", + "j6bigbuka", "Big Bucks (JPM) (IMPACT) (set 2)", + "j6bigbukb", "Big Bucks (JPM) (IMPACT) (set 3)", + "j6bigbukc", "Big Bucks (JPM) (IMPACT) (set 4)", + "j6bigbukd", "Big Bucks (JPM) (IMPACT) (set 5)", + "j6bigbuke", "Big Bucks (JPM) (IMPACT) (set 6)", + "j6bigbukf", "Big Bucks (JPM) (IMPACT) (set 7)", + "j6bigbukg", "Big Bucks (JPM) (IMPACT) (set 8)", + "j6bigbukh", "Big Bucks (JPM) (IMPACT) (set 9)", + "j6bigbuki", "Big Bucks (JPM) (IMPACT) (set 10)", + "j6bigbukj", "Big Bucks (JPM) (IMPACT) (set 11)", + "j6bigcsh", "Big Cash Machine (Empire) (IMPACT)", + "j6bigpct", "Big Picture (Ace) (IMPACT) (set 1)", + "j6bigpcta", "Big Picture (Ace) (IMPACT) (set 2)", + "j6bigpctb", "Big Picture (Ace) (IMPACT) (set 3)", + "j6bigtop", "Big Top Club (JPM) (IMPACT) (set 1)", + "j6bigtopa", "Big Top Club (JPM) (IMPACT) (set 2)", + "j6bigtopb", "Big Top Club (JPM) (IMPACT) (set 3)", + "j6bigtopc", "Big Top Club (JPM) (IMPACT) (set 4)", + "j6bigwhl", "Big Wheel (JPM) (IMPACT) (set 1)", + "j6bigwhla", "Big Wheel (JPM) (IMPACT) (set 2)", + "j6bigwhlb", "Big Wheel (JPM) (IMPACT) (set 3)", + "j6bigwhlc", "Big Wheel (JPM) (IMPACT) (set 4)", + "j6bigwhld", "Big Wheel (JPM) (IMPACT) (set 5)", + "j6bigwhle", "Big Wheel (JPM) (IMPACT) (set 6)", + "j6bmc", "Big Money Club (Crystal) (IMPACT) (set 1)", + "j6bmca", "Big Money Club (Crystal) (IMPACT) (set 2)", + "j6bnkrcl", "Banker Club (JPM) (IMPACT) (V6, set 1)", + "j6bnkrcla", "Banker Club (JPM) (IMPACT) (V6, set 2)", + "j6bnkrclb", "Banker Club (JPM) (IMPACT) (V6, set 3)", + "j6bnkrclc", "Banker Club (JPM) (IMPACT) (V2)", + "j6bno", "Big Nite Out (Crystal) (IMPACT) (set 1)", + "j6bnoa", "Big Nite Out (Crystal) (IMPACT) (set 2)", + "j6bnob", "Big Nite Out (Crystal) (IMPACT) (set 3)", + "j6bnoc", "Big Nite Out (Crystal) (IMPACT) (set 4)", + "j6bnza", "Bonanza (JPM) (IMPACT) (BO1 H06)", + "j6bnzaa", "Bonanza (JPM) (IMPACT) (BO1 P H06)", + "j6bnzab", "Bonanza (JPM) (IMPACT) (BO1 AH06)", + "j6bnzac", "Bonanza (JPM) (IMPACT) (BO1 I H06)", + "j6bnzad", "Bonanza (JPM) (IMPACT) (BO 9 14)", + "j6bnzae", "Bonanza (JPM) (IMPACT) (BO 9P 14)", + "j6bnzaf", "Bonanza (JPM) (IMPACT) (BO 9 A 14)", + "j6bnzag", "Bonanza (JPM) (IMPACT) (BO 9I 14)", + "j6bnzah", "Bonanza (JPM) (IMPACT) (BO5 H10)", + "j6bnzai", "Bonanza (JPM) (IMPACT) (BO5 I H10)", + "j6bnzaj", "Bonanza (JPM) (IMPACT) (incomplete pair)", + "j6bnzak", "Bonanza (JPM) (IMPACT) (BO06 11)", + "j6brkout", "Breakout (JPM) (IMPACT) (set 1)", + "j6brkouta", "Breakout (JPM) (IMPACT) (set 2)", + "j6btbw", "Born To Be Wild Club (Crystal) (IMPACT) (set 1)", + "j6btbwa", "Born To Be Wild Club (Crystal) (IMPACT) (set 2)", + "j6btbwb", "Born To Be Wild Club (Crystal) (IMPACT) (set 3)", + "j6btbwc", "Born To Be Wild Club (Crystal) (IMPACT) (set 4)", + "j6btbwd", "Born To Be Wild Club (Crystal) (IMPACT) (set 5)", + "j6bucks", "Bucks Fizz (Ace) (IMPACT)", + "j6camelt", "Camelot (JPM) (IMPACT) (set 1)", + "j6camelta", "Camelot (JPM) (IMPACT) (set 2)", + "j6cameltb", "Camelot (JPM) (IMPACT) (set 3)", + "j6cameltc", "Camelot (JPM) (IMPACT) (set 4)", + "j6cameltd", "Camelot (JPM) (IMPACT) (set 5)", + "j6cas5", "Casino 5ive Liner (JPM) (IMPACT) (set 1)", + "j6cas5a", "Casino 5ive Liner (JPM) (IMPACT) (set 2)", + "j6cas5b", "Casino 5ive Liner (JPM) (IMPACT) (set 3)", + "j6cas5c", "Casino 5ive Liner (JPM) (IMPACT) (set 4)", + "j6cas5d", "Casino 5ive Liner (JPM) (IMPACT) (set 5)", + "j6cas5e", "Casino 5ive Liner (JPM) (IMPACT) (set 6)", + "j6cas5f", "Casino 5ive Liner (JPM) (IMPACT) (set 7)", + "j6cas5g", "Casino 5ive Liner (JPM) (IMPACT) (set 8)", + "j6cas5h", "Casino 5ive Liner (JPM) (IMPACT) (set 9)", + "j6cas5i", "Casino 5ive Liner (JPM) (IMPACT) (set 10)", + "j6cas5j", "Casino 5ive Liner (JPM) (IMPACT) (set 11)", + "j6cas5k", "Casino 5ive Liner (JPM) (IMPACT) (set 12)", + "j6cas5l", "Casino 5ive Liner (JPM) (IMPACT) (set 13)", + "j6cascla", "Casino Crazy Classic Club (JPM) (IMPACT) (set 1)", + "j6casclaa", "Casino Crazy Classic Club (JPM) (IMPACT) (set 2)", + "j6casclab", "Casino Crazy Classic Club (JPM) (IMPACT) (set 3)", + "j6casclac", "Casino Crazy Classic Club (JPM) (IMPACT) (set 4)", + "j6casclad", "Casino Crazy Classic Club (JPM) (IMPACT) (set 5)", + "j6casclae", "Casino Crazy Classic Club (JPM) (IMPACT) (set 6)", + "j6casclaf", "Casino Crazy Classic Club (JPM) (IMPACT) (set 7)", + "j6casclag", "Casino Crazy Classic Club (JPM) (IMPACT) (set 8)", + "j6casclah", "Casino Crazy Classic Club (JPM) (IMPACT) (set 9)", + "j6casclai", "Casino Crazy Classic Club (JPM) (IMPACT) (set 10)", + "j6casclaj", "Casino Crazy Classic Club (JPM) (IMPACT) (set 11)", + "j6casclak", "Casino Crazy Classic Club (JPM) (IMPACT) (set 12)", + "j6casclal", "Casino Crazy Classic Club (JPM) (IMPACT) (set 13)", + "j6casclam", "Casino Crazy Classic Club (JPM) (IMPACT) (set 14)", + "j6casclan", "Casino Crazy Classic Club (JPM) (IMPACT) (set 15)", + "j6casclao", "Casino Crazy Classic Club (JPM) (IMPACT) (set 16)", + "j6casclap", "Casino Crazy Classic Club (JPM) (IMPACT) (set 17)", + "j6casclaq", "Casino Crazy Classic Club (JPM) (IMPACT) (set 18)", + "j6casclar", "Casino Crazy Classic Club (JPM) (IMPACT) (set 19)", + "j6casclas", "Casino Crazy Classic Club (JPM) (IMPACT) (set 20)", + "j6casclat", "Casino Crazy Classic Club (JPM) (IMPACT) (set 21)", + "j6casclb", "Casino Crazy Club (JPM) (IMPACT) (set 1)", + "j6casclba", "Casino Crazy Club (JPM) (IMPACT) (set 2)", + "j6cascz", "Casino Crazy (JPM) (IMPACT) (set 1)", + "j6cascza", "Casino Crazy (JPM) (IMPACT) (set 2)", + "j6casczb", "Casino Crazy (JPM) (IMPACT) (set 3)", + "j6casczc", "Casino Crazy (JPM) (IMPACT) (set 4)", + "j6casczd", "Casino Crazy (JPM) (IMPACT) (set 5)", + "j6cascze", "Casino Crazy (JPM) (IMPACT) (set 6)", + "j6casczf", "Casino Crazy (JPM) (IMPACT) (set 7)", + "j6casczg", "Casino Crazy (JPM) (IMPACT) (set 8)", + "j6casczh", "Casino Crazy (JPM) (IMPACT) (set 9)", + "j6casczi", "Casino Crazy (JPM) (IMPACT) (set 10)", + "j6casczj", "Casino Crazy (JPM) (IMPACT) (set 11)", + "j6casczk", "Casino Crazy (JPM) (IMPACT) (set 12)", + "j6casczl", "Casino Crazy (JPM) (IMPACT) (set 13)", + "j6casczm", "Casino Crazy (JPM) (IMPACT) (set 14)", + "j6caslas", "Casino Las Vegas (JPM) (IMPACT) (set 1)", + "j6caslasa", "Casino Las Vegas (JPM) (IMPACT) (set 2)", + "j6caslasb", "Casino Las Vegas (JPM) (IMPACT) (set 3)", + "j6caslasc", "Casino Las Vegas (JPM) (IMPACT) (set 4)", + "j6ccc", "Casino Crazy Club (Crystal) (IMPACT) (set 1)", + "j6ccca", "Casino Crazy Club (Crystal) (IMPACT) (set 2)", + "j6cccb", "Casino Crazy Club (Crystal) (IMPACT) (set 3)", + "j6cccc", "Casino Crazy Club (Crystal) (IMPACT) (set 4)", + "j6cccla", "Casino Crazy Classic (JPM) (IMPACT) (set 1)", + "j6ccclaa", "Casino Crazy Classic (JPM) (IMPACT) (set 2)", + "j6ccclab", "Casino Crazy Classic (JPM) (IMPACT) (set 3)", + "j6ccclac", "Casino Crazy Classic (JPM) (IMPACT) (set 4)", + "j6ccclad", "Casino Crazy Classic (JPM) (IMPACT) (set 5)", + "j6ccclae", "Casino Crazy Classic (JPM) (IMPACT) (set 6)", + "j6ccclaf", "Casino Crazy Classic (JPM) (IMPACT) (set 7)", + "j6ccclag", "Casino Crazy Classic (JPM) (IMPACT) (set 8)", + "j6ccclah", "Casino Crazy Classic (JPM) (IMPACT) (set 9)", + "j6ccclai", "Casino Crazy Classic (JPM) (IMPACT) (set 10)", + "j6ccclaj", "Casino Crazy Classic (JPM) (IMPACT) (set 11)", + "j6ccclak", "Casino Crazy Classic (JPM) (IMPACT) (set 12)", + "j6cdivr", "Cash Diver (Crystal) (IMPACT)", + "j6cheque", "Cheque Mate (JPM) (IMPACT)", + "j6cluclb", "Cluedo Club (JPM) (IMPACT) (set 1)", + "j6cluclba", "Cluedo Club (JPM) (IMPACT) (set 2)", + "j6cluclbb", "Cluedo Club (JPM) (IMPACT) (set 3)", + "j6cluclbc", "Cluedo Club (JPM) (IMPACT) (set 4)", + "j6cluclbd", "Cluedo Club (JPM) (IMPACT) (set 5)", + "j6cluclbe", "Cluedo Club (JPM) (IMPACT) (set 6)", + "j6cluclbf", "Cluedo Club (JPM) (IMPACT) (set 7)", + "j6cluclbg", "Cluedo Club (JPM) (IMPACT) (set 8)", + "j6cluclbh", "Cluedo Club (JPM) (IMPACT) (set 9)", + "j6cluclbi", "Cluedo Club (JPM) (IMPACT) (set 10)", + "j6cluclbj", "Cluedo Club (JPM) (IMPACT) (set 11)", + "j6cluclbk", "Cluedo Club (JPM) (IMPACT) (set 12)", + "j6cluclbl", "Cluedo Club (JPM) (IMPACT) (set 13)", + "j6col", "Coliseum (Mdm) (IMPACT) (set 1)", + "j6cola", "Coliseum (Mdm) (IMPACT) (set 2)", + "j6colb", "Coliseum (Mdm) (IMPACT) (set 3)", + "j6colc", "Coliseum (Mdm) (IMPACT) (set 4)", + "j6colcsh", "Coliseum Cash (JPM) (IMPACT) (set 1)", + "j6colcsha", "Coliseum Cash (JPM) (IMPACT) (set 2)", + "j6colcshb", "Coliseum Cash (JPM) (IMPACT) (set 3)", + "j6colcshc", "Coliseum Cash (JPM) (IMPACT) (set 4)", + "j6colcshd", "Coliseum Cash (JPM) (IMPACT) (set 5)", + "j6cold", "Coliseum (Mdm) (IMPACT) (set 5)", + "j6cole", "Coliseum (Mdm) (IMPACT) (set 6)", + "j6colf", "Coliseum (Mdm) (IMPACT) (set 7)", + "j6colic", "Coliseum (Crystal) (IMPACT) (set 1)", + "j6colica", "Coliseum (Crystal) (IMPACT) (set 2)", + "j6colicb", "Coliseum (Crystal) (IMPACT) (set 3)", + "j6colicc", "Coliseum (Crystal) (IMPACT) (set 4)", + "j6colicd", "Coliseum (Crystal) (IMPACT) (set 5)", + "j6colmon", "Colour Of Money (JPM) (IMPACT) (set 1)", + "j6colmona", "Colour Of Money (JPM) (IMPACT) (set 2)", + "j6colmonb", "Colour Of Money (JPM) (IMPACT) (set 3)", + "j6colmonc", "Colour Of Money (JPM) (IMPACT) (set 4)", + "j6colmond", "Colour Of Money (JPM) (IMPACT) (set 5)", + "j6colmone", "Colour Of Money (JPM) (IMPACT) (set 6)", + "j6colmonf", "Colour Of Money (JPM) (IMPACT) (set 7)", + "j6colmong", "Colour Of Money (JPM) (IMPACT) (set 8)", + "j6colmonh", "Colour Of Money (JPM) (IMPACT) (set 9)", + "j6colmoni", "Colour Of Money (JPM) (IMPACT) (set 10)", + "j6colmonj", "Colour Of Money (JPM) (IMPACT) (set 11)", + "j6coprob", "Cops 'n' Robbers (Qps) (IMPACT) (set 1)", + "j6coproba", "Cops 'n' Robbers (Qps) (IMPACT) (set 2)", + "j6coprobb", "Cops 'n' Robbers (Qps) (IMPACT) (set 3)", + "j6coprobc", "Cops 'n' Robbers (Qps) (IMPACT) (set 4)", + "j6coprobd", "Cops 'n' Robbers (Qps) (IMPACT) (set 5)", + "j6coprobe", "Cops 'n' Robbers (Qps) (IMPACT) (set 6)", + "j6cpal", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 1)", + "j6cpala", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 2)", + "j6cpalb", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 3)", + "j6cpalc", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 4)", + "j6cpald", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 5)", + "j6cpale", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 6)", + "j6cpalf", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 7)", + "j6cpalg", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 8)", + "j6cpclb", "Caesar's Palace Club (JPM) (IMPACT) (set 1)", + "j6cpclba", "Caesar's Palace Club (JPM) (IMPACT) (set 2)", + "j6cpclbb", "Caesar's Palace Club (JPM) (IMPACT) (set 3)", + "j6crack", "Cracker (JPM) (IMPACT) (set 1)", + "j6cracka", "Cracker (JPM) (IMPACT) (set 2)", + "j6crackb", "Cracker (JPM) (IMPACT) (set 3)", + "j6crackc", "Cracker (JPM) (IMPACT) (set 4)", + "j6crackd", "Cracker (JPM) (IMPACT) (set 5)", + "j6cracke", "Cracker (JPM) (IMPACT) (set 6)", + "j6crackf", "Cracker (JPM) (IMPACT) (set 7)", + "j6crackg", "Cracker (JPM) (IMPACT) (set 8)", + "j6crackh", "Cracker (JPM) (IMPACT) (set 9)", + "j6cracki", "Cracker (JPM) (IMPACT) (set 10)", + "j6crackj", "Cracker (JPM) (IMPACT) (set 11)", + "j6crakr", "Cracker (Crystal) (IMPACT) (set 1)", + "j6crakra", "Cracker (Crystal) (IMPACT) (set 2)", + "j6crakrb", "Cracker (Crystal) (IMPACT) (set 3)", + "j6crsfir", "Cross Fire (JPM) (IMPACT) (set 1)", + "j6crsfira", "Cross Fire (JPM) (IMPACT) (set 2)", + "j6crzclb", "Crazy Club (JPM) (IMPACT) (set 1)", + "j6crzclba", "Crazy Club (JPM) (IMPACT) (set 2)", + "j6crzclbb", "Crazy Club (JPM) (IMPACT) (set 3)", + "j6crzclbc", "Crazy Club (JPM) (IMPACT) (set 4)", + "j6cshbeu", "Cash Box Club (Empire) (Euro) (IMPACT)", + "j6cshbox", "Cash Box Club (Empire) (IMPACT) (set 1)", + "j6cshboxa", "Cash Box Club (Empire) (IMPACT) (set 2)", + "j6cshboxb", "Cash Box Club (Empire) (IMPACT) (set 3)", + "j6cshbst", "Cash Buster (JPM) (IMPACT) (set 1)", + "j6cshbsta", "Cash Buster (JPM) (IMPACT) (set 2)", + "j6cshbstb", "Cash Buster (JPM) (IMPACT) (set 3)", + "j6cshbstc", "Cash Buster (JPM) (IMPACT) (set 4)", + "j6cshbstd", "Cash Buster (JPM) (IMPACT) (set 5)", + "j6cshcnt", "Cash Countdown (JPM) (IMPACT) (set 1)", + "j6cshcnta", "Cash Countdown (JPM) (IMPACT) (set 2)", + "j6cshrd", "Cash Raider (Ace) (IMPACT) (set 1)", + "j6cshrda", "Cash Raider (Ace) (IMPACT) (set 2)", + "j6cshrdb", "Cash Raider (Ace) (IMPACT) (set 3)", + "j6cshrdc", "Cash Raider (Ace) (IMPACT) (set 4)", + "j6cshrdd", "Cash Raider (Ace) (IMPACT) (set 5)", + "j6cshtwr", "Cash Towers (JPM) (IMPACT)", + "j6cshvgs", "Cash Vegas Strip (JPM) (IMPACT) (set 1)", + "j6cshvgsa", "Cash Vegas Strip (JPM) (IMPACT) (set 2)", + "j6cshvgsb", "Cash Vegas Strip (JPM) (IMPACT) (set 3)", + "j6cshvgsc", "Cash Vegas Strip (JPM) (IMPACT) (set 4)", + "j6cshvgsd", "Cash Vegas Strip (JPM) (IMPACT) (set 5)", + "j6cshvgse", "Cash Vegas Strip (JPM) (IMPACT) (set 6)", + "j6cshvgsf", "Cash Vegas Strip (JPM) (IMPACT) (set 7)", + "j6cshvgsg", "Cash Vegas Strip (JPM) (IMPACT) (set 8)", + "j6cshvgsh", "Cash Vegas Strip (JPM) (IMPACT) (set 9)", + "j6cshvgsi", "Cash Vegas Strip (JPM) (IMPACT) (set 10)", + "j6cshvgsj", "Cash Vegas Strip (JPM) (IMPACT) (set 11)", + "j6cshvgsk", "Cash Vegas Strip (JPM) (IMPACT) (set 12)", + "j6cshvgsl", "Cash Vegas Strip (JPM) (IMPACT) (set 13)", + "j6cshvgsm", "Cash Vegas Strip (JPM) (IMPACT) (set 14)", + "j6cshvgsn", "Cash Vegas Strip (JPM) (IMPACT) (set 15)", + "j6cshvgso", "Cash Vegas Strip (JPM) (IMPACT) (set 16)", + "j6cshvgsp", "Cash Vegas Strip (JPM) (IMPACT) (set 17)", + "j6cshvgsq", "Cash Vegas Strip (JPM) (IMPACT) (set 18)", + "j6cshvgsr", "Cash Vegas Strip (JPM) (IMPACT) (set 19)", + "j6daygld", "Daytona Gold (JPM) (IMPACT) (set 1)", + "j6dayglda", "Daytona Gold (JPM) (IMPACT) (set 2)", + "j6daygldb", "Daytona Gold (JPM) (IMPACT) (set 3)", + "j6daygldc", "Daytona Gold (JPM) (IMPACT) (set 4)", + "j6daygldd", "Daytona Gold (JPM) (IMPACT) (set 5)", + "j6dayglde", "Daytona Gold (JPM) (IMPACT) (set 6)", + "j6dayml", "Daytona Millennium (JPM) (IMPACT) (set 1)", + "j6daymla", "Daytona Millennium (JPM) (IMPACT) (set 2)", + "j6daymlb", "Daytona Millennium (JPM) (IMPACT) (set 3)", + "j6dmngz", "Diamond Geezer (JPM) (IMPACT)", + "j6dmnjkr", "Demon Jokers (JPM) (IMPACT) (set 1)", + "j6dmnjkra", "Demon Jokers (JPM) (IMPACT) (set 2)", + "j6dmnjkrb", "Demon Jokers (JPM) (IMPACT) (set 3)", + "j6dmnjkrc", "Demon Jokers (JPM) (IMPACT) (set 4)", + "j6drdogh", "Dr Dough (Qps) (IMPACT)", + "j6dyfl", "Do You Feel Lucky (JPM) (IMPACT) (set 1)", + "j6dyfla", "Do You Feel Lucky (JPM) (IMPACT) (set 2)", + "j6dyflb", "Do You Feel Lucky (JPM) (IMPACT) (set 3)", + "j6dyflc", "Do You Feel Lucky (JPM) (IMPACT) (set 4)", + "j6dyfld", "Do You Feel Lucky (JPM) (IMPACT) (set 5)", + "j6dyfle", "Do You Feel Lucky (JPM) (IMPACT) (set 6)", + "j6dyflf", "Do You Feel Lucky (JPM) (IMPACT) (set 7)", + "j6dyflg", "Do You Feel Lucky (JPM) (IMPACT) (set 8)", + "j6dyflh", "Do You Feel Lucky (JPM) (IMPACT) (set 9)", + "j6dyfli", "Do You Feel Lucky (JPM) (IMPACT) (set 10)", + "j6dyflj", "Do You Feel Lucky (JPM) (IMPACT) (set 11)", + "j6easy", "Easy Money (Crystal) (IMPACT) (set 1)", + "j6easya", "Easy Money (Crystal) (IMPACT) (set 2)", + "j6easyb", "Easy Money (Crystal) (IMPACT) (set 3)", + "j6easyc", "Easy Money (Crystal) (IMPACT) (set 4)", + "j6euphor", "Euphoria (Ace) (IMPACT) (set 1)", + "j6euphora", "Euphoria (Ace) (IMPACT) (set 2)", + "j6euphorb", "Euphoria (Ace) (IMPACT) (set 3)", + "j6euphorc", "Euphoria (Ace) (IMPACT) (set 4)", + "j6euphord", "Euphoria (Ace) (IMPACT) (set 5)", + "j6euphore", "Euphoria (Ace) (IMPACT) (set 6)", + "j6euphorf", "Euphoria (Ace) (IMPACT) (set 7)", + "j6ewn", "Each Way Nudger (JPM) (IMPACT)", + "j6ewndg", "Each Way Nudger (Crystal) (IMPACT) (set 1)", + "j6ewndga", "Each Way Nudger (Crystal) (IMPACT) (set 2)", + "j6ewndgb", "Each Way Nudger (Crystal) (IMPACT) (set 3)", + "j6fastfr", "Fast Fruits Club (Qps) (IMPACT) (set 1)", + "j6fastfra", "Fast Fruits Club (Qps) (IMPACT) (set 2)", + "j6fasttk", "Fast Trak (JPM) (IMPACT) (set 1)", + "j6fasttka", "Fast Trak (JPM) (IMPACT) (set 2)", + "j6fasttkb", "Fast Trak (JPM) (IMPACT) (set 3)", + "j6fasttkc", "Fast Trak (JPM) (IMPACT) (set 4)", + "j6fbcrz", "Football Crazy (JPM) (IMPACT)", + "j6ffc", "Frame & Fortune Club (Crystal) (IMPACT) (set 1)", + "j6ffca", "Frame & Fortune Club (Crystal) (IMPACT) (set 2)", + "j6ffcb", "Frame & Fortune Club (Crystal) (IMPACT) (set 3)", + "j6ffcc", "Frame & Fortune Club (Crystal) (IMPACT) (set 4)", + "j6ffcd", "Frame & Fortune Club (Crystal) (IMPACT) (set 5)", + "j6ffce", "Frame & Fortune Club (Crystal) (IMPACT) (set 6)", + "j6fifth", "5th Dimension (Ace) (IMPACT)", + "j6filth", "Filthy Rich Club (JPM) (IMPACT) (set 1)", + "j6filtha", "Filthy Rich Club (JPM) (IMPACT) (set 2)", + "j6filthb", "Filthy Rich Club (JPM) (IMPACT) (set 3)", + "j6filthc", "Filthy Rich Club (JPM) (IMPACT) (set 4)", + "j6firbl", "Fireball (JPM) (IMPACT) (set 1)", + "j6firbla", "Fireball (JPM) (IMPACT) (set 2)", + "j6firblb", "Fireball (JPM) (IMPACT) (set 3)", + "j6firblc", "Fireball (JPM) (IMPACT) (set 4)", + "j6firbld", "Fireball (JPM) (IMPACT) (set 5)", + "j6firclb", "Firecracker Club (JPM) (IMPACT) (set 1)", + "j6firclba", "Firecracker Club (JPM) (IMPACT) (set 2)", + "j6firclbb", "Firecracker Club (JPM) (IMPACT) (set 3)", + "j6firclbc", "Firecracker Club (JPM) (IMPACT) (set 4)", + "j6fireck", "Firecracker (JPM) (IMPACT) (set 1)", + "j6firecka", "Firecracker (JPM) (IMPACT) (set 2)", + "j6fireckb", "Firecracker (JPM) (IMPACT) (set 3)", + "j6fireckc", "Firecracker (JPM) (IMPACT) (set 4)", + "j6fireckd", "Firecracker (JPM) (IMPACT) (set 5)", + "j6firecke", "Firecracker (JPM) (IMPACT) (set 6)", + "j6fivalv", "Five Alive Club (JPM) (IMPACT) (set 1)", + "j6fivalva", "Five Alive Club (JPM) (IMPACT) (set 2)", + "j6fivalvb", "Five Alive Club (JPM) (IMPACT) (set 3)", + "j6fiveln", "Five Liner (JPM) (IMPACT) (set 1)", + "j6fivelna", "Five Liner (JPM) (IMPACT) (set 2)", + "j6fivelnb", "Five Liner (JPM) (IMPACT) (set 3)", + "j6fivelnc", "Five Liner (JPM) (IMPACT) (set 4)", + "j6footy", "Football Fever (Empire) (IMPACT) (set 1)", + "j6footya", "Football Fever (Empire) (IMPACT) (set 2)", + "j6footyb", "Football Fever (Empire) (IMPACT) (set 3)", + "j6framft", "Frame & Fortune Club (JPM) (IMPACT)", + "j6frc10", "Force 10 (JPM) (IMPACT) (set 1)", + "j6frc10a", "Force 10 (JPM) (IMPACT) (set 2)", + "j6frc10b", "Force 10 (JPM) (IMPACT) (set 3)", + "j6frc10c", "Force 10 (JPM) (IMPACT) (set 4)", + "j6frc10d", "Force 10 (JPM) (IMPACT) (set 5)", + "j6frtmch", "The Fruit Machine (JPM) (IMPACT)", + "j6frtpot", "Fruitpots (Qps) (IMPACT) (set 1)", + "j6frtpota", "Fruitpots (Qps) (IMPACT) (set 2)", + "j6frtpotb", "Fruitpots (Qps) (IMPACT) (set 3)", + "j6frtpotc", "Fruitpots (Qps) (IMPACT) (set 4)", + "j6gforce", "G Force (JPM) (IMPACT) (set 1)", + "j6gforcea", "G Force (JPM) (IMPACT) (set 2)", + "j6gforceb", "G Force (JPM) (IMPACT) (set 3)", + "j6gforcec", "G Force (JPM) (IMPACT) (set 4)", + "j6gforced", "G Force (JPM) (IMPACT) (15GBP Jackpot)", + "j6gidogh", "G.I. Dough (Ace) (IMPACT)", + "j6gldclb", "Gladiator Club (JPM) (IMPACT) (set 1)", + "j6gldclba", "Gladiator Club (JPM) (IMPACT) (set 2)", + "j6gldclbb", "Gladiator Club (JPM) (IMPACT) (set 3)", + "j6gldmin", "Gold Mine (Empire) (IMPACT)", + "j6gldpl", "Golden Palace (Qps) (IMPACT)", + "j6gogold", "Go For Gold (JPM) (IMPACT) (set 1)", + "j6gogolda", "Go For Gold (JPM) (IMPACT) (set 2)", + "j6gogoldb", "Go For Gold (JPM) (IMPACT) (set 3)", + "j6gogoldc", "Go For Gold (JPM) (IMPACT) (set 4)", + "j6golddm", "Golden Demons (JPM) (IMPACT) (set 1)", + "j6golddma", "Golden Demons (JPM) (IMPACT) (set 2)", + "j6goldgl", "Golden Goal (JPM) (IMPACT) (set 1)", + "j6goldgla", "Golden Goal (JPM) (IMPACT) (set 2)", + "j6goldglb", "Golden Goal (JPM) (IMPACT) (set 3)", + "j6goldglc", "Golden Goal (JPM) (IMPACT) (set 4)", + "j6goldgld", "Golden Goal (JPM) (IMPACT) (set 5)", + "j6goldgle", "Golden Goal (JPM) (IMPACT) (set 6)", + "j6goldglf", "Golden Goal (JPM) (IMPACT) (set 7)", + "j6goldglg", "Golden Goal (JPM) (IMPACT) (set 8)", + "j6goldglh", "Golden Goal (JPM) (IMPACT) (set 9)", + "j6goldgli", "Golden Goal (JPM) (IMPACT) (set 10)", + "j6goldglj", "Golden Goal (JPM) (IMPACT) (set 11)", + "j6goldglk", "Golden Goal (JPM) (IMPACT) (set 12)", + "j6goldgll", "Golden Goal (JPM) (IMPACT) (set 13)", + "j6grc", "Gold Rush Club (Crystal) (IMPACT) (set 1)", + "j6grca", "Gold Rush Club (Crystal) (IMPACT) (set 2)", + "j6guab", "Give Us A Break (JPM) (IMPACT) (set 1)", + "j6guaba", "Give Us A Break (JPM) (IMPACT) (set 2)", + "j6guabb", "Give Us A Break (JPM) (IMPACT) (set 3)", + "j6guabc", "Give Us A Break (JPM) (IMPACT) (set 4)", + "j6guabcl", "Give Us A Break Club (JPM) (IMPACT) (set 1)", + "j6guabcla", "Give Us A Break Club (JPM) (IMPACT) (set 2)", + "j6guabd", "Give Us A Break (JPM) (IMPACT) (set 5)", + "j6guabe", "Give Us A Break (JPM) (IMPACT) (set 6)", + "j6guabf", "Give Us A Break (JPM) (IMPACT) (set 7)", + "j6h5clb", "High Five Club (JPM) (IMPACT) (set 1)", + "j6h5clba", "High Five Club (JPM) (IMPACT) (set 2)", + "j6hapyhr", "Happy Hour (JPM) (IMPACT) (set 1)", + "j6hapyhra", "Happy Hour (JPM) (IMPACT) (set 2)", + "j6hapyhrb", "Happy Hour (JPM) (IMPACT) (set 3)", + "j6hdc", "Hot Dogs Club (Crystal) (IMPACT) (set 1)", + "j6hdca", "Hot Dogs Club (Crystal) (IMPACT) (set 2)", + "j6hdcb", "Hot Dogs Club (Crystal) (IMPACT) (set 3)", + "j6hdcc", "Hot Dogs Club (Crystal) (IMPACT) (set 4)", + "j6hdcd", "Hot Dogs Club (Crystal) (IMPACT) (set 5)", + "j6hdce", "Hot Dogs Club (Crystal) (IMPACT) (set 6)", + "j6hdcf", "Hot Dogs Club (Crystal) (IMPACT) (set 7)", + "j6hdcg", "Hot Dogs Club (Crystal) (IMPACT) (set 8)", + "j6hifly", "Hi Flyer (Crystal) (IMPACT)", + "j6hikar", "Hi Karate (Crystal) (IMPACT) (set 1)", + "j6hikara", "Hi Karate (Crystal) (IMPACT) (set 2)", + "j6hikarb", "Hi Karate (Crystal) (IMPACT) (set 3)", + "j6hilosv", "Hi Lo Silver (JPM) (IMPACT) (set 1)", + "j6hilosva", "Hi Lo Silver (JPM) (IMPACT) (set 2)", + "j6hilosvb", "Hi Lo Silver (JPM) (IMPACT) (set 3)", + "j6hilosvc", "Hi Lo Silver (JPM) (IMPACT) (set 4)", + "j6hilosvd", "Hi Lo Silver (JPM) (IMPACT) (set 5)", + "j6hilosve", "Hi Lo Silver (JPM) (IMPACT) (set 6)", + "j6hiphop", "Hip Hopper (Ace) (IMPACT) (set 1)", + "j6hiphopa", "Hip Hopper (Ace) (IMPACT) (set 2)", + "j6hiphopb", "Hip Hopper (Ace) (IMPACT) (set 3)", + "j6hiphopc", "Hip Hopper (Ace) (IMPACT) (set 4)", + "j6hiphopd", "Hip Hopper (Ace) (IMPACT) (set 5)", + "j6hirlcl", "Hi Roller Club (JPM) (IMPACT) (set 1)", + "j6hirlcla", "Hi Roller Club (JPM) (IMPACT) (set 2)", + "j6hirlclb", "Hi Roller Club (JPM) (IMPACT) (set 3)", + "j6hirlclc", "Hi Roller Club (JPM) (IMPACT) (set 4)", + "j6hirol", "Hi Roller (JPM) (IMPACT) (set 1)", + "j6hirola", "Hi Roller (JPM) (IMPACT) (set 2)", + "j6hirolb", "Hi Roller (JPM) (IMPACT) (set 3)", + "j6hirolc", "Hi Roller (JPM) (IMPACT) (set 4)", + "j6hirold", "Hi Roller (JPM) (IMPACT) (set 5)", + "j6hisprt", "High Spirits (Empire) (IMPACT) (prototype?)", + "j6histk", "Hi Stakes (Qps) (IMPACT) (set 1)", + "j6histka", "Hi Stakes (Qps) (IMPACT) (set 2)", + "j6hotsht", "Hot Shot (Ace) (IMPACT) (set 1)", + "j6hotshta", "Hot Shot (Ace) (IMPACT) (set 2)", + "j6hotshtb", "Hot Shot (Ace) (IMPACT) (set 3)", + "j6hotshtc", "Hot Shot (Ace) (IMPACT) (set 4)", + "j6hotshtd", "Hot Shot (Ace) (IMPACT) (set 5)", + "j6hotshte", "Hot Shot (Ace) (IMPACT) (set 6)", + "j6hotshtf", "Hot Shot (Ace) (IMPACT) (set 7)", + "j6hotshtg", "Hot Shot (Ace) (IMPACT) (set 8)", + "j6hotshth", "Hot Shot (Ace) (IMPACT) (set 9)", + "j6hotshti", "Hot Shot (Ace) (IMPACT) (set 10)", + "j6hotshtj", "Hot Shot (Ace) (IMPACT) (set 11)", + "j6hotshtk", "Hot Shot (Ace) (IMPACT) (set 12)", + "j6hotshtl", "Hot Shot (Ace) (IMPACT) (set 13)", + "j6impact", "Hi Impact (JPM) (IMPACT) (set 1)", + "j6impacta", "Hi Impact (JPM) (IMPACT) (set 2)", + "j6impactb", "Hi Impact (JPM) (IMPACT) (set 3)", + "j6impactc", "Hi Impact (JPM) (IMPACT) (15GBP Jackpot)", + "j6impls", "Impulse (Crystal) (IMPACT)", + "j6impuls", "Impulse (JPM) (IMPACT) (set 1)", + "j6impulsa", "Impulse (JPM) (IMPACT) (set 2)", + "j6impulsb", "Impulse (JPM) (IMPACT) (set 3)", + "j6impulsc", "Impulse (JPM) (IMPACT) (set 4)", + "j6impulsd", "Impulse (JPM) (IMPACT) (set 5)", + "j6impulse", "Impulse (JPM) (IMPACT) (set 6)", + "j6impulsf", "Impulse (JPM) (IMPACT) (set 7)", + "j6indy", "Indiana Jones (JPM) (IMPACT) (set 1)", + "j6indya", "Indiana Jones (JPM) (IMPACT) (set 2)", + "j6indyb", "Indiana Jones (JPM) (IMPACT) (set 3)", + "j6indyc", "Indiana Jones (JPM) (IMPACT) (set 4)", + "j6indyd", "Indiana Jones (JPM) (IMPACT) (set 5)", + "j6indye", "Indiana Jones (JPM) (IMPACT) (set 6)", + "j6indyf", "Indiana Jones (JPM) (IMPACT) (set 7)", + "j6indyg", "Indiana Jones (JPM) (IMPACT) (set 8)", + "j6indyge", "Indiana Jones (JPM) (IMPACT, German set 1)", + "j6indyge2", "Indiana Jones (JPM) (IMPACT, German set 2)", + "j6indyh", "Indiana Jones (JPM) (IMPACT) (set 9)", + "j6indyi", "Indiana Jones (JPM) (IMPACT) (set 10)", + "j6indyj", "Indiana Jones (JPM) (IMPACT) (set 11)", + "j6indyk", "Indiana Jones (JPM) (IMPACT) (set 12)", + "j6jackjs", "Jackpot Justice (Qps) (IMPACT) (set 1)", + "j6jackjsa", "Jackpot Justice (Qps) (IMPACT) (set 2)", + "j6jackjsb", "Jackpot Justice (Qps) (IMPACT) (set 3)", + "j6jackjsc", "Jackpot Justice (Qps) (IMPACT) (set 4)", + "j6jkpldx", "Jokers Plus Deluxe (JPM) (IMPACT) (set 1)", + "j6jkpldxa", "Jokers Plus Deluxe (JPM) (IMPACT) (set 2)", + "j6jkrgld", "Jokers Gold (JPM) (IMPACT)", + "j6jkrpls", "Jokers Plus (JPM) (IMPACT) (set 1)", + "j6jkrplsa", "Jokers Plus (JPM) (IMPACT) (set 2)", + "j6jkrplsb", "Jokers Plus (JPM) (IMPACT) (set 3)", + "j6jkrplsc", "Jokers Plus (JPM) (IMPACT) (set 4)", + "j6jkrplsd", "Jokers Plus (JPM) (IMPACT) (set 5)", + "j6jkrplse", "Jokers Plus (JPM) (IMPACT) (set 6)", + "j6jkwld", "Jokers Wild (JPM) (IMPACT)", + "j6jungfv", "Jungle Fever (Ace) (IMPACT)", + "j6kamel", "Kameleon (JPM) (IMPACT)", + "j6kapang", "Kapang! (Crystal) (IMPACT) (set 1)", + "j6kapanga", "Kapang! (Crystal) (IMPACT) (set 2)", + "j6kfc", "Kung Fu Club (Crystal) (IMPACT) (set 1)", + "j6kfca", "Kung Fu Club (Crystal) (IMPACT) (set 2)", + "j6kfcb", "Kung Fu Club (Crystal) (IMPACT) (set 3)", + "j6knight", "Your Lucky Knight (JPM) (IMPACT) (set 1)", + "j6knighta", "Your Lucky Knight (JPM) (IMPACT) (set 2)", + "j6knightb", "Your Lucky Knight (JPM) (IMPACT) (set 3)", + "j6knightc", "Your Lucky Knight (JPM) (IMPACT) (set 4)", + "j6knightd", "Your Lucky Knight (JPM) (IMPACT) (set 5)", + "j6knighte", "Your Lucky Knight (JPM) (IMPACT) (set 6)", + "j6kungfu", "Kung Fu (Ace) (IMPACT) (set 1)", + "j6kungfua", "Kung Fu (Ace) (IMPACT) (set 2)", + "j6kungfub", "Kung Fu (Ace) (IMPACT) (set 3)", + "j6kungfuc", "Kung Fu (Ace) (IMPACT) (set 4)", + "j6kungfud", "Kung Fu (Ace) (IMPACT) (set 5)", + "j6luckla", "Lucky Las Vegas (JPM) (IMPACT) (set 1)", + "j6lucklaa", "Lucky Las Vegas (JPM) (IMPACT) (set 2)", + "j6lucklab", "Lucky Las Vegas (JPM) (IMPACT) (set 3)", + "j6lucklo", "Lucky Lottery Club (Crystal) (IMPACT) (set 1)", + "j6luckloa", "Lucky Lottery Club (Crystal) (IMPACT) (set 2)", + "j6magcir", "Magic Circle Club (JPM) (IMPACT) (set 1)", + "j6magcira", "Magic Circle Club (JPM) (IMPACT) (set 2)", + "j6magcirb", "Magic Circle Club (JPM) (IMPACT) (set 3)", + "j6magcirc", "Magic Circle Club (JPM) (IMPACT) (set 4)", + "j6magcird", "Magic Circle Club (JPM) (IMPACT) (set 5)", + "j6mavrk", "Maverick (JPM) (IMPACT) (set 1)", + "j6mavrka", "Maverick (JPM) (IMPACT) (set 2)", + "j6mavrkb", "Maverick (JPM) (IMPACT) (set 3)", + "j6mavrkc", "Maverick (JPM) (IMPACT) (set 4)", + "j6mavrkd", "Maverick (JPM) (IMPACT) (set 5)", + "j6maxcsh", "Maximus Cash (JPM) (IMPACT)", + "j6maxod", "Maximum Overdrive (JPM) (IMPACT) (set 1)", + "j6maxoda", "Maximum Overdrive (JPM) (IMPACT) (set 2)", + "j6maxodb", "Maximum Overdrive (JPM) (IMPACT) (set 3)", + "j6maxodc", "Maximum Overdrive (JPM) (IMPACT) (set 4)", + "j6medal", "Medallion Job (Qps) (IMPACT) (set 1)", + "j6medala", "Medallion Job (Qps) (IMPACT) (set 2)", + "j6medalb", "Medallion Job (Qps) (IMPACT) (set 3)", + "j6medalc", "Medallion Job (Qps) (IMPACT) (set 4)", + "j6medald", "Medallion Job (Qps) (IMPACT) (set 5)", + "j6megbck", "Mega Bucks (JPM) (IMPACT) (set 1)", + "j6megbcka", "Mega Bucks (JPM) (IMPACT) (set 2)", + "j6megbckb", "Mega Bucks (JPM) (IMPACT) (set 3)", + "j6megbckc", "Mega Bucks (JPM) (IMPACT) (set 4)", + "j6megbckd", "Mega Bucks (JPM) (IMPACT) (set 5)", + "j6milln", "Millionaire (JPM) (IMPACT) (set 1)", + "j6millna", "Millionaire (JPM) (IMPACT) (set 2)", + "j6monmad", "Money Madness (Ace) (IMPACT)", + "j6mono60", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 1)", + "j6mono60a", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 2)", + "j6mono60b", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 3)", + "j6mono60c", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 4)", + "j6mono60d", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 5)", + "j6mono60e", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 6)", + "j6mono60f", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 7)", + "j6mono60g", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 8)", + "j6mono60h", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 9)", + "j6mono60i", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 10)", + "j6mono60j", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 11)", + "j6mono60k", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 12)", + "j6mono60l", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 13)", + "j6monobn", "Monopoly Bingo (JPM) (IMPACT) (set 1)", + "j6monobna", "Monopoly Bingo (JPM) (IMPACT) (set 2)", + "j6monobnb", "Monopoly Bingo (JPM) (IMPACT) (set 3)", + "j6monst", "Monster Cash Club (Crystal) (IMPACT) (set 1)", + "j6monsta", "Monster Cash Club (Crystal) (IMPACT) (set 2)", + "j6monstb", "Monster Cash Club (Crystal) (IMPACT) (set 3)", + "j6monstc", "Monster Cash Club (Crystal) (IMPACT) (set 4)", + "j6monstd", "Monster Cash Club (Crystal) (IMPACT) (set 5)", + "j6montlk", "Money Talks (JPM) (IMPACT) (set 1)", + "j6montlka", "Money Talks (JPM) (IMPACT) (set 2)", + "j6montlkb", "Money Talks (JPM) (IMPACT) (set 3)", + "j6montlkc", "Money Talks (JPM) (IMPACT) (set 4)", + "j6montlkd", "Money Talks (JPM) (IMPACT) (set 5)", + "j6montlke", "Money Talks (JPM) (IMPACT) (set 6)", + "j6montlkf", "Money Talks (JPM) (IMPACT) (set 7)", + "j6montlkg", "Money Talks (JPM) (IMPACT) (set 8)", + "j6montlkh", "Money Talks (JPM) (IMPACT) (set 9)", + "j6outlaw", "Outlaw (JPM) (IMPACT, v3)", + "j6outlawc", "Outlaw (JPM) (IMPACT, Club?)", + "j6outlawd", "Outlaw (JPM) (IMPACT, v3) (Protocol)", + "j6oxo", "Oxo (JPM) (IMPACT) (set 1)", + "j6oxoa", "Oxo (JPM) (IMPACT) (set 2)", + "j6oxob", "Oxo (JPM) (IMPACT) (set 3)", + "j6oxobin", "Oxo Bingo (JPM) (IMPACT) (set 1)", + "j6oxobina", "Oxo Bingo (JPM) (IMPACT) (set 2)", + "j6oxobinb", "Oxo Bingo (JPM) (IMPACT) (set 3)", + "j6oxobinc", "Oxo Bingo (JPM) (IMPACT) (set 4)", + "j6oxobind", "Oxo Bingo (JPM) (IMPACT) (set 5)", + "j6oxobine", "Oxo Bingo (JPM) (IMPACT) (set 6)", + "j6oxobinf", "Oxo Bingo (JPM) (IMPACT) (set 7)", + "j6oxoc", "Oxo (JPM) (IMPACT) (set 4)", + "j6oxod", "Oxo (JPM) (IMPACT) (set 5)", + "j6oxoe", "Oxo (JPM) (IMPACT) (set 6)", + "j6pacman", "Pac Man Plus (Qps) (IMPACT)", + "j6papa", "Paparazzi (Empire) (IMPACT) (set 1)", + "j6papaa", "Paparazzi (Empire) (IMPACT) (set 2)", + "j6papab", "Paparazzi (Empire) (IMPACT) (set 3)", + "j6papac", "Paparazzi (Empire) (IMPACT) (set 4)", + "j6papad", "Paparazzi (Empire) (IMPACT) (set 5)", + "j6papae", "Paparazzi (Empire) (IMPACT) (set 6)", + "j6papaf", "Paparazzi (Empire) (IMPACT) (set 7)", + "j6phxgld", "Phoenix Gold (JPM) (IMPACT) (set 1)", + "j6phxglda", "Phoenix Gold (JPM) (IMPACT) (set 2)", + "j6phxgldb", "Phoenix Gold (JPM) (IMPACT) (set 3)", + "j6phxgldc", "Phoenix Gold (JPM) (IMPACT) (set 4)", + "j6phxgldd", "Phoenix Gold (JPM) (IMPACT) (set 5)", + "j6phxglde", "Phoenix Gold (JPM) (IMPACT) (set 6)", + "j6phxgldf", "Phoenix Gold (JPM) (IMPACT) (set 7)", + "j6phxgldg", "Phoenix Gold (JPM) (IMPACT) (set 8)", + "j6pinfvr", "Pinball Fever (Crystal) (IMPACT)", + "j6pinwzc", "Pinball Wizard (Crystal) (IMPACT) (set 1)", + "j6pinwzca", "Pinball Wizard (Crystal) (IMPACT) (set 2)", + "j6pinwzcb", "Pinball Wizard (Crystal) (IMPACT) (set 3)", + "j6pinwzd", "Pinball Wizard (JPM) (IMPACT) (set 1)", + "j6pinwzda", "Pinball Wizard (JPM) (IMPACT) (set 2)", + "j6pinwzdb", "Pinball Wizard (JPM) (IMPACT) (set 3)", + "j6pinwzdc", "Pinball Wizard (JPM) (IMPACT) (set 4)", + "j6pinwzdd", "Pinball Wizard (JPM) (IMPACT) (set 5)", + "j6pinwzde", "Pinball Wizard (JPM) (IMPACT) (set 6)", + "j6pirgld", "Pirates Gold (JPM) (IMPACT) (set 1)", + "j6pirglda", "Pirates Gold (JPM) (IMPACT) (set 2)", + "j6pnxgd", "Phoenix Gold De Luxe (JPM) (IMPACT)", + "j6pnxmil", "Phoenix Millennium (JPM) (IMPACT) (set 1)", + "j6pnxmila", "Phoenix Millennium (JPM) (IMPACT) (set 2)", + "j6pnxmilb", "Phoenix Millennium (JPM) (IMPACT) (set 3)", + "j6pnxmilc", "Phoenix Millennium (JPM) (IMPACT) (set 4)", + "j6pog", "Pot Of Gold (Ace) (IMPACT) (set 1)", + "j6poga", "Pot Of Gold (Ace) (IMPACT) (set 2)", + "j6pogb", "Pot Of Gold (Ace) (IMPACT) (set 3)", + "j6pogc", "Pot Of Gold (Ace) (IMPACT) (set 4)", + "j6pogcls", "Pot Of Gold Classic (JPM) (IMPACT) (set 1)", + "j6pogclsa", "Pot Of Gold Classic (JPM) (IMPACT) (set 2)", + "j6pogclsb", "Pot Of Gold Classic (JPM) (IMPACT) (set 3)", + "j6pogd", "Pot Of Gold (Ace) (IMPACT) (set 5)", + "j6pompay", "Up Pompay (Ace) (IMPACT) (set 1)", + "j6pompaya", "Up Pompay (Ace) (IMPACT) (set 2)", + "j6pompayb", "Up Pompay (Ace) (IMPACT) (set 3)", + "j6pompayc", "Up Pompay (Ace) (IMPACT) (set 4)", + "j6popoli", "Popeye & Olive (JPM) (IMPACT) (set 1)", + "j6popolia", "Popeye & Olive (JPM) (IMPACT) (set 2)", + "j6potg", "Pot Of Gold (Crystal) (IMPACT) (set 1)", + "j6potga", "Pot Of Gold (Crystal) (IMPACT) (set 2)", + "j6potgb", "Pot Of Gold (Crystal) (IMPACT) (set 3)", + "j6pwrlin", "Power Lines (JPM) (IMPACT) (set 1)", + "j6pwrlina", "Power Lines (JPM) (IMPACT) (set 2)", + "j6pwrspn", "Powerspin (JPM) (IMPACT) (set 1)", + "j6pwrspna", "Powerspin (JPM) (IMPACT) (set 2)", + "j6pwrspnb", "Powerspin (JPM) (IMPACT) (set 3)", + "j6pwrspnc", "Powerspin (JPM) (IMPACT) (set 4)", + "j6pwrspnd", "Powerspin (JPM) (IMPACT) (set 5)", + "j6pwrspne", "Powerspin (JPM) (IMPACT) (set 6)", + "j6quantm", "Quantum Leap (JPM) (IMPACT) (set 1)", + "j6quantma", "Quantum Leap (JPM) (IMPACT) (set 2)", + "j6quantmb", "Quantum Leap (JPM) (IMPACT) (set 3)", + "j6quantmc", "Quantum Leap (JPM) (IMPACT) (set 4)", + "j6quick", "Quicksilver (RAL) (IMPACT)", + "j6r2rum", "Ready To Rumble (Crystal) (IMPACT) (set 1)", + "j6r2ruma", "Ready To Rumble (Crystal) (IMPACT) (set 2)", + "j6r2rumb", "Ready To Rumble (Crystal) (IMPACT) (set 3)", + "j6r2rumc", "Ready To Rumble (Crystal) (IMPACT) (set 4)", + "j6r2rumd", "Ready To Rumble (Crystal) (IMPACT) (set 5)", + "j6r2rume", "Ready To Rumble (Crystal) (IMPACT) (set 6)", + "j6ra", "Red Alert (JPM) (IMPACT) (set 1)", + "j6raa", "Red Alert (JPM) (IMPACT) (set 2)", + "j6rab", "Red Alert (JPM) (IMPACT) (set 3)", + "j6rac", "Red Alert (JPM) (IMPACT) (set 4)", + "j6raclb", "Red Alert Club (JPM) (IMPACT) (set 1)", + "j6raclba", "Red Alert Club (JPM) (IMPACT) (set 2)", + "j6raclbb", "Red Alert Club (JPM) (IMPACT) (set 3)", + "j6raclbc", "Red Alert Club (JPM) (IMPACT) (set 4)", + "j6raclbd", "Red Alert Club (JPM) (IMPACT) (set 5)", + "j6rad", "Red Alert (JPM) (IMPACT) (set 5)", + "j6rager", "Red Alert (JPM) [German] (IMPACT)", + "j6ramese", "Rameses' Riches Club (Crystal) (IMPACT) (set 1)", + "j6ramesea", "Rameses' Riches Club (Crystal) (IMPACT) (set 2)", + "j6rameseb", "Rameses' Riches Club (Crystal) (IMPACT) (set 3)", + "j6ramesec", "Rameses' Riches Club (Crystal) (IMPACT) (set 4)", + "j6ramesed", "Rameses' Riches Club (Crystal) (IMPACT) (set 5)", + "j6ramesee", "Rameses' Riches Club (Crystal) (IMPACT) (set 6)", + "j6ramesef", "Rameses' Riches Club (Crystal) (IMPACT) (set 7)", + "j6rccls", "Roller Coaster Classic (JPM) (IMPACT) (set 1)", + "j6rcclsa", "Roller Coaster Classic (JPM) (IMPACT) (set 2)", + "j6rcclsb", "Roller Coaster Classic (JPM) (IMPACT) (set 3)", + "j6rcclub", "Roller Coaster Club (JPM) (IMPACT) (set 1)", + "j6rccluba", "Roller Coaster Club (JPM) (IMPACT) (set 2)", + "j6rcclubb", "Roller Coaster Club (JPM) (IMPACT) (set 3)", + "j6redal", "Red Alert (Crystal) (IMPACT) (set 1)", + "j6redala", "Red Alert (Crystal) (IMPACT) (set 2)", + "j6redarw", "Red Arrow (JPM) (IMPACT) (set 1)", + "j6redarwa", "Red Arrow (JPM) (IMPACT) (set 2)", + "j6redarwb", "Red Arrow (JPM) (IMPACT) (set 3)", + "j6redarwc", "Red Arrow (JPM) (IMPACT) (set 4)", + "j6redarwd", "Red Arrow (JPM) (IMPACT) (set 5)", + "j6redarwe", "Red Arrow (JPM) (IMPACT) (set 6)", + "j6redarwf", "Red Arrow (JPM) (IMPACT) (set 7)", + "j6redarwg", "Red Arrow (JPM) (IMPACT) (set 8)", + "j6redarwh", "Red Arrow (JPM) (IMPACT) (set 9)", + "j6redarwi", "Red Arrow (JPM) (IMPACT) (set 10)", + "j6redarwj", "Red Arrow (JPM) (IMPACT) (set 11)", + "j6redarww", "Red Arrow (Whitbread / JPM) (IMPACT)", + "j6reddmn", "Red Demon (JPM) (IMPACT)", + "j6reelb", "Reel Bingo Classic Club (Crystal) (IMPACT) (set 1)", + "j6reelba", "Reel Bingo Classic Club (Crystal) (IMPACT) (set 2)", + "j6reelmn", "Reel Money (JPM) (IMPACT) (set 1)", + "j6reelmna", "Reel Money (JPM) (IMPACT) (set 2)", + "j6reelmnb", "Reel Money (JPM) (IMPACT) (set 3)", + "j6reelmnc", "Reel Money (JPM) (IMPACT) (set 4)", + "j6reelmnd", "Reel Money (JPM) (IMPACT) (set 5)", + "j6reelth", "Reel Thing (Ace) (IMPACT) set 1)", + "j6reeltha", "Reel Thing (Ace) (IMPACT) set 2)", + "j6reelthb", "Reel Thing (Ace) (IMPACT) set 3)", + "j6rh6", "Red Hot 6 (JPM) (IMPACT) (set 1)", + "j6rh6a", "Red Hot 6 (JPM) (IMPACT) (set 2)", + "j6rh6b", "Red Hot 6 (JPM) (IMPACT) (set 3)", + "j6rh6c", "Red Hot 6 (JPM) (IMPACT) (set 4)", + "j6rh6cl", "Red Hot Six Club (JPM) (IMPACT) (set 1)", + "j6rh6cla", "Red Hot Six Club (JPM) (IMPACT) (set 2)", + "j6rh6clb", "Red Hot Six Club (JPM) (IMPACT) (set 3)", + "j6rh6clc", "Red Hot Six Club (JPM) (IMPACT) (set 4)", + "j6rh6cld", "Red Hot Six Club (JPM) (IMPACT) (set 5)", + "j6rh6d", "Red Hot 6 (JPM) (IMPACT) (set 5)", + "j6rh6e", "Red Hot 6 (JPM) (IMPACT) (set 6)", + "j6rhchil", "Red Hot Chili Stepper (Ace) (IMPACT) (set 1)", + "j6rhchila", "Red Hot Chili Stepper (Ace) (IMPACT) (set 2)", + "j6rhchilb", "Red Hot Chili Stepper (Ace) (IMPACT) (set 3)", + "j6rhchilc", "Red Hot Chili Stepper (Ace) (IMPACT) (set 4)", + "j6rhchild", "Red Hot Chili Stepper (Ace) (IMPACT) (set 5)", + "j6richpk", "Rich Pickings (Ace) (IMPACT)", + "j6rico", "Ricochet (JPM) (IMPACT) (set 1)", + "j6ricoa", "Ricochet (JPM) (IMPACT) (set 2)", + "j6ricob", "Ricochet (JPM) (IMPACT) (set 3)", + "j6ricoc", "Ricochet (JPM) (IMPACT) (set 4)", + "j6ricod", "Ricochet (JPM) (IMPACT) (set 5)", + "j6ricoe", "Ricochet (JPM) (IMPACT) (set 6)", + "j6robin", "Robin Hood (Ace) (IMPACT) (set 1)", + "j6robina", "Robin Hood (Ace) (IMPACT) (set 2)", + "j6robinb", "Robin Hood (Ace) (IMPACT) (set 3)", + "j6robinc", "Robin Hood (Ace) (IMPACT) (set 4)", + "j6roller", "Roller Coaster (JPM) (IMPACT) (set 1)", + "j6rollera", "Roller Coaster (JPM) (IMPACT) (set 2)", + "j6rollerb", "Roller Coaster (JPM) (IMPACT) (set 3)", + "j6rollerc", "Roller Coaster (JPM) (IMPACT) (set 4)", + "j6rollerd", "Roller Coaster (JPM) (IMPACT) (set 5)", + "j6rollere", "Roller Coaster (JPM) (IMPACT) (set 6)", + "j6rollerf", "Roller Coaster (JPM) (IMPACT) (set 7)", + "j6rollerg", "Roller Coaster (JPM) (IMPACT) (set 8)", + "j6rollerh", "Roller Coaster (JPM) (IMPACT) (set 9)", + "j6rolleri", "Roller Coaster (JPM) (IMPACT) (set 10)", + "j6rollerj", "Roller Coaster (JPM) (IMPACT) (set 11)", + "j6rollerk", "Roller Coaster (JPM) (IMPACT) (set 12)", + "j6rollerl", "Roller Coaster (JPM) (IMPACT) (set 13)", + "j6rollerm", "Roller Coaster (JPM) (IMPACT) (set 14)", + "j6rollern", "Roller Coaster (JPM) (IMPACT) (set 15)", + "j6rollero", "Roller Coaster (JPM) (IMPACT) (set 16)", + "j6rollerp", "Roller Coaster (JPM) (IMPACT) (set 17)", + "j6roof", "Thru' The Roof (Ace) (IMPACT) (set 1)", + "j6roofa", "Thru' The Roof (Ace) (IMPACT) (set 2)", + "j6royfls", "Royal Flush Club (JPM) (IMPACT) (set 1)", + "j6royflsa", "Royal Flush Club (JPM) (IMPACT) (set 2)", + "j6royflsb", "Royal Flush Club (JPM) (IMPACT) (set 3)", + "j6royflsc", "Royal Flush Club (JPM) (IMPACT) (set 4)", + "j6royflsd", "Royal Flush Club (JPM) (IMPACT) (set 5)", + "j6royflse", "Royal Flush Club (JPM) (IMPACT) (set 6)", + "j6samur", "Samurai Club (JPM) (IMPACT) (set 1)", + "j6samura", "Samurai Club (JPM) (IMPACT) (set 2)", + "j6samurb", "Samurai Club (JPM) (IMPACT) (set 3)", + "j6samurc", "Samurai Club (JPM) (IMPACT) (set 4)", + "j6samurd", "Samurai Club (JPM) (IMPACT) (set 5)", + "j6scarlt", "Captain Scarlet (Ace) (IMPACT)", + "j6shoot", "ShootOut (JPM / Whitbread) (IMPACT)", + "j6showtm", "It's Showtime (JPM) (IMPACT) (set 1)", + "j6showtma", "It's Showtime (JPM) (IMPACT) (set 2)", + "j6showtmb", "It's Showtime (JPM) (IMPACT) (set 3)", + "j6showtmc", "It's Showtime (JPM) (IMPACT) (set 4)", + "j6showtmd", "It's Showtime (JPM) (IMPACT) (set 5)", + "j6showtme", "It's Showtime (JPM) (IMPACT) (set 6)", + "j6showtmf", "It's Showtime (JPM) (IMPACT) (set 7)", + "j6showtmg", "It's Showtime (JPM) (IMPACT) (set 8)", + "j6showtmh", "It's Showtime (JPM) (IMPACT) (set 9)", + "j6showtmi", "It's Showtime (JPM) (IMPACT) (set 10)", + "j6showtmj", "It's Showtime (JPM) (IMPACT) (set 11)", + "j6showtmk", "It's Showtime (JPM) (IMPACT) (set 12)", + "j6showtml", "It's Showtime (JPM) (IMPACT) (set 13)", + "j6sidewd", "Sidewinder (JPM) (IMPACT) (set 1)", + "j6sidewda", "Sidewinder (JPM) (IMPACT) (set 2)", + "j6sidewdb", "Sidewinder (JPM) (IMPACT) (set 3)", + "j6sidewdc", "Sidewinder (JPM) (IMPACT) (set 4)", + "j6sidewdd", "Sidewinder (JPM) (IMPACT) (set 5)", + "j6sidewde", "Sidewinder (JPM) (IMPACT) (set 6)", + "j6slagn", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 1)", + "j6slagna", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 2)", + "j6slagnb", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 3)", + "j6slagnc", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 4)", + "j6slagnd", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 5)", + "j6slagne", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 6)", + "j6slagnf", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 7)", + "j6slagng", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 8)", + "j6slagnh", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 9)", + "j6slvgst", "Silver Ghost (JPM) (IMPACT) (set 1)", + "j6slvgsta", "Silver Ghost (JPM) (IMPACT) (set 2)", + "j6slvgstb", "Silver Ghost (JPM) (IMPACT) (set 3)", + "j6slvgstc", "Silver Ghost (JPM) (IMPACT) (set 4)", + "j6slvgstd", "Silver Ghost (JPM) (IMPACT) (set 5)", + "j6slvgste", "Silver Ghost (JPM) (IMPACT) (set 6)", + "j6slvgstf", "Silver Ghost (JPM) (IMPACT) (set 7)", + "j6slvgstg", "Silver Ghost (JPM) (IMPACT) (set 8)", + "j6snakes", "Snakes & Ladders (JPM) (IMPACT) (set 1)", + "j6snakesa", "Snakes & Ladders (JPM) (IMPACT) (set 2)", + "j6snakesb", "Snakes & Ladders (JPM) (IMPACT) (set 3)", + "j6snakesc", "Snakes & Ladders (JPM) (IMPACT) (set 4)", + "j6snakesd", "Snakes & Ladders (JPM) (IMPACT) (set 5)", + "j6snakese", "Snakes & Ladders (JPM) (IMPACT) (set 6)", + "j6snakesf", "Snakes & Ladders (JPM) (IMPACT) (set 7)", + "j6snakesg", "Snakes & Ladders (JPM) (IMPACT) (set 8)", + "j6sonic", "Sonic The Hedgehog (JPM) (IMPACT) (set 1)", + "j6sonica", "Sonic The Hedgehog (JPM) (IMPACT) (set 2)", + "j6sonicb", "Sonic The Hedgehog (JPM) (IMPACT) (set 3)", + "j6sonicc", "Sonic The Hedgehog (JPM) (IMPACT) (set 4)", + "j6sonicd", "Sonic The Hedgehog (JPM) (IMPACT) (set 5)", + "j6sonice", "Sonic The Hedgehog (JPM) (IMPACT) (set 6)", + "j6sonicf", "Sonic The Hedgehog (JPM) (IMPACT) (set 7)", + "j6sonicg", "Sonic The Hedgehog (JPM) (IMPACT) (set 8)", + "j6sonich", "Sonic The Hedgehog (JPM) (IMPACT) (set 9)", + "j6spcinv", "Space Invaders (Crystal) (IMPACT)", + "j6stards", "Stardust (JPM) (IMPACT) (set 1)", + "j6stardsa", "Stardust (JPM) (IMPACT) (set 2)", + "j6stardsb", "Stardust (JPM) (IMPACT) (set 3)", + "j6stardsc", "Stardust (JPM) (IMPACT) (set 4)", + "j6start", "Starturn (JPM) (IMPACT) (set 1)", + "j6starta", "Starturn (JPM) (IMPACT) (set 2)", + "j6strk10", "Strike 10 (Ace) (IMPACT) (set 1)", + "j6strk10a", "Strike 10 (Ace) (IMPACT) (set 2)", + "j6strk10b", "Strike 10 (Ace) (IMPACT) (set 3)", + "j6strk10c", "Strike 10 (Ace) (IMPACT) (set 4)", + "j6strk10d", "Strike 10 (Ace) (IMPACT) (set 5)", + "j6strk10e", "Strike 10 (Ace) (IMPACT) (set 6)", + "j6strk10f", "Strike 10 (Ace) (IMPACT) (set 7)", + "j6strk10g", "Strike 10 (Ace) (IMPACT) (set 8)", + "j6strk10h", "Strike 10 (Ace) (IMPACT) (set 9)", + "j6strk10i", "Strike 10 (Ace) (IMPACT) (set 10)", + "j6strk10j", "Strike 10 (Ace) (IMPACT) (set 11)", + "j6strk10k", "Strike 10 (Ace) (IMPACT) (set 12)", + "j6supbrk", "Super Breakout (JPM) (IMPACT) (set 1)", + "j6supbrka", "Super Breakout (JPM) (IMPACT) (set 2)", + "j6supbrkb", "Super Breakout (JPM) (IMPACT) (set 3)", + "j6supbrkc", "Super Breakout (JPM) (IMPACT) (set 4)", + "j6supbrkd", "Super Breakout (JPM) (IMPACT) (set 5)", + "j6supbrke", "Super Breakout (JPM) (IMPACT) (set 6)", + "j6supbrkf", "Super Breakout (JPM) (IMPACT) (set 7)", + "j6supbrkg", "Super Breakout (JPM) (IMPACT) (set 8)", + "j6supbrkh", "Super Breakout (JPM) (IMPACT) (set 9)", + "j6supbrki", "Super Breakout (JPM) (IMPACT) (set 10)", + "j6supbrkj", "Super Breakout (JPM) (IMPACT) (set 11)", + "j6svndb", "7 Deadly Bins (Ace) (IMPACT)", + "j6swpdrp", "Swop Till Ya Drop (JPM) (IMPACT)", + "j6tbirds", "Thunderbirds (JPM) (IMPACT) (set 1)", + "j6tbirdsa", "Thunderbirds (JPM) (IMPACT) (set 2)", + "j6tbirdsb", "Thunderbirds (JPM) (IMPACT) (set 3)", + "j6tbirdsc", "Thunderbirds (JPM) (IMPACT) (set 4)", + "j6tbirdsd", "Thunderbirds (JPM) (IMPACT) (set 5)", + "j6tbirdse", "Thunderbirds (JPM) (IMPACT) (set 6)", + "j6tbirdsf", "Thunderbirds (JPM) (IMPACT) (set 7)", + "j6tbirdsg", "Thunderbirds (JPM) (IMPACT) (set 8)", + "j6tbirdsh", "Thunderbirds (JPM) (IMPACT) (set 9)", + "j6tbirdsi", "Thunderbirds (JPM) (IMPACT) (set 10)", + "j6tbirdsj", "Thunderbirds (JPM) (IMPACT) (set 11)", + "j6tbirdsk", "Thunderbirds (JPM) (IMPACT) (set 12)", + "j6tbirdsl", "Thunderbirds (JPM) (IMPACT) (set 13)", + "j6tbirdsm", "Thunderbirds (JPM) (IMPACT) (set 14)", + "j6tbirdsn", "Thunderbirds (JPM) (IMPACT) (set 15)", + "j6tbirdso", "Thunderbirds (JPM) (IMPACT) (set 16)", + "j6tbirdsp", "Thunderbirds (JPM) (IMPACT) (set 17)", + "j6tbirdsq", "Thunderbirds (JPM) (IMPACT) (set 18)", + "j6tbirdsr", "Thunderbirds (JPM) (IMPACT) (set 19)", + "j6tbrdcl", "Thunderbirds Club (JPM) (IMPACT) (set 1)", + "j6tbrdcla", "Thunderbirds Club (JPM) (IMPACT) (set 2)", + "j6tbrdclb", "Thunderbirds Club (JPM) (IMPACT) (set 3)", + "j6tbrdclc", "Thunderbirds Club (JPM) (IMPACT) (set 4)", + "j6tbrdcld", "Thunderbirds Club (JPM) (IMPACT) (set 5)", + "j6tbrdcle", "Thunderbirds Club (JPM) (IMPACT) (set 6)", + "j6tbrdclf", "Thunderbirds Club (JPM) (IMPACT) (set 7)", + "j6tbrdclg", "Thunderbirds Club (JPM) (IMPACT) (set 8)", + "j6tbrdclh", "Thunderbirds Club (JPM) (IMPACT) (set 9)", + "j6tbrdcli", "Thunderbirds Club (JPM) (IMPACT) (set 10)", + "j6tbrdclj", "Thunderbirds Club (JPM) (IMPACT) (set 11)", + "j6tbrdclk", "Thunderbirds Club (JPM) (IMPACT) (set 12)", + "j6tbrdcll", "Thunderbirds Club (JPM) (IMPACT) (set 13)", + "j6thril", "Thriller (Crystal) (IMPACT) (set 1)", + "j6thrila", "Thriller (Crystal) (IMPACT) (set 2)", + "j6tomb", "Tomb Raider (JPM) (IMPACT) (set 1)", + "j6tomba", "Tomb Raider (JPM) (IMPACT) (set 2)", + "j6tombb", "Tomb Raider (JPM) (IMPACT) (set 3)", + "j6tombc", "Tomb Raider (JPM) (IMPACT) (set 4)", + "j6tombd", "Tomb Raider (JPM) (IMPACT) (set 5)", + "j6tombe", "Tomb Raider (JPM) (IMPACT) (set 6)", + "j6tombf", "Tomb Raider (JPM) (IMPACT) (set 7)", + "j6tombg", "Tomb Raider (JPM) (IMPACT) (set 8)", + "j6topflg", "Top Flight (Ace) (IMPACT)", + "j6tqust", "Treasure Quest (Crystal) (IMPACT) (set 1)", + "j6tqusta", "Treasure Quest (Crystal) (IMPACT) (set 2)", + "j6tqustb", "Treasure Quest (Crystal) (IMPACT) (set 3)", + "j6tqustc", "Treasure Quest (Crystal) (IMPACT) (set 4)", + "j6tutti", "Tutti Frutti (Qps) (IMPACT)", + "j6twst", "Twister (Ace) (IMPACT) (set 1)", + "j6twsta", "Twister (Ace) (IMPACT) (set 2)", + "j6twstb", "Twister (Ace) (IMPACT) (set 3)", + "j6twstc", "Twister (Ace) (IMPACT) (set 4)", + "j6twstd", "Twister (Ace) (IMPACT) (set 5)", + "j6twstdt", "Twister (JPM) [Dutch] (IMPACT)", + "j6twste", "Twister (Ace) (IMPACT) (set 6)", + "j6twstf", "Twister (Ace) (IMPACT) (set 7)", + "j6twstg", "Twister (Ace) (IMPACT) (set 8)", + "j6twsth", "Twister (Ace) (IMPACT) (set 9)", + "j6twsti", "Twister (Ace) (IMPACT) (set 10)", + "j6twstj", "Twister (Ace) (IMPACT) (set 11)", + "j6untch", "Untouchables (JPM) (IMPACT) (set 1)", + "j6untcha", "Untouchables (JPM) (IMPACT) (set 2)", + "j6vindal", "Vindaloot (JPM) (IMPACT)", + "j6vivark", "Viva Rock Vegas (JPM) (IMPACT) (set 1)", + "j6vivarka", "Viva Rock Vegas (JPM) (IMPACT) (set 2)", + "j6vivarkb", "Viva Rock Vegas (JPM) (IMPACT) (set 3)", + "j6vivarkc", "Viva Rock Vegas (JPM) (IMPACT) (set 4)", + "j6vivarkd", "Viva Rock Vegas (JPM) (IMPACT) (set 5)", + "j6vivarke", "Viva Rock Vegas (JPM) (IMPACT) (set 6)", + "j6vivarkf", "Viva Rock Vegas (JPM) (IMPACT) (set 7)", + "j6vivarkg", "Viva Rock Vegas (JPM) (IMPACT) (set 8)", + "j6vivarkh", "Viva Rock Vegas (JPM) (IMPACT) (set 9)", + "j6vivarki", "Viva Rock Vegas (JPM) (IMPACT) (set 10)", + "j6vivarkj", "Viva Rock Vegas (JPM) (IMPACT) (set 11)", + "j6vivarkk", "Viva Rock Vegas (JPM) (IMPACT) (set 12)", + "j6vivrkc", "Viva Rock Vegas Club (JPM) (IMPACT) (set 1)", + "j6vivrkca", "Viva Rock Vegas Club (JPM) (IMPACT) (set 2)", + "j6vivrkcb", "Viva Rock Vegas Club (JPM) (IMPACT) (set 3)", + "j6wildw", "Wild West (Ace) (IMPACT) (set 1)", + "j6wildwa", "Wild West (Ace) (IMPACT) (set 2)", + "j6wildwb", "Wild West (Ace) (IMPACT) (set 3)", + "j6wildwc", "Wild West (Ace) (IMPACT) (set 4)", + "j6wildwd", "Wild West (Ace) (IMPACT) (set 5)", + "j6wildwe", "Wild West (Ace) (IMPACT) (set 6)", + "j6wildwf", "Wild West (Ace) (IMPACT) (set 7)", + "j6wildwg", "Wild West (Ace) (IMPACT) (set 8)", + "j6wizard", "Wizard Of Odds (JPM) (IMPACT) (set 1)", + "j6wizarda", "Wizard Of Odds (JPM) (IMPACT) (set 2)", + "j6wizardb", "Wizard Of Odds (JPM) (IMPACT) (set 3)", + "j6wizardc", "Wizard Of Odds (JPM) (IMPACT) (set 4)", + "j6wizardd", "Wizard Of Odds (JPM) (IMPACT) (set 5)", + "j6wizarde", "Wizard Of Odds (JPM) (IMPACT) (set 6)", + "j6wldkng", "Wild King Club (JPM) (IMPACT) (set 1)", + "j6wldknga", "Wild King Club (JPM) (IMPACT) (set 2)", + "j6wthing", "Wild Thing (Empire) (IMPACT) (set 1)", + "j6wthinga", "Wild Thing (Empire) (IMPACT) (set 2)", + "j6wthingb", "Wild Thing (Empire) (IMPACT) (set 3)", + "j7bmagic", "Black Magic (JPM)", + "j7bullio", "Bullionaire (Ace)", + "j7cexprs", "Cash Xpress (JPM)", + "j7clbmag", "Club Magic (JPM)", + "j7crztrl", "Crazy Trails (JPM)", + "j7fantaz", "Fantaztec (JPM)", + "j7kerchn", "Ker - Chinq (JPM)", + "j7r2roll", "Ready To Roll (JPM)", + "j7razzma", "Razzamataz (JPM) (set 1)", + "j7razzmaa", "Razzamataz (JPM) (set 2)", + "j7tubgld", "Turbo Gold (JPM)", + "j7wldwkd", "Wild 'N' Wicked (JPM)", + "j80alad", "Aladdin's Cave (PCP)", + "j80bac", "Bank A Coin (JPM) (SYSTEM80)", + "j80blbnk", "Blankity Bank (PCP) (SYSTEM80)", + "j80bounc", "Bouncer (JPM) (SYSTEM80)", + "j80fortr", "Fortune Trail (JPM)", + "j80frogh", "Frog Hop (JPM) (SYSTEM80)", + "j80fruit", "Fruit Snappa (JPM) (SYSTEM80)", + "j80golds", "Golden Steppa (JPM) (SYSTEM80)", + "j80hotln", "Hot Lines (JPM) (SYSTEM80)", + "j80mster", "Masterspy (Pcp)", + "j80myspn", "Mystery Spin (JPM) (SYSTEM80)", + "j80nudg2", "Nudge Double Up MkII (JPM) (SYSTEM80)", + "j80plsnd", "Plus Nudge (JPM)", + "j80rr", "Road Runner (JPM) (SYSTEM80, set 1)", + "j80rra", "Road Runner (JPM) (SYSTEM80, set 2)", + "j80supbk", "Superbank (JPM) (SYSTEM80)", + "j80supst", "Supa Steppa (JPM) (SYSTEM80)", + "j80topsp", "Top Sprint (JPM) (SYSTEM80)", + "j80topup", "Top Up (JPM) (SYSTEM80)", + "j80tumbl", "Tumble (JPM) (SYSTEM80)", + "j80wsprt", "Winsprint (JPM) (V4, 5x20p) (SYSTEM80)", + "j80wsprt2", "Winsprint (JPM) (V2, 10x10p) (SYSTEM80)", + "j80wsprt3", "Winsprint (JPM) (V3, 50p, 5 credits) (SYSTEM80)", + "j_ewnd20", "Each Way Nudger (Barcrest?, set 3, version 20?)", + "j_ewnda", "Each Way Nudger (Barcrest?, set 2)", + "j_ewnud", "Each Way Nudger (Barcrest?, set 1)", + "j_ews", "Each Way Shifter (Barcrest?, set 1, version 16)", + "j_ews8a", "Each Way Shifter (Barcrest?, set 2, version 8a)", + "j_luck2", "Lucky Twos?", + "j_luckac", "Lucky Aces (Unk)", + "j_nuddup", "Nudge Double Up (JPM SRU, set 1)", + "j_nuddup2", "Nudge Double Up (JPM SRU, set 2)", + "j_plus2", "Plus 2 (JPM)", + "j_super2", "Super 2 (JPM)", + "j_unk", "unknown SRU Game (JPM?)", + "jack", "Jack the Giantkiller (set 1)", + "jack2", "Jack the Giantkiller (set 2)", + "jack2opn", "Jacks to Open", + "jack3", "Jack the Giantkiller (set 3)", + "jackal", "Jackal (World, 8-way Joystick)", + "jackalj", "Tokushu Butai Jackal (Japan, 8-way Joystick)", + "jackalr", "Jackal (World, Rotary Joystick)", + "jackie", "Happy Jackie (v110U)", + "jackler", "Jackler (Jungler bootleg)", + "jackpool", "Jackpot Cards / Jackpot Pool (Italy)", + "jackrabt", "Jack Rabbit (set 1)", + "jackrabt2", "Jack Rabbit (set 2)", + "jackrabts", "Jack Rabbit (special)", + "jailbrek", "Jail Break", + "jailbrekb", "Jail Break (bootleg)", + "jajamaru", "Vs. Ninja Jajamaru Kun (Japan)", + "jambo", "Jambo! Safari (JPN, USA, EXP, KOR, AUS) (Rev A)", + "jamesb", "James Bond (Timed Play)", + "jamesb2", "James Bond (3/5-Ball)", + "janbari", "Mahjong Janjan Baribari (Japan)", + "jangou", "Jangou [BET] (Japan)", + "janjans1", "Lovely Pop Mahjong JangJang Shimasho (Japan)", + "janjans2", "Lovely Pop Mahjong JangJang Shimasho 2 (Japan)", + "jankenmn", "Janken Man Kattara Ageru", + "janoh", "Jan Oh (set 1)", + "janoha", "Jan Oh (set 2)", + "janptr96", "Janputer '96 (Japan)", + "janptrsp", "Janputer Special (Japan)", + "janputer", "New Double Bet Mahjong (bootleg of Janputer)", + "janshi", "Janshi", + "janshin", "Jyanshin Densetsu - Quest of Jongmaster", + "janshinp", "Mahjong Janshin Plus (Japan)", + "jansou", "Jansou (set 1)", + "jansoua", "Jansou (set 2)", + "jantotsu", "4nin-uchi Mahjong Jantotsu", + "jantouki", "Jong Tou Ki (Japan)", + "janyoup2", "Janyou Part II (ver 7.03, July 1 1983)", + "janyuki", "Jong Yu Ki (Japan)", + "jb_10b", "Jack*Bot (1.0B) (Belgium/Canada)", + "jb_10r", "Jack*Bot (1.0R)", + "jchan", "Jackie Chan - The Kung-Fu Master", + "jchan2", "Jackie Chan in Fists of Fire", + "jclub2", "Jockey Club II (newer hardware)", + "jclub2o", "Jockey Club II (older hardware)", + "jclub2ob", "Jockey Club II (older hardware, set 2)", + "jcross", "Jumping Cross", + "jd_l1", "Judge Dredd (L-1)", + "jd_l6", "Judge Dredd (L-6)", + "jd_l7", "Judge Dredd (L-7)", + "jdredd", "Judge Dredd (Rev C Dec. 17 1997)", + "jdreddb", "Judge Dredd (Rev B Nov. 26 1997)", + "jdreddp", "Judge Dredd (rev LA1, prototype)", + "jedi", "Return of the Jedi", + "jestmagi", "Jester Magic (Konami Endeavour)", + "jetfight", "Jet Fighter (Set1) [TTL]", + "jetfighta", "Jet Fighter (Set2) [TTL]", + "jetwave", "Jet Wave (EAB, Euro v1.04)", + "jetwavej", "Jet Wave (JAB, Japan v1.04)", + "jgakuen", "Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117)", + "jigkmgri", "Jigoku Meguri (Japan)", + "jin", "Jin", + "jingbell", "Jingle Bell (Italy, V133I)", + "jingystm", "Jingi Storm - The Arcade (GDL-0037)", + "jitsupro", "Jitsuryoku!! Pro Yakyuu (Japan)", + "jituroku", "Jitsuroku Maru-chi Mahjong (Japan)", + "jjack", "Jumping Jack", + "jjparad2", "Jan Jan Paradise 2", + "jjparads", "Jan Jan Paradise", + "jjpoker", "Jackpot Joker Poker (set 1)", + "jjpokerb", "Jackpot Joker Poker (set 2)", + "jjsquawk", "J. J. Squawkers", + "jjsquawkb", "J. J. Squawkers (bootleg)", + "jjsquawkb2", "J. J. Squawkers (bootleg, Blandia Conversion)", + "jkrmast", "Joker Master", + "jleague", "The J.League 1994 (Japan)", + "jm_12b", "Johnny Mnemonic (1.2B) Belgium", + "jm_12r", "Johnny Mnemonic (1.2R)", + "jmpbreak", "Jumping Break", + "jnero", "Johnny Nero Action Hero", + "jngld_l2", "Jungle Lord (L-2)", + "jngolady", "Jangou Lady (Japan)", + "jockeyc", "Jockey Club", + "jockeygp", "Jockey Grand Prix (set 1)", + "jockeygpa", "Jockey Grand Prix (set 2)", + "joemac", "Tatakae Genshizin Joe & Mac (Japan ver 1)", + "joemacr", "Joe & Mac Returns (World, Version 1.1, 1994.05.27)", + "joemacra", "Joe & Mac Returns (World, Version 1.0, 1994.05.19)", + "jogakuen", "Mahjong Jogakuen (Japan)", + "joinem", "Joinem", + "jojo", "JoJo's Venture (USA 990128)", + "jojoba", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927)", + "jojoban", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD)", + "jojobane", "JoJo's Bizarre Adventure (Euro 990927, NO CD)", + "jojobaner1", "JoJo's Bizarre Adventure (Euro 990913, NO CD)", + "jojobanr1", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD)", + "jojobar1", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913)", + "jojoj", "JoJo no Kimyou na Bouken (Japan 990128)", + "jojojr1", "JoJo no Kimyou na Bouken (Japan 990108)", + "jojojr2", "JoJo no Kimyou na Bouken (Japan 981202)", + "jojon", "JoJo's Venture (Asia 990128, NO CD)", + "jojonr1", "JoJo's Venture (Asia 990108, NO CD)", + "jojonr2", "JoJo's Venture (Asia 981202, NO CD)", + "jojor1", "JoJo's Venture (USA 990108)", + "jojor2", "JoJo's Venture (USA 981202)", + "jokercrd", "Joker Card (Ver.A267BC, encrypted)", + "jokpoker", "Joker Poker (Version 16.03B)", + "jokpokera", "Joker Poker (Version 16.03BI 5-10-85, Joker Poker ICB 9-30-86)", + "jokpokerb", "Joker Poker (Version 16.04BI 10-19-88, Joker Poker ICB 9-30-86)", + "jokpokerc", "Joker Poker (Version 16.03BI 5-10-85, Poker No Raise ICB 9-30-86)", + "jokrpokr", "Joker Poker", + "jokrwild", "Joker's Wild (encrypted)", + "jokrz_l3", "Jokerz! (L-3)", + "jokrz_l6", "Jokerz! (L-6)", + "jollycrd", "Jolly Card (Austrian)", + "jollyjgr", "Jolly Jogger", + "jolyc3x3", "Jolly Card (3x3 deal)", + "jolyc980", "Jolly Card Professional 2.0 (Spale Soft)", + "jolyccra", "Jolly Card (Croatian, set 1)", + "jolyccrb", "Jolly Card (Croatian, set 2)", + "jolycdab", "Jolly Card (Austrian, Fun World, bootleg)", + "jolycdev", "Jolly Card (Evona Electronic)", + "jolycdib", "Jolly Card (Italian, encrypted bootleg, set 1)", + "jolycdic", "Jolly Card (Italian, encrypted bootleg, set 2)", + "jolycdid", "Jolly Card (Italian, different colors, set 1)", + "jolycdie", "Jolly Card (Italian, different colors, set 2)", + "jolycdit", "Jolly Card (Italian, blue TAB board, encrypted)", + "jolycdsp", "Jolly Card (Spanish, blue TAB board, encrypted)", + "jolycmzs", "Jolly Card Professional 2.0 (MZS Tech)", + "jolyjokr", "Jolly Joker (98bet, set 1)", + "jolyjokra", "Jolly Joker (98bet, set 2)", + "jolyjokrb", "Jolly Joker (40bet, Croatian hack)", + "jolypark", "Jolly Park", + "jongbou", "Mahjong Block Jongbou (Japan)", + "jongkyo", "Jongkyo", + "jongtei", "Mahjong Jong-Tei (Japan, ver. NM532-01)", + "josvolly", "Joshi Volleyball", + "journey", "Journey", + "joust", "Joust (White/Green label)", + "joust2", "Joust 2 - Survival of the Fittest", + "joustr", "Joust (Solid Red label)", + "joustwr", "Joust (White/Red label)", + "joyfulr", "Joyful Road (Japan)", + "joyjoy", "Puzzled / Joy Joy Kid (NGM-021)(NGH-021)", + "joyman", "Joyman", + "jpark", "Jurassic Park (World)", + "jpark3", "Jurassic Park 3 (ver EBC)", + "jparkj", "Jurassic Park (Japan, Rev A, Deluxe)", + "jparkja", "Jurassic Park (Japan, Deluxe)", + "jparkjc", "Jurassic Park (Japan, Rev A, Conversion)", + "jpcoin", "Joker Poker (Coinmaster set 1)", + "jpcoin2", "Joker Poker (Coinmaster, Amusement Only)", + "jplstw20", "Lost World: Jurassic Park, The (2.00)", + "jplstw22", "Lost World: Jurassic Park, The (2.02)", + "jpopnics", "Jumping Pop (Nics, Korean bootleg of Plump Pop)", + "jptparty", "Jackpot Party (Russia)", + "jrking", "Junior King (bootleg of Donkey Kong Jr.)", + "jrpacman", "Jr. Pac-Man (11/9/83)", + "jrpacmanf", "Jr. Pac-Man (speedup hack)", + "jrpacmbl", "Jr. Pac-Man (Pengo hardware)", + "jsk", "Joryuu Syougi Kyoushitsu (Japan)", + "jspecter", "Jatre Specter (set 1)", + "jspecter2", "Jatre Specter (set 2)", + "jst_l2", "Joust (L-2)", + "jubileep", "Double-Up Poker (Jubilee)", + "juju", "JuJu Densetsu (Japan)", + "jujub", "JuJu Densetsu (Playmark bootleg)", + "jujuba", "JuJu Densetsu (Japan, bootleg)", + "jumpbug", "Jump Bug", + "jumpbugb", "Jump Bug (bootleg)", + "jumpcoas", "Jump Coaster", + "jumpcoast", "Jump Coaster (Taito)", + "jumping", "Jumping", + "jumpjkpt", "Jumping Jackpots (Russia) (Atronic)", + "jumpkids", "Jump Kids", + "jumppop", "Jumping Pop (set 1)", + "jumppope", "Jumping Pop (set 2)", + "jumpshot", "Jump Shot", + "jumpshotp", "Jump Shot Engineering Sample", + "junai", "Junai - Manatsu no First Kiss (Japan)", + "junai2", "Junai 2 - White Love Story (Japan)", + "jungleby", "Jungle Boy (bootleg)", + "jungleh", "Jungle Hunt (US)", + "junglehbr", "Jungle Hunt (Brazil)", + "junglek", "Jungle King (Japan)", + "junglekas", "Jungle King (alternate sound)", + "junglekj2", "Jungle King (Japan, earlier)", + "jungler", "Jungler", + "junglers", "Jungler (Stern Electronics)", + "junofrst", "Juno First", + "junofrstg", "Juno First (Gottlieb)", + "jupk_501", "Jurassic Park (5.01)", + "jupk_513", "Jurassic Park (5.13)", + "jupk_g51", "Jurassic Park (5.01 Germany)", + "jwildb52", "Joker's Wild (B52 system, set 1)", + "jwildb52a", "Joker's Wild (B52 system, set 2)", + "jwildb52h", "Joker's Wild (B52 system, Harrah's GFX)", + "jy_03", "Junk Yard (0.3)", + "jy_11", "Junk Yard (1.1)", + "jy_12", "Junk Yard (1.2)", + "jyangoku", "Jyangokushi: Haoh no Saihai (Japan 990527)", + "jzth", "Jue Zhan Tian Huang", + "kabukikl", "Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den", + "kabukiz", "Kabuki-Z (World)", + "kabukizj", "Kabuki-Z (Japan)", + "kageki", "Kageki (US)", + "kagekih", "Kageki (hack)", + "kagekij", "Kageki (Japan)", + "kaguya", "Mahjong Kaguyahime [BET] (Japan 880521)", + "kaguya2", "Mahjong Kaguyahime Sono2 [BET] (Japan 890829)", + "kaguya2f", "Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808)", + "kaiserkn", "Kaiser Knuckle (Ver 2.1O 1994/07/29)", + "kaiserknj", "Kaiser Knuckle (Ver 2.1J 1994/07/29)", + "kaitei", "Kaitei Takara Sagashi", + "kaiteids", "Kaitei Daisensou (Japan)", + "kaitein", "Kaitei Takara Sagashi (Namco license)", + "kaiunqz", "Kaiun Quiz (Japan, KW1/VER.A)", + "kakumei", "Mahjong Kakumei (Japan)", + "kakumei2", "Mahjong Kakumei 2 - Princess League (Japan)", + "kamakazi3", "Kamakazi III (superg hack)", + "kamenrid", "Masked Riders Club Battle Race", + "kamikaze", "Kamikaze", + "kamikcab", "Kamikaze Cabbie", + "kanatuen", "Kanatsuen no Onna [BET] (Japan 880905)", + "kangaroo", "Kangaroo", + "kangarooa", "Kangaroo (Atari)", + "kangaroob", "Kangaroo (bootleg)", + "kaos", "Kaos", + "karatblz", "Karate Blazers (World)", + "karatblzj", "Karate Blazers (Japan)", + "karatblzu", "Karate Blazers (US)", + "karatedo", "Karate Dou (Japan)", + "karatevs", "Taisen Karate Dou (Japan VS version)", + "karatour", "The Karate Tournament", + "karianx", "Karian Cross (Rev. 1.0)", + "karnov", "Karnov (US, rev 6)", + "karnova", "Karnov (US, rev 5)", + "karnovj", "Karnov (Japan)", + "karnovr", "Karnov's Revenge / Fighter's History Dynamite", + "karous", "Karous (GDL-0040)", + "kartduel", "Kart Duel (Japan, KTD1/VER.A)", + "kas89", "Kasino '89", + "kazan", "Ninja Kazan (World)", + "kbash", "Knuckle Bash", + "kbash2", "Knuckle Bash 2 (bootleg)", + "kbm", "Keyboardmania", + "kbm2nd", "Keyboardmania 2nd Mix", + "kbm3rd", "Keyboardmania 3rd Mix", + "kchamp", "Karate Champ (US)", + "kchampvs", "Karate Champ (US VS version, set 1)", + "kchampvs2", "Karate Champ (US VS version, set 2)", + "kdeadeye", "Dead Eye (GV054 UAA01)", + "kdynastg", "King of Dynast Gear (version 1.8)", + "keith", "Keith Courage In Alpha Zones", + "keithlcy", "Dramatic Adventure Quiz Keith & Lucy (Japan)", + "keks", "Keks (060328 World)", + "keks_2", "Keks (060403 World)", + "keks_2a", "Keks (bootleg, 060403, banking address hack)", + "keks_2b", "Keks (bootleg, 060403, banking address hack, changed version text)", + "keks_2c", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 1)", + "keks_2d", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 2)", + "keks_2e", "Keks (bootleg, 060403, banking address hack, payout percentage 60)", + "keks_2f", "Keks (bootleg, 060403, LOTTOGAME (I))", + "keks_2g", "Keks (bootleg, 060403, LOTOS KS01)", + "keks_3", "Keks (070119 Russia)", + "keks_3a", "Keks (bootleg, 070119, banking address hack set 1)", + "keks_3b", "Keks (bootleg, 070119, banking address hack set 2)", + "keks_4", "Keks (090604 Lottery)", + "keks_5", "Keks (090727 Entertainment)", + "keksa", "Keks (bootleg, 060328, banking address hack)", + "keksb", "Keks (bootleg, 060328, backdoor)", + "keksc", "Keks (bootleg, 060328, banking address hack, changed version text)", + "kengo", "Ken-Go", + "keroppi", "Kero Kero Keroppi's Let's Play Together (USA, Version 2.0)", + "keroppij", "Kero Kero Keroppi no Issyoni Asobou (Japan)", + "ket", "Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.)", + "keta", "Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver.)", + "ketb", "Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver)", + "keyboard", "La Keyboard (GDS-0017)", + "kf10thep", "The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg)", + "kf2k2mp", "The King of Fighters 2002 Magic Plus (bootleg)", + "kf2k2mp2", "The King of Fighters 2002 Magic Plus II (bootleg)", + "kf2k2pla", "The King of Fighters 2002 Plus (bootleg set 2)", + "kf2k2pls", "The King of Fighters 2002 Plus (bootleg set 1)", + "kf2k3bl", "The King of Fighters 2003 (bootleg set 1)", + "kf2k3bla", "The King of Fighters 2003 (bootleg set 2)", + "kf2k3pcb", "The King of Fighters 2003 (Japan, JAMMA PCB)", + "kf2k3pl", "The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg)", + "kf2k3upl", "The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg)", + "kf2k5uni", "The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg)", + "kftgoal", "Kick for the Goal", + "kgbird", "K.G. Bird (4VXFC5341, New Zealand, 5c)", + "kgbirda", "K.G. Bird (4VXFC5341, New Zealand, 10c)", + "kick", "Kick (upright)", + "kick4csh", "Kick '4' Cash", + "kickboy", "Kick Boy", + "kickc", "Kick (cocktail)", + "kicker", "Kicker", + "kickgoal", "Kick Goal", + "kickman", "Kickman (upright)", + "kicknrun", "Kick and Run (World)", + "kicknrunu", "Kick and Run (US)", + "kickoff", "Kick Off (Japan)", + "kickridr", "Kick Rider", + "kidniki", "Kid Niki - Radical Ninja (World)", + "kidnikiu", "Kid Niki - Radical Ninja (US)", + "kikaioh", "Choukou Senki Kikaioh (Japan 980914)", + "kikcubic", "Meikyu Jima (Japan)", + "kikcubicb", "Kickle Cubele", + "kikikai", "KiKi KaiKai", + "kikstart", "Kick Start - Wheelie King", + "killbld", "The Killing Blade (ver. 109, Chinese Board)", + "killbld104", "The Killing Blade (ver. 104)", + "killbldp", "The Killing Blade Plus (China, ver. 300)", + "killcom", "Killer Comet", + "kimbldhl", "Kimble Double HI-LO", + "kimblz80", "Kimble Double HI-LO (z80 version)", + "kingball", "King & Balloon (US)", + "kingballj", "King & Balloon (Japan)", + "kingdmgp", "Kingdom Grandprix", + "kingdrbb", "King Derby (Taiwan bootleg)", + "kingdrbb2", "King Derby (bootleg set 2)", + "kingdrby", "King Derby (1981)", + "kingofb", "King of Boxer (English)", + "kingpin", "Kingpin", + "kingrt66", "King of Route 66 (Rev A)", + "kingt_l1", "King Tut (Shuffle) (L-1)", + "kingtut", "King Tut (NSW, Australia)", + "kinniku", "Kinnikuman Muscle Grand Prix (KN1 Ver. A)", + "kinst", "Killer Instinct (v1.5d)", + "kinst13", "Killer Instinct (v1.3)", + "kinst14", "Killer Instinct (v1.4)", + "kinst2", "Killer Instinct 2 (v1.4)", + "kinst210", "Killer Instinct 2 (v1.0)", + "kinst211", "Killer Instinct 2 (v1.1)", + "kinst213", "Killer Instinct 2 (v1.3)", + "kinst2k3", "Killer Instinct 2 (v1.3k, upgrade kit)", + "kinst2k4", "Killer Instinct 2 (v1.4k, upgrade kit)", + "kinstb", "Killer Instinct (SNES bootleg)", + "kinstp", "Killer Instinct (proto v4.7)", + "kirameki", "Kirameki Star Road (Ver 2.10J 1997/08/29)", + "kirarast", "Ryuusei Janshi Kirara Star", + "kisekaeh", "Kisekae Hanafuda", + "kisekaem", "Kisekae Mahjong", + "kiss", "Kiss", + "kissp", "Kiss (prototype)", + "kittenk", "Kitten Kaboodle", + "kiwame", "Pro Mahjong Kiwame", + "kiwames", "Pro Mahjong Kiwame S (J 951020 V1.208)", + "kizuna", "Kizuna Encounter - Super Tag Battle / Fu'un Super Tag Battle", + "kizuna4p", "Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version", + "kkotnoli", "Kkot No Li (Kill the Bees)", + "klax", "Klax (set 1)", + "klax2", "Klax (set 2)", + "klax3", "Klax (set 3)", + "klaxd", "Klax (Germany)", + "klaxj", "Klax (Japan)", + "klaxp1", "Klax (prototype set 1)", + "klaxp2", "Klax (prototype set 2)", + "klondkp", "KlonDike+", + "klxyj", "Kuai Le Xi You Ji", + "knckhead", "Knuckle Heads (World)", + "knckheadj", "Knuckle Heads (Japan)", + "knckheadjp", "Knuckle Heads (Japan, Prototype?)", + "kncljoe", "Knuckle Joe (set 1)", + "kncljoea", "Knuckle Joe (set 2)", + "kngtmare", "Knightmare (prototype)", + "knightb", "Knight Boy", + "knights", "Knights of the Round (World 911127)", + "knightsb", "Knights of the Round (bootleg)", + "knightsj", "Knights of the Round (Japan 911127, B-Board 91634B-2)", + "knightsja", "Knights of the Round (Japan 911127, B-Board 89625B-1)", + "knightsu", "Knights of the Round (USA 911127)", + "knockout", "Knock Out!! (bootleg?)", + "knpuzzle", "Kotoba no Puzzle Mojipittan (Japan, KPM1 Ver.A)", + "kod", "The King of Dragons (World 910805)", + "kodb", "The King of Dragons (bootleg)", + "kodj", "The King of Dragons (Japan 910805, B-Board 90629B-3)", + "kodja", "The King of Dragons (Japan 910805, B-Board 89625B-1)", + "kodr1", "The King of Dragons (World 910711)", + "kodu", "The King of Dragons (USA 910910)", + "kof10th", "The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg)", + "kof2000", "The King of Fighters 2000 (NGM-2570) (NGH-2570)", + "kof2000n", "The King of Fighters 2000 (not encrypted)", + "kof2001", "The King of Fighters 2001 (NGM-262?)", + "kof2001h", "The King of Fighters 2001 (NGH-2621)", + "kof2002", "The King of Fighters 2002 (NGM-2650)(NGH-2650)", + "kof2002b", "The King of Fighters 2002 (bootleg)", + "kof2003", "The King of Fighters 2003 (NGM-2710)", + "kof2003h", "The King of Fighters 2003 (NGH-2710)", + "kof2k4se", "The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg)", + "kof94", "The King of Fighters '94 (NGM-055)(NGH-055)", + "kof95", "The King of Fighters '95 (NGM-084)", + "kof95a", "The King of Fighters '95 (NGM-084), alternate board", + "kof95h", "The King of Fighters '95 (NGH-084)", + "kof96", "The King of Fighters '96 (NGM-214)", + "kof96h", "The King of Fighters '96 (NGH-214)", + "kof97", "The King of Fighters '97 (NGM-2320)", + "kof97h", "The King of Fighters '97 (NGH-2320)", + "kof97k", "The King of Fighters '97 (Korean release)", + "kof97oro", "The King of Fighters '97 Oroshi Plus 2003 (bootleg)", + "kof97pls", "The King of Fighters '97 Plus (bootleg)", + "kof98", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420)", + "kof98a", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420, alternate board)", + "kof98h", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGH-2420)", + "kof98k", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board)", + "kof98ka", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board 2)", + "kof98um", "The King of Fighters '98: Ultimate Match (v1.00)", + "kof99", "The King of Fighters '99 - Millennium Battle (NGM-2510)", + "kof99e", "The King of Fighters '99 - Millennium Battle (earlier)", + "kof99h", "The King of Fighters '99 - Millennium Battle (NGH-2510)", + "kof99k", "The King of Fighters '99 - Millennium Battle (Korean release)", + "kof99p", "The King of Fighters '99 - Millennium Battle (prototype)", + "kofnw", "The King of Fighters Neowave", + "kofnwj", "The King of Fighters Neowave (Japan)", + "koftball", "King of Football", + "kofxi", "The King of Fighters XI", + "kog", "King of Gladiator (The King of Fighters '97 bootleg)", + "koikoi", "Koi Koi Part 2", + "koikois", "Koi Koi Shimasho", + "koikois2", "Koi Koi Shimasho 2 - Super Real Hanafuda (Japan)", + "koinomp", "Mahjong Koi no Magic Potion (Japan)", + "kok", "Povar / Sobrat' Buran / Agroprom (Arcade multi-game bootleg of ZX Spectrum 'Cookie', 'Jetpac' & 'Pssst')", + "kokoroj2", "Kokoroji 2", + "kollon", "Kollon (V2.04J)", + "kollonc", "Kollon (V2.04JC)", + "konam80a", "Konami 80's AC Special (GC826 VER. AAA)", + "konam80j", "Konami 80's Gallery (GC826 VER. JAA)", + "konam80k", "Konami 80's AC Special (GC826 VER. KAA)", + "konam80s", "Konami 80's AC Special (GC826 VER. EAA)", + "konam80u", "Konami 80's AC Special (GC826 VER. UAA)", + "konami88", "Konami '88", + "konamigt", "Konami GT", + "konamigv", "Baby Phoenix/GV System", + "konamigx", "System GX", + "konek", "Konek-Gorbunok", + "kong", "Kong (Donkey Kong conversion on Galaxian hardware)", + "konotako", "Kono Tako (10021 Ver.A)", + "kontest", "Konami Test Board (GX800, Japan)", + "konzero", "Zero (Konami Endeavour)", + "kopunch", "KO Punch", + "korinai", "Mahjong-zukino Korinai Menmen (Japan 880425)", + "korinaim", "Mahjong-zukino Korinai Menmen [BET] (Japan 880920)", + "korokoro", "Koro Koro Quest (Japan)", + "koroleva", "Snezhnaja Koroleva", + "korosuke", "Korosuke Roller (Japan)", + "koshien", "Ah Eikou no Koshien (Japan)", + "kosmokil", "Kosmo Killer", + "kosteel", "Kings of Steel", + "kotbinsp", "Kkot Bi Nyo Special (Korea)", + "kotbinyo", "Kkot Bi Nyo (Korea)", + "kothello", "Kyuukyoku no Othello", + "kotm", "King of the Monsters (set 1)", + "kotm2", "King of the Monsters 2 - The Next Thing (NGM-039)(NGH-039)", + "kotm2p", "King of the Monsters 2 - The Next Thing (prototype)", + "kotmh", "King of the Monsters (set 2)", + "kouyakyu", "The Koukouyakyuh", + "kov", "Knights of Valour / Sangoku Senki (ver. 117)", + "kov100", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", + "kov115", "Knights of Valour / Sangoku Senki (ver. 115)", + "kov2", "Knights of Valour 2 / Sangoku Senki 2 (ver. 107, 102, 100HK)", + "kov2100", "Knights of Valour 2 / Sangoku Senki 2 (ver. 100, 100, 100HK)", + "kov2101", "Knights of Valour 2 / Sangoku Senki 2 (ver. 101, 101, 100HK)", + "kov2102", "Knights of Valour 2 / Sangoku Senki 2 (ver. 102, 101, 100HK)", + "kov2103", "Knights of Valour 2 / Sangoku Senki 2 (ver. 103, 101, 100HK)", + "kov2106", "Knights of Valour 2 / Sangoku Senki 2 (ver. 106, 102, 100KH)", + "kov2nl", "Knights of Valour 2 New Legend (V302, China)", + "kov2nlo", "Knights of Valour 2 New Legend (V301, China)", + "kov2p", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX, 200, 100CN)", + "kov2p202", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M202XX, 200, 100CN)", + "kov2p204", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX, 200, 100CN)", + "kov3", "Knights of Valour 3 (V102, China)", + "kov7sprt", "Knights of Valour - The Seven Spirits", + "kovlsjb", "Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 1)", + "kovlsjba", "Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 2)", + "kovlsqh", "Knights of Valour: Luan Shi Quan Huang / Sangoku Senki: Luan Shi Quan Huang (ver. 200CN)", + "kovlsqh2", "Knights of Valour: Luan Shi Quan Huang 2 / Sangoku Senki: Luan Shi Quan Huang 2 (ver. 200CN)", + "kovplus", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 1)", + "kovplusa", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 2)", + "kovqhsgs", "Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (ver. 303CN)", + "kovsgqyz", "Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 1)", + "kovsgqyza", "Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 2)", + "kovsgqyzb", "Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 3)", + "kovsh", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104, CN)", + "kovsh101", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 101, CN)", + "kovsh102", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 102, CN)", + "kovsh103", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 103, CN)", + "kovshp", "Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 101)", + "kovshpa", "Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 100)", + "kovshxas", "Knights of Valour: Aoshi Sanguo / Sangoku Senki: Aoshi Sanguo (ver. 202CN)", + "kovytzy", "Knights of Valour: Yi Tong Zhong Yuan / Sangoku Senki: Yi Tong Zhong Yuan (ver. 201, China)", + "kozure", "Kozure Ookami (Japan)", + "kpv106", "Kingpin (Pinball)", + "kram", "Kram (set 1)", + "kram2", "Kram (set 2)", + "kram3", "Kram (encrypted)", + "kroozr", "Kozmik Kroozr", + "krull", "Krull", + "krullp", "Krull (Pinball)", + "krzybowl", "Krazy Bowl", + "ksayakyu", "Kusayakyuu", + "ktiger", "Kyukyoku Tiger (Japan)", + "ktiger2", "Kyukyoku Tiger II (Ver 2.1J 1995/11/30)", + "kuhga", "Kuhga - Operation Code 'Vapor Trail' (Japan revision 3)", + "kungfub", "Kung-Fu Master (bootleg set 1)", + "kungfub2", "Kung-Fu Master (bootleg set 2)", + "kungfum", "Kung-Fu Master (World)", + "kungfumd", "Kung-Fu Master (US)", + "kungfur", "Kung-Fu Roushi", + "kungfut", "Kung-Fu Taikun (set 1)", + "kungfuta", "Kung-Fu Taikun (set 2)", + "kuniokun", "Nekketsu Kouha Kunio-kun (Japan)", + "kuniokunb", "Nekketsu Kouha Kunio-kun (Japan bootleg)", + "kurikint", "Kuri Kinton (World)", + "kurikinta", "Kuri Kinton (World, prototype?)", + "kurikintj", "Kuri Kinton (Japan)", + "kurikintu", "Kuri Kinton (US)", + "kurucham", "Kurukuru Chameleon (GDL-0034)", + "kurufev", "Kurukuru Fever", + "kurukuru", "Kuru Kuru Pyon Pyon (Japan)", + "kviper", "Konami Viper BIOS", + "kyros", "Kyros", + "kyrosj", "Kyros No Yakata (Japan)", + "kyuhito", "Kyukyoku no Hito [BET] (Japan 880824)", + "kyukaidk", "Kyuukai Douchuuki (Japan, new version (Rev B))", + "kyukaidko", "Kyuukai Douchuuki (Japan, old version)", + "kyustrkr", "Last Striker / Kyuukyoku no Striker", + "kz26", "KZ-26", + "labyrunr", "Labyrinth Runner (Japan)", + "labyrunrk", "Labyrinth Runner (World Ver. K)", + "lacrazyc", "Let's Attack Crazy Cross (GV027 Asia 1.10)", + "ladybgb2", "Lady Bug (bootleg set 2)", + "ladybug", "Lady Bug", + "ladybugb", "Lady Bug (bootleg set 1)", + "ladybugg", "Lady Bug (bootleg on Galaxian hardware)", + "ladyfrog", "Lady Frog", + "ladygolf", "Vs. Stroke & Match Golf (Ladies Version, set LG4 ?)", + "ladygolfe", "Vs. Stroke & Match Golf (Ladies Version, set LG4 E)", + "ladykill", "Lady Killer", + "ladylinr", "Lady Liner", + "ladyluck", "Lady Luck", + "ladylukt", "Lady Luck (Taito)", + "ladymstr", "Lady Master of Kung Fu", + "ladyshot", "Lady Sharpshooter", + "ladyshota", "Lady Sharpshooter (alternate set)", + "lagirl", "LA Girl", + "lagunar", "Laguna Racer", + "lah_110", "Last Action Hero (1.10)", + "lah_112", "Last Action Hero (1.12)", + "lah_l104", "Last Action Hero (1.04 Spain)", + "lah_l108", "Last Action Hero (1.08 Spain)", + "lamachin", "L.A. Machineguns", + "landbrk", "Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.02)", + "landbrka", "Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.03) (AT89c52 protected)", + "landgear", "Landing Gear (Ver 4.2 O)", + "landgeara", "Landing Gear (Ver 3.1 O)", + "landgearj", "Landing Gear (Ver 4.2 J)", + "landgearja", "Landing Gear (Ver 3.0 J)", + "landhigh", "Landing High Japan", + "landmakr", "Land Maker (Ver 2.01J 1998/06/01)", + "landmakrp", "Land Maker (Ver 2.02O 1998/06/02) (Prototype)", + "lans2004", "Lansquenet 2004 (Shock Troopers - 2nd Squad bootleg)", + "lapbylap", "Lap By Lap", + "laperla", "La Perla Nera (Ver 2.0)", + "laperlag", "La Perla Nera Gold (Ver 2.0)", + "laser", "Astro Laser (bootleg of Space Laser)", + "laser2k1", "Laser 2001 (Ver 1.2)", + "laserbas", "Laser Base (set 1)", + "laserbasa", "Laser Base (set 2)", + "laserbat", "Laser Battle", + "lasso", "Lasso", + "lasstixx", "Laser Strixx 2", + "lastbank", "Last Bank (v1.16)", + "lastbh", "The Last Bounty Hunter v0.06", + "lastblad", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340)", + "lastbladh", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340)", + "lastbld2", "The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430)(NGH-2430)", + "lastbrnx", "Last Bronx (Export, Revision A)", + "lastbrnxj", "Last Bronx (Japan, Revision A)", + "lastbrnxu", "Last Bronx (USA, Revision A)", + "lastday", "The Last Day (set 1)", + "lastdaya", "The Last Day (set 2)", + "lastduel", "Last Duel (US New Ver.)", + "lastduelb", "Last Duel (bootleg)", + "lastduelj", "Last Duel (Japan)", + "lastduelo", "Last Duel (US Old Ver.)", + "lastfght", "Last Fighting", + "lastfort", "Last Fortress - Toride", + "lastforte", "Last Fortress - Toride (Erotic, Rev C)", + "lastfortea", "Last Fortress - Toride (Erotic, Rev A)", + "lastfortg", "Last Fortress - Toride (German)", + "lastfortk", "Last Fortress - Toride (Korea)", + "lastlap", "Last Lap", + "lastmisn", "Last Mission (US revision 6)", + "lastmisnj", "Last Mission (Japan)", + "lastmisno", "Last Mission (US revision 5)", + "lastsold", "The Last Soldier (Korean release of The Last Blade)", + "laststar", "The Last Starfighter (prototype)", + "lastsurv", "Last Survivor (Japan, FD1094 317-0083)", + "lasvegas", "Las Vegas, Nevada", + "lazarian", "Lazarian", + "lazercmd", "Lazer Command", + "lazrlord", "Lazer Lord", + "lbeach", "Long Beach", + "lbgrande", "Libero Grande (Asia, LG2/VER.A)", + "lbgrandeja", "Libero Grande (Japan, LG1/VER.A)", + "lbowling", "League Bowling (NGM-019)(NGH-019)", + "lc_11", "League Champ (1.1)", + "lca", "Lights...Camera...Action!", + "lca2", "Lights...Camera...Action! (rev.2)", + "ldrink", "Lucky Drink (set 1)", + "ldrinka", "Lucky Drink (set 2)", + "ldrun", "Lode Runner (set 1)", + "ldrun2", "Lode Runner II - The Bungeling Strikes Back", + "ldrun3", "Lode Runner III - The Golden Labyrinth", + "ldrun3j", "Lode Runner III - Majin No Fukkatsu", + "ldrun4", "Lode Runner IV - Teikoku Karano Dasshutsu", + "ldruna", "Lode Runner (set 2)", + "le2", "Lethal Enforcers II: Gun Fighters (ver EAA)", + "le2j", "Lethal Enforcers II: The Western (ver JAA)", + "le2u", "Lethal Enforcers II: Gun Fighters (ver UAA)", + "leadang", "Lead Angle (Japan)", + "leader", "Leader", + "leaguemn", "Yakyuu Kakutou League-Man (Japan)", + "lectrono", "Lectronamo", + "ledstorm", "Led Storm (US)", + "ledstorm2", "Led Storm Rally 2011 (US)", + "legend", "Legend", + "legendb", "Legion (bootleg of Legend)", + "legendoh", "Legend of Heroes", + "legendos", "Legend of Success Joe / Ashita no Joe Densetsu", + "legion", "Legion - Spinner-87 (World ver 2.03)", + "legionna", "Legionnaire (World)", + "legionnau", "Legionnaire (US)", + "legiono", "Chouji Meikyuu Legion (Japan bootleg ver 1.05)", + "legofair", "Koukuu Kihei Monogatari - The Legend of Air Cavalry (Japan)", + "leking", "Le King", + "lemans24", "Le Mans 24 (Revision B)", + "lemmings", "Lemmings (US prototype)", + "lemnangl", "Mahjong Lemon Angel (Japan)", + "leprechn", "Leprechaun", + "leprechp", "Leprechaun (Pacific)", + "leprgld", "Leprechaun's Gold (Russia)", + "lethalen", "Lethal Enforcers (ver UAE, 11/19/92 15:04)", + "lethaleneab", "Lethal Enforcers (ver EAB, 10/14/92 19:53)", + "lethaleneae", "Lethal Enforcers (ver EAE, 11/19/92 16:24)", + "lethalenj", "Lethal Enforcers (ver JAD, 12/04/92 17:16)", + "lethalenua", "Lethal Enforcers (ver UAA, 08/17/92 21:38)", + "lethalenub", "Lethal Enforcers (ver UAB, 09/01/92 11:12)", + "lethalenux", "Lethal Enforcers (ver unknown, US, 08/06/92 15:11, hacked/proto?)", + "lethalj", "Lethal Justice", + "lethalth", "Lethal Thunder (World)", + "levers", "Levers", + "lghost", "Laser Ghost (World, FD1094 317-0166)", + "lghostu", "Laser Ghost (US, FD1094 317-0165)", + "lgp", "Laser Grand Prix", + "lgtnfght", "Lightning Fighters (World)", + "lgtnfghta", "Lightning Fighters (Asia)", + "lgtnfghtu", "Lightning Fighters (US)", + "lhaunt_10", "Lucky Haunter (090712 Entertainment)", + "lhaunt_11", "Lucky Haunter (100331 Entertainment)", + "lhaunt_2", "Lucky Haunter (030804 World)", + "lhaunt_4", "Lucky Haunter (031111 World)", + "lhaunt_4a", "Lucky Haunter (bootleg, 031111, backdoor)", + "lhaunt_5", "Lucky Haunter (040216 World)", + "lhaunt_5a", "Lucky Haunter (bootleg, 040216, backdoor)", + "lhaunt_6", "Lucky Haunter (040825 World)", + "lhaunt_6a", "Lucky Haunter (bootleg, 040825, backdoor)", + "lhaunt_6b", "Lucky Haunter (bootleg, 040825, VIDEO GAME-1 PB01)", + "lhaunt_6c", "Lucky Haunter (bootleg, 040825, changed version text)", + "lhaunt_6d", "Lucky Haunter (bootleg, 040825, LOTTOGAME (I))", + "lhaunt_6e", "Lucky Haunter (bootleg, 040825, LOTO PROGRAM V-LH2)", + "lhaunt_6f", "Lucky Haunter (bootleg, 040825, LOTOS PB01)", + "lhaunt_7", "Lucky Haunter (070402 Russia)", + "lhaunt_8", "Lucky Haunter (070604 Russia)", + "lhb", "Long Hu Bang (China, V035C)", + "lhb2", "Long Hu Bang II (Hong Kong, V185H)", + "lhbv33c", "Long Hu Bang (China, V033C)", + "lhzb2", "Mahjong Long Hu Zheng Ba 2 (set 1)", + "lhzb2a", "Mahjong Long Hu Zheng Ba 2 (VS221M)", + "lhzb3", "Long Hu Zheng Ba 3", + "lhzb4", "Long Hu Zheng Ba 4", + "liberate", "Liberation", + "liberateb", "Liberation (bootleg)", + "liberatr", "Liberator (set 1)", + "liberatr2", "Liberator (set 2)", + "liblrabl", "Libble Rabble", + "lifefrce", "Lifeforce (US)", + "lifefrcej", "Lifeforce (Japan)", + "lightbr", "Light Bringer (Ver 2.2O 1994/04/08)", + "lightbrj", "Light Bringer (Ver 2.1J 1994/02/18)", + "lightnin", "Lightning", + "lindbios", "Sega Lindbergh Bios", + "linkypip", "Linky Pipe", + "liquidk", "Liquid Kids (World)", + "liquidku", "Liquid Kids (US)", + "lithero", "Little Hero", + "littlerb", "Little Robin", + "livegal", "Live Gal (Japan 870530)", + "livequiz", "Live Quiz Show", + "lizard", "Pinball Lizard", + "lizwiz", "Lizard Wizard", + "lkage", "The Legend of Kage", + "lkageb", "The Legend of Kage (bootleg set 1)", + "lkageb2", "The Legend of Kage (bootleg set 2)", + "lkageb3", "The Legend of Kage (bootleg set 3)", + "lkageo", "The Legend of Kage (older)", + "lkageoo", "The Legend of Kage (oldest)", + "llander", "Lunar Lander (rev 2)", + "llander1", "Lunar Lander (rev 1)", + "llcharm", "Lucky Lady's Charm (set 1)", + "llcharma", "Lucky Lady's Charm (set 2)", + "lluck3x3", "Lucky Lady (3x3 deal)", + "lluck4x1", "Lucky Lady (4x1 aces)", + "lnc", "Lock'n'Chase", + "lockload", "Locked 'n Loaded (World)", + "lockloadu", "Locked 'n Loaded (US, Dragon Gun conversion)", + "lockon", "Lock-On (rev. E)", + "lockonc", "Lock-On (rev. C)", + "locoboot", "Loco-Motion (bootleg)", + "locomotn", "Loco-Motion", + "locomotp", "Locomotion", + "loderndf", "Lode Runner - The Dig Fight (ver. B)", + "loderndfa", "Lode Runner - The Dig Fight (ver. A)", + "loffire", "Line of Fire / Bakudan Yarou (World, FD1094 317-0136)", + "loffirej", "Line of Fire / Bakudan Yarou (Japan, FD1094 317-0134)", + "loffireu", "Line of Fire / Bakudan Yarou (US, FD1094 317-0135)", + "logger", "Logger", + "logicpr2", "Logic Pro 2 (Japan)", + "logicpro", "Logic Pro (Japan)", + "loht", "Legend of Hero Tonma", + "lohtb", "Legend of Hero Tonma (unprotected bootleg)", + "lohtb2", "Legend of Hero Tonma (Japan, bootleg with i8751)", + "lohtj", "Legend of Hero Tonma (Japan)", + "lol", "Life of Luxury (Russia)", + "lomakai", "Legend of Makai (World)", + "looper", "Looper", + "looping", "Looping", + "loopingv", "Looping (Venture Line license, set 1)", + "loopingva", "Looping (Venture Line license, set 2)", + "lordgun", "Lord of Gun (USA)", + "lordofk", "The Lord of King (Japan)", + "lortium", "Lortium", + "lostspc", "Lost in Space", + "losttomb", "Lost Tomb (easy)", + "losttombh", "Lost Tomb (hard)", + "lostwrld", "Lost Worlds (Japan)", + "lostwrldo", "Lost Worlds (Japan Old Ver.)", + "lostwrlp", "Lost World", + "lostwsga", "The Lost World (Revision A)", + "lotlot", "Lot Lot", + "lotr", "Lord Of The Rings, The (10.00)", + "lotr401", "Lord Of The Rings, The (4.01)", + "lotr410", "Lord Of The Rings, The (4.10)", + "lotr5", "Lord Of The Rings, The (5.00)", + "lotr501", "Lord Of The Rings, The (5.01)", + "lotr6", "Lord Of The Rings, The (6.00)", + "lotr7", "Lord Of The Rings, The (7.00)", + "lotr8", "Lord Of The Rings, The (8.00)", + "lotr9", "Lord Of The Rings, The (9.00)", + "lotr_fr", "Lord Of The Rings, The (10.00 France)", + "lotr_fr401", "Lord Of The Rings, The (4.01 France)", + "lotr_fr410", "Lord Of The Rings, The (4.10 France)", + "lotr_fr5", "Lord Of The Rings, The (5.0 France)", + "lotr_fr501", "Lord Of The Rings, The (5.01 France)", + "lotr_fr6", "Lord Of The Rings, The (6.0 France)", + "lotr_fr7", "Lord Of The Rings, The (7.0 France)", + "lotr_fr8", "Lord Of The Rings, The (8.0 France)", + "lotr_fr9", "Lord Of The Rings, The (9.0 France)", + "lotr_gr", "Lord Of The Rings, The (10.00 Germany)", + "lotr_gr401", "Lord Of The Rings, The (4.01 Germany)", + "lotr_gr410", "Lord Of The Rings, The (4.10 Germany)", + "lotr_gr5", "Lord Of The Rings, The (5.0 Germany)", + "lotr_gr501", "Lord Of The Rings, The (5.01 Germany)", + "lotr_gr6", "Lord Of The Rings, The (6.0 Germany)", + "lotr_gr7", "Lord Of The Rings, The (7.0 Germany)", + "lotr_gr8", "Lord Of The Rings, The (8.0 Germany)", + "lotr_gr9", "Lord Of The Rings, The (9.0 Germany)", + "lotr_it", "Lord Of The Rings, The (10.00 Italy)", + "lotr_it401", "Lord Of The Rings, The (4.01 Italy)", + "lotr_it410", "Lord Of The Rings, The (4.10 Italy)", + "lotr_it5", "Lord Of The Rings, The (5.0 Italy)", + "lotr_it501", "Lord Of The Rings, The (5.01 Italy)", + "lotr_it6", "Lord Of The Rings, The (6.0 Italy)", + "lotr_it7", "Lord Of The Rings, The (7.0 Italy)", + "lotr_it8", "Lord Of The Rings, The (8.0 Italy)", + "lotr_it9", "Lord Of The Rings, The (9.0 Italy)", + "lotr_le", "Lord Of The Rings, The (10.02 Limited Edition)", + "lotr_sp", "Lord Of The Rings, The (10.00 Spain)", + "lotr_sp401", "Lord Of The Rings, The (4.01 Spain)", + "lotr_sp5", "Lord Of The Rings, The (5.0 Spain)", + "lotr_sp501", "Lord Of The Rings, The (5.01 Spain)", + "lotr_sp6", "Lord Of The Rings, The (6.0 Spain)", + "lotr_sp7", "Lord Of The Rings, The (7.0 Spain)", + "lotr_sp8", "Lord Of The Rings, The (8.0 Spain)", + "lotr_sp9", "Lord Of The Rings, The (9.0 Spain)", + "lottof2", "Lotto Fun 2", + "lottofun", "Lotto Fun", + "lovehous", "Mahjong Love House [BET] (Japan 901024)", + "loverboy", "Lover Boy", + "lovewin", "Love To Win (Russia)", + "lpadv", "Logic Pro Adventure (Japan)", + "lrescue", "Lunar Rescue", + "lrescuem", "Lunar Rescue (Model Racing bootleg, set 1)", + "lrescuem2", "Lunar Rescue (Model Racing bootleg, set 2)", + "lresort", "Last Resort", + "lsasquad", "Land Sea Air Squad / Riku Kai Kuu Saizensen", + "lsrcu_l2", "Laser Cue (L-2)", + "lsrquiz", "Laser Quiz Italy", + "lsrquiz2", "Laser Quiz 2 Italy (v1.0)", + "ltcasinn", "Little Casino (newer)", + "ltcasino", "Little Casino (older)", + "luckboom", "Lucky Boom", + "luckboomh", "Lucky Boom (Hard Times hardware)", + "luckfoun", "Lucky Fountain (Konami Endeavour)", + "luckgrln", "Lucky Girl (newer Z180 based hardware)", + "luckshel", "Lucky Shell (Russia) (Extrema)", + "lucky74", "Lucky 74 (bootleg, set 1)", + "lucky74a", "Lucky 74 (bootleg, set 3)", + "lucky74b", "Lucky 74 (bootleg, set 2)", + "lucky8", "New Lucky 8 Lines (set 1, W-4)", + "lucky8a", "New Lucky 8 Lines (set 2, W-4)", + "lucky8b", "New Lucky 8 Lines (set 3, W-4, extended gfx)", + "lucky8c", "New Lucky 8 Lines (set 4, W-4)", + "lucky8d", "New Lucky 8 Lines (set 5, W-4, main 40%, d-up 60%)", + "lucky8e", "New Lucky 8 Lines (set 6, W-4, main 40%, d-up 60%)", + "lucky_l1", "Lucky Seven (L-1)", + "luckygrl", "Lucky Girl? (Wing)", + "luckylad", "Lucky Lady (Wing, encrypted)", + "luckyrlt", "Lucky Roulette Plus (6-players, Spanish)", + "luckywld", "Lucky & Wild", + "luckywldj", "Lucky & Wild (Japan)", + "luctoday", "Lucky Today", + "lunapark", "Luna Park (set 1, dual program)", + "lunaparkb", "Luna Park (set 2, dual program)", + "lunaparkc", "Luna Park (set 3)", + "lunarba1", "Lunar Battle (prototype, earlier)", + "lunarbat", "Lunar Battle (prototype, later)", + "lunelle", "Lunelle", + "lupin3", "Lupin III (set 1)", + "lupin3a", "Lupin III (set 2)", + "lupinsho", "Lupin The Third - The Shooting (GDS-0018)", + "luplup", "Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 3.0 / 990128)", + "luplup29", "Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 2.9 / 990108)", + "luptype", "Lupin The Third - The Typing (Rev A) (GDS-0021A)", + "lvcards", "Lovely Cards", + "lvgirl94", "Las Vegas Girl (Girl '94)", + "lvpoker", "Lovely Poker [BET]", + "lw3_200", "Lethal Weapon 3 (2.00)", + "lw3_205", "Lethal Weapon 3 (2.05)", + "lw3_207", "Lethal Weapon 3 (2.07 Canada)", + "lw3_208", "Lethal Weapon 3 (2.08)", + "lwar_a83", "Laser War (8.3)", + "lwar_e90", "Laser War (9.0 Europe)", + "lwings", "Legendary Wings (US set 1)", + "lwings2", "Legendary Wings (US set 2)", + "lwingsb", "Legendary Wings (bootleg)", + "lwingsj", "Ares no Tsubasa (Japan)", + "lzbal_l2", "Laser Ball (L-2)", + "lzbal_t2", "Laser Ball (T-2)", + "m1albsq", "Albert Square (Maygay) v4.1 (M1A/B)", + "m1albsq1", "Albert Square (Maygay) v1.1 (M1A/B)", + "m1albsq1p", "Albert Square (Maygay) v1.1 (Protocol) (M1A/B)", + "m1albsq2", "Albert Square (Maygay) v2.2 (M1A/B)", + "m1albsq3", "Albert Square (Maygay) v3.0 (M1A/B)", + "m1albsqp", "Albert Square (Maygay) v4.1 (Protocol) (M1A/B)", + "m1alley", "Alley Cat (Maygay) (M1A/B)", + "m1apollo", "Apollo 9 (Maygay) vA.1 (Newer) (M1A/B)", + "m1apollo11", "Apollo 9 (Maygay) v11? (M1A/B)", + "m1apollo11b", "Apollo 9 (Maygay) v11? (BwB Rebuild) (M1A/B)", + "m1apollo11p", "Apollo 9 (Maygay) v11? (Protocol) (M1A/B)", + "m1apollo2", "Apollo 9 (Maygay) v2.1 (M1A/B)", + "m1apollo2p", "Apollo 9 (Maygay) v2.1 (Protocol) (M1A/B)", + "m1apollo3", "Apollo 9 (Maygay) v3.1 (M1A/B)", + "m1apollo3p", "Apollo 9 (Maygay) v3.1 (Protocol) (M1A/B)", + "m1apollo4", "Apollo 9 (Maygay) v4.1 (Newer) (M1A/B)", + "m1apollo4o", "Apollo 9 (Maygay) v4.1 (Older, Token)(M1A/B)", + "m1apollo4p", "Apollo 9 (Maygay) v4.1 (Newer) (Protocol) (M1A/B)", + "m1apollo5", "Apollo 9 (Maygay) v5.1 (M1A/B)", + "m1apollo5p", "Apollo 9 (Maygay) v5.1 (Protocol) (M1A/B)", + "m1apollo7", "Apollo 9 (Maygay) v7.1 (M1A/B)", + "m1apollo7p", "Apollo 9 (Maygay) v7.1 (Protocol) (M1A/B)", + "m1apollo8", "Apollo 9 (Maygay) v8.1 (M1A/B)", + "m1apollo8p", "Apollo 9 (Maygay) v8.1 (Protocol) (M1A/B)", + "m1apollo9", "Apollo 9 (Maygay) v9.1 (M1A/B)", + "m1apollo9p", "Apollo 9 (Maygay) v9.1 (Protocol) (M1A/B)", + "m1apolloa", "Apollo 9 (Maygay) vA.1 (Older) (M1A/B)", + "m1apolloao", "Apollo 9 (Maygay) vA.1 (Older, 15GBP) (M1A/B)", + "m1apolloap", "Apollo 9 (Maygay) vA.1 (Older) (Protocol) (M1A/B)", + "m1apolloh", "Apollo 9 (Maygay) vA.1 (Newer) (Hack?) (M1A/B)", + "m1apollop", "Apollo 9 (Maygay) vA.1 (Newer) (Protocol) (M1A/B)", + "m1atunk", "Random Runner (Avantime?)", + "m1bankbs", "Bank Buster Club (Maygay) v2.9 (M1A/B)", + "m1bankbso", "Bank Buster Club (Maygay) v2.8 (M1A/B)", + "m1bankbsp", "Bank Buster Club (Maygay) v2.9 (Protocol) (M1A/B)", + "m1bankrl", "Bank Roll (Maygay) v1.1 (M1A/B)", + "m1bankrl2p", "Bank Roll (Maygay) v2.1 (Protocol) (M1A/B)", + "m1bankrlp", "Bank Roll (Maygay) v1.1 (Protocol) (M1A/B)", + "m1bargn", "Bar-gain (Maygay) v7.1 (M1A/B)", + "m1bargnc", "Casino Bar-gain (Maygay) v5.1 (M1A/B)", + "m1bargncp", "Casino Bar-gain (Maygay) v5.1 (Protocol)(M1A/B)", + "m1bargnp", "Bar-gain (Maygay) v7.1 (Protocol) (M1A/B)", + "m1bghou", "Big Ghoulies (Gemini) (M1A/B) (set 1)", + "m1bghoua", "Big Ghoulies (Gemini) (M1A/B) (set 2)", + "m1bghoub", "Big Ghoulies (Gemini) (M1A/B) (set 3)", + "m1bghouc", "Big Ghoulies (Gemini) (M1A/B) (set 4)", + "m1bghoud", "Big Ghoulies (Gemini) (M1A/B) (set 5)", + "m1bghoue", "Big Ghoulies (Gemini) (M1A/B) (set 6)", + "m1bghouf", "Big Ghoulies (Gemini) (M1A/B) (set 7)", + "m1bghoug", "Big Ghoulies (Gemini) (M1A/B) (set 8)", + "m1bigdel", "Big Deal (Maygay) (M1A/B)", + "m1bignit", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 1)", + "m1bignita", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 2)", + "m1bignitb", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 3)", + "m1bignitc", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 4)", + "m1blkhol", "Black Hole (Dutch) (Maygay) (M1A/B)", + "m1bluemx", "Blue Max (Maygay) v2.1 (M1A/B)", + "m1bluemxp", "Blue Max (Maygay) v2.1 (Protocol) (M1A/B)", + "m1bondi", "Bondi Beach (Maygay) v1.1 (Newer) (M1A/B)", + "m1bondi1", "Bondi Beach (Maygay) v1.1 (M1A/B)", + "m1bondi1p", "Bondi Beach (Maygay) v1.1 (Protocol) (M1A/B)", + "m1bondi2", "Bondi Beach (Maygay) v2.1 (M1A/B)", + "m1bondi2p", "Bondi Beach (Maygay) v2.1 (Protocol) (M1A/B)", + "m1bondi2po", "Bondi Beach (Maygay) v2.1 (Older) (Protocol) (M1A/B)", + "m1bondi3", "Bondi Beach (Maygay) v3.1 (M1A/B)", + "m1bondi4", "Bondi Beach (Maygay) v4.1 (M1A/B)", + "m1bondi4p", "Bondi Beach (Maygay) v4.1 (Protocol) (M1A/B)", + "m1bondip", "Bondi Beach (Maygay) v1.1 (Newer) (Protocol) (M1A/B)", + "m1bountc", "Bounty Hunter Club (Maygay) v1.3 (M1A/B)", + "m1bountcp", "Bounty Hunter Club (Maygay) v1.3 (Protocol) (M1A/B)", + "m1calyps", "Calypso (Maygay) (M1A/B) (set 1)", + "m1calypsa", "Calypso (Maygay) (M1A/B) (set 2)", + "m1calypsb", "Calypso (Maygay) (M1A/B) (set 3)", + "m1casclb", "Casino Club (Maygay) v1.2 (M1A/B)", + "m1casclb1", "Casino Club (Maygay) v1.1 (M1A/B)", + "m1casclbp", "Casino Club (Maygay) v1.2 (Protocol) (M1A/B)", + "m1casgcl", "Casino Gambler Club (Maygay) v1.2 (M1A/B)", + "m1casgclp", "Casino Gambler Club (Maygay) v1.2 (Protocol) (M1A/B)", + "m1cashc", "Cash Classic (Maygay) (M1A/B) (set 1)", + "m1cashca", "Cash Classic (Maygay) (M1A/B) (set 2)", + "m1cashln", "Cash Lines (Maygay) (M1A/B)", + "m1casroy", "Casino Royale Club (Maygay) v1.2 (M1A/B)", + "m1casroy1", "Casino Royale Club (Maygay) v1.1 (M1A/B)", + "m1casroyp", "Casino Royale Club (Maygay) v1.2 (Protocol) (M1A/B)", + "m1chain", "Chain Reaction (Maygay) (M1A/B)", + "m1cik", "Cash Is King (Maygay) v11? (M1A/B)", + "m1cik11", "Cash Is King (Maygay) v1.1 (M1A/B)", + "m1cik11n", "Cash Is King (Maygay) v1.1 (alternate) (M1A/B)", + "m1cik11np", "Cash Is King (Maygay) v1.1 (alternate,Protocol) (M1A/B)", + "m1cik11p", "Cash Is King (Maygay) v1.1 (Protocol) (M1A/B)", + "m1cik12", "Cash Is King (Maygay) v1.2 (M1A/B)", + "m1cik21", "Cash Is King (Maygay) v2.1 (M1A/B)", + "m1cik21p", "Cash Is King (Maygay) v2.1 (Protocol) (M1A/B)", + "m1cik31", "Cash Is King (Maygay) v3.1 (M1A/B)", + "m1cik31p", "Cash Is King (Maygay) v3.1 (Protocol) (M1A/B)", + "m1cik41", "Cash Is King (Maygay) v4.1 (M1A/B)", + "m1cik41p", "Cash Is King (Maygay) v4.1 (Protocol) (M1A/B)", + "m1cik51", "Cash Is King (Maygay) v5.1 (M1A/B)", + "m1cik51o", "Cash Is King (Maygay) v5.1 (Older) (M1A/B)", + "m1cik51p", "Cash Is King (Maygay) v5.1 (Protocol) (M1A/B)", + "m1cikh", "Cash Is King (Maygay) v11? (Hack?) (M1A/B)", + "m1cikp", "Cash Is King (Maygay) v11? (Protocol) (M1A/B)", + "m1clbfvr", "Club Fever (Maygay) v1.1 (M1A/B)", + "m1clbfvrp", "Club Fever (Maygay) v1.1 (Protocol) (M1A/B)", + "m1cluecb", "Cluedo Club (Maygay) v3.1 (M1A/B)", + "m1cluecb1", "Cluedo Club (Maygay) v1.1 (M1A/B)", + "m1cluecb1p", "Cluedo Club (Maygay) v1.1 (Protocol) (M1A/B)", + "m1cluecb2", "Cluedo Club (Maygay) v2.1 (M1A/B)", + "m1cluecb2p", "Cluedo Club (Maygay) v2.1 (Protocol) (M1A/B)", + "m1cluecbp", "Cluedo Club (Maygay) v3.1 (Protocol) (M1A/B)", + "m1cluedo", "Cluedo (Maygay) v6.1 (M1A/B)", + "m1cluedo1", "Cluedo (Maygay) v1.1 (M1A/B)", + "m1cluedo1h", "Cluedo (Maygay) v1.1 (Hack?) (M1A/B)", + "m1cluedo1p", "Cluedo (Maygay) v1.1 (Protocol) (M1A/B)", + "m1cluedo3", "Cluedo (Maygay) v3.1 (M1A/B)", + "m1cluedo3h", "Cluedo (Maygay) v3.1 (Hack?) (M1A/B)", + "m1cluedo3p", "Cluedo (Maygay) v3.1 (Protocol) (M1A/B)", + "m1cluedo4", "Cluedo (Maygay) v4.1 (M1A/B)", + "m1cluedo4p", "Cluedo (Maygay) v4.1 (Protocol) (M1A/B)", + "m1cluedo5", "Cluedo (Maygay) v5.1 (M1A/B)", + "m1cluedo5p", "Cluedo (Maygay) v5.1 (Protocol) (M1A/B)", + "m1cluedob1", "Cluedo (Maygay/BwB) v1.1 (M1A/B)", + "m1cluedob1h", "Cluedo (Maygay/BwB) v1.1 (Hack?) (M1A/B)", + "m1cluedob1p", "Cluedo (Maygay/BwB) v1.1 (Protocol) (M1A/B)", + "m1cluedob2", "Cluedo (Maygay/BwB) v2.1 (M1A/B)", + "m1cluedob2h", "Cluedo (Maygay/BwB) v2.1 (Hack?) (M1A/B)", + "m1cluedob2p", "Cluedo (Maygay/BwB) v2.1 (Protocol) (M1A/B)", + "m1cluedoi", "Cluedo (Maygay) v7.2 (Isle of Man) (M1A/B)", + "m1cluedoip", "Cluedo (Maygay) v7.2 (Isle of Man) (Protocol) (M1A/B)", + "m1cluedon", "Cluedo (Maygay) v1.2 (Newer) (M1A/B)", + "m1cluedonp", "Cluedo (Maygay) v1.2 (Newer) (Protocol) (M1A/B)", + "m1cluedop", "Cluedo (Maygay) v6.1 (Protocol) (M1A/B)", + "m1cluesh", "Super Cluedo Showcase (Maygay) v1.2 (M1A/B)", + "m1cluesho", "Super Cluedo Showcase (Maygay) v1.2 (Older) (M1A/B)", + "m1clueshop", "Super Cluedo Showcase (Maygay) v1.2 (Older) (Protocol) (M1A/B)", + "m1clueshp", "Super Cluedo Showcase (Maygay) v1.2 (Protocol) (M1A/B)", + "m1cluess", "Cluedo Super Sleuth (Maygay) v2.3 (M1A/B)", + "m1cluessa", "Cluedo Super Sleuth (Maygay) v1.2 (Newer) (M1A/B)", + "m1cluessap", "Cluedo Super Sleuth (Maygay) v1.2 (Newer) (Protocol) (M1A/B)", + "m1cluessb", "Cluedo Super Sleuth (Maygay) v7.1 (Older) (M1A/B)", + "m1cluessbp", "Cluedo Super Sleuth (Maygay) v7.1 (Older) (Protocol) (M1A/B)", + "m1cluessc", "Cluedo Super Sleuth (Maygay) v6.1 (Older) (M1A/B)", + "m1cluesscp", "Cluedo Super Sleuth (Maygay) v6.1 (Older) (Protocol) (M1A/B)", + "m1cluessd", "Cluedo Super Sleuth (Maygay) v5.1 (Older) (M1A/B)", + "m1cluessdp", "Cluedo Super Sleuth (Maygay) v5.1 (Older) (Protocol) (M1A/B)", + "m1cluesse", "Cluedo Super Sleuth (Maygay) v2.1 (Older) (M1A/B)", + "m1cluessep", "Cluedo Super Sleuth (Maygay) v2.1 (Older) (Protocol) (M1A/B)", + "m1cluessf", "Cluedo Super Sleuth (Maygay) v1.1 (Older) (M1A/B)", + "m1cluessfp", "Cluedo Super Sleuth (Maygay) v1.1 (Older) (Protocol) (M1A/B)", + "m1cluessg", "Cluedo Super Sleuth (Maygay) v7.1 (15GBP Jackpot) (Older) (M1A/B)", + "m1cluessh", "Cluedo Super Sleuth (Maygay) v2.3 (Newer) (Hack) (M1A/B)", + "m1cluessi", "Cluedo Super Sleuth (Maygay) v2.1 (10GBP Jackpot) (Older) (M1A/B)", + "m1cluessj", "Cluedo Super Sleuth (Maygay) v2.3 (5GBP Jackpot) (Older) (M1A/B)", + "m1cluessk", "Cluedo Super Sleuth (Maygay) v1.2 (Older) (M1A/B)", + "m1cluessl", "Cluedo Super Sleuth (Maygay) v4.1 (Older) (M1A/B)", + "m1cluesslp", "Cluedo Super Sleuth (Maygay) v4.1 (Older) (Protocol) (M1A/B)", + "m1cluessm", "Cluedo Super Sleuth (Maygay) v3.1 (Older) (M1A/B)", + "m1cluessmp", "Cluedo Super Sleuth (Maygay) v3.1 (Older) (Protocol) (M1A/B)", + "m1cluessn", "Cluedo Super Sleuth (Maygay) v1.1 (10GBP Jackpot) (Older) (M1A/B)", + "m1cluesso", "Cluedo Super Sleuth (Maygay) v2.1 (Older, alternate) (M1A/B)", + "m1cluessop", "Cluedo Super Sleuth (Maygay) v2.1 (Older, alternate) (Protocol) (M1A/B)", + "m1cluessp", "Cluedo Super Sleuth (Maygay) v2.3 (Newer) (Protocol) (M1A/B)", + "m1cluessq", "Cluedo Super Sleuth (Maygay) v5.1 (Older, alternate) (M1A/B)", + "m1cluessqp", "Cluedo Super Sleuth (Maygay) v5.1 (Older, alternate) (Protocol) (M1A/B)", + "m1cluessr", "Cluedo Super Sleuth (Maygay) v3.1 (Older, alternate) (M1A/B)", + "m1cluessrp", "Cluedo Super Sleuth (Maygay) v3.1 (Older, alternate) (Protocol) (M1A/B)", + "m1cluesss", "Cluedo Super Sleuth (Maygay) v4.1? (Older, alternate) (M1A/B)", + "m1cluesssp", "Cluedo Super Sleuth (Maygay) v4.1? (Older, alternate) (Protocol) (M1A/B)", + "m1coderd", "Code Red Club (Maygay) v2.1 (M1A/B)", + "m1coderdp", "Code Red Club (Maygay) v2.1 (Protocol) (M1A/B)", + "m1coro", "Coronation Street (Maygay) (M1A/B)", + "m1coro10h1", "Coronation Street (Maygay) v1.0 (Hack 1) (M1A/B)", + "m1coro10h2", "Coronation Street (Maygay) v1.0 (Hack 2) (M1A/B)", + "m1coro10h3", "Coronation Street (Maygay) v1.0 (Hack 3) (M1A/B)", + "m1coro11n", "Coronation Street (Maygay) v1.1 (Newer) (M1A/B)", + "m1coro11np", "Coronation Street (Maygay) v1.1 (Newer) (Protocol) (M1A/B)", + "m1coro12a", "Coronation Street (Maygay) v1.2 (Newer, G?) (Alternate) (M1A/B)", + "m1coro12g", "Coronation Street (Maygay) v1.2 (Newer, G?) (M1A/B)", + "m1coro12gp", "Coronation Street (Maygay) v1.2 (Newer, G?) (Protocol) (M1A/B)", + "m1coro12n", "Coronation Street (Maygay) v1.2 (Newer) (M1A/B)", + "m1coro12np", "Coronation Street (Maygay) v1.2 (Newer) (Protocol) (M1A/B)", + "m1coro21n", "Coronation Street (Maygay) v2.1 (Newer) (M1A/B)", + "m1coro21np", "Coronation Street (Maygay) v2.1 (Newer) (Protocol) (M1A/B)", + "m1coro21v", "Coronation Street (Maygay) v2.1 (Multivend) (M1A/B)", + "m1coro21vp", "Coronation Street (Maygay) v2.1 (Multivend) (Protocol)(M1A/B)", + "m1coro22n", "Coronation Street (Maygay) v2.2 (Newer) (M1A/B)", + "m1coro30h", "Coronation Street (Maygay) v3.0 (Hack) (M1A/B)", + "m1coro31", "Coronation Street (Maygay) v3.1 (Older) (M1A/B)", + "m1coro31p", "Coronation Street (Maygay) v3.1 (Older) (Protocol) (M1A/B)", + "m1coro32g", "Coronation Street (Maygay) v3.2 (Newer, G?) (M1A/B)", + "m1coro32gh", "Coronation Street (Maygay) v3.2 (Newer, G?) (Hack) (M1A/B)", + "m1coro32n", "Coronation Street (Maygay) v3.2 (Newer) (M1A/B)", + "m1coro32np", "Coronation Street (Maygay) v3.2 (Newer) (Protocol) (M1A/B)", + "m1coro81", "Coronation Street (Maygay) v8.1 (M1A/B)", + "m1coro81p", "Coronation Street (Maygay) v8.1 (Protocol) (M1A/B)", + "m1corocb", "Coronation Street Club (Maygay) v2.1 (M1A/B)", + "m1corocb1", "Coronation Street Club (Maygay) v1.1 (M1A/B)", + "m1corocb1p", "Coronation Street Club (Maygay) v1.1 (Protocol)(M1A/B)", + "m1corocbp", "Coronation Street Club (Maygay) v2.1 (Protocol) (M1A/B)", + "m1corop", "Coronation Street (Maygay) (Protocol) (M1A/B)", + "m1cororr", "Coronation Street - Rovers Return (Maygay) (set 1) (M1A/B)", + "m1cororra", "Coronation Street - Rovers Return (Maygay) (set 1) (Alternate) (M1A/B)", + "m1cororrb", "Coronation Street - Rovers Return (Maygay) (set 2) (M1A/B)", + "m1cororrb1", "Coronation Street - Rovers Return (Maygay) (set 2) (Alternate) (M1A/B)", + "m1cororrbh", "Coronation Street - Rovers Return (Maygay) (set 2) (Hack) (M1A/B)", + "m1cororrbp", "Coronation Street - Rovers Return (Maygay) (set 2) (Protocol) (M1A/B)", + "m1cororrc", "Coronation Street - Rovers Return (Maygay) (set 3) (M1A/B)", + "m1cororrc1", "Coronation Street - Rovers Return (Maygay) (set 3) (Alternate 1) (M1A/B)", + "m1cororrc2", "Coronation Street - Rovers Return (Maygay) (set 3) (Alternate 2) (M1A/B)", + "m1cororrd", "Coronation Street - Rovers Return (Maygay) (set 4) (M1A/B)", + "m1cororrdp", "Coronation Street - Rovers Return (Maygay) (set 4) (Protocol) (M1A/B)", + "m1cororre", "Coronation Street - Rovers Return (Maygay) (set 5) (M1A/B)", + "m1cororrf", "Coronation Street - Rovers Return (Maygay) (set 6) (BW) (M1A/B)", + "m1cororrfp", "Coronation Street - Rovers Return (Maygay) (set 6) (BW) (Protocol) (M1A/B)", + "m1cororrg", "Coronation Street - Rovers Return (Maygay) (set 7) (M1A/B)", + "m1cororrgp", "Coronation Street - Rovers Return (Maygay) (set 7) (Protocol) (M1A/B)", + "m1cororrh", "Coronation Street - Rovers Return (Maygay) (set 8) (M1A/B)", + "m1cororri", "Coronation Street - Rovers Return (Maygay) (set 9) (M1A/B)", + "m1cororrip", "Coronation Street - Rovers Return (Maygay) (set 9) (Protocol) (M1A/B)", + "m1cororrj", "Coronation Street - Rovers Return (Maygay) (set 10) (M1A/B)", + "m1cororrjp", "Coronation Street - Rovers Return (Maygay) (set 10) (Protocol) (M1A/B)", + "m1cororrk", "Coronation Street - Rovers Return (Maygay) (set 11) (M1A/B)", + "m1cororrl", "Coronation Street - Rovers Return (Maygay) (set 12) (M1A/B)", + "m1cororrlp", "Coronation Street - Rovers Return (Maygay) (set 12) (Protocol) (M1A/B)", + "m1cororrp", "Coronation Street - Rovers Return (Maygay) (set 1) (Protocol) (M1A/B)", + "m1corosh", "Coronation Street Showcase (Maygay) v1.1 (M1A/B)", + "m1coroshp", "Coronation Street Showcase (Maygay) v1.1 (Protocol)(M1A/B)", + "m1criss", "Criss Cross Club (Maygay) (Dutch) (M1A/B)", + "m1crzco", "Crazy Cobra (Gemini) (M1A/B) (set 1)", + "m1crzcoa", "Crazy Cobra (Gemini) (M1A/B) (set 2)", + "m1crzcob", "Crazy Cobra (Gemini) (M1A/B) (set 3)", + "m1crzcoc", "Crazy Cobra (Gemini) (M1A/B) (set 4)", + "m1crzcod", "Crazy Cobra (Gemini) (M1A/B) (set 5)", + "m1crzcoe", "Crazy Cobra (Gemini) (M1A/B) (set 6)", + "m1digdel", "Diggers Delight (Global) (M1A/B) (set 1)", + "m1digdela", "Diggers Delight (Global) (M1A/B) (set 2)", + "m1dkong", "Donkey Kong (Maygay) v9.2 (M1A/B)", + "m1dkong11", "Donkey Kong (Maygay) v1.1 (M1A/B)", + "m1dkong11p", "Donkey Kong (Maygay) v1.1 (M1A/B) (Protocol?)", + "m1dkong21", "Donkey Kong (Maygay) v2.1 (Older) (M1A/B)", + "m1dkong21n", "Donkey Kong (Maygay) v2.1 (M1A/B)", + "m1dkong21p", "Donkey Kong (Maygay) v2.1 (Older) (Protocol) (M1A/B)", + "m1dkong31", "Donkey Kong (Maygay) v3.1 (M1A/B)", + "m1dkong31p", "Donkey Kong (Maygay) v3.1 (Protocol) (M1A/B)", + "m1dkong41", "Donkey Kong (Maygay) v4.1 (M1A/B)", + "m1dkong41p", "Donkey Kong (Maygay) v4.1 (Protocol) (M1A/B)", + "m1dkong51", "Donkey Kong (Maygay) v5.1 (M1A/B)", + "m1dkong51p", "Donkey Kong (Maygay) v5.1 (Protocol) (M1A/B)", + "m1dkong81", "Donkey Kong (Maygay) v8.1 (Older) (M1A/B)", + "m1dkong81n", "Donkey Kong (Maygay) v8.1 (M1A/B)", + "m1dkong81na", "Donkey Kong (Maygay) v8.1 (Alternate) (M1A/B)", + "m1dkong81np", "Donkey Kong (Maygay) v8.1 (Protocol) (M1A/B)", + "m1dkong81p", "Donkey Kong (Maygay) v8.1 (Older) (Protocol) (M1A/B)", + "m1dkong91", "Donkey Kong (Maygay) v9.1 (Older) (M1A/B)", + "m1dkong91a", "Donkey Kong (Maygay) v9.1 (Older) (Alternate) (M1A/B)", + "m1dkong91h1", "Donkey Kong (Maygay) v9.1 (Older) (Hack 1) (M1A/B)", + "m1dkong91h2", "Donkey Kong (Maygay) v9.1 (Older) (Hack 2) (M1A/B)", + "m1dkong91n", "Donkey Kong (Maygay) v9.1 (M1A/B)", + "m1dkong91na", "Donkey Kong (Maygay) v9.1 (Alternate) (M1A/B)", + "m1dkong91np", "Donkey Kong (Maygay) v9.1 (Protocol) (M1A/B)", + "m1dkong91p", "Donkey Kong (Maygay) v9.1 (Older) (Protocol) (M1A/B)", + "m1dkonga", "Donkey Kong (Maygay) v9.2 (Alternate) (M1A/B)", + "m1dkongp", "Donkey Kong (Maygay) v9.2 (Protocol) (M1A/B)", + "m1dm4ev", "Diamonds Are Forever Club (Maygay) v5.1 (M1A/B)", + "m1dm4ev11", "Diamonds Are Forever Club (Maygay) v1.1 (M1A/B)", + "m1dm4evp", "Diamonds Are Forever Club (Maygay) v5.1 (Protocol) n(M1A/B)", + "m1dmnhrt", "Diamond Hearts (Maygay) (M1A/B)", + "m1dxmono", "Deluxe Monopoly (Maygay) v5.1 (M1A/B)", + "m1dxmono11", "Deluxe Monopoly (Maygay) v1.1 (M1A/B)", + "m1dxmono11m", "Deluxe Monopoly (Maygay) v1.1 (Code M) (M1A/B)", + "m1dxmono11mb", "Deluxe Monopoly (Maygay) v1.1 (Code M, Alternate) (M1A/B)", + "m1dxmono11o", "Deluxe Monopoly (Maygay) v1.1 (Older) (M1A/B)", + "m1dxmono11p", "Deluxe Monopoly (Maygay) v1.1 (Protocol) (M1A/B)", + "m1dxmono12", "Deluxe Monopoly (Maygay) v1.2 (M1A/B)", + "m1dxmono12a", "Deluxe Monopoly (Maygay) v1.2 (Alternate) (M1A/B)", + "m1dxmono12n", "Deluxe Monopoly (Maygay) v1.2 (Newer) (M1A/B)", + "m1dxmono12p", "Deluxe Monopoly (Maygay) v1.2 (Protocol) (M1A/B)", + "m1dxmono21p", "Deluxe Monopoly (Maygay) v2.1 (Protocol) (M1A/B)", + "m1dxmono30h", "Deluxe Monopoly (Maygay) v3.0 (Hack) (M1A/B)", + "m1dxmono31b", "Deluxe Monopoly (Maygay) v3.1 (BwB set) (M1A/B)", + "m1dxmono31h", "Deluxe Monopoly (Maygay) v3.1 (Hack) (M1A/B)", + "m1dxmono31h2", "Deluxe Monopoly (Maygay) v3.1 (Alternate Hack) (M1A/B)", + "m1dxmono31p", "Deluxe Monopoly (Maygay) v3.1 (Protocol) (M1A/B)", + "m1dxmono51", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B)", + "m1dxmono51o", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B) (alt?)", + "m1dxmono51p", "Deluxe Monopoly (Maygay) v5.1 (Older) (Protocol) (M1A/B)", + "m1dxmonop", "Deluxe Monopoly (Maygay) v5.1 (Protocol) (M1A/B)", + "m1eastnd", "Eastenders (Maygay) (M1A/B) (set 1)", + "m1eastnd0", "Eastenders (Maygay) (M1A/B) (set 28)", + "m1eastnd1", "Eastenders (Maygay) (M1A/B) (set 29)", + "m1eastnd2", "Eastenders (Maygay) (M1A/B) (set 30)", + "m1eastnd3", "Eastenders (Maygay) (M1A/B) (set 31)", + "m1eastnd4", "Eastenders (Maygay) (M1A/B) (set 32)", + "m1eastnd5", "Eastenders (Maygay) (M1A/B) (set 33)", + "m1eastnd6", "Eastenders (Maygay) (M1A/B) (set 34)", + "m1eastnd7", "Eastenders (Maygay) (M1A/B) (set 35)", + "m1eastnd8", "Eastenders (Maygay) (M1A/B) (set 36)", + "m1eastnd9", "Eastenders (Maygay) (M1A/B) (set 37)", + "m1eastnda", "Eastenders (Maygay) (M1A/B) (set 2)", + "m1eastndaa", "Eastenders (Maygay) (M1A/B) (set 38)", + "m1eastndab", "Eastenders (Maygay) (M1A/B) (set 39)", + "m1eastndac", "Eastenders (Maygay) (M1A/B) (set 40)", + "m1eastndad", "Eastenders (Maygay) (M1A/B) (set 41)", + "m1eastndae", "Eastenders (Maygay) (M1A/B) (set 42)", + "m1eastndaf", "Eastenders (Maygay) (M1A/B) (set 43)", + "m1eastndb", "Eastenders (Maygay) (M1A/B) (set 3)", + "m1eastndc", "Eastenders (Maygay) (M1A/B) (set 4)", + "m1eastndd", "Eastenders (Maygay) (M1A/B) (set 5)", + "m1eastnde", "Eastenders (Maygay) (M1A/B) (set 6)", + "m1eastndf", "Eastenders (Maygay) (M1A/B) (set 7)", + "m1eastndg", "Eastenders (Maygay) (M1A/B) (set 8)", + "m1eastndh", "Eastenders (Maygay) (M1A/B) (set 9)", + "m1eastndi", "Eastenders (Maygay) (M1A/B) (set 10)", + "m1eastndj", "Eastenders (Maygay) (M1A/B) (set 11)", + "m1eastndk", "Eastenders (Maygay) (M1A/B) (set 12)", + "m1eastndl", "Eastenders (Maygay) (M1A/B) (set 13)", + "m1eastndn", "Eastenders (Maygay) (M1A/B) (set 15)", + "m1eastndp", "Eastenders (Maygay) (M1A/B) (set 17)", + "m1eastndq", "Eastenders (Maygay) (M1A/B) (set 18)", + "m1eastndr", "Eastenders (Maygay) (M1A/B) (set 19)", + "m1eastnds", "Eastenders (Maygay) (M1A/B) (set 20)", + "m1eastndt", "Eastenders (Maygay) (M1A/B) (set 21)", + "m1eastndu", "Eastenders (Maygay) (M1A/B) (set 22)", + "m1eastndv", "Eastenders (Maygay) (M1A/B) (set 23)", + "m1eastndw", "Eastenders (Maygay) (M1A/B) (set 24)", + "m1eastndx", "Eastenders (Maygay) (M1A/B) (set 25)", + "m1eastndy", "Eastenders (Maygay) (M1A/B) (set 26)", + "m1eastndz", "Eastenders (Maygay) (M1A/B) (set 27)", + "m1eastqv", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 1)", + "m1eastqv0", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 28)", + "m1eastqv1", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 29)", + "m1eastqv2", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 30)", + "m1eastqv3", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 31)", + "m1eastqv5", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 33)", + "m1eastqv6", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 34)", + "m1eastqv7", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 35)", + "m1eastqv8", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 36)", + "m1eastqva", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 2)", + "m1eastqvaa", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 38)", + "m1eastqvb", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 3)", + "m1eastqvc", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 4)", + "m1eastqvd", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 5)", + "m1eastqvf", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 7)", + "m1eastqvg", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 8)", + "m1eastqvh", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 9)", + "m1eastqvi", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 10)", + "m1eastqvj", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 11)", + "m1eastqvk", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 12)", + "m1eastqvl", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 13)", + "m1eastqvm", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 14)", + "m1eastqvn", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 15)", + "m1eastqvo", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 16)", + "m1eastqvp", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 17)", + "m1eastqvq", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 18)", + "m1eastqvr", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 19)", + "m1eastqvs", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 20)", + "m1eastqvt", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 21)", + "m1eastqvu", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 22)", + "m1eastqvv", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 23)", + "m1eastqvw", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 24)", + "m1eastqvx", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 25)", + "m1eastqvy", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 26)", + "m1eastqvz", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 27)", + "m1expclb", "Explorer Club (Maygay) (M1A/B) (set 2)", + "m1expclba", "Explorer Club (Maygay) (M1A/B) (set 3)", + "m1fantfb", "Fantasy Football (Maygay) (M1A/B) (set 1)", + "m1fantfba", "Fantasy Football (Maygay) (M1A/B) (set 2)", + "m1fantfbb", "Fantasy Football (Maygay) (M1A/B) (set 3)", + "m1fantfbc", "Fantasy Football (Maygay) (M1A/B) (set 4)", + "m1fantfbd", "Fantasy Football (Maygay) (M1A/B) (set 5)", + "m1fantfbf", "Fantasy Football (Maygay) (M1A/B) (set 7)", + "m1fantfbg", "Fantasy Football (Maygay) (M1A/B) (set 8)", + "m1fantfbh", "Fantasy Football (Maygay) (M1A/B) (set 9)", + "m1fantfbj", "Fantasy Football (Maygay) (M1A/B) (set 11)", + "m1fantfbk", "Fantasy Football (Maygay) (M1A/B) (set 12)", + "m1fantfbl", "Fantasy Football (Maygay) (M1A/B) (set 13)", + "m1fight", "Fight Night (Maygay) (M1A/B) (set 1)", + "m1fighta", "Fight Night (Maygay) (M1A/B) (set 2)", + "m1fightb", "Fight Night (Maygay) (M1A/B) (set 3)", + "m1fightc", "Fight Night (Maygay) (M1A/B) (set 4)", + "m1fightd", "Fight Night (Maygay) (M1A/B) (set 5)", + "m1fighte", "Fight Night (Maygay) (M1A/B) (set 6)", + "m1fightg", "Fight Night (Maygay) (M1A/B) (set 8)", + "m1fighth", "Fight Night (Maygay) (M1A/B) (set 9)", + "m1fighti", "Fight Night (Maygay) (M1A/B) (set 10)", + "m1fightj", "Fight Night (Maygay) (M1A/B) (set 11)", + "m1fightk", "Fight Night (Maygay) (M1A/B) (set 12)", + "m1fightl", "Fight Night (Maygay) (M1A/B) (set 13)", + "m1fightm", "Fight Night (Maygay) (M1A/B) (set 14)", + "m1fightn", "Fight Night (Maygay) (M1A/B) (set 15)", + "m1fighto", "Fight Night (Maygay) (M1A/B) (set 16)", + "m1fightp", "Fight Night (Maygay) (M1A/B) (set 17)", + "m1fightq", "Fight Night (Maygay) (M1A/B) (set 18)", + "m1fightr", "Fight Night (Maygay) (M1A/B) (set 19)", + "m1fights", "Fight Night (Maygay) (M1A/B) (set 20)", + "m1fightt", "Fight Night (Maygay) (M1A/B) (set 21)", + "m1fightu", "Fight Night (Maygay) (M1A/B) (set 22)", + "m1fightv", "Fight Night (Maygay) (M1A/B) (set 23)", + "m1fightw", "Fight Night (Maygay) (M1A/B) (set 24)", + "m1fightx", "Fight Night (Maygay) (M1A/B) (set 25)", + "m1fivest", "Five Star (Dutch) (Maygay) (M1A/B)", + "m1frexpl", "Fruit Explosion (Maygay) (M1A/B) (set 1)", + "m1frexpla", "Fruit Explosion (Maygay) (M1A/B) (set 2)", + "m1frexplc", "Fruit Explosion (Maygay) (M1A/B) (set 4)", + "m1frexpld", "Fruit Explosion (Maygay) (M1A/B) (set 5)", + "m1frexple", "Fruit Explosion (Maygay) (M1A/B) (set 6)", + "m1frexplg", "Fruit Explosion (Maygay) (M1A/B) (set 8)", + "m1frexplh", "Fruit Explosion (Maygay) (M1A/B) (set 9)", + "m1frexpli", "Fruit Explosion (Maygay) (M1A/B) (set 10)", + "m1frexplj", "Fruit Explosion (Maygay) (M1A/B) (set 11)", + "m1frexplk", "Fruit Explosion (Maygay) (M1A/B) (set 12)", + "m1frexpll", "Fruit Explosion (Maygay) (M1A/B) (set 13)", + "m1frexplm", "Fruit Explosion (Maygay) (M1A/B) (set 14)", + "m1frexpln", "Fruit Explosion (Maygay) (M1A/B) (set 15)", + "m1frexplo", "Fruit Explosion (Maygay) (M1A/B) (set 16)", + "m1frexplp", "Fruit Explosion (Maygay) (M1A/B) (set 17)", + "m1frexplq", "Fruit Explosion (Maygay) (M1A/B) (set 18)", + "m1frexplr", "Fruit Explosion (Maygay) (M1A/B) (set 19)", + "m1frexpls", "Fruit Explosion (Maygay) (M1A/B) (set 20)", + "m1frexplt", "Fruit Explosion (Maygay) (M1A/B) (set 21)", + "m1frexplu", "Fruit Explosion (Maygay) (M1A/B) (set 22)", + "m1frexplv", "Fruit Explosion (Maygay) (M1A/B) (set 23)", + "m1glad", "Gladiators (Maygay) (M1A/B) (set 1)", + "m1glad0", "Gladiators (Maygay) (M1A/B) (set 28)", + "m1glad1", "Gladiators (Maygay) (M1A/B) (set 29)", + "m1glada", "Gladiators (Maygay) (M1A/B) (set 2)", + "m1gladb", "Gladiators (Maygay) (M1A/B) (set 3)", + "m1gladc", "Gladiators (Maygay) (M1A/B) (set 4)", + "m1gladd", "Gladiators (Maygay) (M1A/B) (set 5)", + "m1glade", "Gladiators (Maygay) (M1A/B) (set 6)", + "m1gladf", "Gladiators (Maygay) (M1A/B) (set 7)", + "m1gladg", "Gladiators (Maygay) (M1A/B) (set 8)", + "m1gladh", "Gladiators (Maygay) (M1A/B) (set 9)", + "m1gladj", "Gladiators (Maygay) (M1A/B) (set 11)", + "m1gladk", "Gladiators (Maygay) (M1A/B) (set 12)", + "m1gladl", "Gladiators (Maygay) (M1A/B) (set 13)", + "m1gladm", "Gladiators (Maygay) (M1A/B) (set 14)", + "m1gladn", "Gladiators (Maygay) (M1A/B) (set 15)", + "m1glado", "Gladiators (Maygay) (M1A/B) (set 16)", + "m1gladp", "Gladiators (Maygay) (M1A/B) (set 17)", + "m1gladq", "Gladiators (Maygay) (M1A/B) (set 18)", + "m1gladr", "Gladiators (Maygay) (M1A/B) (set 19)", + "m1glads", "Gladiators (Maygay) (M1A/B) (set 20)", + "m1gladt", "Gladiators (Maygay) (M1A/B) (set 21)", + "m1gladu", "Gladiators (Maygay) (M1A/B) (set 22)", + "m1gladv", "Gladiators (Maygay) (M1A/B) (set 23)", + "m1gladw", "Gladiators (Maygay) (M1A/B) (set 24)", + "m1gladx", "Gladiators (Maygay) (M1A/B) (set 25)", + "m1glady", "Gladiators (Maygay) (M1A/B) (set 26)", + "m1gladz", "Gladiators (Maygay) (M1A/B) (set 27)", + "m1gold10", "Golden 10 (German) (Maygay) (M1A/B)", + "m1goldng", "Golden Nugget Club (Maygay) (M1A/B) (set 1)", + "m1goldnga", "Golden Nugget Club (Maygay) (M1A/B) (set 2)", + "m1goldngb", "Golden Nugget Club (Maygay) (M1A/B) (set 3)", + "m1goldngc", "Golden Nugget Club (Maygay) (M1A/B) (set 4)", + "m1goldngd", "Golden Nugget Club (Maygay) (M1A/B) (set 5)", + "m1goldnge", "Golden Nugget Club (Maygay) (M1A/B) (set 6)", + "m1goldsv", "Gold & Silver (Maygay) (M1A/B) (set 1)", + "m1goldsva", "Gold & Silver (Maygay) (M1A/B) (set 2)", + "m1gresc", "Great Escape, The (Maygay) (M1A/B) (set 1)", + "m1gresca", "Great Escape, The (Maygay) (M1A/B) (set 2)", + "m1grescb", "Great Escape, The (Maygay) (M1A/B) (set 3)", + "m1grescc", "Great Escape, The (Maygay) (M1A/B) (set 4)", + "m1grescd", "Great Escape, The (Maygay) (M1A/B) (set 5)", + "m1gresce", "Great Escape, The (Maygay) (M1A/B) (set 6)", + "m1grescf", "Great Escape, The (Maygay) (M1A/B) (set 7)", + "m1grescg", "Great Escape, The (Maygay) (M1A/B) (set 8)", + "m1gresch", "Great Escape, The (Maygay) (M1A/B) (set 9)", + "m1gresci", "Great Escape, The (Maygay) (M1A/B) (set 10)", + "m1grescj", "Great Escape, The (Maygay) (M1A/B) (set 11)", + "m1gresck", "Great Escape, The (Maygay) (M1A/B) (set 12)", + "m1grescl", "Great Escape, The (Maygay) (M1A/B) (set 13)", + "m1grescm", "Great Escape, The (Maygay) (M1A/B) (set 14)", + "m1grescn", "Great Escape, The (Maygay) (M1A/B) (set 15)", + "m1gresco", "Great Escape, The (Maygay) (M1A/B) (set 16)", + "m1grescp", "Great Escape, The (Maygay) (M1A/B) (set 17)", + "m1grescq", "Great Escape, The (Maygay) (M1A/B) (set 18)", + "m1gskill", "Greek Skill (Hitech Amusement)", + "m1guvnor", "The Guvnor (Maygay) (M1A/B) (set 1)", + "m1guvnora", "The Guvnor (Maygay) (M1A/B) (set 2)", + "m1guvnorb", "The Guvnor (Maygay) (M1A/B) (set 3)", + "m1guvnorc", "The Guvnor (Maygay) (M1A/B) (set 4)", + "m1guvnord", "The Guvnor (Maygay) (M1A/B) (set 5)", + "m1guvnore", "The Guvnor (Maygay) (M1A/B) (set 6)", + "m1guvnorf", "The Guvnor (Maygay) (M1A/B) (set 7)", + "m1guvnorg", "The Guvnor (Maygay) (M1A/B) (set 8)", + "m1guvnorh", "The Guvnor (Maygay) (M1A/B) (set 9)", + "m1guvnori", "The Guvnor (Maygay) (M1A/B) (set 10)", + "m1guvnorj", "The Guvnor (Maygay) (M1A/B) (set 11)", + "m1guvnork", "The Guvnor (Maygay) (M1A/B) (set 12)", + "m1guvnorl", "The Guvnor (Maygay) (M1A/B) (set 13)", + "m1guvnorm", "The Guvnor (Maygay) (M1A/B) (set 14)", + "m1guvnorn", "The Guvnor (Maygay) (M1A/B) (set 15)", + "m1guvnoro", "The Guvnor (Maygay) (M1A/B) (set 16)", + "m1guvnorp", "The Guvnor (Maygay) (M1A/B) (set 17)", + "m1guvnorq", "The Guvnor (Maygay) (M1A/B) (set 18)", + "m1guvnorr", "The Guvnor (Maygay) (M1A/B) (set 19)", + "m1guvnors", "The Guvnor (Maygay) (M1A/B) (set 20)", + "m1guvnort", "The Guvnor (Maygay) (M1A/B) (set 21)", + "m1hiloc", "Hi Lo Casino (Global) (M1A/B) (set 1)", + "m1hiloca", "Hi Lo Casino (Global) (M1A/B) (set 2)", + "m1hotpot", "Hot Pots (Maygay) (M1A/B) (set 1)", + "m1hotpot0", "Hot Pots (Maygay) (M1A/B) (set 28)", + "m1hotpotd", "Hot Pots (Maygay) (M1A/B) (set 5)", + "m1hotpote", "Hot Pots (Maygay) (M1A/B) (set 6)", + "m1hotpoth", "Hot Pots (Maygay) (M1A/B) (set 9)", + "m1hotpoti", "Hot Pots (Maygay) (M1A/B) (set 10)", + "m1hotpotj", "Hot Pots (Maygay) (M1A/B) (set 11)", + "m1hotpotk", "Hot Pots (Maygay) (M1A/B) (set 12)", + "m1hotpotl", "Hot Pots (Maygay) (M1A/B) (set 13)", + "m1hotpotm", "Hot Pots (Maygay) (M1A/B) (set 14)", + "m1hotpotn", "Hot Pots (Maygay) (M1A/B) (set 15)", + "m1hotpoto", "Hot Pots (Maygay) (M1A/B) (set 16)", + "m1hotpotp", "Hot Pots (Maygay) (M1A/B) (set 17)", + "m1hotpotq", "Hot Pots (Maygay) (M1A/B) (set 18)", + "m1hotpotr", "Hot Pots (Maygay) (M1A/B) (set 19)", + "m1hotpots", "Hot Pots (Maygay) (M1A/B) (set 20)", + "m1hotpott", "Hot Pots (Maygay) (M1A/B) (set 21)", + "m1hotpotu", "Hot Pots (Maygay) (M1A/B) (set 22)", + "m1hotpotv", "Hot Pots (Maygay) (M1A/B) (set 23)", + "m1hotpotw", "Hot Pots (Maygay) (M1A/B) (set 24)", + "m1hotpotx", "Hot Pots (Maygay) (M1A/B) (set 25)", + "m1hotpoty", "Hot Pots (Maygay) (M1A/B) (set 26)", + "m1hotpotz", "Hot Pots (Maygay) (M1A/B) (set 27)", + "m1htclb", "Hi Tension Club (Maygay) (M1A/B) (set 1)", + "m1htclba", "Hi Tension Club (Maygay) (M1A/B) (set 2)", + "m1imclb", "Instant Millionaire Club (Maygay) (M1A/B) (set 1)", + "m1imclba", "Instant Millionaire Club (Maygay) (M1A/B) (set 2)", + "m1imclbb", "Instant Millionaire Club (Maygay) (M1A/B) (set 3)", + "m1infern", "Inferno (Maygay) (M1A/B) (set 1)", + "m1inferna", "Inferno (Maygay) (M1A/B) (set 2)", + "m1infernb", "Inferno (Maygay) (M1A/B) (set 3)", + "m1infernc", "Inferno (Maygay) (M1A/B) (set 4)", + "m1infernd", "Inferno (Maygay) (M1A/B) (set 5)", + "m1inferne", "Inferno (Maygay) (M1A/B) (set 6)", + "m1infernf", "Inferno (Maygay) (M1A/B) (set 7)", + "m1inferng", "Inferno (Maygay) (M1A/B) (set 8)", + "m1infernh", "Inferno (Maygay) (M1A/B) (set 9)", + "m1inferni", "Inferno (Maygay) (M1A/B) (set 10)", + "m1infernj", "Inferno (Maygay) (M1A/B) (set 11)", + "m1infernk", "Inferno (Maygay) (M1A/B) (set 12)", + "m1infernl", "Inferno (Maygay) (M1A/B) (set 13)", + "m1inwin", "Instant Win (Maygay) (M1A/B) (set 1)", + "m1inwina", "Instant Win (Maygay) (M1A/B) (set 2)", + "m1inwinb", "Instant Win (Maygay) (M1A/B) (set 3)", + "m1inwinc", "Instant Win (Maygay) (M1A/B) (set 4)", + "m1inwinf", "Instant Win (Maygay) (M1A/B) (set 7)", + "m1inwinh", "Instant Win (Maygay) (M1A/B) (set 9)", + "m1inwini", "Instant Win (Maygay) (M1A/B) (set 10)", + "m1inwinj", "Instant Win (Maygay) (M1A/B) (set 11)", + "m1inwink", "Instant Win (Maygay) (M1A/B) (set 12)", + "m1inwinl", "Instant Win (Maygay) (M1A/B) (set 13)", + "m1inwinm", "Instant Win (Maygay) (M1A/B) (set 14)", + "m1inwinn", "Instant Win (Maygay) (M1A/B) (set 15)", + "m1inwino", "Instant Win (Maygay) (M1A/B) (set 16)", + "m1inwinp", "Instant Win (Maygay) (M1A/B) (set 17)", + "m1inwinq", "Instant Win (Maygay) (M1A/B) (set 18)", + "m1inwinr", "Instant Win (Maygay) (M1A/B) (set 19)", + "m1inwins", "Instant Win (Maygay) (M1A/B) (set 20)", + "m1inwint", "Instant Win (Maygay) (M1A/B) (set 21)", + "m1inwinu", "Instant Win (Maygay) (M1A/B) (set 22)", + "m1inwinv", "Instant Win (Maygay) (M1A/B) (set 23)", + "m1inwinw", "Instant Win (Maygay) (M1A/B) (set 24)", + "m1inwinx", "Instant Win (Maygay) (M1A/B) (set 25)", + "m1itjob", "Italian Job (Maygay) (M1A/B) (set 1)", + "m1itjobc", "Italian Job (Maygay) (M1A/B) (set 4)", + "m1itjobd", "Italian Job (Maygay) (M1A/B) (set 5)", + "m1itjobe", "Italian Job (Maygay) (M1A/B) (set 6)", + "m1itjobf", "Italian Job (Maygay) (M1A/B) (set 7)", + "m1itjobg", "Italian Job (Maygay) (M1A/B) (set 8)", + "m1itjobh", "Italian Job (Maygay) (M1A/B) (set 9)", + "m1itjobi", "Italian Job (Maygay) (M1A/B) (set 10)", + "m1itjobj", "Italian Job (Maygay) (M1A/B) (set 11)", + "m1itjobk", "Italian Job (Maygay) (M1A/B) (set 12)", + "m1itjobl", "Italian Job (Maygay) (M1A/B) (set 13)", + "m1itjobm", "Italian Job (Maygay) (M1A/B) (set 14)", + "m1itjobn", "Italian Job (Maygay) (M1A/B) (set 15)", + "m1itjobo", "Italian Job (Maygay) (M1A/B) (set 16)", + "m1itjobp", "Italian Job (Maygay) (M1A/B) (set 17)", + "m1itjobq", "Italian Job (Maygay) (M1A/B) (set 18)", + "m1itjobr", "Italian Job (Maygay) (M1A/B) (set 19)", + "m1itsko", "It's A Knockout (Maygay) (M1A/B) (set 1)", + "m1itsko0", "It's A Knockout (Maygay) (M1A/B) (set 28)", + "m1itsko1", "It's A Knockout (Maygay) (M1A/B) (set 29)", + "m1itsko2", "It's A Knockout (Maygay) (M1A/B) (set 30)", + "m1itsko3", "It's A Knockout (Maygay) (M1A/B) (set 31)", + "m1itsko4", "It's A Knockout (Maygay) (M1A/B) (set 32)", + "m1itsko5", "It's A Knockout (Maygay) (M1A/B) (set 33)", + "m1itsko6", "It's A Knockout (Maygay) (M1A/B) (set 34)", + "m1itsko7", "It's A Knockout (Maygay) (M1A/B) (set 35)", + "m1itsko8", "It's A Knockout (Maygay) (M1A/B) (set 36)", + "m1itskoa", "It's A Knockout (Maygay) (M1A/B) (set 2)", + "m1itskob", "It's A Knockout (Maygay) (M1A/B) (set 3)", + "m1itskoc", "It's A Knockout (Maygay) (M1A/B) (set 4)", + "m1itskod", "It's A Knockout (Maygay) (M1A/B) (set 5)", + "m1itskoe", "It's A Knockout (Maygay) (M1A/B) (set 6)", + "m1itskof", "It's A Knockout (Maygay) (M1A/B) (set 7)", + "m1itskog", "It's A Knockout (Maygay) (M1A/B) (set 8)", + "m1itskoh", "It's A Knockout (Maygay) (M1A/B) (set 9)", + "m1itskoi", "It's A Knockout (Maygay) (M1A/B) (set 10)", + "m1itskoj", "It's A Knockout (Maygay) (M1A/B) (set 11)", + "m1itskok", "It's A Knockout (Maygay) (M1A/B) (set 12)", + "m1itskol", "It's A Knockout (Maygay) (M1A/B) (set 13)", + "m1itskom", "It's A Knockout (Maygay) (M1A/B) (set 14)", + "m1itskon", "It's A Knockout (Maygay) (M1A/B) (set 15)", + "m1itskoo", "It's A Knockout (Maygay) (M1A/B) (set 16)", + "m1itskop", "It's A Knockout (Maygay) (M1A/B) (set 17)", + "m1itskoq", "It's A Knockout (Maygay) (M1A/B) (set 18)", + "m1itskor", "It's A Knockout (Maygay) (M1A/B) (set 19)", + "m1itskos", "It's A Knockout (Maygay) (M1A/B) (set 20)", + "m1itskot", "It's A Knockout (Maygay) (M1A/B) (set 21)", + "m1itskou", "It's A Knockout (Maygay) (M1A/B) (set 22)", + "m1itskov", "It's A Knockout (Maygay) (M1A/B) (set 23)", + "m1itskow", "It's A Knockout (Maygay) (M1A/B) (set 24)", + "m1itskox", "It's A Knockout (Maygay) (M1A/B) (set 25)", + "m1itskoy", "It's A Knockout (Maygay) (M1A/B) (set 26)", + "m1itskoz", "It's A Knockout (Maygay) (M1A/B) (set 27)", + "m1jbond", "James Bond (Maygay) (M1A/B) (set 1)", + "m1jbonda", "James Bond (Maygay) (M1A/B) (set 2)", + "m1jbondb", "James Bond (Maygay) (M1A/B) (set 3)", + "m1jbondc", "James Bond (Maygay) (M1A/B) (set 4)", + "m1jbondd", "James Bond (Maygay) (M1A/B) (set 5)", + "m1jbonde", "James Bond (Maygay) (M1A/B) (set 6)", + "m1jbondf", "James Bond (Maygay) (M1A/B) (set 7)", + "m1jbondg", "James Bond (Maygay) (M1A/B) (set 8)", + "m1jbondh", "James Bond (Maygay) (M1A/B) (set 9)", + "m1jbondi", "James Bond (Maygay) (M1A/B) (set 10)", + "m1jbondj", "James Bond (Maygay) (M1A/B) (set 11)", + "m1jbondk", "James Bond (Maygay) (M1A/B) (set 12)", + "m1jbondl", "James Bond (Maygay) (M1A/B) (set 13)", + "m1jbondm", "James Bond (Maygay) (M1A/B) (set 14)", + "m1jbondn", "James Bond (Maygay) (M1A/B) (set 15)", + "m1jbondo", "James Bond (Maygay) (M1A/B) (set 16)", + "m1jbondp", "James Bond (Maygay) (M1A/B) (set 17)", + "m1jbondq", "James Bond (Maygay) (M1A/B) (set 18)", + "m1jdwins", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 1)", + "m1jdwinsa", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 2)", + "m1jdwinsb", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 3)", + "m1jdwinsc", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 4)", + "m1jdwinsd", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 5)", + "m1jdwinse", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 6)", + "m1jdwinsf", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 7)", + "m1jdwinsg", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 8)", + "m1jdwinsh", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 9)", + "m1jdwinsi", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 10)", + "m1jdwinsj", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 11)", + "m1jdwinsk", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 12)", + "m1jdwinsl", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 13)", + "m1jdwinsm", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 14)", + "m1jdwinsn", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 15)", + "m1jpmult", "Jackpot Multiplier (Maygay) (M1A/B) (set 1)", + "m1jpmulta", "Jackpot Multiplier (Maygay) (M1A/B) (set 2)", + "m1jtjob", "Just The Job (Global) (M1A/B) (set 1)", + "m1jtjoba", "Just The Job (Global) (M1A/B) (set 2)", + "m1jtjobb", "Just The Job (Global) (M1A/B) (set 3)", + "m1jtjobc", "Just The Job (Global) (M1A/B) (set 4)", + "m1jtjobd", "Just The Job (Global) (M1A/B) (set 5)", + "m1jtjobe", "Just The Job (Global) (M1A/B) (set 6)", + "m1kingsw", "King Of The Swingers (Global) (M1A/B) (set 1)", + "m1kingswa", "King Of The Swingers (Global) (M1A/B) (set 2)", + "m1kingswb", "King Of The Swingers (Global) (M1A/B) (set 3)", + "m1kingswc", "King Of The Swingers (Global) (M1A/B) (set 4)", + "m1lca", "Lights Camera Action (Global) (M1A/B) (set 1)", + "m1lcaa", "Lights Camera Action (Global) (M1A/B) (set 2)", + "m1lcab", "Lights Camera Action (Global) (M1A/B) (set 3)", + "m1lcac", "Lights Camera Action (Global) (M1A/B) (set 4)", + "m1liveam", "Living In America (Maygay) (M1A/B) (set 1)", + "m1liveama", "Living In America (Maygay) (M1A/B) (set 2)", + "m1liveamb", "Living In America (Maygay) (M1A/B) (set 3)", + "m1lotmil", "Lottery Millionaire Club (Maygay) (M1A/B) (set 1)", + "m1lotmila", "Lottery Millionaire Club (Maygay) (M1A/B) (set 2)", + "m1lotmilb", "Lottery Millionaire Club (Maygay) (M1A/B) (set 3)", + "m1lotmilc", "Lottery Millionaire Club (Maygay) (M1A/B) (set 4)", + "m1luckno", "Lucky Numbers (Maygay) (M1A/B) (set 1)", + "m1lucknoa", "Lucky Numbers (Maygay) (M1A/B) (set 2)", + "m1lucknob", "Lucky Numbers (Maygay) (M1A/B) (set 3)", + "m1lucknoc", "Lucky Numbers (Maygay) (M1A/B) (set 4)", + "m1lucknod", "Lucky Numbers (Maygay) (M1A/B) (set 5)", + "m1lucknoe", "Lucky Numbers (Maygay) (M1A/B) (set 6)", + "m1lucknof", "Lucky Numbers (Maygay) (M1A/B) (set 7)", + "m1lucknog", "Lucky Numbers (Maygay) (M1A/B) (set 8)", + "m1lucknoh", "Lucky Numbers (Maygay) (M1A/B) (set 9)", + "m1lucknoi", "Lucky Numbers (Maygay) (M1A/B) (set 10)", + "m1lucknoj", "Lucky Numbers (Maygay) (M1A/B) (set 11)", + "m1lucknok", "Lucky Numbers (Maygay) (M1A/B) (set 12)", + "m1lucknol", "Lucky Numbers (Maygay) (M1A/B) (set 13)", + "m1lucknom", "Lucky Numbers (Maygay) (M1A/B) (set 14)", + "m1lucknon", "Lucky Numbers (Maygay) (M1A/B) (set 15)", + "m1lucknoo", "Lucky Numbers (Maygay) (M1A/B) (set 16)", + "m1lucknop", "Lucky Numbers (Maygay) (M1A/B) (set 17)", + "m1lucknoq", "Lucky Numbers (Maygay) (M1A/B) (set 18)", + "m1lucknor", "Lucky Numbers (Maygay) (M1A/B) (set 19)", + "m1lucknos", "Lucky Numbers (Maygay) (M1A/B) (set 20)", + "m1luxor", "Luxor Casino (Gemini) (M1A/B) (set 1)", + "m1luxora", "Luxor Casino (Gemini) (M1A/B) (set 2)", + "m1luxorb", "Luxor Casino (Gemini) (M1A/B) (set 3)", + "m1luxorc", "Luxor Casino (Gemini) (M1A/B) (set 4)", + "m1magic", "Magic Squares (Maygay) (M1A/B) (set 1)", + "m1magica", "Magic Squares (Maygay) (M1A/B) (set 2)", + "m1magicb", "Magic Squares (Maygay) (M1A/B) (set 3)", + "m1magicc", "Magic Squares (Maygay) (M1A/B) (set 4)", + "m1manhat", "Manhattan Skylines (Maygay) (M1A/B)", + "m1mb", "Monkey Business (Global) (M1A/B) (set 1)", + "m1mba", "Monkey Business (Global) (M1A/B) (set 2)", + "m1mbb", "Monkey Business (Global) (M1A/B) (set 3)", + "m1mbc", "Monkey Business (Global) (M1A/B) (set 4)", + "m1mbclb", "Monkey Business Club (Global) (M1A/B)", + "m1monclb", "Monopoly Club (Maygay) (M1A/B) (set 1)", + "m1monclba", "Monopoly Club (Maygay) (M1A/B) (set 2)", + "m1monclbb", "Monopoly Club (Maygay) (M1A/B) (set 3)", + "m1monclbc", "Monopoly Club (Maygay) (M1A/B) (set 4)", + "m1monclbd", "Monopoly Club (Maygay) (M1A/B) (set 5)", + "m1monclbe", "Monopoly Club (Maygay) (M1A/B) (set 6)", + "m1monclbf", "Monopoly Club (Maygay) (M1A/B) (set 7)", + "m1monclbg", "Monopoly Club (Maygay) (M1A/B) (set 8)", + "m1monclbh", "Monopoly Club (Maygay) (M1A/B) (set 9)", + "m1monclbi", "Monopoly Club (Maygay) (M1A/B) (set 10)", + "m1monclbj", "Monopoly Club (Maygay) (M1A/B) (set 11)", + "m1monclbk", "Monopoly Club (Maygay) (M1A/B) (set 12)", + "m1monclbl", "Monopoly Club (Maygay) (M1A/B) (set 13)", + "m1monclbm", "Monopoly Club (Maygay) (M1A/B) (set 14)", + "m1moncls", "Monopoly Classic (Maygay) (M1A/B) (set 1)", + "m1monclsa", "Monopoly Classic (Maygay) (M1A/B) (set 2)", + "m1monclsb", "Monopoly Classic (Maygay) (M1A/B) (set 3)", + "m1monclsc", "Monopoly Classic (Maygay) (M1A/B) (set 4)", + "m1monclsd", "Monopoly Classic (Maygay) (M1A/B) (set 5)", + "m1mongam", "Money Game Club (Maygay) (M1A/B) (set 1)", + "m1mongama", "Money Game Club (Maygay) (M1A/B) (set 2)", + "m1mongamb", "Money Game Club (Maygay) (M1A/B) (set 3)", + "m1monmon", "Money Money Money (Maygay) (M1A/B) (set 1)", + "m1monmona", "Money Money Money (Maygay) (M1A/B) (set 2)", + "m1monmonb", "Money Money Money (Maygay) (M1A/B) (set 3)", + "m1monmonc", "Money Money Money (Maygay) (M1A/B) (set 4)", + "m1monmond", "Money Money Money (Maygay) (M1A/B) (set 5)", + "m1monmone", "Money Money Money (Maygay) (M1A/B) (set 6)", + "m1monmonf", "Money Money Money (Maygay) (M1A/B) (set 7)", + "m1monmong", "Money Money Money (Maygay) (M1A/B) (set 8)", + "m1monmonh", "Money Money Money (Maygay) (M1A/B) (set 9)", + "m1monmoni", "Money Money Money (Maygay) (M1A/B) (set 10)", + "m1monmonj", "Money Money Money (Maygay) (M1A/B) (set 11)", + "m1monmonk", "Money Money Money (Maygay) (M1A/B) (set 12)", + "m1monmonl", "Money Money Money (Maygay) (M1A/B) (set 13)", + "m1monmonm", "Money Money Money (Maygay) (M1A/B) (set 14)", + "m1monmonn", "Money Money Money (Maygay) (M1A/B) (set 15)", + "m1monmono", "Money Money Money (Maygay) (M1A/B) (set 16)", + "m1monmonp", "Money Money Money (Maygay) (M1A/B) (set 17)", + "m1monmonq", "Money Money Money (Maygay) (M1A/B) (set 18)", + "m1monmonr", "Money Money Money (Maygay) (M1A/B) (set 19)", + "m1monmons", "Money Money Money (Maygay) (M1A/B) (set 20)", + "m1monmont", "Money Money Money (Maygay) (M1A/B) (set 21)", + "m1monmonu", "Money Money Money (Maygay) (M1A/B) (set 22)", + "m1monmonv", "Money Money Money (Maygay) (M1A/B) (set 23)", + "m1monmonw", "Money Money Money (Maygay) (M1A/B) (set 24)", + "m1mono", "Monopoly (Maygay) (M1A/B) (set 1)", + "m1mono0", "Monopoly (Maygay) (M1A/B) (set 28)", + "m1mono1", "Monopoly (Maygay) (M1A/B) (set 29)", + "m1mono2", "Monopoly (Maygay) (M1A/B) (set 30)", + "m1mono3", "Monopoly (Maygay) (M1A/B) (set 31)", + "m1mono4", "Monopoly (Maygay) (M1A/B) (set 32)", + "m1mono5", "Monopoly (Maygay) (M1A/B) (set 33)", + "m1mono6", "Monopoly (Maygay) (M1A/B) (set 34)", + "m1mono7", "Monopoly (Maygay) (M1A/B) (set 35)", + "m1mono8", "Monopoly (Maygay) (M1A/B) (set 36)", + "m1mono9", "Monopoly (Maygay) (M1A/B) (set 37)", + "m1monoa", "Monopoly (Maygay) (M1A/B) (set 2)", + "m1monoaa", "Monopoly (Maygay) (M1A/B) (set 38)", + "m1monoc", "Monopoly (Maygay) (M1A/B) (set 4)", + "m1monod", "Monopoly (Maygay) (M1A/B) (set 5)", + "m1monodt", "Monopoly (Dutch) (Maygay) (M1A/B)", + "m1monoe", "Monopoly (Maygay) (M1A/B) (set 6)", + "m1monof", "Monopoly (Maygay) (M1A/B) (set 7)", + "m1monog", "Monopoly (Maygay) (M1A/B) (set 8)", + "m1monoh", "Monopoly (Maygay) (M1A/B) (set 9)", + "m1monoi", "Monopoly (Maygay) (M1A/B) (set 10)", + "m1monok", "Monopoly (Maygay) (M1A/B) (set 12)", + "m1monol", "Monopoly (Maygay) (M1A/B) (set 13)", + "m1monom", "Monopoly (Maygay) (M1A/B) (set 14)", + "m1monon", "Monopoly (Maygay) (M1A/B) (set 15)", + "m1monoo", "Monopoly (Maygay) (M1A/B) (set 16)", + "m1monop", "Monopoly (Maygay) (M1A/B) (set 17)", + "m1monoq", "Monopoly (Maygay) (M1A/B) (set 18)", + "m1monor", "Monopoly (Maygay) (M1A/B) (set 19)", + "m1monos", "Monopoly (Maygay) (M1A/B) (set 20)", + "m1monot", "Monopoly (Maygay) (M1A/B) (set 21)", + "m1monou", "Monopoly (Maygay) (M1A/B) (set 22)", + "m1monov", "Monopoly (Maygay) (M1A/B) (set 23)", + "m1monow", "Monopoly (Maygay) (M1A/B) (set 24)", + "m1monox", "Monopoly (Maygay) (M1A/B) (set 25)", + "m1monoy", "Monopoly (Maygay) (M1A/B) (set 26)", + "m1monoz", "Monopoly (Maygay) (M1A/B) (set 27)", + "m1monstr", "Monster Cash (Maygay) (M1A/B) (set 1)", + "m1monstra", "Monster Cash (Maygay) (M1A/B) (set 2)", + "m1monstrb", "Monster Cash (Maygay) (M1A/B) (set 3)", + "m1monstrc", "Monster Cash (Maygay) (M1A/B) (set 4)", + "m1nhp", "Noel's House Party (Maygay) (M1A/B) (set 1)", + "m1nhpa", "Noel's House Party (Maygay) (M1A/B) (set 2)", + "m1nhpb", "Noel's House Party (Maygay) (M1A/B) (set 3)", + "m1nhpc", "Noel's House Party (Maygay) (M1A/B) (set 4)", + "m1nhpd", "Noel's House Party (Maygay) (M1A/B) (set 5)", + "m1nhpe", "Noel's House Party (Maygay) (M1A/B) (set 6)", + "m1nhpf", "Noel's House Party (Maygay) (M1A/B) (set 7)", + "m1nhpg", "Noel's House Party (Maygay) (M1A/B) (set 8)", + "m1nhph", "Noel's House Party (Maygay) (M1A/B) (set 9)", + "m1nhpi", "Noel's House Party (Maygay) (M1A/B) (set 10)", + "m1nhpj", "Noel's House Party (Maygay) (M1A/B) (set 11)", + "m1nhpk", "Noel's House Party (Maygay) (M1A/B) (set 12)", + "m1nhpl", "Noel's House Party (Maygay) (M1A/B) (set 13)", + "m1nhpm", "Noel's House Party (Maygay) (M1A/B) (set 14)", + "m1nudbnk", "Nudge Banker (Maygay) (M1A/B) (set 1)", + "m1nudbnka", "Nudge Banker (Maygay) (M1A/B) (set 2)", + "m1nudbnkb", "Nudge Banker (Maygay) (M1A/B) (set 3)", + "m1nudbnkc", "Nudge Banker (Maygay) (M1A/B) (set 4)", + "m1nudbnkd", "Nudge Banker (Maygay) (M1A/B) (set 5)", + "m1nudbnke", "Nudge Banker (Maygay) (M1A/B) (set 6)", + "m1nudbnkf", "Nudge Banker (Maygay) (M1A/B) (set 7)", + "m1nudbnkg", "Nudge Banker (Maygay) (M1A/B) (set 8)", + "m1nudbnkh", "Nudge Banker (Maygay) (M1A/B) (set 9)", + "m1nudbnki", "Nudge Banker (Maygay) (M1A/B) (set 10)", + "m1nudbnkj", "Nudge Banker (Maygay) (M1A/B) (set 11)", + "m1nudbnkk", "Nudge Banker (Maygay) (M1A/B) (set 12)", + "m1nudbnkl", "Nudge Banker (Maygay) (M1A/B) (set 13)", + "m1nudbnkm", "Nudge Banker (Maygay) (M1A/B) (set 14)", + "m1nudbnkn", "Nudge Banker (Maygay) (M1A/B) (set 15)", + "m1nudbnko", "Nudge Banker (Maygay) (M1A/B) (set 16)", + "m1nudbnkp", "Nudge Banker (Maygay) (M1A/B) (set 17)", + "m1nudbnkq", "Nudge Banker (Maygay) (M1A/B) (set 18)", + "m1nudbnkr", "Nudge Banker (Maygay) (M1A/B) (set 19)", + "m1nudbnks", "Nudge Banker (Maygay) (M1A/B) (set 20)", + "m1nudbnkt", "Nudge Banker (Maygay) (M1A/B) (set 21)", + "m1nudbnku", "Nudge Banker (Maygay) (M1A/B) (set 22)", + "m1nudbnkv", "Nudge Banker (Maygay) (M1A/B) (set 23)", + "m1nudunl", "Nudges Unlimited (Maygay) (M1A/B) (set 1)", + "m1nudunla", "Nudges Unlimited (Maygay) (M1A/B) (set 2)", + "m1nudunlb", "Nudges Unlimited (Maygay) (M1A/B) (set 3)", + "m1nudunlc", "Nudges Unlimited (Maygay) (M1A/B) (set 4)", + "m1nudunld", "Nudges Unlimited (Maygay) (M1A/B) (set 5)", + "m1nudunle", "Nudges Unlimited (Maygay) (M1A/B) (set 6)", + "m1omega", "Omega (Maygay) (M1A/B) (set 1)", + "m1omegaa", "Omega (Maygay) (M1A/B) (set 2)", + "m1onbus", "On The Buses (Maygay) (M1A/B) (set 1)", + "m1onbusa", "On The Buses (Maygay) (M1A/B) (set 2)", + "m1onbusb", "On The Buses (Maygay) (M1A/B) (set 3)", + "m1onbusc", "On The Buses (Maygay) (M1A/B) (set 4)", + "m1onbusd", "On The Buses (Maygay) (M1A/B) (set 5)", + "m1onbuse", "On The Buses (Maygay) (M1A/B) (set 6)", + "m1onbusf", "On The Buses (Maygay) (M1A/B) (set 7)", + "m1onbusg", "On The Buses (Maygay) (M1A/B) (set 8)", + "m1onbush", "On The Buses (Maygay) (M1A/B) (set 9)", + "m1onbusi", "On The Buses (Maygay) (M1A/B) (set 10)", + "m1onbusj", "On The Buses (Maygay) (M1A/B) (set 11)", + "m1onbusk", "On The Buses (Maygay) (M1A/B) (set 12)", + "m1onbusl", "On The Buses (Maygay) (M1A/B) (set 13)", + "m1onbusm", "On The Buses (Maygay) (M1A/B) (set 14)", + "m1onbusn", "On The Buses (Maygay) (M1A/B) (set 15)", + "m1onbuso", "On The Buses (Maygay) (M1A/B) (set 16)", + "m1onbusp", "On The Buses (Maygay) (M1A/B) (set 17)", + "m1ott", "Over The Top (Maygay) (M1A/B) (set 1)", + "m1otta", "Over The Top (Maygay) (M1A/B) (set 2)", + "m1piggy", "Piggy Bank (Maygay) (M1A/B) (set 1)", + "m1piggya", "Piggy Bank (Maygay) (M1A/B) (set 2)", + "m1piggyb", "Piggy Bank (Maygay) (M1A/B) (set 3)", + "m1piggyc", "Piggy Bank (Maygay) (M1A/B) (set 4)", + "m1pinkp", "Pink Panther (Maygay) (M1A/B) (set 1)", + "m1pinkpa", "Pink Panther (Maygay) (M1A/B) (set 2)", + "m1pinkpb", "Pink Panther (Maygay) (M1A/B) (set 3)", + "m1pinkpc", "Pink Panther (Maygay) (M1A/B) (set 4)", + "m1pinkpd", "Pink Panther (Maygay) (M1A/B) (set 5)", + "m1pinkpe", "Pink Panther (Maygay) (M1A/B) (set 6)", + "m1pinkpf", "Pink Panther (Maygay) (M1A/B) (set 7)", + "m1pinkpg", "Pink Panther (Maygay) (M1A/B) (set 8)", + "m1pinkph", "Pink Panther (Maygay) (M1A/B) (set 9)", + "m1pinkpi", "Pink Panther (Maygay) (M1A/B) (set 10)", + "m1pinkpj", "Pink Panther (Maygay) (M1A/B) (set 11)", + "m1pinkpk", "Pink Panther (Maygay) (M1A/B) (set 12)", + "m1pinkpl", "Pink Panther (Maygay) (M1A/B) (set 13)", + "m1pinkpm", "Pink Panther (Maygay) (M1A/B) (set 14)", + "m1pinkpn", "Pink Panther (Maygay) (M1A/B) (set 15)", + "m1pinkpo", "Pink Panther (Maygay) (M1A/B) (set 16)", + "m1pinkpp", "Pink Panther (Maygay) (M1A/B) (set 17)", + "m1pinkpq", "Pink Panther (Maygay) (M1A/B) (set 18)", + "m1pinkpr", "Pink Panther (Maygay) (M1A/B) (set 19)", + "m1ppc", "Pink Panther Club (Maygay) (M1A/B) (set 1)", + "m1ppca", "Pink Panther Club (Maygay) (M1A/B) (set 2)", + "m1ppcb", "Pink Panther Club (Maygay) (M1A/B) (set 3)", + "m1ppdt", "Pink Panther (German) (Maygay) (M1A/B)", + "m1przclu", "Prize Cluedo (Maygay) (M1A/B) (set 1)", + "m1przclua", "Prize Cluedo (Maygay) (M1A/B) (set 2)", + "m1przclub", "Prize Cluedo (Maygay) (M1A/B) (set 3)", + "m1przee", "Prize Eastenders (Maygay) (M1A/B) (set 1)", + "m1przeea", "Prize Eastenders (Maygay) (M1A/B) (set 2)", + "m1przeeb", "Prize Eastenders (Maygay) (M1A/B) (set 3)", + "m1przeec", "Prize Eastenders (Maygay) (M1A/B) (set 4)", + "m1races", "A Day At The Races (Maygay) (M1A/B) (set 1)", + "m1racesa", "A Day At The Races (Maygay) (M1A/B) (set 2)", + "m1racesb", "A Day At The Races (Maygay) (M1A/B) (set 3)", + "m1racesc", "A Day At The Races (Maygay) (M1A/B) (set 4)", + "m1reeldm", "Reel Diamonds (Maygay) (M1A/B) (set 1)", + "m1reeldma", "Reel Diamonds (Maygay) (M1A/B) (set 2)", + "m1reeldmb", "Reel Diamonds (Maygay) (M1A/B) (set 3)", + "m1reeldmc", "Reel Diamonds (Maygay) (M1A/B) (set 4)", + "m1reeldmd", "Reel Diamonds (Maygay) (M1A/B) (set 5)", + "m1reeldme", "Reel Diamonds (Maygay) (M1A/B) (set 6)", + "m1reeldmf", "Reel Diamonds (Maygay) (M1A/B) (set 7)", + "m1reeldmg", "Reel Diamonds (Maygay) (M1A/B) (set 8)", + "m1reeldmh", "Reel Diamonds (Maygay) (M1A/B) (set 9)", + "m1reeldmi", "Reel Diamonds (Maygay) (M1A/B) (set 10)", + "m1reeldmj", "Reel Diamonds (Maygay) (M1A/B) (set 11)", + "m1reeldmk", "Reel Diamonds (Maygay) (M1A/B) (set 12)", + "m1reeldml", "Reel Diamonds (Maygay) (M1A/B) (set 13)", + "m1reeldmm", "Reel Diamonds (Maygay) (M1A/B) (set 14)", + "m1reeldmn", "Reel Diamonds (Maygay) (M1A/B) (set 15)", + "m1reeldmo", "Reel Diamonds (Maygay) (M1A/B) (set 16)", + "m1retpp", "Return Of The Pink Panther (Maygay) (M1A/B) (set 1)", + "m1retppa", "Return Of The Pink Panther (Maygay) (M1A/B) (set 2)", + "m1retppb", "Return Of The Pink Panther (Maygay) (M1A/B) (set 3)", + "m1retppc", "Return Of The Pink Panther (Maygay) (M1A/B) (set 4)", + "m1retppd", "Return Of The Pink Panther (Maygay) (M1A/B) (set 5)", + "m1search", "Search Light (Maygay) (M1A/B) (set 1)", + "m1searcha", "Search Light (Maygay) (M1A/B) (set 2)", + "m1searchb", "Search Light (Maygay) (M1A/B) (set 3)", + "m1simps", "The Simpsons (Maygay) (M1A/B) (set 1)", + "m1simpsa", "The Simpsons (Maygay) (M1A/B) (set 2)", + "m1simpsb", "The Simpsons (Maygay) (M1A/B) (set 3)", + "m1simpsc", "The Simpsons (Maygay) (M1A/B) (set 4)", + "m1simpsd", "The Simpsons (Maygay) (M1A/B) (set 5)", + "m1simpse", "The Simpsons (Maygay) (M1A/B) (set 6)", + "m1simpsf", "The Simpsons (Maygay) (M1A/B) (set 7)", + "m1simpsg", "The Simpsons (Maygay) (M1A/B) (set 8)", + "m1sirich", "Strike It Rich (Maygay) (M1A/B) (set 1)", + "m1siricha", "Strike It Rich (Maygay) (M1A/B) (set 2)", + "m1sirichb", "Strike It Rich (Maygay) (M1A/B) (set 3)", + "m1sirichc", "Strike It Rich (Maygay) (M1A/B) (set 4)", + "m1sixspn", "Six Spinner (Maygay) (M1A/B)", + "m1spid", "Spiderman (Maygay) (M1A/B) (set 1)", + "m1spida", "Spiderman (Maygay) (M1A/B) (set 2)", + "m1spidb", "Spiderman (Maygay) (M1A/B) (set 3)", + "m1sprnov", "Super Nova (Dutch) (Maygay) (M1A/B)", + "m1sptlgt", "Spotlight (Maygay) (M1A/B) (set 1)", + "m1sptlgta", "Spotlight (Maygay) (M1A/B) (set 2)", + "m1sptlgtb", "Spotlight (Maygay) (M1A/B) (set 3)", + "m1sptlgtc", "Spotlight (Maygay) (M1A/B) (set 4)", + "m1sptlgtd", "Spotlight (Maygay) (M1A/B) (set 5)", + "m1sptlgte", "Spotlight (Maygay) (M1A/B) (set 6)", + "m1startr", "Star Trekking (Mdm) (M1A/B) (set 1)", + "m1startra", "Star Trekking (Mdm) (M1A/B) (set 2)", + "m1startrb", "Star Trekking (Mdm) (M1A/B) (set 3)", + "m1startrc", "Star Trekking (Mdm) (M1A/B) (set 4)", + "m1startrd", "Star Trekking (Mdm) (M1A/B) (set 5)", + "m1startre", "Star Trekking (Mdm) (M1A/B) (set 6)", + "m1startrf", "Star Trekking (Mdm) (M1A/B) (set 7)", + "m1startrg", "Star Trekking (Mdm) (M1A/B) (set 8)", + "m1startrh", "Star Trekking (Mdm) (M1A/B) (set 9)", + "m1startri", "Star Trekking (Mdm) (M1A/B) (set 10)", + "m1startrj", "Star Trekking (Mdm) (M1A/B) (set 11)", + "m1startrk", "Star Trekking (Mdm) (M1A/B) (set 12)", + "m1startrm", "Star Trekking (Mdm) (M1A/B) (set 14)", + "m1startrn", "Star Trekking (Mdm) (M1A/B) (set 15)", + "m1startro", "Star Trekking (Mdm) (M1A/B) (set 16)", + "m1startrp", "Star Trekking (Mdm) (M1A/B) (set 17)", + "m1startrq", "Star Trekking (Mdm) (M1A/B) (set 18)", + "m1startrr", "Star Trekking (Mdm) (M1A/B) (set 19)", + "m1sudnim", "Sudden Impact (Maygay) (M1A/B) (set 1)", + "m1sudnima", "Sudden Impact (Maygay) (M1A/B) (set 2)", + "m1sudnimb", "Sudden Impact (Maygay) (M1A/B) (set 3)", + "m1sudnimc", "Sudden Impact (Maygay) (M1A/B) (set 4)", + "m1suppot", "Super Pots (Maygay) (M1A/B) (set 1)", + "m1suppot0", "Super Pots (Maygay) (M1A/B) (set 28)", + "m1suppota", "Super Pots (Maygay) (M1A/B) (set 2)", + "m1suppotb", "Super Pots (Maygay) (M1A/B) (set 3)", + "m1suppotc", "Super Pots (Maygay) (M1A/B) (set 4)", + "m1suppotd", "Super Pots (Maygay) (M1A/B) (set 5)", + "m1suppote", "Super Pots (Maygay) (M1A/B) (set 6)", + "m1suppotf", "Super Pots (Maygay) (M1A/B) (set 7)", + "m1suppotg", "Super Pots (Maygay) (M1A/B) (set 8)", + "m1suppoti", "Super Pots (Maygay) (M1A/B) (set 10)", + "m1suppotj", "Super Pots (Maygay) (M1A/B) (set 11)", + "m1suppotk", "Super Pots (Maygay) (M1A/B) (set 12)", + "m1suppotl", "Super Pots (Maygay) (M1A/B) (set 13)", + "m1suppotm", "Super Pots (Maygay) (M1A/B) (set 14)", + "m1suppotn", "Super Pots (Maygay) (M1A/B) (set 15)", + "m1suppoto", "Super Pots (Maygay) (M1A/B) (set 16)", + "m1suppotp", "Super Pots (Maygay) (M1A/B) (set 17)", + "m1suppotq", "Super Pots (Maygay) (M1A/B) (set 18)", + "m1suppotr", "Super Pots (Maygay) (M1A/B) (set 19)", + "m1suppots", "Super Pots (Maygay) (M1A/B) (set 20)", + "m1suppott", "Super Pots (Maygay) (M1A/B) (set 21)", + "m1suppotu", "Super Pots (Maygay) (M1A/B) (set 22)", + "m1suppotv", "Super Pots (Maygay) (M1A/B) (set 23)", + "m1suppotw", "Super Pots (Maygay) (M1A/B) (set 24)", + "m1suppotx", "Super Pots (Maygay) (M1A/B) (set 25)", + "m1suppoty", "Super Pots (Maygay) (M1A/B) (set 26)", + "m1suppotz", "Super Pots (Maygay) (M1A/B) (set 27)", + "m1sycc", "Stake Yer Claim Club (Global) (M1A/B) (set 1)", + "m1sycca", "Stake Yer Claim Club (Global) (M1A/B) (set 2)", + "m1syccb", "Stake Yer Claim Club (Global) (M1A/B) (set 3)", + "m1taknot", "Take Note (Maygay) (M1A/B)", + "m1thatlf", "That's Life (Maygay) (M1A/B) (set 1)", + "m1thatlfa", "That's Life (Maygay) (M1A/B) (set 2)", + "m1thatlfb", "That's Life (Maygay) (M1A/B) (set 3)", + "m1thatlfc", "That's Life (Maygay) (M1A/B) (set 4)", + "m1thatlfd", "That's Life (Maygay) (M1A/B) (set 5)", + "m1thrill", "Thrills 'n' Spills (Global) (M1A/B) (set 1)", + "m1thrilla", "Thrills 'n' Spills (Global) (M1A/B) (set 2)", + "m1thrillb", "Thrills 'n' Spills (Global) (M1A/B) (set 3)", + "m1thrillc", "Thrills 'n' Spills (Global) (M1A/B) (set 4)", + "m1topstr", "Top Strike (Maygay - Bwb) (M1A/B)", + "m1topten", "Top Tenner (Maygay) (M1A/B) (set 1)", + "m1toptena", "Top Tenner (Maygay) (M1A/B) (set 2)", + "m1tpclb", "Trivial Pursuit Club (Maygay) (M1A/B) (set 1)", + "m1tpclba", "Trivial Pursuit Club (Maygay) (M1A/B) (set 2)", + "m1tpclbb", "Trivial Pursuit Club (Maygay) (M1A/B) (set 3)", + "m1tpclbc", "Trivial Pursuit Club (Maygay) (M1A/B) (set 4)", + "m1trivia", "Trivial Pursuit (Maygay) (M1A/B) (set 1)", + "m1triviaa", "Trivial Pursuit (Maygay) (M1A/B) (set 2)", + "m1triviab", "Trivial Pursuit (Maygay) (M1A/B) (set 3)", + "m1triviac", "Trivial Pursuit (Maygay) (M1A/B) (set 4)", + "m1triviad", "Trivial Pursuit (Maygay) (M1A/B) (set 5)", + "m1triviae", "Trivial Pursuit (Maygay) (M1A/B) (set 6)", + "m1triviaf", "Trivial Pursuit (Maygay) (M1A/B) (set 7)", + "m1triviag", "Trivial Pursuit (Maygay) (M1A/B) (set 8)", + "m1triviah", "Trivial Pursuit (Maygay) (M1A/B) (set 9)", + "m1triviai", "Trivial Pursuit (Maygay) (M1A/B) (set 10)", + "m1triviaj", "Trivial Pursuit (Maygay) (M1A/B) (set 11)", + "m1triviak", "Trivial Pursuit (Maygay) (M1A/B) (set 12)", + "m1trivial", "Trivial Pursuit (Maygay) (M1A/B) (set 13)", + "m1trivian", "Trivial Pursuit (Maygay) (M1A/B) (set 15)", + "m1triviap", "Trivial Pursuit (Maygay) (M1A/B) (set 17)", + "m1triviaq", "Trivial Pursuit (Maygay) (M1A/B) (set 18)", + "m1triviar", "Trivial Pursuit (Maygay) (M1A/B) (set 19)", + "m1trivias", "Trivial Pursuit (Maygay) (M1A/B) (set 20)", + "m1triviat", "Trivial Pursuit (Maygay) (M1A/B) (set 21)", + "m1triviau", "Trivial Pursuit (Maygay) (M1A/B) (set 22)", + "m1triviav", "Trivial Pursuit (Maygay) (M1A/B) (set 23)", + "m1triviaw", "Trivial Pursuit (Maygay) (M1A/B) (set 24)", + "m1triviax", "Trivial Pursuit (Maygay) (M1A/B) (set 25)", + "m1triviay", "Trivial Pursuit (Maygay) (M1A/B) (set 26)", + "m1triviaz", "Trivial Pursuit (Maygay) (M1A/B) (set 27)", + "m1trtr", "Trick Or Treat (Global) (M1A/B) (set 1)", + "m1trtra", "Trick Or Treat (Global) (M1A/B) (set 2)", + "m1trtrcl", "Trick Or Treat Club (Global) (M1A/B)", + "m1tstunt", "Test Unit (Maygay) (M1A/B)", + "m1ttcash", "Tick Tock Cash (Empire) (M1A/B)", + "m1ultchl", "Ultimate Challenge (Maygay) (M1A/B) (set 1)", + "m1ultchla", "Ultimate Challenge (Maygay) (M1A/B) (set 2)", + "m1ultchlb", "Ultimate Challenge (Maygay) (M1A/B) (set 3)", + "m1ultchlc", "Ultimate Challenge (Maygay) (M1A/B) (set 4)", + "m1undsie", "Under Siege (Maygay) (M1A/B) (set 1)", + "m1undsiea", "Under Siege (Maygay) (M1A/B) (set 2)", + "m1undsieb", "Under Siege (Maygay) (M1A/B) (set 3)", + "m1undsiec", "Under Siege (Maygay) (M1A/B) (set 4)", + "m1vegas", "Vegas Gambler Club (Maygay) (M1A/B) (set 1)", + "m1vegasa", "Vegas Gambler Club (Maygay) (M1A/B) (set 2)", + "m1vegasb", "Vegas Gambler Club (Maygay) (M1A/B) (set 3)", + "m1vegcrw", "Vegetable Crew (Global) (M1A/B)", + "m1wagon", "Wagon Trail (Maygay) (M1A/B) (set 1)", + "m1wagona", "Wagon Trail (Maygay) (M1A/B) (set 2)", + "m1wagonb", "Wagon Trail (Maygay) (M1A/B) (set 3)", + "m1wagonc", "Wagon Trail (Maygay) (M1A/B) (set 4)", + "m1winenc", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 1)", + "m1winenca", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 2)", + "m1winencb", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 3)", + "m1winencc", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 4)", + "m1wldzne", "Wild Zone (Maygay) (M1A/B) (set 1)", + "m1wldznea", "Wild Zone (Maygay) (M1A/B) (set 2)", + "m1wldzneb", "Wild Zone (Maygay) (M1A/B) (set 3)", + "m1wldznec", "Wild Zone (Maygay) (M1A/B) (set 4)", + "m1wldzned", "Wild Zone (Maygay) (M1A/B) (set 5)", + "m1wldznee", "Wild Zone (Maygay) (M1A/B) (set 6)", + "m1wldznef", "Wild Zone (Maygay) (M1A/B) (set 7)", + "m1wldzneg", "Wild Zone (Maygay) (M1A/B) (set 8)", + "m1wldzneh", "Wild Zone (Maygay) (M1A/B) (set 9)", + "m1wldznei", "Wild Zone (Maygay) (M1A/B) (set 10)", + "m1wldznej", "Wild Zone (Maygay) (M1A/B) (set 11)", + "m1wldznek", "Wild Zone (Maygay) (M1A/B) (set 12)", + "m1wldznel", "Wild Zone (Maygay) (M1A/B) (set 13)", + "m1wldznem", "Wild Zone (Maygay) (M1A/B) (set 14)", + "m1wldznen", "Wild Zone (Maygay) (M1A/B) (set 15)", + "m1wldzneo", "Wild Zone (Maygay) (M1A/B) (set 16)", + "m1wldznep", "Wild Zone (Maygay) (M1A/B) (set 17)", + "m1wldzneq", "Wild Zone (Maygay) (M1A/B) (set 18)", + "m1wldzner", "Wild Zone (Maygay) (M1A/B) (set 19)", + "m1wldznes", "Wild Zone (Maygay) (M1A/B) (set 20)", + "m1wotw", "War Of The Worlds (Maygay) (M1A/B) (set 1)", + "m1wotwa", "War Of The Worlds (Maygay) (M1A/B) (set 2)", + "m1wotwb", "War Of The Worlds (Maygay) (M1A/B) (set 3)", + "m21", "21 (Mirco)", + "m2hilite", "Hi-Lights (Barcrest) (MPU2)", + "m2svlite", "Silver Lights (Barcrest) (MPU2)", + "m3acech", "Ace Chase (Bwb) (MPU3)", + "m3autort", "Autoroute (Barcrest) (MPU3)", + "m3bankr", "Banker (Bwb) (MPU3)", + "m3big20j", "Big 20 Joker (Barcrest) (MPU3)", + "m3biggam", "The Big Game (Barcrest) (MPU3)", + "m3bigsht", "Big Shot (Barcrest) (MPU3)", + "m3blkhle", "Black Hole (Barcrest) (MPU3)", + "m3cabret", "Cabaret (Barcrest) (MPU3, set 1)", + "m3cabreta", "Cabaret (Barcrest) (MPU3, set 2)", + "m3cdash", "Cash Dash (Pcp) (MPU3)", + "m3chase", "Chase It (Bwb) (MPU3)", + "m3circle", "Special Circle Club (Barcrest) (MPU3, set 1)", + "m3circlea", "Special Circle Club (Barcrest) (MPU3, set 2)", + "m3circleb", "Special Circle Club (Barcrest) (MPU3, set 3)", + "m3cjoker", "Crazy Joker (Barcrest) (MPU3)", + "m3cskill", "Circle Skill (Barcrest) (MPU3)", + "m3cunlim", "Chances Unlimited (Barcrest) (MPU3)", + "m3fortun", "Fortune Numbers (Barcrest) (MPU3, set 1)", + "m3fortuna", "Fortune Numbers (Barcrest) (MPU3, set 2)", + "m3fortund", "Fortune Numbers (Barcrest) [Dutch] (MPU3)", + "m3gaward", "Golden Award (Barcrest) (MPU3)", + "m3gcrown", "Golden Crowns (Mdm) (MPU3)", + "m3gmine", "Gold Mine (Bwb) (MPU3)", + "m3hprvpr", "Hyper Viper (Barcrest) (MPU3)", + "m3lineup", "Line Up (Barcrest) (MPU3)", + "m3llotto", "Lucky Lotto (Barcrest) (MPU3)", + "m3loony", "Loonybin (Pcp) (MPU3)", + "m3lstrik", "Lucky Strike Club (Barcrest) (MPU3, set 1)", + "m3lstrika", "Lucky Strike Club (Barcrest) (MPU3, set 2)", + "m3magrp", "Magic Replay (Barcrest) (MPU3)", + "m3minmax", "Mini Max (Associated Leisure) (MPU3)", + "m3mremon", "More Money (VFS) (MPU3)", + "m3nnice", "Naughty But Nice (Barcrest) (MPU3)", + "m3nudge", "Nudges Unlimited (Barcrest) (MPU3)", + "m3oddson", "Odds On (Barcrest) (MPU3)", + "m3online", "On Line (Pcp) (MPU3)", + "m3optunl", "Options Unlimited (Barcrest) (MPU3)", + "m3oxo", "Noughts 'n' Crosses (VFS) (MPU3)", + "m3ratrce", "Rat Race (Bwb) (MPU3)", + "m3razdaz", "Razzle Dazzle (Barcrest) (MPU3, set 1)", + "m3razdaza", "Razzle Dazzle (Barcrest) (MPU3, set 2)", + "m3razdazd", "Razzle Dazzle (Barcrest) [Dutch] (MPU3)", + "m3replay", "Instant Replay (Barcrest) (MPU3)", + "m3rockpl", "Rock Pile (Pcp) (MPU3)", + "m3rollem", "Roll 'Em (Pcp) (MPU3)", + "m3rxchng", "Royal Exchange Club (Barcrest) (MPU3)", + "m3scoop", "Scoop (Peter Simper, prototype?) (MPU3)", + "m3sdeal", "Super Deal (Barcrest) (MPU3)", + "m3sexcu", "Super Exchanges Unlimited (Barcrest) (MPU3)", + "m3slight", "Strike A Light (Barcrest) (MPU3)", + "m3snaphp", "Snap Happy (Pcp) (MPU3)", + "m3snappy", "Snappy Viper (Barcrest) (MPU3)", + "m3spoof", "Spoof (Pcp) (MPU3, set 1)", + "m3spoofa", "Spoof (Pcp) (MPU3, set 2)", + "m3supadr", "Super Adders & Ladders (Barcrest) (MPU3)", + "m3supasw", "Supaswop (Bwb) (MPU3)", + "m3suplin", "Super Line Up (Barcrest) (MPU3, set 1)", + "m3suplina", "Super Line Up (Barcrest) (MPU3, set 2)", + "m3supnud", "Super Nudges Unlimited (Barcrest) (MPU3)", + "m3supser", "Super Series (Barcrest) (MPU3)", + "m3supspo", "Super Spoof (Pcp) (MPU3, set 1)", + "m3supspoa", "Super Spoof (Pcp) (MPU3, set 2)", + "m3supwin", "Super Win (Bwb) (MPU3, set 1)", + "m3supwina", "Super Win (Bwb) (MPU3, set 2)", + "m3sweep", "Sweep Stake Club (Barcrest) (MPU3, set 1)", + "m3sweepa", "Sweep Stake Club (Barcrest) (MPU3, set 2)", + "m3tfair", "Tuppenny Fair (Mdm) (MPU3)", + "m3tlktwn", "Talk of the Town (MPU3?)", + "m3toplin", "Top Line (Pcp) (MPU3)", + "m3topsht", "Top Shot (Barcrest) (MPU3)", + "m3tst", "MPU3 Unit Test (Program 5) (Barcrest) (MPU3)", + "m3wacky", "Wacky Racer (Mdm) (MPU3)", + "m3wigwam", "Wig Wam (Pcp) (MPU3)", + "m3winagn", "Win-A-Gain (Bwb) (MPU3, set 1)", + "m3winagna", "Win-A-Gain (Bwb) (MPU3, set 2)", + "m3winagnb", "Win-A-Gain (Bwb) (MPU3, set 3)", + "m3winstr", "Winstrike (Bwb) (MPU3)", + "m3winstra", "Winstrike (Barcrest) (MPU3)", + "m3xchngg", "Exchanges Galore (Barcrest) (MPU3)", + "m3xchngu", "Exchanges Unlimited (Barcrest) (MPU3, set 1)", + "m3xchngua", "Exchanges Unlimited (Barcrest) (MPU3, set 2)", + "m4", "M-4", + "m421", "Twenty One (Barcrest) (MPU4)", + "m421club", "21 Club (Barcrest) [DTW, Dutch] (MPU4)", + "m42punlm", "2p Unlimited (Mdm) (MPU4)", + "m4aao", "Against All Odds (Eurotek) (MPU4)", + "m4abeaut", "American Beauty (Avantime?) (MPU4) (AB, set 1)", + "m4abeaut_1", "American Beauty (Avantime?) (MPU4) (AB, set 2)", + "m4abeaut_2", "American Beauty (Avantime?) (MPU4) (AB, set 3)", + "m4abeaut_3", "American Beauty (Avantime?) (MPU4) (AB, set 4)", + "m4abeaut_4", "American Beauty (Avantime?) (MPU4) (AB, set 5)", + "m4abeaut_5", "American Beauty (Avantime?) (MPU4) (AB, set 6)", + "m4abeaut_6", "American Beauty (Avantime?) (MPU4) (AB, set 7)", + "m4abeaut_7", "American Beauty (Avantime?) (MPU4) (AB, set 8)", + "m4abeaut_8", "American Beauty (Avantime?) (MPU4) (AB, set 9)", + "m4abeaut_9", "American Beauty (Avantime?) (MPU4) (AB, set 10)", + "m4abeaut_c1", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 1)", + "m4abeaut_c10", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 10)", + "m4abeaut_c11", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 11)", + "m4abeaut_c12", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 12)", + "m4abeaut_c13", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 13)", + "m4abeaut_c14", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 14)", + "m4abeaut_c15", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 15)", + "m4abeaut_c16", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 1)", + "m4abeaut_c17", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 2)", + "m4abeaut_c18", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 3)", + "m4abeaut_c19", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 4)", + "m4abeaut_c2", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 2)", + "m4abeaut_c20", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 5)", + "m4abeaut_c21", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 6)", + "m4abeaut_c22", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 7)", + "m4abeaut_c23", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 8)", + "m4abeaut_c24", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 9)", + "m4abeaut_c25", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 10)", + "m4abeaut_c26", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 11)", + "m4abeaut_c27", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 12)", + "m4abeaut_c28", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 13)", + "m4abeaut_c29", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 14)", + "m4abeaut_c3", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 3)", + "m4abeaut_c30", "American Beauty (Avantime?) (MPU4) (M2C1, Czech, set 1)", + "m4abeaut_c31", "American Beauty (Avantime?) (MPU4) (M2C1, Czech, set 2)", + "m4abeaut_c4", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 4)", + "m4abeaut_c5", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 5)", + "m4abeaut_c6", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 6)", + "m4abeaut_c7", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 7)", + "m4abeaut_c8", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 8)", + "m4abeaut_c9", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 9)", + "m4abeaut_i1", "American Beauty (Avantime?) (MPU4) (A2I0, Israel, set 1)", + "m4abeaut_i2", "American Beauty (Avantime?) (MPU4) (A2I0, Israel, set 2)", + "m4abeaut_k1", "American Beauty (Avantime?) (MPU4) (A2K0, set 1)", + "m4abeaut_k2", "American Beauty (Avantime?) (MPU4) (A2K0, set 2)", + "m4abeaut_l1", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 1)", + "m4abeaut_l10", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 10)", + "m4abeaut_l11", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 11)", + "m4abeaut_l12", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 12)", + "m4abeaut_l13", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 1)", + "m4abeaut_l14", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 2)", + "m4abeaut_l15", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 3)", + "m4abeaut_l16", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 4)", + "m4abeaut_l17", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 5)", + "m4abeaut_l18", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 6)", + "m4abeaut_l19", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 7)", + "m4abeaut_l2", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 2)", + "m4abeaut_l20", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 8)", + "m4abeaut_l21", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 9)", + "m4abeaut_l22", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 10)", + "m4abeaut_l23", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 11)", + "m4abeaut_l24", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 12)", + "m4abeaut_l25", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 13)", + "m4abeaut_l26", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 14)", + "m4abeaut_l27", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 15)", + "m4abeaut_l28", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 16)", + "m4abeaut_l29", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 17)", + "m4abeaut_l3", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 3)", + "m4abeaut_l30", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 18)", + "m4abeaut_l31", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 19)", + "m4abeaut_l32", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 20)", + "m4abeaut_l33", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 1)", + "m4abeaut_l34", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 2)", + "m4abeaut_l35", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 3)", + "m4abeaut_l36", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 4)", + "m4abeaut_l37", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 5)", + "m4abeaut_l38", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 6)", + "m4abeaut_l4", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 4)", + "m4abeaut_l5", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 5)", + "m4abeaut_l6", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 6)", + "m4abeaut_l7", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 7)", + "m4abeaut_l8", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 8)", + "m4abeaut_l9", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 9)", + "m4abeaut_m1", "American Beauty (Avantime?) (MPU4) (ABM1, Montenegro, set 1)", + "m4abeaut_m2", "American Beauty (Avantime?) (MPU4) (ABM1, Montenegro, set 2)", + "m4abeaut_m3", "American Beauty (Avantime?) (MPU4) (ABM2, Montenegro, set 1)", + "m4abeaut_m4", "American Beauty (Avantime?) (MPU4) (ABM2, Montenegro, set 2)", + "m4abeaut_pb1", "American Beauty (Avantime?) (MPU4) (AJL0, Project Bar, set 1)", + "m4abeaut_pb2", "American Beauty (Avantime?) (MPU4) (AJL0, Project Bar, set 2)", + "m4abeaut_r1", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 1)", + "m4abeaut_r10", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 10)", + "m4abeaut_r11", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 11)", + "m4abeaut_r12", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 12)", + "m4abeaut_r13", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 13)", + "m4abeaut_r14", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 14)", + "m4abeaut_r2", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 2)", + "m4abeaut_r3", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 3)", + "m4abeaut_r4", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 4)", + "m4abeaut_r5", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 5)", + "m4abeaut_r6", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 6)", + "m4abeaut_r7", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 7)", + "m4abeaut_r8", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 8)", + "m4abeaut_r9", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 9)", + "m4abeaut_s1", "American Beauty (Avantime?) (MPU4) (ABS1, Slovakia, set 1)", + "m4abeaut_s2", "American Beauty (Avantime?) (MPU4) (ABS1, Slovakia, set 2)", + "m4abeaut_s3", "American Beauty (Avantime?) (MPU4) (ABS2, Slovakia, set 1)", + "m4abeaut_s4", "American Beauty (Avantime?) (MPU4) (ABS2, Slovakia, set 2)", + "m4abeaut_u1", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 1)", + "m4abeaut_u10", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 10)", + "m4abeaut_u11", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 11)", + "m4abeaut_u12", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 12)", + "m4abeaut_u13", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 13)", + "m4abeaut_u14", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 14)", + "m4abeaut_u15", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 15)", + "m4abeaut_u16", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 16)", + "m4abeaut_u17", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 17)", + "m4abeaut_u18", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 18)", + "m4abeaut_u19", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 19)", + "m4abeaut_u2", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 2)", + "m4abeaut_u20", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 20)", + "m4abeaut_u21", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 21)", + "m4abeaut_u22", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 22)", + "m4abeaut_u23", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 23)", + "m4abeaut_u24", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 24)", + "m4abeaut_u25", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 25)", + "m4abeaut_u26", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 26)", + "m4abeaut_u27", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 27)", + "m4abeaut_u28", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 28)", + "m4abeaut_u29", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 29)", + "m4abeaut_u3", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 3)", + "m4abeaut_u30", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 30)", + "m4abeaut_u31", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 31)", + "m4abeaut_u32", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 32)", + "m4abeaut_u33", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 33)", + "m4abeaut_u34", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 34)", + "m4abeaut_u35", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 35)", + "m4abeaut_u36", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 36)", + "m4abeaut_u37", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 37)", + "m4abeaut_u38", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 38)", + "m4abeaut_u39", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 39)", + "m4abeaut_u4", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 4)", + "m4abeaut_u40", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 40)", + "m4abeaut_u41", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 41)", + "m4abeaut_u42", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 42)", + "m4abeaut_u43", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 43)", + "m4abeaut_u44", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 44)", + "m4abeaut_u45", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 45)", + "m4abeaut_u46", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 46)", + "m4abeaut_u47", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 47)", + "m4abeaut_u48", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 48)", + "m4abeaut_u49", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 1)", + "m4abeaut_u5", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 5)", + "m4abeaut_u50", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 2)", + "m4abeaut_u51", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 3)", + "m4abeaut_u52", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 4)", + "m4abeaut_u53", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 1)", + "m4abeaut_u54", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 2)", + "m4abeaut_u55", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 3)", + "m4abeaut_u56", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 4)", + "m4abeaut_u57", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 5)", + "m4abeaut_u58", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 6)", + "m4abeaut_u59", "American Beauty (Avantime?) (MPU4) (A2U3, Ukraine, set 1)", + "m4abeaut_u6", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 6)", + "m4abeaut_u60", "American Beauty (Avantime?) (MPU4) (A2U3, Ukraine, set 2)", + "m4abeaut_u61", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 1)", + "m4abeaut_u62", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 2)", + "m4abeaut_u63", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 3)", + "m4abeaut_u64", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 4)", + "m4abeaut_u7", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 7)", + "m4abeaut_u8", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 8)", + "m4abeaut_u9", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 9)", + "m4abra", "Abracadabra (Bwb) (MPU4) (set 1)", + "m4abra__a", "Abracadabra (Bwb) (MPU4) (set 2)", + "m4abra__b", "Abracadabra (Bwb) (MPU4) (set 3)", + "m4abra__c", "Abracadabra (Bwb) (MPU4) (set 4)", + "m4acechs", "Ace Chase (Barcrest) (MPU4) (set 1)", + "m4acechs__a", "Ace Chase (Barcrest) (MPU4) (set 2)", + "m4acechs__b", "Ace Chase (Barcrest) (MPU4) (set 3)", + "m4acechs__c", "Ace Chase (Barcrest) (MPU4) (set 4)", + "m4acechs__d", "Ace Chase (Barcrest) (MPU4) (set 5)", + "m4acechs__e", "Ace Chase (Barcrest) (MPU4) (set 6)", + "m4acechs__f", "Ace Chase (Barcrest) (MPU4) (set 7)", + "m4acechs__g", "Ace Chase (Barcrest) (MPU4) (set 8)", + "m4acechs__h", "Ace Chase (Barcrest) (MPU4) (set 9)", + "m4acechs__i", "Ace Chase (Barcrest) (MPU4) (set 10)", + "m4acechs__j", "Ace Chase (Barcrest) (MPU4) (set 11)", + "m4acechs__k", "Ace Chase (Barcrest) (MPU4) (set 12)", + "m4acechs__l", "Ace Chase (Barcrest) (MPU4) (set 13)", + "m4acechs__m", "Ace Chase (Barcrest) (MPU4) (set 14)", + "m4acechs__n", "Ace Chase (Barcrest) (MPU4) (set 15)", + "m4acechs__o", "Ace Chase (Barcrest) (MPU4) (set 16)", + "m4acechs__p", "Ace Chase (Barcrest) (MPU4) (set 17)", + "m4acechs__q", "Ace Chase (Barcrest) (MPU4) (set 18)", + "m4acechs__r", "Ace Chase (Barcrest) (MPU4) (set 19)", + "m4acechs__s", "Ace Chase (Barcrest) (MPU4) (set 20)", + "m4acechs__t", "Ace Chase (Barcrest) (MPU4) (set 21)", + "m4acechs__u", "Ace Chase (Barcrest) (MPU4) (set 22)", + "m4actbnk", "Action Bank (Barcrest) (MPU4) (set 1)", + "m4actbnk__a", "Action Bank (Barcrest) (MPU4) (set 2)", + "m4actbnk__b", "Action Bank (Barcrest) (MPU4) (set 3)", + "m4actbnk__c", "Action Bank (Barcrest) (MPU4) (set 4)", + "m4actbnk__d", "Action Bank (Barcrest) (MPU4) (set 5)", + "m4actbnk__e", "Action Bank (Barcrest) (MPU4) (set 6)", + "m4actbnk__f", "Action Bank (Barcrest) (MPU4) (set 7)", + "m4actbnk__g", "Action Bank (Barcrest) (MPU4) (set 8)", + "m4actbnk__h", "Action Bank (Barcrest) (MPU4) (set 9)", + "m4actbnk__i", "Action Bank (Barcrest) (MPU4) (set 10)", + "m4actbnka", "Action Bank (Barcrest) (Mod 2 type, AC3.0) (MPU4)", + "m4actbnkb", "Action Bank (Barcrest) (Mod 2 type, ACT2.0) (MPU4)", + "m4actclb", "Action Club (Barcrest) (MPU4) (1.9)", + "m4actclba", "Action Club (Barcrest) (MPU4) (1.1)", + "m4actnot", "Action Note (Barcrest) (MPU4) (AN 1.2)", + "m4actpak", "Action Pack (Barcrest) (MPU4) (AP 0.4)", + "m4actpaka", "Action Pack (Barcrest) (MPU4) (AP 0.5)", + "m4addr", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1)", + "m4addr10", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 1)", + "m4addr10_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 2)", + "m4addr10c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 1)", + "m4addr10c_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 2)", + "m4addr10d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 1)", + "m4addr10d_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 2)", + "m4addr10yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 1)", + "m4addr10yd_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 2)", + "m4addr3", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 1)", + "m4addr3_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 2)", + "m4addr3_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 3)", + "m4addr3_c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 4)", + "m4addr3_d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 5)", + "m4addr3d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 1)", + "m4addr3d_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 2)", + "m4addr3d_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 3)", + "m4addr3d_c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 4)", + "m4addr3yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 1)", + "m4addr3yd_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 2)", + "m4addr3yd_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 3)", + "m4addr3yd_c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 4)", + "m4addr4", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 1)", + "m4addr4_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 2)", + "m4addr4c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 1)", + "m4addr4c_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 2)", + "m4addr4c_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 3)", + "m4addr4d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0D, set 1)", + "m4addr4yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0YD, set 1)", + "m4addr5", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 1)", + "m4addr5_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 2)", + "m4addr5c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 1)", + "m4addr5c_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 2)", + "m4addr5d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 1)", + "m4addr5d_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 2)", + "m4addr5yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 1)", + "m4addr5yd_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 2)", + "m4addr6lc", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1C)", + "m4addr6ld", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1D)", + "m4addr6lk", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1K)", + "m4addr6ly", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1Y)", + "m4addr6lybd", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YBD)", + "m4addr6lyd", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YD)", + "m4addr_h1", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 1)", + "m4addr_h2", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 2)", + "m4addrc", "Adders & Ladders Classic (Barcrest) (MPU4) (set 1)", + "m4addrc__a", "Adders & Ladders Classic (Barcrest) (MPU4) (set 2)", + "m4addrc__b", "Adders & Ladders Classic (Barcrest) (MPU4) (set 3)", + "m4addrc__c", "Adders & Ladders Classic (Barcrest) (MPU4) (set 4)", + "m4addrc__d", "Adders & Ladders Classic (Barcrest) (MPU4) (set 5)", + "m4addrc__e", "Adders & Ladders Classic (Barcrest) (MPU4) (set 6)", + "m4addrc__f", "Adders & Ladders Classic (Barcrest) (MPU4) (set 7)", + "m4addrc__h", "Adders & Ladders Classic (Barcrest) (MPU4) (set 8)", + "m4addrc__i", "Adders & Ladders Classic (Barcrest) (MPU4) (set 9)", + "m4addrc__j", "Adders & Ladders Classic (Barcrest) (MPU4) (set 10)", + "m4addrc__k", "Adders & Ladders Classic (Barcrest) (MPU4) (set 11)", + "m4addrc__l", "Adders & Ladders Classic (Barcrest) (MPU4) (set 12)", + "m4addrc__m", "Adders & Ladders Classic (Barcrest) (MPU4) (set 13)", + "m4addrc__n", "Adders & Ladders Classic (Barcrest) (MPU4) (set 14)", + "m4addrcc", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 1)", + "m4addrcc__a", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 2)", + "m4addrcc__b", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 3)", + "m4addrcc__c", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 4)", + "m4addrcc__d", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 5)", + "m4addrd", "Adders & Ladders (Barcrest) (DAL, Dutch) (MPU4)", + "m4aladn", "Aladdin's Cave (Crystal) (MPU4) (set 1)", + "m4aladna", "Aladdin's Cave (Crystal) (MPU4) (set 2)", + "m4aladnb", "Aladdin's Cave (Crystal) (MPU4) (set 3)", + "m4aladnc", "Aladdin's Cave (Crystal) (MPU4) (set 4)", + "m4aladnd", "Aladdin's Cave (Crystal) (MPU4) (set 5)", + "m4aladne", "Aladdin's Cave (Crystal) (MPU4) (set 6)", + "m4aladnf", "Aladdin's Cave (Crystal) (MPU4) (set 7)", + "m4aladng", "Aladdin's Cave (Crystal) (MPU4) (set 8)", + "m4aladnh", "Aladdin's Cave (Crystal) (MPU4) (set 9)", + "m4aladni", "Aladdin's Cave (Crystal) (MPU4) (set 10)", + "m4aliz", "AlizBaz (Qps) (German) (MPU4)", + "m4alladv", "All Cash Advance (Barcrest) (MPU4) (C2B 6.0)", + "m4alpha", "Alphabet (Barcrest) [A4B 1.0] (MPU4)", + "m4amalad", "American Aladdin (Avantime?) (MPU4) (set 1)", + "m4amalad__a", "American Aladdin (Avantime?) (MPU4) (set 2)", + "m4amalad__b", "American Aladdin (Avantime?) (MPU4) (set 3)", + "m4amalad__c", "American Aladdin (Avantime?) (MPU4) (set 4)", + "m4amalad__d", "American Aladdin (Avantime?) (MPU4) (set 5)", + "m4amalad__e", "American Aladdin (Avantime?) (MPU4) (set 6)", + "m4amalad__f", "American Aladdin (Avantime?) (MPU4) (set 7)", + "m4amalad__g", "American Aladdin (Avantime?) (MPU4) (set 8)", + "m4amalad__h", "American Aladdin (Avantime?) (MPU4) (set 9)", + "m4amalad__i", "American Aladdin (Avantime?) (MPU4) (set 10)", + "m4amalad__j", "American Aladdin (Avantime?) (MPU4) (set 11)", + "m4amalad__k", "American Aladdin (Avantime?) (MPU4) (set 12)", + "m4amalad__l", "American Aladdin (Avantime?) (MPU4) (set 13)", + "m4amalad__m", "American Aladdin (Avantime?) (MPU4) (set 14)", + "m4amalad__n", "American Aladdin (Avantime?) (MPU4) (set 15)", + "m4ambass", "Ambassador (Barcrest) (DAM, Dutch) (MPU4)", + "m4amhiwy", "American Highway (Barcrest) (MPU4) (DAH)", + "m4andybt", "Andy's Big Time Club (Barcrest) (MPU4) (set 1)", + "m4andybt__a", "Andy's Big Time Club (Barcrest) (MPU4) (set 2)", + "m4andybt__b", "Andy's Big Time Club (Barcrest) (MPU4) (set 3)", + "m4andybt__c", "Andy's Big Time Club (Barcrest) (MPU4) (set 4)", + "m4andycp", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10)", + "m4andycp10_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10, hack?)", + "m4andycp10c", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C)", + "m4andycp10c_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 1)", + "m4andycp10c_b", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 2)", + "m4andycp10c_c", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 3)", + "m4andycp10c_d", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 4)", + "m4andycp10d", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10D)", + "m4andycp10k", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10K)", + "m4andycp10yd", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10YD)", + "m4andycp20", "Andy Capp (Barcrest) (MPU4) (hack?, set 1)", + "m4andycp20_a", "Andy Capp (Barcrest) (MPU4) (hack?, set 2)", + "m4andycp20_b", "Andy Capp (Barcrest) (MPU4) (hack?, set 3)", + "m4andycp8", "Andy Capp (Barcrest) (MPU4) (AM8)", + "m4andycp8ad", "Andy Capp (Barcrest) (MPU4) (AN8 AD)", + "m4andycp8b", "Andy Capp (Barcrest) (MPU4) (AN8 B)", + "m4andycp8c", "Andy Capp (Barcrest) (MPU4) (AN8 C)", + "m4andycp8d", "Andy Capp (Barcrest) (MPU4) (AN8 D)", + "m4andycp8k", "Andy Capp (Barcrest) (MPU4) (AN8 K)", + "m4andycp8kd", "Andy Capp (Barcrest) (MPU4) (AN8 KD)", + "m4andycp8y", "Andy Capp (Barcrest) (MPU4) (AN8 Y)", + "m4andycp8yd", "Andy Capp (Barcrest) (MPU4) (AN8 YD)", + "m4andycpac", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5)", + "m4andycpac_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5, hack?)", + "m4andycpacc", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C)", + "m4andycpacc_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 1)", + "m4andycpacc_b", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 2)", + "m4andycpacc_c", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 3)", + "m4andycpacc_d", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 4)", + "m4andycpacc_e", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 5)", + "m4andycpaccsd", "Andy Capp (Bwb / Barcrest) (MPU4) (ACC5)", + "m4andycpacd", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 D)", + "m4andycpack", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 K)", + "m4andycpacyd", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 YD)", + "m4andycpc2", "Andy Capp (Barcrest) (MPU4) (C2T, set 1)", + "m4andycpc2_a", "Andy Capp (Barcrest) (MPU4) (C2T, set 2)", + "m4andycpc2ad", "Andy Capp (Barcrest) (MPU4) (C2T AD)", + "m4andycpc2b", "Andy Capp (Barcrest) (MPU4) (C2T B)", + "m4andycpc2bd", "Andy Capp (Barcrest) (MPU4) (C2T BD)", + "m4andycpc2d", "Andy Capp (Barcrest) (MPU4) (C2T D)", + "m4andycpc2k", "Andy Capp (Barcrest) (MPU4) (C2T K)", + "m4andycpc2kd", "Andy Capp (Barcrest) (MPU4) (C2T KD)", + "m4andycpc2r", "Andy Capp (Barcrest) (MPU4) (C2T R)", + "m4andycpc2rd", "Andy Capp (Barcrest) (MPU4) (C2T RD)", + "m4andycpc2y", "Andy Capp (Barcrest) (MPU4) (C2T Y)", + "m4andycpc2yd", "Andy Capp (Barcrest) (MPU4) (C2T YD)", + "m4andycpc5", "Andy Capp (Barcrest) (MPU4) (C5T)", + "m4andycpc5ad", "Andy Capp (Barcrest) (MPU4) (C5T AD)", + "m4andycpc5b", "Andy Capp (Barcrest) (MPU4) (C5T B)", + "m4andycpc5bd", "Andy Capp (Barcrest) (MPU4) (C5T BD)", + "m4andycpc5d", "Andy Capp (Barcrest) (MPU4) (C5T D)", + "m4andycpc5k", "Andy Capp (Barcrest) (MPU4) (C5T K)", + "m4andycpc5kd", "Andy Capp (Barcrest) (MPU4) (C5T KD)", + "m4andycpc5y", "Andy Capp (Barcrest) (MPU4) (C5T Y)", + "m4andycpc5yd", "Andy Capp (Barcrest) (MPU4) (C5T YD)", + "m4andycpd", "Andy Capp (Barcrest) (MPU4) (AND)", + "m4andycpdc", "Andy Capp (Barcrest) (MPU4) (AND C)", + "m4andycpdd", "Andy Capp (Barcrest) (MPU4) (AND D)", + "m4andycpdk", "Andy Capp (Barcrest) (MPU4) (AND K)", + "m4andycpdut", "Andy Capp (Barcrest) [DAC 1.3, Dutch] (MPU4)", + "m4andycpdy", "Andy Capp (Barcrest) (MPU4) (AND Y, set 1)", + "m4andycpdy_a", "Andy Capp (Barcrest) (MPU4) (AND Y, set 2)", + "m4andycpdyd", "Andy Capp (Barcrest) (MPU4) (AND YD)", + "m4andyfh", "Andy's Full House (Barcrest) (MPU4) (set 1)", + "m4andyfh__0", "Andy's Full House (Barcrest) (MPU4) (set 28)", + "m4andyfh__1", "Andy's Full House (Barcrest) (MPU4) (set 29)", + "m4andyfh__2", "Andy's Full House (Barcrest) (MPU4) (set 30)", + "m4andyfh__3", "Andy's Full House (Barcrest) (MPU4) (set 31)", + "m4andyfh__4", "Andy's Full House (Barcrest) (MPU4) (set 32)", + "m4andyfh__5", "Andy's Full House (Barcrest) (MPU4) (set 33)", + "m4andyfh__6", "Andy's Full House (Barcrest) (MPU4) (set 34)", + "m4andyfh__7", "Andy's Full House (Barcrest) (MPU4) (set 35)", + "m4andyfh__8", "Andy's Full House (Barcrest) (MPU4) (set 36)", + "m4andyfh__9", "Andy's Full House (Barcrest) (MPU4) (set 37)", + "m4andyfh__a", "Andy's Full House (Barcrest) (MPU4) (set 2)", + "m4andyfh__a0", "Andy's Full House (Barcrest) (MPU4) (set 64)", + "m4andyfh__a1", "Andy's Full House (Barcrest) (MPU4) (set 65)", + "m4andyfh__a2", "Andy's Full House (Barcrest) (MPU4) (set 66)", + "m4andyfh__a3", "Andy's Full House (Barcrest) (MPU4) (set 67)", + "m4andyfh__a4", "Andy's Full House (Barcrest) (MPU4) (set 68)", + "m4andyfh__aa", "Andy's Full House (Barcrest) (MPU4) (set 38)", + "m4andyfh__ab", "Andy's Full House (Barcrest) (MPU4) (set 39)", + "m4andyfh__ac", "Andy's Full House (Barcrest) (MPU4) (set 40)", + "m4andyfh__ad", "Andy's Full House (Barcrest) (MPU4) (set 41)", + "m4andyfh__ae", "Andy's Full House (Barcrest) (MPU4) (set 42)", + "m4andyfh__af", "Andy's Full House (Barcrest) (MPU4) (set 43)", + "m4andyfh__ag", "Andy's Full House (Barcrest) (MPU4) (set 44)", + "m4andyfh__ah", "Andy's Full House (Barcrest) (MPU4) (set 45)", + "m4andyfh__ai", "Andy's Full House (Barcrest) (MPU4) (set 46)", + "m4andyfh__aj", "Andy's Full House (Barcrest) (MPU4) (set 47)", + "m4andyfh__ak", "Andy's Full House (Barcrest) (MPU4) (set 48)", + "m4andyfh__al", "Andy's Full House (Barcrest) (MPU4) (set 49)", + "m4andyfh__am", "Andy's Full House (Barcrest) (MPU4) (set 50)", + "m4andyfh__an", "Andy's Full House (Barcrest) (MPU4) (set 51)", + "m4andyfh__ao", "Andy's Full House (Barcrest) (MPU4) (set 52)", + "m4andyfh__ap", "Andy's Full House (Barcrest) (MPU4) (set 53)", + "m4andyfh__aq", "Andy's Full House (Barcrest) (MPU4) (set 54)", + "m4andyfh__ar", "Andy's Full House (Barcrest) (MPU4) (set 55)", + "m4andyfh__as", "Andy's Full House (Barcrest) (MPU4) (set 56)", + "m4andyfh__at", "Andy's Full House (Barcrest) (MPU4) (set 57)", + "m4andyfh__au", "Andy's Full House (Barcrest) (MPU4) (set 58)", + "m4andyfh__av", "Andy's Full House (Barcrest) (MPU4) (set 59)", + "m4andyfh__aw", "Andy's Full House (Barcrest) (MPU4) (set 60)", + "m4andyfh__ax", "Andy's Full House (Barcrest) (MPU4) (set 61)", + "m4andyfh__ay", "Andy's Full House (Barcrest) (MPU4) (set 62)", + "m4andyfh__az", "Andy's Full House (Barcrest) (MPU4) (set 63)", + "m4andyfh__b", "Andy's Full House (Barcrest) (MPU4) (set 3)", + "m4andyfh__c", "Andy's Full House (Barcrest) (MPU4) (set 4)", + "m4andyfh__d", "Andy's Full House (Barcrest) (MPU4) (set 5)", + "m4andyfh__e", "Andy's Full House (Barcrest) (MPU4) (set 6)", + "m4andyfh__f", "Andy's Full House (Barcrest) (MPU4) (set 7)", + "m4andyfh__g", "Andy's Full House (Barcrest) (MPU4) (set 8)", + "m4andyfh__h", "Andy's Full House (Barcrest) (MPU4) (set 9)", + "m4andyfh__i", "Andy's Full House (Barcrest) (MPU4) (set 10)", + "m4andyfh__j", "Andy's Full House (Barcrest) (MPU4) (set 11)", + "m4andyfh__k", "Andy's Full House (Barcrest) (MPU4) (set 12)", + "m4andyfh__l", "Andy's Full House (Barcrest) (MPU4) (set 13)", + "m4andyfh__m", "Andy's Full House (Barcrest) (MPU4) (set 14)", + "m4andyfh__n", "Andy's Full House (Barcrest) (MPU4) (set 15)", + "m4andyfh__o", "Andy's Full House (Barcrest) (MPU4) (set 16)", + "m4andyfh__p", "Andy's Full House (Barcrest) (MPU4) (set 17)", + "m4andyfh__q", "Andy's Full House (Barcrest) (MPU4) (set 18)", + "m4andyfh__r", "Andy's Full House (Barcrest) (MPU4) (set 19)", + "m4andyfh__s", "Andy's Full House (Barcrest) (MPU4) (set 20)", + "m4andyfh__t", "Andy's Full House (Barcrest) (MPU4) (set 21)", + "m4andyfh__u", "Andy's Full House (Barcrest) (MPU4) (set 22)", + "m4andyfh__v", "Andy's Full House (Barcrest) (MPU4) (set 23)", + "m4andyfh__w", "Andy's Full House (Barcrest) (MPU4) (set 24)", + "m4andyfh__x", "Andy's Full House (Barcrest) (MPU4) (set 25)", + "m4andyfh__y", "Andy's Full House (Barcrest) (MPU4) (set 26)", + "m4andyfh__z", "Andy's Full House (Barcrest) (MPU4) (set 27)", + "m4andyfl", "Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL4 2.1KS)", + "m4andyfl3", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1)", + "m4andyfl3ad", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1AD)", + "m4andyfl3b", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1B)", + "m4andyfl3bd", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1BD)", + "m4andyfl3d", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1D)", + "m4andyfl3k", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1K)", + "m4andyfl3kd", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1KD)", + "m4andyfl3y", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1Y)", + "m4andyfl3yd", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1YD)", + "m4andyfl8", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1)", + "m4andyfl8ad", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1AD)", + "m4andyfl8b", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1B)", + "m4andyfl8bd", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1BD)", + "m4andyfl8bs", "Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL_ 2.4KS)", + "m4andyfl8c", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1C)", + "m4andyfl8d", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1D)", + "m4andyfl8k", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1K)", + "m4andyfl8kd", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1KD)", + "m4andyfl8y", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1Y)", + "m4andyflf", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0)", + "m4andyflfb", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0B)", + "m4andyflfc", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0C)", + "m4andyflfk", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0K)", + "m4andyflfr", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0R)", + "m4andyflt", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4)", + "m4andyfltad", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4AD)", + "m4andyfltb", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4B)", + "m4andyfltbd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4BD)", + "m4andyfltd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4D)", + "m4andyfltk", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4K)", + "m4andyfltkd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4KD)", + "m4andyfltr", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4R)", + "m4andyfltrd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4RD)", + "m4andyflty", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4Y)", + "m4andyfltyd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4YD)", + "m4andyflu", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3)", + "m4andyfluad", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3AD)", + "m4andyflub", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3B)", + "m4andyflubd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3BD)", + "m4andyflud", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3D)", + "m4andyfluk", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3K)", + "m4andyflukd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3KD)", + "m4andyflur", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3R)", + "m4andyflurd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3RD)", + "m4andyfluy", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3Y)", + "m4andyfluyd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3YD)", + "m4andyge", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3, set 1)", + "m4andyge28", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1)", + "m4andyge28ad", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1AD)", + "m4andyge28b", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1B)", + "m4andyge28bd", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1BD)", + "m4andyge28c", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1C)", + "m4andyge28d", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1D)", + "m4andyge28k", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1K)", + "m4andyge28kd", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1KD)", + "m4andyge28y", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1Y)", + "m4andyge28yd", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1YD)", + "m4andyge2t", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1)", + "m4andyge2tad", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1AD)", + "m4andyge2tb", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1B)", + "m4andyge2tbd", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1BD)", + "m4andyge2td", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1D)", + "m4andyge2tk", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1K)", + "m4andyge2tkd", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1KD)", + "m4andyge2ty", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1Y)", + "m4andyge2tyd", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1YD)", + "m4andyge5t", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1)", + "m4andyge5tad", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1AD)", + "m4andyge5tb", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1B)", + "m4andyge5tbd", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1BD)", + "m4andyge5td", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1D)", + "m4andyge5tk", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1K)", + "m4andyge5tkd", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1KD)", + "m4andyge5ty", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1Y)", + "m4andyge5tyd", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1YD)", + "m4andyge_h1", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 1)", + "m4andyge_h2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 2)", + "m4andyge_h3", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 1)", + "m4andyge_h4", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 2)", + "m4andyge_hx1", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 1)", + "m4andyge_hx2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 2)", + "m4andyge_hx3", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 3)", + "m4andyge_hx4", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 4)", + "m4andyge_hx5", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0CX, hack?)", + "m4andygeg5", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0)", + "m4andygeg5a", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0A)", + "m4andygeg5c", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0C)", + "m4andygeg5d", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0D)", + "m4andygeg5k", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0K)", + "m4andygeg5yd", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0YD)", + "m4andygeg_2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0)", + "m4andygeg_2c", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0C)", + "m4andygeg_2d", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0D)", + "m4andygeg_2k", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0K)", + "m4andygeg_2yd", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0YD)", + "m4andygegc2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0)", + "m4andygegc2d", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0D)", + "m4andygen2_a", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3, set 2)", + "m4andygen2c", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3C)", + "m4andygen2d", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3D)", + "m4andygen2k", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3K)", + "m4andygen2y", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3Y)", + "m4apach", "Apache (Barcrest) (MPU4 w/ Plasma DMD?)", + "m4apachg", "Apache Gold (Empire) (MPU4, set 1)", + "m4apachga", "Apache Gold (Empire) (MPU4, set 2)", + "m4apachgb", "Apache Gold (Empire) (MPU4, set 3)", + "m4apachgc", "Apache Gold (Empire) (MPU4, set 4)", + "m4apachgd", "Apache Gold (Empire) (MPU4, set 5)", + "m4apachge", "Apache Gold (Empire) (MPU4, set 6)", + "m4apachgf", "Apache Gold (Empire) (MPU4, set 7)", + "m4atlan", "Atlantis (Barcrest) (DAT, Dutch) (MPU4)", + "m4bagcsh", "Bags Of Cash Club (Crystal) (MPU4) (set 1)", + "m4bagcsha", "Bags Of Cash Club (Crystal) (MPU4) (set 2)", + "m4bagtel", "Bagatelle (Barcrest) (MPU4) (set 1)", + "m4bagtel__0", "Bagatelle (Barcrest) (MPU4) (set 28)", + "m4bagtel__1", "Bagatelle (Barcrest) (MPU4) (set 29)", + "m4bagtel__2", "Bagatelle (Barcrest) (MPU4) (set 30)", + "m4bagtel__3", "Bagatelle (Barcrest) (MPU4) (set 31)", + "m4bagtel__4", "Bagatelle (Barcrest) (MPU4) (set 32)", + "m4bagtel__5", "Bagatelle (Barcrest) (MPU4) (set 33)", + "m4bagtel__6", "Bagatelle (Barcrest) (MPU4) (set 34)", + "m4bagtel__7", "Bagatelle (Barcrest) (MPU4) (set 35)", + "m4bagtel__8", "Bagatelle (Barcrest) (MPU4) (set 36)", + "m4bagtel__9", "Bagatelle (Barcrest) (MPU4) (set 37)", + "m4bagtel__a", "Bagatelle (Barcrest) (MPU4) (set 2)", + "m4bagtel__aa", "Bagatelle (Barcrest) (MPU4) (set 38)", + "m4bagtel__ab", "Bagatelle (Barcrest) (MPU4) (set 39)", + "m4bagtel__ac", "Bagatelle (Barcrest) (MPU4) (set 40)", + "m4bagtel__ad", "Bagatelle (Barcrest) (MPU4) (set 41)", + "m4bagtel__ae", "Bagatelle (Barcrest) (MPU4) (set 42)", + "m4bagtel__af", "Bagatelle (Barcrest) (MPU4) (set 43)", + "m4bagtel__ag", "Bagatelle (Barcrest) (MPU4) (set 45)", + "m4bagtel__b", "Bagatelle (Barcrest) (MPU4) (set 3)", + "m4bagtel__c", "Bagatelle (Barcrest) (MPU4) (set 4)", + "m4bagtel__d", "Bagatelle (Barcrest) (MPU4) (set 5)", + "m4bagtel__e", "Bagatelle (Barcrest) (MPU4) (set 6)", + "m4bagtel__f", "Bagatelle (Barcrest) (MPU4) (set 7)", + "m4bagtel__g", "Bagatelle (Barcrest) (MPU4) (set 8)", + "m4bagtel__h", "Bagatelle (Barcrest) (MPU4) (set 9)", + "m4bagtel__i", "Bagatelle (Barcrest) (MPU4) (set 10)", + "m4bagtel__j", "Bagatelle (Barcrest) (MPU4) (set 11)", + "m4bagtel__k", "Bagatelle (Barcrest) (MPU4) (set 12)", + "m4bagtel__l", "Bagatelle (Barcrest) (MPU4) (set 13)", + "m4bagtel__m", "Bagatelle (Barcrest) (MPU4) (set 14)", + "m4bagtel__n", "Bagatelle (Barcrest) (MPU4) (set 15)", + "m4bagtel__o", "Bagatelle (Barcrest) (MPU4) (set 16)", + "m4bagtel__p", "Bagatelle (Barcrest) (MPU4) (set 17)", + "m4bagtel__q", "Bagatelle (Barcrest) (MPU4) (set 18)", + "m4bagtel__r", "Bagatelle (Barcrest) (MPU4) (set 19)", + "m4bagtel__s", "Bagatelle (Barcrest) (MPU4) (set 20)", + "m4bagtel__t", "Bagatelle (Barcrest) (MPU4) (set 21)", + "m4bagtel__u", "Bagatelle (Barcrest) (MPU4) (set 22)", + "m4bagtel__v", "Bagatelle (Barcrest) (MPU4) (set 23)", + "m4bagtel__w", "Bagatelle (Barcrest) (MPU4) (set 24)", + "m4bagtel__x", "Bagatelle (Barcrest) (MPU4) (set 25)", + "m4bagtel__y", "Bagatelle (Barcrest) (MPU4) (set 26)", + "m4bagtel__z", "Bagatelle (Barcrest) (MPU4) (set 27)", + "m4bandgd", "Bands Of Gold (Eurogames) (MPU4)", + "m4bangin", "Bangin' Away (Global) (MPU4, set 1)", + "m4bangina", "Bangin' Away (Global) (MPU4, set 2)", + "m4banginb", "Bangin' Away (Global) (MPU4, set 3)", + "m4bangrs", "Bangers 'n' Cash (Empire) (MPU4, set 1)", + "m4bangrsa", "Bangers 'n' Cash (Empire) (MPU4, set 2)", + "m4bangrsb", "Bangers 'n' Cash (Empire) (MPU4, set 3)", + "m4bankrd", "Bank Raid (Empire) (MPU4, set 1)", + "m4bankrda", "Bank Raid (Empire) (MPU4, set 2)", + "m4bankrdb", "Bank Raid (Empire) (MPU4, set 3)", + "m4bankrdc", "Bank Raid (Empire) (MPU4, set 4)", + "m4bankrdd", "Bank Raid (Empire) (MPU4, set 5)", + "m4barcrz", "Bar Crazy (unknown) (MPU4?)", + "m4bben", "Big Ben (Avantime?) (MPU4) (set 1)", + "m4bben__a", "Big Ben (Avantime?) (MPU4) (set 2)", + "m4bben__b", "Big Ben (Avantime?) (MPU4) (set 3)", + "m4bben__c", "Big Ben (Avantime?) (MPU4) (set 4)", + "m4bben__d", "Big Ben (Avantime?) (MPU4) (set 5)", + "m4bben__e", "Big Ben (Avantime?) (MPU4) (set 6)", + "m4bben__f", "Big Ben (Avantime?) (MPU4) (set 7)", + "m4bben__g", "Big Ben (Avantime?) (MPU4) (set 8)", + "m4bben__h", "Big Ben (Avantime?) (MPU4) (set 9)", + "m4bben__i", "Big Ben (Avantime?) (MPU4) (set 10)", + "m4bbox", "Brain Box (Avantime?) (MPU4) (set 1)", + "m4bbox__a", "Brain Box (Avantime?) (MPU4) (set 2)", + "m4bbox__b", "Brain Box (Avantime?) (MPU4) (set 3)", + "m4bbox__c", "Brain Box (Avantime?) (MPU4) (set 4)", + "m4bbox__d", "Brain Box (Avantime?) (MPU4) (set 5)", + "m4bbox__e", "Brain Box (Avantime?) (MPU4) (set 6)", + "m4bbox__f", "Brain Box (Avantime?) (MPU4) (set 7)", + "m4bbox__g", "Brain Box (Avantime?) (MPU4) (set 8)", + "m4bbox__h", "Brain Box (Avantime?) (MPU4) (set 9)", + "m4bbox__i", "Brain Box (Avantime?) (MPU4) (set 10)", + "m4bclimb", "Bear Climber (MPU4?)", + "m4bdash", "Boulder Dash (Barcrest) (MPU4) (set 1)", + "m4bdash__0", "Boulder Dash (Barcrest) (MPU4) (set 28)", + "m4bdash__1", "Boulder Dash (Barcrest) (MPU4) (set 29)", + "m4bdash__2", "Boulder Dash (Barcrest) (MPU4) (set 30)", + "m4bdash__3", "Boulder Dash (Barcrest) (MPU4) (set 31)", + "m4bdash__4", "Boulder Dash (Barcrest) (MPU4) (set 32)", + "m4bdash__5", "Boulder Dash (Barcrest) (MPU4) (set 33)", + "m4bdash__6", "Boulder Dash (Barcrest) (MPU4) (set 34)", + "m4bdash__7", "Boulder Dash (Barcrest) (MPU4) (set 35)", + "m4bdash__8", "Boulder Dash (Barcrest) (MPU4) (set 36)", + "m4bdash__9", "Boulder Dash (Barcrest) (MPU4) (set 37)", + "m4bdash__a", "Boulder Dash (Barcrest) (MPU4) (set 2)", + "m4bdash__a0", "Boulder Dash (Barcrest) (MPU4) (set 64)", + "m4bdash__a1", "Boulder Dash (Barcrest) (MPU4) (set 65)", + "m4bdash__a2", "Boulder Dash (Barcrest) (MPU4) (set 66)", + "m4bdash__a3", "Boulder Dash (Barcrest) (MPU4) (set 67)", + "m4bdash__a4", "Boulder Dash (Barcrest) (MPU4) (set 68)", + "m4bdash__aa", "Boulder Dash (Barcrest) (MPU4) (set 38)", + "m4bdash__ab", "Boulder Dash (Barcrest) (MPU4) (set 39)", + "m4bdash__ac", "Boulder Dash (Barcrest) (MPU4) (set 40)", + "m4bdash__ad", "Boulder Dash (Barcrest) (MPU4) (set 41)", + "m4bdash__ae", "Boulder Dash (Barcrest) (MPU4) (set 42)", + "m4bdash__af", "Boulder Dash (Barcrest) (MPU4) (set 43)", + "m4bdash__ag", "Boulder Dash (Barcrest) (MPU4) (set 44)", + "m4bdash__ah", "Boulder Dash (Barcrest) (MPU4) (set 45)", + "m4bdash__ai", "Boulder Dash (Barcrest) (MPU4) (set 46)", + "m4bdash__aj", "Boulder Dash (Barcrest) (MPU4) (set 47)", + "m4bdash__ak", "Boulder Dash (Barcrest) (MPU4) (set 48)", + "m4bdash__al", "Boulder Dash (Barcrest) (MPU4) (set 49)", + "m4bdash__am", "Boulder Dash (Barcrest) (MPU4) (set 50)", + "m4bdash__an", "Boulder Dash (Barcrest) (MPU4) (set 51)", + "m4bdash__ao", "Boulder Dash (Barcrest) (MPU4) (set 52)", + "m4bdash__ap", "Boulder Dash (Barcrest) (MPU4) (set 53)", + "m4bdash__aq", "Boulder Dash (Barcrest) (MPU4) (set 54)", + "m4bdash__ar", "Boulder Dash (Barcrest) (MPU4) (set 55)", + "m4bdash__as", "Boulder Dash (Barcrest) (MPU4) (set 56)", + "m4bdash__at", "Boulder Dash (Barcrest) (MPU4) (set 57)", + "m4bdash__au", "Boulder Dash (Barcrest) (MPU4) (set 58)", + "m4bdash__av", "Boulder Dash (Barcrest) (MPU4) (set 59)", + "m4bdash__aw", "Boulder Dash (Barcrest) (MPU4) (set 60)", + "m4bdash__ax", "Boulder Dash (Barcrest) (MPU4) (set 61)", + "m4bdash__ay", "Boulder Dash (Barcrest) (MPU4) (set 62)", + "m4bdash__az", "Boulder Dash (Barcrest) (MPU4) (set 63)", + "m4bdash__b", "Boulder Dash (Barcrest) (MPU4) (set 3)", + "m4bdash__c", "Boulder Dash (Barcrest) (MPU4) (set 4)", + "m4bdash__d", "Boulder Dash (Barcrest) (MPU4) (set 5)", + "m4bdash__e", "Boulder Dash (Barcrest) (MPU4) (set 6)", + "m4bdash__f", "Boulder Dash (Barcrest) (MPU4) (set 7)", + "m4bdash__g", "Boulder Dash (Barcrest) (MPU4) (set 8)", + "m4bdash__h", "Boulder Dash (Barcrest) (MPU4) (set 9)", + "m4bdash__i", "Boulder Dash (Barcrest) (MPU4) (set 10)", + "m4bdash__j", "Boulder Dash (Barcrest) (MPU4) (set 11)", + "m4bdash__k", "Boulder Dash (Barcrest) (MPU4) (set 12)", + "m4bdash__l", "Boulder Dash (Barcrest) (MPU4) (set 13)", + "m4bdash__m", "Boulder Dash (Barcrest) (MPU4) (set 14)", + "m4bdash__n", "Boulder Dash (Barcrest) (MPU4) (set 15)", + "m4bdash__o", "Boulder Dash (Barcrest) (MPU4) (set 16)", + "m4bdash__p", "Boulder Dash (Barcrest) (MPU4) (set 17)", + "m4bdash__q", "Boulder Dash (Barcrest) (MPU4) (set 18)", + "m4bdash__r", "Boulder Dash (Barcrest) (MPU4) (set 19)", + "m4bdash__s", "Boulder Dash (Barcrest) (MPU4) (set 20)", + "m4bdash__t", "Boulder Dash (Barcrest) (MPU4) (set 21)", + "m4bdash__u", "Boulder Dash (Barcrest) (MPU4) (set 22)", + "m4bdash__v", "Boulder Dash (Barcrest) (MPU4) (set 23)", + "m4bdash__w", "Boulder Dash (Barcrest) (MPU4) (set 24)", + "m4bdash__x", "Boulder Dash (Barcrest) (MPU4) (set 25)", + "m4bdash__y", "Boulder Dash (Barcrest) (MPU4) (set 26)", + "m4bdash__z", "Boulder Dash (Barcrest) (MPU4) (set 27)", + "m4berser", "Berserk (Barcrest) (MPU4) (set 1)", + "m4berser__0", "Berserk (Barcrest) (MPU4) (set 28)", + "m4berser__1", "Berserk (Barcrest) (MPU4) (set 29)", + "m4berser__a", "Berserk (Barcrest) (MPU4) (set 2)", + "m4berser__b", "Berserk (Barcrest) (MPU4) (set 3)", + "m4berser__c", "Berserk (Barcrest) (MPU4) (set 4)", + "m4berser__d", "Berserk (Barcrest) (MPU4) (set 5)", + "m4berser__e", "Berserk (Barcrest) (MPU4) (set 6)", + "m4berser__f", "Berserk (Barcrest) (MPU4) (set 7)", + "m4berser__g", "Berserk (Barcrest) (MPU4) (set 8)", + "m4berser__h", "Berserk (Barcrest) (MPU4) (set 9)", + "m4berser__i", "Berserk (Barcrest) (MPU4) (set 10)", + "m4berser__j", "Berserk (Barcrest) (MPU4) (set 11)", + "m4berser__k", "Berserk (Barcrest) (MPU4) (set 12)", + "m4berser__l", "Berserk (Barcrest) (MPU4) (set 13)", + "m4berser__m", "Berserk (Barcrest) (MPU4) (set 14)", + "m4berser__n", "Berserk (Barcrest) (MPU4) (set 15)", + "m4berser__o", "Berserk (Barcrest) (MPU4) (set 16)", + "m4berser__p", "Berserk (Barcrest) (MPU4) (set 17)", + "m4berser__q", "Berserk (Barcrest) (MPU4) (set 18)", + "m4berser__r", "Berserk (Barcrest) (MPU4) (set 19)", + "m4berser__s", "Berserk (Barcrest) (MPU4) (set 20)", + "m4berser__t", "Berserk (Barcrest) (MPU4) (set 21)", + "m4berser__u", "Berserk (Barcrest) (MPU4) (set 22)", + "m4berser__v", "Berserk (Barcrest) (MPU4) (set 23)", + "m4berser__w", "Berserk (Barcrest) (MPU4) (set 24)", + "m4berser__x", "Berserk (Barcrest) (MPU4) (set 25)", + "m4berser__y", "Berserk (Barcrest) (MPU4) (set 26)", + "m4berser__z", "Berserk (Barcrest) (MPU4) (set 27)", + "m4bigapl", "The Big Apple (Mdm) (MPU4, set 1)", + "m4bigapla", "The Big Apple (Mdm) (MPU4, set 2)", + "m4bigaplb", "The Big Apple (Mdm) (MPU4, set 3)", + "m4bigaplc", "The Big Apple (Mdm) (MPU4, set 4)", + "m4bigapld", "The Big Apple (Mdm) (MPU4, set 5)", + "m4bigaple", "The Big Apple (Mdm) (MPU4, set 6)", + "m4bigban", "Big Bandit (Nova) (MPU4)", + "m4bigben", "Big Ben (Coinworld) (MPU4, set 1)", + "m4bigbena", "Big Ben (Coinworld) (MPU4, set 2)", + "m4bigbenb", "Big Ben (Coinworld) (MPU4, set 3)", + "m4bigbend", "Big Ben (Coinworld) (MPU4, set 4)", + "m4bigbene", "Big Ben (Coinworld) (MPU4, set 5)", + "m4bigbn", "Big Ben (Barcrest) (DBB, Dutch) (MPU4)", + "m4bigchd", "Big Chief (Barcrest) [BCH, Dutch] (MPU4)", + "m4bigchf", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 1)", + "m4bigchfa", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 2)", + "m4bigchfb", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 3)", + "m4bigchfc", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 4)", + "m4bigchs", "Big Cheese (Empire) (MPU4, set 1)", + "m4bigchsa", "Big Cheese (Empire) (MPU4, set 2)", + "m4bigchsb", "Big Cheese (Empire) (MPU4, set 3)", + "m4bigmt", "The Big Match (Bwb) (MPU4) (set 1)", + "m4bigmt__a", "The Big Match (Bwb) (MPU4) (set 2)", + "m4bigmt__b", "The Big Match (Bwb) (MPU4) (set 3)", + "m4bigmt__c", "The Big Match (Bwb) (MPU4) (set 4)", + "m4bigmt__d", "The Big Match (Bwb) (MPU4) (set 5)", + "m4bigmt__e", "The Big Match (Bwb) (MPU4) (set 6)", + "m4bigmt__f", "The Big Match (Bwb) (MPU4) (set 7)", + "m4bingbl", "Bingo Belle (Bwb) (MPU4) (set 1)", + "m4bingbl__a", "Bingo Belle (Bwb) (MPU4) (set 2)", + "m4bingbl__b", "Bingo Belle (Bwb) (MPU4) (set 3)", + "m4bingbl__c", "Bingo Belle (Bwb) (MPU4) (set 4)", + "m4bingbl__d", "Bingo Belle (Bwb) (MPU4) (set 5)", + "m4bingbl__e", "Bingo Belle (Bwb) (MPU4) (set 6)", + "m4bingbl__f", "Bingo Belle (Bwb) (MPU4) (set 7)", + "m4bingbl__g", "Bingo Belle (Bwb) (MPU4) (set 8)", + "m4bingbs", "Bingo Belle Showcase (Bwb) (MPU4) (set 1)", + "m4bingbs__a", "Bingo Belle Showcase (Bwb) (MPU4) (set 2)", + "m4bingbs__b", "Bingo Belle Showcase (Bwb) (MPU4) (set 3)", + "m4bingbs__c", "Bingo Belle Showcase (Bwb) (MPU4) (set 4)", + "m4bingbs__d", "Bingo Belle Showcase (Bwb) (MPU4) (set 5)", + "m4bingbs__e", "Bingo Belle Showcase (Bwb) (MPU4) (set 6)", + "m4bingbs__f", "Bingo Belle Showcase (Bwb) (MPU4) (set 7)", + "m4bingcl", "Bingo Club (Bwb) (MPU4) (set 1)", + "m4bingcl__a", "Bingo Club (Bwb) (MPU4) (set 2)", + "m4bingcl__b", "Bingo Club (Bwb) (MPU4) (set 3)", + "m4bj", "Black Jack (Barcrest) [Dutch] (MPU4)", + "m4bjac", "Blackjack Club (Barcrest) (MPU4) (set 1)", + "m4bjaca", "Blackjack Club (Barcrest) (MPU4) (set 2)", + "m4bjack", "Black Jack (Barcrest) (MPU4) (set 1)", + "m4bjacka", "Black Jack (Barcrest) (MPU4) (set 2)", + "m4bjc", "Black Jack Club (Barcrest) (Dutch) (MPU4)", + "m4bjsm", "Blackjack Super Multi (Barcrest) (MPU4) (SM H)", + "m4bjsma", "Blackjack Super Multi (Barcrest) (MPU4)", + "m4blflsh", "Blue Flash (Bwb) (MPU4) (set 1)", + "m4blflsha", "Blue Flash (Bwb) (MPU4) (set 2)", + "m4blflshb", "Blue Flash (Bwb) (MPU4) (set 3)", + "m4blflshc", "Blue Flash (Bwb) (MPU4) (set 4)", + "m4blflshd", "Blue Flash (Bwb) (MPU4) (set 5)", + "m4blflshe", "Blue Flash (Bwb) (MPU4) (set 6)", + "m4blkbul", "Super Play (Black Bull?) (Czech) (Barcrest) [XSP] (MPU4)", + "m4blkbuld", "Gun Smoke (Barcrest) (Dutch, alt sound roms) (MPU4)", + "m4blkcat", "Black Cat (Barcrest) (Dutch) (MPU4) (DBL 1.4)", + "m4blkgd", "Black Gold (Gemini) (MPU4) (set 1)", + "m4blkgda", "Black Gold (Gemini) (MPU4) (set 2)", + "m4blkmgc", "Black Magic (Avantime?) (MPU4) (Latvia, set 1)", + "m4blkmgc_1", "Black Magic (Avantime?) (MPU4) (Latvia, set 2)", + "m4blkmgc_u1", "Black Magic (Avantime?) (MPU4) (Ukraine, set 1)", + "m4blkmgc_u2", "Black Magic (Avantime?) (MPU4) (Ukraine, set 2)", + "m4blkmgc_u3", "Black Magic (Avantime?) (MPU4) (Ukraine, set 3)", + "m4blkmgc_u4", "Black Magic (Avantime?) (MPU4) (Ukraine, set 4)", + "m4blkmgc_u5", "Black Magic (Avantime?) (MPU4) (Ukraine, set 5)", + "m4blkmgc_u6", "Black Magic (Avantime?) (MPU4) (Ukraine, set 6)", + "m4blkwhd", "Black & White (Barcrest) [Dutch] (MPU4) (DBW 1.1)", + "m4blsbys", "Blues Boys (Bwb) (MPU4) (set 1)", + "m4blsbys__0", "Blues Boys (Bwb) (MPU4) (set 28)", + "m4blsbys__1", "Blues Boys (Bwb) (MPU4) (set 29)", + "m4blsbys__2", "Blues Boys (Bwb) (MPU4) (set 30)", + "m4blsbys__3", "Blues Boys (Bwb) (MPU4) (set 31)", + "m4blsbys__4", "Blues Boys (Bwb) (MPU4) (set 32)", + "m4blsbys__5", "Blues Boys (Bwb) (MPU4) (set 33)", + "m4blsbys__6", "Blues Boys (Bwb) (MPU4) (set 34)", + "m4blsbys__7", "Blues Boys (Bwb) (MPU4) (set 35)", + "m4blsbys__8", "Blues Boys (Bwb) (MPU4) (set 36)", + "m4blsbys__9", "Blues Boys (Bwb) (MPU4) (set 37)", + "m4blsbys__a", "Blues Boys (Bwb) (MPU4) (set 2)", + "m4blsbys__aa", "Blues Boys (Bwb) (MPU4) (set 38)", + "m4blsbys__ab", "Blues Boys (Bwb) (MPU4) (set 39)", + "m4blsbys__ac", "Blues Boys (Bwb) (MPU4) (set 40)", + "m4blsbys__ad", "Blues Boys (Bwb) (MPU4) (set 41)", + "m4blsbys__b", "Blues Boys (Bwb) (MPU4) (set 3)", + "m4blsbys__c", "Blues Boys (Bwb) (MPU4) (set 4)", + "m4blsbys__d", "Blues Boys (Bwb) (MPU4) (set 5)", + "m4blsbys__e", "Blues Boys (Bwb) (MPU4) (set 6)", + "m4blsbys__f", "Blues Boys (Bwb) (MPU4) (set 7)", + "m4blsbys__g", "Blues Boys (Bwb) (MPU4) (set 8)", + "m4blsbys__h", "Blues Boys (Bwb) (MPU4) (set 9)", + "m4blsbys__i", "Blues Boys (Bwb) (MPU4) (set 10)", + "m4blsbys__j", "Blues Boys (Bwb) (MPU4) (set 11)", + "m4blsbys__k", "Blues Boys (Bwb) (MPU4) (set 12)", + "m4blsbys__l", "Blues Boys (Bwb) (MPU4) (set 13)", + "m4blsbys__m", "Blues Boys (Bwb) (MPU4) (set 14)", + "m4blsbys__n", "Blues Boys (Bwb) (MPU4) (set 15)", + "m4blsbys__o", "Blues Boys (Bwb) (MPU4) (set 16)", + "m4blsbys__p", "Blues Boys (Bwb) (MPU4) (set 17)", + "m4blsbys__q", "Blues Boys (Bwb) (MPU4) (set 18)", + "m4blsbys__r", "Blues Boys (Bwb) (MPU4) (set 19)", + "m4blsbys__s", "Blues Boys (Bwb) (MPU4) (set 20)", + "m4blsbys__t", "Blues Boys (Bwb) (MPU4) (set 21)", + "m4blsbys__u", "Blues Boys (Bwb) (MPU4) (set 22)", + "m4blsbys__v", "Blues Boys (Bwb) (MPU4) (set 23)", + "m4blsbys__w", "Blues Boys (Bwb) (MPU4) (set 24)", + "m4blsbys__x", "Blues Boys (Bwb) (MPU4) (set 25)", + "m4blsbys__y", "Blues Boys (Bwb) (MPU4) (set 26)", + "m4blsbys__z", "Blues Boys (Bwb) (MPU4) (set 27)", + "m4blstbk", "Blast A Bank (Barcrest) (MPU4)", + "m4bluedm", "Blue Diamond (Barcrest) (MPU4) (DBD1.0)", + "m4bluemn", "Blue Moon (Barcrest) (MPU4) (BLU 2.3)", + "m4bluemna", "Blue Moon (Barcrest) (MPU4) (BLU 2.1)", + "m4bluemnb", "Blue Moon (Barcrest) (MPU4) (BLU 1.1)", + "m4bluesn", "Blues Boys (Nova) (MPU4)", + "m4blztrl", "Blazing Trails (Mdm) (MPU4, set 1)", + "m4blztrla", "Blazing Trails (Mdm) (MPU4, set 2)", + "m4bnknot", "Bank A Note (Barcrest) [BN 1.0] (MPU4)", + "m4bnkrol", "Bank Roller Club (Barcrest) (MPU4) (set 1)", + "m4bnkrol__a", "Bank Roller Club (Barcrest) (MPU4) (set 2)", + "m4bnkrol__b", "Bank Roller Club (Barcrest) (MPU4) (set 3)", + "m4bnkrol__c", "Bank Roller Club (Barcrest) (MPU4) (set 4)", + "m4bnkrol__d", "Bank Roller Club (Barcrest) (MPU4) (set 5)", + "m4bnkrol__e", "Bank Roller Club (Barcrest) (MPU4) (set 6)", + "m4bodymt", "Body Match (Mdm) (MPU4)", + "m4boltbl", "Bolt From The Blue (DJE) (MPU4, set 1)", + "m4boltbla", "Bolt From The Blue (DJE) (MPU4, set 2)", + "m4boltblb", "Bolt From The Blue (DJE) (MPU4, set 3)", + "m4boltblc", "Bolt From The Blue (DJE) (MPU4, set 4)", + "m4bonzbn", "Bingo Bonanza (unknown) (MPU4?)", + "m4booze", "Booze Cruise (Extreme) (MPU4)", + "m4brdway", "Broadway (Barcrest) (DBR, Dutch) (MPU4)", + "m4brktak", "Break & Take (Barcrest) (MPU4)", + "m4brnze", "Bronze Voyage (unknown) (MPU4) (set 1)", + "m4brnzea", "Bronze Voyage (unknown) (MPU4) (set 2)", + "m4brnzeb", "Bronze Voyage (unknown) (MPU4) (set 3)", + "m4brook", "Brooklyn (Barcrest) (MPU4) (PFT 1.8)", + "m4btclok", "Beat The Clock (Barcrest) (MPU4)", + "m4buc", "Buccaneer (Barcrest) (MPU4) (set 1)", + "m4buc__0", "Buccaneer (Barcrest) (MPU4) (set 28)", + "m4buc__1", "Buccaneer (Barcrest) (MPU4) (set 29)", + "m4buc__2", "Buccaneer (Barcrest) (MPU4) (set 30)", + "m4buc__3", "Buccaneer (Barcrest) (MPU4) (set 31)", + "m4buc__4", "Buccaneer (Barcrest) (MPU4) (set 32)", + "m4buc__5", "Buccaneer (Barcrest) (MPU4) (set 33)", + "m4buc__6", "Buccaneer (Barcrest) (MPU4) (set 34)", + "m4buc__7", "Buccaneer (Barcrest) (MPU4) (set 35)", + "m4buc__8", "Buccaneer (Barcrest) (MPU4) (set 36)", + "m4buc__9", "Buccaneer (Barcrest) (MPU4) (set 37)", + "m4buc__a", "Buccaneer (Barcrest) (MPU4) (set 2)", + "m4buc__aa", "Buccaneer (Barcrest) (MPU4) (set 38)", + "m4buc__ab", "Buccaneer (Barcrest) (MPU4) (set 39)", + "m4buc__ac", "Buccaneer (Barcrest) (MPU4) (set 40)", + "m4buc__ad", "Buccaneer (Barcrest) (MPU4) (set 41)", + "m4buc__ae", "Buccaneer (Barcrest) (MPU4) (set 42)", + "m4buc__af", "Buccaneer (Barcrest) (MPU4) (set 43)", + "m4buc__ag", "Buccaneer (Barcrest) (MPU4) (set 44)", + "m4buc__ah", "Buccaneer (Barcrest) (MPU4) (set 45)", + "m4buc__ai", "Buccaneer (Barcrest) (MPU4) (set 46)", + "m4buc__aj", "Buccaneer (Barcrest) (MPU4) (set 47)", + "m4buc__ak", "Buccaneer (Barcrest) (MPU4) (set 48)", + "m4buc__al", "Buccaneer (Barcrest) (MPU4) (set 49)", + "m4buc__am", "Buccaneer (Barcrest) (MPU4) (set 50)", + "m4buc__an", "Buccaneer (Barcrest) (MPU4) (set 51)", + "m4buc__ao", "Buccaneer (Barcrest) (MPU4) (set 52)", + "m4buc__ap", "Buccaneer (Barcrest) (MPU4) (set 53)", + "m4buc__aq", "Buccaneer (Barcrest) (MPU4) (set 54)", + "m4buc__ar", "Buccaneer (Barcrest) (MPU4) (set 55)", + "m4buc__as", "Buccaneer (Barcrest) (MPU4) (set 56)", + "m4buc__at", "Buccaneer (Barcrest) (MPU4) (set 57)", + "m4buc__au", "Buccaneer (Barcrest) (MPU4) (set 58)", + "m4buc__av", "Buccaneer (Barcrest) (MPU4) (set 59)", + "m4buc__aw", "Buccaneer (Barcrest) (MPU4) (set 60)", + "m4buc__ax", "Buccaneer (Barcrest) (MPU4) (set 61)", + "m4buc__ay", "Buccaneer (Barcrest) (MPU4) (set 62)", + "m4buc__az", "Buccaneer (Barcrest) (MPU4) (set 63)", + "m4buc__b", "Buccaneer (Barcrest) (MPU4) (set 3)", + "m4buc__c", "Buccaneer (Barcrest) (MPU4) (set 4)", + "m4buc__d", "Buccaneer (Barcrest) (MPU4) (set 5)", + "m4buc__e", "Buccaneer (Barcrest) (MPU4) (set 6)", + "m4buc__f", "Buccaneer (Barcrest) (MPU4) (set 7)", + "m4buc__g", "Buccaneer (Barcrest) (MPU4) (set 8)", + "m4buc__h", "Buccaneer (Barcrest) (MPU4) (set 9)", + "m4buc__i", "Buccaneer (Barcrest) (MPU4) (set 10)", + "m4buc__j", "Buccaneer (Barcrest) (MPU4) (set 11)", + "m4buc__k", "Buccaneer (Barcrest) (MPU4) (set 12)", + "m4buc__l", "Buccaneer (Barcrest) (MPU4) (set 13)", + "m4buc__m", "Buccaneer (Barcrest) (MPU4) (set 14)", + "m4buc__n", "Buccaneer (Barcrest) (MPU4) (set 15)", + "m4buc__o", "Buccaneer (Barcrest) (MPU4) (set 16)", + "m4buc__p", "Buccaneer (Barcrest) (MPU4) (set 17)", + "m4buc__q", "Buccaneer (Barcrest) (MPU4) (set 18)", + "m4buc__r", "Buccaneer (Barcrest) (MPU4) (set 19)", + "m4buc__s", "Buccaneer (Barcrest) (MPU4) (set 20)", + "m4buc__t", "Buccaneer (Barcrest) (MPU4) (set 21)", + "m4buc__u", "Buccaneer (Barcrest) (MPU4) (set 22)", + "m4buc__v", "Buccaneer (Barcrest) (MPU4) (set 23)", + "m4buc__w", "Buccaneer (Barcrest) (MPU4) (set 24)", + "m4buc__x", "Buccaneer (Barcrest) (MPU4) (set 25)", + "m4buc__y", "Buccaneer (Barcrest) (MPU4) (set 26)", + "m4buc__z", "Buccaneer (Barcrest) (MPU4) (set 27)", + "m4bucclb", "Buccaneer Club (Crystal) (MPU4) (set 1)", + "m4bucclba", "Buccaneer Club (Crystal) (MPU4) (set 2)", + "m4bucclbb", "Buccaneer Club (Crystal) (MPU4) (set 3)", + "m4bucclbc", "Buccaneer Club (Crystal) (MPU4) (set 4)", + "m4bucks", "Bucks Fizz Club (Barcrest) (MPU4)", + "m4bullio", "Bullion Club (Crystal) (MPU4) (set 1)", + "m4bullioa", "Bullion Club (Crystal) (MPU4) (set 2)", + "m4bulliob", "Bullion Club (Crystal) (MPU4) (set 3)", + "m4c2", "Circus Circus 2 (Nova?) (MPU4)", + "m4c9", "Cloud Nine (Barcrest) (MPU4) (set 1)", + "m4c999", "Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 1)", + "m4c999a", "Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 2)", + "m4c999b", "Cloud 999 (Barcrest) (MPU4) (CLN 3.6)", + "m4c999c", "Cloud 999 (Barcrest) (MPU4) (CLN 3.0)", + "m4c9__0", "Cloud Nine (Barcrest) (MPU4) (set 28)", + "m4c9__1", "Cloud Nine (Barcrest) (MPU4) (set 29)", + "m4c9__2", "Cloud Nine (Barcrest) (MPU4) (set 30)", + "m4c9__3", "Cloud Nine (Barcrest) (MPU4) (set 31)", + "m4c9__4", "Cloud Nine (Barcrest) (MPU4) (set 32)", + "m4c9__5", "Cloud Nine (Barcrest) (MPU4) (set 33)", + "m4c9__6", "Cloud Nine (Barcrest) (MPU4) (set 34)", + "m4c9__7", "Cloud Nine (Barcrest) (MPU4) (set 35)", + "m4c9__8", "Cloud Nine (Barcrest) (MPU4) (set 36)", + "m4c9__9", "Cloud Nine (Barcrest) (MPU4) (set 37)", + "m4c9__a", "Cloud Nine (Barcrest) (MPU4) (set 2)", + "m4c9__a0", "Cloud Nine (Barcrest) (MPU4) (set 64)", + "m4c9__a1", "Cloud Nine (Barcrest) (MPU4) (set 65)", + "m4c9__a2", "Cloud Nine (Barcrest) (MPU4) (set 66)", + "m4c9__a3", "Cloud Nine (Barcrest) (MPU4) (set 67)", + "m4c9__aa", "Cloud Nine (Barcrest) (MPU4) (set 38)", + "m4c9__ab", "Cloud Nine (Barcrest) (MPU4) (set 39)", + "m4c9__ac", "Cloud Nine (Barcrest) (MPU4) (set 40)", + "m4c9__ad", "Cloud Nine (Barcrest) (MPU4) (set 41)", + "m4c9__ae", "Cloud Nine (Barcrest) (MPU4) (set 42)", + "m4c9__af", "Cloud Nine (Barcrest) (MPU4) (set 43)", + "m4c9__ag", "Cloud Nine (Barcrest) (MPU4) (set 44)", + "m4c9__ah", "Cloud Nine (Barcrest) (MPU4) (set 45)", + "m4c9__ai", "Cloud Nine (Barcrest) (MPU4) (set 46)", + "m4c9__aj", "Cloud Nine (Barcrest) (MPU4) (set 47)", + "m4c9__ak", "Cloud Nine (Barcrest) (MPU4) (set 48)", + "m4c9__al", "Cloud Nine (Barcrest) (MPU4) (set 49)", + "m4c9__am", "Cloud Nine (Barcrest) (MPU4) (set 50)", + "m4c9__an", "Cloud Nine (Barcrest) (MPU4) (set 51)", + "m4c9__ao", "Cloud Nine (Barcrest) (MPU4) (set 52)", + "m4c9__ap", "Cloud Nine (Barcrest) (MPU4) (set 53)", + "m4c9__aq", "Cloud Nine (Barcrest) (MPU4) (set 54)", + "m4c9__ar", "Cloud Nine (Barcrest) (MPU4) (set 55)", + "m4c9__as", "Cloud Nine (Barcrest) (MPU4) (set 56)", + "m4c9__at", "Cloud Nine (Barcrest) (MPU4) (set 57)", + "m4c9__au", "Cloud Nine (Barcrest) (MPU4) (set 58)", + "m4c9__av", "Cloud Nine (Barcrest) (MPU4) (set 59)", + "m4c9__aw", "Cloud Nine (Barcrest) (MPU4) (set 60)", + "m4c9__ax", "Cloud Nine (Barcrest) (MPU4) (set 61)", + "m4c9__ay", "Cloud Nine (Barcrest) (MPU4) (set 62)", + "m4c9__az", "Cloud Nine (Barcrest) (MPU4) (set 63)", + "m4c9__b", "Cloud Nine (Barcrest) (MPU4) (set 3)", + "m4c9__c", "Cloud Nine (Barcrest) (MPU4) (set 4)", + "m4c9__d", "Cloud Nine (Barcrest) (MPU4) (set 5)", + "m4c9__e", "Cloud Nine (Barcrest) (MPU4) (set 6)", + "m4c9__f", "Cloud Nine (Barcrest) (MPU4) (set 7)", + "m4c9__g", "Cloud Nine (Barcrest) (MPU4) (set 8)", + "m4c9__h", "Cloud Nine (Barcrest) (MPU4) (set 9)", + "m4c9__i", "Cloud Nine (Barcrest) (MPU4) (set 10)", + "m4c9__j", "Cloud Nine (Barcrest) (MPU4) (set 11)", + "m4c9__k", "Cloud Nine (Barcrest) (MPU4) (set 12)", + "m4c9__l", "Cloud Nine (Barcrest) (MPU4) (set 13)", + "m4c9__m", "Cloud Nine (Barcrest) (MPU4) (set 14)", + "m4c9__n", "Cloud Nine (Barcrest) (MPU4) (set 15)", + "m4c9__o", "Cloud Nine (Barcrest) (MPU4) (set 16)", + "m4c9__p", "Cloud Nine (Barcrest) (MPU4) (set 17)", + "m4c9__q", "Cloud Nine (Barcrest) (MPU4) (set 18)", + "m4c9__r", "Cloud Nine (Barcrest) (MPU4) (set 19)", + "m4c9__s", "Cloud Nine (Barcrest) (MPU4) (set 20)", + "m4c9__t", "Cloud Nine (Barcrest) (MPU4) (set 21)", + "m4c9__u", "Cloud Nine (Barcrest) (MPU4) (set 22)", + "m4c9__v", "Cloud Nine (Barcrest) (MPU4) (set 23)", + "m4c9__w", "Cloud Nine (Barcrest) (MPU4) (set 24)", + "m4c9__x", "Cloud Nine (Barcrest) (MPU4) (set 25)", + "m4c9__y", "Cloud Nine (Barcrest) (MPU4) (set 26)", + "m4c9__z", "Cloud Nine (Barcrest) (MPU4) (set 27)", + "m4c9c", "Cloud Nine Club (Barcrest) (MPU4) (CNC 2.1)", + "m4calama", "Calamari Club (Barcrest) (MPU4) (set 1)", + "m4calama__a", "Calamari Club (Barcrest) (MPU4) (set 2)", + "m4calama__b", "Calamari Club (Barcrest) (MPU4) (set 3)", + "m4calama__c", "Calamari Club (Barcrest) (MPU4) (set 4)", + "m4calama__d", "Calamari Club (Barcrest) (MPU4) (set 5)", + "m4calama__e", "Calamari Club (Barcrest) (MPU4) (set 6)", + "m4calama__f", "Calamari Club (Barcrest) (MPU4) (set 7)", + "m4calama__g", "Calamari Club (Barcrest) (MPU4) (set 8)", + "m4calama__h", "Calamari Club (Barcrest) (MPU4) (set 9)", + "m4calama__i", "Calamari Club (Barcrest) (MPU4) (set 10)", + "m4calama__j", "Calamari Club (Barcrest) (MPU4) (set 11)", + "m4calicl", "California Club (Barcrest) (MPU4) (set 1)", + "m4calicla", "California Club (Barcrest) (MPU4) (set 2)", + "m4caliclb", "California Club (Barcrest) (MPU4) (set 3)", + "m4caliclc", "California Club (Barcrest) (MPU4) (set 4)", + "m4calicld", "California Club (Barcrest) (MPU4) (set 5)", + "m4captb", "Captain Bear (MPU4?)", + "m4cardcs", "Card Cash (Barcrest) (MPU4) (CCS 1.9)", + "m4carou", "Carousel Club (Crystal) (MPU4) (set 1)", + "m4caroua", "Carousel Club (Crystal) (MPU4) (set 2)", + "m4caroub", "Carousel Club (Crystal) (MPU4) (set 3)", + "m4carouc", "Carousel Club (Crystal) (MPU4) (set 4)", + "m4cashat", "Cash Attack (Barcrest) (MPU4) (set 1)", + "m4cashat__0", "Cash Attack (Barcrest) (MPU4) (set 28)", + "m4cashat__1", "Cash Attack (Barcrest) (MPU4) (set 29)", + "m4cashat__2", "Cash Attack (Barcrest) (MPU4) (set 30)", + "m4cashat__3", "Cash Attack (Barcrest) (MPU4) (set 31)", + "m4cashat__4", "Cash Attack (Barcrest) (MPU4) (set 32)", + "m4cashat__5", "Cash Attack (Barcrest) (MPU4) (set 33)", + "m4cashat__6", "Cash Attack (Barcrest) (MPU4) (set 34)", + "m4cashat__7", "Cash Attack (Barcrest) (MPU4) (set 35)", + "m4cashat__8", "Cash Attack (Barcrest) (MPU4) (set 36)", + "m4cashat__9", "Cash Attack (Barcrest) (MPU4) (set 37)", + "m4cashat__a", "Cash Attack (Barcrest) (MPU4) (set 2)", + "m4cashat__aa", "Cash Attack (Barcrest) (MPU4) (set 38)", + "m4cashat__ab", "Cash Attack (Barcrest) (MPU4) (set 39)", + "m4cashat__ac", "Cash Attack (Barcrest) (MPU4) (set 40)", + "m4cashat__ad", "Cash Attack (Barcrest) (MPU4) (set 41)", + "m4cashat__ae", "Cash Attack (Barcrest) (MPU4) (set 42)", + "m4cashat__af", "Cash Attack (Barcrest) (MPU4) (set 43)", + "m4cashat__ag", "Cash Attack (Barcrest) (MPU4) (set 44)", + "m4cashat__ah", "Cash Attack (Barcrest) (MPU4) (set 45)", + "m4cashat__ai", "Cash Attack (Barcrest) (MPU4) (set 46)", + "m4cashat__aj", "Cash Attack (Barcrest) (MPU4) (set 47)", + "m4cashat__ak", "Cash Attack (Barcrest) (MPU4) (set 48)", + "m4cashat__al", "Cash Attack (Barcrest) (MPU4) (set 49)", + "m4cashat__am", "Cash Attack (Barcrest) (MPU4) (set 50)", + "m4cashat__an", "Cash Attack (Barcrest) (MPU4) (set 51)", + "m4cashat__ao", "Cash Attack (Barcrest) (MPU4) (set 52)", + "m4cashat__ap", "Cash Attack (Barcrest) (MPU4) (set 53)", + "m4cashat__aq", "Cash Attack (Barcrest) (MPU4) (set 54)", + "m4cashat__ar", "Cash Attack (Barcrest) (MPU4) (set 55)", + "m4cashat__b", "Cash Attack (Barcrest) (MPU4) (set 3)", + "m4cashat__c", "Cash Attack (Barcrest) (MPU4) (set 4)", + "m4cashat__d", "Cash Attack (Barcrest) (MPU4) (set 5)", + "m4cashat__e", "Cash Attack (Barcrest) (MPU4) (set 6)", + "m4cashat__f", "Cash Attack (Barcrest) (MPU4) (set 7)", + "m4cashat__g", "Cash Attack (Barcrest) (MPU4) (set 8)", + "m4cashat__h", "Cash Attack (Barcrest) (MPU4) (set 9)", + "m4cashat__i", "Cash Attack (Barcrest) (MPU4) (set 10)", + "m4cashat__j", "Cash Attack (Barcrest) (MPU4) (set 11)", + "m4cashat__k", "Cash Attack (Barcrest) (MPU4) (set 12)", + "m4cashat__l", "Cash Attack (Barcrest) (MPU4) (set 13)", + "m4cashat__m", "Cash Attack (Barcrest) (MPU4) (set 14)", + "m4cashat__n", "Cash Attack (Barcrest) (MPU4) (set 15)", + "m4cashat__o", "Cash Attack (Barcrest) (MPU4) (set 16)", + "m4cashat__p", "Cash Attack (Barcrest) (MPU4) (set 17)", + "m4cashat__q", "Cash Attack (Barcrest) (MPU4) (set 18)", + "m4cashat__r", "Cash Attack (Barcrest) (MPU4) (set 19)", + "m4cashat__s", "Cash Attack (Barcrest) (MPU4) (set 20)", + "m4cashat__t", "Cash Attack (Barcrest) (MPU4) (set 21)", + "m4cashat__u", "Cash Attack (Barcrest) (MPU4) (set 22)", + "m4cashat__v", "Cash Attack (Barcrest) (MPU4) (set 23)", + "m4cashat__w", "Cash Attack (Barcrest) (MPU4) (set 24)", + "m4cashat__x", "Cash Attack (Barcrest) (MPU4) (set 25)", + "m4cashat__y", "Cash Attack (Barcrest) (MPU4) (set 26)", + "m4cashat__z", "Cash Attack (Barcrest) (MPU4) (set 27)", + "m4cashcn", "Cash Connect (Barcrest) (MPU4) (CCO 3.2)", + "m4cashco", "Cash Counter (Barcrest) (MPU4) (C3 2.4)", + "m4cashcoa", "Cash Counter (Barcrest) (MPU4) (C3 1.8)", + "m4cashcob", "Cash Counter (Barcrest) (MPU4) (CO 0.5)", + "m4cashcoc", "Cash Counter (Barcrest) (MPU4) (C3 3.1)", + "m4cashcod", "Cash Connect (Barcrest) (MPU4) (C3 2.0)", + "m4cashln", "Cash Lines (Barcrest) (MPU4) (set 1)", + "m4cashln__0", "Cash Lines (Barcrest) (MPU4) (set 28)", + "m4cashln__1", "Cash Lines (Barcrest) (MPU4) (set 29)", + "m4cashln__2", "Cash Lines (Barcrest) (MPU4) (set 30)", + "m4cashln__3", "Cash Lines (Barcrest) (MPU4) (set 31)", + "m4cashln__4", "Cash Lines (Barcrest) (MPU4) (set 32)", + "m4cashln__5", "Cash Lines (Barcrest) (MPU4) (set 33)", + "m4cashln__6", "Cash Lines (Barcrest) (MPU4) (set 34)", + "m4cashln__7", "Cash Lines (Barcrest) (MPU4) (set 35)", + "m4cashln__8", "Cash Lines (Barcrest) (MPU4) (set 36)", + "m4cashln__9", "Cash Lines (Barcrest) (MPU4) (set 37)", + "m4cashln__a", "Cash Lines (Barcrest) (MPU4) (set 2)", + "m4cashln__a0", "Cash Lines (Barcrest) (MPU4) (set 64)", + "m4cashln__a1", "Cash Lines (Barcrest) (MPU4) (set 65)", + "m4cashln__a2", "Cash Lines (Barcrest) (MPU4) (set 66)", + "m4cashln__a3", "Cash Lines (Barcrest) (MPU4) (set 67)", + "m4cashln__a4", "Cash Lines (Barcrest) (MPU4) (set 68)", + "m4cashln__a5", "Cash Lines (Barcrest) (MPU4) (set 69)", + "m4cashln__a6", "Cash Lines (Barcrest) (MPU4) (set 70)", + "m4cashln__a7", "Cash Lines (Barcrest) (MPU4) (set 71)", + "m4cashln__a8", "Cash Lines (Barcrest) (MPU4) (set 72)", + "m4cashln__a9", "Cash Lines (Barcrest) (MPU4) (set 73)", + "m4cashln__aa", "Cash Lines (Barcrest) (MPU4) (set 38)", + "m4cashln__ab", "Cash Lines (Barcrest) (MPU4) (set 39)", + "m4cashln__ac", "Cash Lines (Barcrest) (MPU4) (set 40)", + "m4cashln__ad", "Cash Lines (Barcrest) (MPU4) (set 41)", + "m4cashln__ae", "Cash Lines (Barcrest) (MPU4) (set 42)", + "m4cashln__af", "Cash Lines (Barcrest) (MPU4) (set 43)", + "m4cashln__ag", "Cash Lines (Barcrest) (MPU4) (set 44)", + "m4cashln__ah", "Cash Lines (Barcrest) (MPU4) (set 45)", + "m4cashln__ai", "Cash Lines (Barcrest) (MPU4) (set 46)", + "m4cashln__aj", "Cash Lines (Barcrest) (MPU4) (set 47)", + "m4cashln__ak", "Cash Lines (Barcrest) (MPU4) (set 48)", + "m4cashln__al", "Cash Lines (Barcrest) (MPU4) (set 49)", + "m4cashln__am", "Cash Lines (Barcrest) (MPU4) (set 50)", + "m4cashln__an", "Cash Lines (Barcrest) (MPU4) (set 51)", + "m4cashln__ao", "Cash Lines (Barcrest) (MPU4) (set 52)", + "m4cashln__ap", "Cash Lines (Barcrest) (MPU4) (set 53)", + "m4cashln__aq", "Cash Lines (Barcrest) (MPU4) (set 54)", + "m4cashln__ar", "Cash Lines (Barcrest) (MPU4) (set 55)", + "m4cashln__as", "Cash Lines (Barcrest) (MPU4) (set 56)", + "m4cashln__at", "Cash Lines (Barcrest) (MPU4) (set 57)", + "m4cashln__au", "Cash Lines (Barcrest) (MPU4) (set 58)", + "m4cashln__av", "Cash Lines (Barcrest) (MPU4) (set 59)", + "m4cashln__aw", "Cash Lines (Barcrest) (MPU4) (set 60)", + "m4cashln__ax", "Cash Lines (Barcrest) (MPU4) (set 61)", + "m4cashln__ay", "Cash Lines (Barcrest) (MPU4) (set 62)", + "m4cashln__az", "Cash Lines (Barcrest) (MPU4) (set 63)", + "m4cashln__b", "Cash Lines (Barcrest) (MPU4) (set 3)", + "m4cashln__ba", "Cash Lines (Barcrest) (MPU4) (set 74)", + "m4cashln__bb", "Cash Lines (Barcrest) (MPU4) (set 75)", + "m4cashln__bc", "Cash Lines (Barcrest) (MPU4) (set 76)", + "m4cashln__bd", "Cash Lines (Barcrest) (MPU4) (set 77)", + "m4cashln__be", "Cash Lines (Barcrest) (MPU4) (set 78)", + "m4cashln__bf", "Cash Lines (Barcrest) (MPU4) (set 79)", + "m4cashln__bg", "Cash Lines (Barcrest) (MPU4) (set 80)", + "m4cashln__bh", "Cash Lines (Barcrest) (MPU4) (set 81)", + "m4cashln__bi", "Cash Lines (Barcrest) (MPU4) (set 82)", + "m4cashln__bj", "Cash Lines (Barcrest) (MPU4) (set 83)", + "m4cashln__c", "Cash Lines (Barcrest) (MPU4) (set 4)", + "m4cashln__d", "Cash Lines (Barcrest) (MPU4) (set 5)", + "m4cashln__e", "Cash Lines (Barcrest) (MPU4) (set 6)", + "m4cashln__f", "Cash Lines (Barcrest) (MPU4) (set 7)", + "m4cashln__g", "Cash Lines (Barcrest) (MPU4) (set 8)", + "m4cashln__h", "Cash Lines (Barcrest) (MPU4) (set 9)", + "m4cashln__i", "Cash Lines (Barcrest) (MPU4) (set 10)", + "m4cashln__j", "Cash Lines (Barcrest) (MPU4) (set 11)", + "m4cashln__k", "Cash Lines (Barcrest) (MPU4) (set 12)", + "m4cashln__l", "Cash Lines (Barcrest) (MPU4) (set 13)", + "m4cashln__m", "Cash Lines (Barcrest) (MPU4) (set 14)", + "m4cashln__n", "Cash Lines (Barcrest) (MPU4) (set 15)", + "m4cashln__o", "Cash Lines (Barcrest) (MPU4) (set 16)", + "m4cashln__p", "Cash Lines (Barcrest) (MPU4) (set 17)", + "m4cashln__q", "Cash Lines (Barcrest) (MPU4) (set 18)", + "m4cashln__r", "Cash Lines (Barcrest) (MPU4) (set 19)", + "m4cashln__s", "Cash Lines (Barcrest) (MPU4) (set 20)", + "m4cashln__t", "Cash Lines (Barcrest) (MPU4) (set 21)", + "m4cashln__u", "Cash Lines (Barcrest) (MPU4) (set 22)", + "m4cashln__v", "Cash Lines (Barcrest) (MPU4) (set 23)", + "m4cashln__w", "Cash Lines (Barcrest) (MPU4) (set 24)", + "m4cashln__x", "Cash Lines (Barcrest) (MPU4) (set 25)", + "m4cashln__y", "Cash Lines (Barcrest) (MPU4) (set 26)", + "m4cashln__z", "Cash Lines (Barcrest) (MPU4) (set 27)", + "m4cashmn", "Cash Machine (Barcrest) (MPU4) (set 1)", + "m4cashmn__0", "Cash Machine (Barcrest) (MPU4) (set 28)", + "m4cashmn__1", "Cash Machine (Barcrest) (MPU4) (set 29)", + "m4cashmn__2", "Cash Machine (Barcrest) (MPU4) (set 30)", + "m4cashmn__3", "Cash Machine (Barcrest) (MPU4) (set 31)", + "m4cashmn__4", "Cash Machine (Barcrest) (MPU4) (set 32)", + "m4cashmn__5", "Cash Machine (Barcrest) (MPU4) (set 33)", + "m4cashmn__6", "Cash Machine (Barcrest) (MPU4) (set 34)", + "m4cashmn__7", "Cash Machine (Barcrest) (MPU4) (set 35)", + "m4cashmn__8", "Cash Machine (Barcrest) (MPU4) (set 36)", + "m4cashmn__9", "Cash Machine (Barcrest) (MPU4) (set 37)", + "m4cashmn__a", "Cash Machine (Barcrest) (MPU4) (set 2)", + "m4cashmn__aa", "Cash Machine (Barcrest) (MPU4) (set 38)", + "m4cashmn__ab", "Cash Machine (Barcrest) (MPU4) (set 39)", + "m4cashmn__ac", "Cash Machine (Barcrest) (MPU4) (set 40)", + "m4cashmn__ad", "Cash Machine (Barcrest) (MPU4) (set 41)", + "m4cashmn__ae", "Cash Machine (Barcrest) (MPU4) (set 42)", + "m4cashmn__af", "Cash Machine (Barcrest) (MPU4) (set 43)", + "m4cashmn__ag", "Cash Machine (Barcrest) (MPU4) (set 44)", + "m4cashmn__ah", "Cash Machine (Barcrest) (MPU4) (set 45)", + "m4cashmn__ai", "Cash Machine (Barcrest) (MPU4) (set 46)", + "m4cashmn__aj", "Cash Machine (Barcrest) (MPU4) (set 47)", + "m4cashmn__ak", "Cash Machine (Barcrest) (MPU4) (set 48)", + "m4cashmn__al", "Cash Machine (Barcrest) (MPU4) (set 49)", + "m4cashmn__b", "Cash Machine (Barcrest) (MPU4) (set 3)", + "m4cashmn__c", "Cash Machine (Barcrest) (MPU4) (set 4)", + "m4cashmn__d", "Cash Machine (Barcrest) (MPU4) (set 5)", + "m4cashmn__e", "Cash Machine (Barcrest) (MPU4) (set 6)", + "m4cashmn__f", "Cash Machine (Barcrest) (MPU4) (set 7)", + "m4cashmn__g", "Cash Machine (Barcrest) (MPU4) (set 8)", + "m4cashmn__h", "Cash Machine (Barcrest) (MPU4) (set 9)", + "m4cashmn__i", "Cash Machine (Barcrest) (MPU4) (set 10)", + "m4cashmn__j", "Cash Machine (Barcrest) (MPU4) (set 11)", + "m4cashmn__k", "Cash Machine (Barcrest) (MPU4) (set 12)", + "m4cashmn__l", "Cash Machine (Barcrest) (MPU4) (set 13)", + "m4cashmn__m", "Cash Machine (Barcrest) (MPU4) (set 14)", + "m4cashmn__n", "Cash Machine (Barcrest) (MPU4) (set 15)", + "m4cashmn__o", "Cash Machine (Barcrest) (MPU4) (set 16)", + "m4cashmn__p", "Cash Machine (Barcrest) (MPU4) (set 17)", + "m4cashmn__q", "Cash Machine (Barcrest) (MPU4) (set 18)", + "m4cashmn__r", "Cash Machine (Barcrest) (MPU4) (set 19)", + "m4cashmn__s", "Cash Machine (Barcrest) (MPU4) (set 20)", + "m4cashmn__t", "Cash Machine (Barcrest) (MPU4) (set 21)", + "m4cashmn__u", "Cash Machine (Barcrest) (MPU4) (set 22)", + "m4cashmn__v", "Cash Machine (Barcrest) (MPU4) (set 23)", + "m4cashmn__w", "Cash Machine (Barcrest) (MPU4) (set 24)", + "m4cashmn__x", "Cash Machine (Barcrest) (MPU4) (set 25)", + "m4cashmn__y", "Cash Machine (Barcrest) (MPU4) (set 26)", + "m4cashmn__z", "Cash Machine (Barcrest) (MPU4) (set 27)", + "m4cashmn__za", "Cash Machine (Barcrest) (MPU4) (CMH 0.6Y, hack?)", + "m4cashmn__zb", "Cash Machine (Barcrest) (MPU4) (CMA 0.7C, hack?)", + "m4cashmx", "Cash Matrix (Barcrest) (MPU4) (CM 1.7, set 1)", + "m4cashmxa", "Cash Matrix (Barcrest) (MPU4) (CM 1.7, set 2)", + "m4cashzn", "Cash Zone (Barcrest) (MPU4) (CAZ 1.2)", + "m4cashzna", "Cash Zone (Barcrest) (MPU4) (CAZ 1.5)", + "m4casmul", "Casino Multiplay (Barcrest) (MPU4)", + "m4casot", "Old Timer (Barcrest) (Dutch, alt 'Black and White' sound roms) (DOT1.1)", + "m4cbing", "Cherry Bingo (Redpoint Systems) (MPU4)", + "m4ccc", "Criss Cross Crazy (Coinworld) (MPU4?)", + "m4cclimb", "Crazy Climber (Crystal) (MPU4) (set 1)", + "m4cclimba", "Crazy Climber (Crystal) (MPU4) (set 2)", + "m4ccop", "Cash Cops (MPU4?) (set 1)", + "m4ccopa", "Cash Cops (MPU4?) (set 2)", + "m4ccopb", "Cash Cops (MPU4?) (set 3)", + "m4celclb", "Celebration Club (Barcrest) (MPU4)", + "m4centpt", "Centrepoint (Barcrest) (v1.3) (MPU4)", + "m4centpta", "Centrepoint (Barcrest) (v1.5) (MPU4)", + "m4ceptr", "Ceptor (Barcrest) (Dutch) (MPU4) (DCE 1.0)", + "m4cfinln", "Cup Final (Nova) (MPU4) (set 1)", + "m4cfinln__a", "Cup Final (Nova) (MPU4) (set 2)", + "m4ch30", "unknown MPU4 'CH3 0.1' (Barcrest) (MPU4)", + "m4chacec", "Chase The Ace [Cards] (Empire) (MPU4, set 1)", + "m4chaceca", "Chase The Ace [Cards] (Empire) (MPU4, set 2)", + "m4chacef", "Chase The Ace [Fruits] (Empire) (MPU4, set 1)", + "m4chacefa", "Chase The Ace [Fruits] (Empire) (MPU4, set 2)", + "m4chacefb", "Chase The Ace [Fruits] (Empire) (MPU4, set 3)", + "m4chacefc", "Chase The Ace [Fruits] (Empire) (MPU4, set 4)", + "m4chasei", "Chase Invaders (Barcrest) (MPU4) (set 1)", + "m4chaseia", "Chase Invaders (Barcrest) (MPU4) (set 2)", + "m4chaseib", "Chase Invaders (Barcrest) (MPU4) (set 3)", + "m4chaseic", "Chase Invaders (Barcrest) (MPU4) (set 4)", + "m4chaseid", "Chase Invaders (Barcrest) (MPU4) (set 5)", + "m4chaseie", "Chase Invaders (Barcrest) (MPU4) (set 6)", + "m4chaseif", "Chase Invaders (Barcrest) (MPU4) (set 7)", + "m4cheryo", "Cherryo (Barcrest) (DCH, Dutch) (MPU4)", + "m4clab", "Cash Lab (Qps) (MPU4) (set 1)", + "m4clab__a", "Cash Lab (Qps) (MPU4) (set 2)", + "m4clab__b", "Cash Lab (Qps) (MPU4) (set 3)", + "m4clab__c", "Cash Lab (Qps) (MPU4) (set 4)", + "m4clab__d", "Cash Lab (Qps) (MPU4) (set 5)", + "m4clab__e", "Cash Lab (Qps) (MPU4) (set 6)", + "m4clab__f", "Cash Lab (Qps) (MPU4) (set 7)", + "m4clab__g", "Cash Lab (Qps) (MPU4) (set 8)", + "m4clab__h", "Cash Lab (Qps) (MPU4) (set 9)", + "m4clab__i", "Cash Lab (Qps) (MPU4) (set 10)", + "m4clab__j", "Cash Lab (Qps) (MPU4) (set 11)", + "m4class", "First Class (Barcrest) [DFC, Dutch] (MPU4) (set 1)", + "m4classa", "First Class (Barcrest) [DFC, Dutch] (MPU4) (set 2)", + "m4clbclm", "Club Climber (Barcrest) (MPU4, C1C 3.3)", + "m4clbclma", "Club Climber (Barcrest) (MPU4, CC 4.5)", + "m4clbcls", "Club Classic (Barcrest) (MPU4)", + "m4clbcnt", "Club Connect (Barcrest) (MPU4) (set 1)", + "m4clbcnta", "Club Connect (Barcrest) (MPU4) (set 2)", + "m4clbcntb", "Club Connect (Barcrest) (MPU4) (set 3)", + "m4clbcntc", "Club Connect (Barcrest) (MPU4) (set 4)", + "m4clbcntd", "Club Connect (Barcrest) (MPU4) (set 5)", + "m4clbdbl", "Club Double (Barcrest) (MPU4) (CD 1.6)", + "m4clbrpl", "Club Replay (PCP) (MPU4) (01)", + "m4clbshf", "Club Shuffle (Barcrest) (MPU4)", + "m4clbveg", "Club Vegas (Barcrest) (MPU4) (set 1)", + "m4clbvega", "Club Vegas (Barcrest) (MPU4) (set 2)", + "m4clbvegb", "Club Vegas (Barcrest) (MPU4) (set 3)", + "m4clbvegc", "Club Vegas (Barcrest) (MPU4) (set 4)", + "m4clbx", "Club X (Barcrest) (MPU4) (set 1)", + "m4clbxa", "Club X (Barcrest) (MPU4) (set 2)", + "m4clbxb", "Club X (Barcrest) (MPU4) (set 3)", + "m4cld02", "unknown MPU4 'CLD 0.2C' (MPU4?)", + "m4click", "Clickity Click (Barcrest) (MPU4 w/ Plasma DMD)", + "m4clr", "MPU4 Meter Clear ROM", + "m4cmont", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 1)", + "m4cmont_1", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 2)", + "m4cmont_10", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 11)", + "m4cmont_11", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 12)", + "m4cmont_12", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 13)", + "m4cmont_13", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 14)", + "m4cmont_2", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 3)", + "m4cmont_3", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 4)", + "m4cmont_4", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 5)", + "m4cmont_5", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 6)", + "m4cmont_6", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 7)", + "m4cmont_7", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 8)", + "m4cmont_8", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 9)", + "m4cmont_9", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 10)", + "m4cmont_gt1", "Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 1)", + "m4cmont_gt2", "Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 2)", + "m4cmont_gt3", "Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 3)", + "m4cmont_l1", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 1)", + "m4cmont_l10", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 10)", + "m4cmont_l11", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 11)", + "m4cmont_l12", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 12)", + "m4cmont_l13", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 13)", + "m4cmont_l14", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 14)", + "m4cmont_l15", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 15)", + "m4cmont_l16", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 16)", + "m4cmont_l2", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 2)", + "m4cmont_l3", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 3)", + "m4cmont_l4", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 4)", + "m4cmont_l5", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 5)", + "m4cmont_l6", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 6)", + "m4cmont_l7", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 7)", + "m4cmont_l8", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 8)", + "m4cmont_l9", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 9)", + "m4cmont_r1", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 1)", + "m4cmont_r2", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 2)", + "m4cmont_r3", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 3)", + "m4cmont_r4", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 4)", + "m4cmont_r5", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 5)", + "m4cmont_r6", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 6)", + "m4cmont_r7", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 7)", + "m4cmont_r8", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 8)", + "m4cmont_u1", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 1)", + "m4cmont_u10", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 10)", + "m4cmont_u11", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 11)", + "m4cmont_u12", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 12)", + "m4cmont_u13", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 13)", + "m4cmont_u14", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 14)", + "m4cmont_u15", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 15)", + "m4cmont_u16", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 16)", + "m4cmont_u17", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 17)", + "m4cmont_u18", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 18)", + "m4cmont_u19", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 19)", + "m4cmont_u2", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 2)", + "m4cmont_u20", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 20)", + "m4cmont_u21", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 21)", + "m4cmont_u22", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 22)", + "m4cmont_u23", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 23)", + "m4cmont_u24", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 24)", + "m4cmont_u25", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 25)", + "m4cmont_u26", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 26)", + "m4cmont_u27", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 27)", + "m4cmont_u3", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 3)", + "m4cmont_u4", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 4)", + "m4cmont_u5", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 5)", + "m4cmont_u6", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 6)", + "m4cmont_u7", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 7)", + "m4cmont_u8", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 8)", + "m4cmont_u9", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 9)", + "m4cojok", "Carry On Joker (Barcrest) (MPU4) (set 1)", + "m4cojok__a", "Carry On Joker (Barcrest) (MPU4) (set 2)", + "m4cojok__b", "Carry On Joker (Barcrest) (MPU4) (set 3)", + "m4cojok__c", "Carry On Joker (Barcrest) (MPU4) (set 4)", + "m4cojok__d", "Carry On Joker (Barcrest) (MPU4) (set 5)", + "m4cojok__e", "Carry On Joker (Barcrest) (MPU4) (set 6)", + "m4cojok__f", "Carry On Joker (Barcrest) (MPU4) (set 7)", + "m4coloss", "Colossus (Mdm) (MPU4, set 1)", + "m4colossa", "Colossus (Mdm) (MPU4, set 2)", + "m4colossb", "Colossus (Mdm) (MPU4, set 3)", + "m4colossc", "Colossus (Mdm) (MPU4, set 4)", + "m4colossd", "Colossus (Mdm) (MPU4, set 5)", + "m4colosse", "Colossus (Mdm) (MPU4, set 6)", + "m4colossf", "Colossus (Mdm) (MPU4, set 7)", + "m4colossg", "Colossus (Mdm) (MPU4, set 8)", + "m4coney", "Coney Island (Qps) (MPU4)", + "m4conn4", "Connect 4", + "m4copcsh", "Coppa Cash (Barcrest) (MPU4) (FC 2.0)", + "m4coscas", "Cosmic Casino (Barcrest) (MPU4) (set 1)", + "m4coscas__a", "Cosmic Casino (Barcrest) (MPU4) (set 2)", + "m4coscas__b", "Cosmic Casino (Barcrest) (MPU4) (set 3)", + "m4coscas__c", "Cosmic Casino (Barcrest) (MPU4) (set 4)", + "m4coscas__d", "Cosmic Casino (Barcrest) (MPU4) (set 5)", + "m4coscas__e", "Cosmic Casino (Barcrest) (MPU4) (set 6)", + "m4coscas__f", "Cosmic Casino (Barcrest) (MPU4) (set 7)", + "m4coscas__g", "Cosmic Casino (Barcrest) (MPU4) (set 8)", + "m4coscas__h", "Cosmic Casino (Barcrest) (MPU4) (set 9)", + "m4coscas__i", "Cosmic Casino (Barcrest) (MPU4) (set 10)", + "m4coscas__j", "Cosmic Casino (Barcrest) (MPU4) (set 11)", + "m4coscas__k", "Cosmic Casino (Barcrest) (MPU4) (set 12)", + "m4coscas__l", "Cosmic Casino (Barcrest) (MPU4) (set 13)", + "m4coscas__m", "Cosmic Casino (Barcrest) (MPU4) (set 14)", + "m4coscas__n", "Cosmic Casino (Barcrest) (MPU4) (set 15)", + "m4coscas__o", "Cosmic Casino (Barcrest) (MPU4) (set 16)", + "m4coscas__p", "Cosmic Casino (Barcrest) (MPU4) (set 17)", + "m4coscas__q", "Cosmic Casino (Barcrest) (MPU4) (set 18)", + "m4coscas__r", "Cosmic Casino (Barcrest) (MPU4) (set 19)", + "m4coscas__s", "Cosmic Casino (Barcrest) (MPU4) (set 20)", + "m4coscas__t", "Cosmic Casino (Barcrest) (MPU4) (set 21)", + "m4coscas__u", "Cosmic Casino (Barcrest) (MPU4) (set 22)", + "m4coscas__v", "Cosmic Casino (Barcrest) (MPU4) (set 23)", + "m4cpfinl", "Cup Final (Bwb) (MPU4) (set 1)", + "m4cpfinl__a", "Cup Final (Bwb) (MPU4) (set 2)", + "m4cpfinl__b", "Cup Final (Bwb) (MPU4) (set 3)", + "m4cpfinl__c", "Cup Final (Bwb) (MPU4) (set 4)", + "m4cpfinl__d", "Cup Final (Bwb) (MPU4) (set 5)", + "m4cpfinl__e", "Cup Final (Bwb) (MPU4) (set 6)", + "m4cpfinl__f", "Cup Final (Bwb) (MPU4) (set 7)", + "m4cpfinl__g", "Cup Final (Bwb) (MPU4) (set 8)", + "m4cpfinl__h", "Cup Final (Bwb) (MPU4) (set 9)", + "m4cpfinl__i", "Cup Final (Bwb) (MPU4) (set 10)", + "m4cpfinl__j", "Cup Final (Bwb) (MPU4) (set 11)", + "m4cpfinl__k", "Cup Final (Bwb) (MPU4) (set 12)", + "m4cpycat", "Copy Cat (Barcrest) (MPU4) (set 1)", + "m4cpycat__0", "Copy Cat (Barcrest) (MPU4) (set 28)", + "m4cpycat__1", "Copy Cat (Barcrest) (MPU4) (set 29)", + "m4cpycat__2", "Copy Cat (Barcrest) (MPU4) (set 30)", + "m4cpycat__3", "Copy Cat (Barcrest) (MPU4) (set 31)", + "m4cpycat__4", "Copy Cat (Barcrest) (MPU4) (set 32)", + "m4cpycat__5", "Copy Cat (Barcrest) (MPU4) (set 33)", + "m4cpycat__6", "Copy Cat (Barcrest) (MPU4) (set 34)", + "m4cpycat__7", "Copy Cat (Barcrest) (MPU4) (set 35)", + "m4cpycat__8", "Copy Cat (Barcrest) (MPU4) (set 36)", + "m4cpycat__a", "Copy Cat (Barcrest) (MPU4) (set 2)", + "m4cpycat__b", "Copy Cat (Barcrest) (MPU4) (set 3)", + "m4cpycat__c", "Copy Cat (Barcrest) (MPU4) (set 4)", + "m4cpycat__d", "Copy Cat (Barcrest) (MPU4) (set 5)", + "m4cpycat__e", "Copy Cat (Barcrest) (MPU4) (set 6)", + "m4cpycat__f", "Copy Cat (Barcrest) (MPU4) (set 7)", + "m4cpycat__g", "Copy Cat (Barcrest) (MPU4) (set 8)", + "m4cpycat__h", "Copy Cat (Barcrest) (MPU4) (set 9)", + "m4cpycat__i", "Copy Cat (Barcrest) (MPU4) (set 10)", + "m4cpycat__j", "Copy Cat (Barcrest) (MPU4) (set 11)", + "m4cpycat__k", "Copy Cat (Barcrest) (MPU4) (set 12)", + "m4cpycat__l", "Copy Cat (Barcrest) (MPU4) (set 13)", + "m4cpycat__m", "Copy Cat (Barcrest) (MPU4) (set 14)", + "m4cpycat__n", "Copy Cat (Barcrest) (MPU4) (set 15)", + "m4cpycat__o", "Copy Cat (Barcrest) (MPU4) (set 16)", + "m4cpycat__p", "Copy Cat (Barcrest) (MPU4) (set 17)", + "m4cpycat__q", "Copy Cat (Barcrest) (MPU4) (set 18)", + "m4cpycat__r", "Copy Cat (Barcrest) (MPU4) (set 19)", + "m4cpycat__s", "Copy Cat (Barcrest) (MPU4) (set 20)", + "m4cpycat__t", "Copy Cat (Barcrest) (MPU4) (set 21)", + "m4cpycat__u", "Copy Cat (Barcrest) (MPU4) (set 22)", + "m4cpycat__v", "Copy Cat (Barcrest) (MPU4) (set 23)", + "m4cpycat__w", "Copy Cat (Barcrest) (MPU4) (set 24)", + "m4cpycat__x", "Copy Cat (Barcrest) (MPU4) (set 25)", + "m4cpycat__y", "Copy Cat (Barcrest) (MPU4) (set 26)", + "m4cpycat__z", "Copy Cat (Barcrest) (MPU4) (set 27)", + "m4crdome", "Crystal Dome (Barcrest) (MPU4) (set 1)", + "m4crdome__a", "Crystal Dome (Barcrest) (MPU4) (set 2)", + "m4crdome__b", "Crystal Dome (Barcrest) (MPU4) (set 3)", + "m4crdome__c", "Crystal Dome (Barcrest) (MPU4) (set 4)", + "m4crdome__d", "Crystal Dome (Barcrest) (MPU4) (set 5)", + "m4crdome__e", "Crystal Dome (Barcrest) (MPU4) (set 6)", + "m4crdome__f", "Crystal Dome (Barcrest) (MPU4) (set 7)", + "m4crdome__g", "Crystal Dome (Barcrest) (MPU4) (set 8)", + "m4crdome__h", "Crystal Dome (Barcrest) (MPU4) (set 9)", + "m4crdome__i", "Crystal Dome (Barcrest) (MPU4) (set 10)", + "m4crdome__j", "Crystal Dome (Barcrest) (MPU4) (set 11)", + "m4crdome__k", "Crystal Dome (Barcrest) (MPU4) (set 12)", + "m4crdome__l", "Crystal Dome (Barcrest) (MPU4) (set 13)", + "m4crdome__m", "Crystal Dome (Barcrest) (MPU4) (set 14)", + "m4crdome__n", "Crystal Dome (Barcrest) (MPU4) (set 15)", + "m4crfire", "Crossfire (Empire) (MPU4, set 1)", + "m4crfirea", "Crossfire (Empire) (MPU4, set 2)", + "m4crjwl", "Crown Jewels Club (Barcrest) (MPU4) (set 1)", + "m4crjwl2", "Crown Jewels Mk II Club (Barcrest) (MPU4) (set 1)", + "m4crjwl2a", "Crown Jewels Mk II Club (Barcrest) (MPU4) (set 2)", + "m4crjwl2b", "Crown Jewels Mk II Club (Barcrest) (MPU4) (set 3)", + "m4crjwla", "Crown Jewels Club (Barcrest) (MPU4) (set 2)", + "m4crjwlb", "Crown Jewels Club (Barcrest) (MPU4) (set 3)", + "m4crjwlc", "Crown Jewels Club (Barcrest) (MPU4) (set 4)", + "m4crkpot", "Crackpot 100 Club (Barcrest) (MPU4) (set 1, C1P 1.2)", + "m4crkpota", "Crackpot 100 Club (Barcrest) (MPU4) (set 2, CP 3.8)", + "m4crkpotb", "Crackpot 100 Club (Barcrest) (MPU4) (set 3, CP 3.1)", + "m4crmaze", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0)", + "m4crmaze__c", "Crystal Maze (Barcrest) (MPU4) (CRM 2.3)", + "m4crmaze__d", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0AD)", + "m4crmaze__e", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0B)", + "m4crmaze__f", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0BD)", + "m4crmaze__g", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0C)", + "m4crmaze__h", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0D)", + "m4crmaze__i", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0KD)", + "m4crmaze__j", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0YD)", + "m4crmaze__k", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0K)", + "m4crmaze__l", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0Y)", + "m4crmaze__m", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0, hack?)", + "m4crmaze__n", "Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 0.7, hack?)", + "m4crmaze__o", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 1.0, hack?)", + "m4crmaze__p", "Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 1.3, hack?)", + "m4crmaze__q", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 1)", + "m4crmaze__r", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 2)", + "m4crmaze__s", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR8 1.2, hack?)", + "m4crzbn", "Crazy Bingo (Union) (MPU4)", + "m4crzcap", "Crazy Capers (Empire) (MPU4, set 1)", + "m4crzcapa", "Crazy Capers (Empire) (MPU4, set 2)", + "m4crzcapb", "Crazy Capers (Empire) (MPU4, set 3)", + "m4crzcapc", "Crazy Capers (Empire) (MPU4, set 4)", + "m4crzcav", "Crazy Cavern (Nova) (MPU4)", + "m4crzcl", "Crazy Climber Club (Crystal) (MPU4) (set 1)", + "m4crzcla", "Crazy Climber Club (Crystal) (MPU4) (set 2)", + "m4crzclb", "Crazy Climber Club (Crystal) (MPU4) (set 3)", + "m4crzclc", "Crazy Climber Club (Crystal) (MPU4) (set 4)", + "m4crzcld", "Crazy Climber Club (Crystal) (MPU4) (set 5)", + "m4crzcsn", "Crazy Casino (Nova) (MPU4)", + "m4crzjk", "Crazy Jokers (Nova?) (MPU4)", + "m4crzjwl", "Crown Jewels (Barcrest) (German) (MPU4) (set 1)", + "m4crzjwla", "Crown Jewels (Barcrest) (German) (MPU4) (set 2)", + "m4crzjwlb", "Crown Jewels (Barcrest) (German) (MPU4) (set 3)", + "m4crzjwlc", "Crown Jewels (Barcrest) (German) (MPU4) (set 4)", + "m4crzjwld", "Crown Jewels (Barcrest) (German) (MPU4) (set 5)", + "m4crzjwle", "Crown Jewels (Barcrest) (German) (MPU4) (set 6)", + "m4crzjwlf", "Crown Jewels (Barcrest) (German) (MPU4) (set 7)", + "m4crzjwlg", "Crown Jewels (Barcrest) (German) (MPU4) (set 8)", + "m4crzjwlh", "Crown Jewels (Barcrest) (German) (MPU4) (set 9)", + "m4cshenc", "Cash Encounters (Barcrest) (MPU4) (set 1)", + "m4cshenc__a", "Cash Encounters (Barcrest) (MPU4) (set 2)", + "m4cshenc__b", "Cash Encounters (Barcrest) (MPU4) (set 3)", + "m4cshenc__c", "Cash Encounters (Barcrest) (MPU4) (set 4)", + "m4cshenc__d", "Cash Encounters (Barcrest) (MPU4) (set 5)", + "m4cshino", "Cashino Deluxe (Pcp) (MPU4)", + "m4csoc", "Championship Soccer (Bwb) (MPU4) (set 1)", + "m4csoc__a", "Championship Soccer (Bwb) (MPU4) (set 2)", + "m4csoc__b", "Championship Soccer (Bwb) (MPU4) (set 3)", + "m4csoc__c", "Championship Soccer (Bwb) (MPU4) (set 4)", + "m4csoc__d", "Championship Soccer (Bwb) (MPU4) (set 5)", + "m4csoc__e", "Championship Soccer (Bwb) (MPU4) (set 6)", + "m4csoc__f", "Championship Soccer (Bwb) (MPU4) (set 7)", + "m4csoc__g", "Championship Soccer (Bwb) (MPU4) (set 8)", + "m4csoc__h", "Championship Soccer (Bwb) (MPU4) (set 9)", + "m4csoc__i", "Championship Soccer (Bwb) (MPU4) (set 10)", + "m4csoc__j", "Championship Soccer (Bwb) (MPU4) (set 11)", + "m4cstrik", "Cash Strike (Empire) (MPU4, set 1)", + "m4cstrika", "Cash Strike (Empire) (MPU4, set 2)", + "m4cstrikb", "Cash Strike (Empire) (MPU4, set 3)", + "m4cstrikc", "Cash Strike (Empire) (MPU4, set 4)", + "m4ctn", "Tuppenny Nudger Classic (Mdm?) (MPU4)", + "m4cwalk", "Cake Walk (Union) (MPU4)", + "m4czne", "Cash Zone (Bwb) (MPU4)", + "m4danced", "Dancing Diamonds (Bwb) (MPU4) (set 1)", + "m4danced__a", "Dancing Diamonds (Bwb) (MPU4) (set 2)", + "m4danced__b", "Dancing Diamonds (Bwb) (MPU4) (set 3)", + "m4danced__c", "Dancing Diamonds (Bwb) (MPU4) (set 4)", + "m4danced__d", "Dancing Diamonds (Bwb) (MPU4) (set 5)", + "m4danced__e", "Dancing Diamonds (Bwb) (MPU4) (set 6)", + "m4danced__f", "Dancing Diamonds (Bwb) (MPU4) (set 7)", + "m4danced__g", "Dancing Diamonds (Bwb) (MPU4) (set 8)", + "m4danced__h", "Dancing Diamonds (Bwb) (MPU4) (set 9)", + "m4danced__i", "Dancing Diamonds (Bwb) (MPU4) (set 10)", + "m4danced__j", "Dancing Diamonds (Bwb) (MPU4) (set 11)", + "m4danced__k", "Dancing Diamonds (Bwb) (MPU4) (set 12)", + "m4danced__l", "Dancing Diamonds (Bwb) (MPU4) (set 13)", + "m4danced__m", "Dancing Diamonds (Bwb) (MPU4) (set 14)", + "m4danced__n", "Dancing Diamonds (Bwb) (MPU4) (set 15)", + "m4danced__o", "Dancing Diamonds (Bwb) (MPU4) (set 16)", + "m4danced__p", "Dancing Diamonds (Bwb) (MPU4) (set 17)", + "m4danced__q", "Dancing Diamonds (Bwb) (MPU4) (set 18)", + "m4danced__r", "Dancing Diamonds (Bwb) (MPU4) (set 19)", + "m4danced__s", "Dancing Diamonds (Bwb) (MPU4) (set 20)", + "m4danced__t", "Dancing Diamonds (Bwb) (MPU4) (set 21)", + "m4danced__u", "Dancing Diamonds (Bwb) (MPU4) (set 22)", + "m4danced__v", "Dancing Diamonds (Bwb) (MPU4) (set 23)", + "m4danced__w", "Dancing Diamonds (Bwb) (MPU4) (set 24)", + "m4daytn", "Daytona (Bwb) (MPU4) (set 1)", + "m4daytn__a", "Daytona (Bwb) (MPU4) (set 2)", + "m4daytn__b", "Daytona (Bwb) (MPU4) (set 3)", + "m4daytn__c", "Daytona (Bwb) (MPU4) (set 4)", + "m4daytn__d", "Daytona (Bwb) (MPU4) (set 5)", + "m4daytn__e", "Daytona (Bwb) (MPU4) (set 6)", + "m4daytn__f", "Daytona (Bwb) (MPU4) (set 7)", + "m4daytn__g", "Daytona (Bwb) (MPU4) (set 8)", + "m4daytn__h", "Daytona (Bwb) (MPU4) (set 9)", + "m4daytn__i", "Daytona (Bwb) (MPU4) (set 10)", + "m4daytn__j", "Daytona (Bwb) (MPU4) (set 11)", + "m4daytn__k", "Daytona (Bwb) (MPU4) (set 12)", + "m4daytn__l", "Daytona (Bwb) (MPU4) (set 13)", + "m4daytn__m", "Daytona (Bwb) (MPU4) (set 14)", + "m4daytn__n", "Daytona (Bwb) (MPU4) (set 15)", + "m4dbl9", "Double 9's (Barcrest) (MPU4) (set 1)", + "m4dbl9a", "Double 9's (Barcrest) (MPU4) (set 2)", + "m4dblchn", "Double Chance (DJE) (MPU4)", + "m4dbldm", "Double Diamond Club (Barcrest) (MPU4) (set 1)", + "m4dbldm__a", "Double Diamond Club (Barcrest) (MPU4) (set 2)", + "m4dbldm__b", "Double Diamond Club (Barcrest) (MPU4) (set 3)", + "m4dbldm__c", "Double Diamond Club (Barcrest) (MPU4) (set 4)", + "m4dblup", "Double Up (Barcrest) (MPU4) (DU 1.5)", + "m4dcrls", "Double Crazy Reels (Qps) (MPU4) (set 1)", + "m4dcrls__a", "Double Crazy Reels (Qps) (MPU4) (set 2)", + "m4dcrls__b", "Double Crazy Reels (Qps) (MPU4) (set 3)", + "m4dcrls__c", "Double Crazy Reels (Qps) (MPU4) (set 4)", + "m4dcrls__d", "Double Crazy Reels (Qps) (MPU4) (set 5)", + "m4dcrls__e", "Double Crazy Reels (Qps) (MPU4) (set 6)", + "m4dcrls__f", "Double Crazy Reels (Qps) (MPU4) (set 7)", + "m4dcrls__g", "Double Crazy Reels (Qps) (MPU4) (set 8)", + "m4dcrls__h", "Double Crazy Reels (Qps) (MPU4) (set 9)", + "m4dcrls__i", "Double Crazy Reels (Qps) (MPU4) (set 10)", + "m4dcrls__j", "Double Crazy Reels (Qps) (MPU4) (set 11)", + "m4dcrls__k", "Double Crazy Reels (Qps) (MPU4) (set 12)", + "m4dcrls__l", "Double Crazy Reels (Qps) (MPU4) (set 13)", + "m4dcrls__m", "Double Crazy Reels (Qps) (MPU4) (set 14)", + "m4dcrls__n", "Double Crazy Reels (Qps) (MPU4) (set 15)", + "m4dcrls__o", "Double Crazy Reels (Qps) (MPU4) (set 16)", + "m4dcrls__p", "Double Crazy Reels (Qps) (MPU4) (set 17)", + "m4dcrls__q", "Double Crazy Reels (Qps) (MPU4) (set 18)", + "m4dcrls__r", "Double Crazy Reels (Qps) (MPU4) (set 19)", + "m4ddb", "Ding Dong Bells (Coinworld) (MPU4) (set 1)", + "m4ddba", "Ding Dong Bells (Coinworld) (MPU4) (set 2)", + "m4denmen", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2)", + "m4denmen_h1", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1, hack?)", + "m4denmen_h2", "Dennis The Menace (Barcrest) (MPU4) (V1 0.1, hack, set 1)", + "m4denmen_h3", "Dennis The Menace (Barcrest) (MPU4) (V1 0.1, hack, set 2)", + "m4denmend5", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1))", + "m4denmend5ad", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1AD)", + "m4denmend5b", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1B)", + "m4denmend5bd", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1BD)", + "m4denmend5d", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1D)", + "m4denmend5k", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1K)", + "m4denmend5kd", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1KD)", + "m4denmend5y", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1Y)", + "m4denmend5yd", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1YD)", + "m4denmend8", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1)", + "m4denmend8c", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1C)", + "m4denmend8d", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1D)", + "m4denmend8k", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1K)", + "m4denmend8y", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1Y)", + "m4denmend8yd", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1YD)", + "m4denmendnb", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2B)", + "m4denmendnc", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2C)", + "m4denmendnd", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2D)", + "m4denmendnk", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2K)", + "m4denmendny", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2Y)", + "m4denmendt", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1)", + "m4denmendtad", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1AD)", + "m4denmendtb", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1B)", + "m4denmendtbd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1BD)", + "m4denmendtd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1D)", + "m4denmendtk", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1K)", + "m4denmendtkd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1KD)", + "m4denmendty", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1Y)", + "m4denmendtyd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1YD)", + "m4dnj", "Double Nudge (unknown) (MPU4) (set 1)", + "m4dnja", "Double Nudge (unknown) (MPU4) (set 2)", + "m4dnjb", "Double Nudge (unknown) (MPU4) (set 3)", + "m4drac", "Dracula (Barcrest - Nova) (German) (MPU4) (set 1)", + "m4draca", "Dracula (Barcrest - Nova) (German) (MPU4) (set 2)", + "m4dracb", "Dracula (Barcrest - Nova) (German) (MPU4) (set 3)", + "m4dragon", "Dragon (Nova) (MPU4)", + "m4dtyfre", "Duty Free (Barcrest) (MPU4) (DUT 0.4)", + "m4dtyfre_h1", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1, hack?)", + "m4dtyfre_h2", "Duty Free (Barcrest) (MPU4) (DFT 0.1, hack?)", + "m4dtyfrebwb", "Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 1)", + "m4dtyfrebwb_a", "Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 2)", + "m4dtyfrebwb_b", "Duty Free (Bwb / Barcrest) (MPU4) (DF8 4.2)", + "m4dtyfrebwb_c", "Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 1)", + "m4dtyfrebwb_d", "Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 2)", + "m4dtyfrebwb_e", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1)", + "m4dtyfrebwb_f", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 2.1)", + "m4dtyfrebwb_g", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 1.1)", + "m4dtyfrebwb_h", "Duty Free (Bwb / Barcrest) (MPU4) (DFC 2.3)", + "m4dtyfref5", "Duty Free (Barcrest) (MPU4) (DF5 0.3)", + "m4dtyfref5ad", "Duty Free (Barcrest) (MPU4) (DF5 0.3AD)", + "m4dtyfref5b", "Duty Free (Barcrest) (MPU4) (DF5 0.3B)", + "m4dtyfref5bd", "Duty Free (Barcrest) (MPU4) (DF5 0.3BD)", + "m4dtyfref5d", "Duty Free (Barcrest) (MPU4) (DF5 0.3D)", + "m4dtyfref5k", "Duty Free (Barcrest) (MPU4) (DF5 0.3K)", + "m4dtyfref5kd", "Duty Free (Barcrest) (MPU4) (DF5 0.3KD)", + "m4dtyfref5r", "Duty Free (Barcrest) (MPU4) (DF5 0.3R)", + "m4dtyfref5rd", "Duty Free (Barcrest) (MPU4) (DF5 0.3RD)", + "m4dtyfref5y", "Duty Free (Barcrest) (MPU4) (DF5 0.3Y)", + "m4dtyfref5yd", "Duty Free (Barcrest) (MPU4) (DF5 0.3YD)", + "m4dtyfref8", "Duty Free (Barcrest) (MPU4) (DF8 0.1)", + "m4dtyfref8c", "Duty Free (Barcrest) (MPU4) (DF8 0.1C)", + "m4dtyfref8d", "Duty Free (Barcrest) (MPU4) (DF8 0.1D)", + "m4dtyfref8k", "Duty Free (Barcrest) (MPU4) (DF8 0.1K)", + "m4dtyfref8y", "Duty Free (Barcrest) (MPU4) (DF8 0.1Y)", + "m4dtyfref8yd", "Duty Free (Barcrest) (MPU4) (DF8 0.1YD)", + "m4dtyfreft", "Duty Free (Barcrest) (MPU4) (DFT 0.1)", + "m4dtyfreftad", "Duty Free (Barcrest) (MPU4) (DFT 0.1AD)", + "m4dtyfreftb", "Duty Free (Barcrest) (MPU4) (DFT 0.1B)", + "m4dtyfreftbd", "Duty Free (Barcrest) (MPU4) (DFT 0.1BD)", + "m4dtyfreftd", "Duty Free (Barcrest) (MPU4) (DFT 0.1D)", + "m4dtyfreftk", "Duty Free (Barcrest) (MPU4) (DFT 0.1K)", + "m4dtyfreftkd", "Duty Free (Barcrest) (MPU4) (DFT 0.1KD)", + "m4dtyfrefty", "Duty Free (Barcrest) (MPU4) (DFT 0.1Y)", + "m4dtyfreftyd", "Duty Free (Barcrest) (MPU4) (DFT 0.1YD)", + "m4dtyfreutb", "Duty Free (Barcrest) (MPU4) (DUT 0.4B)", + "m4dtyfreutc", "Duty Free (Barcrest) (MPU4) (DUT 0.4C)", + "m4dtyfrexd", "Duty Free (Barcrest) (MPU4) (XD5 0.2)", + "m4dtyfrexd_a", "Duty Free (Barcrest) (MPU4) (XD5 0.1)", + "m4dtyfrexdad", "Duty Free (Barcrest) (MPU4) (XD5 0.2AD)", + "m4dtyfrexdb", "Duty Free (Barcrest) (MPU4) (XD5 0.2B)", + "m4dtyfrexdbd", "Duty Free (Barcrest) (MPU4) (XD5 0.2BD)", + "m4dtyfrexdc", "Duty Free (Barcrest) (MPU4) (XD5 0.2C)", + "m4dtyfrexdd", "Duty Free (Barcrest) (MPU4) (XD5 0.2D)", + "m4dtyfrexdk", "Duty Free (Barcrest) (MPU4) (XD5 0.2K)", + "m4dtyfrexdkd", "Duty Free (Barcrest) (MPU4) (XD5 0.2KD)", + "m4dtyfrexdr", "Duty Free (Barcrest) (MPU4) (XD5 0.2R)", + "m4dtyfrexdrd", "Duty Free (Barcrest) (MPU4) (XD5 0.2RD)", + "m4dtyfrexdy", "Duty Free (Barcrest) (MPU4) (XD5 0.2Y)", + "m4dtyfrexdyd", "Duty Free (Barcrest) (MPU4) (XD5 0.2YD)", + "m4dtyfrexf", "Duty Free (Barcrest) (MPU4) (XFT 0.1)", + "m4dtyfrexfad", "Duty Free (Barcrest) (MPU4) (XFT 0.1AD)", + "m4dtyfrexfb", "Duty Free (Barcrest) (MPU4) (XFT 0.1B)", + "m4dtyfrexfbd", "Duty Free (Barcrest) (MPU4) (XFT 0.1BD)", + "m4dtyfrexfc", "Duty Free (Barcrest) (MPU4) (XFT 0.1C)", + "m4dtyfrexfd", "Duty Free (Barcrest) (MPU4) (XFT 0.1D)", + "m4dtyfrexfk", "Duty Free (Barcrest) (MPU4) (XFT 0.1K)", + "m4dtyfrexfkd", "Duty Free (Barcrest) (MPU4) (XFT 0.1KD)", + "m4dtyfrexfr", "Duty Free (Barcrest) (MPU4) (XFT 0.1R)", + "m4dtyfrexfrd", "Duty Free (Barcrest) (MPU4) (XFT 0.1RD)", + "m4dtyfrexfy", "Duty Free (Barcrest) (MPU4) (XFT 0.1Y)", + "m4dtyfrexfyd", "Duty Free (Barcrest) (MPU4) (XFT 0.1YD)", + "m4dz", "Danger Zone (Crystal) (MPU4)", + "m4eaw", "Everyone's A Winner (Barcrest) (MPU4) (set 1)", + "m4eaw__0", "Everyone's A Winner (Barcrest) (MPU4) (set 28)", + "m4eaw__1", "Everyone's A Winner (Barcrest) (MPU4) (set 29)", + "m4eaw__2", "Everyone's A Winner (Barcrest) (MPU4) (set 30)", + "m4eaw__3", "Everyone's A Winner (Barcrest) (MPU4) (set 31)", + "m4eaw__4", "Everyone's A Winner (Barcrest) (MPU4) (set 32)", + "m4eaw__5", "Everyone's A Winner (Barcrest) (MPU4) (set 33)", + "m4eaw__6", "Everyone's A Winner (Barcrest) (MPU4) (set 34)", + "m4eaw__7", "Everyone's A Winner (Barcrest) (MPU4) (set 35)", + "m4eaw__8", "Everyone's A Winner (Barcrest) (MPU4) (set 36)", + "m4eaw__9", "Everyone's A Winner (Barcrest) (MPU4) (set 37)", + "m4eaw__a", "Everyone's A Winner (Barcrest) (MPU4) (set 2)", + "m4eaw__a0", "Everyone's A Winner (Barcrest) (MPU4) (set 64)", + "m4eaw__a1", "Everyone's A Winner (Barcrest) (MPU4) (set 65)", + "m4eaw__a2", "Everyone's A Winner (Barcrest) (MPU4) (set 66)", + "m4eaw__a3", "Everyone's A Winner (Barcrest) (MPU4) (set 67)", + "m4eaw__a4", "Everyone's A Winner (Barcrest) (MPU4) (set 68)", + "m4eaw__a5", "Everyone's A Winner (Barcrest) (MPU4) (set 69)", + "m4eaw__a6", "Everyone's A Winner (Barcrest) (MPU4) (set 70)", + "m4eaw__a7", "Everyone's A Winner (Barcrest) (MPU4) (set 71)", + "m4eaw__a8", "Everyone's A Winner (Barcrest) (MPU4) (set 72)", + "m4eaw__a9", "Everyone's A Winner (Barcrest) (MPU4) (set 73)", + "m4eaw__aa", "Everyone's A Winner (Barcrest) (MPU4) (set 38)", + "m4eaw__ab", "Everyone's A Winner (Barcrest) (MPU4) (set 39)", + "m4eaw__ac", "Everyone's A Winner (Barcrest) (MPU4) (set 40)", + "m4eaw__ad", "Everyone's A Winner (Barcrest) (MPU4) (set 41)", + "m4eaw__ae", "Everyone's A Winner (Barcrest) (MPU4) (set 42)", + "m4eaw__af", "Everyone's A Winner (Barcrest) (MPU4) (set 43)", + "m4eaw__ag", "Everyone's A Winner (Barcrest) (MPU4) (set 44)", + "m4eaw__ah", "Everyone's A Winner (Barcrest) (MPU4) (set 45)", + "m4eaw__ai", "Everyone's A Winner (Barcrest) (MPU4) (set 46)", + "m4eaw__aj", "Everyone's A Winner (Barcrest) (MPU4) (set 47)", + "m4eaw__ak", "Everyone's A Winner (Barcrest) (MPU4) (set 48)", + "m4eaw__al", "Everyone's A Winner (Barcrest) (MPU4) (set 49)", + "m4eaw__am", "Everyone's A Winner (Barcrest) (MPU4) (set 50)", + "m4eaw__an", "Everyone's A Winner (Barcrest) (MPU4) (set 51)", + "m4eaw__ao", "Everyone's A Winner (Barcrest) (MPU4) (set 52)", + "m4eaw__ap", "Everyone's A Winner (Barcrest) (MPU4) (set 53)", + "m4eaw__aq", "Everyone's A Winner (Barcrest) (MPU4) (set 54)", + "m4eaw__ar", "Everyone's A Winner (Barcrest) (MPU4) (set 55)", + "m4eaw__as", "Everyone's A Winner (Barcrest) (MPU4) (set 56)", + "m4eaw__at", "Everyone's A Winner (Barcrest) (MPU4) (set 57)", + "m4eaw__au", "Everyone's A Winner (Barcrest) (MPU4) (set 58)", + "m4eaw__av", "Everyone's A Winner (Barcrest) (MPU4) (set 59)", + "m4eaw__aw", "Everyone's A Winner (Barcrest) (MPU4) (set 60)", + "m4eaw__ax", "Everyone's A Winner (Barcrest) (MPU4) (set 61)", + "m4eaw__ay", "Everyone's A Winner (Barcrest) (MPU4) (set 62)", + "m4eaw__az", "Everyone's A Winner (Barcrest) (MPU4) (set 63)", + "m4eaw__b", "Everyone's A Winner (Barcrest) (MPU4) (set 3)", + "m4eaw__ba", "Everyone's A Winner (Barcrest) (MPU4) (set 74)", + "m4eaw__bb", "Everyone's A Winner (Barcrest) (MPU4) (set 75)", + "m4eaw__bc", "Everyone's A Winner (Barcrest) (MPU4) (set 76)", + "m4eaw__bd", "Everyone's A Winner (Barcrest) (MPU4) (set 77)", + "m4eaw__be", "Everyone's A Winner (Barcrest) (MPU4) (set 78)", + "m4eaw__bf", "Everyone's A Winner (Barcrest) (MPU4) (set 79)", + "m4eaw__bg", "Everyone's A Winner (Barcrest) (MPU4) (set 80)", + "m4eaw__bh", "Everyone's A Winner (Barcrest) (MPU4) (set 81)", + "m4eaw__bi", "Everyone's A Winner (Barcrest) (MPU4) (set 82)", + "m4eaw__bj", "Everyone's A Winner (Barcrest) (MPU4) (set 83)", + "m4eaw__bk", "Everyone's A Winner (Barcrest) (MPU4) (set 84)", + "m4eaw__bl", "Everyone's A Winner (Barcrest) (MPU4) (set 85)", + "m4eaw__bm", "Everyone's A Winner (Barcrest) (MPU4) (set 86)", + "m4eaw__bn", "Everyone's A Winner (Barcrest) (MPU4) (set 87)", + "m4eaw__bo", "Everyone's A Winner (Barcrest) (MPU4) (set 88)", + "m4eaw__bp", "Everyone's A Winner (Barcrest) (MPU4) (set 89)", + "m4eaw__bq", "Everyone's A Winner (Barcrest) (MPU4) (set 90)", + "m4eaw__br", "Everyone's A Winner (Barcrest) (MPU4) (set 91)", + "m4eaw__bs", "Everyone's A Winner (Barcrest) (MPU4) (set 92)", + "m4eaw__bt", "Everyone's A Winner (Barcrest) (MPU4) (set 93)", + "m4eaw__bu", "Everyone's A Winner (Barcrest) (MPU4) (set 94)", + "m4eaw__bv", "Everyone's A Winner (Barcrest) (MPU4) (set 95)", + "m4eaw__bw", "Everyone's A Winner (Barcrest) (MPU4) (set 96)", + "m4eaw__bx", "Everyone's A Winner (Barcrest) (MPU4) (set 97)", + "m4eaw__bz", "Everyone's A Winner (Barcrest) (MPU4) (set 99)", + "m4eaw__c", "Everyone's A Winner (Barcrest) (MPU4) (set 4)", + "m4eaw__d", "Everyone's A Winner (Barcrest) (MPU4) (set 5)", + "m4eaw__e", "Everyone's A Winner (Barcrest) (MPU4) (set 6)", + "m4eaw__f", "Everyone's A Winner (Barcrest) (MPU4) (set 7)", + "m4eaw__g", "Everyone's A Winner (Barcrest) (MPU4) (set 8)", + "m4eaw__h", "Everyone's A Winner (Barcrest) (MPU4) (set 9)", + "m4eaw__i", "Everyone's A Winner (Barcrest) (MPU4) (set 10)", + "m4eaw__j", "Everyone's A Winner (Barcrest) (MPU4) (set 11)", + "m4eaw__k", "Everyone's A Winner (Barcrest) (MPU4) (set 12)", + "m4eaw__l", "Everyone's A Winner (Barcrest) (MPU4) (set 13)", + "m4eaw__m", "Everyone's A Winner (Barcrest) (MPU4) (set 14)", + "m4eaw__n", "Everyone's A Winner (Barcrest) (MPU4) (set 15)", + "m4eaw__o", "Everyone's A Winner (Barcrest) (MPU4) (set 16)", + "m4eaw__p", "Everyone's A Winner (Barcrest) (MPU4) (set 17)", + "m4eaw__q", "Everyone's A Winner (Barcrest) (MPU4) (set 18)", + "m4eaw__r", "Everyone's A Winner (Barcrest) (MPU4) (set 19)", + "m4eaw__s", "Everyone's A Winner (Barcrest) (MPU4) (set 20)", + "m4eaw__t", "Everyone's A Winner (Barcrest) (MPU4) (set 21)", + "m4eaw__u", "Everyone's A Winner (Barcrest) (MPU4) (set 22)", + "m4eaw__v", "Everyone's A Winner (Barcrest) (MPU4) (set 23)", + "m4eaw__w", "Everyone's A Winner (Barcrest) (MPU4) (set 24)", + "m4eaw__x", "Everyone's A Winner (Barcrest) (MPU4) (set 25)", + "m4eaw__y", "Everyone's A Winner (Barcrest) (MPU4) (set 26)", + "m4eaw__z", "Everyone's A Winner (Barcrest) (MPU4) (set 27)", + "m4eezee", "Eezee Fruits (Union) (MPU4)", + "m4eighth", "Eighth Wonder (Barcrest) (MPU4) (WON 2.2)", + "m4eightha", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 1)", + "m4eighthb", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 2)", + "m4eighthc", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 3)", + "m4eighthd", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 4, bad?)", + "m4eighthe", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 5)", + "m4eighthf", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 6)", + "m4eighthg", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 7)", + "m4elitc", "Elite Club (Crystal) (MPU4) (set 1)", + "m4elitca", "Elite Club (Crystal) (MPU4) (set 2)", + "m4elite", "Elite (Barcrest) (MPU4 w/ Plasma DMD?)", + "m4eureka", "Eureka (Empire) (MPU4, set 1)", + "m4eurekaa", "Eureka (Empire) (MPU4, set 2)", + "m4eurekab", "Eureka (Empire) (MPU4, set 3)", + "m4ewshft", "Each Way Shifter (Mdm) (MPU4)", + "m4excal", "Excalibur (Bwb) (MPU4) (set 1)", + "m4excal__a", "Excalibur (Bwb) (MPU4) (set 2)", + "m4excal__b", "Excalibur (Bwb) (MPU4) (set 3)", + "m4excal__c", "Excalibur (Bwb) (MPU4) (set 4)", + "m4excal__d", "Excalibur (Bwb) (MPU4) (set 5)", + "m4excal__e", "Excalibur (Bwb) (MPU4) (set 6)", + "m4excal__f", "Excalibur (Bwb) (MPU4) (set 7)", + "m4excal__g", "Excalibur (Bwb) (MPU4) (set 8)", + "m4excal__h", "Excalibur (Bwb) (MPU4) (set 9)", + "m4excal__i", "Excalibur (Bwb) (MPU4) (set 10)", + "m4excal__j", "Excalibur (Bwb) (MPU4) (set 11)", + "m4excaln", "Excalibur (Nova) (MPU4) (set 1)", + "m4excaln__a", "Excalibur (Nova) (MPU4) (set 2)", + "m4excam", "Excalibur (Mdm) (MPU4)", + "m4exgam", "Extra Game (Fairplay - Barcrest) (MPU4)", + "m4exlin", "Extra Lines (Pcp) (MPU4) (set 1)", + "m4exlina", "Extra Lines (Pcp) (MPU4) (set 2)", + "m4exotic", "Exotic Fruits (Bwb) (MPU4) (set 1)", + "m4exotic__a", "Exotic Fruits (Bwb) (MPU4) (set 2)", + "m4exotic__b", "Exotic Fruits (Bwb) (MPU4) (set 3)", + "m4exotic__c", "Exotic Fruits (Bwb) (MPU4) (set 4)", + "m4exotic__d", "Exotic Fruits (Bwb) (MPU4) (set 5)", + "m4exotic__e", "Exotic Fruits (Bwb) (MPU4) (set 6)", + "m4exprs", "Express (Barcrest) (DXP, Dutch) (MPU4)", + "m4fairg", "Fairground (Crystal) (MPU4)", + "m4fastfw", "Fast Forward (Barcrest) (MPU4) (set 1)", + "m4fastfw__a", "Fast Forward (Barcrest) (MPU4) (set 2)", + "m4fastfw__b", "Fast Forward (Barcrest) (MPU4) (set 3)", + "m4fastfw__c", "Fast Forward (Barcrest) (MPU4) (set 4)", + "m4fastfw__d", "Fast Forward (Barcrest) (MPU4) (set 5)", + "m4fastfw__e", "Fast Forward (Barcrest) (MPU4) (set 6)", + "m4fastfw__f", "Fast Forward (Barcrest) (MPU4) (set 7)", + "m4firebl", "Fireball (Mdm) (MPU4, set 1)", + "m4firebla", "Fireball (Mdm) (MPU4, set 2)", + "m4fireblb", "Fireball (Mdm) (MPU4, set 3)", + "m4fireblc", "Fireball (Mdm) (MPU4, set 4)", + "m4firebld", "Fireball (Mdm) (MPU4, set 5)", + "m4firice", "Fire & Ice (Bwb) (MPU4) (set 1)", + "m4firice__a", "Fire & Ice (Bwb) (MPU4) (set 2)", + "m4firice__b", "Fire & Ice (Bwb) (MPU4) (set 3)", + "m4firice__c", "Fire & Ice (Bwb) (MPU4) (set 4)", + "m4firice__d", "Fire & Ice (Bwb) (MPU4) (set 5)", + "m4firice__e", "Fire & Ice (Bwb) (MPU4) (set 6)", + "m4firice__f", "Fire & Ice (Bwb) (MPU4) (set 7)", + "m4firice__g", "Fire & Ice (Bwb) (MPU4) (set 8)", + "m4firice__h", "Fire & Ice (Bwb) (MPU4) (set 9)", + "m4firice__i", "Fire & Ice (Bwb) (MPU4) (set 10)", + "m4firice__j", "Fire & Ice (Bwb) (MPU4) (set 11)", + "m4flash", "Flash Cash (Barcrest) (MPU4, FC 1.0)", + "m4flshlt", "Flashlite (Bwb) (MPU4) (set 1)", + "m4flshlta", "Flashlite (Bwb) (MPU4) (set 2)", + "m4flshltb", "Flashlite (Bwb) (MPU4) (set 3)", + "m4flshltc", "Flashlite (Bwb) (MPU4) (set 4)", + "m4flshltd", "Flashlite (Bwb) (MPU4) (set 5)", + "m4flshlte", "Flashlite (Bwb) (MPU4) (set 6)", + "m4flshltf", "Flashlite (Bwb) (MPU4) (set 7)", + "m4flshltg", "Flashlite (Bwb) (MPU4) (set 8)", + "m4fortcb", "Fortune Club (Barcrest) (MPU4) (set 1)", + "m4fortcba", "Fortune Club (Barcrest) (MPU4) (set 2)", + "m4fortcbb", "Fortune Club (Barcrest) (MPU4) (set 3)", + "m4fourmr", "Four More (Bwb) (MPU4)", + "m4frcrak", "Fruit Cracker (Pcp) (MPU4)", + "m4frdrop", "Fruit Drop (Union) (MPU4)", + "m4fright", "Fright Night (Empire) (MPU4, v4.1X)", + "m4frighta", "Fright Night (Empire) (MPU4, v4.1)", + "m4frightb", "Fright Night (Empire) (MPU4, v4.1i)", + "m4frightc", "Fright Night (Empire) (MPU4, v?.?, set 1)", + "m4frightd", "Fright Night (Empire) (MPU4, v3.3)", + "m4frighte", "Fright Night (Empire) (MPU4, v3.0)", + "m4frightf", "Fright Night (Empire) (MPU4, v?.?, set 2)", + "m4frkstn", "Frank 'n' Stein (Crystal) (MPU4, set 1)", + "m4frkstna", "Frank 'n' Stein (Crystal) (MPU4, set 2)", + "m4frkstnb", "Frank 'n' Stein (Crystal) (MPU4, set 3)", + "m4frkstnc", "Frank 'n' Stein (Crystal) (MPU4, set 4)", + "m4frkstnd", "Frank 'n' Stein (Crystal) (MPU4, set 5)", + "m4frkstne", "Frank 'n' Stein (Crystal) (MPU4, set 6)", + "m4frkstnf", "Frank 'n' Stein (Crystal) (MPU4, set 7)", + "m4frkstng", "Frank 'n' Stein (Crystal) (MPU4, set 8)", + "m4frkstnh", "Frank 'n' Stein (Crystal) (MPU4, set 9)", + "m4frmani", "Fruit Mania (Crystal) (MPU4) (set 1)", + "m4frmania", "Fruit Mania (Crystal) (MPU4) (set 2)", + "m4frmanib", "Fruit Mania (Crystal) (MPU4) (set 3)", + "m4frmanic", "Fruit Mania (Crystal) (MPU4) (set 4)", + "m4frmtx", "Fruit Matrix (Avantime?) (MPU4) (set 1)", + "m4frmtx__a", "Fruit Matrix (Avantime?) (MPU4) (set 2)", + "m4frmtx__b", "Fruit Matrix (Avantime?) (MPU4) (set 3)", + "m4frmtx__c", "Fruit Matrix (Avantime?) (MPU4) (set 4)", + "m4frmtx__d", "Fruit Matrix (Avantime?) (MPU4) (set 5)", + "m4frmtx__e", "Fruit Matrix (Avantime?) (MPU4) (set 6)", + "m4frmtx__f", "Fruit Matrix (Avantime?) (MPU4) (set 7)", + "m4frnudg", "Fruit & Nudge (Avantime?) (MPU4) (set 1)", + "m4frnudg__a", "Fruit & Nudge (Avantime?) (MPU4) (set 2)", + "m4frnudg__b", "Fruit & Nudge (Avantime?) (MPU4) (set 3)", + "m4frnudg__c", "Fruit & Nudge (Avantime?) (MPU4) (set 4)", + "m4front", "Final Frontier (Mdm) (MPU4)", + "m4frtfl", "Fruit Full (Barcrest) (MPU4) (set 1)", + "m4frtfla", "Fruit Full (Barcrest) (MPU4) (set 2)", + "m4frtflc", "Fruit Full Club (Barcrest) (MPU4)", + "m4frtgm", "Fruit Game (Barcrest) (MPU4)", + "m4frtlnk", "Fruit Link Club (Barcrest) (MPU4) (set 1)", + "m4frtlnka", "Fruit Link Club (Barcrest) (MPU4) (set 2)", + "m4frtprs", "Fruit Preserve (Barcrest) (MPU4) (F4P 1.1, set 1)", + "m4frtprsa", "Fruit Preserve (Barcrest) (MPU4) (F4P 1.1, set 2)", + "m4fsx", "Fun Spot X (MPU4?) (set 1)", + "m4fsxa", "Fun Spot X (MPU4?) (set 2)", + "m4fsxb", "Fun Spot X (MPU4?) (set 3)", + "m4ftladn", "Find the Lady (Nova) (MPU4)", + "m4funh", "Fun House (unknown) (MPU4)", + "m4gambal", "Gamball (Barcrest) (MPU4) (set 1)", + "m4gambal__a", "Gamball (Barcrest) (MPU4) (set 2)", + "m4gambal__b", "Gamball (Barcrest) (MPU4) (set 3)", + "m4gambal__c", "Gamball (Barcrest) (MPU4) (set 4)", + "m4gamblr", "The Gambler (Empire) (MPU4, set 1)", + "m4gamblra", "The Gambler (Empire) (MPU4, set 2)", + "m4gamblrb", "The Gambler (Empire) (MPU4, set 3)", + "m4gb006", "Games Bond 006 (Barcrest) (MPU4) (set 1)", + "m4gb006__a", "Games Bond 006 (Barcrest) (MPU4) (set 2)", + "m4gb006__b", "Games Bond 006 (Barcrest) (MPU4) (set 3)", + "m4gb006__c", "Games Bond 006 (Barcrest) (MPU4) (set 4)", + "m4gbust", "Ghost Buster (Barcrest) (MPU4) (set 1)", + "m4gbust__a", "Ghost Buster (Barcrest) (MPU4) (set 2)", + "m4gbust__b", "Ghost Buster (Barcrest) (MPU4) (set 3)", + "m4gbust__c", "Ghost Buster (Barcrest) (MPU4) (set 4)", + "m4gbust__d", "Ghost Buster (Barcrest) (MPU4) (set 5)", + "m4gbust__e", "Ghost Buster (Barcrest) (MPU4) (set 6)", + "m4gbust__f", "Ghost Buster (Barcrest) (MPU4) (set 7)", + "m4gbust__g", "Ghost Buster (Barcrest) (MPU4) (set 8)", + "m4gbust__h", "Ghost Buster (Barcrest) (MPU4) (set 9)", + "m4gbust__i", "Ghost Buster (Barcrest) (MPU4) (set 10)", + "m4gbust__j", "Ghost Buster (Barcrest) (MPU4) (set 11)", + "m4gbust__k", "Ghost Buster (Barcrest) (MPU4) (set 12)", + "m4gbust__l", "Ghost Buster (Barcrest) (MPU4) (set 13)", + "m4gbust__m", "Ghost Buster (Barcrest) (MPU4) (set 14)", + "m4gbust__n", "Ghost Buster (Barcrest) (MPU4) (set 15)", + "m4gbust__o", "Ghost Buster (Barcrest) (MPU4) (set 16)", + "m4gbust__p", "Ghost Buster (Barcrest) (MPU4) (set 17)", + "m4gbust__q", "Ghost Buster (Barcrest) (MPU4) (set 18)", + "m4gbust__r", "Ghost Buster (Barcrest) (MPU4) (set 19)", + "m4gbust__s", "Ghost Buster (Barcrest) (MPU4) (set 20)", + "m4gbust__t", "Ghost Buster (Barcrest) (MPU4) (set 21)", + "m4gbust__u", "Ghost Buster (Barcrest) (MPU4) (set 22)", + "m4gbust__v", "Ghost Buster (Barcrest) (MPU4) (set 23)", + "m4gbust__w", "Ghost Buster (Barcrest) (MPU4) (set 24)", + "m4gclue", "Give Us A Clue (Barcrest) (MPU4) (set 1)", + "m4gclue__a", "Give Us A Clue (Barcrest) (MPU4) (set 2)", + "m4gclue__b", "Give Us A Clue (Barcrest) (MPU4) (set 3)", + "m4gclue__c", "Give Us A Clue (Barcrest) (MPU4) (set 4)", + "m4gclue__d", "Give Us A Clue (Barcrest) (MPU4) (set 5)", + "m4gclue__e", "Give Us A Clue (Barcrest) (MPU4) (set 6)", + "m4gclue__f", "Give Us A Clue (Barcrest) (MPU4) (set 7)", + "m4gclue__g", "Give Us A Clue (Barcrest) (MPU4) (set 8)", + "m4gclue__h", "Give Us A Clue (Barcrest) (MPU4) (set 9)", + "m4gclue__i", "Give Us A Clue (Barcrest) (MPU4) (set 10)", + "m4gclue__j", "Give Us A Clue (Barcrest) (MPU4) (set 11)", + "m4gclue__k", "Give Us A Clue (Barcrest) (MPU4) (set 12)", + "m4gclue__l", "Give Us A Clue (Barcrest) (MPU4) (set 13)", + "m4gclue__m", "Give Us A Clue (Barcrest) (MPU4) (set 14)", + "m4gclue__n", "Give Us A Clue (Barcrest) (MPU4) (set 15)", + "m4gclue__o", "Give Us A Clue (Barcrest) (MPU4) (set 16)", + "m4gclue__p", "Give Us A Clue (Barcrest) (MPU4) (set 17)", + "m4gclue__q", "Give Us A Clue (Barcrest) (MPU4) (set 18)", + "m4gclue__r", "Give Us A Clue (Barcrest) (MPU4) (set 19)", + "m4gclue__s", "Give Us A Clue (Barcrest) (MPU4) (set 20)", + "m4gclue__t", "Give Us A Clue (Barcrest) (MPU4) (set 21)", + "m4gclue__u", "Give Us A Clue (Barcrest) (MPU4) (set 22)", + "m4gclue__v", "Give Us A Clue (Barcrest) (MPU4) (set 23)", + "m4gclue__w", "Give Us A Clue (Barcrest) (MPU4) (set 24)", + "m4giant", "Giant (Barcrest) (DGI, Dutch) (MPU4)", + "m4gldgat", "Golden Gate (Barcrest) [DGG, Dutch] (MPU4)", + "m4gldjok", "Golden Joker (Barcrest) (Dutch) (MPU4) (DGJ 1.2)", + "m4gldstr", "Gold Strike (Barcrest) (MPU4) (G4S 2.0)", + "m4gnsmk", "Gun Smoke (Barcrest) (Dutch) (MPU4)", + "m4gobana", "Go Bananas (Union) (MPU4, set 1)", + "m4gobanaa", "Go Bananas (Union) (MPU4, set 2)", + "m4gobanab", "Go Bananas (Union) (MPU4, set 3)", + "m4gobanac", "Go Bananas (Union) (MPU4, set 4)", + "m4gobanad", "Go Bananas (Union) (MPU4, set 5)", + "m4goldfc", "Gold Fever (Crystal) (MPU4) (set 1)", + "m4goldfca", "Gold Fever (Crystal) (MPU4) (set 2)", + "m4goldfcb", "Gold Fever (Crystal) (MPU4) (set 3)", + "m4goldfv", "Gold Fever (Empire) (MPU4)", + "m4goldnn", "Golden Years (Nova) (MPU4)", + "m4goldxc", "Gold Exchange Club (Crystal) (MPU4) (set 1)", + "m4goldxca", "Gold Exchange Club (Crystal) (MPU4) (set 2)", + "m4goldxcb", "Gold Exchange Club (Crystal) (MPU4) (set 3)", + "m4goldxcc", "Gold Exchange Club (Crystal) (MPU4) (set 4)", + "m4goldxcd", "Gold Exchange Club (Crystal) (MPU4) (set 5)", + "m4goldxce", "Gold Exchange Club (Crystal) (MPU4) (set 6)", + "m4goodtm", "Let The Good Times Roll (Barcrest) (MPU4) (set 1)", + "m4goodtm__0", "Let The Good Times Roll (Barcrest) (MPU4) (set 28)", + "m4goodtm__1", "Let The Good Times Roll (Barcrest) (MPU4) (set 29)", + "m4goodtm__2", "Let The Good Times Roll (Barcrest) (MPU4) (set 30)", + "m4goodtm__3", "Let The Good Times Roll (Barcrest) (MPU4) (set 31)", + "m4goodtm__4", "Let The Good Times Roll (Barcrest) (MPU4) (set 32)", + "m4goodtm__5", "Let The Good Times Roll (Barcrest) (MPU4) (set 33)", + "m4goodtm__6", "Let The Good Times Roll (Barcrest) (MPU4) (set 34)", + "m4goodtm__7", "Let The Good Times Roll (Barcrest) (MPU4) (set 35)", + "m4goodtm__8", "Let The Good Times Roll (Barcrest) (MPU4) (set 36)", + "m4goodtm__9", "Let The Good Times Roll (Barcrest) (MPU4) (set 37)", + "m4goodtm__a", "Let The Good Times Roll (Barcrest) (MPU4) (set 2)", + "m4goodtm__a0", "Let The Good Times Roll (Barcrest) (MPU4) (set 64)", + "m4goodtm__a1", "Let The Good Times Roll (Barcrest) (MPU4) (set 65)", + "m4goodtm__a2", "Let The Good Times Roll (Barcrest) (MPU4) (set 66)", + "m4goodtm__a3", "Let The Good Times Roll (Barcrest) (MPU4) (set 67)", + "m4goodtm__a4", "Let The Good Times Roll (Barcrest) (MPU4) (set 68)", + "m4goodtm__a5", "Let The Good Times Roll (Barcrest) (MPU4) (set 69)", + "m4goodtm__a6", "Let The Good Times Roll (Barcrest) (MPU4) (set 70)", + "m4goodtm__aa", "Let The Good Times Roll (Barcrest) (MPU4) (set 38)", + "m4goodtm__ab", "Let The Good Times Roll (Barcrest) (MPU4) (set 39)", + "m4goodtm__ac", "Let The Good Times Roll (Barcrest) (MPU4) (set 40)", + "m4goodtm__ad", "Let The Good Times Roll (Barcrest) (MPU4) (set 41)", + "m4goodtm__ae", "Let The Good Times Roll (Barcrest) (MPU4) (set 42)", + "m4goodtm__af", "Let The Good Times Roll (Barcrest) (MPU4) (set 43)", + "m4goodtm__ag", "Let The Good Times Roll (Barcrest) (MPU4) (set 44)", + "m4goodtm__ah", "Let The Good Times Roll (Barcrest) (MPU4) (set 45)", + "m4goodtm__ai", "Let The Good Times Roll (Barcrest) (MPU4) (set 46)", + "m4goodtm__aj", "Let The Good Times Roll (Barcrest) (MPU4) (set 47)", + "m4goodtm__ak", "Let The Good Times Roll (Barcrest) (MPU4) (set 48)", + "m4goodtm__al", "Let The Good Times Roll (Barcrest) (MPU4) (set 49)", + "m4goodtm__am", "Let The Good Times Roll (Barcrest) (MPU4) (set 50)", + "m4goodtm__an", "Let The Good Times Roll (Barcrest) (MPU4) (set 51)", + "m4goodtm__ao", "Let The Good Times Roll (Barcrest) (MPU4) (set 52)", + "m4goodtm__ap", "Let The Good Times Roll (Barcrest) (MPU4) (set 53)", + "m4goodtm__aq", "Let The Good Times Roll (Barcrest) (MPU4) (set 54)", + "m4goodtm__ar", "Let The Good Times Roll (Barcrest) (MPU4) (set 55)", + "m4goodtm__as", "Let The Good Times Roll (Barcrest) (MPU4) (set 56)", + "m4goodtm__at", "Let The Good Times Roll (Barcrest) (MPU4) (set 57)", + "m4goodtm__au", "Let The Good Times Roll (Barcrest) (MPU4) (set 58)", + "m4goodtm__av", "Let The Good Times Roll (Barcrest) (MPU4) (set 59)", + "m4goodtm__aw", "Let The Good Times Roll (Barcrest) (MPU4) (set 60)", + "m4goodtm__ax", "Let The Good Times Roll (Barcrest) (MPU4) (set 61)", + "m4goodtm__ay", "Let The Good Times Roll (Barcrest) (MPU4) (set 62)", + "m4goodtm__az", "Let The Good Times Roll (Barcrest) (MPU4) (set 63)", + "m4goodtm__b", "Let The Good Times Roll (Barcrest) (MPU4) (set 3)", + "m4goodtm__c", "Let The Good Times Roll (Barcrest) (MPU4) (set 4)", + "m4goodtm__d", "Let The Good Times Roll (Barcrest) (MPU4) (set 5)", + "m4goodtm__e", "Let The Good Times Roll (Barcrest) (MPU4) (set 6)", + "m4goodtm__f", "Let The Good Times Roll (Barcrest) (MPU4) (set 7)", + "m4goodtm__g", "Let The Good Times Roll (Barcrest) (MPU4) (set 8)", + "m4goodtm__h", "Let The Good Times Roll (Barcrest) (MPU4) (set 9)", + "m4goodtm__i", "Let The Good Times Roll (Barcrest) (MPU4) (set 10)", + "m4goodtm__j", "Let The Good Times Roll (Barcrest) (MPU4) (set 11)", + "m4goodtm__k", "Let The Good Times Roll (Barcrest) (MPU4) (set 12)", + "m4goodtm__l", "Let The Good Times Roll (Barcrest) (MPU4) (set 13)", + "m4goodtm__m", "Let The Good Times Roll (Barcrest) (MPU4) (set 14)", + "m4goodtm__n", "Let The Good Times Roll (Barcrest) (MPU4) (set 15)", + "m4goodtm__o", "Let The Good Times Roll (Barcrest) (MPU4) (set 16)", + "m4goodtm__p", "Let The Good Times Roll (Barcrest) (MPU4) (set 17)", + "m4goodtm__q", "Let The Good Times Roll (Barcrest) (MPU4) (set 18)", + "m4goodtm__r", "Let The Good Times Roll (Barcrest) (MPU4) (set 19)", + "m4goodtm__s", "Let The Good Times Roll (Barcrest) (MPU4) (set 20)", + "m4goodtm__t", "Let The Good Times Roll (Barcrest) (MPU4) (set 21)", + "m4goodtm__u", "Let The Good Times Roll (Barcrest) (MPU4) (set 22)", + "m4goodtm__v", "Let The Good Times Roll (Barcrest) (MPU4) (set 23)", + "m4goodtm__w", "Let The Good Times Roll (Barcrest) (MPU4) (set 24)", + "m4goodtm__x", "Let The Good Times Roll (Barcrest) (MPU4) (set 25)", + "m4goodtm__y", "Let The Good Times Roll (Barcrest) (MPU4) (set 26)", + "m4goodtm__z", "Let The Good Times Roll (Barcrest) (MPU4) (set 27)", + "m4graff", "Graffiti (Barcrest) (MPU4) (set 1)", + "m4graff__a", "Graffiti (Barcrest) (MPU4) (set 2)", + "m4graff__b", "Graffiti (Barcrest) (MPU4) (set 3)", + "m4graffd", "Grafitti (Barcrest) [Dutch] (MPU4)", + "m4grands", "Grandstand Club (Barcrest) (MPU4) (G2D 4.0)", + "m4grandsa", "Grandstand Club (Barcrest) (MPU4) (GD 1.1)", + "m4grbbnk", "Grab The Bank (Barcrest) (MPU4) (G4B 2.0)", + "m4grbbnka", "Grab The Bank (Barcrest) (MPU4) (G4B 2.1)", + "m4grbbnkb", "Grab The Bank (Barcrest) (MPU4) (G4B 1.0)", + "m4gtrain", "Ghost Train (Empire) (MPU4, set 1)", + "m4gtraina", "Ghost Train (Empire) (MPU4, set 2)", + "m4gtrainb", "Ghost Train (Empire) (MPU4, set 3)", + "m4gtrainc", "Ghost Train (Empire) (MPU4, set 4)", + "m4gvibes", "Good Vibrations (Union - Empire) (MPU4, set 1)", + "m4gvibesa", "Good Vibrations (Union - Empire) (MPU4, set 2)", + "m4hapfrt", "Happy Fruits (Coinworld) (MPU4) (set 1)", + "m4hapfrta", "Happy Fruits (Coinworld) (MPU4) (set 2)", + "m4hapfrtb", "Happy Fruits (Coinworld) (MPU4) (set 3)", + "m4harle", "Harlequin (Bwb) (MPU4) (set 1)", + "m4harle__a", "Harlequin (Bwb) (MPU4) (set 2)", + "m4harle__b", "Harlequin (Bwb) (MPU4) (set 3)", + "m4harle__c", "Harlequin (Bwb) (MPU4) (set 4)", + "m4harle__d", "Harlequin (Bwb) (MPU4) (set 5)", + "m4harle__e", "Harlequin (Bwb) (MPU4) (set 6)", + "m4harle__f", "Harlequin (Bwb) (MPU4) (set 7)", + "m4harle__g", "Harlequin (Bwb) (MPU4) (set 8)", + "m4harle__h", "Harlequin (Bwb) (MPU4) (set 9)", + "m4harle__i", "Harlequin (Bwb) (MPU4) (set 10)", + "m4harle__j", "Harlequin (Bwb) (MPU4) (set 11)", + "m4harle__k", "Harlequin (Bwb) (MPU4) (set 12)", + "m4harle__l", "Harlequin (Bwb) (MPU4) (set 13)", + "m4harle__m", "Harlequin (Bwb) (MPU4) (set 14)", + "m4harle__n", "Harlequin (Bwb) (MPU4) (set 15)", + "m4harle__o", "Harlequin (Bwb) (MPU4) (set 16)", + "m4harle__p", "Harlequin (Bwb) (MPU4) (set 17)", + "m4harle__q", "Harlequin (Bwb) (MPU4) (set 18)", + "m4harle__r", "Harlequin (Bwb) (MPU4) (set 19)", + "m4harle__s", "Harlequin (Bwb) (MPU4) (set 20)", + "m4harle__t", "Harlequin (Bwb) (MPU4) (set 21)", + "m4harle__u", "Harlequin (Bwb) (MPU4) (set 22)", + "m4harle__v", "Harlequin (Bwb) (MPU4) (set 23)", + "m4harle__w", "Harlequin (Bwb) (MPU4) (set 24)", + "m4harle__x", "Harlequin (Bwb) (MPU4) (set 25)", + "m4haunt", "Haunted House (Empire) (MPU4, set 1)", + "m4haunta", "Haunted House (Empire) (MPU4, set 2)", + "m4hauntb", "Haunted House (Empire) (MPU4, set 3)", + "m4hauntc", "Haunted House (Empire) (MPU4, set 4)", + "m4hauntd", "Haunted House (Empire) (MPU4, set 5)", + "m4hijinx", "Hi Jinx (Barcrest) (MPU4) (set 1)", + "m4hijinx__0", "Hi Jinx (Barcrest) (MPU4) (set 28)", + "m4hijinx__1", "Hi Jinx (Barcrest) (MPU4) (set 29)", + "m4hijinx__2", "Hi Jinx (Barcrest) (MPU4) (set 30)", + "m4hijinx__3", "Hi Jinx (Barcrest) (MPU4) (set 31)", + "m4hijinx__4", "Hi Jinx (Barcrest) (MPU4) (set 32)", + "m4hijinx__5", "Hi Jinx (Barcrest) (MPU4) (set 33)", + "m4hijinx__6", "Hi Jinx (Barcrest) (MPU4) (set 34)", + "m4hijinx__7", "Hi Jinx (Barcrest) (MPU4) (set 35)", + "m4hijinx__8", "Hi Jinx (Barcrest) (MPU4) (set 36)", + "m4hijinx__9", "Hi Jinx (Barcrest) (MPU4) (set 37)", + "m4hijinx__a", "Hi Jinx (Barcrest) (MPU4) (set 2)", + "m4hijinx__aa", "Hi Jinx (Barcrest) (MPU4) (set 38)", + "m4hijinx__ab", "Hi Jinx (Barcrest) (MPU4) (set 39)", + "m4hijinx__b", "Hi Jinx (Barcrest) (MPU4) (set 3)", + "m4hijinx__c", "Hi Jinx (Barcrest) (MPU4) (set 4)", + "m4hijinx__d", "Hi Jinx (Barcrest) (MPU4) (set 5)", + "m4hijinx__e", "Hi Jinx (Barcrest) (MPU4) (set 6)", + "m4hijinx__f", "Hi Jinx (Barcrest) (MPU4) (set 7)", + "m4hijinx__g", "Hi Jinx (Barcrest) (MPU4) (set 8)", + "m4hijinx__h", "Hi Jinx (Barcrest) (MPU4) (set 9)", + "m4hijinx__i", "Hi Jinx (Barcrest) (MPU4) (set 10)", + "m4hijinx__j", "Hi Jinx (Barcrest) (MPU4) (set 11)", + "m4hijinx__k", "Hi Jinx (Barcrest) (MPU4) (set 12)", + "m4hijinx__l", "Hi Jinx (Barcrest) (MPU4) (set 13)", + "m4hijinx__m", "Hi Jinx (Barcrest) (MPU4) (set 14)", + "m4hijinx__n", "Hi Jinx (Barcrest) (MPU4) (set 15)", + "m4hijinx__o", "Hi Jinx (Barcrest) (MPU4) (set 16)", + "m4hijinx__p", "Hi Jinx (Barcrest) (MPU4) (set 17)", + "m4hijinx__q", "Hi Jinx (Barcrest) (MPU4) (set 18)", + "m4hijinx__r", "Hi Jinx (Barcrest) (MPU4) (set 19)", + "m4hijinx__s", "Hi Jinx (Barcrest) (MPU4) (set 20)", + "m4hijinx__t", "Hi Jinx (Barcrest) (MPU4) (set 21)", + "m4hijinx__u", "Hi Jinx (Barcrest) (MPU4) (set 22)", + "m4hijinx__v", "Hi Jinx (Barcrest) (MPU4) (set 23)", + "m4hijinx__w", "Hi Jinx (Barcrest) (MPU4) (set 24)", + "m4hijinx__x", "Hi Jinx (Barcrest) (MPU4) (set 25)", + "m4hijinx__y", "Hi Jinx (Barcrest) (MPU4) (set 26)", + "m4hijinx__z", "Hi Jinx (Barcrest) (MPU4) (set 27)", + "m4hilonv", "Hi Lo Casino (Nova) (MPU4)", + "m4hirise", "High Rise (Barcrest) (MPU4) (set 1)", + "m4hirisea", "High Rise (Barcrest) (MPU4) (set 2)", + "m4hiriseb", "High Rise (Barcrest) (MPU4) (set 3)", + "m4hirisec", "High Rise (Barcrest) (MPU4) (set 4)", + "m4hirised", "High Rise (Barcrest) (MPU4) (set 5)", + "m4hirisee", "High Rise (Barcrest) (MPU4) (set 6)", + "m4hirol", "Hi Roller Club (Crystal) (MPU4) (set 1)", + "m4hirola", "Hi Roller Club (Crystal) (MPU4) (set 2)", + "m4hiroll", "High Roller (Barcrest) (MPU4)", + "m4hisprt", "High Spirits (Empire) (MPU4, set 1)", + "m4hisprta", "High Spirits (Empire) (MPU4, set 2)", + "m4hisprtb", "High Spirits (Empire) (MPU4, set 3)", + "m4hisprtc", "High Spirits (Empire) (MPU4, set 4)", + "m4hisprtd", "High Spirits (Empire) (MPU4, set 5)", + "m4hisprte", "High Spirits (Empire) (MPU4, set 6)", + "m4hittop", "Hit The Top (Barcrest) (MPU4) (set 1)", + "m4hittop__0", "Hit The Top (Barcrest) (MPU4) (set 28)", + "m4hittop__1", "Hit The Top (Barcrest) (MPU4) (set 29)", + "m4hittop__2", "Hit The Top (Barcrest) (MPU4) (set 30)", + "m4hittop__3", "Hit The Top (Barcrest) (MPU4) (set 31)", + "m4hittop__4", "Hit The Top (Barcrest) (MPU4) (set 32)", + "m4hittop__5", "Hit The Top (Barcrest) (MPU4) (set 33)", + "m4hittop__6", "Hit The Top (Barcrest) (MPU4) (set 34)", + "m4hittop__7", "Hit The Top (Barcrest) (MPU4) (set 35)", + "m4hittop__8", "Hit The Top (Barcrest) (MPU4) (set 36)", + "m4hittop__9", "Hit The Top (Barcrest) (MPU4) (set 37)", + "m4hittop__a", "Hit The Top (Barcrest) (MPU4) (set 2)", + "m4hittop__aa", "Hit The Top (Barcrest) (MPU4) (set 38)", + "m4hittop__ab", "Hit The Top (Barcrest) (MPU4) (set 39)", + "m4hittop__ac", "Hit The Top (Barcrest) (MPU4) (set 40)", + "m4hittop__ad", "Hit The Top (Barcrest) (MPU4) (set 41)", + "m4hittop__ae", "Hit The Top (Barcrest) (MPU4) (set 42)", + "m4hittop__af", "Hit The Top (Barcrest) (MPU4) (set 43)", + "m4hittop__ag", "Hit The Top (Barcrest) (MPU4) (set 44)", + "m4hittop__ah", "Hit The Top (Barcrest) (MPU4) (set 45)", + "m4hittop__ai", "Hit The Top (Barcrest) (MPU4) (set 46)", + "m4hittop__aj", "Hit The Top (Barcrest) (MPU4) (set 47)", + "m4hittop__ak", "Hit The Top (Barcrest) (MPU4) (set 48)", + "m4hittop__al", "Hit The Top (Barcrest) (MPU4) (set 49)", + "m4hittop__am", "Hit The Top (Barcrest) (MPU4) (set 50)", + "m4hittop__an", "Hit The Top (Barcrest) (MPU4) (set 51)", + "m4hittop__ao", "Hit The Top (Barcrest) (MPU4) (set 52)", + "m4hittop__ap", "Hit The Top (Barcrest) (MPU4) (set 53)", + "m4hittop__aq", "Hit The Top (Barcrest) (MPU4) (set 54)", + "m4hittop__ar", "Hit The Top (Barcrest) (MPU4) (set 55)", + "m4hittop__as", "Hit The Top (Barcrest) (MPU4) (set 56)", + "m4hittop__at", "Hit The Top (Barcrest) (MPU4) (set 57)", + "m4hittop__au", "Hit The Top (Barcrest) (MPU4) (set 58)", + "m4hittop__av", "Hit The Top (Barcrest) (MPU4) (set 59)", + "m4hittop__aw", "Hit The Top (Barcrest) (MPU4) (set 60)", + "m4hittop__ax", "Hit The Top (Barcrest) (MPU4) (set 61)", + "m4hittop__b", "Hit The Top (Barcrest) (MPU4) (set 3)", + "m4hittop__c", "Hit The Top (Barcrest) (MPU4) (set 4)", + "m4hittop__d", "Hit The Top (Barcrest) (MPU4) (set 5)", + "m4hittop__e", "Hit The Top (Barcrest) (MPU4) (set 6)", + "m4hittop__f", "Hit The Top (Barcrest) (MPU4) (set 7)", + "m4hittop__g", "Hit The Top (Barcrest) (MPU4) (set 8)", + "m4hittop__h", "Hit The Top (Barcrest) (MPU4) (set 9)", + "m4hittop__i", "Hit The Top (Barcrest) (MPU4) (set 10)", + "m4hittop__j", "Hit The Top (Barcrest) (MPU4) (set 11)", + "m4hittop__k", "Hit The Top (Barcrest) (MPU4) (set 12)", + "m4hittop__l", "Hit The Top (Barcrest) (MPU4) (set 13)", + "m4hittop__m", "Hit The Top (Barcrest) (MPU4) (set 14)", + "m4hittop__n", "Hit The Top (Barcrest) (MPU4) (set 15)", + "m4hittop__o", "Hit The Top (Barcrest) (MPU4) (set 16)", + "m4hittop__p", "Hit The Top (Barcrest) (MPU4) (set 17)", + "m4hittop__q", "Hit The Top (Barcrest) (MPU4) (set 18)", + "m4hittop__r", "Hit The Top (Barcrest) (MPU4) (set 19)", + "m4hittop__s", "Hit The Top (Barcrest) (MPU4) (set 20)", + "m4hittop__t", "Hit The Top (Barcrest) (MPU4) (set 21)", + "m4hittop__u", "Hit The Top (Barcrest) (MPU4) (set 22)", + "m4hittop__v", "Hit The Top (Barcrest) (MPU4) (set 23)", + "m4hittop__w", "Hit The Top (Barcrest) (MPU4) (set 24)", + "m4hittop__x", "Hit The Top (Barcrest) (MPU4) (set 25)", + "m4hittop__y", "Hit The Top (Barcrest) (MPU4) (set 26)", + "m4hittop__z", "Hit The Top (Barcrest) (MPU4) (set 27)", + "m4hittp2", "Hit The Top (Barcrest) (MPU4, Mod 2 type, H4T 2.0, set 1)", + "m4hittp2a", "Hit The Top (Barcrest) (MPU4, Mod 2 type, H4T 2.0, set 2)", + "m4holdon", "Hold On (Barcrest) (Dutch) (MPU4)", + "m4holdtm", "Hold Timer (Barcrest) (Dutch) (MPU4) (DHT)", + "m4holywd", "Hollywood (Bwb) (MPU4)", + "m4hotcsh", "Hot Cash (Empire) (MPU4, set 1)", + "m4hotcsha", "Hot Cash (Empire) (MPU4, set 2)", + "m4hotcshb", "Hot Cash (Empire) (MPU4, set 3)", + "m4hotcshc", "Hot Cash (Empire) (MPU4, set 4)", + "m4hotrod", "Hot Rod (Barcrest) (MPU4) (set 1)", + "m4hotrod__a", "Hot Rod (Barcrest) (MPU4) (set 2)", + "m4hotrod__b", "Hot Rod (Barcrest) (MPU4) (set 3)", + "m4hotrod__c", "Hot Rod (Barcrest) (MPU4) (set 4)", + "m4hotrod__d", "Hot Rod (Barcrest) (MPU4) (set 5)", + "m4hotrod__e", "Hot Rod (Barcrest) (MPU4) (set 6)", + "m4hotrod__f", "Hot Rod (Barcrest) (MPU4) (set 7)", + "m4hotrod__g", "Hot Rod (Barcrest) (MPU4) (set 8)", + "m4hotrod__h", "Hot Rod (Barcrest) (MPU4) (set 9)", + "m4hotrod__i", "Hot Rod (Barcrest) (MPU4) (set 10)", + "m4hotrod__j", "Hot Rod (Barcrest) (MPU4) (set 11)", + "m4hotrod__k", "Hot Rod (Barcrest) (MPU4) (set 12)", + "m4hotrod__l", "Hot Rod (Barcrest) (MPU4) (set 13)", + "m4hotrod__m", "Hot Rod (Barcrest) (MPU4) (set 14)", + "m4hotrod__n", "Hot Rod (Barcrest) (MPU4) (set 15)", + "m4hotrod__o", "Hot Rod (Barcrest) (MPU4) (set 16)", + "m4hotrod__p", "Hot Rod (Barcrest) (MPU4) (set 17)", + "m4hotrod__q", "Hot Rod (Barcrest) (MPU4) (set 18)", + "m4hotrod__r", "Hot Rod (Barcrest) (MPU4) (set 19)", + "m4hotrod__s", "Hot Rod (Barcrest) (MPU4) (set 20)", + "m4hotrod__t", "Hot Rod (Barcrest) (MPU4) (set 21)", + "m4hotrod__u", "Hot Rod (Barcrest) (MPU4) (set 22)", + "m4hotrod__v", "Hot Rod (Barcrest) (MPU4) (set 23)", + "m4hpyjok", "Happy Joker (Barcrest) (Dutch) (MPU4) (DHJ1.2)", + "m4hslo", "unknown MPU4 'HOT 3.0' (MPU4?)", + "m4hstr", "Happy Streak (Coinworld) (MPU4) (set 1)", + "m4hstra", "Happy Streak (Coinworld) (MPU4) (set 2)", + "m4hstrb", "Happy Streak (Coinworld) (MPU4) (set 3)", + "m4hstrcs", "Casino Happy Streak (Coinworld) (MPU4) (set 1)", + "m4hstrcsa", "Casino Happy Streak (Coinworld) (MPU4) (set 2)", + "m4hstrcsb", "Casino Happy Streak (Coinworld) (MPU4) (set 3)", + "m4hstrcsc", "Casino Happy Streak (Coinworld) (MPU4) (set 4)", + "m4hstrcsd", "Casino Happy Streak (Coinworld) (MPU4) (set 5)", + "m4hvhel", "Heaven & Hell (Bwb) (MPU4) (set 1)", + "m4hvhel__a", "Heaven & Hell (Bwb) (MPU4) (set 2)", + "m4hvhel__b", "Heaven & Hell (Bwb) (MPU4) (set 3)", + "m4hvhel__c", "Heaven & Hell (Bwb) (MPU4) (set 4)", + "m4hvhel__d", "Heaven & Hell (Bwb) (MPU4) (set 5)", + "m4hvhel__e", "Heaven & Hell (Bwb) (MPU4) (set 6)", + "m4hvhel__f", "Heaven & Hell (Bwb) (MPU4) (set 7)", + "m4hvhel__g", "Heaven & Hell (Bwb) (MPU4) (set 8)", + "m4hvhel__h", "Heaven & Hell (Bwb) (MPU4) (set 9)", + "m4hypclb", "Hyper Viper Club (Barcrest) (MPU4) (set 1)", + "m4hypclb__a", "Hyper Viper Club (Barcrest) (MPU4) (set 2)", + "m4hypclb__b", "Hyper Viper Club (Barcrest) (MPU4) (set 3)", + "m4hypclb__c", "Hyper Viper Club (Barcrest) (MPU4) (set 4)", + "m4hypvip", "Hyper Viper (Barcrest) (MPU4) (set 1)", + "m4hypvip__a", "Hyper Viper (Barcrest) (MPU4) (set 2)", + "m4hypvip__b", "Hyper Viper (Barcrest) (MPU4) (set 3)", + "m4hypvip__c", "Hyper Viper (Barcrest) (MPU4) (set 4)", + "m4hypvip__d", "Hyper Viper (Barcrest) (MPU4) (set 5)", + "m4hypvip__e", "Hyper Viper (Barcrest) (MPU4) (set 6)", + "m4hypvip__f", "Hyper Viper (Barcrest) (MPU4) (set 7)", + "m4hypvip__g", "Hyper Viper (Barcrest) (MPU4) (set 8)", + "m4hypvip__h", "Hyper Viper (Barcrest) (MPU4) (set 9)", + "m4hypvip__i", "Hyper Viper (Barcrest) (MPU4) (set 10)", + "m4hypvip__j", "Hyper Viper (Barcrest) (MPU4) (set 11)", + "m4hypvip__k", "Hyper Viper (Barcrest) (MPU4) (set 12)", + "m4hypvip__l", "Hyper Viper (Barcrest) (MPU4) (set 13)", + "m4hypvip__m", "Hyper Viper (Barcrest) (MPU4) (set 14)", + "m4hypvip__n", "Hyper Viper (Barcrest) (MPU4) (set 15)", + "m4hypvip__o", "Hyper Viper (Barcrest) (MPU4) (set 16)", + "m4hypvip__p", "Hyper Viper (Barcrest) (MPU4) (set 17)", + "m4hypvip__q", "Hyper Viper (Barcrest) (MPU4) (set 18)", + "m4hypvip__r", "Hyper Viper (Barcrest) (MPU4) (set 19)", + "m4hypvip__s", "Hyper Viper (Barcrest) (MPU4) (set 20)", + "m4hypvip__t", "Hyper Viper (Barcrest) (MPU4) (set 21)", + "m4hypvip__u", "Hyper Viper (Barcrest) (MPU4) (set 22)", + "m4hypvip__v", "Hyper Viper (Barcrest) (MPU4) (set 23)", + "m4indycr", "Indy Cars (Bwb) (MPU4) (set 1)", + "m4indycr__a", "Indy Cars (Bwb) (MPU4) (set 2)", + "m4indycr__b", "Indy Cars (Bwb) (MPU4) (set 3)", + "m4indycr__c", "Indy Cars (Bwb) (MPU4) (set 4)", + "m4indycr__d", "Indy Cars (Bwb) (MPU4) (set 5)", + "m4indycr__e", "Indy Cars (Bwb) (MPU4) (set 6)", + "m4indycr__f", "Indy Cars (Bwb) (MPU4) (set 7)", + "m4intcep", "Interceptor (Barcrest) (MPU4) (INT 3.0)", + "m4intcepa", "Interceptor (Barcrest) (MPU4) (INT 3.0X)", + "m4intcepb", "Interceptor (Barcrest) (MPU4) (INT 1.1)", + "m4jakjok", "Jackpot Jokers (Bwb) (MPU4) (set 1)", + "m4jakjok__a", "Jackpot Jokers (Bwb) (MPU4) (set 2)", + "m4jakjok__b", "Jackpot Jokers (Bwb) (MPU4) (set 3)", + "m4jakjok__c", "Jackpot Jokers (Bwb) (MPU4) (set 4)", + "m4jakjoka", "Jackpot Jokers (alt) (Bwb) (MPU4)", + "m4jflash", "Jumping Jack Flash (Bwb) (MPU4) (set 1)", + "m4jflash__a", "Jumping Jack Flash (Bwb) (MPU4) (set 2)", + "m4jflash__b", "Jumping Jack Flash (Bwb) (MPU4) (set 3)", + "m4jflash__c", "Jumping Jack Flash (Bwb) (MPU4) (set 4)", + "m4jflash__d", "Jumping Jack Flash (Bwb) (MPU4) (set 5)", + "m4jflash__e", "Jumping Jack Flash (Bwb) (MPU4) (set 6)", + "m4jflash__f", "Jumping Jack Flash (Bwb) (MPU4) (set 7)", + "m4jflash__g", "Jumping Jack Flash (Bwb) (MPU4) (set 8)", + "m4jflash__h", "Jumping Jack Flash (Bwb) (MPU4) (set 9)", + "m4jflash__i", "Jumping Jack Flash (Bwb) (MPU4) (set 10)", + "m4jiggin", "Jiggin' In The Riggin' (Global) (MPU4) (set 1)", + "m4jiggina", "Jiggin' In The Riggin' (Global) (MPU4) (set 2)", + "m4jjc", "Jumping Jack Cash (Pcp) (MPU4) (set 1)", + "m4jjca", "Jumping Jack Cash (Pcp) (MPU4) (set 2)", + "m4jne", "The Jackpot's Not Enough (Empire) (MPU4)", + "m4jok2k", "Joker 2000 (Avantime?) (MPU4) (set 1)", + "m4jok2k__a", "Joker 2000 (Avantime?) (MPU4) (set 2)", + "m4jok2k__b", "Joker 2000 (Avantime?) (MPU4) (set 3)", + "m4jok300", "Jokers 300 (Barcrest) (German?) (MPU4)", + "m4jokmil", "Jokers Millennium (Barcrest) (German) (MPU4)", + "m4jolgem", "Jolly Gems (Barcrest) (MPU4) (set 1)", + "m4jolgem__0", "Jolly Gems (Barcrest) (MPU4) (set 28)", + "m4jolgem__1", "Jolly Gems (Barcrest) (MPU4) (set 29)", + "m4jolgem__2", "Jolly Gems (Barcrest) (MPU4) (set 30)", + "m4jolgem__3", "Jolly Gems (Barcrest) (MPU4) (set 31)", + "m4jolgem__4", "Jolly Gems (Barcrest) (MPU4) (set 32)", + "m4jolgem__5", "Jolly Gems (Barcrest) (MPU4) (set 33)", + "m4jolgem__6", "Jolly Gems (Barcrest) (MPU4) (set 34)", + "m4jolgem__7", "Jolly Gems (Barcrest) (MPU4) (set 35)", + "m4jolgem__8", "Jolly Gems (Barcrest) (MPU4) (set 36)", + "m4jolgem__9", "Jolly Gems (Barcrest) (MPU4) (set 37)", + "m4jolgem__a", "Jolly Gems (Barcrest) (MPU4) (set 2)", + "m4jolgem__aa", "Jolly Gems (Barcrest) (MPU4) (set 38)", + "m4jolgem__ab", "Jolly Gems (Barcrest) (MPU4) (set 39)", + "m4jolgem__ac", "Jolly Gems (Barcrest) (MPU4) (set 40)", + "m4jolgem__ad", "Jolly Gems (Barcrest) (MPU4) (set 41)", + "m4jolgem__ae", "Jolly Gems (Barcrest) (MPU4) (set 42)", + "m4jolgem__af", "Jolly Gems (Barcrest) (MPU4) (set 43)", + "m4jolgem__ag", "Jolly Gems (Barcrest) (MPU4) (set 44)", + "m4jolgem__ah", "Jolly Gems (Barcrest) (MPU4) (set 45)", + "m4jolgem__ai", "Jolly Gems (Barcrest) (MPU4) (set 46)", + "m4jolgem__aj", "Jolly Gems (Barcrest) (MPU4) (set 47)", + "m4jolgem__ak", "Jolly Gems (Barcrest) (MPU4) (set 48)", + "m4jolgem__al", "Jolly Gems (Barcrest) (MPU4) (set 49)", + "m4jolgem__am", "Jolly Gems (Barcrest) (MPU4) (set 50)", + "m4jolgem__an", "Jolly Gems (Barcrest) (MPU4) (set 51)", + "m4jolgem__ao", "Jolly Gems (Barcrest) (MPU4) (set 52)", + "m4jolgem__ap", "Jolly Gems (Barcrest) (MPU4) (set 53)", + "m4jolgem__b", "Jolly Gems (Barcrest) (MPU4) (set 3)", + "m4jolgem__c", "Jolly Gems (Barcrest) (MPU4) (set 4)", + "m4jolgem__d", "Jolly Gems (Barcrest) (MPU4) (set 5)", + "m4jolgem__e", "Jolly Gems (Barcrest) (MPU4) (set 6)", + "m4jolgem__f", "Jolly Gems (Barcrest) (MPU4) (set 7)", + "m4jolgem__g", "Jolly Gems (Barcrest) (MPU4) (set 8)", + "m4jolgem__h", "Jolly Gems (Barcrest) (MPU4) (set 9)", + "m4jolgem__i", "Jolly Gems (Barcrest) (MPU4) (set 10)", + "m4jolgem__j", "Jolly Gems (Barcrest) (MPU4) (set 11)", + "m4jolgem__k", "Jolly Gems (Barcrest) (MPU4) (set 12)", + "m4jolgem__l", "Jolly Gems (Barcrest) (MPU4) (set 13)", + "m4jolgem__m", "Jolly Gems (Barcrest) (MPU4) (set 14)", + "m4jolgem__n", "Jolly Gems (Barcrest) (MPU4) (set 15)", + "m4jolgem__o", "Jolly Gems (Barcrest) (MPU4) (set 16)", + "m4jolgem__p", "Jolly Gems (Barcrest) (MPU4) (set 17)", + "m4jolgem__q", "Jolly Gems (Barcrest) (MPU4) (set 18)", + "m4jolgem__r", "Jolly Gems (Barcrest) (MPU4) (set 19)", + "m4jolgem__s", "Jolly Gems (Barcrest) (MPU4) (set 20)", + "m4jolgem__t", "Jolly Gems (Barcrest) (MPU4) (set 21)", + "m4jolgem__u", "Jolly Gems (Barcrest) (MPU4) (set 22)", + "m4jolgem__v", "Jolly Gems (Barcrest) (MPU4) (set 23)", + "m4jolgem__w", "Jolly Gems (Barcrest) (MPU4) (set 24)", + "m4jolgem__x", "Jolly Gems (Barcrest) (MPU4) (set 25)", + "m4jolgem__y", "Jolly Gems (Barcrest) (MPU4) (set 26)", + "m4jolgem__z", "Jolly Gems (Barcrest) (MPU4) (set 27)", + "m4joljok", "Jolly Joker (Barcrest) (MPU4)", + "m4joljokd", "Jolly Joker (Barcrest) [Dutch] (MPU4) (DJJ)", + "m4joljokh", "Jolly Joker (Barcrest) [Hungarian] (MPU4) (HJJ)", + "m4joltav", "Jolly Taverner (Barcrest) (MPU4) (set 1)", + "m4joltava", "Jolly Taverner (Barcrest) (MPU4) (set 2)", + "m4joltavb", "Jolly Taverner (Barcrest) (MPU4) (set 3)", + "m4jp777", "Jackpot 777 (Cotswold Microsystems) (MPU4)", + "m4jpgem", "Jackpot Gems (Barcrest) (MPU4) (set 1)", + "m4jpgem__0", "Jackpot Gems (Barcrest) (MPU4) (set 28)", + "m4jpgem__1", "Jackpot Gems (Barcrest) (MPU4) (set 29)", + "m4jpgem__2", "Jackpot Gems (Barcrest) (MPU4) (set 30)", + "m4jpgem__3", "Jackpot Gems (Barcrest) (MPU4) (set 31)", + "m4jpgem__4", "Jackpot Gems (Barcrest) (MPU4) (set 32)", + "m4jpgem__5", "Jackpot Gems (Barcrest) (MPU4) (set 33)", + "m4jpgem__6", "Jackpot Gems (Barcrest) (MPU4) (set 34)", + "m4jpgem__7", "Jackpot Gems (Barcrest) (MPU4) (set 35)", + "m4jpgem__8", "Jackpot Gems (Barcrest) (MPU4) (set 36)", + "m4jpgem__9", "Jackpot Gems (Barcrest) (MPU4) (set 37)", + "m4jpgem__a", "Jackpot Gems (Barcrest) (MPU4) (set 2)", + "m4jpgem__a0", "Jackpot Gems (Barcrest) (MPU4) (set 64)", + "m4jpgem__a1", "Jackpot Gems (Barcrest) (MPU4) (set 65)", + "m4jpgem__a2", "Jackpot Gems (Barcrest) (MPU4) (set 66)", + "m4jpgem__a3", "Jackpot Gems (Barcrest) (MPU4) (set 67)", + "m4jpgem__a4", "Jackpot Gems (Barcrest) (MPU4) (set 68)", + "m4jpgem__a5", "Jackpot Gems (Barcrest) (MPU4) (set 69)", + "m4jpgem__a6", "Jackpot Gems (Barcrest) (MPU4) (set 70)", + "m4jpgem__a7", "Jackpot Gems (Barcrest) (MPU4) (set 71)", + "m4jpgem__a8", "Jackpot Gems (Barcrest) (MPU4) (set 72)", + "m4jpgem__a9", "Jackpot Gems (Barcrest) (MPU4) (set 73)", + "m4jpgem__aa", "Jackpot Gems (Barcrest) (MPU4) (set 38)", + "m4jpgem__ab", "Jackpot Gems (Barcrest) (MPU4) (set 39)", + "m4jpgem__ac", "Jackpot Gems (Barcrest) (MPU4) (set 40)", + "m4jpgem__ad", "Jackpot Gems (Barcrest) (MPU4) (set 41)", + "m4jpgem__ae", "Jackpot Gems (Barcrest) (MPU4) (set 42)", + "m4jpgem__af", "Jackpot Gems (Barcrest) (MPU4) (set 43)", + "m4jpgem__ag", "Jackpot Gems (Barcrest) (MPU4) (set 44)", + "m4jpgem__ah", "Jackpot Gems (Barcrest) (MPU4) (set 45)", + "m4jpgem__ai", "Jackpot Gems (Barcrest) (MPU4) (set 46)", + "m4jpgem__aj", "Jackpot Gems (Barcrest) (MPU4) (set 47)", + "m4jpgem__ak", "Jackpot Gems (Barcrest) (MPU4) (set 48)", + "m4jpgem__al", "Jackpot Gems (Barcrest) (MPU4) (set 49)", + "m4jpgem__am", "Jackpot Gems (Barcrest) (MPU4) (set 50)", + "m4jpgem__an", "Jackpot Gems (Barcrest) (MPU4) (set 51)", + "m4jpgem__ao", "Jackpot Gems (Barcrest) (MPU4) (set 52)", + "m4jpgem__ap", "Jackpot Gems (Barcrest) (MPU4) (set 53)", + "m4jpgem__aq", "Jackpot Gems (Barcrest) (MPU4) (set 54)", + "m4jpgem__ar", "Jackpot Gems (Barcrest) (MPU4) (set 55)", + "m4jpgem__as", "Jackpot Gems (Barcrest) (MPU4) (set 56)", + "m4jpgem__at", "Jackpot Gems (Barcrest) (MPU4) (set 57)", + "m4jpgem__au", "Jackpot Gems (Barcrest) (MPU4) (set 58)", + "m4jpgem__av", "Jackpot Gems (Barcrest) (MPU4) (set 59)", + "m4jpgem__aw", "Jackpot Gems (Barcrest) (MPU4) (set 60)", + "m4jpgem__ax", "Jackpot Gems (Barcrest) (MPU4) (set 61)", + "m4jpgem__ay", "Jackpot Gems (Barcrest) (MPU4) (set 62)", + "m4jpgem__az", "Jackpot Gems (Barcrest) (MPU4) (set 63)", + "m4jpgem__b", "Jackpot Gems (Barcrest) (MPU4) (set 3)", + "m4jpgem__ba", "Jackpot Gems (Barcrest) (MPU4) (set 74)", + "m4jpgem__bb", "Jackpot Gems (Barcrest) (MPU4) (set 75)", + "m4jpgem__bc", "Jackpot Gems (Barcrest) (MPU4) (set 76)", + "m4jpgem__bd", "Jackpot Gems (Barcrest) (MPU4) (set 77)", + "m4jpgem__be", "Jackpot Gems (Barcrest) (MPU4) (set 78)", + "m4jpgem__bf", "Jackpot Gems (Barcrest) (MPU4) (set 79)", + "m4jpgem__bg", "Jackpot Gems (Barcrest) (MPU4) (set 80)", + "m4jpgem__bh", "Jackpot Gems (Barcrest) (MPU4) (set 81)", + "m4jpgem__bi", "Jackpot Gems (Barcrest) (MPU4) (set 82)", + "m4jpgem__bj", "Jackpot Gems (Barcrest) (MPU4) (set 83)", + "m4jpgem__bk", "Jackpot Gems (Barcrest) (MPU4) (set 84)", + "m4jpgem__bl", "Jackpot Gems (Barcrest) (MPU4) (set 85)", + "m4jpgem__bm", "Jackpot Gems (Barcrest) (MPU4) (set 86)", + "m4jpgem__bn", "Jackpot Gems (Barcrest) (MPU4) (set 87)", + "m4jpgem__bo", "Jackpot Gems (Barcrest) (MPU4) (set 88)", + "m4jpgem__bp", "Jackpot Gems (Barcrest) (MPU4) (set 89)", + "m4jpgem__c", "Jackpot Gems (Barcrest) (MPU4) (set 4)", + "m4jpgem__d", "Jackpot Gems (Barcrest) (MPU4) (set 5)", + "m4jpgem__e", "Jackpot Gems (Barcrest) (MPU4) (set 6)", + "m4jpgem__f", "Jackpot Gems (Barcrest) (MPU4) (set 7)", + "m4jpgem__g", "Jackpot Gems (Barcrest) (MPU4) (set 8)", + "m4jpgem__h", "Jackpot Gems (Barcrest) (MPU4) (set 9)", + "m4jpgem__i", "Jackpot Gems (Barcrest) (MPU4) (set 10)", + "m4jpgem__j", "Jackpot Gems (Barcrest) (MPU4) (set 11)", + "m4jpgem__k", "Jackpot Gems (Barcrest) (MPU4) (set 12)", + "m4jpgem__l", "Jackpot Gems (Barcrest) (MPU4) (set 13)", + "m4jpgem__m", "Jackpot Gems (Barcrest) (MPU4) (set 14)", + "m4jpgem__n", "Jackpot Gems (Barcrest) (MPU4) (set 15)", + "m4jpgem__o", "Jackpot Gems (Barcrest) (MPU4) (set 16)", + "m4jpgem__p", "Jackpot Gems (Barcrest) (MPU4) (set 17)", + "m4jpgem__q", "Jackpot Gems (Barcrest) (MPU4) (set 18)", + "m4jpgem__r", "Jackpot Gems (Barcrest) (MPU4) (set 19)", + "m4jpgem__s", "Jackpot Gems (Barcrest) (MPU4) (set 20)", + "m4jpgem__t", "Jackpot Gems (Barcrest) (MPU4) (set 21)", + "m4jpgem__u", "Jackpot Gems (Barcrest) (MPU4) (set 22)", + "m4jpgem__v", "Jackpot Gems (Barcrest) (MPU4) (set 23)", + "m4jpgem__w", "Jackpot Gems (Barcrest) (MPU4) (set 24)", + "m4jpgem__x", "Jackpot Gems (Barcrest) (MPU4) (set 25)", + "m4jpgem__y", "Jackpot Gems (Barcrest) (MPU4) (set 26)", + "m4jpgem__z", "Jackpot Gems (Barcrest) (MPU4) (set 27)", + "m4jpgemc", "Jackpot Gems Classic (Barcrest) (MPU4) (set 1)", + "m4jpgemc__a", "Jackpot Gems Classic (Barcrest) (MPU4) (set 2)", + "m4jpgemc__b", "Jackpot Gems Classic (Barcrest) (MPU4) (set 3)", + "m4jpgemc__c", "Jackpot Gems Classic (Barcrest) (MPU4) (set 4)", + "m4jpgemc__d", "Jackpot Gems Classic (Barcrest) (MPU4) (set 5)", + "m4jpgemc__e", "Jackpot Gems Classic (Barcrest) (MPU4) (set 6)", + "m4jpgemc__f", "Jackpot Gems Classic (Barcrest) (MPU4) (set 7)", + "m4jpgemc__g", "Jackpot Gems Classic (Barcrest) (MPU4) (set 8)", + "m4jpgemc__h", "Jackpot Gems Classic (Barcrest) (MPU4) (set 9)", + "m4jpgemc__i", "Jackpot Gems Classic (Barcrest) (MPU4) (set 10)", + "m4jpgemc__j", "Jackpot Gems Classic (Barcrest) (MPU4) (set 11)", + "m4jpgemc__k", "Jackpot Gems Classic (Barcrest) (MPU4) (set 12)", + "m4jpgemc__l", "Jackpot Gems Classic (Barcrest) (MPU4) (set 13)", + "m4jpgemc__m", "Jackpot Gems Classic (Barcrest) (MPU4) (set 14)", + "m4jpgemc__n", "Jackpot Gems Classic (Barcrest) (MPU4) (set 15)", + "m4jpgemc__o", "Jackpot Gems Classic (Barcrest) (MPU4) (set 16)", + "m4jpgemc__p", "Jackpot Gems Classic (Barcrest) (MPU4) (set 17)", + "m4jpgemc__q", "Jackpot Gems Classic (Barcrest) (MPU4) (set 18)", + "m4jpgemc__r", "Jackpot Gems Classic (Barcrest) (MPU4) (set 19)", + "m4jpgemc__s", "Jackpot Gems Classic (Barcrest) (MPU4) (set 20)", + "m4jpgemc__t", "Jackpot Gems Classic (Barcrest) (MPU4) (set 21)", + "m4jpgemc__u", "Jackpot Gems Classic (Barcrest) (MPU4) (set 22)", + "m4jpgemc__v", "Jackpot Gems Classic (Barcrest) (MPU4) (set 23)", + "m4jpgemc__w", "Jackpot Gems Classic (Barcrest) (MPU4) (set 24)", + "m4jpjmp", "Jackpot Jump (Barcrest) (MPU4) (set 1)", + "m4jpjmpa", "Jackpot Jump (Barcrest) (MPU4) (set 2)", + "m4jpmcla", "Old Timer (Barcrest) (Dutch, alt 'JPM Classic' sound roms) (DOT1.1)", + "m4jungj", "Jungle Japes (MPU4?) (set 1)", + "m4jungja", "Jungle Japes (MPU4?) (set 2)", + "m4jungjb", "Jungle Japes (MPU4?) (set 3)", + "m4jungjc", "Jungle Japes (MPU4?) (set 4)", + "m4jungjk", "Jungle Jackpots (Qps) (MPU4) (set 1)", + "m4jungjk__a", "Jungle Jackpots (Qps) (MPU4) (set 2)", + "m4jungjk__b", "Jungle Jackpots (Qps) (MPU4) (set 3)", + "m4jungjk__c", "Jungle Jackpots (Qps) (MPU4) (set 4)", + "m4jungjk__d", "Jungle Jackpots (Qps) (MPU4) (set 5)", + "m4jungjk__e", "Jungle Jackpots (Qps) (MPU4) (set 6)", + "m4jwlcwn", "Jewel In the Crown (Barcrest) (MPU4) (set 1)", + "m4jwlcwn__0", "Jewel In the Crown (Barcrest) (MPU4) (set 28)", + "m4jwlcwn__1", "Jewel In the Crown (Barcrest) (MPU4) (set 29)", + "m4jwlcwn__2", "Jewel In the Crown (Barcrest) (MPU4) (set 30)", + "m4jwlcwn__3", "Jewel In the Crown (Barcrest) (MPU4) (set 31)", + "m4jwlcwn__4", "Jewel In the Crown (Barcrest) (MPU4) (set 32)", + "m4jwlcwn__5", "Jewel In the Crown (Barcrest) (MPU4) (set 33)", + "m4jwlcwn__6", "Jewel In the Crown (Barcrest) (MPU4) (set 34)", + "m4jwlcwn__a", "Jewel In the Crown (Barcrest) (MPU4) (set 2)", + "m4jwlcwn__b", "Jewel In the Crown (Barcrest) (MPU4) (set 3)", + "m4jwlcwn__c", "Jewel In the Crown (Barcrest) (MPU4) (set 4)", + "m4jwlcwn__d", "Jewel In the Crown (Barcrest) (MPU4) (set 5)", + "m4jwlcwn__e", "Jewel In the Crown (Barcrest) (MPU4) (set 6)", + "m4jwlcwn__f", "Jewel In the Crown (Barcrest) (MPU4) (set 7)", + "m4jwlcwn__g", "Jewel In the Crown (Barcrest) (MPU4) (set 8)", + "m4jwlcwn__h", "Jewel In the Crown (Barcrest) (MPU4) (set 9)", + "m4jwlcwn__i", "Jewel In the Crown (Barcrest) (MPU4) (set 10)", + "m4jwlcwn__j", "Jewel In the Crown (Barcrest) (MPU4) (set 11)", + "m4jwlcwn__k", "Jewel In the Crown (Barcrest) (MPU4) (set 12)", + "m4jwlcwn__l", "Jewel In the Crown (Barcrest) (MPU4) (set 13)", + "m4jwlcwn__m", "Jewel In the Crown (Barcrest) (MPU4) (set 14)", + "m4jwlcwn__n", "Jewel In the Crown (Barcrest) (MPU4) (set 15)", + "m4jwlcwn__o", "Jewel In the Crown (Barcrest) (MPU4) (set 16)", + "m4jwlcwn__p", "Jewel In the Crown (Barcrest) (MPU4) (set 17)", + "m4jwlcwn__q", "Jewel In the Crown (Barcrest) (MPU4) (set 18)", + "m4jwlcwn__r", "Jewel In the Crown (Barcrest) (MPU4) (set 19)", + "m4jwlcwn__s", "Jewel In the Crown (Barcrest) (MPU4) (set 20)", + "m4jwlcwn__t", "Jewel In the Crown (Barcrest) (MPU4) (set 21)", + "m4jwlcwn__u", "Jewel In the Crown (Barcrest) (MPU4) (set 22)", + "m4jwlcwn__v", "Jewel In the Crown (Barcrest) (MPU4) (set 23)", + "m4jwlcwn__w", "Jewel In the Crown (Barcrest) (MPU4) (set 24)", + "m4jwlcwn__x", "Jewel In the Crown (Barcrest) (MPU4) (set 25)", + "m4jwlcwn__y", "Jewel In the Crown (Barcrest) (MPU4) (set 26)", + "m4jwlcwn__z", "Jewel In the Crown (Barcrest) (MPU4) (set 27)", + "m4kingg", "King George (Avantime?) (MPU4) (set 1)", + "m4kingg__a", "King George (Avantime?) (MPU4) (set 2)", + "m4kingq", "Kings & Queens (Barcrest) (MPU4) (set 1)", + "m4kingq__a", "Kings & Queens (Barcrest) (MPU4) (set 2)", + "m4kingq__b", "Kings & Queens (Barcrest) (MPU4) (set 3)", + "m4kingq__c", "Kings & Queens (Barcrest) (MPU4) (set 4)", + "m4kingq__d", "Kings & Queens (Barcrest) (MPU4) (set 5)", + "m4kingq__e", "Kings & Queens (Barcrest) (MPU4) (set 6)", + "m4kingq__f", "Kings & Queens (Barcrest) (MPU4) (set 7)", + "m4kingq__g", "Kings & Queens (Barcrest) (MPU4) (set 8)", + "m4kingq__h", "Kings & Queens (Barcrest) (MPU4) (set 9)", + "m4kingq__i", "Kings & Queens (Barcrest) (MPU4) (set 10)", + "m4kingq__j", "Kings & Queens (Barcrest) (MPU4) (set 11)", + "m4kingq__k", "Kings & Queens (Barcrest) (MPU4) (set 12)", + "m4kingq__l", "Kings & Queens (Barcrest) (MPU4) (set 13)", + "m4kingq__m", "Kings & Queens (Barcrest) (MPU4) (set 14)", + "m4kingq__n", "Kings & Queens (Barcrest) (MPU4) (set 15)", + "m4kingq__o", "Kings & Queens (Barcrest) (MPU4) (set 16)", + "m4kingq__p", "Kings & Queens (Barcrest) (MPU4) (set 17)", + "m4kingq__r", "Kings & Queens (Barcrest) (MPU4) (set 18)", + "m4kingq__s", "Kings & Queens (Barcrest) (MPU4) (set 19)", + "m4kingq__t", "Kings & Queens (Barcrest) (MPU4) (set 20)", + "m4kingqc", "Kings & Queens Classic (Barcrest) (MPU4) (set 1)", + "m4kingqc__0", "Kings & Queens Classic (Barcrest) (MPU4) (set 26)", + "m4kingqc__1", "Kings & Queens Classic (Barcrest) (MPU4) (set 27)", + "m4kingqc__2", "Kings & Queens Classic (Barcrest) (MPU4) (set 28)", + "m4kingqc__3", "Kings & Queens Classic (Barcrest) (MPU4) (set 29)", + "m4kingqc__4", "Kings & Queens Classic (Barcrest) (MPU4) (set 30)", + "m4kingqc__5", "Kings & Queens Classic (Barcrest) (MPU4) (set 31)", + "m4kingqc__a", "Kings & Queens Classic (Barcrest) (MPU4) (set 2)", + "m4kingqc__b", "Kings & Queens Classic (Barcrest) (MPU4) (set 3)", + "m4kingqc__c", "Kings & Queens Classic (Barcrest) (MPU4) (set 4)", + "m4kingqc__d", "Kings & Queens Classic (Barcrest) (MPU4) (set 5)", + "m4kingqc__e", "Kings & Queens Classic (Barcrest) (MPU4) (set 6)", + "m4kingqc__f", "Kings & Queens Classic (Barcrest) (MPU4) (set 7)", + "m4kingqc__g", "Kings & Queens Classic (Barcrest) (MPU4) (set 8)", + "m4kingqc__h", "Kings & Queens Classic (Barcrest) (MPU4) (set 9)", + "m4kingqc__i", "Kings & Queens Classic (Barcrest) (MPU4) (set 10)", + "m4kingqc__j", "Kings & Queens Classic (Barcrest) (MPU4) (set 11)", + "m4kingqc__k", "Kings & Queens Classic (Barcrest) (MPU4) (set 12)", + "m4kingqc__l", "Kings & Queens Classic (Barcrest) (MPU4) (set 13)", + "m4kingqc__m", "Kings & Queens Classic (Barcrest) (MPU4) (set 14)", + "m4kingqc__n", "Kings & Queens Classic (Barcrest) (MPU4) (set 15)", + "m4kingqc__q", "Kings & Queens Classic (Barcrest) (MPU4) (set 16)", + "m4kingqc__r", "Kings & Queens Classic (Barcrest) (MPU4) (set 17)", + "m4kingqc__s", "Kings & Queens Classic (Barcrest) (MPU4) (set 18)", + "m4kingqc__t", "Kings & Queens Classic (Barcrest) (MPU4) (set 19)", + "m4kingqc__u", "Kings & Queens Classic (Barcrest) (MPU4) (set 20)", + "m4kingqc__v", "Kings & Queens Classic (Barcrest) (MPU4) (set 21)", + "m4kingqc__w", "Kings & Queens Classic (Barcrest) (MPU4) (set 22)", + "m4kingqc__x", "Kings & Queens Classic (Barcrest) (MPU4) (set 23)", + "m4kingqc__y", "Kings & Queens Classic (Barcrest) (MPU4) (set 24)", + "m4kingqc__z", "Kings & Queens Classic (Barcrest) (MPU4) (set 25)", + "m4kingqn", "Kings & Queens Club (Crystal) (MPU4) (set 1)", + "m4kingqna", "Kings & Queens Club (Crystal) (MPU4) (set 2)", + "m4kqclub", "Kings & Queens Club (Newby) (MPU4)", + "m4lazy", "Lazy Bones (Bwb) (MPU4) (set 1)", + "m4lazya", "Lazy Bones (Bwb) (MPU4) (set 2)", + "m4lazyb", "Lazy Bones (Bwb) (MPU4) (set 3)", + "m4libty", "Liberty (Barcrest) (Dutch) (MPU4)", + "m4lineup", "Line Up (Bwb - Barcrest) (MPU4) (set 1)", + "m4lineupa", "Line Up (Bwb - Barcrest) (MPU4) (set 2)", + "m4ln7", "Lucky No7 (Bwb) (MPU4) (set 1)", + "m4ln7__a", "Lucky No7 (Bwb) (MPU4) (set 2)", + "m4ln7__b", "Lucky No7 (Bwb) (MPU4) (set 3)", + "m4ln7__c", "Lucky No7 (Bwb) (MPU4) (set 4)", + "m4ln7__d", "Lucky No7 (Bwb) (MPU4) (set 5)", + "m4loadmn", "Loads A Money (Barcrest) (MPU4) (set 1)", + "m4loadmna", "Loads A Money (Barcrest) (MPU4) (set 2)", + "m4loadmnb", "Loads A Money (Barcrest) (MPU4) (set 3)", + "m4looplt", "Loop The Loot (Qps) (MPU4) (set 1)", + "m4looplt__a", "Loop The Loot (Qps) (MPU4) (set 2)", + "m4looplt__b", "Loop The Loot (Qps) (MPU4) (set 3)", + "m4looplt__c", "Loop The Loot (Qps) (MPU4) (set 4)", + "m4looplt__d", "Loop The Loot (Qps) (MPU4) (set 5)", + "m4looplt__e", "Loop The Loot (Qps) (MPU4) (set 6)", + "m4looplt__f", "Loop The Loot (Qps) (MPU4) (set 7)", + "m4looplt__g", "Loop The Loot (Qps) (MPU4) (set 8)", + "m4looplt__h", "Loop The Loot (Qps) (MPU4) (set 9)", + "m4looplt__i", "Loop The Loot (Qps) (MPU4) (set 10)", + "m4looplt__j", "Loop The Loot (Qps) (MPU4) (set 11)", + "m4looplt__k", "Loop The Loot (Qps) (MPU4) (set 12)", + "m4looplt__l", "Loop The Loot (Qps) (MPU4) (set 13)", + "m4looplt__m", "Loop The Loot (Qps) (MPU4) (set 14)", + "m4lotclb", "Lottery Club (Crystal) (MPU4) (set 1)", + "m4lotclba", "Lottery Club (Crystal) (MPU4) (set 2)", + "m4lotty", "Lotty Time (Union) (MPU4)", + "m4luck7", "Lucky 7 (Barcrest) (Dutch) (MPU4)", + "m4luckdv", "Lucky Devil (Barcrest) [Czech] (MPU4)", + "m4luckdvd", "Lucky Devil (Barcrest) [Dutch] (MPU4) (DLD)", + "m4lucklv", "Lucky Las Vegas (Barcrest) (MPU4) (set 1)", + "m4lucklv__0", "Lucky Las Vegas (Barcrest) (MPU4) (set 28)", + "m4lucklv__1", "Lucky Las Vegas (Barcrest) (MPU4) (set 29)", + "m4lucklv__2", "Lucky Las Vegas (Barcrest) (MPU4) (set 30)", + "m4lucklv__3", "Lucky Las Vegas (Barcrest) (MPU4) (set 31)", + "m4lucklv__4", "Lucky Las Vegas (Barcrest) (MPU4) (set 32)", + "m4lucklv__5", "Lucky Las Vegas (Barcrest) (MPU4) (set 33)", + "m4lucklv__6", "Lucky Las Vegas (Barcrest) (MPU4) (set 34)", + "m4lucklv__7", "Lucky Las Vegas (Barcrest) (MPU4) (set 35)", + "m4lucklv__8", "Lucky Las Vegas (Barcrest) (MPU4) (set 36)", + "m4lucklv__9", "Lucky Las Vegas (Barcrest) (MPU4) (set 37)", + "m4lucklv__a", "Lucky Las Vegas (Barcrest) (MPU4) (set 2)", + "m4lucklv__aa", "Lucky Las Vegas (Barcrest) (MPU4) (set 38)", + "m4lucklv__ab", "Lucky Las Vegas (Barcrest) (MPU4) (set 39)", + "m4lucklv__ac", "Lucky Las Vegas (Barcrest) (MPU4) (set 40)", + "m4lucklv__ad", "Lucky Las Vegas (Barcrest) (MPU4) (set 41)", + "m4lucklv__ae", "Lucky Las Vegas (Barcrest) (MPU4) (set 42)", + "m4lucklv__af", "Lucky Las Vegas (Barcrest) (MPU4) (set 43)", + "m4lucklv__ag", "Lucky Las Vegas (Barcrest) (MPU4) (set 44)", + "m4lucklv__ah", "Lucky Las Vegas (Barcrest) (MPU4) (set 45)", + "m4lucklv__ai", "Lucky Las Vegas (Barcrest) (MPU4) (set 46)", + "m4lucklv__b", "Lucky Las Vegas (Barcrest) (MPU4) (set 3)", + "m4lucklv__c", "Lucky Las Vegas (Barcrest) (MPU4) (set 4)", + "m4lucklv__d", "Lucky Las Vegas (Barcrest) (MPU4) (set 5)", + "m4lucklv__e", "Lucky Las Vegas (Barcrest) (MPU4) (set 6)", + "m4lucklv__f", "Lucky Las Vegas (Barcrest) (MPU4) (set 7)", + "m4lucklv__g", "Lucky Las Vegas (Barcrest) (MPU4) (set 8)", + "m4lucklv__h", "Lucky Las Vegas (Barcrest) (MPU4) (set 9)", + "m4lucklv__i", "Lucky Las Vegas (Barcrest) (MPU4) (set 10)", + "m4lucklv__j", "Lucky Las Vegas (Barcrest) (MPU4) (set 11)", + "m4lucklv__k", "Lucky Las Vegas (Barcrest) (MPU4) (set 12)", + "m4lucklv__l", "Lucky Las Vegas (Barcrest) (MPU4) (set 13)", + "m4lucklv__m", "Lucky Las Vegas (Barcrest) (MPU4) (set 14)", + "m4lucklv__n", "Lucky Las Vegas (Barcrest) (MPU4) (set 15)", + "m4lucklv__o", "Lucky Las Vegas (Barcrest) (MPU4) (set 16)", + "m4lucklv__p", "Lucky Las Vegas (Barcrest) (MPU4) (set 17)", + "m4lucklv__q", "Lucky Las Vegas (Barcrest) (MPU4) (set 18)", + "m4lucklv__r", "Lucky Las Vegas (Barcrest) (MPU4) (set 19)", + "m4lucklv__s", "Lucky Las Vegas (Barcrest) (MPU4) (set 20)", + "m4lucklv__t", "Lucky Las Vegas (Barcrest) (MPU4) (set 21)", + "m4lucklv__u", "Lucky Las Vegas (Barcrest) (MPU4) (set 22)", + "m4lucklv__v", "Lucky Las Vegas (Barcrest) (MPU4) (set 23)", + "m4lucklv__w", "Lucky Las Vegas (Barcrest) (MPU4) (set 24)", + "m4lucklv__x", "Lucky Las Vegas (Barcrest) (MPU4) (set 25)", + "m4lucklv__y", "Lucky Las Vegas (Barcrest) (MPU4) (set 26)", + "m4lucklv__z", "Lucky Las Vegas (Barcrest) (MPU4) (set 27)", + "m4lucksc", "Lucky Strike Club (Barcrest) (MPU4) (set 1)", + "m4lucksc__a", "Lucky Strike Club (Barcrest) (MPU4) (set 2)", + "m4lucksc__b", "Lucky Strike Club (Barcrest) (MPU4) (set 3)", + "m4lucksc__c", "Lucky Strike Club (Barcrest) (MPU4) (set 4)", + "m4lucksc__d", "Lucky Strike Club (Barcrest) (MPU4) (set 5)", + "m4lucksc__e", "Lucky Strike Club (Barcrest) (MPU4) (set 6)", + "m4lucksc__f", "Lucky Strike Club (Barcrest) (MPU4) (set 7)", + "m4lucksc__g", "Lucky Strike Club (Barcrest) (MPU4) (set 8)", + "m4lucksc__h", "Lucky Strike Club (Barcrest) (MPU4) (set 9)", + "m4lucksc__i", "Lucky Strike Club (Barcrest) (MPU4) (set 10)", + "m4lucksc__j", "Lucky Strike Club (Barcrest) (MPU4) (set 11)", + "m4lucksc__k", "Lucky Strike Club (Barcrest) (MPU4) (set 12)", + "m4lucksc__l", "Lucky Strike Club (Barcrest) (MPU4) (set 13)", + "m4luckst", "Lucky Strike (Barcrest) (MPU4) (set 1)", + "m4luckst__0", "Lucky Strike (Barcrest) (MPU4) (set 28)", + "m4luckst__1", "Lucky Strike (Barcrest) (MPU4) (set 29)", + "m4luckst__2", "Lucky Strike (Barcrest) (MPU4) (set 30)", + "m4luckst__3", "Lucky Strike (Barcrest) (MPU4) (set 31)", + "m4luckst__4", "Lucky Strike (Barcrest) (MPU4) (set 32)", + "m4luckst__5", "Lucky Strike (Barcrest) (MPU4) (set 33)", + "m4luckst__6", "Lucky Strike (Barcrest) (MPU4) (set 34)", + "m4luckst__7", "Lucky Strike (Barcrest) (MPU4) (set 35)", + "m4luckst__8", "Lucky Strike (Barcrest) (MPU4) (set 36)", + "m4luckst__9", "Lucky Strike (Barcrest) (MPU4) (set 37)", + "m4luckst__a", "Lucky Strike (Barcrest) (MPU4) (set 2)", + "m4luckst__aa", "Lucky Strike (Barcrest) (MPU4) (set 38)", + "m4luckst__ab", "Lucky Strike (Barcrest) (MPU4) (set 39)", + "m4luckst__ac", "Lucky Strike (Barcrest) (MPU4) (set 40)", + "m4luckst__ad", "Lucky Strike (Barcrest) (MPU4) (set 41)", + "m4luckst__ae", "Lucky Strike (Barcrest) (MPU4) (set 42)", + "m4luckst__af", "Lucky Strike (Barcrest) (MPU4) (set 43)", + "m4luckst__ag", "Lucky Strike (Barcrest) (MPU4) (set 44)", + "m4luckst__ah", "Lucky Strike (Barcrest) (MPU4) (set 45)", + "m4luckst__ai", "Lucky Strike (Barcrest) (MPU4) (set 46)", + "m4luckst__aj", "Lucky Strike (Barcrest) (MPU4) (set 47)", + "m4luckst__ak", "Lucky Strike (Barcrest) (MPU4) (set 48)", + "m4luckst__al", "Lucky Strike (Barcrest) (MPU4) (set 49)", + "m4luckst__am", "Lucky Strike (Barcrest) (MPU4) (set 50)", + "m4luckst__an", "Lucky Strike (Barcrest) (MPU4) (set 51)", + "m4luckst__ao", "Lucky Strike (Barcrest) (MPU4) (set 52)", + "m4luckst__ap", "Lucky Strike (Barcrest) (MPU4) (set 53)", + "m4luckst__aq", "Lucky Strike (Barcrest) (MPU4) (set 54)", + "m4luckst__ar", "Lucky Strike (Barcrest) (MPU4) (set 55)", + "m4luckst__as", "Lucky Strike (Barcrest) (MPU4) (set 56)", + "m4luckst__at", "Lucky Strike (Barcrest) (MPU4) (set 57)", + "m4luckst__au", "Lucky Strike (Barcrest) (MPU4) (set 58)", + "m4luckst__av", "Lucky Strike (Barcrest) (MPU4) (set 59)", + "m4luckst__aw", "Lucky Strike (Barcrest) (MPU4) (set 60)", + "m4luckst__b", "Lucky Strike (Barcrest) (MPU4) (set 3)", + "m4luckst__c", "Lucky Strike (Barcrest) (MPU4) (set 4)", + "m4luckst__d", "Lucky Strike (Barcrest) (MPU4) (set 5)", + "m4luckst__e", "Lucky Strike (Barcrest) (MPU4) (set 6)", + "m4luckst__f", "Lucky Strike (Barcrest) (MPU4) (set 7)", + "m4luckst__g", "Lucky Strike (Barcrest) (MPU4) (set 8)", + "m4luckst__h", "Lucky Strike (Barcrest) (MPU4) (set 9)", + "m4luckst__i", "Lucky Strike (Barcrest) (MPU4) (set 10)", + "m4luckst__j", "Lucky Strike (Barcrest) (MPU4) (set 11)", + "m4luckst__k", "Lucky Strike (Barcrest) (MPU4) (set 12)", + "m4luckst__l", "Lucky Strike (Barcrest) (MPU4) (set 13)", + "m4luckst__m", "Lucky Strike (Barcrest) (MPU4) (set 14)", + "m4luckst__n", "Lucky Strike (Barcrest) (MPU4) (set 15)", + "m4luckst__p", "Lucky Strike (Barcrest) (MPU4) (set 17)", + "m4luckst__q", "Lucky Strike (Barcrest) (MPU4) (set 18)", + "m4luckst__r", "Lucky Strike (Barcrest) (MPU4) (set 19)", + "m4luckst__s", "Lucky Strike (Barcrest) (MPU4) (set 20)", + "m4luckst__t", "Lucky Strike (Barcrest) (MPU4) (set 21)", + "m4luckst__u", "Lucky Strike (Barcrest) (MPU4) (set 22)", + "m4luckst__v", "Lucky Strike (Barcrest) (MPU4) (set 23)", + "m4luckst__w", "Lucky Strike (Barcrest) (MPU4) (set 24)", + "m4luckst__x", "Lucky Strike (Barcrest) (MPU4) (set 25)", + "m4luckst__y", "Lucky Strike (Barcrest) (MPU4) (set 26)", + "m4luckst__z", "Lucky Strike (Barcrest) (MPU4) (set 27)", + "m4luckwb", "Lucky Wild Boar (Barcrest) (MPU4) (set 1)", + "m4luckwba", "Lucky Wild Boar (Barcrest) (MPU4) (set 2)", + "m4luckwbb", "Lucky Wild Boar (Barcrest) (MPU4) (set 3)", + "m4luckwbc", "Lucky Wild Boar (Barcrest) (MPU4) (set 4)", + "m4luckwbd", "Lucky Wild Boar (Barcrest) (MPU4) (set 5)", + "m4luckwbe", "Lucky Wild Boar (Barcrest) (MPU4) (set 6)", + "m4luckwbf", "Lucky Wild Boar (Barcrest) (MPU4) (set 7)", + "m4luxor", "Luxor (Barcrest) (MPU4) (set 1)", + "m4luxor__a", "Luxor (Barcrest) (MPU4) (set 2)", + "m4luxor__b", "Luxor (Barcrest) (MPU4) (set 3)", + "m4luxor__c", "Luxor (Barcrest) (MPU4) (set 4)", + "m4luxor__d", "Luxor (Barcrest) (MPU4) (set 5)", + "m4luxor__e", "Luxor (Barcrest) (MPU4) (set 6)", + "m4luxor__f", "Luxor (Barcrest) (MPU4) (set 7)", + "m4luxor__g", "Luxor (Barcrest) (MPU4) (set 8)", + "m4luxor__h", "Luxor (Barcrest) (MPU4) (set 9)", + "m4luxor__i", "Luxor (Barcrest) (MPU4) (set 10)", + "m4luxor__j", "Luxor (Barcrest) (MPU4) (set 11)", + "m4luxor__k", "Luxor (Barcrest) (MPU4) (set 12)", + "m4luxor__l", "Luxor (Barcrest) (MPU4) (set 13)", + "m4luxor__m", "Luxor (Barcrest) (MPU4) (set 14)", + "m4luxor__n", "Luxor (Barcrest) (MPU4) (set 15)", + "m4luxor__o", "Luxor (Barcrest) (MPU4) (set 16)", + "m4luxor__p", "Luxor (Barcrest) (MPU4) (set 17)", + "m4luxor__q", "Luxor (Barcrest) (MPU4) (set 18)", + "m4luxor__r", "Luxor (Barcrest) (MPU4) (set 19)", + "m4luxor__s", "Luxor (Barcrest) (MPU4) (set 20)", + "m4luxor__t", "Luxor (Barcrest) (MPU4) (set 21)", + "m4luxor__u", "Luxor (Barcrest) (MPU4) (set 22)", + "m4luxor__v", "Luxor (Barcrest) (MPU4) (set 23)", + "m4luxor__w", "Luxor (Barcrest) (MPU4) (set 24)", + "m4luxor__x", "Luxor (Barcrest) (MPU4) (set 25)", + "m4luxor__y", "Luxor (Barcrest) (MPU4) (set 26)", + "m4luxor__z", "Luxor (Barcrest) (MPU4) (set 27)", + "m4lvlcl", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 1)", + "m4lvlcl__a", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 2)", + "m4lvlcl__b", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 3)", + "m4lvlcl__c", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 4)", + "m4lvlcl__d", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 5)", + "m4lvlcl__e", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 6)", + "m4lvlcl__f", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 7)", + "m4madhse", "Mad House (Barcrest) (MPU4) (set 1)", + "m4madhse__0", "Mad House (Barcrest) (MPU4) (set 28)", + "m4madhse__a", "Mad House (Barcrest) (MPU4) (set 2)", + "m4madhse__b", "Mad House (Barcrest) (MPU4) (set 3)", + "m4madhse__c", "Mad House (Barcrest) (MPU4) (set 4)", + "m4madhse__d", "Mad House (Barcrest) (MPU4) (set 5)", + "m4madhse__e", "Mad House (Barcrest) (MPU4) (set 6)", + "m4madhse__f", "Mad House (Barcrest) (MPU4) (set 7)", + "m4madhse__g", "Mad House (Barcrest) (MPU4) (set 8)", + "m4madhse__h", "Mad House (Barcrest) (MPU4) (set 9)", + "m4madhse__i", "Mad House (Barcrest) (MPU4) (set 10)", + "m4madhse__j", "Mad House (Barcrest) (MPU4) (set 11)", + "m4madhse__k", "Mad House (Barcrest) (MPU4) (set 12)", + "m4madhse__l", "Mad House (Barcrest) (MPU4) (set 13)", + "m4madhse__m", "Mad House (Barcrest) (MPU4) (set 14)", + "m4madhse__n", "Mad House (Barcrest) (MPU4) (set 15)", + "m4madhse__o", "Mad House (Barcrest) (MPU4) (set 16)", + "m4madhse__p", "Mad House (Barcrest) (MPU4) (set 17)", + "m4madhse__q", "Mad House (Barcrest) (MPU4) (set 18)", + "m4madhse__r", "Mad House (Barcrest) (MPU4) (set 19)", + "m4madhse__s", "Mad House (Barcrest) (MPU4) (set 20)", + "m4madhse__t", "Mad House (Barcrest) (MPU4) (set 21)", + "m4madhse__u", "Mad House (Barcrest) (MPU4) (set 22)", + "m4madhse__v", "Mad House (Barcrest) (MPU4) (set 23)", + "m4madhse__w", "Mad House (Barcrest) (MPU4) (set 24)", + "m4madhse__x", "Mad House (Barcrest) (MPU4) (set 25)", + "m4madhse__y", "Mad House (Barcrest) (MPU4) (set 26)", + "m4madhse__z", "Mad House (Barcrest) (MPU4) (set 27)", + "m4madmnc", "Mad Money Classic (Bwb) (MPU4) (set 1)", + "m4madmnc__a", "Mad Money Classic (Bwb) (MPU4) (set 2)", + "m4madmnc__b", "Mad Money Classic (Bwb) (MPU4) (set 3)", + "m4madmnc__c", "Mad Money Classic (Bwb) (MPU4) (set 4)", + "m4madmnc__d", "Mad Money Classic (Bwb) (MPU4) (set 5)", + "m4madmnc__e", "Mad Money Classic (Bwb) (MPU4) (set 6)", + "m4madmnc__f", "Mad Money Classic (Bwb) (MPU4) (set 7)", + "m4madmnc__g", "Mad Money Classic (Bwb) (MPU4) (set 8)", + "m4madmnc__h", "Mad Money Classic (Bwb) (MPU4) (set 9)", + "m4madmnc__i", "Mad Money Classic (Bwb) (MPU4) (set 10)", + "m4madmnc__j", "Mad Money Classic (Bwb) (MPU4) (set 11)", + "m4madmnc__k", "Mad Money Classic (Bwb) (MPU4) (set 12)", + "m4madmnc__l", "Mad Money Classic (Bwb) (MPU4) (set 13)", + "m4madmnc__m", "Mad Money Classic (Bwb) (MPU4) (set 14)", + "m4madmnc__n", "Mad Money Classic (Bwb) (MPU4) (set 15)", + "m4madmnc__o", "Mad Money Classic (Bwb) (MPU4) (set 16)", + "m4madmnc__p", "Mad Money Classic (Bwb) (MPU4) (set 17)", + "m4madmnc__q", "Mad Money Classic (Bwb) (MPU4) (set 18)", + "m4madmnc__r", "Mad Money Classic (Bwb) (MPU4) (set 19)", + "m4madmnc__s", "Mad Money Classic (Bwb) (MPU4) (set 20)", + "m4madmnc__t", "Mad Money Classic (Bwb) (MPU4) (set 21)", + "m4madmnc__u", "Mad Money Classic (Bwb) (MPU4) (set 22)", + "m4madmnc__v", "Mad Money Classic (Bwb) (MPU4) (set 23)", + "m4madmnc__w", "Mad Money Classic (Bwb) (MPU4) (set 24)", + "m4madmon", "Mad Money (Bwb) (MPU4) (set 1)", + "m4madmon__a", "Mad Money (Bwb) (MPU4) (set 2)", + "m4madmon__b", "Mad Money (Bwb) (MPU4) (set 3)", + "m4madmon__c", "Mad Money (Bwb) (MPU4) (set 4)", + "m4madmon__d", "Mad Money (Bwb) (MPU4) (set 5)", + "m4madmon__e", "Mad Money (Bwb) (MPU4) (set 6)", + "m4madmon__f", "Mad Money (Bwb) (MPU4) (set 7)", + "m4madmon__g", "Mad Money (Bwb) (MPU4) (set 8)", + "m4madmon__h", "Mad Money (Bwb) (MPU4) (set 9)", + "m4madmon__i", "Mad Money (Bwb) (MPU4) (set 10)", + "m4madmon__j", "Mad Money (Bwb) (MPU4) (set 11)", + "m4madmon__k", "Mad Money (Bwb) (MPU4) (set 12)", + "m4mag7s", "Magnificent 7s (Barcrest) (MPU4) (set 1)", + "m4mag7s__0", "Magnificent 7s (Barcrest) (MPU4) (set 28)", + "m4mag7s__1", "Magnificent 7s (Barcrest) (MPU4) (set 29)", + "m4mag7s__2", "Magnificent 7s (Barcrest) (MPU4) (set 30)", + "m4mag7s__3", "Magnificent 7s (Barcrest) (MPU4) (set 31)", + "m4mag7s__4", "Magnificent 7s (Barcrest) (MPU4) (set 32)", + "m4mag7s__5", "Magnificent 7s (Barcrest) (MPU4) (set 33)", + "m4mag7s__6", "Magnificent 7s (Barcrest) (MPU4) (set 34)", + "m4mag7s__7", "Magnificent 7s (Barcrest) (MPU4) (set 35)", + "m4mag7s__8", "Magnificent 7s (Barcrest) (MPU4) (set 36)", + "m4mag7s__9", "Magnificent 7s (Barcrest) (MPU4) (set 37)", + "m4mag7s__a", "Magnificent 7s (Barcrest) (MPU4) (set 2)", + "m4mag7s__aa", "Magnificent 7s (Barcrest) (MPU4) (set 38)", + "m4mag7s__ab", "Magnificent 7s (Barcrest) (MPU4) (set 39)", + "m4mag7s__ac", "Magnificent 7s (Barcrest) (MPU4) (set 40)", + "m4mag7s__ad", "Magnificent 7s (Barcrest) (MPU4) (set 41)", + "m4mag7s__ae", "Magnificent 7s (Barcrest) (MPU4) (set 42)", + "m4mag7s__af", "Magnificent 7s (Barcrest) (MPU4) (set 43)", + "m4mag7s__ag", "Magnificent 7s (Barcrest) (MPU4) (set 44)", + "m4mag7s__ah", "Magnificent 7s (Barcrest) (MPU4) (set 45)", + "m4mag7s__ai", "Magnificent 7s (Barcrest) (MPU4) (set 46)", + "m4mag7s__aj", "Magnificent 7s (Barcrest) (MPU4) (set 47)", + "m4mag7s__ak", "Magnificent 7s (Barcrest) (MPU4) (set 48)", + "m4mag7s__al", "Magnificent 7s (Barcrest) (MPU4) (set 49)", + "m4mag7s__am", "Magnificent 7s (Barcrest) (MPU4) (set 50)", + "m4mag7s__an", "Magnificent 7s (Barcrest) (MPU4) (set 51)", + "m4mag7s__ao", "Magnificent 7s (Barcrest) (MPU4) (set 52)", + "m4mag7s__ap", "Magnificent 7s (Barcrest) (MPU4) (set 53)", + "m4mag7s__aq", "Magnificent 7s (Barcrest) (MPU4) (set 54)", + "m4mag7s__ar", "Magnificent 7s (Barcrest) (MPU4) (set 55)", + "m4mag7s__as", "Magnificent 7s (Barcrest) (MPU4) (set 56)", + "m4mag7s__at", "Magnificent 7s (Barcrest) (MPU4) (set 57)", + "m4mag7s__au", "Magnificent 7s (Barcrest) (MPU4) (set 58)", + "m4mag7s__av", "Magnificent 7s (Barcrest) (MPU4) (set 59)", + "m4mag7s__aw", "Magnificent 7s (Barcrest) (MPU4) (set 60)", + "m4mag7s__ax", "Magnificent 7s (Barcrest) (MPU4) (set 61)", + "m4mag7s__b", "Magnificent 7s (Barcrest) (MPU4) (set 3)", + "m4mag7s__c", "Magnificent 7s (Barcrest) (MPU4) (set 4)", + "m4mag7s__d", "Magnificent 7s (Barcrest) (MPU4) (set 5)", + "m4mag7s__e", "Magnificent 7s (Barcrest) (MPU4) (set 6)", + "m4mag7s__f", "Magnificent 7s (Barcrest) (MPU4) (set 7)", + "m4mag7s__g", "Magnificent 7s (Barcrest) (MPU4) (set 8)", + "m4mag7s__h", "Magnificent 7s (Barcrest) (MPU4) (set 9)", + "m4mag7s__i", "Magnificent 7s (Barcrest) (MPU4) (set 10)", + "m4mag7s__j", "Magnificent 7s (Barcrest) (MPU4) (set 11)", + "m4mag7s__k", "Magnificent 7s (Barcrest) (MPU4) (set 12)", + "m4mag7s__l", "Magnificent 7s (Barcrest) (MPU4) (set 13)", + "m4mag7s__m", "Magnificent 7s (Barcrest) (MPU4) (set 14)", + "m4mag7s__n", "Magnificent 7s (Barcrest) (MPU4) (set 15)", + "m4mag7s__o", "Magnificent 7s (Barcrest) (MPU4) (set 16)", + "m4mag7s__p", "Magnificent 7s (Barcrest) (MPU4) (set 17)", + "m4mag7s__q", "Magnificent 7s (Barcrest) (MPU4) (set 18)", + "m4mag7s__r", "Magnificent 7s (Barcrest) (MPU4) (set 19)", + "m4mag7s__s", "Magnificent 7s (Barcrest) (MPU4) (set 20)", + "m4mag7s__t", "Magnificent 7s (Barcrest) (MPU4) (set 21)", + "m4mag7s__u", "Magnificent 7s (Barcrest) (MPU4) (set 22)", + "m4mag7s__v", "Magnificent 7s (Barcrest) (MPU4) (set 23)", + "m4mag7s__w", "Magnificent 7s (Barcrest) (MPU4) (set 24)", + "m4mag7s__x", "Magnificent 7s (Barcrest) (MPU4) (set 25)", + "m4mag7s__y", "Magnificent 7s (Barcrest) (MPU4) (set 26)", + "m4mag7s__z", "Magnificent 7s (Barcrest) (MPU4) (set 27)", + "m4magdrg", "Magic Dragon (Barcrest) (MPU4) (DMD1.0)", + "m4magi7", "Magic 7's (Crystal) (MPU4) (set 1)", + "m4magi7a", "Magic 7's (Crystal) (MPU4) (set 2)", + "m4maglin", "Magic Liner (Barcrest) (MPU4) (DMA2.1)", + "m4magrep", "Magic Replay (Barcrest) (Dutch) (MPU4)", + "m4magtbo", "Magic Turbo (Barcrest) (MPU4)", + "m4makmnt", "Make A Mint (Barcrest) (MPU4) (set 1)", + "m4makmnt__0", "Make A Mint (Barcrest) (MPU4) (set 28)", + "m4makmnt__1", "Make A Mint (Barcrest) (MPU4) (set 29)", + "m4makmnt__2", "Make A Mint (Barcrest) (MPU4) (set 30)", + "m4makmnt__3", "Make A Mint (Barcrest) (MPU4) (set 31)", + "m4makmnt__4", "Make A Mint (Barcrest) (MPU4) (set 32)", + "m4makmnt__5", "Make A Mint (Barcrest) (MPU4) (set 33)", + "m4makmnt__6", "Make A Mint (Barcrest) (MPU4) (set 34)", + "m4makmnt__7", "Make A Mint (Barcrest) (MPU4) (set 35)", + "m4makmnt__8", "Make A Mint (Barcrest) (MPU4) (set 36)", + "m4makmnt__9", "Make A Mint (Barcrest) (MPU4) (set 37)", + "m4makmnt__a", "Make A Mint (Barcrest) (MPU4) (set 2)", + "m4makmnt__aa", "Make A Mint (Barcrest) (MPU4) (set 38)", + "m4makmnt__ab", "Make A Mint (Barcrest) (MPU4) (set 39)", + "m4makmnt__ac", "Make A Mint (Barcrest) (MPU4) (set 40)", + "m4makmnt__ad", "Make A Mint (Barcrest) (MPU4) (set 41)", + "m4makmnt__ae", "Make A Mint (Barcrest) (MPU4) (set 42)", + "m4makmnt__af", "Make A Mint (Barcrest) (MPU4) (set 43)", + "m4makmnt__ag", "Make A Mint (Barcrest) (MPU4) (set 44)", + "m4makmnt__ah", "Make A Mint (Barcrest) (MPU4) (set 45)", + "m4makmnt__ai", "Make A Mint (Barcrest) (MPU4) (set 46)", + "m4makmnt__aj", "Make A Mint (Barcrest) (MPU4) (set 47)", + "m4makmnt__ak", "Make A Mint (Barcrest) (MPU4) (set 48)", + "m4makmnt__al", "Make A Mint (Barcrest) (MPU4) (set 49)", + "m4makmnt__am", "Make A Mint (Barcrest) (MPU4) (set 50)", + "m4makmnt__an", "Make A Mint (Barcrest) (MPU4) (set 51)", + "m4makmnt__ao", "Make A Mint (Barcrest) (MPU4) (set 52)", + "m4makmnt__ap", "Make A Mint (Barcrest) (MPU4) (set 53)", + "m4makmnt__aq", "Make A Mint (Barcrest) (MPU4) (set 54)", + "m4makmnt__ar", "Make A Mint (Barcrest) (MPU4) (set 55)", + "m4makmnt__as", "Make A Mint (Barcrest) (MPU4) (set 56)", + "m4makmnt__b", "Make A Mint (Barcrest) (MPU4) (set 3)", + "m4makmnt__c", "Make A Mint (Barcrest) (MPU4) (set 4)", + "m4makmnt__d", "Make A Mint (Barcrest) (MPU4) (set 5)", + "m4makmnt__e", "Make A Mint (Barcrest) (MPU4) (set 6)", + "m4makmnt__f", "Make A Mint (Barcrest) (MPU4) (set 7)", + "m4makmnt__g", "Make A Mint (Barcrest) (MPU4) (set 8)", + "m4makmnt__h", "Make A Mint (Barcrest) (MPU4) (set 9)", + "m4makmnt__i", "Make A Mint (Barcrest) (MPU4) (set 10)", + "m4makmnt__j", "Make A Mint (Barcrest) (MPU4) (set 11)", + "m4makmnt__k", "Make A Mint (Barcrest) (MPU4) (set 12)", + "m4makmnt__l", "Make A Mint (Barcrest) (MPU4) (set 13)", + "m4makmnt__m", "Make A Mint (Barcrest) (MPU4) (set 14)", + "m4makmnt__n", "Make A Mint (Barcrest) (MPU4) (set 15)", + "m4makmnt__o", "Make A Mint (Barcrest) (MPU4) (set 16)", + "m4makmnt__p", "Make A Mint (Barcrest) (MPU4) (set 17)", + "m4makmnt__q", "Make A Mint (Barcrest) (MPU4) (set 18)", + "m4makmnt__r", "Make A Mint (Barcrest) (MPU4) (set 19)", + "m4makmnt__s", "Make A Mint (Barcrest) (MPU4) (set 20)", + "m4makmnt__t", "Make A Mint (Barcrest) (MPU4) (set 21)", + "m4makmnt__u", "Make A Mint (Barcrest) (MPU4) (set 22)", + "m4makmnt__v", "Make A Mint (Barcrest) (MPU4) (set 23)", + "m4makmnt__w", "Make A Mint (Barcrest) (MPU4) (set 24)", + "m4makmnt__x", "Make A Mint (Barcrest) (MPU4) (set 25)", + "m4makmnt__y", "Make A Mint (Barcrest) (MPU4) (set 26)", + "m4makmnt__z", "Make A Mint (Barcrest) (MPU4) (set 27)", + "m4matdr", "Matador (unknown) (MPU4?)", + "m4maxmze", "Maximize (Union) (MPU4, set 1)", + "m4maxmzea", "Maximize (Union) (MPU4, set 2)", + "m4maxmzeb", "Maximize (Union) (MPU4, set 3)", + "m4maxmzec", "Maximize (Union) (MPU4, set 4)", + "m4maxmzed", "Maximize (Union) (MPU4, set 5)", + "m4mayhem", "Mayhem (Mdm) (MPU4, set 1)", + "m4mayhema", "Mayhem (Mdm) (MPU4, set 2)", + "m4mbel", "Millennium Bells (Avantime?) (MPU4) (set 1)", + "m4mbel__0", "Millennium Bells (Avantime?) (MPU4) (set 28)", + "m4mbel__1", "Millennium Bells (Avantime?) (MPU4) (set 29)", + "m4mbel__2", "Millennium Bells (Avantime?) (MPU4) (set 30)", + "m4mbel__3", "Millennium Bells (Avantime?) (MPU4) (set 31)", + "m4mbel__4", "Millennium Bells (Avantime?) (MPU4) (set 32)", + "m4mbel__5", "Millennium Bells (Avantime?) (MPU4) (set 33)", + "m4mbel__6", "Millennium Bells (Avantime?) (MPU4) (set 34)", + "m4mbel__7", "Millennium Bells (Avantime?) (MPU4) (set 35)", + "m4mbel__8", "Millennium Bells (Avantime?) (MPU4) (set 36)", + "m4mbel__9", "Millennium Bells (Avantime?) (MPU4) (set 37)", + "m4mbel__a", "Millennium Bells (Avantime?) (MPU4) (set 2)", + "m4mbel__a0", "Millennium Bells (Avantime?) (MPU4) (set 64)", + "m4mbel__aa", "Millennium Bells (Avantime?) (MPU4) (set 38)", + "m4mbel__ab", "Millennium Bells (Avantime?) (MPU4) (set 39)", + "m4mbel__ac", "Millennium Bells (Avantime?) (MPU4) (set 40)", + "m4mbel__ad", "Millennium Bells (Avantime?) (MPU4) (set 41)", + "m4mbel__ae", "Millennium Bells (Avantime?) (MPU4) (set 42)", + "m4mbel__af", "Millennium Bells (Avantime?) (MPU4) (set 43)", + "m4mbel__ag", "Millennium Bells (Avantime?) (MPU4) (set 44)", + "m4mbel__ah", "Millennium Bells (Avantime?) (MPU4) (set 45)", + "m4mbel__ai", "Millennium Bells (Avantime?) (MPU4) (set 46)", + "m4mbel__aj", "Millennium Bells (Avantime?) (MPU4) (set 47)", + "m4mbel__ak", "Millennium Bells (Avantime?) (MPU4) (set 48)", + "m4mbel__al", "Millennium Bells (Avantime?) (MPU4) (set 49)", + "m4mbel__am", "Millennium Bells (Avantime?) (MPU4) (set 50)", + "m4mbel__an", "Millennium Bells (Avantime?) (MPU4) (set 51)", + "m4mbel__ao", "Millennium Bells (Avantime?) (MPU4) (set 52)", + "m4mbel__ap", "Millennium Bells (Avantime?) (MPU4) (set 53)", + "m4mbel__aq", "Millennium Bells (Avantime?) (MPU4) (set 54)", + "m4mbel__ar", "Millennium Bells (Avantime?) (MPU4) (set 55)", + "m4mbel__as", "Millennium Bells (Avantime?) (MPU4) (set 56)", + "m4mbel__at", "Millennium Bells (Avantime?) (MPU4) (set 57)", + "m4mbel__au", "Millennium Bells (Avantime?) (MPU4) (set 58)", + "m4mbel__av", "Millennium Bells (Avantime?) (MPU4) (set 59)", + "m4mbel__aw", "Millennium Bells (Avantime?) (MPU4) (set 60)", + "m4mbel__ax", "Millennium Bells (Avantime?) (MPU4) (set 61)", + "m4mbel__ay", "Millennium Bells (Avantime?) (MPU4) (set 62)", + "m4mbel__az", "Millennium Bells (Avantime?) (MPU4) (set 63)", + "m4mbel__b", "Millennium Bells (Avantime?) (MPU4) (set 3)", + "m4mbel__c", "Millennium Bells (Avantime?) (MPU4) (set 4)", + "m4mbel__d", "Millennium Bells (Avantime?) (MPU4) (set 5)", + "m4mbel__e", "Millennium Bells (Avantime?) (MPU4) (set 6)", + "m4mbel__f", "Millennium Bells (Avantime?) (MPU4) (set 7)", + "m4mbel__g", "Millennium Bells (Avantime?) (MPU4) (set 8)", + "m4mbel__h", "Millennium Bells (Avantime?) (MPU4) (set 9)", + "m4mbel__i", "Millennium Bells (Avantime?) (MPU4) (set 10)", + "m4mbel__j", "Millennium Bells (Avantime?) (MPU4) (set 11)", + "m4mbel__k", "Millennium Bells (Avantime?) (MPU4) (set 12)", + "m4mbel__m", "Millennium Bells (Avantime?) (MPU4) (set 14)", + "m4mbel__n", "Millennium Bells (Avantime?) (MPU4) (set 15)", + "m4mbel__o", "Millennium Bells (Avantime?) (MPU4) (set 16)", + "m4mbel__p", "Millennium Bells (Avantime?) (MPU4) (set 17)", + "m4mbel__q", "Millennium Bells (Avantime?) (MPU4) (set 18)", + "m4mbel__r", "Millennium Bells (Avantime?) (MPU4) (set 19)", + "m4mbel__s", "Millennium Bells (Avantime?) (MPU4) (set 20)", + "m4mbel__t", "Millennium Bells (Avantime?) (MPU4) (set 21)", + "m4mbel__u", "Millennium Bells (Avantime?) (MPU4) (set 22)", + "m4mbel__v", "Millennium Bells (Avantime?) (MPU4) (set 23)", + "m4mbel__w", "Millennium Bells (Avantime?) (MPU4) (set 24)", + "m4mbel__x", "Millennium Bells (Avantime?) (MPU4) (set 25)", + "m4mbel__y", "Millennium Bells (Avantime?) (MPU4) (set 26)", + "m4mbel__z", "Millennium Bells (Avantime?) (MPU4) (set 27)", + "m4mecca", "Mecca Money (Union) (MPU4)", + "m4megbks", "Mega Bucks (Barcrest) (MPU4) (BUC 4.1X)", + "m4megbksa", "Mega Bucks (Barcrest) (MPU4) (BUC 4.1CX)", + "m4megbksb", "Mega Bucks (Barcrest) (MPU4) (BUC 4.1XD)", + "m4megbksc", "Mega Bucks (Barcrest) (MPU4) (BUC 3.1)", + "m4meglnk", "Megalink (Barcrest) (Dutch) (MPU4)", + "m4mgpn", "Monaco Grand Prix (Nova) (MPU4)", + "m4milclb", "Millionaire's Club (Barcrest) (MPU4) (set 1)", + "m4milclba", "Millionaire's Club (Barcrest) (MPU4) (set 2)", + "m4milclbb", "Millionaire's Club (Barcrest) (MPU4) (set 3)", + "m4milclbc", "Millionaire's Club (Barcrest) (MPU4) (set 4)", + "m4milclbd", "Millionaire's Club (Barcrest) (MPU4) (set 5)", + "m4milrou", "Millennium Roulette (Avantime?) (MPU4) (set 1)", + "m4milrou__a", "Millennium Roulette (Avantime?) (MPU4) (set 2)", + "m4mirage", "Mirage (Barcrest) (MPU4) (RAG 4.1)", + "m4mjp", "Mega Jackpot (Avantime?) (MPU4) (set 1)", + "m4mjp__a", "Mega Jackpot (Avantime?) (MPU4) (set 2)", + "m4mjp__b", "Mega Jackpot (Avantime?) (MPU4) (set 3)", + "m4mjp__c", "Mega Jackpot (Avantime?) (MPU4) (set 4)", + "m4mjp__d", "Mega Jackpot (Avantime?) (MPU4) (set 5)", + "m4mjp__e", "Mega Jackpot (Avantime?) (MPU4) (set 6)", + "m4mjp__f", "Mega Jackpot (Avantime?) (MPU4) (set 7)", + "m4mjp__g", "Mega Jackpot (Avantime?) (MPU4) (set 8)", + "m4mmm", "Money Mummy Money (Bwb) (MPU4) (set 1)", + "m4mmm__a", "Money Mummy Money (Bwb) (MPU4) (set 2)", + "m4mmm__b", "Money Mummy Money (Bwb) (MPU4) (set 3)", + "m4mmm__c", "Money Mummy Money (Bwb) (MPU4) (set 4)", + "m4mmm__d", "Money Mummy Money (Bwb) (MPU4) (set 5)", + "m4mmm__e", "Money Mummy Money (Bwb) (MPU4) (set 6)", + "m4mmm__f", "Money Mummy Money (Bwb) (MPU4) (set 7)", + "m4moneym", "Money Maker (Barcrest) (MPU4)", + "m4monspn", "Money Spinner (Empire) (MPU4, set 1)", + "m4monspna", "Money Spinner (Empire) (MPU4, set 2)", + "m4monspnb", "Money Spinner (Empire) (MPU4, set 3)", + "m4monte", "Monte Carlo (Barcrest) (MPU4) (set 1)", + "m4monte__a", "Monte Carlo (Barcrest) (MPU4) (set 2)", + "m4monte__b", "Monte Carlo (Barcrest) (MPU4) (set 3)", + "m4monte__c", "Monte Carlo (Barcrest) (MPU4) (set 4)", + "m4monte__d", "Monte Carlo (Barcrest) (MPU4) (set 5)", + "m4monte__e", "Monte Carlo (Barcrest) (MPU4) (set 6)", + "m4monte__f", "Monte Carlo (Barcrest) (MPU4) (set 7)", + "m4monte__g", "Monte Carlo (Barcrest) (MPU4) (set 8)", + "m4monte__h", "Monte Carlo (Barcrest) (MPU4) (set 9)", + "m4monte__i", "Monte Carlo (Barcrest) (MPU4) (set 10)", + "m4monte__j", "Monte Carlo (Barcrest) (MPU4) (set 11)", + "m4monte__k", "Monte Carlo (Barcrest) (MPU4) (set 12)", + "m4monte__l", "Monte Carlo (Barcrest) (MPU4) (set 13)", + "m4monte__m", "Monte Carlo (Barcrest) (MPU4) (set 14)", + "m4montrl", "Money Trail (Crystal) (MPU4) (set 1)", + "m4montrla", "Money Trail (Crystal) (MPU4) (set 2)", + "m4montrlb", "Money Trail (Crystal) (MPU4) (set 3)", + "m4montrlc", "Money Trail (Crystal) (MPU4) (set 4)", + "m4montrld", "Money Trail (Crystal) (MPU4) (set 5)", + "m4multcl", "Multiplay Club (Barcrest) (MPU4, MP 2.8)", + "m4multwy", "Multiway (Barcrest) (Dutch) (MPU4)", + "m4mystiq", "Mystique Club (Crystal) (MPU4) (set 1)", + "m4mystiqa", "Mystique Club (Crystal) (MPU4) (set 2)", + "m4mystiqb", "Mystique Club (Crystal) (MPU4) (set 3)", + "m4mystiqc", "Mystique Club (Crystal) (MPU4) (set 4)", + "m4ndup", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 1)", + "m4ndupa", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 2)", + "m4ndupb", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 3)", + "m4ndupc", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 4)", + "m4nhtt", "New Hit the Top (Barcrest) (MPU4) (set 1)", + "m4nhtt__a", "New Hit the Top (Barcrest) (MPU4) (set 2)", + "m4nhtt__b", "New Hit the Top (Barcrest) (MPU4) (set 3)", + "m4nhtt__c", "New Hit the Top (Barcrest) (MPU4) (set 4)", + "m4nhtt__d", "New Hit the Top (Barcrest) (MPU4) (set 5)", + "m4nhtt__e", "New Hit the Top (Barcrest) (MPU4) (set 6)", + "m4nhtt__f", "New Hit the Top (Barcrest) (MPU4) (set 7)", + "m4nhtt__g", "New Hit the Top (Barcrest) (MPU4) (set 8)", + "m4nhtt__h", "New Hit the Top (Barcrest) (MPU4) (set 9)", + "m4nhtt__i", "New Hit the Top (Barcrest) (MPU4) (set 10)", + "m4nhtt__j", "New Hit the Top (Barcrest) (MPU4) (set 11)", + "m4nick", "Nickelodeon (Barcrest) (MPU4) (set 1)", + "m4nicka", "Nickelodeon (Barcrest) (MPU4) (set 2)", + "m4nickb", "Nickelodeon (Barcrest) (MPU4) (set 3)", + "m4nickc", "Nickelodeon (Barcrest) (MPU4) (set 4)", + "m4nickd", "Nickelodeon (Barcrest) (MPU4) (set 5)", + "m4nicke", "Nickelodeon (Barcrest) (MPU4) (set 6)", + "m4nifty", "Nifty Fifty (Barcrest) (MPU4) (NF 2.0)", + "m4niftya", "Nifty Fifty (Barcrest) (MPU4) (NF 2.1, set 1)", + "m4niftyb", "Nifty Fifty (Barcrest) (MPU4) (NF 2.1, set 2)", + "m4nile", "Nile Jewels (Barcrest) (German) (MPU4) (GJN0.8)", + "m4nnww", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 1)", + "m4nnww__0", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 28)", + "m4nnww__1", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 29)", + "m4nnww__2", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 30)", + "m4nnww__3", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 31)", + "m4nnww__4", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 32)", + "m4nnww__5", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 33)", + "m4nnww__6", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 34)", + "m4nnww__7", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 35)", + "m4nnww__8", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 36)", + "m4nnww__9", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 37)", + "m4nnww__a", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 2)", + "m4nnww__aa", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 38)", + "m4nnww__ab", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 39)", + "m4nnww__ac", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 40)", + "m4nnww__ad", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 41)", + "m4nnww__ae", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 42)", + "m4nnww__af", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 43)", + "m4nnww__ag", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 44)", + "m4nnww__ah", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 45)", + "m4nnww__ai", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 46)", + "m4nnww__aj", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 47)", + "m4nnww__ak", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 48)", + "m4nnww__al", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 49)", + "m4nnww__am", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 50)", + "m4nnww__an", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 51)", + "m4nnww__ao", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 52)", + "m4nnww__ap", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 53)", + "m4nnww__aq", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 54)", + "m4nnww__ar", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 55)", + "m4nnww__as", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 56)", + "m4nnww__at", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 57)", + "m4nnww__au", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 58)", + "m4nnww__av", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 59)", + "m4nnww__aw", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 60)", + "m4nnww__ax", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 61)", + "m4nnww__ay", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 62)", + "m4nnww__az", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 63)", + "m4nnww__b", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 3)", + "m4nnww__c", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 4)", + "m4nnww__d", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 5)", + "m4nnww__e", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 6)", + "m4nnww__f", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 7)", + "m4nnww__g", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 8)", + "m4nnww__h", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 9)", + "m4nnww__i", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 10)", + "m4nnww__j", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 11)", + "m4nnww__k", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 12)", + "m4nnww__l", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 13)", + "m4nnww__m", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 14)", + "m4nnww__n", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 15)", + "m4nnww__o", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 16)", + "m4nnww__p", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 17)", + "m4nnww__q", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 18)", + "m4nnww__r", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 19)", + "m4nnww__s", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 20)", + "m4nnww__t", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 21)", + "m4nnww__u", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 22)", + "m4nnww__v", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 23)", + "m4nnww__w", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 24)", + "m4nnww__x", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 25)", + "m4nnww__y", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 26)", + "m4nnww__z", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 27)", + "m4nnwwc", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 1)", + "m4nnwwc__0", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 28)", + "m4nnwwc__1", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 29)", + "m4nnwwc__2", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 30)", + "m4nnwwc__3", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 31)", + "m4nnwwc__4", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 32)", + "m4nnwwc__5", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 33)", + "m4nnwwc__6", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 34)", + "m4nnwwc__7", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 35)", + "m4nnwwc__8", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 36)", + "m4nnwwc__9", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 37)", + "m4nnwwc__a", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 2)", + "m4nnwwc__aa", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 38)", + "m4nnwwc__ab", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 39)", + "m4nnwwc__ac", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 40)", + "m4nnwwc__ad", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 41)", + "m4nnwwc__b", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 3)", + "m4nnwwc__c", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 4)", + "m4nnwwc__d", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 5)", + "m4nnwwc__e", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 6)", + "m4nnwwc__f", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 7)", + "m4nnwwc__g", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 8)", + "m4nnwwc__h", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 9)", + "m4nnwwc__i", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 10)", + "m4nnwwc__j", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 11)", + "m4nnwwc__k", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 12)", + "m4nnwwc__l", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 13)", + "m4nnwwc__m", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 14)", + "m4nnwwc__n", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 15)", + "m4nnwwc__o", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 16)", + "m4nnwwc__p", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 17)", + "m4nnwwc__q", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 18)", + "m4nnwwc__r", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 19)", + "m4nnwwc__s", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 20)", + "m4nnwwc__t", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 21)", + "m4nnwwc__u", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 22)", + "m4nnwwc__v", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 23)", + "m4nnwwc__w", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 24)", + "m4nnwwc__x", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 25)", + "m4nnwwc__y", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 26)", + "m4nnwwc__z", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 27)", + "m4nod", "Nod And A Wink (Eurotech) (MPU4)", + "m4nspot", "Night Spot Club (Barcrest) (MPU4) (set 1)", + "m4nspota", "Night Spot Club (Barcrest) (MPU4) (set 2)", + "m4nspotb", "Night Spot Club (Barcrest) (MPU4) (set 3)", + "m4nud2p", "2p Nudger (Mdm?) (MPU4)", + "m4nudbnk", "Nudge Banker (Barcrest) (MPU4) (set 1)", + "m4nudbnk__a", "Nudge Banker (Barcrest) (MPU4) (set 2)", + "m4nudbnk__b", "Nudge Banker (Barcrest) (MPU4) (set 3)", + "m4nudbnk__c", "Nudge Banker (Barcrest) (MPU4) (set 4)", + "m4nudbnk__d", "Nudge Banker (Barcrest) (MPU4) (set 5)", + "m4nudbon", "Nudge Bonanza (Mdm) (MPU4, set 1)", + "m4nudbona", "Nudge Bonanza (Mdm) (MPU4, set 2)", + "m4nudgem", "Nudge Gems (Mdm) (MPU4)", + "m4nudgwc", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 1)", + "m4nudgwc__a", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 2)", + "m4nudgwc__b", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 3)", + "m4nudgwc__c", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 4)", + "m4nudgwc__d", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 5)", + "m4nudgwc__e", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 6)", + "m4nudgwc__f", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 7)", + "m4nudgwc__g", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 8)", + "m4nudgwc__h", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 9)", + "m4nudqst", "Nudge Quest (Barcrest) (MPU4) (NQ 2.0)", + "m4nudshf", "Nudge Shuffle (Barcrest) (MPU4) (set 1)", + "m4nudshfa", "Nudge Shuffle (Barcrest) (MPU4) (set 2)", + "m4nudshfb", "Nudge Shuffle (Barcrest) (MPU4) (set 3)", + "m4nudshfc", "Nudge Shuffle (Barcrest) (MPU4) (set 4)", + "m4nudup", "Nudge Up (Barcrest) (Dutch) (MPU4)", + "m4nudwin", "Nudge & Win (Crystal) (MPU4) (set 1)", + "m4nudwina", "Nudge & Win (Crystal) (MPU4) (set 2)", + "m4num1", "Number One (Barcrest) (Dutch) (MPU4)", + "m4oadrac", "Ooh Aah Dracula (Barcrest) (MPU4) (set 1)", + "m4oadrac__a", "Ooh Aah Dracula (Barcrest) (MPU4) (set 2)", + "m4oadrac__b", "Ooh Aah Dracula (Barcrest) (MPU4) (set 3)", + "m4oadrac__c", "Ooh Aah Dracula (Barcrest) (MPU4) (set 4)", + "m4oadrac__d", "Ooh Aah Dracula (Barcrest) (MPU4) (set 5)", + "m4oadrac__e", "Ooh Aah Dracula (Barcrest) (MPU4) (set 6)", + "m4oadrac__f", "Ooh Aah Dracula (Barcrest) (MPU4) (set 7)", + "m4oadrac__g", "Ooh Aah Dracula (Barcrest) (MPU4) (set 8)", + "m4oadrac__h", "Ooh Aah Dracula (Barcrest) (MPU4) (set 9)", + "m4octo", "Octopus (Nova) (MPU4)", + "m4oldtmr", "Old Timer (Barcrest) (Dutch) (MPU4) (DOT1.1)", + "m4olygn", "Olympic Gold (German) (Nova) (MPU4) (set 1)", + "m4olygn__a", "Olympic Gold (German) (Nova) (MPU4) (set 2)", + "m4omega", "Omega (Barcrest) (Dutch) (MPU4)", + "m4ordmnd", "Oriental Diamonds (Barcrest) (German) (MPU4)", + "m4orland", "Orlando Magic (Bwb) (MPU4) (set 1)", + "m4orland__a", "Orlando Magic (Bwb) (MPU4) (set 2)", + "m4orland__b", "Orlando Magic (Bwb) (MPU4) (set 3)", + "m4orland__c", "Orlando Magic (Bwb) (MPU4) (set 4)", + "m4orland__d", "Orlando Magic (Bwb) (MPU4) (set 5)", + "m4orland__e", "Orlando Magic (Bwb) (MPU4) (set 6)", + "m4orland__f", "Orlando Magic (Bwb) (MPU4) (set 7)", + "m4orland__g", "Orlando Magic (Bwb) (MPU4) (set 8)", + "m4orland__h", "Orlando Magic (Bwb) (MPU4) (set 9)", + "m4overmn", "Over The Moon (Barcrest) (MPU4) (set 1)", + "m4overmn__0", "Over The Moon (Barcrest) (MPU4) (set 28)", + "m4overmn__1", "Over The Moon (Barcrest) (MPU4) (set 29)", + "m4overmn__2", "Over The Moon (Barcrest) (MPU4) (set 30)", + "m4overmn__3", "Over The Moon (Barcrest) (MPU4) (set 31)", + "m4overmn__4", "Over The Moon (Barcrest) (MPU4) (set 32)", + "m4overmn__5", "Over The Moon (Barcrest) (MPU4) (set 33)", + "m4overmn__6", "Over The Moon (Barcrest) (MPU4) (set 34)", + "m4overmn__7", "Over The Moon (Barcrest) (MPU4) (set 35)", + "m4overmn__8", "Over The Moon (Barcrest) (MPU4) (set 36)", + "m4overmn__a", "Over The Moon (Barcrest) (MPU4) (set 2)", + "m4overmn__b", "Over The Moon (Barcrest) (MPU4) (set 3)", + "m4overmn__c", "Over The Moon (Barcrest) (MPU4) (set 4)", + "m4overmn__d", "Over The Moon (Barcrest) (MPU4) (set 5)", + "m4overmn__e", "Over The Moon (Barcrest) (MPU4) (set 6)", + "m4overmn__f", "Over The Moon (Barcrest) (MPU4) (set 7)", + "m4overmn__g", "Over The Moon (Barcrest) (MPU4) (set 8)", + "m4overmn__h", "Over The Moon (Barcrest) (MPU4) (set 9)", + "m4overmn__i", "Over The Moon (Barcrest) (MPU4) (set 10)", + "m4overmn__j", "Over The Moon (Barcrest) (MPU4) (set 11)", + "m4overmn__k", "Over The Moon (Barcrest) (MPU4) (set 12)", + "m4overmn__l", "Over The Moon (Barcrest) (MPU4) (set 13)", + "m4overmn__m", "Over The Moon (Barcrest) (MPU4) (set 14)", + "m4overmn__n", "Over The Moon (Barcrest) (MPU4) (set 15)", + "m4overmn__o", "Over The Moon (Barcrest) (MPU4) (set 16)", + "m4overmn__p", "Over The Moon (Barcrest) (MPU4) (set 17)", + "m4overmn__q", "Over The Moon (Barcrest) (MPU4) (set 18)", + "m4overmn__r", "Over The Moon (Barcrest) (MPU4) (set 19)", + "m4overmn__s", "Over The Moon (Barcrest) (MPU4) (set 20)", + "m4overmn__t", "Over The Moon (Barcrest) (MPU4) (set 21)", + "m4overmn__u", "Over The Moon (Barcrest) (MPU4) (set 22)", + "m4overmn__v", "Over The Moon (Barcrest) (MPU4) (set 23)", + "m4overmn__w", "Over The Moon (Barcrest) (MPU4) (set 24)", + "m4overmn__x", "Over The Moon (Barcrest) (MPU4) (set 25)", + "m4overmn__y", "Over The Moon (Barcrest) (MPU4) (set 26)", + "m4overmn__z", "Over The Moon (Barcrest) (MPU4) (set 27)", + "m4paracl", "Paradise Club (Crystal) (MPU4) (set 1)", + "m4paracla", "Paradise Club (Crystal) (MPU4) (set 2)", + "m4pbnudg", "Pinball Nudger (Empire) (MPU4, set 1)", + "m4pbnudga", "Pinball Nudger (Empire) (MPU4, set 2)", + "m4pbnudgb", "Pinball Nudger (Empire) (MPU4, set 3)", + "m4pick", "Pick A Fruit (JPM) (MPU4)", + "m4pitfal", "Pitfall (Empire) (MPU4, set 1)", + "m4pitfala", "Pitfall (Empire) (MPU4, set 2)", + "m4pitfalb", "Pitfall (Empire) (MPU4, set 3)", + "m4pitfalc", "Pitfall (Empire) (MPU4, set 4)", + "m4placbt", "Place Your Bets (Barcrest) (MPU4) (set 1)", + "m4placbt__0", "Place Your Bets (Barcrest) (MPU4) (set 28)", + "m4placbt__1", "Place Your Bets (Barcrest) (MPU4) (set 29)", + "m4placbt__2", "Place Your Bets (Barcrest) (MPU4) (set 30)", + "m4placbt__3", "Place Your Bets (Barcrest) (MPU4) (set 31)", + "m4placbt__4", "Place Your Bets (Barcrest) (MPU4) (set 32)", + "m4placbt__5", "Place Your Bets (Barcrest) (MPU4) (set 33)", + "m4placbt__6", "Place Your Bets (Barcrest) (MPU4) (set 34)", + "m4placbt__7", "Place Your Bets (Barcrest) (MPU4) (set 35)", + "m4placbt__8", "Place Your Bets (Barcrest) (MPU4) (set 36)", + "m4placbt__9", "Place Your Bets (Barcrest) (MPU4) (set 37)", + "m4placbt__a", "Place Your Bets (Barcrest) (MPU4) (set 2)", + "m4placbt__aa", "Place Your Bets (Barcrest) (MPU4) (set 38)", + "m4placbt__ab", "Place Your Bets (Barcrest) (MPU4) (set 39)", + "m4placbt__ac", "Place Your Bets (Barcrest) (MPU4) (set 40)", + "m4placbt__ad", "Place Your Bets (Barcrest) (MPU4) (set 41)", + "m4placbt__ae", "Place Your Bets (Barcrest) (MPU4) (set 42)", + "m4placbt__af", "Place Your Bets (Barcrest) (MPU4) (set 43)", + "m4placbt__ag", "Place Your Bets (Barcrest) (MPU4) (set 44)", + "m4placbt__ah", "Place Your Bets (Barcrest) (MPU4) (set 45)", + "m4placbt__ai", "Place Your Bets (Barcrest) (MPU4) (set 46)", + "m4placbt__aj", "Place Your Bets (Barcrest) (MPU4) (set 47)", + "m4placbt__ak", "Place Your Bets (Barcrest) (MPU4) (set 48)", + "m4placbt__al", "Place Your Bets (Barcrest) (MPU4) (set 49)", + "m4placbt__am", "Place Your Bets (Barcrest) (MPU4) (set 50)", + "m4placbt__an", "Place Your Bets (Barcrest) (MPU4) (set 51)", + "m4placbt__ao", "Place Your Bets (Barcrest) (MPU4) (set 52)", + "m4placbt__b", "Place Your Bets (Barcrest) (MPU4) (set 3)", + "m4placbt__c", "Place Your Bets (Barcrest) (MPU4) (set 4)", + "m4placbt__d", "Place Your Bets (Barcrest) (MPU4) (set 5)", + "m4placbt__e", "Place Your Bets (Barcrest) (MPU4) (set 6)", + "m4placbt__f", "Place Your Bets (Barcrest) (MPU4) (set 7)", + "m4placbt__g", "Place Your Bets (Barcrest) (MPU4) (set 8)", + "m4placbt__h", "Place Your Bets (Barcrest) (MPU4) (set 9)", + "m4placbt__i", "Place Your Bets (Barcrest) (MPU4) (set 10)", + "m4placbt__j", "Place Your Bets (Barcrest) (MPU4) (set 11)", + "m4placbt__k", "Place Your Bets (Barcrest) (MPU4) (set 12)", + "m4placbt__l", "Place Your Bets (Barcrest) (MPU4) (set 13)", + "m4placbt__m", "Place Your Bets (Barcrest) (MPU4) (set 14)", + "m4placbt__n", "Place Your Bets (Barcrest) (MPU4) (set 15)", + "m4placbt__o", "Place Your Bets (Barcrest) (MPU4) (set 16)", + "m4placbt__p", "Place Your Bets (Barcrest) (MPU4) (set 17)", + "m4placbt__q", "Place Your Bets (Barcrest) (MPU4) (set 18)", + "m4placbt__r", "Place Your Bets (Barcrest) (MPU4) (set 19)", + "m4placbt__s", "Place Your Bets (Barcrest) (MPU4) (set 20)", + "m4placbt__t", "Place Your Bets (Barcrest) (MPU4) (set 21)", + "m4placbt__u", "Place Your Bets (Barcrest) (MPU4) (set 22)", + "m4placbt__v", "Place Your Bets (Barcrest) (MPU4) (set 23)", + "m4placbt__w", "Place Your Bets (Barcrest) (MPU4) (set 24)", + "m4placbt__x", "Place Your Bets (Barcrest) (MPU4) (set 25)", + "m4placbt__y", "Place Your Bets (Barcrest) (MPU4) (set 26)", + "m4placbt__z", "Place Your Bets (Barcrest) (MPU4) (set 27)", + "m4pont", "Pontoon Club (Barcrest) (MPU4) (PON 3.0)", + "m4ponta", "Pontoon Club (Barcrest) (MPU4) (PON 4.0)", + "m4potblk", "Pot Black (Barcrest) (MPU4) (set 1)", + "m4potblk__0", "Pot Black (Barcrest) (MPU4) (set 28)", + "m4potblk__1", "Pot Black (Barcrest) (MPU4) (set 29)", + "m4potblk__2", "Pot Black (Barcrest) (MPU4) (set 30)", + "m4potblk__3", "Pot Black (Barcrest) (MPU4) (set 31)", + "m4potblk__4", "Pot Black (Barcrest) (MPU4) (set 32)", + "m4potblk__5", "Pot Black (Barcrest) (MPU4) (set 33)", + "m4potblk__6", "Pot Black (Barcrest) (MPU4) (set 34)", + "m4potblk__7", "Pot Black (Barcrest) (MPU4) (set 35)", + "m4potblk__8", "Pot Black (Barcrest) (MPU4) (set 36)", + "m4potblk__9", "Pot Black (Barcrest) (MPU4) (set 37)", + "m4potblk__a", "Pot Black (Barcrest) (MPU4) (set 2)", + "m4potblk__aa", "Pot Black (Barcrest) (MPU4) (set 38)", + "m4potblk__ab", "Pot Black (Barcrest) (MPU4) (set 39)", + "m4potblk__ac", "Pot Black (Barcrest) (MPU4) (set 40)", + "m4potblk__ad", "Pot Black (Barcrest) (MPU4) (set 41)", + "m4potblk__ae", "Pot Black (Barcrest) (MPU4) (set 42)", + "m4potblk__af", "Pot Black (Barcrest) (MPU4) (set 43)", + "m4potblk__ag", "Pot Black (Barcrest) (MPU4) (set 44)", + "m4potblk__ah", "Pot Black (Barcrest) (MPU4) (set 45)", + "m4potblk__ai", "Pot Black (Barcrest) (MPU4) (set 46)", + "m4potblk__aj", "Pot Black (Barcrest) (MPU4) (set 47)", + "m4potblk__ak", "Pot Black (Barcrest) (MPU4) (set 48)", + "m4potblk__al", "Pot Black (Barcrest) (MPU4) (set 49)", + "m4potblk__am", "Pot Black (Barcrest) (MPU4) (set 50)", + "m4potblk__an", "Pot Black (Barcrest) (MPU4) (set 51)", + "m4potblk__ao", "Pot Black (Barcrest) (MPU4) (set 52)", + "m4potblk__ap", "Pot Black (Barcrest) (MPU4) (set 53)", + "m4potblk__aq", "Pot Black (Barcrest) (MPU4) (set 54)", + "m4potblk__ar", "Pot Black (Barcrest) (MPU4) (set 55)", + "m4potblk__as", "Pot Black (Barcrest) (MPU4) (set 56)", + "m4potblk__at", "Pot Black (Barcrest) (MPU4) (set 57)", + "m4potblk__au", "Pot Black (Barcrest) (MPU4) (set 58)", + "m4potblk__av", "Pot Black (Barcrest) (MPU4) (set 59)", + "m4potblk__aw", "Pot Black (Barcrest) (MPU4) (set 60)", + "m4potblk__ax", "Pot Black (Barcrest) (MPU4) (set 61)", + "m4potblk__b", "Pot Black (Barcrest) (MPU4) (set 3)", + "m4potblk__c", "Pot Black (Barcrest) (MPU4) (set 4)", + "m4potblk__d", "Pot Black (Barcrest) (MPU4) (set 5)", + "m4potblk__e", "Pot Black (Barcrest) (MPU4) (set 6)", + "m4potblk__f", "Pot Black (Barcrest) (MPU4) (set 7)", + "m4potblk__g", "Pot Black (Barcrest) (MPU4) (set 8)", + "m4potblk__h", "Pot Black (Barcrest) (MPU4) (set 9)", + "m4potblk__i", "Pot Black (Barcrest) (MPU4) (set 10)", + "m4potblk__j", "Pot Black (Barcrest) (MPU4) (set 11)", + "m4potblk__k", "Pot Black (Barcrest) (MPU4) (set 12)", + "m4potblk__l", "Pot Black (Barcrest) (MPU4) (set 13)", + "m4potblk__m", "Pot Black (Barcrest) (MPU4) (set 14)", + "m4potblk__n", "Pot Black (Barcrest) (MPU4) (set 15)", + "m4potblk__o", "Pot Black (Barcrest) (MPU4) (set 16)", + "m4potblk__p", "Pot Black (Barcrest) (MPU4) (set 17)", + "m4potblk__q", "Pot Black (Barcrest) (MPU4) (set 18)", + "m4potblk__r", "Pot Black (Barcrest) (MPU4) (set 19)", + "m4potblk__s", "Pot Black (Barcrest) (MPU4) (set 20)", + "m4potblk__t", "Pot Black (Barcrest) (MPU4) (set 21)", + "m4potblk__u", "Pot Black (Barcrest) (MPU4) (set 22)", + "m4potblk__v", "Pot Black (Barcrest) (MPU4) (set 23)", + "m4potblk__w", "Pot Black (Barcrest) (MPU4) (set 24)", + "m4potblk__x", "Pot Black (Barcrest) (MPU4) (set 25)", + "m4potblk__y", "Pot Black (Barcrest) (MPU4) (set 26)", + "m4potblk__z", "Pot Black (Barcrest) (MPU4) (set 27)", + "m4potlck", "Pot Luck 100 Club (Barcrest) (MPU4) (P1L 2.2)", + "m4potlcka", "Pot Luck 100 Club (Barcrest) (MPU4) (PL 2.7)", + "m4prem", "Premier (Barcrest) (MPU4) (DPM)", + "m4przdty", "Prize Duty Free (Barcrest) (MPU4) (set 1)", + "m4przdty__a", "Prize Duty Free (Barcrest) (MPU4) (set 2)", + "m4przdty__b", "Prize Duty Free (Barcrest) (MPU4) (set 3)", + "m4przdty__c", "Prize Duty Free (Barcrest) (MPU4) (set 4)", + "m4przdty__d", "Prize Duty Free (Barcrest) (MPU4) (set 5)", + "m4przdty__e", "Prize Duty Free (Barcrest) (MPU4) (set 6)", + "m4przdty__f", "Prize Duty Free (Barcrest) (MPU4) (set 7)", + "m4przdty__g", "Prize Duty Free (Barcrest) (MPU4) (set 8)", + "m4przdty__h", "Prize Duty Free (Barcrest) (MPU4) (set 9)", + "m4przdty__i", "Prize Duty Free (Barcrest) (MPU4) (set 10)", + "m4przdty__j", "Prize Duty Free (Barcrest) (MPU4) (set 11)", + "m4przdty__k", "Prize Duty Free (Barcrest) (MPU4) (set 12)", + "m4przdty__l", "Prize Duty Free (Barcrest) (MPU4) (set 13)", + "m4przdty__m", "Prize Duty Free (Barcrest) (MPU4) (set 14)", + "m4przdty__n", "Prize Duty Free (Barcrest) (MPU4) (set 15)", + "m4przdty__o", "Prize Duty Free (Barcrest) (MPU4) (set 16)", + "m4przdty__p", "Prize Duty Free (Barcrest) (MPU4) (set 17)", + "m4przfrt", "Prize Fruit & Loot (Barcrest) (MPU4) (set 1)", + "m4przfrt__a", "Prize Fruit & Loot (Barcrest) (MPU4) (set 2)", + "m4przfrt__b", "Prize Fruit & Loot (Barcrest) (MPU4) (set 3)", + "m4przfrt__c", "Prize Fruit & Loot (Barcrest) (MPU4) (set 4)", + "m4przfrt__d", "Prize Fruit & Loot (Barcrest) (MPU4) (set 5)", + "m4przfrt__e", "Prize Fruit & Loot (Barcrest) (MPU4) (set 6)", + "m4przfrt__f", "Prize Fruit & Loot (Barcrest) (MPU4) (set 7)", + "m4przfrt__g", "Prize Fruit & Loot (Barcrest) (MPU4) (set 8)", + "m4przfrt__h", "Prize Fruit & Loot (Barcrest) (MPU4) (set 9)", + "m4przfrt__i", "Prize Fruit & Loot (Barcrest) (MPU4) (set 10)", + "m4przfrt__j", "Prize Fruit & Loot (Barcrest) (MPU4) (set 11)", + "m4przfrt__k", "Prize Fruit & Loot (Barcrest) (MPU4) (set 12)", + "m4przfrt__l", "Prize Fruit & Loot (Barcrest) (MPU4) (set 13)", + "m4przhr", "Prize High Roller (Barcrest) (MPU4) (set 1)", + "m4przhr__a", "Prize High Roller (Barcrest) (MPU4) (set 2)", + "m4przhr__b", "Prize High Roller (Barcrest) (MPU4) (set 3)", + "m4przhr__c", "Prize High Roller (Barcrest) (MPU4) (set 4)", + "m4przhr__d", "Prize High Roller (Barcrest) (MPU4) (set 5)", + "m4przhr__e", "Prize High Roller (Barcrest) (MPU4) (set 6)", + "m4przhr__f", "Prize High Roller (Barcrest) (MPU4) (set 7)", + "m4przhr__g", "Prize High Roller (Barcrest) (MPU4) (set 8)", + "m4przhr__h", "Prize High Roller (Barcrest) (MPU4) (set 9)", + "m4przhr__i", "Prize High Roller (Barcrest) (MPU4) (set 10)", + "m4przhr__j", "Prize High Roller (Barcrest) (MPU4) (set 11)", + "m4przhr__k", "Prize High Roller (Barcrest) (MPU4) (set 12)", + "m4przhr__l", "Prize High Roller (Barcrest) (MPU4) (set 13)", + "m4przhr__m", "Prize High Roller (Barcrest) (MPU4) (set 14)", + "m4przhr__n", "Prize High Roller (Barcrest) (MPU4) (set 15)", + "m4przhr__o", "Prize High Roller (Barcrest) (MPU4) (set 16)", + "m4przhr__p", "Prize High Roller (Barcrest) (MPU4) (set 17)", + "m4przlux", "Prize Luxor (Barcrest) (MPU4) (set 1)", + "m4przlux__a", "Prize Luxor (Barcrest) (MPU4) (set 2)", + "m4przlux__b", "Prize Luxor (Barcrest) (MPU4) (set 3)", + "m4przlux__c", "Prize Luxor (Barcrest) (MPU4) (set 4)", + "m4przlux__d", "Prize Luxor (Barcrest) (MPU4) (set 5)", + "m4przlux__e", "Prize Luxor (Barcrest) (MPU4) (set 6)", + "m4przlux__f", "Prize Luxor (Barcrest) (MPU4) (set 7)", + "m4przmc", "Prize Monte Carlo (Barcrest) (MPU4) (set 1)", + "m4przmc__a", "Prize Monte Carlo (Barcrest) (MPU4) (set 2)", + "m4przmc__b", "Prize Monte Carlo (Barcrest) (MPU4) (set 3)", + "m4przmc__c", "Prize Monte Carlo (Barcrest) (MPU4) (set 4)", + "m4przmc__d", "Prize Monte Carlo (Barcrest) (MPU4) (set 5)", + "m4przmc__e", "Prize Monte Carlo (Barcrest) (MPU4) (set 6)", + "m4przmc__f", "Prize Monte Carlo (Barcrest) (MPU4) (set 7)", + "m4przmns", "Prize Money Showcase (Barcrest) (MPU4) (set 1)", + "m4przmns__a", "Prize Money Showcase (Barcrest) (MPU4) (set 2)", + "m4przmns__b", "Prize Money Showcase (Barcrest) (MPU4) (set 3)", + "m4przmns__c", "Prize Money Showcase (Barcrest) (MPU4) (set 4)", + "m4przmns__d", "Prize Money Showcase (Barcrest) (MPU4) (set 5)", + "m4przmns__e", "Prize Money Showcase (Barcrest) (MPU4) (set 6)", + "m4przmns__f", "Prize Money Showcase (Barcrest) (MPU4) (set 7)", + "m4przmns__g", "Prize Money Showcase (Barcrest) (MPU4) (set 8)", + "m4przmns__h", "Prize Money Showcase (Barcrest) (MPU4) (set 9)", + "m4przmns__i", "Prize Money Showcase (Barcrest) (MPU4) (set 10)", + "m4przmns__j", "Prize Money Showcase (Barcrest) (MPU4) (set 11)", + "m4przmns__k", "Prize Money Showcase (Barcrest) (MPU4) (set 12)", + "m4przmns__l", "Prize Money Showcase (Barcrest) (MPU4) (set 13)", + "m4przmns__m", "Prize Money Showcase (Barcrest) (MPU4) (set 14)", + "m4przmns__n", "Prize Money Showcase (Barcrest) (MPU4) (set 15)", + "m4przmon", "Prize Money (Barcrest) (MPU4) (set 1)", + "m4przmon__0", "Prize Money (Barcrest) (MPU4) (set 28)", + "m4przmon__1", "Prize Money (Barcrest) (MPU4) (set 29)", + "m4przmon__a", "Prize Money (Barcrest) (MPU4) (set 2)", + "m4przmon__b", "Prize Money (Barcrest) (MPU4) (set 3)", + "m4przmon__c", "Prize Money (Barcrest) (MPU4) (set 4)", + "m4przmon__d", "Prize Money (Barcrest) (MPU4) (set 5)", + "m4przmon__e", "Prize Money (Barcrest) (MPU4) (set 6)", + "m4przmon__f", "Prize Money (Barcrest) (MPU4) (set 7)", + "m4przmon__g", "Prize Money (Barcrest) (MPU4) (set 8)", + "m4przmon__h", "Prize Money (Barcrest) (MPU4) (set 9)", + "m4przmon__i", "Prize Money (Barcrest) (MPU4) (set 10)", + "m4przmon__j", "Prize Money (Barcrest) (MPU4) (set 11)", + "m4przmon__k", "Prize Money (Barcrest) (MPU4) (set 12)", + "m4przmon__l", "Prize Money (Barcrest) (MPU4) (set 13)", + "m4przmon__m", "Prize Money (Barcrest) (MPU4) (set 14)", + "m4przmon__n", "Prize Money (Barcrest) (MPU4) (set 15)", + "m4przmon__o", "Prize Money (Barcrest) (MPU4) (set 16)", + "m4przmon__p", "Prize Money (Barcrest) (MPU4) (set 17)", + "m4przmon__q", "Prize Money (Barcrest) (MPU4) (set 18)", + "m4przmon__r", "Prize Money (Barcrest) (MPU4) (set 19)", + "m4przmon__s", "Prize Money (Barcrest) (MPU4) (set 20)", + "m4przmon__t", "Prize Money (Barcrest) (MPU4) (set 21)", + "m4przmon__u", "Prize Money (Barcrest) (MPU4) (set 22)", + "m4przmon__v", "Prize Money (Barcrest) (MPU4) (set 23)", + "m4przmon__w", "Prize Money (Barcrest) (MPU4) (set 24)", + "m4przmon__x", "Prize Money (Barcrest) (MPU4) (set 25)", + "m4przmon__y", "Prize Money (Barcrest) (MPU4) (set 26)", + "m4przmon__z", "Prize Money (Barcrest) (MPU4) (set 27)", + "m4przrf", "Prize Rich And Famous (Barcrest) (MPU4) (set 1)", + "m4przrf__a", "Prize Rich And Famous (Barcrest) (MPU4) (set 2)", + "m4przrf__b", "Prize Rich And Famous (Barcrest) (MPU4) (set 3)", + "m4przrf__c", "Prize Rich And Famous (Barcrest) (MPU4) (set 4)", + "m4przrf__d", "Prize Rich And Famous (Barcrest) (MPU4) (set 5)", + "m4przrf__e", "Prize Rich And Famous (Barcrest) (MPU4) (set 6)", + "m4przrf__f", "Prize Rich And Famous (Barcrest) (MPU4) (set 7)", + "m4przrf__g", "Prize Rich And Famous (Barcrest) (MPU4) (set 8)", + "m4przrf__h", "Prize Rich And Famous (Barcrest) (MPU4) (set 9)", + "m4przrf__i", "Prize Rich And Famous (Barcrest) (MPU4) (set 10)", + "m4przrf__j", "Prize Rich And Famous (Barcrest) (MPU4) (set 11)", + "m4przrfm", "Prize Run For Your Money (Barcrest) (MPU4) (set 1)", + "m4przrfm__a", "Prize Run For Your Money (Barcrest) (MPU4) (set 2)", + "m4przrfm__b", "Prize Run For Your Money (Barcrest) (MPU4) (set 3)", + "m4przrfm__c", "Prize Run For Your Money (Barcrest) (MPU4) (set 4)", + "m4przrfm__d", "Prize Run For Your Money (Barcrest) (MPU4) (set 5)", + "m4przrfm__e", "Prize Run For Your Money (Barcrest) (MPU4) (set 6)", + "m4przrfm__f", "Prize Run For Your Money (Barcrest) (MPU4) (set 7)", + "m4przrfm__g", "Prize Run For Your Money (Barcrest) (MPU4) (set 8)", + "m4przrfm__h", "Prize Run For Your Money (Barcrest) (MPU4) (set 9)", + "m4przrfm__i", "Prize Run For Your Money (Barcrest) (MPU4) (set 10)", + "m4przrfm__j", "Prize Run For Your Money (Barcrest) (MPU4) (set 11)", + "m4przrfm__k", "Prize Run For Your Money (Barcrest) (MPU4) (set 12)", + "m4przrfm__l", "Prize Run For Your Money (Barcrest) (MPU4) (set 13)", + "m4przrfm__m", "Prize Run For Your Money (Barcrest) (MPU4) (set 14)", + "m4przrfm__n", "Prize Run For Your Money (Barcrest) (MPU4) (set 15)", + "m4przrfm__o", "Prize Run For Your Money (Barcrest) (MPU4) (set 16)", + "m4przsss", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 1)", + "m4przsss__0", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 28)", + "m4przsss__a", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 2)", + "m4przsss__b", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 3)", + "m4przsss__c", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 4)", + "m4przsss__d", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 5)", + "m4przsss__e", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 6)", + "m4przsss__f", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 7)", + "m4przsss__g", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 8)", + "m4przsss__h", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 9)", + "m4przsss__i", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 10)", + "m4przsss__j", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 11)", + "m4przsss__k", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 12)", + "m4przsss__l", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 13)", + "m4przsss__m", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 14)", + "m4przsss__n", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 15)", + "m4przsss__o", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 16)", + "m4przsss__p", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 17)", + "m4przsss__q", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 18)", + "m4przsss__r", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 19)", + "m4przsss__s", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 20)", + "m4przsss__t", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 21)", + "m4przsss__u", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 22)", + "m4przsss__v", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 23)", + "m4przsss__w", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 24)", + "m4przsss__x", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 25)", + "m4przsss__y", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 26)", + "m4przsss__z", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 27)", + "m4przve", "Prize Viva Esapana (Barcrest) (MPU4) (set 1)", + "m4przve__a", "Prize Viva Esapana (Barcrest) (MPU4) (set 2)", + "m4przve__b", "Prize Viva Esapana (Barcrest) (MPU4) (set 3)", + "m4przve__c", "Prize Viva Esapana (Barcrest) (MPU4) (set 4)", + "m4przve__d", "Prize Viva Esapana (Barcrest) (MPU4) (set 5)", + "m4przve__e", "Prize Viva Esapana (Barcrest) (MPU4) (set 6)", + "m4przve__f", "Prize Viva Esapana (Barcrest) (MPU4) (set 7)", + "m4przve__g", "Prize Viva Esapana (Barcrest) (MPU4) (set 8)", + "m4przve__h", "Prize Viva Esapana (Barcrest) (MPU4) (set 9)", + "m4przve__i", "Prize Viva Esapana (Barcrest) (MPU4) (set 10)", + "m4przve__j", "Prize Viva Esapana (Barcrest) (MPU4) (set 11)", + "m4przve__k", "Prize Viva Esapana (Barcrest) (MPU4) (set 12)", + "m4przve__l", "Prize Viva Esapana (Barcrest) (MPU4) (set 13)", + "m4przve__m", "Prize Viva Esapana (Barcrest) (MPU4) (set 14)", + "m4przve__n", "Prize Viva Esapana (Barcrest) (MPU4) (set 15)", + "m4przve__o", "Prize Viva Esapana (Barcrest) (MPU4) (set 16)", + "m4przve__p", "Prize Viva Esapana (Barcrest) (MPU4) (set 17)", + "m4przwo", "Prize What's On (Barcrest) (MPU4) (set 1)", + "m4przwo__a", "Prize What's On (Barcrest) (MPU4) (set 2)", + "m4przwo__b", "Prize What's On (Barcrest) (MPU4) (set 3)", + "m4przwo__c", "Prize What's On (Barcrest) (MPU4) (set 4)", + "m4przwo__d", "Prize What's On (Barcrest) (MPU4) (set 5)", + "m4przwo__e", "Prize What's On (Barcrest) (MPU4) (set 6)", + "m4przwo__f", "Prize What's On (Barcrest) (MPU4) (set 7)", + "m4przwta", "Prize Winner Takes All (Barcrest) (MPU4) (set 1)", + "m4przwta__a", "Prize Winner Takes All (Barcrest) (MPU4) (set 2)", + "m4przwta__b", "Prize Winner Takes All (Barcrest) (MPU4) (set 3)", + "m4przwta__c", "Prize Winner Takes All (Barcrest) (MPU4) (set 4)", + "m4przwta__d", "Prize Winner Takes All (Barcrest) (MPU4) (set 5)", + "m4przwta__e", "Prize Winner Takes All (Barcrest) (MPU4) (set 6)", + "m4przwta__f", "Prize Winner Takes All (Barcrest) (MPU4) (set 7)", + "m4przwta__g", "Prize Winner Takes All (Barcrest) (MPU4) (set 8)", + "m4przwta__h", "Prize Winner Takes All (Barcrest) (MPU4) (set 9)", + "m4przwta__i", "Prize Winner Takes All (Barcrest) (MPU4) (set 10)", + "m4przwta__j", "Prize Winner Takes All (Barcrest) (MPU4) (set 11)", + "m4przwta__k", "Prize Winner Takes All (Barcrest) (MPU4) (set 12)", + "m4przwta__l", "Prize Winner Takes All (Barcrest) (MPU4) (set 13)", + "m4przwta__m", "Prize Winner Takes All (Barcrest) (MPU4) (set 14)", + "m4przwta__n", "Prize Winner Takes All (Barcrest) (MPU4) (set 15)", + "m4przwta__o", "Prize Winner Takes All (Barcrest) (MPU4) (set 16)", + "m4przwta__p", "Prize Winner Takes All (Barcrest) (MPU4) (set 17)", + "m4ptblkc", "Pot Black Casino (Bwb - Barcrest) (MPU4)", + "m4pulwnc", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 1)", + "m4pulwnc__0", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 28)", + "m4pulwnc__1", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 29)", + "m4pulwnc__2", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 30)", + "m4pulwnc__3", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 31)", + "m4pulwnc__4", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 32)", + "m4pulwnc__a", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 2)", + "m4pulwnc__b", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 3)", + "m4pulwnc__c", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 4)", + "m4pulwnc__d", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 5)", + "m4pulwnc__e", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 6)", + "m4pulwnc__f", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 7)", + "m4pulwnc__g", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 8)", + "m4pulwnc__h", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 9)", + "m4pulwnc__i", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 10)", + "m4pulwnc__j", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 11)", + "m4pulwnc__k", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 12)", + "m4pulwnc__l", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 13)", + "m4pulwnc__m", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 14)", + "m4pulwnc__n", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 15)", + "m4pulwnc__o", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 16)", + "m4pulwnc__p", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 17)", + "m4pulwnc__q", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 18)", + "m4pulwnc__r", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 19)", + "m4pulwnc__s", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 20)", + "m4pulwnc__t", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 21)", + "m4pulwnc__u", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 22)", + "m4pulwnc__v", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 23)", + "m4pulwnc__w", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 24)", + "m4pulwnc__x", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 25)", + "m4pulwnc__y", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 26)", + "m4pulwnc__z", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 27)", + "m4purmad", "Pure Madness (Union)", + "m4pzbing", "Prize Bingo (Bwb) (MPU4) (set 1)", + "m4pzbing__a", "Prize Bingo (Bwb) (MPU4) (set 2)", + "m4pzbing__b", "Prize Bingo (Bwb) (MPU4) (set 3)", + "m4pzbing__c", "Prize Bingo (Bwb) (MPU4) (set 4)", + "m4pzbing__d", "Prize Bingo (Bwb) (MPU4) (set 5)", + "m4pzbing__e", "Prize Bingo (Bwb) (MPU4) (set 6)", + "m4quidin", "Quids In (Bwb) (MPU4) (set 1)", + "m4quidin__a", "Quids In (Bwb) (MPU4) (set 2)", + "m4quidin__b", "Quids In (Bwb) (MPU4) (set 3)", + "m4quidis", "Quids In Showcase (Bwb) (MPU4) (set 1)", + "m4quidis__a", "Quids In Showcase (Bwb) (MPU4) (set 2)", + "m4quidis__b", "Quids In Showcase (Bwb) (MPU4) (set 3)", + "m4quidis__c", "Quids In Showcase (Bwb) (MPU4) (set 4)", + "m4quidis__d", "Quids In Showcase (Bwb) (MPU4) (set 5)", + "m4r2r", "Reel 2 Reel (Barcrest) (MPU4)", + "m4ra", "Red Alert (Barcrest) (MPU4) (set 1)", + "m4ra__a", "Red Alert (Barcrest) (MPU4) (set 2)", + "m4ra__b", "Red Alert (Barcrest) (MPU4) (set 3)", + "m4ra__c", "Red Alert (Barcrest) (MPU4) (set 4)", + "m4ra__d", "Red Alert (Barcrest) (MPU4) (set 5)", + "m4ra__e", "Red Alert (Barcrest) (MPU4) (set 6)", + "m4ra__f", "Red Alert (Barcrest) (MPU4) (set 7)", + "m4ra__g", "Red Alert (Barcrest) (MPU4) (set 8)", + "m4ra__h", "Red Alert (Barcrest) (MPU4) (set 9)", + "m4ra__i", "Red Alert (Barcrest) (MPU4) (set 10)", + "m4ra__j", "Red Alert (Barcrest) (MPU4) (set 11)", + "m4ra__k", "Red Alert (Barcrest) (MPU4) (set 12)", + "m4ra__l", "Red Alert (Barcrest) (MPU4) (set 13)", + "m4ra__m", "Red Alert (Barcrest) (MPU4) (set 14)", + "m4ra__n", "Red Alert (Barcrest) (MPU4) (set 15)", + "m4ra__o", "Red Alert (Barcrest) (MPU4) (set 16)", + "m4ra__p", "Red Alert (Barcrest) (MPU4) (set 17)", + "m4ra__q", "Red Alert (Barcrest) (MPU4) (set 18)", + "m4ra__r", "Red Alert (Barcrest) (MPU4) (set 19)", + "m4rackem", "Rack Em Up (Bwb) (MPU4) (set 1)", + "m4rackem__a", "Rack Em Up (Bwb) (MPU4) (set 2)", + "m4rackem__b", "Rack Em Up (Bwb) (MPU4) (set 3)", + "m4rackem__c", "Rack Em Up (Bwb) (MPU4) (set 4)", + "m4rackem__d", "Rack Em Up (Bwb) (MPU4) (set 5)", + "m4rags", "Rags To Riches Club (Crystal) (MPU4) (set 1)", + "m4ragsa", "Rags To Riches Club (Crystal) (MPU4) (set 2)", + "m4ragsb", "Rags To Riches Club (Crystal) (MPU4) (set 3)", + "m4ragsc", "Rags To Riches Club (Crystal) (MPU4) (set 4)", + "m4randr", "Random Roulette (Barcrest) (Dutch) (MPU4)", + "m4rbgold", "Rainbow Gold (Bwb) (MPU4) (set 1)", + "m4rbgold__a", "Rainbow Gold (Bwb) (MPU4) (set 2)", + "m4rbgold__b", "Rainbow Gold (Bwb) (MPU4) (set 3)", + "m4rbgold__c", "Rainbow Gold (Bwb) (MPU4) (set 4)", + "m4rbgold__d", "Rainbow Gold (Bwb) (MPU4) (set 5)", + "m4rbgold__e", "Rainbow Gold (Bwb) (MPU4) (set 6)", + "m4rbgold__f", "Rainbow Gold (Bwb) (MPU4) (set 7)", + "m4rbgold__g", "Rainbow Gold (Bwb) (MPU4) (set 8)", + "m4rbgold__h", "Rainbow Gold (Bwb) (MPU4) (set 9)", + "m4rbgold__i", "Rainbow Gold (Bwb) (MPU4) (set 10)", + "m4rbgold__j", "Rainbow Gold (Bwb) (MPU4) (set 11)", + "m4rbgold__k", "Rainbow Gold (Bwb) (MPU4) (set 12)", + "m4rbgold__l", "Rainbow Gold (Bwb) (MPU4) (set 13)", + "m4rbgold__m", "Rainbow Gold (Bwb) (MPU4) (set 14)", + "m4rbgold__n", "Rainbow Gold (Bwb) (MPU4) (set 15)", + "m4rbgold__o", "Rainbow Gold (Bwb) (MPU4) (set 16)", + "m4rbgold__p", "Rainbow Gold (Bwb) (MPU4) (set 17)", + "m4rbgold__q", "Rainbow Gold (Bwb) (MPU4) (set 18)", + "m4rckrol", "Rock 'n' Roll (Union - Empire) (MPU4, set 1)", + "m4rckrola", "Rock 'n' Roll (Union - Empire) (MPU4, set 2)", + "m4rckrolb", "Rock 'n' Roll (Union - Empire) (MPU4, set 3)", + "m4rdeal", "Reel Deal (Qps) (MPU4) (set 1)", + "m4rdeal__a", "Reel Deal (Qps) (MPU4) (set 2)", + "m4rdeal__b", "Reel Deal (Qps) (MPU4) (set 3)", + "m4rdeal__c", "Reel Deal (Qps) (MPU4) (set 4)", + "m4rdeal__d", "Reel Deal (Qps) (MPU4) (set 5)", + "m4rdeal__e", "Reel Deal (Qps) (MPU4) (set 6)", + "m4rdeal__f", "Reel Deal (Qps) (MPU4) (set 7)", + "m4rdeal__g", "Reel Deal (Qps) (MPU4) (set 8)", + "m4rdeal__h", "Reel Deal (Qps) (MPU4) (set 9)", + "m4rdeal__i", "Reel Deal (Qps) (MPU4) (set 10)", + "m4rdht", "Red Heat (Golden Nugget?) (Barcrest) (MPU4) (DRH 1.2)", + "m4ready", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 1)", + "m4ready__0", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 28)", + "m4ready__1", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 29)", + "m4ready__2", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 30)", + "m4ready__3", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 31)", + "m4ready__4", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 32)", + "m4ready__5", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 33)", + "m4ready__6", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 34)", + "m4ready__7", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 35)", + "m4ready__8", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 36)", + "m4ready__9", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 37)", + "m4ready__a", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 2)", + "m4ready__a0", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 64)", + "m4ready__a1", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 65)", + "m4ready__a2", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 66)", + "m4ready__a3", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 67)", + "m4ready__a4", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 68)", + "m4ready__a5", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 69)", + "m4ready__aa", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 38)", + "m4ready__ab", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 39)", + "m4ready__ac", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 40)", + "m4ready__ad", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 41)", + "m4ready__ae", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 42)", + "m4ready__af", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 43)", + "m4ready__ag", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 44)", + "m4ready__ah", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 45)", + "m4ready__ai", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 46)", + "m4ready__aj", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 47)", + "m4ready__ak", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 48)", + "m4ready__al", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 49)", + "m4ready__am", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 50)", + "m4ready__an", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 51)", + "m4ready__ao", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 52)", + "m4ready__ap", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 53)", + "m4ready__aq", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 54)", + "m4ready__ar", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 55)", + "m4ready__as", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 56)", + "m4ready__at", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 57)", + "m4ready__au", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 58)", + "m4ready__av", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 59)", + "m4ready__aw", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 60)", + "m4ready__ax", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 61)", + "m4ready__ay", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 62)", + "m4ready__az", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 63)", + "m4ready__b", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 3)", + "m4ready__c", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 4)", + "m4ready__d", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 5)", + "m4ready__e", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 6)", + "m4ready__f", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 7)", + "m4ready__g", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 8)", + "m4ready__h", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 9)", + "m4ready__i", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 10)", + "m4ready__j", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 11)", + "m4ready__k", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 12)", + "m4ready__l", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 13)", + "m4ready__m", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 14)", + "m4ready__n", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 15)", + "m4ready__o", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 16)", + "m4ready__p", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 17)", + "m4ready__q", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 18)", + "m4ready__r", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 19)", + "m4ready__s", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 20)", + "m4ready__t", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 21)", + "m4ready__u", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 22)", + "m4ready__v", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 23)", + "m4ready__w", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 24)", + "m4ready__x", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 25)", + "m4ready__y", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 26)", + "m4ready__z", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 27)", + "m4reelpk", "Reel Poker (Barcrest) (MPU4)", + "m4reeltm", "Reel Timer (Barcrest) (MPU4) (DWT)", + "m4remag", "unknown MPU4 'ZTP 0.7' (MPU4?)", + "m4revolv", "Revolva (Union) (MPU4)", + "m4rfym", "Run For Your Money (Barcrest) (MPU4) (set 1)", + "m4rfym__0", "Run For Your Money (Barcrest) (MPU4) (set 28)", + "m4rfym__1", "Run For Your Money (Barcrest) (MPU4) (set 29)", + "m4rfym__2", "Run For Your Money (Barcrest) (MPU4) (set 30)", + "m4rfym__3", "Run For Your Money (Barcrest) (MPU4) (set 31)", + "m4rfym__4", "Run For Your Money (Barcrest) (MPU4) (set 32)", + "m4rfym__5", "Run For Your Money (Barcrest) (MPU4) (set 33)", + "m4rfym__6", "Run For Your Money (Barcrest) (MPU4) (set 34)", + "m4rfym__7", "Run For Your Money (Barcrest) (MPU4) (set 35)", + "m4rfym__8", "Run For Your Money (Barcrest) (MPU4) (set 36)", + "m4rfym__9", "Run For Your Money (Barcrest) (MPU4) (set 37)", + "m4rfym__a", "Run For Your Money (Barcrest) (MPU4) (set 2)", + "m4rfym__a0", "Run For Your Money (Barcrest) (MPU4) (set 64)", + "m4rfym__a1", "Run For Your Money (Barcrest) (MPU4) (set 65)", + "m4rfym__a2", "Run For Your Money (Barcrest) (MPU4) (set 66)", + "m4rfym__a3", "Run For Your Money (Barcrest) (MPU4) (set 67)", + "m4rfym__a4", "Run For Your Money (Barcrest) (MPU4) (set 68)", + "m4rfym__a5", "Run For Your Money (Barcrest) (MPU4) (set 69)", + "m4rfym__aa", "Run For Your Money (Barcrest) (MPU4) (set 38)", + "m4rfym__ab", "Run For Your Money (Barcrest) (MPU4) (set 39)", + "m4rfym__ac", "Run For Your Money (Barcrest) (MPU4) (set 40)", + "m4rfym__ad", "Run For Your Money (Barcrest) (MPU4) (set 41)", + "m4rfym__ae", "Run For Your Money (Barcrest) (MPU4) (set 42)", + "m4rfym__af", "Run For Your Money (Barcrest) (MPU4) (set 43)", + "m4rfym__ag", "Run For Your Money (Barcrest) (MPU4) (set 44)", + "m4rfym__ah", "Run For Your Money (Barcrest) (MPU4) (set 45)", + "m4rfym__ai", "Run For Your Money (Barcrest) (MPU4) (set 46)", + "m4rfym__aj", "Run For Your Money (Barcrest) (MPU4) (set 47)", + "m4rfym__ak", "Run For Your Money (Barcrest) (MPU4) (set 48)", + "m4rfym__al", "Run For Your Money (Barcrest) (MPU4) (set 49)", + "m4rfym__am", "Run For Your Money (Barcrest) (MPU4) (set 50)", + "m4rfym__an", "Run For Your Money (Barcrest) (MPU4) (set 51)", + "m4rfym__ao", "Run For Your Money (Barcrest) (MPU4) (set 52)", + "m4rfym__ap", "Run For Your Money (Barcrest) (MPU4) (set 53)", + "m4rfym__aq", "Run For Your Money (Barcrest) (MPU4) (set 54)", + "m4rfym__ar", "Run For Your Money (Barcrest) (MPU4) (set 55)", + "m4rfym__as", "Run For Your Money (Barcrest) (MPU4) (set 56)", + "m4rfym__at", "Run For Your Money (Barcrest) (MPU4) (set 57)", + "m4rfym__au", "Run For Your Money (Barcrest) (MPU4) (set 58)", + "m4rfym__av", "Run For Your Money (Barcrest) (MPU4) (set 59)", + "m4rfym__aw", "Run For Your Money (Barcrest) (MPU4) (set 60)", + "m4rfym__ax", "Run For Your Money (Barcrest) (MPU4) (set 61)", + "m4rfym__ay", "Run For Your Money (Barcrest) (MPU4) (set 62)", + "m4rfym__az", "Run For Your Money (Barcrest) (MPU4) (set 63)", + "m4rfym__b", "Run For Your Money (Barcrest) (MPU4) (set 3)", + "m4rfym__c", "Run For Your Money (Barcrest) (MPU4) (set 4)", + "m4rfym__d", "Run For Your Money (Barcrest) (MPU4) (set 5)", + "m4rfym__e", "Run For Your Money (Barcrest) (MPU4) (set 6)", + "m4rfym__f", "Run For Your Money (Barcrest) (MPU4) (set 7)", + "m4rfym__g", "Run For Your Money (Barcrest) (MPU4) (set 8)", + "m4rfym__h", "Run For Your Money (Barcrest) (MPU4) (set 9)", + "m4rfym__i", "Run For Your Money (Barcrest) (MPU4) (set 10)", + "m4rfym__j", "Run For Your Money (Barcrest) (MPU4) (set 11)", + "m4rfym__k", "Run For Your Money (Barcrest) (MPU4) (set 12)", + "m4rfym__l", "Run For Your Money (Barcrest) (MPU4) (set 13)", + "m4rfym__m", "Run For Your Money (Barcrest) (MPU4) (set 14)", + "m4rfym__n", "Run For Your Money (Barcrest) (MPU4) (set 15)", + "m4rfym__o", "Run For Your Money (Barcrest) (MPU4) (set 16)", + "m4rfym__p", "Run For Your Money (Barcrest) (MPU4) (set 17)", + "m4rfym__q", "Run For Your Money (Barcrest) (MPU4) (set 18)", + "m4rfym__r", "Run For Your Money (Barcrest) (MPU4) (set 19)", + "m4rfym__s", "Run For Your Money (Barcrest) (MPU4) (set 20)", + "m4rfym__t", "Run For Your Money (Barcrest) (MPU4) (set 21)", + "m4rfym__u", "Run For Your Money (Barcrest) (MPU4) (set 22)", + "m4rfym__v", "Run For Your Money (Barcrest) (MPU4) (set 23)", + "m4rfym__w", "Run For Your Money (Barcrest) (MPU4) (set 24)", + "m4rfym__x", "Run For Your Money (Barcrest) (MPU4) (set 25)", + "m4rfym__y", "Run For Your Money (Barcrest) (MPU4) (set 26)", + "m4rfym__z", "Run For Your Money (Barcrest) (MPU4) (set 27)", + "m4rhfev", "Red Hot Fever (Bwb) (MPU4) (set 1)", + "m4rhfev__a", "Red Hot Fever (Bwb) (MPU4) (set 2)", + "m4rhfev__b", "Red Hot Fever (Bwb) (MPU4) (set 3)", + "m4rhfev__c", "Red Hot Fever (Bwb) (MPU4) (set 4)", + "m4rhfev__d", "Red Hot Fever (Bwb) (MPU4) (set 5)", + "m4rhfevc", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 1)", + "m4rhfevc__a", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 2)", + "m4rhfevc__b", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 3)", + "m4rhfevc__c", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 4)", + "m4rhfevc__d", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 5)", + "m4rhfevc__e", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 6)", + "m4rhfevc__f", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 7)", + "m4rhfevc__g", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 8)", + "m4rhfevc__h", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 9)", + "m4rhfevc__i", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 10)", + "m4rhfevc__j", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 11)", + "m4rhfevc__k", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 12)", + "m4rhfevc__l", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 13)", + "m4rhfevc__m", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 14)", + "m4rhfevc__n", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 15)", + "m4rhfevc__o", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 16)", + "m4rhfevc__p", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 17)", + "m4rhfevc__q", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 18)", + "m4rhfevc__r", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 19)", + "m4rhfevc__s", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 20)", + "m4rhfevc__t", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 21)", + "m4rhfevc__u", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 22)", + "m4rhfevc__v", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 23)", + "m4rhfevc__w", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 24)", + "m4rhfevc__x", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 25)", + "m4rhfevc__y", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 26)", + "m4rhnote", "Red Hot Notes (Qps) (MPU4) (set 1)", + "m4rhnote__a", "Red Hot Notes (Qps) (MPU4) (set 2)", + "m4rhnote__b", "Red Hot Notes (Qps) (MPU4) (set 3)", + "m4rhnote__c", "Red Hot Notes (Qps) (MPU4) (set 4)", + "m4rhnote__d", "Red Hot Notes (Qps) (MPU4) (set 5)", + "m4rhnote__e", "Red Hot Notes (Qps) (MPU4) (set 6)", + "m4rhnote__f", "Red Hot Notes (Qps) (MPU4) (set 7)", + "m4rhnote__g", "Red Hot Notes (Qps) (MPU4) (set 8)", + "m4rhnote__h", "Red Hot Notes (Qps) (MPU4) (set 9)", + "m4rhnote__i", "Red Hot Notes (Qps) (MPU4) (set 10)", + "m4rhnote__j", "Red Hot Notes (Qps) (MPU4) (set 11)", + "m4rhnote__k", "Red Hot Notes (Qps) (MPU4) (set 12)", + "m4rhnote__l", "Red Hot Notes (Qps) (MPU4) (set 13)", + "m4rhnote__m", "Red Hot Notes (Qps) (MPU4) (set 14)", + "m4rhnote__n", "Red Hot Notes (Qps) (MPU4) (set 15)", + "m4rhnote__o", "Red Hot Notes (Qps) (MPU4) (set 16)", + "m4rhnote__p", "Red Hot Notes (Qps) (MPU4) (set 17)", + "m4rhnote__q", "Red Hot Notes (Qps) (MPU4) (set 18)", + "m4rhnote__r", "Red Hot Notes (Qps) (MPU4) (set 19)", + "m4rhnote__s", "Red Hot Notes (Qps) (MPU4) (set 20)", + "m4rhnote__t", "Red Hot Notes (Qps) (MPU4) (set 21)", + "m4rhnote__u", "Red Hot Notes (Qps) (MPU4) (set 22)", + "m4rhnote__v", "Red Hot Notes (Qps) (MPU4) (set 23)", + "m4rhnote__w", "Red Hot Notes (Qps) (MPU4) (set 24)", + "m4rhnote__x", "Red Hot Notes (Qps) (MPU4) (set 25)", + "m4rhnote__y", "Red Hot Notes (Qps) (MPU4) (set 26)", + "m4rhog", "Road Hog (Barcrest) (MPU4) (RR6 1.2)", + "m4rhog2", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 1)", + "m4rhog2__a", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 2)", + "m4rhog2__b", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 3)", + "m4rhog2__c", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 4)", + "m4rhog2__d", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 5)", + "m4rhog2__e", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 6)", + "m4rhog2__f", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 7)", + "m4rhog2__g", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 8)", + "m4rhog2__h", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 9)", + "m4rhog2__i", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 10)", + "m4rhog2__j", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 11)", + "m4rhog2__k", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 12)", + "m4rhog2__l", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 13)", + "m4rhog2__m", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 14)", + "m4rhog_h1", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 1)", + "m4rhog_h10", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 3)", + "m4rhog_h11", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 4)", + "m4rhog_h12", "Road Hog (Barcrest) (MPU4) (RR6 1.2?, hack?)", + "m4rhog_h13", "Road Hog (Barcrest) (MPU4) (RR6 1.2, hack?)", + "m4rhog_h14", "Road Hog (Barcrest) (MPU4) (RR6 1.2C, hack?, set 1)", + "m4rhog_h15", "Road Hog (Barcrest) (MPU4) (RR6 1.2C, hack?, set 2)", + "m4rhog_h2", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 2)", + "m4rhog_h3", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 3)", + "m4rhog_h4", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 4)", + "m4rhog_h5", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 5)", + "m4rhog_h6", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 6)", + "m4rhog_h7", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 7)", + "m4rhog_h8", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 1)", + "m4rhog_h9", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 2)", + "m4rhog_roc", "Road Hog (Bwb / Barcrest) (MPU4) (ROC 2.0, bad)", + "m4rhogc", "Road Hog Club (Barcrest) (MPU4) (set 1)", + "m4rhogc__a", "Road Hog Club (Barcrest) (MPU4) (set 2)", + "m4rhogc__b", "Road Hog Club (Barcrest) (MPU4) (set 3)", + "m4rhogr1", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0)", + "m4rhogr1c", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0C)", + "m4rhogr1d", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0D)", + "m4rhogr1k", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 1)", + "m4rhogr1k_a", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 2, wrong version number?)", + "m4rhogr1y", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0Y)", + "m4rhogr1yd", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0YD)", + "m4rhogr2", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0)", + "m4rhogr2c", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0C)", + "m4rhogr2d", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0D)", + "m4rhogr2k", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0K)", + "m4rhogr2y", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0Y)", + "m4rhogr2yd", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0YD)", + "m4rhogr3", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 3.0)", + "m4rhogr6ad", "Road Hog (Barcrest) (MPU4) (RR6 1.2AD)", + "m4rhogr6b", "Road Hog (Barcrest) (MPU4) (RR6 1.2B)", + "m4rhogr6c", "Road Hog (Barcrest) (MPU4) (RR6 1.2C)", + "m4rhogr6d", "Road Hog (Barcrest) (MPU4) (RR6 1.2D)", + "m4rhogr6k", "Road Hog (Barcrest) (MPU4) (RR6 1.2K)", + "m4rhogr6y", "Road Hog (Barcrest) (MPU4) (RR6 1.2Y)", + "m4rhogr6y_a", "Road Hog (Barcrest) (MPU4) (RR6 1.1Y)", + "m4rhogr6yd", "Road Hog (Barcrest) (MPU4) (RR6 1.2YD)", + "m4rhr", "Red Hot Roll (Barcrest) (MPU4) (set 1)", + "m4rhr__0", "Red Hot Roll (Barcrest) (MPU4) (set 28)", + "m4rhr__1", "Red Hot Roll (Barcrest) (MPU4) (set 29)", + "m4rhr__2", "Red Hot Roll (Barcrest) (MPU4) (set 30)", + "m4rhr__3", "Red Hot Roll (Barcrest) (MPU4) (set 31)", + "m4rhr__4", "Red Hot Roll (Barcrest) (MPU4) (set 32)", + "m4rhr__5", "Red Hot Roll (Barcrest) (MPU4) (set 33)", + "m4rhr__6", "Red Hot Roll (Barcrest) (MPU4) (set 34)", + "m4rhr__7", "Red Hot Roll (Barcrest) (MPU4) (set 35)", + "m4rhr__8", "Red Hot Roll (Barcrest) (MPU4) (set 36)", + "m4rhr__9", "Red Hot Roll (Barcrest) (MPU4) (set 37)", + "m4rhr__a", "Red Hot Roll (Barcrest) (MPU4) (set 2)", + "m4rhr__a0", "Red Hot Roll (Barcrest) (MPU4) (set 64)", + "m4rhr__a1", "Red Hot Roll (Barcrest) (MPU4) (set 65)", + "m4rhr__a2", "Red Hot Roll (Barcrest) (MPU4) (set 66)", + "m4rhr__a3", "Red Hot Roll (Barcrest) (MPU4) (set 67)", + "m4rhr__a4", "Red Hot Roll (Barcrest) (MPU4) (RH8 0.1C)", + "m4rhr__aa", "Red Hot Roll (Barcrest) (MPU4) (set 38)", + "m4rhr__ab", "Red Hot Roll (Barcrest) (MPU4) (set 39)", + "m4rhr__ac", "Red Hot Roll (Barcrest) (MPU4) (set 40)", + "m4rhr__ad", "Red Hot Roll (Barcrest) (MPU4) (set 41)", + "m4rhr__ae", "Red Hot Roll (Barcrest) (MPU4) (set 42)", + "m4rhr__af", "Red Hot Roll (Barcrest) (MPU4) (set 43)", + "m4rhr__ag", "Red Hot Roll (Barcrest) (MPU4) (set 44)", + "m4rhr__ah", "Red Hot Roll (Barcrest) (MPU4) (set 45)", + "m4rhr__ai", "Red Hot Roll (Barcrest) (MPU4) (set 46)", + "m4rhr__aj", "Red Hot Roll (Barcrest) (MPU4) (set 47)", + "m4rhr__ak", "Red Hot Roll (Barcrest) (MPU4) (set 48)", + "m4rhr__al", "Red Hot Roll (Barcrest) (MPU4) (set 49)", + "m4rhr__am", "Red Hot Roll (Barcrest) (MPU4) (set 50)", + "m4rhr__an", "Red Hot Roll (Barcrest) (MPU4) (set 51)", + "m4rhr__ao", "Red Hot Roll (Barcrest) (MPU4) (set 52)", + "m4rhr__ap", "Red Hot Roll (Barcrest) (MPU4) (set 53)", + "m4rhr__aq", "Red Hot Roll (Barcrest) (MPU4) (set 54)", + "m4rhr__ar", "Red Hot Roll (Barcrest) (MPU4) (set 55)", + "m4rhr__as", "Red Hot Roll (Barcrest) (MPU4) (set 56)", + "m4rhr__at", "Red Hot Roll (Barcrest) (MPU4) (set 57)", + "m4rhr__au", "Red Hot Roll (Barcrest) (MPU4) (set 58)", + "m4rhr__av", "Red Hot Roll (Barcrest) (MPU4) (set 59)", + "m4rhr__aw", "Red Hot Roll (Barcrest) (MPU4) (set 60)", + "m4rhr__ax", "Red Hot Roll (Barcrest) (MPU4) (set 61)", + "m4rhr__ay", "Red Hot Roll (Barcrest) (MPU4) (set 62)", + "m4rhr__az", "Red Hot Roll (Barcrest) (MPU4) (set 63)", + "m4rhr__b", "Red Hot Roll (Barcrest) (MPU4) (set 3)", + "m4rhr__c", "Red Hot Roll (Barcrest) (MPU4) (set 4)", + "m4rhr__d", "Red Hot Roll (Barcrest) (MPU4) (set 5)", + "m4rhr__e", "Red Hot Roll (Barcrest) (MPU4) (set 6)", + "m4rhr__f", "Red Hot Roll (Barcrest) (MPU4) (set 7)", + "m4rhr__g", "Red Hot Roll (Barcrest) (MPU4) (set 8)", + "m4rhr__h", "Red Hot Roll (Barcrest) (MPU4) (set 9)", + "m4rhr__i", "Red Hot Roll (Barcrest) (MPU4) (set 10)", + "m4rhr__j", "Red Hot Roll (Barcrest) (MPU4) (set 11)", + "m4rhr__k", "Red Hot Roll (Barcrest) (MPU4) (set 12)", + "m4rhr__l", "Red Hot Roll (Barcrest) (MPU4) (set 13)", + "m4rhr__m", "Red Hot Roll (Barcrest) (MPU4) (set 14)", + "m4rhr__n", "Red Hot Roll (Barcrest) (MPU4) (set 15)", + "m4rhr__o", "Red Hot Roll (Barcrest) (MPU4) (set 16)", + "m4rhr__p", "Red Hot Roll (Barcrest) (MPU4) (set 17)", + "m4rhr__q", "Red Hot Roll (Barcrest) (MPU4) (set 18)", + "m4rhr__r", "Red Hot Roll (Barcrest) (MPU4) (set 19)", + "m4rhr__s", "Red Hot Roll (Barcrest) (MPU4) (set 20)", + "m4rhr__t", "Red Hot Roll (Barcrest) (MPU4) (set 21)", + "m4rhr__u", "Red Hot Roll (Barcrest) (MPU4) (set 22)", + "m4rhr__v", "Red Hot Roll (Barcrest) (MPU4) (set 23)", + "m4rhr__w", "Red Hot Roll (Barcrest) (MPU4) (set 24)", + "m4rhr__x", "Red Hot Roll (Barcrest) (MPU4) (set 25)", + "m4rhr__y", "Red Hot Roll (Barcrest) (MPU4) (set 26)", + "m4rhr__z", "Red Hot Roll (Barcrest) (MPU4) (set 27)", + "m4rhrc", "Red Hot Roll Classic (Barcrest) (MPU4) (set 1)", + "m4rhrc__0", "Red Hot Roll Classic (Barcrest) (MPU4) (set 28)", + "m4rhrc__1", "Red Hot Roll Classic (Barcrest) (MPU4) (set 29)", + "m4rhrc__2", "Red Hot Roll Classic (Barcrest) (MPU4) (set 30)", + "m4rhrc__3", "Red Hot Roll Classic (Barcrest) (MPU4) (set 31)", + "m4rhrc__4", "Red Hot Roll Classic (Barcrest) (MPU4) (set 32)", + "m4rhrc__5", "Red Hot Roll Classic (Barcrest) (MPU4) (set 33)", + "m4rhrc__6", "Red Hot Roll Classic (Barcrest) (MPU4) (set 34)", + "m4rhrc__7", "Red Hot Roll Classic (Barcrest) (MPU4) (set 35)", + "m4rhrc__8", "Red Hot Roll Classic (Barcrest) (MPU4) (set 36)", + "m4rhrc__a", "Red Hot Roll Classic (Barcrest) (MPU4) (set 2)", + "m4rhrc__aa", "Red Hot Roll Classic (Barcrest) (MPU4) (set 38)", + "m4rhrc__b", "Red Hot Roll Classic (Barcrest) (MPU4) (set 3)", + "m4rhrc__c", "Red Hot Roll Classic (Barcrest) (MPU4) (set 4)", + "m4rhrc__d", "Red Hot Roll Classic (Barcrest) (MPU4) (set 5)", + "m4rhrc__e", "Red Hot Roll Classic (Barcrest) (MPU4) (set 6)", + "m4rhrc__f", "Red Hot Roll Classic (Barcrest) (MPU4) (set 7)", + "m4rhrc__g", "Red Hot Roll Classic (Barcrest) (MPU4) (set 8)", + "m4rhrc__h", "Red Hot Roll Classic (Barcrest) (MPU4) (set 9)", + "m4rhrc__i", "Red Hot Roll Classic (Barcrest) (MPU4) (set 10)", + "m4rhrc__j", "Red Hot Roll Classic (Barcrest) (MPU4) (set 11)", + "m4rhrc__k", "Red Hot Roll Classic (Barcrest) (MPU4) (set 12)", + "m4rhrc__l", "Red Hot Roll Classic (Barcrest) (MPU4) (set 13)", + "m4rhrc__m", "Red Hot Roll Classic (Barcrest) (MPU4) (set 14)", + "m4rhrc__n", "Red Hot Roll Classic (Barcrest) (MPU4) (set 15)", + "m4rhrc__o", "Red Hot Roll Classic (Barcrest) (MPU4) (set 16)", + "m4rhrc__p", "Red Hot Roll Classic (Barcrest) (MPU4) (set 17)", + "m4rhrc__q", "Red Hot Roll Classic (Barcrest) (MPU4) (set 18)", + "m4rhrc__r", "Red Hot Roll Classic (Barcrest) (MPU4) (set 19)", + "m4rhrc__s", "Red Hot Roll Classic (Barcrest) (MPU4) (set 20)", + "m4rhrc__t", "Red Hot Roll Classic (Barcrest) (MPU4) (set 21)", + "m4rhrc__u", "Red Hot Roll Classic (Barcrest) (MPU4) (set 22)", + "m4rhrc__v", "Red Hot Roll Classic (Barcrest) (MPU4) (set 23)", + "m4rhrc__w", "Red Hot Roll Classic (Barcrest) (MPU4) (set 24)", + "m4rhrc__x", "Red Hot Roll Classic (Barcrest) (MPU4) (set 25)", + "m4rhrc__y", "Red Hot Roll Classic (Barcrest) (MPU4) (set 26)", + "m4rhrc__z", "Red Hot Roll Classic (Barcrest) (MPU4) (set 27)", + "m4rhrcl", "Red Hot Roll Club (Barcrest) (MPU4) (set 1)", + "m4rhrcl__a", "Red Hot Roll Club (Barcrest) (MPU4) (set 2)", + "m4rhrcl__b", "Red Hot Roll Club (Barcrest) (MPU4) (set 3)", + "m4rhrcl__c", "Red Hot Roll Club (Barcrest) (MPU4) (set 4)", + "m4rhrock", "Red Hot Rocks (Qps) (MPU4) (set 1)", + "m4rhrock__a", "Red Hot Rocks (Qps) (MPU4) (set 2)", + "m4rhs", "Rocky Horror Show (Barcrest) (MPU4) (set 1)", + "m4rhs__a", "Rocky Horror Show (Barcrest) (MPU4) (set 2)", + "m4rhs__b", "Rocky Horror Show (Barcrest) (MPU4) (set 3)", + "m4rhs__c", "Rocky Horror Show (Barcrest) (MPU4) (set 4)", + "m4rhs__d", "Rocky Horror Show (Barcrest) (MPU4) (set 5)", + "m4rhs__e", "Rocky Horror Show (Barcrest) (MPU4) (set 6)", + "m4rhs__f", "Rocky Horror Show (Barcrest) (MPU4) (set 7)", + "m4rhs__g", "Rocky Horror Show (Barcrest) (MPU4) (set 8)", + "m4rhs__h", "Rocky Horror Show (Barcrest) (MPU4) (set 9)", + "m4rhs__i", "Rocky Horror Show (Barcrest) (MPU4) (set 10)", + "m4rhs__j", "Rocky Horror Show (Barcrest) (MPU4) (set 11)", + "m4rhs__k", "Rocky Horror Show (Barcrest) (MPU4) (set 12)", + "m4rhs__l", "Rocky Horror Show (Barcrest) (MPU4) (set 13)", + "m4rhwhl", "Red Hot Wheels (Qps) (MPU4) (set 1)", + "m4rhwhl__a", "Red Hot Wheels (Qps) (MPU4) (set 2)", + "m4rhwhl__b", "Red Hot Wheels (Qps) (MPU4) (set 3)", + "m4rhwhl__c", "Red Hot Wheels (Qps) (MPU4) (set 4)", + "m4richfm", "Rich & Famous (Barcrest) (MPU4) (set 1)", + "m4richfm__0", "Rich & Famous (Barcrest) (MPU4) (set 28)", + "m4richfm__1", "Rich & Famous (Barcrest) (MPU4) (set 29)", + "m4richfm__2", "Rich & Famous (Barcrest) (MPU4) (set 30)", + "m4richfm__3", "Rich & Famous (Barcrest) (MPU4) (set 31)", + "m4richfm__a", "Rich & Famous (Barcrest) (MPU4) (set 2)", + "m4richfm__b", "Rich & Famous (Barcrest) (MPU4) (set 3)", + "m4richfm__c", "Rich & Famous (Barcrest) (MPU4) (set 4)", + "m4richfm__d", "Rich & Famous (Barcrest) (MPU4) (set 5)", + "m4richfm__e", "Rich & Famous (Barcrest) (MPU4) (set 6)", + "m4richfm__f", "Rich & Famous (Barcrest) (MPU4) (set 7)", + "m4richfm__g", "Rich & Famous (Barcrest) (MPU4) (set 8)", + "m4richfm__h", "Rich & Famous (Barcrest) (MPU4) (set 9)", + "m4richfm__i", "Rich & Famous (Barcrest) (MPU4) (set 10)", + "m4richfm__j", "Rich & Famous (Barcrest) (MPU4) (set 11)", + "m4richfm__k", "Rich & Famous (Barcrest) (MPU4) (set 12)", + "m4richfm__l", "Rich & Famous (Barcrest) (MPU4) (set 13)", + "m4richfm__m", "Rich & Famous (Barcrest) (MPU4) (set 14)", + "m4richfm__n", "Rich & Famous (Barcrest) (MPU4) (set 15)", + "m4richfm__o", "Rich & Famous (Barcrest) (MPU4) (set 16)", + "m4richfm__p", "Rich & Famous (Barcrest) (MPU4) (set 17)", + "m4richfm__q", "Rich & Famous (Barcrest) (MPU4) (set 18)", + "m4richfm__r", "Rich & Famous (Barcrest) (MPU4) (set 19)", + "m4richfm__s", "Rich & Famous (Barcrest) (MPU4) (set 20)", + "m4richfm__t", "Rich & Famous (Barcrest) (MPU4) (set 21)", + "m4richfm__u", "Rich & Famous (Barcrest) (MPU4) (set 22)", + "m4richfm__v", "Rich & Famous (Barcrest) (MPU4) (set 23)", + "m4richfm__w", "Rich & Famous (Barcrest) (MPU4) (set 24)", + "m4richfm__x", "Rich & Famous (Barcrest) (MPU4) (set 25)", + "m4richfm__y", "Rich & Famous (Barcrest) (MPU4) (set 26)", + "m4richfm__z", "Rich & Famous (Barcrest) (MPU4) (set 27)", + "m4ringfr", "Ring Of Fire (Barcrest) (MPU4)", + "m4riocr", "Rio Grande (Crystal) (MPU4) (set 1)", + "m4riocra", "Rio Grande (Crystal) (MPU4) (set 2)", + "m4riotrp", "Rio Tropico (unknown) (MPU4)", + "m4rlpick", "Reel Picks (Crystal) (MPU4) (set 1)", + "m4rlpicka", "Reel Picks (Crystal) (MPU4) (set 2)", + "m4rlpickb", "Reel Picks (Crystal) (MPU4) (set 3)", + "m4rlpickc", "Reel Picks (Crystal) (MPU4) (set 4)", + "m4rltst", "MPU4 Reel Test (3.0)", + "m4rmg", "unknown MPU4 'CTP 0.4' (MPU4?)", + "m4rmtp", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 1)", + "m4rmtp__a", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 2)", + "m4rmtp__b", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 3)", + "m4rmtp__c", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 4)", + "m4rmtp__d", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 5)", + "m4rmtp__e", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 6)", + "m4rmtp__f", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 7)", + "m4rmtp__g", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 8)", + "m4rmtpd", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 1)", + "m4rmtpd__0", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 28)", + "m4rmtpd__1", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 29)", + "m4rmtpd__2", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 30)", + "m4rmtpd__3", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 31)", + "m4rmtpd__4", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 32)", + "m4rmtpd__5", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 33)", + "m4rmtpd__6", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 34)", + "m4rmtpd__7", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 35)", + "m4rmtpd__8", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 36)", + "m4rmtpd__9", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 37)", + "m4rmtpd__a", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 2)", + "m4rmtpd__aa", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 38)", + "m4rmtpd__ab", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 39)", + "m4rmtpd__ac", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 40)", + "m4rmtpd__ad", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 41)", + "m4rmtpd__ae", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 42)", + "m4rmtpd__af", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 43)", + "m4rmtpd__ag", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 44)", + "m4rmtpd__ah", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 45)", + "m4rmtpd__ai", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 46)", + "m4rmtpd__aj", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 47)", + "m4rmtpd__ak", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 48)", + "m4rmtpd__al", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 49)", + "m4rmtpd__am", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 50)", + "m4rmtpd__b", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 3)", + "m4rmtpd__c", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 4)", + "m4rmtpd__d", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 5)", + "m4rmtpd__e", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 6)", + "m4rmtpd__f", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 7)", + "m4rmtpd__g", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 8)", + "m4rmtpd__h", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 9)", + "m4rmtpd__i", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 10)", + "m4rmtpd__j", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 11)", + "m4rmtpd__k", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 12)", + "m4rmtpd__l", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 13)", + "m4rmtpd__m", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 14)", + "m4rmtpd__n", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 15)", + "m4rmtpd__o", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 16)", + "m4rmtpd__p", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 17)", + "m4rmtpd__q", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 18)", + "m4rmtpd__r", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 19)", + "m4rmtpd__s", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 20)", + "m4rmtpd__t", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 21)", + "m4rmtpd__u", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 22)", + "m4rmtpd__v", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 23)", + "m4rmtpd__w", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 24)", + "m4rmtpd__x", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 25)", + "m4rmtpd__y", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 26)", + "m4rmtpd__z", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 27)", + "m4roadrn", "Road Runner (Barcrest) (Dutch) (MPU4) (DRO1.9)", + "m4robo", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 1)", + "m4robo__0", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 14)", + "m4robo__1", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 2)", + "m4robo__2", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 3)", + "m4robo__3", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 4)", + "m4robo__4", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 5)", + "m4robo__5", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 6)", + "m4robo__6", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 1)", + "m4robo__7", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 2)", + "m4robo__8", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 3)", + "m4robo__9", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 4)", + "m4robo__a", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 7)", + "m4robo__aa", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 5)", + "m4robo__ab", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 6)", + "m4robo__b", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 8)", + "m4robo__c", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 9)", + "m4robo__d", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 10)", + "m4robo__e", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 11)", + "m4robo__f", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 12)", + "m4robo__g", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 13)", + "m4robo__h", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 14)", + "m4robo__i", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 15)", + "m4robo__j", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 7)", + "m4robo__k", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 8)", + "m4robo__l", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 9)", + "m4robo__m", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 10)", + "m4robo__n", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 1)", + "m4robo__o", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 2)", + "m4robo__p", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 3)", + "m4robo__q", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 4)", + "m4robo__r", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 5)", + "m4robo__s", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 6)", + "m4robo__t", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 7)", + "m4robo__u", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 8)", + "m4robo__v", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 9)", + "m4robo__w", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 10)", + "m4robo__x", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 11)", + "m4robo__y", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 12)", + "m4robo__z", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 13)", + "m4rockmn", "Rocket Money (Barcrest) (MPU4) (set 1)", + "m4rockmn__a", "Rocket Money (Barcrest) (MPU4) (set 2)", + "m4rockmn__b", "Rocket Money (Barcrest) (MPU4) (set 3)", + "m4rockmn__c", "Rocket Money (Barcrest) (MPU4) (set 4)", + "m4rockmn__d", "Rocket Money (Barcrest) (MPU4) (set 5)", + "m4rockmn__e", "Rocket Money (Barcrest) (MPU4) (set 6)", + "m4rockmn__f", "Rocket Money (Barcrest) (MPU4) (set 7)", + "m4rockmn__g", "Rocket Money (Barcrest) (MPU4) (set 8)", + "m4rockmn__h", "Rocket Money (Barcrest) (MPU4) (set 9)", + "m4rockmn__i", "Rocket Money (Barcrest) (MPU4) (set 10)", + "m4rockmn__j", "Rocket Money (Barcrest) (MPU4) (set 11)", + "m4rockmn__k", "Rocket Money (Barcrest) (MPU4) (set 12)", + "m4rotex", "Rotex (Union) (MPU4)", + "m4royjwl", "Royal Jewels (Barcrest) (MPU4)", + "m4rsg", "Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.2)", + "m4rsga", "Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.0)", + "m4runawy", "Runaway Trail (Barcrest) (MPU4)", + "m4runawyb", "Runaway Trail (Barcrest) (v1.2?) (MPU4)", + "m4rwb", "Red White & Blue (Barcrest) (MPU4) (DRW)", + "m4safar", "Safari Club (Mdm) (MPU4)", + "m4salsa", "Salsa (Barcrest) (MPU4) (DSA)", + "m4samu", "Samurai (Barcrest) (Dutch) (MPU4)", + "m4sayno", "Say No More (Barcrest) (MPU4) (set 1)", + "m4sayno__a", "Say No More (Barcrest) (MPU4) (set 2)", + "m4sayno__b", "Say No More (Barcrest) (MPU4) (set 3)", + "m4sayno__c", "Say No More (Barcrest) (MPU4) (set 4)", + "m4sayno__d", "Say No More (Barcrest) (MPU4) (set 5)", + "m4sb5", "Sunset Boulevard (Barcrest) (MPU4) (BSB 0.3)", + "m4sbx", "Super Bear X (MPU4?) (set 1)", + "m4sbxa", "Super Bear X (MPU4?) (set 2)", + "m4sbxb", "Super Bear X (MPU4?) (set 3)", + "m4sbxc", "Super Bear X (MPU4?) (set 4)", + "m4sbxd", "Super Bear X (MPU4?) (set 5)", + "m4sbxe", "Super Bear X (MPU4?) (set 6)", + "m4screw", "Screwin' Around (Global) (MPU4, v0.8)", + "m4screwa", "Screwin' Around (Global) (MPU4, v0.7)", + "m4screwb", "Screwin' Around (Global) (MPU4, v0.5)", + "m4screwp", "Screwin' Around (Global) (MPU4, v0.8) (Protocol)", + "m4sctagt", "Secret Agent (Nova) (MPU4)", + "m4sdquid", "Sundance Quid (Qps) (MPU4) (set 1)", + "m4sdquid__a", "Sundance Quid (Qps) (MPU4) (set 2)", + "m4sdquid__b", "Sundance Quid (Qps) (MPU4) (set 3)", + "m4sdquid__c", "Sundance Quid (Qps) (MPU4) (set 4)", + "m4sdquid__d", "Sundance Quid (Qps) (MPU4) (set 5)", + "m4sdquid__e", "Sundance Quid (Qps) (MPU4) (set 6)", + "m4sdquid__f", "Sundance Quid (Qps) (MPU4) (set 7)", + "m4sdquid__g", "Sundance Quid (Qps) (MPU4) (set 8)", + "m4sdquid__h", "Sundance Quid (Qps) (MPU4) (set 9)", + "m4sdquid__i", "Sundance Quid (Qps) (MPU4) (set 10)", + "m4sdquid__j", "Sundance Quid (Qps) (MPU4) (set 11)", + "m4sdquid__k", "Sundance Quid (Qps) (MPU4) (set 12)", + "m4select", "Select (Union) (MPU4)", + "m4sgrab", "Smash 'n' Grab (Barcrest) (MPU4) (SAG 1.0, set 1)", + "m4sgraba", "Smash 'n' Grab (Barcrest) (MPU4) (set 1.0, set 2)", + "m4sgrabb", "Smash 'n' Grab (Barcrest) (MPU4) (SAG 3.4)", + "m4shkwav", "Shockwave (Qps) (MPU4) (set 1)", + "m4shkwav__a", "Shockwave (Qps) (MPU4) (set 2)", + "m4shkwav__b", "Shockwave (Qps) (MPU4) (set 3)", + "m4shkwav__c", "Shockwave (Qps) (MPU4) (set 4)", + "m4shkwav__d", "Shockwave (Qps) (MPU4) (set 5)", + "m4shkwav__e", "Shockwave (Qps) (MPU4) (set 6)", + "m4shkwav__f", "Shockwave (Qps) (MPU4) (set 7)", + "m4shkwav__g", "Shockwave (Qps) (MPU4) (set 8)", + "m4shocm", "Showcase Crystal Maze (Barcrest) (MPU4) (set 1)", + "m4shocm__a", "Showcase Crystal Maze (Barcrest) (MPU4) (set 2)", + "m4shocm__b", "Showcase Crystal Maze (Barcrest) (MPU4) (set 3)", + "m4shocm__c", "Showcase Crystal Maze (Barcrest) (MPU4) (set 4)", + "m4shocm__d", "Showcase Crystal Maze (Barcrest) (MPU4) (set 5)", + "m4shocm__e", "Showcase Crystal Maze (Barcrest) (MPU4) (set 6)", + "m4shocm__f", "Showcase Crystal Maze (Barcrest) (MPU4) (set 7)", + "m4shocm__g", "Showcase Crystal Maze (Barcrest) (MPU4) (set 8)", + "m4shocm__h", "Showcase Crystal Maze (Barcrest) (MPU4) (set 9)", + "m4shocm__i", "Showcase Crystal Maze (Barcrest) (MPU4) (set 10)", + "m4shocm__j", "Showcase Crystal Maze (Barcrest) (MPU4) (set 11)", + "m4shodf", "Showcase Duty Free (Barcrest) (MPU4) (set 1)", + "m4shodf__a", "Showcase Duty Free (Barcrest) (MPU4) (set 2)", + "m4shodf__b", "Showcase Duty Free (Barcrest) (MPU4) (set 3)", + "m4shodf__c", "Showcase Duty Free (Barcrest) (MPU4) (set 4)", + "m4shodf__d", "Showcase Duty Free (Barcrest) (MPU4) (set 5)", + "m4shodf__e", "Showcase Duty Free (Barcrest) (MPU4) (set 6)", + "m4shodf__f", "Showcase Duty Free (Barcrest) (MPU4) (set 7)", + "m4shodf__g", "Showcase Duty Free (Barcrest) (MPU4) (set 8)", + "m4shodf__h", "Showcase Duty Free (Barcrest) (MPU4) (set 9)", + "m4shodf__i", "Showcase Duty Free (Barcrest) (MPU4) (set 10)", + "m4shodf__j", "Showcase Duty Free (Barcrest) (MPU4) (set 11)", + "m4shodf__k", "Showcase Duty Free (Barcrest) (MPU4) (set 12)", + "m4shodf__l", "Showcase Duty Free (Barcrest) (MPU4) (set 13)", + "m4shoknr", "Shock 'n' Roll (Qps) (MPU4) (set 1)", + "m4shoknr__a", "Shock 'n' Roll (Qps) (MPU4) (set 2)", + "m4shoknr__b", "Shock 'n' Roll (Qps) (MPU4) (set 3)", + "m4shoknr__c", "Shock 'n' Roll (Qps) (MPU4) (set 4)", + "m4showtm", "Show Timer (Barcrest) (Dutch) (MPU4) (DSH1.3)", + "m4silnud", "Silver Nudger (Mdm?) (MPU4)", + "m4silshd", "Silver Shadow (Barcrest) (MPU4)", + "m4silshda", "Silver Shadow (Barcrest) (MPU4) (SH 2.0, set 1)", + "m4silshdb", "Silver Shadow (Barcrest) (MPU4) (SH 2.0, set 2)", + "m4sinbd", "Sinbad (Bwb) (MPU4) (set 1)", + "m4sinbd__a", "Sinbad (Bwb) (MPU4) (set 2)", + "m4sinbd__b", "Sinbad (Bwb) (MPU4) (set 3)", + "m4sinbd__c", "Sinbad (Bwb) (MPU4) (set 4)", + "m4sinbd__d", "Sinbad (Bwb) (MPU4) (set 5)", + "m4sinbd__e", "Sinbad (Bwb) (MPU4) (set 6)", + "m4sinbd__f", "Sinbad (Bwb) (MPU4) (set 7)", + "m4sinbd__g", "Sinbad (Bwb) (MPU4) (set 8)", + "m4sinbd__h", "Sinbad (Bwb) (MPU4) (set 9)", + "m4sinbd__i", "Sinbad (Bwb) (MPU4) (set 10)", + "m4sinbd__j", "Sinbad (Bwb) (MPU4) (set 11)", + "m4sinbd__k", "Sinbad (Bwb) (MPU4) (set 12)", + "m4sinbd__l", "Sinbad (Bwb) (MPU4) (set 13)", + "m4sinbd__m", "Sinbad (Bwb) (MPU4) (set 14)", + "m4sinbd__n", "Sinbad (Bwb) (MPU4) (set 15)", + "m4sinbd__o", "Sinbad (Bwb) (MPU4) (set 16)", + "m4sinbd__p", "Sinbad (Bwb) (MPU4) (set 17)", + "m4sinbd__q", "Sinbad (Bwb) (MPU4) (set 18)", + "m4sinbd__r", "Sinbad (Bwb) (MPU4) (set 19)", + "m4sinbd__s", "Sinbad (Bwb) (MPU4) (set 20)", + "m4sinbd__t", "Sinbad (Bwb) (MPU4) (set 21)", + "m4sinbd__u", "Sinbad (Bwb) (MPU4) (set 22)", + "m4sinbd__v", "Sinbad (Bwb) (MPU4) (set 23)", + "m4sinbd__w", "Sinbad (Bwb) (MPU4) (set 24)", + "m4sinbd__x", "Sinbad (Bwb) (MPU4) (set 25)", + "m4sinbdn", "Sinbad (Nova) (MPU4) (set 1)", + "m4sinbdn__a", "Sinbad (Nova) (MPU4) (set 2)", + "m4sinbdn__b", "Sinbad (Nova) (MPU4) (set 3)", + "m4sinbdn__c", "Sinbad (Nova) (MPU4) (set 4)", + "m4sinbdn__d", "Sinbad (Nova) (MPU4) (set 5)", + "m4sinbdn__e", "Sinbad (Nova) (MPU4) (set 6)", + "m4sinbdn__f", "Sinbad (Nova) (MPU4) (set 7)", + "m4sky", "Sky Sports (Bwb) (MPU4) (set 1)", + "m4sky__a", "Sky Sports (Bwb) (MPU4) (set 2)", + "m4sky__b", "Sky Sports (Bwb) (MPU4) (set 3)", + "m4sky__c", "Sky Sports (Bwb) (MPU4) (set 4)", + "m4sky__d", "Sky Sports (Bwb) (MPU4) (set 5)", + "m4smshgb", "Smash 'n' Grab (Mdm) (MPU4, set 1)", + "m4smshgba", "Smash 'n' Grab (Mdm) (MPU4, set 2)", + "m4smshgbb", "Smash 'n' Grab (Mdm) (MPU4, set 3)", + "m4smshgbc", "Smash 'n' Grab (Mdm) (MPU4, set 4)", + "m4snklad", "Snakes & Ladders (Mdm) (MPU4)", + "m4snookr", "Snooker (Eurocoin) (MPU4)", + "m4snowbl", "Snowball Bingo (Mdm) (MPU4)", + "m4solsil", "Solid Silver Club (Barcrest) (MPU4) (SOS 2.2)", + "m4solsila", "Solid Silver Club (Barcrest) (MPU4) (SOS 2.1)", + "m4souls", "Soul Sister (Bwb) (MPU4) (set 1)", + "m4souls__a", "Soul Sister (Bwb) (MPU4) (set 2)", + "m4souls__b", "Soul Sister (Bwb) (MPU4) (set 3)", + "m4souls__c", "Soul Sister (Bwb) (MPU4) (set 4)", + "m4souls__d", "Soul Sister (Bwb) (MPU4) (set 5)", + "m4souls__e", "Soul Sister (Bwb) (MPU4) (set 6)", + "m4souls__f", "Soul Sister (Bwb) (MPU4) (set 7)", + "m4specu", "Speculator Club (Bwb) (MPU4)", + "m4spinbt", "Spin The Bottle (Bwb) (MPU4) (set 1)", + "m4spinbt__a", "Spin The Bottle (Bwb) (MPU4) (set 2)", + "m4spinbt__b", "Spin The Bottle (Bwb) (MPU4) (set 3)", + "m4spinbt__c", "Spin The Bottle (Bwb) (MPU4) (set 4)", + "m4spinbt__d", "Spin The Bottle (Bwb) (MPU4) (set 5)", + "m4spinbt__e", "Spin The Bottle (Bwb) (MPU4) (set 6)", + "m4spinbt__f", "Spin The Bottle (Bwb) (MPU4) (set 7)", + "m4spinbt__g", "Spin The Bottle (Bwb) (MPU4) (set 8)", + "m4spnwin", "Spin A Win (Cotswold Microsystems) (MPU4) (set 1)", + "m4spnwina", "Spin A Win (Cotswold Microsystems) (MPU4) (set 2)", + "m4spnwnc", "Spin-A-Win (Concept Games Ltd) (MPU4) (set 1)", + "m4spnwnc__a", "Spin-A-Win (Concept Games Ltd) (MPU4) (set 2)", + "m4spnwnc__b", "Spin-A-Win (Concept Games Ltd) (MPU4) (set 3)", + "m4spotln", "Spotlight (Nova) (MPU4)", + "m4spton", "Spot On (Pcp) (MPU4)", + "m4squid", "Squids In (Barcrest) (MPU4) (set 1)", + "m4squid__a", "Squids In (Barcrest) (MPU4) (set 2)", + "m4squid__b", "Squids In (Barcrest) (MPU4) (set 3)", + "m4squid__c", "Squids In (Barcrest) (MPU4) (set 4)", + "m4ssclas", "Super Streak Classic (Barcrest) (MPU4) (set 1)", + "m4ssclas__a", "Super Streak Classic (Barcrest) (MPU4) (set 2)", + "m4ssclas__b", "Super Streak Classic (Barcrest) (MPU4) (set 3)", + "m4ssclas__c", "Super Streak Classic (Barcrest) (MPU4) (set 4)", + "m4ssclas__d", "Super Streak Classic (Barcrest) (MPU4) (set 5)", + "m4ssclas__e", "Super Streak Classic (Barcrest) (MPU4) (set 6)", + "m4ssclas__f", "Super Streak Classic (Barcrest) (MPU4) (hack)", + "m4sss", "Spend Spend Spend (Barcrest) (MPU4) (set 1)", + "m4sss__a", "Spend Spend Spend (Barcrest) (MPU4) (set 2)", + "m4sss__b", "Spend Spend Spend (Barcrest) (MPU4) (set 3)", + "m4sss__c", "Spend Spend Spend (Barcrest) (MPU4) (set 4)", + "m4sss__d", "Spend Spend Spend (Barcrest) (MPU4) (set 5)", + "m4sss__e", "Spend Spend Spend (Barcrest) (MPU4) (set 6)", + "m4sss__f", "Spend Spend Spend (Barcrest) (MPU4) (set 7)", + "m4sss__g", "Spend Spend Spend (Barcrest) (MPU4) (set 8)", + "m4sss__h", "Spend Spend Spend (Barcrest) (MPU4) (set 9)", + "m4sss__i", "Spend Spend Spend (Barcrest) (MPU4) (set 10)", + "m4sss__j", "Spend Spend Spend (Barcrest) (MPU4) (set 11)", + "m4sss__k", "Spend Spend Spend (Barcrest) (MPU4) (set 12)", + "m4sss__l", "Spend Spend Spend (Barcrest) (MPU4) (set 13)", + "m4sstrek", "Super Streak (bootleg) (MPU4)", + "m4stakeu", "Stake Up Club (Barcrest) (MPU4) (SU 4.4)", + "m4stakeua", "Stake Up Club (Barcrest) (MPU4) (SU 4.8)", + "m4stakex", "Stake X (Leisurama) (MPU4, set 1)", + "m4stakexa", "Stake X (Leisurama) (MPU4, set 2)", + "m4stand2", "Stand To Deliver (DJE) (MPU4)", + "m4starbr", "Stars And Bars (Barcrest) (Dutch) (MPU4)", + "m4stards", "Stardust (Barcrest) (Dutch) (MPU4)", + "m4starst", "Stars & Stripes (Bwb) (MPU4) (set 1)", + "m4starst__a", "Stars & Stripes (Bwb) (MPU4) (set 2)", + "m4starst__b", "Stars & Stripes (Bwb) (MPU4) (set 3)", + "m4starst__c", "Stars & Stripes (Bwb) (MPU4) (set 4)", + "m4starst__d", "Stars & Stripes (Bwb) (MPU4) (set 5)", + "m4starst__e", "Stars & Stripes (Bwb) (MPU4) (set 6)", + "m4starst__f", "Stars & Stripes (Bwb) (MPU4) (set 7)", + "m4starst__g", "Stars & Stripes (Bwb) (MPU4) (set 8)", + "m4starst__h", "Stars & Stripes (Bwb) (MPU4) (set 9)", + "m4starst__i", "Stars & Stripes (Bwb) (MPU4) (set 10)", + "m4starst__j", "Stars & Stripes (Bwb) (MPU4) (set 11)", + "m4stc", "unknown MPU4 'STC 0.1' (Barcrest) (MPU4)", + "m4steptm", "Step Timer (Barcrest) (Dutch) (MPU4) (DST 1.1)", + "m4stopcl", "Stop the Clock (Barcrest) (MPU4) (SC2.5)", + "m4sunclb", "Sun Club (Bwb) (MPU4) (set 1)", + "m4sunclba", "Sun Club (Bwb) (MPU4) (set 2)", + "m4sunday", "Sunday Sport (Pcp) (MPU4)", + "m4sunscl", "Sunset Club (Bwb) (MPU4) (set 1)", + "m4sunscla", "Sunset Club (Bwb) (MPU4) (set 2)", + "m4sunsclb", "Sunset Club (Bwb) (MPU4) (set 3)", + "m4sunset", "Sunset Boulevard (Barcrest) (MPU4) (BSB 0.4)", + "m4sunseta", "Sunset Boulevard (Barcrest) (MPU4) (B25 1.2, set 1)", + "m4sunsetb", "Sunset Boulevard (Barcrest) (MPU4) (B25 1.2, set 2)", + "m4sunsetc", "Sunset Boulevard (Barcrest) (MPU4) (OSB 0.2)", + "m4sunsetd", "Sunset Boulevard (Barcrest) (MPU4) (SBU 2.0)", + "m4sunsete", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.1)", + "m4sunsetf", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 1)", + "m4sunsetg", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 2)", + "m4sunseth", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 3, bad)", + "m4sunseti", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 4)", + "m4sunsetj", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 5)", + "m4sunsetk", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.1)", + "m4sunsetl", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 1)", + "m4sunsetm", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 2)", + "m4sunsetn", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 3)", + "m4sunseto", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 4)", + "m4sunsetp", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 5)", + "m4sunsetq", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 6)", + "m4sunsetr", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 7)", + "m4sunsets", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 8)", + "m4sunsett", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 9)", + "m4supbf", "Super Bucks Fizz Club (Barcrest) (MPU4) (set 1)", + "m4supbfa", "Super Bucks Fizz Club (Barcrest) (MPU4) (set 2)", + "m4supbjc", "Super Blackjack Club (Barcrest) (MPU4) (set 1)", + "m4supbjca", "Super Blackjack Club (Barcrest) (MPU4) (set 2)", + "m4supbjcb", "Super Blackjack Club (Barcrest) (MPU4) (set 3)", + "m4supbjcc", "Super Blackjack Club (Barcrest) (MPU4) (set 4)", + "m4supbjcd", "Super Blackjack Club (Barcrest) (MPU4) (set 5)", + "m4supfru", "Supafruits (Union) (MPU4, set 1)", + "m4supfrua", "Supafruits (Union) (MPU4, set 2)", + "m4suphv", "Super Hyper Viper (Barcrest) (MPU4) (set 1)", + "m4suphv__a", "Super Hyper Viper (Barcrest) (MPU4) (set 2)", + "m4suphv__b", "Super Hyper Viper (Barcrest) (MPU4) (set 3)", + "m4suphv__c", "Super Hyper Viper (Barcrest) (MPU4) (set 4)", + "m4suphv__d", "Super Hyper Viper (Barcrest) (MPU4) (set 5)", + "m4suphv__e", "Super Hyper Viper (Barcrest) (MPU4) (set 6)", + "m4suphv__f", "Super Hyper Viper (Barcrest) (MPU4) (set 7)", + "m4suphv__g", "Super Hyper Viper (Barcrest) (MPU4) (set 8)", + "m4suphv__h", "Super Hyper Viper (Barcrest) (MPU4) (set 9)", + "m4suphv__i", "Super Hyper Viper (Barcrest) (MPU4) (set 10)", + "m4suphv__j", "Super Hyper Viper (Barcrest) (MPU4) (set 11)", + "m4suphv__k", "Super Hyper Viper (Barcrest) (MPU4) (set 12)", + "m4suphv__l", "Super Hyper Viper (Barcrest) (MPU4) (set 13)", + "m4suphv__m", "Super Hyper Viper (Barcrest) (MPU4) (set 14)", + "m4suphv__n", "Super Hyper Viper (Barcrest) (MPU4) (set 15)", + "m4suphv__o", "Super Hyper Viper (Barcrest) (MPU4) (set 16)", + "m4suphv__p", "Super Hyper Viper (Barcrest) (MPU4) (set 17)", + "m4supjst", "Super Jester (Pcp) (MPU4) (set 1)", + "m4supjsta", "Super Jester (Pcp) (MPU4) (set 2)", + "m4supjstb", "Super Jester (Pcp) (MPU4) (set 3)", + "m4supjstc", "Super Jester (Pcp) (MPU4) (set 4)", + "m4supjstd", "Super Jester (Pcp) (MPU4) (set 5)", + "m4supjste", "Super Jester (Pcp) (MPU4) (set 6)", + "m4supleg", "Super League (Bwb) (MPU4) (set 1)", + "m4supleg__a", "Super League (Bwb) (MPU4) (set 2)", + "m4supleg__b", "Super League (Bwb) (MPU4) (set 3)", + "m4supleg__c", "Super League (Bwb) (MPU4) (set 4)", + "m4supleg__d", "Super League (Bwb) (MPU4) (set 5)", + "m4suplegw", "Super League (Whitbread / Bwb) (MPU4)", + "m4supscr", "Super Soccer (Bwb) (MPU4) (set 1)", + "m4supscr__a", "Super Soccer (Bwb) (MPU4) (set 2)", + "m4supscr__b", "Super Soccer (Bwb) (MPU4) (set 3)", + "m4supscr__c", "Super Soccer (Bwb) (MPU4) (set 4)", + "m4supscr__d", "Super Soccer (Bwb) (MPU4) (set 5)", + "m4supscr__e", "Super Soccer (Bwb) (MPU4) (set 6)", + "m4supscr__f", "Super Soccer (Bwb) (MPU4) (set 7)", + "m4supscr__g", "Super Soccer (Bwb) (MPU4) (set 8)", + "m4supscr__h", "Super Soccer (Bwb) (MPU4) (set 9)", + "m4supscr__i", "Super Soccer (Bwb) (MPU4) (set 10)", + "m4supscr__j", "Super Soccer (Bwb) (MPU4) (set 11)", + "m4supscr__k", "Super Soccer (Bwb) (MPU4) (set 12)", + "m4supscr__l", "Super Soccer (Bwb) (MPU4) (set 13)", + "m4supscr__m", "Super Soccer (Bwb) (MPU4) (set 14)", + "m4supscr__n", "Super Soccer (Bwb) (MPU4) (set 15)", + "m4supsl", "Supa Silva (Barcrest) (MPU4)", + "m4supslt", "Supa Slot (Barcrest) (MPU4)", + "m4supst", "Super Streak (Barcrest) (MPU4) (set 1)", + "m4supst__0", "Super Streak (Barcrest) (MPU4) (set 28)", + "m4supst__1", "Super Streak (Barcrest) (MPU4) (set 29)", + "m4supst__2", "Super Streak (Barcrest) (MPU4) (set 30)", + "m4supst__3", "Super Streak (Barcrest) (MPU4) (set 31)", + "m4supst__4", "Super Streak (Barcrest) (MPU4) (set 32)", + "m4supst__5", "Super Streak (Barcrest) (MPU4) (set 33)", + "m4supst__6", "Super Streak (Barcrest) (MPU4) (set 34)", + "m4supst__7", "Super Streak (Barcrest) (MPU4) (set 35)", + "m4supst__8", "Super Streak (Barcrest) (MPU4) (set 36)", + "m4supst__9", "Super Streak (Barcrest) (MPU4) (set 37)", + "m4supst__a", "Super Streak (Barcrest) (MPU4) (set 2)", + "m4supst__a0", "Super Streak (Barcrest) (MPU4) (set 64)", + "m4supst__a1", "Super Streak (Barcrest) (MPU4) (set 65)", + "m4supst__a2", "Super Streak (Barcrest) (MPU4) (set 66)", + "m4supst__a3", "Super Streak (Barcrest) (MPU4) (set 67)", + "m4supst__a4", "Super Streak (Barcrest) (MPU4) (set 68)", + "m4supst__a5", "Super Streak (Barcrest) (MPU4) (set 69)", + "m4supst__a6", "Super Streak (Barcrest) (MPU4) (set 70)", + "m4supst__a7", "Super Streak (Barcrest) (MPU4) (set 71)", + "m4supst__a8", "Super Streak (Barcrest) (MPU4) (set 72)", + "m4supst__a9", "Super Streak (Barcrest) (MPU4) (set 73)", + "m4supst__aa", "Super Streak (Barcrest) (MPU4) (set 38)", + "m4supst__ab", "Super Streak (Barcrest) (MPU4) (set 39)", + "m4supst__ac", "Super Streak (Barcrest) (MPU4) (set 40)", + "m4supst__ad", "Super Streak (Barcrest) (MPU4) (set 41)", + "m4supst__ae", "Super Streak (Barcrest) (MPU4) (set 42)", + "m4supst__af", "Super Streak (Barcrest) (MPU4) (set 43)", + "m4supst__ag", "Super Streak (Barcrest) (MPU4) (set 44)", + "m4supst__ah", "Super Streak (Barcrest) (MPU4) (set 45)", + "m4supst__ai", "Super Streak (Barcrest) (MPU4) (set 46)", + "m4supst__aj", "Super Streak (Barcrest) (MPU4) (set 47)", + "m4supst__ak", "Super Streak (Barcrest) (MPU4) (set 48)", + "m4supst__al", "Super Streak (Barcrest) (MPU4) (set 49)", + "m4supst__am", "Super Streak (Barcrest) (MPU4) (set 50)", + "m4supst__an", "Super Streak (Barcrest) (MPU4) (set 51)", + "m4supst__ao", "Super Streak (Barcrest) (MPU4) (set 52)", + "m4supst__ap", "Super Streak (Barcrest) (MPU4) (set 53)", + "m4supst__aq", "Super Streak (Barcrest) (MPU4) (set 54)", + "m4supst__ar", "Super Streak (Barcrest) (MPU4) (set 55)", + "m4supst__as", "Super Streak (Barcrest) (MPU4) (set 56)", + "m4supst__at", "Super Streak (Barcrest) (MPU4) (set 57)", + "m4supst__au", "Super Streak (Barcrest) (MPU4) (set 58)", + "m4supst__av", "Super Streak (Barcrest) (MPU4) (set 59)", + "m4supst__aw", "Super Streak (Barcrest) (MPU4) (set 60)", + "m4supst__ax", "Super Streak (Barcrest) (MPU4) (set 61)", + "m4supst__ay", "Super Streak (Barcrest) (MPU4) (set 62)", + "m4supst__az", "Super Streak (Barcrest) (MPU4) (set 63)", + "m4supst__b", "Super Streak (Barcrest) (MPU4) (set 3)", + "m4supst__b0", "Super Streak (Barcrest) (MPU4) (set 100)", + "m4supst__b1", "Super Streak (Barcrest) (MPU4) (set 101)", + "m4supst__b2", "Super Streak (Barcrest) (MPU4) (set 102)", + "m4supst__b3", "Super Streak (Barcrest) (MPU4) (set 103)", + "m4supst__b4", "Super Streak (Barcrest) (MPU4) (set 104)", + "m4supst__b5", "Super Streak (Barcrest) (MPU4) (set 105)", + "m4supst__ba", "Super Streak (Barcrest) (MPU4) (set 74)", + "m4supst__bb", "Super Streak (Barcrest) (MPU4) (set 75)", + "m4supst__bc", "Super Streak (Barcrest) (MPU4) (set 76)", + "m4supst__bd", "Super Streak (Barcrest) (MPU4) (set 77)", + "m4supst__be", "Super Streak (Barcrest) (MPU4) (set 78)", + "m4supst__bf", "Super Streak (Barcrest) (MPU4) (set 79)", + "m4supst__bg", "Super Streak (Barcrest) (MPU4) (set 80)", + "m4supst__bh", "Super Streak (Barcrest) (MPU4) (set 81)", + "m4supst__bi", "Super Streak (Barcrest) (MPU4) (set 82)", + "m4supst__bj", "Super Streak (Barcrest) (MPU4) (set 83)", + "m4supst__bk", "Super Streak (Barcrest) (MPU4) (set 84)", + "m4supst__bl", "Super Streak (Barcrest) (MPU4) (set 85)", + "m4supst__bm", "Super Streak (Barcrest) (MPU4) (set 86)", + "m4supst__bn", "Super Streak (Barcrest) (MPU4) (set 87)", + "m4supst__bo", "Super Streak (Barcrest) (MPU4) (set 88)", + "m4supst__bp", "Super Streak (Barcrest) (MPU4) (set 89)", + "m4supst__bq", "Super Streak (Barcrest) (MPU4) (set 90)", + "m4supst__br", "Super Streak (Barcrest) (MPU4) (set 91)", + "m4supst__bs", "Super Streak (Barcrest) (MPU4) (set 92)", + "m4supst__bt", "Super Streak (Barcrest) (MPU4) (set 93)", + "m4supst__bu", "Super Streak (Barcrest) (MPU4) (set 94)", + "m4supst__bv", "Super Streak (Barcrest) (MPU4) (set 95)", + "m4supst__bw", "Super Streak (Barcrest) (MPU4) (set 96)", + "m4supst__bx", "Super Streak (Barcrest) (MPU4) (set 97)", + "m4supst__by", "Super Streak (Barcrest) (MPU4) (set 98)", + "m4supst__bz", "Super Streak (Barcrest) (MPU4) (set 99)", + "m4supst__c", "Super Streak (Barcrest) (MPU4) (set 4)", + "m4supst__d", "Super Streak (Barcrest) (MPU4) (set 5)", + "m4supst__e", "Super Streak (Barcrest) (MPU4) (set 6)", + "m4supst__f", "Super Streak (Barcrest) (MPU4) (set 7)", + "m4supst__g", "Super Streak (Barcrest) (MPU4) (set 8)", + "m4supst__h", "Super Streak (Barcrest) (MPU4) (set 9)", + "m4supst__i", "Super Streak (Barcrest) (MPU4) (set 10)", + "m4supst__j", "Super Streak (Barcrest) (MPU4) (set 11)", + "m4supst__k", "Super Streak (Barcrest) (MPU4) (set 12)", + "m4supst__l", "Super Streak (Barcrest) (MPU4) (set 13)", + "m4supst__m", "Super Streak (Barcrest) (MPU4) (set 14)", + "m4supst__n", "Super Streak (Barcrest) (MPU4) (set 15)", + "m4supst__o", "Super Streak (Barcrest) (MPU4) (set 16)", + "m4supst__p", "Super Streak (Barcrest) (MPU4) (set 17)", + "m4supst__q", "Super Streak (Barcrest) (MPU4) (set 18)", + "m4supst__r", "Super Streak (Barcrest) (MPU4) (set 19)", + "m4supst__s", "Super Streak (Barcrest) (MPU4) (set 20)", + "m4supst__t", "Super Streak (Barcrest) (MPU4) (set 21)", + "m4supst__u", "Super Streak (Barcrest) (MPU4) (set 22)", + "m4supst__v", "Super Streak (Barcrest) (MPU4) (set 23)", + "m4supst__w", "Super Streak (Barcrest) (MPU4) (set 24)", + "m4supst__x", "Super Streak (Barcrest) (MPU4) (set 25)", + "m4supst__y", "Super Streak (Barcrest) (MPU4) (set 26)", + "m4supst__z", "Super Streak (Barcrest) (MPU4) (set 27)", + "m4suptrn", "Supatron (Barcrest) (MPU4)", + "m4suptub", "Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 1))", + "m4suptuba", "Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 2)", + "m4suptwo", "Super Two (Barcrest) (MPU4)", + "m4sure", "Sure Thing (Bwb) (MPU4) (set 1)", + "m4sure__a", "Sure Thing (Bwb) (MPU4) (set 2)", + "m4sure__b", "Sure Thing (Bwb) (MPU4) (set 3)", + "m4sure__c", "Sure Thing (Bwb) (MPU4) (set 4)", + "m4surf", "Super Surfin' (Gemini) (MPU4) (set 1)", + "m4surfa", "Super Surfin' (Gemini) (MPU4) (set 2)", + "m4surfb", "Super Surfin' (Gemini) (MPU4) (set 3)", + "m4swpnot", "Swap-A-Note (Barcrest) (v3.3) (MPU4)", + "m4swpnota", "Swap-A-Note (Barcrest) (v3.2D) (MPU4)", + "m4t266", "unknown MPU4 'TTO 1.1' (MPU4?)", + "m4taj", "Taj Mahal (Barcrest) (Dutch) (MPU4)", + "m4take2", "Take Two (Barcrest) (MPU4) (TTO 1.2)", + "m4take2a", "Take Two (Barcrest) (MPU4) (TTO 1.1)", + "m4take5", "Take 5 (Barcrest) (MPU4)", + "m4takepk", "Take Your Pick (Barcrest) (MPU4) (set 1)", + "m4takepk__0", "Take Your Pick (Barcrest) (MPU4) (set 28)", + "m4takepk__1", "Take Your Pick (Barcrest) (MPU4) (set 29)", + "m4takepk__a", "Take Your Pick (Barcrest) (MPU4) (set 2)", + "m4takepk__b", "Take Your Pick (Barcrest) (MPU4) (set 3)", + "m4takepk__c", "Take Your Pick (Barcrest) (MPU4) (set 4)", + "m4takepk__d", "Take Your Pick (Barcrest) (MPU4) (set 5)", + "m4takepk__e", "Take Your Pick (Barcrest) (MPU4) (set 6)", + "m4takepk__f", "Take Your Pick (Barcrest) (MPU4) (set 7)", + "m4takepk__g", "Take Your Pick (Barcrest) (MPU4) (set 8)", + "m4takepk__h", "Take Your Pick (Barcrest) (MPU4) (set 9)", + "m4takepk__i", "Take Your Pick (Barcrest) (MPU4) (set 10)", + "m4takepk__j", "Take Your Pick (Barcrest) (MPU4) (set 11)", + "m4takepk__k", "Take Your Pick (Barcrest) (MPU4) (set 12)", + "m4takepk__l", "Take Your Pick (Barcrest) (MPU4) (set 13)", + "m4takepk__m", "Take Your Pick (Barcrest) (MPU4) (set 14)", + "m4takepk__n", "Take Your Pick (Barcrest) (MPU4) (set 15)", + "m4takepk__o", "Take Your Pick (Barcrest) (MPU4) (set 16)", + "m4takepk__p", "Take Your Pick (Barcrest) (MPU4) (set 17)", + "m4takepk__q", "Take Your Pick (Barcrest) (MPU4) (set 18)", + "m4takepk__r", "Take Your Pick (Barcrest) (MPU4) (set 19)", + "m4takepk__s", "Take Your Pick (Barcrest) (MPU4) (set 20)", + "m4takepk__t", "Take Your Pick (Barcrest) (MPU4) (set 21)", + "m4takepk__u", "Take Your Pick (Barcrest) (MPU4) (set 22)", + "m4takepk__v", "Take Your Pick (Barcrest) (MPU4) (set 23)", + "m4takepk__w", "Take Your Pick (Barcrest) (MPU4) (set 24)", + "m4takepk__x", "Take Your Pick (Barcrest) (MPU4) (set 25)", + "m4takepk__y", "Take Your Pick (Barcrest) (MPU4) (set 26)", + "m4takepk__z", "Take Your Pick (Barcrest) (MPU4) (set 27)", + "m4tbplay", "Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 1)", + "m4tbplaya", "Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 2)", + "m4tbplayb", "Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 3)", + "m4tbreel", "Turbo Reel (Barcrest) (Dutch) (MPU4) (set 1)", + "m4tbrldx", "Turbo Reel (Barcrest) (Dutch) (MPU4) (set 3, Deluxe?)", + "m4techno", "Techno Reel (Barcrest) (MPU4) (DTE) (set 1)", + "m4technoa", "Techno Reel (Barcrest) (MPU4) (DTE) (set 2)", + "m4tenten", "10 X 10 (Barcrest) (MPU4) (set 1)", + "m4tenten__0", "10 X 10 (Barcrest) (MPU4) (set 28)", + "m4tenten__1", "10 X 10 (Barcrest) (MPU4) (set 29)", + "m4tenten__2", "10 X 10 (Barcrest) (MPU4) (set 30)", + "m4tenten__3", "10 X 10 (Barcrest) (MPU4) (set 31)", + "m4tenten__4", "10 X 10 (Barcrest) (MPU4) (set 32)", + "m4tenten__5", "10 X 10 (Barcrest) (MPU4) (set 33)", + "m4tenten__6", "10 X 10 (Barcrest) (MPU4) (set 34)", + "m4tenten__7", "10 X 10 (Barcrest) (MPU4) (set 35)", + "m4tenten__8", "10 X 10 (Barcrest) (MPU4) (set 36)", + "m4tenten__9", "10 X 10 (Barcrest) (MPU4) (set 37)", + "m4tenten__a", "10 X 10 (Barcrest) (MPU4) (set 2)", + "m4tenten__a0", "10 X 10 (Barcrest) (MPU4) (set 64)", + "m4tenten__a1", "10 X 10 (Barcrest) (MPU4) (set 65)", + "m4tenten__a2", "10 X 10 (Barcrest) (MPU4) (set 66)", + "m4tenten__aa", "10 X 10 (Barcrest) (MPU4) (set 38)", + "m4tenten__ab", "10 X 10 (Barcrest) (MPU4) (set 39)", + "m4tenten__ac", "10 X 10 (Barcrest) (MPU4) (set 40)", + "m4tenten__ad", "10 X 10 (Barcrest) (MPU4) (set 41)", + "m4tenten__ae", "10 X 10 (Barcrest) (MPU4) (set 42)", + "m4tenten__af", "10 X 10 (Barcrest) (MPU4) (set 43)", + "m4tenten__ag", "10 X 10 (Barcrest) (MPU4) (set 44)", + "m4tenten__ah", "10 X 10 (Barcrest) (MPU4) (set 45)", + "m4tenten__ai", "10 X 10 (Barcrest) (MPU4) (set 46)", + "m4tenten__aj", "10 X 10 (Barcrest) (MPU4) (set 47)", + "m4tenten__ak", "10 X 10 (Barcrest) (MPU4) (set 48)", + "m4tenten__al", "10 X 10 (Barcrest) (MPU4) (set 49)", + "m4tenten__am", "10 X 10 (Barcrest) (MPU4) (set 50)", + "m4tenten__an", "10 X 10 (Barcrest) (MPU4) (set 51)", + "m4tenten__ao", "10 X 10 (Barcrest) (MPU4) (set 52)", + "m4tenten__ap", "10 X 10 (Barcrest) (MPU4) (set 53)", + "m4tenten__aq", "10 X 10 (Barcrest) (MPU4) (set 54)", + "m4tenten__ar", "10 X 10 (Barcrest) (MPU4) (set 55)", + "m4tenten__as", "10 X 10 (Barcrest) (MPU4) (set 56)", + "m4tenten__at", "10 X 10 (Barcrest) (MPU4) (set 57)", + "m4tenten__au", "10 X 10 (Barcrest) (MPU4) (set 58)", + "m4tenten__av", "10 X 10 (Barcrest) (MPU4) (set 59)", + "m4tenten__aw", "10 X 10 (Barcrest) (MPU4) (set 60)", + "m4tenten__ax", "10 X 10 (Barcrest) (MPU4) (set 61)", + "m4tenten__ay", "10 X 10 (Barcrest) (MPU4) (set 62)", + "m4tenten__az", "10 X 10 (Barcrest) (MPU4) (set 63)", + "m4tenten__b", "10 X 10 (Barcrest) (MPU4) (set 3)", + "m4tenten__c", "10 X 10 (Barcrest) (MPU4) (set 4)", + "m4tenten__d", "10 X 10 (Barcrest) (MPU4) (set 5)", + "m4tenten__e", "10 X 10 (Barcrest) (MPU4) (set 6)", + "m4tenten__f", "10 X 10 (Barcrest) (MPU4) (set 7)", + "m4tenten__g", "10 X 10 (Barcrest) (MPU4) (set 8)", + "m4tenten__h", "10 X 10 (Barcrest) (MPU4) (set 9)", + "m4tenten__i", "10 X 10 (Barcrest) (MPU4) (set 10)", + "m4tenten__j", "10 X 10 (Barcrest) (MPU4) (set 11)", + "m4tenten__k", "10 X 10 (Barcrest) (MPU4) (set 12)", + "m4tenten__l", "10 X 10 (Barcrest) (MPU4) (set 13)", + "m4tenten__m", "10 X 10 (Barcrest) (MPU4) (set 14)", + "m4tenten__n", "10 X 10 (Barcrest) (MPU4) (set 15)", + "m4tenten__o", "10 X 10 (Barcrest) (MPU4) (set 16)", + "m4tenten__p", "10 X 10 (Barcrest) (MPU4) (set 17)", + "m4tenten__q", "10 X 10 (Barcrest) (MPU4) (set 18)", + "m4tenten__r", "10 X 10 (Barcrest) (MPU4) (set 19)", + "m4tenten__s", "10 X 10 (Barcrest) (MPU4) (set 20)", + "m4tenten__t", "10 X 10 (Barcrest) (MPU4) (set 21)", + "m4tenten__u", "10 X 10 (Barcrest) (MPU4) (set 22)", + "m4tenten__v", "10 X 10 (Barcrest) (MPU4) (set 23)", + "m4tenten__w", "10 X 10 (Barcrest) (MPU4) (set 24)", + "m4tenten__x", "10 X 10 (Barcrest) (MPU4) (set 25)", + "m4tenten__y", "10 X 10 (Barcrest) (MPU4) (set 26)", + "m4tenten__z", "10 X 10 (Barcrest) (MPU4) (set 27)", + "m4thehit", "The Hit (Barcrest) (MPU4)", + "m4themob", "The Mob (Mdm) (MPU4, set 1)", + "m4themoba", "The Mob (Mdm) (MPU4, set 2)", + "m4themobb", "The Mob (Mdm) (MPU4, set 3)", + "m4thestr", "The Streak (Barcrest) (MPU4) (set 1)", + "m4thestr__a", "The Streak (Barcrest) (MPU4) (set 2)", + "m4thestr__b", "The Streak (Barcrest) (MPU4) (set 3)", + "m4thestr__c", "The Streak (Barcrest) (MPU4) (set 4)", + "m4thestr__d", "The Streak (Barcrest) (MPU4) (set 5)", + "m4thestr__e", "The Streak (Barcrest) (MPU4) (set 6)", + "m4thestr__f", "The Streak (Barcrest) (MPU4) (set 7)", + "m4thestr__g", "The Streak (Barcrest) (MPU4) (set 8)", + "m4thestr__h", "The Streak (Barcrest) (MPU4) (set 9)", + "m4thestr__i", "The Streak (Barcrest) (MPU4) (set 10)", + "m4thestr__j", "The Streak (Barcrest) (MPU4) (set 11)", + "m4thestr__k", "The Streak (Barcrest) (MPU4) (set 12)", + "m4thestr__l", "The Streak (Barcrest) (MPU4) (set 13)", + "m4thestr__m", "The Streak (Barcrest) (MPU4) (set 14)", + "m4thestr__n", "The Streak (Barcrest) (MPU4) (set 15)", + "m4thestr__o", "The Streak (Barcrest) (MPU4) (set 16)", + "m4thestr__p", "The Streak (Barcrest) (MPU4) (set 17)", + "m4thestr__q", "The Streak (Barcrest) (MPU4) (set 18)", + "m4thestr__r", "The Streak (Barcrest) (MPU4) (set 19)", + "m4thestr__s", "The Streak (Barcrest) (MPU4) (set 20)", + "m4thestr__t", "The Streak (Barcrest) (MPU4) (set 21)", + "m4thestr__u", "The Streak (Barcrest) (MPU4) (set 22)", + "m4thestr__v", "The Streak (Barcrest) (MPU4) (set 23)", + "m4thestr__w", "The Streak (Barcrest) (MPU4) (set 24)", + "m4thestr__x", "The Streak (Barcrest) (MPU4) (set 25)", + "m4thestr__y", "The Streak (Barcrest) (MPU4) (set 26)", + "m4tic", "Tic Tac Toe (Barcrest) (MPU4) (set 1)", + "m4tic__a", "Tic Tac Toe (Barcrest) (MPU4) (set 2)", + "m4tic__b", "Tic Tac Toe (Barcrest) (MPU4) (set 3)", + "m4tic__c", "Tic Tac Toe (Barcrest) (MPU4) (set 4)", + "m4tic__d", "Tic Tac Toe (Barcrest) (MPU4) (set 5)", + "m4tic__e", "Tic Tac Toe (Barcrest) (MPU4) (set 6)", + "m4tic__f", "Tic Tac Toe (Barcrest) (MPU4) (set 7)", + "m4tic__g", "Tic Tac Toe (Barcrest) (MPU4) (set 8)", + "m4tic__h", "Tic Tac Toe (Barcrest) (MPU4) (set 9)", + "m4tic__i", "Tic Tac Toe (Barcrest) (MPU4) (set 10)", + "m4tic__j", "Tic Tac Toe (Barcrest) (MPU4) (set 11)", + "m4tic__k", "Tic Tac Toe (Barcrest) (MPU4) (set 12)", + "m4tic__l", "Tic Tac Toe (Barcrest) (MPU4) (set 13)", + "m4tic__m", "Tic Tac Toe (Barcrest) (MPU4) (set 14)", + "m4tic__n", "Tic Tac Toe (Barcrest) (MPU4) (set 15)", + "m4tic__o", "Tic Tac Toe (Barcrest) (MPU4) (set 16)", + "m4tic__p", "Tic Tac Toe (Barcrest) (MPU4) (set 17)", + "m4tic__r", "Tic Tac Toe (Barcrest) (MPU4) (set 18)", + "m4tic__s", "Tic Tac Toe (Barcrest) (MPU4) (set 19)", + "m4ticcla", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 1)", + "m4ticcla__0", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 28)", + "m4ticcla__a", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 2)", + "m4ticcla__b", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 3)", + "m4ticcla__c", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 4)", + "m4ticcla__d", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 5)", + "m4ticcla__e", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 6)", + "m4ticcla__f", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 7)", + "m4ticcla__g", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 8)", + "m4ticcla__h", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 9)", + "m4ticcla__i", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 10)", + "m4ticcla__j", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 11)", + "m4ticcla__k", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 12)", + "m4ticcla__l", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 13)", + "m4ticcla__m", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 14)", + "m4ticcla__n", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 15)", + "m4ticcla__o", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 16)", + "m4ticcla__p", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 17)", + "m4ticcla__q", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 18)", + "m4ticcla__r", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 19)", + "m4ticcla__s", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 20)", + "m4ticcla__t", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 21)", + "m4ticcla__u", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 22)", + "m4ticcla__v", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 23)", + "m4ticcla__w", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 24)", + "m4ticcla__x", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 25)", + "m4ticcla__y", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 26)", + "m4ticcla__z", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 27)", + "m4ticglc", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 1)", + "m4ticglc__a", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 2)", + "m4ticglc__b", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 3)", + "m4ticglc__c", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 4)", + "m4ticglc__d", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 5)", + "m4tiktak", "Tic Tak Cash (Barcrest) (MPU4)", + "m4toma", "Tomahawk (Barcrest) (MPU4)", + "m4toot", "Ten Out Of Ten (Barcrest) (MPU4) (set 1)", + "m4toot__0", "Ten Out Of Ten (Barcrest) (MPU4) (set 28)", + "m4toot__1", "Ten Out Of Ten (Barcrest) (MPU4) (set 29)", + "m4toot__2", "Ten Out Of Ten (Barcrest) (MPU4) (set 30)", + "m4toot__3", "Ten Out Of Ten (Barcrest) (MPU4) (set 31)", + "m4toot__4", "Ten Out Of Ten (Barcrest) (MPU4) (set 32)", + "m4toot__5", "Ten Out Of Ten (Barcrest) (MPU4) (set 33)", + "m4toot__6", "Ten Out Of Ten (Barcrest) (MPU4) (set 34)", + "m4toot__7", "Ten Out Of Ten (Barcrest) (MPU4) (set 35)", + "m4toot__8", "Ten Out Of Ten (Barcrest) (MPU4) (set 36)", + "m4toot__9", "Ten Out Of Ten (Barcrest) (MPU4) (set 37)", + "m4toot__a", "Ten Out Of Ten (Barcrest) (MPU4) (set 2)", + "m4toot__aa", "Ten Out Of Ten (Barcrest) (MPU4) (set 38)", + "m4toot__ab", "Ten Out Of Ten (Barcrest) (MPU4) (set 39)", + "m4toot__ac", "Ten Out Of Ten (Barcrest) (MPU4) (set 40)", + "m4toot__ad", "Ten Out Of Ten (Barcrest) (MPU4) (set 41)", + "m4toot__ae", "Ten Out Of Ten (Barcrest) (MPU4) (set 42)", + "m4toot__af", "Ten Out Of Ten (Barcrest) (MPU4) (set 43)", + "m4toot__ag", "Ten Out Of Ten (Barcrest) (MPU4) (set 44)", + "m4toot__ah", "Ten Out Of Ten (Barcrest) (MPU4) (set 45)", + "m4toot__ai", "Ten Out Of Ten (Barcrest) (MPU4) (set 46)", + "m4toot__aj", "Ten Out Of Ten (Barcrest) (MPU4) (set 47)", + "m4toot__ak", "Ten Out Of Ten (Barcrest) (MPU4) (set 48)", + "m4toot__al", "Ten Out Of Ten (Barcrest) (MPU4) (set 49)", + "m4toot__b", "Ten Out Of Ten (Barcrest) (MPU4) (set 3)", + "m4toot__c", "Ten Out Of Ten (Barcrest) (MPU4) (set 4)", + "m4toot__d", "Ten Out Of Ten (Barcrest) (MPU4) (set 5)", + "m4toot__e", "Ten Out Of Ten (Barcrest) (MPU4) (set 6)", + "m4toot__f", "Ten Out Of Ten (Barcrest) (MPU4) (set 7)", + "m4toot__g", "Ten Out Of Ten (Barcrest) (MPU4) (set 8)", + "m4toot__h", "Ten Out Of Ten (Barcrest) (MPU4) (set 9)", + "m4toot__i", "Ten Out Of Ten (Barcrest) (MPU4) (set 10)", + "m4toot__j", "Ten Out Of Ten (Barcrest) (MPU4) (set 11)", + "m4toot__k", "Ten Out Of Ten (Barcrest) (MPU4) (set 12)", + "m4toot__l", "Ten Out Of Ten (Barcrest) (MPU4) (set 13)", + "m4toot__m", "Ten Out Of Ten (Barcrest) (MPU4) (set 14)", + "m4toot__n", "Ten Out Of Ten (Barcrest) (MPU4) (set 15)", + "m4toot__o", "Ten Out Of Ten (Barcrest) (MPU4) (set 16)", + "m4toot__p", "Ten Out Of Ten (Barcrest) (MPU4) (set 17)", + "m4toot__q", "Ten Out Of Ten (Barcrest) (MPU4) (set 18)", + "m4toot__r", "Ten Out Of Ten (Barcrest) (MPU4) (set 19)", + "m4toot__s", "Ten Out Of Ten (Barcrest) (MPU4) (set 20)", + "m4toot__t", "Ten Out Of Ten (Barcrest) (MPU4) (set 21)", + "m4toot__u", "Ten Out Of Ten (Barcrest) (MPU4) (set 22)", + "m4toot__v", "Ten Out Of Ten (Barcrest) (MPU4) (set 23)", + "m4toot__w", "Ten Out Of Ten (Barcrest) (MPU4) (set 24)", + "m4toot__x", "Ten Out Of Ten (Barcrest) (MPU4) (set 25)", + "m4toot__y", "Ten Out Of Ten (Barcrest) (MPU4) (set 26)", + "m4toot__z", "Ten Out Of Ten (Barcrest) (MPU4) (set 27)", + "m4toot__za", "Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3, hack?)", + "m4toot__zb", "Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4, hack?)", + "m4topact", "Top Action (Barcrest) (Dutch) (MPU4) (set 1)", + "m4topacta", "Top Action (Barcrest) (Dutch) (MPU4) (set 2)", + "m4topdk", "Top Deck (Barcrest) (Dutch) (MPU4)", + "m4topdog", "Top Dog (Barcrest) (MPU4) (set 1)", + "m4topdog__a", "Top Dog (Barcrest) (MPU4) (set 2)", + "m4topdog__b", "Top Dog (Barcrest) (MPU4) (set 3)", + "m4topdog__c", "Top Dog (Barcrest) (MPU4) (set 4)", + "m4topdog__d", "Top Dog (Barcrest) (MPU4) (set 5)", + "m4topdog__e", "Top Dog (Barcrest) (MPU4) (set 6)", + "m4topdog__f", "Top Dog (Barcrest) (MPU4) (set 7)", + "m4topdog__g", "Top Dog (Barcrest) (MPU4) (set 8)", + "m4topdog__h", "Top Dog (Barcrest) (MPU4) (set 9)", + "m4topdog__i", "Top Dog (Barcrest) (MPU4) (set 10)", + "m4topdog__j", "Top Dog (Barcrest) (MPU4) (set 11)", + "m4topdog__k", "Top Dog (Barcrest) (MPU4) (set 12)", + "m4topdog__l", "Top Dog (Barcrest) (MPU4) (set 13)", + "m4topdog__m", "Top Dog (Barcrest) (MPU4) (set 14)", + "m4topdog__n", "Top Dog (Barcrest) (MPU4) (set 15)", + "m4topdog__o", "Top Dog (Barcrest) (MPU4) (set 16)", + "m4topdog__p", "Top Dog (Barcrest) (MPU4) (set 17)", + "m4topdog__q", "Top Dog (Barcrest) (MPU4) (set 18)", + "m4topdog__r", "Top Dog (Barcrest) (MPU4) (set 19)", + "m4topdog__s", "Top Dog (Barcrest) (MPU4) (set 20)", + "m4topdog__t", "Top Dog (Barcrest) (MPU4) (set 21)", + "m4topdog__u", "Top Dog (Barcrest) (MPU4) (set 22)", + "m4topdog__v", "Top Dog (Barcrest) (MPU4) (set 23)", + "m4topdog__w", "Top Dog (Barcrest) (MPU4) (set 24)", + "m4topdog__x", "Top Dog (Barcrest) (MPU4) (set 25)", + "m4topdog__y", "Top Dog (Barcrest) (MPU4) (set 26)", + "m4topdog__z", "Top Dog (Barcrest) (MPU4) (set 27)", + "m4topgr", "Top Gear (Barcrest) (MPU4)", + "m4toplot", "Top The Lot (Barcrest) (MPU4, T4L 1.0)", + "m4toprn", "Top Run (Barcrest) (Dutch) (MPU4)", + "m4topst", "Top Stop (Barcrest) (MPU4)", + "m4toptak", "Top Take (Barcrest) (MPU4)", + "m4topten", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4)", + "m4topten__0", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2YD)", + "m4topten__1", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2H)", + "m4topten__2", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2K)", + "m4topten__3", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2R)", + "m4topten__4", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2)", + "m4topten__5", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2Y)", + "m4topten__6", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2AD)", + "m4topten__7", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2B)", + "m4topten__8", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2BD)", + "m4topten__9", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2C)", + "m4topten__a", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0, hack?)", + "m4topten__aa", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2D)", + "m4topten__ab", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2DH)", + "m4topten__ac", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2KD)", + "m4topten__ad", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2RD)", + "m4topten__ae", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2YD)", + "m4topten__af", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2H)", + "m4topten__ag", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2K)", + "m4topten__ah", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2R)", + "m4topten__ai", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2)", + "m4topten__aj", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2Y)", + "m4topten__ak", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4AD)", + "m4topten__al", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4B)", + "m4topten__am", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4BD)", + "m4topten__an", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4C)", + "m4topten__ao", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4D)", + "m4topten__ap", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4DH)", + "m4topten__aq", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4KD)", + "m4topten__ar", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4RD)", + "m4topten__as", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4YD)", + "m4topten__at", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4H)", + "m4topten__au", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4K)", + "m4topten__av", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4R)", + "m4topten__aw", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4Y)", + "m4topten__ax", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.1)", + "m4topten__b", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2, hack?)", + "m4topten__e", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0AD)", + "m4topten__f", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0B)", + "m4topten__g", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0BD)", + "m4topten__h", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0C)", + "m4topten__i", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0D)", + "m4topten__j", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0DH)", + "m4topten__k", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0KD)", + "m4topten__l", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0RD)", + "m4topten__m", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0YD)", + "m4topten__n", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0H)", + "m4topten__o", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0K)", + "m4topten__p", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0R)", + "m4topten__q", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0)", + "m4topten__r", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0Y)", + "m4topten__s", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2AD)", + "m4topten__t", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2B)", + "m4topten__u", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2BD)", + "m4topten__v", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2C)", + "m4topten__w", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2D)", + "m4topten__x", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2DH)", + "m4topten__y", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2KD)", + "m4topten__z", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2RD)", + "m4toptena", "Top Tenner (Barcrest) (MPU4, Mod 2 type, TP 2.7)", + "m4toptim", "Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 1)", + "m4toptima", "Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 2)", + "m4tornad", "Tornado (Qps) (MPU4) (set 1)", + "m4tornad__a", "Tornado (Qps) (MPU4) (set 2)", + "m4tornad__b", "Tornado (Qps) (MPU4) (set 3)", + "m4tornad__c", "Tornado (Qps) (MPU4) (set 4)", + "m4tornad__d", "Tornado (Qps) (MPU4) (set 5)", + "m4tornad__e", "Tornado (Qps) (MPU4) (set 6)", + "m4tornad__f", "Tornado (Qps) (MPU4) (set 7)", + "m4tornad__g", "Tornado (Qps) (MPU4) (set 8)", + "m4treel", "Turbo Reels (unknown) (MPU4?) (set 1)", + "m4treela", "Turbo Reels (unknown) (MPU4?) (set 2)", + "m4trex", "Trex (Bwb) (MPU4) (set 1)", + "m4trex__a", "Trex (Bwb) (MPU4) (set 2)", + "m4trex__b", "Trex (Bwb) (MPU4) (set 3)", + "m4trex__c", "Trex (Bwb) (MPU4) (set 4)", + "m4trex__d", "Trex (Bwb) (MPU4) (set 5)", + "m4trex__e", "Trex (Bwb) (MPU4) (set 6)", + "m4trex__f", "Trex (Bwb) (MPU4) (set 7)", + "m4trex__g", "Trex (Bwb) (MPU4) (set 8)", + "m4trex__h", "Trex (Bwb) (MPU4) (set 9)", + "m4trex__i", "Trex (Bwb) (MPU4) (set 10)", + "m4trex__j", "Trex (Bwb) (MPU4) (set 11)", + "m4trex__k", "Trex (Bwb) (MPU4) (set 12)", + "m4trex__l", "Trex (Bwb) (MPU4) (set 13)", + "m4trg", "Turbo Reel Gambler (Avantime?) (MPU4) (set 1)", + "m4trg__0", "Turbo Reel Gambler (Avantime?) (MPU4) (set 28)", + "m4trg__1", "Turbo Reel Gambler (Avantime?) (MPU4) (set 29)", + "m4trg__2", "Turbo Reel Gambler (Avantime?) (MPU4) (set 30)", + "m4trg__3", "Turbo Reel Gambler (Avantime?) (MPU4) (set 31)", + "m4trg__4", "Turbo Reel Gambler (Avantime?) (MPU4) (set 32)", + "m4trg__a", "Turbo Reel Gambler (Avantime?) (MPU4) (set 2)", + "m4trg__b", "Turbo Reel Gambler (Avantime?) (MPU4) (set 3)", + "m4trg__c", "Turbo Reel Gambler (Avantime?) (MPU4) (set 4)", + "m4trg__d", "Turbo Reel Gambler (Avantime?) (MPU4) (set 5)", + "m4trg__e", "Turbo Reel Gambler (Avantime?) (MPU4) (set 6)", + "m4trg__f", "Turbo Reel Gambler (Avantime?) (MPU4) (set 7)", + "m4trg__g", "Turbo Reel Gambler (Avantime?) (MPU4) (set 8)", + "m4trg__h", "Turbo Reel Gambler (Avantime?) (MPU4) (set 9)", + "m4trg__i", "Turbo Reel Gambler (Avantime?) (MPU4) (set 10)", + "m4trg__j", "Turbo Reel Gambler (Avantime?) (MPU4) (set 11)", + "m4trg__k", "Turbo Reel Gambler (Avantime?) (MPU4) (set 12)", + "m4trg__l", "Turbo Reel Gambler (Avantime?) (MPU4) (set 13)", + "m4trg__m", "Turbo Reel Gambler (Avantime?) (MPU4) (set 14)", + "m4trg__n", "Turbo Reel Gambler (Avantime?) (MPU4) (set 15)", + "m4trg__o", "Turbo Reel Gambler (Avantime?) (MPU4) (set 16)", + "m4trg__p", "Turbo Reel Gambler (Avantime?) (MPU4) (set 17)", + "m4trg__q", "Turbo Reel Gambler (Avantime?) (MPU4) (set 18)", + "m4trg__r", "Turbo Reel Gambler (Avantime?) (MPU4) (set 19)", + "m4trg__s", "Turbo Reel Gambler (Avantime?) (MPU4) (set 20)", + "m4trg__t", "Turbo Reel Gambler (Avantime?) (MPU4) (set 21)", + "m4trg__u", "Turbo Reel Gambler (Avantime?) (MPU4) (set 22)", + "m4trg__v", "Turbo Reel Gambler (Avantime?) (MPU4) (set 23)", + "m4trg__w", "Turbo Reel Gambler (Avantime?) (MPU4) (set 24)", + "m4trg__x", "Turbo Reel Gambler (Avantime?) (MPU4) (set 25)", + "m4trg__y", "Turbo Reel Gambler (Avantime?) (MPU4) (set 26)", + "m4trg__z", "Turbo Reel Gambler (Avantime?) (MPU4) (set 27)", + "m4tribnk", "Triple Bank (Barcrest) (Dutch) (MPU4)", + "m4tricol", "Tricolor (Barcrest) (Dutch) (MPU4)", + "m4tridic", "Triple Dice (Barcrest) (Dutch) (MPU4)", + "m4trimad", "Triple Madness (Union) (MPU4)", + "m4tropcl", "Tropicana Club (Barcrest) (MPU4) (set 1)", + "m4tropcla", "Tropicana Club (Barcrest) (MPU4) (set 2)", + "m4tropclb", "Tropicana Club (Barcrest) (MPU4) (set 3)", + "m4tropclc", "Tropicana Club (Barcrest) (MPU4) (set 4)", + "m4tropcld", "Tropicana Club (Barcrest) (MPU4) (set 5)", + "m4tst", "MPU4 Unit Test (Program 4)", + "m4tst2", "MPU4 Unit Test (Program 2)", + "m4ttak", "Tic Tac Take (unknown) (MPU4)", + "m4ttdia", "Ten Ten Do It Again (Barcrest) (MPU4) (set 1)", + "m4ttdia__a", "Ten Ten Do It Again (Barcrest) (MPU4) (set 2)", + "m4ttdia__b", "Ten Ten Do It Again (Barcrest) (MPU4) (set 3)", + "m4ttdia__c", "Ten Ten Do It Again (Barcrest) (MPU4) (set 4)", + "m4ttdia__d", "Ten Ten Do It Again (Barcrest) (MPU4) (set 5)", + "m4ttdia__e", "Ten Ten Do It Again (Barcrest) (MPU4) (set 6)", + "m4ttdia__f", "Ten Ten Do It Again (Barcrest) (MPU4) (set 7)", + "m4ttdia__g", "Ten Ten Do It Again (Barcrest) (MPU4) (set 8)", + "m4ttdia__h", "Ten Ten Do It Again (Barcrest) (MPU4) (set 9)", + "m4ttdia__i", "Ten Ten Do It Again (Barcrest) (MPU4) (set 10)", + "m4ttdia__j", "Ten Ten Do It Again (Barcrest) (MPU4) (set 11)", + "m4ttdia__k", "Ten Ten Do It Again (Barcrest) (MPU4) (set 12)", + "m4ttdia__l", "Ten Ten Do It Again (Barcrest) (MPU4) (set 13)", + "m4ttdia__m", "Ten Ten Do It Again (Barcrest) (MPU4) (set 14)", + "m4ttrail", "Treasure Trail (Empire) (MPU4, set 1)", + "m4ttraila", "Treasure Trail (Empire) (MPU4, set 2)", + "m4ttrailb", "Treasure Trail (Empire) (MPU4, set 3)", + "m4tupen", "Tuppenny Cracker (Barcrest - Bootleg) (MPU4)", + "m4tutcl", "Tutti Fruity Classic (Barcrest) (MPU4) (set 1)", + "m4tutcl__a", "Tutti Fruity Classic (Barcrest) (MPU4) (set 2)", + "m4tutcl__b", "Tutti Fruity Classic (Barcrest) (MPU4) (set 3)", + "m4tutcl__c", "Tutti Fruity Classic (Barcrest) (MPU4) (set 4)", + "m4tutcl__d", "Tutti Fruity Classic (Barcrest) (MPU4) (set 5)", + "m4tutcl__e", "Tutti Fruity Classic (Barcrest) (MPU4) (set 6)", + "m4tutcl__f", "Tutti Fruity Classic (Barcrest) (MPU4) (set 7)", + "m4tutcl__g", "Tutti Fruity Classic (Barcrest) (MPU4) (set 8)", + "m4tutcl__h", "Tutti Fruity Classic (Barcrest) (MPU4) (set 9)", + "m4tutcl__i", "Tutti Fruity Classic (Barcrest) (MPU4) (set 10)", + "m4tutcl__j", "Tutti Fruity Classic (Barcrest) (MPU4) (set 11)", + "m4tutcl__k", "Tutti Fruity Classic (Barcrest) (MPU4) (set 12)", + "m4tutfrt", "Tutti Fruity (Barcrest) (MPU4) (set 1)", + "m4tutfrt__0", "Tutti Fruity (Barcrest) (MPU4) (set 28)", + "m4tutfrt__1", "Tutti Fruity (Barcrest) (MPU4) (set 29)", + "m4tutfrt__2", "Tutti Fruity (Barcrest) (MPU4) (set 30)", + "m4tutfrt__3", "Tutti Fruity (Barcrest) (MPU4) (set 31)", + "m4tutfrt__4", "Tutti Fruity (Barcrest) (MPU4) (set 32)", + "m4tutfrt__5", "Tutti Fruity (Barcrest) (MPU4) (set 33)", + "m4tutfrt__6", "Tutti Fruity (Barcrest) (MPU4) (set 34)", + "m4tutfrt__7", "Tutti Fruity (Barcrest) (MPU4) (set 35)", + "m4tutfrt__8", "Tutti Fruity (Barcrest) (MPU4) (set 36)", + "m4tutfrt__9", "Tutti Fruity (Barcrest) (MPU4) (set 37)", + "m4tutfrt__a", "Tutti Fruity (Barcrest) (MPU4) (set 2)", + "m4tutfrt__a0", "Tutti Fruity (Barcrest) (MPU4) (set 64)", + "m4tutfrt__a1", "Tutti Fruity (Barcrest) (MPU4) (set 65)", + "m4tutfrt__a2", "Tutti Fruity (Barcrest) (MPU4) (set 66)", + "m4tutfrt__a3", "Tutti Fruity (Barcrest) (MPU4) (set 67)", + "m4tutfrt__a4", "Tutti Fruity (Barcrest) (MPU4) (set 68)", + "m4tutfrt__a5", "Tutti Fruity (Barcrest) (MPU4) (set 69)", + "m4tutfrt__aa", "Tutti Fruity (Barcrest) (MPU4) (set 38)", + "m4tutfrt__ab", "Tutti Fruity (Barcrest) (MPU4) (set 39)", + "m4tutfrt__ac", "Tutti Fruity (Barcrest) (MPU4) (set 40)", + "m4tutfrt__ad", "Tutti Fruity (Barcrest) (MPU4) (set 41)", + "m4tutfrt__ae", "Tutti Fruity (Barcrest) (MPU4) (set 42)", + "m4tutfrt__af", "Tutti Fruity (Barcrest) (MPU4) (set 43)", + "m4tutfrt__ag", "Tutti Fruity (Barcrest) (MPU4) (set 44)", + "m4tutfrt__ai", "Tutti Fruity (Barcrest) (MPU4) (set 46)", + "m4tutfrt__aj", "Tutti Fruity (Barcrest) (MPU4) (set 47)", + "m4tutfrt__ak", "Tutti Fruity (Barcrest) (MPU4) (set 48)", + "m4tutfrt__al", "Tutti Fruity (Barcrest) (MPU4) (set 49)", + "m4tutfrt__am", "Tutti Fruity (Barcrest) (MPU4) (set 50)", + "m4tutfrt__an", "Tutti Fruity (Barcrest) (MPU4) (set 51)", + "m4tutfrt__ao", "Tutti Fruity (Barcrest) (MPU4) (set 52)", + "m4tutfrt__ap", "Tutti Fruity (Barcrest) (MPU4) (set 53)", + "m4tutfrt__aq", "Tutti Fruity (Barcrest) (MPU4) (set 54)", + "m4tutfrt__ar", "Tutti Fruity (Barcrest) (MPU4) (set 55)", + "m4tutfrt__as", "Tutti Fruity (Barcrest) (MPU4) (set 56)", + "m4tutfrt__at", "Tutti Fruity (Barcrest) (MPU4) (set 57)", + "m4tutfrt__au", "Tutti Fruity (Barcrest) (MPU4) (set 58)", + "m4tutfrt__av", "Tutti Fruity (Barcrest) (MPU4) (set 59)", + "m4tutfrt__aw", "Tutti Fruity (Barcrest) (MPU4) (set 60)", + "m4tutfrt__ax", "Tutti Fruity (Barcrest) (MPU4) (set 61)", + "m4tutfrt__ay", "Tutti Fruity (Barcrest) (MPU4) (set 62)", + "m4tutfrt__az", "Tutti Fruity (Barcrest) (MPU4) (set 63)", + "m4tutfrt__b", "Tutti Fruity (Barcrest) (MPU4) (set 3)", + "m4tutfrt__c", "Tutti Fruity (Barcrest) (MPU4) (set 4)", + "m4tutfrt__d", "Tutti Fruity (Barcrest) (MPU4) (set 5)", + "m4tutfrt__e", "Tutti Fruity (Barcrest) (MPU4) (set 6)", + "m4tutfrt__f", "Tutti Fruity (Barcrest) (MPU4) (set 7)", + "m4tutfrt__g", "Tutti Fruity (Barcrest) (MPU4) (set 8)", + "m4tutfrt__h", "Tutti Fruity (Barcrest) (MPU4) (set 9)", + "m4tutfrt__i", "Tutti Fruity (Barcrest) (MPU4) (set 10)", + "m4tutfrt__j", "Tutti Fruity (Barcrest) (MPU4) (set 11)", + "m4tutfrt__k", "Tutti Fruity (Barcrest) (MPU4) (set 12)", + "m4tutfrt__l", "Tutti Fruity (Barcrest) (MPU4) (set 13)", + "m4tutfrt__m", "Tutti Fruity (Barcrest) (MPU4) (set 14)", + "m4tutfrt__n", "Tutti Fruity (Barcrest) (MPU4) (set 15)", + "m4tutfrt__o", "Tutti Fruity (Barcrest) (MPU4) (set 16)", + "m4tutfrt__p", "Tutti Fruity (Barcrest) (MPU4) (set 17)", + "m4tutfrt__q", "Tutti Fruity (Barcrest) (MPU4) (set 18)", + "m4tutfrt__r", "Tutti Fruity (Barcrest) (MPU4) (set 19)", + "m4tutfrt__s", "Tutti Fruity (Barcrest) (MPU4) (set 20)", + "m4tutfrt__t", "Tutti Fruity (Barcrest) (MPU4) (set 21)", + "m4tutfrt__u", "Tutti Fruity (Barcrest) (MPU4) (set 22)", + "m4tutfrt__v", "Tutti Fruity (Barcrest) (MPU4) (set 23)", + "m4tutfrt__w", "Tutti Fruity (Barcrest) (MPU4) (set 24)", + "m4tutfrt__x", "Tutti Fruity (Barcrest) (MPU4) (set 25)", + "m4tutfrt__y", "Tutti Fruity (Barcrest) (MPU4) (set 26)", + "m4tutfrt__z", "Tutti Fruity (Barcrest) (MPU4) (set 27)", + "m4twilgt", "Twilight (Barcrest) (Dutch) (MPU4)", + "m4twintm", "Twin Timer (Barcrest) (MPU4) (D2T 1.1)", + "m4twist", "Twist Again (Barcrest) (MPU4) (set 1)", + "m4twista", "Twist Again (Barcrest) (MPU4) (set 2)", + "m4twistb", "Twist Again (Barcrest) (MPU4) (set 3)", + "m4twstcl", "Twister Club (Crystal) (MPU4) (set 1)", + "m4twstcla", "Twister Club (Crystal) (MPU4) (set 2)", + "m4twstclb", "Twister Club (Crystal) (MPU4) (set 3)", + "m4twstr", "Twister (Crystal) (MPU4) (set 1)", + "m4twstra", "Twister (Crystal) (MPU4) (set 2)", + "m4twstrb", "Twister (Crystal) (MPU4) (set 3)", + "m4twstrc", "Twister (Crystal) (MPU4) (set 4)", + "m4twstrd", "Twister (Crystal) (MPU4) (set 5)", + "m4tylb", "Thank Your Lucky Bars (Crystal) (MPU4) (set 1)", + "m4tylba", "Thank Your Lucky Bars (Crystal) (MPU4) (set 2)", + "m4typcl", "Take Your Pick Club (Barcrest) (MPU4) (set 1)", + "m4typcl__a", "Take Your Pick Club (Barcrest) (MPU4) (set 2)", + "m4typcl__b", "Take Your Pick Club (Barcrest) (MPU4) (set 3)", + "m4typcl__c", "Take Your Pick Club (Barcrest) (MPU4) (set 4)", + "m4typcl__d", "Take Your Pick Club (Barcrest) (MPU4) (set 5)", + "m4unibox", "Unibox (Union) (MPU4, set 1)", + "m4uniboxa", "Unibox (Union) (MPU4, set 2)", + "m4unique", "Unique (Union) (MPU4, set 1)", + "m4uniquep", "Unique (Union) (MPU4, set 2)", + "m4univ", "Universe (Barcrest) (Dutch) (MPU4) (DUN)", + "m4unkjok", "unknown MPU4 'Joker' (MPU4?) (set 1)", + "m4unkjoka", "unknown MPU4 'Joker' (MPU4?) (set 2)", + "m4unkjokb", "unknown MPU4 'Joker' (MPU4?) (set 3)", + "m4unkjokc", "unknown MPU4 'Joker' (MPU4?) (set 4)", + "m4uuaw", "Up Up and Away (Barcrest) (MPU4) (set 1)", + "m4uuaw__0", "Up Up and Away (Barcrest) (MPU4) (set 28)", + "m4uuaw__1", "Up Up and Away (Barcrest) (MPU4) (set 29)", + "m4uuaw__2", "Up Up and Away (Barcrest) (MPU4) (set 30)", + "m4uuaw__3", "Up Up and Away (Barcrest) (MPU4) (set 31)", + "m4uuaw__4", "Up Up and Away (Barcrest) (MPU4) (set 32)", + "m4uuaw__5", "Up Up and Away (Barcrest) (MPU4) (set 33)", + "m4uuaw__6", "Up Up and Away (Barcrest) (MPU4) (set 34)", + "m4uuaw__7", "Up Up and Away (Barcrest) (MPU4) (set 35)", + "m4uuaw__8", "Up Up and Away (Barcrest) (MPU4) (set 36)", + "m4uuaw__9", "Up Up and Away (Barcrest) (MPU4) (set 37)", + "m4uuaw__a", "Up Up and Away (Barcrest) (MPU4) (set 2)", + "m4uuaw__aa", "Up Up and Away (Barcrest) (MPU4) (set 38)", + "m4uuaw__ab", "Up Up and Away (Barcrest) (MPU4) (set 39)", + "m4uuaw__ac", "Up Up and Away (Barcrest) (MPU4) (set 40)", + "m4uuaw__ad", "Up Up and Away (Barcrest) (MPU4) (set 41)", + "m4uuaw__ae", "Up Up and Away (Barcrest) (MPU4) (set 42)", + "m4uuaw__af", "Up Up and Away (Barcrest) (MPU4) (set 43)", + "m4uuaw__ag", "Up Up and Away (Barcrest) (MPU4) (set 44)", + "m4uuaw__ah", "Up Up and Away (Barcrest) (MPU4) (set 45)", + "m4uuaw__ai", "Up Up and Away (Barcrest) (MPU4) (set 46)", + "m4uuaw__aj", "Up Up and Away (Barcrest) (MPU4) (set 47)", + "m4uuaw__ak", "Up Up and Away (Barcrest) (MPU4) (set 48)", + "m4uuaw__al", "Up Up and Away (Barcrest) (MPU4) (set 49)", + "m4uuaw__am", "Up Up and Away (Barcrest) (MPU4) (set 50)", + "m4uuaw__an", "Up Up and Away (Barcrest) (MPU4) (set 51)", + "m4uuaw__ao", "Up Up and Away (Barcrest) (MPU4) (set 52)", + "m4uuaw__ap", "Up Up and Away (Barcrest) (MPU4) (set 53)", + "m4uuaw__aq", "Up Up and Away (Barcrest) (MPU4) (set 54)", + "m4uuaw__b", "Up Up and Away (Barcrest) (MPU4) (set 3)", + "m4uuaw__c", "Up Up and Away (Barcrest) (MPU4) (set 4)", + "m4uuaw__d", "Up Up and Away (Barcrest) (MPU4) (set 5)", + "m4uuaw__e", "Up Up and Away (Barcrest) (MPU4) (set 6)", + "m4uuaw__f", "Up Up and Away (Barcrest) (MPU4) (set 7)", + "m4uuaw__g", "Up Up and Away (Barcrest) (MPU4) (set 8)", + "m4uuaw__h", "Up Up and Away (Barcrest) (MPU4) (set 9)", + "m4uuaw__i", "Up Up and Away (Barcrest) (MPU4) (set 10)", + "m4uuaw__j", "Up Up and Away (Barcrest) (MPU4) (set 11)", + "m4uuaw__k", "Up Up and Away (Barcrest) (MPU4) (set 12)", + "m4uuaw__l", "Up Up and Away (Barcrest) (MPU4) (set 13)", + "m4uuaw__m", "Up Up and Away (Barcrest) (MPU4) (set 14)", + "m4uuaw__n", "Up Up and Away (Barcrest) (MPU4) (set 15)", + "m4uuaw__o", "Up Up and Away (Barcrest) (MPU4) (set 16)", + "m4uuaw__p", "Up Up and Away (Barcrest) (MPU4) (set 17)", + "m4uuaw__q", "Up Up and Away (Barcrest) (MPU4) (set 18)", + "m4uuaw__r", "Up Up and Away (Barcrest) (MPU4) (set 19)", + "m4uuaw__s", "Up Up and Away (Barcrest) (MPU4) (set 20)", + "m4uuaw__t", "Up Up and Away (Barcrest) (MPU4) (set 21)", + "m4uuaw__u", "Up Up and Away (Barcrest) (MPU4) (set 22)", + "m4uuaw__v", "Up Up and Away (Barcrest) (MPU4) (set 23)", + "m4uuaw__w", "Up Up and Away (Barcrest) (MPU4) (set 24)", + "m4uuaw__x", "Up Up and Away (Barcrest) (MPU4) (set 25)", + "m4uuaw__y", "Up Up and Away (Barcrest) (MPU4) (set 26)", + "m4uuaw__z", "Up Up and Away (Barcrest) (MPU4) (set 27)", + "m4vdexpr", "Voodoo Express (Bwb) (MPU4) (set 1)", + "m4vdexpr__a", "Voodoo Express (Bwb) (MPU4) (set 2)", + "m4vdexpr__b", "Voodoo Express (Bwb) (MPU4) (set 3)", + "m4vdexpr__c", "Voodoo Express (Bwb) (MPU4) (set 4)", + "m4vdexpr__d", "Voodoo Express (Bwb) (MPU4) (set 5)", + "m4vegast", "Vegas Strip (Barcrest) (MPU4) (set 1)", + "m4vegast__a", "Vegas Strip (Barcrest) (MPU4) (set 2)", + "m4vegast__b", "Vegas Strip (Barcrest) (MPU4) (set 3)", + "m4vegast__c", "Vegas Strip (Barcrest) (MPU4) (set 4)", + "m4vegast__d", "Vegas Strip (Barcrest) (MPU4) (set 5)", + "m4vegast__e", "Vegas Strip (Barcrest) (MPU4) (set 6)", + "m4vegast__f", "Vegas Strip (Barcrest) (MPU4) (set 7)", + "m4vegast__g", "Vegas Strip (Barcrest) (MPU4) (set 8)", + "m4vegast__h", "Vegas Strip (Barcrest) (MPU4) (set 9)", + "m4vegast__i", "Vegas Strip (Barcrest) (MPU4) (set 10)", + "m4vegast__j", "Vegas Strip (Barcrest) (MPU4) (set 11)", + "m4vegast__k", "Vegas Strip (Barcrest) (MPU4) (set 12)", + "m4vegast__l", "Vegas Strip (Barcrest) (MPU4) (set 13)", + "m4vegast__m", "Vegas Strip (Barcrest) (MPU4) (set 14)", + "m4vegast__n", "Vegas Strip (Barcrest) (MPU4) (set 15)", + "m4vegast__o", "Vegas Strip (Barcrest) (MPU4) (set 16)", + "m4vegast__p", "Vegas Strip (Barcrest) (MPU4) (set 17)", + "m4vegast__q", "Vegas Strip (Barcrest) (MPU4) (set 18)", + "m4vegast__r", "Vegas Strip (Barcrest) (MPU4) (set 19)", + "m4vegast__s", "Vegas Strip (Barcrest) (MPU4) (set 20)", + "m4vegast__t", "Vegas Strip (Barcrest) (MPU4) (set 21)", + "m4vegast__u", "Vegas Strip (Barcrest) (MPU4) (set 22)", + "m4vegast__v", "Vegas Strip (Barcrest) (MPU4) (set 23)", + "m4vegast__w", "Vegas Strip (Barcrest) (MPU4) (set 24)", + "m4vegast__x", "Vegas Strip (Barcrest) (MPU4) (set 25)", + "m4vegastg", "Vegas Strip (Barcrest) [German] (MPU4)", + "m4vfm", "Value For Money (Global) (MPU4)", + "m4vivaes", "Viva Espana (Barcrest) (MPU4) (set 1)", + "m4vivaes__0", "Viva Espana (Barcrest) (MPU4) (set 28)", + "m4vivaes__1", "Viva Espana (Barcrest) (MPU4) (set 29)", + "m4vivaes__2", "Viva Espana (Barcrest) (MPU4) (set 30)", + "m4vivaes__3", "Viva Espana (Barcrest) (MPU4) (set 31)", + "m4vivaes__4", "Viva Espana (Barcrest) (MPU4) (set 32)", + "m4vivaes__5", "Viva Espana (Barcrest) (MPU4) (set 33)", + "m4vivaes__6", "Viva Espana (Barcrest) (MPU4) (set 34)", + "m4vivaes__7", "Viva Espana (Barcrest) (MPU4) (set 35)", + "m4vivaes__8", "Viva Espana (Barcrest) (MPU4) (set 36)", + "m4vivaes__9", "Viva Espana (Barcrest) (MPU4) (set 37)", + "m4vivaes__a", "Viva Espana (Barcrest) (MPU4) (set 2)", + "m4vivaes__aa", "Viva Espana (Barcrest) (MPU4) (set 38)", + "m4vivaes__ab", "Viva Espana (Barcrest) (MPU4) (set 39)", + "m4vivaes__ac", "Viva Espana (Barcrest) (MPU4) (set 40)", + "m4vivaes__ad", "Viva Espana (Barcrest) (MPU4) (set 41)", + "m4vivaes__ae", "Viva Espana (Barcrest) (MPU4) (set 42)", + "m4vivaes__af", "Viva Espana (Barcrest) (MPU4) (set 43)", + "m4vivaes__ag", "Viva Espana (Barcrest) (MPU4) (set 44)", + "m4vivaes__ah", "Viva Espana (Barcrest) (MPU4) (set 45)", + "m4vivaes__ai", "Viva Espana (Barcrest) (MPU4) (set 46)", + "m4vivaes__aj", "Viva Espana (Barcrest) (MPU4) (set 47)", + "m4vivaes__ak", "Viva Espana (Barcrest) (MPU4) (set 48)", + "m4vivaes__al", "Viva Espana (Barcrest) (MPU4) (set 49)", + "m4vivaes__am", "Viva Espana (Barcrest) (MPU4) (set 50)", + "m4vivaes__an", "Viva Espana (Barcrest) (MPU4) (set 51)", + "m4vivaes__ao", "Viva Espana (Barcrest) (MPU4) (set 52)", + "m4vivaes__ap", "Viva Espana (Barcrest) (MPU4) (set 53)", + "m4vivaes__b", "Viva Espana (Barcrest) (MPU4) (set 3)", + "m4vivaes__c", "Viva Espana (Barcrest) (MPU4) (set 4)", + "m4vivaes__d", "Viva Espana (Barcrest) (MPU4) (set 5)", + "m4vivaes__e", "Viva Espana (Barcrest) (MPU4) (set 6)", + "m4vivaes__f", "Viva Espana (Barcrest) (MPU4) (set 7)", + "m4vivaes__g", "Viva Espana (Barcrest) (MPU4) (set 8)", + "m4vivaes__h", "Viva Espana (Barcrest) (MPU4) (set 9)", + "m4vivaes__i", "Viva Espana (Barcrest) (MPU4) (set 10)", + "m4vivaes__j", "Viva Espana (Barcrest) (MPU4) (set 11)", + "m4vivaes__k", "Viva Espana (Barcrest) (MPU4) (set 12)", + "m4vivaes__l", "Viva Espana (Barcrest) (MPU4) (set 13)", + "m4vivaes__m", "Viva Espana (Barcrest) (MPU4) (set 14)", + "m4vivaes__n", "Viva Espana (Barcrest) (MPU4) (set 15)", + "m4vivaes__o", "Viva Espana (Barcrest) (MPU4) (set 16)", + "m4vivaes__p", "Viva Espana (Barcrest) (MPU4) (set 17)", + "m4vivaes__q", "Viva Espana (Barcrest) (MPU4) (set 18)", + "m4vivaes__r", "Viva Espana (Barcrest) (MPU4) (set 19)", + "m4vivaes__s", "Viva Espana (Barcrest) (MPU4) (set 20)", + "m4vivaes__t", "Viva Espana (Barcrest) (MPU4) (set 21)", + "m4vivaes__u", "Viva Espana (Barcrest) (MPU4) (set 22)", + "m4vivaes__v", "Viva Espana (Barcrest) (MPU4) (set 23)", + "m4vivaes__w", "Viva Espana (Barcrest) (MPU4) (set 24)", + "m4vivaes__x", "Viva Espana (Barcrest) (MPU4) (set 25)", + "m4vivaes__y", "Viva Espana (Barcrest) (MPU4) (set 26)", + "m4vivaes__z", "Viva Espana (Barcrest) (MPU4) (set 27)", + "m4vivalv", "Viva Las Vegas (Barcrest) (MPU4) (set 1)", + "m4vivalv__0", "Viva Las Vegas (Barcrest) (MPU4) (set 28)", + "m4vivalv__1", "Viva Las Vegas (Barcrest) (MPU4) (set 29)", + "m4vivalv__2", "Viva Las Vegas (Barcrest) (MPU4) (set 30)", + "m4vivalv__3", "Viva Las Vegas (Barcrest) (MPU4) (set 31)", + "m4vivalv__4", "Viva Las Vegas (Barcrest) (MPU4) (set 32)", + "m4vivalv__5", "Viva Las Vegas (Barcrest) (MPU4) (set 33)", + "m4vivalv__6", "Viva Las Vegas (Barcrest) (MPU4) (set 34)", + "m4vivalv__7", "Viva Las Vegas (Barcrest) (MPU4) (set 35)", + "m4vivalv__8", "Viva Las Vegas (Barcrest) (MPU4) (set 36)", + "m4vivalv__a", "Viva Las Vegas (Barcrest) (MPU4) (set 2)", + "m4vivalv__b", "Viva Las Vegas (Barcrest) (MPU4) (set 3)", + "m4vivalv__c", "Viva Las Vegas (Barcrest) (MPU4) (set 4)", + "m4vivalv__e", "Viva Las Vegas (Barcrest) (MPU4) (set 6)", + "m4vivalv__f", "Viva Las Vegas (Barcrest) (MPU4) (set 7)", + "m4vivalv__g", "Viva Las Vegas (Barcrest) (MPU4) (set 8)", + "m4vivalv__h", "Viva Las Vegas (Barcrest) (MPU4) (set 9)", + "m4vivalv__i", "Viva Las Vegas (Barcrest) (MPU4) (set 10)", + "m4vivalv__j", "Viva Las Vegas (Barcrest) (MPU4) (set 11)", + "m4vivalv__k", "Viva Las Vegas (Barcrest) (MPU4) (set 12)", + "m4vivalv__l", "Viva Las Vegas (Barcrest) (MPU4) (set 13)", + "m4vivalv__m", "Viva Las Vegas (Barcrest) (MPU4) (set 14)", + "m4vivalv__n", "Viva Las Vegas (Barcrest) (MPU4) (set 15)", + "m4vivalv__o", "Viva Las Vegas (Barcrest) (MPU4) (set 16)", + "m4vivalv__p", "Viva Las Vegas (Barcrest) (MPU4) (set 17)", + "m4vivalv__q", "Viva Las Vegas (Barcrest) (MPU4) (set 18)", + "m4vivalv__r", "Viva Las Vegas (Barcrest) (MPU4) (set 19)", + "m4vivalv__s", "Viva Las Vegas (Barcrest) (MPU4) (set 20)", + "m4vivalv__t", "Viva Las Vegas (Barcrest) (MPU4) (set 21)", + "m4vivalv__u", "Viva Las Vegas (Barcrest) (MPU4) (set 22)", + "m4vivalv__v", "Viva Las Vegas (Barcrest) (MPU4) (set 23)", + "m4vivalv__w", "Viva Las Vegas (Barcrest) (MPU4) (set 24)", + "m4vivalv__x", "Viva Las Vegas (Barcrest) (MPU4) (set 25)", + "m4vivalv__y", "Viva Las Vegas (Barcrest) (MPU4) (set 26)", + "m4vivalv__z", "Viva Las Vegas (Barcrest) (MPU4) (set 27)", + "m4vivalvd", "Viva Las Vegas (Barcrest) [Dutch] (MPU4) (DLV)", + "m4vivan", "Viva Las Vegas (Nova) (MPU4)", + "m4vivess", "Viva Espana Showcase (Barcrest) (MPU4) (set 1)", + "m4vivess__a", "Viva Espana Showcase (Barcrest) (MPU4) (set 2)", + "m4vivess__b", "Viva Espana Showcase (Barcrest) (MPU4) (set 3)", + "m4vivess__c", "Viva Espana Showcase (Barcrest) (MPU4) (set 4)", + "m4vivess__d", "Viva Espana Showcase (Barcrest) (MPU4) (set 5)", + "m4vivess__f", "Viva Espana Showcase (Barcrest) (MPU4) (set 6)", + "m4vivess__g", "Viva Espana Showcase (Barcrest) (MPU4) (set 7)", + "m4vivess__i", "Viva Espana Showcase (Barcrest) (MPU4) (set 8)", + "m4vivess__j", "Viva Espana Showcase (Barcrest) (MPU4) (set 9)", + "m4vivess__k", "Viva Espana Showcase (Barcrest) (MPU4) (set 10)", + "m4vivess__l", "Viva Espana Showcase (Barcrest) (MPU4) (set 11)", + "m4vivess__m", "Viva Espana Showcase (Barcrest) (MPU4) (set 12)", + "m4vivess__n", "Viva Espana Showcase (Barcrest) (MPU4) (set 13)", + "m4vivess__o", "Viva Espana Showcase (Barcrest) (MPU4) (set 14)", + "m4vivess__p", "Viva Espana Showcase (Barcrest) (MPU4) (set 15)", + "m4viz", "Viz (Barcrest) (MPU4) (set 1)", + "m4viz__a", "Viz (Barcrest) (MPU4) (set 2)", + "m4viz__b", "Viz (Barcrest) (MPU4) (set 3)", + "m4viz__c", "Viz (Barcrest) (MPU4) (set 4)", + "m4viz__d", "Viz (Barcrest) (MPU4) (set 5)", + "m4viz__e", "Viz (Barcrest) (MPU4) (set 6)", + "m4viz__f", "Viz (Barcrest) (MPU4) (set 7)", + "m4viz__g", "Viz (Barcrest) (MPU4) (set 8)", + "m4viz__h", "Viz (Barcrest) (MPU4) (set 9)", + "m4viz__i", "Viz (Barcrest) (MPU4) (set 10)", + "m4viz__j", "Viz (Barcrest) (MPU4) (set 11)", + "m4viz__k", "Viz (Barcrest) (MPU4) (set 12)", + "m4viz__l", "Viz (Barcrest) (MPU4) (set 13)", + "m4viz__m", "Viz (Barcrest) (MPU4) (set 14)", + "m4viz__n", "Viz (Barcrest) (MPU4) (set 15)", + "m4viz__o", "Viz (Barcrest) (MPU4) (set 16)", + "m4viz__p", "Viz (Barcrest) (MPU4) (set 17)", + "m4viz__q", "Viz (Barcrest) (MPU4) (set 18)", + "m4viz__r", "Viz (Barcrest) (MPU4) (set 19)", + "m4viz__s", "Viz (Barcrest) (MPU4) (set 20)", + "m4viz__t", "Viz (Barcrest) (MPU4) (set 21)", + "m4viz__u", "Viz (Barcrest) (MPU4) (set 22)", + "m4viz__v", "Viz (Barcrest) (MPU4) (set 23)", + "m4viz__w", "Viz (Barcrest) (MPU4) (set 24)", + "m4volcan", "Volcano (Bwb) (MPU4) (set 1)", + "m4volcan__a", "Volcano (Bwb) (MPU4) (set 2)", + "m4volcan__b", "Volcano (Bwb) (MPU4) (set 3)", + "m4volcan__c", "Volcano (Bwb) (MPU4) (set 4)", + "m4volcan__d", "Volcano (Bwb) (MPU4) (set 5)", + "m4volcan__e", "Volcano (Bwb) (MPU4) (set 6)", + "m4volcan__f", "Volcano (Bwb) (MPU4) (set 7)", + "m4volcan__g", "Volcano (Bwb) (MPU4) (set 8)", + "m4voodoo", "Voodoo 1000 (Barcrest) (Dutch) (MPU4) (DDO 3.2)", + "m4wayin", "Way In (Barcrest) (MPU4) (set 1)", + "m4wayina", "Way In (Barcrest) (MPU4) (set 2)", + "m4wcnov", "World Cup (Nova) (MPU4)", + "m4wife", "Money Or Yer Wife (Gemini) (MPU4)", + "m4wildms", "Wild Mystery (Barcrest) (Dutch) (MPU4)", + "m4wildtm", "Wild Timer (Barcrest) (Dutch) (MPU4) (DWT 1.3)", + "m4wnud", "unknown MPU4 'W Nudge' (MPU4?)", + "m4wta", "Winner Takes All (Barcrest) (MPU4) (set 1)", + "m4wta__0", "Winner Takes All (Barcrest) (MPU4) (set 28)", + "m4wta__1", "Winner Takes All (Barcrest) (MPU4) (set 29)", + "m4wta__2", "Winner Takes All (Barcrest) (MPU4) (set 30)", + "m4wta__3", "Winner Takes All (Barcrest) (MPU4) (set 31)", + "m4wta__4", "Winner Takes All (Barcrest) (MPU4) (set 32)", + "m4wta__5", "Winner Takes All (Barcrest) (MPU4) (set 33)", + "m4wta__6", "Winner Takes All (Barcrest) (MPU4) (set 34)", + "m4wta__7", "Winner Takes All (Barcrest) (MPU4) (set 35)", + "m4wta__8", "Winner Takes All (Barcrest) (MPU4) (set 36)", + "m4wta__9", "Winner Takes All (Barcrest) (MPU4) (set 37)", + "m4wta__aa", "Winner Takes All (Barcrest) (MPU4) (set 38)", + "m4wta__ab", "Winner Takes All (Barcrest) (MPU4) (set 39)", + "m4wta__ac", "Winner Takes All (Barcrest) (MPU4) (set 40)", + "m4wta__ad", "Winner Takes All (Barcrest) (MPU4) (set 41)", + "m4wta__ae", "Winner Takes All (Barcrest) (MPU4) (set 42)", + "m4wta__af", "Winner Takes All (Barcrest) (MPU4) (set 43)", + "m4wta__ag", "Winner Takes All (Barcrest) (MPU4) (set 44)", + "m4wta__b", "Winner Takes All (Barcrest) (MPU4) (set 3)", + "m4wta__d", "Winner Takes All (Barcrest) (MPU4) (set 5)", + "m4wta__e", "Winner Takes All (Barcrest) (MPU4) (set 6)", + "m4wta__f", "Winner Takes All (Barcrest) (MPU4) (set 7)", + "m4wta__g", "Winner Takes All (Barcrest) (MPU4) (set 8)", + "m4wta__h", "Winner Takes All (Barcrest) (MPU4) (set 9)", + "m4wta__i", "Winner Takes All (Barcrest) (MPU4) (set 10)", + "m4wta__j", "Winner Takes All (Barcrest) (MPU4) (set 11)", + "m4wta__k", "Winner Takes All (Barcrest) (MPU4) (set 12)", + "m4wta__l", "Winner Takes All (Barcrest) (MPU4) (set 13)", + "m4wta__m", "Winner Takes All (Barcrest) (MPU4) (set 14)", + "m4wta__n", "Winner Takes All (Barcrest) (MPU4) (set 15)", + "m4wta__o", "Winner Takes All (Barcrest) (MPU4) (set 16)", + "m4wta__p", "Winner Takes All (Barcrest) (MPU4) (set 17)", + "m4wta__q", "Winner Takes All (Barcrest) (MPU4) (set 18)", + "m4wta__r", "Winner Takes All (Barcrest) (MPU4) (set 19)", + "m4wta__s", "Winner Takes All (Barcrest) (MPU4) (set 20)", + "m4wta__t", "Winner Takes All (Barcrest) (MPU4) (set 21)", + "m4wta__u", "Winner Takes All (Barcrest) (MPU4) (set 22)", + "m4wta__v", "Winner Takes All (Barcrest) (MPU4) (set 23)", + "m4wta__w", "Winner Takes All (Barcrest) (MPU4) (set 24)", + "m4wta__x", "Winner Takes All (Barcrest) (MPU4) (set 25)", + "m4wta__y", "Winner Takes All (Barcrest) (MPU4) (set 26)", + "m4wta__z", "Winner Takes All (Barcrest) (MPU4) (set 27)", + "m4wwc", "Wacky Weekend Club (Global) (MPU4) (set 1)", + "m4wwca", "Wacky Weekend Club (Global) (MPU4) (set 2)", + "m4wwcb", "Wacky Weekend Club (Global) (MPU4) (set 3)", + "m4xch", "X-change (Bwb) (MPU4) (set 1)", + "m4xch__a", "X-change (Bwb) (MPU4) (set 2)", + "m4xch__b", "X-change (Bwb) (MPU4) (set 3)", + "m4xch__c", "X-change (Bwb) (MPU4) (set 4)", + "m4xch__d", "X-change (Bwb) (MPU4) (set 5)", + "m4xch__e", "X-change (Bwb) (MPU4) (set 6)", + "m4xch__f", "X-change (Bwb) (MPU4) (set 7)", + "m4xch__g", "X-change (Bwb) (MPU4) (set 8)", + "m4xch__h", "X-change (Bwb) (MPU4) (set 9)", + "m4xch__i", "X-change (Bwb) (MPU4) (set 10)", + "m4xch__j", "X-change (Bwb) (MPU4) (set 11)", + "m4xch__k", "X-change (Bwb) (MPU4) (set 12)", + "m4xs", "X-s (Bwb) (MPU4) (set 1)", + "m4xs__a", "X-s (Bwb) (MPU4) (set 2)", + "m4xs__b", "X-s (Bwb) (MPU4) (set 3)", + "m4xs__c", "X-s (Bwb) (MPU4) (set 4)", + "m4xs__d", "X-s (Bwb) (MPU4) (set 5)", + "m4xs__e", "X-s (Bwb) (MPU4) (set 6)", + "m4xs__f", "X-s (Bwb) (MPU4) (set 7)", + "m4xtrm", "X-treme (Bwb) (MPU4) (set 1)", + "m4xtrm__a", "X-treme (Bwb) (MPU4) (set 2)", + "m4xtrm__b", "X-treme (Bwb) (MPU4) (set 3)", + "m4zill", "Zillionare's Challenge (Pure Leisure) (MPU4) (set 1)", + "m4zilla", "Zillionare's Challenge (Pure Leisure) (MPU4) (set 2)", + "m55050", "Fifty Fifty (Bwb) (MPU5)", + "m5aceclb", "Ace Of Clubs (Empire) (MPU5, set 1)", + "m5aceclba", "Ace Of Clubs (Empire) (MPU5, set 2)", + "m5aceclbb", "Ace Of Clubs (Empire) (MPU5, set 3)", + "m5addams", "Addams Family (Barcrest) (MPU5) (v0.5, set 1)", + "m5addamsa", "Addams Family (Barcrest) (MPU5) (v0.5, set 2)", + "m5addamsb", "Addams Family (Barcrest) (MPU5) (v0.5, set 3)", + "m5addamsc", "Addams Family (Barcrest) (MPU5) (v0.5, set 4)", + "m5addamsd", "Addams Family (Barcrest) (MPU5) (v0.5, set 5)", + "m5addamse", "Addams Family (Barcrest) (MPU5) (v0.5, set 6)", + "m5addamsf", "Addams Family (Barcrest) (MPU5) (v0.5, set 7)", + "m5addamsg", "Addams Family (Barcrest) (MPU5) (v0.5, set 8)", + "m5addamsh", "Addams Family (Barcrest) (MPU5) (v0.2, set 1)", + "m5addamsi", "Addams Family (Barcrest) (MPU5) (v0.2, set 2)", + "m5addamsj", "Addams Family (Barcrest) (MPU5) (v0.2, set 3)", + "m5addamsk", "Addams Family (Barcrest) (MPU5) (v0.3, set 1)", + "m5addamsl", "Addams Family (Barcrest) (MPU5) (v0.3, set 2)", + "m5addamsm", "Addams Family (Barcrest) (MPU5) (v0.3, set 3)", + "m5addamsn", "Addams Family (Barcrest) (MPU5) (v0.3, set 4)", + "m5addamso", "Addams Family (Barcrest) (MPU5) (v0.3, set 5)", + "m5addamsp", "Addams Family (Barcrest) (MPU5) (v0.3, set 6)", + "m5addamsq", "Addams Family (Barcrest) (MPU5) (v0.3, set 7)", + "m5addamsr", "Addams Family (Barcrest) (MPU5) (v0.3, set 8)", + "m5addamss", "Addams Family (Barcrest) (MPU5) (v0.3, set 9)", + "m5addlad", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 1)", + "m5addlada", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 2)", + "m5addladb", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 3)", + "m5addladc", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 4)", + "m5addladd", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 5)", + "m5addlade", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 6)", + "m5addladf", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 7)", + "m5addladg", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 8)", + "m5addladh", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 9)", + "m5addladi", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 10)", + "m5addladj", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 1)", + "m5addladk", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 2)", + "m5addladl", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 3)", + "m5addladm", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 4)", + "m5addladn", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 5)", + "m5addlado", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 6)", + "m5addladp", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 7)", + "m5addladq", "Adders & Ladders (Barcrest) (MPU5, v0.4, set 1)", + "m5addladr", "Adders & Ladders (Barcrest) (MPU5, v0.4, set 2)", + "m5addlads", "Adders & Ladders (Barcrest) (MPU5, v?.?)", + "m5all41", "All 4 One (Vivid) (MPU5, set 1)", + "m5all41a", "All 4 One (Vivid) (MPU5, set 2)", + "m5all41b", "All 4 One (Vivid) (MPU5, set 3)", + "m5all41c", "All 4 One (Vivid) (MPU5, set 4)", + "m5all41d", "All 4 One (Vivid) (MPU5, set 5)", + "m5all41e", "All 4 One (Vivid) (MPU5, set 6)", + "m5all41f", "All 4 One (Vivid) (MPU5, set 7)", + "m5all41g", "All 4 One (Vivid) (MPU5, set 8)", + "m5all41h", "All 4 One (Vivid) (MPU5, set 9)", + "m5all41i", "All 4 One (Vivid) (MPU5, set 10)", + "m5all41j", "All 4 One (Vivid) (MPU5, set 11)", + "m5all41k", "All 4 One (Vivid) (MPU5, set 12)", + "m5all41l", "All 4 One (Vivid) (MPU5, set 13)", + "m5all41low", "All 4 One (Lowen) (MPU5)", + "m5all41m", "All 4 One (Vivid) (MPU5, set 14)", + "m5arab", "Arabian Nights (Barcrest) (MPU5) (set 1)", + "m5arab03", "Arabian Nights (Barcrest) (MPU5) (set 2)", + "m5ashock", "Aftershock (Barcrest - Red Gaming) (MPU5, v1.2)", + "m5ashocka", "Aftershock (Barcrest - Red Gaming) (MPU5, v1.3)", + "m5atlan", "Atlantic (Vivid) (MPU5, v1.4)", + "m5atlana", "Atlantic (Vivid) (MPU5, v1.2)", + "m5austin", "Austin Powers (Barcrest) (MPU5) (set 1)", + "m5austin10", "Austin Powers (Barcrest) (MPU5) (set 2)", + "m5austin11", "Austin Powers (Barcrest) (MPU5) (set 3)", + "m5bankrl", "The Bank Roll (Barcrest) (MPU5)", + "m5barkng", "Barking Mad (Barcrest) (MPU5)", + "m5barmy", "Barmy Army (Barcrest) (MPU5)", + "m5barxdx", "Bar X Deluxe (Empire) (MPU5)", + "m5baxe", "Battle Axe (Barcrest) (MPU5) (set 1)", + "m5baxe04", "Battle Axe (Barcrest) (MPU5) (set 2)", + "m5bbank", "Break The Bank (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5bbank13", "Break The Bank (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5bbro", "Big Brother (Barcrest) (MPU5) (set 1)", + "m5bbro02", "Big Brother (Barcrest) (MPU5) (set 2)", + "m5bbrocl", "Big Brother Club (Barcrest) (MPU5)", + "m5beans", "Full Of Beans (Barcrest) (MPU5) (set 1)", + "m5beansa", "Full Of Beans (Barcrest) (MPU5) (set 2)", + "m5bigchs", "The Big Cheese (Barcrest) (MPU5) (set 1)", + "m5bigchs05", "The Big Cheese (Barcrest) (MPU5) (set 2)", + "m5biggam", "The Big Game (Barcrest) (MPU5) (set 1)", + "m5biggam11", "The Big Game (Barcrest) (MPU5) (set 2)", + "m5bigsht", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5bigsht04", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5bigsht11", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 3)", + "m5bigsht13", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 4)", + "m5bigshta", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 5)", + "m5bling", "Bling King Crazy (Barcrest) (MPU5)", + "m5blkwht", "Black & White (Barcrest) (MPU5) (set 1)", + "m5blkwht01", "Black & White (Barcrest) (MPU5) (set 3)", + "m5blkwht11", "Black & White (Barcrest) (MPU5) (set 2)", + "m5bnkrs", "Bonkers (Barcrest - Red Gaming) (MPU5)", + "m5bnzclb", "Bonanza Club (Empire) (MPU5) (set 1)", + "m5bnzclb11", "Bonanza Club (Empire) (MPU5) (set 2)", + "m5btlbnk", "Bottle Bank (Vivid) (MPU5)", + "m5bttf", "Back To The Features (Vivid) (MPU5) (set 1)", + "m5bttfa", "Back To The Features (Vivid) (MPU5) (set 2)", + "m5bukroo", "Buckaroo (Empire) (MPU5)", + "m5bwaves", "Brain Waves (Barcrest) (MPU5) (set 1)", + "m5bwaves07", "Brain Waves (Barcrest) (MPU5) (set 2)", + "m5caesc", "Caesar's Cash (Vivid) (MPU5)", + "m5carclb", "Caribbean Club (Barcrest) (MPU5)", + "m5card", "Card Shark (Vivid) (MPU5)", + "m5carou", "Carousel (Empire) (MPU5)", + "m5carpet", "Magic Carpet (Bwb) (MPU5) (set 1)", + "m5carpet12", "Magic Carpet (Bwb) (MPU5) (set 2)", + "m5carwsh", "Car Wash (Bwb) (MPU5) (set 1)", + "m5carwsh10", "Car Wash (Bwb) (MPU5) (set 2)", + "m5casfev", "Casino Fever (Red Gaming) (MPU5) (set 1)", + "m5casfev12", "Casino Fever (Red Gaming) (MPU5) (set 2)", + "m5cashar", "Cash Arena (Barcrest) (MPU5) (set 1)", + "m5cashar04", "Cash Arena (Barcrest) (MPU5) (set 2)", + "m5cashat", "Cash Attack (Barcrest) (MPU5)", + "m5cashln", "Cash Lines (Barcrest) (MPU5)", + "m5cashrn", "Cash Run (Barcrest) (MPU5) (set 1)", + "m5cashrn01", "Cash Run (Barcrest) (MPU5) (set 2)", + "m5cashrn02", "Cash Run (Barcrest) (MPU5) (set 3)", + "m5cashrn04", "Cash Run (Barcrest) (MPU5) (set 4)", + "m5casroc", "Casino Royale Club (Empire) (MPU5)", + "m5cbrun", "Cannonball Run (Empire) (MPU5)", + "m5cbw", "Ca$h Bang Wallop (Barcrest) (MPU5) (set 1)", + "m5cbwa", "Ca$h Bang Wallop (Barcrest) (MPU5) (set 2)", + "m5centcl", "Centurion Club (Empire) (MPU5) (set 1)", + "m5centcl20", "Centurion Club (Empire) (MPU5) (set 2)", + "m5centcl21", "Centurion Club (Empire) (MPU5) (set 3)", + "m5centcl21a", "Centurion Club (Empire) (MPU5) (set 4)", + "m5centcla", "Centurion Club (Empire) (MPU5) (set 5)", + "m5circlb", "Circus Club (Bwb) (MPU5) (set 1)", + "m5circlb00", "Circus Club (Bwb) (MPU5) (set 2)", + "m5circlb15", "Circus Club (Bwb) (MPU5) (set 3)", + "m5circlb33", "Circus Club (Bwb) (MPU5) (set 4)", + "m5circus", "Circus (Bwb) (MPU5) (set 1)", + "m5circus0a", "Circus (Bwb) (MPU5) (set 2)", + "m5circus0b", "Circus (Bwb) (MPU5) (set 3)", + "m5circus11", "Circus (Bwb) (MPU5) (set 6)", + "m5circus20", "Circus (Bwb) (MPU5) (set 4)", + "m5circus21", "Circus (Bwb) (MPU5) (set 5)", + "m5clbtro", "Club Tropicana (Empire) (MPU5) (set 1)", + "m5clbtro24", "Club Tropicana (Empire) (MPU5) (set 2)", + "m5clbtro25", "Club Tropicana (Empire) (MPU5) (set 3)", + "m5clifhn", "Cliffhanger (Vivid) (MPU5)", + "m5clown", "Clown In Around (Bwb) (MPU5) (set 1)", + "m5clown11", "Clown In Around (Bwb) (MPU5) (set 2)", + "m5clown13", "Clown In Around (Bwb) (MPU5) (set 3)", + "m5clr", "MPU 5 Ram & Meter Clear (Barcrest) (MPU5)", + "m5clubsn", "Club Sandwich (Bwb) (MPU5) (set 1)", + "m5clubsn11", "Club Sandwich (Bwb) (MPU5) (set 2)", + "m5clubsn14", "Club Sandwich (Bwb) (MPU5) (set 3)", + "m5clubsn16", "Club Sandwich (Bwb) (MPU5) (set 4)", + "m5cmass", "Critical Mass (Barcrest - Red Gaming) (MPU5)", + "m5cnct4", "Connect 4 (Vivid) (MPU5) (set 1)", + "m5cnct415", "Connect 4 (Vivid) (MPU5) (set 2)", + "m5cnct420", "Connect 4 (Vivid) (MPU5) (set 3)", + "m5cockdd", "Cock A Doodle Dough! (Empire) (MPU5) (set 1)", + "m5cockdd05", "Cock A Doodle Dough! (Empire) (MPU5) (set 2)", + "m5codft", "The Codfather (Barcrest) (MPU5) (set 1)", + "m5codft02", "The Codfather (Barcrest) (MPU5) (set 2)", + "m5coloss", "Colossus Club (Empire) (MPU5)", + "m5cos", "Costa Del Cash Casino (Barcrest) (MPU5)", + "m5cosclb", "Costa Del Cash Club (Barcrest) (MPU5)", + "m5costa", "Costa Del Cash (Barcrest) (MPU5)", + "m5cpcash", "Captain Cash (Barcrest) (MPU5)", + "m5croclb", "Crocodile Rock Club (Empire) (MPU5)", + "m5crocrk", "Crocodile Rock (Empire) (MPU5) (set 1)", + "m5crocrk10", "Crocodile Rock (Empire) (MPU5) (set 2)", + "m5crsfir", "Crossfire (Empire) (MPU5)", + "m5crzkni", "Crazy Crazy Knights (Barcrest) (MPU5) (set 1)", + "m5crzkni03", "Crazy Crazy Knights (Barcrest) (MPU5) (set 2)", + "m5cshkcb", "Card Shark Club (Vivid) (MPU5) (set 1)", + "m5cshkcb12", "Card Shark Club (Vivid) (MPU5) (set 2)", + "m5cshkcb13", "Card Shark Club (Vivid) (MPU5) (set 3)", + "m5cshstx", "Cash Stax (Bwb) (MPU5)", + "m5cworan", "Clockwork Oranges (Empire) (MPU5) (set 1)", + "m5cworan12", "Clockwork Oranges (Empire) (MPU5) (set 2)", + "m5dblfun", "Double Fun (Lowen) (MPU5)", + "m5dblqts", "Double Or Quits (Bwb) (MPU5) (set 1)", + "m5dblqts1b", "Double Or Quits (Bwb) (MPU5) (set 4)", + "m5dblqtsa", "Double Or Quits (Bwb) (MPU5) (set 2)", + "m5dblqtsb", "Double Or Quits (Bwb) (MPU5) (set 3)", + "m5dbubl", "Double Bubble (Barcrest - Red Gaming) (MPU5)", + "m5devil", "Devil Of A Deal (Vivid) (MPU5)", + "m5dick", "Dick Turnip (Bwb) (MPU5) (set 1)", + "m5dick10", "Dick Turnip (Bwb) (MPU5) (set 2)", + "m5dmnf", "Diamonds Are Forever (Empire) (MPU5) (set 1)", + "m5dmnf10", "Diamonds Are Forever (Empire) (MPU5) (set 2)", + "m5dmnfcl", "Diamonds Are Forever Club (Empire) (MPU5) (set 1)", + "m5dmnfcl04", "Diamonds Are Forever Club (Empire) (MPU5) (set 2)", + "m5dmnstr", "Demon Streak (Barcrest - Red Gaming) (MPU5, set 1)", + "m5dmnstra", "Demon Streak (Barcrest - Red Gaming) (MPU5, set 2)", + "m5donna", "Donna Kebab (Bwb) (MPU5, set 1)", + "m5donnaa", "Donna Kebab (Bwb) (MPU5, set 3)", + "m5donnad", "Donna Kebab (Bwb) (MPU5, set 1, Datapak)", + "m5doshpk", "Do$h 'n' Pecks (Barcrest) (MPU5) (set 1)", + "m5doshpk05", "Do$h 'n' Pecks (Barcrest) (MPU5) (set 2)", + "m5draclb", "Ooh Aah Dracula Club (Barcrest) (MPU5) (set 1)", + "m5draclb01", "Ooh Aah Dracula Club (Barcrest) (MPU5) (set 3)", + "m5draclb07", "Ooh Aah Dracula Club (Barcrest) (MPU5) (set 2)", + "m5dragnd", "Dragon Drop (Barcrest - Red Gaming) (MPU5, set 1)", + "m5dragnda", "Dragon Drop (Barcrest - Red Gaming) (MPU5, set 2)", + "m5eggold", "Egyptian Gold (Bwb) (MPU5)", + "m5egr", "Elvis Gold Rush (Barcrest) (MPU5, set 1)", + "m5egra", "Elvis Gold Rush (Barcrest) (MPU5, set 2)", + "m5egss", "Elvis Gold Super Streak (Barcrest) (MPU5, set 1)", + "m5egssa", "Elvis Gold Super Streak (Barcrest) (MPU5, set 2)", + "m5elband", "El Bandido Club (Vivid) (MPU5)", + "m5elim", "Eliminator (Barcrest) (MPU5) (set 1)", + "m5elim03", "Eliminator (Barcrest) (MPU5) (set 2)", + "m5elim04", "Eliminator (Barcrest) (MPU5) (set 3)", + "m5evgrhr", "Elvis Gold Red Hot Roll (Barcrest) (MPU5, set 1)", + "m5evgrhra", "Elvis Gold Red Hot Roll (Barcrest) (MPU5, set 2)", + "m5ewn", "Each Way Nudge (Barcrest) (MPU5) (set 1)", + "m5ewn08", "Each Way Nudge (Barcrest) (MPU5) (set 2)", + "m5extrm", "Extreme (Empire) (MPU5)", + "m5extrmm", "Extreme Madness (Empire) (MPU5) (set 1)", + "m5extrmm04a", "Extreme Madness (Empire) (MPU5) (set 2)", + "m5extrmm04b", "Extreme Madness (Empire) (MPU5) (set 3)", + "m5extrmm10", "Extreme Madness (Empire) (MPU5) (set 4)", + "m5fair", "Fairground Attraction (Vivid) (MPU5)", + "m5fatcat", "Fat Cat (Empire) (MPU5)", + "m5fewmor", "A Few Dollars More (Empire) (MPU5) (v0.2, set 1)", + "m5fewmora", "A Few Dollars More (Empire) (MPU5) (v0.2, set 2)", + "m5fewmorb", "A Few Dollars More (Empire) (MPU5) (v0.3, set 1)", + "m5fewmorc", "A Few Dollars More (Empire) (MPU5) (v0.3, set 2)", + "m5fiddle", "On The Fiddle (Barcrest) (MPU5) (set 1)", + "m5fiddle03", "On The Fiddle (Barcrest) (MPU5) (set 2)", + "m5fire", "All Fired Up (Barcrest) (MPU5)", + "m5firebl", "Fireball (Barcrest) (MPU5)", + "m5fishcl", "Fish Full Of Dollars Club (Empire) (MPU5)", + "m5fishdl", "Fish Full Of Dollars (Empire) (MPU5) (set 1)", + "m5fishdl10", "Fish Full Of Dollars (Empire) (MPU5) (set 2)", + "m5flipcr", "Flippin Crazy (Barcrest) (MPU5)", + "m5fmonty", "The Full Monty (Empire) (MPU5) (set 1)", + "m5fmonty04a", "The Full Monty (Empire) (MPU5) (set 2)", + "m5fmonty04b", "The Full Monty (Empire) (MPU5) (set 3)", + "m5fmonty04c", "The Full Monty (Empire) (MPU5) (set 4)", + "m5fmount", "Full Mountie (Empire) (MPU5)", + "m5fnfair", "Funfair (Barcrest - Red Gaming) (MPU5)", + "m5fnfaird", "Funfair (Barcrest - Red Gaming) (MPU5) (Datapak)", + "m5fortby", "Fort Boyard (Barcrest) (MPU5) (set 1)", + "m5fortby01", "Fort Boyard (Barcrest) (MPU5) (set 2)", + "m5frnzy", "Frenzy (Barcrest) (MPU5) (set 1)", + "m5frnzya", "Frenzy (Barcrest) (MPU5) (set 2)", + "m5funsun", "Fun In The Sun (Barcrest) (MPU5) (set 1)", + "m5funsun03", "Fun In The Sun (Barcrest) (MPU5) (set 2)", + "m5fusir", "Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5fusir11", "Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5fusir12", "Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 3)", + "m5gdrag", "Golden Dragon (Barcrest) (MPU5)", + "m5gdrgcl", "Golden Dragon Club (Barcrest) (MPU5) (set 1)", + "m5gdrgcl05", "Golden Dragon Club (Barcrest) (MPU5) (set 2)", + "m5ggems", "Giant Gems (Vivid) (MPU5) (set 1)", + "m5ggems20", "Giant Gems (Vivid) (MPU5) (set 2)", + "m5gimmie", "Gimmie Gimmie Gimmie (Barcrest) (MPU5)", + "m5gkeys", "Golden Keys (Barcrest) (MPU5)", + "m5goape", "Going Ape (Bwb) (MPU5)", + "m5gophcl", "Gopher Gold Club (Empire) (MPU5)", + "m5gophr", "Gopher Gold (Empire) (MPU5)", + "m5gpclub", "Get Plastered Club (Bwb) (MPU5)", + "m5groll", "Golden Roll (Vivid) (MPU5)", + "m5grush", "Gold Rush (Barcrest) (MPU5) (set 1)", + "m5grush01", "Gold Rush (Barcrest) (MPU5) (set 6)", + "m5grush02", "Gold Rush (Barcrest) (MPU5) (set 5)", + "m5grush03", "Gold Rush (Barcrest) (MPU5) (set 4)", + "m5grush04", "Gold Rush (Barcrest) (MPU5) (set 3)", + "m5grush10", "Gold Rush (Barcrest) (MPU5) (set 2)", + "m5grush5", "Gold Rush Five Liner (Barcrest) (MPU5) (set 1)", + "m5grush504", "Gold Rush Five Liner (Barcrest) (MPU5) (set 2)", + "m5gruss", "Gold Rush Sit Down (Barcrest) (MPU5)", + "m5grusst", "Gold Rush Stampede (Barcrest) (MPU5) (set 1)", + "m5grusst03", "Gold Rush Stampede (Barcrest) (MPU5) (set 3)", + "m5grusst04", "Gold Rush Stampede (Barcrest) (MPU5) (set 2)", + "m5gsstrk", "Gold Super Streak (Barcrest) (MPU5) (set 1)", + "m5gsstrk07", "Gold Super Streak (Barcrest) (MPU5) (set 2)", + "m5gstrik", "Gold Strike (Barcrest) (MPU5) (set 1)", + "m5gstrik01", "Gold Strike (Barcrest) (MPU5) (set 4)", + "m5gstrik01a", "Gold Strike (Barcrest) (MPU5) (set 5)", + "m5gstrik02", "Gold Strike (Barcrest) (MPU5) (set 3)", + "m5gstrik11", "Gold Strike (Barcrest) (MPU5) (set 2)", + "m5gstrika", "Gold Strike (Barcrest) (MPU5) (set 6)", + "m5hellrz", "Hellraiser (Barcrest) (MPU5)", + "m5hgl", "Happy Go Lucky (Bwb) (MPU5) (set 1)", + "m5hgl14", "Happy Go Lucky (Bwb) (MPU5) (set 3)", + "m5hgl16", "Happy Go Lucky (Bwb) (MPU5) (set 2)", + "m5hiclau", "High Claudius (Vivid) (MPU5)", + "m5hifly", "High Flyer (Barcrest) (MPU5) (set 1)", + "m5hifly03", "High Flyer (Barcrest) (MPU5) (set 2)", + "m5hifly04", "High Flyer (Barcrest) (MPU5) (set 3)", + "m5hilok", "Hi Lo Karate (Vivid) (MPU5)", + "m5hisprt", "High Spirits (Empire) (MPU5)", + "m5hlsumo", "Hi Lo Sumo (Barcrest) (MPU5)", + "m5hocscl", "Hocus Pocus Club (Empire) (MPU5)", + "m5hocus", "Hocus Pocus (Empire) (MPU5) (set 1)", + "m5hocus10", "Hocus Pocus (Empire) (MPU5) (set 2)", + "m5holy", "The Holy Grail (Barcrest) (MPU5) (set 1)", + "m5holy10", "The Holy Grail (Barcrest) (MPU5) (set 2)", + "m5honmon", "Honey Money (Vivid) (MPU5) (set 1)", + "m5honmona", "Honey Money (Vivid) (MPU5) (set 2)", + "m5hopidl", "Hop Idol (Vivid) (MPU5)", + "m5horn", "Horn Of Plenty (Barcrest / Whitbread) (MPU5)", + "m5hotrk", "Hot Rocks (Barcrest) (MPU5)", + "m5hotsht", "Hot Shots (Empire) (MPU5) (set 1)", + "m5hotsht07a", "Hot Shots (Empire) (MPU5) (set 2)", + "m5hotsht08", "Hot Shots (Empire) (MPU5) (set 3)", + "m5hotsht08a", "Hot Shots (Empire) (MPU5) (set 4)", + "m5hotsht10", "Hot Shots (Empire) (MPU5) (set 5)", + "m5hotsht10a", "Hot Shots (Empire) (MPU5) (set 6)", + "m5hotslt", "Hot Slot (Barcrest) (MPU5)", + "m5hotstf", "Hot Stuff (Barcrest) (MPU5)", + "m5hula", "Hula Moolah (Empire) (MPU5) (set 1)", + "m5hula10", "Hula Moolah (Empire) (MPU5) (set 2)", + "m5hulacl", "Hula Moolah Club (Empire) (MPU5)", + "m5hypalx", "Hypalinx (Barcrest - Red Gaming) (MPU5)", + "m5hypno", "Hypnotic (Vivid) (MPU5)", + "m5hypvip", "Hyper Viper (Barcrest) (MPU5)", + "m5invad", "Invaders (Barcrest - Red Gaming) (MPU5)", + "m5jackbx", "Jack In The Box (Empire) (MPU5) (set 1)", + "m5jackbx03", "Jack In The Box (Empire) (MPU5) (set 2)", + "m5jackp2", "Jackpoteers 2 (Barcrest) (MPU5) (set 1)", + "m5jackp2a", "Jackpoteers 2 (Barcrest) (MPU5) (set 2)", + "m5jackpt", "Jackpoteers (Barcrest) (MPU5) (set 1)", + "m5jackpt07", "Jackpoteers (Barcrest) (MPU5) (set 2)", + "m5jakjok", "Jackpot Jokers (Lowen) (MPU5)", + "m5jcptgn", "Jackpot Genie (Barcrest - Red Gaming) (MPU5)", + "m5jcy", "Juicy Fruits (Empire) (MPU5)", + "m5jlstrk", "Jewel Strike (Barcrest - Red Gaming) (MPU5)", + "m5jlyjwl", "Jolly Jewels (Barcrest) (MPU5) (set 1)", + "m5jlyjwl01", "Jolly Jewels (Barcrest) (MPU5) (set 2)", + "m5jlyjwl02", "Jolly Jewels (Barcrest) (MPU5) (set 3)", + "m5jlyrog", "Jolly Roger (Barcrest) (MPU5) (set 1)", + "m5jlyroga", "Jolly Roger (Barcrest) (MPU5) (set 2)", + "m5jmpgem", "Jumping Gems (Empire) (MPU5) (set 1)", + "m5jmpgem01", "Jumping Gems (Empire) (MPU5) (set 2)", + "m5jmpgem03", "Jumping Gems (Empire) (MPU5) (set 3)", + "m5jmpgmc", "Jumping Gems Club (Empire) (MPU5)", + "m5jmpjok", "Jumpin Jokers (Vivid) (MPU5) (set 1)", + "m5jmpjok11", "Jumpin Jokers (Vivid) (MPU5) (set 2)", + "m5jmpjoka", "Jumpin Jokers (Vivid) (MPU5) (set 3)", + "m5jmpjokb", "Jumpin Jokers (Vivid) (MPU5) (set 4)", + "m5jokpak", "Joker In The Pack (Bwb) (MPU5)", + "m5kaleid", "Kaleidoscope Club (Empire) (MPU5)", + "m5kcclb", "King Cobra Club (Empire) (MPU5) (set 1)", + "m5kcclb24", "King Cobra Club (Empire) (MPU5) (set 2)", + "m5kingko", "King KO (Barcrest) (MPU5) (set 1)", + "m5kingko04", "King KO (Barcrest) (MPU5) (set 2)", + "m5kingko05", "King KO (Barcrest) (MPU5) (set 3)", + "m5kingqc", "Kings & Queens Club (Empire) (MPU5) (set 1)", + "m5kingqc06", "Kings & Queens Club (Empire) (MPU5) (set 2)", + "m5kingqc07", "Kings & Queens Club (Empire) (MPU5) (set 3)", + "m5kingqc08", "Kings & Queens Club (Empire) (MPU5) (set 4)", + "m5kkebab", "King Kebab (Barcrest) (MPU5) (set 1)", + "m5kkebab10", "King Kebab (Barcrest) (MPU5) (set 2)", + "m5kkebaba", "King Kebab (Barcrest) (MPU5) (set 3)", + "m5korma", "Korma Chameleon (Empire) (MPU5) (set 1)", + "m5korma12", "Korma Chameleon (Empire) (MPU5) (set 2)", + "m5kormcl", "Korma Chameleon Club (Empire) (MPU5)", + "m5lock", "Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5lock12", "Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 3)", + "m5lock13", "Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5lockcl", "Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5lockcl14", "Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 3)", + "m5lockcl15", "Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5loony", "Loony Juice (Vivid) (MPU5)", + "m5loot", "Loot 'n' Khamun (Vivid) (MPU5, set 1)", + "m5loota", "Loot 'n' Khamun (Vivid) (MPU5, set 2)", + "m5lotta", "Lotta Luck (Barcrest) (MPU5)", + "m5lvwire", "Live Wire (Bwb) (MPU5) (set 1)", + "m5lvwirea", "Live Wire (Bwb) (MPU5) (set 2)", + "m5mag7s", "Magnificent 7s (Vivid) (MPU5, set 1)", + "m5mag7sa", "Magnificent 7s (Vivid) (MPU5, set 2)", + "m5mag7sb", "Magnificent 7s (Vivid) (MPU5, set 3)", + "m5mag7sc", "Magnificent 7s (Vivid) (MPU5, set 4)", + "m5mag7sd", "Magnificent 7s (Vivid) (MPU5, set 5)", + "m5mag7se", "Magnificent 7s (Vivid) (MPU5, set 6)", + "m5martns", "Money Mad Martians (Barcrest) (MPU5) (set 1)", + "m5martns07", "Money Mad Martians (Barcrest) (MPU5) (set 2)", + "m5mega", "Mega Zone (Barcrest) (MPU5)", + "m5minesw", "Minesweeper (Bwb) (MPU5)", + "m5mmak", "Money Maker (Barcrest) (MPU5) (set 1)", + "m5mmak06", "Money Maker (Barcrest) (MPU5) (set 2)", + "m5monjok", "Monedin Joker (Spanish) (Barcrest) (MPU5) (set 1)", + "m5monjoka", "Monedin Joker (Spanish) (Barcrest) (MPU5) (set 2)", + "m5monmst", "Money Monster (Empire) (MPU5) (set 1)", + "m5monmsta", "Money Monster (Empire) (MPU5) (set 2)", + "m5monty", "Monty Python (Barcrest) (MPU5)", + "m5mpfc", "Monty Python's Flying Circus (Barcrest) (MPU5)", + "m5mpfccl", "Monty Python's Flying Circus Club (Barcrest) (MPU5)", + "m5mprio", "Monty Python Rio (Barcrest) (MPU5)", + "m5msf", "Manic Streak Features (Vivid) (MPU5, set 1)", + "m5msfa", "Manic Streak Features (Vivid) (MPU5, set 2)", + "m5neptun", "Neptunes Treasure (Barcrest) (MPU5)", + "m5nitro", "Nitro (Barcrest - Red Gaming) (MPU5)", + "m5nnww", "Nudge Nudge Wink Wink (Barcrest) (MPU5)", + "m5nnwwgl", "Nudge Nudge Wink Wink Gold (Barcrest) (MPU5)", + "m5oohaah", "Ooh Aah Dracula (Barcrest) (MPU5) (set 1)", + "m5oohaah01", "Ooh Aah Dracula (Barcrest) (MPU5) (set 2)", + "m5oohrio", "Ooh Ahh Dracula Rio (Barcrest) (MPU5)", + "m5openbx", "Open The Box (Barcrest) (MPU5) (set 1)", + "m5openbx01", "Open The Box (Barcrest) (MPU5) (set 4)", + "m5openbx05", "Open The Box (Barcrest) (MPU5) (set 3)", + "m5openbx06", "Open The Box (Barcrest) (MPU5) (set 2)", + "m5overld", "Overload (Barcrest) (MPU5) (set 1)", + "m5overld02", "Overload (Barcrest) (MPU5) (set 2)", + "m5overld10", "Overload (Barcrest) (MPU5) (set 3)", + "m5overld11", "Overload (Barcrest) (MPU5) (set 4)", + "m5paint", "Paint The Town Red (Barcrest - Red Gaming) (MPU5)", + "m5peepsh", "Peep Show (Barcrest) (MPU5)", + "m5piefac", "Pie Factory (Vivid) (MPU5) (set 1)", + "m5piefac12", "Pie Factory (Vivid) (MPU5) (set 3)", + "m5piefac23", "Pie Factory (Vivid) (MPU5) (set 2)", + "m5piefaca", "Pie Factory (Vivid) (MPU5) (set 4)", + "m5piefc2", "Pie Factory 2 (Vivid) (MPU5) (set 1)", + "m5piefc2a", "Pie Factory 2 (Vivid) (MPU5) (set 2)", + "m5piefc2b", "Pie Factory 2 (Vivid) (MPU5) (set 3)", + "m5piefcr", "Pie Factory Rio (Vivid) (MPU5)", + "m5ppussy", "Pink Pussy (Mdm) (MPU5)", + "m5psy2", "Psycho Cash Beast 2 (Barcrest) (MPU5)", + "m5psyccl", "Psycho Cash Beast Club (Barcrest) (MPU5) (set 1)", + "m5psyccl01", "Psycho Cash Beast Club (Barcrest) (MPU5) (set 2)", + "m5psyccla", "Psycho Cash Beast Club (Bwb) (MPU5) (set 1)", + "m5psyccla02", "Psycho Cash Beast Club (Bwb) (MPU5) (set 3)", + "m5psyccla24", "Psycho Cash Beast Club (Bwb) (MPU5) (set 2)", + "m5psycho", "Psycho Cash Beast (Barcrest) (MPU5) (set 1)", + "m5psycho06", "Psycho Cash Beast (Barcrest) (MPU5) (set 2)", + "m5psychoa", "Psycho Cash Beast (Bwb) (MPU5) (set 1)", + "m5psychoa21", "Psycho Cash Beast (Bwb) (MPU5) (set 2)", + "m5ptyani", "Party Animal (Barcrest) (MPU5) (set 1)", + "m5ptyani01", "Party Animal (Barcrest) (MPU5) (set 2)", + "m5qdraw", "Quick On The Draw (Vivid) (MPU5) (set 1)", + "m5qdraw12", "Quick On The Draw (Vivid) (MPU5) (set 2)", + "m5qdraw14", "Quick On The Draw (Vivid) (MPU5) (set 3)", + "m5qdraw15", "Quick On The Draw (Vivid) (MPU5) (set 4)", + "m5qdrawa", "Quick On The Draw (Vivid) (MPU5) (set 5)", + "m5qdrawb", "Quick On The Draw (Vivid) (MPU5) (set 6)", + "m5qshot", "Quack Shot (Barcrest) (MPU5) (set 1)", + "m5qshot04", "Quack Shot (Barcrest) (MPU5) (set 2)", + "m5quake", "Quake (Barcrest - Red Gaming) (MPU5)", + "m5rainrn", "Rainbow Runner (Barcrest - Red Gaming) (MPU5, set 1)", + "m5rainrna", "Rainbow Runner (Barcrest - Red Gaming) (MPU5, set 2)", + "m5rampg", "Rampage (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5rampg11", "Rampage (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5rampg12", "Rampage (Barcrest - Red Gaming) (MPU5) (set 3)", + "m5ramrcl", "Ram Raid Club (Empire) (MPU5)", + "m5ramrd", "Ram Raid (Empire) (MPU5)", + "m5ratpk", "Rat Pack (Vivid) (MPU5) (set 1)", + "m5ratpka", "Rat Pack (Vivid) (MPU5) (set 2)", + "m5rawin", "Reel A Win (Vivid / Whitbread) (MPU5)", + "m5razdz", "Razzle Dazzle Club (Barcrest) (MPU5) (set 1)", + "m5razdz10", "Razzle Dazzle Club (Barcrest) (MPU5) (set 2)", + "m5razdz11", "Razzle Dazzle Club (Barcrest) (MPU5) (set 3)", + "m5rcx", "Royal Exchange Club (Barcrest) (MPU5) (set 1)", + "m5rcxa", "Royal Exchange Club (Barcrest) (MPU5) (set 2)", + "m5rdwarf", "Red Dwarf (Barcrest - Red Gaming) (MPU5)", + "m5redbal", "Random Red Ball (Vivid) (MPU5)", + "m5redrck", "Ready To Rock (Barcrest) (MPU5) (set 1)", + "m5redrck10", "Ready To Rock (Barcrest) (MPU5) (set 2)", + "m5redrcka", "Ready To Rock (Barcrest) (MPU5) (set 3)", + "m5redx", "Red X (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5redx12", "Red X (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5reelth", "Reel Thunder (Bwb) (MPU5)", + "m5reelwn", "Reel A Win (Bwb) (MPU5) (set 1)", + "m5reelwn24", "Reel A Win (Bwb) (MPU5) (set 2)", + "m5resfrg", "Reservoir Frogs (Empire) (MPU5)", + "m5revo", "Revolution (Barcrest) (MPU5) (set 1)", + "m5revo13", "Revolution (Barcrest) (MPU5) (set 2)", + "m5revoa", "Revolution (Barcrest) (MPU5) (set 3)", + "m5rfymc", "Run For Your Money Club (Barcrest) (MPU5) (set 1)", + "m5rfymc06", "Run For Your Money Club (Barcrest) (MPU5) (Set 2)", + "m5rgclb", "Rio Grande Club (Barcrest) (MPU5) (set 1)", + "m5rgclb01", "Rio Grande Club (Barcrest) (MPU5) (set 7)", + "m5rgclb01a", "Rio Grande Club (Barcrest) (MPU5) (set 8)", + "m5rgclb03", "Rio Grande Club (Barcrest) (MPU5) (set 6)", + "m5rgclb11", "Rio Grande Club (Barcrest) (MPU5) (set 2)", + "m5rgclb12", "Rio Grande Club (Barcrest) (MPU5) (set 3)", + "m5rgclb20", "Rio Grande Club (Barcrest) (MPU5) (set 4)", + "m5rgclb21", "Rio Grande Club (Barcrest) (MPU5) (set 5)", + "m5rhkni", "Red Hot Knights (Barcrest) (MPU5)", + "m5rhrg", "Red Hot Roll Gold (Barcrest) (MPU5) (set 1)", + "m5rhrga", "Red Hot Roll Gold (Barcrest) (MPU5) (set 2)", + "m5rhrgt", "Red Hot Roll Triple (Barcrest) (MPU5) (set 1)", + "m5rhrgt02", "Red Hot Roll Triple (Barcrest) (MPU5) (set 3)", + "m5rhrgt12", "Red Hot Roll Triple (Barcrest) (MPU5) (set 2)", + "m5ritj", "Rumble In The Jungle (Barcrest) (MPU5)", + "m5rlup", "Roll Up (Bwb) (MPU5)", + "m5rollup", "Roll Up Roll Up (Vivid) (MPU5)", + "m5rollx", "Roll X (Empire) (MPU5) (set 1)", + "m5rollx12", "Roll X (Empire) (MPU5) (set 2)", + "m5ronr", "Reel Or No Reel (Empire) (MPU5) (set 1)", + "m5ronr05", "Reel Or No Reel (Empire) (MPU5) (set 2)", + "m5ronr07", "Reel Or No Reel (Empire) (MPU5) (set 3)", + "m5roof", "Raise The Roof (Barcrest) (MPU5) (set 1)", + "m5roofa", "Raise The Roof (Barcrest) (MPU5) (set 2)", + "m5round", "Round & Round (Bwb) (MPU5)", + "m5roundl", "Round & Round (Lowen) (MPU5)", + "m5rthh", "Return To The Haunted House (Empire) (MPU5)", + "m5rub", "Rubies & Diamonds (Barcrest) (MPU5)", + "m5rwb", "Red White & Blue (Barcrest) (MPU5)", + "m5rwbbwb", "Red White & Blue (Bwb) (MPU5) (set 1)", + "m5rwbbwb15", "Red White & Blue (Bwb) (MPU5) (set 4)", + "m5rwbbwb24", "Red White & Blue (Bwb) (MPU5) (set 2)", + "m5rwbbwb25", "Red White & Blue (Bwb) (MPU5) (set 3)", + "m5sblz", "Snail Blazer (Barcrest - Red Gaming) (MPU5)", + "m5scfinl", "Super Cup Final (Lowen) (MPU5)", + "m5scharg", "Super Charged (Barcrest) (MPU5) (set 1)", + "m5scharg05", "Super Charged (Barcrest) (MPU5) (set 2)", + "m5scharg06", "Super Charged (Barcrest) (MPU5) (set 3)", + "m5scharga", "Super Charged (Barcrest) (MPU5) (set 4)", + "m5sec7", "Secret 7s (Bwb) (MPU5) (set 1)", + "m5sec7a", "Secret 7s (Bwb) (MPU5) (set 2)", + "m5seven", "Seven Deadly Spins (Barcrest) (MPU5)", + "m5shark", "Shark Raving Mad (Vivid) (MPU5) (set 1)", + "m5sharka", "Shark Raving Mad (Vivid) (MPU5) (set 2)", + "m5sheik", "Sheik Yer Money (Barcrest) (MPU5)", + "m5showtm", "Showtime (Barcrest) (MPU5)", + "m5sil7", "Silver 7s (Bwb) (MPU5) (set 1)", + "m5sil7a", "Silver 7s (Bwb) (MPU5) (set 2)", + "m5silver", "Silver Screen (Barcrest) (MPU5) (set 1)", + "m5silver03", "Silver Screen (Barcrest) (MPU5) (set 3)", + "m5silver06", "Silver Screen (Barcrest) (MPU5) (set 2)", + "m5sixsht", "Six Shooter (Vivid) (MPU5) (v1.1, set 1)", + "m5sixshta", "Six Shooter (Vivid) (MPU5) (v1.1, set 2)", + "m5sixshtb", "Six Shooter (Vivid) (MPU5) (v2.0, set 1)", + "m5sixshtc", "Six Shooter (Vivid) (MPU5) (v2.0, set 2)", + "m5sixshtd", "Six Shooter (Vivid) (MPU5) (v2.0, set 3)", + "m5sixshte", "Six Shooter (Vivid) (MPU5) (v2.0, set 4)", + "m5sixshtf", "Six Shooter (Vivid) (MPU5) (v2.0, set 5)", + "m5sixshtg", "Six Shooter (Vivid) (MPU5) (v2.0, set 6)", + "m5sixshth", "Six Shooter (Vivid) (MPU5) (v2.0, set 7)", + "m5sixshti", "Six Shooter (Vivid) (MPU5) (v2.1, set 1)", + "m5sixshtj", "Six Shooter (Vivid) (MPU5) (v2.1, set 2)", + "m5sixshtk", "Six Shooter (Vivid) (MPU5) (v2.1, set 3)", + "m5sixshtl", "Six Shooter (Vivid) (MPU5) (v2.1, set 4)", + "m5sixshtm", "Six Shooter (Vivid) (MPU5) (v2.1, set 5)", + "m5sixshtn", "Six Shooter (Vivid) (MPU5) (v2.1, set 6)", + "m5skulcl", "Skullduggery Club (Empire) (MPU5) (set 1)", + "m5skulcl20", "Skullduggery Club (Empire) (MPU5) (set 2)", + "m5skulcl23", "Skullduggery Club (Empire) (MPU5) (set 3)", + "m5slide", "Slider (Barcrest - Red Gaming) (MPU5)", + "m5smobik", "Smokey Bikin (Bwb) (MPU5) (set 1)", + "m5smobik12", "Smokey Bikin (Bwb) (MPU5) (set 2)", + "m5sondr", "Son Of Dracula (Barcrest) (MPU5) (set 1)", + "m5sondr05", "Son Of Dracula (Barcrest) (MPU5) (set 2)", + "m5sondra", "Son Of Dracula (Barcrest) (MPU5) (15GBP Jackpot)", + "m5spddmn", "Speed Demon (Vivid) (MPU5)", + "m5speccl", "Spectrum Club (Vivid) (MPU5)", + "m5spicer", "The Spice Is Right (Barcrest) (MPU5) (set 1)", + "m5spicer06", "The Spice Is Right (Barcrest) (MPU5) (set 2)", + "m5spiker", "Spiker The Biker (Barcrest) (MPU5) (set 1)", + "m5spiker02", "Spiker The Biker (Barcrest) (MPU5) (set 2)", + "m5spikera", "Spiker The Biker (Barcrest) (MPU5) (set 3)", + "m5spins", "Spinsation (Barcrest) (MPU5)", + "m5squids", "Squids In (Barcrest) (MPU5) (set 1)", + "m5squids04a", "Squids In (Barcrest) (MPU5) (set 2)", + "m5squids05", "Squids In (Barcrest) (MPU5) (set 3)", + "m5squids06", "Squids In (Barcrest) (MPU5) (set 4)", + "m5sstrk", "Super Streak (Barcrest) (MPU5) (set 1)", + "m5sstrk02a", "Super Streak (Barcrest) (MPU5) (set 2)", + "m5starcl", "Stars & Stripes Club (Vivid) (MPU5)", + "m5stars", "Stars & Stripes (Vivid) (MPU5) (set 1)", + "m5stars10", "Stars & Stripes (Vivid) (MPU5) (set 8)", + "m5stars10a", "Stars & Stripes (Vivid) (MPU5) (set 9)", + "m5stars13a", "Stars & Stripes (Vivid) (MPU5) (set 2)", + "m5stars20", "Stars & Stripes (Vivid) (MPU5) (set 7)", + "m5stars22", "Stars & Stripes (Vivid) (MPU5) (set 6)", + "m5stars25", "Stars & Stripes (Vivid) (MPU5) (set 5)", + "m5stars25a", "Stars & Stripes (Vivid) (MPU5) (set 4)", + "m5stars26", "Stars & Stripes (Vivid) (MPU5) (set 3)", + "m5startr", "Stars & Stripes Triple (Vivid) (MPU5)", + "m5stax", "Stax Of Cash (Barcrest) (MPU5)", + "m5supnov", "Supernova (Barcrest) (MPU5) (set 1)", + "m5supnova", "Supernova (Barcrest) (MPU5) (set 2)", + "m5supro", "Super Roulette (Vivid) (MPU5) (set 1)", + "m5suproa", "Super Roulette (Vivid) (MPU5) (set 2)", + "m5supstr", "Super Star (Barcrest) (MPU5) (set 1)", + "m5supstra", "Super Star (Barcrest) (MPU5) (set 2)", + "m5tball", "Thunderball (Empire) (MPU5)", + "m5tbird", "Thunderbird (Barcrest) (MPU5)", + "m5tempcl", "Temple Of Treasure Club (Barcrest) (MPU5)", + "m5tempp", "Temple Of Pleasure (Vivid) (MPU5)", + "m5tempt", "Temple Of Treasure (Barcrest) (MPU5) (set 1)", + "m5tempt05", "Temple Of Treasure (Barcrest) (MPU5) (set 2)", + "m5tempt2", "Temple Of Treasure 2 (Barcrest) (MPU5) (set 1)", + "m5tempt203", "Temple Of Treasure 2 (Barcrest) (MPU5) (set 2)", + "m5tempt2a", "Temple Of Treasure 2 (Barcrest) (MPU5) (set 3)", + "m5tempta", "Temple Of Treasure (Barcrest) (MPU5) (set 3)", + "m5temptb", "Temple Of Treasure (Barcrest) (MPU5) (set 4)", + "m5thtsmg", "That's Magic (Barcrest - Red Gaming) (MPU5)", + "m5tictac", "Tic Tac Tut (Vivid) (MPU5)", + "m5tictacbwb", "Tic Tac Tut (Bwb) (MPU5) (set 1)", + "m5tictacbwb16", "Tic Tac Tut (Bwb) (MPU5) (set 2)", + "m5tomb", "Tomb Raiders (Empire) (MPU5)", + "m5topdog", "Top Dog (Barcrest) (MPU5) (set 1)", + "m5topdog04", "Top Dog (Barcrest) (MPU5) (set 2)", + "m5topdoga", "Top Dog (Barcrest) (MPU5) (set 3)", + "m5topdol", "Top Dollar (Barcrest - Red Gaming) (MPU5) (set 1)", + "m5topdola", "Top Dollar (Barcrest - Red Gaming) (MPU5) (set 2)", + "m5trail", "Trailblazer Club (Barcrest) (MPU5)", + "m5trclb", "Tomb Raiders Club (Empire) (MPU5)", + "m5tsar", "Tsar Wars (Empire) (MPU5)", + "m5tst", "MPU 5 Test Rom (Barcrest) (MPU5)", + "m5ttop", "Treble Top (Empire) (MPU5) (set 1)", + "m5ttop04", "Treble Top (Empire) (MPU5) (set 2)", + "m5ttop10", "Treble Top (Empire) (MPU5) (set 3)", + "m5ttopcl", "Treble Top Club (Empire) (MPU5)", + "m5ttwo", "Take Two (Barcrest) (MPU5)", + "m5ultimo", "Ultimo (Barcrest) (MPU5) (set 1)", + "m5ultimo03a", "Ultimo (Barcrest) (MPU5) (set 2)", + "m5ultimo04", "Ultimo (Barcrest) (MPU5) (set 3)", + "m5upover", "Up & Over (Barcrest) (MPU5) (set 1)", + "m5upover15", "Up & Over (Barcrest) (MPU5) (set 2)", + "m5vampup", "Vamp It Up (Barcrest) (MPU5)", + "m5vertcl", "Vertigo Club (Empire) (MPU5)", + "m5vertgo", "Vertigo (Empire) (MPU5)", + "m5whdres", "Who Dares Spins (MPU5)", + "m5winway", "Winning Ways (MPU5)", + "m5wking", "Wild King (Barcrest) (MPU5) (set 1)", + "m5wking05", "Wild King (Barcrest) (MPU5) (set 2)", + "m5wonga", "A Fish Called Wonga (Empire) (MPU5)", + "m5wthing", "Wild Thing Club (Empire) (MPU5) (set 1)", + "m5wthing11", "Wild Thing Club (Empire) (MPU5) (set 2)", + "m5wthing20", "Wild Thing Club (Empire) (MPU5) (set 3)", + "m5xchn", "Exchanges Unlimited (Barcrest) (MPU5)", + "m5xena", "Xena Warrior Princess (Bwb) (MPU5)", + "m5xfact", "X Factor (Empire) (MPU5) (set 1)", + "m5xfact02", "X Factor (Empire) (MPU5) (set 2)", + "m5xfact04", "X Factor (Empire) (MPU5) (set 3)", + "m5xfact11", "X Factor (Empire) (MPU5) (set 4)", + "m5zigzag", "Zig Zag (Barcrest - Red Gaming) (MPU5)", + "m660", "Mission 660 (US)", + "m660b", "Mission 660 (bootleg)", + "m660j", "Mission 660 (Japan)", + "m79amb", "M-79 Ambush", + "m_mpac", "Mr. and Mrs. PacMan", + "m_tppokr", "Top Poker (Dutch, Game Card 95-750-899)", + "mac2bios", "Multi Amenity Cassette System 2 BIOS", + "macattck", "Mac Attack", + "mace", "Mace: The Dark Age (boot ROM 1.0ce, HDD 1.0b)", + "macea", "Mace: The Dark Age (HDD 1.0a)", + "mach2", "Mach 2", + "mach3", "M.A.C.H. 3", + "macha", "Monoshiri Quiz Osyaberi Macha (Japan)", + "machbrkr", "Mach Breakers - Numan Athletics 2 (Japan)", + "machomou", "Macho Mouse", + "machridr", "Vs. Mach Rider (Endurance Course Version)", + "machridra", "Vs. Mach Rider (Fighting Course Version, set MR4-1 A)", + "macross", "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", + "macross2", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", + "macrossp", "Macross Plus", + "macsbios", "Multi Amenity Cassette System BIOS", + "madalien", "Mad Alien", + "madaliena", "Mad Alien (Highway Chase)", + "madball", "Mad Ball V2.0", + "madballn", "Mad Ball V2.0 (With Nudity)", + "madcrash", "Mad Crasher", + "madcrush", "Mad Crusher (Japan)", + "maddog", "Mad Dog McCree v2.03 board rev.B", + "maddog2", "Mad Dog II: The Lost Gold v2.04", + "maddog21", "Mad Dog II: The Lost Gold v1.0", + "maddog22", "Mad Dog II: The Lost Gold v2.02", + "maddoga", "Mad Dog McCree v1C board rev.A", + "maddonna", "Mad Donna (set 1)", + "maddonnb", "Mad Donna (set 2)", + "madgear", "Mad Gear (US)", + "madgearj", "Mad Gear (Japan)", + "madmotor", "Mad Motor", + "madrace", "Mad Race", + "madshark", "Mad Shark", + "madzoo", "Mad Zoo (version U450C)", + "magdrop", "Magical Drop (Japan, Version 1.1, 1995.06.21)", + "magdrop2", "Magical Drop II", + "magdrop3", "Magical Drop III", + "magdropp", "Magical Drop Plus 1 (Japan, Version 2.1, 1995.09.12)", + "magerror", "Magical Error wo Sagase", + "magic", "Magic", + "magic10", "Magic's 10 (ver. 16.55)", + "magic102", "Magic's 10 2 (ver 1.1)", + "magic10a", "Magic's 10 (ver. 16.54)", + "magic10b", "Magic's 10 (ver. 16.45)", + "magic10c", "Magic's 10 (ver. 16.15)", + "magicard", "Magic Card (set 1)", + "magicarda", "Magic Card (set 2)", + "magicardb", "Magic Card (set 3)", + "magicarde", "Magic Card Export 94", + "magicardj", "Magic Card Jackpot (4.01)", + "magicbal", "Magicball Fighting (Korea)", + "magicbom", "Magic Bomb (Version 1)", + "magicbub", "Magic Bubble", + "magicbuba", "Magic Bubble (Adult version)", + "magicfly", "Magic Fly", + "magicle", "Magic Lotto Export (5.03)", + "magicmsk", "Magic Mask (MV4115, Export)", + "magicrd2", "Magic Card II (Bulgarian)", + "magicrd2a", "Magic Card II (Nov, Yugoslavian)", + "magicrd2b", "Magic Card II (green TAB or Impera board)", + "magicrd2c", "Magic Card II (blue TAB board, encrypted)", + "magicstk", "Magic Sticks", + "magictg", "Magic the Gathering: Armageddon (set 1)", + "magictga", "Magic the Gathering: Armageddon (set 2)", + "magix", "Magix / Rock", + "magixb", "Magix / Rock (no copyright message)", + "magjoker", "Magic Joker (v1.25.10.2000)", + "maglord", "Magician Lord (NGM-005)", + "maglordh", "Magician Lord (NGH-005)", + "magmax", "Mag Max", + "magodds", "Magical Odds (set 1)", + "magoddsa", "Magical Odds (set 2)", + "magoddsb", "Magical Odds (set 3)", + "magoddsc", "Magical Odds (set 4, custom encrypted CPU block)", + "magoddsd", "Magical Odds (set 5, custom encrypted CPU block)", + "magspeed", "Magical Speed", + "magspot", "Magical Spot", + "magspot2", "Magical Spot II", + "magtouch", "Magical Touch", + "magtruck", "Magical Truck Adventure", + "magworm", "Magic Worm (bootleg of Centipede, set 1)", + "magworma", "Magic Worm (bootleg of Centipede, set 2)", + "magzun", "Magical Zunou Power (J 961031 V1.000)", + "mahjngoh", "Mahjong Oh (V2.06J)", + "mahmajn", "Tokoro San no MahMahjan (Japan, ROM Based)", + "mahmajn2", "Tokoro San no MahMahjan 2 (Japan, ROM Based)", + "mahoudai", "Mahou Daisakusen (Japan)", + "mahretsu", "Mahjong Kyo Retsuden (NGM-004)(NGH-004)", + "maiko", "Maikobana (Japan 900802)", + "mainevt", "The Main Event (4 Players ver. Y)", + "mainevt2p", "The Main Event (2 Players ver. X)", + "mainevto", "The Main Event (4 Players ver. F)", + "mainline", "Mainline Double Joker Poker", + "mainsnk", "Main Event (1984)", + "majest12", "Majestic Twelve - The Space Invaders Part IV (Japan)", + "majorpkr", "Major Poker (v2.0)", + "majrjhdx", "Mahjong Raijinhai DX", + "majs101b", "Mahjong Studio 101 [BET] (Japan)", + "majtitl2", "Major Title 2 (World)", + "majtitl2j", "Major Title 2 (Japan)", + "majtitle", "Major Title (World)", + "majtitlej", "Major Title (Japan)", + "majuu", "Majuu no Ohkoku", + "majxtal7", "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)", + "makaiden", "Makai Densetsu (Japan)", + "makaijan", "Makaijan [BET] (Japan)", + "makaimur", "Makai-Mura (Japan)", + "makaimurc", "Makai-Mura (Japan Revision C)", + "makaimurg", "Makai-Mura (Japan Revision G)", + "maketrax", "Make Trax (US set 1)", + "maketrxb", "Make Trax (US set 2)", + "makyosen", "Makyou Senshi (Japan)", + "maletmad", "Mallet Madness v2.1", + "malzak", "Malzak", + "malzak2", "Malzak II", + "mamboagg", "Mambo A Go-Go (GQA40 VER. JAB)", + "mamboagga", "Mambo A Go-Go e-Amusement (GQA40 VER. JRB)", + "mamonoro", "Mamoru-kun wa Norowarete Shimatta!", + "mangchi", "Mang-Chi", + "manhatan", "Manhattan 24 Bunsyo (Japan)", + "maniach", "Mania Challenge (set 1)", + "maniach2", "Mania Challenge (set 2)", + "maniacsp", "Maniac Square (prototype)", + "maniacsq", "Maniac Square (unprotected)", + "manicpnc", "Manic Panic Ghosts!", + "manohman", "Mann, oh-Mann", + "manxtt", "Manx TT Superbike - DX (Revision D)", + "manxttc", "Manx TT Superbike - Twin (Revision C)", + "manybloc", "Many Block", + "mappy", "Mappy (US)", + "mappyj", "Mappy (Japan)", + "marble", "Marble Madness (set 1)", + "marble2", "Marble Madness (set 2)", + "marble3", "Marble Madness (set 3)", + "marble4", "Marble Madness (set 4)", + "marble5", "Marble Madness (set 5 - LSI Cartridge)", + "margmgc", "Margarita Magic (01J00101, NSW/ACT)", + "marineb", "Marine Boy", + "marinedt", "Marine Date", + "mariner", "Mariner", + "mario", "Mario Bros. (US, Revision F)", + "marioe", "Mario Bros. (US, Revision E)", + "marioj", "Mario Bros. (Japan)", + "marioo", "Mario Bros. (US, Unknown Rev)", + "markham", "Markham", + "mars", "Mars", + "marsp", "Mars - God of War", + "marstv", "Mars TV (JPN)", + "martmast", "Martial Masters (ver. 104, 102, 102US)", + "martmastc", "Martial Masters (ver. 104, 102, 101CN)", + "martmastc102", "Martial Masters (ver. 102, 101, 101CN)", + "maruchan", "Maru-Chan de Goo! (J 971216 V1.000)", + "marukin", "Super Marukin-Ban (Japan 901017)", + "marukodq", "Chibi Marukochan Deluxe Quiz", + "marvins", "Marvin's Maze", + "marvland", "Marvel Land (US)", + "marvlandj", "Marvel Land (Japan)", + "masao", "Masao", + "maski", "Maski Show (Russia) (Extrema)", + "mastboy", "Master Boy (Spanish, PCB Rev A)", + "mastboyi", "Master Boy (Italian, PCB Rev A)", + "masterw", "Master of Weapon (World)", + "masterwj", "Master of Weapon (Japan)", + "masterwu", "Master of Weapon (US)", + "mastkin", "The Masters of Kin", + "mastninj", "Master Ninja (bootleg of Shadow Warriors / Ninja Gaiden)", + "matahari", "Mata Hari", + "match98", "Match '98 (ver. 1.33)", + "matchit", "Match It", + "matchit2", "Match It II", + "matmania", "Mat Mania", + "matrim", "Matrimelee / Shin Gouketsuji Ichizoku Toukon (NGM-2660) (NGH-2660)", + "matrimbl", "Matrimelee / Shin Gouketsuji Ichizoku Toukon (bootleg)", + "mausuke", "Mausuke no Ojama the World (J 960314 V1.000)", + "mav_100", "Maverick (1.00)", + "mav_400", "Maverick (Display Rev. 4.00)", + "mav_401", "Maverick (Display Rev. 4.01)", + "mav_402", "Maverick (Display Rev. 4.02)", + "maverik", "Maverik", + "maxaflex", "Max-A-Flex", + "maxf_102", "Maximum Force v1.02", + "maxf_ng", "Maximum Force (No Gore version)", + "maxforce", "Maximum Force v1.05", + "maxidbl", "Maxi Double Poker (Ver. 1.10)", + "maxideal", "Maxi-Dealer", + "maxrpm", "Max RPM (ver 2)", + "maxspeed", "Maximum Speed", + "maya", "Maya (set 1)", + "mayaa", "Maya (set 2)", + "mayday", "Mayday (set 1)", + "maydaya", "Mayday (set 2)", + "maydayb", "Mayday (set 3)", + "mayhem", "Mayhem 2002", + "mayjin3", "Mayjinsen 3", + "mayjinsn", "Mayjinsen", + "mayjisn2", "Mayjinsen 2", + "mayumi", "Kikiippatsu Mayumi-chan (Japan)", + "mazan", "Mazan: Flash of the Blade (MAZ2 Ver. A)", + "mazana", "Mazan: Flash of the Blade (MAZ3 Ver. A)", + "maze", "Amazing Maze", + "mazeinv", "Maze Invaders (prototype)", + "mazerbla", "Mazer Blazer (set 1)", + "mazerblaa", "Mazer Blazer (set 2)", + "mazinger", "Mazinger Z (World)", + "mazingerj", "Mazinger Z (Japan)", + "mb_10", "Monster Bash (1.0)", + "mb_106", "Monster Bash (1.06)", + "mb_106b", "Monster Bash (1.06b)", + "mbaa", "Melty Blood Actress Again", + "mbaaa", "Melty Blood Actress Again (Ver. A)", + "mbomberj", "Muscle Bomber: The Body Explosion (Japan 930713)", + "mbombrd", "Muscle Bomber Duo: Ultimate Team Battle (World 931206)", + "mbombrdj", "Muscle Bomber Duo: Heat Up Warriors (Japan 931206)", + "mbossy", "Mike Bossy", + "mbrush", "Magic Brush (bootleg of Crush Roller)", + "mcastle", "Magic Castle", + "mcastlef", "Magic Castle (French speech)", + "mcastleg", "Magic Castle (German speech)", + "mcastlei", "Magic Castle (Italian speech)", + "mcatadv", "Magical Cat Adventure", + "mcatadvj", "Magical Cat Adventure (Japan)", + "mchampdx", "Multi Champ Deluxe (ver. 0106, 06/01/2000)", + "mchampdxa", "Multi Champ Deluxe (ver. 1126, 26/11/1999)", + "mchampdxb", "Multi Champ Deluxe (ver. 1114, 14/11/1999)", + "mcitylov", "City Love [BET] (Japan 860904)", + "mclass", "Magic Class (Ver 2.2)", + "mcnpshnt", "Mahjong Campus Hunting (Japan)", + "mcolors", "Magic Colors (ver. 1.7a)", + "mcombat", "Missile Combat (Videotron bootleg, set 1)", + "mcombata", "Missile Combat (Videotron bootleg, set 2)", + "mcombats", "Missile Combat (Sidam bootleg)", + "mcontest", "Miss Mahjong Contest (Japan)", + "mdhorse", "Derby Quiz My Dream Horse (Japan, MDH1/VER.A2)", + "mdntmrdr", "Midnight Marauders (Gun game)", + "mdrawpkr", "Draw Poker - Joker's Wild (Standard)", + "mdrawpkra", "Draw Poker - Joker's Wild (02-11)", + "mdrink", "Magic Drink (Ver 1.2)", + "mechatt", "Mechanized Attack (World)", + "mechattj", "Mechanized Attack (Japan)", + "mechattu", "Mechanized Attack (US)", + "mechattu1", "Mechanized Attack (US, Version 1, Single Player)", + "medlanes", "Meadows Lanes", + "medusa", "Medusa", + "megaaton", "Meg Aaton", + "megablst", "Mega Blast (World)", + "megablstj", "Mega Blast (Japan)", + "megablstu", "Mega Blast (US)", + "megadble", "Mega Double Poker (Ver. 1.63 Espagnol)", + "megadblj", "Mega Double Poker Jackpot (Ver. 1.26)", + "megadon", "Megadon", + "megadpkr", "Mega Double Poker (conversion kit, set 1)", + "megadpkrb", "Mega Double Poker (conversion kit, set 2)", + "megaforc", "Mega Force", + "megakat", "Mega Katok 2", + "megaline", "Mega Lines", + "megaman", "Mega Man: The Power Battle (CPS1, USA 951006)", + "megaman2", "Mega Man 2: The Power Fighters (USA 960708)", + "megaman2a", "Mega Man 2: The Power Fighters (Asia 960708)", + "megaman2h", "Mega Man 2: The Power Fighters (Hispanic 960712)", + "megamana", "Mega Man: The Power Battle (CPS1, Asia 951006)", + "megamn2d", "Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg)", + "megaphx", "Mega Phoenix", + "megaplay", "Mega Play BIOS", + "megat2", "Pit Boss Megatouch II (9255-10-01 ROG, Standard version)", + "megat2a", "Pit Boss Megatouch II (9255-10-01 ROE, Standard version)", + "megat2b", "Pit Boss Megatouch II (9255-10-01 ROD, Standard version)", + "megat2ca", "Pit Boss Megatouch II (9255-10-06 ROG, California version)", + "megat2caa", "Pit Boss Megatouch II (9255-10-06 ROE, California version)", + "megat2mn", "Pit Boss Megatouch II (9255-10-02 ROG, Minnesota version)", + "megat3", "Megatouch III (9255-20-01 RON, Standard version)", + "megat3a", "Megatouch III (9255-20-01 ROK, Standard version)", + "megat3b", "Megatouch III (9255-20-01 ROF, Standard version)", + "megat3c", "Megatouch III (9255-20-01 ROB, Standard version)", + "megat3ca", "Megatouch III (9255-20-06 RON, California version)", + "megat3caa", "Megatouch III (9255-20-06 ROD, California version)", + "megat3d", "Megatouch III (9255-20-01 ROA, Standard version)", + "megat3nj", "Megatouch III (9255-20-07 ROG, New Jersey version)", + "megat3te", "Megatouch III Tournament Edition (9255-30-01 ROE, Standard version)", + "megat4", "Megatouch IV (9255-40-01 ROE, Standard version)", + "megat4a", "Megatouch IV (9255-40-01 ROD, Standard version)", + "megat4b", "Megatouch IV (9255-40-01 ROB, Standard version)", + "megat4c", "Megatouch IV (9255-40-01 ROA, Standard version)", + "megat4d", "Megatouch IV (9255-40-01 RO, Standard version)", + "megat4s", "Super Megatouch IV (9255-41-01 ROG, Standard version)", + "megat4sa", "Super Megatouch IV (9255-41-01 ROE, Standard version)", + "megat4sb", "Super Megatouch IV (9255-41-01 ROC, Standard version)", + "megat4smn", "Super Megatouch IV (9255-41-02 ROC, Minnesota version)", + "megat4snj", "Super Megatouch IV (9255-41-07 ROG, New Jersey version)", + "megat4st", "Super Megatouch IV Tournament Edition (9255-51-01 ROB, Standard version)", + "megat4stg", "Super Megatouch IV Turnier Version (9255-51-50 ROA, Bi-Lingual GER/ENG version)", + "megat4te", "Megatouch IV Tournament Edition (9255-50-01 ROD, Standard version)", + "megat4tea", "Megatouch IV Tournament Edition (9255-50-01 ROA, Standard version)", + "megat5", "Megatouch 5 (9255-60-01 ROI, Standard version)", + "megat5a", "Megatouch 5 (9255-60-01 ROC, Standard version)", + "megat5nj", "Megatouch 5 (9255-60-07 RON, New Jersey version)", + "megat5t", "Megatouch 5 Tournament Edition (9255-70-01 ROC, Standard version)", + "megat5tg", "Megatouch 5 Turnier Version (9255-70-50 ROD, Bi-Lingual GER/ENG version)", + "megat6", "Megatouch 6 (9255-80-01 ROA, Standard version)", + "megatack", "Megatack", + "megatech", "Mega-Tech", + "megazone", "Mega Zone (Konami set 1)", + "megazonea", "Mega Zone (Konami set 2)", + "megazoneb", "Mega Zone (Kosuka set 1)", + "megazonec", "Mega Zone (Kosuka set 2)", + "megazonei", "Mega Zone (Interlogic)", + "meijinsn", "Meijinsen", + "meikyuh", "Meikyuu Hunter G (Japan, set 1)", + "meikyuha", "Meikyuu Hunter G (Japan, set 2)", + "meltyb", "Melty Blood Act Cadenza Ver B (GDL-0039)", + "meltyba", "Melty Blood Act Cadenza Ver B (Rev A) (GDL-0039A)", + "meltybld", "Melty Blood Act Cadenza (Rev C) (GDL-0028C)", + "memlane", "Memory Lane", + "meosism", "Meosis Magic (Japan)", + "mephistp", "Mephisto (rev. 1.2)", + "mephistp1", "Mephisto (rev. 1.1)", + "mercs", "Mercs (World 900302)", + "mercsj", "Senjou no Ookami II (Japan 900302)", + "mercsu", "Mercs (USA 900608)", + "mercsur1", "Mercs (USA 900302)", + "merlinmm", "Merlins Money Maze", + "mermaid", "Mermaid", + "merryjn", "Merry Joiner", + "metafox", "Meta Fox", + "metalb", "Metal Black (World)", + "metalbj", "Metal Black (Japan)", + "metalman", "Metal Man", + "metalmx", "Metal Maniax (prototype)", + "metamrph", "Metamorphic Force (ver EAA)", + "metamrphj", "Metamorphic Force (ver JAA)", + "metamrphu", "Metamorphic Force (ver UAA)", + "meteor", "Meteoroids", + "meteorho", "Meteor (bootleg of Asteroids)", + "meteorp", "Meteor (Stern)", + "meteort", "Meteor (Taito)", + "meteorts", "Meteorites (bootleg of Asteroids)", + "metlclsh", "Metal Clash (Japan)", + "metlhawk", "Metal Hawk (Rev C)", + "metlhawkj", "Metal Hawk (Japan, Rev F)", + "metlsavr", "Metal Saver", + "metmqstr", "Metamoqester (International)", + "metrocrs", "Metro-Cross (set 1)", + "metrocrsa", "Metro-Cross (set 2)", + "mexico", "Mexico 86 (German speech)", + "mexico86", "Mexico 86 (bootleg of Kick and Run)", + "mf_achas", "Astro Chase (Max-A-Flex)", + "mf_bdash", "Boulder Dash (Max-A-Flex)", + "mf_brist", "Bristles (Max-A-Flex)", + "mf_flip", "Flip & Flop (Max-A-Flex)", + "mfightc", "Mahjong Fight Club (ver JAD)", + "mfightcc", "Mahjong Fight Club (ver JAC)", + "mfish_11", "Multi Fish (031124)", + "mfish_12", "Multi Fish (040308)", + "mfish_12a", "Multi Fish (bootleg, 040308, banking address hack)", + "mfish_13", "Multi Fish (040316)", + "mfish_3", "Multi Fish (021124)", + "mfish_3a", "Multi Fish (bootleg, 021124, banking address hack)", + "mfish_6", "Multi Fish (030124)", + "mfish_8", "Multi Fish (030522)", + "mfjump", "Monster Farm Jump (Japan)", + "mfunclub", "Mahjong Fun Club - Idol Saizensen (Japan)", + "mg_alad", "Aladdin's Cave (Maygay M2)", + "mg_bb", "Big Break (Maygay M2)", + "mg_ewg", "Each Way Gambler (Maygay M2)", + "mg_gbr", "Guinness Book Of Records (Maygay M2)", + "mg_jv", "Jack & Vera (Maygay M2)", + "mg_kf", "Krypton Factor (Maygay M2)", + "mg_lug", "London Underground (Maygay M2)", + "mg_pbw", "Pinball Wizard (Maygay M2)", + "mg_risk", "Risk (Maygay M2)", + "mg_scl", "Super Clue (Maygay M2)", + "mgakuen", "Mahjong Gakuen", + "mgakuen2", "Mahjong Gakuen 2 Gakuen-chou no Fukushuu", + "mgcldate", "Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J)", + "mgcldtex", "Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J)", + "mgcrystl", "Magical Crystals (World, 92/01/10)", + "mgcrystlj", "Magical Crystals (Japan, 92/01/13)", + "mgcrystlo", "Magical Crystals (World, 91/12/10)", + "mgcs", "Mahjong Man Guan Cai Shen (V103CS)", + "mgdh", "Mahjong Man Guan Da Heng (Taiwan, V125T1)", + "mgdha", "Mahjong Man Guan Da Heng (Taiwan, V123T1)", + "mgfx", "Man Guan Fu Xing", + "mgion", "Gionbana [BET] (Japan 890207)", + "mgmen89", "Mahjong G-MEN'89 (Japan 890425)", + "mgnumber", "Magic Number", + "mgolf", "Atari Mini Golf (prototype)", + "mgprem11", "Magic Premium (v1.1)", + "mhavoc", "Major Havoc (rev 3)", + "mhavoc2", "Major Havoc (rev 2)", + "mhavocp", "Major Havoc (prototype)", + "mhavocrv", "Major Havoc (Return to Vax)", + "mhgaiden", "Mahjong Hourouki Gaiden (Japan)", + "mhhonban", "Mahjong Housoukyoku Honbanchuu (Japan)", + "mia", "M.I.A. - Missing in Action (version T)", + "mia2", "M.I.A. - Missing in Action (version S)", + "miaj", "M.I.A. - Missing in Action (Japan)", + "michigan", "Michigan (Bingo)", + "michkit1", "Michigan Bingo Kit 1 Generation (Bingo)", + "michkitb", "Michigan Kit Bingo Stake 6/10 (Bingo)", + "michnew", "Michigan Bingo New (Bingo)", + "michstake", "Michigan Bingo Stake 6/10 (Bingo)", + "micrombc", "Microman Battle Charge (J 990326 V1.000)", + "midearth", "Middle Earth", + "midnrun", "Midnight Run (Euro v1.11)", + "midres", "Midnight Resistance (World)", + "midresb", "Midnight Resistance (bootleg with 68705)", + "midresj", "Midnight Resistance (Japan)", + "midresu", "Midnight Resistance (US)", + "miexchng", "Money Puzzle Exchanger / Money Idol Exchanger", + "mightguy", "Mighty Guy", + "mightybj", "Vs. Mighty Bomb Jack (Japan)", + "mikie", "Mikie", + "mikiehs", "Mikie (High School Graffiti)", + "mikiej", "Shinnyuushain Tooru-kun", + "mil4000", "Millennium Nuovo 4000 (Version 2.0)", + "mil4000a", "Millennium Nuovo 4000 (Version 1.8)", + "mil4000b", "Millennium Nuovo 4000 (Version 1.5)", + "mil4000c", "Millennium Nuovo 4000 (Version 1.6)", + "millipdd", "Millipede Dux (hack)", + "milliped", "Millipede", + "milln_l3", "Millionaire (L-3)", + "millpac", "Millpac (bootleg of Centipede)", + "millsun", "Millennium Sun", + "mimonkey", "Mighty Monkey", + "mimonsco", "Mighty Monkey (bootleg on Super Cobra hardware)", + "mimonscr", "Mighty Monkey (bootleg on Scramble hardware)", + "minasan", "Minasanno Okagesamadesu! Daisugorokutaikai (MOM-001)(MOH-001)", + "minefld", "Minefield", + "mineswpr", "Minesweeper", + "mineswpr4", "Minesweeper (4-Player)", + "minferno", "Inferno (Meadows)", + "miniboy7", "Mini Boy 7 (set 1)", + "miniboy7a", "Mini Boy 7 (set 2)", + "miniboy7b", "Mini Boy 7 (set 3)", + "minigolf", "Mini Golf (11/25/85)", + "minigolf2", "Mini Golf (10/8/85)", + "minivadr", "Mini Vaders", + "mirage", "Mirage Youjuu Mahjongden (Japan)", + "mirax", "Mirax (set 1)", + "miraxa", "Mirax (set 2)", + "mirderby", "Miracle Derby - Ascot", + "mirninja", "Mirai Ninja (Japan)", + "misncrft", "Mission Craft (version 2.7)", + "misncrfta", "Mission Craft (version 2.4)", + "missb2", "Miss Bubble II", + "missile", "Missile Command (rev 3)", + "missile1", "Missile Command (rev 1)", + "missile2", "Missile Command (rev 2)", + "missilem", "Missile Command Multigame", + "missmw96", "Miss Mister World '96 (Nude)", + "missw96", "Miss World '96 (Nude) (set 1)", + "missw96a", "Miss World '96 (Nude) (set 2)", + "missw96b", "Miss World '96 (Nude) (set 3)", + "mizubaku", "Mizubaku Daibouken (Japan)", + "mj2", "Sega Network Taisen Mahjong MJ 2 (Rev C) (GDX-0006C)", + "mj3", "Sega Network Taisen Mahjong MJ 3 (Rev D) (GDX-0017D)", + "mj3f", "Sega Network Taisen Mahjong MJ 3 (Rev F) (GDX-0017F)", + "mj4simai", "Wakakusamonogatari Mahjong Yonshimai (Japan)", + "mjanbari", "Medal Mahjong Janjan Baribari [BET] (Japan)", + "mjangels", "Mahjong Angels - Comic Theater Vol.2 (Japan)", + "mjapinky", "Almond Pinky [BET] (Japan)", + "mjcamera", "Mahjong Camera Kozou (set 1) (Japan 881109)", + "mjcamerb", "Mahjong Camera Kozou (set 2) (Japan 881109)", + "mjchuuka", "Mahjong Chuukanejyo (China)", + "mjclinic", "Mahjong Clinic (Japan)", + "mjclub", "Mahjong Club [BET] (Japan)", + "mjcomv1", "Mahjong Comic Gekijou Vol.1 (Japan)", + "mjdchuka", "Mahjong The Dai Chuuka Ken (China, v. D111)", + "mjdejav2", "Mahjong Shinkirou Deja Vu 2 (Japan)", + "mjdejavu", "Mahjong Shinkirou Deja Vu (Japan)", + "mjderngr", "Mahjong Derringer (Japan)", + "mjdialq2", "Mahjong Dial Q2 (Japan)", + "mjdiplob", "Mahjong Diplomat [BET] (Japan)", + "mjegolf", "Mahjong Erotica Golf (Japan)", + "mjelct3", "Mahjong Electron Base (parts 2 & 3, Japan)", + "mjelct3a", "Mahjong Electron Base (parts 2 & 3, alt., Japan)", + "mjelctrb", "Mahjong Electron Base (parts 2 & 4, Japan, bootleg)", + "mjelctrn", "Mahjong Electron Base (parts 2 & 4, Japan)", + "mjflove", "Mahjong Fantasic Love (Japan)", + "mjfocus", "Mahjong Focus (Japan 890313)", + "mjfocusm", "Mahjong Focus [BET] (Japan 890510)", + "mjfriday", "Mahjong Friday (Japan)", + "mjgaiden", "Mahjong Gaiden [BET] (Japan 870803)", + "mjgottsu", "Mahjong Gottsu ee-kanji (Japan)", + "mjgottub", "Medal Mahjong Gottsu ee-kanji [BET] (Japan)", + "mjgtaste", "Mahjong G-Taste", + "mjhokite", "Mahjong Hourouki Okite (Japan)", + "mjifb", "Mahjong If...? [BET]", + "mjifb2", "Mahjong If...? [BET](2921)", + "mjifb3", "Mahjong If...? [BET](2931)", + "mjikaga", "Mahjong Ikaga Desu ka (Japan)", + "mjkinjas", "Mahjong Kinjirareta Asobi (Japan)", + "mjkjidai", "Mahjong Kyou Jidai (Japan)", + "mjkoiura", "Mahjong Koi Uranai (Japan set 1)", + "mjkojink", "Mahjong Kojinkyouju (Private Teacher) (Japan)", + "mjlaman", "Mahjong La Man (Japan)", + "mjleague", "Major League", + "mjlstory", "Mahjong Jikken Love Story (Japan)", + "mjmania", "Mahjong Mania - Kairakukan e Youkoso (Japan)", + "mjmyornt", "Mahjong The Mysterious Orient", + "mjmyster", "Mahjong The Mysterious World (set 1)", + "mjmyuniv", "Mahjong The Mysterious Universe", + "mjmywrld", "Mahjong The Mysterious World (set 2)", + "mjnanpaa", "Mahjong Nanpa Story (Japan 890712)", + "mjnanpas", "Mahjong Nanpa Story (Japan 890713)", + "mjnanpau", "Mahjong Nanpa Story (Ura) (Japan 890805)", + "mjnatsu", "Mahjong Natsu Monogatari (Japan)", + "mjnquest", "Mahjong Quest (Japan)", + "mjnquestb", "Mahjong Quest (No Nudity)", + "mjprivat", "Mahjong Private (Japan)", + "mjreach", "Mahjong Reach (bootleg)", + "mjreach1", "Mahjong Reach Ippatsu (Japan)", + "mjsenka", "Mahjong Senka (Japan)", + "mjsikakb", "Mahjong Shikaku (Japan 880722)", + "mjsikakc", "Mahjong Shikaku (Japan 880806)", + "mjsikakd", "Mahjong Shikaku (Japan 880802)", + "mjsikaku", "Mahjong Shikaku (Japan 880908)", + "mjsister", "Mahjong Sisters (Japan)", + "mjsiyoub", "Mahjong Shiyou (Japan)", + "mjtensin", "Mahjong Tensinhai (Japan)", + "mjuraden", "Mahjong Uranai Densetsu (Japan)", + "mjvegas", "Mahjong Vegas (Japan)", + "mjvegasa", "Mahjong Vegas (Japan, unprotected)", + "mjyarou", "Mahjong Yarou [BET] (Japan)", + "mjyougo", "Mahjong-yougo no Kisotairyoku (Japan)", + "mjyuugi", "Mahjong Yuugi (Japan set 1)", + "mjyuugia", "Mahjong Yuugi (Japan set 2)", + "mjzoomin", "Mahjong Channel Zoom In (Japan)", + "mk", "Mortal Kombat (rev 5.0 T-Unit 03/19/93)", + "mk2", "Mortal Kombat II (rev L3.1)", + "mk2chal", "Mortal Kombat II Challenger (hack)", + "mk2r11", "Mortal Kombat II (rev L1.1)", + "mk2r14", "Mortal Kombat II (rev L1.4)", + "mk2r20", "Mortal Kombat II (rev L2.0)", + "mk2r21", "Mortal Kombat II (rev L2.1)", + "mk2r30", "Mortal Kombat II (rev L3.0)", + "mk2r31e", "Mortal Kombat II (rev L3.1 (European))", + "mk2r32e", "Mortal Kombat II (rev L3.2 (European))", + "mk2r42", "Mortal Kombat II (rev L4.2, hack)", + "mk2r91", "Mortal Kombat II (rev L9.1, hack)", + "mk3", "Mortal Kombat 3 (rev 2.1)", + "mk3mdb", "Mortal Kombat 3 (bootleg of Megadrive version)", + "mk3p40", "Mortal Kombat 3 (rev 1 chip label p4.0)", + "mk3r10", "Mortal Kombat 3 (rev 1.0)", + "mk3r20", "Mortal Kombat 3 (rev 2.0)", + "mk4", "Mortal Kombat 4 (version 3.0)", + "mk4a", "Mortal Kombat 4 (version 2.1)", + "mk4b", "Mortal Kombat 4 (version 1.0)", + "mk6nsw11", "Aristocrat MK6 Base (11011901, NSW/ACT)", + "mkartagp", "Mario Kart Arcade GP (MKA2 Ver.B)", + "mkeibaou", "Mahjong Keibaou (Japan)", + "mkla1", "Mortal Kombat (rev 1.0 08/09/92)", + "mkla2", "Mortal Kombat (rev 2.0 08/18/92)", + "mkla3", "Mortal Kombat (rev 3.0 08/31/92)", + "mkla4", "Mortal Kombat (rev 4.0 09/28/92)", + "mknifty", "Mortal Kombat (Nifty Kombo, hack)", + "mknifty666", "Mortal Kombat (Nifty Kombo 666, hack)", + "mkoiuraa", "Mahjong Koi Uranai (Japan set 2)", + "mkprot4", "Mortal Kombat (prototype, rev 4.0 07/14/92)", + "mkprot8", "Mortal Kombat (prototype, rev 8.0 07/21/92)", + "mkprot9", "Mortal Kombat (prototype, rev 9.0 07/28/92)", + "mkr4", "Mortal Kombat (rev 4.0 T-Unit 02/11/93)", + "mktturbo", "Mortal Kombat (Turbo Ninja T-Unit 03/19/93, hack)", + "mkyawdim", "Mortal Kombat (Yawdim bootleg, set 1)", + "mkyawdim2", "Mortal Kombat (Yawdim bootleg, set 2)", + "mkyturbo", "Mortal Kombat (Turbo 3.1 09/09/93, hack)", + "mkyturboe", "Mortal Kombat (Turbo 3.0 08/31/92, hack)", + "mladyhtr", "Mahjong The Lady Hunter (Japan 900509)", + "mlander", "Moon Lander (bootleg of Lunar Rescue)", + "mlanding", "Midnight Landing (Germany)", + "mm_05", "Medieval Madness (0.50)", + "mm_10", "Medieval Madness (1.0)", + "mm_109", "Medieval Madness (1.09)", + "mm_109b", "Medieval Madness (1.09B)", + "mm_109c", "Medieval Madness (1.09C Profanity)", + "mm_10u", "Medieval Madness (1.0 Ultrapin)", + "mmaiko", "Maikobana [BET] (Japan 900911)", + "mmancp2u", "Mega Man: The Power Battle (CPS2, USA 951006, SAMPLE Version)", + "mmatrix", "Mars Matrix: Hyper Solid Shooting (USA 000412)", + "mmatrixd", "Mars Matrix: Hyper Solid Shooting (USA 000412 Phoenix Edition) (bootleg)", + "mmatrixj", "Mars Matrix: Hyper Solid Shooting (Japan 000412)", + "mmaulers", "Monster Maulers (ver EAA)", + "mmaze", "Marchen Maze (Japan)", + "mmcamera", "Mahjong Camera Kozou [BET] (Japan 890509)", + "mmehyou", "Medal Mahjong Circuit no Mehyou [BET] (Japan)", + "mmm_ldip", "Lucky Dip (Maygay)", + "mmmbanc", "Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.)", + "mmonkey", "Minky Monkey", + "mmpanic", "Monkey Mole Panic (USA)", + "mmpork", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", + "mmsikaku", "Mahjong Shikaku [BET] (Japan 880929)", + "mnchmobl", "Munch Mobile (US)", + "mnfb_c27", "Monday Night Football (2.7, 50cts)", + "mnight", "Mutant Night", + "mntecrlo", "Monte Carlo (Pinball)", + "mnumber", "Mystery Number", + "mnumitg", "Magic Number (Italian Gambling Game, Ver 1.5)", + "mocapb", "Mocap Boxing (ver AAA)", + "mocapbj", "Mocap Boxing (ver JAA)", + "mocapglf", "Mocap Golf (ver UAA)", + "moegonta", "Moeyo Gonta!! (Japan)", + "moeru", "Moeru Casinyo (GDL-0013)", + "mofflott", "Maze of Flott (Japan)", + "moguchan", "Mogu Chan (bootleg?)", + "mogura", "Mogura Desse (Japan)", + "mohicans", "Mohican Sun (Konami Endeavour)", + "mok", "The Maze of the Kings (GDS-0022)", + "mole", "Mole Attack", + "momoko", "Momoko 120%", + "momotaro", "Mahjong Momotarou (Japan)", + "monacogp", "Monaco GP (Set 1) [TTL]", + "monacogpa", "Monaco GP (Set 2) [TTL]", + "moneybnk", "Money In The Bank (NSW, Australia)", + "moneymac", "Money Machine (Version 1.7E Dual)", + "moneymacd1", "Money Machine (Version 1.7R)", + "moneymacd2", "Money Machine (Version 1.7LT)", + "moneymacv1", "Money Machine (Version 1.7R Dual)", + "moneymacv2", "Money Machine (Version 1.7LT Dual)", + "mongolnw", "Mongolfier New (Italian)", + "monkelf", "Monky Elf (Korean bootleg of Avenging Spirit)", + "monkeyba", "Monkey Ball (GDS-0008)", + "monkeyd", "Monkey Donkey", + "mononew", "Monopoly (ARM7 Sound Board)", + "monop233", "Monopoly (2.33)", + "monop251", "Monopoly (2.51)", + "monop301", "Monopoly (3.01)", + "monop303", "Monopoly (3.03)", + "monoplcl", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", + "monopldx", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", + "monopolf", "Monopoly (France)", + "monopolg", "Monopoly (Germany)", + "monopoli", "Monopoly (Italy)", + "monopoll", "Monopoly (Spain)", + "monopolp", "Monopoly (3.20)", + "monopoly", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", + "monopolya", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", + "monopred", "Monopoly (Coin dropper)", + "monrobwl", "Stars & Strikes (Bowler)", + "monshow", "The Monster Show (Konami Endeavour)", + "monspdr", "Money Spider (Ace)", + "monsterb", "Monster Bash", + "monsterb2", "Monster Bash (2 board version)", + "monsterz", "Monster Zero", + "montana", "Montana Bingo Stake 6/10 (Bingo)", + "montecar", "Monte Carlo", + "monymony", "Money Money", + "monzagp", "Monza GP", + "monzagpb", "Monza GP (bootleg)", + "moomesa", "Wild West C.O.W.-Boys of Moo Mesa (ver EAB)", + "moomesaaab", "Wild West C.O.W.-Boys of Moo Mesa (ver AAB)", + "moomesabl", "Wild West C.O.W.-Boys of Moo Mesa (bootleg)", + "moomesauab", "Wild West C.O.W.-Boys of Moo Mesa (ver UAB)", + "moomesauac", "Wild West C.O.W.-Boys of Moo Mesa (ver UAC)", + "moonal2", "Moon Alien Part 2", + "moonal2b", "Moon Alien Part 2 (older version)", + "moonaln", "Moon Alien", + "moonbase", "Moon Base (set 1)", + "moonbasea", "Moon Base (set 2)", + "mooncmw", "Moon War (Moon Cresta bootleg)", + "mooncptc", "Moon Cresta (Petaco S.A. Spanish bootleg)", + "mooncreg", "Moon Cresta (Electrogame S.A. Spanish bootleg)", + "mooncrgx", "Moon Cresta (Galaxian hardware)", + "mooncrs2", "Moon Cresta (bootleg set 2)", + "mooncrs3", "Moon Cresta (bootleg set 3)", + "mooncrs4", "Moon Crest (Moon Cresta bootleg)", + "mooncrsb", "Moon Cresta (bootleg set 1)", + "mooncrsl", "Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg)", + "mooncrst", "Moon Cresta (Nichibutsu)", + "mooncrstg", "Moon Cresta (Gremlin)", + "mooncrsto", "Moon Cresta (Nichibutsu, old rev)", + "mooncrstu", "Moon Cresta (Nichibutsu USA, unencrypted)", + "mooncrstuk", "Moon Cresta (Nichibutsu UK)", + "mooncrstuku", "Moon Cresta (Nichibutsu UK, unencrypted)", + "moonlght", "Moon Light (bootleg of Golden Star)", + "moonqsr", "Moon Quasar", + "moonwar", "Moonwar", + "moonwara", "Moonwar (older)", + "moonwarp", "Moon War (prototype on Frenzy hardware)", + "moremore", "More More", + "moremorp", "More More Plus", + "mosaic", "Mosaic", + "mosaica", "Mosaic (Fuuki)", + "mosaicf2", "Mosaic (F2 System)", + "mosyougi", "Syougi No Tatsujin - Master of Syougi", + "motofren", "Moto Frenzy", + "motofrenft", "Moto Frenzy (Field Test Version)", + "motofrenmd", "Moto Frenzy (Mini Deluxe)", + "motofrenmf", "Moto Frenzy (Mini Deluxe Field Test Version)", + "motorace", "MotoRace USA", + "motoraid", "Motor Raid - Twin", + "motos", "Motos", + "mototour", "MotoTour / Zippy Race (Tecfri license)", + "motoxgo", "Motocross Go! (MG3 Ver. A)", + "motoxgov1a", "Motocross Go! (MG1 Ver. A, set 1)", + "motoxgov1a2", "Motocross Go! (MG1 Ver. A, set 2)", + "motoxgov2a", "Motocross Go! (MG2 Ver. A)", + "motrdome", "MotorDome", + "motrshow", "Motor Show (set 1)", + "motrshowa", "Motor Show (set 2)", + "mouja", "Mouja (Japan)", + "mouseatk", "Mouse Attack", + "mouser", "Mouser", + "mouserc", "Mouser (Cosmos)", + "mousn_l1", "Mousin' Around! (LA-1)", + "mousn_l4", "Mousin' Around! (LA-4)", + "mousn_lu", "Mousin' Around! (LU-1)", + "mousn_lx", "Mousin' Around! (LX-1)", + "moviecrd", "Movie Card", + "movmastr", "Movie Masters", + "mp_bio", "Bio-hazard Battle (Mega Play)", + "mp_col3", "Columns III (Mega Play)", + "mp_gaxe2", "Golden Axe II (Mega Play)", + "mp_gslam", "Grand Slam (Mega Play)", + "mp_mazin", "Mazin Wars / Mazin Saga (Mega Play)", + "mp_shnb3", "Shinobi III (Mega Play)", + "mp_soni2", "Sonic The Hedgehog 2 (Mega Play)", + "mp_sonic", "Sonic The Hedgehog (Mega Play)", + "mp_sor2", "Streets of Rage II (Mega Play)", + "mp_twc", "Tecmo World Cup (Mega Play)", + "mpang", "Mighty! Pang (Euro 001010)", + "mpangj", "Mighty! Pang (Japan 001011)", + "mpangr1", "Mighty! Pang (Euro 000925)", + "mpangu", "Mighty! Pang (USA 001010)", + "mpatrol", "Moon Patrol", + "mpatrolw", "Moon Patrol (Williams)", + "mplanets", "Mad Planets", + "mplanetsuk", "Mad Planets (UK)", + "mpoker", "Multi-Poker", + "mquake", "Moonquake", + "mranger", "Moon Ranger (bootleg of Moon Patrol)", + "mrblack", "Mr. Black", + "mrblack1", "Mr. Black (alternate set)", + "mrblkz80", "Mr. Black (Z-80 CPU)", + "mrdig", "Mr. Dig", + "mrdo", "Mr. Do!", + "mrdofix", "Mr. Do! (bugfixed)", + "mrdot", "Mr. Do! (Taito)", + "mrdoy", "Mr. Do! (prototype)", + "mrdrillr", "Mr. Driller (US, DRI3/VER.A2)", + "mrdrillrj", "Mr. Driller (Japan, DRI1/VER.A2)", + "mrdrilr2", "Mr. Driller 2 (Japan, DR21 Ver.A)", + "mrdrilrg", "Mr. Driller G (Japan, DRG1 Ver.A)", + "mrdrilrga", "Mr. Driller G ALT (Japan, DRG1 Ver.A)", + "mrdrlr2a", "Mr. Driller 2 (Asia, DR22 Ver.A)", + "mrdu", "Mr. Du!", + "mrflea", "The Amazing Adventures of Mr. F. Lea", + "mrgoemon", "Mr. Goemon (Japan)", + "mrheli", "Mr. HELI no Daibouken", + "mrjong", "Mr. Jong (Japan)", + "mrkicker", "Mr. Kicker", + "mrkougar", "Mr. Kougar", + "mrkougar2", "Mr. Kougar (earlier)", + "mrkougb", "Mr. Kougar (bootleg set 1)", + "mrkougb2", "Mr. Kougar (bootleg set 2)", + "mrlo", "Mr. Lo!", + "mrokumei", "Mahjong Rokumeikan (Japan)", + "mrtlbeat", "Martial Beat (G*B47 VER. JBA)", + "mrtnt", "Mr. TNT", + "mrviking", "Mister Viking (315-5041)", + "mrvikingj", "Mister Viking (315-5041, Japan)", + "ms4plus", "Metal Slug 4 Plus (bootleg)", + "ms5pcb", "Metal Slug 5 (JAMMA PCB)", + "ms5plus", "Metal Slug 5 Plus (bootleg)", + "msbingo", "Miss Bingo", + "mschamp", "Ms. Pacman Champion Edition / Zola-Puc Gal", + "mschamps", "Ms. Pacman Champion Edition / Super Zola-Puc Gal", + "mscoutm", "Mahjong Scout Man (Japan)", + "msgogo", "Mouse Shooter GoGo", + "msgundam", "Mobile Suit Gundam", + "msgundam1", "Mobile Suit Gundam (Japan)", + "msh", "Marvel Super Heroes (Euro 951024)", + "msha", "Marvel Super Heroes (Asia 951024)", + "mshb", "Marvel Super Heroes (Brazil 951117)", + "msheartb", "Ms. Pac-Man Heart Burn", + "mshh", "Marvel Super Heroes (Hispanic 951117)", + "mshj", "Marvel Super Heroes (Japan 951117)", + "mshjr1", "Marvel Super Heroes (Japan 951024)", + "mshu", "Marvel Super Heroes (USA 951024)", + "mshud", "Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg)", + "mshuttle", "Moon Shuttle (US? set 1)", + "mshuttle2", "Moon Shuttle (US? set 2)", + "mshuttlej", "Moon Shuttle (Japan set 1)", + "mshuttlej2", "Moon Shuttle (Japan set 2)", + "mshvsf", "Marvel Super Heroes Vs. Street Fighter (Euro 970625)", + "mshvsfa", "Marvel Super Heroes Vs. Street Fighter (Asia 970625)", + "mshvsfa1", "Marvel Super Heroes Vs. Street Fighter (Asia 970620)", + "mshvsfb", "Marvel Super Heroes Vs. Street Fighter (Brazil 970827)", + "mshvsfb1", "Marvel Super Heroes Vs. Street Fighter (Brazil 970625)", + "mshvsfh", "Marvel Super Heroes Vs. Street Fighter (Hispanic 970625)", + "mshvsfj", "Marvel Super Heroes Vs. Street Fighter (Japan 970707)", + "mshvsfj1", "Marvel Super Heroes Vs. Street Fighter (Japan 970702)", + "mshvsfj2", "Marvel Super Heroes Vs. Street Fighter (Japan 970625)", + "mshvsfu", "Marvel Super Heroes Vs. Street Fighter (USA 970827)", + "mshvsfu1", "Marvel Super Heroes Vs. Street Fighter (USA 970625)", + "mshvsfu1d", "Marvel Super Heroes Vs. Street Fighter (USA 970625 Phoenix Edition) (bootleg)", + "msisaac", "Metal Soldier Isaac II", + "msjiken", "Mahjong Satsujin Jiken (Japan 881017)", + "mslider", "Monster Slider (Japan)", + "mslug", "Metal Slug - Super Vehicle-001", + "mslug2", "Metal Slug 2 - Super Vehicle-001/II (NGM-2410)(NGH-2410)", + "mslug3", "Metal Slug 3 (NGM-2560)", + "mslug3b6", "Metal Slug 6 (Metal Slug 3 bootleg)", + "mslug3h", "Metal Slug 3 (NGH-2560)", + "mslug4", "Metal Slug 4 (NGM-2630)", + "mslug4h", "Metal Slug 4 (NGH-2630)", + "mslug5", "Metal Slug 5 (NGM-2680)", + "mslug5h", "Metal Slug 5 (NGH-2680)", + "mslug6", "Metal Slug 6", + "mslugx", "Metal Slug X - Super Vehicle-001 (NGM-2500)(NGH-2500)", + "mspacii", "Ms. Pac-Man II (Orca bootleg set 1)", + "mspacii2", "Ms. Pac-Man II (Orca bootleg set 2)", + "mspacmab", "Ms. Pac-Man (bootleg)", + "mspacman", "Ms. Pac-Man", + "mspacmanbg", "Ms. Pac-Man ('Made in Greece' bootleg)", + "mspacmancr", "Ms. Pac-Man (bootleg on Crush Roller Hardware)", + "mspacmat", "Ms. Pac Attack", + "mspacmbe", "Ms. Pac-Man (bootleg, encrypted)", + "mspacmnf", "Ms. Pac-Man (speedup hack)", + "mspacpls", "Ms. Pac-Man Plus", + "mspuzzle", "Miss Puzzle", + "mspuzzleg", "Miss Puzzle (Clone of Gumbo)", + "mspuzzlen", "Miss Puzzle (Nudes)", + "mstadium", "Main Stadium (Japan)", + "mstworld", "Monsters World (bootleg of Super Pang)", + "msword", "Magic Sword: Heroic Fantasy (World 900725)", + "mswordj", "Magic Sword: Heroic Fantasy (Japan 900623)", + "mswordr1", "Magic Sword: Heroic Fantasy (World 900623)", + "mswordu", "Magic Sword: Heroic Fantasy (USA 900725)", + "mt_aftrb", "After Burner (Mega-Tech, SMS based)", + "mt_arrow", "Arrow Flash (Mega-Tech)", + "mt_astrm", "Alien Storm (Mega-Tech)", + "mt_astro", "Astro Warrior (Mega-Tech, SMS based)", + "mt_asyn", "Alien Syndrome (Mega-Tech, SMS based)", + "mt_bbros", "Bonanza Bros. (Mega-Tech)", + "mt_beast", "Altered Beast (Mega-Tech)", + "mt_calga", "California Games (Mega-Tech)", + "mt_cols", "Columns (Mega-Tech)", + "mt_crack", "Crack Down (Mega-Tech)", + "mt_eswat", "Cyber Police ESWAT: Enhanced Special Weapons and Tactics (Mega-Tech)", + "mt_fshrk", "Fire Shark (Mega-Tech)", + "mt_fwrld", "Forgotten Worlds (Mega-Tech)", + "mt_fz", "Fantasy Zone (Mega-Tech, SMS based)", + "mt_gaxe", "Golden Axe (Mega-Tech)", + "mt_gaxe2", "Golden Axe II (Mega-Tech)", + "mt_gfoot", "Great Football (Mega-Tech, SMS based)", + "mt_ggolf", "Great Golf (Mega-Tech, SMS based)", + "mt_gng", "Ghouls'n Ghosts (Mega-Tech)", + "mt_gsocr", "Great Soccer (Mega-Tech, SMS based)", + "mt_kcham", "Kid Chameleon (Mega-Tech)", + "mt_lastb", "Last Battle (Mega-Tech)", + "mt_mlh", "Mario Lemieux Hockey (Mega-Tech)", + "mt_mwalk", "Michael Jackson's Moonwalker (Mega-Tech)", + "mt_mystd", "Mystic Defender (Mega-Tech)", + "mt_orun", "Out Run (Mega-Tech, SMS based)", + "mt_parlg", "Parlour Games (Mega-Tech, SMS based)", + "mt_revsh", "The Revenge of Shinobi (Mega-Tech)", + "mt_shado", "Shadow Dancer (Mega-Tech)", + "mt_shang", "Super Hang-On (Mega-Tech)", + "mt_shar2", "Space Harrier II (Mega-Tech)", + "mt_shnbi", "Shinobi (Mega-Tech, SMS based)", + "mt_smgp", "Super Monaco GP (Mega-Tech)", + "mt_soni2", "Sonic The Hedgehog 2 (Mega-Tech)", + "mt_sonia", "Sonic The Hedgehog (Mega-Tech, set 2)", + "mt_sonic", "Sonic The Hedgehog (Mega-Tech, set 1)", + "mt_spman", "Spider-Man vs The Kingpin (Mega-Tech)", + "mt_srage", "Streets of Rage (Mega-Tech)", + "mt_srbb", "Super Real Basketball (Mega-Tech)", + "mt_stbld", "Super Thunder Blade (Mega-Tech)", + "mt_stf", "Joe Montana II: Sports Talk Football (Mega-Tech)", + "mt_tetri", "Tetris (Mega-Tech)", + "mt_tfor2", "Thunder Force II MD (Mega-Tech)", + "mt_tgolf", "Arnold Palmer Tournament Golf (Mega-Tech)", + "mt_tlbba", "Tommy Lasorda Baseball (Mega-Tech)", + "mt_tout", "Turbo Outrun (Mega-Tech)", + "mt_wcsoc", "World Championship Soccer (Mega-Tech)", + "mt_wwar", "Wrestle War (Mega-Tech)", + "mtburn", "Money To Burn (Russia)", + "mtetrisc", "Magical Tetris Challenge (981009 Japan)", + "mtkob2", "Mushiking The King Of Beetle 2K3 2nd", + "mtlchamp", "Martial Champion (ver EAB)", + "mtlchamp1", "Martial Champion (ver EAA)", + "mtlchampa", "Martial Champion (ver AAA)", + "mtlchampj", "Martial Champion (ver JAA)", + "mtlchampu", "Martial Champion (ver UAE)", + "mtlchampu1", "Martial Champion (ver UAD)", + "mtrain", "Magic Train (Ver. 1.31)", + "mtrainnv", "Magic Train (Clear NVRAM ROM?)", + "mtrap", "Mouse Trap (version 5)", + "mtrap3", "Mouse Trap (version 3)", + "mtrap4", "Mouse Trap (version 4)", + "mtrapb", "Mouse Trap (bootleg)", + "mtwins", "Mega Twins (World 900619)", + "mugsmash", "Mug Smashers", + "multchmp", "Multi Champ (World, ver. 2.5)", + "multchmpk", "Multi Champ (Korea)", + "multigam", "Multi Game (set 1)", + "multigm2", "Multi Game 2", + "multigm3", "Multi Game III", + "multigmb", "Multi Game (set 2)", + "multigmt", "Multi Game (Tung Sheng Electronics)", + "multiped", "Multipede (Centipede/Millipede multigame kit)", + "multiwin", "Multi Win (Ver.0167, encrypted)", + "mundial", "Mundial 90", + "murogem", "Muroge Monaco (set 1)", + "murogema", "Muroge Monaco (set 2)", + "murogemb", "Muroge Monaco (set 3)", + "murogmbl", "Muroge Monaco (bootleg?)", + "mushi2ea", "MushiKing II - The King Of Beetle II ENG (Ver. 2.001)", + "mushik2e", "MushiKing II - The King Of Beetle II ENG (Ver. 1.001)", + "mushisam", "Mushihime-Sama (2004/10/12.MASTER VER.)", + "mushisama", "Mushihime-Sama (2004/10/12 MASTER VER.)", + "mushisamb", "Mushihime-Sama (2004/10/12 MASTER VER)", + "mushitam", "Puzzle! Mushihime-Tama (2005/09/09.MASTER VER)", + "mushitama", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", + "mushmagi", "Mushroom Magic (Russia) (Atronic)", + "musicbal", "Music Ball", + "musicsrt", "Music Sort (ver 2.02, English)", + "musobana", "Musoubana (Japan)", + "mustache", "Mustache Boy", + "mustang", "US AAF Mustang (25th May. 1990)", + "mustangb", "US AAF Mustang (bootleg)", + "mustangb2", "US AAF Mustang (TAB Austria bootleg)", + "mustangs", "US AAF Mustang (25th May. 1990 / Seoul Trading)", + "mutantf", "Mutant Fighter (World ver EM-5)", + "mutantf3", "Mutant Fighter (World ver EM-3)", + "mutantf4", "Mutant Fighter (World ver EM-4)", + "mutnat", "Mutation Nation (NGM-014)(NGH-014)", + "mv1bon", "Believe It Or Not (Maygay, MV1 Video)", + "mv1cpc", "Caesar's Palace Club (Maygay, MV1 Video, set 1)", + "mv1cpca", "Caesar's Palace Club (Maygay, MV1 Video, set 2)", + "mv1cpcb", "Caesar's Palace Club (Maygay, MV1 Video, set 3)", + "mv1cwq", "Crossword Quiz (Maygay, MV1 Video, set 1)", + "mv1cwqa", "Crossword Quiz (Maygay, MV1 Video, set 2)", + "mv1guac", "Give Us A Clue (Maygay, MV1 Video, set 1)", + "mv1guaca", "Give Us A Clue (Maygay, MV1 Video, set 2)", + "mv1sfx", "Special Effects (Maygay, MV1 Video, set 1)", + "mv1sfx2", "Special Effects V2 (Maygay, MV1 Video)", + "mv1sfxa", "Special Effects (Maygay, MV1 Video, set 2)", + "mv1wc", "World Cup (Maygay, MV1 Video)", + "mv4in1", "Mini Vegas 4in1", + "mvp", "MVP (set 2, US, FD1094 317-0143)", + "mvpj", "MVP (set 1, Japan, FD1094 317-0142)", + "mvsc", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980123)", + "mvsc2", "Marvel Vs. Capcom 2 New Age of Heroes (JPN, USA, EUR, ASI, AUS) (Rev A)", + "mvsca", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980123)", + "mvscar1", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980112)", + "mvscb", "Marvel Vs. Capcom: Clash of Super Heroes (Brazil 980123)", + "mvsch", "Marvel Vs. Capcom: Clash of Super Heroes (Hispanic 980123)", + "mvscj", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123)", + "mvscjr1", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980112)", + "mvscjsing", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123) (Single PCB)", + "mvscr1", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112)", + "mvscu", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123)", + "mvscud", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123 Phoenix Edition) (bootleg)", + "mvscur1", "Marvel Vs. Capcom: Clash of Super Heroes (USA 971222)", + "mwalk", "Michael Jackson's Moonwalker (World, FD1094/8751 317-0159)", + "mwalkbl", "Michael Jackson's Moonwalker (bootleg)", + "mwalkj", "Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157)", + "mwalku", "Michael Jackson's Moonwalker (US, FD1094/8751 317-0158)", + "mwarr", "Mighty Warriors", + "mwskins", "Skins Game (1.06)", + "mwskinsa", "Skins Game (1.06, alt)", + "mwskinso", "Skins Game (1.04)", + "mx5000", "MX5000", + "myangel", "Kosodate Quiz My Angel (Japan)", + "myangel2", "Kosodate Quiz My Angel 2 (Japan)", + "myangel3", "Kosodate Quiz My Angel 3 (Japan, KQT1/VER.A)", + "myfairld", "Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)", + "myhero", "My Hero (US, not encrypted)", + "myherok", "My Hero (Korea)", + "myqbert", "Mello Yello Q*bert", + "mystcast", "Mystery Castle", + "mystic", "Mystic", + "mysticm", "Mystic Marathon", + "mysticmp", "Mystic Marathon (prototype)", + "mysticri", "Mystic Riders (World)", + "mysticrib", "Mystic Riders (bootleg?)", + "myststar", "Mystic Star", + "mystston", "Mysterious Stones - Dr. John's Adventure", + "myststono", "Mysterious Stones - Dr. Kick in Adventure", + "myststonoi", "Mysterious Stones - Dr. Kick in Adventure (Itisa PCB)", + "mystwarr", "Mystic Warriors (ver EAA)", + "mystwarra", "Mystic Warriors (ver AAA)", + "mystwarrj", "Mystic Warriors (ver JAA)", + "mystwarru", "Mystic Warriors (ver UAA)", + "nagano98", "Nagano Winter Olympics '98 (GX720 EAA)", + "naganoj", "Hyper Olympic in Nagano (GX720 JAA)", + "nam1975", "NAM-1975 (NGM-001)(NGH-001)", + "namcostr", "Namco Stars", + "nametune", "Name That Tune (set 1)", + "nametune2", "Name That Tune (3/23/86)", + "naname", "Naname de Magic! (Japan)", + "naomi", "Naomi Bios", + "naomi2", "Naomi 2 Bios", + "naomigd", "Naomi GD-ROM Bios", + "narc", "Narc (rev 7.00)", + "narc2", "Narc (rev 2.00)", + "narc3", "Narc (rev 3.20)", + "nascar", "Nascar (4.50)", + "nascar_301", "Nascar (3.01)", + "nascar_340", "Nascar (3.40)", + "nascar_350", "Nascar (3.50)", + "nascar_352", "Nascar (3.52)", + "nascar_400", "Nascar (4.00)", + "nascarl", "Nascar (4.50 Spain)", + "nascarl_301", "Nascar (3.01 Spain)", + "nascarl_340", "Nascar (3.40 Spain)", + "nascarl_350", "Nascar (3.50 Spain)", + "nascarl_352", "Nascar (3.52 Spain)", + "nascarl_400", "Nascar (4.00 Spain)", + "nastar", "Nastar (World)", + "nastarw", "Nastar Warrior (US)", + "natodef", "NATO Defense", + "natodefa", "NATO Defense (alternate mazes)", + "natsuiro", "Natsuiro Mahjong (Japan)", + "naughtyb", "Naughty Boy", + "naughtyba", "Naughty Boy (bootleg)", + "naughtybc", "Naughty Boy (Cinematronics)", + "navarone", "Navarone", + "nbaf_11", "NBA Fastbreak (1.1)", + "nbaf_115", "NBA Fastbreak (1.15)", + "nbaf_11a", "NBA Fastbreak (1.1 - S2.0)", + "nbaf_11s", "NBA Fastbreak (1.1 - S0.4)", + "nbaf_21", "NBA Fastbreak (2.1)", + "nbaf_22", "NBA Fastbreak (2.2)", + "nbaf_23", "NBA Fastbreak (2.3)", + "nbaf_31", "NBA Fastbreak (3.1 - S3.0)", + "nbaf_31a", "NBA Fastbreak (3.1 - S1.0)", + "nbahangt", "NBA Hangtime (rev L1.1 04/16/96)", + "nbajam", "NBA Jam (rev 3.01 04/07/93)", + "nbajamex", "NBA Jam Extreme", + "nbajamr2", "NBA Jam (rev 2.00 02/10/93)", + "nbajamte", "NBA Jam TE (rev 4.0 03/23/94)", + "nbajamte1", "NBA Jam TE (rev 1.0 01/17/94)", + "nbajamte2", "NBA Jam TE (rev 2.0 01/28/94)", + "nbajamte3", "NBA Jam TE (rev 3.0 03/04/94)", + "nbajamten", "NBA Jam T.E. Nani Edition (rev 5.2 8/11/95, prototype)", + "nbamht", "NBA Maximum Hangtime (rev 1.03 06/09/97)", + "nbamht1", "NBA Maximum Hangtime (rev 1.0 11/08/96)", + "nbanfl", "NBA Showtime / NFL Blitz 2000", + "nbapbp", "NBA Play By Play", + "nbashowt", "NBA Showtime: NBA on NBC", + "nbbatman", "Ninja Baseball Bat Man (World)", + "nbbatman2bl", "Ninja Baseball Bat Man II (bootleg)", + "nbbatmanu", "Ninja Baseball Bat Man (US)", + "nc96", "New Cherry '96 Special Edition (v3.63, C1 PCB)", + "nc96a", "New Cherry '96 Special Edition (v3.62, C1 PCB)", + "nc96b", "New Cherry '96 Special Edition (v3.54, D PCB)", + "nc96c", "New Cherry '96 Special Edition (v3.62, DK PCB)", + "nc96txt", "New Cherry '96 Special Edition (v1.32 Texas XT, C2 PCB)", + "ncb3", "Cherry Bonus III (ver.1.40, set 1)", + "nclubv3", "Name Club Ver.3 (J 970723 V1.000)", + "ncombat", "Ninja Combat (NGM-009)", + "ncombath", "Ninja Combat (NGH-009)", + "ncommand", "Ninja Commando", + "ncv1", "Namco Classic Collection Vol.1", + "ncv1j", "Namco Classic Collection Vol.1 (Japan, v1.00)", + "ncv1j2", "Namco Classic Collection Vol.1 (Japan, v1.03)", + "ncv2", "Namco Classic Collection Vol.2", + "ncv2j", "Namco Classic Collection Vol.2 (Japan)", + "ndcfboxa", "Naomi DIMM Firmware Update for CF-BOX (Rev A) (GDS-0042A)", + "ndxron10", "Royal on Ten (Noraut Deluxe hack)", + "nebulray", "Nebulas Ray (World, NR2)", + "nebulrayj", "Nebulas Ray (Japan, NR1)", + "neckneck", "Neck-n-Neck (v1.2)", + "nekkyoku", "Rettou Juudan Nekkyoku Janshi - Higashi Nippon Hen (Japan)", + "nemesis", "Nemesis (ROM version)", + "nemesisp", "Nemesis", + "nemesisuk", "Nemesis (World?, ROM version)", + "nemo", "Nemo (World 901130)", + "nemoj", "Nemo (Japan 901120)", + "neobattl", "SD Gundam Neo Battling (Japan)", + "neobombe", "Neo Bomberman", + "neocup98", "Neo-Geo Cup '98 - The Road to the Victory", + "neodrift", "Neo Drift Out - New Technology", + "neogeo", "Neo-Geo", + "neomrdo", "Neo Mr. Do!", + "neptunp2", "Neptune's Pearls 2", + "neruton", "Mahjong Neruton Haikujiradan (Japan, Rev. B?)", + "nerutona", "Mahjong Neruton Haikujiradan (Japan, Rev. A?)", + "netchu02", "Netchuu Pro Yakyuu 2002 (NPY1 Ver. A)", + "netmerc", "NetMerc?", + "nettoqc", "Nettoh Quiz Champion (Japan)", + "netwars", "Net Wars", + "nevada", "VLC Nevada", + "newapunk", "New Atomic Punk - Global Quest (US)", + "newdixie", "New Dixieland (Bingo)", + "newfant", "New Fantasia (1995 copyright)", + "newfanta", "New Fantasia (1994 copyright)", + "newhilop", "New Hi-Low Poker", + "newmcard", "New Magic Card", + "newpuc2", "Newpuc2 (set 1)", + "newpuc2b", "Newpuc2 (set 2)", + "newpuckx", "New Puck-X", + "news", "News (set 1)", + "newsa", "News (set 2)", + "newsin7", "New Sinbad 7", + "newtangl", "New Tropical Angel", + "newwave", "New Wave", + "nextfase", "Next Fase (bootleg of Phoenix)", + "nf_20", "No Fear: Dangerous Sports (2.0)", + "nf_22", "No Fear: Dangerous Sports (2.2)", + "nf_23", "No Fear: Dangerous Sports (2.3)", + "nf_23f", "No Fear: Dangerous Sports (2.3F)", + "nf_23x", "No Fear: Dangerous Sports (2.3X)", + "nfb96", "New Fruit Bonus '96 Special Edition (v3.63, C1 PCB)", + "nfb96a", "New Fruit Bonus '96 Special Edition (v3.62, C1 PCB)", + "nfb96b", "New Fruit Bonus '96 Special Edition (v3.54, D PCB)", + "nfb96c", "New Fruit Bonus '96 Special Edition (v3.62, DK PCB)", + "nfb96se", "New Fruit Bonus '96 Special Edition (bootleg, set 1)", + "nfb96sea", "New Fruit Bonus '96 Special Edition (bootleg, set 2)", + "nfb96seb", "New Fruit Bonus '96 Special Edition (bootleg, set 3)", + "nfb96txt", "New Fruit Bonus '96 Special Edition (v1.22 Texas XT, C2 PCB)", + "nfl", "NFL", + "nflclsfb", "NFL Classic Football (US, NCF3 Ver.A.)", + "nflfoot", "NFL Football", + "nfm", "New Fruit Machine (Ming-Yang Electronic)", + "nfsug", "Need For Speed: Underground Install (2 Discs) (v1.1)", + "ngalsumr", "Night Gal Summer", + "ngbc", "Neo-Geo Battle Coliseum", + "ngdup23a", "Naomi DIMM Firmware Updater (Rev A) (GDS-0023A)", + "ngdup23c", "Naomi DIMM Firmware Updater (Rev C) (GDS-0023C)", + "ngdup23e", "Naomi DIMM Firmware Updater (Rev E) (GDS-0023E)", + "ngg_10", "No Good Gofers (1.0)", + "ngg_13", "No Good Gofers (1.3)", + "ngg_p06", "No Good Gofers (p0.6)", + "ngndshkr", "Nitro Ground Shaker", + "ngold", "Jack Potten's Poker (NGold, set 1)", + "ngolda", "Jack Potten's Poker (NGold, set 2)", + "ngoldb", "Jack Potten's Poker (NGold, set 3)", + "ngpgal", "Nekketsu Grand-Prix Gal (Japan)", + "ngtbunny", "Night Bunny (Japan 840601 MRN 2-10)", + "nhidctch", "New Hidden Catch (World) / New Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.02)", + "nibbler", "Nibbler (rev 9)", + "nibbler6", "Nibbler (rev 6)", + "nibbler8", "Nibbler (rev 8)", + "nibblero", "Nibbler (Olympia - rev 8)", + "nibblerp", "Nibbler (Pioneer Balloon conversion)", + "nightgal", "Night Gal (Japan 840920 AG 1-00)", + "nightlov", "Night Love (Japan 860705)", + "nightr20", "Night Rider (rev. 20)", + "nightrai", "Night Raid (V2.03J)", + "nightrdr", "Night Rider (rev. 21)", + "nightstr", "Night Striker (World)", + "nightstrj", "Night Striker (Japan)", + "nightstru", "Night Striker (US)", + "ninclown", "Ninja Clowns (08/27/91)", + "nineball", "Nine Ball", + "ninja", "Ninja (315-5102)", + "ninjak", "The Ninja Kids (World)", + "ninjakd2", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", + "ninjakd2a", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", + "ninjakd2b", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", + "ninjakj", "The Ninja Kids (Japan)", + "ninjaku", "The Ninja Kids (US)", + "ninjakun", "Ninjakun Majou no Bouken", + "ninjamas", "Ninja Master's - haoh-ninpo-cho", + "ninjaslt", "Ninja Assault (NJA3 Ver. A)", + "ninjaslt1", "Ninja Assault (NJA1 Ver. A)", + "ninjaslt2", "Ninja Assault (NJA2 Ver. A)", + "ninjaslt4", "Ninja Assault (NJA4 Ver. A)", + "ninjaw", "The Ninja Warriors (World)", + "ninjawj", "The Ninja Warriors (Japan)", + "ninjawu", "The Ninja Warriors (US)", + "ninjemak", "Ninja Emaki (US)", + "nitd", "Nightmare in the Dark", + "nitdbl", "Nightmare in the Dark (bootleg)", + "nitedrvr", "Night Driver", + "nitrobal", "Nitro Ball (US)", + "niyanpai", "Niyanpai (Japan)", + "nkdodge", "Nekketsu Koukou Dodgeball Bu (Japan)", + "nkdodgeb", "Nekketsu Koukou Dodgeball Bu (Japan, bootleg)", + "nkishusp", "Mahjong Nenrikishu SP (Japan, V250J)", + "nmaster", "Oni - The Ninja Master (Japan)", + "nmg5", "Multi 5 / New Multi Game 5 (set 1)", + "nmg5a", "Multi 5 / New Multi Game 5 (set 2)", + "nmg5e", "Multi 5 / New Multi Game 5 (set 3, earlier)", + "nmouse", "Naughty Mouse (set 1)", + "nmouseb", "Naughty Mouse (set 2)", + "nmoves", "Night Moves", + "nmsengen", "Nekketsu Mahjong Sengen! AFTER 5 (Japan)", + "nndmseal", "Nandemo Seal Iinkai", + "nndmseala", "Nandemo Seal Iinkai (Astro Boy ver.)", + "noahsark", "Noah's Ark", + "nob", "Noboranka (Japan)", + "nobb", "Noboranka (Japan, bootleg)", + "nomnlnd", "No Man's Land", + "nomnlndg", "No Man's Land (Gottlieb)", + "noraut3a", "Noraut Joker Poker (V3.010a)", + "noraut3b", "Noraut Joker Poker (V3.011a)", + "norautdx", "Noraut Deluxe Poker (console)", + "norautjo", "Noraut Joker Poker (original)", + "norautjp", "Noraut Joker Poker (alt)", + "norautp", "Noraut Poker", + "norautpl", "Noraut Joker Poker (Prologic HW)", + "norautpn", "Noraut Deluxe Poker (bootleg)", + "norautra", "Noraut Red Hot Joker Poker (alt HW)", + "norautrh", "Noraut Red Hot Joker Poker", + "norautu", "Noraut Poker (NTX10A)", + "norautua", "Noraut unknown set 1 (console)", + "norautub", "Noraut unknown set 2 (console)", + "nost", "Nostradamus", + "nostj", "Nostradamus (Japan)", + "nostk", "Nostradamus (Korea)", + "nouryoku", "Nouryoku Koujou Iinkai", + "nouryokup", "Nouryoku Koujou Iinkai (prototype)", + "nova2001", "Nova 2001 (Japan)", + "nova2001u", "Nova 2001 (US)", + "novoplay", "Novo Play Multi Card / Club Card", + "npcartv1", "Neo Print V1 (World)", + "nprinces", "Ninja Princess (315-5051, 64k Ver. bootleg?)", + "nprincesb", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", + "nprinceso", "Ninja Princess (315-5098, 128k Ver.)", + "nprincesu", "Ninja Princess (64k Ver. not encrypted)", + "nprsp", "NeopriSP Retro Collection (Japan)", + "nrallyx", "New Rally X", + "nrallyxb", "New Rally X (bootleg?)", + "nratechu", "Neratte Chu", + "ns8lines", "New Lucky 8 Lines / New Super 8 Lines (W-4)", + "ns8linew", "New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus)", + "nslasher", "Night Slashers (Korea Rev 1.3)", + "nslasherj", "Night Slashers (Japan Rev 1.2)", + "nslashers", "Night Slashers (Over Sea Rev 1.2)", + "nslasheru", "Night Slashers (US Rev 1.2, HuC6280 Sound CPU)", + "nsmpoker", "NSM Poker (TMS9995)", + "nspirit", "Ninja Spirit", + "nspiritj", "Saigo no Nindou (Japan)", + "nss", "Nintendo Super System BIOS", + "nss_actr", "Act Raiser (Nintendo Super System)", + "nss_adam", "The Addams Family (Nintendo Super System)", + "nss_aten", "David Crane's Amazing Tennis (Nintendo Super System)", + "nss_con3", "Contra 3: The Alien Wars (Nintendo Super System)", + "nss_fzer", "F-Zero (Nintendo Super System)", + "nss_lwep", "Lethal Weapon (Nintendo Super System)", + "nss_ncaa", "NCAA Basketball (Nintendo Super System)", + "nss_rob3", "Robocop 3 (Nintendo Super System)", + "nss_skin", "Skins Game (Nintendo Super System)", + "nss_smw", "Super Mario World (Nintendo Super System)", + "nss_ssoc", "Super Soccer (Nintendo Super System)", + "nss_sten", "Super Tennis (Nintendo Super System)", + "nstocker", "Night Stocker (10/6/86)", + "nstocker2", "Night Stocker (8/27/86)", + "nstrphnx", "New Star's Phoenix (Italian speech)", + "nsub", "N-Sub (upright)", + "ntcash", "NtCash", + "ntopstar", "Mahjong Nerae! Top Star (Japan)", + "nudgeit", "Nudge-It", + "nugent", "Nugent", + "numanath", "Numan Athletics (World)", + "numanathj", "Numan Athletics (Japan)", + "number1", "Number One", + "number10", "Number Dieci (Poker)", + "numbr10l", "Number Dieci (Lattine)", + "nunchaku", "Nunchackun", + "nwarr", "Night Warriors: Darkstalkers' Revenge (Euro 950316)", + "nwarra", "Night Warriors: Darkstalkers' Revenge (Asia 950302)", + "nwarrb", "Night Warriors: Darkstalkers' Revenge (Brazil 950403)", + "nwarrh", "Night Warriors: Darkstalkers' Revenge (Hispanic 950403)", + "nwarru", "Night Warriors: Darkstalkers' Revenge (USA 950406)", + "nwarrud", "Night Warriors: Darkstalkers' Revenge (USA 950406 Phoenix Edition) (bootleg)", + "nyanpani", "Nyan Nyan Panic (Japan)", + "nycaptor", "N.Y. Captor", + "nyjoker", "New York Joker", + "nyny", "New York! New York!", + "nynyg", "New York! New York! (Gottlieb)", + "nzeroteam", "New Zero Team", + "obaoba", "Oba-Oba", + "obaoba1", "Oba-Oba (alternate set)", + "oceanhun", "The Ocean Hunter", + "odeontw2", "Odeon Twister 2 (v202.19)", + "odin", "Odin", + "odin_dlx", "Odin De Luxe", + "odisea", "Odisea Paris-Dakar", + "oedfight", "Oedo Fight (Japan Bloodshed Ver.)", + "officeye", "Office Yeo In Cheon Ha (version 1.2)", + "offroad", "Ironman Ivan Stewart's Super Off-Road", + "offroadc", "Off Road Challenge (v1.63)", + "offroadc1", "Off Road Challenge (v1.10)", + "offroadc3", "Off Road Challenge (v1.30)", + "offroadc4", "Off Road Challenge (v1.40)", + "offroadc5", "Off Road Challenge (v1.50)", + "offroadt", "Ironman Ivan Stewart's Super Off-Road Track-Pak", + "offroadt2p", "Ironman Ivan Stewart's Super Off-Road Track-Pak (2 Players)", + "offrthnd", "Offroad Thunder", + "offtwall", "Off the Wall (2/3-player upright)", + "offtwallc", "Off the Wall (2-player cocktail)", + "ogonsiro", "Ougon no Shiro (Japan)", + "ohbakyuun", "Oh! Bakyuuun (Japan, OB1/VER.A)", + "ohmygod", "Oh My God! (Japan)", + "ohpaipee", "Oh! Paipee (Japan 890227)", + "oigas", "Oigas (bootleg)", + "oinori", "Oinori-daimyoujin Matsuri", + "oisipuzl", "Oishii Puzzle Ha Irimasenka", + "ojanko2", "Ojanko Yakata 2bankan (Japan)", + "ojankoc", "Ojanko Club (Japan)", + "ojankohs", "Ojanko High School (Japan)", + "ojankoy", "Ojanko Yakata (Japan)", + "ojousan", "Ojousan (Japan 871204)", + "ojousanm", "Ojousan [BET] (Japan 870108)", + "olds", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 101, Korean Board)", + "olds100", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 1)", + "olds100a", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 2)", + "olds103t", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 103, China, Tencent) (unprotected)", + "oldsplus", "Oriental Legend Special Plus / Xi You Shi E Zhuan Super Plus", + "olibochu", "Oli-Boo-Chu", + "oligam", "Olympian Games (Russia)", + "ollie", "Ollie King (GDX-0007)", + "olympic", "Olympic Games", + "olympus", "Olympus", + "olysoc92", "Olympic Soccer '92 (set 1)", + "olysoc92a", "Olympic Soccer '92 (set 2)", + "omega", "Omega", + "omegaf", "Omega Fighter", + "omegafs", "Omega Fighter Special", + "omegrace", "Omega Race (set 1)", + "omegrace2", "Omega Race (set 2)", + "omni", "Omni", + "omni_l1", "Omni (Shuffle) (L-1)", + "omotesnd", "Omotesandou (Japan 890215)", + "oneshot", "One Shot One Kill", + "onetwo", "One + Two", + "onetwoe", "One + Two (earlier)", + "onna34ro", "Onna Sansirou - Typhoon Gal (set 1)", + "onna34roa", "Onna Sansirou - Typhoon Gal (set 2)", + "opaopa", "Opa Opa (MC-8123, 317-0042)", + "opengolf", "Konami's Open Golf Championship (ver EAE)", + "opengolf2", "Konami's Open Golf Championship (ver EAD)", + "openice", "2 On 2 Open Ice Challenge (rev 1.21)", + "openmj", "Open Mahjong [BET] (Japan)", + "opthund", "Operation: Thunder", + "optiger", "Operation Tiger", + "opwolf", "Operation Wolf (World, set 1)", + "opwolf3", "Operation Wolf 3 (World)", + "opwolf3u", "Operation Wolf 3 (US)", + "opwolfa", "Operation Wolf (World, set 2)", + "opwolfb", "Operation Bear (bootleg of Operation Wolf)", + "opwolfj", "Operation Wolf (Japan)", + "opwolfu", "Operation Wolf (US)", + "orangec", "Orange Club - Maruhi Kagai Jugyou (Japan 880213)", + "orangeci", "Orange Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880221)", + "orbatak", "Orbatak (prototype)", + "orbit", "Orbit", + "orbit1", "Orbit 1", + "orbitor1", "Orbitor 1", + "orbitron", "Orbitron", + "orbs", "Orbs (10/7/94 prototype?)", + "ordyne", "Ordyne (Japan, English Version)", + "ordynej", "Ordyne (Japan)", + "orleg2", "Oriental Legend 2 (V104, China)", + "orleg2o", "Oriental Legend 2 (V103, China)", + "orlegend", "Oriental Legend / Xi You Shi E Zhuan (ver. 126)", + "orlegend105k", "Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board)", + "orlegend111c", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board)", + "orlegendc", "Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board)", + "orlegendca", "Oriental Legend / Xi You Shi E Zhuan (ver. ???, Chinese Board)", + "orlegende", "Oriental Legend / Xi You Shi E Zhuan (ver. 112)", + "orunners", "OutRunners (World)", + "orunnersj", "OutRunners (Japan)", + "orunnersu", "OutRunners (US)", + "oscar", "Psycho-Nics Oscar (World revision 0)", + "oscarj1", "Psycho-Nics Oscar (Japan revision 1)", + "oscarj2", "Psycho-Nics Oscar (Japan revision 2)", + "oscaru", "Psycho-Nics Oscar (US)", + "osman", "Osman (World)", + "otatidai", "Disco Mahjong Otachidai no Okite (Japan)", + "otchart", "Off The Charts (Russia)", + "otenamhf", "Otenami Haiken Final (V2.07JC)", + "otenamih", "Otenami Haiken (V2.04J)", + "otenki", "Otenki Kororin (V2.01J)", + "othello", "Othello (version 3.0)", + "othellos", "Othello Shiyouyo (J 980423 V1.002)", + "othldrby", "Othello Derby (Japan)", + "othunder", "Operation Thunderbolt (World)", + "othunderj", "Operation Thunderbolt (Japan)", + "othunderu", "Operation Thunderbolt (US)", + "othunderuo", "Operation Thunderbolt (US, older)", + "otonano", "Otona no Mahjong (Japan 880628)", + "otrigger", "OutTrigger (JPN, USA, EXP, KOR, AUS)", + "otwalls", "Off the Wall (Sente)", + "outfxies", "The Outfoxies (World, OU2)", + "outfxiesj", "The Outfoxies (Japan, OU1)", + "outlaw", "Outlaw [TTL]", + "outline", "Outline", + "outr2", "Out Run 2 (Rev A) (GDX-0004A)", + "outr2st", "Out Run 2 Special Tours (Rev A) (GDX-0014A)", + "outrun", "Out Run (sitdown/upright, Rev B)", + "outrunb", "Out Run (bootleg)", + "outrundx", "Out Run (deluxe sitdown)", + "outrundxa", "Out Run (deluxe sitdown earlier version)", + "outrundxj", "Out Run (Japan, deluxe sitdown, FD1089A 317-0019)", + "outrunra", "Out Run (sitdown/upright, Rev A)", + "outzone", "Out Zone", + "outzonea", "Out Zone (old set)", + "outzoneb", "Out Zone (older set)", + "outzonec", "Out Zone (oldest set)", + "outzoneh", "Out Zone (harder)", + "overdriv", "Over Drive", + "overrev", "Over Rev (Model 2C, Revision A)", + "overrevb", "Over Rev (Model 2B, Revision B)", + "overtop", "Over Top", + "ozmawars", "Ozma Wars (set 1)", + "ozmawars2", "Ozma Wars (set 2)", + "ozon1", "Ozon I", + "p47", "P-47 - The Phantom Fighter (World)", + "p47aces", "P-47 Aces", + "p47j", "P-47 - The Freedom Fighter (Japan)", + "p47je", "P-47 - The Freedom Fighter (Japan, Export)", + "p911", "Police 911 (ver UAD)", + "p9112", "Police 911 2 (ver A)", + "p911e", "Police 24/7 (ver EAA)", + "p911j", "Keisatsukan Shinjuku 24ji (ver JAC)", + "p911kc", "Police 911 (ver KAC)", + "p911uc", "Police 911 (ver UAC)", + "pacapp", "Paca Paca Passion (Japan, PPP1/VER.A2)", + "pacapp2", "Paca Paca Passion 2 (Japan, PKS1/VER.A)", + "pacappsp", "Paca Paca Passion Special (Japan, PSP1/VER.A)", + "pacgal", "Pac-Gal", + "pacheart", "Pac-Man (Hearts)", + "pachifev", "Pachifever", + "pachiten", "Medal Mahjong Pachi-Slot Tengoku [BET] (Japan)", + "pacland", "Pac-Land (World)", + "paclandj", "Pac-Land (Japan new)", + "paclandjo", "Pac-Land (Japan old)", + "paclandjo2", "Pac-Land (Japan older)", + "paclandm", "Pac-Land (Midway)", + "paclandp", "Pac-Land (United Amusements PC Engine)", + "pacman", "Pac-Man (Midway)", + "pacmanbl", "Pac-Man (Galaxian hardware, set 1)", + "pacmanbla", "Pac-Man (Galaxian hardware, set 2)", + "pacmanf", "Pac-Man (Midway, speedup hack)", + "pacmania", "Pac-Mania", + "pacmaniaj", "Pac-Mania (Japan)", + "pacmansp", "Puck Man (Spanish, 'Made in Greece' bootleg)", + "pacmod", "Pac-Man (Midway, harder)", + "pacnchmp", "Pac-Man & Chomp Chomp", + "pacnpal", "Pac & Pal", + "pacnpal2", "Pac & Pal (older)", + "pacominv", "Pacom Invader", + "pacplus", "Pac-Man Plus", + "pacslot", "Pac-Slot", + "pacuman", "Pacu-Man (Spanish bootleg of Puck Man)", + "paddle2", "Paddle 2 (bootleg on Block hardware)", + "paddlema", "Paddle Mania", + "paintlad", "Painted Lady (Splash) (Ver. 1.3 US)", + "paintrlr", "Paint Roller (bootleg of Crush Roller)", + "pairlove", "Pairs Love", + "pairs", "Pairs (V1.2, 09/30/94)", + "pairsa", "Pairs (09/07/94)", + "pairsnb", "Pairs (Nichibutsu) (Japan 890822)", + "pairsred", "Pairs Redemption (V1.0, 10/25/94)", + "pairsten", "Pairs (System Ten) (Japan 890826)", + "pajaroes", "Pajaro del Espacio (Spanish bootleg of UniWar S)", + "palamed", "Palamedes (Japan)", + "pandoras", "Pandora's Palace", + "pang", "Pang (World)", + "pang3", "Pang! 3 (Euro 950601)", + "pang3b", "Pang! 3 (bootleg)", + "pang3j", "Pang! 3: Kaitou Tachi no Karei na Gogo (Japan 950511)", + "pang3r1", "Pang! 3 (Euro 950511)", + "pangb", "Pang (bootleg, set 1)", + "pangb2", "Pang (bootleg, set 4)", + "pangba", "Pang (bootleg, set 3)", + "pangbold", "Pang (bootleg, set 2)", + "pangofun", "Pango Fun (Italy)", + "pangpang", "Pang Pang", + "pangpoms", "Pang Pom's", + "pangpomsm", "Pang Pom's (Mitchell)", + "panic", "Space Panic (version E)", + "panic2", "Space Panic (set 2)", + "panic3", "Space Panic (set 3)", + "panicbom", "Panic Bomber", + "panicger", "Space Panic (German)", + "panich", "Space Panic (harder)", + "panicprk", "Panic Park (PNP2 Ver. A)", + "panicprkj", "Panic Park (PNP1 Ver. B)", + "panicr", "Panic Road (Japan)", + "panicrg", "Panic Road (Germany)", + "panicstr", "Panic Street (Japan)", + "panikuru", "Panicuru Panekuru (Japan, PPA1 Ver.A)", + "panther", "Panther", + "panthera", "Panthera", + "panzer", "Panzer (bootleg of Spectar)", + "paperboy", "Paperboy (rev 3)", + "paperboyr1", "Paperboy (rev 1)", + "paperboyr2", "Paperboy (rev 2)", + "papillon", "Papillon", + "paprazzi", "Paparazzi", + "para2dx", "Paradise 2 Deluxe", + "paradice", "Paradice (Dutch, Game Card 95-750-615)", + "paradise", "Paradise", + "paradlx", "Paradise Deluxe", + "paragon", "Paragon", + "paranoia", "Paranoia", + "parentj", "Parent Jack", + "parodius", "Parodius DA! (World, set 1)", + "parodiusa", "Parodius DA! (Asia)", + "parodiuse", "Parodius DA! (World, set 2)", + "parodiusj", "Parodius DA! (Japan)", + "parrot3", "Parrot Poker III (Version 2.6E Dual)", + "parrot3b1", "Parrot Poker III (Version 2.6R, set 1)", + "parrot3d1", "Parrot Poker III (Version 2.6R, set 2)", + "parrot3o", "Parrot Poker III (Version 2.4)", + "parrot3v1", "Parrot Poker III (Version 2.6R Dual)", + "party", "Party", + "pasha2", "Pasha Pasha 2", + "pass", "Pass", + "passht4b", "Passing Shot (4 Players) (bootleg)", + "passsht", "Passing Shot (World, 2 Players, FD1094 317-0080)", + "passsht16a", "Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071)", + "passshta", "Passing Shot (World, 4 Players, FD1094 317-0074)", + "passshtb", "Passing Shot (2 Players) (bootleg)", + "passshtj", "Passing Shot (Japan, 4 Players, FD1094 317-0070)", + "pastelg", "Pastel Gal (Japan 851224)", + "patimono", "Mahjong Pachinko Monogatari (Japan)", + "pb_l2", "Pin-Bot (L-2)", + "pb_l3", "Pin-Bot (L-3)", + "pb_l5", "Pin-Bot (L-5)", + "pbaction", "Pinball Action (set 1)", + "pbaction2", "Pinball Action (set 2)", + "pbaction3", "Pinball Action (set 3, encrypted)", + "pbaction4", "Pinball Action (set 4, encrypted)", + "pbaction5", "Pinball Action (set 5, encrypted)", + "pballoon", "Pioneer Balloon", + "pballoonr", "Pioneer Balloon (Rock-Ola license)", + "pbancho", "Gyakuten!! Puzzle Bancho (Japan)", + "pbchmp95", "Pinball Champ '95", + "pbillian", "Prebillian", + "pbillrd", "Perfect Billiard", + "pbillrds", "Perfect Billiard (MC-8123, 317-0030)", + "pblbeach", "Pebble Beach - The Great Shot (JUE 950913 V0.990)", + "pbobbl2n", "Puzzle Bobble 2 / Bust-A-Move Again (Neo-Geo)", + "pbobble", "Puzzle Bobble (Japan, B-System)", + "pbobble2", "Puzzle Bobble 2 (Ver 2.3O 1995/07/31)", + "pbobble2j", "Puzzle Bobble 2 (Ver 2.2J 1995/07/20)", + "pbobble2o", "Puzzle Bobble 2 (Ver 2.2O 1995/07/20)", + "pbobble2u", "Bust-A-Move Again (Ver 2.3A 1995/07/31)", + "pbobble2x", "Puzzle Bobble 2X (Ver 2.2J 1995/11/11)", + "pbobble3", "Puzzle Bobble 3 (Ver 2.1O 1996/09/27)", + "pbobble3j", "Puzzle Bobble 3 (Ver 2.1J 1996/09/27)", + "pbobble3u", "Puzzle Bobble 3 (Ver 2.1A 1996/09/27)", + "pbobble4", "Puzzle Bobble 4 (Ver 2.04O 1997/12/19)", + "pbobble4j", "Puzzle Bobble 4 (Ver 2.04J 1997/12/19)", + "pbobble4u", "Puzzle Bobble 4 (Ver 2.04A 1997/12/19)", + "pbobblen", "Puzzle Bobble / Bust-A-Move (Neo-Geo) (NGM-083)", + "pbobblenb", "Puzzle Bobble / Bust-A-Move (Neo-Geo) (bootleg)", + "pbss330", "Pit Boss Superstar III 30 (9233-00-01)", + "pbst30", "Pit Boss Supertouch 30 (9234-10-01)", + "pbst30b", "Pit Boss Supertouch 30 (9234-00-01)", + "pc_1942", "1942 (PlayChoice-10)", + "pc_bball", "Baseball (PlayChoice-10)", + "pc_bfght", "Balloon Fight (PlayChoice-10)", + "pc_bload", "Bases Loaded (Prototype, PlayChoice-10)", + "pc_bstar", "Baseball Stars: Be a Champ! (PlayChoice-10)", + "pc_cntra", "Contra (PlayChoice-10)", + "pc_cshwk", "Captain Sky Hawk (PlayChoice-10)", + "pc_cvnia", "Castlevania (PlayChoice-10)", + "pc_dbldr", "Double Dribble (PlayChoice-10)", + "pc_ddrgn", "Double Dragon (PlayChoice-10)", + "pc_drmro", "Dr. Mario (PlayChoice-10)", + "pc_duckh", "Duck Hunt (PlayChoice-10)", + "pc_ebike", "Excite Bike (PlayChoice-10)", + "pc_ftqst", "Uncle Fester's Quest: The Addams Family (PlayChoice-10)", + "pc_gntlt", "Gauntlet (PlayChoice-10)", + "pc_golf", "Golf (PlayChoice-10)", + "pc_goons", "The Goonies (PlayChoice-10)", + "pc_grdue", "Gradius (PlayChoice-10, older)", + "pc_grdus", "Gradius (PlayChoice-10)", + "pc_hgaly", "Hogan's Alley (PlayChoice-10)", + "pc_kngfu", "Kung Fu (PlayChoice-10)", + "pc_mario", "Mario Bros. (PlayChoice-10)", + "pc_miket", "Mike Tyson's Punch-Out!! (PlayChoice-10)", + "pc_mman3", "Mega Man III (PlayChoice-10)", + "pc_moglf", "Mario's Open Golf (PlayChoice-10)", + "pc_mtoid", "Metroid (PlayChoice-10)", + "pc_ngai2", "Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10)", + "pc_ngai3", "Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10)", + "pc_ngaid", "Ninja Gaiden (PlayChoice-10)", + "pc_pinbt", "PinBot (PlayChoice-10)", + "pc_pwbld", "Power Blade (PlayChoice-10)", + "pc_pwrst", "Pro Wrestling (PlayChoice-10)", + "pc_radr2", "Rad Racer II (PlayChoice-10)", + "pc_radrc", "Rad Racer (PlayChoice-10)", + "pc_rcpam", "R.C. Pro-Am (PlayChoice-10)", + "pc_rkats", "Rockin' Kats (PlayChoice-10)", + "pc_rnatk", "Rush'n Attack (PlayChoice-10)", + "pc_rrngr", "Chip'n Dale: Rescue Rangers (PlayChoice-10)", + "pc_rygar", "Rygar (PlayChoice-10)", + "pc_sjetm", "Solar Jetman (PlayChoice-10)", + "pc_smb", "Super Mario Bros. (PlayChoice-10)", + "pc_smb2", "Super Mario Bros. 2 (PlayChoice-10)", + "pc_smb3", "Super Mario Bros. 3 (PlayChoice-10)", + "pc_suprc", "Super C (PlayChoice-10)", + "pc_tbowl", "Tecmo Bowl (PlayChoice-10)", + "pc_tenis", "Tennis (PlayChoice-10)", + "pc_tkfld", "Track & Field (PlayChoice-10)", + "pc_tmnt", "Teenage Mutant Ninja Turtles (PlayChoice-10)", + "pc_tmnt2", "Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10)", + "pc_trjan", "Trojan (PlayChoice-10)", + "pc_vball", "Volley Ball (PlayChoice-10)", + "pc_virus", "Virus (Dr. Mario prototype, PlayChoice-10)", + "pc_wcup", "Nintendo World Cup (PlayChoice-10)", + "pc_wgnmn", "Wild Gunman (PlayChoice-10)", + "pc_ynoid", "Yo! Noid (PlayChoice-10)", + "pcktgal", "Pocket Gal (Japan)", + "pcktgal2", "Pocket Gal 2 (English)", + "pcktgal2j", "Pocket Gal 2 (Japanese)", + "pcktgalb", "Pocket Gal (bootleg)", + "pclb297w", "Print Club 2 '97 Winter Ver (J 971017 V1.100)", + "pclb298a", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", + "pclb2elk", "Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)", + "pclub2", "Print Club 2 (U 970921 V1.000)", + "pclub298", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", + "pclub2fc", "Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)", + "pclub2kc", "Print Club Kome Kome Club (J 970203 V1.000)", + "pclub2v3", "Print Club 2 Vol. 3 (U 990310 V1.000)", + "pclubj", "Print Club (Japan Vol.1)", + "pclubjv2", "Print Club (Japan Vol.2)", + "pclubjv4", "Print Club (Japan Vol.4)", + "pclubjv5", "Print Club (Japan Vol.5)", + "pclubol", "Print Club Olive (J 980717 V1.000)", + "pclubor", "Print Club Goukakenran (J 991104 V1.000)", + "pclubpok", "Print Club Pokemon B (U 991126 V1.000)", + "pclubys", "Puzzle Club (Yun Sung, set 1)", + "pclubysa", "Puzzle Club (Yun Sung, set 2)", + "pcnfrk3m", "Percussion Freaks 3rd Mix (G*A23 VER. KAA)", + "pdrift", "Power Drift (World, Rev A)", + "pdrifta", "Power Drift (World)", + "pdrifte", "Power Drift (World, Earlier)", + "pdriftj", "Power Drift (Japan)", + "pebe0014", "Player's Edge Plus (BE0014) Blackjack", + "pecmen", "Mr. & Mrs. Pec-Men", + "peekaboo", "Peek-a-Boo!", + "peepshow", "Nozokimeguri Mahjong Peep Show (Japan 890404)", + "peggle", "Peggle (Joystick, v1.0)", + "pegglet", "Peggle (Trackball, v1.0)", + "peip0041", "Player's Edge Plus (IP0041) Double Deuces Wild Poker - French", + "peip0074", "Player's Edge Plus (IP0074) Joker Poker - French", + "peip0079", "Player's Edge Plus (IP0079) Standard Draw Poker - French", + "peke1012", "Player's Edge Plus (KE1012) Keno", + "peke1013", "Player's Edge Plus (KE1013) Keno", + "penalty", "Penalty (Bingo)", + "penbros", "Penguin Brothers (Japan)", + "penfan", "Penfan Girls - Step1. Mild Mind (set 1)", + "penfana", "Penfan Girls - Step1. Mild Mind (set 2)", + "pengadvb", "Penguin Adventure (bootleg of MSX version)", + "pengo", "Pengo (set 1 rev c)", + "pengo2", "Pengo (set 2)", + "pengo2u", "Pengo (set 2 not encrypted)", + "pengo3u", "Pengo (set 3 not encrypted)", + "pengo4", "Pengo (set 4)", + "pengob", "Pengo (bootleg)", + "penky", "Penky", + "penta", "Penta", + "pentacup", "Pentacup (rev. 1)", + "pentacup2", "Pentacup (rev. 2)", + "pepp0002", "Player's Edge Plus (PP0002) Standard Draw Poker", + "pepp0002a", "Player's Edge Plus (PP0002) Standard Draw Poker (International)", + "pepp0008", "Player's Edge Plus (PP0008) Standard Draw Poker", + "pepp0010", "Player's Edge Plus (PP0010) Standard Draw Poker", + "pepp0014", "Player's Edge Plus (PP0014) Standard Draw Poker (International)", + "pepp0014a", "Player's Edge Plus (PP0014) Standard Draw Poker", + "pepp0023", "Player's Edge Plus (PP0023) 10's or Better", + "pepp0040", "Player's Edge Plus (PP0040) Standard Draw Poker", + "pepp0041", "Player's Edge Plus (PP0041) Standard Draw Poker", + "pepp0043", "Player's Edge Plus (PP0043) 10's or Better", + "pepp0045", "Player's Edge Plus (PP0045) 10's or Better", + "pepp0046", "Player's Edge Plus (PP0046) 10's or Better", + "pepp0051", "Player's Edge Plus (PP0051) Joker Poker", + "pepp0053", "Player's Edge Plus (PP0053) Joker Poker (Aces or Better)", + "pepp0055", "Player's Edge Plus (PP0055) Deuces Wild Poker (set 1)", + "pepp0055a", "Player's Edge Plus (PP0055) Deuces Wild Poker (set 2)", + "pepp0055b", "Player's Edge Plus (PP0055) Deuces Wild Poker (set 3)", + "pepp0057", "Player's Edge Plus (PP0057) Deuces Wild Poker (set 1)", + "pepp0057a", "Player's Edge Plus (PP0057) Deuces Wild Poker (set 2)", + "pepp0059", "Player's Edge Plus (PP0059) Two Pair or Better (set 1)", + "pepp0059a", "Player's Edge Plus (PP0059) Two Pair or Better (set 2)", + "pepp0060", "Player's Edge Plus (PP0060) Standard Draw Poker (set 1)", + "pepp0060a", "Player's Edge Plus (PP0060) Standard Draw Poker (set 2)", + "pepp0064", "Player's Edge Plus (PP0064) Joker Poker", + "pepp0065", "Player's Edge Plus (PP0065) Joker Poker (Aces or Better)", + "pepp0083", "Player's Edge Plus (PP0083) 10's or Better", + "pepp0103", "Player's Edge Plus (PP0103) Deuces Wild Poker", + "pepp0116", "Player's Edge Plus (PP0116) Standard Draw Poker", + "pepp0118", "Player's Edge Plus (PP0118) Standard Draw Poker", + "pepp0120", "Player's Edge Plus (PP0120) Wild Sevens Poker", + "pepp0125", "Player's Edge Plus (PP0125) Deuces Wild Poker", + "pepp0126", "Player's Edge Plus (PP0126) Deuces Wild Poker", + "pepp0127", "Player's Edge Plus (PP0127) Deuces Joker Wild Poker", + "pepp0158", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1)", + "pepp0158a", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2)", + "pepp0158b", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3)", + "pepp0159", "Player's Edge Plus (PP0159) Standard Draw Poker (International)", + "pepp0171", "Player's Edge Plus (PP0171) Joker Poker", + "pepp0178", "Player's Edge Plus (PP0178) 4 of a Kind Bonus Poker (Operator selectable special 4 of a Kind)", + "pepp0188", "Player's Edge Plus (PP0188) Standard Draw Poker (set 1)", + "pepp0188a", "Player's Edge Plus (PP0188) Standard Draw Poker (set 2)", + "pepp0190", "Player's Edge Plus (PP0190) Deuces Wild Poker", + "pepp0197", "Player's Edge Plus (PP0197) Standard Draw Poker (set 1)", + "pepp0197a", "Player's Edge Plus (PP0197) Standard Draw Poker (set 2)", + "pepp0203", "Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 1)", + "pepp0203a", "Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 2)", + "pepp0203b", "Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 3)", + "pepp0219", "Player's Edge Plus (PP0219) Standard Draw Poker", + "pepp0221", "Player's Edge Plus (PP0221) Standard Draw Poker (set 1)", + "pepp0221a", "Player's Edge Plus (PP0221) Standard Draw Poker (set 2)", + "pepp0224", "Player's Edge Plus (PP0224) Deuces Wild Poker (set 1)", + "pepp0224a", "Player's Edge Plus (PP0224) Deuces Wild Poker (set 2)", + "pepp0230", "Player's Edge Plus (PP0230) Standard Draw Poker", + "pepp0249", "Player's Edge Plus (PP0249) Deuces Wild Poker", + "pepp0250", "Player's Edge Plus (PP0250) Double Down Stud Poker", + "pepp0265", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1)", + "pepp0265a", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2)", + "pepp0274", "Player's Edge Plus (PP0274) Standard Draw Poker", + "pepp0290", "Player's Edge Plus (PP0290) Deuces Wild Poker", + "pepp0291", "Player's Edge Plus (PP0291) Deuces Wild Poker", + "pepp0409", "Player's Edge Plus (PP0409) 4 of a Kind Bonus Poker", + "pepp0410", "Player's Edge Plus (PP0410) 4 of a Kind Bonus Poker", + "pepp0417", "Player's Edge Plus (PP0417) Deuces Wild Poker (set 1)", + "pepp0417a", "Player's Edge Plus (PP0417) Deuces Wild Poker (set 2)", + "pepp0419", "Player's Edge Plus (PP0419) Standard Draw Poker", + "pepp0420", "Player's Edge Plus (PP0420) Standard Draw Poker", + "pepp0423", "Player's Edge Plus (PP0423) Standard Draw Poker", + "pepp0426", "Player's Edge Plus (PP0426) Joker Poker", + "pepp0428", "Player's Edge Plus (PP0428) Joker Poker", + "pepp0429", "Player's Edge Plus (PP0429) Joker Poker (Aces or Better)", + "pepp0434", "Player's Edge Plus (PP0434) Bonus Poker Deluxe", + "pepp0447", "Player's Edge Plus (PP0447) Standard Draw Poker (set 1)", + "pepp0447a", "Player's Edge Plus (PP0447) Standard Draw Poker (set 2)", + "pepp0449", "Player's Edge Plus (PP0449) Standard Draw Poker", + "pepp0452", "Player's Edge Plus (PP0452) Double Deuces Wild Poker", + "pepp0454", "Player's Edge Plus (PP0454) Bonus Poker Deluxe", + "pepp0455", "Player's Edge Plus (PP0455) Joker Poker", + "pepp0458", "Player's Edge Plus (PP0458) Joker Poker (Aces or Better)", + "pepp0488", "Player's Edge Plus (PP0488) Standard Draw Poker (Arizona Charlie's)", + "pepp0508", "Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker", + "pepp0509", "Player's Edge Plus (PP0509) Standard Draw Poker", + "pepp0510", "Player's Edge Plus (PP0510) Standard Draw Poker", + "pepp0514", "Player's Edge Plus (PP0514) Double Bonus Poker (set 1)", + "pepp0514a", "Player's Edge Plus (PP0514) Double Bonus Poker (set 2)", + "pepp0514b", "Player's Edge Plus (PP0514) Double Bonus Poker (set 3)", + "pepp0515", "Player's Edge Plus (PP0515) Double Bonus Poker (set 1)", + "pepp0515a", "Player's Edge Plus (PP0515) Double Bonus Poker (set 2)", + "pepp0516", "Player's Edge Plus (PP0516) Double Bonus Poker (set 1)", + "pepp0516a", "Player's Edge Plus (PP0516) Double Bonus Poker (set 2)", + "pepp0531", "Player's Edge Plus (PP0531) Joker Poker", + "pepp0536", "Player's Edge Plus (PP0536) Joker Poker", + "pepp0538", "Player's Edge Plus (PP0538) Double Bonus Poker", + "pepp0540", "Player's Edge Plus (PP0540) Double Bonus Poker", + "pepp0542", "Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker", + "pepp0568", "Player's Edge Plus (PP0568) Joker Poker", + "pepp0585", "Player's Edge Plus (PP0585) Standard Draw Poker", + "pepp0713", "Player's Edge Plus (PP0713) Bonus Poker Deluxe", + "pepp0725", "Player's Edge Plus (PP0725) Double Bonus Poker (set 1)", + "pepp0725a", "Player's Edge Plus (PP0725) Double Bonus Poker (set 2)", + "pepp0726", "Player's Edge Plus (PP0726) Double Bonus Poker", + "pepp0728", "Player's Edge Plus (PP0728) Double Bonus Poker", + "pepp0760", "Player's Edge Plus (PP0760) Double Down Stud Poker", + "pepp0763", "Player's Edge Plus (PP0763) 4 of a Kind Bonus Poker", + "pepp0775", "Player's Edge Plus (PP0775) Royal Deuces Poker??", + "pepper2", "Pepper II (version 8)", + "pepper27", "Pepper II (version 7)", + "peps0014", "Player's Edge Plus (PS0014) Super Joker Slots", + "peps0021", "Player's Edge Plus (PS0021) Red White & Blue Slots", + "peps0022", "Player's Edge Plus (PS0022) Red White & Blue Slots", + "peps0042", "Player's Edge Plus (PS0042) Double Diamond Slots", + "peps0043", "Player's Edge Plus (PS0043) Double Diamond Slots", + "peps0045", "Player's Edge Plus (PS0045) Red White & Blue Slots", + "peps0047", "Player's Edge Plus (PS0047) Wild Cherry Slots", + "peps0092", "Player's Edge Plus (PS0092) Wild Cherry Slots", + "peps0206", "Player's Edge Plus (PS0206) Red White & Blue Slots", + "peps0207", "Player's Edge Plus (PS0207) Red White & Blue Slots", + "peps0296", "Player's Edge Plus (PS0296) Haywire Slots", + "peps0298", "Player's Edge Plus (PS0298) Double Diamond Slots", + "peps0308", "Player's Edge Plus (PS0308) Double Jackpot Slots", + "peps0364", "Player's Edge Plus (PS0364) Red White & Blue Slots", + "peps0426", "Player's Edge Plus (PS0426) Sizzling Sevens Slots", + "peps0581", "Player's Edge Plus (PS0581) Red White & Blue Slots", + "peps0615", "Player's Edge Plus (PS0615) Chaos Slots", + "peps0631", "Player's Edge Plus (PS0631) Red White & Blue Slots", + "peps0716", "Player's Edge Plus (PS0716) River Gambler Slots", + "pepsiman", "PEPSI Man", + "percuss", "The Percussor", + "perestro", "Perestroika Girls", + "perestrof", "Perestroika Girls (Fuuki license)", + "perfect", "Perfect Game (Russia)", + "perfrman", "Performan (Japan)", + "perfrmanu", "Performan (US)", + "pesadelo", "Pesadelo (bootleg of Knightmare on MSX)", + "peset001", "Player's Edge Plus (Set001) Set Chip", + "peset038", "Player's Edge Plus (Set038) Set Chip", + "pestplce", "Pest Place", + "petaco", "Petaco", + "petaco2", "Petaco 2", + "peterpak", "Peter Pack-Rat", + "pettanp", "Pettan Pyuu (Japan)", + "pex0002p", "Player's Edge Plus (X000002P+XP000038) Standard Draw Poker", + "pex0002pa", "Player's Edge Plus (X000002P+XP000109) Standard Draw Poker", + "pex0040p", "Player's Edge Plus (X000040P+XP000038) Standard Draw Poker", + "pex0045p", "Player's Edge Plus (X000045P+XP000038) 10's or Better", + "pex0046p", "Player's Edge Plus (X000046P+XP000038) 10's or Better", + "pex0053p", "Player's Edge Plus (X000053P+XP000038) Joker Poker (Aces or Better)", + "pex0054p", "Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker", + "pex0055p", "Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker", + "pex0055pa", "Player's Edge Plus (X000055P+XP000022) Deuces Wild Poker (The Orleans)", + "pex0055pb", "Player's Edge Plus (X000055P+XP000023) Deuces Wild Poker", + "pex0055pc", "Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker", + "pex0055pd", "Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker", + "pex0055pe", "Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker", + "pex0055pf", "Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker", + "pex0055pg", "Player's Edge Plus (X000055P+XP000053) Deuces Wild Poker", + "pex0055ph", "Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker", + "pex0055pi", "Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker", + "pex0055pj", "Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker", + "pex0055pk", "Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker", + "pex0055pl", "Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker", + "pex0055pm", "Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker", + "pex0055pn", "Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker", + "pex0055po", "Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker", + "pex0055pp", "Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker", + "pex0055pq", "Player's Edge Plus (X000055P+XP000112) Deuces Wild Poker", + "pex0055pr", "Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker", + "pex0060p", "Player's Edge Plus (X000060P+XP000038) Standard Draw Poker", + "pex0158p", "Player's Edge Plus (X000158P+XP000038) 4 of a Kind Bonus Poker", + "pex0171p", "Player's Edge Plus (X000171P+XP000038) Joker Poker", + "pex0188p", "Player's Edge Plus (X000188P+XP000038) Standard Draw Poker", + "pex0190p", "Player's Edge Plus (X000190P+XP000053) Deuces Wild Poker", + "pex0197p", "Player's Edge Plus (X000197P+XP000038) Standard Draw Poker", + "pex0203p", "Player's Edge Plus (X000203P+XP000038) 4 of a Kind Bonus Poker", + "pex0224p", "Player's Edge Plus (X000224P+XP000053) Deuces Wild Poker", + "pex0225p", "Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker", + "pex0265p", "Player's Edge Plus (X000265P+XP000038) 4 of a Kind Bonus Poker", + "pex0291p", "Player's Edge Plus (X000291P+XP000053) Deuces Wild Poker", + "pex0417p", "Player's Edge Plus (X000417P+XP000053) Deuces Wild Poker", + "pex0430p", "Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker", + "pex0434p", "Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe", + "pex0447p", "Player's Edge Plus (X000447P+XP000038) Standard Draw Poker", + "pex0449p", "Player's Edge Plus (X000449P+XP000038) Standard Draw Poker", + "pex0451p", "Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe", + "pex0452p", "Player's Edge Plus (X000452P+XP000038) Double Deuces Wild Poker", + "pex0454p", "Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe", + "pex0458p", "Player's Edge Plus (X000458P+XP000038) Joker Poker (Aces or Better)", + "pex0459p", "Player's Edge Plus (X000459P+XP000038) Joker Poker", + "pex0459pa", "Player's Edge Plus (X000459P+XP000155) Joker Poker", + "pex0508p", "Player's Edge Plus (X000508P+XP000038) Loose Deuce Deuces Wild! Poker", + "pex0514p", "Player's Edge Plus (X000514P+XP000038) Double Bonus Poker", + "pex0515p", "Player's Edge Plus (X000515P+XP000038) Double Bonus Poker", + "pex0536p", "Player's Edge Plus (X000536P+XP000038) Joker Poker", + "pex0537p", "Player's Edge Plus (X000537P+XP000038) Standard Draw Poker", + "pex0568p", "Player's Edge Plus (X000568P+XP000038) Joker Poker", + "pex0581p", "Player's Edge Plus (X000581P+XP000038) 4 of a Kind Bonus Poker", + "pex0588p", "Player's Edge Plus (X000588P+XP000038) Joker Poker", + "pex0725p", "Player's Edge Plus (X000725P+XP000038) Double Bonus Poker", + "pex0726p", "Player's Edge Plus (X000726P+XP000038) Double Bonus Poker", + "pex0727p", "Player's Edge Plus (X000727P+XP000038) Double Bonus Poker", + "pex0763p", "Player's Edge Plus (X000763P+XP000038) 4 of a Kind Bonus Poker", + "pex0838s", "Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots", + "pex0841s", "Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots", + "pex0998s", "Player's Edge Plus (X000998S+XS000006) Triple Triple Diamond Slots", + "pex1087s", "Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots", + "pex2018p", "Player's Edge Plus (X002018P+XP000038) Full House Bonus Poker", + "pex2025p", "Player's Edge Plus (X002025P+XP000019) Deuces Wild Bonus Poker", + "pex2026p", "Player's Edge Plus (X002026P+XP000019) Deuces Wild Bonus Poker", + "pex2027p", "Player's Edge Plus (X002027P+XP000019) Deuces Wild Bonus Poker", + "pex2031p", "Player's Edge Plus (X002031P+XP000112) Lucky Deal Poker", + "pex2035p", "Player's Edge Plus (X002035P+XP000112) White Hot Aces Poker", + "pex2036p", "Player's Edge Plus (X002036P+XP000112) White Hot Aces Poker", + "pex2040p", "Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker", + "pex2042p", "Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker", + "pex2043p", "Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker", + "pex2045p", "Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker", + "pex2066p", "Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker", + "pex2067p", "Player's Edge Plus (X002067P+XP000038) Double Double Bonus Poker", + "pex2068p", "Player's Edge Plus (X002068P+XP000038) Double Double Bonus Poker", + "pex2069p", "Player's Edge Plus (X002069P+XP000038) Double Double Bonus Poker", + "pex2070p", "Player's Edge Plus (X002070P+XP000038) Double Double Bonus Poker", + "pex2121p", "Player's Edge Plus (X002121P+XP000038) Standard Draw Poker", + "pex2121pa", "Player's Edge Plus (X002121P+XP000037) Standard Draw Poker", + "pex2150p", "Player's Edge Plus (X002150P+XP000038) 4 of a Kind Bonus Poker", + "pex2172p", "Player's Edge Plus (X002172P+XP000112) Ace$ Bonus Poker", + "pex2180p", "Player's Edge Plus (X002180P+XP000038) Double Bonus Poker", + "pex2241p", "Player's Edge Plus (X002241P+XP000079) 4 of a Kind Bonus Poker", + "pex2244p", "Player's Edge Plus (X002244P+XP000079) Double Bonus Poker", + "pex2245p", "Player's Edge Plus (X002245P+XP000055) Standard Draw Poker", + "pex2245pa", "Player's Edge Plus (X002245P+XP000079) Standard Draw Poker", + "pex2250p", "Player's Edge Plus (X002250P+XP000050) Shockwave Poker", + "pex2251p", "Player's Edge Plus (X002251P+XP000050) Shockwave Poker", + "pex2283p", "Player's Edge Plus (X002283P+XP000057) Dealt Deuces Wild Bonus Poker", + "pex2284p", "Player's Edge Plus (X002284P+XP000057) Barbaric Decues Wild Bonus Poker", + "pex2302p", "Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe", + "pex2303p", "Player's Edge Plus (X002303P+XP000112) White Hot Aces Poker", + "pex2307p", "Player's Edge Plus (X002307P+XP000112) Triple Double Bonus Poker", + "pex2314p", "Player's Edge Plus (X002314P+XP000112) Triple Bonus Poker Plus", + "pex2374p", "Player's Edge Plus (X002374P+XP000112) Super Aces Poker (Horseshoe)", + "pex2377p", "Player's Edge Plus (X002377P+XP000112) Super Double Bonus Poker", + "pex2420p", "Player's Edge Plus (X002420P+XP000064) Deuces Wild Bonus Poker - French", + "pex2440p", "Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker", + "pex2461p", "Player's Edge Plus (X002461P+XP000055) Joker Poker (Two Pair or Better)", + "pexm001p", "Player's Edge Plus (XM00001P+XMP00003) Multi-Poker", + "pexm002p", "Player's Edge Plus (XM00002P+XMP00006) Multi-Poker", + "pexm003p", "Player's Edge Plus (XM00003P+XMP00024) Multi-Poker", + "pexm004p", "Player's Edge Plus (XM00004P+XMP00002) Multi-Poker", + "pexm005p", "Player's Edge Plus (XM00005P+XMP00004) Multi-Poker", + "pexm006p", "Player's Edge Plus (XM00006P+XMP00006) Multi-Poker", + "pexm007p", "Player's Edge Plus (XM00007P+XMP00006) Multi-Poker", + "pexm008p", "Player's Edge Plus (XM00008P+XMP00006) Multi-Poker", + "pexmp017", "Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2298)", + "pexmp017a", "Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2352)", + "pexmp017b", "Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2426)", + "pexmp030", "Player's Edge Plus (XMP00030) 5-in-1 Wingboard (CG2426)", + "pf2012", "Psychic Force 2012", + "pfevr_l2", "Pennant Fever (L-2)", + "pfevr_p3", "Pennant Fever (P-3)", + "pfghtj", "Pocket Fighter (Japan 970904)", + "pgalvip", "Pocket Gals V.I.P (set 1)", + "pgalvipa", "Pocket Gals V.I.P (set 2)", + "pgear", "Powered Gear: Strategic Variant Armor Equipment (Japan 941024)", + "pgearr1", "Powered Gear: Strategic Variant Armor Equipment (Japan 940916)", + "pgm", "PGM (Polygame Master) System BIOS", + "pgm3in1", "Photo Y2K 2 (Flash 3-in-1)", + "pgoal", "Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219)", + "phantasm", "Phantasm (Japan)", + "phantom", "Phantom (bootleg of Spectar)", + "phantom2", "Phantom II", + "phantoma", "Phantomas (bootleg of Spectar)", + "phantomp", "Phantom Pays (4VXFC5431, New Zealand)", + "pharo_l2", "Pharaoh (L-2)", + "pharrier", "Planet Harriers", + "phelios", "Phelios (Japan)", + "phklad", "Klad / Labyrinth (Photon System)", + "phnix_l1", "Phoenix (L-1)", + "phoenix", "Phoenix (Amstar)", + "phoenix3", "Phoenix (T.P.N.)", + "phoenixa", "Phoenix (Centuri, set 1)", + "phoenixb", "Phoenix (Centuri, set 2)", + "phoenixc", "Phoenix (Irecsa / G.G.I Corp, set 1)", + "phoenixc2", "Phoenix (Irecsa / G.G.I Corp, set 2)", + "phoenixc3", "Phoenix (Irecsa / G.G.I Corp, set 3)", + "phoenixc4", "Phoenix (Irecsa / G.G.I Corp, set 4)", + "phoenixj", "Phoenix (Taito Japan)", + "phoenixs", "Phoenix (Spanish bootleg)", + "phoenixt", "Phoenix (Taito)", + "phoenxp2", "Phoenix Part 2", + "photof", "Photo Finish (bootleg?)", + "photoply", "Photo Play 2000 (v2.01)", + "photoy2k", "Photo Y2K (ver. 105)", + "photoy2k102", "Photo Y2K (ver. 102, Japanese Board)", + "photoy2k104", "Photo Y2K (ver. 104)", + "phozon", "Phozon (Japan)", + "phozons", "Phozon (Sidam)", + "phpython", "Python (Photon System)", + "phrcraze", "Phraze Craze (6221-40, U5-0A)", + "phrcrazea", "Phraze Craze (6221-40, U5-0)", + "phrcrazeb", "Phraze Craze (6221-40, U5-3A Expanded Questions)", + "phrcrazec", "Phraze Craze (6221-40, U5-3 Expanded Questions)", + "phrcrazev", "Phraze Craze (6221-45, U5-2 Vertical)", + "phtetris", "Tetris (Photon System)", + "piccolop", "Piccolo Poker 100", + "pickin", "Pickin'", + "pickwin", "Pick 'n Win (Version 2.9E Dual)", + "pickwinb1", "Pick 'n Win (Version 2.9R, set 1)", + "pickwinbt", "Pick 'n Win (Version 2.8T, set 1)", + "pickwind1", "Pick 'n Win (Version 2.9R, set 2)", + "pickwindt", "Pick 'n Win (Version 2.8T, set 2)", + "pickwino", "Pick 'n Win (Version 2.6)", + "pickwino2", "Pick 'n Win (Version 2.5T)", + "pickwinv1", "Pick 'n Win (Version 2.9R Dual)", + "pickwinvt", "Pick 'n Win (Version 2.8T, Dual)", + "pignewt", "Pig Newton (version C)", + "pignewta", "Pig Newton (version A)", + "pigout", "Pig Out: Dine Like a Swine! (set 1)", + "pigouta", "Pig Out: Dine Like a Swine! (set 2)", + "pigskin", "Pigskin 621AD (rev 1.1K 8/01/90)", + "pigskina", "Pigskin 621AD (rev 2.0 7/06/90)", + "pigskinb", "Pigskin 621AD (rev 1.1 6/05/90)", + "pimbal", "Pimbal (Pinball 3000)", + "pinball", "Pinball", + "pinbo", "Pinbo (set 1)", + "pinboa", "Pinbo (set 2)", + "pinbos", "Pinbo (bootleg)", + "pinchamp", "Pinball Champ", + "pinchamp7", "Pinball Champ (7 digits)", + "pinchamp7g", "Pinball Champ (7 digits German speech)", + "pinchamp7i", "Pinball Champ (7 digits Italian speech)", + "pinchampg", "Pinball Champ (German speech)", + "pinchampi", "Pinball Champ (Italian speech)", + "pinclown", "Clown (Inder)", + "pingpong", "Konami's Ping-Pong", + "pinkiri8", "Pinkiri 8", + "pinkswts", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", + "pinkswtsa", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", + "pinkswtsb", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", + "pinkswtsx", "Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.)", + "pinpool", "Pinball Pool", + "pipedrm", "Pipe Dream (World)", + "pipedrmj", "Pipe Dream (Japan)", + "pipedrmt", "Pipe Dream (Taiwan)", + "pipedrmu", "Pipe Dream (US)", + "pipeline", "Pipeline", + "pipibibs", "Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 1)", + "pipibibsa", "Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 2)", + "pipibibsbl", "Pipi & Bibis / Whoopee!! (bootleg)", + "pipibibsp", "Pipi & Bibis / Whoopee!! (prototype)", + "pir2001", "Pirate 2001 (Version 2.5E Dual)", + "pir2001b1", "Pirate 2001 (Version 2.5R, set 1)", + "pir2001bx", "Pirate 2001 (Version 2.40XT, set 1)", + "pir2001d1", "Pirate 2001 (Version 2.5R, set 2)", + "pir2001dx", "Pirate 2001 (Version 2.40XT, set 2)", + "pir2001o", "Pirate 2001 (Version 2.3N)", + "pir2001o2", "Pirate 2001 (Version 2.3)", + "pir2001o3", "Pirate 2001 (Version 2.20XT)", + "pir2001v1", "Pirate 2001 (Version 2.5R Dual)", + "pir2001vx", "Pirate 2001 (Version 2.40XT Dual)", + "pir2002", "Pirate 2002 (Version 2.0E Dual)", + "pir2002b1", "Pirate 2002 (Version 2.0R, set 1)", + "pir2002bx", "Pirate 2002 (Version 1.90XT, set 1)", + "pir2002d1", "Pirate 2002 (Version 2.0R, set 2)", + "pir2002dx", "Pirate 2002 (Version 1.90XT, set 2)", + "pir2002o", "Pirate 2002 (Version 1.8N)", + "pir2002o2", "Pirate 2002 (Version 1.8)", + "pir2002o3", "Pirate 2002 (Version 1.70XT)", + "pir2002v1", "Pirate 2002 (Version 2.0R Dual)", + "pir2002vx", "Pirate 2002 (Version 1.90XT Dual)", + "piranha", "Piranha", + "piranhah", "Piranha (hack)", + "piranhao", "Piranha (older)", + "pirate2", "Pirate 2 (061005 World)", + "pirate2_2", "Pirate 2 (070126 Russia)", + "pirate2_2a", "Pirate 2 (bootleg, 070126, banking address hack)", + "pirate2_3", "Pirate 2 (090528 Lottery)", + "pirate2_4", "Pirate 2 (090730 Entertainment)", + "pirate2a", "Pirate 2 (bootleg, 061005, banking address hack set 1)", + "pirate2b", "Pirate 2 (bootleg, 061005, banking address hack set 2)", + "pirate2c", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1)", + "pirate2d", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2)", + "pirate2e", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3)", + "pirate2f", "Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01)", + "pirate2g", "Pirate 2 (bootleg, 061005, LOTTOGAME (I))", + "pirate2h", "Pirate 2 (bootleg, 061005, LOTOS PR01)", + "pirate_2", "Pirate (060210 World)", + "pirate_3", "Pirate (060803 World)", + "pirate_4", "Pirate (070412 Russia)", + "pirates", "Pirates", + "piratetr", "Pirate Treasure", + "pirati", "Pirati", + "piratpet", "Pirate Pete", + "pirpok2", "Pirate Poker II (Version 2.4E Dual)", + "pirpok2b1", "Pirate Poker II (Version 2.2R, set 1)", + "pirpok2d1", "Pirate Poker II (Version 2.2R, set 2)", + "pirpok2o", "Pirate Poker II (Version 2.0)", + "pirpok2v1", "Pirate Poker II (Version 2.2R Dual)", + "pisces", "Pisces", + "piscesb", "Pisces (bootleg)", + "pistoldm", "Pistol Daimyo no Bouken (Japan)", + "pitboss", "The Pit Boss (2214-04)", + "pitboss2", "Pit Boss II (9221-01C)", + "pitbossa", "The Pit Boss (2214-03, U5-0C)", + "pitbossa1", "The Pit Boss (2214-03, U5-1C)", + "pitbossb", "The Pit Boss (2214-02?)", + "pitbossc", "The Pit Boss (2214-?)", + "pitbossm", "Pit Boss Megastar (9244-00-01)", + "pitbossma", "Pit Boss Megastar (9243-00-01)", + "pitbosss", "Pit Boss Superstar (9221-10-00B)", + "pitbosssa", "Pit Boss Superstar (9221-10-00A)", + "pitbosssc", "Pit Boss Superstar (9221-12-01)", + "pitfall2", "Pitfall II (315-5093)", + "pitfall2a", "Pitfall II (315-5093, Flicky Conversion)", + "pitfall2u", "Pitfall II (not encrypted)", + "pitfight", "Pit Fighter (rev 9)", + "pitfight3", "Pit Fighter (rev 3)", + "pitfight4", "Pit Fighter (rev 4)", + "pitfight5", "Pit Fighter (rev 5)", + "pitfight6", "Pit Fighter (rev 6)", + "pitfight7", "Pit Fighter (rev 7)", + "pitfightb", "Pit Fighter (bootleg)", + "pitfightj", "Pit Fighter (Japan, 2 players)", + "pitnrun", "Pit & Run - F-1 Race (set 1)", + "pitnruna", "Pit & Run - F-1 Race (set 2)", + "pjustic", "Moero Justice Gakuen (JPN) / Project Justice (USA, EXP, KOR, AUS) (Rev A)", + "pkgnsh", "Pachinko Gindama Shoubu (Japan)", + "pkgnshdx", "Pachinko Gindama Shoubu DX (Japan)", + "pkladies", "Poker Ladies", + "pkladiesbl", "Poker Ladies (Censored bootleg)", + "pkladiesl", "Poker Ladies (Leprechaun ver. 510)", + "pkladiesla", "Poker Ladies (Leprechaun ver. 401)", + "pkrdewin", "Poker De Win", + "pkrmast", "Poker Master (set 1)", + "pkrmasta", "Poker Master (set 2)", + "pkrno_l1", "Pokerino (L-1)", + "pkscram", "PK Scramble", + "pktet346", "PK Tetris (v346I)", + "pktgaldx", "Pocket Gal Deluxe (Euro v3.00)", + "pktgaldxb", "Pocket Gal Deluxe (Euro v3.00, bootleg)", + "pktgaldxj", "Pocket Gal Deluxe (Japan v3.00)", + "pkunwar", "Penguin-Kun Wars (US)", + "pkunwarj", "Penguin-Kun Wars (Japan)", + "platoon", "Vs. Platoon", + "play_a24", "Playboy 35th Anniversary (2.4)", + "playball", "PlayBall! (prototype)", + "playboy", "Playboy", + "playboyf", "Playboy (5.00 France)", + "playboyf_203", "Playboy (2.03 France)", + "playboyf_300", "Playboy (3.00 France)", + "playboyf_303", "Playboy (3.03 France)", + "playboyf_401", "Playboy (4.01 France)", + "playboyg", "Playboy (5.00 Germany)", + "playboyg_203", "Playboy (2.03 Germany)", + "playboyg_300", "Playboy (3.00 Germany)", + "playboyg_303", "Playboy (3.03 Germany)", + "playboyg_401", "Playboy (4.01 Germany)", + "playboyi", "Playboy (5.00 Italy)", + "playboyi_203", "Playboy (2.03 Italy)", + "playboyi_300", "Playboy (3.00 Italy)", + "playboyi_303", "Playboy (3.03 Italy)", + "playboyi_401", "Playboy (4.01 Italy)", + "playboyl", "Playboy (5.00 Spain)", + "playboyl_203", "Playboy (2.03 Spain)", + "playboyl_300", "Playboy (3.00 Spain)", + "playboyl_303", "Playboy (3.03 Spain)", + "playboyl_401", "Playboy (4.01 Spain)", + "playboys", "Playboy (5.00)", + "playboys_203", "Playboy (2.03)", + "playboys_300", "Playboy (3.00)", + "playboys_303", "Playboy (3.03)", + "playboys_401", "Playboy (4.01)", + "playch10", "PlayChoice-10 BIOS", + "playnew", "Playboy (ARM7 Sound Board)", + "plegends", "Gogetsuji Legends (US, Ver. 95/06/20)", + "plegendsj", "Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95/06/20)", + "pleiadbl", "Pleiads (bootleg set 1)", + "pleiadce", "Pleiads (Centuri)", + "pleiads", "Pleiads (Tehkan)", + "pleiadsb2", "Pleiads (bootleg set 2)", + "plgirls", "Play Girls", + "plgirls2", "Play Girls 2", + "plotting", "Plotting (World set 1)", + "plottinga", "Plotting (World set 2, protected)", + "plottingb", "Plotting (World set 3, earliest version)", + "plottingu", "Plotting (US)", + "plsmaswd", "Plasma Sword: Nightmare of Bilstein (USA 980316)", + "plsmaswda", "Plasma Sword: Nightmare of Bilstein (Asia 980316)", + "pltkids", "Pilot Kids (Model 2B, Revision A)", + "pltkidsa", "Pilot Kids (Model 2A)", + "plumppop", "Plump Pop (Japan)", + "plusalph", "Plus Alpha", + "plygonet", "Polygonet Commanders (ver UAA)", + "pma", "PMA Poker", + "pmpoker", "PlayMan Poker (German)", + "pmv112", "Pinball Magic", + "pmv112r", "Pinball Magic (Redemption)", + "pnchmn", "Punch Mania: Hokuto No Ken (GQ918 VER. JAB)", + "pnchmn2", "Punch Mania 2: Hokuto No Ken (GQA09 JAA)", + "pnchmna", "Punch Mania: Hokuto No Ken (GQ918 VER. JAB ALT CD)", + "pnickj", "Pnickies (Japan 940608)", + "pnkpnthr", "Pink Panther", + "pntnpuzl", "Paint & Puzzle", + "pnyaa", "Pochi and Nyaa", + "pocketrc", "Pocket Racer (Japan, PKR1/VER.B)", + "podrace", "Star Wars Pod Racer", + "poitto", "Poitto!", + "poizone", "Poizone", + "pokasuka", "Pokasuka Ghost", + "pokechmp", "Poke Champ", + "poker41", "Four in One Poker", + "poker52", "Poker 52 (Ver. 1.2)", + "poker72", "Poker Monarch (v2.50)", + "poker91", "Poker 91", + "pokerdub", "unknown French poker game", + "pokerduc", "unknown encrypted poker game", + "pokermon", "Mundial/Mondial (Italian/French)", + "pokeroul", "Poker Roulette (Version 8.22)", + "pokersis", "unknown Sisteme France Poker", + "pokio", "Pokio (Dutch, Game Card 95-750-278)", + "pokonl97", "Poker Only '97 (ver. 3.3)", + "pokrdice", "Poker Dice", + "polar", "Polar Explorer", + "polaris", "Polaris (Latest version)", + "polarisa", "Polaris (First revision)", + "polarisbr", "Polaris (Brazil)", + "polariso", "Polaris (Original version)", + "polepos", "Pole Position (World)", + "polepos2", "Pole Position II (Japan)", + "polepos2a", "Pole Position II (Atari)", + "polepos2b", "Pole Position II (bootleg)", + "polepos2bi", "Gran Premio F1 (Italian bootleg of Pole Position II)", + "poleposa1", "Pole Position (Atari version 1)", + "poleposa2", "Pole Position (Atari version 2)", + "poleposj", "Pole Position (Japan)", + "poleposn", "Pole Position (Sonic)", + "polic_l2", "Police Force (LA-2)", + "polic_l3", "Police Force (LA-3)", + "polic_l4", "Police Force (LA-4)", + "policetr", "Police Trainer (Rev 1.3)", + "policetr10", "Police Trainer (Rev 1.0)", + "policetr11", "Police Trainer (Rev 1.1)", + "policetr13a", "Police Trainer (Rev 1.3B Newer)", + "policetr13b", "Police Trainer (Rev 1.3B)", + "pollux", "Pollux (set 1)", + "polluxa", "Pollux (set 2)", + "polluxa2", "Pollux (set 3)", + "polynetw", "Poly-Net Warriors (ver JAA)", + "polyplay", "Poly-Play", + "polystar", "Tobe! Polystars (ver JAA)", + "pomp_l1", "Pompeii (Shuffle) (L-1)", + "pompingw", "Pomping World (Japan)", + "ponchin", "Mahjong Pon Chin Kan (Japan set 1)", + "ponchina", "Mahjong Pon Chin Kan (Japan set 2)", + "pong", "Pong (Rev E) external", + "pongf", "Pong (Rev E)", + "ponpoko", "Ponpoko", + "ponpokov", "Ponpoko (Venture Line)", + "pontoon", "Pontoon (FD1094 317-0153)", + "ponttehk", "Pontoon (Tehkan)", + "pool10", "Pool 10 (Italian, set 1)", + "pool10b", "Pool 10 (Italian, set 2)", + "pool10c", "Pool 10 (Italian, set 3)", + "pool10d", "Pool 10 (Italian, set 4)", + "pool10e", "Pool 10 (Italian, Dino 4 hardware, encrypted)", + "pool10f", "Pool 10 (Italian, set 5)", + "pool10g", "Pool 10 (Italian, set 6)", + "pool10h", "Pool 10 (Italian, set 7)", + "pool10i", "Pool 10 (Italian, set 8)", + "pool_l6", "Pool Sharks (LA-6)", + "pool_l7", "Pool Sharks (LA-7)", + "pool_le2", "Pool Sharks (LE-2)", + "pool_p7", "Pool Sharks (PA-7)", + "poolcham", "Pool Champion", + "poolchama", "Pool Champion (alternate sound)", + "poolchami", "Pool Champion (Italian speech)", + "poolshrk", "Poolshark", + "pootan", "Pootan", + "pooyan", "Pooyan", + "pooyans", "Pooyan (Stern Electronics)", + "pop_hh", "Popper (Hard Head bootleg)", + "pop_lx5", "Popeye Saves The Earth (LX-5)", + "pop_pa3", "Popeye Saves The Earth (PA-3)", + "popbingo", "Pop Bingo", + "popbounc", "Pop 'n Bounce / Gapporin", + "popeye", "Popeye (revision D)", + "popeyebl", "Popeye (bootleg)", + "popeyef", "Popeye (revision F)", + "popeyeman", "Popeye-Man", + "popeyeu", "Popeye (revision D not protected)", + "popflame", "Pop Flamer (protected)", + "popflamea", "Pop Flamer (not protected)", + "popflameb", "Pop Flamer (hack?)", + "popflamen", "Pop Flamer (bootleg on Naughty Boy PCB)", + "popn2", "Pop'n Music 2 (ver JA-A)", + "popn4", "Pop'n Music 4", + "popn5", "Pop'n Music 5", + "popn6", "Pop'n Music 6", + "popn7", "Pop'n Music 7", + "popn8", "Pop'n Music 8", + "popn9", "Pop'n Music 9 (ver JAB)", + "popnanm2", "Pop'n Music Animelo 2", + "popnpop", "Pop'n Pop (Ver 2.07O 1998/02/09)", + "popnpopj", "Pop'n Pop (Ver 2.07J 1998/02/09)", + "popnpopu", "Pop'n Pop (Ver 2.07A 1998/02/09)", + "popobear", "PoPo Bear", + "popper", "Popper", + "popshot", "Pop Shot (prototype)", + "popspops", "Pop's Pop's", + "porky", "Porky", + "porter", "Port Man (bootleg on Moon Cresta hardware)", + "portman", "Port Man", + "portrait", "Portraits (set 1)", + "portraita", "Portraits (set 2)", + "potgame", "Pot Game (Italian)", + "potgoldu", "Pot O' Gold (U.S. Games, v400x?)", + "potnpkra", "Jack Potten's Poker (set 2)", + "potnpkrb", "Jack Potten's Poker (set 3)", + "potnpkrc", "Jack Potten's Poker (set 4)", + "potnpkrd", "Jack Potten's Poker (set 5)", + "potnpkre", "Jack Potten's Poker (set 6)", + "potnpkrf", "Jack Potten's Poker (set 7, Royale GFX)", + "poto_a32", "The Phantom of the Opera (3.2)", + "potogold", "Pot of Gold", + "potopoto", "Poto Poto (Japan)", + "pottnpkr", "Jack Potten's Poker (set 1)", + "poundfor", "Pound for Pound (World)", + "poundforj", "Pound for Pound (Japan)", + "poundforu", "Pound for Pound (US)", + "pow", "P.O.W. - Prisoners of War (US version 1)", + "powerbal", "Power Balls", + "powerbals", "Power Balls (Super Slam conversion)", + "powercrd", "Power Card (Ver 0263, encrypted)", + "powerdrv", "Power Drive", + "powerins", "Power Instinct (USA)", + "powerinsa", "Power Instinct (USA, bootleg set 1)", + "powerinsb", "Power Instinct (USA, bootleg set 2)", + "powerinsj", "Gouketsuji Ichizoku (Japan)", + "powj", "Datsugoku - Prisoners of War (Japan)", + "powrplay", "Power Play", + "powyak96", "Jikkyou Powerful Pro Yakyuu '96 (GV017 Japan 1.03)", + "powyakex", "Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB)", + "ppan", "Peter Pan (bootleg of Hook)", + "ppcar", "Pang Pang Car", + "ppchamp", "Pasha Pasha Champ Mini Game Festival (Korea)", + "ppd", "ParaParaDancing", + "ppking", "Ping-Pong King", + "ppmast93", "Ping Pong Masters '93", + "ppp", "ParaParaParadise", + "ppp11", "ParaParaParadise v1.1", + "ppp1mp", "ParaParaParadise 1st Mix Plus", + "ppp2nd", "ParaParaParadise 2nd Mix", + "pprobe", "Planet Probe (prototype?)", + "ppsatan", "Poka Poka Satan (Japan)", + "ppspeed", "Speed Up (Spanish bootleg of Pole Position)", + "pr_5xcsh", "5x Cash (Project) (PROCONN)", + "pr_7hvn", "777 Heaven (Project) (PROCONN)", + "pr_7hvna", "777 Heaven (Project) (10GBP Jackpot) (PROCONN)", + "pr_7hvnb", "777 Heaven (Project) (20p 6GBP Jackpot Version 114) (PROCONN)", + "pr_7hvnc", "777 Heaven (Project) (10p 3GBP Jackpot Version 380) (PROCONN)", + "pr_7hvnd", "777 Heaven (Project) (5p 3GBP Jackpot Version 105) (PROCONN)", + "pr_7hvne", "777 Heaven (Project) (set 6) (PROCONN)", + "pr_7hvnf", "777 Heaven (Project) (set 7) (PROCONN)", + "pr_7hvng", "777 Heaven (Project) (set 8) (PROCONN)", + "pr_7hvnh", "777 Heaven (Project) (set 9) (PROCONN)", + "pr_7hvni", "777 Heaven (Project) (set 10) (PROCONN)", + "pr_7hvnj", "777 Heaven (Project) (set 11) (PROCONN)", + "pr_7hvnk", "777 Heaven (Project) (set 12) (PROCONN)", + "pr_7hvnl", "777 Heaven (Project) (set 13) (PROCONN)", + "pr_7hvnm", "777 Heaven (Project) (set 14) (PROCONN)", + "pr_7hvnn", "777 Heaven (Project) (set 15) (PROCONN)", + "pr_7hvno", "777 Heaven (Project) (set 16) (PROCONN)", + "pr_7hvnp", "777 Heaven (Project) (set 17) (PROCONN)", + "pr_7hvnq", "777 Heaven (Project) (set 18) (PROCONN)", + "pr_7hvnr", "777 Heaven (Project) (set 19) (PROCONN)", + "pr_7hvns", "777 Heaven (Project) (set 20) (PROCONN)", + "pr_7hvnt", "777 Heaven (Project) (set 21) (PROCONN)", + "pr_7hvnu", "777 Heaven (Project) (set 22) (PROCONN)", + "pr_alwy9", "Always Nine (Pcp) (set 1) (PROCONN)", + "pr_alwy9a", "Always Nine (Pcp) (set 2) (PROCONN)", + "pr_barbl", "Bars & Bells (Project) (PROCONN)", + "pr_batls", "Battleships (Project) (set 1) (PROCONN)", + "pr_batlsa", "Battleships (Project) (set 2) (PROCONN)", + "pr_batlsb", "Battleships (Project) (set 3) (PROCONN)", + "pr_bears", "Bear Streak (set 1) (Coinworld)", + "pr_bearsa", "Bear Streak (set 2) (Coinworld)", + "pr_bearsb", "Bear Streak (set 3) (Coinworld)", + "pr_bearx", "Bear X (Version 2.3) (Coinworld)", + "pr_bearxa", "Bear X (Version 2.2) (Coinworld)", + "pr_bearxb", "Bear X (Version 1.3) (Coinworld)", + "pr_bearxc", "Bear X (20p set 1) (Coinworld)", + "pr_bearxd", "Bear X (20p set 2) (Coinworld)", + "pr_bearxe", "Bear X (10p set 1) (Coinworld)", + "pr_bearxf", "Bear X (10p set 2) (Coinworld)", + "pr_bearxg", "Bear X (10p set 3) (Coinworld)", + "pr_bearxh", "Bear X (10p set 4?) (Coinworld)", + "pr_bearxi", "Bear X (10p set 5) (Coinworld)", + "pr_bearxj", "Bear X (code 813) (Coinworld)", + "pr_bearxk", "Bear X (8GBP Token?) (Coinworld)", + "pr_bearxl", "Bear X (Version 41) (Coinworld)", + "pr_bearxlp", "Bear X (Version 41, Protocol) (Coinworld)", + "pr_bearxm", "Bear X (Version 31) (Coinworld)", + "pr_bigdp", "Big Dipper (Project) (set 1) (PROCONN)", + "pr_bigdpa", "Big Dipper (Project) (set 2) (PROCONN)", + "pr_btwar", "Beat The Warden (Project) (set 1) (PROCONN)", + "pr_btwara", "Beat The Warden (Project) (set 2) (PROCONN)", + "pr_btwarb", "Beat The Warden (Project) (set 3) (PROCONN)", + "pr_bulbn", "Bully's Big Night (Project) (PROCONN)", + "pr_bulbna", "Bully's Big Night (Project) (set 1) (PROCONN)", + "pr_bulbnb", "Bully's Big Night (Project) (set 2) (PROCONN)", + "pr_buljp", "Bully's Jackpot (Project) (set 1) (PROCONN)", + "pr_buljpa", "Bully's Jackpot (Project) (set 2) (PROCONN)", + "pr_bulls", "Bullseye (Project) (set 1) (PROCONN)", + "pr_bullsa", "Bullseye (Project) (set 2) (PROCONN)", + "pr_bullsb", "Bullseye (Project) (set 3) (PROCONN)", + "pr_cas7", "Casino Jackpot 7s (Project) (PROCONN)", + "pr_cashb", "Cash Back (Project) (PROCONN)", + "pr_chico", "Chico the Bandit (Project) (set 1) (PROCONN)", + "pr_chicoa", "Chico the Bandit (Project) (set 2) (PROCONN)", + "pr_chicob", "Chico the Bandit (Project) (set 3) (PROCONN)", + "pr_coolm", "Cool Million (Project) (set 1) (PROCONN)", + "pr_coolma", "Cool Million (Project) (set 2) (PROCONN)", + "pr_coolmb", "Cool Million (Project) (set 3) (PROCONN)", + "pr_coyot", "Crazy Coyote (Pcp) (10p) (PROCONN)", + "pr_coyota", "Crazy Coyote (Pcp) (20p) (PROCONN)", + "pr_crz77", "Crazy 777s (Project) (PROCONN)", + "pr_crzbr", "Crazy Bars (Project) (PROCONN)", + "pr_crzpy", "Crazy Pays (Project) (PROCONN)", + "pr_dblup", "Double Up (Project) (PROCONN)", + "pr_fire", "Fircecracker (Project) (PROCONN)", + "pr_flshc", "Flash The Cash (Project) (PROCONN)", + "pr_fspot", "Fun Spot (Version 4.1) (Coinworld)", + "pr_fspota", "Fun Spot (Version 3.1) (Coinworld)", + "pr_fspotb", "Fun Spot (Version 2.1, set 1) (Coinworld)", + "pr_fspotc", "Fun Spot (Version 2.1, 20p stake, 82%) (Coinworld)", + "pr_fspotd", "Fun Spot (Version 2.1, 7 button) (Coinworld)", + "pr_fspote", "Fun Spot (Version 1.1, set 1) (Coinworld)", + "pr_fspotf", "Fun Spot (Version 1.1, 20p stake, 82%) (Coinworld)", + "pr_fspotg", "Fun Spot (Version 1.1, 6 button) (Coinworld)", + "pr_ftwhl", "Fortune Wheel (Project) (PROCONN)", + "pr_funrn", "Fun On The Run (Project) (PROCONN)", + "pr_gdft", "Good Fortune (Project) (PROCONN)", + "pr_gldng", "Golden Nugget (Project) (PROCONN)", + "pr_gldnl", "Golden Nile (Project) (PROCONN)", + "pr_gnuc", "Golden Nugget (Version 2.2) (Coinworld)", + "pr_gnuca", "Golden Nugget (Version 1.2) (Coinworld)", + "pr_gogld", "Go For Gold (Project) (PROCONN)", + "pr_happy", "Happy Days (Project) (PROCONN)", + "pr_heato", "The Heat Is On (Project) (PROCONN)", + "pr_hiclm", "Hi Climber (Project) (PROCONN)", + "pr_hit6", "Hit The Six (Project) (set 1) (PROCONN)", + "pr_hit6a", "Hit The Six (Project) (set 2) (PROCONN)", + "pr_hit6b", "Hit The Six (Project) (set 3) (PROCONN)", + "pr_hotcs", "Hot Cash (Project) (PROCONN)", + "pr_hotsp", "Hot Spots (Project) (PROCONN)", + "pr_jkpt7", "Jackpot 7's (Project) (PROCONN)", + "pr_jkrwd", "Jokers Wild (Project) (PROCONN)", + "pr_jumpj", "Jumping Jacks (Project) (set 1) (PROCONN)", + "pr_jumpja", "Jumping Jacks (Project) (set 2) (PROCONN)", + "pr_lday", "'L' Of A Day (Project) (Cash set) (PROCONN)", + "pr_ldaya", "'L' Of A Day (Project) (Token set) (PROCONN)", + "pr_magln", "Magic Lines (Version 2.1) (Coinworld)", + "pr_maglna", "Magic Lines (Version 1.1) (Coinworld)", + "pr_medl", "Medalist (Project) (PROCONN)", + "pr_megmn", "Mega Money (Project) (PROCONN)", + "pr_nifty", "Nifty Fifty (Project) (PROCONN)", + "pr_nudxs", "Nudge XS (Project) (PROCONN)", + "pr_qksht", "Quickshot (Maygay) (PROCONN)", + "pr_rags", "Rags To Riches (Project) (PROCONN)", + "pr_reflx", "Reflex (Project) (PROCONN)", + "pr_roadr", "Road Riot (Project) (PROCONN)", + "pr_roll", "The Roll (Project) (PROCONN)", + "pr_sevab", "Seven's Above (Project) (PROCONN)", + "pr_sevml", "Sevens & Melons (Project) (PROCONN)", + "pr_sptb", "Simply the Best (Pcp) (PROCONN?)", + "pr_supbr", "Super Bars (PCP) (PROCONN)", + "pr_swop", "Swop It (Ace)", + "pr_theme", "Theme Park (Project) (PROCONN)", + "pr_trktp", "Trick or Treat (Protocol?) (Project) (PROCONN)", + "pr_trktr", "Trick or Treat (Project) (PROCONN)", + "pr_trpx", "Triple X (Project) (PROCONN)", + "pr_ttrai", "Treasure Trail (Project) (PROCONN)", + "pr_upnun", "Up & Under (Project) (PROCONN)", + "pr_walls", "Wall Street (Project) (PROCONN)", + "pr_whlft", "Wheel Of Fortune (Project) (PROCONN)", + "pr_wldkn", "Wild Kings (Project) (PROCONN)", + "pr_wnstk", "Winning Streak (Version 1.1) (Coinworld)", + "prehisle", "Prehistoric Isle in 1930 (World)", + "prehislek", "Prehistoric Isle in 1930 (Korea)", + "prehisleu", "Prehistoric Isle in 1930 (US)", + "preisle2", "Prehistoric Isle 2", + "prikura", "Princess Clara Daisakusen (J 960910 V1.000)", + "primella", "Primella", + "primglex", "Prime Goal EX (Japan, PG1/VER.A)", + "primrag2", "Primal Rage 2 (Ver 0.36a)", + "primrage", "Primal Rage (version 2.3)", + "primrage20", "Primal Rage (version 2.0)", + "princess", "Cosmic Princess", + "prmrsocr", "Premier Soccer (ver EAB)", + "prmrsocrj", "Premier Soccer (ver JAB)", + "prmtmfgt", "Prime Time Fighter (Ver 2.1A 1993/05/21) (New Version)", + "prmtmfgto", "Prime Time Fighter (Ver 2.1A 1993/05/21) (Old Version)", + "profpac", "Professor Pac-Man", + "progear", "Progear (USA 010117)", + "progeara", "Progear (Asia 010117)", + "progearj", "Progear no Arashi (Japan 010117)", + "progearjbl", "Progear no Arashi (Japan 010117) (decrypted bootleg)", + "progearjd", "Progear no Arashi (Japan 010117 Phoenix Edition) (bootleg)", + "progearud", "Progear (USA 010117 Phoenix Edition) (bootleg)", + "progolf", "18 Holes Pro Golf (set 1)", + "progolfa", "18 Holes Pro Golf (set 2)", + "progress", "Progress", + "promutrv", "Progressive Music Trivia (Question set 1)", + "promutrva", "Progressive Music Trivia (Question set 2)", + "promutrvb", "Progressive Music Trivia (Question set 3)", + "promutrvc", "Progressive Music Trivia (Question set 4)", + "propcycl", "Prop Cycle (Rev. PR2 Ver.A)", + "prosoccr", "Pro Soccer", + "prosport", "Pro Sports - Bowling, Tennis, and Golf (set 1)", + "prosporta", "Pro Sports - Bowling, Tennis, and Golf (set 2)", + "protennb", "Tennis (bootleg of Pro Tennis)", + "prtyanim", "Party Animal", + "prtytime", "Party Time: Gonta the Diver II / Ganbare! Gonta!! 2 (World Release)", + "psailor1", "Bishoujo Janshi Pretty Sailor 18-kin (Japan)", + "psailor2", "Bishoujo Janshi Pretty Sailor 2 (Japan)", + "psarc95", "PS Arcade 95", + "psattack", "P's Attack", + "psoldier", "Perfect Soldiers (Japan)", + "pspikes", "Power Spikes (World)", + "pspikes2", "Power Spikes II (NGM-068)", + "pspikesb", "Power Spikes (bootleg)", + "pspikesc", "Power Spikes (China)", + "pspikesk", "Power Spikes (Korea)", + "pspikesu", "Power Spikes (US)", + "pss61", "Super Mario Kart / Super Mario Collection / Star Fox (Super Famicom Box)", + "pss62", "New Super 3D Golf Simulation - Waialae No Kiseki / Super Mahjong 2 (Super Famicom Box)", + "pss63", "Super Donkey Kong / Super Tetris 2 + Bombliss (Super Famicom Box)", + "pss64", "Super Donkey Kong / Super Bomberman 2 (Super Famicom Box)", + "pstadium", "Mahjong Panic Stadium (Japan)", + "pstlpkr", "Pistol Poker", + "pstone", "Power Stone (JPN, USA, EUR, ASI, AUS)", + "pstone2", "Power Stone 2 (JPN, USA, EUR, ASI, AUS)", + "psurge", "Power Surge", + "psychic5", "Psychic 5 (set 1)", + "psychic5a", "Psychic 5 (set 2)", + "psychos", "Psycho Soldier (US)", + "psychosj", "Psycho Soldier (Japan)", + "psyforce", "Psychic Force (Ver 2.4O)", + "psyforcej", "Psychic Force (Ver 2.4J)", + "psyforcex", "Psychic Force EX (Ver 2.0J)", + "psyvar2", "Psyvariar 2 - The Will To Fabricate (GDL-0024)", + "psyvaria", "Psyvariar -Medium Unit- (V2.04J)", + "psyvarrv", "Psyvariar -Revision- (V2.04J)", + "ptblank", "Point Blank (World, GN2 Rev B)", + "ptblank2", "Point Blank 2 (GNB5/VER.A)", + "ptblank2ua", "Point Blank 2 (US, GNB3/VER.A)", + "ptblank3", "Point Blank 3 (Asia, GNN2 Ver.A)", + "ptrmj", "PT Reach Mahjong (Japan)", + "pturn", "Parallel Turn", + "puchicar", "Puchi Carat (Ver 2.02O 1997/10/29)", + "puchicarj", "Puchi Carat (Ver 2.02J 1997/10/29)", + "puckman", "Puck Man (Japan set 1)", + "puckmanb", "Puck Man (bootleg set 1)", + "puckmanf", "Puck Man (speedup hack)", + "puckmanh", "Puck Man (bootleg set 2)", + "puckmod", "Puck Man (Japan set 2)", + "puckpepl", "Puck People", + "puckpkmn", "Puckman Pockimon (set 1)", + "puckpkmna", "Puckman Pockimon (set 2)", + "puckpkmnb", "Puckman Pockimon (set 3)", + "pulirula", "PuLiRuLa (World)", + "pulirulaj", "PuLiRuLa (Japan)", + "pulltabs", "Pull Tabs", + "pulsar", "Pulsar", + "pulstar", "Pulstar", + "punchita", "Punch-Out!! (Italian bootleg)", + "punchout", "Punch-Out!!", + "punchoutj", "Punch-Out!! (Japan)", + "punchy", "Punchy The Clown", + "punipic", "The Punisher (bootleg with PIC16c57, set 1)", + "punipic2", "The Punisher (bootleg with PIC16c57, set 2)", + "punipic3", "The Punisher (bootleg with PIC16c57, set 3)", + "punisher", "The Punisher (World 930422)", + "punisherbz", "Biaofeng Zhanjing (Chinese bootleg of The Punisher)", + "punisherh", "The Punisher (Hispanic 930422)", + "punisherj", "The Punisher (Japan 930422)", + "punisheru", "The Punisher (USA 930422)", + "punk", "Punk!", + "punkshot", "Punk Shot (US 4 Players)", + "punkshot2", "Punk Shot (US 2 Players)", + "punkshotj", "Punk Shot (Japan 2 Players)", + "pururun", "Pururun", + "pushman", "Pushman (Korea, set 1)", + "pushmana", "Pushman (Korea, set 2)", + "pushmans", "Pushman (American Sammy license)", + "pushmant", "Pushman (Top Tronic license)", + "pushover", "Push Over (Summit Coin)", + "puyo", "Puyo Puyo (World)", + "puyobl", "Puyo Puyo (World, bootleg)", + "puyoda", "Puyo Puyo Da!", + "puyofev", "Puyo Puyo Fever (GDS-0031)", + "puyofevp", "Puyo Puyo Fever (prototype ver 0.01)", + "puyoj", "Puyo Puyo (Japan, Rev B)", + "puyoja", "Puyo Puyo (Japan, Rev A)", + "puyopuy2", "Puyo Puyo 2 (Japan)", + "puyosun", "Puyo Puyo Sun (J 961115 V0.001)", + "puzlbang", "Puzzle Bang Bang (Korea, version 2.9 / 990108)", + "puzlbanga", "Puzzle Bang Bang (Korea, version 2.8 / 990106)", + "puzlclub", "Puzzle Club (Japan prototype)", + "puzldama", "Taisen Puzzle-dama (ver JAA)", + "puzlstar", "Puzzle Star (ver. 100MG)", + "puzzldpr", "Puzzle De Pon! R!", + "puzzledp", "Puzzle De Pon!", + "puzzlekg", "Puzzle King (Dance & Puzzle)", + "puzzlet", "Puzzlet (Japan)", + "puzzli", "Puzzli", + "puzzli2", "Puzzli 2 (ver. 100)", + "puzzli2s", "Puzzli 2 Super (ver. 200)", + "puzzloop", "Puzz Loop (Europe, v0.94)", + "puzzloopa", "Puzz Loop (Asia)", + "puzzloope", "Puzz Loop (Europe, v0.93)", + "puzzloopj", "Puzz Loop (Japan)", + "puzzloopk", "Puzz Loop (Korea)", + "puzzloopu", "Puzz Loop (USA)", + "puzznic", "Puzznic (World)", + "puzznici", "Puzznic (Italian bootleg)", + "puzznicj", "Puzznic (Japan)", + "pwerplay", "Power Play (Pinball)", + "pwheelsj", "Power Wheels (Japan)", + "pwrgoal", "Taito Power Goal (Ver 2.5O 1994/11/03)", + "pwrinst2", "Power Instinct 2 (US, Ver. 94/04/08)", + "pwrinst2j", "Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08)", + "pwrkick", "Power Kick (Japan)", + "pwrshovl", "Power Shovel ni Norou!! - Power Shovel Simulator", + "py2k2", "Photo Y2K 2", + "pyenaget", "Pye-nage Taikai", + "pyramid", "Pyramid (Dutch, Game Card 95-750-898)", + "pyros", "Pyros (US)", + "pyson", "Konami Pyson BIOS", + "pz_f4", "The Party Zone (F-4)", + "pz_l1", "The Party Zone (L-1)", + "pz_l2", "The Party Zone (L-2)", + "pz_l3", "The Party Zone (L-3)", + "pzlbowl", "Puzzle De Bowling (Japan)", + "pzlbreak", "Puzzle Break", + "pzlestar", "Puzzle Star (Sang Ho Soft)", + "pzletime", "Puzzle Time (prototype)", + "pzloop2", "Puzz Loop 2 (Euro 010302)", + "pzloop2j", "Puzz Loop 2 (Japan 010226)", + "pzloop2jr1", "Puzz Loop 2 (Japan 010205)", + "qad", "Quiz & Dragons: Capcom Quiz Game (USA 920701)", + "qadjr", "Quiz & Dragons: Capcom Quiz Game (Japan Resale Ver. 940921)", + "qb3", "QB-3 (prototype)", + "qbert", "Q*bert (US set 1)", + "qberta", "Q*bert (US set 2)", + "qbertj", "Q*bert (Japan)", + "qbertqub", "Q*bert's Qubes", + "qberttst", "Q*bert (early test version)", + "qbquest", "Q*Bert's Quest", + "qbtrktst", "Q*bert Board Input Test Rom", + "qc", "Quarter Horse Classic", + "qcrayon", "Quiz Crayon Shinchan (Japan)", + "qcrayon2", "Crayon Shinchan Orato Asobo (Japan)", + "qdrmfgp", "Quiz Do Re Mi Fa Grand Prix (Japan)", + "qdrmfgp2", "Quiz Do Re Mi Fa Grand Prix 2 - Shin-Kyoku Nyuukadayo (Japan)", + "qgakumon", "Quiz Gakumon no Susume (Japan ver. JA2 Type L)", + "qgh", "Quiz Ghost Hunter (Japan, ROM Based)", + "qix", "Qix (Rev 2)", + "qix2", "Qix II (Tournament)", + "qixa", "Qix (set 2, smaller roms)", + "qixb", "Qix (set 2, larger roms)", + "qixo", "Qix (set 3, earlier)", + "qjinsei", "Quiz Jinsei Gekijoh (Japan)", + "qmegamis", "Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS)", + "qmhayaku", "Quiz-Mahjong Hayaku Yatteyo! (Japan)", + "qndream", "Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826)", + "qntoond", "Quintoon (Dutch, Game Card 95-750-243)", + "qntoondo", "Quintoon (Dutch, Game Card 95-750-136)", + "qos", "A Question of Sport (set 1, 39-960-107)", + "qosa", "A Question of Sport (set 2, 39-960-099)", + "qosb", "A Question of Sport (set 3, 39-960-089)", + "qotn", "Queen of the Nile (0200439V, NSW/ACT)", + "qrouka", "Quiz Rouka Ni Tattenasai (Japan, ROM Based)", + "qsangoku", "Quiz Sangokushi (Japan)", + "qsww", "Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b)", + "qtheater", "Quiz Theater - 3tsu no Monogatari (Ver 2.3J 1994/11/10)", + "qtono1", "Quiz Tonosama no Yabou (Japan)", + "qtono2j", "Quiz Tonosama no Yabou 2: Zenkoku-ban (Japan 950123)", + "qtorimon", "Quiz Torimonochou (Japan)", + "quake", "Quake Arcade Tournament (Release Beta 2)", + "quantum", "Quantum (rev 2)", + "quantum1", "Quantum (rev 1)", + "quantump", "Quantum (prototype)", + "quaquiz2", "Quadro Quiz II", + "quarterb", "Quarterback (set 1)", + "quarterba", "Quarterback (set 2)", + "quarterh", "Quarter Horse (set 1, Pioneer PR-8210)", + "quarterha", "Quarter Horse (set 2, Pioneer PR-8210)", + "quarterhb", "Quarter Horse (set 3, Pioneer LD-V2000)", + "quartet", "Quartet (Rev A, 8751 315-5194)", + "quartet2", "Quartet 2 (8751 317-0010)", + "quartet2a", "Quartet 2 (unprotected)", + "quarteta", "Quartet (8751 315-5194)", + "quarth", "Quarth (Japan)", + "quasar", "Quasar (set 1)", + "quasara", "Quasar (set 2)", + "queen", "Queen?", + "queenotg", "Queen of the Games", + "quester", "Quester (Japan)", + "questers", "Quester Special Edition (Japan)", + "quickjac", "Quick Jack", + "quicksil", "Quicksilver", + "quintond", "Quintoon (UK, Game Card 95-751-206, Datapak)", + "quintono", "Quintoon (UK, Game Card 95-750-203)", + "quintoon", "Quintoon (UK, Game Card 95-750-206)", + "quiz", "Quiz (Revision 2)", + "quiz18k", "Miyasu Nonki no Quiz 18-Kin", + "quiz211", "Quiz (Revision 2.11)", + "quiz365", "Quiz 365 (Japan)", + "quiz365t", "Quiz 365 (Hong Kong & Taiwan)", + "quizard", "Quizard 3.2", + "quizchq", "Quiz Channel Question (Ver 1.00) (Japan)", + "quizchql", "Quiz Channel Question (Ver 1.23) (Taiwan?)", + "quizdai2", "Quiz Meitantei Neo & Geo - Quiz Daisousa Sen part 2 (NGM-042)(NGH-042)", + "quizdais", "Quiz Daisousa Sen - The Last Count Down (NGM-023)(NGH-023)", + "quizdaisk", "Quiz Daisousa Sen - The Last Count Down (Korean release)", + "quizdna", "Quiz DNA no Hanran (Japan)", + "quizf1", "Quiz F1 1-2 Finish (Japan)", + "quizhq", "Quiz H.Q. (Japan)", + "quizhuhu", "Moriguchi Hiroko no Quiz de Hyuu!Hyuu! (Ver 2.2J 1995/05/25)", + "quizkof", "Quiz King of Fighters (SAM-080)(SAH-080)", + "quizkofk", "Quiz King of Fighters (Korean release)", + "quizmeku", "Quiz Mekurumeku Story (Japan, ROM Based)", + "quizmoon", "Quiz Bisyoujo Senshi Sailor Moon - Chiryoku Tairyoku Toki no Un", + "quizmstr", "Quizmaster (German)", + "quizo", "Quiz Olympic (set 1)", + "quizoa", "Quiz Olympic (set 2)", + "quizpani", "Quiz Panicuru Fantasy", + "quizpun", "Quiz Punch", + "quizpun2", "Quiz Punch 2", + "quizqgd", "Quiz Keitai Q mode (GDL-0017)", + "quizrd12", "Quizard 1.2", + "quizrd17", "Quizard 1.7", + "quizrd18", "Quizard 1.8", + "quizrd22", "Quizard 2.2", + "quizrd23", "Quizard 2.3", + "quizrd34", "Quizard 3.4", + "quizrr40", "Quizard Rainbow 4.0", + "quizrr41", "Quizard Rainbow 4.1", + "quizrr42", "Quizard Rainbow 4.2", + "quizshow", "Quiz Show", + "quiztou", "Nettou! Gekitou! Quiztou!! (Japan)", + "quiztvqq", "Quiz TV Gassyuukoku Q&Q (Japan)", + "quizvadr", "Quizvaders (39-360-078)", + "quizvid", "Video Quiz", + "qwak", "Qwak (prototype)", + "qzchikyu", "Quiz Chikyu Bouei Gun (Japan)", + "qzkklgy2", "Quiz Kokology 2", + "qzkklogy", "Quiz Kokology", + "qzquest", "Quiz Quest - Hime to Yuusha no Monogatari (Japan)", + "qzshowby", "Quiz Sekai wa SHOW by shobai (Japan)", + "r2dtank", "R2D Tank", + "r2dx_v33", "Raiden II / DX (newer V33 PCB)", + "raaspec", "Spectrum I+", + "rab_103", "Adventures of Rocky and Bullwinkle and Friends (1.03 Spain)", + "rab_130", "Adventures of Rocky and Bullwinkle and Friends (1.30)", + "rab_320", "Adventures of Rocky and Bullwinkle and Friends (3.20)", + "rabbit", "Rabbit (Japan)", + "rabbitpk", "Rabbit Poker (Arizona Poker v1.1?)", + "rabiolep", "Rabio Lepus (Japan)", + "raccoon", "Raccoon World", + "racedriv", "Race Drivin' (cockpit, rev 5)", + "racedriv1", "Race Drivin' (cockpit, rev 1)", + "racedriv2", "Race Drivin' (cockpit, rev 2)", + "racedriv3", "Race Drivin' (cockpit, rev 3)", + "racedriv4", "Race Drivin' (cockpit, rev 4)", + "racedrivb", "Race Drivin' (cockpit, British, rev 5)", + "racedrivb1", "Race Drivin' (cockpit, British, rev 1)", + "racedrivb4", "Race Drivin' (cockpit, British, rev 4)", + "racedrivc", "Race Drivin' (compact, rev 5)", + "racedrivc1", "Race Drivin' (compact, rev 1)", + "racedrivc2", "Race Drivin' (compact, rev 2)", + "racedrivc4", "Race Drivin' (compact, rev 4)", + "racedrivcb", "Race Drivin' (compact, British, rev 5)", + "racedrivcb4", "Race Drivin' (compact, British, rev 4)", + "racedrivcg", "Race Drivin' (compact, German, rev 5)", + "racedrivcg4", "Race Drivin' (compact, German, rev 4)", + "racedrivg", "Race Drivin' (cockpit, German, rev 5)", + "racedrivg1", "Race Drivin' (cockpit, German, rev 2)", + "racedrivg4", "Race Drivin' (cockpit, German, rev 4)", + "racedrivpan", "Race Drivin' Panorama (prototype, rev 2.1)", + "raceon", "Race On! (RO2 Ver. A)", + "rachero", "Racing Hero (FD1094 317-0144)", + "racinfrc", "Racin' Force (ver EAC)", + "racinfrcu", "Racin' Force (ver UAB)", + "racingb", "Racing Beat (World)", + "racingbj", "Racing Beat (Japan)", + "racingj", "Racing Jam (JAC)", + "racingj2", "Racing Jam: Chapter 2 (EAE)", + "racingj2j", "Racing Jam: Chapter 2 (JAE)", + "racjamdx", "Racing Jam DX", + "rackempp", "Rack 'em Up! (Pinball)", + "rackemup", "Rack 'em Up (program code L)", + "racknrol", "Rack + Roll", + "radarscp", "Radar Scope", + "radarscp1", "Radar Scope (TRS01)", + "radarzon", "Radar Zone", + "radarzon1", "Radar Zone (Rev.1)", + "radarzont", "Radar Zone (Tuni)", + "radcl_g1", "Radical! (G-1)", + "radcl_l1", "Radical! (L-1)", + "radcl_p3", "Radical! (P-3)", + "radikalb", "Radikal Bikers (Version 2.02)", + "radirgy", "Radirgy (GDL-0032)", + "radirgya", "Radirgy (Rev A) (GDL-0032A)", + "radirgyn", "Radirgy Noa", + "radm", "Rad Mobile (World)", + "radmu", "Rad Mobile (US)", + "radr", "Rad Rally (World)", + "radrad", "Radical Radial", + "radrj", "Rad Rally (Japan)", + "radru", "Rad Rally (US)", + "raflesia", "Rafflesia (315-5162)", + "ragnagrd", "Ragnagard / Shin-Oh-Ken", + "ragtime", "The Great Ragtime Show (Japan v1.5, 92.12.07)", + "ragtimea", "The Great Ragtime Show (Japan v1.3, 92.11.26)", + "raiden", "Raiden (set 1)", + "raiden2", "Raiden II (set 1, US Fabtek)", + "raiden2a", "Raiden II (set 2, Hong Kong, Metrotainment)", + "raiden2b", "Raiden II (set 3, Japan)", + "raiden2c", "Raiden II (set 4, Italy)", + "raiden2d", "Raiden II (set 5, Easy Version)", + "raiden2e", "Raiden II (set 6, Easy Version)", + "raiden2f", "Raiden II (set 7, US Fabtek, Easy Version)", + "raiden2g", "Raiden II (set 8, US Fabtek, Easy Version)", + "raiden2nl", "Raiden II (set 9, The Netherlands)", + "raiden3", "Raiden III (v2.01J)", + "raiden4", "Raiden IV (v1.00J)", + "raidena", "Raiden (set 2)", + "raidenb", "Raiden (set 3)", + "raidendx", "Raiden DX (UK)", + "raidendxa1", "Raiden DX (Hong Kong, set 1)", + "raidendxa2", "Raiden DX (Hong Kong, set 2)", + "raidendxg", "Raiden DX (Germany)", + "raidendxj", "Raiden DX (Japan)", + "raidendxnl", "Raiden DX (The Netherlands)", + "raidendxu", "Raiden DX (US)", + "raidenk", "Raiden (Korea)", + "raident", "Raiden (Taiwan)", + "raidenu", "Raiden (US set 1)", + "raidenua", "Raiden (US set 2)", + "raiders", "Raiders", + "raiders5", "Raiders5", + "raiders5t", "Raiders5 (Japan)", + "raidersr3", "Raiders (Rev.3)", + "raiga", "Raiga - Strato Fighter (Japan)", + "raimais", "Raimais (World)", + "raimaisj", "Raimais (Japan)", + "raimaisjo", "Raimais (Japan, first revision)", + "raimfire", "Ready...Aim...Fire!", + "raizpin", "Raizin Ping Pong", + "rally", "Rally", + "rallybik", "Rally Bike / Dash Yarou", + "rallys", "Rallys (bootleg of Spectar, set 1)", + "rallysa", "Rallys (bootleg of Spectar, set 2)", + "rallyx", "Rally X (32k Ver.?)", + "rallyxa", "Rally X", + "rallyxm", "Rally X (Midway)", + "rallyxmr", "Rally X (Model Racing bootleg)", + "rambo3", "Rambo III (Europe)", + "rambo3p", "Rambo III (Europe, Proto?)", + "rambo3u", "Rambo III (US)", + "rampage", "Rampage (Rev 3, 8/27/86)", + "rampage2", "Rampage (Rev 2, 8/4/86)", + "rampart", "Rampart (Trackball)", + "rampart2p", "Rampart (Joystick)", + "rampartj", "Rampart (Japan, Joystick)", + "ramtek3", "unknown Ramtek Game (Maybe Hockey?) [TTL]", + "rangrmsn", "Ranger Mission", + "raphero", "Rapid Hero", + "rapidfip", "Rapid Fire", + "rapidfir", "Rapid Fire v1.1 (Build 239)", + "rapidfira", "Rapid Fire v1.1 (Build 238)", + "rapidfire", "Rapid Fire v1.0 (Build 236)", + "rapidrvr", "Rapid River (RD3 Ver. C)", + "rapidrvrp", "Rapid River (prototype)", + "rapidrvrv2c", "Rapid River (RD2 Ver. C)", + "rasce", "Ra Sceptor (Russia)", + "rascot", "Royal Ascot (Japan, terminal?)", + "rastan", "Rastan (World Rev 1)", + "rastana", "Rastan (World)", + "rastanu", "Rastan (US Rev 1)", + "rastanua", "Rastan (US)", + "rastanub", "Rastan (US, Earlier code base)", + "rastsag2", "Rastan Saga 2 (Japan)", + "rastsaga", "Rastan Saga (Japan Rev 1)", + "rastsagaa", "Rastan Saga (Japan)", + "ratrc_l1", "Rat Race (L-1)", + "raven", "Raven", + "raveracj", "Rave Racer (Rev. RV1 Ver.B, Japan)", + "raveracja", "Rave Racer (Rev. RV1, Japan)", + "raveracw", "Rave Racer (Rev. RV2, World)", + "raycris", "Ray Crisis (V2.03J)", + "rayforce", "Ray Force (Ver 2.3A 1994/01/20)", + "rayforcej", "Ray Force (Ver 2.3J 1994/01/20)", + "raystorm", "Ray Storm (Ver 2.06A)", + "raystormj", "Ray Storm (Ver 2.05J)", + "raystormo", "Ray Storm (Ver 2.05O)", + "raystormu", "Ray Storm (Ver 2.05A)", + "razmataz", "Razzmatazz", + "rbff1", "Real Bout Fatal Fury / Real Bout Garou Densetsu (NGM-095)(NGH-095)", + "rbff1a", "Real Bout Fatal Fury / Real Bout Garou Densetsu (bug fix revision)", + "rbff2", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGM-2400)", + "rbff2h", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGH-2400)", + "rbff2k", "Real Bout Fatal Fury 2 - The Newcomers (Korean release)", + "rbffspec", "Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special", + "rbffspeck", "Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Korean release)", + "rbibb", "Vs. Atari R.B.I. Baseball (set 1)", + "rbibba", "Vs. Atari R.B.I. Baseball (set 2)", + "rbisland", "Rainbow Islands (new version)", + "rbislande", "Rainbow Islands (Extra)", + "rbislando", "Rainbow Islands (old version)", + "rblaster", "Road Blaster (Data East LD)", + "rbmk", "Real Battle Mahjong King", + "rbtapper", "Tapper (Root Beer)", + "rcasino", "Royal Casino (D-2608208A1-2)", + "rcasino1", "Royal Casino (D-2608208A1-1, Larger Board)", + "rcasinoo", "Royal Casino (D-2608208A1-1, Smaller Board)", + "rcdego", "RC De Go (V2.03J)", + "rcdino4", "unknown encrypted Royal Card (Dino4 HW)", + "rchase", "Rail Chase (World)", + "rchase2", "Rail Chase 2 (Revision A)", + "rchasej", "Rail Chase (Japan)", + "rcirulet", "Ruleta RCI (6-players, Spanish)", + "rclimb", "Rock Climber (040815 World)", + "rclimb_3", "Rock Climber (040827 World)", + "rclimb_3a", "Rock Climber (bootleg, 040827, backdoor)", + "rclimb_3b", "Rock Climber (bootleg, 040827, new service menu)", + "rclimb_3c", "Rock Climber (bootleg, 040827, VIDEO GAME-1 SK01)", + "rclimb_3d", "Rock Climber (bootleg, 040827, LOTTOGAME (I))", + "rclimb_3e", "Rock Climber (bootleg, 040827, LOTOS SK01)", + "rclimb_4", "Rock Climber (070322 Russia)", + "rclimb_5", "Rock Climber (070621 Russia)", + "rclimb_7", "Rock Climber (090716 Entertainment)", + "rcorsair", "Red Corsair", + "rctnew", "Roller Coaster Tycoon (ARM7 Sound Board)", + "rctycn", "Roller Coaster Tycoon (7.02)", + "rctycn_400", "Roller Coaster Tycoon (4.00)", + "rctycn_600", "Roller Coaster Tycoon (6.00)", + "rctycn_701", "Roller Coaster Tycoon (7.01)", + "rctycnf", "Roller Coaster Tycoon (7.02 France)", + "rctycnf_400", "Roller Coaster Tycoon (4.00 France)", + "rctycnf_600", "Roller Coaster Tycoon (6.00 France)", + "rctycnf_701", "Roller Coaster Tycoon (7.01 France)", + "rctycng", "Roller Coaster Tycoon (7.02 Germany)", + "rctycng_400", "Roller Coaster Tycoon (4.00 Germany)", + "rctycng_701", "Roller Coaster Tycoon (7.01 Germany)", + "rctycni", "Roller Coaster Tycoon (7.02 Italy)", + "rctycni_400", "Roller Coaster Tycoon (4.00 Italy)", + "rctycni_600", "Roller Coaster Tycoon (6.00 Italy)", + "rctycni_701", "Roller Coaster Tycoon (7.01 Italy)", + "rctycnl", "Roller Coaster Tycoon (7.02 Spain)", + "rctycnl_400", "Roller Coaster Tycoon (4.00 Spain)", + "rctycnl_600", "Roller Coaster Tycoon (6.00 Spain)", + "rctycnl_701", "Roller Coaster Tycoon (7.01 Spain)", + "rdaction", "Rad Action / NinjaKun Ashura no Shou", + "rdft", "Raiden Fighters (Japan set 1)", + "rdft2", "Raiden Fighters 2 - Operation Hell Dive (Germany)", + "rdft22kc", "Raiden Fighters 2 - Operation Hell Dive 2000 (China, SYS386I)", + "rdft2a", "Raiden Fighters 2 - Operation Hell Dive (Hong Kong)", + "rdft2a2", "Raiden Fighters 2 - Operation Hell Dive (Korea)", + "rdft2j", "Raiden Fighters 2 - Operation Hell Dive (Japan set 1)", + "rdft2j2", "Raiden Fighters 2 - Operation Hell Dive (Japan set 2)", + "rdft2t", "Raiden Fighters 2 - Operation Hell Dive (Taiwan)", + "rdft2u", "Raiden Fighters 2 - Operation Hell Dive (US)", + "rdft2us", "Raiden Fighters 2 - Operation Hell Dive (US, single board)", + "rdfta", "Raiden Fighters (Austria)", + "rdftadi", "Raiden Fighters (Korea)", + "rdftam", "Raiden Fighters (Hong Kong)", + "rdftau", "Raiden Fighters (Australia)", + "rdftit", "Raiden Fighters (Italy)", + "rdftj", "Raiden Fighters (Japan set 2)", + "rdfts", "Raiden Fighters (Taiwan, single board)", + "rdftu", "Raiden Fighters (US)", + "rdkng_l1", "Road Kings (L-1)", + "rdkng_l2", "Road Kings (L-2)", + "rdkng_l3", "Road Kings (L-3)", + "rdkng_l4", "Road Kings (L-4)", + "re800ea", "Ruleta RE-800 (earlier, no attract)", + "re800v1", "Ruleta RE-800 (v1.0)", + "re800v3", "Ruleta RE-800 (v3.0)", + "re900", "Ruleta RE-900", + "reactor", "Reactor", + "reaktor", "Reaktor (Track & Field conversion)", + "real", "Real", + "realbrk", "Billiard Academy Real Break (Europe)", + "realbrkj", "Billiard Academy Real Break (Japan)", + "realbrkk", "Billiard Academy Real Break (Korea)", + "realbrod", "The Real Broadway (9131-20-00 R0A)", + "realpunc", "Real Puncher", + "rebus", "Rebus", + "recalh", "Recalhorn (Ver 1.42J 1994/5/11) (Prototype)", + "record", "Record (Version 1)", + "recordbr", "Recordbreaker (World)", + "redalert", "Red Alert", + "redbaron", "Red Baron (Revised Hardware)", + "redbarona", "Red Baron", + "redclash", "Red Clash (set 1)", + "redclasha", "Red Clash (set 2)", + "redclashk", "Red Clash (Kaneko)", + "redearth", "Red Earth (Euro 961121)", + "redearthr1", "Red Earth (Euro 961023)", + "redfoxwp2", "Red Fox War Planes II (China, set 1)", + "redfoxwp2a", "Red Fox War Planes II (China, set 2)", + "redhawk", "Red Hawk (US)", + "redhawkb", "Red Hawk (bootleg)", + "redhawke", "Red Hawk (Excellent Co., Ltd)", + "redhawki", "Red Hawk (Italy)", + "redlin2p", "Redline Racer (2 players)", + "redrobin", "Red Robin", + "redufo", "Defend the Terra Attack on the Red UFO", + "redufob", "Defend the Terra Attack on the Red UFO (bootleg)", + "reelemin", "Reel 'Em In (Russia)", + "reelfun", "Reel Fun (Version 7.03)", + "reelfun1", "Reel Fun (Version 7.01)", + "reelquak", "Reel'N Quake! (Ver. 1.05)", + "reelrock", "Reelin-n-Rockin (0100779V, Local)", + "regulus", "Regulus (315-5033, Rev A.)", + "reguluso", "Regulus (315-5033)", + "regulusu", "Regulus (not encrypted)", + "reikaids", "Reikai Doushi (Japan)", + "relief", "Relief Pitcher (set 1, 07 Jun 1992 / 28 May 1992)", + "relief2", "Relief Pitcher (set 2, 26 Apr 1992 / 08 Apr 1992)", + "relief3", "Relief Pitcher (set 3, 10 Apr 1992 / 08 Apr 1992)", + "renaiclb", "Mahjong Ren-ai Club (Japan)", + "renegade", "Renegade (US)", + "renju", "Renju Kizoku", + "repulse", "Repulse", + "rescraid", "Rescue Raider (5/11/87) (non-cartridge)", + "rescraida", "Rescue Raider (stand-alone)", + "rescu911", "Rescue 911 (rev.1)", + "rescue", "Rescue", + "rescueb", "Rescue (bootleg)", + "resdnt", "Resident (040415 World)", + "resdnt_2", "Resident (040513 World)", + "resdnt_2a", "Resident (bootleg, 040513, backdoor)", + "resdnt_2b", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 1)", + "resdnt_2c", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 2)", + "resdnt_2d", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 3)", + "resdnt_2e", "Resident (bootleg, 040513, LOTTOGAME (I))", + "resdnt_2f", "Resident (bootleg, 040513, LOTO PROGRAM V-RS2)", + "resdnt_2g", "Resident (bootleg, 040513, LOTOS SE01)", + "resdnt_3", "Resident (070222 Russia)", + "resdnt_6", "Resident (100311 World)", + "resdnt_8", "Resident (100311 Entertainment)", + "resdnt_9", "Resident (100316 Russia)", + "retofinv", "Return of the Invaders", + "retofinv1", "Return of the Invaders (bootleg set 1)", + "retofinv2", "Return of the Invaders (bootleg set 2)", + "revenger", "Revenger", + "revx", "Revolution X (Rev. 1.0 6/16/94)", + "rezon", "Rezon", + "rezont", "Rezon (Taito)", + "rf2", "Konami RF2 - Red Fighter", + "rfjet", "Raiden Fighters Jet (Germany)", + "rfjet2kc", "Raiden Fighters Jet 2000 (China, SYS386I)", + "rfjeta", "Raiden Fighters Jet (Korea)", + "rfjetj", "Raiden Fighters Jet (Japan)", + "rfjets", "Raiden Fighters Jet (US, single board)", + "rfjetsa", "Raiden Fighters Jet (US, single board, test version?)", + "rfjett", "Raiden Fighters Jet (Taiwan)", + "rfjetu", "Raiden Fighters Jet (US)", + "rflshdlx", "Royal Flush Deluxe", + "rfmpb", "Pinball 2000: Revenge From Mars (rev. 1)", + "rfmpbr2", "Pinball 2000: Revenge From Mars (rev. 2)", + "rgum", "Royal Gum (Italy)", + "ribbit", "Ribbit!", + "ridgera2", "Ridge Racer 2 (Rev. RRS2, World)", + "ridgera2j", "Ridge Racer 2 (Rev. RRS1 Ver.B, Japan)", + "ridgera2ja", "Ridge Racer 2 (Rev. RRS1, Japan)", + "ridgerac", "Ridge Racer (Rev. RR3, World)", + "ridgerac3", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", + "ridgeracb", "Ridge Racer (Rev. RR2, World)", + "ridgeracf", "Ridge Racer Full Scale (World)", + "ridgeracj", "Ridge Racer (Rev. RR1, Japan)", + "ridhero", "Riding Hero (NGM-006)(NGH-006)", + "ridheroh", "Riding Hero (set 2)", + "ridingf", "Riding Fight (Ver 1.0O)", + "ridingfj", "Riding Fight (Ver 1.0J)", + "ridingfu", "Riding Fight (Ver 1.0A)", + "ridleofp", "Riddle of Pythagoras (Japan)", + "rimrockn", "Rim Rockin' Basketball (V2.2)", + "rimrockn12", "Rim Rockin' Basketball (V1.2)", + "rimrockn16", "Rim Rockin' Basketball (V1.6)", + "rimrockn20", "Rim Rockin' Basketball (V2.0)", + "ringdest", "Ring of Destruction: Slammasters II (Euro 940902)", + "ringdesta", "Ring of Destruction: Slammasters II (Asia 940831)", + "ringdstd", "Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg)", + "ringfgt", "Ring Fighter (set 1)", + "ringfgt2", "Ring Fighter (set 2)", + "ringking", "Ring King (US set 1)", + "ringking2", "Ring King (US set 2)", + "ringking3", "Ring King (US set 3)", + "ringkingw", "Ring King (US, Wood Place Inc.)", + "ringohja", "Ring no Ohja (Japan 2 Players ver. N)", + "ringout", "Ring Out 4x4", + "ringrage", "Ring Rage (Ver 2.3O 1992/08/09)", + "ringragej", "Ring Rage (Ver 2.3J 1992/08/09)", + "ringrageu", "Ring Rage (Ver 2.3A 1992/08/09)", + "rio", "Rio", + "riot", "Riot", + "riotcity", "Riot City (Japan)", + "rip300", "Ripley's Believe It or Not! (3.00)", + "rip301", "Ripley's Believe It or Not! (3.01)", + "rip302", "Ripley's Believe It or Not! (3.02)", + "rip310", "Ripley's Believe It or Not! (3.10)", + "ripcord", "Rip Cord", + "ripf300", "Ripley's Believe It or Not! (3.00 France)", + "ripf301", "Ripley's Believe It or Not! (3.01 France)", + "ripf302", "Ripley's Believe It or Not! (3.02 France)", + "ripf310", "Ripley's Believe It or Not! (3.10 France)", + "ripg300", "Ripley's Believe It or Not! (3.00 Germany)", + "ripg301", "Ripley's Believe It or Not! (3.01 Germany)", + "ripg302", "Ripley's Believe It or Not! (3.02 Germany)", + "ripg310", "Ripley's Believe It or Not! (3.10 Germany)", + "ripi300", "Ripley's Believe It or Not! (3.00 Italy)", + "ripi301", "Ripley's Believe It or Not! (3.01 Italy)", + "ripi302", "Ripley's Believe It or Not! (3.02 Italy)", + "ripi310", "Ripley's Believe It or Not! (3.10 Italy)", + "ripl300", "Ripley's Believe It or Not! (3.00 Spain)", + "ripl301", "Ripley's Believe It or Not! (3.01 Spain)", + "ripl302", "Ripley's Believe It or Not! (3.02 Spain)", + "ripl310", "Ripley's Believe It or Not! (3.10 Spain)", + "ripleys", "Ripley's Believe It or Not! (3.20)", + "ripleysf", "Ripley's Believe It or Not! (3.20 France)", + "ripleysg", "Ripley's Believe It or Not! (3.20 Germany)", + "ripleysi", "Ripley's Believe It or Not! (3.20 Italy)", + "ripleysl", "Ripley's Believe It or Not! (3.20 Spain)", + "ripoff", "Rip Off", + "ripribit", "Ripper Ribbit (Version 2.8.4)", + "riskchal", "Risky Challenge", + "riviera", "Riviera Hi-Score (2131-08, U5-4A)", + "rivieraa", "Riviera Hi-Score (2131-08, U5-4)", + "rivierab", "Riviera Hi-Score (2131-08, U5-2D)", + "rjammer", "Roller Jammer", + "rltennis", "Reality Tennis", + "rmancp2j", "Rockman: The Power Battle (CPS2, Japan 950922)", + "rmgoldyh", "Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 [BET] (Japan)", + "rmhaihai", "Real Mahjong Haihai (Japan)", + "rmhaihib", "Real Mahjong Haihai [BET] (Japan)", + "rmhaijin", "Real Mahjong Haihai Jinji Idou Hen (Japan)", + "rmhaisei", "Real Mahjong Haihai Seichouhen (Japan)", + "rmpgwt", "Rampage: World Tour (rev 1.3)", + "rmpgwt11", "Rampage: World Tour (rev 1.1)", + "roadblst", "Road Blasters (upright, rev 4)", + "roadblst1", "Road Blasters (upright, rev 1)", + "roadblst2", "Road Blasters (upright, rev 2)", + "roadblst3", "Road Blasters (upright, rev 3)", + "roadblstc", "Road Blasters (cockpit, rev 2)", + "roadblstc1", "Road Blasters (cockpit, rev 1)", + "roadblstcg", "Road Blasters (cockpit, German, rev 1)", + "roadblstg", "Road Blasters (upright, German, rev 3)", + "roadblstg1", "Road Blasters (upright, German, rev 1)", + "roadblstg2", "Road Blasters (upright, German, rev 2)", + "roadburn", "Road Burners", + "roadedge", "Roads Edge / Round Trip (rev.B)", + "roadf", "Road Fighter (set 1)", + "roadf2", "Road Fighter (set 2)", + "roadriot", "Road Riot 4WD (set 1, 13 Nov 1991)", + "roadrioto", "Road Riot 4WD (set 2, 04 Jun 1991)", + "roadrunm", "Road Runner (Midway)", + "roadrunn", "Road Runner (rev 2)", + "roadrunn1", "Road Runner (rev 1)", + "roadrunn2", "Road Runner (rev 1+)", + "roadrunr", "Road Runner", + "robadv", "Robin's Adventure (Version 1.7E Dual)", + "robadv2", "Robin's Adventure 2 (Version 1.7E Dual)", + "robadv2c1", "Robin's Adventure 2 (Version 1.7R, set 1)", + "robadv2c2", "Robin's Adventure 2 (Version 1.7LT, set 1)", + "robadv2c3", "Robin's Adventure 2 (Version 1.7SH, set 1)", + "robadv2d1", "Robin's Adventure 2 (Version 1.7R, set 2)", + "robadv2d2", "Robin's Adventure 2 (Version 1.7LT, set 2)", + "robadv2d3", "Robin's Adventure 2 (Version 1.7SH, set 2)", + "robadv2o", "Robin's Adventure 2 (Version 1.5SH)", + "robadv2o2", "Robin's Adventure 2 (Version 1.5)", + "robadv2v1", "Robin's Adventure 2 (Version 1.7R Dual)", + "robadv2v2", "Robin's Adventure 2 (Version 1.7LT Dual)", + "robadv2v3", "Robin's Adventure 2 (Version 1.7SH Dual)", + "robadvc1", "Robin's Adventure (Version 1.7R, set 1)", + "robadvd1", "Robin's Adventure (Version 1.7R, set 2)", + "robadvo", "Robin's Adventure (Version 1.5)", + "robadvv1", "Robin's Adventure (Version 1.7R Dual)", + "robby", "The Adventures of Robby Roto!", + "robo_a34", "Robocop (3.4)", + "roboarmy", "Robo Army", + "robocop", "Robocop (World revision 4)", + "robocop2", "Robocop 2 (Euro/Asia v0.10)", + "robocop2j", "Robocop 2 (Japan v0.11)", + "robocop2u", "Robocop 2 (US v0.05)", + "robocopb", "Robocop (World bootleg)", + "robocopj", "Robocop (Japan)", + "robocopu", "Robocop (US revision 1)", + "robocopu0", "Robocop (US revision 0)", + "robocopw", "Robocop (World revision 3)", + "robokid", "Atomic Robo-kid", + "robokidj", "Atomic Robo-kid (Japan, set 1)", + "robokidj2", "Atomic Robo-kid (Japan, set 2)", + "robot", "Robot (Zaccaria)", + "robotbwl", "Robot Bowl", + "robotf", "Robot (Zaccaria, French speech)", + "robotg", "Robot (Zaccaria, German speech)", + "roboti", "Robot (Zaccaria, Italian speech)", + "robotron", "Robotron: 2084 (Solid Blue label)", + "robotronyo", "Robotron: 2084 (Yellow/Orange label)", + "robowars", "Robo-War", + "robowres", "Robo Wres 2001", + "robowresb", "Robo Wres 2001 (bootleg)", + "rock", "Rock", + "rock2500", "Rock 2500", + "rock_enc", "Rock Encore", + "rockclim", "Rock Climber", + "rockduck", "Rock Duck (prototype?)", + "rockman2j", "Rockman 2: The Power Fighters (Japan 960708)", + "rockmanj", "Rockman: The Power Battle (CPS1, Japan 950922)", + "rockn", "Rock'n Tread (Japan)", + "rockn2", "Rock'n Tread 2 (Japan)", + "rockn3", "Rock'n 3 (Japan)", + "rockn4", "Rock'n 4 (Japan, prototype)", + "rockna", "Rock'n Tread (Japan, alternate)", + "rocknms", "Rock'n MegaSession (Japan)", + "rockrage", "Rock'n Rage (World)", + "rockragea", "Rock'n Rage (prototype?)", + "rockragej", "Koi no Hotrock (Japan)", + "rocktris", "Rock Tris", + "rocktrv2", "MTV Rock-N-Roll Trivia (Part 2)", + "rocky", "Rocky", + "rocnrope", "Roc'n Rope", + "rocnropek", "Roc'n Rope (Kosuka)", + "rodland", "Rod-Land (World)", + "rodlandj", "Rod-Land (Japan)", + "rodlandjb", "Rod-Land (Japan bootleg)", + "rohga", "Rohga Armor Force (Asia/Europe v5.0)", + "rohga1", "Rohga Armor Force (Asia/Europe v3.0 set 1)", + "rohga2", "Rohga Armor Force (Asia/Europe v3.0 set 2)", + "rohgah", "Rohga Armor Force (Hong Kong v3.0)", + "rohgau", "Rohga Armor Force (US v1.0)", + "roishtar", "The Return of Ishtar", + "roldfrog", "The Return of Lady Frog (set 1)", + "roldfroga", "The Return of Lady Frog (set 2)", + "roldisco", "Roller Disco", + "rollace", "Roller Aces (set 1)", + "rollace2", "Roller Aces (set 2)", + "rollerg", "Rollergames (US)", + "rollergj", "Rollergames (Japan)", + "rollfr_2", "Roll Fruit (040318)", + "rollfr_3", "Roll Fruit (080327)", + "rollfr_4", "Roll Fruit (080331)", + "rollingc", "Rolling Crash / Moon Base", + "rollr_e1", "Rollergames (PU-1)", + "rollr_ex", "Rollergames (EXPERIMENTAL)", + "rollr_g3", "Rollergames (LG-3) Germany", + "rollr_l2", "Rollergames (L-2)", + "rollr_l3", "Rollergames (LU-3) Europe", + "rollr_p2", "Rollergames (PA-2 / PA-1 Sound)", + "rollston", "Rolling Stones", + "romanl", "Roman Legions (Konami Endeavour)", + "rompers", "Rompers (Japan, new version (Rev B))", + "romperso", "Rompers (Japan, old version)", + "rongrong", "Puzzle Game Rong Rong (Europe)", + "rongrongg", "Puzzle Game Rong Rong (Germany)", + "rongrongj", "Puzzle Game Rong Rong (Japan)", + "ronjan", "Ron Jan (Super)", + "ropeman", "Ropeman (bootleg of Roc'n Rope)", + "rotaryf", "Rotary Fighter", + "rotation", "Rotation VIII", + "rotd", "Rage of the Dragons (NGM-264?)", + "rotr", "Rise of the Robots (prototype)", + "roughrac", "Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b)", + "rougien", "Rougien", + "roul", "Super Lucky Roulette", + "roundup", "Round-Up", + "roundup5", "Round Up 5 - Super Delta Force", + "route16", "Route 16 (set 1)", + "route16a", "Route 16 (set 2)", + "route16b", "Route 16 (bootleg)", + "routex", "Route X (bootleg)", + "royal", "Royal (Pool 10 hack)", + "royalcdfr", "Royal Card (French)", + "royalcrd", "Royal Card (Austrian, set 1)", + "royalcrda", "Royal Card (Austrian, set 2)", + "royalcrdb", "Royal Card (Austrian/Polish, set 3)", + "royalcrdc", "Royal Card (Austrian, set 4)", + "royalcrdd", "Royal Card (Austrian, set 5)", + "royalcrde", "Royal Card (Austrian, set 6)", + "royalcrdf", "Royal Card (Slovak, encrypted)", + "royalcrdg", "Royal Card (Austrian, set 7, CMC C1030 HW)", + "royalcrdp", "Royal Card v2.0 Professional", + "royalcrdt", "Royal Card (TAB original)", + "royale", "Royale (set 1)", + "royalea", "Royale (set 2)", + "royalmah", "Royal Mahjong (Falcon bootleg, v1.01)", + "royalmj", "Royal Mahjong (Japan, v1.13)", + "royalngt", "Royal Night [BET] (Japan 840220 RN 2-00)", + "royalqn", "Royal Queen [BET] (Japan 841010 RQ 0-07)", + "royclark", "Roy Clark - The Entertainer", + "roylcrdn", "Royal Card (Nichibutsu)", + "roypok96", "Royal Poker '96 (set 1)", + "roypok96a", "Royal Poker '96 (set 2)", + "roypok96b", "Royal Poker '96 (set 3)", + "rpatrol", "River Patrol (Orca)", + "rpatrolb", "River Patrol (bootleg)", + "rpunch", "Rabbit Punch (US)", + "rranger", "Rough Ranger (v2.0)", + "rrangerb", "Rough Ranger (v2.0, bootleg)", + "rrreveng", "Road Riot's Revenge (prototype, Sep 06, 1994)", + "rrrevenga", "Road Riot's Revenge (prototype, Jan 27, 1994, set 1)", + "rrrevengb", "Road Riot's Revenge (prototype, Jan 27, 1994, set 2)", + "rrvac", "Ridge Racer V Arcade Battle (RRV3 Ver. A)", + "rs_l6", "Red and Ted's Road Show (L-6)", + "rs_la4", "Red and Ted's Road Show (La-4)", + "rs_la5", "Red and Ted's Road Show (La-5)", + "rs_lx2", "Red and Ted's Road Show (Lx-2)", + "rs_lx3", "Red and Ted's Road Show (Lx-3)", + "rs_lx4", "Red and Ted's Road Show (Lx-4)", + "rs_lx5", "Red and Ted's Road Show (Lx-5)", + "rsgun", "Radiant Silvergun (JUET 980523 V1.000)", + "rshark", "R-Shark", + "rthun2", "Rolling Thunder 2", + "rthun2j", "Rolling Thunder 2 (Japan)", + "rthunder", "Rolling Thunder (rev 3)", + "rthunder1", "Rolling Thunder (rev 1)", + "rthunder2", "Rolling Thunder (rev 2)", + "rtriv", "Romar Triv", + "rtype", "R-Type (World)", + "rtype2", "R-Type II", + "rtype2j", "R-Type II (Japan)", + "rtype2jc", "R-Type II (Japan, revision C)", + "rtypeb", "R-Type (World bootleg)", + "rtypej", "R-Type (Japan)", + "rtypejp", "R-Type (Japan prototype)", + "rtypeleo", "R-Type Leo (World)", + "rtypeleoj", "R-Type Leo (Japan)", + "rtypeu", "R-Type (US)", + "rugby", "Rugby? (four roses hardware)", + "rugrats", "Rug Rats", + "rumba", "Rumba Lumber", + "rumblef", "The Rumble Fish", + "rumblef2", "The Rumble Fish 2", + "runark", "Runark (Japan)", + "runaway", "Runaway (prototype)", + "rundeep", "Run Deep", + "rungun", "Run and Gun (ver EAA 1993 10.8)", + "rungun2", "Run and Gun 2 (ver UAA)", + "runguna", "Run and Gun (ver EAA 1993 10.4)", + "rungunu", "Run and Gun (ver UAB 1993 10.12)", + "rungunua", "Run and Gun (ver UBA 1993 10.8)", + "rushatck", "Rush'n Attack (US)", + "rushcrsh", "Rush & Crash (Japan)", + "rushhero", "Rushing Heroes (ver UAB)", + "rvrbt_l3", "Riverboat Gambler (L-3)", + "rvschool", "Rival Schools: United By Fate (Euro 971117)", + "rvschoola", "Rival Schools: United By Fate (Asia 971117)", + "rvschoolu", "Rival Schools: United By Fate (USA 971117)", + "rygar", "Rygar (US set 1)", + "rygar2", "Rygar (US set 2)", + "rygar3", "Rygar (US set 3 Old Version)", + "rygarj", "Argus no Senshi (Japan)", + "ryorioh", "Gourmet Battle Quiz Ryohrioh CooKing (Japan)", + "ryouran", "VS Mahjong Otome Ryouran", + "ryujin", "Ryu Jin (Japan)", + "ryukendn", "Ninja Ryukenden (Japan, set 1)", + "ryukendna", "Ninja Ryukenden (Japan, set 2)", + "ryukobou", "Mahjong Ryukobou (Japan, V030J)", + "ryukyu", "RyuKyu (Japan, FD1094 317-5023)", + "ryuuha", "Ryuuha [BET] (Japan 871027)", + "s1945", "Strikers 1945 (World)", + "s1945a", "Strikers 1945 (Japan / World)", + "s1945bl", "Strikers 1945 (Hong Kong, bootleg)", + "s1945ii", "Strikers 1945 II", + "s1945iii", "Strikers 1945 III (World) / Strikers 1999 (Japan)", + "s1945j", "Strikers 1945 (Japan)", + "s1945jn", "Strikers 1945 (Japan, unprotected)", + "s1945k", "Strikers 1945 (Korea)", + "s1945p", "Strikers 1945 Plus", + "s80tst", "System 80 Test", + "sabotenb", "Saboten Bombers (set 1)", + "sabotenba", "Saboten Bombers (set 2)", + "sadari", "Sadari", + "safari", "Safari (set 1)", + "safaria", "Safari (set 2, bootleg?)", + "safarir", "Safari Rally (World)", + "safarirj", "Safari Rally (Japan)", + "safemon", "Safe Money (Konami Endeavour)", + "sagaia", "Sagaia (dual screen) (World)", + "sailormn", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Europe)", + "sailormnh", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Hong Kong)", + "sailormnj", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Japan)", + "sailormnk", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Korea)", + "sailormno", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Europe)", + "sailormnoh", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Hong Kong)", + "sailormnoj", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Japan)", + "sailormnok", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea)", + "sailormnot", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Taiwan)", + "sailormnou", "Pretty Soldier Sailor Moon (Ver. 95/03/22, USA)", + "sailormnt", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Taiwan)", + "sailormnu", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, USA)", + "sailorwa", "Mahjong Sailor Wars (Japan set 2)", + "sailorwr", "Mahjong Sailor Wars-R [BET] (Japan)", + "sailorws", "Mahjong Sailor Wars (Japan set 1)", + "saiyugou", "Sai Yu Gou Ma Roku (Japan)", + "saiyugoub1", "Sai Yu Gou Ma Roku (Japan bootleg 1)", + "saiyugoub2", "Sai Yu Gou Ma Roku (Japan bootleg 2)", + "saiyukip", "Slot Poker Saiyuki (Japan)", + "saklove", "Ying Hua Lian 2.0 (China, Ver. 1.02)", + "salamand", "Salamander (version D)", + "salamandj", "Salamander (version J)", + "salarymc", "Salary Man Champ (GCA18 VER. JAA)", + "salmankt", "Salary Man Kintarou", + "salmndr2", "Salamander 2 (ver JAA)", + "salmndr2a", "Salamander 2 (ver AAB)", + "saloon", "Saloon (French, encrypted)", + "samba", "Samba De Amigo (JPN) (Rev B)", + "samba2k", "Samba de Amigo ver. 2000", + "sambap", "Samba De Amigo (prototype)", + "samesame", "Same! Same! Same! (1P set)", + "samesame2", "Same! Same! Same! (2P set)", + "sammymdl", "Sammy Medal Game System Bios", + "sams64", "Samurai Shodown 64 / Samurai Spirits 64", + "sams64_2", "Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden", + "samsh5sp", "Samurai Shodown V Special / Samurai Spirits Zero Special (NGM-2720)", + "samsh5sph", "Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (2nd release, less censored)", + "samsh5spho", "Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (1st release, censored)", + "samsho", "Samurai Shodown / Samurai Spirits (NGM-045)", + "samsho2", "Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063)(NGH-063)", + "samsho2k", "Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II)", + "samsho3", "Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGM-087)", + "samsho3h", "Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGH-087)", + "samsho4", "Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222)(NGH-222)", + "samsho4k", "Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV)", + "samsho5", "Samurai Shodown V / Samurai Spirits Zero (NGM-2700)", + "samsho5b", "Samurai Shodown V / Samurai Spirits Zero (bootleg)", + "samsho5h", "Samurai Shodown V / Samurai Spirits Zero (NGH-2700)", + "samshoh", "Samurai Shodown / Samurai Spirits (NGH-045)", + "samspsen", "Samurai Spirits Sen (v1.00)", + "samsptk", "Samurai Spirits Tenkaichi Kenkakuden", + "samurai", "Samurai", + "samuraia", "Samurai Aces (World)", + "sandor", "Puzzle & Action: Sando-R (J 951114 V1.000)", + "sandscrp", "Sand Scorpion", + "sandscrpa", "Sand Scorpion (Earlier)", + "sandscrpb", "Sand Scorpion (Chinese Title Screen, Revised Hardware)", + "sanjeon", "DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)", + "santam", "Santa Maria (Russia) (Atronic)", + "sarge", "Sarge", + "sarukani", "Saru-Kani-Hamu-Zou (Japan)", + "sasissu", "Taisen Tanto-R Sashissu!! (J 980216 V1.000)", + "sasuke", "Sasuke vs. Commander", + "satansat", "Satan of Saturn (set 1)", + "satansata", "Satan of Saturn (set 2)", + "satansatind", "Satan of Saturn (Inder S.A., bootleg)", + "saturn2", "Saturn 2", + "saturnzi", "Saturn", + "sauro", "Sauro", + "saurop", "Sauro (Philko license)", + "savagere", "Savage Reign / Fu'un Mokushiroku - kakutou sousei", + "savanna", "Savanna (Jungler bootleg)", + "savgbees", "Savage Bees", + "savquest", "Savage Quest", + "sb2003", "Super Bubble 2003 (World, Ver 1.0)", + "sb2003a", "Super Bubble 2003 (Asia, Ver 1.0)", + "sbagman", "Super Bagman", + "sbagmans", "Super Bagman (Stern Electronics)", + "sbasebal", "Super Champion Baseball (US)", + "sbasketb", "Super Basketball (version I, encrypted)", + "sbaskete", "Super Basketball (version E, encrypted)", + "sbasketg", "Super Basketball (version G, encrypted)", + "sbasketh", "Super Basketball (version H, unprotected)", + "sbbros", "Super Buster Bros. (USA 901001)", + "sbdk", "Super Bike (DK conversion)", + "sbishi", "Super Bishi Bashi Championship (ver JAA, 2 Players)", + "sbishik", "Super Bishi Bashi Championship (ver KAA, 3 Players)", + "sblast2b", "Sonic Blast Man 2 Special Turbo (SNES bootleg)", + "sblazerp", "Star Blazer (Pioneer LDV1000)", + "sbm", "Sonic Blast Man (Japan)", + "sboblboa", "Super Bobble Bobble (set 1)", + "sboblbob", "Super Bobble Bobble (set 2)", + "sbomber", "Space Bomber (ver. B)", + "sbombera", "Space Bomber", + "sbowling", "Strike Bowling", + "sbp", "Super Bubble Pop", + "sbrkout", "Super Breakout (rev 04)", + "sbrkout3", "Super Breakout (rev 03)", + "sbsgomo", "Space Battle Ship Gomorrah", + "sbugger", "Space Bugger (set 1)", + "sbuggera", "Space Bugger (set 2)", + "sburners", "Street Burners [TTL]", + "sc1actv8", "Active 8 (Dutch) (Bellfruit) (Scorpion 1)", + "sc1armad", "Armada (Dutch) (Bellfruit) (Scorpion 1)", + "sc1barcd", "Barcode (Bellfruit) (set 1) (Scorpion 1)", + "sc1barcda", "Barcode (Bellfruit) (set 2) (Scorpion 1)", + "sc1bartk", "Bar Trek (Bellfruit) (Scorpion 1)", + "sc1bigmt", "The Big Match (Dutch) (Bellfruit) (Scorpion 1)", + "sc1boncl", "Bonanza Club (unknown) (Scorpion 1)", + "sc1btbc", "Beat The Bank Club (unknown) (Scorpion 1?)", + "sc1btclk", "Beat The Clock (Mdm) (set 1) (Scorpion 2/3?)", + "sc1btclka", "Beat The Clock (Mdm) (set 2) (Scorpion 2/3?)", + "sc1btclkb", "Beat The Clock (Mdm) (set 3) (Scorpion 2/3?)", + "sc1calyp", "Calypso (Dutch) (Bellfruit) (Scorpion 1)", + "sc1carro", "Carrousel (Dutch) (Bellfruit) (Scorpion 1)", + "sc1ccoin", "Cash Coin (Dutch) (Bellfruit) (Scorpion 1)", + "sc1ccroc", "Crazy Crocs (Mdm) (set 1) (Scorpion 2/3?)", + "sc1ccroca", "Crazy Crocs (Mdm) (set 2) (Scorpion 2/3?)", + "sc1ccrocb", "Crazy Crocs (Mdm) (set 3) (Scorpion 2/3?)", + "sc1ccrocc", "Crazy Crocs (Mdm) (set 4) (Scorpion 2/3?)", + "sc1cdm", "Club Diamond (Crystal) (set 1) (Scorpion 1)", + "sc1cdmp", "Club Diamond (Crystal) (set 1, Protocol) (Scorpion 1)", + "sc1cexpd", "Cash Explosion (Dutch) (Bellfruit) (Scorpion 1)", + "sc1cexpl", "Cash Explosion (Bellfruit) (set 1) (Scorpion 1)", + "sc1cexpla", "Cash Explosion (Bellfruit) (set 2) (Scorpion 1)", + "sc1cexplb", "Cash Explosion (Bellfruit) (set 3) (Scorpion 1)", + "sc1chain", "Chain Reaction (Bellfruit) (set 1) (Scorpion 1)", + "sc1chainp", "Chain Reaction (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1china", "China Town Club (Bellfruit) (set 2) (Scorpion 1)", + "sc1chinaa", "China Town Club (Bellfruit) (set 1) (Scorpion 1)", + "sc1chinaap", "China Town Club (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1chinab", "China Town Club (Bellfruit) (set 3) (Scorpion 1)", + "sc1chinabp", "China Town Club (Bellfruit) (set 3, Protocol) (Scorpion 1)", + "sc1chinap", "China Town Club (Bellfruit) (set 2, Protocol) (Scorpion 1)", + "sc1chqfl", "Chequered Flag (Global)", + "sc1cl2k", "Club 2000 (Dutch) (Bellfruit) (Scorpion 1)", + "sc1cl2k1", "Club 2001 (Dutch (Bellfruit) (Scorpion 1)", + "sc1cl65", "Club 65 Special (Bellfruit) (set 1) (Scorpion 1)", + "sc1cl65a", "Club 65 Special (Bellfruit) (set 5) (Scorpion 1)", + "sc1cl65ap", "Club 65 Special (Bellfruit) (set 5, Protocol) (Scorpion 1)", + "sc1cl65b", "Club 65 Special (Bellfruit) (set 4) (Scorpion 1)", + "sc1cl65bp", "Club 65 Special (Bellfruit) (set 4, Protocol) (Scorpion 1)", + "sc1cl65c", "Club 65 Special (Bellfruit) (set 3) (Scorpion 1)", + "sc1cl65cp", "Club 65 Special (Bellfruit) (set 3, Protocol) (Scorpion 1)", + "sc1cl65d", "Club 65 Special (Bellfruit) (set 2) (Scorpion 1)", + "sc1cl65dp", "Club 65 Special (Bellfruit) (set 2, Protocol) (Scorpion 1)", + "sc1class", "Classic (Dutch) (Bellfruit) (Scorpion 1)", + "sc1clatt", "Club Attraction (UK, Game Card 39-370-196)", + "sc1clatta", "Club Attraction (set 2)", + "sc1clb3", "Club 3000 (Dutch) (Bellfruit) (Scorpion 1)", + "sc1clbdm", "Club Diamond (Dutch) (Bellfruit) (Scorpion 1)", + "sc1clbdy", "Club Dynamite (Global) (set 1)", + "sc1clbdya", "Club Dynamite (Global) (set 2)", + "sc1clbrn", "Club Runner (Dutch) (unknown) (Scorpion 1)", + "sc1clbsp", "Club Spinner (Dutch) (unknown) (Scorpion 1)", + "sc1clbtm", "Club Temptation (Bellfruit) (set 1) (Scorpion 1)", + "sc1clbtma", "Club Temptation (Bellfruit) (set 2) (Scorpion 1)", + "sc1clbw", "Club Wise (Bellfruit) (set 2) (Scorpion 1)", + "sc1clbwa", "Club Wise (Bellfruit) (set 1) (Scorpion 1)", + "sc1clbxp", "Club Explosion (Bellfruit) (Scorpion 1) (set 1)", + "sc1clbxpa", "Club Explosion (Bellfruit) (Scorpion 1) (set 2)", + "sc1clins", "Cash Lines (Bellfruit) (Scorpion 1) (set 1)", + "sc1clinsa", "Cash Lines (Bellfruit) (Scorpion 1) (set 2)", + "sc1clinsb", "Cash Lines (Bellfruit) (Scorpion 1) (set 3)", + "sc1clinsc", "Cash Lines (Bellfruit) (Scorpion 1) (set 4)", + "sc1clinsd", "Cash Lines (Bellfruit) (Scorpion 1) (set 5)", + "sc1clinse", "Cash Lines (Bellfruit) (Scorpion 1) (set 6)", + "sc1clown", "Clown Around (Dutch) (Bellfruit) (Scorpion 1)", + "sc1copdd", "Cops 'n' Robbers Deluxe (Dutch) (Bellfruit) (Scorpion 1)", + "sc1copdx", "Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 1)", + "sc1cops", "Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 1)", + "sc1copsa", "Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 1)", + "sc1count", "Count Cash Club (Bellfruit) (set 2) (Scorpion 1)", + "sc1counta", "Count Cash Club (Bellfruit) (set 1) (Scorpion 1)", + "sc1countap", "Count Cash Club (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1countp", "Count Cash Club (Bellfruit) (set 2, Protocol) (Scorpion 1)", + "sc1crocr", "Croc And Roll (Mdm) (Scorpion 2/3?)", + "sc1crzyc", "Crazy Cash (Global) (set 1)", + "sc1crzyca", "Crazy Cash (Global) (set 2)", + "sc1cscl", "Cash Classic (Global) (set 1)", + "sc1cscla", "Cash Classic (Global) (set 2)", + "sc1cshat", "Cash Attraction (Bellfruit) (set 5, Protocol) (Scorpion 1)", + "sc1cshata", "Cash Attraction (Bellfruit) (set 1) (Scorpion 1)", + "sc1cshatb", "Cash Attraction (Bellfruit) (set 5) (Scorpion 1)", + "sc1cshatc", "Cash Attraction (Bellfruit) (set 2) (Scorpion 1)", + "sc1cshatf", "Cash Attraction (Bellfruit) (set 2, Protocol) (Scorpion 1)", + "sc1cshatg", "Cash Attraction (Bellfruit) (set 4, Protocol) (Scorpion 1)", + "sc1cshath", "Cash Attraction (Bellfruit) (set 3, Protocol) (Scorpion 1)", + "sc1cshati", "Cash Attraction (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1cshcd", "Cash Card (Dutch) (Bellfruit) (Scorpion 1)", + "sc1cshcda", "Cash Card (Bellfruit) (set 1) (Scorpion 1)", + "sc1cshcdb", "Cash Card (Bellfruit) (set 2) (Scorpion 1)", + "sc1cshin", "Cashino (Dutch) (Bellfruit) (Scorpion 1)", + "sc1cshwz", "Cash Wise (Bellfruit) (set 2) (Scorpion 1)", + "sc1cshwza", "Cash Wise (Bellfruit) (set 1) (Scorpion 1)", + "sc1cshwzb", "Cash Wise (Bellfruit) (set 3) (Scorpion 1)", + "sc1cshwzc", "Cash Wise (Bellfruit) (set 2, Protocol) (Scorpion 1)", + "sc1cshwzd", "Cash Wise (Bellfruit) (set 4, Protocol) (Scorpion 1)", + "sc1cshwze", "Cash Wise (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1cshwzf", "Cash Wise (Bellfruit) (set 3, Protocol) (Scorpion 1)", + "sc1cshwzg", "Cash Wise (Bellfruit) (set 4) (Scorpion 1)", + "sc1cwcl", "Clockwise (Bellfruit) (Scorpion 1)", + "sc1czbrk", "Crazy Break (Dutch) (unknown) (Scorpion 1)", + "sc1dago", "Dagobert's Vault (Dutch) (Elam) (Scorpion 1)", + "sc1days", "All In A Days Work (Global) (set 1)", + "sc1daysa", "All In A Days Work (Global) (set 2)", + "sc1dblch", "Double Chance (Bellfruit) (set 1) (Scorpion 1)", + "sc1dblcha", "Double Chance (Bellfruit) (set 2, bad) (Scorpion 1)", + "sc1dblchb", "Double Chance (Bellfruit) (set 3) (Scorpion 1)", + "sc1dip", "Diplomat (Eurocoin) (Scorpion 1)", + "sc1disc", "Discovey (Dutch) (Bellfruit) (Scorpion 1)", + "sc1dream", "Dream Machine (Dutch) (Bellfruit) (Scorpion 1)", + "sc1driv", "Driving School (Global) (set 1)", + "sc1driva", "Driving School (Global) (set 2)", + "sc1drivb", "Driving School (Global) (set 3)", + "sc1drivc", "Driving School (Global) (set 4)", + "sc1druby", "Diamonds & Rubys (Bellfruit) (Scorpion ?) (set 1)", + "sc1drubya", "Diamonds & Rubys (Bellfruit) (Scorpion ?) (set 2)", + "sc1energ", "Energy (Dutch) (unknown) (Scorpion 1)", + "sc1final", "Final Touch (Dutch) (unknown) (Scorpion 1)", + "sc1flash", "Flash (Dutch) (Bellfruit) (Scorpion 1)", + "sc1frpus", "Fruit Pursuit (Bellfruit) (set 1) (Scorpion 1?)", + "sc1frpusa", "Fruit Pursuit (Bellfruit) (set 2) (Scorpion 1?)", + "sc1frtln", "Fruit Lines (Dutch) (Bellfruit) (set 2) (Scorpion 1)", + "sc1fruit", "Fruit Lines (Dutch) (Bellfruit) (set 1) (Scorpion 1)", + "sc1funh", "Fun House Club (Bellfruit) (set 1) (Scorpion 1)", + "sc1funha", "Fun House Club (Bellfruit) (set 2) (Scorpion 1)", + "sc1funhp", "Fun House Club (Bellfruit) (set 1, Protocol, bad) (Scorpion 1)", + "sc1goldw", "Golden Winner (Bellfruit) (Scorpion ?)", + "sc1gprix", "Grand Prix (Dutch) (Dutch) (Bellfruit) (Scorpion 1)", + "sc1gslam", "Grand Slam (Dutch) (Bellfruit) (Scorpion 1)", + "sc1gtime", "Good Times (Dutch) (Bellfruit) (Scorpion 1)", + "sc1happy", "Happy Hour (Dutch) (Bellfruit) (Scorpion 1)", + "sc1hfcc", "Hi Flyer Club (Crystal) (set 1) (Scorpion 1)", + "sc1hfccp", "Hi Flyer Club (Crystal) (set 1, Protocol) (Scorpion 1)", + "sc1hipt", "High Point (Bellfruit) (Scorpion 1) (set 1)", + "sc1hipta", "High Point (Bellfruit) (Scorpion 1) (set 2)", + "sc1impc", "Impact (Dutch) (Bellfruit) (Scorpion 1)", + "sc1kings", "Kings Club (Dutch) (Bellfruit) (Scorpion 1)", + "sc1lamb", "Lambada (Eurocoin) (Scorpion 1)", + "sc1linx", "Linx (Bellfruit) (set 1) (Scorpion 1)", + "sc1linxa", "Linx (Bellfruit) (set 2) (Scorpion 1)", + "sc1linxp", "Linx (Bellfruit) (set 3, Protocol) (Scorpion 1)", + "sc1lotus", "Lotus SE (Dutch) (set 1)", + "sc1lotusa", "Lotus SE (Dutch) (set 2)", + "sc1ltdv", "Little Devil (Pcp)", + "sc1magc", "Magic Circle (Dutch) (Bellfruit) (Scorpion 1)", + "sc1manha", "Manhattan (Dutch) (Bellfruit) (Scorpion 1)", + "sc1mast", "Master Club (Dutch) (Bellfruit) (Scorpion 1)", + "sc1mist", "Mistral (Dutch) (Bellfruit) (Scorpion 1)", + "sc1moonl", "Moon Lite (Bwb)", + "sc1ofs56", "Only Fools and Horses (Bellfruit) (Scorpion 1?)", + "sc1olym", "Olympia (Dutch) (Bellfruit) (Scorpion 1)", + "sc1orac", "Oracle (Dutch) (Bellfruit) (Scorpion 1)", + "sc1pwrl", "Power Lines (Bellfruit) (set 1) (Scorpion 1)", + "sc1quat", "Quatro (Dutch) (Bellfruit) (Scorpion 1)", + "sc1rain", "Rainbow (Dutch) (Bellfruit) (Scorpion 1)", + "sc1re", "Reel Cash (Dutch) (Bellfruit) (Scorpion 1)", + "sc1reply", "Replay (Eurocoin) (Scorpion 1)", + "sc1rese", "Reel Cash SE (Dutch) (Bellfruit) (Scorpion 1)", + "sc1revo", "Revolution (Dutch) (Bellfruit) (Scorpion 1)", + "sc1rose", "Rose 'n' Crown (Dutch) (Bellfruit) (Scorpion 1)", + "sc1roul", "Roulette (Dutch, Game Card 39-360-129?)", + "sc1s1000", "Super 1000 (Deltasoft)", + "sc1sant", "Santana (Dutch) (Bellfruit) (Scorpion 1)", + "sc1sat", "Satellite (Dutch) (Bellfruit) (Scorpion 1)", + "sc1satse", "Satellite SE (Dutch) (Bellfruit) (Scorpion 1)", + "sc1scunk", "unknown Scorpion 1 'Super ?' (Bellfruit) (Scorpion 1)", + "sc1shan", "Shanghai (Dutch) (Bellfruit) (Scorpion 1)", + "sc1sir", "Strike It Rich (Bellfruit) (set 1) (Scorpion 1)", + "sc1sira", "Strike It Rich (Bellfruit) (set 3, bad) (Scorpion 1)", + "sc1sirb", "Strike It Rich (Bellfruit) (set 2) (Scorpion 1)", + "sc1sirc", "Strike It Rich (Bellfruit) (set 4, bad) (Scorpion 1)", + "sc1smoke", "Smokey Vs The Bandit (Mdm) (set 1) (Scorpion 2/3?)", + "sc1smokea", "Smokey Vs The Bandit (Mdm) (set 2) (Scorpion 2/3?)", + "sc1spct", "Spectre (Bellfruit) (set 1) (Scorpion 1)", + "sc1spcta", "Spectre (Bellfruit) (set 2) (Scorpion 1)", + "sc1spit", "Spitfire (Dutch) (Elam) (Scorpion 1)", + "sc1ster", "Sterling (Dutch) (Bellfruit) (Scorpion 1)", + "sc1str4", "Strike 4 (Dutch) (Bellfruit) (Scorpion 1) (set 1)", + "sc1str4a", "Strike 4 (Dutch) (Bellfruit) (Scorpion 1) (set 2)", + "sc1strk", "Strike (Dutch) (Bellfruit) (Scorpion 1)", + "sc1supfl", "Super Flush (Dutch) (Bellfruit) (Scorpion 1)", + "sc1sups", "Superstar (Dutch) (unknown) (Scorpion 1)", + "sc1t1k", "Top 1000 (Dutch) (Eurocoin) (Scorpion 1)", + "sc1tiara", "Tiara (Dutch) (Bellfruit) (Scorpion 1)", + "sc1torn", "Tornado (Dutch) (Bellfruit) (set 1) (Scorpion 1)", + "sc1torna", "Tornado (Dutch) (Bellfruit) (set 2) (Scorpion 1)", + "sc1tri", "Tri Star (Bellfruit) (set 1) (Scorpion 1)", + "sc1tria", "Tri Star (Bellfruit) (set 2) (Scorpion 1)", + "sc1triap", "Tri Star (Bellfruit) (set 2, Protocol) (Scorpion 1)", + "sc1trib", "Tri Star (Bellfruit) (set 3) (Scorpion 1)", + "sc1tribp", "Tri Star (Bellfruit) (set 3, Protocol) (Scorpion 1)", + "sc1twice", "Twice As Nice (Associated Leisure) (Scorpion 1)", + "sc1typ", "Typhoon Club (Bellfruit) (set 1) (Scorpion 1)", + "sc1typp", "Typhoon Club (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1ult", "Ultimate (Dutch) (Bellfruit) (Scorpion 1)", + "sc1vent", "Ventura (Dutch) (Bellfruit) (Scorpion 1)", + "sc1vict", "Victory (Dutch) (Bellfruit) (Scorpion 1)", + "sc1voy", "Voyager (Dutch) (Elam) (set 1) (Scorpion 1)", + "sc1voya", "Voyager (Dutch) (Elam) (set 2) (Scorpion 1)", + "sc1vsd", "Vegas Super Deal (Global)", + "sc1winfl", "Winfalls (Dutch) (Bellfruit) (Scorpion 1)", + "sc1winst", "Winning Streak (Bellfruit) (set 1) (Scorpion 1)", + "sc1winsta", "Winning Streak (Bellfruit) (set 2) (Scorpion 1)", + "sc1winstp", "Winning Streak (Bellfruit) (set 1, Protocol) (Scorpion 1)", + "sc1wof", "Wheel Of Fortune (Global) (set 1)", + "sc1wofa", "Wheel Of Fortune (Global) (set 2)", + "sc1wofb", "Wheel Of Fortune (Global) (set 3)", + "sc1wthn", "Wild Thing (Eurocoin) (Scorpion 1)", + "sc1wud", "What's Up Dr (Scorpion 1?)", + "sc1zep", "Zeppelin (Dutch) (Elam) (Scorpion 1)", + "sc2bar7", "Bar 7 (Concept) (set 1)", + "sc2bar7a", "Bar 7 (Concept) (set 2)", + "sc2bar7b", "Bar 7 (Concept) (set 3)", + "sc2bar7c", "Bar 7 (Concept) (set 4)", + "sc2bar7d", "Bar 7 (Concept) (set 5)", + "sc2bar7e", "Bar 7 (Concept) (set 6)", + "sc2bar7f", "Bar 7 (Concept) (set 7)", + "sc2bar7g", "Bar 7 (Concept) (set 8)", + "sc2bar7h", "Bar 7 (Concept) (set 9)", + "sc2bar7i", "Bar 7 (Concept) (set 10)", + "sc2bar7j", "Bar 7 (Concept) (set 11)", + "sc2bar7k", "Bar 7 (Concept) (set 12)", + "sc2bbar7", "Big Bar 7 (Concept) (set 1)", + "sc2bbar7a", "Big Bar 7 (Concept) (set 2)", + "sc2bbar7b", "Big Bar 7 (Concept) (set 3)", + "sc2bbar7c", "Big Bar 7 (Concept) (set 4)", + "sc2bbar7d", "Big Bar 7 (Concept) (set 5)", + "sc2bbar7e", "Big Bar 7 (Concept) (set 6)", + "sc2bbar7f", "Big Bar 7 (Concept) (set 7)", + "sc2bbar7g", "Big Bar 7 (Concept) (set 8)", + "sc2bbar7h", "Big Bar 7 (Concept) (set 9)", + "sc2bbar7i", "Big Bar 7 (Concept) (set 10)", + "sc2bbar7j", "Big Bar 7 (Concept) (set 11)", + "sc2bbar7k", "Big Bar 7 (Concept) (set 12)", + "sc2bbar7l", "Big Bar 7 (Concept) (set 13)", + "sc2bbar7m", "Big Bar 7 (Concept) (set 14)", + "sc2bbar7n", "Big Bar 7 (Concept) (set 15)", + "sc2bbar7o", "Big Bar 7 (Concept) (set 16)", + "sc2bbar7p", "Big Bar 7 (Concept) (set 17)", + "sc2brkfs", "The Big Breakfast (set 2) (Scorpion 2/3)", + "sc2brkfs1", "The Big Breakfast (set 1 UK, Single Site) (Scorpion 2/3)", + "sc2brkfs1p", "The Big Breakfast (set 1 UK, Single Site, Protocol) (Scorpion 2/3)", + "sc2brkfs2", "The Big Breakfast (set 4 UK, Arcade, 8GBP Jackpot) (Scorpion 2/3)", + "sc2brkfs3", "The Big Breakfast (set 3) (Scorpion 2/3)", + "sc2brkfs3p", "The Big Breakfast (set 4 UK, Arcade, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2brkfs4", "The Big Breakfast (set 5 UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", + "sc2brkfs4p", "The Big Breakfast (set 5 UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2brkfs5", "The Big Breakfast (set 6 UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", + "sc2brkfs5p", "The Big Breakfast (set 6 UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2brkfs6", "The Big Breakfast (set 3, Protocol) (Scorpion 2/3)", + "sc2brkfsm", "The Big Breakfast Casino (Scorpion 2/3)", + "sc2brkfsm1", "The Big Breakfast Casino (Mazooma, set 1) (Scorpion 2/3)", + "sc2brkfsm2", "The Big Breakfast Casino (Mazooma, set 2) (Scorpion 2/3)", + "sc2brkfsp", "The Big Breakfast (set 2, Protocol) (Scorpion 2/3)", + "sc2call", "It's Your Call (Global) (v2.7) (Scorpion 2/3)", + "sc2callc", "It's Your Call (Club?) (Global) (v1.6) (Scorpion 2/3)", + "sc2callcp", "It's Your Call (Club?) (Global) (v1.6 Protocol) (Scorpion 2/3)", + "sc2callp", "It's Your Call (Global) (v2.7 Protocol) (Scorpion 2/3)", + "sc2casr", "Casino Royale (Bellfruit) (set 5, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3)", + "sc2casr1", "Casino Royale (Bellfruit) (set 4, UK, 3rd Triennial) (Scorpion 2/3)", + "sc2casr1p", "Casino Royale (Bellfruit) (set 4, UK, 3rd Triennial, Protocol) (Scorpion 2/3)", + "sc2casr2", "Casino Royale (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2casr2p", "Casino Royale (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2casr3", "Casino Royale (Bellfruit) (set 1, UK, 8GBP Jackpot) (Scorpion 2/3)", + "sc2casr3p", "Casino Royale (Bellfruit) (set 1, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2casr4", "Casino Royale (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2casr4p", "Casino Royale (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2casrp", "Casino Royale (Bellfruit) (set 5, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3)", + "sc2catms", "Cat & Mouse (Bellfruit) (set 4, Deluxe) (Scorpion 2/3)", + "sc2catms1", "Cat & Mouse (Bellfruit) (set 10) (Scorpion 2/3)", + "sc2catms1p", "Cat & Mouse (Bellfruit) (set 10, Protocol) (Scorpion 2/3)", + "sc2catms2", "Cat & Mouse (Bellfruit) (set 9) (Scorpion 2/3)", + "sc2catms2p", "Cat & Mouse (Bellfruit) (set 9, Protocol) (Scorpion 2/3)", + "sc2catms3", "Cat & Mouse (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2cb7", "Super Bar 7 Casino (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2cb71", "Super Bar 7 Casino (Bellfruit) (set 1, UK, All Cash) (Scorpion 2/3)", + "sc2cb72", "Super Bar 7 Casino (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2cb72p", "Super Bar 7 Casino (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cb7p", "Super Bar 7 Casino (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2cexpl", "Cash Explosion (Bellfruit) (set 2, Protocol) (Scorpion 2)", + "sc2cexpla", "Cash Explosion (Bellfruit) (set 1, Protocol) (Scorpion 2)", + "sc2cexplb", "Cash Explosion (Bellfruit) (set 3, Protocol) (Scorpion 2)", + "sc2cexplc", "Cash Explosion (Bellfruit) (set 2) (Scorpion 2)", + "sc2cexpld", "Cash Explosion (Bellfruit) (set 1) (Scorpion 2)", + "sc2cexple", "Cash Explosion (Bellfruit) (set 3) (Scorpion 2)", + "sc2cgc", "Carrot Gold Club (Bellfruit) (Protocol) (Scorpion 2/3)", + "sc2cgcas", "Club Grand Casino (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2cgcas1", "Club Grand Casino (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2cgcas1p", "Club Grand Casino (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cgcasp", "Club Grand Casino (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", + "sc2cmbt", "Cat & Mouse & Bonzo Too (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2cmbtp", "Cat & Mouse & Bonzo Too (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2cnile", "Cash On The Nile Club (Bellfruit) (set 2 UK, 150GBP Jackpot) (Scorpion 2/3)", + "sc2cnile1", "Cash On The Nile Club (Bellfruit) (set 1 UK, 150GBP Jackpot) (Scorpion 2/3)", + "sc2cnile2", "Cash On The Nile Club (Bellfruit) (set 3 UK, 200GBP Jackpot) (Scorpion 2/3)", + "sc2cnile2p", "Cash On The Nile Club (Bellfruit) (set 3 UK, 200GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cnilep", "Cash On The Nile Club (Bellfruit) (set 2 UK, 150GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copcl", "Cops 'n' Robbers Club (Bellfruit) (set 9, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copcl1", "Cops 'n' Robbers Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copcl10", "Cops 'n' Robbers Club (Bellfruit) (set 6, UK) (Scorpion 2/3)", + "sc2copcl11", "Cops 'n' Robbers Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2copcl11p", "Cops 'n' Robbers Club (Bellfruit) (set 11, UK, Protocol) (Scorpion 2/3)", + "sc2copcl12", "Cops 'n' Robbers Club (Bellfruit) (set 10, UK, Protocol) (Scorpion 2/3)", + "sc2copcl1p", "Cops 'n' Robbers Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copcl2", "Cops 'n' Robbers Club (Bellfruit) (set 10, UK) (Scorpion 2/3)", + "sc2copcl3", "Cops 'n' Robbers Club (Bellfruit) (set 12, UK) (Scorpion 2/3)", + "sc2copcl3p", "Cops 'n' Robbers Club (Bellfruit) (set 12, UK, Protocol) (Scorpion 2/3)", + "sc2copcl4", "Cops 'n' Robbers Club (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2copcl5", "Cops 'n' Robbers Club (Bellfruit) (set 11, UK) (Scorpion 2/3)", + "sc2copcl6", "Cops 'n' Robbers Club (Bellfruit) (set 4, UK) (Scorpion 2/3)", + "sc2copcl6p", "Cops 'n' Robbers Club (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", + "sc2copcl7", "Cops 'n' Robbers Club (Bellfruit) (set 5, UK) (Scorpion 2/3)", + "sc2copcl8", "Cops 'n' Robbers Club (Bellfruit) (set 8, UK) (Scorpion 2/3)", + "sc2copcl8p", "Cops 'n' Robbers Club (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3)", + "sc2copcl9", "Cops 'n' Robbers Club (Bellfruit) (set 7, UK) (Scorpion 2/3)", + "sc2copcl9p", "Cops 'n' Robbers Club (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3)", + "sc2copclp", "Cops 'n' Robbers Club (Bellfruit) (set 9, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copdc", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 7, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copdc1", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 3, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copdc1p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 3, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copdc2", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 4, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copdc2p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 4, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copdc3", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 5, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copdc3p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 5, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copdc4", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 6, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copdc4p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 6, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copdc5", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 1, UK, 200GBP Jackpot) (Scorpion 2/3)", + "sc2copdc5p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 1, UK, 200GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2copdc6", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2copdcp", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 7, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cops", "Cops 'n' Robbers (Bellfruit) (set 6) (Scorpion 2/3)", + "sc2cops1p", "Cops 'n' Robbers (Bellfruit) (set 6, Protocol) (Scorpion 2/3)", + "sc2cops2", "Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2cops3", "Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 2/3)", + "sc2cops3p", "Cops 'n' Robbers (Bellfruit) (set 3, Protocol) (Scorpion 2/3)", + "sc2cops4", "Cops 'n' Robbers (Bellfruit) (set 5) (Scorpion 2/3)", + "sc2cops5", "Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2copsc", "Casino Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2copsc1", "Casino Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2copsc1p", "Casino Cops 'n' Robbers (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", + "sc2copsc1pa", "Casino Cops 'n' Robbers (Bellfruit) (set 2, Protocol) (Scorpion 2/3) (alt matrix rom)", + "sc2copscp", "Casino Cops 'n' Robbers (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", + "sc2copsp", "Cops 'n' Robbers (Bellfruit) (set 4, Protocol) (Scorpion 2/3)", + "sc2cpe", "Club Public Enemy No.1 (set 5, UK) (Scorpion 2/3)", + "sc2cpe1", "Club Public Enemy No.1 (set 4, UK) (Scorpion 2/3)", + "sc2cpe1p", "Club Public Enemy No.1 (set 4, UK, Protocol) (Scorpion 2/3)", + "sc2cpe2", "Club Public Enemy No.1 (set 3, UK) (Scorpion 2/3)", + "sc2cpe2p", "Club Public Enemy No.1 (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2cpe3", "Club Public Enemy No.1 (set 1, UK) (Scorpion 2/3)", + "sc2cpe3p", "Club Public Enemy No.1 (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2cpe4", "Club Public Enemy No.1 (set 2, UK) (Scorpion 2/3)", + "sc2cpe4p", "Club Public Enemy No.1 (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2cpep", "Club Public Enemy No.1 (set 5, UK, Protocol) (Scorpion 2/3)", + "sc2cpg", "Pharaoh's Gold Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2cpg1", "Pharaoh's Gold Club (Bellfruit) (set 3, UK, p65) (Scorpion 2/3)", + "sc2cpg1p", "Pharaoh's Gold Club (Bellfruit) (set 3, UK, p65, Protocol) (Scorpion 2/3)", + "sc2cpg2", "Pharaoh's Gold Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2cpg2p", "Pharaoh's Gold Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2cpgp", "Pharaoh's Gold Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cshcl", "Cashino Club (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2cshcl1", "Cashino Club (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2cshcl1p", "Cashino Club (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", + "sc2cshclp", "Cashino Club (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", + "sc2ctms2", "Cat & Mouse (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2ctms21", "Cat & Mouse (Bellfruit) (set 7) (Scorpion 2/3)", + "sc2ctms21p", "Cat & Mouse (Bellfruit) (set 7, Protocol) (Scorpion 2/3)", + "sc2ctms22", "Cat & Mouse (Bellfruit) (set 6) (Scorpion 2/3)", + "sc2ctms22p", "Cat & Mouse (Bellfruit) (set 6, Protocol) (Scorpion 2/3)", + "sc2ctms23", "Cat & Mouse (Bellfruit) (set 5) (Scorpion 2/3)", + "sc2ctms23p", "Cat & Mouse (Bellfruit) (set 5, Protocol) (Scorpion 2/3)", + "sc2ctms24p", "Cat & Mouse (Bellfruit) (set 8, Protocol) (Scorpion 2/3)", + "sc2ctms25", "Cat & Mouse (Bellfruit) (set 3) (Scorpion 2/3)", + "sc2cvega", "Cash Vegas (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2cvega1", "Cash Vegas (Bellfruit) (set 4, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3)", + "sc2cvega1p", "Cash Vegas (Bellfruit) (set 4, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3)", + "sc2cvega2", "Cash Vegas (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3)", + "sc2cvega2p", "Cash Vegas (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cvega3", "Cash Vegas (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2cvega3p", "Cash Vegas (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2cvega4p", "Cash Vegas (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2dbl", "Double Diamond (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2dbl1", "Double Diamond (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2dbl1p", "Double Diamond (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2dblp", "Double Diamond (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2dels", "Del's Millions (Bellfruit) (set 9, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2dels1", "Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2dels1p", "Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2dels2", "Del's Millions (Bellfruit) (set 7, UK, 8GBP Jackpot) (Scorpion 2/3)", + "sc2dels2p", "Del's Millions (Bellfruit) (set 7, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2dels3", "Del's Millions (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3)", + "sc2dels3p", "Del's Millions (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2dels4", "Del's Millions (Bellfruit) (set 6, UK) (Scorpion 2/3)", + "sc2dels4p", "Del's Millions (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3)", + "sc2dels5", "Del's Millions (Bellfruit) (set 5, UK) (Scorpion 2/3)", + "sc2dels6", "Del's Millions (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2dels7", "Del's Millions (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2dels8", "Del's Millions (Bellfruit) (set 8, UK) (Scorpion 2/3)", + "sc2dels9", "Del's Millions (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3)", + "sc2delsd", "Del's Millions (Bellfruit) (set 4, Deluxe) (Scorpion 2/3)", + "sc2delsm", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ11_N) (Scorpion 2/3)", + "sc2delsm1", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ13_N) (Scorpion 2/3)", + "sc2delsm1p", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ14_N) (Scorpion 2/3)", + "sc2delsm2", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ11_P) (Scorpion 2/3)", + "sc2delsm2p", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ12_P) (Scorpion 2/3)", + "sc2delsm3", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ13_P) (Scorpion 2/3)", + "sc2delsm3p", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ14_P) (Scorpion 2/3)", + "sc2delsmp", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ12_N) (Scorpion 2/3)", + "sc2delsp", "Del's Millions (Bellfruit) (set 9, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2dick", "Spotted Dick (Global) (v3.1) (Scorpion 2/3)", + "sc2dick1", "Spotted Dick (Global) (v2.2) (Scorpion 2/3)", + "sc2dick2", "Spotted Dick (Global) (v1.5) (Scorpion 2/3)", + "sc2dick2e", "Spotted Dick (Global) (v?.? Euro) (Scorpion 2/3)", + "sc2dick2eu", "Spotted Dick (Global) (v?.? Euro unencrypted) (Scorpion 2/3)", + "sc2dick2p", "Spotted Dick (Global) (v1.5 Protocol ) (Scorpion 2/3)", + "sc2dickp", "Spotted Dick (Global) (v3.1 Protocol) (Scorpion 2/3)", + "sc2downt", "Down Town (Bellfruit) (set 7, UK) (Scorpion 2/3)", + "sc2downt1", "Down Town (Bellfruit) (set 4, UK, 16RM motor) (Scorpion 2/3)", + "sc2downt1p", "Down Town (Bellfruit) (set 4, UK, 16RM motor, Protocol) (Scorpion 2/3)", + "sc2downt2", "Down Town (Bellfruit) (set 6, UK) (Scorpion 2/3)", + "sc2downt2p", "Down Town (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3)", + "sc2downt3", "Down Town (Bellfruit) (set 11, UK, 15RM motor) (Scorpion 2/3)", + "sc2downt3a", "Down Town (Bellfruit) (set 8, UK) (Scorpion 2/3)", + "sc2downt3ap", "Down Town (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3)", + "sc2downt3p", "Down Town (Bellfruit) (set 11, UK, 15RM motor, Protocol) (Scorpion 2/3)", + "sc2downt4", "Down Town (Bellfruit) (set 10, UK, 15RM motor) (Scorpion 2/3)", + "sc2downt4a", "Down Town (Bellfruit) (set 9, UK) (Scorpion 2/3)", + "sc2downt4ap", "Down Town (Bellfruit) (set 9, UK, Protocol) (Scorpion 2/3)", + "sc2downt4p", "Down Town (Bellfruit) (set 10, UK, 15RM motor, Protocol) (Scorpion 2/3)", + "sc2downt5", "Down Town (Bellfruit) (set 5, UK) (Scorpion 2/3)", + "sc2downt6", "Down Town (Bellfruit) (set 1, UK, 16RM motor) (Scorpion 2/3)", + "sc2downt7", "Down Town (Bellfruit) (set 2, Irish, 16RM motor) (Scorpion 2/3)", + "sc2downt8a", "Down Town (Bellfruit) (set 3, UK, 16RM motor) (Scorpion 2/3)", + "sc2downt8ap", "Down Town (Bellfruit) (set 3, UK, 16RM motor, Protocol) (Scorpion 2/3)", + "sc2downtp", "Down Town (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3)", + "sc2drwho", "Dr.Who The Timelord (set 1, UK, Single Site) (Scorpion 2/3)", + "sc2drwho1", "Dr.Who The Timelord (set 2, UK, Arcade) (Scorpion 2/3)", + "sc2drwho1p", "Dr.Who The Timelord (set 2, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2drwho2", "Dr.Who The Timelord (set 3, UK, no Jackpot spin) (Scorpion 2/3)", + "sc2drwho2p", "Dr.Who The Timelord (set 3, UK, no Jackpot spin, Protocol) (Scorpion 2/3)", + "sc2drwho3", "Dr.Who The Timelord (set 4, UK, Arcade) (Scorpion 2/3)", + "sc2drwho3p", "Dr.Who The Timelord (set 4, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2drwho4", "Dr.Who The Timelord (set 5, UK) (Scorpion 2/3)", + "sc2drwho4p", "Dr.Who The Timelord (set 5, UK, Protocol) (Scorpion 2/3)", + "sc2drwho5", "Dr.Who The Timelord (set 6, UK, Arcade, 8GBP Jackpot) (Scorpion 2/3)", + "sc2drwho5p", "Dr.Who The Timelord (set 6, UK, Arcade, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2drwho6", "Dr.Who The Timelord (set 7, UK, Arcade) (Scorpion 2/3)", + "sc2drwho6p", "Dr.Who The Timelord (set 7, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2drwho7", "Dr.Who The Timelord (set 8, UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", + "sc2drwho7p", "Dr.Who The Timelord (set 8, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2drwhodx", "Dr.Who The Timelord Deluxe (set 1) (Scorpion 2/3)", + "sc2drwhodx1", "Dr.Who The Timelord Deluxe (set 2) (Scorpion 2/3)", + "sc2drwhomz", "Dr.Who The Timelord (Mazooma) (Scorpion 2/3)", + "sc2drwhomzp", "Dr.Who The Timelord (Mazooma, Protocol) (Scorpion 2/3)", + "sc2drwhop", "Dr.Who The Timelord (set 1, UK, Single Site Protocol) (Scorpion 2/3)", + "sc2drwhou", "Dr.Who The Timelord (set 1, UK, Single Site) (Scorpion 2/3) (not encrypted)", + "sc2easy", "Easy Money (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2easy1", "Easy Money (Bellfruit) (set 3) (Scorpion 2/3)", + "sc2easy1p", "Easy Money (Bellfruit) (set 3, Protocol) (Scorpion 2/3)", + "sc2easy2", "Easy Money (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2easy2p", "Easy Money (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", + "sc2easyp", "Easy Money (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", + "sc2eggs", "Eggs On Legs Tour (Bellfruit) (set 2, UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", + "sc2eggs1", "Eggs On Legs Tour (Bellfruit) (set 1, UK, Arcade, 10GBP Jackpot?) (Scorpion 2/3)", + "sc2eggs1p", "Eggs On Legs Tour (Bellfruit) (set 1, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2eggsp", "Eggs On Legs Tour (Bellfruit) (set 2, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2flaca", "Flash Cash (Bellfruit) (set 3, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3)", + "sc2flaca1", "Flash Cash (Bellfruit) (set 1, UK, 10GBP Jackpot, 2nd Triennial) (Scorpion 2/3)", + "sc2flaca1p", "Flash Cash (Bellfruit) (set 1, UK, 10GBP Jackpot, 2nd Triennial, Protocol) (Scorpion 2/3)", + "sc2flaca2", "Flash Cash (Bellfruit) (set 2, UK, 10GBP Jackpot, 2nd Triennial) (Scorpion 2/3)", + "sc2flaca2p", "Flash Cash (Bellfruit) (set 2, UK, 10GBP Jackpot, 2nd Triennial, Protocol) (Scorpion 2/3)", + "sc2flacap", "Flash Cash (Bellfruit) (set 3, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3)", + "sc2flutr", "Flutter (Concept)", + "sc2focus", "Focus (Dutch, Game Card 95-750-347) (Scorpion 2/3)", + "sc2foot", "Football Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2foot1", "Football Club (Bellfruit) (set 3, UK, 100GBP Jackpot) (Scorpion 2/3)", + "sc2foot1p", "Football Club (Bellfruit) (set 3, UK, 100GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2foot2", "Football Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2foot2p", "Football Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2footp", "Football Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2gcclb", "Golden Casino Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2gcclb1", "Golden Casino Club (Bellfruit) (set 3, UK, 100GBP Jackpot) (Scorpion 2/3)", + "sc2gcclb1p", "Golden Casino Club (Bellfruit) (set 3, UK, 100GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2gcclb2", "Golden Casino Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2gcclb2p", "Golden Casino Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2gcclbp", "Golden Casino Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2goldr", "Gold Reserve (Mdm) (v1.3) (Scorpion 2/3)", + "sc2goldr1", "Gold Reserve (Mdm) (set 2) (Scorpion 2/3)", + "sc2goldrp", "Gold Reserve (Mdm) (v1.3 Protocol) (Scorpion 2/3)", + "sc2groul", "Golden Roulette (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2groulp", "Golden Roulette (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2gsclb", "The Game Show Club (Bellfruit) (set 4, UK, Arcade, p65) (Scorpion 2/3)", + "sc2gsclb1", "The Game Show Club (Bellfruit) (set 7, UK, Arcade, 250GBP Jackpot, p65) (Scorpion 2/3)", + "sc2gsclb1p", "The Game Show Club (Bellfruit) (set 7, UK, Arcade, 250GBP Jackpot, p65, Protocol) (Scorpion 2/3)", + "sc2gsclb2", "The Game Show Club (Bellfruit) (set 3, UK, Arcade) (Scorpion 2/3)", + "sc2gsclb2p", "The Game Show Club (Bellfruit) (set 3, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2gsclb3", "The Game Show Club (Bellfruit) (set 5, UK, Arcade) (Scorpion 2/3)", + "sc2gsclb3p", "The Game Show Club (Bellfruit) (set 5, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2gsclb4", "The Game Show Club (Bellfruit) (set 6, UK, Arcade) (Scorpion 2/3)", + "sc2gsclb4p", "The Game Show Club (Bellfruit) (set 6, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2gsclb5", "The Game Show Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2gsclb6", "The Game Show Club (Bellfruit) (set 8, UK) (Scorpion 2/3)", + "sc2gsclb6p", "The Game Show Club (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3)", + "sc2gsclb7", "The Game Show Club (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2gsclbp", "The Game Show Club (Bellfruit) (set 4, UK, Arcade, p65, Protocol) (Scorpion 2/3)", + "sc2gslam", "Club Grand Slam (UK, set 2) (Scorpion 2/3)", + "sc2gslam1", "Club Grand Slam (UK, set 1) (Scorpion 2/3)", + "sc2gslam1p", "Club Grand Slam (UK, set 1, Protocol) (Scorpion 2/3)", + "sc2gslamp", "Club Grand Slam (UK, set 2, Protocol) (Scorpion 2/3)", + "sc2gtr", "The Great Train Robbery (Bellfruit) (Scorpion 2/3)", + "sc2heypr", "Hey Presto (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2heyprp", "Hey Presto (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2hifly", "High Flyer (Mdm) (v4.1) (Scorpion 2/3)", + "sc2hifly2", "High Flyer (Mdm) (v3.1) (Scorpion 2/3)", + "sc2hifly3", "High Flyer (Mdm) (v2.1) (Scorpion 2/3)", + "sc2hifly4", "High Flyer (Mdm) (v?.?) (Scorpion 2/3)", + "sc2hypr", "Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2hypr1", "Hyperactive (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2hypr1p", "Hyperactive (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2hyprp", "Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2inst", "Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2inst1", "Instant Jackpot (Bellfruit) (set 7, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2inst1p", "Instant Jackpot (Bellfruit) (set 7, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2inst2", "Instant Jackpot (Bellfruit) (set 4, UK) (Scorpion 2/3)", + "sc2inst2p", "Instant Jackpot (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", + "sc2inst3", "Instant Jackpot (Bellfruit) (set 5, UK, 8GBP Jackpot) (Scorpion 2/3)", + "sc2inst3p", "Instant Jackpot (Bellfruit) (set 5, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2inst4", "Instant Jackpot (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2inst4p", "Instant Jackpot (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2inst5", "Instant Jackpot (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2inst6", "Instant Jackpot (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2instp", "Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2kcclb", "King Cash Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2kcclb1", "King Cash Club (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2kcclb1p", "King Cash Club (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2kcclbp", "King Cash Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2luvv", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/25p) (Scorpion 2/3)", + "sc2luvv1", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/20p) (Scorpion 2/3)", + "sc2luvv1p", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/20p, Protocol) (Scorpion 2/3)", + "sc2luvv2", "Luvvly Jubbly (set 2, UK, Multisite) (Scorpion 2/3)", + "sc2luvv2p", "Luvvly Jubbly (set 2, UK, Multisite, Protocol) (Scorpion 2/3)", + "sc2luvv4", "Luvvly Jubbly (set 4, UK, Multisite 4GBP/5p) (Scorpion 2/3)", + "sc2luvv4p", "Luvvly Jubbly (set 4, UK, Multisite 4GBP/5p, Protocol) (Scorpion 2/3)", + "sc2luvv6p", "Luvvly Jubbly (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2luvvp", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/25p, Protocol) (Scorpion 2/3)", + "sc2maina", "Main Attraction (Bellfruit) (Scorpion 2/3)", + "sc2majes", "Majestic Bells (Bellfruit) (set 1) (set 1)", + "sc2majesp", "Majestic Bells (Bellfruit) (set 1, Protocol) (set 2)", + "sc2mam", "Make A Million (Bellfruit) (set 4, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2mam1", "Make A Million (Bellfruit) (set 5, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2mam1p", "Make A Million (Bellfruit) (set 5, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2mam2", "Make A Million (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3)", + "sc2mam2p", "Make A Million (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2mam3", "Make A Million (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2mam3a", "Make A Million (Bellfruit) (set 2, UK, alt) (Scorpion 2/3)", + "sc2mam3p", "Make A Million (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2mam4", "Make A Million (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2mam4p", "Make A Million (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2mamcl", "Make A Million Club (Bellfruit) (set 3, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2mamcl1", "Make A Million Club (Bellfruit) (set 4, UK) (Scorpion 2/3)", + "sc2mamcl1p", "Make A Million Club (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", + "sc2mamcl2", "Make A Million Club (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2mamcl2p", "Make A Million Club (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2mamcl3", "Make A Million Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2mamclp", "Make A Million Club (Bellfruit) (set 3, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2mamp", "Make A Million (Bellfruit) (set 4, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2motd", "Match Of The Day (Bellfruit) (set 9, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2motd1", "Match Of The Day (Bellfruit) (set 7, UK, 10GBP Jackpot, 1st Triennial) (Scorpion 2/3)", + "sc2motd1p", "Match Of The Day (Bellfruit) (set 7, UK, 10GBP Jackpot, 1st Triennial, Protocol) (Scorpion 2/3)", + "sc2motd2", "Match Of The Day (Bellfruit) (set 8, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2motd2p", "Match Of The Day (Bellfruit) (set 8, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2motd3", "Match Of The Day (Bellfruit) (set 6, UK) (Scorpion 2/3)", + "sc2motd3p", "Match Of The Day (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3)", + "sc2motd4", "Match Of The Day (Bellfruit) (set 3, UK, Arcade) (Scorpion 2/3)", + "sc2motd4p", "Match Of The Day (Bellfruit) (set 3, UK, Arcade, Protocol) (Scorpion 2/3)", + "sc2motd5", "Match Of The Day (Bellfruit) (set 2, UK, Single Site) (Scorpion 2/3)", + "sc2motd5p", "Match Of The Day (Bellfruit) (set 2, UK, Single Site, Protocol) (Scorpion 2/3)", + "sc2motd6", "Match Of The Day (Bellfruit) (set 4, Irish, 8GBP Jackpot) (Scorpion 2/3)", + "sc2motd6p", "Match Of The Day (Bellfruit) (set 4, Irish, 8GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2motd7", "Match Of The Day (Bellfruit) (set 5, UK) (Scorpion 2/3)", + "sc2motd8p", "Match Of The Day (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3)", + "sc2motd9", "Match Of The Day (Bellfruit) (set 1, Irish) (Scorpion 2/3)", + "sc2motdp", "Match Of The Day (Bellfruit) (set 9, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2ofool", "Only Fools & Horses (Bellfruit) (set 3) (Scorpion 2/3)", + "sc2ofool1", "Only Fools & Horses (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2ofool2", "Only Fools & Horses (Bellfruit) (set 4) (Scorpion 2/3)", + "sc2ofool3", "Only Fools & Horses (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2ofool4", "Only Fools & Horses (Bellfruit) (set 5) (Scorpion 2/3)", + "sc2olgld", "Olympic Gold (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2olgld1", "Olympic Gold (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", + "sc2olgld1p", "Olympic Gold (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc2olgldp", "Olympic Gold (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2payr", "Pay Roll Casino (Bellfruit/Mazooma) (Scorpion 2/3)", + "sc2pe1g", "Public Enemy No.1 (Bellfruit) [German] (Scorpion 2/3)", + "sc2pick", "Pick Of The Bunch (Global) (v2.3) (Scorpion 2/3)", + "sc2pickc", "Pick Of The Bunch (Club?) (Global) (v1.9) (Scorpion 2/3)", + "sc2pickcp", "Pick Of The Bunch (Club?) (Global) (v1.9 Protocol) (Scorpion 2/3)", + "sc2pickp", "Pick Of The Bunch (Global) (v2.3 Protocol) (Scorpion 2/3)", + "sc2prem", "Premier Club Manager (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2prem1", "Premier Club Manager (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2prem1p", "Premier Club Manager (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2prem2", "Premier Club Manager (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2prom", "Along The Prom (Bellfruit) (Scorpion 2/3)", + "sc2ptytm", "Party Time (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2ptytm1", "Party Time (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2ptytmp", "Party Time (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", + "sc2relgm", "Reel Gems (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2relgm1p", "Reel Gems (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2relgmp", "Reel Gems (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2rock", "How Big's Your Rock? (Global) (v1.5) (Scorpion 2/3)", + "sc2rock1", "How Big's Your Rock? (Global) (v1.4) (Scorpion 2/3)", + "sc2rock1p", "How Big's Your Rock? (Global) (v1.4 Protocol) (Scorpion 2/3)", + "sc2rocke", "How Big's Your Rock? (Global) (v?.? Euro) (Scorpion 2/3)", + "sc2rockp", "How Big's Your Rock? (Global) (v1.5 Protocol) (Scorpion 2/3)", + "sc2scc", "Safe Cracker Club (Mdm) (v4.4) (Scorpion 2/3)", + "sc2scshx", "Super Cash X (Concept)", + "sc2scshxcas", "Super Casino Cash X (Concept)", + "sc2scshxgman", "Super Cash X (Concept) (Gamesman Hardware)", + "sc2scshxstar", "Super Cash X (Concept) (Starpoint Hardware)", + "sc2sghst", "Super Ghost (Concept)", + "sc2showt", "Showtime Spectacular (Bellfruit) (set 4, UK) (Scorpion 2/3)", + "sc2showt1", "Showtime Spectacular (Bellfruit) (set 5, UK) (Scorpion 2/3)", + "sc2showt1p", "Showtime Spectacular (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3)", + "sc2showt2", "Showtime Spectacular (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2showt2p", "Showtime Spectacular (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2showt3", "Showtime Spectacular (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2showt3p", "Showtime Spectacular (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2showt4", "Showtime Spectacular (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2showt4p", "Showtime Spectacular (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2showtp", "Showtime Spectacular (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", + "sc2smnud", "Super Multi Nudger (Concept)", + "sc2sstar", "Super Star (Bellfruit) (set 2, UK, 3rd Triennial) (Scorpion 2/3)", + "sc2sstar1", "Super Star (Bellfruit) (set 1, UK, 2nd Triennial) (Scorpion 2/3)", + "sc2sstar1p", "Super Star (Bellfruit) (set 1, UK, 2nd Triennial, Protocol) (Scorpion 2/3)", + "sc2sstar2", "Super Star (Bellfruit) (set 4, UK, 2nd Triennial) (Scorpion 2/3)", + "sc2sstar2p", "Super Star (Bellfruit) (set 4, UK, 2nd Triennial, Protocol) (Scorpion 2/3)", + "sc2sstar3", "Super Star (Bellfruit) (set 3, UK, 2nd Triennial) (Scorpion 2/3)", + "sc2sstar3p", "Super Star (Bellfruit) (set 3, UK, 2nd Triennial, Protocol) (Scorpion 2/3)", + "sc2sstarp", "Super Star (Bellfruit) (set 2, UK, 3rd Triennial, Protocol) (Scorpion 2/3)", + "sc2suprz", "Surprise Surprize (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2suprz1", "Surprise Surprize (Bellfruit) (set 2, UK) (Scorpion 2/3)", + "sc2suprz1p", "Surprise Surprize (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", + "sc2suprz2", "Surprise Surprize (Bellfruit) (set 4, UK) (Scorpion 2/3)", + "sc2suprz2p", "Surprise Surprize (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", + "sc2suprz3", "Surprise Surprize (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2suprzp", "Surprise Surprize (Bellfruit) (set 1, UK, Protocol)(Scorpion 2/3)", + "sc2topwk", "Top Wack (Bellfruit) (set 1, UK, 10GBP Jackpot, 1st Triennial) (Scorpion 2/3)", + "sc2topwkp", "Top Wack (Bellfruit) (set 1, UK, 10GBP Jackpot, 1st Triennial, Protocol) (Scorpion 2/3)", + "sc2town", "Round The Town (Bellfruit) (set 6) (Scorpion 2/3)", + "sc2town1", "Round The Town (Bellfruit) (set 4) (Scorpion 2/3)", + "sc2town1a", "Round The Town (Bellfruit) (set 4, alt) (Scorpion 2/3)", + "sc2town1p", "Round The Town (Bellfruit) (set 4, Protocol) (Scorpion 2/3)", + "sc2town2", "Round The Town (Bellfruit) (set 2) (Scorpion 2/3)", + "sc2town3", "Round The Town (Bellfruit) (set 3) (Scorpion 2/3)", + "sc2town3p", "Round The Town (Bellfruit) (set 3, Protocol) (Scorpion 2/3)", + "sc2town4", "Round The Town (Bellfruit) (set 1) (Scorpion 2/3)", + "sc2town5", "Round The Town (Bellfruit) (set 5) (Scorpion 2/3)", + "sc2townp", "Round The Town (Bellfruit) (set 6, Protocol) (Scorpion 2/3)", + "sc2wembl", "Match Of The Day - Road To Wembley (Bellfruit) (set 8, UK, 10GBP Jackpot, 15RM motor) (Scorpion 2/3)", + "sc2wembl1", "Match Of The Day - Road To Wembley (Bellfruit) (set 6, UK, 15RM motor) (Scorpion 2/3)", + "sc2wembl10", "Match Of The Day - Road To Wembley (Bellfruit) (set 5, Irish, 8GBP Jackpot, 16RM motor) (Scorpion 2/3)", + "sc2wembl1p", "Match Of The Day - Road To Wembley (Bellfruit) (set 6, UK, 15RM motor, Protocol) (Scorpion 2/3)", + "sc2wembl2", "Match Of The Day - Road To Wembley (Bellfruit) (set 7, UK) (Scorpion 2/3)", + "sc2wembl2p", "Match Of The Day - Road To Wembley (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3)", + "sc2wembl4p", "Match Of The Day - Road To Wembley (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", + "sc2wembl5a", "Match Of The Day - Road To Wembley (Bellfruit) (set 2, UK, 16RM motor) (Scorpion 2/3)", + "sc2wembl5ap", "Match Of The Day - Road To Wembley (Bellfruit) (set 2, UK, 16RM motor, Protocol) (Scorpion 2/3)", + "sc2wembl6ap", "Match Of The Day - Road To Wembley (Bellfruit) (set 4, Arcade, 16RM motor, Protocol) (Scorpion 2/3)", + "sc2wembl7a", "Match Of The Day - Road To Wembley (Bellfruit) (set 1, UK, 8GBP Jackpot, 16RM motor) (Scorpion 2/3)", + "sc2wembl7ap", "Match Of The Day - Road To Wembley (Bellfruit) (set 5, Irish, 8GBP Jackpot, 16RM motor, Protocol) (Scorpion 2/3)", + "sc2wembl8", "Match Of The Day - Road To Wembley (Bellfruit) (set 3, UK) (Scorpion 2/3)", + "sc2wembl9", "Match Of The Day - Road To Wembley (Bellfruit) (set 4, Arcade, 16RM motor) (Scorpion 2/3)", + "sc2wemblm", "Match Of The Day - Road To Wembley (Bellfruit/Mazooma) (Scorpion 2/3)", + "sc2wemblp", "Match Of The Day - Road To Wembley (Bellfruit) (set 8, UK, 10GBP Jackpot, 15RM motor, Protocol) (Scorpion 2/3)", + "sc2winst", "Winning Streak (Bellfruit) (set 1) (Scorpion 2)", + "sc2winstb", "Winning Streak (Bellfruit) (set 3) (Scorpion 2)", + "sc2winstbp", "Winning Streak (Bellfruit) (set 3, Protocol) (Scorpion 2)", + "sc2winstd", "Winning Streak (Bellfruit) (set 2) (Scorpion 2)", + "sc2winstdp", "Winning Streak (Bellfruit) (set 2, Protocol) (Scorpion 2)", + "sc2winste", "Winning Streak (Bellfruit) (set 4) (Scorpion 2)", + "sc2winstep", "Winning Streak (Bellfruit) (set 4, Protocol) (Scorpion 2)", + "sc2winstf", "Winning Streak (Bellfruit) (set 6) (Scorpion 2)", + "sc2winstfp", "Winning Streak (Bellfruit) (set 6, Protocol) (Scorpion 2)", + "sc2winstg", "Winning Streak (Bellfruit) (set 5) (Scorpion 2)", + "sc2winstp", "Winning Streak (Bellfruit) (set 1, Protocol) (Scorpion 2)", + "sc2wwcl", "Wild West Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", + "sc2wwcl1", "Wild West Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", + "sc2wwcl1p", "Wild West Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", + "sc2wwclp", "Wild West Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", + "sc4a40", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 1)", + "sc4a40a", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 2)", + "sc4a40b", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 3)", + "sc4a40c", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 4)", + "sc4a40cl", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 1)", + "sc4a40cla", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 2)", + "sc4a40clb", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 3)", + "sc4a40clc", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 4)", + "sc4abra", "Abracadabra (Qps) (Scorpion 4) (set 1, 041)", + "sc4abraa", "Abracadabra (Qps) (Scorpion 4) (set 2, 041)", + "sc4abrab", "Abracadabra (Qps) (Scorpion 4) (set 3, 044)", + "sc4abrac", "Abracadabra (Qps) (Scorpion 4) (set 4, 044)", + "sc4abrad", "Abracadabra (Qps) (Scorpion 4) (set 5, 014)", + "sc4abrae", "Abracadabra (Qps) (Scorpion 4) (set 6, 014)", + "sc4acesh", "Aces High (Mazooma) (Scorpion 4) (set 1)", + "sc4acesha", "Aces High (Mazooma) (Scorpion 4) (set 2)", + "sc4aceshb", "Aces High (Mazooma) (Scorpion 4) (set 3)", + "sc4aceshc", "Aces High (Mazooma) (Scorpion 4) (set 4)", + "sc4adjb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 1)", + "sc4adjba", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 2)", + "sc4adjbb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 3)", + "sc4adjbc", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 4)", + "sc4adjbd", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 5)", + "sc4adjbe", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 6)", + "sc4adjbf", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 7)", + "sc4adjbg", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 8)", + "sc4adjbh", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 9)", + "sc4adjbi", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 10)", + "sc4adren", "Adrenalin (Mazooma) (Scorpion 4) (set 1)", + "sc4adrena", "Adrenalin (Mazooma) (Scorpion 4) (set 2)", + "sc4adrenb", "Adrenalin (Mazooma) (Scorpion 4) (set 3)", + "sc4adrenc", "Adrenalin (Mazooma) (Scorpion 4) (set 4)", + "sc4adsnt", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 4) (set 1)", + "sc4adsnta", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 4) (set 2)", + "sc4adwta", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 4) (set 1)", + "sc4adwtaa", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 4) (set 2)", + "sc4alad", "Aladdin's Cave (Mazooma) (Scorpion 4) (set 1)", + "sc4alada", "Aladdin's Cave (Mazooma) (Scorpion 4) (set 2)", + "sc4aztec", "Aztec Casino (Dutch) (Bellfruit) (Scorpion 4)", + "sc4azteca", "Aztec (Dutch) (Bellfruit) (Scorpion 4)", + "sc4bankb", "Bankety Bank (Qps) (Scorpion 4) (set 1)", + "sc4bankba", "Bankety Bank (Qps) (Scorpion 4) (set 2)", + "sc4bantm", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 1)", + "sc4bantma", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 2)", + "sc4bantmb", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 3)", + "sc4bantmc", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 4)", + "sc4bar7", "Bar 7's (PR1433) (Bellfruit) (Scorpion 4) (set 1)", + "sc4bar7a", "Bar 7's (PR1433) (Bellfruit) (Scorpion 4) (set 2)", + "sc4bar7b", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 1)", + "sc4bar7c", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 2)", + "sc4bar7d", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 3)", + "sc4bar7e", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 4)", + "sc4batl", "Battleships & Cruisers (Bellfruit) (Scorpion 4) (set 1)", + "sc4batla", "Battleships & Cruisers (Bellfruit) (Scorpion 4) (set 2)", + "sc4bb", "Bankety Bank (Qps) (Scorpion 4) (set 3)", + "sc4bba", "Bankety Bank (Qps) (Scorpion 4) (set 4)", + "sc4bbclb", "Bankety Bank Club (V1.0) (Qps) (Scorpion 4)", + "sc4bbclba", "Bankety Bank Club (V1.1) (Qps) (Scorpion 4)", + "sc4bbclbb", "Bankety Bank Club (V411) (Qps) (Scorpion 4) (set 1)", + "sc4bbclbc", "Bankety Bank Club (V411) (Qps) (Scorpion 4) (set 2)", + "sc4bblas", "Big Blaster (Mazooma) (Scorpion 4) (set 1)", + "sc4bblasa", "Big Blaster (Mazooma) (Scorpion 4) (set 2)", + "sc4bblasb", "Big Blaster (Mazooma) (Scorpion 4) (set 3)", + "sc4bblasc", "Big Blaster (Mazooma) (Scorpion 4) (set 4)", + "sc4bblasd", "Big Blaster (Mazooma) (Scorpion 4) (set 5)", + "sc4bblase", "Big Blaster (Mazooma) (Scorpion 4) (set 6)", + "sc4bblasf", "Big Blaster (Mazooma) (Scorpion 4) (set 7)", + "sc4bbust", "Blockbuster (Mazooma) (Scorpion 4)", + "sc4bed", "Bedazzled (Mazooma) (Scorpion 4) (set 1)", + "sc4beda", "Bedazzled (Mazooma) (Scorpion 4) (set 2)", + "sc4bedb", "Bedazzled (Mazooma) (Scorpion 4) (set 3)", + "sc4bedc", "Bedazzled (Mazooma) (Scorpion 4) (set 4)", + "sc4bedcl", "Bedazzled Club (Mazooma) (Scorpion 4) (set 1)", + "sc4bedcla", "Bedazzled Club (Mazooma) (Scorpion 4) (set 2)", + "sc4bedclb", "Bedazzled Club (Mazooma) (Scorpion 4) (set 3)", + "sc4bedclc", "Bedazzled Club (Mazooma) (Scorpion 4) (set 4)", + "sc4bedcld", "Bedazzled Club (Mazooma) (Scorpion 4) (set 5)", + "sc4bedd", "Bedazzled (Mazooma) (Scorpion 4) (set 5)", + "sc4bede", "Bedazzled (Mazooma) (Scorpion 4) (set 6)", + "sc4bgold", "Black Gold (Nova) (Scorpion 4) (set 1)", + "sc4bgolda", "Black Gold (Nova) (Scorpion 4) (set 2)", + "sc4bigdl", "Big Deal (Qps) (Scorpion 4) (set 1)", + "sc4bigdla", "Big Deal (Qps) (Scorpion 4) (set 2)", + "sc4bingb", "Bingo Belle (Mazooma) (Scorpion 4) (set 1)", + "sc4bingba", "Bingo Belle (Mazooma) (Scorpion 4) (set 2)", + "sc4blast", "Blast Off (011) (Qps) (Scorpion 4) (set 1)", + "sc4blasta", "Blast Off (041) (Qps) (Scorpion 4) (set 1)", + "sc4blastb", "Blast Off (011) (Qps) (Scorpion 4) (set 2)", + "sc4blastc", "Blast Off (041) (Qps) (Scorpion 4) (set 2)", + "sc4blastd", "Blast Off (042) (Qps) (Scorpion 4) (set 1)", + "sc4blaste", "Blast Off (042) (Qps) (Scorpion 4) (set 2)", + "sc4blokq", "Blockbuster (Qps) (Scorpion 4) (set 1)", + "sc4blokqa", "Blockbuster (Qps) (Scorpion 4) (set 2)", + "sc4blokqb", "Blockbuster (Qps) (Scorpion 4) (set 3)", + "sc4blokqc", "Blockbuster (Qps) (Scorpion 4) (set 4)", + "sc4blokqd", "Blockbuster (Qps) (Scorpion 4) (set 5)", + "sc4blokqe", "Blockbuster (Qps) (Scorpion 4) (set 6)", + "sc4blue", "Blue Rinse (Mazooma) (Scorpion 4) (set 1)", + "sc4bluea", "Blue Rinse (Mazooma) (Scorpion 4) (set 2)", + "sc4blueb", "Blue Rinse (Mazooma) (Scorpion 4) (set 3)", + "sc4bluec", "Blue Rinse (Mazooma) (Scorpion 4) (set 4)", + "sc4blued", "Blue Rinse (Mazooma) (Scorpion 4) (set 5)", + "sc4bluee", "Blue Rinse (Mazooma) (Scorpion 4) (set 6)", + "sc4bob", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 1)", + "sc4boba", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 2)", + "sc4bobb", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 3)", + "sc4bobc", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 4)", + "sc4bobcl", "Bobby Dazzler Club (Mazooma) (Scorpion 4) (set 1)", + "sc4bobcla", "Bobby Dazzler Club (Mazooma) (Scorpion 4) (set 2)", + "sc4bobd", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 5)", + "sc4bobe", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 6)", + "sc4bobf", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 7)", + "sc4bobg", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 8)", + "sc4bobh", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 9)", + "sc4bobi", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 10)", + "sc4bonbx", "Bar X (Mazooma) (Scorpion 4) (set 1)", + "sc4bonbxa", "Bar X (Mazooma) (Scorpion 4) (set 6)", + "sc4bonbxb", "Bar X (Mazooma) (Scorpion 4) (set 7)", + "sc4bonbxc", "Bar X (Mazooma) (Scorpion 4) (set 2)", + "sc4bonbxd", "Bar X (Mazooma) (Scorpion 4) (set 3)", + "sc4bonbxe", "Bar X (Mazooma) (Scorpion 4) (set 4)", + "sc4bonbxf", "Bar X (Mazooma) (Scorpion 4) (set 5)", + "sc4bonbxg", "Bar X (Mazooma) (Scorpion 4) (set 8)", + "sc4bonbxh", "Bar X (Mazooma) (Scorpion 4) (set 9)", + "sc4bonbxi", "Bar X (Mazooma) (Scorpion 4) (set 10)", + "sc4bonbxj", "Bar X (Mazooma) (Scorpion 4) (set 11)", + "sc4bonbxk", "Bar X (Mazooma) (Scorpion 4) (set 12)", + "sc4bonbxl", "Bar X (Mazooma) (Scorpion 4) (set 13)", + "sc4boomb", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 4) (set 1)", + "sc4boomba", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 4) (set 2)", + "sc4botn", "Back Of The Net (Qps) (Scorpion 4) (set 1, 011)", + "sc4botna", "Back Of The Net (Qps) (Scorpion 4) (set 2, 011)", + "sc4bpb", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 1)", + "sc4bpba", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 3)", + "sc4bpbb", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 4)", + "sc4bpbc", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 2)", + "sc4bpbd", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 5)", + "sc4bpbe", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 6)", + "sc4brix", "Brix (German) (Nova) (Scorpion 4) (set 1)", + "sc4brixa", "Brix (German) (Nova) (Scorpion 4) (set 2)", + "sc4brixb", "Brix (German) (Nova) (Scorpion 4) (set 3)", + "sc4brkfs", "The Big Breakfast (BFM) (Scorpion 4) (set 1)", + "sc4brkfsa", "The Big Breakfast (BFM) (Scorpion 4) (set 2)", + "sc4brkfsb", "The Big Breakfast (BFM) (Scorpion 4) (set 3)", + "sc4brkfsc", "The Big Breakfast (BFM) (Scorpion 4) (set 4)", + "sc4brksp", "Break The Spell (Mazooma) (Scorpion 4) (set 1)", + "sc4brkspa", "Break The Spell (Mazooma) (Scorpion 4) (set 2)", + "sc4broll", "Bank Roll (Mazooma) (Scorpion 4) (set 1)", + "sc4brolla", "Bank Roll (Mazooma) (Scorpion 4) (set 2)", + "sc4brollb", "Bank Roll (Mazooma) (Scorpion 4) (set 3)", + "sc4brollc", "Bank Roll (Mazooma) (Scorpion 4) (set 4)", + "sc4bsp", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 1)", + "sc4bspa", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 2)", + "sc4bspb", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 3)", + "sc4bspc", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 4)", + "sc4bspd", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 5)", + "sc4bspe", "Bully's Star Prize (PR3042) (Bellfruit) (Scorpion 4) (set 1)", + "sc4bspf", "Bully's Star Prize (PR3042) (Bellfruit) (Scorpion 4) (set 2)", + "sc4bspg", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 6)", + "sc4bugs", "Bugs Money (Bellfruit) (Scorpion 4) (set 1)", + "sc4bugsa", "Bugs Money (Bellfruit) (Scorpion 4) (set 2)", + "sc4bugsb", "Bugs Money (Bellfruit) (Scorpion 4) (set 3)", + "sc4bugsc", "Bugs Money (Bellfruit) (Scorpion 4) (set 4)", + "sc4bulcl", "Bullseye Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4bulcla", "Bullseye Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4bulclb", "Bullseye Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4bulclc", "Bullseye Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4bulcld", "Bullseye Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4bulcle", "Bullseye Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4bulclf", "Bullseye Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4bulclg", "Bullseye Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4bulclh", "Bullseye Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4bulcli", "Bullseye Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4bulcs", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 1)", + "sc4bulcsa", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 2)", + "sc4bulcsb", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 3)", + "sc4bulcsc", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 4)", + "sc4bull", "Bullseye (Bellfruit) (Scorpion 4) (set 1)", + "sc4bulla", "Bullseye (Bellfruit) (Scorpion 4) (set 2)", + "sc4bullb", "Bullseye (Bellfruit) (Scorpion 4) (set 3)", + "sc4bullc", "Bullseye (Bellfruit) (Scorpion 4) (set 4)", + "sc4butch", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 1)", + "sc4butcha", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 2)", + "sc4butchb", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 3)", + "sc4butchc", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 4)", + "sc4butchd", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 5)", + "sc4butche", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 6)", + "sc4butchf", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 7)", + "sc4butchg", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 8)", + "sc4bwow", "Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 1)", + "sc4bwowa", "Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 2)", + "sc4cabin", "Cabin Fever (Mazooma) (Scorpion 4) (set 1)", + "sc4cabina", "Cabin Fever (Mazooma) (Scorpion 4) (set 2)", + "sc4cabinb", "Cabin Fever (Mazooma) (Scorpion 4) (set 3)", + "sc4cabinc", "Cabin Fever (Mazooma) (Scorpion 4) (set 4)", + "sc4cabind", "Cabin Fever (Mazooma) (Scorpion 4) (set 5)", + "sc4cabine", "Cabin Fever (Mazooma) (Scorpion 4) (set 6)", + "sc4cabinf", "Cabin Fever (Mazooma) (Scorpion 4) (set 7)", + "sc4cabing", "Cabin Fever (Mazooma) (Scorpion 4) (set 8)", + "sc4cabinh", "Cabin Fever (Mazooma) (Scorpion 4) (set 9)", + "sc4cabini", "Cabin Fever (Mazooma) (Scorpion 4) (set 10)", + "sc4cabinj", "Cabin Fever (Mazooma) (Scorpion 4) (set 11)", + "sc4cabink", "Cabin Fever (Mazooma) (Scorpion 4) (set 12)", + "sc4cabinl", "Cabin Fever (Mazooma) (Scorpion 4) (set 13)", + "sc4cabinm", "Cabin Fever (Mazooma) (Scorpion 4) (set 14)", + "sc4cad", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 1)", + "sc4cada", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 2)", + "sc4cadb", "Cash Adder (V011) (Qps) (Scorpion 4) (set 1)", + "sc4cadc", "Cash Adder (V041) (Qps) (Scorpion 4) (set 1)", + "sc4cadcl", "Cash Adder Club (411) (Qps) (Scorpion 4) (set 1)", + "sc4cadcla", "Cash Adder Club (411) (Qps) (Scorpion 4) (set 2)", + "sc4cadd", "Cash Adder (V012) (Qps) (Scorpion 4) (set 1)", + "sc4cade", "Cash Adder (V042) (Qps) (Scorpion 4) (set 1)", + "sc4cadf", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 3)", + "sc4cadg", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 4)", + "sc4cadh", "Cash Adder (V011) (Qps) (Scorpion 4) (set 2)", + "sc4cadi", "Cash Adder (V041) (Qps) (Scorpion 4) (set 2)", + "sc4cadj", "Cash Adder (V012) (Qps) (Scorpion 4) (set 2)", + "sc4cadk", "Cash Adder (V042) (Qps) (Scorpion 4) (set 2)", + "sc4cadl", "Cash Adder (V013) (Qps) (Scorpion 4) (set 1)", + "sc4cadm", "Cash Adder (V013) (Qps) (Scorpion 4) (set 2)", + "sc4cadn", "Cash Adder (V014) (Qps) (Scorpion 4) (set 1)", + "sc4cado", "Cash Adder (V043) (Qps) (Scorpion 4) (set 1)", + "sc4cadp", "Cash Adder (V014) (Qps) (Scorpion 4) (set 2)", + "sc4cadq", "Cash Adder (V043) (Qps) (Scorpion 4) (set 2)", + "sc4canca", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 1)", + "sc4cancaa", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 2)", + "sc4cancab", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 3)", + "sc4cancac", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 4)", + "sc4captn", "Captain Cash (Qps) (Scorpion 4) (set 1)", + "sc4captna", "Captain Cash (Qps) (Scorpion 4) (set 4)", + "sc4captnb", "Captain Cash (Qps) (Scorpion 4) (set 2)", + "sc4captnc", "Captain Cash (Qps) (Scorpion 4) (set 3)", + "sc4captnd", "Captain Cash (Qps) (Scorpion 4) (set 5)", + "sc4captne", "Captain Cash (Qps) (Scorpion 4) (set 6)", + "sc4captnf", "Captain Cash (Qps) (Scorpion 4) (set 7)", + "sc4cari", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 1)", + "sc4caria", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 2)", + "sc4carib", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 3)", + "sc4caric", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 4)", + "sc4carid", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 5)", + "sc4carie", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 6)", + "sc4cariq", "Caribbean Cash (Qps) (Scorpion 4) (set 1)", + "sc4cariqa", "Caribbean Cash (Qps) (Scorpion 4) (set 2)", + "sc4cariqb", "Caribbean Cash (Qps) (Scorpion 4) (set 3)", + "sc4cariqc", "Caribbean Cash (Qps) (Scorpion 4) (set 4)", + "sc4cariqd", "Caribbean Cash (Qps) (Scorpion 4) (set 5)", + "sc4cariqe", "Caribbean Cash (Qps) (Scorpion 4) (set 6)", + "sc4cariqf", "Caribbean Cash (Qps) (Scorpion 4) (set 7)", + "sc4cariqg", "Caribbean Cash (Qps) (Scorpion 4) (set 8)", + "sc4carry", "Carry On Winning (Bellfruit) (Scorpion 4) (set 1)", + "sc4carrya", "Carry On Winning (Bellfruit) (Scorpion 4) (set 2)", + "sc4cashg", "Cashanova (German) (Mazooma / Nova) (Scorpion 4)", + "sc4cashm", "Cashanova (Mazooma) (Scorpion 4) (set 1)", + "sc4cashma", "Cashanova (Mazooma) (Scorpion 4) (set 2)", + "sc4cashmb", "Cashanova (Mazooma) (Scorpion 4) (set 3)", + "sc4cashmc", "Cashanova (Mazooma) (Scorpion 4) (set 4)", + "sc4cashmd", "Cashanova (Mazooma) (Scorpion 4) (set 5)", + "sc4cashme", "Cashanova (Mazooma) (Scorpion 4) (set 6)", + "sc4cashn", "Cashanova (Dutch) (Mazooma / Eurocoin) (Scorpion 4)", + "sc4casry", "Casino Royale (PR2062) (Mazooma) (Scorpion 4) (set 1)", + "sc4casrya", "Casino Royale (PR2073) (Czech) (Mazooma) (Scorpion 4) (set 1)", + "sc4casryb", "Casino Royale (PR2073) (Czech) (Mazooma) (Scorpion 4) (set 2)", + "sc4casryc", "Casino Royale (PR2062) (Mazooma) (Scorpion 4) (set 2)", + "sc4casryd", "Casino Royale (PR2075) (Mazooma) (Scorpion 4) (set 1)", + "sc4casrye", "Casino Royale (PR2075) (Mazooma) (Scorpion 4) (set 2)", + "sc4casxt", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 1)", + "sc4casxta", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 2)", + "sc4casxtb", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 3)", + "sc4casxtc", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 4)", + "sc4casxtd", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 5)", + "sc4casxte", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 6)", + "sc4cbaz", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4cbaza", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4cbazb", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4cbazc", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4cbazd", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4cbaze", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4cbazf", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4cbazg", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4cbazh", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4cbazi", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4cbazj", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 11)", + "sc4cbazk", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 12)", + "sc4cblas", "Cash Blast (Voodoo Games) (Scorpion 4) (set 1)", + "sc4cblasa", "Cash Blast (Voodoo Games) (Scorpion 4) (set 2)", + "sc4cburn", "Cash 'n' Burn (Qps) (Scorpion 4) (set 1)", + "sc4cburna", "Cash 'n' Burn (Qps) (Scorpion 4) (set 2)", + "sc4ccc", "Criss Cross Crazy (Dutch) (Bellfruit) (Scorpion 4)", + "sc4cccsh", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 1)", + "sc4cccsha", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 2)", + "sc4cccshb", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 3)", + "sc4cccshc", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 4)", + "sc4cccshd", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 5)", + "sc4cccshe", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 6)", + "sc4cckey", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 1)", + "sc4cckeya", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 2)", + "sc4cckeyb", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 3)", + "sc4cckeyc", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 4)", + "sc4cckeyd", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 5)", + "sc4cckeye", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 6)", + "sc4cckeyf", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 7)", + "sc4cckeyg", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 8)", + "sc4cckeyh", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 9)", + "sc4cckeyi", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 11)", + "sc4cckeyj", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 10)", + "sc4cckeyk", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 12)", + "sc4cckeyl", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 13)", + "sc4cckeym", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 14)", + "sc4cckeyn", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 15)", + "sc4cckeyo", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 16)", + "sc4cclas", "Club Class (Bellfruit) (Scorpion 4) (set 1)", + "sc4cclas0", "Club Class (Bellfruit) (Scorpion 4) (set 24)", + "sc4cclas1", "Club Class (Bellfruit) (Scorpion 4) (set 25)", + "sc4cclas2", "Club Class (Bellfruit) (Scorpion 4) (set 26)", + "sc4cclas3", "Club Class (Bellfruit) (Scorpion 4) (set 27)", + "sc4cclas4", "Club Class (Bellfruit) (Scorpion 4) (set 28)", + "sc4cclasa", "Club Class (Bellfruit) (Scorpion 4) (set 2)", + "sc4cclasb", "Club Class (Bellfruit) (Scorpion 4) (set 3)", + "sc4cclasc", "Club Class (Bellfruit) (Scorpion 4) (set 4)", + "sc4cclasd", "Club Class (Bellfruit) (Scorpion 4) (set 5)", + "sc4cclase", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 1)", + "sc4cclasf", "Club Class (Bellfruit) (Scorpion 4) (set 6)", + "sc4cclasg", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 2)", + "sc4cclash", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 3)", + "sc4cclasi", "Club Class (Bellfruit) (Scorpion 4) (set 7)", + "sc4cclasj", "Club Class (Bellfruit) (Scorpion 4) (set 8)", + "sc4cclask", "Club Class (Bellfruit) (Scorpion 4) (set 9)", + "sc4cclasl", "Club Class (Bellfruit) (Scorpion 4) (set 10)", + "sc4cclasm", "Club Class (Bellfruit) (Scorpion 4) (set 11)", + "sc4cclasn", "Club Class (Bellfruit) (Scorpion 4) (set 12)", + "sc4cclaso", "Club Class (Bellfruit) (Scorpion 4) (set 13)", + "sc4cclasp", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 4)", + "sc4cclasq", "Club Class (Bellfruit) (Scorpion 4) (set 14)", + "sc4cclasr", "Club Class (Bellfruit) (Scorpion 4) (set 15)", + "sc4cclass", "Club Class (Bellfruit) (Scorpion 4) (set 16)", + "sc4cclast", "Club Class (Bellfruit) (Scorpion 4) (set 17)", + "sc4cclasu", "Club Class (Bellfruit) (Scorpion 4) (set 18)", + "sc4cclasv", "Club Class (Bellfruit) (Scorpion 4) (set 19)", + "sc4cclasw", "Club Class (Bellfruit) (Scorpion 4) (set 20)", + "sc4cclasx", "Club Class (Bellfruit) (Scorpion 4) (set 21)", + "sc4cclasy", "Club Class (Bellfruit) (Scorpion 4) (set 22)", + "sc4cclasz", "Club Class (Bellfruit) (Scorpion 4) (set 23)", + "sc4cclim", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 1)", + "sc4cclima", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 2)", + "sc4cclimb", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 3)", + "sc4cclimc", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 4)", + "sc4cclimd", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 5)", + "sc4cclime", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 13)", + "sc4cclimf", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 14)", + "sc4cclimg", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 15)", + "sc4cclimh", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 6)", + "sc4cclimi", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 7)", + "sc4cclimj", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 16)", + "sc4cclimk", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 17)", + "sc4ccliml", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 18)", + "sc4cclimm", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 8)", + "sc4cclimn", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 9)", + "sc4cclimo", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 10)", + "sc4cclimp", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 11)", + "sc4cclimq", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 19)", + "sc4cclimr", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 20)", + "sc4cclims", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 12)", + "sc4cclimt", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 21)", + "sc4cclimu", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 22)", + "sc4ccogs", "Clever Cogs (Qps) (Scorpion 4)", + "sc4cconx", "Cash Connexion (Mazooma) (Scorpion 4) (set 1)", + "sc4cconxa", "Cash Connexion (Mazooma) (Scorpion 4) (set 2)", + "sc4cconxb", "Cash Connexion (Mazooma) (Scorpion 4) (set 3)", + "sc4cconxc", "Cash Connexion (Mazooma) (Scorpion 4) (set 4)", + "sc4cconxd", "Cash Connexion (Mazooma) (Scorpion 4) (set 5)", + "sc4ccrus", "Cash Crusaders (Mazooma) (Scorpion 4) (set 1)", + "sc4ccrusa", "Cash Crusaders (Mazooma) (Scorpion 4) (set 2)", + "sc4ccrusb", "Cash Crusaders (Mazooma) (Scorpion 4) (set 3)", + "sc4celeb", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 1)", + "sc4celeba", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 2)", + "sc4celebb", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 3)", + "sc4celebc", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 4)", + "sc4celebd", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 5)", + "sc4cerup", "Cash Eruption (Mazooma) (Scorpion 4)", + "sc4cexpl", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 1)", + "sc4cexpla", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 2)", + "sc4cexplb", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 3)", + "sc4cexplc", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 4)", + "sc4cexpld", "Cash Explosion (PR2120) (Mazooma) (Scorpion 4) (set 1)", + "sc4cexple", "Cash Explosion (PR2120) (Mazooma) (Scorpion 4) (set 2)", + "sc4cexplf", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 5)", + "sc4cexplg", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 6)", + "sc4cfcas", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfcas0", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 18)", + "sc4cfcas1", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 19)", + "sc4cfcas2", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 20)", + "sc4cfcas3", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 9)", + "sc4cfcas4", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfcas5", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfcas6", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 21)", + "sc4cfcas7", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 22)", + "sc4cfcas8", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 23)", + "sc4cfcas9", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 10)", + "sc4cfcasa", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfcasaa", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 24)", + "sc4cfcasab", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 11)", + "sc4cfcasac", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 12)", + "sc4cfcasad", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfcasae", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 4)", + "sc4cfcasaf", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 25)", + "sc4cfcasag", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 26)", + "sc4cfcasah", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 27)", + "sc4cfcasai", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 28)", + "sc4cfcasaj", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 29)", + "sc4cfcasak", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 30)", + "sc4cfcasal", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 31)", + "sc4cfcasam", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 32)", + "sc4cfcasb", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfcasc", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 5)", + "sc4cfcasd", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 6)", + "sc4cfcase", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 4)", + "sc4cfcasf", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 5)", + "sc4cfcasg", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 7)", + "sc4cfcash", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 8)", + "sc4cfcasi", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfcasj", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfcask", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 6)", + "sc4cfcasl", "Casino Crazy Fruits (ZYPF) (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfcasm", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 7)", + "sc4cfcasn", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfcaso", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 4)", + "sc4cfcasp", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 8)", + "sc4cfcasq", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 9)", + "sc4cfcasr", "Casino Crazy Fruits (ZYPF) (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfcass", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 10)", + "sc4cfcast", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 11)", + "sc4cfcasu", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 12)", + "sc4cfcasv", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 13)", + "sc4cfcasw", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 14)", + "sc4cfcasx", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 15)", + "sc4cfcasy", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 16)", + "sc4cfcasz", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 17)", + "sc4cfcla", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfclab", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfclac", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfclad", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 4)", + "sc4cfclae", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 5)", + "sc4cfclaf", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 6)", + "sc4cfclb", "Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfclba", "Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfclbb", "Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfdu", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfdua", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfdub", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfduc", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 4)", + "sc4cfgcl", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4cfgcla", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4cfgclb", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4cfgclc", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4cfqps", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 1)", + "sc4cfqpsa", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 4)", + "sc4cfqpsb", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 2)", + "sc4cfqpsc", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 1)", + "sc4cfqpsd", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 3)", + "sc4cfqpse", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 2)", + "sc4cfqpsf", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 3)", + "sc4cfqpsg", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 4)", + "sc4cfqpsh", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 5)", + "sc4cfqpsi", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 6)", + "sc4cfqpsj", "Crazy Fruits SP98 (PR4613) (Qps) (Scorpion 4)", + "sc4cfqpsk", "Crazy Fruits (PR6813, CCAS) (Qps) (Scorpion 4) (set 1)", + "sc4cfqpsl", "Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 1)", + "sc4cfqpsm", "Crazy Fruits SP98 (PR4613) (BFM / Whitbread) (Scorpion 4) (set 1)", + "sc4cfqpsn", "Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 2)", + "sc4cfqpso", "Crazy Fruits SP98 (PR4613) (BFM / Whitbread) (Scorpion 4) (set 2)", + "sc4cfqpsp", "Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 3)", + "sc4chain", "Chain Reaction (Bellfruit) (Scorpion 4) (set 1)", + "sc4chaina", "Chain Reaction (Bellfruit) (Scorpion 4) (set 2)", + "sc4chainb", "Chain Reaction (Bellfruit) (Scorpion 4) (set 3)", + "sc4chainc", "Chain Reaction (Bellfruit) (Scorpion 4) (set 4)", + "sc4chand", "Cash In Hand (Bellfruit) (Scorpion 4) (set 1)", + "sc4chanda", "Cash In Hand (Bellfruit) (Scorpion 4) (set 2)", + "sc4chandb", "Cash In Hand (Bellfruit) (Scorpion 4) (set 3)", + "sc4chandc", "Cash In Hand (Bellfruit) (Scorpion 4) (set 4)", + "sc4chavi", "Chav It (Bellfruit) (Scorpion 4) (set 1)", + "sc4chavia", "Chav It (Bellfruit) (Scorpion 4) (set 2)", + "sc4chavib", "Chav It (Bellfruit) (Scorpion 4) (set 3)", + "sc4chavic", "Chav It (Bellfruit) (Scorpion 4) (set 4)", + "sc4chavid", "Chav It (Bellfruit) (Scorpion 4) (set 5)", + "sc4chavie", "Chav It (Bellfruit) (Scorpion 4) (set 6)", + "sc4chavif", "Chav It (Bellfruit) (Scorpion 4) (set 7)", + "sc4chavig", "Chav It (Bellfruit) (Scorpion 4) (set 8)", + "sc4chavy", "Chavy Chase (Mazooma) (Scorpion 4) (set 1)", + "sc4chavya", "Chavy Chase (Mazooma) (Scorpion 4) (set 2)", + "sc4chavyb", "Chavy Chase (Mazooma) (Scorpion 4) (set 3)", + "sc4chavyc", "Chavy Chase (Mazooma) (Scorpion 4) (set 4)", + "sc4chavyd", "Chavy Chase (Mazooma) (Scorpion 4) (set 5)", + "sc4chavye", "Chavy Chase (Mazooma) (Scorpion 4) (set 6)", + "sc4chavyf", "Chavy Chase (Mazooma) (Scorpion 4) (set 7)", + "sc4chavyg", "Chavy Chase (Mazooma) (Scorpion 4) (set 8)", + "sc4chick", "Chickendales (Mazooma) (Scorpion 4)", + "sc4chub", "Chubby Does Vegas (Mazooma) (Scorpion 4) (set 1)", + "sc4chuba", "Chubby Does Vegas (Mazooma) (Scorpion 4) (set 2)", + "sc4chubb", "Chubby Does Vegas (Mazooma) (Scorpion 4) (set 3)", + "sc4cinv", "Cash Invaders (Bellfruit) (Scorpion 4) (set 1)", + "sc4cinva", "Cash Invaders (Bellfruit) (Scorpion 4) (set 2)", + "sc4cinvb", "Cash Invaders (Bellfruit) (Scorpion 4) (set 3)", + "sc4cinvc", "Cash Invaders (Bellfruit) (Scorpion 4) (set 4)", + "sc4cinvd", "Cash Invaders (Bellfruit) (Scorpion 4) (set 5)", + "sc4cinve", "Cash Invaders (Bellfruit) (Scorpion 4) (set 6)", + "sc4cinvf", "Cash Invaders (Bellfruit) (Scorpion 4) (set 7)", + "sc4cinvg", "Cash Invaders (Bellfruit) (Scorpion 4) (set 8)", + "sc4cinvh", "Cash Invaders (Bellfruit) (Scorpion 4) (set 9)", + "sc4cinvi", "Cash Invaders (Bellfruit) (Scorpion 4) (set 10)", + "sc4cj", "Cool Jewels (Bellfruit) (Scorpion 4) (set 1)", + "sc4cja", "Cool Jewels (Bellfruit) (Scorpion 4) (set 2)", + "sc4cjb", "Cool Jewels (Bellfruit) (Scorpion 4) (set 3)", + "sc4cjc", "Cool Jewels (Bellfruit) (Scorpion 4) (set 4)", + "sc4cjcl", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4cjcla", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4cjclb", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4cjclc", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4cjcld", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4cjcle", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4cjclf", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4cjd", "Cool Jewels (Bellfruit) (Scorpion 4) (set 5)", + "sc4ckx", "Casino King X (Mazooma) (Scorpion 4) (Top Box, set 1)", + "sc4ckxa", "Casino King X (Mazooma) (Scorpion 4) (Base, set 1)", + "sc4ckxb", "Casino King X (Mazooma) (Scorpion 4) (Base, set 2)", + "sc4ckxc", "Casino King X (Mazooma) (Scorpion 4) (Base, set 3)", + "sc4ckxd", "Casino King X (Mazooma) (Scorpion 4) (Top Box, set 2)", + "sc4ckxe", "Casino King X (Mazooma) (Scorpion 4) (Base, set 4)", + "sc4ckxf", "Casino King X (Mazooma) (Scorpion 4) (Base, set 5)", + "sc4ckxg", "Casino King X (Mazooma) (Scorpion 4) (Base, set 6)", + "sc4cla7", "Classic 7s (Mazooma) (Scorpion 4) (set 1)", + "sc4cla7a", "Classic 7s (Mazooma) (Scorpion 4) (set 2)", + "sc4cla7b", "Classic 7s (Mazooma) (Scorpion 4) (set 3)", + "sc4cla7c", "Classic 7s (Mazooma) (Scorpion 4) (set 4)", + "sc4clash", "Cash On The Lash (Mazooma) (Scorpion 4) (set 1)", + "sc4clasha", "Cash On The Lash (Mazooma) (Scorpion 4) (set 2)", + "sc4clashb", "Cash On The Lash (Mazooma) (Scorpion 4) (set 3)", + "sc4clashc", "Cash On The Lash (Mazooma) (Scorpion 4) (set 4)", + "sc4clashd", "Cash On The Lash (Mazooma) (Scorpion 4) (set 5)", + "sc4clashe", "Cash On The Lash (Mazooma) (Scorpion 4) (set 6)", + "sc4clashf", "Cash On The Lash (Mazooma) (Scorpion 4) (set 7)", + "sc4clashg", "Cash On The Lash (Mazooma) (Scorpion 4) (set 8)", + "sc4clbmn", "Club Moneybags (Bellfruit) (Scorpion 4) (set 1)", + "sc4clbmna", "Club Moneybags (Bellfruit) (Scorpion 4) (set 2)", + "sc4clbmnb", "Club Moneybags (Bellfruit) (Scorpion 4) (set 3)", + "sc4clbmnc", "Club Moneybags (Bellfruit) (Scorpion 4) (set 4)", + "sc4clbtm", "Club Temptation (Bellfruit) (Scorpion 4) (set 1)", + "sc4clbtma", "Club Temptation (Bellfruit) (Scorpion 4) (set 2)", + "sc4clbtmb", "Club Temptation (Bellfruit) (Scorpion 4) (set 3)", + "sc4clbtmc", "Club Temptation (Bellfruit) (Scorpion 4) (set 4)", + "sc4clbtmd", "Club Temptation (Bellfruit) (Scorpion 4) (set 5)", + "sc4clbtme", "Club Temptation (Bellfruit) (Scorpion 4) (set 6)", + "sc4clclo", "Club Clouseau (QPS) (Scorpion 4)", + "sc4clown", "Clown Around (Bellfruit) (Scorpion 4) (set 1)", + "sc4clowna", "Clown Around (Bellfruit) (Scorpion 4) (set 2)", + "sc4clownb", "Clown Around (Bellfruit) (Scorpion 4) (set 3)", + "sc4clownc", "Clown Around (Bellfruit) (Scorpion 4) (set 4)", + "sc4clownd", "Clown Around (Bellfruit) (Scorpion 4) (set 5)", + "sc4clowne", "Clown Around (Bellfruit) (Scorpion 4) (set 6)", + "sc4clownf", "Clown Around (Bellfruit) (Scorpion 4) (set 7)", + "sc4clowng", "Clown Around (Bellfruit) (Scorpion 4) (set 8)", + "sc4clucl", "Cluedo Club (Mazooma) (Scorpion 4) (set 1)", + "sc4clucla", "Cluedo Club (Mazooma) (Scorpion 4) (set 2)", + "sc4clue", "Cluedo (Mazooma) (Scorpion 4) (set 1)", + "sc4cluea", "Cluedo (Mazooma) (Scorpion 4) (set 2)", + "sc4clueb", "Cluedo (Mazooma) (Scorpion 4) (set 3)", + "sc4cluec", "Cluedo (Mazooma) (Scorpion 4) (set 4)", + "sc4clued", "Cluedo (Mazooma) (Scorpion 4) (set 5)", + "sc4cluee", "Cluedo (Mazooma) (Scorpion 4) (set 6)", + "sc4cluef", "Cluedo (Mazooma) (Scorpion 4) (set 7)", + "sc4clueg", "Cluedo (Mazooma) (Scorpion 4) (set 8)", + "sc4cmani", "Colour Mania (Bellfruit) (Scorpion 4) (set 1)", + "sc4cmania", "Colour Mania (Bellfruit) (Scorpion 4) (set 2)", + "sc4cmon", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 1)", + "sc4cmona", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 2)", + "sc4cmonb", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 3)", + "sc4cmonc", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 4)", + "sc4cmond", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 5)", + "sc4cmone", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 6)", + "sc4cmonf", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 7)", + "sc4cmong", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 8)", + "sc4cmonh", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 9)", + "sc4cmoni", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 10)", + "sc4cmous", "Cash & Mouse (V041) (Qps) (Scorpion 4) (set 1)", + "sc4cmousa", "Cash & Mouse (V011) (Qps) (Scorpion 4) (set 1)", + "sc4cmousb", "Cash & Mouse (V041) (Qps) (Scorpion 4) (set 2)", + "sc4cmousc", "Cash & Mouse (V011) (Qps) (Scorpion 4) (set 2)", + "sc4cnfr", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 1)", + "sc4cnfra", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 2)", + "sc4cnfrb", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 3)", + "sc4cnfrc", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 1)", + "sc4cnfrd", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 2)", + "sc4cnfre", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 4)", + "sc4cnfrf", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 5)", + "sc4cnfrg", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 6)", + "sc4cnfrh", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 3)", + "sc4cnfri", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 4)", + "sc4colos", "Colossus (Dutch) (Bellfruit) (Scorpion 4)", + "sc4copsr", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 1)", + "sc4copsra", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 2)", + "sc4copsrb", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 3)", + "sc4copsrc", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 4)", + "sc4copsrd", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 5)", + "sc4copsre", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 6)", + "sc4copsrf", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 7)", + "sc4copsrg", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 8)", + "sc4copsrh", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 9)", + "sc4copsri", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 10)", + "sc4corcl", "Coronation Street Club (Mazooma) (Scorpion 4) (set 1)", + "sc4corcla", "Coronation Street Club (Mazooma) (Scorpion 4) (set 2)", + "sc4coro", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 1)", + "sc4coroa", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 2)", + "sc4coroc", "Coronation Street Triple (Arcade Version 012) (PR2249) (Mazooma) (Scorpion 4) (set 1)", + "sc4corod", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 4) (set 1)", + "sc4corof", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 3)", + "sc4corog", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 4)", + "sc4coroh", "Coronation Street Triple (Arcade Version 012) (PR2249) (Mazooma) (Scorpion 4) (set 2)", + "sc4coroi", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 4) (set 2)", + "sc4coroj", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 5)", + "sc4corok", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 6)", + "sc4corol", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 7)", + "sc4corom", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 8)", + "sc4coron", "Coronation Street Triple (Bingo Version ?1) (PR2?4?) (Mazooma) (Scorpion 4)", + "sc4corotb", "Coronation Street Triple Top Box (PR2526, CSTB) (Mazooma) (Scorpion 4) (Top Box, set 1)", + "sc4corotba", "Coronation Street Triple Top Box (PR2526, CSTB) (Mazooma) (Scorpion 4) (Top Box, set 2)", + "sc4count", "Countdown (Bellfruit) (Scorpion 4) (set 1)", + "sc4counta", "Countdown (Bellfruit) (Scorpion 4) (set 2)", + "sc4cr", "Cash Raker (Qps) (Scorpion 4) (set 1)", + "sc4cra", "Cash Raker (Qps) (Scorpion 4) (set 2)", + "sc4crb", "Cash Raker (Qps) (Scorpion 4) (set 3)", + "sc4crc", "Cash Raker (V2.1) (Qps) (Scorpion 4) (set 1)", + "sc4crcc", "Cops 'n' Robbers Club Classic (Bellfruit) (Scorpion 4) (set 1)", + "sc4crcca", "Cops 'n' Robbers Club Classic (Bellfruit) (Scorpion 4) (set 2)", + "sc4crccb", "Cops 'n' Robbers Club Classic (65%) (Bellfruit) (Scorpion 4) (set 1)", + "sc4crccc", "Cops 'n' Robbers Club Classic (65%) (Bellfruit) (Scorpion 4) (set 2)", + "sc4crcl", "Cash Raker Club (V1.0) (Qps) (Scorpion 4) (set 1)", + "sc4crcla", "Cash Raker Club (V1.1) (Qps) (Scorpion 4) (set 1)", + "sc4crclb", "Cash Raker Club (V1.0) (Qps) (Scorpion 4) (set 2)", + "sc4crclc", "Cash Raker Club (V1.1) (Qps) (Scorpion 4) (set 2)", + "sc4crcld", "Cash Raker Club (V1.3) (Qps) (Scorpion 4)", + "sc4crcle", "Cash Raker Club (411) (Qps) (Scorpion 4) (set 1)", + "sc4crclf", "Cash Raker Club (411) (Qps) (Scorpion 4) (set 2)", + "sc4crcp", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 1)", + "sc4crcpa", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 2)", + "sc4crcpc", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 3)", + "sc4crcpd", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 4)", + "sc4crcpe", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 5)", + "sc4crcpf", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 6)", + "sc4crcpg", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 7)", + "sc4crcph", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 8)", + "sc4crcpi", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 9)", + "sc4crcpj", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 10)", + "sc4crd", "Cash Raker (V2.2) (Qps) (Scorpion 4) (set 1)", + "sc4cre", "Cash Raker (V2.1) (Qps) (Scorpion 4) (set 2)", + "sc4crf", "Cash Raker (V2.2) (Qps) (Scorpion 4) (set 2)", + "sc4crgc", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4crgca", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4crgcb", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4crgcc", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4crgcd", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4crgce", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4crgcf", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4crgcg", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4crgch", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4crgci", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4crgcj", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 11)", + "sc4crgck", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 12)", + "sc4crgcl", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 13)", + "sc4crgcm", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 14)", + "sc4crgcn", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 19)", + "sc4crgco", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 15)", + "sc4crgcp", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 20)", + "sc4crgcq", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 16)", + "sc4crgcr", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 21)", + "sc4crgcs", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 23)", + "sc4crgct", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 17)", + "sc4crgcu", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 22)", + "sc4crgcv", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 24)", + "sc4crgcw", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 18)", + "sc4crnjw", "Crown Jewels (Bellfruit) (Scorpion 4) (set 1)", + "sc4crnjwa", "Crown Jewels (Bellfruit) (Scorpion 4) (set 2)", + "sc4crsc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 1)", + "sc4crsca", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 2)", + "sc4crscb", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 3)", + "sc4crscc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 4)", + "sc4crscd", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 5)", + "sc4crsce", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 6)", + "sc4crscf", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 7)", + "sc4crscg", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 8)", + "sc4crzcs", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 1)", + "sc4crzcsa", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 2)", + "sc4crzcsb", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 3)", + "sc4crzcsc", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 4)", + "sc4crzgn", "Crazy Gang (Bellfruit) (Scorpion 4) (set 1, Top Box)", + "sc4crzgn0", "Crazy Gang (Bellfruit) (Scorpion 4) (set 18)", + "sc4crzgn1", "Crazy Gang (Bellfruit) (Scorpion 4) (set 19)", + "sc4crzgn2", "Crazy Gang (Bellfruit) (Scorpion 4) (set 20)", + "sc4crzgn3", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 7)", + "sc4crzgn4", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 8)", + "sc4crzgn5", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 9)", + "sc4crzgn6", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 10)", + "sc4crzgn7", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 11)", + "sc4crzgn8", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 12)", + "sc4crzgna", "Crazy Gang (Bellfruit) (Scorpion 4) (set 1)", + "sc4crzgnb", "Crazy Gang (Bellfruit) (Scorpion 4) (set 2, Top Box)", + "sc4crzgnc", "Crazy Gang (Bellfruit) (Scorpion 4) (set 2)", + "sc4crzgnd", "Crazy Gang (Bellfruit) (Scorpion 4) (set 3)", + "sc4crzgne", "Crazy Gang (Bellfruit) (Scorpion 4) (set 4)", + "sc4crzgnf", "Crazy Gang (Bellfruit) (Scorpion 4) (set 5)", + "sc4crzgng", "Crazy Gang (Bellfruit) (Scorpion 4) (set 3, Top Box)", + "sc4crzgnh", "Crazy Gang (Bellfruit) (Scorpion 4) (set 6)", + "sc4crzgni", "Crazy Gang (Bellfruit) (Scorpion 4) (set 7)", + "sc4crzgnj", "Crazy Gang (Bellfruit) (Scorpion 4) (set 4, Top Box)", + "sc4crzgnk", "Crazy Gang (Bellfruit) (Scorpion 4) (set 8)", + "sc4crzgnl", "Crazy Gang (Bellfruit) (Scorpion 4) (set 9)", + "sc4crzgnm", "Crazy Gang (Bellfruit) (Scorpion 4) (set 10)", + "sc4crzgnn", "Crazy Gang (Bellfruit) (Scorpion 4) (set 11)", + "sc4crzgno", "Crazy Gang (Bellfruit) (Scorpion 4) (set 12)", + "sc4crzgnp", "Crazy Gang (Bellfruit) (Scorpion 4) (set 13)", + "sc4crzgnq", "Crazy Gang (Bellfruit) (Scorpion 4) (set 14)", + "sc4crzgnr", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 1)", + "sc4crzgns", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 2)", + "sc4crzgnt", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 3)", + "sc4crzgnu", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 4)", + "sc4crzgnv", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 5)", + "sc4crzgnw", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 6)", + "sc4crzgnx", "Crazy Gang (Bellfruit) (Scorpion 4) (set 15)", + "sc4crzgny", "Crazy Gang (Bellfruit) (Scorpion 4) (set 16)", + "sc4crzgnz", "Crazy Gang (Bellfruit) (Scorpion 4) (set 17)", + "sc4crzky", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 1)", + "sc4crzkya", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 2)", + "sc4crzkyb", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 3)", + "sc4crzkyc", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 4)", + "sc4crzkyd", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 5)", + "sc4crzkye", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 6)", + "sc4crzkyf", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 7)", + "sc4crzkyg", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 8)", + "sc4crzkyh", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 9)", + "sc4crzkyi", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 1)", + "sc4crzkyj", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 2)", + "sc4crzkyk", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 3)", + "sc4crzkyl", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 10)", + "sc4crzkym", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 11)", + "sc4crzkyn", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 12)", + "sc4crzkyo", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 4)", + "sc4crzkyp", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 5)", + "sc4crzkyq", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 6)", + "sc4crzkyr", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 7)", + "sc4crzkys", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 8)", + "sc4crzkyt", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 13)", + "sc4crzkyu", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 14)", + "sc4crzkyv", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 9)", + "sc4crzkyw", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 10)", + "sc4crzwl", "Crazy World (Mazooma) (Scorpion 4) (set 1)", + "sc4crzwla", "Crazy World (Mazooma) (Scorpion 4) (set 2)", + "sc4crzwlb", "Crazy World (Mazooma) (Scorpion 4) (set 3)", + "sc4crzwlc", "Crazy World (Mazooma) (Scorpion 4) (set 4)", + "sc4crzwld", "Crazy World (Mazooma) (Scorpion 4) (set 5)", + "sc4crzwle", "Crazy World (Mazooma) (Scorpion 4) (set 6)", + "sc4crzwlf", "Crazy World (Mazooma) (Scorpion 4) (set 7)", + "sc4crzwlg", "Crazy World (Mazooma) (Scorpion 4) (set 8)", + "sc4ctl", "Cop The Lot (Bellfruit) (Scorpion 4) (set 1)", + "sc4ctla", "Cop The Lot (Bellfruit) (Scorpion 4) (set 2)", + "sc4ctlb", "Cop The Lot (Bellfruit) (Scorpion 4) (set 3)", + "sc4ctlc", "Cop The Lot (Bellfruit) (Scorpion 4) (set 4)", + "sc4ctlcl", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4ctlcla", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4ctlclb", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4ctlclc", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4ctld", "Cop The Lot (Bellfruit) (Scorpion 4) (set 5)", + "sc4ctle", "Cop The Lot (Bellfruit) (Scorpion 4) (set 6)", + "sc4cvani", "Cashvania (Qps) (Scorpion 4) (set 1)", + "sc4cvania", "Cashvania (Qps) (Scorpion 4) (set 2)", + "sc4cvanib", "Cashvania (Qps) (Scorpion 4) (set 3)", + "sc4cvanic", "Cashvania (Qps) (Scorpion 4) (set 4)", + "sc4cvanid", "Cashvania (Qps) (Scorpion 4) (set 5)", + "sc4cvanie", "Cashvania (Qps) (Scorpion 4) (set 6)", + "sc4cvanif", "Cashvania (Qps) (Scorpion 4) (set 7)", + "sc4cvanig", "Cashvania (Qps) (Scorpion 4) (set 8)", + "sc4cvanih", "Cashvania (Qps) (Scorpion 4) (set 9)", + "sc4cvanii", "Cashvania (Qps) (Scorpion 4) (set 10)", + "sc4cvclb", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 1)", + "sc4cvclba", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 2)", + "sc4cvclbb", "Cashvania Club (V2.0) (Qps) (Scorpion 4) (set 1)", + "sc4cvclbc", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 3)", + "sc4cvclbd", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 4)", + "sc4cvclbe", "Cashvania Club (V2.0) (Qps) (Scorpion 4) (set 2)", + "sc4cvclbf", "Cashvania Club (V411) (Qps) (Scorpion 4) (set 1)", + "sc4cvclbg", "Cashvania Club (V411) (Qps) (Scorpion 4) (set 2)", + "sc4cyc", "Count Yer Cash (Mazooma) (Scorpion 4) (set 1)", + "sc4cyca", "Count Yer Cash (Mazooma) (Scorpion 4) (set 2)", + "sc4cycb", "Count Yer Cash (Mazooma) (Scorpion 4) (set 3)", + "sc4cycc", "Count Yer Cash (Mazooma) (Scorpion 4) (set 4)", + "sc4cyccl", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 1)", + "sc4cyccla", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 2)", + "sc4cycclb", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 3)", + "sc4cycclc", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 4)", + "sc4cycd", "Count Yer Cash (Mazooma) (Scorpion 4) (set 5)", + "sc4czfr", "Crazy Fruits (Germany?) (PR6982, GCRF, 1.02) (Bellfruit) (Scorpion 4)", + "sc4czfra", "Crazy Fruits (Dutch) (PR1212, CRAZ) (Bellfruit) (Scorpion 4)", + "sc4czfrb", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 1)", + "sc4czfrc", "Crazy Fruits (PR6813, CCAS) (Qps) (Scorpion 4) (set 2)", + "sc4czfrd", "Crazy Fruits (Germany?) (PR6982, GCRF) (Bellfruit) (Scorpion 4)", + "sc4czfre", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 2)", + "sc4czfrf", "Crazy Fruits (PR6813, CRFR) (BFM + Whitbread) (Scorpion 4) (set 1)", + "sc4czfrg", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 3)", + "sc4czfrh", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 4)", + "sc4czfri", "Crazy Fruits (PR6813, CRFR) (BFM + Whitbread) (Scorpion 4) (set 2)", + "sc4czfrj", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 5)", + "sc4czfrk", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 6)", + "sc4darw", "Dough & Arrow (Qps) (Scorpion 4) (set 1)", + "sc4darwa", "Dough & Arrow (Qps) (Scorpion 4) (set 2)", + "sc4darwb", "Dough & Arrow (Qps) (Scorpion 4) (set 3)", + "sc4darwc", "Dough & Arrow (Qps) (Scorpion 4) (set 4)", + "sc4daylt", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 1)", + "sc4daylta", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 2)", + "sc4dayltb", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 3)", + "sc4dayltc", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 4)", + "sc4dayltd", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 1)", + "sc4daylte", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 2)", + "sc4dayltf", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 3)", + "sc4dayltg", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 5)", + "sc4daylth", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 6)", + "sc4daylti", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 7)", + "sc4dayltj", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 8)", + "sc4dayltk", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 4)", + "sc4dayltl", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 5)", + "sc4dayltm", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 6)", + "sc4db", "Gold Fever (Mazooma) (Scorpion 4) (set 4)", + "sc4dbldm", "Double Diamond (Qps) (Scorpion 4)", + "sc4dblfr", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 1)", + "sc4dblfra", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 2)", + "sc4dblfrb", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 3)", + "sc4dblfrc", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 4)", + "sc4dblfrd", "Double Frenzy (PR2276) (212) (Qps) (Scorpion 4) (set 1)", + "sc4dblfre", "Double Frenzy (PR2276) (212) (Qps) (Scorpion 4) (set 2)", + "sc4dcrls", "Double Crazy Reels (021) (Mazooma) (Scorpion 4) (set 1)", + "sc4dcrlsa", "Double Crazy Reels (031) (Mazooma) (Scorpion 4) (set 1)", + "sc4dcrlsb", "Double Crazy Reels (022) (Mazooma) (Scorpion 4) (set 1)", + "sc4dcrlsc", "Double Crazy Reels (032) (Mazooma) (Scorpion 4) (set 1)", + "sc4dcrlsd", "Double Crazy Reels (023) (Mazooma) (Scorpion 4) (set 1)", + "sc4dcrlse", "Double Crazy Reels (033) (Mazooma) (Scorpion 4) (set 1)", + "sc4dcrlsf", "Double Crazy Reels (021) (Mazooma) (Scorpion 4) (set 2)", + "sc4dcrlsg", "Double Crazy Reels (031) (Mazooma) (Scorpion 4) (set 2)", + "sc4dcrlsh", "Double Crazy Reels (022) (Mazooma) (Scorpion 4) (set 2)", + "sc4dcrlsi", "Double Crazy Reels (032) (Mazooma) (Scorpion 4) (set 2)", + "sc4dcrlsj", "Double Crazy Reels (023) (Mazooma) (Scorpion 4) (set 2)", + "sc4dcrlsk", "Double Crazy Reels (033) (Mazooma) (Scorpion 4) (set 2)", + "sc4ddosh", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 1)", + "sc4ddosha", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 2)", + "sc4ddoshb", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 3)", + "sc4ddoshc", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 4)", + "sc4ddoshd", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 5)", + "sc4ddoshe", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 6)", + "sc4ddoshf", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 11)", + "sc4ddoshg", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 12)", + "sc4ddoshh", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 13)", + "sc4ddoshi", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 14)", + "sc4ddoshj", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 15)", + "sc4ddoshk", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 16)", + "sc4ddoshl", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 7)", + "sc4ddoshm", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 8)", + "sc4ddoshn", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 9)", + "sc4ddosho", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 10)", + "sc4deepi", "Deep Impact (Mazooma) (Scorpion 4) (set 1)", + "sc4deepia", "Deep Impact (Mazooma) (Scorpion 4) (set 2)", + "sc4deepib", "Deep Impact (Mazooma) (Scorpion 4) (set 3)", + "sc4deepid", "Deep Impact (Mazooma) (Scorpion 4) (set 4)", + "sc4derby", "Demolition Derby (Bellfruit) (Scorpion 4) (set 1)", + "sc4derbya", "Demolition Derby (Bellfruit) (Scorpion 4) (set 2)", + "sc4derbyb", "Demolition Derby (Bellfruit) (Scorpion 4) (set 3)", + "sc4derbyc", "Demolition Derby (Bellfruit) (Scorpion 4) (set 4)", + "sc4derbyd", "Demolition Derby (Bellfruit) (Scorpion 4) (set 5)", + "sc4derbye", "Demolition Derby (Bellfruit) (Scorpion 4) (set 6)", + "sc4dhh", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 1)", + "sc4dhha", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 2)", + "sc4dhhb", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 3)", + "sc4dhhc", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 4)", + "sc4dhhd", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 5)", + "sc4dhhe", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 6)", + "sc4disco", "Disco Inferno (Mazooma) (Scorpion 4) (set 1)", + "sc4discoa", "Disco Inferno (Mazooma) (Scorpion 4) (set 3)", + "sc4discob", "Disco Inferno (Mazooma) (Scorpion 4) (set 2)", + "sc4discoc", "Disco Inferno (Mazooma) (Scorpion 4) (set 4)", + "sc4discod", "Disco Inferno (Mazooma) (Scorpion 4) (set 5)", + "sc4dmine", "Diamond Mine (Bellfruit) (Scorpion 4) (set 1)", + "sc4dminea", "Diamond Mine (Bellfruit) (Scorpion 4) (set 2)", + "sc4dmineb", "Diamond Mine (Bellfruit) (Scorpion 4) (set 3)", + "sc4dminec", "Diamond Mine (Bellfruit) (Scorpion 4) (set 4)", + "sc4dmined", "Diamond Mine (Bellfruit) (Scorpion 4) (set 5)", + "sc4dminee", "Diamond Mine (Bellfruit) (Scorpion 4) (set 6)", + "sc4dnd", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 1)", + "sc4dnda", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 2)", + "sc4dndb", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 2)", + "sc4dndbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 1)", + "sc4dndbba", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 1)", + "sc4dndbbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 2)", + "sc4dndbbc", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 2)", + "sc4dndbbd", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 1)", + "sc4dndbbe", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 1)", + "sc4dndbbf", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 1)", + "sc4dndbbg", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 2)", + "sc4dndbbh", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 2)", + "sc4dndbbi", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 2)", + "sc4dndbc", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 1)", + "sc4dndbca", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 2)", + "sc4dndbd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 1)", + "sc4dndbda", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 2)", + "sc4dndbdb", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 1)", + "sc4dndbdc", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 1)", + "sc4dndbdd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 2)", + "sc4dndbde", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 2)", + "sc4dndbe", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 1)", + "sc4dndbeb", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 1)", + "sc4dndbec", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 2)", + "sc4dndbed", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 2)", + "sc4dndbee", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 1)", + "sc4dndbef", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 1)", + "sc4dndbeg", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 1)", + "sc4dndbeh", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 1)", + "sc4dndbei", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 2)", + "sc4dndbej", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 2)", + "sc4dndbek", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 2)", + "sc4dndbel", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 2)", + "sc4dndbem", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 1)", + "sc4dndben", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 2)", + "sc4dndbr", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 1)", + "sc4dndbra", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 1)", + "sc4dndbrb", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 2)", + "sc4dndbrc", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 2)", + "sc4dndbrd", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 1)", + "sc4dndbre", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 1)", + "sc4dndbrf", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 2)", + "sc4dndbrg", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 2)", + "sc4dndc", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 1)", + "sc4dndcc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 1)", + "sc4dndcca", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR474)", + "sc4dndccb", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 2)", + "sc4dndccc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 1)", + "sc4dndccd", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 1)", + "sc4dndcce", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 2)", + "sc4dndccf", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 2)", + "sc4dndcl", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 1)", + "sc4dndcla", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 1)", + "sc4dndclb", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 1)", + "sc4dndclc", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 1)", + "sc4dndcld", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 2)", + "sc4dndcle", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 2)", + "sc4dndclf", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 2)", + "sc4dndclg", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 2)", + "sc4dndcs", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 1)", + "sc4dndcsa", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 1)", + "sc4dndcsb", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 2)", + "sc4dndcsc", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 2)", + "sc4dndcsd", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 1)", + "sc4dndcse", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 2)", + "sc4dndcw", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 1)", + "sc4dndcwa", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 1)", + "sc4dndcwb", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 2)", + "sc4dndcwc", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 2)", + "sc4dndd", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 1)", + "sc4dnddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 1)", + "sc4dnddda", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 1)", + "sc4dndddb", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 1)", + "sc4dndddc", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 1)", + "sc4dndddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 2)", + "sc4dnddde", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 2)", + "sc4dndddf", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 2)", + "sc4dndddg", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 2)", + "sc4dnddf", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 1)", + "sc4dnddfa", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 2)", + "sc4dnddfb", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 1)", + "sc4dnddfc", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 1)", + "sc4dnddfd", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 2)", + "sc4dnddfe", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 2)", + "sc4dnddw", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 1)", + "sc4dnddwa", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 1)", + "sc4dnddwb", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 2)", + "sc4dnddwc", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 2)", + "sc4dnddwd", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 1)", + "sc4dnddwe", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 1)", + "sc4dnddwf", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 2)", + "sc4dnddwg", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 2)", + "sc4dnde", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 1)", + "sc4dndf", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 1)", + "sc4dndg", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 2)", + "sc4dndh", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 2)", + "sc4dndhf", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 1)", + "sc4dndhfa", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 2)", + "sc4dndhfb", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 1)", + "sc4dndhfc", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 1)", + "sc4dndhfd", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 2)", + "sc4dndhfe", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 2)", + "sc4dndhff", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 1)", + "sc4dndhfg", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 1)", + "sc4dndhfh", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 2)", + "sc4dndhfi", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 2)", + "sc4dndhfj", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA476)", + "sc4dndhfk", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 1, bad?)", + "sc4dndhfl", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 2, bad?)", + "sc4dndi", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 2)", + "sc4dndj", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 1)", + "sc4dndk", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 1)", + "sc4dndl", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 2)", + "sc4dndlp", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 1)", + "sc4dndlpa", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 1)", + "sc4dndlpb", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 1)", + "sc4dndlpc", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 2)", + "sc4dndlpd", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 2)", + "sc4dndlpe", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 2)", + "sc4dndm", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 2)", + "sc4dndn", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 1)", + "sc4dndo", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 2)", + "sc4dndpg", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 1)", + "sc4dndpga", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG571, set 1)", + "sc4dndpgb", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG572, set 1)", + "sc4dndpgc", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 2)", + "sc4dndpgd", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB571, set 2)", + "sc4dndpge", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB572, set 2)", + "sc4dndra", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 1)", + "sc4dndraa", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 2)", + "sc4dndrab", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 1)", + "sc4dndrac", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 1)", + "sc4dndrad", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 2)", + "sc4dndrae", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 2)", + "sc4dndtp", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 1)", + "sc4dndtpa", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 1)", + "sc4dndtpb", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 1)", + "sc4dndtpc", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 1, bad)", + "sc4dndtpd", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 1)", + "sc4dndtpe", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 2)", + "sc4dndtpf", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 2)", + "sc4dndtpg", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 2)", + "sc4dndtph", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 2, bad)", + "sc4dndtpi", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 2)", + "sc4dndtpj", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 1)", + "sc4dndtpk", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 2)", + "sc4dndtpl", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 1)", + "sc4dndtpm", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 2)", + "sc4dndtr", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 1)", + "sc4dndtra", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 2)", + "sc4dndwb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 1)", + "sc4dndwba", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 1)", + "sc4dndwbb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 2)", + "sc4dndwbc", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 2)", + "sc4dndwbd", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 1)", + "sc4dndwbe", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 2)", + "sc4dndwbf", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 1)", + "sc4dndwbg", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 2)", + "sc4dndww", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 1)", + "sc4dndwwa", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 1)", + "sc4dndwwb", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 2)", + "sc4dndwwc", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 1)", + "sc4dndwwd", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 2)", + "sc4dndwwe", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 2)", + "sc4dndys", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 1)", + "sc4dndysa", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 1)", + "sc4dndysb", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 2)", + "sc4dndysc", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 2)", + "sc4dough", "Dough Selecta (Bellfruit) (Scorpion 4) (set 1)", + "sc4dougha", "Dough Selecta (Bellfruit) (Scorpion 4) (set 2)", + "sc4druby", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 1)", + "sc4drubya", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 2)", + "sc4drubyb", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 3)", + "sc4drubyc", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 4)", + "sc4drubyd", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 5)", + "sc4duckq", "Ducks Of Hazzard (Qps) (Scorpion 4) (set 1)", + "sc4duckqa", "Ducks Of Hazzard (Qps) (Scorpion 4) (set 2)", + "sc4ducks", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 1)", + "sc4ducksa", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 2)", + "sc4ducksb", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 3)", + "sc4ducksc", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 4)", + "sc4dyna", "Dynamite (Bellfruit) (Scorpion 4) (set 1)", + "sc4dynaa", "Dynamite (Bellfruit) (Scorpion 4) (set 2)", + "sc4eascs", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 1)", + "sc4eascsa", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 2)", + "sc4eascsb", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 3)", + "sc4eascsc", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 4)", + "sc4eascsd", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 5)", + "sc4eascse", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 6)", + "sc4eascsf", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 7)", + "sc4eascsg", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 8)", + "sc4eascsh", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 9)", + "sc4eascsi", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 10)", + "sc4eascsj", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 11)", + "sc4eascsk", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 12)", + "sc4easy", "Easy Streak (Bellfruit) (Scorpion 4) (set 1)", + "sc4easya", "Easy Streak (Bellfruit) (Scorpion 4) (set 2)", + "sc4easyb", "Easy Streak (Bellfruit) (Scorpion 4) (set 3)", + "sc4easyc", "Easy Streak (Bellfruit) (Scorpion 4) (set 4)", + "sc4easyd", "Easy Streak (Bellfruit) (Scorpion 4) (set 5)", + "sc4easye", "Easy Streak (Bellfruit) (Scorpion 4) (set 6)", + "sc4easyf", "Easy Streak (Bellfruit) (Scorpion 4) (set 11)", + "sc4emmer", "Emmerdale (Mazooma) (Scorpion 4) (set 1)", + "sc4emmera", "Emmerdale (Mazooma) (Scorpion 4) (set 2)", + "sc4emmerb", "Emmerdale (Mazooma) (Scorpion 4) (set 3)", + "sc4emmerc", "Emmerdale (Mazooma) (Scorpion 4) (set 4)", + "sc4evol", "Evolution (Qps) (Scorpion 4) (set 1)", + "sc4evola", "Evolution (Qps) (Scorpion 4) (set 2)", + "sc4evolb", "Evolution (Qps) (Scorpion 4) (set 3)", + "sc4evolc", "Evolution (Qps) (Scorpion 4) (set 4)", + "sc4evold", "Evolution (Qps) (Scorpion 4) (set 5)", + "sc4evole", "Evolution (Qps) (Scorpion 4) (set 6)", + "sc4evolf", "Evolution (Qps) (Scorpion 4) (set 7)", + "sc4evolg", "Evolution (Qps) (Scorpion 4) (set 8)", + "sc4fastf", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 1)", + "sc4fastfa", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 2)", + "sc4fastfb", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 3)", + "sc4fastfc", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 4)", + "sc4fbcrz", "Football Crazy (Bellfruit) (Scorpion 4) (set 1)", + "sc4fbcrza", "Football Crazy (Bellfruit) (Scorpion 4) (set 2)", + "sc4fbcrzb", "Football Crazy (Bellfruit) (Scorpion 4) (set 3)", + "sc4fbcrzc", "Football Crazy (Bellfruit) (Scorpion 4) (set 4)", + "sc4fbcrzd", "Football Crazy (Bellfruit) (Scorpion 4) (set 5)", + "sc4fbcrze", "Football Crazy (Bellfruit) (Scorpion 4) (set 6)", + "sc4fbcrzf", "Football Crazy (Bellfruit) (Scorpion 4) (set 7)", + "sc4fbcrzg", "Football Crazy (Bellfruit) (Scorpion 4) (set 8)", + "sc4fbcrzh", "Football Crazy (Bellfruit) (Scorpion 4) (set 9)", + "sc4fbcrzi", "Football Crazy (Bellfruit) (Scorpion 4) (set 10)", + "sc4fbspn", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 1)", + "sc4fbspna", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 2)", + "sc4fbspnb", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 3)", + "sc4fbspnc", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 4)", + "sc4fcc", "Firecracker Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4fcca", "Firecracker Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4fccb", "Firecracker Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4fccc", "Firecracker Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4fd7th", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 1)", + "sc4fd7tha", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 2)", + "sc4fd7thb", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 3)", + "sc4fd7thc", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 1)", + "sc4fd7thd", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 2)", + "sc4fd7the", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 4)", + "sc4fd7thf", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 5)", + "sc4fd7thg", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 6)", + "sc4fd7thh", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 3)", + "sc4fd7thi", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 4)", + "sc4fevdt", "Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4fevdta", "Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4fevdtb", "Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 3)", + "sc4fever", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 1)", + "sc4fevera", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 2)", + "sc4feverb", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 3)", + "sc4feverc", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 4)", + "sc4feverd", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 5)", + "sc4fevere", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 6)", + "sc4feverf", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 7)", + "sc4feverg", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 8)", + "sc4feverh", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 9)", + "sc4feverk", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 10)", + "sc4fevnx", "Fever The Next (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4fevnxa", "Fever The Next (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4ffru", "Fast Fruit (Qps / Mazooma) (Scorpion 4) (set 1)", + "sc4ffrua", "Fast Fruit (Qps) (Scorpion 4) (set 1)", + "sc4ffrub", "Fast Fruit (Qps / Mazooma) (Scorpion 4) (set 2)", + "sc4ffruc", "Fast Fruit (Qps) (Scorpion 4) (set 2)", + "sc4ffrud", "Fast Fruit (Qps) (Scorpion 4) (set 3)", + "sc4ffrue", "Fast Fruit (Qps) (Scorpion 4) (set 4)", + "sc4fguy", "Family Guy (Bellfruit) (Scorpion 4) (set 1)", + "sc4fguya", "Family Guy (Bellfruit) (Scorpion 4) (set 2)", + "sc4fguyb", "Family Guy (Bellfruit) (Scorpion 4) (set 3)", + "sc4fguyc", "Family Guy (Bellfruit) (Scorpion 4) (set 4)", + "sc4fguyd", "Family Guy (Bellfruit) (Scorpion 4) (set 5)", + "sc4fguye", "Family Guy (Bellfruit) (Scorpion 4) (set 6)", + "sc4fire", "Firepower (Mazooma) (Scorpion 4) (set 1)", + "sc4firea", "Firepower (Mazooma) (Scorpion 4) (set 2)", + "sc4fmj", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 1)", + "sc4fmja", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 2)", + "sc4fmjb", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 3)", + "sc4fmjc", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 4)", + "sc4fpitc", "Fever Pitch (Bellfruit) (Scorpion 4) (set 1)", + "sc4fpitca", "Fever Pitch (Bellfruit) (Scorpion 4) (set 2)", + "sc4fpitcb", "Fever Pitch (Bellfruit) (Scorpion 4) (set 3)", + "sc4fpitcc", "Fever Pitch (Bellfruit) (Scorpion 4) (set 11)", + "sc4fpitcd", "Fever Pitch (Bellfruit) (Scorpion 4) (set 4)", + "sc4fpitce", "Fever Pitch (Bellfruit) (Scorpion 4) (set 5)", + "sc4fpitcf", "Fever Pitch (Bellfruit) (Scorpion 4) (set 6)", + "sc4fpitcg", "Fever Pitch (Bellfruit) (Scorpion 4) (set 12)", + "sc4fpitch", "Fever Pitch (Bellfruit) (Scorpion 4) (set 7)", + "sc4fpitci", "Fever Pitch (Bellfruit) (Scorpion 4) (set 8)", + "sc4fpitcj", "Fever Pitch (Bellfruit) (Scorpion 4) (set 9)", + "sc4fpitck", "Fever Pitch (Bellfruit) (Scorpion 4) (set 10)", + "sc4frboo", "Frooty Booty (Bellfruit) (Scorpion 4) (set 1)", + "sc4frbooa", "Frooty Booty (Bellfruit) (Scorpion 4) (set 2)", + "sc4frboob", "Frooty Booty (Bellfruit) (Scorpion 4) (set 3)", + "sc4frbooc", "Frooty Booty (Bellfruit) (Scorpion 4) (set 4)", + "sc4frenz", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 1)", + "sc4frenza", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 2)", + "sc4frenzb", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 3)", + "sc4frenzc", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 4)", + "sc4frenzd", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 5)", + "sc4frenze", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 6)", + "sc4frsu", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 1)", + "sc4frsua", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 2)", + "sc4frsub", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 3)", + "sc4frsuc", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 4)", + "sc4frsud", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 5)", + "sc4frsue", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 6)", + "sc4frsuf", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 7)", + "sc4frsug", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 8)", + "sc4ftopi", "Fruitopia (Qps) (Scorpion 4) (set 1)", + "sc4ftopia", "Fruitopia (Qps) (Scorpion 4) (set 2)", + "sc4ftopib", "Fruitopia (Qps) (Scorpion 4) (set 3)", + "sc4ftopic", "Fruitopia (Qps) (Scorpion 4) (set 4)", + "sc4ftopid", "Fruitopia (V2.1) (Qps) (Scorpion 4) (set 1)", + "sc4ftopie", "Fruitopia (V2.2) (Qps) (Scorpion 4) (set 1)", + "sc4ftopif", "Fruitopia (V1.1) (Qps) (Scorpion 4) (set 1)", + "sc4ftopig", "Fruitopia (V2.1) (Qps) (Scorpion 4) (set 2)", + "sc4ftopih", "Fruitopia (V2.2) (Qps) (Scorpion 4) (set 2)", + "sc4ftopii", "Fruitopia (V1.1) (Qps) (Scorpion 4) (set 2)", + "sc4fullt", "Full Throttle (011) (Qps) (Scorpion 4) (set 1)", + "sc4fullta", "Full Throttle (041) (Qps) (Scorpion 4) (set 1)", + "sc4fulltb", "Full Throttle (011) (Qps) (Scorpion 4) (set 2)", + "sc4fulltc", "Full Throttle (041) (Qps) (Scorpion 4) (set 2)", + "sc4fulltd", "Full Throttle (012) (Qps) (Scorpion 4) (set 1)", + "sc4fullte", "Full Throttle (042) (Qps) (Scorpion 4) (set 1)", + "sc4fulltf", "Full Throttle (013) (Qps) (Scorpion 4) (set 1)", + "sc4fulltg", "Full Throttle (012) (Qps) (Scorpion 4) (set 2)", + "sc4fullth", "Full Throttle (042) (Qps) (Scorpion 4) (set 2)", + "sc4fullti", "Full Throttle (013) (Qps) (Scorpion 4) (set 2)", + "sc4fwp", "Five Ways Pays (Mazooma) (Scorpion 4) (set 1)", + "sc4fwpa", "Five Ways Pays (Mazooma) (Scorpion 4) (set 2)", + "sc4fwpb", "Five Ways Pays (Mazooma) (Scorpion 4) (set 3)", + "sc4fwpc", "Five Ways Pays (Mazooma) (Scorpion 4) (set 4)", + "sc4fwpcs", "Five Ways Pays (Mazooma) (Scorpion 4) (set 5)", + "sc4fwpcsa", "Five Ways Pays (Mazooma) (Scorpion 4) (set 6)", + "sc4fwpcsb", "Five Ways Pays (Mazooma) (Scorpion 4) (set 7)", + "sc4gag", "Grab A Granny (PR7019, GRAB) (Mazooma) (Scorpion 4) (set 1)", + "sc4gaga", "Grab A Granny (PR7019, GRAN) (Mazooma) (Scorpion 4) (set 1)", + "sc4gagb", "Grab A Granny (PR7019, GRAB) (Mazooma) (Scorpion 4) (set 2)", + "sc4gagc", "Grab A Granny (PR7019, GRAN) (Mazooma) (Scorpion 4) (set 2)", + "sc4gamcs", "The Game Casino (Dutch) (Bellfruit) (Scorpion 4)", + "sc4game", "The Game (Dutch) (Bellfruit) (Scorpion 4)", + "sc4gball", "Golden Balls (Bellfruit) (Scorpion 4) (set 1)", + "sc4gballa", "Golden Balls (Bellfruit) (Scorpion 4) (set 2)", + "sc4gballb", "Golden Balls (Bellfruit) (Scorpion 4) (set 3)", + "sc4gballc", "Golden Balls (Bellfruit) (Scorpion 4) (set 4)", + "sc4gbcas", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 1)", + "sc4gbcasa", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 2)", + "sc4gbcasb", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 3)", + "sc4gbcasc", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 4)", + "sc4gcb", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 1)", + "sc4gcba", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 2)", + "sc4gcbb", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 3)", + "sc4gcbc", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 4)", + "sc4gcbd", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 5)", + "sc4gcbe", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 6)", + "sc4gcbf", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 7)", + "sc4gcbg", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 8)", + "sc4gcbh", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 9)", + "sc4gcbi", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 10)", + "sc4gcbj", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 11)", + "sc4gcclb", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 1)", + "sc4gcclba", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 2)", + "sc4gcclbb", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 3)", + "sc4gcclbc", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 4)", + "sc4gcclbd", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 5)", + "sc4gcclbe", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 6)", + "sc4gcclbf", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 7)", + "sc4gcclbg", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 8)", + "sc4gcclbh", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 9)", + "sc4gcclbi", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 10)", + "sc4gcclbj", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 11)", + "sc4gcclbk", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 12)", + "sc4gcclbl", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 13)", + "sc4gcclbm", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 14)", + "sc4gcclbn", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 15)", + "sc4gcclbo", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 17)", + "sc4gcclbp", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 16)", + "sc4gcclbq", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 18)", + "sc4gd", "Gold Digger (Bellfruit) (Scorpion 4) (set 1)", + "sc4gda", "Gold Digger (Bellfruit) (Scorpion 4) (set 2)", + "sc4gdb", "Gold Digger (Bellfruit) (Scorpion 4) (set 3)", + "sc4gdc", "Gold Digger (Bellfruit) (Scorpion 4) (set 4)", + "sc4gdclb", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4gdclba", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4gdclbb", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4gdclbc", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4gdclbd", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4gdclbe", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4gdclbf", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4gdclbg", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4gdclbh", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4gdclbi", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4gdclbj", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 11)", + "sc4gdclbk", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 12)", + "sc4gdd", "Gold Digger (Bellfruit) (Scorpion 4) (set 5)", + "sc4gde", "Gold Digger (Bellfruit) (Scorpion 4) (set 6)", + "sc4gdf", "Gold Digger (Bellfruit) (Scorpion 4) (set 7)", + "sc4gdg", "Gold Digger (Bellfruit) (Scorpion 4) (set 8)", + "sc4gdmz", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 3)", + "sc4gdmza", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 4)", + "sc4gfev", "Gold Fever (Mazooma) (Scorpion 4) (set 1)", + "sc4gfeva", "Gold Fever (Mazooma) (Scorpion 4) (set 2)", + "sc4gfevb", "Gold Fever (Mazooma) (Scorpion 4) (set 3)", + "sc4ggame", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 1)", + "sc4ggame0", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 2)", + "sc4ggame1", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 7)", + "sc4ggame2", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 8)", + "sc4ggame3", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 6)", + "sc4ggame4", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 7)", + "sc4ggame5", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 8)", + "sc4ggame6", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 9)", + "sc4ggame7", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 1)", + "sc4ggame8", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 2)", + "sc4ggame9", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 3)", + "sc4ggamea", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 1)", + "sc4ggameaa", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 4)", + "sc4ggameab", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 5)", + "sc4ggameac", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 6)", + "sc4ggamead", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 7)", + "sc4ggameae", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 8)", + "sc4ggameb", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 2)", + "sc4ggamec", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 3)", + "sc4ggamed", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 4)", + "sc4ggamef", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 1)", + "sc4ggameg", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 2)", + "sc4ggamei", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 2)", + "sc4ggamej", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 3)", + "sc4ggamek", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 4)", + "sc4ggamel", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 1)", + "sc4ggamem", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 2)", + "sc4ggamen", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 1)", + "sc4ggamep", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 3)", + "sc4ggameq", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 4)", + "sc4ggamer", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 5)", + "sc4ggames", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 5)", + "sc4ggamet", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 6)", + "sc4ggameu", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 7)", + "sc4ggamev", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 5)", + "sc4ggamew", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 3)", + "sc4ggamex", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 4)", + "sc4ggamey", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 5)", + "sc4ggamez", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 6)", + "sc4ggcas", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 9)", + "sc4ggcasa", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 10)", + "sc4ggcasb", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 11)", + "sc4ggcasc", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 12)", + "sc4ggcl", "Golden Grid Club (V1.0) (Qps) (Scorpion 4)", + "sc4ggcla", "Golden Grid Club (V411) (Qps) (Scorpion 4) (set 1)", + "sc4ggclb", "Golden Grid Club (V411) (Qps) (Scorpion 4) (set 2)", + "sc4ggclc", "Golden Grid Club (V412) (Qps) (Scorpion 4) (set 1)", + "sc4ggcld", "Golden Grid Club (V412) (Qps) (Scorpion 4) (set 2)", + "sc4ggdlx", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 1)", + "sc4ggdlxa", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 3)", + "sc4ggdlxb", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 4)", + "sc4ggdlxc", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 2)", + "sc4ggdlxd", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 5)", + "sc4ggdlxe", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 6)", + "sc4ggdlxf", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 7)", + "sc4ggdlxg", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 8)", + "sc4ggg", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 1)", + "sc4gggb", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 2)", + "sc4gggc", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 3)", + "sc4gggd", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 4)", + "sc4ggge", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 5)", + "sc4gggf", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 6)", + "sc4gggg", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 13)", + "sc4gggh", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 1)", + "sc4gggi", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 2)", + "sc4gggk", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 7)", + "sc4gggl", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 8)", + "sc4gggm", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 9)", + "sc4gggn", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 10)", + "sc4gggo", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 11)", + "sc4gggp", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 12)", + "sc4gggq", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 3)", + "sc4gggr", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 4)", + "sc4gggs", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 5)", + "sc4gggtb", "Grand Golden Game (Mazooma) (PR2056, GGGT) (Scorpion 4) (Top Box, set 1)", + "sc4gggtba", "Grand Golden Game (Mazooma) (PR2056, GGGT) (Scorpion 4) (Top Box, set 2)", + "sc4ggrid", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 1)", + "sc4ggrida", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 2)", + "sc4ggridb", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 1)", + "sc4ggridc", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 2)", + "sc4ggridd", "Golden Grid (V1.3) (Qps) (Scorpion 4)", + "sc4ggride", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 3)", + "sc4ggridf", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 4)", + "sc4ggridg", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 3)", + "sc4ggridh", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 4)", + "sc4ggridi", "Golden Grid (V011) (Scorpion 4) (set 1)", + "sc4ggridj", "Golden Grid (V041) (Qps) (Scorpion 4) (set 1)", + "sc4ggridk", "Golden Grid (V011) (Scorpion 4) (set 2)", + "sc4ggridl", "Golden Grid (V041) (Qps) (Scorpion 4) (set 2)", + "sc4ggridm", "Golden Grid (V012) (Qps) (Scorpion 4) (set 1)", + "sc4ggridn", "Golden Grid (V012) (Qps) (Scorpion 4) (set 2)", + "sc4ggtb", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 1)", + "sc4ggtba", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 2)", + "sc4ggtbb", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 3)", + "sc4ghost", "Golden Ghost (Mazooma) (Scorpion 4) (set 1)", + "sc4ghosta", "Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 1)", + "sc4ghostb", "Golden Ghost (Mazooma) (Scorpion 4) (set 2)", + "sc4ghostc", "Golden Ghost (Mazooma) (Scorpion 4) (set 3)", + "sc4ghostd", "Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 2)", + "sc4ghoste", "Golden Ghost (Mazooma) (Scorpion 4) (set 4)", + "sc4ghostf", "Golden Ghost (Mazooma) (Scorpion 4) (set 5)", + "sc4ghostg", "Golden Ghost (Mazooma) (Scorpion 4) (set 6)", + "sc4ghosth", "Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 3)", + "sc4glad", "Gladiator (Mazooma) (Scorpion 4) (set 1)", + "sc4glada", "Gladiator (Mazooma) (Scorpion 4) (set 2)", + "sc4gladb", "Gladiator (Mazooma) (Scorpion 4) (set 3)", + "sc4gladc", "Gladiator (Mazooma) (Scorpion 4) (set 4)", + "sc4gladd", "Gladiator (Mazooma) (Scorpion 4) (set 5)", + "sc4glade", "Gladiator (Mazooma) (Scorpion 4) (set 6)", + "sc4gladf", "Gladiator (Mazooma) (Scorpion 4) (set 7)", + "sc4gladg", "Gladiator (Mazooma) (Scorpion 4) (set 8)", + "sc4gldcl", "Gladiator Club (Mazooma) (Scorpion 4) (set 1)", + "sc4gldcla", "Gladiator Club (Mazooma) (Scorpion 4) (set 2)", + "sc4gnc", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 1)", + "sc4gnca", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 2)", + "sc4gncb", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 3)", + "sc4gncc", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 4)", + "sc4gncd", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 5)", + "sc4gnce", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 6)", + "sc4gocas", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 5)", + "sc4gocasa", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 6)", + "sc4goldo", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 1)", + "sc4goldoa", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 2)", + "sc4goldob", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 3)", + "sc4goldoc", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 4)", + "sc4goldw", "Golden Winner (Bellfruit) (Scorpion 4) (set 1)", + "sc4goldwa", "Golden Winner (Bellfruit) (Scorpion 4) (set 2)", + "sc4goldwb", "Golden Winner (Bellfruit) (Scorpion 4) (set 3)", + "sc4goldwc", "Golden Winner (Bellfruit) (Scorpion 4) (set 4)", + "sc4goldwd", "Golden Winner (Bellfruit) (Scorpion 4) (set 5)", + "sc4goldwe", "Golden Winner (Bellfruit) (Scorpion 4) (set 6)", + "sc4goldwf", "Golden Winner (Bellfruit) (Scorpion 4) (set 7)", + "sc4goldwg", "Golden Winner (Bellfruit) (Scorpion 4) (set 8)", + "sc4goud", "Goudkoorts (Dutch) (Bellfruit) (Scorpion 4)", + "sc4greed", "Greedy Gonzalez (Bellfruit) (Scorpion 4) (set 1)", + "sc4greeda", "Greedy Gonzalez (Bellfruit) (Scorpion 4) (set 2)", + "sc4gshot", "Golden Shot (Qps) (Scorpion 4) (set 1)", + "sc4gshota", "Golden Shot Arcade (Qps) (Scorpion 4) (set 1)", + "sc4gshotb", "Golden Shot (Qps) (Scorpion 4) (set 2)", + "sc4gshotc", "Golden Shot Arcade (Qps) (Scorpion 4) (set 2)", + "sc4gslam", "Grandslam Club (BFM) (Scorpion 4) (set 1)", + "sc4gslama", "Grandslam Club (BFM) (Scorpion 4) (set 2)", + "sc4gslamb", "Grandslam Club (BFM) (Scorpion 4) (set 3)", + "sc4gslamc", "Grandslam Club (BFM) (Scorpion 4) (set 4)", + "sc4gslamd", "Grandslam Club (BFM) (Scorpion 4) (set 5)", + "sc4gslame", "Grandslam Club (BFM) (Scorpion 4) (set 6)", + "sc4gslamf", "Grandslam Club (BFM) (Scorpion 4) (set 7)", + "sc4gunp", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 1)", + "sc4gunpa", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 2)", + "sc4gunpb", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 3)", + "sc4gunpc", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 4)", + "sc4gunpd", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 5)", + "sc4gunpe", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 6)", + "sc4gunpf", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 7)", + "sc4gunpg", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 8)", + "sc4gx", "Bar X (Mazooma) (Scorpion 4) (BARX, set 1)", + "sc4gx3", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 1)", + "sc4gx3a", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 2)", + "sc4gx3b", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 3)", + "sc4gx3c", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 4)", + "sc4gx3d", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 5)", + "sc4gx3e", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 6)", + "sc4gx3f", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 7)", + "sc4gx3g", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 8)", + "sc4gxa", "Bar X (Mazooma) (Scorpion 4) (BARX, set 8)", + "sc4gxb", "Bar X (Mazooma) (Scorpion 4) (BARX, set 9)", + "sc4gxcasa", "Bar X (Mazooma) (Scorpion 4) (BARX, set 2)", + "sc4gxcasb", "Bar X (Mazooma) (Scorpion 4) (BARX, set 3)", + "sc4gxcasc", "Bar X (Mazooma) (Scorpion 4) (BARX, set 4)", + "sc4gxcasd", "Bar X (Mazooma) (Scorpion 4) (BARX, set 5)", + "sc4gxcase", "Bar X (Mazooma) (Scorpion 4) (BARX, set 6)", + "sc4gxcasf", "Bar X (Mazooma) (Scorpion 4) (BARX, set 7)", + "sc4h6cl", "Hot Six Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4h6cla", "Hot Six Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4h6clb", "Hot Six Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4h6clc", "Hot Six Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4hapnt", "Happy Notes (Bellfruit) (Scorpion 4) (set 1)", + "sc4hapnta", "Happy Notes (Bellfruit) (Scorpion 4) (set 2)", + "sc4hapntb", "Happy Notes (Bellfruit) (Scorpion 4) (set 3)", + "sc4hapntc", "Happy Notes (Bellfruit) (Scorpion 4) (set 4)", + "sc4hapntd", "Happy Notes (Bellfruit) (Scorpion 4) (set 5)", + "sc4hapnte", "Happy Notes (Bellfruit) (Scorpion 4) (set 6)", + "sc4hdd", "Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 1)", + "sc4hdda", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 1)", + "sc4hddb", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 2)", + "sc4hddc", "Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 2)", + "sc4hddd", "Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 3)", + "sc4hdde", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 3)", + "sc4hddf", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 4)", + "sc4heatw", "Heatwave (Dutch) (Bellfruit) (Scorpion 4)", + "sc4hellb", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 1)", + "sc4hellbb", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 2)", + "sc4hellbc", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 3)", + "sc4hellbd", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 4)", + "sc4hellbe", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 5)", + "sc4hellbf", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 6)", + "sc4hellbg", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 7)", + "sc4hellbh", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 8)", + "sc4hellbi", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 9)", + "sc4hellbj", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 10)", + "sc4helld", "Hells Bells (PR1201) (Dutch) (Bellfruit) (Scorpion 4)", + "sc4helrd", "Hellraiser (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4helrs", "Hellraiser (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4hf", "Happy Fruits (Bellfruit) (Scorpion 4) (set 1)", + "sc4hfa", "Happy Fruits (Bellfruit) (Scorpion 4) (set 2)", + "sc4hfb", "Happy Fruits (Bellfruit) (Scorpion 4) (set 3)", + "sc4hfc", "Happy Fruits (Bellfruit) (Scorpion 4) (set 4)", + "sc4hfcl", "Happy Fruits Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4hfcla", "Happy Fruits Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4hfd", "Happy Fruits (Bellfruit) (Scorpion 4) (set 5)", + "sc4hfe", "Happy Fruits (Bellfruit) (Scorpion 4) (set 6)", + "sc4hff", "Happy Fruits (Bellfruit) (Scorpion 4) (set 7)", + "sc4hfg", "Happy Fruits (Bellfruit) (Scorpion 4) (set 8)", + "sc4hi5", "High 5 (Bellfruit) (Scorpion 4) (set 1)", + "sc4hi5a", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 1)", + "sc4hi5b", "High 5 (Bellfruit) (Scorpion 4) (set 2)", + "sc4hi5c", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 2)", + "sc4hi5d", "High 5 (Bellfruit) (Scorpion 4) (set 3)", + "sc4hi5e", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 3)", + "sc4hi5f", "High 5 (Bellfruit) (Scorpion 4) (set 4)", + "sc4hi5g", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 4)", + "sc4hill", "Hill Billionaire (Bellfruit) (Scorpion 4) (set 1)", + "sc4hilla", "Hill Billionaire (Bellfruit) (Scorpion 4) (set 2)", + "sc4hilo", "Hilowatha (Bellfruit) (Scorpion 4) (set 1)", + "sc4hiloa", "Hilowatha (Bellfruit) (Scorpion 4) (set 2)", + "sc4hilob", "Hilowatha (Bellfruit) (Scorpion 4) (set 3)", + "sc4hiloc", "Hilowatha (Bellfruit) (Scorpion 4) (set 4)", + "sc4hilod", "Hilowatha (Bellfruit) (Scorpion 4) (set 5)", + "sc4hiloe", "Hilowatha (Bellfruit) (Scorpion 4) (set 6)", + "sc4hilof", "Hilowatha (Bellfruit) (Scorpion 4) (set 7)", + "sc4hilog", "Hilowatha (Bellfruit) (Scorpion 4) (set 8)", + "sc4hiloh", "Hilowatha (Bellfruit) (Scorpion 4) (set 9)", + "sc4hiloi", "Hilowatha (Bellfruit) (Scorpion 4) (set 10)", + "sc4hiloj", "Hilowatha (Bellfruit) (Scorpion 4) (set 11)", + "sc4hilok", "Hilowatha (Bellfruit) (Scorpion 4) (set 12)", + "sc4himi", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 1)", + "sc4himia", "High 'n' Mighty (PR2119) (Mazooma) (Scorpion 4) (set 1)", + "sc4himib", "High 'n' Mighty (PR2067) (Mazooma) (Scorpion 4) (set 1)", + "sc4himic", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 2)", + "sc4himid", "High 'n' Mighty (PR2067) (Mazooma) (Scorpion 4) (set 2)", + "sc4himie", "High 'n' Mighty (PR2119) (Mazooma) (Scorpion 4) (set 2)", + "sc4himif", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 3)", + "sc4himig", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 4)", + "sc4himih", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 5)", + "sc4himii", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 6)", + "sc4hiss", "Hissing Quid (Qps) (Scorpion 4) (set 1)", + "sc4hissa", "Hissing Quid (Qps) (Scorpion 4) (set 2)", + "sc4hissb", "Hissing Quid (Qps) (Scorpion 4) (set 3)", + "sc4hissc", "Hissing Quid (Qps) (Scorpion 4) (set 4)", + "sc4hissd", "Hissing Quid (Qps) (Scorpion 4) (set 5)", + "sc4hisse", "Hissing Quid (Qps) (Scorpion 4) (set 6)", + "sc4hissf", "Hissing Quid (Qps) (Scorpion 4) (set 7)", + "sc4hissg", "Hissing Quid (Qps) (Scorpion 4) (set 8)", + "sc4hitsh", "Hit Shot (Bellfruit) (Scorpion 4) (set 1)", + "sc4hitsha", "Hit Shot (Bellfruit) (Scorpion 4) (set 2)", + "sc4hitshb", "Hit Shot (Bellfruit) (Scorpion 4) (set 3)", + "sc4hitshc", "Hit Shot (Bellfruit) (Scorpion 4) (set 4)", + "sc4hitshd", "Hit Shot (Bellfruit) (Scorpion 4) (set 5)", + "sc4hitshe", "Hit Shot (Bellfruit) (Scorpion 4) (set 6)", + "sc4hntcs", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 1)", + "sc4hntcsa", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 2)", + "sc4hntcsb", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 3)", + "sc4hntcsc", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 4)", + "sc4hntcsd", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 5)", + "sc4hntcse", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 6)", + "sc4hntcsf", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 7)", + "sc4hntcsg", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 8)", + "sc4hntcsh", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 9)", + "sc4hntcsi", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 10)", + "sc4hntcsj", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 11)", + "sc4hntcsk", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 12)", + "sc4hntcsl", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 13)", + "sc4hntcsm", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 14)", + "sc4hntcsn", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 15)", + "sc4hntcso", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 16)", + "sc4hntcsp", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 17)", + "sc4hntcsq", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 18)", + "sc4hntcsr", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 19)", + "sc4hntcss", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 20)", + "sc4holyw", "Hollywood (Bellfruit) (Scorpion 4) (set 1)", + "sc4holywa", "Hollywood (Bellfruit / Whitbread) (Scorpion 4) (set 1)", + "sc4holywb", "Hollywood (Bellfruit) (Scorpion 4) (set 2)", + "sc4holywc", "Hollywood (Bellfruit / Whitbread) (Scorpion 4) (set 2)", + "sc4hotdg", "Hot Dog (Bellfruit) (Scorpion 4) (set 1)", + "sc4hotdga", "Hot Dog (Bellfruit) (Scorpion 4) (set 2)", + "sc4hotdgb", "Hot Dog (Bellfruit) (Scorpion 4) (set 3)", + "sc4hotdgc", "Hot Dog (Bellfruit) (Scorpion 4) (set 4)", + "sc4hotpr", "Hot Property (Bellfruit) (Scorpion 4) (set 1)", + "sc4hotpra", "Hot Property (Bellfruit) (Scorpion 4) (Whitbread, set 1)", + "sc4hotprb", "Hot Property (Bellfruit) (Scorpion 4) (set 2)", + "sc4hotprc", "Hot Property (Bellfruit) (Scorpion 4) (Whitbread, set 2)", + "sc4hotprd", "Hot Property (Bellfruit) (Scorpion 4) (set 3)", + "sc4hotpre", "Hot Property (Bellfruit) (Scorpion 4) (set 4)", + "sc4hotrd", "Hot Rod (Bellfruit) (Scorpion 4) (set 1)", + "sc4hotrda", "Hot Rod (Bellfruit) (Scorpion 4) (set 2)", + "sc4hotsh", "Hot Shot (Bellfruit) (Scorpion 4) (set 1)", + "sc4hotsha", "Hot Shot (Bellfruit) (Scorpion 4) (set 2)", + "sc4hotwd", "Hot Wad (Bellfruit) (Scorpion 4) (set 1)", + "sc4hotwda", "Hot Wad (Bellfruit) (Scorpion 4) (set 2)", + "sc4hotwdb", "Hot Wad (Bellfruit) (Scorpion 4) (set 3)", + "sc4hotwdc", "Hot Wad (Bellfruit) (Scorpion 4) (set 4)", + "sc4hotwdd", "Hot Wad (Bellfruit) (Scorpion 4) (set 5)", + "sc4hotwde", "Hot Wad (Bellfruit) (Scorpion 4) (set 6)", + "sc4hyde", "Hyde & Streak (Mazooma) (Scorpion 4) (set 1)", + "sc4hydea", "Hyde & Streak (Mazooma) (Scorpion 4) (set 2)", + "sc4hydeb", "Hyde & Streak (Mazooma) (Scorpion 4) (set 3)", + "sc4hydec", "Hyde & Streak (Mazooma) (Scorpion 4) (set 4)", + "sc4hyper", "Hyperactive (Mazooma) (Scorpion 4) (set 1)", + "sc4hypera", "Hyperactive (Mazooma) (Scorpion 4) (set 2)", + "sc4ibiza", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 1)", + "sc4ibizaa", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 2)", + "sc4ibizab", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 3)", + "sc4ibizac", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 4)", + "sc4ibizad", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 5)", + "sc4ibizae", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 6)", + "sc4ibizaf", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 7)", + "sc4ibizag", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 8)", + "sc4ibizah", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 9)", + "sc4ibizai", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 10)", + "sc4ijclb", "Italian Job Club (Mazooma) (Scorpion 4)", + "sc4ijob", "Italian Job (Mazooma) (Scorpion 4) (set 1)", + "sc4ijoba", "Italian Job (Mazooma) (Scorpion 4) (set 2)", + "sc4ijobb", "Italian Job (Mazooma) (Scorpion 4) (set 3)", + "sc4ijobc", "Italian Job (Mazooma) (Scorpion 4) (set 4)", + "sc4ijobd", "Italian Job (Mazooma) (Scorpion 4) (set 5)", + "sc4ijobe", "Italian Job (Mazooma) (Scorpion 4) (set 6)", + "sc4ijobf", "Italian Job (Mazooma) (Scorpion 4) (set 7)", + "sc4ijobg", "Italian Job (Mazooma) (Scorpion 4) (set 8)", + "sc4ijobh", "Italian Job (Mazooma) (Scorpion 4) (set 9)", + "sc4ijobi", "Italian Job (Mazooma) (Scorpion 4) (set 10)", + "sc4ijobj", "Italian Job (Mazooma) (Scorpion 4) (set 11)", + "sc4ijobk", "Italian Job (Mazooma) (Scorpion 4) (set 12)", + "sc4ijobl", "Italian Job (Mazooma) (Scorpion 4) (set 13)", + "sc4ijobm", "Italian Job (Mazooma) (Scorpion 4) (set 14)", + "sc4inspn", "Inner Spin (Mazooma) (Scorpion 4) (set 1)", + "sc4inspna", "Inner Spin (Mazooma) (Scorpion 4) (set 2)", + "sc4ivply", "4 Play (Dutch) (Bellfruit) (Scorpion 4)", + "sc4jack", "Jack The Kipper (Mazooma) (Scorpion 4) (set 1)", + "sc4jacka", "Jack The Kipper (Mazooma) (Scorpion 4) (set 2)", + "sc4jackb", "Jack The Kipper (Mazooma) (Scorpion 4) (set 3)", + "sc4jackc", "Jack The Kipper (Mazooma) (Scorpion 4) (set 4)", + "sc4jackd", "Jack The Kipper (Mazooma) (Scorpion 4) (set 5)", + "sc4jacke", "Jack The Kipper (Mazooma) (Scorpion 4) (set 6)", + "sc4jackf", "Jack The Kipper (Mazooma) (Scorpion 4) (set 7)", + "sc4jackg", "Jack The Kipper (Mazooma) (Scorpion 4) (set 8)", + "sc4jbuck", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 1)", + "sc4jbucka", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 2)", + "sc4jbuckb", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 3)", + "sc4jbuckc", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 4)", + "sc4jbuckd", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 5)", + "sc4jiggn", "Jiggery Pockery (German) (Nova) (Scorpion 4)", + "sc4jiggr", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 1)", + "sc4jiggra", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 2)", + "sc4jiggrb", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 3)", + "sc4jiggrc", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 4)", + "sc4jive", "Jive Money (PR2096) (Mazooma) (Scorpion 4)", + "sc4jivea", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 1)", + "sc4jiveb", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 2)", + "sc4jivec", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 3)", + "sc4jived", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 4)", + "sc4jjc", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 1)", + "sc4jjca", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 2)", + "sc4jjcb", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 3)", + "sc4jjcc", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 4)", + "sc4jjcd", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 5)", + "sc4jjce", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 6)", + "sc4jjcf", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 7)", + "sc4jjcg", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 8)", + "sc4jjch", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 9)", + "sc4jjci", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 10)", + "sc4jjf", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 1)", + "sc4jjfa", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 2)", + "sc4jjfb", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 3)", + "sc4jjfc", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 1)", + "sc4jjfd", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 2)", + "sc4jjfe", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 3)", + "sc4jjff", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 4)", + "sc4jjfg", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 4)", + "sc4jjfh", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 5)", + "sc4jjfi", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 6)", + "sc4jjfj", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 5)", + "sc4jjfk", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 6)", + "sc4jjfl", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 7)", + "sc4jjfm", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 8)", + "sc4jjok", "Jackpot Jokers (Bellfruit) (Scorpion 4) (set 1)", + "sc4jjoka", "Jackpot Jokers (Bellfruit) (Scorpion 4) (set 2)", + "sc4jjucl", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4jjucla", "Jackpot Junction Club (Ferry) (Bellfruit) (Scorpion 4) (set 1)", + "sc4jjuclb", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4jjuclc", "Jackpot Junction Club (Ferry) (Bellfruit) (Scorpion 4) (set 2)", + "sc4jjucld", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4jjucle", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4jjunc", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 1)", + "sc4jjunca", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 2)", + "sc4jjuncb", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 3)", + "sc4jjuncc", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 4)", + "sc4jjuncd", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 5)", + "sc4jjunce", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 6)", + "sc4jjuncf", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 7)", + "sc4jjuncg", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 8)", + "sc4jjunch", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 9)", + "sc4jjunci", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 10)", + "sc4jolly", "Jolly Jousting (Qps) (Scorpion 4) (set 1)", + "sc4jollya", "Jolly Jousting (Qps) (Scorpion 4) (set 2)", + "sc4juicy", "Juicy Jackpots Club (PR1136) (65% Ferry) (Bellfruit) (Scorpion 4) (set 1)", + "sc4juicya", "Juicy Jackpots Club (PR1123) (Bellfruit) (Scorpion 4) (set 1)", + "sc4juicyb", "Juicy Jackpots Club (PR1136) (65% Ferry) (Bellfruit) (Scorpion 4) (set 2)", + "sc4juicyc", "Juicy Jackpots Club (PR1123) (Bellfruit) (Scorpion 4) (set 2)", + "sc4juicyd", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 1)", + "sc4juicye", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 2)", + "sc4juicyf", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 3)", + "sc4juicyg", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 4)", + "sc4juicyi", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (311 Club, set 1)", + "sc4juicyj", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (311 Club, set 2)", + "sc4kalei", "Kaleidoscope (011) (Qps) (Scorpion 4) (set 1)", + "sc4kaleia", "Kaleidoscope (041) (Qps) (Scorpion 4) (set 2)", + "sc4kaleib", "Kaleidoscope (011) (Qps) (Scorpion 4) (set 3)", + "sc4kaleic", "Kaleidoscope (041) (Qps) (Scorpion 4) (set 4)", + "sc4kaleid", "Kaleidoscope (051) (Qps) (Scorpion 4) (set 1)", + "sc4kaleie", "Kaleidoscope (051) (Qps) (Scorpion 4) (set 2)", + "sc4kkong", "King Kong Cash (Mazooma) (Scorpion 4) (set 1)", + "sc4kkonga", "King Kong Cash (Mazooma) (Scorpion 4) (set 2)", + "sc4kkongb", "King Kong Cash (Mazooma) (Scorpion 4) (set 3)", + "sc4kkongc", "King Kong Cash (Mazooma) (Scorpion 4) (set 4)", + "sc4kkongd", "King Kong Cash (Mazooma) (Scorpion 4) (set 5)", + "sc4kkonge", "King Kong Cash (Mazooma) (Scorpion 4) (set 6)", + "sc4kkongf", "King Kong Cash (Mazooma) (Scorpion 4) (set 7)", + "sc4kkongg", "King Kong Cash (Mazooma) (Scorpion 4) (set 8)", + "sc4kkongh", "King Kong Cash (Mazooma) (Scorpion 4) (set 9)", + "sc4kkongi", "King Kong Cash (Mazooma) (Scorpion 4) (set 10)", + "sc4kkongj", "King Kong Cash (Mazooma) (Scorpion 4) (set 11)", + "sc4knok", "Knockout (PR7061, KOUT) (Mazooma) (Scorpion 4) (set 1)", + "sc4knoka", "Knockout (PR7061, KOUT) (Mazooma) (Scorpion 4) (set 2)", + "sc4knokb", "Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 1)", + "sc4knokc", "Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 2)", + "sc4lasv", "Las Vegas (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4lasva", "Las Vegas (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4ldcas", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 1)", + "sc4ldcasa", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 2)", + "sc4ldcasb", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 3)", + "sc4ldcasc", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 4)", + "sc4ldcasd", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 5)", + "sc4ldcase", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 6)", + "sc4ldvcl", "Little Devil Club (Mazooma) (Scorpion 4)", + "sc4ldvl", "Little Devil (Mazooma) (Scorpion 4) (set 1)", + "sc4ldvla", "Little Devil (Mazooma) (Scorpion 4) (set 2)", + "sc4ldvlb", "Little Devil (Mazooma) (Scorpion 4) (set 3)", + "sc4ldvlc", "Little Devil (Mazooma) (Scorpion 4) (set 4)", + "sc4leg", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 1)", + "sc4lega", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 2)", + "sc4legb", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 3)", + "sc4legc", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 4)", + "sc4legcb", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4legcba", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4legcbb", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4legcbc", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4legcbd", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4legcbe", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4legd", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 5)", + "sc4lege", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 6)", + "sc4legf", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 7)", + "sc4legg", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 8)", + "sc4lined", "Line Dancer (Mazooma) (Scorpion 4) (set 1)", + "sc4lineda", "Line Dancer (Mazooma) (Scorpion 4) (set 2)", + "sc4linedb", "Line Dancer (Mazooma) (Scorpion 4) (set 3)", + "sc4linedc", "Line Dancer (Mazooma) (Scorpion 4) (set 4)", + "sc4linedd", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 1)", + "sc4linede", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 2)", + "sc4linedf", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 3)", + "sc4linedg", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 4)", + "sc4linedh", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 5)", + "sc4linedi", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 6)", + "sc4lions", "Three Lions (Mazooma) (Scorpion 4) (set 1)", + "sc4lionsa", "Three Lions (Mazooma) (Scorpion 4) (set 2)", + "sc4lionsb", "Three Lions (Mazooma) (Scorpion 4) (set 3)", + "sc4lionsc", "Three Lions (Mazooma) (Scorpion 4) (set 4)", + "sc4lionsd", "Three Lions (Mazooma) (Scorpion 4) (set 5)", + "sc4lionse", "Three Lions (Mazooma) (Scorpion 4) (set 6)", + "sc4lionsf", "Three Lions (Mazooma) (Scorpion 4) (set 7)", + "sc4lir", "Let It Roll (Bellfruit) (Scorpion 4) (set 1)", + "sc4lira", "Let It Roll (Bellfruit) (Scorpion 4) (set 2)", + "sc4lirb", "Let It Roll (Bellfruit) (Scorpion 4) (set 3)", + "sc4lirc", "Let It Roll (Bellfruit) (Scorpion 4) (set 4)", + "sc4lird", "Let It Roll (Bellfruit) (Scorpion 4) (set 5)", + "sc4lire", "Let It Roll (Bellfruit) (Scorpion 4) (set 6)", + "sc4lirf", "Let It Roll (Bellfruit) (Scorpion 4) (set 7)", + "sc4lirg", "Let It Roll (Bellfruit) (Scorpion 4) (set 8)", + "sc4lirh", "Let It Roll (Bellfruit) (Scorpion 4) (set 9)", + "sc4liri", "Let It Roll (Bellfruit) (Scorpion 4) (set 10)", + "sc4lkbcl", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4lkbcla", "Lock Buster Club (Euro) (Bellfruit) (Scorpion 4) (set 1)", + "sc4lkbclb", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4lkbclc", "Lock Buster Club (Euro) (Bellfruit) (Scorpion 4) (set 2)", + "sc4lkbcld", "Lock Buster Club (Ferry) (Bellfruit) (Scorpion 4) (set 1)", + "sc4lkbcle", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4lkbclf", "Lock Buster Club (Ferry) (Bellfruit) (Scorpion 4) (set 2)", + "sc4lkbclg", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4lkbclh", "Lock Buster Club (Bellfruit) (Scorpion 4) (311 Club, set 1)", + "sc4lkbcli", "Lock Buster Club (Bellfruit) (Scorpion 4) (311 Club, set 2)", + "sc4lockb", "Lock Buster (Bellfruit) (Scorpion 4) (set 1)", + "sc4lockba", "Lock Buster (Bellfruit) (Scorpion 4) (set 2)", + "sc4lockbb", "Lock Buster (Bellfruit) (Scorpion 4) (set 3)", + "sc4lockbc", "Lock Buster (Bellfruit) (Scorpion 4) (set 4)", + "sc4lockbd", "Lock Buster (Bellfruit) (Scorpion 4) (set 5)", + "sc4lockbe", "Lock Buster (Bellfruit) (Scorpion 4) (set 6)", + "sc4lockbf", "Lock Buster (Bellfruit) (Scorpion 4) (set 7)", + "sc4lockbg", "Lock Buster (Bellfruit) (Scorpion 4) (set 8)", + "sc4lotr2", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 1)", + "sc4lotr2a", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 2)", + "sc4lotr2b", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 3)", + "sc4lotr2c", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 4)", + "sc4lotr2d", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 5)", + "sc4lotr2e", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 6)", + "sc4lotr2f", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 11)", + "sc4lotr2g", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 12)", + "sc4lotr2h", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 13)", + "sc4lotr2i", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 14)", + "sc4lotr2j", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 7)", + "sc4lotr2k", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 8)", + "sc4lotr2l", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 9)", + "sc4lotr2m", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 10)", + "sc4lotrf", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 1)", + "sc4lotrfa", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 2)", + "sc4lotrfb", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 3)", + "sc4lotrfc", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 4)", + "sc4lotrfd", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 5)", + "sc4lotrfe", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 6)", + "sc4lotrff", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 7)", + "sc4lotrfg", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 8)", + "sc4lotrr", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 1)", + "sc4lotrra", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 2)", + "sc4lotrrb", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 3)", + "sc4lotrrc", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 4)", + "sc4lotrrd", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 5)", + "sc4lotrre", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 6)", + "sc4lotrt", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 9)", + "sc4lotrta", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 10)", + "sc4ltr2c", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4ltr2ca", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4ltr2cb", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4ltr2cc", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4ltr2cd", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4ltr2ce", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4ltr2cf", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4ltr2cg", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4ltr2ch", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4ltr2ci", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4ltr2cj", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 11)", + "sc4ltr2ck", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 12)", + "sc4luck7", "Lucky 7s (Mazooma) (Scorpion 4) (Top Box)", + "sc4luck7a", "Lucky 7s (Mazooma) (Scorpion 4) (set 1)", + "sc4luck7b", "Lucky 7s (Mazooma) (Scorpion 4) (set 2)", + "sc4luck7c", "Lucky 7s (Mazooma) (Scorpion 4) (set 3)", + "sc4luck7d", "Lucky 7s (Mazooma) (Scorpion 4) (set 4)", + "sc4luckb", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 1)", + "sc4luckb0", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 6)", + "sc4luckb1", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 23)", + "sc4luckb2", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 24)", + "sc4luckb3", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 25)", + "sc4luckb4", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 26)", + "sc4luckba", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 2)", + "sc4luckbb", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 3)", + "sc4luckbc", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 4)", + "sc4luckbd", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 5)", + "sc4luckbe", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 6)", + "sc4luckbf", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 7)", + "sc4luckbg", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 8)", + "sc4luckbh", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 9)", + "sc4luckbi", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 10)", + "sc4luckbj", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 11)", + "sc4luckbk", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 12)", + "sc4luckbl", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 13)", + "sc4luckbm", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 14)", + "sc4luckbn", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 15)", + "sc4luckbo", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 16)", + "sc4luckbp", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 17)", + "sc4luckbq", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 1)", + "sc4luckbr", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 2)", + "sc4luckbs", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 3)", + "sc4luckbt", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 18)", + "sc4luckbu", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 19)", + "sc4luckbv", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 20)", + "sc4luckbw", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 21)", + "sc4luckbx", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 22)", + "sc4luckby", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 4)", + "sc4luckbz", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 5)", + "sc4m2m", "Money To Money (Mazooma) (Scorpion 4) (set 1)", + "sc4m2ma", "Money To Money (Mazooma) (Scorpion 4) (set 2)", + "sc4magci", "Magic Circle (011) (Qps) (Scorpion 4) (set 1)", + "sc4magcia", "Magic Circle (021) (Qps) (Scorpion 4) (set 1)", + "sc4magcib", "Magic Circle (031) (Qps) (Scorpion 4) (set 1)", + "sc4magcic", "Magic Circle (012) (Qps) (Scorpion 4) (set 1)", + "sc4magcid", "Magic Circle (012) (Qps) (Scorpion 4) (set 3)", + "sc4magcie", "Magic Circle (022) (Qps) (Scorpion 4) (set 1)", + "sc4magcif", "Magic Circle (032) (Qps) (Scorpion 4) (set 1)", + "sc4magcig", "Magic Circle (013) (Qps) (Scorpion 4) (set 1)", + "sc4magcih", "Magic Circle (014) (Qps) (Scorpion 4) (set 1)", + "sc4magcii", "Magic Circle (024) (Qps) (Scorpion 4) (set 1)", + "sc4magcij", "Magic Circle (034) (Qps) (Scorpion 4) (set 1)", + "sc4magcik", "Magic Circle (011) (Qps) (Scorpion 4) (set 2)", + "sc4magcil", "Magic Circle (021) (Qps) (Scorpion 4) (set 2)", + "sc4magcim", "Magic Circle (031) (Qps) (Scorpion 4) (set 2)", + "sc4magcin", "Magic Circle (012) (Qps) (Scorpion 4) (set 2)", + "sc4magcio", "Magic Circle (012) (Qps) (Scorpion 4) (set 4)", + "sc4magcip", "Magic Circle (022) (Qps) (Scorpion 4) (set 2)", + "sc4magciq", "Magic Circle (032) (Qps) (Scorpion 4) (set 2)", + "sc4magcir", "Magic Circle (013) (Qps) (Scorpion 4) (set 2)", + "sc4magcis", "Magic Circle (014) (Qps) (Scorpion 4) (set 2)", + "sc4magcit", "Magic Circle (024) (Qps) (Scorpion 4) (set 2)", + "sc4magciu", "Magic Circle (034) (Qps) (Scorpion 4) (set 2)", + "sc4magic", "Magic Poundabout (Qps) (Scorpion 4) (set 1)", + "sc4magica", "Magic Poundabout (Qps) (Scorpion 4) (set 2)", + "sc4magicb", "Magic Poundabout (Qps) (Scorpion 4) (set 3)", + "sc4magicc", "Magic Poundabout (Qps) (Scorpion 4) (set 4)", + "sc4manic", "Manic Miner (Bellfruit) (Scorpion 4) (set 1)", + "sc4manica", "Manic Miner (Bellfruit) (Scorpion 4) (set 2)", + "sc4manicb", "Manic Miner (Bellfruit) (Scorpion 4) (set 5)", + "sc4manicc", "Manic Miner (Bellfruit) (Scorpion 4) (set 6)", + "sc4manicd", "Manic Miner (Bellfruit) (Scorpion 4) (set 7)", + "sc4manice", "Manic Miner (Bellfruit) (Scorpion 4) (set 8)", + "sc4manicf", "Manic Miner (Bellfruit) (Scorpion 4) (set 9)", + "sc4manicg", "Manic Miner (Bellfruit) (Scorpion 4) (set 10)", + "sc4maxcc", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 1)", + "sc4maxcca", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 2)", + "sc4maxccb", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 3)", + "sc4maxccc", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 4)", + "sc4maxim", "Maximus Cash (Mazooma) (Scorpion 4) (set 1)", + "sc4maxima", "Maximus Cash (Mazooma) (Scorpion 4) (set 2)", + "sc4maximb", "Maximus Cash (Mazooma) (Scorpion 4) (set 3)", + "sc4maximc", "Maximus Cash (Mazooma) (Scorpion 4) (set 4)", + "sc4maximd", "Maximus Cash (Mazooma) (Scorpion 4) (set 5)", + "sc4maxime", "Maximus Cash (Mazooma) (Scorpion 4) (set 6)", + "sc4maximf", "Maximus Cash (Mazooma) (Scorpion 4) (set 7)", + "sc4maximg", "Maximus Cash (Mazooma) (Scorpion 4) (set 8)", + "sc4mbags", "Money Bags (Bellfruit) (Scorpion 4) (set 1)", + "sc4mbagsa", "Money Bags (Bellfruit) (Scorpion 4) (set 2)", + "sc4mbagsb", "Money Bags (Bellfruit) (Scorpion 4) (set 3)", + "sc4mbagsc", "Money Bags (Bellfruit) (Scorpion 4) (set 4)", + "sc4mcas", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 1)", + "sc4mcas0", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 15)", + "sc4mcas1", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 16)", + "sc4mcas2", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 17)", + "sc4mcas3", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 18)", + "sc4mcas4", "Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 3)", + "sc4mcask", "Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 1)", + "sc4mcasm", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 2)", + "sc4mcasn", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 3)", + "sc4mcaso", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 4)", + "sc4mcasp", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 5)", + "sc4mcasq", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 6)", + "sc4mcasr", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 7)", + "sc4mcass", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 8)", + "sc4mcast", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 9)", + "sc4mcasu", "Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 2)", + "sc4mcasv", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 10)", + "sc4mcasw", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 11)", + "sc4mcasx", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 12)", + "sc4mcasy", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 13)", + "sc4mcasz", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 14)", + "sc4mclb", "Monopoly Club (Mazooma) (Scorpion 4) (set 1)", + "sc4mclba", "Monopoly Club (Mazooma) (Scorpion 4) (set 2)", + "sc4mclbb", "Monopoly Club (Mazooma) (Scorpion 4) (set 3)", + "sc4mclbc", "Monopoly Club (Mazooma) (Scorpion 4) (set 4)", + "sc4mclbd", "Monopoly Club (Mazooma) (Scorpion 4) (set 5)", + "sc4mclbe", "Monopoly Club (Mazooma) (Scorpion 4) (set 6)", + "sc4mdm", "Monopoly Double Money (Bellfruit) (Scorpion 4) (set 1)", + "sc4mdma", "Monopoly Double Money (Bellfruit) (Scorpion 4) (set 2)", + "sc4mgr", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 1)", + "sc4mgra", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 2)", + "sc4mgrb", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 5)", + "sc4mgrc", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 6)", + "sc4mgrd", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 7)", + "sc4mgre", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 8)", + "sc4mgrf", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 9)", + "sc4mgrg", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 10)", + "sc4mgrh", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 3)", + "sc4mgri", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 4)", + "sc4mgrj", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 11)", + "sc4mgrk", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 12)", + "sc4mgrl", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 13)", + "sc4mgrm", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 14)", + "sc4mhn", "Monopoly Here & Now (Mazooma) (Scorpion 4) (set 1)", + "sc4mhna", "Monopoly Here & Now (Mazooma) (Scorpion 4) (set 2)", + "sc4mhp", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 1)", + "sc4mhpa", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 2)", + "sc4mhpb", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 3)", + "sc4mhpc", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 4)", + "sc4mhpd", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 5)", + "sc4mhpe", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 6)", + "sc4mhpf", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 7)", + "sc4mhpg", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 8)", + "sc4mhph", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 9)", + "sc4mhpi", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 10)", + "sc4mhpj", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 11)", + "sc4mhpk", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 12)", + "sc4mhpl", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 13)", + "sc4mhpm", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 14)", + "sc4mhpn", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 15)", + "sc4mhpo", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 16)", + "sc4milja", "Miljonairs Arcade (Dutch) (Bellfruit) (Scorpion 4)", + "sc4miljo", "Miljonairs (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4milro", "Millionaires Row (Scorpion 4?)", + "sc4mmad", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 1)", + "sc4mmada", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 2)", + "sc4mmadb", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 3)", + "sc4mmadc", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 4)", + "sc4mmadd", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 5)", + "sc4mmade", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 6)", + "sc4mmadf", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 7)", + "sc4mmadg", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 8)", + "sc4mmb", "Monopoly Money Bags (Bellfruit) (Scorpion 4) (set 1)", + "sc4mmba", "Monopoly Money Bags (Bellfruit) (Scorpion 4) (set 2)", + "sc4mmm", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 1)", + "sc4mmma", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 2)", + "sc4mmmb", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 3)", + "sc4mmmc", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 4)", + "sc4mmmd", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 5)", + "sc4mmme", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 6)", + "sc4mmmf", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 7)", + "sc4mmmg", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 8)", + "sc4mondx", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 1)", + "sc4mondxa", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 2)", + "sc4mondxb", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 3)", + "sc4mondxc", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 4)", + "sc4mondxd", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 1)", + "sc4mondxe", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 3)", + "sc4mondxf", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 4)", + "sc4mondxg", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 2)", + "sc4mono5", "Monopoly 5 (PR7089, MONF) (Mazooma) (Scorpion 4) (set 1)", + "sc4mono5a", "Monopoly 5 (PR7089, MONF) (Mazooma) (Scorpion 4) (set 2)", + "sc4monoa", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 1)", + "sc4monoaa", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 2)", + "sc4monoab", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 3)", + "sc4monoac", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 4)", + "sc4monoad", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 5)", + "sc4monoae", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 6)", + "sc4monoaf", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 7)", + "sc4monoag", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 8)", + "sc4monoah", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 9)", + "sc4monoai", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 10)", + "sc4monoaj", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 11)", + "sc4monoak", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 12)", + "sc4monoal", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 13)", + "sc4monoam", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 14)", + "sc4monoan", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 15)", + "sc4monoao", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 16)", + "sc4monoap", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 17)", + "sc4monoaq", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 18)", + "sc4monob", "Monopoly (Bellfruit) (Scorpion 4) (set 1)", + "sc4monoba", "Monopoly (Bellfruit) (Scorpion 4) (set 2)", + "sc4monobb", "Monopoly (Bellfruit) (Scorpion 4) (set 3)", + "sc4monobc", "Monopoly (Bellfruit) (Scorpion 4) (set 4)", + "sc4monobd", "Monopoly (Bellfruit) (Scorpion 4) (set 5)", + "sc4monobe", "Monopoly (Bellfruit) (Scorpion 4) (set 6)", + "sc4monobf", "Monopoly (Bellfruit) (Scorpion 4) (set 7)", + "sc4monobg", "Monopoly (Bellfruit) (Scorpion 4) (set 8)", + "sc4monobh", "Monopoly (Bellfruit) (Scorpion 4) (set 9)", + "sc4monobi", "Monopoly (Bellfruit) (Scorpion 4) (set 10)", + "sc4monobj", "Monopoly (Bellfruit) (Scorpion 4) (set 11)", + "sc4monobk", "Monopoly (Bellfruit) (Scorpion 4) (set 12)", + "sc4monobl", "Monopoly (Bellfruit) (Scorpion 4) (set 13)", + "sc4monobm", "Monopoly (Bellfruit) (Scorpion 4) (set 14)", + "sc4monod", "Monopoly (Mazooma) [German] (Scorpion 4) (set 1)", + "sc4monoda", "Monopoly (Mazooma) [German] (Scorpion 4) (set 2)", + "sc4monodb", "Monopoly (Mazooma) [German] (Scorpion 4) (set 3)", + "sc4monog", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 5)", + "sc4monoga", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 6)", + "sc4monop", "Monopoly Triple (PR2056, TBOX) (Mazooma) (Scorpion 4) (Top Box, set 1)", + "sc4monopa", "Monopoly Triple (PR2056, TBOX) (Mazooma) (Scorpion 4) (Top Box, set 2)", + "sc4monot", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 1)", + "sc4monota", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 2)", + "sc4monotb", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 3)", + "sc4monotc", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 4)", + "sc4monsp", "Money Spinner (Dutch) (Bellfruit) (Scorpion 4)", + "sc4mont", "Montego Pay (Qps) (Scorpion 4) (set 1)", + "sc4monta", "Montego Pay (Qps) (Scorpion 4) (set 2)", + "sc4montb", "Montego Pay (Qps) (Scorpion 4) (set 3)", + "sc4montc", "Montego Pay (Qps) (Scorpion 4) (set 4)", + "sc4montd", "Montego Pay (Qps) (Scorpion 4) (set 5)", + "sc4monte", "Montego Pay (Qps) (Scorpion 4) (set 6)", + "sc4montf", "Montego Pay (Qps) (Scorpion 4) (set 7)", + "sc4montg", "Montego Pay (Qps) (Scorpion 4) (set 8)", + "sc4month", "Montego Pay (Qps) (Scorpion 4) (set 9)", + "sc4monti", "Montego Pay (Qps) (Scorpion 4) (set 10)", + "sc4motor", "Motorway Mania (Bellfruit) (Scorpion 4) (set 1)", + "sc4motora", "Motorway Mania (Bellfruit) (Scorpion 4) (set 2)", + "sc4motorb", "Motorway Mania (Bellfruit) (Scorpion 4) (set 3)", + "sc4motorc", "Motorway Mania (Bellfruit) (Scorpion 4) (set 4)", + "sc4motord", "Motorway Mania (Bellfruit) (Scorpion 4) (set 5)", + "sc4motore", "Motorway Mania (Bellfruit) (Scorpion 4) (set 6)", + "sc4motorf", "Motorway Mania (Bellfruit) (Scorpion 4) (set 7)", + "sc4motorg", "Motorway Mania (Bellfruit) (Scorpion 4) (set 8)", + "sc4motorh", "Motorway Mania (Bellfruit) (Scorpion 4) (set 9)", + "sc4mou", "Move On Up (Qps) (Scorpion 4) (set 1)", + "sc4moua", "Move On Up (Qps) (Scorpion 4) (set 2)", + "sc4moub", "Move On Up (Qps) (Scorpion 4) (set 3)", + "sc4mowow", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 1)", + "sc4mowowa", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 2)", + "sc4mowowb", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 3)", + "sc4mowowc", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 4)", + "sc4mr2r", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 1)", + "sc4mr2ra", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 2)", + "sc4mr2rb", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 3)", + "sc4mr2rc", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 4)", + "sc4mr2rd", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 5)", + "sc4mr2re", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 6)", + "sc4mrh", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 1)", + "sc4mrha", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 2)", + "sc4mrhb", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 3)", + "sc4mrhc", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 4)", + "sc4mrhd", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 5)", + "sc4mrhe", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 6)", + "sc4msclb", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4msclba", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4msclbb", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4msclbc", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4msclbd", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4msclbe", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4msclbf", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4msclbg", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4mspid", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 1)", + "sc4mspida", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 2)", + "sc4mspidb", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 3)", + "sc4mspidc", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 4)", + "sc4mspidd", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 5)", + "sc4mspide", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 6)", + "sc4mspidf", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 7)", + "sc4mspidg", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 8)", + "sc4mspidh", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 13)", + "sc4mspidi", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 14)", + "sc4mspidj", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 9)", + "sc4mspidk", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 10)", + "sc4mspidl", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 11)", + "sc4mspidm", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 12)", + "sc4mtb", "Money To Burn (Bellfruit) (Scorpion 4) (set 1)", + "sc4mtba", "Money To Burn (Bellfruit) (Scorpion 4) (set 2)", + "sc4mtbb", "Money To Burn (Bellfruit) (Scorpion 4) (set 3)", + "sc4mtbc", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 1)", + "sc4mtbcl", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4mtbcla", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4mtbclb", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4mtbclc", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4mtbcld", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4mtbcle", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4mtbclf", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4mtbclg", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4mtbclh", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4mtbcli", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4mtbclj", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 11)", + "sc4mtbclk", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 12)", + "sc4mtbcll", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 13)", + "sc4mtbclm", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 14)", + "sc4mtbcln", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 15)", + "sc4mtbclo", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 16)", + "sc4mtbd", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 2)", + "sc4mtbe", "Money To Burn (Bellfruit) (Scorpion 4) (set 4)", + "sc4mtbf", "Money To Burn (Bellfruit) (Scorpion 4) (set 5)", + "sc4mtbg", "Money To Burn (Bellfruit) (Scorpion 4) (set 6)", + "sc4mtbh", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 3)", + "sc4mtbi", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 4)", + "sc4mtbj", "Money To Burn (Bellfruit) (Scorpion 4) (set 7)", + "sc4mwwtb", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 1)", + "sc4mwwtba", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 2)", + "sc4mwwtbb", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 3)", + "sc4mwwtbc", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 4)", + "sc4mwwtbd", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 5)", + "sc4nmare", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 1)", + "sc4nmarea", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 2)", + "sc4nmareb", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 3)", + "sc4nmarec", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 4)", + "sc4nmtj", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (011)", + "sc4nmtja", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (014, set 1)", + "sc4nmtjb", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (044, set 1)", + "sc4nmtjc", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (014, set 2)", + "sc4nmtjd", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (044, set 2)", + "sc4nudit", "Nudge It (Mazooma) (Scorpion 4) (set 1)", + "sc4nudita", "Nudge It (Mazooma) (Scorpion 4) (set 2)", + "sc4nuditb", "Nudge It (Mazooma) (Scorpion 4) (set 3)", + "sc4nunsm", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 1)", + "sc4nunsmb", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 2)", + "sc4nunsmc", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 3)", + "sc4nunsmd", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 4)", + "sc4nunsme", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 5)", + "sc4nunsmf", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 6)", + "sc4nunsmg", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 7)", + "sc4nunsmh", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 8)", + "sc4nunsmi", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 9)", + "sc4nunsmj", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 10)", + "sc4onup", "On The Up (Mazooma) (Scorpion 4) (set 1)", + "sc4onupa", "On The Up (Mazooma) (Scorpion 4) (set 2)", + "sc4opses", "Open Sesame (Bellfruit) (Scorpion 4) (set 1)", + "sc4opsesa", "Open Sesame (Bellfruit) (Scorpion 4) (set 2)", + "sc4outlw", "Outlaw (Bellfruit) (Scorpion 4) (set 1)", + "sc4outlwa", "Outlaw (Bellfruit) (Scorpion 4) (set 2)", + "sc4outlwb", "Outlaw (Bellfruit) (Scorpion 4) (set 3)", + "sc4outlwc", "Outlaw (Bellfruit) (Scorpion 4) (set 4)", + "sc4oyf", "Off Your Face (Bellfruit) (Scorpion 4) (set 1)", + "sc4oyfa", "Off Your Face (Bellfruit) (Scorpion 4) (set 2)", + "sc4paccl", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 1)", + "sc4paccla", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 2)", + "sc4pacclb", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 3)", + "sc4pacclc", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 4)", + "sc4paccs", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 1)", + "sc4paccsa", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 2)", + "sc4paccsb", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 3)", + "sc4paccsc", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 4)", + "sc4paccsd", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 5)", + "sc4paccse", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 6)", + "sc4paccsf", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 7)", + "sc4paccsg", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 8)", + "sc4paccsh", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 12)", + "sc4paccsi", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 13)", + "sc4paccsj", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 9)", + "sc4paccsk", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 10)", + "sc4paccsl", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 11)", + "sc4pacmn", "Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 1)", + "sc4pacmna", "Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 2)", + "sc4pacmnb", "Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 3)", + "sc4pacpl", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 1)", + "sc4pacpla", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 2)", + "sc4pacplb", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 3)", + "sc4pacplc", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 4)", + "sc4pacpld", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 5)", + "sc4pacple", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 6)", + "sc4pacplf", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 7)", + "sc4pacplg", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 8)", + "sc4pacplh", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 9)", + "sc4pacqp", "Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 1)", + "sc4pacqpa", "Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 2)", + "sc4pacqpb", "Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 3)", + "sc4party", "Party Time (German) (PR7151, GPTM) (Nova) (Scorpion 4)", + "sc4paytm", "Pay Time (Dutch) (Bellfruit) (Scorpion 4)", + "sc4pen1", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 1)", + "sc4pen1a", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 2)", + "sc4pen1b", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 3)", + "sc4pen1c", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 4)", + "sc4pen1d", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 5)", + "sc4pglcl", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4pglcla", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4pglclb", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4pglclc", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4pglcld", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4pglcle", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4pglclf", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4pglclg", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4pglclh", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4pglcs", "Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4pglcsa", "Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4pglcsb", "Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 3)", + "sc4pgold", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 1)", + "sc4pgolda", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 2)", + "sc4pgoldb", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 3)", + "sc4pgoldc", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 4)", + "sc4pgoldd", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 5)", + "sc4pgoldf", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 6)", + "sc4pipe", "Piping Hot (Mazooma) (Scorpion 4) (set 1)", + "sc4pipea", "Piping Hot (Mazooma) (Scorpion 4) (set 2)", + "sc4pir", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 1)", + "sc4pira", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 2)", + "sc4pirb", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 3)", + "sc4pirc", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 4)", + "sc4pird", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 5)", + "sc4pire", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 6)", + "sc4pirf", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 7)", + "sc4pirg", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 8)", + "sc4plumb", "Plumb Crazy Club (413) (Qps) (Scorpion 4) (set 1)", + "sc4plumba", "Plumb Crazy Club (413) (Qps) (Scorpion 4) (set 2)", + "sc4plumbb", "Plumb Crazy Club (411) (Qps) (Scorpion 4) (set 1)", + "sc4plumbc", "Plumb Crazy Club (411) (Qps) (Scorpion 4) (set 2)", + "sc4plumbd", "Plumb Crazy Club (412) (Qps) (Scorpion 4) (set 1)", + "sc4plumbe", "Plumb Crazy Club (412) (Qps) (Scorpion 4) (set 2)", + "sc4pmani", "Pac Mania (PR2031, ANIA) (Mazooma) (Scorpion 4) (set 1)", + "sc4pmania", "Pac Mania (PR2031, ANIA) (Mazooma) (Scorpion 4) (set 2)", + "sc4po8", "Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 1)", + "sc4po8a", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 1)", + "sc4po8b", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 2)", + "sc4po8c", "Pieces Of Eight (011) (Qps) (Scorpion 4) (set 1)", + "sc4po8d", "Pieces Of Eight (041) (Qps) (Scorpion 4) (set 1)", + "sc4po8e", "Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 2)", + "sc4po8f", "Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 3)", + "sc4po8g", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 3)", + "sc4po8h", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 4)", + "sc4po8i", "Pieces Of Eight (012) (Qps) (Scorpion 4) (set 1)", + "sc4po8j", "Pieces Of Eight (042) (Qps) (Scorpion 4) (set 1)", + "sc4po8k", "Pieces Of Eight (012) (Qps) (Scorpion 4) (set 2)", + "sc4po8l", "Pieces Of Eight (042) (Qps) (Scorpion 4) (set 2)", + "sc4po8m", "Pieces Of Eight (011) (Qps) (Scorpion 4) (set 2)", + "sc4po8n", "Pieces Of Eight (041) (Qps) (Scorpion 4) (set 2)", + "sc4pog", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 1)", + "sc4poga", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 2)", + "sc4pogb", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 3)", + "sc4pogbl", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4pogbla", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4pogblb", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4pogblc", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4pogbld", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4pogble", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4pogc", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 4)", + "sc4pogd", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 5)", + "sc4poge", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 6)", + "sc4pogf", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 7)", + "sc4pogg", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 8)", + "sc4pogh", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 9)", + "sc4pogi", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 10)", + "sc4polem", "Pole Position (Mazooma) (Scorpion 4) (set 1)", + "sc4polema", "Pole Position (Mazooma) (Scorpion 4) (set 2)", + "sc4polemb", "Pole Position (Mazooma) (Scorpion 4) (set 3)", + "sc4polemc", "Pole Position (Mazooma) (Scorpion 4) (set 4)", + "sc4polemd", "Pole Position (Mazooma) (Scorpion 4) (set 5)", + "sc4polen", "Pole Position (German) (PR7012, GPOS) (Nova) (Scorpion 4)", + "sc4polic", "Police Squid (V1.0) (Qps) (Scorpion 4) (set 1)", + "sc4polica", "Police Squid (V2.0) (Qps) (Scorpion 4) (set 1)", + "sc4policb", "Police Squid (V1.0) (Qps) (Scorpion 4) (set 2)", + "sc4policc", "Police Squid (V2.0) (Qps) (Scorpion 4) (set 2)", + "sc4pony", "Pony Express (Bellfruit) (Scorpion 4) (set 1)", + "sc4ponya", "Pony Express (Bellfruit) (Scorpion 4) (set 2)", + "sc4ponyb", "Pony Express (Bellfruit) (Scorpion 4) (set 3)", + "sc4ponyc", "Pony Express (Bellfruit) (Scorpion 4) (set 4)", + "sc4ponyd", "Pony Express (Bellfruit) (Scorpion 4) (set 5)", + "sc4ponye", "Pony Express (Bellfruit) (Scorpion 4) (set 6)", + "sc4popey", "Popeye (Mazooma) (Scorpion 4) (set 1)", + "sc4popeya", "Popeye (Mazooma) (Scorpion 4) (set 2)", + "sc4popeyb", "Popeye (Mazooma) (Scorpion 4) (set 3)", + "sc4popeyc", "Popeye (Mazooma) (Scorpion 4) (set 4)", + "sc4popeyd", "Popeye (Mazooma) (Scorpion 4) (set 5)", + "sc4popeye", "Popeye (Mazooma) (Scorpion 4) (set 6)", + "sc4potp", "Pick Of The Pack (Bellfruit) (Scorpion 4) (set 1)", + "sc4potpa", "Pick Of The Pack (Bellfruit) (Scorpion 4) (set 2)", + "sc4potsh", "Pot Shot (Qps) (Scorpion 4) (set 1)", + "sc4potsha", "Pot Shot (Qps) (Scorpion 4) (set 2)", + "sc4pp", "Pink Panther (Mazooma) (Scorpion 4) (set 1)", + "sc4ppa", "Pink Panther (Mazooma) (Scorpion 4) (set 2)", + "sc4ppb", "Pink Panther (Mazooma) (Scorpion 4) (set 3)", + "sc4ppc", "Pink Panther (Mazooma) (Scorpion 4) (set 4)", + "sc4ppclb", "Pink Panther Club (411) (Qps) (Scorpion 4) (set 1)", + "sc4ppclba", "Pink Panther Club (412) (Qps) (Scorpion 4) (set 1)", + "sc4ppclbb", "Pink Panther Club (411) (Qps) (Scorpion 4) (set 2)", + "sc4ppclbc", "Pink Panther Club (412) (Qps) (Scorpion 4) (set 2)", + "sc4ppcr", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 1)", + "sc4ppcra", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 2)", + "sc4ppcrb", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 3)", + "sc4ppcrd", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 4)", + "sc4ppcre", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 5)", + "sc4ppcrf", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 6)", + "sc4ppcrg", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 7)", + "sc4ppcrh", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 8)", + "sc4ppcri", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 9)", + "sc4ppcrj", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 10)", + "sc4ppcrtb", "Pink Panther Clouseau's Revenge Top Box (Mazooma) (Scorpion 4)", + "sc4ppctc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 1)", + "sc4ppctca", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 2)", + "sc4ppctcb", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 3)", + "sc4ppctcc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 4)", + "sc4ppctcd", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 5)", + "sc4ppctce", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 6)", + "sc4ppctcf", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 7)", + "sc4ppctcg", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 8)", + "sc4ppd", "Pink Panther (Mazooma) (Scorpion 4) (set 5)", + "sc4ppdym", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 1)", + "sc4ppdymb", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 2)", + "sc4ppdymc", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 3)", + "sc4ppdymd", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 4)", + "sc4ppdymf", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 5)", + "sc4ppdymg", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 6)", + "sc4ppdymh", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 7)", + "sc4ppdymi", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 8)", + "sc4ppdymtb", "Pink Panther Double Your Money Top Box (Mazooma) (Scorpion 4) (set 1)", + "sc4ppdymtba", "Pink Panther Double Your Money Top Box (Mazooma) (Scorpion 4) (set 2)", + "sc4ppsag", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 1)", + "sc4ppsaga", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 2)", + "sc4ppsagb", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 3)", + "sc4ppsagc", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 4)", + "sc4ppsagd", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 5)", + "sc4ppsage", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 6)", + "sc4ppsagf", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 7)", + "sc4ppsagg", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 8)", + "sc4ppsagh", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 9)", + "sc4ppsagi", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 10)", + "sc4pstat", "Paystation (V2.0) (Qps) (Scorpion 4) (set 1)", + "sc4pstata", "Paystation (V2.1) (Qps) (Scorpion 4) (set 1)", + "sc4pstatb", "Paystation (V2.0) (Qps) (Scorpion 4) (set 2)", + "sc4pstatc", "Paystation (V2.1) (Qps) (Scorpion 4) (set 2)", + "sc4pstatd", "Paystation (V2.2) (Qps) (Scorpion 4)", + "sc4pstate", "Paystation (V2.3) (Qps) (Scorpion 4)", + "sc4pstatf", "Paystation (V011) (Qps) (Scorpion 4) (set 1)", + "sc4pstatg", "Paystation (V041) (Qps) (Scorpion 4) (set 1)", + "sc4pstath", "Paystation (V4.0) (Qps) (Scorpion 4) (set 1)", + "sc4pstati", "Paystation (V011) (Qps) (Scorpion 4) (set 2)", + "sc4pstatj", "Paystation (V041) (Qps) (Scorpion 4) (set 2)", + "sc4pstatm", "Paystation (V4.0) (Qps) (Scorpion 4) (set 2)", + "sc4pstatn", "Paystation (V012) (Qps) (Scorpion 4) (set 1)", + "sc4pstato", "Paystation (V042) (Qps) (Scorpion 4) (set 1)", + "sc4pstatp", "Paystation (V012) (Qps) (Scorpion 4) (set 2)", + "sc4pstatq", "Paystation (V042) (Qps) (Scorpion 4) (set 2)", + "sc4pwcrz", "Power Crazy (Bellfruit) (Scorpion 4) (set 1)", + "sc4pwcrza", "Power Crazy (Bellfruit) (Scorpion 4) (set 2)", + "sc4pwcrzb", "Power Crazy (Bellfruit) (Scorpion 4) (set 3)", + "sc4pwcrzc", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 1)", + "sc4pwcrzd", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 2)", + "sc4pwcrze", "Power Crazy (Bellfruit) (Scorpion 4) (set 4)", + "sc4pwcrzf", "Power Crazy (Bellfruit) (Scorpion 4) (set 5)", + "sc4pwcrzg", "Power Crazy (Bellfruit) (Scorpion 4) (set 6)", + "sc4pwcrzh", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 3)", + "sc4pwcrzi", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 4)", + "sc4pwrbl", "Powerball (Bellfruit) (Scorpion 4) (set 1)", + "sc4pwrbla", "Powerball (Bellfruit) (Scorpion 4) (set 2)", + "sc4pwrbq", "Power Ball (Qps) (Scorpion 4) (set 1)", + "sc4pwrbqa", "Power Ball (Qps) (Scorpion 4) (set 2)", + "sc4pwrpl", "Power Play (Mazooma) (Scorpion 4) (set 1)", + "sc4pwrpla", "Power Play (Mazooma) (Scorpion 4) (set 2)", + "sc4pwrplb", "Power Play (Mazooma) (Scorpion 4) (set 3)", + "sc4pwrplc", "Power Play (Mazooma) (Scorpion 4) (set 4)", + "sc4pwrsg", "Power Surge (Qps) (Scorpion 4) (set 1)", + "sc4pwrsga", "Power Surge (Qps) (Scorpion 4) (set 2)", + "sc4pwrsgb", "Power Surge (Qps) (Scorpion 4) (set 3)", + "sc4pwrsgc", "Power Surge (Qps) (Scorpion 4) (set 4)", + "sc4qmodo", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 1)", + "sc4qmodoa", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 2)", + "sc4qmodob", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 3)", + "sc4qmodoc", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 4)", + "sc4qmodod", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 5)", + "sc4quart", "Quaterback (Mazooma) (Scorpion 4) (set 1)", + "sc4quarta", "Quaterback (Mazooma) (Scorpion 4) (set 2)", + "sc4quartb", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 1)", + "sc4quartc", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 1)", + "sc4quartd", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 2)", + "sc4quarte", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 2)", + "sc4quartf", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 3)", + "sc4quartg", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 4)", + "sc4quarth", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 5)", + "sc4quarti", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 3)", + "sc4quartj", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 6)", + "sc4quartk", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 4)", + "sc4quartl", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 7)", + "sc4quartm", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 8)", + "sc4quidr", "Quid Rock (Qps) (Scorpion 4) (set 1)", + "sc4quidra", "Quid Rock (Qps) (Scorpion 4) (set 2)", + "sc4quidrb", "Quid Rock (Qps) (Scorpion 4) (set 3)", + "sc4quidrc", "Quid Rock (Qps) (Scorpion 4) (set 4)", + "sc4quidv", "Quid Vicious (Mazooma) (Scorpion 4) (set 1)", + "sc4quidva", "Quid Vicious (Mazooma) (Scorpion 4) (set 2)", + "sc4quidvb", "Quid Vicious (Mazooma) (Scorpion 4) (set 3)", + "sc4quidvc", "Quid Vicious (Mazooma) (Scorpion 4) (set 4)", + "sc4r2r", "Reel To Reel (Mazooma) (Scorpion 4) (set 1)", + "sc4r2ra", "Reel To Reel (Mazooma) (Scorpion 4) (set 2)", + "sc4r2rb", "Reel To Reel (Mazooma) (Scorpion 4) (set 3)", + "sc4r2rc", "Reel To Reel (Mazooma) (Scorpion 4) (set 4)", + "sc4r66", "Route 66 (Mazooma) (Scorpion 4)", + "sc4rbank", "Royle Banker (Bellfruit) (Scorpion 4) (set 1)", + "sc4rbanka", "Royle Banker (Bellfruit) (Scorpion 4) (set 2)", + "sc4rbankb", "Royle Banker (Bellfruit) (Scorpion 4) (set 3)", + "sc4rbankc", "Royle Banker (Bellfruit) (Scorpion 4) (set 4)", + "sc4rdrag", "Red Dragon (011) (Qps) (Scorpion 4) (set 1)", + "sc4rdraga", "Red Dragon (011) (Qps) (Scorpion 4) (set 2)", + "sc4rdragc", "Red Dragon (021) (Qps) (Scorpion 4) (set 1)", + "sc4rdragf", "Red Dragon (021) (Qps) (Scorpion 4) (set 2)", + "sc4rdrcl", "Red Dragon Club (411) (Qps) (Scorpion 4) (set 1)", + "sc4rdrcla", "Red Dragon Club (412) (Qps) (Scorpion 4)", + "sc4rdrclb", "Red Dragon Club (411) (Qps) (Scorpion 4) (set 2)", + "sc4redad", "Red Alert (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4redada", "Red Alert (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4redsq", "Red Square (Mazooma) (Scorpion 4) (set 1)", + "sc4redsqa", "Red Square (Mazooma) (Scorpion 4) (set 2)", + "sc4redsqb", "Red Square (Mazooma) (Scorpion 4) (set 3)", + "sc4redsqc", "Red Square (Mazooma) (Scorpion 4) (set 4)", + "sc4relcz", "Reely Crazy (Bellfruit) (Scorpion 4) (set 1)", + "sc4relcza", "Reely Crazy (Bellfruit) (Scorpion 4) (set 2)", + "sc4relczb", "Reely Crazy (Bellfruit) (Scorpion 4) (set 3)", + "sc4relczc", "Reely Crazy (Bellfruit) (Scorpion 4) (set 4)", + "sc4revo", "Revolver (Mazooma) (Scorpion 4) (set 1)", + "sc4revoa", "Revolver (Mazooma) (Scorpion 4) (set 2)", + "sc4revob", "Revolver (Mazooma) (Scorpion 4) (set 3)", + "sc4revoc", "Revolver (Mazooma) (Scorpion 4) (set 4)", + "sc4revod", "Revolver (Mazooma) (Scorpion 4) (set 5)", + "sc4revoe", "Revolver (Mazooma) (Scorpion 4) (set 6)", + "sc4rhx", "Red Hot X (Mazooma) (Scorpion 4) (set 1)", + "sc4rhxa", "Red Hot X (Mazooma) (Scorpion 4) (set 2)", + "sc4rhxb", "Red Hot X (Mazooma) (Scorpion 4) (set 9)", + "sc4rhxc", "Red Hot X (Mazooma) (Scorpion 4) (set 10)", + "sc4rhxcl", "Red Hot X Club (Mazooma) (Scorpion 4) (set 1)", + "sc4rhxcla", "Red Hot X Club (Mazooma) (Scorpion 4) (set 2)", + "sc4rhxclb", "Red Hot X Club (Mazooma) (Scorpion 4) (set 3)", + "sc4rhxclc", "Red Hot X Club (Mazooma) (Scorpion 4) (set 4)", + "sc4rhxcs", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 1)", + "sc4rhxcsa", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 2)", + "sc4rhxcsb", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 3)", + "sc4rhxcsc", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 4)", + "sc4rhxcsd", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 5)", + "sc4rhxcse", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 6)", + "sc4rhxd", "Red Hot X (Mazooma) (Scorpion 4) (set 3)", + "sc4rhxe", "Red Hot X (Mazooma) (Scorpion 4) (set 4)", + "sc4rhxf", "Red Hot X (Mazooma) (Scorpion 4) (set 11)", + "sc4rhxg", "Red Hot X (Mazooma) (Scorpion 4) (set 12)", + "sc4rhxh", "Red Hot X (Mazooma) (Scorpion 4) (set 13)", + "sc4rhxi", "Red Hot X (Mazooma) (Scorpion 4) (set 14)", + "sc4rhxj", "Red Hot X (Mazooma) (Scorpion 4) (set 5)", + "sc4rhxk", "Red Hot X (Mazooma) (Scorpion 4) (set 6)", + "sc4rhxl", "Red Hot X (Mazooma) (Scorpion 4) (set 7)", + "sc4rhxm", "Red Hot X (Mazooma) (Scorpion 4) (set 8)", + "sc4rhxn", "Red Hot X (Mazooma) (Scorpion 4) (set 15)", + "sc4rhxo", "Red Hot X (Mazooma) (Scorpion 4) (set 16)", + "sc4rhxp", "Red Hot X (Mazooma) (Scorpion 4) (set 17)", + "sc4rhxq", "Red Hot X (Mazooma) (Scorpion 4) (set 18)", + "sc4rhxr", "Red Hot X (Mazooma) (Scorpion 4) (set 19)", + "sc4rhxs", "Red Hot X (Mazooma) (Scorpion 4) (set 20)", + "sc4rhxt", "Red Hot X (Mazooma) (Scorpion 4) (set 21)", + "sc4rhxu", "Red Hot X (Mazooma) (Scorpion 4) (set 22)", + "sc4rhxv", "Red Hot X (Mazooma) (Scorpion 4) (set 23)", + "sc4rhxw", "Red Hot X (Mazooma) (Scorpion 4) (set 24)", + "sc4rich", "Rich Geezer (Bellfruit) (Scorpion 4) (set 1)", + "sc4richa", "Rich Geezer (Bellfruit) (Scorpion 4) (set 2)", + "sc4richb", "Rich Geezer (Bellfruit) (Scorpion 4) (set 3)", + "sc4richc", "Rich Geezer (Bellfruit) (Scorpion 4) (set 4)", + "sc4richd", "Rich Geezer (Bellfruit) (Scorpion 4) (set 5)", + "sc4riche", "Rich Geezer (Bellfruit) (Scorpion 4) (set 6)", + "sc4richf", "Rich Geezer (Bellfruit) (Scorpion 4) (set 7)", + "sc4richg", "Rich Geezer (Bellfruit) (Scorpion 4) (set 8)", + "sc4richh", "Rich Geezer (Bellfruit) (Scorpion 4) (set 9)", + "sc4richi", "Rich Geezer (Bellfruit) (Scorpion 4) (set 10)", + "sc4richj", "Rich Geezer (Bellfruit) (Scorpion 4) (set 11)", + "sc4richk", "Rich Geezer (Bellfruit) (Scorpion 4) (set 12)", + "sc4richl", "Rich Geezer (Bellfruit) (Scorpion 4) (set 13)", + "sc4rio", "Rio Grande (Dutch) (Bellfruit) (Scorpion 4)", + "sc4rmo", "Roll Me Over Casino (Bellfruit) (Scorpion 4) (set 1)", + "sc4rmoa", "Roll Me Over Casino (Bellfruit) (Scorpion 4) (set 2)", + "sc4rogds", "Rogan Dosh (Qps) (Scorpion 4) (set 1)", + "sc4rogdsa", "Rogan Dosh (Qps) (Scorpion 4) (set 2)", + "sc4rogdsb", "Rogan Dosh (Qps) (Scorpion 4) (set 3)", + "sc4rogdsc", "Rogan Dosh (Qps) (Scorpion 4) (set 4)", + "sc4rogdsd", "Rogan Dosh (v2.0) (Qps) (Scorpion 4) (set 1)", + "sc4rogdse", "Rogan Dosh (v1.6) (Qps) (Scorpion 4)", + "sc4rogdsf", "Rogan Dosh (v2.0) (Qps) (Scorpion 4) (set 2)", + "sc4rogdsg", "Rogan Dosh (v2.1) (Qps) (Scorpion 4)", + "sc4roksc", "Rocket Science (V1.1) (Qps) (Scorpion 4) (set 1)", + "sc4roksca", "Rocket Science (011) (Qps) (Scorpion 4) (set 1)", + "sc4rokscb", "Rocket Science (V1.1) (Qps) (Scorpion 4) (set 2)", + "sc4rokscc", "Rocket Science (011) (Qps) (Scorpion 4) (set 2)", + "sc4rollo", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 1)", + "sc4rolloa", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 2)", + "sc4rollob", "Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 1)", + "sc4rolloc", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 3)", + "sc4rollod", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 4)", + "sc4rolloe", "Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 2)", + "sc4rollof", "Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 3)", + "sc4rosts", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 1)", + "sc4rostsa", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 2)", + "sc4rostsb", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 3)", + "sc4rostsc", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 4)", + "sc4rostsd", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 5)", + "sc4rostse", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 6)", + "sc4rostsf", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 7)", + "sc4rostsg", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 8)", + "sc4rotc", "Return Of The Count (Mazooma) (Scorpion 4) (set 1)", + "sc4rotca", "Return Of The Count (Mazooma) (Scorpion 4) (set 2)", + "sc4rotcb", "Return Of The Count (Mazooma) (Scorpion 4) (set 3)", + "sc4rotcc", "Return Of The Count (Mazooma) (Scorpion 4) (set 4)", + "sc4rotcd", "Return Of The Count (Mazooma) (Scorpion 4) (set 5)", + "sc4rovrt", "Rovers Return (Mazooma) (Scorpion 4) (set 1)", + "sc4rovrta", "Rovers Return (Mazooma) (Scorpion 4) (set 2)", + "sc4rovrtb", "Rovers Return (Mazooma) (Scorpion 4) (set 3)", + "sc4rovrtc", "Rovers Return (Mazooma) (Scorpion 4) (set 4)", + "sc4rovrtd", "Rovers Return (Mazooma) (Scorpion 4) (set 5)", + "sc4rovrte", "Rovers Return (Mazooma) (Scorpion 4) (set 6)", + "sc4royle", "Royle Family (Bellfruit) (Scorpion 4) (set 1)", + "sc4roylea", "Royle Family (Bellfruit) (Scorpion 4) (set 2)", + "sc4royleb", "Royle Family (Bellfruit) (Scorpion 4) (set 3)", + "sc4roylec", "Royle Family (Bellfruit) (Scorpion 4) (set 4)", + "sc4royled", "Royle Family (Bellfruit) (Scorpion 4) (set 5)", + "sc4roylee", "Royle Family (Bellfruit) (Scorpion 4) (set 6)", + "sc4roylef", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 1)", + "sc4royleg", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 2)", + "sc4royleh", "Royle Family (Bellfruit) (Scorpion 4) (set 7)", + "sc4roylei", "Royle Family (Bellfruit) (Scorpion 4) (set 8)", + "sc4roylej", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 3)", + "sc4roylek", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 4)", + "sc4roylel", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 5)", + "sc4roylem", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 6)", + "sc4rt", "Rolling Thunder (Mazooma) (Scorpion 4) (set 1)", + "sc4rta", "Rolling Thunder (Mazooma) (Scorpion 4) (set 2)", + "sc4rtb", "Rolling Thunder (Mazooma) (Scorpion 4) (set 3)", + "sc4rtc", "Rolling Thunder (Mazooma) (Scorpion 4) (set 4)", + "sc4rtclb", "Rolling Thunder Club (Mazooma) (Scorpion 4) (set 1)", + "sc4rtclba", "Rolling Thunder Club (Mazooma) (Scorpion 4) (set 2)", + "sc4rtd", "Rolling Thunder (Mazooma) (Scorpion 4) (set 5)", + "sc4rttt", "Rise To The Top (Mazooma) (Scorpion 4) (set 1)", + "sc4rttta", "Rise To The Top (Mazooma) (Scorpion 4) (set 2)", + "sc4rtttb", "Rise To The Top (Mazooma) (Scorpion 4) (set 3)", + "sc4rtttc", "Rise To The Top (Mazooma) (Scorpion 4) (set 4)", + "sc4rtttd", "Rise To The Top (Mazooma) (Scorpion 4) (set 5)", + "sc4rttte", "Rise To The Top (Mazooma) (Scorpion 4) (set 6)", + "sc4rvl", "Revolution (Dutch) (Bellfruit) (Scorpion 4)", + "sc4rvlnx", "Revolution The Next (Dutch) (Bellfruit) (Scorpion 4)", + "sc4s16", "Section 16 (Mazooma) (Scorpion 4) (set 1)", + "sc4s16a", "Section 16 (Mazooma) (Scorpion 4) (set 2)", + "sc4s2k", "Sinbad 2000 (German) (Nova) (Scorpion 4)", + "sc4s6c", "Super 6 Club (65% Fixed) (Bellfruit) (Scorpion 4) (set 1)", + "sc4s6ca", "Super 6 Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4s6cb", "Super 6 Club (65% Fixed) (Bellfruit) (Scorpion 4) (set 2)", + "sc4s6cc", "Super 6 Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4s6cd", "Super 6 Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4s6ce", "Super 6 Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4sace", "Space Ace (Qps) (Scorpion 4) (set 1)", + "sc4sacea", "Space Ace (Qps) (Scorpion 4) (set 2)", + "sc4sahed", "Streaks Ahead (Qps) (Scorpion 4) (set 1)", + "sc4saheda", "Streaks Ahead (Qps) (Scorpion 4) (set 2)", + "sc4sahedb", "Streaks Ahead (Qps) (Scorpion 4) (set 3)", + "sc4sbust", "Space Buster (Qps) (Scorpion 4) (set 1)", + "sc4sbusta", "Space Buster (Qps) (Scorpion 4) (set 2)", + "sc4sdr", "Super Diamonds & Rubies (PR6921) (Bellfruit) (Scorpion 4) (set 1)", + "sc4sdra", "Super Diamonds & Rubies SP98 (PR6921) (Bellfruit) (Scorpion 4) (set 1)", + "sc4sdrb", "Super Diamonds & Rubies (PR6921) (Bellfruit) (Scorpion 4) (set 2)", + "sc4sdrc", "Super Diamonds & Rubies SP98 (PR6921) (Bellfruit) (Scorpion 4) (set 2)", + "sc4sf", "Street Fighter (Mazooma) (Scorpion 4) (set 1)", + "sc4sfa", "Street Fighter (Mazooma) (Scorpion 4) (set 2)", + "sc4sfb", "Street Fighter (Mazooma) (Scorpion 4) (set 3)", + "sc4sfc", "Street Fighter (Mazooma) (Scorpion 4) (set 4)", + "sc4sfd", "Street Fighter (Mazooma) (Scorpion 4) (set 5)", + "sc4showt", "Showtime (Bellfruit) (Scorpion 4) (set 1)", + "sc4showta", "Showtime (Bellfruit) (Scorpion 4) (set 2)", + "sc4showtb", "Showtime (Bellfruit) (Scorpion 4) (set 3)", + "sc4showtc", "Showtime (Bellfruit) (Scorpion 4) (set 4)", + "sc4showtd", "Showtime (Bellfruit) (Scorpion 4) (set 5)", + "sc4showte", "Showtime (Bellfruit) (Scorpion 4) (set 6)", + "sc4showtf", "Showtime (Bellfruit) (Scorpion 4) (set 7)", + "sc4sidsp", "Side Splitter (Mazooma) (Scorpion 4) (set 1)", + "sc4sidspa", "Side Splitter (Mazooma) (Scorpion 4) (set 2)", + "sc4sidspb", "Side Splitter (Mazooma) (Scorpion 4) (set 3)", + "sc4sidspc", "Side Splitter (Mazooma) (Scorpion 4) (set 4)", + "sc4sirpz", "Sir Prize (PR2004, SIRV) (Mazooma) (Scorpion 4)", + "sc4sirpza", "Sir Prize (PR7079, SIRP) (Mazooma) (Scorpion 4) (set 1)", + "sc4sirpzb", "Sir Prize (PR7079, SIRP) (Mazooma) (Scorpion 4) (set 2)", + "sc4slad", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 1)", + "sc4slada", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 2)", + "sc4sladb", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 3)", + "sc4sladc", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 4)", + "sc4sladd", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 5)", + "sc4slade", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 6)", + "sc4sladf", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 7)", + "sc4sladg", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 8)", + "sc4sladh", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 9)", + "sc4slc", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4slca", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4slcb", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4slcc", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4slcd", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4slce", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4slcf", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4slcg", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 11)", + "sc4slch", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 12)", + "sc4slci", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4slcj", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 13)", + "sc4slck", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 14)", + "sc4slcl", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 15)", + "sc4slcm", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4slcn", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4slih", "Some Like It Hot (Mazooma) (Scorpion 4) (set 1)", + "sc4sliha", "Some Like It Hot (Mazooma) (Scorpion 4) (set 2)", + "sc4slihb", "Some Like It Hot (Mazooma) (Scorpion 4) (set 3)", + "sc4slihc", "Some Like It Hot (Mazooma) (Scorpion 4) (set 4)", + "sc4slihd", "Some Like It Hot (Mazooma) (Scorpion 4) (set 5)", + "sc4slihe", "Some Like It Hot (Mazooma) (Scorpion 4) (set 6)", + "sc4smk7", "Smoking 7's (Bellfruit) (Scorpion 4)", + "sc4solgl", "Solid Gold (Bellfruit) (Scorpion 4) (set 1)", + "sc4solgla", "Solid Gold (Bellfruit) (Scorpion 4) (set 2)", + "sc4solglb", "Solid Gold (Bellfruit) (Scorpion 4) (set 3)", + "sc4solglc", "Solid Gold (Bellfruit) (Scorpion 4) (set 4)", + "sc4spark", "South Park (BFM) (Scorpion 4) (set 1)", + "sc4sparka", "South Park (BFM) (Scorpion 4) (set 2)", + "sc4sparkb", "South Park (BFM) (Scorpion 4) (set 3)", + "sc4sparkc", "South Park (BFM) (Scorpion 4) (set 4)", + "sc4sparkd", "South Park (BFM) (Scorpion 4) (set 5)", + "sc4sparke", "South Park (BFM) (Scorpion 4) (set 6)", + "sc4spice", "Spice It Up (Bellfruit) (Scorpion 4) (set 1)", + "sc4spicea", "Spice It Up (Bellfruit) (Scorpion 4) (set 2)", + "sc4spiceb", "Spice It Up (Bellfruit) (Scorpion 4) (set 3)", + "sc4spicec", "Spice It Up (Bellfruit) (Scorpion 4) (set 4)", + "sc4splgb", "Splash & Grab (Mazooma) (Scorpion 4) (set 1)", + "sc4splgba", "Splash & Grab (Mazooma) (Scorpion 4) (set 2)", + "sc4spred", "Spread Your Bet (Mazooma) (Scorpion 4)", + "sc4sprng", "Highly Sprung (Mazooma) (Scorpion 4)", + "sc4srr", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 1)", + "sc4srra", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 2)", + "sc4srrb", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 3)", + "sc4srrc", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 4)", + "sc4srrca", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 5)", + "sc4srrcaa", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 6)", + "sc4srrcab", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 7)", + "sc4srrcac", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 8)", + "sc4srrcad", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 9)", + "sc4srrcae", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 10)", + "sc4srrmz", "Shake Rattle Roll (Mazooma) (Scorpion 4) (Top Box)", + "sc4srrmza", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 1)", + "sc4srrmzb", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 2)", + "sc4srrmzc", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 3)", + "sc4srrmzd", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 1)", + "sc4srrmze", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 4)", + "sc4srrmzf", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 2)", + "sc4srrmzg", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 3)", + "sc4srrmzh", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 4)", + "sc4srrmzi", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 5)", + "sc4srrmzj", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 6)", + "sc4srrmzk", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 7)", + "sc4srrmzl", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 8)", + "sc4srrmzm", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 9)", + "sc4sslam", "Super Slam (Bellfruit) (Scorpion 4) (set 1)", + "sc4sslama", "Super Slam (Bellfruit) (Scorpion 4) (set 2)", + "sc4sstep", "Super Step (Qps) (Scorpion 4) (set 1)", + "sc4sstepa", "Super Step (Qps) (Scorpion 4) (set 2)", + "sc4sstepb", "Super Step (Qps / 21 Casino) (Scorpion 4)", + "sc4stag", "Stag Night (Bellfruit) (Scorpion 4) (set 1)", + "sc4staga", "Stag Night (Bellfruit) (Scorpion 4) (set 2)", + "sc4starp", "Starprize (Bellfruit) (Scorpion 4) (set 1)", + "sc4starpa", "Starprize (Bellfruit) (Scorpion 4) (set 2)", + "sc4starpb", "Starprize (Bellfruit) (Scorpion 4) (set 3)", + "sc4starpc", "Starprize (Bellfruit) (Scorpion 4) (set 4)", + "sc4starpd", "Starprize (Bellfruit) (Scorpion 4) (set 5)", + "sc4starpe", "Starprize (Bellfruit) (Scorpion 4) (set 6)", + "sc4starpf", "Starprize (Bellfruit) (Scorpion 4) (set 7)", + "sc4starpg", "Starprize (Bellfruit) (Scorpion 4) (set 8)", + "sc4starph", "Starprize (Bellfruit) (Scorpion 4) (set 9)", + "sc4starpi", "Starprize (Bellfruit) (Scorpion 4) (set 10)", + "sc4starpj", "Starprize (Bellfruit) (Scorpion 4) (set 11)", + "sc4starpk", "Starprize (Bellfruit) (Scorpion 4) (set 12)", + "sc4stirc", "Stir Crazy (Mazooma) (Scorpion 4) (set 1)", + "sc4stirca", "Stir Crazy (Mazooma) (Scorpion 4) (set 2)", + "sc4stircb", "Stir Crazy (Mazooma) (Scorpion 4) (set 3)", + "sc4stircc", "Stir Crazy (Mazooma) (Scorpion 4) (set 4)", + "sc4stircd", "Stir Crazy (Mazooma) (Scorpion 4) (set 5)", + "sc4stirce", "Stir Crazy (Mazooma) (Scorpion 4) (set 6)", + "sc4stircf", "Stir Crazy (Mazooma) (Scorpion 4) (set 7)", + "sc4stircg", "Stir Crazy (Mazooma) (Scorpion 4) (set 8)", + "sc4stirch", "Stir Crazy (Mazooma) (Scorpion 4) (set 9)", + "sc4stirci", "Stir Crazy (Mazooma) (Scorpion 4) (set 10)", + "sc4stircj", "Stir Crazy (Mazooma) (Scorpion 4) (set 11)", + "sc4stl", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 1)", + "sc4stla", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 2)", + "sc4stlb", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 3)", + "sc4stlc", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 4)", + "sc4stld", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 5)", + "sc4stle", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 6)", + "sc4stlf", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 7)", + "sc4stlg", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 8)", + "sc4strbr", "Stars 'n' Bars (PR1219) (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4strbra", "Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 1)", + "sc4strbrb", "Stars 'n' Bars (PR1219) (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4strbrc", "Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 2)", + "sc4strbrd", "Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 3)", + "sc4strk", "The Streak (Mazooma) (Scorpion 4) (set 1)", + "sc4strka", "The Streak (Mazooma) (Scorpion 4) (set 2)", + "sc4strkb", "The Streak (Mazooma) (Scorpion 4) (set 3)", + "sc4strkc", "The Streak (Mazooma) (Scorpion 4) (set 4)", + "sc4strkd", "The Streak (Mazooma) (Scorpion 4) (set 5)", + "sc4strke", "The Streak (Mazooma) (Scorpion 4) (set 6)", + "sc4strkf", "The Streak (Mazooma) (Scorpion 4) (set 7)", + "sc4strkg", "The Streak (Mazooma) (Scorpion 4) (set 8)", + "sc4strkh", "The Streak (Mazooma) (Scorpion 4) (set 9)", + "sc4strki", "The Streak (Mazooma) (Scorpion 4) (set 10)", + "sc4strkj", "The Streak (Mazooma) (Scorpion 4) (set 11)", + "sc4strkk", "The Streak (Mazooma) (Scorpion 4) (set 12)", + "sc4strx", "Strike X (Bellfruit) (Scorpion 4) (set 1)", + "sc4strxa", "Strike X (Bellfruit) (Scorpion 4) (set 2)", + "sc4strxb", "Strike X (Bellfruit) (Scorpion 4) (set 3)", + "sc4strxc", "Strike X (Bellfruit) (Scorpion 4) (set 4)", + "sc4sumit", "Summit Up (Mazooma) (Scorpion 4) (set 1)", + "sc4sumita", "Summit Up (Mazooma) (Scorpion 4) (set 2)", + "sc4sumitb", "Summit Up (Mazooma) (Scorpion 4) (set 3)", + "sc4sumitc", "Summit Up (Mazooma) (Scorpion 4) (set 4)", + "sc4supst", "Super Streax (Mazooma) (Scorpion 4) (set 1)", + "sc4supsta", "Super Streax (Mazooma) (Scorpion 4) (set 2)", + "sc4sus", "Suits U Sir (Qps) (Scorpion 4) (set 1)", + "sc4susc", "Suits U Sir (Qps) (Scorpion 4) (set 2)", + "sc4suscl", "Suits U Sir Club (Qps) (Scorpion 4) (set 1)", + "sc4suscla", "Suits U Sir Club (Qps) (Scorpion 4) (set 4)", + "sc4susclb", "Suits U Sir Club (Qps) (Scorpion 4) (set 2)", + "sc4susclc", "Suits U Sir Club (Qps) (Scorpion 4) (set 3)", + "sc4susf", "Suits U Sir (Qps) (Scorpion 4) (set 3)", + "sc4susg", "Suits U Sir (Qps) (Scorpion 4) (set 4)", + "sc4sush", "Suits U Sir (Qps) (Scorpion 4) (set 5)", + "sc4susi", "Suits U Sir (Qps) (Scorpion 4) (set 6)", + "sc4susj", "Suits U Sir (Qps) (Scorpion 4) (set 7)", + "sc4susk", "Suits U Sir (Qps) (Scorpion 4) (set 8)", + "sc4swbak", "Switch Back (Mazooma) (Scorpion 4) (set 1)", + "sc4swbaka", "Switch Back (Mazooma) (Scorpion 4) (set 2)", + "sc4swbakb", "Switch Back (Mazooma) (Scorpion 4) (set 3)", + "sc4swbakc", "Switch Back (Mazooma) (Scorpion 4) (set 4)", + "sc4swywm", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 1)", + "sc4swywma", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 2)", + "sc4swywmb", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 3)", + "sc4swywmc", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 4)", + "sc4swywmd", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 5)", + "sc4swywme", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 6)", + "sc4swywmf", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 7)", + "sc4swywmg", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 8)", + "sc4taekw", "Tae Kwon Dough (Qps) (Scorpion 4) (set 1)", + "sc4taekwa", "Tae Kwon Dough (Qps) (Scorpion 4) (set 2)", + "sc4taekwb", "Tae Kwon Dough (Qps) (Scorpion 4) (set 3)", + "sc4taekwc", "Tae Kwon Dough (Qps) (Scorpion 4) (set 8)", + "sc4taekwd", "Tae Kwon Dough (Qps) (Scorpion 4) (set 9)", + "sc4taekwe", "Tae Kwon Dough (Qps) (Scorpion 4) (set 10)", + "sc4taekwf", "Tae Kwon Dough (Qps) (Scorpion 4) (set 11)", + "sc4taekwg", "Tae Kwon Dough (Qps) (Scorpion 4) (set 4)", + "sc4taekwh", "Tae Kwon Dough (Qps) (Scorpion 4) (set 5)", + "sc4taekwi", "Tae Kwon Dough (Qps) (Scorpion 4) (set 6)", + "sc4taekwj", "Tae Kwon Dough (Qps) (Scorpion 4) (set 7)", + "sc4takcl", "Take Note Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4takcla", "Take Note Club 500 (Bellfruit) (Scorpion 4)", + "sc4takclb", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 1)", + "sc4takclc", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 2)", + "sc4takcld", "Take Note Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4takcle", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 3)", + "sc4takclf", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 4)", + "sc4takclg", "Take Note Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4takclh", "Take Note Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4takcli", "Take Note Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4takclj", "Take Note Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4taknt", "Take Note (Bellfruit) (Scorpion 4) (set 1)", + "sc4taknta", "Take Note (Bellfruit) (Scorpion 4) (set 2)", + "sc4tbana", "Top Banana (Bellfruit) (Scorpion 4) (set 1)", + "sc4tbanaa", "Top Banana (Bellfruit) (Scorpion 4) (set 2)", + "sc4tbox", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 4)", + "sc4tempt", "Temptation (Bellfruit) (Scorpion 4) (set 1)", + "sc4tempta", "Temptation (Bellfruit) (Scorpion 4) (set 2)", + "sc4temptb", "Temptation (Bellfruit) (Scorpion 4) (set 3)", + "sc4temptc", "Temptation (Bellfruit) (Scorpion 4) (set 4)", + "sc4temptd", "Temptation (Bellfruit) (Scorpion 4) (set 5)", + "sc4tempte", "Temptation (Bellfruit) (Scorpion 4) (set 6)", + "sc4temptf", "Temptation (Bellfruit) (Scorpion 4) (set 7)", + "sc4temptg", "Temptation (Bellfruit) (Scorpion 4) (set 8)", + "sc4tetri", "Tetris (Mazooma) (Scorpion 4) (set 1)", + "sc4tetria", "Tetris (Mazooma) (Scorpion 4) (set 2)", + "sc4tetrib", "Tetris (Mazooma) (Scorpion 4) (set 3)", + "sc4tetric", "Tetris (Mazooma) (Scorpion 4) (set 4)", + "sc4tetrid", "Tetris (Mazooma) (Scorpion 4) (set 5)", + "sc4tetrie", "Tetris (Mazooma) (Scorpion 4) (set 6)", + "sc4tetrif", "Tetris (Mazooma) (Scorpion 4) (set 7)", + "sc4tetrig", "Tetris (Mazooma) (Scorpion 4) (set 8)", + "sc4tetrih", "Tetris (Mazooma) (Scorpion 4) (set 9)", + "sc4tetrii", "Tetris (Mazooma) (Scorpion 4) (set 10)", + "sc4tetrij", "Tetris (Mazooma) (Scorpion 4) (set 11)", + "sc4tetrik", "Tetris (Mazooma) (Scorpion 4) (set 12)", + "sc4tfclb", "Tutti Frutti Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4tfclba", "Tutti Frutti Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4tgear", "Top Gear (Mazooma) (Scorpion 4) (set 1)", + "sc4tgeara", "Top Gear (Mazooma) (Scorpion 4) (set 2)", + "sc4tgearb", "Top Gear (Mazooma) (Scorpion 4) (set 3)", + "sc4tgearc", "Top Gear (Mazooma) (Scorpion 4) (set 4)", + "sc4tgeard", "Top Gear (Mazooma) (Scorpion 4) (set 5)", + "sc4tgeare", "Top Gear (Mazooma) (Scorpion 4) (set 6)", + "sc4tgearf", "Top Gear (Mazooma) (Scorpion 4) (set 7)", + "sc4tgearg", "Top Gear (Mazooma) (Scorpion 4) (set 8)", + "sc4tic2", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 1)", + "sc4tic2a", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 2)", + "sc4tic2b", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 3)", + "sc4tic2c", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 4)", + "sc4tic2d", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 5)", + "sc4tic2e", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 6)", + "sc4tic2f", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 7)", + "sc4tic2g", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 8)", + "sc4tic2h", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 4)", + "sc4tic2i", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 1)", + "sc4tic2j", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 2)", + "sc4tic2k", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 3)", + "sc4tic2l", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 5)", + "sc4tic2m", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 6)", + "sc4tic2n", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 9)", + "sc4tic2o", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 10)", + "sc4ticlb", "Treasure Island Club (Fixed 65%) (Bellfruit) (Scorpion 4) (set 1)", + "sc4ticlba", "Treasure Island Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4ticlbb", "Treasure Island Club (Fixed 65%) (Bellfruit) (Scorpion 4) (set 2)", + "sc4ticlbc", "Treasure Island Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4tload", "Top Loader (Mazooma) (Scorpion 4)", + "sc4tpsht", "Top Of The Shots (Mazooma) (Scorpion 4) (set 1)", + "sc4tpshta", "Top Of The Shots (Mazooma) (Scorpion 4) (set 2)", + "sc4tpshtb", "Top Of The Shots (Mazooma) (Scorpion 4) (set 3)", + "sc4tpshtc", "Top Of The Shots (Mazooma) (Scorpion 4) (set 4)", + "sc4tpshtd", "Top Of The Shots (Mazooma) (Scorpion 4) (set 5)", + "sc4tpshte", "Top Of The Shots (Mazooma) (Scorpion 4) (set 6)", + "sc4tpshtf", "Top Of The Shots (Mazooma) (Scorpion 4) (set 7)", + "sc4tpshtg", "Top Of The Shots (Mazooma) (Scorpion 4) (set 8)", + "sc4trail", "Trailblazer (Mazooma) (Scorpion 4) (set 1)", + "sc4traila", "Trailblazer (Mazooma) (Scorpion 4) (set 2)", + "sc4trailb", "Trailblazer (Mazooma) (Scorpion 4) (set 3)", + "sc4trailc", "Trailblazer (Mazooma) (Scorpion 4) (set 4)", + "sc4tri7", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 1)", + "sc4tri7a", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 2)", + "sc4tri7b", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 1)", + "sc4tri7c", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 2)", + "sc4tri7d", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 3)", + "sc4tri7e", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 4)", + "sc4tri7f", "Triple 7's (Bellfruit) (Scorpion 4) (set 1)", + "sc4tri7g", "Triple 7's (Bellfruit) (Scorpion 4) (set 2)", + "sc4tri7h", "Triple 7's (Bellfruit) (Scorpion 4) (set 3)", + "sc4tri7i", "Triple 7's (Bellfruit) (Scorpion 4) (set 4)", + "sc4tri7j", "Triple 7's (Bellfruit) (Scorpion 4) (set 5)", + "sc4tri7k", "Triple 7's (Bellfruit) (Scorpion 4) (set 6)", + "sc4tri7l", "Triple 7's (Bellfruit) (Scorpion 4) (set 7)", + "sc4tri7m", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 3)", + "sc4tri7n", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 4)", + "sc4tri7o", "Triple 7's (Bellfruit) (Scorpion 4) (set 8)", + "sc4tri7p", "Triple 7's (Bellfruit) (Scorpion 4) (set 9)", + "sc4tri7q", "Triple 7's (Bellfruit) (Scorpion 4) (set 10)", + "sc4tri7r", "Triple 7's (Bellfruit) (Scorpion 4) (set 11)", + "sc4tri7s", "Triple 7's (Bellfruit) (Scorpion 4) (set 12)", + "sc4tri7t", "Triple 7's (Bellfruit) (Scorpion 4) (set 13)", + "sc4tri7u", "Triple 7's (Bellfruit) (Scorpion 4) (set 14)", + "sc4tri7v", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 5)", + "sc4tri7w", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 6)", + "sc4tridn", "Trident, The (Mazooma) (Scorpion 4) (set 1)", + "sc4tridna", "Trident, The (Mazooma) (Scorpion 4) (set 2)", + "sc4trist", "Triple Streak (PR2188) (Mazooma) (Scorpion 4) (Top Box, set 1)", + "sc4trista", "Triple Streak (PR2188) (Mazooma) (Scorpion 4) (Top Box, set 2)", + "sc4tristb", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 1)", + "sc4tristc", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 2)", + "sc4tristd", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 3)", + "sc4triste", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 4)", + "sc4tristf", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 5)", + "sc4tristg", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 6)", + "sc4tristh", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 7)", + "sc4tristi", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 8)", + "sc4tristj", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 9)", + "sc4tristk", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 10)", + "sc4tristl", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 11)", + "sc4tristm", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 12)", + "sc4tristn", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 13)", + "sc4tristo", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 14)", + "sc4tristp", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 15)", + "sc4tristq", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 16)", + "sc4tristr", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 17)", + "sc4trists", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 18)", + "sc4tristt", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 19)", + "sc4tristu", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 20)", + "sc4tristv", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 21)", + "sc4tristw", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 22)", + "sc4tristx", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 23)", + "sc4tristy", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 24)", + "sc4tst", "Scorpion 4 Test Rig (Bellfruit) (Scorpion ?)", + "sc4ttomb", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 1)", + "sc4ttomba", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 2)", + "sc4ttombb", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 3)", + "sc4ttombc", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 4)", + "sc4ttp", "Take The Piste (Mazooma) (Scorpion 4) (set 1)", + "sc4ttpa", "Take The Piste (Mazooma) (Scorpion 4) (set 2)", + "sc4ttpb", "Take The Piste (Mazooma) (Scorpion 4) (set 3)", + "sc4ttpc", "Take The Piste (Mazooma) (Scorpion 4) (set 4)", + "sc4ttpd", "Take The Piste (Mazooma) (Scorpion 4) (set 5)", + "sc4ttpe", "Take The Piste (Mazooma) (Scorpion 4) (set 6)", + "sc4ttpf", "Take The Piste (Mazooma) (Scorpion 4) (set 7)", + "sc4ttpie", "Take The Piece (Bellfruit) (PR1714) (Scorpion 4) (set 1)", + "sc4ttpiea", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 1)", + "sc4ttpieb", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 2)", + "sc4ttpiec", "Take The Piece (Bellfruit) (PR1714) (Scorpion 4) (set 2)", + "sc4ttpied", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 3)", + "sc4ttpiee", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 4)", + "sc4ttpief", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 5)", + "sc4ttpieg", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 6)", + "sc4tub", "Tubular Bells (Bellfruit) (Scorpion 4) (set 1)", + "sc4tuba", "Tubular Bells (Bellfruit) (Scorpion 4) (set 2)", + "sc4tubb", "Tubular Bells (Bellfruit) (Scorpion 4) (set 3)", + "sc4tubc", "Tubular Bells (Bellfruit) (Scorpion 4) (set 4)", + "sc4twilt", "Twilight (Dutch) (Bellfruit) (Scorpion 4)", + "sc4typ", "Take Your Pick (Bellfruit) (Scorpion 4) (set 1)", + "sc4typa", "Take Your Pick (Bellfruit) (Scorpion 4) (set 2)", + "sc4typb", "Take Your Pick (Bellfruit) (Scorpion 4) (set 3)", + "sc4typc", "Take Your Pick (Bellfruit) (Scorpion 4) (set 4)", + "sc4ufg", "Up For Grabs (Mazooma) (Scorpion 4) (set 1)", + "sc4ufga", "Up For Grabs (Mazooma) (Scorpion 4) (set 2)", + "sc4ufi", "Up For It (Bellfruit) (Scorpion 4) (set 1)", + "sc4ufia", "Up For It (Bellfruit) (Scorpion 4) (set 2)", + "sc4ufib", "Up For It (Bellfruit) (Scorpion 4) (set 3)", + "sc4ufic", "Up For It (Bellfruit) (Scorpion 4) (set 4)", + "sc4ufid", "Up For It (Bellfruit) (Scorpion 4) (set 5)", + "sc4ufie", "Up For It (Bellfruit) (Scorpion 4) (set 6)", + "sc4valnv", "Valhalla (German) (PR7025, GVAL) (Nova) (Scorpion 4)", + "sc4valqp", "Valhalla (Dutch) (Qps) (Scorpion 4)", + "sc4vivam", "Viva Mexico (Bellfruit) (Scorpion 4) (set 1)", + "sc4vivama", "Viva Mexico (Bellfruit) (Scorpion 4) (set 2)", + "sc4vivamb", "Viva Mexico (Bellfruit) (Scorpion 4) (set 3)", + "sc4vivamc", "Viva Mexico (Bellfruit) (Scorpion 4) (set 4)", + "sc4vivcs", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 1)", + "sc4vivcsa", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 2)", + "sc4vivcsb", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 3)", + "sc4vivcsc", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 4)", + "sc4vivcsd", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 5)", + "sc4vivcse", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 6)", + "sc4vivcsf", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 7)", + "sc4vivcsg", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 8)", + "sc4vmclb", "Viva Mexico Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4vmclba", "Viva Mexico Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4vmclbb", "Viva Mexico Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4vmnv", "Viva Mexico (Nova) (Scorpion 4) (set 1)", + "sc4vmnva", "Viva Mexico (Nova) (Scorpion 4) (set 2)", + "sc4vrgcl", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 1)", + "sc4vrgcla", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 2)", + "sc4vrgclb", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 3)", + "sc4vrgclc", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 4)", + "sc4vrgcld", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 5)", + "sc4vrgcle", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 6)", + "sc4vrgclf", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 7)", + "sc4vrgclg", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 8)", + "sc4vrgclh", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 9)", + "sc4vrgcli", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 10)", + "sc4wadzl", "Wadzilla (Mazooma) (Scorpion 4) (set 1)", + "sc4wadzla", "Wadzilla (Mazooma) (Scorpion 4) (set 2)", + "sc4wag", "Win-A-Gain (German) (Nova) (Scorpion 4)", + "sc4waw", "Wet & Wild (Mazooma) (Scorpion 4) (set 1)", + "sc4wawa", "Wet & Wild (Mazooma) (Scorpion 4) (set 2)", + "sc4wawb", "Wet & Wild (Mazooma) (Scorpion 4) (set 3)", + "sc4wawc", "Wet & Wild (Mazooma) (Scorpion 4) (set 4)", + "sc4wawd", "Wet & Wild (Mazooma) (Scorpion 4) (set 5)", + "sc4wawe", "Wet & Wild (Mazooma) (Scorpion 4) (set 6)", + "sc4wawf", "Wet & Wild (Mazooma) (Scorpion 4) (set 7)", + "sc4wdw", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 1)", + "sc4wdwa", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 2)", + "sc4wdwb", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 3)", + "sc4wdwc", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 4)", + "sc4wdwd", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 5)", + "sc4wdwe", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 6)", + "sc4wdwf", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 7)", + "sc4wdwg", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 8)", + "sc4wdwh", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 9)", + "sc4wdwi", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 10)", + "sc4wdwj", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 11)", + "sc4wernr", "Werner (German) (PR7027, GWER) (Nova) (Scorpion 4) (set 1)", + "sc4winsp", "Winning Spin Top Box (PR2526, WSPT) (Qps) (Scorpion 4) (set 1)", + "sc4winsp0", "Winning Spin Top Box (PR2526, WSPT) (Qps) (Scorpion 4) (set 2)", + "sc4winspa", "Winning Spin (Bingo V011) (Qps) (Scorpion 4) (set 1)", + "sc4winspb", "Winning Spin (V021) (Qps) (Scorpion 4) (set 1)", + "sc4winspc", "Winning Spin (V031) (Qps) (Scorpion 4) (set 1)", + "sc4winspd", "Winning Spin (Arcade V011) (Qps) (Scorpion 4) (set 1)", + "sc4winspe", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 1)", + "sc4winspf", "Winning Spin (V022) (Qps) (Scorpion 4) (set 1)", + "sc4winspg", "Winning Spin (V032) (Qps) (Scorpion 4) (set 1)", + "sc4winsph", "Winning Spin (Bingo V011) (Qps) (Scorpion 4) (set 2)", + "sc4winspi", "Winning Spin (V021) (Qps) (Scorpion 4) (set 2)", + "sc4winspj", "Winning Spin (V031) (Qps) (Scorpion 4) (set 2)", + "sc4winspk", "Winning Spin (Arcade V011) (Qps) (Scorpion 4) (set 2)", + "sc4winspl", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 2)", + "sc4winspm", "Winning Spin (V022) (Qps) (Scorpion 4) (set 2)", + "sc4winspn", "Winning Spin (V032) (Qps) (Scorpion 4) (set 2)", + "sc4winspo", "Winning Spin (Arcade V061) (Qps) (Scorpion 4) (set 1)", + "sc4winspp", "Winning Spin (Arcade V062) (Qps) (Scorpion 4) (set 1)", + "sc4winspq", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 3)", + "sc4winspr", "Winning Spin (V022) (Qps) (Scorpion 4) (set 3)", + "sc4winsps", "Winning Spin (V032) (Qps) (Scorpion 4) (set 3)", + "sc4winspt", "Winning Spin (Arcade V012) (Qps) (Scorpion 4) (set 1)", + "sc4winspu", "Winning Spin (Arcade V061) (Qps) (Scorpion 4) (set 2)", + "sc4winspv", "Winning Spin (Arcade V062) (Qps) (Scorpion 4) (set 2)", + "sc4winspw", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 4)", + "sc4winspx", "Winning Spin (V022) (Qps) (Scorpion 4) (set 4)", + "sc4winspy", "Winning Spin (V032) (Qps) (Scorpion 4) (set 4)", + "sc4winspz", "Winning Spin (Arcade V012) (Qps) (Scorpion 4) (set 2)", + "sc4winxp", "Win X-plosion (Dutch) (Bellfruit) (Scorpion 4)", + "sc4wldbn", "Wild Bunch (Bellfruit) (Scorpion 4) (set 1)", + "sc4wldbna", "Wild Bunch (Bellfruit) (Scorpion 4) (set 2)", + "sc4wldbnb", "Wild Bunch (Bellfruit) (Scorpion 4) (set 3)", + "sc4wldbnc", "Wild Bunch (Bellfruit) (Scorpion 4) (set 4)", + "sc4wldbnd", "Wild Bunch (Bellfruit) (Scorpion 4) (set 5)", + "sc4wldbne", "Wild Bunch (Bellfruit) (Scorpion 4) (set 6)", + "sc4wldbnf", "Wild Bunch (Bellfruit) (Scorpion 4) (set 7)", + "sc4wldbng", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 1)", + "sc4wldbnh", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 2)", + "sc4wldbni", "Wild Bunch (Bellfruit) (Scorpion 4) (set 8)", + "sc4wldbnj", "Wild Bunch (Bellfruit) (Scorpion 4) (set 9)", + "sc4wldbnk", "Wild Bunch (Bellfruit) (Scorpion 4) (set 10)", + "sc4wldbnl", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 3)", + "sc4wldbnm", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 4)", + "sc4wldbnn", "Wild Bunch (Bellfruit) (Scorpion 4) (set 11)", + "sc4wldbno", "Wild Bunch (Bellfruit) (Scorpion 4) (set 12)", + "sc4wldbnp", "Wild Bunch (Bellfruit) (Scorpion 4) (set 13)", + "sc4wldbnq", "Wild Bunch (Bellfruit) (Scorpion 4) (set 14)", + "sc4wldjk", "Wild Jackpots (Mazooma) (Scorpion 4) (set 1)", + "sc4wldjka", "Wild Jackpots (Mazooma) (Scorpion 4) (set 2)", + "sc4wldjkb", "Wild Jackpots (Mazooma) (Scorpion 4) (set 3)", + "sc4wldjkc", "Wild Jackpots (Mazooma) (Scorpion 4) (set 4)", + "sc4wldjkd", "Wild Jackpots (Mazooma) (Scorpion 4) (set 5)", + "sc4wldjke", "Wild Jackpots (Mazooma) (Scorpion 4) (set 6)", + "sc4wldjkf", "Wild Jackpots (Mazooma) (Scorpion 4) (set 7)", + "sc4wldjkg", "Wild Jackpots (Mazooma) (Scorpion 4) (set 8)", + "sc4wondw", "Wonder Wheel (Bellfruit) (Scorpion 4) (set 1)", + "sc4wondwa", "Wonder Wheel (Bellfruit) (Scorpion 4) (set 2)", + "sc4wrnlt", "Werner (German) (PR7027, GWER) (Nova) (Scorpion 4) (set 2)", + "sc4wspin", "Win Spinner Arcade (011) (Qps) (Scorpion 4) (set 1)", + "sc4wspinb", "Win Spinner SP Arcade (011) (Qps) (Scorpion 4) (set 1)", + "sc4wspinc", "Win Spinner Arcade (011) (Qps) (Scorpion 4) (set 2)", + "sc4wspind", "Win Spinner SP Arcade (011) (Qps) (Scorpion 4) (set 2)", + "sc4wtc", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 1)", + "sc4wtca", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 2)", + "sc4wtcb", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 3)", + "sc4wtcc", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 4)", + "sc4wtcd", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 5)", + "sc4wtce", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 6)", + "sc4wtcf", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 7)", + "sc4wthng", "Wild Thing (Bellfruit) (Scorpion 4) (set 1)", + "sc4wthnga", "Wild Thing (Bellfruit) (Scorpion 4) (set 2)", + "sc4wthngb", "Wild Thing (Bellfruit) (Scorpion 4) (set 3)", + "sc4wthngc", "Wild Thing (Bellfruit) (Scorpion 4) (set 4)", + "sc4wthnm", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 1)", + "sc4wthnma", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 2)", + "sc4wthnmb", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 3)", + "sc4wthnmc", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 4)", + "sc4wthnmd", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 5)", + "sc4wthnme", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 6)", + "sc4wthnmf", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 7)", + "sc4wwys", "Win When Your Spinning (Bellfruit) (Scorpion 4) (set 1)", + "sc4wwysa", "Win When Your Spinning (Bellfruit) (Scorpion 4) (set 2)", + "sc4xcash", "Xtra Cash Casino (Dutch) (Bellfruit) (Scorpion 4)", + "sc4xmark", "X Marks The Spot (Bellfruit) (Scorpion 4) (set 1)", + "sc4xmarka", "X Marks The Spot (Bellfruit) (Scorpion 4) (set 2)", + "sc4ziggy", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 1)", + "sc4ziggya", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 2)", + "sc4ziggyb", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 3)", + "sc4ziggyc", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 4)", + "sc4ziggyd", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 5)", + "sc4ziggye", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 6)", + "sc4ziggyf", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 7)", + "sc4ziggyg", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 8)", + "sc5a40", "Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 1)", + "sc5a40a", "Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 2)", + "sc5adga", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 1)", + "sc5adgaa", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 2)", + "sc5adgab", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 3)", + "sc5adgac", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 4)", + "sc5adgad", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 5)", + "sc5adgae", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 6)", + "sc5adgtc", "Ant & Dec's Grab The Cash (Bellfruit) (Scorpion 5) (set 1)", + "sc5adgtca", "Ant & Dec's Grab The Cash (Bellfruit) (Scorpion 5) (set 2)", + "sc5adjb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 1)", + "sc5adjba", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 2)", + "sc5adjbb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 3)", + "sc5adjbc", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 4)", + "sc5adjbd", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 5)", + "sc5adjbe", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 6)", + "sc5adjbf", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 7)", + "sc5adjbg", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 8)", + "sc5adjbh", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 9)", + "sc5adjbi", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 10)", + "sc5adjbj", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 11)", + "sc5adjbk", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 12)", + "sc5adjbl", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 13)", + "sc5adjbm", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 14)", + "sc5adjbn", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 15)", + "sc5adjbo", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 16)", + "sc5adjbp", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 17)", + "sc5adjbq", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 18)", + "sc5adjbr", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 19)", + "sc5adjbs", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 20)", + "sc5adjbt", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 21)", + "sc5adsnt", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 5) (set 1)", + "sc5adsnta", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 5) (set 2)", + "sc5adwta", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 5) (set 1)", + "sc5adwtaa", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 5) (set 2)", + "sc5bantm", "Bantam Of The Opera (Mazooma) (Scorpion 5) (set 1)", + "sc5bantma", "Bantam Of The Opera (Mazooma) (Scorpion 5) (set 2)", + "sc5bar7", "Bar 7's (Bellfruit) (Scorpion 5) (set 1)", + "sc5bar7a", "Bar 7's (Bellfruit) (Scorpion 5) (set 2)", + "sc5bar7b", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 1)", + "sc5bar7c", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 2)", + "sc5bar7d", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 3)", + "sc5bar7e", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 4)", + "sc5bar7f", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 5)", + "sc5bar7g", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 6)", + "sc5batl", "Battleships & Cruisers (Bellfruit) (Scorpion 5) (set 1)", + "sc5batla", "Battleships & Cruisers (Bellfruit) (Scorpion 5) (set 2)", + "sc5bjob", "Bank Job (Bellfruit) (Scorpion 5) (set 1)", + "sc5bjoba", "Bank Job (Bellfruit) (Scorpion 5) (set 2)", + "sc5bjobb", "Bank Job (Bellfruit) (Scorpion 5) (set 3)", + "sc5bjobc", "Bank Job (Bellfruit) (Scorpion 5) (set 4)", + "sc5bjobd", "Bank Job (Bellfruit) (Scorpion 5) (set 5)", + "sc5bjobe", "Bank Job (Bellfruit) (Scorpion 5) (set 6)", + "sc5bjobf", "Bank Job (Bellfruit) (Scorpion 5) (set 7)", + "sc5bjobg", "Bank Job (Bellfruit) (Scorpion 5) (set 8)", + "sc5bjobh", "Bank Job (Bellfruit) (Scorpion 5) (set 9)", + "sc5bjobi", "Bank Job (Bellfruit) (Scorpion 5) (set 10)", + "sc5bkngx", "Bar King X (Mazooma) (Scorpion 5) (set 1)", + "sc5bkngxa", "Bar King X (Mazooma) (Scorpion 5) (set 2)", + "sc5bob", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 1)", + "sc5boba", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 2)", + "sc5bobb", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 3)", + "sc5bobc", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 4)", + "sc5bpb", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 1)", + "sc5bpba", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 5)", + "sc5bpbb", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 2)", + "sc5bpbc", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 6)", + "sc5bpbd", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 3)", + "sc5bpbe", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 4)", + "sc5bpbf", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 7)", + "sc5bpbg", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 8)", + "sc5bpfpb", "Bullseye Pounds For Points (Bellfruit) (Scorpion 5) (set 1)", + "sc5bpfpba", "Bullseye Pounds For Points (Bellfruit) (Scorpion 5) (set 2)", + "sc5bsp", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 1)", + "sc5bspa", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 2)", + "sc5bspb", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 3)", + "sc5bspc", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 4)", + "sc5bspd", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 5)", + "sc5bspe", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 6)", + "sc5bspf", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 7)", + "sc5bspg", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 8)", + "sc5bsph", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 9)", + "sc5bspi", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 10)", + "sc5bspj", "Bully's Star Prize (PR3012) (Bellfruit) (Scorpion 5) (set 1)", + "sc5bspk", "Bully's Star Prize (PR3012) (Bellfruit) (Scorpion 5) (set 2)", + "sc5bspl", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 13)", + "sc5bspm", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 14)", + "sc5bspn", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 15)", + "sc5bspo", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 16)", + "sc5bspp", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 17)", + "sc5bspq", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 18)", + "sc5btiab", "Bullseye Three In A Bed (Bellfruit) (Scorpion 5)", + "sc5btrip", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 1)", + "sc5btripa", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 2)", + "sc5btripb", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 3)", + "sc5btripc", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 4)", + "sc5bucc", "Buccaneers (Bellfruit) (Scorpion 5) (set 1)", + "sc5bucca", "Buccaneers (Bellfruit) (Scorpion 5) (set 2)", + "sc5buccb", "Buccaneers (Bellfruit) (Scorpion 5) (set 3)", + "sc5buccc", "Buccaneers (Bellfruit) (Scorpion 5) (set 4)", + "sc5buccd", "Buccaneers (Bellfruit) (Scorpion 5) (set 5)", + "sc5bucce", "Buccaneers (Bellfruit) (Scorpion 5) (set 6)", + "sc5bull", "Bullseye (Bellfruit) (Scorpion 5) (set 1)", + "sc5bull5", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 1)", + "sc5bull5a", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 2)", + "sc5bull5b", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 3)", + "sc5bull5c", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 4)", + "sc5bulla", "Bullseye (Bellfruit) (Scorpion 5) (set 2)", + "sc5bullb", "Bullseye (Bellfruit) (Scorpion 5) (set 3)", + "sc5bullc", "Bullseye (Bellfruit) (Scorpion 5) (set 4)", + "sc5bunny", "Bunny Money (Mazooma) (Scorpion 5) (set 1)", + "sc5bunnya", "Bunny Money (Mazooma) (Scorpion 5) (set 2)", + "sc5butch", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 1)", + "sc5butcha", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 2)", + "sc5butchb", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 3)", + "sc5butchc", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 4)", + "sc5butchd", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 5)", + "sc5butche", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 6)", + "sc5cabin", "Cabin Fever (Mazooma) (Scorpion 5) (set 1)", + "sc5cabina", "Cabin Fever (Mazooma) (Scorpion 5) (set 2)", + "sc5cabinb", "Cabin Fever (Mazooma) (Scorpion 5) (set 3)", + "sc5cabinc", "Cabin Fever (Mazooma) (Scorpion 5) (set 4)", + "sc5cari", "Caribbean Cash (Qps) (Scorpion 5) (set 1)", + "sc5caria", "Caribbean Cash (Qps) (Scorpion 5) (set 2)", + "sc5carib", "Caribbean Cash (Qps) (Scorpion 5) (set 3)", + "sc5caric", "Caribbean Cash (Qps) (Scorpion 5) (set 4)", + "sc5carid", "Caribbean Cash (Qps) (Scorpion 5) (set 5)", + "sc5carie", "Caribbean Cash (Qps) (Scorpion 5) (set 6)", + "sc5carif", "Caribbean Cash (Qps) (Scorpion 5) (set 7)", + "sc5carig", "Caribbean Cash (Qps) (Scorpion 5) (set 8)", + "sc5casxt", "Casino Xtravaganza (Mazooma) (Scorpion 5) (set 1)", + "sc5casxta", "Casino Xtravaganza (Mazooma) (Scorpion 5) (set 2)", + "sc5cbar7", "Classic Bar 7 (Mazooma) (Scorpion 5) (set 1)", + "sc5cbar7a", "Classic Bar 7 (Mazooma) (Scorpion 5) (set 2)", + "sc5cblas", "Cash Blast (Bellfruit) (Scorpion 5) (set 1)", + "sc5cblasa", "Cash Blast (Bellfruit) (Scorpion 5) (set 2)", + "sc5cbrun", "Cannonball Run (Bellfruit) (Scorpion 5) (set 1)", + "sc5cbruna", "Cannonball Run (Bellfruit) (Scorpion 5) (set 2)", + "sc5celeb", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 1)", + "sc5celeba", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 2)", + "sc5celebb", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 3)", + "sc5celebc", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 4)", + "sc5celebd", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 5)", + "sc5cfact", "Cash Factor (Bellfruit) (Scorpion 5) (set 1)", + "sc5cfacta", "Cash Factor (Bellfruit) (Scorpion 5) (set 2)", + "sc5cfcp", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 1)", + "sc5cfcpa", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 2)", + "sc5cfcpb", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 3)", + "sc5cfcpc", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 4)", + "sc5cfcpd", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 5)", + "sc5cfcpe", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 6)", + "sc5cfcpf", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 7)", + "sc5cfcpg", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 8)", + "sc5cfcph", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 9)", + "sc5cfcpi", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 10)", + "sc5cfcpj", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 11)", + "sc5cfcpk", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 12)", + "sc5cfcpl", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 13)", + "sc5cfcpm", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 14)", + "sc5cfcpn", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 15)", + "sc5cfcpo", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 16)", + "sc5cfcpp", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 17)", + "sc5cfcpq", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 18)", + "sc5cfcpr", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 19)", + "sc5cfcps", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 20)", + "sc5cfcpt", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 21)", + "sc5cfcpu", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 22)", + "sc5cfcpv", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 23)", + "sc5cfcpw", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 24)", + "sc5cfnc", "Crazy Fruit & Nutcase (Bellfruit) (Scorpion 5) (set 1)", + "sc5cfnca", "Crazy Fruit & Nutcase (Bellfruit) (Scorpion 5) (set 2)", + "sc5cfpt", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 1)", + "sc5cfpta", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 2)", + "sc5cfptb", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 3)", + "sc5cfptc", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 4)", + "sc5cfptd", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 5)", + "sc5cfpte", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 6)", + "sc5cfptf", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 7)", + "sc5cfptg", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 8)", + "sc5cfpth", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 9)", + "sc5cfpti", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 10)", + "sc5cfptj", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 11)", + "sc5cfptk", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 12)", + "sc5cfptl", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 13)", + "sc5cfptm", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 14)", + "sc5cfptn", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 15)", + "sc5cfpto", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 16)", + "sc5cfptp", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 17)", + "sc5cfptq", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 18)", + "sc5cfptr", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 19)", + "sc5cfpts", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 20)", + "sc5chain", "Chain Reaction (Bellfruit) (Scorpion 5) (set 1)", + "sc5chaina", "Chain Reaction (Bellfruit) (Scorpion 5) (set 2)", + "sc5chainb", "Chain Reaction (Bellfruit) (Scorpion 5) (set 3)", + "sc5chainc", "Chain Reaction (Bellfruit) (Scorpion 5) (set 4)", + "sc5chaind", "Chain Reaction (Bellfruit) (Scorpion 5) (set 5)", + "sc5chaine", "Chain Reaction (Bellfruit) (Scorpion 5) (set 6)", + "sc5chavi", "Chav It (Bellfruit) (Scorpion 5) (set 1)", + "sc5chavia", "Chav It (Bellfruit) (Scorpion 5) (set 2)", + "sc5chavib", "Chav It (Bellfruit) (Scorpion 5) (set 3)", + "sc5chavic", "Chav It (Bellfruit) (Scorpion 5) (set 4)", + "sc5chavid", "Chav It (Bellfruit) (Scorpion 5) (set 5)", + "sc5chavie", "Chav It (Bellfruit) (Scorpion 5) (set 6)", + "sc5chavy", "Chavy Chase (Mazooma) (Scorpion 5) (set 1)", + "sc5chavya", "Chavy Chase (Mazooma) (Scorpion 5) (set 2)", + "sc5chavyb", "Chavy Chase (Mazooma) (Scorpion 5) (set 3)", + "sc5chavyc", "Chavy Chase (Mazooma) (Scorpion 5) (set 4)", + "sc5chopc", "Chop 'n' Change (Mazooma) (Scorpion 5) (set 1)", + "sc5chopca", "Chop 'n' Change (Mazooma) (Scorpion 5) (set 2)", + "sc5cj", "Cool Jewels (Bellfruit) (Scorpion 5) (set 1)", + "sc5cja", "Cool Jewels (Bellfruit) (Scorpion 5) (set 2)", + "sc5cjb", "Cool Jewels (Bellfruit) (Scorpion 5) (set 3)", + "sc5cjc", "Cool Jewels (Bellfruit) (Scorpion 5) (set 4)", + "sc5cjd", "Cool Jewels (Bellfruit) (Scorpion 5) (set 5)", + "sc5cje", "Cool Jewels (Bellfruit) (Scorpion 5) (set 6)", + "sc5cjqps", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 1)", + "sc5cjqpsa", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 2)", + "sc5cjqpsb", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 3)", + "sc5cjqpsc", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 4)", + "sc5cknig", "Crazy Knights (Bellfruit) (Scorpion 5) (set 1)", + "sc5ckniga", "Crazy Knights (Bellfruit) (Scorpion 5) (set 2)", + "sc5cknigb", "Crazy Knights (Bellfruit) (Scorpion 5) (set 3)", + "sc5cknigc", "Crazy Knights (Bellfruit) (Scorpion 5) (set 4)", + "sc5clcas", "Cluedo Casino (Mazooma) (Scorpion 5) (set 1)", + "sc5clcasa", "Cluedo Casino (Mazooma) (Scorpion 5) (set 2)", + "sc5clnot", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 1)", + "sc5clnota", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 2)", + "sc5clnotb", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 3)", + "sc5clnotc", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 4)", + "sc5clnotd", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 5)", + "sc5clnote", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 6)", + "sc5clnotf", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 7)", + "sc5clnotg", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 8)", + "sc5clown", "Clown Around (Bellfruit) (Scorpion 5) (set 1)", + "sc5clowna", "Clown Around (Bellfruit) (Scorpion 5) (set 2)", + "sc5clownb", "Clown Around (Bellfruit) (Scorpion 5) (set 3)", + "sc5clownc", "Clown Around (Bellfruit) (Scorpion 5) (set 4)", + "sc5clownd", "Clown Around (Bellfruit) (Scorpion 5) (set 5)", + "sc5clowne", "Clown Around (Bellfruit) (Scorpion 5) (set 6)", + "sc5clu70", "Cluedo 70 (Qps) (Scorpion 5) (set 1)", + "sc5clu70a", "Cluedo 70 (Qps) (Scorpion 5) (set 2)", + "sc5clue", "Cluedo (Mazooma) (Scorpion 5) (set 1)", + "sc5cluea", "Cluedo (Mazooma) (Scorpion 5) (set 2)", + "sc5clueb", "Cluedo (Mazooma) (Scorpion 5) (set 3)", + "sc5cluec", "Cluedo (Mazooma) (Scorpion 5) (set 4)", + "sc5clus", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 1)", + "sc5clusa", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 2)", + "sc5clusb", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 3)", + "sc5clusc", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 4)", + "sc5clusd", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 5)", + "sc5cluse", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 6)", + "sc5clusf", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 7)", + "sc5clusg", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 8)", + "sc5clush", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 9)", + "sc5clusi", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 10)", + "sc5clusj", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 11)", + "sc5clusk", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 12)", + "sc5cmani", "Colour Mania (Bellfruit) (Scorpion 5) (set 1)", + "sc5cmania", "Colour Mania (Bellfruit) (Scorpion 5) (set 2)", + "sc5cmanib", "Colour Mania (Bellfruit) (Scorpion 5) (set 3)", + "sc5cmanic", "Colour Mania (Bellfruit) (Scorpion 5) (set 4)", + "sc5cmcob", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 1)", + "sc5cmcoba", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 2)", + "sc5cmcobb", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 3)", + "sc5cmcobc", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 4)", + "sc5colmo", "Colour Of Money (Bellfruit) (Scorpion 5) (set 1)", + "sc5colmoa", "Colour Of Money (Bellfruit) (Scorpion 5) (set 2)", + "sc5colmob", "Colour Of Money (Bellfruit) (Scorpion 5) (set 3)", + "sc5colmoc", "Colour Of Money (Bellfruit) (Scorpion 5) (set 4)", + "sc5copsr", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1)", + "sc5copsra", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2)", + "sc5copsrb", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3)", + "sc5copsrc", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4)", + "sc5copsrd", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5)", + "sc5copsre", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6)", + "sc5copsrf", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 7)", + "sc5copsrg", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 8)", + "sc5copsrh", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 9)", + "sc5copsri", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 10)", + "sc5coro", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 1)", + "sc5coro0", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 4)", + "sc5coro1", "Coronation Street Triple Bingo (V013) (Mazooma) (Scorpion 5) (set 2)", + "sc5coroa", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 1)", + "sc5corob", "Coronation Street Triple Arcade (V061) (Mazooma) (Scorpion 5) (set 1)", + "sc5coroc", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 1)", + "sc5corod", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 2)", + "sc5coroe", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 1)", + "sc5corof", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 2)", + "sc5corog", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 3)", + "sc5coroh", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 4)", + "sc5coroi", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 3)", + "sc5coroj", "Coronation Street Triple Arcade (V063) (Mazooma) (Scorpion 5) (set 1)", + "sc5corok", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 2)", + "sc5corol", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 3)", + "sc5corom", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 2)", + "sc5coron", "Coronation Street Triple Arcade (V061) (Mazooma) (Scorpion 5) (set 2)", + "sc5coroo", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 4)", + "sc5corop", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 5)", + "sc5coroq", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 5)", + "sc5coror", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 6)", + "sc5coros", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 7)", + "sc5corot", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 8)", + "sc5corou", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 6)", + "sc5corov", "Coronation Street Triple Arcade (V063) (Mazooma) (Scorpion 5) (set 2)", + "sc5corow", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 4)", + "sc5corox", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 5)", + "sc5coroy", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 3)", + "sc5coroz", "Coronation Street Triple Bingo (V013) (Mazooma) (Scorpion 5) (set 1)", + "sc5corst", "Coronation Street (Bellfruit) (Scorpion 5) (set 1)", + "sc5corsta", "Coronation Street (Bellfruit) (Scorpion 5) (set 2)", + "sc5corstb", "Coronation Street (Bellfruit) (Scorpion 5) (set 3)", + "sc5corstc", "Coronation Street (Bellfruit) (Scorpion 5) (set 4)", + "sc5count", "Countdown (Bellfruit) (Scorpion 5) (set 1)", + "sc5counta", "Countdown (Bellfruit) (Scorpion 5) (set 2)", + "sc5cpays", "Crazy Pays (Bellfruit) (Scorpion 5) (set 1)", + "sc5cpaysa", "Crazy Pays (Bellfruit) (Scorpion 5) (set 2)", + "sc5cpen1", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5cpen1a", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5cpen1b", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5cpen1c", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5craid", "Cash Raider (Mazooma) (Scorpion 5) (set 1)", + "sc5craida", "Cash Raider (Mazooma) (Scorpion 5) (set 2)", + "sc5crcpt", "Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 1)", + "sc5crcpta", "Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 2)", + "sc5crcptb", "Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 3)", + "sc5crnjw", "Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 1)", + "sc5crnjwa", "Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 2)", + "sc5crnjwb", "Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 3)", + "sc5crotr", "Cops 'n' Robbers On The Run (Bellfruit) (Scorpion 5) (set 1)", + "sc5crotra", "Cops 'n' Robbers On The Run (Bellfruit) (Scorpion 5) (set 2)", + "sc5crsc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 1)", + "sc5crsca", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 2)", + "sc5crscb", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 3)", + "sc5crscc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 4)", + "sc5crscd", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 5)", + "sc5crsce", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 6)", + "sc5crscf", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 7)", + "sc5crscg", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 8)", + "sc5crsch", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 9)", + "sc5crsci", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 10)", + "sc5crscj", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 11)", + "sc5crsck", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 12)", + "sc5crscl", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 13)", + "sc5crscm", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 14)", + "sc5crscn", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 15)", + "sc5crsco", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 16)", + "sc5crscp", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 17)", + "sc5crscq", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 18)", + "sc5crscr", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 19)", + "sc5crscs", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 20)", + "sc5crsct", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 21)", + "sc5crscu", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 22)", + "sc5crsgc", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5crsgca", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5crsgcb", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5crsgcc", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5crsgr", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 1)", + "sc5crsgra", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 2)", + "sc5crsgrb", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 3)", + "sc5crsgrc", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 4)", + "sc5crsgrd", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 5)", + "sc5crsgre", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 6)", + "sc5crsgrf", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 7)", + "sc5crsgrg", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 8)", + "sc5ctit", "Cash Of The Titans (Bellfruit) (Scorpion 5) (set 1)", + "sc5ctita", "Cash Of The Titans (Bellfruit) (Scorpion 5) (set 2)", + "sc5ctl", "Cop The Lot (Bellfruit) (Scorpion 5) (set 1)", + "sc5ctla", "Cop The Lot (Bellfruit) (Scorpion 5) (set 2)", + "sc5ctlb", "Cop The Lot (Bellfruit) (Scorpion 5) (set 3)", + "sc5ctlc", "Cop The Lot (Bellfruit) (Scorpion 5) (set 4)", + "sc5cvega", "Cash Vegas (Bellfruit) (Scorpion 5) (set 1)", + "sc5cvegaa", "Cash Vegas (Bellfruit) (Scorpion 5) (set 2)", + "sc5czfr", "Fruit Crazy Triple / Crazy Keys (QPS) (Scorpion 5)", + "sc5ddbbc", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 1)", + "sc5ddbbca", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 2)", + "sc5ddbbcb", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 3)", + "sc5ddbbcc", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 4)", + "sc5ddbbcd", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 5)", + "sc5ddbbce", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 6)", + "sc5ddbbcf", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 7)", + "sc5ddbbcg", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 8)", + "sc5ddosh", "Doctor Dosh (Bellfruit) (Scorpion 5) (set 1)", + "sc5ddosha", "Doctor Dosh (Bellfruit) (Scorpion 5) (set 2)", + "sc5ddply", "Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 1)", + "sc5ddplya", "Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 2)", + "sc5ddptg", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 1)", + "sc5ddptga", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 2)", + "sc5ddptgb", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 3)", + "sc5ddptgc", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 4)", + "sc5devil", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 1)", + "sc5devila", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 2)", + "sc5devilb", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 3)", + "sc5devilc", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 4)", + "sc5dhh", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 1)", + "sc5dhha", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 2)", + "sc5dhhb", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 3)", + "sc5dhhc", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 4)", + "sc5dhhd", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 5)", + "sc5dhhe", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 6)", + "sc5dhhf", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 7)", + "sc5dhhg", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 8)", + "sc5dmine", "Diamond Mine (Bellfruit) (Scorpion 5) (set 1)", + "sc5dminea", "Diamond Mine (Bellfruit) (Scorpion 5) (set 2)", + "sc5dmineb", "Diamond Mine (Bellfruit) (Scorpion 5) (set 3)", + "sc5dminec", "Diamond Mine (Bellfruit) (Scorpion 5) (set 4)", + "sc5dmined", "Diamond Mine (Bellfruit) (Scorpion 5) (set 5)", + "sc5dminee", "Diamond Mine (Bellfruit) (Scorpion 5) (set 6)", + "sc5dminef", "Diamond Mine (Bellfruit) (Scorpion 5) (set 7)", + "sc5dmineg", "Diamond Mine (Bellfruit) (Scorpion 5) (set 8)", + "sc5dmineh", "Diamond Mine (Bellfruit) (Scorpion 5) (set 9)", + "sc5dminei", "Diamond Mine (Bellfruit) (Scorpion 5) (set 10)", + "sc5dminej", "Diamond Mine (Bellfruit) (Scorpion 5) (set 11)", + "sc5dminek", "Diamond Mine (Bellfruit) (Scorpion 5) (set 12)", + "sc5dminel", "Diamond Mine (Bellfruit) (Scorpion 5) (set 13)", + "sc5dnd", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnda", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndb", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbba", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbbc", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbbd", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndbbe", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbbf", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndbbg", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndbc", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbca", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbcb", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbcc", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbcd", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndbce", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbcf", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndbcg", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndbch", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndbci", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndbcj", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndbck", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndbd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbda", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbdb", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbdc", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbdd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndbde", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbdf", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndbdg", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndbdh", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndbdi", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndbe", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbea", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbeb", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbec", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbed", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndbee", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbef", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndbeg", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndbeh", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndbei", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndbej", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndbek", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndbel", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndbem", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndben", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndbl", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbla", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndblb", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndblc", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbld", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndble", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndblf", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndblg", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndblh", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndbli", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndblj", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndblk", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndbll", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndblm", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndbln", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndblo", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndblp", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndblq", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndblr", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndbls", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndbo", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndboa", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbob", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndboc", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbod", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndboe", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbof", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndbog", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndboh", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndboi", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndboj", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndbok", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndbq", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 1)", + "sc5dndbqa", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 2)", + "sc5dndbqb", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 3)", + "sc5dndbqc", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 4)", + "sc5dndbqd", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 5)", + "sc5dndbqe", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 6)", + "sc5dndbr", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbra", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbrb", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndbrc", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndbrd", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbre", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndbrf", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbrg", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndbrh", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndbri", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndbrj", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbrk", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndbrl", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndbrm", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndbrn", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndbro", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndbrp", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndbrq", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndbrr", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndbrs", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndbrt", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndbru", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndbrv", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndbrw", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndc", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndc2", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndc2a", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndc2b", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndc2c", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndc2d", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndc2e", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndc2f", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndc2g", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndc2h", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndc2i", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndc2j", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndc2k", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndc2l", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndc2m", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndc2n", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndc2o", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndc2p", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndc2q", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndc2r", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndc2s", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndc2t", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 21)", + "sc5dndc2u", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 22)", + "sc5dndc2v", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 23)", + "sc5dndc2w", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 24)", + "sc5dndc3", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndc3a", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndc3b", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndc3c", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndca", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcaa", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndcab", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndcac", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndcad", "Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcae", "Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndcb", "Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcba", "Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndcc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcca", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndccb", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndccc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndccd", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndcce", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndccf", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndccg", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndcch", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndcci", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndccj", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndcck", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndccl", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndccm", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndccn", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndcco", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndccp", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndccq", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndccr", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndcl", "Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcla", "Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndcr", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcra", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndcrb", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndcrc", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndcrd", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndcre", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndcs", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndcsa", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndcsb", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndcsc", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndcsd", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndcse", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndcsf", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndcsg", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndcsh", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndcsi", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndcsj", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndcsk", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndcsl", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndcsm", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndd", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dnddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddda", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndddb", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndddc", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dnddde", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndddf", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndddg", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndddh", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndddi", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndde", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddea", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dnddeb", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dnddec", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndded", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dnddee", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 6)", + "sc5dnddef", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 7)", + "sc5dnddeg", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 8)", + "sc5dnddf", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddfa", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 2)", + "sc5dnddfb", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 3)", + "sc5dnddfc", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 4)", + "sc5dnddfd", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 5)", + "sc5dnddfe", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 6)", + "sc5dnddff", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 7)", + "sc5dnddfg", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 8)", + "sc5dnddfh", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 9)", + "sc5dnddfi", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 10)", + "sc5dnddfj", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 11)", + "sc5dnddfk", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 12)", + "sc5dnddfl", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 13)", + "sc5dnddfm", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 14)", + "sc5dnddfn", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 15)", + "sc5dnddi", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddia", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 2)", + "sc5dnddib", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 3)", + "sc5dnddic", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 4)", + "sc5dnddo", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddoa", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 2)", + "sc5dnddob", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 3)", + "sc5dnddoc", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 4)", + "sc5dnddt", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddta", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 2)", + "sc5dnddtb", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 3)", + "sc5dnddtc", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 4)", + "sc5dnddtd", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 5)", + "sc5dnddte", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 6)", + "sc5dnddtf", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 7)", + "sc5dnddw", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 1)", + "sc5dnddwa", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 2)", + "sc5dnddwb", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 3)", + "sc5dnddwc", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 4)", + "sc5dnddwd", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 5)", + "sc5dnddwe", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 6)", + "sc5dnddwf", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 7)", + "sc5dnddwg", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 8)", + "sc5dnddwh", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 9)", + "sc5dnddwi", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 10)", + "sc5dnddwj", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 11)", + "sc5dnde", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndf", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndfl", "Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndfla", "Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndflb", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndflc", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndfld", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndfle", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndg", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndgl", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndgla", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndglb", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndglc", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndgld", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndgle", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndglf", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndglg", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndglh", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndgli", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndglj", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndglk", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndgo", "Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndgoa", "Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndh", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndhf", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndhfa", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndhfb", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndhfc", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndhfd", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndhfe", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndhff", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndhfg", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndhfh", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndhfi", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndhfj", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndhfk", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndhfl", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndhfm", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndhfn", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndhfo", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndhfp", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndhfq", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndhfr", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndhfs", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndhft", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 21)", + "sc5dndhfu", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 22)", + "sc5dndi", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndj", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndk", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndl", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndld", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndlda", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndldb", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndldc", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndlp", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndlpa", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndlpb", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndlpc", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndlpd", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndlpe", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndlpf", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndlpg", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndlph", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndlpi", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndlpj", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndlpk", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndlpl", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndlpm", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndlpn", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndlpo", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndlpp", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndlpq", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndlpr", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndlps", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndlpt", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21)", + "sc5dndlpu", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 22)", + "sc5dndm", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndmb", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndmba", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndmbb", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndmbc", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndmbd", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndmbe", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndmbf", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndmbg", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndmbh", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndmbi", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndmbj", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndmbk", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndmd", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndmda", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndmdb", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndmdc", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndmdd", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndmde", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndmdf", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndmdg", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndmdh", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndmdi", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndmdj", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndmdk", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndn", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndo", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndp", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndpa", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndpaa", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndpab", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndpac", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndpc", "Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndpca", "Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndpd", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndpda", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndpdb", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndpdc", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndpdd", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndpde", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndpg", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndpga", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndpgb", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndpgc", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndpgd", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndpge", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndpgf", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndpgg", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndpgh", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndpgi", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndpgj", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndpgk", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndpgl", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndpgm", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndpgn", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndpgo", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndpgp", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndpgq", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndpgr", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndpgs", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndpgt", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 21)", + "sc5dndpgu", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 22)", + "sc5dndpgv", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 23)", + "sc5dndpgw", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 24)", + "sc5dndpl", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndpla", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndplb", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndplc", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndq", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndr", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndra", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndraa", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndrab", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndrac", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndrad", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndrae", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndraf", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndrag", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndrah", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndrai", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndraj", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndrak", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndrr", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndrra", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndrrb", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndrrc", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndrrd", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndrre", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndrt", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndrta", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndrtb", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndrtc", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndrtd", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndrte", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 6)", + "sc5dnds", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndsi", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndsia", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndsib", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndsic", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndsid", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndt", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21)", + "sc5dndtb", "Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndtba", "Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndtp", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndtpa", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndtpb", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndtpc", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndtpd", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndtpe", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndtpf", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndtpg", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndtph", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndtpi", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndtpj", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndtpk", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndtpl", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndtpm", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndtpn", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndtpo", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndtpp", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndtpq", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndtpr", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndtps", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndtpt", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 21)", + "sc5dndtpu", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 22)", + "sc5dndtpv", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 23)", + "sc5dndtr", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndtra", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndtrb", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndtrc", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndtrd", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndtre", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndtrf", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndtrg", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndtrh", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndtri", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndtrj", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndtrk", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndwb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndwba", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndwbb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndwbc", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndwbd", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndwbe", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndwbf", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndwbg", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndwbh", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndwbi", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndwbj", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndwbk", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndwbl", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndwbm", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndwbn", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndwbo", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndwbp", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndwbq", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndwbr", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndwbs", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndwc", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndwca", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndwcb", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndwcc", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndwcd", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndwce", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndwcf", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndwcg", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndwi", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndwia", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndwib", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndwic", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndwid", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndwie", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndwif", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndwig", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndww", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndwwa", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndwwb", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndwwc", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndwwd", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndwwe", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndwwf", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndwwg", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndwwh", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 9)", + "sc5dndwwi", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 10)", + "sc5dndwwj", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 11)", + "sc5dndwwk", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 12)", + "sc5dndwwl", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 13)", + "sc5dndwwm", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 14)", + "sc5dndwwn", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 15)", + "sc5dndwwo", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 16)", + "sc5dndwwp", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 17)", + "sc5dndwwq", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 18)", + "sc5dndwwr", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 19)", + "sc5dndwws", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 20)", + "sc5dndys", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 1)", + "sc5dndysa", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 2)", + "sc5dndysb", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 3)", + "sc5dndysc", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 4)", + "sc5dndysd", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 5)", + "sc5dndyse", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 6)", + "sc5dndysf", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 7)", + "sc5dndysg", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 8)", + "sc5dndysh", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 9)", + "sc5dough", "Dough Selecta (Bellfruit) (Scorpion 5) (set 1)", + "sc5dougha", "Dough Selecta (Bellfruit) (Scorpion 5) (set 2)", + "sc5dracp", "Drac Pack (Bellfruit) (Scorpion 5) (set 1)", + "sc5dracpa", "Drac Pack (Bellfruit) (Scorpion 5) (set 2)", + "sc5ducks", "Ducks Of Hazzard (Mazooma) (Scorpion 5)", + "sc5emmer", "Emmerdale (Mazooma) (Scorpion 5) (set 1)", + "sc5emmera", "Emmerdale (Mazooma) (Scorpion 5) (set 2)", + "sc5fast", "Fast Cash (Qps) (Scorpion 5)", + "sc5fbspn", "Fat Boy Spin (Bellfruit) (Scorpion 5) (set 1)", + "sc5fbspna", "Fat Boy Spin (Bellfruit) (Scorpion 5) (set 2)", + "sc5fdice", "Fire 'n' Dice (Bellfruit) (Scorpion 5) (set 1)", + "sc5fdicea", "Fire 'n' Dice (Bellfruit) (Scorpion 5) (set 2)", + "sc5fgbh", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 1)", + "sc5fgbha", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 2)", + "sc5fgbhb", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 3)", + "sc5fgbhc", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 4)", + "sc5fggp", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 1)", + "sc5fggpa", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 2)", + "sc5fggpb", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 3)", + "sc5fggpc", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 4)", + "sc5fggpd", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 5)", + "sc5fggpe", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 6)", + "sc5fggpf", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 7)", + "sc5fggpg", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 8)", + "sc5fguy", "Family Guy (Bellfruit) (Scorpion 5) (set 1)", + "sc5fguya", "Family Guy (Bellfruit) (Scorpion 5) (set 2)", + "sc5fguyb", "Family Guy (Bellfruit) (Scorpion 5) (set 3)", + "sc5fguyc", "Family Guy (Bellfruit) (Scorpion 5) (set 4)", + "sc5fguyd", "Family Guy (Bellfruit) (Scorpion 5) (set 5)", + "sc5fguye", "Family Guy (Bellfruit) (Scorpion 5) (set 6)", + "sc5fguyf", "Family Guy (Bellfruit) (Scorpion 5) (set 7)", + "sc5fguyg", "Family Guy (Bellfruit) (Scorpion 5) (set 8)", + "sc5fires", "Firestarter (Bellfruit) (Scorpion 5) (set 1)", + "sc5firesa", "Firestarter (Bellfruit) (Scorpion 5) (set 2)", + "sc5firesb", "Firestarter (Bellfruit) (Scorpion 5) (set 3)", + "sc5firesc", "Firestarter (Bellfruit) (Scorpion 5) (set 4)", + "sc5floop", "Fruit Loops (Mazooma) (Scorpion 5) (set 1)", + "sc5floopa", "Fruit Loops (Mazooma) (Scorpion 5) (set 2)", + "sc5fmj", "Full Metal Jackpot (Mazooma) (Scorpion 5) (set 1)", + "sc5fmja", "Full Metal Jackpot (Mazooma) (Scorpion 5) (set 2)", + "sc5fnclb", "Fight Night Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5fnclba", "Fight Night Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5fnclbb", "Fight Night Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5fnclbc", "Fight Night Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5fnclbd", "Fight Night Club (Bellfruit) (Scorpion 5) (set 5)", + "sc5fnclbe", "Fight Night Club (Bellfruit) (Scorpion 5) (set 6)", + "sc5frcrz", "Fruit Crazy (Mazooma) (Scorpion 5) (set 1)", + "sc5frcrza", "Fruit Crazy (Mazooma) (Scorpion 5) (set 2)", + "sc5ftcas", "Flash The Cash (Mazooma) (Scorpion 5) (set 1)", + "sc5ftcasa", "Flash The Cash (Mazooma) (Scorpion 5) (set 2)", + "sc5gball", "Golden Balls (Bellfruit) (Scorpion 5) (set 1)", + "sc5gballa", "Golden Balls (Bellfruit) (Scorpion 5) (set 2)", + "sc5gballb", "Golden Balls (Bellfruit) (Scorpion 5) (set 3)", + "sc5gballc", "Golden Balls (Bellfruit) (Scorpion 5) (set 4)", + "sc5gd", "Gold Digger (Bellfruit) (Scorpion 5) (set 1)", + "sc5gda", "Gold Digger (Bellfruit) (Scorpion 5) (set 2)", + "sc5gdclb", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5gdclba", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5gdclbb", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5gdclbc", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5gdclbd", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 5)", + "sc5gdclbe", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 6)", + "sc5gdclbf", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 7)", + "sc5gdclbg", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 8)", + "sc5gdclbh", "Gold Digger (PR3509) (Bellfruit) (Scorpion 5) (set 1)", + "sc5gdclbi", "Gold Digger (PR3509) (Bellfruit) (Scorpion 5) (set 2)", + "sc5gdclbj", "Gold Digger Club (PR3429) (Bellfruit) (Scorpion 5) (set 1)", + "sc5gdclbk", "Gold Digger Club (PR3429) (Bellfruit) (Scorpion 5) (set 2)", + "sc5gdmz", "Gold Diggers (Mazooma) (Scorpion 5) (set 1)", + "sc5gdmza", "Gold Diggers (Mazooma) (Scorpion 5) (set 2)", + "sc5ggame", "Golden Game (Mazooma) (Scorpion 5) (set 1)", + "sc5ggamea", "Golden Game (Mazooma) (Scorpion 5) (set 2)", + "sc5ggameb", "Golden Game (Mazooma) (Scorpion 5) (set 3)", + "sc5ggamec", "Golden Game (Mazooma) (Scorpion 5) (set 4)", + "sc5ggamed", "Golden Game (Mazooma) (Scorpion 5) (set 5)", + "sc5ggg", "Grand Golden Game (Mazooma) (Scorpion 5) (set 1)", + "sc5ggga", "Grand Golden Game (Mazooma) (Scorpion 5) (set 3)", + "sc5gggb", "Grand Golden Game (Mazooma) (Scorpion 5) (set 2)", + "sc5gggc", "Grand Golden Game (Mazooma) (Scorpion 5) (set 4)", + "sc5glad", "Gladiator (Mazooma) (Scorpion 5) (set 1)", + "sc5glada", "Gladiator (Mazooma) (Scorpion 5) (set 2)", + "sc5gladb", "Gladiator (Mazooma) (Scorpion 5) (set 3)", + "sc5gladc", "Gladiator (Mazooma) (Scorpion 5) (set 4)", + "sc5gldfv", "Gold Fever (Bellfruit) (Scorpion 5) (set 1)", + "sc5gldfva", "Gold Fever (Bellfruit) (Scorpion 5) (set 2)", + "sc5gldfvb", "Gold Fever (Bellfruit) (Scorpion 5) (set 3)", + "sc5gldfvc", "Gold Fever (Bellfruit) (Scorpion 5) (set 4)", + "sc5gldfvd", "Gold Fever (Bellfruit) (Scorpion 5) (set 5)", + "sc5gldfve", "Gold Fever (Bellfruit) (Scorpion 5) (set 6)", + "sc5gldfvf", "Gold Fever (Bellfruit) (Scorpion 5) (set 7)", + "sc5gldfvg", "Gold Fever (Bellfruit) (Scorpion 5) (set 8)", + "sc5gldgo", "Golden Goals (Bellfruit) (Scorpion 5) (set 1)", + "sc5gldgoa", "Golden Goals (Bellfruit) (Scorpion 5) (set 2)", + "sc5gldsp", "Golden Spinner (PR2203) (Mazooma) (Scorpion 5)", + "sc5gldspa", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 1)", + "sc5gldspb", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 2)", + "sc5gldspc", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 3)", + "sc5gldspd", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 1)", + "sc5gldspe", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 4)", + "sc5gldspf", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 2)", + "sc5gldspg", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 5)", + "sc5gldsph", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 3)", + "sc5gldspi", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 6)", + "sc5gldspj", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 7)", + "sc5gldspk", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 8)", + "sc5gldspl", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 9)", + "sc5gldspm", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 10)", + "sc5gldspn", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 4)", + "sc5gldspo", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 11)", + "sc5gldspp", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 5)", + "sc5gmclb", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 1)", + "sc5gmclba", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 2)", + "sc5gmclbb", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 3)", + "sc5gmclbc", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 4)", + "sc5grq", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 1)", + "sc5grqa", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 2)", + "sc5grqb", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 3)", + "sc5grqc", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 4)", + "sc5gunp", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 1)", + "sc5gunpa", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 2)", + "sc5gunpb", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 3)", + "sc5gunpc", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 4)", + "sc5gunpd", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 5)", + "sc5gunpe", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 6)", + "sc5gunpf", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 7)", + "sc5gunpg", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 8)", + "sc5gunph", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 9)", + "sc5gunpi", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 10)", + "sc5gunpj", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 11)", + "sc5gunpk", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 12)", + "sc5gunpl", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 13)", + "sc5hapnt", "Happy Notes (Bellfruit) (Scorpion 5) (set 1)", + "sc5hapnta", "Happy Notes (Bellfruit) (Scorpion 5) (set 2)", + "sc5hapntb", "Happy Notes (Bellfruit) (Scorpion 5) (set 3)", + "sc5hapntc", "Happy Notes (Bellfruit) (Scorpion 5) (set 4)", + "sc5hapntd", "Happy Notes (Bellfruit) (Scorpion 5) (set 5)", + "sc5hapnte", "Happy Notes (Bellfruit) (Scorpion 5) (set 6)", + "sc5hapntf", "Happy Notes (Bellfruit) (Scorpion 5) (set 7)", + "sc5hapntg", "Happy Notes (Bellfruit) (Scorpion 5) (set 8)", + "sc5hellb", "Hells Bells (Bellfruit) (Scorpion 5) (set 1)", + "sc5hellba", "Hells Bells (Bellfruit) (Scorpion 5) (set 2)", + "sc5hill", "Hill Billionaire (Bellfruit) (Scorpion 5) (set 1)", + "sc5hilla", "Hill Billionaire (Bellfruit) (Scorpion 5) (set 2)", + "sc5hillb", "Hill Billionaire (Bellfruit) (Scorpion 5) (set 3)", + "sc5hirol", "High Roller (Mazooma) (Scorpion 5) (set 1)", + "sc5hirola", "High Roller (Mazooma) (Scorpion 5) (set 2)", + "sc5hirolb", "High Roller (Mazooma) (Scorpion 5) (set 3)", + "sc5hirolc", "High Roller (Mazooma) (Scorpion 5) (set 4)", + "sc5hirold", "High Roller (Mazooma) (Scorpion 5) (set 5)", + "sc5hirole", "High Roller (Mazooma) (Scorpion 5) (set 6)", + "sc5hiss", "Hissing Quid (Qps) (Scorpion 5) (set 1)", + "sc5hissa", "Hissing Quid (Qps) (Scorpion 5) (set 2)", + "sc5hissb", "Hissing Quid (Qps) (Scorpion 5) (set 3)", + "sc5hissc", "Hissing Quid (Qps) (Scorpion 5) (set 4)", + "sc5hog", "Road Hog (PR3208) (Bellfruit) (Scorpion 5) (set 3)", + "sc5hoga", "Road Hog (PR3208) (Bellfruit) (Scorpion 5) (set 4)", + "sc5hotdg", "Hot Dog (Bellfruit) (Scorpion 5) (set 1)", + "sc5hotdga", "Hot Dog (Bellfruit) (Scorpion 5) (set 2)", + "sc5hotdgb", "Hot Dog (Bellfruit) (Scorpion 5) (set 3)", + "sc5hotdgc", "Hot Dog (Bellfruit) (Scorpion 5) (set 4)", + "sc5hotdgd", "Hot Dog (Bellfruit) (Scorpion 5) (set 5)", + "sc5hotdge", "Hot Dog (Bellfruit) (Scorpion 5) (set 6)", + "sc5hotrd", "Hot Rod (Bellfruit) (Scorpion 5) (set 1)", + "sc5hotrda", "Hot Rod (Bellfruit) (Scorpion 5) (set 2)", + "sc5hotsh", "Hot Shot (Bellfruit) (Scorpion 5) (set 1)", + "sc5hotsha", "Hot Shot (Bellfruit) (Scorpion 5) (set 2)", + "sc5hotshb", "Hot Shot (Bellfruit) (Scorpion 5) (set 3)", + "sc5hotshc", "Hot Shot (Bellfruit) (Scorpion 5) (set 4)", + "sc5hotshd", "Hot Shot (Bellfruit) (Scorpion 5) (set 5)", + "sc5hotshe", "Hot Shot (Bellfruit) (Scorpion 5) (set 6)", + "sc5hotshf", "Hot Shot (Bellfruit) (Scorpion 5) (set 7)", + "sc5hotshg", "Hot Shot (Bellfruit) (Scorpion 5) (set 8)", + "sc5hotshh", "Hot Shot (Bellfruit) (Scorpion 5) (set 9)", + "sc5hotshi", "Hot Shot (Bellfruit) (Scorpion 5) (set 10)", + "sc5hotshj", "Hot Shot (Bellfruit) (Scorpion 5) (set 11)", + "sc5hotshk", "Hot Shot (Bellfruit) (Scorpion 5) (set 12)", + "sc5hotshl", "Hot Shot (Bellfruit) (Scorpion 5) (set 13)", + "sc5hotshm", "Hot Shot (Bellfruit) (Scorpion 5) (set 14)", + "sc5hotshn", "Hot Shot (Bellfruit) (Scorpion 5) (set 15)", + "sc5hotsho", "Hot Shot (Bellfruit) (Scorpion 5) (set 16)", + "sc5hotshp", "Hot Shot (Bellfruit) (Scorpion 5) (set 17)", + "sc5hotshq", "Hot Shot (Bellfruit) (Scorpion 5) (set 18)", + "sc5hotwd", "Hot Wad (Bellfruit) (Scorpion 5) (set 1)", + "sc5hotwda", "Hot Wad (Bellfruit) (Scorpion 5) (set 2)", + "sc5hotwdb", "Hot Wad (Bellfruit) (Scorpion 5) (set 3)", + "sc5hotwdc", "Hot Wad (Bellfruit) (Scorpion 5) (set 4)", + "sc5hotwdd", "Hot Wad (Bellfruit) (Scorpion 5) (set 5)", + "sc5hotwde", "Hot Wad (Bellfruit) (Scorpion 5) (set 6)", + "sc5hotwdf", "Hot Wad (Bellfruit) (Scorpion 5) (set 7)", + "sc5hotwdg", "Hot Wad (Bellfruit) (Scorpion 5) (set 8)", + "sc5hulk", "Hulk, The (Bellfruit) (Scorpion 5) (set 1)", + "sc5hulka", "Hulk, The (Bellfruit) (Scorpion 5) (set 2)", + "sc5hulkb", "Hulk, The (Bellfruit) (Scorpion 5) (set 3)", + "sc5hulkc", "Hulk, The (Bellfruit) (Scorpion 5) (set 4)", + "sc5hulkd", "Hulk, The (Bellfruit) (Scorpion 5) (set 5)", + "sc5hulke", "Hulk, The (Bellfruit) (Scorpion 5) (set 6)", + "sc5hulkf", "Hulk, The (Bellfruit) (Scorpion 5) (set 7)", + "sc5hulkg", "Hulk, The (Bellfruit) (Scorpion 5) (set 8)", + "sc5hulkh", "Hulk, The (Bellfruit) (Scorpion 5) (set 9)", + "sc5hulki", "Hulk, The (Bellfruit) (Scorpion 5) (set 10)", + "sc5iab", "It's A Bullseye (Mazooma) (Scorpion 5) (set 1)", + "sc5iaba", "It's A Bullseye (Mazooma) (Scorpion 5) (set 2)", + "sc5ijbdo", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 1)", + "sc5ijbdoa", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 2)", + "sc5ijbdob", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 3)", + "sc5ijbdoc", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 4)", + "sc5ijob", "Italian Job (Mazooma) (Scorpion 5) (set 1)", + "sc5ijoba", "Italian Job (Mazooma) (Scorpion 5) (set 2)", + "sc5ijobb", "Italian Job (Mazooma) (Scorpion 5) (set 3)", + "sc5ijobc", "Italian Job (Mazooma) (Scorpion 5) (set 4)", + "sc5ijobd", "Italian Job (Mazooma) (Scorpion 5) (set 5)", + "sc5ijobe", "Italian Job (Mazooma) (Scorpion 5) (set 6)", + "sc5ijobf", "Italian Job (Mazooma) (Scorpion 5) (set 7)", + "sc5ijobg", "Italian Job (Mazooma) (Scorpion 5) (set 8)", + "sc5ijobh", "Italian Job (Mazooma) (Scorpion 5) (set 9)", + "sc5ijobi", "Italian Job (Mazooma) (Scorpion 5) (set 10)", + "sc5inspn", "Inner Spin (Mazooma) (Scorpion 5) (set 1)", + "sc5inspna", "Inner Spin (Mazooma) (Scorpion 5) (set 2)", + "sc5jjok", "Jackpot Jokers (Bellfruit) (Scorpion 5) (set 1)", + "sc5jjoka", "Jackpot Jokers (Bellfruit) (Scorpion 5) (set 2)", + "sc5kingx", "King X (PR2077) (Mazooma) (Scorpion 5) (set 1)", + "sc5kingxa", "King X (PR2077) (Mazooma) (Scorpion 5) (set 2)", + "sc5kingxb", "King X Triple (PR2279) (Mazooma) (Scorpion 5) (set 1)", + "sc5kingxc", "King X 3P (PR2336) (Mazooma) (Scorpion 5) (set 1)", + "sc5kingxd", "King X Triple (PR2279) (Mazooma) (Scorpion 5) (set 2)", + "sc5kingxe", "King X 3P (PR2336) (Mazooma) (Scorpion 5) (set 2)", + "sc5ldvl", "Little Devil (Mazooma) (Scorpion 5) (set 1)", + "sc5ldvla", "Little Devil (Mazooma) (Scorpion 5) (set 2)", + "sc5ldvlb", "Little Devil (Mazooma) (Scorpion 5) (set 3)", + "sc5ldvlc", "Little Devil (Mazooma) (Scorpion 5) (set 4)", + "sc5ldvld", "Little Devil (Mazooma) (Scorpion 5) (set 5)", + "sc5ldvle", "Little Devil (Mazooma) (Scorpion 5) (set 6)", + "sc5lotrr", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 1)", + "sc5lotrra", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 2)", + "sc5lotrrb", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 3)", + "sc5lotrrc", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 4)", + "sc5lotrrd", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 5)", + "sc5lotrre", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 6)", + "sc5lotrrf", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 7)", + "sc5lotrrg", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 8)", + "sc5lotrrh", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 9)", + "sc5lotrri", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 10)", + "sc5manic", "Manic Miner (Bellfruit) (Scorpion 5) (set 1)", + "sc5manica", "Manic Miner (Bellfruit) (Scorpion 5) (set 2)", + "sc5manicb", "Manic Miner (Bellfruit) (Scorpion 5) (set 3)", + "sc5manicc", "Manic Miner (Bellfruit) (Scorpion 5) (set 4)", + "sc5manicd", "Manic Miner (Bellfruit) (Scorpion 5) (set 5)", + "sc5manice", "Manic Miner (Bellfruit) (Scorpion 5) (set 6)", + "sc5manicf", "Manic Miner (Bellfruit) (Scorpion 5) (set 7)", + "sc5manicg", "Manic Miner (Bellfruit) (Scorpion 5) (set 8)", + "sc5manich", "Manic Miner (Bellfruit) (Scorpion 5) (set 9)", + "sc5manici", "Manic Miner (Bellfruit) (Scorpion 5) (set 10)", + "sc5manicj", "Manic Miner (Bellfruit) (Scorpion 5) (set 11)", + "sc5manick", "Manic Miner (Bellfruit) (Scorpion 5) (set 12)", + "sc5manicl", "Manic Miner (Bellfruit) (Scorpion 5) (set 13)", + "sc5manicm", "Manic Miner (Bellfruit) (Scorpion 5) (set 14)", + "sc5manicn", "Manic Miner (Bellfruit) (Scorpion 5) (set 15)", + "sc5manico", "Manic Miner (Bellfruit) (Scorpion 5) (set 16)", + "sc5manicp", "Manic Miner (Bellfruit) (Scorpion 5) (set 17)", + "sc5manicq", "Manic Miner (Bellfruit) (Scorpion 5) (set 18)", + "sc5manicr", "Manic Miner (Bellfruit) (Scorpion 5) (set 19)", + "sc5manics", "Manic Miner (Bellfruit) (Scorpion 5) (set 20)", + "sc5manict", "Manic Miner (Bellfruit) (Scorpion 5) (set 21)", + "sc5manicu", "Manic Miner (Bellfruit) (Scorpion 5) (set 22)", + "sc5manicv", "Manic Miner (Bellfruit) (Scorpion 5) (set 23)", + "sc5manicw", "Manic Miner (Bellfruit) (Scorpion 5) (set 24)", + "sc5manicx", "Manic Miner (Bellfruit) (Scorpion 5) (set 25)", + "sc5manicy", "Manic Miner (Bellfruit) (Scorpion 5) (set 26)", + "sc5mcas", "Monopoly Casino (Mazooma) (Scorpion 5) (set 1)", + "sc5mcasa", "Monopoly Casino (Mazooma) (Scorpion 5) (set 3)", + "sc5mcasb", "Monopoly Casino (Mazooma) (Scorpion 5) (set 2)", + "sc5mcasc", "Monopoly Casino (Mazooma) (Scorpion 5) (set 4)", + "sc5mdm", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 1)", + "sc5mdma", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 2)", + "sc5mdmb", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 3)", + "sc5mdmc", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 4)", + "sc5mhn", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 1)", + "sc5mhna", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 2)", + "sc5mhnb", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 3)", + "sc5mhnc", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 4)", + "sc5mhnd", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 5)", + "sc5mhne", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 6)", + "sc5mhp", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 1)", + "sc5mhpa", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 2)", + "sc5mhpb", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 3)", + "sc5mhpc", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 4)", + "sc5mhpd", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 5)", + "sc5mhpe", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 6)", + "sc5mhpf", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 7)", + "sc5mhpg", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 8)", + "sc5mhph", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 9)", + "sc5mhpi", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 10)", + "sc5mhpj", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 11)", + "sc5mhpk", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 12)", + "sc5mhpl", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 13)", + "sc5mmad", "Money Madness (Mazooma) (Scorpion 5) (set 1)", + "sc5mmada", "Money Madness (Mazooma) (Scorpion 5) (set 2)", + "sc5mmadb", "Money Madness (Mazooma) (Scorpion 5) (set 3)", + "sc5mmadc", "Money Madness (Mazooma) (Scorpion 5) (set 4)", + "sc5mmb", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 1)", + "sc5mmba", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 2)", + "sc5mmbb", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 3)", + "sc5mmbc", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 4)", + "sc5mmbd", "Monopoly Money Bags (PR1911) (Bellfruit) (Scorpion 5) (set 1)", + "sc5mmbe", "Monopoly Money Bags (PR1911) (Bellfruit) (Scorpion 5) (set 2)", + "sc5mmm", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 1)", + "sc5mmma", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 2)", + "sc5mmmb", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 3)", + "sc5mmmc", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 4)", + "sc5mobob", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 1)", + "sc5moboba", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 2)", + "sc5mobobb", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 1)", + "sc5mobobc", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 2)", + "sc5mobobd", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 3)", + "sc5mobobe", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 4)", + "sc5mobobf", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 3)", + "sc5mobobg", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 4)", + "sc5mobobh", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 5)", + "sc5mobobi", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 6)", + "sc5mogta", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 1)", + "sc5mogtaa", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 2)", + "sc5mogtab", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 3)", + "sc5mogtac", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 4)", + "sc5mogtad", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 5)", + "sc5mogtae", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 6)", + "sc5mombc", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 1)", + "sc5mombca", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 2)", + "sc5mombcb", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 3)", + "sc5mombcc", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 4)", + "sc5momil", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 1)", + "sc5momila", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 2)", + "sc5momilb", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 3)", + "sc5momilc", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 4)", + "sc5momild", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 5)", + "sc5momile", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 6)", + "sc5moms", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 1)", + "sc5momsa", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 2)", + "sc5momsb", "Money Spinner (PR2395) (Qps) (Scorpion 5) (set 1)", + "sc5momsc", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 3)", + "sc5momsd", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 4)", + "sc5momse", "Money Spinner (PR2395) (Qps) (Scorpion 5) (set 2)", + "sc5monky", "Monkey Business / Toss The Monkey (Mazooma) (Scorpion 5) (set 1)", + "sc5monkya", "Monkey Business / Toss The Monkey (Mazooma) (Scorpion 5) (set 2)", + "sc5monop", "Monopoly (Mazooma) (Scorpion 5)", + "sc5monsp", "Money Spinner (Bellfruit) (Scorpion 5) (set 1)", + "sc5monspa", "Money Spinner (Bellfruit) (Scorpion 5) (set 2)", + "sc5monwa", "Monopoly Win Again (Qps) (Scorpion 5) (set 1)", + "sc5monwaa", "Monopoly Win Again (Qps) (Scorpion 5) (set 2)", + "sc5mopl", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 1)", + "sc5mopla", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 2)", + "sc5moplb", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 3)", + "sc5moplc", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 4)", + "sc5mopld", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 5)", + "sc5mople", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 6)", + "sc5moplf", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 7)", + "sc5moplg", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 8)", + "sc5mor2r", "Monopoly Road To Riches (Qps) (Scorpion 5) (set 1)", + "sc5mor2ra", "Monopoly Road To Riches (Qps) (Scorpion 5) (set 2)", + "sc5mowow", "Monopoly Wheel Of Wealth (Mazooma) (Scorpion 5) (set 1)", + "sc5mowowb", "Monopoly Wheel Of Wealth (Mazooma) (Scorpion 5) (set 2)", + "sc5mr2r", "Monopoly Road To Riches (PR2329) (Mazooma) (Scorpion 5) (set 1)", + "sc5mr2ra", "Monopoly Road To Riches (PR2329) (Mazooma) (Scorpion 5) (set 2)", + "sc5mr2rb", "Monopoly Road To Riches Club (PR2457) (Mazooma) (Scorpion 5)", + "sc5mrh", "Monopoly Red Hot (Mazooma) (Scorpion 5) (set 1)", + "sc5mrha", "Monopoly Red Hot (Mazooma) (Scorpion 5) (set 2)", + "sc5mrrcl", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 1)", + "sc5mrrcla", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 2)", + "sc5mrrclb", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 3)", + "sc5mrrclc", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 4)", + "sc5mww", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 1)", + "sc5mwwa", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 2)", + "sc5mwwb", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 3)", + "sc5mwwc", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 4)", + "sc5newcm", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 1)", + "sc5newcma", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 2)", + "sc5newcmb", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 3)", + "sc5newcmc", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 4)", + "sc5newcmd", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 5)", + "sc5newcme", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 6)", + "sc5nmare", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 1)", + "sc5nmarea", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 2)", + "sc5nmareb", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 3)", + "sc5nmarec", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 4)", + "sc5nunsb", "Nuns 'n' Roses (Bellfruit) (Scorpion 5)", + "sc5nunsm", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 1)", + "sc5nunsma", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 2)", + "sc5nunsmb", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 3)", + "sc5nunsmc", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 4)", + "sc5nunsmd", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 5)", + "sc5nunsme", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 6)", + "sc5parot", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 1)", + "sc5parota", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 2)", + "sc5parotb", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 3)", + "sc5parotc", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 4)", + "sc5parotd", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 5)", + "sc5parote", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 6)", + "sc5parotf", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 7)", + "sc5parotg", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 8)", + "sc5pilep", "Pile On The Pounds (Qps) (Scorpion 5) (set 1)", + "sc5pilepa", "Pile On The Pounds (Qps) (Scorpion 5) (set 2)", + "sc5pilepb", "Pile On The Pounds (Qps) (Scorpion 5) (set 3)", + "sc5pilepc", "Pile On The Pounds (Qps) (Scorpion 5) (set 4)", + "sc5pircl", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5pircla", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5pirclb", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5pirclc", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5pircld", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 5)", + "sc5pircle", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 6)", + "sc5pirclf", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 7)", + "sc5pirclg", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 8)", + "sc5plays", "28 Plays Later (Qps) (Scorpion 5) (set 1)", + "sc5playsa", "28 Plays Later (Qps) (Scorpion 5) (set 2)", + "sc5pog", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 1)", + "sc5poga", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 2)", + "sc5pogb", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 3)", + "sc5pogc", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 4)", + "sc5pogd", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 5)", + "sc5poge", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 6)", + "sc5pogf", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 7)", + "sc5pogg", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 8)", + "sc5pompa", "Up Pompay (Bellfruit) (Scorpion 5) (set 1)", + "sc5pompaa", "Up Pompay (Bellfruit) (Scorpion 5) (set 2)", + "sc5pompab", "Up Pompay (Bellfruit) (Scorpion 5) (set 3)", + "sc5pony", "Pony Express (Bellfruit) (Scorpion 5) (set 1)", + "sc5ponya", "Pony Express (Bellfruit) (Scorpion 5) (set 2)", + "sc5ponyb", "Pony Express (Bellfruit) (Scorpion 5) (set 3)", + "sc5ponyc", "Pony Express (Bellfruit) (Scorpion 5) (set 4)", + "sc5ponyd", "Pony Express (Bellfruit) (Scorpion 5) (set 5)", + "sc5ponye", "Pony Express (Bellfruit) (Scorpion 5) (set 6)", + "sc5popey", "Popeye (Mazooma) (Scorpion 5) (set 1)", + "sc5popeya", "Popeye (Mazooma) (Scorpion 5) (set 2)", + "sc5popeyb", "Popeye (Mazooma) (Scorpion 5) (set 3)", + "sc5popeyc", "Popeye (Mazooma) (Scorpion 5) (set 4)", + "sc5popeyd", "Popeye (Mazooma) (Scorpion 5) (set 5)", + "sc5popeye", "Popeye (Mazooma) (Scorpion 5) (set 6)", + "sc5popeyf", "Popeye (Mazooma) (Scorpion 5) (set 7)", + "sc5popeyg", "Popeye (Mazooma) (Scorpion 5) (set 8)", + "sc5potog", "Pot Of Gold (QPS) (Scorpion 5) (set 1)", + "sc5potoga", "Pot Of Gold (QPS) (Scorpion 5) (set 2)", + "sc5potogb", "Pot Of Gold (QPS) (Scorpion 5) (set 3)", + "sc5potogc", "Pot Of Gold (QPS) (Scorpion 5) (set 4)", + "sc5potogd", "Pot Of Gold (QPS) (Scorpion 5) (set 5)", + "sc5potoge", "Pot Of Gold (QPS) (Scorpion 5) (set 6)", + "sc5potogf", "Pot Of Gold (QPS) (Scorpion 5) (set 7)", + "sc5potogg", "Pot Of Gold (QPS) (Scorpion 5) (set 8)", + "sc5potogh", "Pot Of Gold (QPS) (Scorpion 5) (set 9)", + "sc5potogi", "Pot Of Gold (QPS) (Scorpion 5) (set 10)", + "sc5potp", "Pick Of The Pack (Bellfruit) (Scorpion 5) (set 1)", + "sc5potpa", "Pick Of The Pack (Bellfruit) (Scorpion 5) (set 2)", + "sc5potsm", "Pots Of Luck (Mazooma) (Scorpion 5) (set 1)", + "sc5potsma", "Pots Of Luck (Mazooma) (Scorpion 5) (set 2)", + "sc5pp", "Pink Panther (Mazooma) (Scorpion 5) (set 1)", + "sc5ppa", "Pink Panther (Mazooma) (Scorpion 5) (set 2)", + "sc5ppb", "Pink Panther (Mazooma) (Scorpion 5) (set 3)", + "sc5ppc", "Pink Panther (Mazooma) (Scorpion 5) (set 4)", + "sc5ppcr", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 1)", + "sc5ppcra", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 5)", + "sc5ppcrb", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 2)", + "sc5ppcrc", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 3)", + "sc5ppcrd", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 4)", + "sc5ppctc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 1)", + "sc5ppctca", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 2)", + "sc5ppctcb", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 3)", + "sc5ppctcc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 4)", + "sc5ppctcd", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 5)", + "sc5ppctce", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 6)", + "sc5ppctcf", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 7)", + "sc5ppctcg", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 8)", + "sc5ppctch", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 9)", + "sc5ppctci", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 10)", + "sc5ppd", "Pink Panther (Mazooma) (Scorpion 5) (set 5)", + "sc5ppdym", "Pink Panther Double Your Money (Mazooma / QPS) (Scorpion 5) (set 1)", + "sc5ppdyma", "Pink Panther Double Your Money (Mazooma / QPS) (Scorpion 5) (set 2)", + "sc5ppe", "Pink Panther (Mazooma) (Scorpion 5) (set 6)", + "sc5ppf", "Pink Panther (Mazooma) (Scorpion 5) (set 7)", + "sc5ppg", "Pink Panther (Mazooma) (Scorpion 5) (set 8)", + "sc5ppsag", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 1)", + "sc5ppsaga", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 2)", + "sc5ppsagb", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 3)", + "sc5ppsagc", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 4)", + "sc5ppsagd", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 5)", + "sc5ppsage", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 6)", + "sc5pwrbl", "Powerball (Bellfruit) (Scorpion 5) (set 1)", + "sc5pwrbla", "Powerball (Bellfruit) (Scorpion 5) (set 2)", + "sc5pwrpl", "Power Play (Mazooma) (Scorpion 5) (set 1)", + "sc5pwrpla", "Power Play (Mazooma) (Scorpion 5) (set 2)", + "sc5qual", "Quality Streak (Bellfruit) (Scorpion 5) (set 1)", + "sc5quala", "Quality Streak (Bellfruit) (Scorpion 5) (set 2)", + "sc5qualb", "Quality Streak (Bellfruit) (Scorpion 5) (set 3)", + "sc5qualc", "Quality Streak (Bellfruit) (Scorpion 5) (set 4)", + "sc5quald", "Quality Streak (Bellfruit) (Scorpion 5) (set 5)", + "sc5quale", "Quality Streak (Bellfruit) (Scorpion 5) (set 6)", + "sc5qualf", "Quality Streak (Bellfruit) (Scorpion 5) (set 7)", + "sc5qualg", "Quality Streak (Bellfruit) (Scorpion 5) (set 8)", + "sc5qualh", "Quality Streak (Bellfruit) (Scorpion 5) (set 9)", + "sc5quali", "Quality Streak (Bellfruit) (Scorpion 5) (set 10)", + "sc5qualj", "Quality Streak (Bellfruit) (Scorpion 5) (set 11)", + "sc5qualk", "Quality Streak (Bellfruit) (Scorpion 5) (set 12)", + "sc5quall", "Quality Streak (Bellfruit) (Scorpion 5) (set 13)", + "sc5qualm", "Quality Streak (Bellfruit) (Scorpion 5) (set 14)", + "sc5quidv", "Quid Vicious (Mazooma) (Scorpion 5) (set 1)", + "sc5quidva", "Quid Vicious (Mazooma) (Scorpion 5) (set 2)", + "sc5quidvb", "Quid Vicious (Mazooma) (Scorpion 5) (set 3)", + "sc5quidvc", "Quid Vicious (Mazooma) (Scorpion 5) (set 4)", + "sc5quidvd", "Quid Vicious (Mazooma) (Scorpion 5) (set 5)", + "sc5quidve", "Quid Vicious (Mazooma) (Scorpion 5) (set 6)", + "sc5quidvf", "Quid Vicious (Mazooma) (Scorpion 5) (set 7)", + "sc5quidvg", "Quid Vicious (Mazooma) (Scorpion 5) (set 8)", + "sc5rainb", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 1)", + "sc5rainba", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 2)", + "sc5rainbb", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 3)", + "sc5rainbc", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 4)", + "sc5rainbd", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 5)", + "sc5rainbe", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 6)", + "sc5redsq", "Red Square (Mazooma) (Scorpion 5) (set 1)", + "sc5redsqa", "Red Square (Mazooma) (Scorpion 5) (set 2)", + "sc5rhclb", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 1)", + "sc5rhclba", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 2)", + "sc5rhclbb", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 3)", + "sc5rhclbc", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 4)", + "sc5rhclbd", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 5)", + "sc5rhclbe", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 6)", + "sc5rhclbf", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 7)", + "sc5rhclbg", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 8)", + "sc5rhr", "Red Hot Reels (Qps) (Scorpion 5) (set 1)", + "sc5rhra", "Red Hot Reels (Qps) (Scorpion 5) (set 2)", + "sc5rhrb", "Red Hot Reels (Qps) (Scorpion 5) (set 3)", + "sc5rhrc", "Red Hot Reels (Qps) (Scorpion 5) (set 4)", + "sc5rhrd", "Red Hot Reels (Qps) (Scorpion 5) (set 5)", + "sc5rhre", "Red Hot Reels (Qps) (Scorpion 5) (set 6)", + "sc5rhx", "Red Hot X (Mazooma) (Scorpion 5) (set 1)", + "sc5rhxa", "Red Hot X (Mazooma) (Scorpion 5) (set 2)", + "sc5rhxb", "Red Hot X (Mazooma) (Scorpion 5) (set 3)", + "sc5rhxc", "Red Hot X (Mazooma) (Scorpion 5) (set 4)", + "sc5rhxcs", "Red Hot X Casino (Mazooma) (Scorpion 5) (set 1)", + "sc5rhxcsa", "Red Hot X Casino (Mazooma) (Scorpion 5) (set 2)", + "sc5rhxd", "Red Hot X (Mazooma) (Scorpion 5) (set 5)", + "sc5rhxe", "Red Hot X (Mazooma) (Scorpion 5) (set 6)", + "sc5rhxf", "Red Hot X (Mazooma) (Scorpion 5) (set 7)", + "sc5rosts", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 1)", + "sc5rostsa", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 2)", + "sc5rostsb", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 3)", + "sc5rostsc", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 4)", + "sc5rostsd", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 5)", + "sc5rostse", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 6)", + "sc5rovrt", "Rovers Return (Mazooma) (Scorpion 5) (set 1)", + "sc5rovrta", "Rovers Return (Mazooma) (Scorpion 5) (set 2)", + "sc5rovrtb", "Rovers Return (Mazooma) (Scorpion 5) (set 3)", + "sc5rovrtc", "Rovers Return (Mazooma) (Scorpion 5) (set 4)", + "sc5rssh", "Reel Spin Shady (Mazooma) (Scorpion 5) (set 1)", + "sc5rssha", "Reel Spin Shady (Mazooma) (Scorpion 5) (set 2)", + "sc5sbull", "Super Bullseye (Bellfruit) (Scorpion 5) (set 1)", + "sc5sbulla", "Super Bullseye (Bellfruit) (Scorpion 5) (set 2)", + "sc5sfts", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 1)", + "sc5sftsa", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 2)", + "sc5sftsb", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 3)", + "sc5sftsc", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 4)", + "sc5sharp", "Sharp Shooter (Voodoo) (Scorpion 5) (set 1)", + "sc5sharpa", "Sharp Shooter (Voodoo) (Scorpion 5) (set 2)", + "sc5showt", "Showtime (Bellfruit) (Scorpion 5) (set 1)", + "sc5showta", "Showtime (Bellfruit) (Scorpion 5) (set 2)", + "sc5showtb", "Showtime (Bellfruit) (Scorpion 5) (set 3)", + "sc5showtc", "Showtime (Bellfruit) (Scorpion 5) (set 4)", + "sc5showtd", "Showtime (Bellfruit) (Scorpion 5) (set 5)", + "sc5showte", "Showtime (Bellfruit) (Scorpion 5) (set 6)", + "sc5showtf", "Showtime (Bellfruit) (Scorpion 5) (set 7)", + "sc5showtg", "Showtime (Bellfruit) (Scorpion 5) (set 8)", + "sc5showth", "Showtime (Bellfruit) (Scorpion 5) (set 9)", + "sc5showti", "Showtime (Bellfruit) (Scorpion 5) (set 10)", + "sc5showtj", "Showtime (Bellfruit) (Scorpion 5) (set 11)", + "sc5showtk", "Showtime (Bellfruit) (Scorpion 5) (set 12)", + "sc5showtl", "Showtime (Bellfruit) (Scorpion 5) (set 13)", + "sc5showtm", "Showtime (Bellfruit) (Scorpion 5) (set 14)", + "sc5showtn", "Showtime (Bellfruit) (Scorpion 5) (set 15)", + "sc5showto", "Showtime (Bellfruit) (Scorpion 5) (set 16)", + "sc5showtp", "Showtime (Bellfruit) (Scorpion 5) (set 17)", + "sc5showtq", "Showtime (Bellfruit) (Scorpion 5) (set 18)", + "sc5showtr", "Showtime (Bellfruit) (Scorpion 5) (set 19)", + "sc5showts", "Showtime (Bellfruit) (Scorpion 5) (set 20)", + "sc5sitwi", "Spin It To Win It (Bellfruit) (Scorpion 5) (set 1)", + "sc5sitwia", "Spin It To Win It (Bellfruit) (Scorpion 5) (set 2)", + "sc5slad", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 1)", + "sc5slada", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 2)", + "sc5sladb", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 3)", + "sc5sladc", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 4)", + "sc5sladd", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 5)", + "sc5slade", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 6)", + "sc5sladf", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 7)", + "sc5sladg", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 8)", + "sc5sleut", "Super Sleuth (Mazooma) (Scorpion 5) (set 1)", + "sc5sleuta", "Super Sleuth (Mazooma) (Scorpion 5) (set 2)", + "sc5smtm", "Show Me The Money (Mazooma) (Scorpion 5) (set 1)", + "sc5smtma", "Show Me The Money (Mazooma) (Scorpion 5) (set 2)", + "sc5spice", "Spice It Up (Bellfruit) (Scorpion 5) (set 1)", + "sc5spicea", "Spice It Up (Bellfruit) (Scorpion 5) (set 3)", + "sc5spiceb", "Spice It Up (Bellfruit) (Scorpion 5) (set 2)", + "sc5spicec", "Spice It Up (Bellfruit) (Scorpion 5) (set 4)", + "sc5spiced", "Spice It Up (Bellfruit) (Scorpion 5) (set 5)", + "sc5spicee", "Spice It Up (Bellfruit) (Scorpion 5) (set 6)", + "sc5spnrn", "Spinning Around (Mazooma) (Scorpion 5) (set 1)", + "sc5spnrna", "Spinning Around (Mazooma) (Scorpion 5) (set 2)", + "sc5srace", "Streak Racer (Bellfruit) (Scorpion 5) (set 1)", + "sc5sracea", "Streak Racer (Bellfruit) (Scorpion 5) (set 2)", + "sc5srrcl", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 1)", + "sc5srrcla", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 2)", + "sc5srrclb", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 3)", + "sc5srrclc", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 4)", + "sc5srrqp", "Snake Rattle & Roll (Qps) (Scorpion 5) (set 1)", + "sc5srrqpa", "Snake Rattle & Roll (Qps) (Scorpion 5) (set 2)", + "sc5sumit", "Summit Up (Qps) (Scorpion 5) (set 1)", + "sc5sumita", "Summit Up (Qps) (Scorpion 5) (set 2)", + "sc5sus", "Suits U Sir (Qps) (Scorpion 5) (set 1)", + "sc5susa", "Suits U Sir (Qps) (Scorpion 5) (set 2)", + "sc5susb", "Suits U Sir (Qps) (Scorpion 5) (set 3)", + "sc5susc", "Suits U Sir (Qps) (Scorpion 5) (set 4)", + "sc5swbak", "Switch Back (Mazooma) (Scorpion 5) (set 1)", + "sc5swbaka", "Switch Back (Mazooma) (Scorpion 5) (set 2)", + "sc5swywm", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 1)", + "sc5swywma", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 2)", + "sc5swywmb", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 3)", + "sc5swywmc", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 4)", + "sc5tbox", "Top Box (Mazooma) (Scorpion 5) (set 1)", + "sc5tboxa", "Top Box (Mazooma) (Scorpion 5) (set 2)", + "sc5tboxb", "Top Box (Mazooma) (Scorpion 5) (set 3)", + "sc5tboxc", "Top Box (Mazooma) (Scorpion 5) (set 4)", + "sc5tboxd", "Top Box (Mazooma) (Scorpion 5) (set 5)", + "sc5tboxe", "Top Box (Mazooma) (Scorpion 5) (set 6)", + "sc5tboxf", "Top Box (Mazooma) (Scorpion 5) (set 7)", + "sc5tboxg", "Top Box (Mazooma) (Scorpion 5) (set 8)", + "sc5tboxh", "Top Box (Mazooma) (Scorpion 5) (set 9)", + "sc5tboxi", "Top Box (Mazooma) (Scorpion 5) (set 10)", + "sc5tboxj", "Top Box (Mazooma) (Scorpion 5) (set 11)", + "sc5tboxk", "Top Box (Mazooma) (Scorpion 5) (set 12)", + "sc5tboxl", "Top Box (Mazooma) (Scorpion 5) (set 13)", + "sc5tboxm", "Top Box (Mazooma) (Scorpion 5) (set 14)", + "sc5tboxn", "Top Box (Mazooma) (Scorpion 5) (set 15)", + "sc5tboxo", "Top Box (Mazooma) (Scorpion 5) (set 16)", + "sc5tboxp", "Top Box (Mazooma) (Scorpion 5) (set 17)", + "sc5tboxq", "Top Box (Mazooma) (Scorpion 5) (set 18)", + "sc5tpsht", "Top Of The Shots (Mazooma) (Scorpion 5) (set 1)", + "sc5tpshta", "Top Of The Shots (Mazooma) (Scorpion 5) (set 2)", + "sc5tpshtb", "Top Of The Shots (Mazooma) (Scorpion 5) (set 3)", + "sc5tpshtc", "Top Of The Shots (Mazooma) (Scorpion 5) (set 4)", + "sc5tpshtd", "Top Of The Shots (Mazooma) (Scorpion 5) (set 5)", + "sc5trail", "Trailblazer (Mazooma) (Scorpion 5) (set 1)", + "sc5traila", "Trailblazer (Mazooma) (Scorpion 5) (set 2)", + "sc5tsmp", "Trick Shot Multi Player (Bellfruit) (Scorpion 5) (set 1)", + "sc5tsmpa", "Trick Shot Multi Player (Bellfruit) (Scorpion 5) (set 2)", + "sc5ttpie", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 1)", + "sc5ttpiea", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 2)", + "sc5ttpieb", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 3)", + "sc5ttpiec", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 4)", + "sc5ttpied", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 5)", + "sc5ttpiee", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 6)", + "sc5ttpief", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 7)", + "sc5ttpieg", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 8)", + "sc5ttpieh", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 9)", + "sc5ttpiei", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 10)", + "sc5typ", "Take Your Pick (Bellfruit) (Scorpion 5) (set 1)", + "sc5typa", "Take Your Pick (Bellfruit) (Scorpion 5) (set 2)", + "sc5typb", "Take Your Pick (Bellfruit) (Scorpion 5) (set 3)", + "sc5typc", "Take Your Pick (Bellfruit) (Scorpion 5) (set 4)", + "sc5vamp", "Vampire Payer (Qps) (Scorpion 5) (set 1)", + "sc5vampa", "Vampire Payer (Qps) (Scorpion 5) (set 2)", + "sc5viper", "Viper Active (Bellfruit) (Scorpion 5) (set 1)", + "sc5vipera", "Viper Active (Bellfruit) (Scorpion 5) (set 2)", + "sc5vivam", "Viva Mexico (Bellfruit) (Scorpion 5) (set 1)", + "sc5vivama", "Viva Mexico (Bellfruit) (Scorpion 5) (set 2)", + "sc5viz", "Viz (Qps) (Scorpion 5) (set 1)", + "sc5viza", "Viz (Qps) (Scorpion 5) (set 2)", + "sc5vizb", "Viz (Qps) (Scorpion 5) (set 3)", + "sc5vizc", "Viz (Qps) (Scorpion 5) (set 4)", + "sc5wacky", "Wacky Racers (Bellfruit) (Scorpion 5) (set 1)", + "sc5wackya", "Wacky Racers (Bellfruit) (Scorpion 5) (set 2)", + "sc5wackyb", "Wacky Racers (Bellfruit) (Scorpion 5) (set 3)", + "sc5wackyc", "Wacky Racers (Bellfruit) (Scorpion 5) (set 4)", + "sc5wca", "Win Can Alley (Qps) (Scorpion 5) (set 1)", + "sc5wcaa", "Win Can Alley (Qps) (Scorpion 5) (set 2)", + "sc5wcab", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 1)", + "sc5wcac", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 1)", + "sc5wcad", "Win Can Alley (Qps) (Scorpion 5) (set 3)", + "sc5wcae", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 2)", + "sc5wcaf", "Win Can Alley (Qps) (Scorpion 5) (set 4)", + "sc5wcag", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 2)", + "sc5wcah", "Win Can Alley (Qps) (Scorpion 5) (set 5)", + "sc5wcai", "Win Can Alley (Qps) (Scorpion 5) (set 6)", + "sc5wcaj", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 3)", + "sc5wcak", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 3)", + "sc5wcal", "Win Can Alley (Qps) (Scorpion 5) (set 7)", + "sc5wcam", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 4)", + "sc5wcan", "Win Can Alley (Qps) (Scorpion 5) (set 8)", + "sc5wcao", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 4)", + "sc5wild", "Wild Reels (Mazooma) (Scorpion 5) (set 1)", + "sc5wilda", "Wild Reels (Mazooma) (Scorpion 5) (set 2)", + "sc5wldjk", "Wild Jackpots (Mazooma) (Scorpion 5) (set 1)", + "sc5wldjka", "Wild Jackpots (Mazooma) (Scorpion 5) (set 2)", + "sc5wok", "Wok n' Roll (Bellfruit) (Scorpion 5) (set 1)", + "sc5woka", "Wok n' Roll (Bellfruit) (Scorpion 5) (set 2)", + "sc5wotw", "War Of The Wads (Mazooma) (Scorpion 5) (set 1)", + "sc5wotwa", "War Of The Wads (Mazooma) (Scorpion 5) (set 2)", + "sc_14", "Safe Cracker (1.4)", + "sc_17", "Safe Cracker (1.7)", + "sc_17n", "Safe Cracker (1.7N)", + "sc_18", "Safe Cracker (1.8)", + "sc_18n", "Safe Cracker (1.8N)", + "sc_18s2", "Safe Cracker (1.8 alternate sound)", + "scandal", "Scandal Mahjong (Japan 890213)", + "scandalm", "Scandal Mahjong [BET] (Japan 890217)", + "scessjoe", "Success Joe (World)", + "scfinals", "Super Cup Finals (Ver 2.2O 1994/01/13)", + "scfinalso", "Super Cup Finals (Ver 2.1O 1993/11/19)", + "scg06nt", "Sega Club Golf 2006 Next Tours (Rev A) (GDX-0018A)", + "schamp", "Sonic Championship (USA)", + "schaser", "Space Chaser (set 1)", + "schasera", "Space Chaser (set 2)", + "schaserb", "Space Chaser (set 3)", + "schaserc", "Space Chaser (set 4)", + "schasercv", "Space Chaser (CV version - set 1)", + "scherrym", "Super Cherry Master", + "schery97", "Skill Cherry '97 (ver. sc3.52)", + "schery97a", "Skill Cherry '97 (ver. sc3.52c4)", + "schmeisr", "Schmeiser Robo (Japan)", + "sci", "Special Criminal Investigation (World set 1)", + "scia", "Special Criminal Investigation (World set 2)", + "scij", "Special Criminal Investigation (Japan)", + "scin", "Super Special Criminal Investigation (Negro Torino hack)", + "scion", "Scion", + "scionc", "Scion (Cinematronics)", + "sciu", "Special Criminal Investigation (US)", + "scobra", "Super Cobra", + "scobrab", "Super Cobra (bootleg)", + "scobras", "Super Cobra (Stern Electronics)", + "scobrase", "Super Cobra (Sega)", + "scontra", "Super Contra", + "scontraj", "Super Contra (Japan)", + "scorpion", "Scorpion (set 1)", + "scorpiona", "Scorpion (set 2)", + "scorpionb", "Scorpion (set 3)", + "scorpionmc", "Scorpion (Moon Cresta hardware)", + "scotrsht", "Scooter Shooter", + "scptour", "Smash Court Pro Tournament (SCP1)", + "scrabble", "Scrabble (rev. F)", + "scrabbled", "Scrabble (rev. F) (Protocol)", + "scram_tp", "Scramble (Pinball)", + "scramb2", "Scramble (bootleg)", + "scramblb", "Scramble (bootleg on Galaxian hardware)", + "scramble", "Scramble", + "scramblebb", "Scramble (bootleg?)", + "scramblebf", "Scramble (Karateko, French bootleg)", + "scrambler", "Scramble (Reben S.A. Spanish bootleg)", + "scrambles", "Scramble (Stern Electronics set 1)", + "scrambles2", "Scramble (Stern Electronics set 2)", + "scrambp", "Impacto (Billport S.A., Spanish bootleg of Scramble)", + "scrampt", "Scramble (Petaco S.A., Spanish bootleg)", + "scramrf", "Scramble (Recreativos Franco, Spanish bootleg)", + "screenp1", "Screen Play (Maygay, MV1 Video, ver. 1.9, set 1)", + "screenp1a", "Screen Play (Maygay, MV1 Video, ver. 1.9, set 2)", + "screenp2", "Screen Play (Maygay, MV1 Video, ver. 1.9, Isle of Man, set 1)", + "screenp2a", "Screen Play (Maygay, MV1 Video, ver. 1.9, Isle of Man, set 2)", + "screenp3", "Screen Play (Maygay, MV1 Video, SA5-082)", + "screenp3a", "Screen Play (Maygay, MV1 Video, SA5-083)", + "screenp4", "Screen Play (Maygay, MV1 Video, ver. ?.?)", + "screenpl", "Screen Play (Maygay, MV1 Video, ver. 4.0)", + "scregg", "Scrambled Egg", + "screwloo", "Screw Loose (prototype)", + "scross", "Stadium Cross (World)", + "scrossu", "Stadium Cross (US)", + "scrpn_l1", "Scorpion (L-1)", + "scrpn_t1", "Scorpion (T-1)", + "scud", "Scud Race Twin (Australia)", + "scuda", "Scud Race Twin (Export)", + "scudhamm", "Scud Hammer", + "scudj", "Scud Race Deluxe (Japan)", + "scudplus", "Scud Race Plus (Revision A)", + "scudplusa", "Scud Race Plus", + "sddz", "Super Dou Di Zhu", + "sderby", "Super Derby (v.07.03)", + "sderbya", "Super Derby (v.10.04)", + "sdfight", "SD Fighters (Korea)", + "sdgndmps", "SD Gundam Psycho Salamander no Kyoui", + "sdi", "SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027)", + "sdib", "SDI - Strategic Defense Initiative (System 16B, FD1089A 317-0028)", + "sdibl", "SDI - Strategic Defense Initiative (bootleg)", + "sdmg2", "Mahjong Super Da Man Guan II (China, V754C)", + "sdodgeb", "Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu", + "sdtennis", "Super Doubles Tennis", + "sdungeon", "Space Dungeon", + "sdwx", "Sheng Dan Wu Xian", + "seabass", "Sea Bass Fishing (JUET 971110 V0.001)", + "seabattl", "Sea Battle (set 1)", + "seabattla", "Sea Battle (set 2)", + "searchar", "SAR - Search And Rescue (World)", + "searcharj", "SAR - Search And Rescue (Japan)", + "searcharu", "SAR - Search And Rescue (US)", + "searchey", "Search Eye", + "searchp2", "Search Eye Plus V2.0", + "searthie", "Super Earth Invasion (set 3)", + "searthin", "Super Earth Invasion (set 1)", + "searthina", "Super Earth Invasion (set 2)", + "seawitch", "Seawitch", + "seawld", "Sea World (Version 1.6E Dual)", + "seawldd1", "Sea World (Version 1.6R CGA)", + "seawolf", "Sea Wolf (set 1)", + "seawolf2", "Sea Wolf II", + "seawolfo", "Sea Wolf (set 2)", + "secolove", "Second Love (Japan 861201)", + "secondch", "Second Chance", + "secretab", "Secret Agent (bootleg)", + "secretag", "Secret Agent (World)", + "sectionz", "Section Z (set 1)", + "sectionza", "Section Z (set 2)", + "sectrzon", "Sector Zone", + "segajw", "Golden Poker Series "Joker's Wild" (Rev. B)", + "seganinj", "Sega Ninja (315-5102)", + "seganinju", "Sega Ninja (not encrypted)", + "segawski", "Sega Water Ski (Japan, Revision A)", + "seicross", "Seicross", + "seiha", "Seiha (Japan 870725)", + "seiham", "Seiha [BET] (Japan 870723)", + "selfeena", "Sel Feena", + "seljan2", "Return Of Sel Jan II (Japan, NM557)", + "semibase", "MuHanSeungBu (SemiCom Baseball) (Korea)", + "sengekis", "Sengeki Striker (Asia)", + "sengekisj", "Sengeki Striker (Japan)", + "sengokmj", "Sengoku Mahjong [BET] (Japan)", + "sengoku", "Sengoku / Sengoku Denshou (NGM-017)(NGH-017)", + "sengoku2", "Sengoku 2 / Sengoku Denshou 2", + "sengoku3", "Sengoku 3 / Sengoku Densho 2001", + "sengokuh", "Sengoku / Sengoku Denshou (NGH-017)(US)", + "senjyo", "Senjyo", + "senknow", "Sen-Know (Japan)", + "senko", "Senko No Ronde (Rev A) (GDL-0030A)", + "senkoo", "Senko No Ronde (GDL-0030)", + "senkosp", "Senko No Ronde Special (GDL-0038)", + "senkyu", "Senkyu (Japan set 1)", + "senkyua", "Senkyu (Japan set 2)", + "sentetst", "Sente Diagnostic Cartridge", + "setaroul", "Visco Roulette", + "sexappl", "Sex Appeal (Version 6.02)", + "sextriv", "Sex Triv", + "sextriv1", "Sexual Trivia (Version 1.02SB, set 1)", + "sextriv2", "Sexual Trivia (Version 1.02SB, set 2)", + "sexyboom", "Sexy Boom", + "sexygal", "Sexy Gal (Japan 850501 SXG 1-00)", + "sexyparo", "Sexy Parodius (ver JAA)", + "sexyparoa", "Sexy Parodius (ver AAA)", + "sf", "Street Fighter (World, Analog buttons)", + "sf2", "Street Fighter II: The World Warrior (World 910522)", + "sf2049", "San Francisco Rush 2049", + "sf2049se", "San Francisco Rush 2049: Special Edition", + "sf2049te", "San Francisco Rush 2049: Tournament Edition", + "sf2acc", "Street Fighter II': Champion Edition (Accelerator!, bootleg, set 1)", + "sf2acca", "Street Fighter II': Champion Edition (Accelerator!, bootleg, set 2)", + "sf2accp2", "Street Fighter II': Champion Edition (Accelerator Pt.II, bootleg)", + "sf2amf", "Street Fighter II': Champion Edition (Alpha Magic-F, bootleg)", + "sf2amf2", "Street Fighter II': Champion Edition (L735 Test Rom, bootleg)", + "sf2bhh", "Street Fighter II': Champion Edition (Hung Hsi, bootleg)", + "sf2ce", "Street Fighter II': Champion Edition (World 920513)", + "sf2ceblp", "Street Fighter II': Champion Edition (protected bootleg on non-dash board)", + "sf2ceea", "Street Fighter II': Champion Edition (World 920313)", + "sf2ceja", "Street Fighter II': Champion Edition (Japan 920322)", + "sf2cejb", "Street Fighter II': Champion Edition (Japan 920513)", + "sf2cejc", "Street Fighter II': Champion Edition (Japan 920803)", + "sf2ceua", "Street Fighter II': Champion Edition (USA 920313)", + "sf2ceub", "Street Fighter II': Champion Edition (USA 920513)", + "sf2ceuc", "Street Fighter II': Champion Edition (USA 920803)", + "sf2dkot2", "Street Fighter II': Champion Edition (Double K.O. Turbo II, bootleg)", + "sf2dongb", "Street Fighter II': Champion Edition (Dongfang Bubai protection, bootleg)", + "sf2eb", "Street Fighter II: The World Warrior (World 910214)", + "sf2ebbl", "Street Fighter II: The World Warrior (TAB Austria, bootleg, set 1)", + "sf2ed", "Street Fighter II: The World Warrior (World 910318)", + "sf2ee", "Street Fighter II: The World Warrior (World 910228)", + "sf2hf", "Street Fighter II': Hyper Fighting (World 921209)", + "sf2hfj", "Street Fighter II' Turbo: Hyper Fighting (Japan 921209)", + "sf2hfu", "Street Fighter II': Hyper Fighting (USA 921209)", + "sf2j", "Street Fighter II: The World Warrior (Japan 911210)", + "sf2ja", "Street Fighter II: The World Warrior (Japan 910214)", + "sf2jc", "Street Fighter II: The World Warrior (Japan 910306)", + "sf2jf", "Street Fighter II: The World Warrior (Japan 910411)", + "sf2jh", "Street Fighter II: The World Warrior (Japan 910522)", + "sf2jl", "Street Fighter II: The World Warrior (Japan 920312)", + "sf2koryu", "Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg)", + "sf2m1", "Street Fighter II': Champion Edition (M1, bootleg)", + "sf2m2", "Street Fighter II': Champion Edition (M2, bootleg)", + "sf2m3", "Street Fighter II': Champion Edition (M3, bootleg)", + "sf2m4", "Street Fighter II': Champion Edition (M4, bootleg)", + "sf2m5", "Street Fighter II': Champion Edition (M5, bootleg)", + "sf2m6", "Street Fighter II': Champion Edition (M6, bootleg)", + "sf2m7", "Street Fighter II': Champion Edition (M7, bootleg)", + "sf2m8", "Street Fighter II': Champion Edition (M8, bootleg)", + "sf2mdt", "Street Fighter II': Magic Delta Turbo (bootleg, set 1)", + "sf2mdta", "Street Fighter II': Magic Delta Turbo (bootleg, set 2)", + "sf2mdtb", "Street Fighter II': Magic Delta Turbo (bootleg, set 3)", + "sf2qp1", "Street Fighter II: The World Warrior (Quicken Pt-I, bootleg)", + "sf2rb", "Street Fighter II': Champion Edition (Rainbow, bootleg, set 1)", + "sf2rb2", "Street Fighter II': Champion Edition (Rainbow, bootleg, set 2)", + "sf2rb3", "Street Fighter II': Champion Edition (Rainbow, bootleg, set 3)", + "sf2red", "Street Fighter II': Champion Edition (Red Wave, bootleg)", + "sf2rk", "Street Fighter II: The World Warrior (RK, bootleg)", + "sf2stt", "Street Fighter II: The World Warrior (TAB Austria, bootleg, set 2)", + "sf2thndr", "Street Fighter II: The World Warrior (Thunder Edition, bootleg)", + "sf2ua", "Street Fighter II: The World Warrior (USA 910206)", + "sf2ub", "Street Fighter II: The World Warrior (USA 910214)", + "sf2uc", "Street Fighter II: The World Warrior (USA 910306)", + "sf2ud", "Street Fighter II: The World Warrior (USA 910318)", + "sf2ue", "Street Fighter II: The World Warrior (USA 910228)", + "sf2uf", "Street Fighter II: The World Warrior (USA 910411)", + "sf2ug", "Street Fighter II: The World Warrior (USA 910522, Rev. G)", + "sf2ui", "Street Fighter II: The World Warrior (USA 910522, Rev. I)", + "sf2uk", "Street Fighter II: The World Warrior (USA 911101)", + "sf2v004", "Street Fighter II': Champion Edition (V004, bootleg)", + "sf2yyc", "Street Fighter II': Champion Edition (YYC, bootleg)", + "sf_l1", "Slugfest (L-1)", + "sfa", "Street Fighter Alpha: Warriors' Dreams (Euro 950727)", + "sfa2", "Street Fighter Alpha 2 (Euro 960229)", + "sfa2u", "Street Fighter Alpha 2 (USA 960430)", + "sfa2ur1", "Street Fighter Alpha 2 (USA 960306)", + "sfa3", "Street Fighter Alpha 3 (Euro 980904)", + "sfa3b", "Street Fighter Alpha 3 (Brazil 980629)", + "sfa3h", "Street Fighter Alpha 3 (Hispanic 980904)", + "sfa3hr1", "Street Fighter Alpha 3 (Hispanic 980629)", + "sfa3u", "Street Fighter Alpha 3 (USA 980904)", + "sfa3ud", "Street Fighter Alpha 3 (USA 980904 Phoenix Edition) (bootleg)", + "sfa3ur1", "Street Fighter Alpha 3 (USA 980629)", + "sfad", "Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg)", + "sfar1", "Street Fighter Alpha: Warriors' Dreams (Euro 950718)", + "sfar2", "Street Fighter Alpha: Warriors' Dreams (Euro 950627)", + "sfar3", "Street Fighter Alpha: Warriors' Dreams (Euro 950605)", + "sfau", "Street Fighter Alpha: Warriors' Dreams (USA 950627)", + "sfbonus", "Skill Fruit Bonus (Version 1.9R, set 1)", + "sfbonusd1", "Skill Fruit Bonus (Version 1.9R, set 2)", + "sfbonuso", "Skill Fruit Bonus (Version 1.7)", + "sfbonuso2", "Skill Fruit Bonus (Version 1.6)", + "sfbonusv1", "Skill Fruit Bonus (Version 1.9R Dual)", + "sfcbox", "Super Famicom Box BIOS", + "sfchamp", "Super Football Champ (Ver 2.5O)", + "sfchampj", "Super Football Champ (Ver 2.4J)", + "sfchampo", "Super Football Champ (Ver 2.4O)", + "sfchampu", "Super Football Champ (Ver 2.4A)", + "sfex", "Street Fighter EX (Euro 961219)", + "sfex2", "Street Fighter EX2 (USA 980526)", + "sfex2a", "Street Fighter EX2 (Asia 980312)", + "sfex2h", "Street Fighter EX2 (Hispanic 980312)", + "sfex2j", "Street Fighter EX2 (Japan 980312)", + "sfex2p", "Street Fighter EX2 Plus (USA 990611)", + "sfex2pa", "Street Fighter EX2 Plus (Asia 990611)", + "sfex2ph", "Street Fighter EX2 Plus (Hispanic 990611)", + "sfex2pj", "Street Fighter EX2 Plus (Japan 990611)", + "sfexa", "Street Fighter EX (Asia 961219)", + "sfexj", "Street Fighter EX (Japan 961130)", + "sfexp", "Street Fighter EX Plus (USA 970407)", + "sfexpj", "Street Fighter EX Plus (Japan 970407)", + "sfexpj1", "Street Fighter EX Plus (Japan 970311)", + "sfexpu1", "Street Fighter EX Plus (USA 970311)", + "sfexu", "Street Fighter EX (USA 961219)", + "sfight", "Sonic the Fighters (Japan)", + "sfight2", "Street Fighter II", + "sfight2a", "Street Fighter II (rev.1)", + "sfight2b", "Street Fighter II (rev.2)", + "sfiii", "Street Fighter III: New Generation (Euro 970204)", + "sfiii2", "Street Fighter III 2nd Impact: Giant Attack (USA 970930)", + "sfiii2j", "Street Fighter III 2nd Impact: Giant Attack (Japan 970930)", + "sfiii2n", "Street Fighter III 2nd Impact: Giant Attack (Asia 970930, NO CD)", + "sfiii3", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990608)", + "sfiii3n", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990608, NO CD)", + "sfiii3nr1", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990512, NO CD)", + "sfiii3r1", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990512)", + "sfiii3u", "Street Fighter III 3rd Strike: Fight for the Future (USA 990608)", + "sfiii3ur1", "Street Fighter III 3rd Strike: Fight for the Future (USA 990512)", + "sfiiia", "Street Fighter III: New Generation (Asia 970204)", + "sfiiih", "Street Fighter III: New Generation (Hispanic 970204)", + "sfiiij", "Street Fighter III: New Generation (Japan 970204)", + "sfiiin", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 1)", + "sfiiina", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 2)", + "sfiiiu", "Street Fighter III: New Generation (USA 970204)", + "sfish2", "Sport Fishing 2 (UET 951106 V1.10e)", + "sfish2j", "Sport Fishing 2 (J 951201 V1.100)", + "sfj", "Street Fighter (Japan) (protected)", + "sfkick", "Super Free Kick (set 1)", + "sfkicka", "Super Free Kick (set 2)", + "sflush", "Straight Flush", + "sfootbal", "Street Football (11/12/86)", + "sformula", "Super Formula (Japan)", + "sfp", "Street Fighter (prototype)", + "sfposeid", "Sea Fighter Poseidon", + "sfruitb", "Super Fruit Bonus (Version 2.5E Dual)", + "sfruitbb1", "Super Fruit Bonus (Version 2.5R, set 1)", + "sfruitbb2", "Super Fruit Bonus (Version 2.0LT, set 1)", + "sfruitbbh", "Super Fruit Bonus (Version 2.2B, set 1)", + "sfruitbd1", "Super Fruit Bonus (Version 2.5R, set 2)", + "sfruitbd2", "Super Fruit Bonus (Version 2.0LT, set 2)", + "sfruitbdh", "Super Fruit Bonus (Version 2.2B, set 2)", + "sfruitbh", "Super Fruit Bonus (Version 2.2EB Dual)", + "sfruitbo", "Super Fruit Bonus (Version 2.0)", + "sfruitbo2", "Super Fruit Bonus (Version 1.80XT)", + "sfruitboh", "Super Fruit Bonus (Version 2.0B)", + "sfruitbv1", "Super Fruit Bonus (Version 2.5R Dual)", + "sfruitbv2", "Super Fruit Bonus (Version 2.0LT Dual)", + "sfruitbvh", "Super Fruit Bonus (Version 2.2B Dual)", + "sfrush", "San Francisco Rush", + "sfrushrk", "San Francisco Rush: The Rock", + "sftm", "Street Fighter: The Movie (v1.12)", + "sftm110", "Street Fighter: The Movie (v1.10)", + "sftm111", "Street Fighter: The Movie (v1.11)", + "sftmj", "Street Fighter: The Movie (v1.12N, Japan)", + "sfu", "Street Fighter (US, set 1)", + "sfua", "Street Fighter (US, set 2) (protected)", + "sfx", "SF-X", + "sfz2a", "Street Fighter Zero 2 (Asia 960227)", + "sfz2ad", "Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg)", + "sfz2al", "Street Fighter Zero 2 Alpha (Asia 960826)", + "sfz2alb", "Street Fighter Zero 2 Alpha (Brazil 960813)", + "sfz2ald", "Street Fighter Zero 2 Alpha (Asia 960826 Phoenix Edition) (bootleg)", + "sfz2alh", "Street Fighter Zero 2 Alpha (Hispanic 960813)", + "sfz2alj", "Street Fighter Zero 2 Alpha (Japan 960805)", + "sfz2b", "Street Fighter Zero 2 (Brazil 960531)", + "sfz2br1", "Street Fighter Zero 2 (Brazil 960304)", + "sfz2h", "Street Fighter Zero 2 (Hispanic 960304)", + "sfz2j", "Street Fighter Zero 2 (Japan 960430)", + "sfz2jd", "Street Fighter Zero 2 (Japan 960227 Phoenix Edition) (bootleg)", + "sfz2jr1", "Street Fighter Zero 2 (Japan 960227)", + "sfz2n", "Street Fighter Zero 2 (Oceania 960229)", + "sfz3a", "Street Fighter Zero 3 (Asia 980904)", + "sfz3ar1", "Street Fighter Zero 3 (Asia 980701)", + "sfz3j", "Street Fighter Zero 3 (Japan 980904)", + "sfz3jr1", "Street Fighter Zero 3 (Japan 980727)", + "sfz3jr2", "Street Fighter Zero 3 (Japan 980629)", + "sfz3jr2d", "Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg)", + "sfz3ugd", "Street Fighter Zero 3 Upper (GDL-0002)", + "sfza", "Street Fighter Zero (Asia 950627)", + "sfzar1", "Street Fighter Zero (Asia 950605)", + "sfzb", "Street Fighter Zero (Brazil 951109)", + "sfzbr1", "Street Fighter Zero (Brazil 950727)", + "sfzh", "Street Fighter Zero (Hispanic 950718)", + "sfzhr1", "Street Fighter Zero (Hispanic 950627)", + "sfzj", "Street Fighter Zero (Japan 950727)", + "sfzjr1", "Street Fighter Zero (Japan 950627)", + "sfzjr2", "Street Fighter Zero (Japan 950605)", + "sgemf", "Super Gem Fighter Mini Mix (USA 970904)", + "sgemfa", "Super Gem Fighter: Mini Mix (Asia 970904)", + "sgemfd", "Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg)", + "sgemfh", "Super Gem Fighter: Mini Mix (Hispanic 970904)", + "sgladiat", "Gladiator 1984", + "sgmast", "Super Masters Golf (World?, Floppy Based, FD1094 317-0058-05d?)", + "sgmastc", "Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c)", + "sgmastj", "Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b)", + "sgmt1", "Super Game Mega Type 1", + "sgnascar", "NASCAR Racing", + "sgsafari", "Super Gran Safari (ver 3.11)", + "sgt24h", "Super GT 24h", + "sgtetris", "Sega Tetris", + "sgunner", "Steel Gunner (Rev B)", + "sgunner2", "Steel Gunner 2 (US)", + "sgunner2j", "Steel Gunner 2 (Japan, Rev A)", + "sgunnerj", "Steel Gunner (Japan)", + "sgyxz", "Warriors of Fate ('sgyxz' bootleg)", + "shabdama", "LD Mahjong #4 Shabon-Dama", + "shackled", "Shackled (US)", + "shadfgtr", "Shadow Fighters", + "shadfrce", "Shadow Force (US Version 2)", + "shadfrcej", "Shadow Force (Japan Version 3)", + "shadfrcejv2", "Shadow Force (Japan Version 2)", + "shadowld", "Shadowland (YD3)", + "shadoww", "Shadow Warriors (World, set 1)", + "shadowwa", "Shadow Warriors (World, set 2)", + "shaktamb", "Shakatto Tambourine Cho Powerup Chu 2K1 AUT (GDS-0016)", + "shaktmsp", "Shakatto Tambourine 2K1 SPR (GDS-0013)", + "shangha2", "Shanghai II (Japan, set 1)", + "shangha2a", "Shanghai II (Japan, set 2)", + "shangha3", "Shanghai III (World)", + "shangha3j", "Shanghai III (Japan)", + "shangha3u", "Shanghai III (US)", + "shanghai", "Shanghai (World)", + "shanghaij", "Shanghai (Japan)", + "shanghss", "Shanghai Shoryu Sairin (V2.03J)", + "shangkid", "Shanghai Kid", + "shangon", "Super Hang-On (sitdown/upright, unprotected)", + "shangon1", "Super Hang-On (mini ride-on?, FD1089B 317-0034)", + "shangon2", "Super Hang-On (mini ride-on, Rev A, FD1089B 317-0034)", + "shangon3", "Super Hang-On (sitdown/upright, FD1089B 317-0034)", + "shangonle", "Limited Edition Hang-On", + "shangonrb", "Super Hang-On (bootleg)", + "shangonro", "Super Hang-On (ride-on, Japan, FD1094 317-0038)", + "shangril", "Dengen Tenshi Taisen Janshi Shangri-la (JPN, USA, EXP, KOR, AUS)", + "shangtou", "Shanghai Sangokuhai Tougi (Ver 2.01J)", + "shanhigw", "Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)", + "shaolinb", "Shao-lin's Road (set 2)", + "shaolins", "Shao-lin's Road (set 1)", + "shaqattq", "Shaq Attaq (rev.5)", + "shaqattq2", "Shaq Attaq (rev.2)", + "shark", "Shark", + "sharkatt", "Shark Attack", + "sharkjaw", "Shark JAWS [TTL]", + "sharkpy", "Shark Party (Italy, v1.3)", + "sharkpya", "Shark Party (Italy, v1.6)", + "sharkpye", "Shark Party (English, Alpha license)", + "sharkt", "Shark (Taito)", + "sharrier", "Space Harrier (Rev A, 8751 315-5163A)", + "sharrier1", "Space Harrier (8751 315-5163)", + "shdancbl", "Shadow Dancer (bootleg)", + "shdancer", "Shadow Dancer (World)", + "shdancer1", "Shadow Dancer (US)", + "shdancerj", "Shadow Dancer (Japan)", + "sheriff", "Sheriff", + "shfin_l1", "Shuffle Inn (Shuffle) (L-1)", + "shienryu", "Shienryu (JUET 961226 V1.000)", + "shikgam2", "Shikigami No Shiro II / The Castle of Shikigami II (GDL-0021)", + "shikiga3", "Shikigami no Shiro III (v2.06J)", + "shikigam", "Shikigami no Shiro (V2.03J)", + "shimpact", "Super High Impact (rev LA1 09/30/91)", + "shimpactp4", "Super High Impact (prototype, rev 4.0 09/10/91)", + "shimpactp5", "Super High Impact (prototype, rev 5.0 09/15/91)", + "shimpactp6", "Super High Impact (prototype, rev 6.0 09/23/91)", + "shinfz", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", + "shinobi", "Shinobi (set 6, System 16A, unprotected)", + "shinobi1", "Shinobi (set 1, System 16A, FD1094 317-0050)", + "shinobi2", "Shinobi (set 2, System 16B, FD1094 317-0049)", + "shinobi3", "Shinobi (set 3, System 16B, MC-8123B 317-0054)", + "shinobi4", "Shinobi (set 4, System 16B, MC-8123B 317-0054)", + "shinobi5", "Shinobi (set 5, System 16B, unprotected)", + "shinoblb", "Shinobi (Beta bootleg)", + "shinobld", "Shinobi (Datsu bootleg)", + "shinobls", "Shinobi (Star bootleg, System 16A)", + "shippumd", "Shippu Mahou Daisakusen (Japan)", + "shiryu2", "Strider Hiryu 2 (Japan 991213)", + "shisen", "Shisensho - Joshiryo-Hen (Japan)", + "shisen2", "Shisensho II", + "shngmtkb", "Shanghai Matekibuyuu", + "shock", "Shock", + "shocking", "Shocking", + "shockingk", "Shocking (Korea)", + "shocktr2", "Shock Troopers - 2nd Squad", + "shocktro", "Shock Troopers (set 1)", + "shocktroa", "Shock Troopers (set 2)", + "shogwarr", "Shogun Warriors (World)", + "shogwarru", "Shogun Warriors (US)", + "shollow", "Satan's Hollow (set 1)", + "shollow2", "Satan's Hollow (set 2)", + "shootbul", "Shoot the Bull", + "shootgal", "Shooting Gallery", + "shootopl", "Shootout Pool", + "shootout", "Shoot Out (US)", + "shootoutb", "Shoot Out (Korean Bootleg)", + "shootoutj", "Shoot Out (Japan)", + "shootpl", "Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP)", + "shootplm", "Shootout Pool Medal", + "shougi", "Shougi", + "shougi2", "Shougi 2", + "showdown", "Showdown (version 5.0)", + "showhanc", "Wang Pai Dui Jue (China)", + "showhand", "Show Hand (Italy)", + "showqn", "Show Queen (Konami Endeavour)", + "shpeng", "Sea Hunter Penguin", + "shpinxii", "Sphinx II (Russia) (Atronic)", + "shrike", "Shrike Avenger (prototype)", + "shrknew", "Sharkey's Shootout (ARM7 Sound Board)", + "shrky_207", "Sharkey's Shootout (2.07)", + "shrkyfr", "Sharkey's Shootout (2.11 France)", + "shrkyfr_207", "Sharkey's Shootout (2.07 France)", + "shrkygr", "Sharkey's Shootout (2.11 Germany)", + "shrkygr_207", "Sharkey's Shootout (2.07 Germany)", + "shrkyit", "Sharkey's Shootout (2.11 Italy)", + "shrkyit_207", "Sharkey's Shootout (2.07 Italy)", + "shrkysht", "Sharkey's Shootout (2.11)", + "shtngmst", "Shooting Master (8751 315-5159)", + "shtngmste", "Shooting Master (EVG, 8751 315-5159a)", + "shtrider", "Shot Rider", + "shtridera", "Shot Rider (Sigma license)", + "shtstar", "Shooting Star", + "shtzone", "Shooting Zone System BIOS", + "shuffle", "Shuffleboard", + "shufshot", "Shuffleshot (v1.40)", + "shufshot137", "Shuffleshot (v1.37)", + "shufshot139", "Shuffleshot (v1.39)", + "shuttlei", "Shuttle Invader", + "shuuz", "Shuuz (version 8.0)", + "shuuz2", "Shuuz (version 7.1)", + "sia2650", "Super Invader Attack (bootleg of The Invaders)", + "sianniv", "Space Invaders Anniversary (V2.02J)", + "sichuan2", "Sichuan II (hack, set 1)", + "sichuan2a", "Sichuan II (hack, set 2)", + "sicv", "Space Invaders (CV Version)", + "sidampkr", "unknown Sidam Poker", + "sidearms", "Side Arms - Hyper Dyne (World)", + "sidearmsj", "Side Arms - Hyper Dyne (Japan)", + "sidearmsr", "Side Arms - Hyper Dyne (US)", + "sidebs", "Side by Side (Ver 2.7 J)", + "sidebs2", "Side by Side 2 (Ver 2.6 A)", + "sidebs2j", "Side by Side 2 Evoluzione (Ver 2.4 J)", + "sidebsja", "Side by Side (Ver 2.5 J)", + "sidepckt", "Side Pocket (World)", + "sidepcktb", "Side Pocket (bootleg)", + "sidepcktj", "Side Pocket (Japan)", + "sidetrac", "Side Trak", + "sidewndr", "Sidewinder", + "sigma2k", "Sigma Poker 2000", + "sigmapkr", "Sigma Poker", + "silentd", "Silent Dragon (World)", + "silentdj", "Silent Dragon (Japan)", + "silentdu", "Silent Dragon (US)", + "silkroad", "The Legend of Silkroad", + "silkroada", "The Legend of Silkroad (larger ROMs)", + "silkworm", "Silk Worm (World)", + "silkwormj", "Silk Worm (Japan)", + "silverga", "Silver Game", + "silvland", "Silver Land", + "silvmil", "Silver Millennium", + "silvslug", "Silver Slugger", + "simp_a20", "The Simpsons (2.0)", + "simp_a27", "The Simpsons (2.7)", + "simpbowl", "Simpsons Bowling (GQ829 UAA)", + "simpnew", "Simpsons Pinball Party, The (ARM7 Sound Board)", + "simpprtf", "Simpsons Pinball Party, The (5.00 France)", + "simpprtf_204", "Simpsons Pinball Party, The (2.04 France)", + "simpprtf_400", "Simpsons Pinball Party, The (4.00 France)", + "simpprtg", "Simpsons Pinball Party, The (5.00 Germany)", + "simpprtg_400", "Simpsons Pinball Party, The (4.00 Germany)", + "simpprti", "Simpsons Pinball Party, The (5.00 Italy)", + "simpprti_204", "Simpsons Pinball Party, The (2.04 Italy)", + "simpprti_400", "Simpsons Pinball Party, The (4.00 Italy)", + "simpprtl", "Simpsons Pinball Party, The (5.00 Spain)", + "simpprtl_204", "Simpsons Pinball Party, The (2.04 Spain)", + "simpprtl_400", "Simpsons Pinball Party, The (4.00 Spain)", + "simpprty", "Simpsons Pinball Party, The (5.00)", + "simpprty_204", "Simpsons Pinball Party, The (2.04)", + "simpprty_400", "Simpsons Pinball Party, The (4.00)", + "simpsons", "The Simpsons (4 Players World, set 1)", + "simpsons2p", "The Simpsons (2 Players World, set 1)", + "simpsons2p2", "The Simpsons (2 Players World, set 2)", + "simpsons2pa", "The Simpsons (2 Players Asia)", + "simpsons2pj", "The Simpsons (2 Players Japan)", + "simpsons4pa", "The Simpsons (4 Players World, set 2)", + "sinbad", "Sinbad", + "sinbadn", "Sinbad (Norway)", + "sindbadm", "Sindbad Mystery", + "sinistar", "Sinistar (revision 3)", + "sinistar1", "Sinistar (prototype version)", + "sinistar2", "Sinistar (revision 2)", + "sinvasn", "Space Invasion (Europe)", + "sinvasnb", "Space Invasion (bootleg)", + "sinvemag", "Super Invaders (bootleg set 2)", + "sinvzen", "Super Invaders (Zenitone-Microsec)", + "sisv", "Space Invaders (SV Version rev 4)", + "sisv1", "Space Invaders (SV Version rev 1)", + "sisv2", "Space Invaders (SV Version rev 2)", + "sisv3", "Space Invaders (SV Version rev 3)", + "sitv", "Space Invaders (TV Version rev 2)", + "sitv1", "Space Invaders (TV Version rev 1)", + "sjcd2kx3", "Super Joly 2000 - 3x", + "sjryuko", "Sukeban Jansi Ryuko (set 2, System 16B, FD1089B 317-5021)", + "sjryuko1", "Sukeban Jansi Ryuko (set 1, System 16A, FD1089B 317-5021)", + "skatebll", "Skateball", + "skatekds", "Vs. Skate Kids. (Graphic hack of Super Mario Bros.)", + "skattv", "Skat TV", + "skattva", "Skat TV (version TS3)", + "skeetsht", "Skeet Shot", + "skelagon", "Skelagon", + "skflight", "Skill Flight", + "skichamp", "Ski Champ", + "skijump", "Ski Jump", + "skill98", "Skill '98 (ver. s98-1.33)", + "skilldrp", "Skill Drop Georgia (Ver. G1.0S)", + "skimaxx", "Skimaxx", + "skingame", "The Irem Skins Game (US set 1)", + "skingame2", "The Irem Skins Game (US set 2)", + "skisuprg", "Sega Ski Super G", + "skns", "Super Kaneko Nova System BIOS", + "skullfng", "Skull Fang (World)", + "skullfngj", "Skull Fang (Japan)", + "skullxbo", "Skull & Crossbones (rev 5)", + "skullxbo1", "Skull & Crossbones (rev 1)", + "skullxbo2", "Skull & Crossbones (rev 2)", + "skullxbo3", "Skull & Crossbones (rev 3)", + "skullxbo4", "Skull & Crossbones (rev 4)", + "skyadvnt", "Sky Adventure (World)", + "skyadvntj", "Sky Adventure (Japan)", + "skyadvntu", "Sky Adventure (US)", + "skyalert", "Sky Alert", + "skyarmy", "Sky Army", + "skybase", "Sky Base", + "skybump", "Sky Bumper", + "skychut", "Sky Chuter", + "skydest", "Sky Destroyer (Japan)", + "skydiver", "Sky Diver", + "skyfox", "Sky Fox", + "skykid", "Sky Kid (new version)", + "skykidd", "Sky Kid (CUS60 version)", + "skykiddx", "Sky Kid Deluxe (set 1)", + "skykiddxo", "Sky Kid Deluxe (set 2)", + "skykido", "Sky Kid (old version)", + "skykids", "Sky Kid (Sipem)", + "skylancr", "Sky Lancer", + "skylancre", "Sky Lancer (Esco Trading Co license)", + "skylncr", "Sky Lancer (Bordun, version U450C)", + "skylove", "Sky Love", + "skyraid", "Sky Raider", + "skyraidr", "Sky Raider (Uniwars bootleg)", + "skyrobo", "Sky Robo", + "skyshark", "Sky Shark (US)", + "skyskipr", "Sky Skipper", + "skysmash", "Sky Smasher", + "skysoldr", "Sky Soldiers (US)", + "skysoldrbl", "Sky Soldiers (bootleg)", + "skytargt", "Sky Target", + "skywolf", "Sky Wolf (set 1)", + "skywolf2", "Sky Wolf (set 2)", + "skywolf3", "Sky Wolf (set 3)", + "sl2007", "Shooting Love 2007", + "slamdnk2", "Slam Dunk 2 (ver JAA)", + "slammast", "Saturday Night Slam Masters (World 930713)", + "slammastu", "Saturday Night Slam Masters (USA 930713)", + "slampic", "Saturday Night Slam Masters (bootleg with PIC16c57)", + "slapfigh", "Slap Fight (Japan set 1)", + "slapfigha", "Slap Fight (Japan set 2)", + "slapfighb1", "Slap Fight (bootleg set 1)", + "slapfighb2", "Slap Fight (bootleg set 2)", + "slapfighb3", "Slap Fight (bootleg set 3)", + "slapshot", "Slap Shot (Japan)", + "slasho", "Slashout (JPN, USA, EXP, KOR, AUS)", + "slashout", "Slashout (GDS-0004)", + "slbmania", "Silverball Mania", + "sleicpin", "Sleic Pin Ball", + "slikshot", "Slick Shot (V2.2)", + "slikshot16", "Slick Shot (V1.6)", + "slikshot17", "Slick Shot (V1.7)", + "slipstrm", "Slip Stream (Brazil 950515)", + "slipstrmh", "Slip Stream (Hispanic 950515)", + "slither", "Slither (set 1)", + "slithera", "Slither (set 2)", + "sliver", "Sliver", + "slmdunkj", "Slam Dunk (ver JAA 1993 10.8)", + "sloco93", "Super Loco 93 (Spanish, set 1)", + "sloco93a", "Super Loco 93 (Spanish, set 2)", + "slotcarn", "Slot Carnival", + "slotsnl", "Slots (Dutch, Game Card 95-750-368)", + "slqz2", "Mahjong Shuang Long Qiang Zhu 2 (VS203J)", + "slrasslt", "Solar Assault (ver UAA)", + "sltblgp1", "Slots (Belgian Cash, Game Card 95-752-008)", + "sltblgpo", "Slots (Belgian Cash, Game Card 95-750-938)", + "sltblgtk", "Slots (Belgian Token, Game Card 95-750-943)", + "slyspy", "Sly Spy (US revision 3)", + "slyspy2", "Sly Spy (US revision 2)", + "sm_ngacc", "Nudge Accumulator (Summit Coin)", + "sm_ultng", "Ultimate Nudge (Summit Coin)", + "smarinef", "Sega Marine Fishing", + "smash", "Smash (Crash bootleg)", + "smashtv", "Smash T.V. (rev 8.00)", + "smashtv3", "Smash T.V. (rev 3.01)", + "smashtv4", "Smash T.V. (rev 4.00)", + "smashtv5", "Smash T.V. (rev 5.00)", + "smashtv6", "Smash T.V. (rev 6.00)", + "smb", "Super Mario Brothers", + "smb1", "Super Mario Brothers (rev.1)", + "smb2", "Super Mario Brothers (rev.2)", + "smb3", "Super Mario Brothers (rev.3)", + "smbmush", "Super Mario Brothers Mushroom World", + "smbomb", "Super Muscle Bomber: The International Blowout (Japan 940831)", + "smbombr1", "Super Muscle Bomber: The International Blowout (Japan 940808)", + "smgolf", "Vs. Stroke & Match Golf (Men Version, set GF4-2 F)", + "smgolfb", "Vs. Stroke & Match Golf (Men Version, set GF4-2 ?)", + "smgolfj", "Vs. Stroke & Match Golf (Men Version) (Japan, set GF3 B)", + "smgp", "Super Monaco GP (World, Rev B, FD1094 317-0126a)", + "smgp5", "Super Monaco GP (World, FD1094 317-0126)", + "smgp6", "Super Monaco GP (World, Rev A, FD1094 317-0126a)", + "smgpj", "Super Monaco GP (Japan, Rev B, FD1094 317-0124a)", + "smgpja", "Super Monaco GP (Japan, Rev A, FD1094 317-0124a)", + "smgpu", "Super Monaco GP (US, Rev C, FD1094 317-0125a)", + "smgpu1", "Super Monaco GP (US, Rev B, FD1094 317-0125a)", + "smgpu2", "Super Monaco GP (US, Rev A, FD1094 317-0125a)", + "smleague", "Super Major League (U 960108 V1.000)", + "smlg99", "Super Major League '99", + "smman", "Six Million Dollar Man", + "smooncrs", "Super Moon Cresta", + "smoto16", "Super Moto (Italy, v1.6)", + "smoto20", "Super Rider (Italy, v2.0)", + "smshilo", "HI-LO Double Up Joker Poker", + "snake", "Snake Machine", + "snakepit", "Snake Pit", + "snakjack", "Snacks'n Jaxson", + "snapjack", "Snap Jack", + "snapper", "Snapper (Korea)", + "sncwgltd", "Sonic Wings Limited (Japan)", + "sngkace", "Sengoku Ace (Japan)", + "snlad", "Snake & Ladders", + "snookr10", "Snooker 10 (Ver 1.11)", + "snowboar", "Snow Board Championship (Version 2.1)", + "snowboara", "Snow Board Championship (Version 2.0)", + "snowbro2", "Snow Bros. 2 - With New Elves / Otenki Paradise", + "snowbro2b", "Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg)", + "snowbro3", "Snow Brothers 3 - Magical Adventure", + "snowbros", "Snow Bros. - Nick & Tom (set 1)", + "snowbrosa", "Snow Bros. - Nick & Tom (set 2)", + "snowbrosb", "Snow Bros. - Nick & Tom (set 3)", + "snowbrosc", "Snow Bros. - Nick & Tom (set 4)", + "snowbrosd", "Snow Bros. - Nick & Tom (Dooyong license)", + "snowbrosj", "Snow Bros. - Nick & Tom (Japan)", + "snowbroswb", "Snow Bros. - Nick & Tom (The Winter Bobble hardware bootleg)", + "snspares", "Strikes n' Spares (rev.6)", + "snspares1", "Strikes n' Spares (rev.1)", + "socbrawl", "Soccer Brawl (NGM-031)", + "socbrawlh", "Soccer Brawl (NGH-031)", + "soccer", "Atari Soccer", + "soccernw", "Soccer New (Italian)", + "soccerss", "Soccer Superstars (ver EAA)", + "soccerssa", "Soccer Superstars (ver AAA)", + "soccerssj", "Soccer Superstars (ver JAC)", + "soccerssja", "Soccer Superstars (ver JAA)", + "socrking", "Soccer Kings", + "socrkingg", "Soccer Kings (German speech)", + "socrkingi", "Soccer Kings (Italian speech)", + "sogeki", "Sogeki (ver JAA)", + "sokonuke", "Sokonuke Taisen Game (Japan)", + "sokyugrt", "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", + "solar_l2", "Solar Fire (L-2)", + "solarfox", "Solar Fox (upright)", + "solaride", "Solar Ride", + "solarq", "Solar Quest", + "solarwap", "Solar Wars (Sonic)", + "solarwar", "Solar-Warrior (US)", + "soldam", "Soldam", + "soldamj", "Soldam (Japan)", + "soldivid", "Sol Divide - The Sword Of Darkness", + "solfight", "Solar Fight (bootleg of Ozma Wars)", + "solfigtr", "Solitary Fighter (World)", + "solomon", "Solomon's Key (US)", + "solomonj", "Solomon no Kagi (Japan)", + "solvalou", "Solvalou (Japan)", + "sonic", "SegaSonic The Hedgehog (Japan, rev. C)", + "sonicbom", "Sonic Boom (FD1094 317-0053)", + "sonicp", "SegaSonic The Hedgehog (Japan, prototype)", + "sonicwi", "Sonic Wings (Japan)", + "sonicwi2", "Aero Fighters 2 / Sonic Wings 2", + "sonicwi3", "Aero Fighters 3 / Sonic Wings 3", + "sonofphx", "Son of Phoenix (bootleg of Repulse)", + "sonoth", "Something For Nothing (Russia)", + "sonson", "Son Son", + "sonsonj", "Son Son (Japan)", + "sonstwar", "Star Wars (Sonic)", + "sonstwr2", "Star Wars (Sonic, alternate set)", + "sopranof", "Sopranos, The (5.00 France)", + "sopranof_107", "Sopranos, The (1.07 France)", + "sopranof_300", "Sopranos, The (3.00 France)", + "sopranof_400", "Sopranos, The (4.00 France)", + "sopranog", "Sopranos, The (5.00 Germany)", + "sopranog_107", "Sopranos, The (1.07 Germany)", + "sopranog_300", "Sopranos, The (3.00 Germany)", + "sopranog_400", "Sopranos, The (4.00 Germany)", + "sopranoi", "Sopranos, The (5.00 Italy)", + "sopranoi_107", "Sopranos, The (1.07 Italy)", + "sopranoi_300", "Sopranos, The (3.00 Italy)", + "sopranoi_400", "Sopranos, The (4.00 Italy)", + "sopranol", "Sopranos, The (5.00 Spain)", + "sopranol_107", "Sopranos, The (1.07 Spain)", + "sopranol_300", "Sopranos, The (3.00 Spain)", + "sopranol_400", "Sopranos, The (4.00 Spain)", + "sopranos", "Sopranos, The (5.00)", + "sopranos_204", "Sopranos, The (2.04)", + "sopranos_300", "Sopranos, The (3.00)", + "sopranos_400", "Sopranos, The (4.00)", + "sorbit", "Super Orbit", + "sorcr_l1", "Sorcerer (L-1)", + "sorcr_l2", "Sorcerer (L-2)", + "sos", "SOS", + "sosterm", "S.O.S.", + "sothello", "Super Othello", + "sotsugyo", "Sotsugyo Shousho", + "soukobdx", "Souko Ban Deluxe (Japan, SB1)", + "soulcl2a", "Soul Calibur II (SC22 Ver. A)", + "soulcl2b", "Soul Calibur II (SC21 Ver. A)", + "soulcl2w", "Soul Calibur II (SC2? world version)", + "soulclb2", "Soul Calibur II (SC23 Ver. A)", + "soulclb3", "Soul Calibur III (SC31001-NA-A)", + "soulclb3a", "Soul Calibur III (SC31002-NA-A)", + "soulclbr", "Soul Calibur (World, SOC14/VER.C)", + "soulclbrja", "Soul Calibur (Japan, SOC11/VER.A2)", + "soulclbrjb", "Soul Calibur (Japan, SOC11/VER.B)", + "soulclbrjc", "Soul Calibur (Japan, SOC11/VER.C)", + "soulclbrub", "Soul Calibur (US, SOC13/VER.B)", + "soulclbruc", "Soul Calibur (US, SOC13/VER.C)", + "soulclbrwb", "Soul Calibur (World, SOC14/VER.B)", + "souledge", "Soul Edge Ver. II (World, SO4/VER.C)", + "souledgeaa", "Soul Edge (Asia, SO2/VER.A)", + "souledgeja", "Soul Edge (Japan, SO1/VER.A)", + "souledgeua", "Soul Edge (US, SO3/VER.A)", + "souledgeuc", "Soul Edge Ver. II (US, SO3/VER.C)", + "soulsurf", "Soul Surfer (Rev A)", + "soutenry", "Soutenryu (V2.07J)", + "sp_atw", "Around The World In Eighty Days (Crystal) (sp.ACE?)", + "sp_beau", "Beau Peep (Ace) (sp.ACE) (set 1)", + "sp_beau2", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 1)", + "sp_beau2a", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 2)", + "sp_beau2b", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 3)", + "sp_beau2c", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 4)", + "sp_beau2d", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 5)", + "sp_beau2e", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 6)", + "sp_beau2f", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 7)", + "sp_beaua", "Beau Peep (Ace) (sp.ACE) (set 2)", + "sp_beaub", "Beau Peep (Ace) (sp.ACE) (set 3)", + "sp_beauc", "Beau Peep (Ace) (sp.ACE) (set 4)", + "sp_beaud", "Beau Peep (Ace) (sp.ACE) (set 5)", + "sp_beaue", "Beau Peep (Ace) (sp.ACE) (set 6)", + "sp_beauf", "Beau Peep (Ace) (sp.ACE) (set 7)", + "sp_beaug", "Beau Peep (Ace) (sp.ACE) (set 8)", + "sp_beauh", "Beau Peep (Ace) (sp.ACE) (set 9)", + "sp_bigbd", "Big Break Deluxe Club (Ace) (sp.ACE) (set 1)", + "sp_bigbda", "Big Break Deluxe Club (Ace) (sp.ACE) (set 2)", + "sp_brkbk", "Break The Bank (Ace) (sp.ACE) (set 1)", + "sp_brkbka", "Break The Bank (Ace) (sp.ACE) (set 2)", + "sp_brkbkb", "Break The Bank (Ace) (sp.ACE) (set 3)", + "sp_brkbkc", "Break The Bank (Ace) (sp.ACE) (set 4)", + "sp_brkbkd", "Break The Bank (Ace) (sp.ACE) (set 5)", + "sp_camel", "Camelot (Ace) (sp.ACE) (set 1)", + "sp_camela", "Camelot (Ace) (sp.ACE) (set 2)", + "sp_camelb", "Camelot (Ace) (sp.ACE) (set 3)", + "sp_camelc", "Camelot (Ace) (sp.ACE) (set 4)", + "sp_cameld", "Camelot (Ace) (sp.ACE) (set 5)", + "sp_camele", "Camelot (Ace) (sp.ACE) (set 6)", + "sp_camelf", "Camelot (Ace) (sp.ACE) (set 7)", + "sp_camelg", "Camelot (Ace) (sp.ACE) (set 8)", + "sp_camelh", "Camelot (Ace) (sp.ACE) (set 9)", + "sp_cameli", "Camelot (Ace) (sp.ACE) (set 10)", + "sp_camelj", "Camelot (Ace) (sp.ACE) (set 11)", + "sp_camelk", "Camelot (Ace) (sp.ACE) (set 12)", + "sp_camell", "Camelot (Ace) (sp.ACE) (set 13)", + "sp_camelm", "Camelot (Ace) (sp.ACE) (set 14)", + "sp_cameln", "Camelot (Ace) (sp.ACE) (set 15)", + "sp_camelo", "Camelot (Ace) (sp.ACE) (set 16)", + "sp_carry", "Carry On (Pcp) (sp.ACE?) (set 1)", + "sp_carrya", "Carry On (Pcp) (sp.ACE?) (set 2)", + "sp_cbowl", "Cash Bowl (Ace) (sp.ACE) (set 1)", + "sp_cbowla", "Cash Bowl (Ace) (sp.ACE) (set 2)", + "sp_cbowlb", "Cash Bowl (Ace) (sp.ACE) (set 3)", + "sp_cbowlc", "Cash Bowl (Ace) (sp.ACE) (set 4)", + "sp_cbowld", "Cash Bowl (Ace) (sp.ACE) (set 5)", + "sp_cbowle", "Cash Bowl (Ace) (sp.ACE) (set 6)", + "sp_cbowlf", "Cash Bowl (Ace) (sp.ACE) (set 7)", + "sp_cbowlg", "Cash Bowl (Ace) (sp.ACE) (set 8)", + "sp_cbowlh", "Cash Bowl (Ace) (sp.ACE) (set 9)", + "sp_cbowli", "Cash Bowl (Ace) (sp.ACE) (set 10)", + "sp_cbowlj", "Cash Bowl (Ace) (sp.ACE) (set 11)", + "sp_cbowlk", "Cash Bowl (Ace) (sp.ACE) (set 12)", + "sp_cbowll", "Cash Bowl (Ace) (sp.ACE) (set 13)", + "sp_cbowlm", "Cash Bowl (Ace) (sp.ACE) (set 14)", + "sp_cbowln", "Cash Bowl (Ace) (sp.ACE) (set 15)", + "sp_cbowlo", "Cash Bowl (Ace) (sp.ACE) (set 16)", + "sp_cbowlp", "Cash Bowl (Ace) (sp.ACE) (set 17)", + "sp_cbowlq", "Cash Bowl (Ace) (sp.ACE) (set 18)", + "sp_cbowlr", "Cash Bowl (Ace) (sp.ACE) (set 19)", + "sp_cbowls", "Cash Bowl (Ace) (sp.ACE) (set 20)", + "sp_cbowlt", "Cash Bowl (Ace) (sp.ACE) (set 21)", + "sp_cbowlu", "Cash Bowl (Ace) (sp.ACE) (set 22)", + "sp_clbna", "Club National (Ace) (sp.ACE) (set 1)", + "sp_clbnaa", "Club National (Ace) (sp.ACE) (set 2)", + "sp_coder", "Code Red (Ace) (sp.ACE) (set 1)", + "sp_codera", "Code Red (Ace) (sp.ACE) (set 2)", + "sp_coderb", "Code Red (Ace) (sp.ACE) (set 3)", + "sp_coderc", "Code Red (Ace) (sp.ACE) (set 4)", + "sp_coderd", "Code Red (Ace) (sp.ACE) (set 5)", + "sp_codere", "Code Red (Ace) (sp.ACE) (set 6)", + "sp_coderf", "Code Red (Ace) (sp.ACE) (set 7)", + "sp_coderg", "Code Red (Ace) (sp.ACE) (set 8)", + "sp_cpal", "Caesars Palace (Ace) (sp.ACE?)", + "sp_crime", "Crime Watch (Ace) (sp.ACE) (set 1)", + "sp_crimea", "Crime Watch (Ace) (sp.ACE) (set 2)", + "sp_crimeb", "Crime Watch (Ace) (sp.ACE) (set 3)", + "sp_crimec", "Crime Watch (Ace) (sp.ACE) (set 4)", + "sp_crimed", "Crime Watch (Ace) (sp.ACE) (set 5)", + "sp_crimee", "Crime Watch (Ace) (sp.ACE) (set 6)", + "sp_crimef", "Crime Watch (Ace) (sp.ACE) (set 7)", + "sp_crimeg", "Crime Watch (Ace) (sp.ACE) (set 8)", + "sp_crimeh", "Crime Watch (Ace) (sp.ACE) (set 9)", + "sp_criss", "Criss Cross Cash (Ace) (sp.ACE) (set 1)", + "sp_crissa", "Criss Cross Cash (Ace) (sp.ACE) (set 2)", + "sp_crissb", "Criss Cross Cash (Ace) (sp.ACE) (set 3)", + "sp_crissc", "Criss Cross Cash (Ace) (sp.ACE) (set 4)", + "sp_crissd", "Criss Cross Cash (Ace) (sp.ACE) (set 5)", + "sp_crisse", "Criss Cross Cash (Ace) (sp.ACE) (set 6)", + "sp_crissf", "Criss Cross Cash (Ace) (sp.ACE) (set 7)", + "sp_crissg", "Criss Cross Cash (Ace) (sp.ACE) (set 8)", + "sp_crun", "Cash Run (Crystal) (sp.ACE?) (set 1)", + "sp_cruna", "Cash Run (Crystal) (sp.ACE?) (set 2)", + "sp_crunb", "Cash Run (Crystal) (sp.ACE?) (set 3)", + "sp_daytr", "Daytripper (Ace) (sp.ACE) (set 1)", + "sp_daytra", "Daytripper (Ace) (sp.ACE) (set 2)", + "sp_daytrb", "Daytripper (Ace) (sp.ACE) (set 3)", + "sp_daytrc", "Daytripper (Ace) (sp.ACE) (set 4)", + "sp_donky", "Donkey Derby (Ace) (sp.ACE) (set 1)", + "sp_donkya", "Donkey Derby (Ace) (sp.ACE) (set 2)", + "sp_donkyb", "Donkey Derby (Ace) (sp.ACE) (set 3)", + "sp_donkyc", "Donkey Derby (Ace) (sp.ACE) (set 4)", + "sp_donkyd", "Donkey Derby (Ace) (sp.ACE) (set 5)", + "sp_donkye", "Donkey Derby (Ace) (sp.ACE) (set 6)", + "sp_donkyf", "Donkey Derby (Ace) (sp.ACE) (set 7)", + "sp_donkyg", "Donkey Derby (Ace) (sp.ACE) (set 8)", + "sp_dyour", "Double Your Money (Ace) (sp.ACE)", + "sp_emmrd", "Emmerdale (Ace) (sp.ACE) (set 1)", + "sp_emmrda", "Emmerdale (Ace) (sp.ACE) (set 2)", + "sp_emmrdb", "Emmerdale (Ace) (sp.ACE) (set 3)", + "sp_emmrdc", "Emmerdale (Ace) (sp.ACE) (set 4)", + "sp_emmrdd", "Emmerdale (Ace) (sp.ACE) (set 5)", + "sp_emmrde", "Emmerdale (Ace) (sp.ACE) (set 6)", + "sp_emmrdf", "Emmerdale (Ace) (sp.ACE) (set 7)", + "sp_emmrdg", "Emmerdale (Ace) (sp.ACE) (set 8)", + "sp_emmrdh", "Emmerdale (Ace) (sp.ACE) (set 9)", + "sp_emmrdi", "Emmerdale (Ace) (sp.ACE) (set 10)", + "sp_emmrdj", "Emmerdale (Ace) (sp.ACE) (set 11)", + "sp_emmrdk", "Emmerdale (Ace) (sp.ACE) (set 12)", + "sp_emmrdn", "Emmerdale (Ace) (sp.ACE) (set 15)", + "sp_emmrdo", "Emmerdale (Ace) (sp.ACE) (set 16)", + "sp_festi", "Festival (Spanish) (Ace) (sp.ACE)", + "sp_five", "Fiver Fever (Crystal) (sp.ACE?) (set 1)", + "sp_fivea", "Fiver Fever (Crystal) (sp.ACE?) (set 2)", + "sp_front", "Final Frontier (Bwb) (sp.ACE?)", + "sp_ghost", "Ghost Trapper (Ace) (sp.ACE) (set 1)", + "sp_ghosta", "Ghost Trapper (Ace) (sp.ACE) (set 2)", + "sp_ghostb", "Ghost Trapper (Ace) (sp.ACE) (set 3)", + "sp_ghostc", "Ghost Trapper (Ace) (sp.ACE) (set 4)", + "sp_ghostd", "Ghost Trapper (Ace) (sp.ACE) (set 5)", + "sp_ghoste", "Ghost Trapper (Ace) (sp.ACE) (set 6)", + "sp_ghostf", "Ghost Trapper (Ace) (sp.ACE) (set 7)", + "sp_ghostg", "Ghost Trapper (Ace) (sp.ACE) (set 8)", + "sp_ghosth", "Ghost Trapper (Ace) (sp.ACE) (set 9)", + "sp_ghosti", "Ghost Trapper (Ace) (sp.ACE) (set 10)", + "sp_ghostj", "Ghost Trapper (Ace) (sp.ACE) (set 11)", + "sp_ghostk", "Ghost Trapper (Ace) (sp.ACE) (set 12)", + "sp_ghostl", "Ghost Trapper (Ace) (sp.ACE) (set 13)", + "sp_ghostm", "Ghost Trapper (Ace) (sp.ACE) (set 14)", + "sp_ghostn", "Ghost Trapper (Ace) (sp.ACE) (set 15)", + "sp_ghosto", "Ghost Trapper (Ace) (sp.ACE) (set 16)", + "sp_ghostp", "Ghost Trapper (Ace) (sp.ACE) (set 17)", + "sp_ghostq", "Ghost Trapper (Ace) (sp.ACE) (set 18)", + "sp_ghostr", "Ghost Trapper (Ace) (sp.ACE) (set 19)", + "sp_ghosts", "Ghost Trapper (Ace) (sp.ACE) (set 20)", + "sp_globe", "Globe Trotter (Ace) (sp.ACE) (set 1)", + "sp_globea", "Globe Trotter (Ace) (sp.ACE) (set 2)", + "sp_globeb", "Globe Trotter (Ace) (sp.ACE) (set 3)", + "sp_globec", "Globe Trotter (Ace) (sp.ACE) (set 4)", + "sp_globed", "Globe Trotter (Ace) (sp.ACE) (set 5)", + "sp_globee", "Globe Trotter (Ace) (sp.ACE) (set 6)", + "sp_globef", "Globe Trotter (Ace) (sp.ACE) (set 7)", + "sp_globeg", "Globe Trotter (Ace) (sp.ACE) (set 8)", + "sp_gnat", "Grand National (Ace) (sp.ACE) (set 1)", + "sp_gnata", "Grand National (Ace) (sp.ACE) (set 2)", + "sp_gnatb", "Grand National (Ace) (sp.ACE) (set 3)", + "sp_gnatc", "Grand National (Ace) (sp.ACE) (set 4)", + "sp_gnatd", "Grand National (Ace) (sp.ACE) (set 5)", + "sp_gnate", "Grand National (Ace) (sp.ACE) (set 6)", + "sp_gnatf", "Grand National (Ace) (sp.ACE) (set 7)", + "sp_gnatg", "Grand National (Ace) (sp.ACE) (set 8)", + "sp_gnath", "Grand National (Ace) (sp.ACE) (set 9)", + "sp_gnati", "Grand National (Ace) (sp.ACE) (set 10)", + "sp_gnatj", "Grand National (Ace) (sp.ACE) (set 11)", + "sp_gnatk", "Grand National (Ace) (sp.ACE) (set 12)", + "sp_gnatl", "Grand National (Ace) (sp.ACE) (set 13)", + "sp_gnatm", "Grand National (Ace) (sp.ACE) (set 14)", + "sp_gnatn", "Grand National (Ace) (sp.ACE) (set 15)", + "sp_gnato", "Grand National (Ace) (sp.ACE) (set 16)", + "sp_gol", "Gol (Spanish) (Ace) (sp.ACE)", + "sp_golda", "Golden Arrow Club (Ace) (sp.ACE) (set 1)", + "sp_goldaa", "Golden Arrow Club (Ace) (sp.ACE) (set 2)", + "sp_goldm", "Golden Mile (Ace) (sp.ACE) (set 1)", + "sp_goldm0", "Golden Mile (Ace) (sp.ACE) (set 28)", + "sp_goldm1", "Golden Mile (Ace) (sp.ACE) (set 29)", + "sp_goldm2", "Golden Mile (Ace) (sp.ACE) (set 30)", + "sp_goldm3", "Golden Mile (Ace) (sp.ACE) (set 31)", + "sp_goldma", "Golden Mile (Ace) (sp.ACE) (set 2)", + "sp_goldmb", "Golden Mile (Ace) (sp.ACE) (set 3)", + "sp_goldmc", "Golden Mile (Ace) (sp.ACE) (set 4)", + "sp_goldmd", "Golden Mile (Ace) (sp.ACE) (set 5)", + "sp_goldme", "Golden Mile (Ace) (sp.ACE) (set 6)", + "sp_goldmf", "Golden Mile (Ace) (sp.ACE) (set 7)", + "sp_goldmg", "Golden Mile (Ace) (sp.ACE) (set 8)", + "sp_goldmh", "Golden Mile (Ace) (sp.ACE) (set 9)", + "sp_goldmi", "Golden Mile (Ace) (sp.ACE) (set 10)", + "sp_goldmj", "Golden Mile (Ace) (sp.ACE) (set 11)", + "sp_goldmk", "Golden Mile (Ace) (sp.ACE) (set 12)", + "sp_goldml", "Golden Mile (Ace) (sp.ACE) (set 13)", + "sp_goldmm", "Golden Mile (Ace) (sp.ACE) (set 14)", + "sp_goldmn", "Golden Mile (Ace) (sp.ACE) (set 15)", + "sp_goldmo", "Golden Mile (Ace) (sp.ACE) (set 16)", + "sp_goldmp", "Golden Mile (Ace) (sp.ACE) (set 17)", + "sp_goldmq", "Golden Mile (Ace) (sp.ACE) (set 18)", + "sp_goldmr", "Golden Mile (Ace) (sp.ACE) (set 19)", + "sp_goldms", "Golden Mile (Ace) (sp.ACE) (set 20)", + "sp_goldmt", "Golden Mile (Ace) (sp.ACE) (set 21)", + "sp_goldmu", "Golden Mile (Ace) (sp.ACE) (set 22)", + "sp_goldmv", "Golden Mile (Ace) (sp.ACE) (set 23)", + "sp_goldmw", "Golden Mile (Ace) (sp.ACE) (set 24)", + "sp_goldmx", "Golden Mile (Ace) (sp.ACE) (set 25)", + "sp_goldmy", "Golden Mile (Ace) (sp.ACE) (set 26)", + "sp_goldmz", "Golden Mile (Ace) (sp.ACE) (set 27)", + "sp_golds", "Golden Streak (Ace) (sp.ACE) (set 1)", + "sp_goldsa", "Golden Streak (Ace) (sp.ACE) (set 2)", + "sp_goldsb", "Golden Streak (Ace) (sp.ACE) (set 3)", + "sp_goldsc", "Golden Streak (Ace) (sp.ACE) (set 4)", + "sp_goldsd", "Golden Streak (Ace) (sp.ACE) (set 5)", + "sp_goldse", "Golden Streak (Ace) (sp.ACE) (set 6)", + "sp_goldsf", "Golden Streak (Ace) (sp.ACE) (set 7)", + "sp_goldsg", "Golden Streak (Ace) (sp.ACE) (set 8)", + "sp_goldsh", "Golden Streak (Ace) (sp.ACE) (set 9)", + "sp_goldt", "Golden Streak (Golden Touch) (Ace) (sp.ACE)", + "sp_gprix", "Grand Prix (Ace) (sp.ACE) (set 1)", + "sp_gprixa", "Grand Prix (Ace) (sp.ACE) (set 2)", + "sp_gprixb", "Grand Prix (Ace) (sp.ACE) (set 3)", + "sp_gprixc", "Grand Prix (Ace) (sp.ACE) (set 4)", + "sp_gprixd", "Grand Prix (Ace) (sp.ACE) (set 5)", + "sp_gprixe", "Grand Prix (Ace) (sp.ACE) (set 6)", + "sp_gprixf", "Grand Prix (Ace) (sp.ACE) (set 7)", + "sp_gprixg", "Grand Prix (Ace) (sp.ACE) (set 8)", + "sp_gprixh", "Grand Prix (Ace) (sp.ACE) (set 9)", + "sp_here", "Here We Go (Ace) (sp.ACE) (set 1)", + "sp_herea", "Here We Go (Ace) (sp.ACE) (set 2)", + "sp_hereb", "Here We Go (Ace) (sp.ACE) (set 3)", + "sp_herec", "Here We Go (Ace) (sp.ACE) (set 4)", + "sp_hered", "Here We Go (Ace) (sp.ACE) (set 5)", + "sp_heree", "Here We Go (Ace) (sp.ACE) (set 6)", + "sp_heref", "Here We Go (Ace) (sp.ACE) (set 7)", + "sp_hereg", "Here We Go (Ace) (sp.ACE) (set 8)", + "sp_hideh", "Hi De Hi (Ace) (sp.ACE) (set 1)", + "sp_hideha", "Hi De Hi (Ace) (sp.ACE) (set 2)", + "sp_hidehb", "Hi De Hi (Ace) (sp.ACE) (set 3)", + "sp_hidehc", "Hi De Hi (Ace) (sp.ACE) (set 4)", + "sp_hidehd", "Hi De Hi (Ace) (sp.ACE) (set 5)", + "sp_hidehe", "Hi De Hi (Ace) (sp.ACE) (set 6)", + "sp_hidehf", "Hi De Hi (Ace) (sp.ACE) (set 7)", + "sp_hidehg", "Hi De Hi (Ace) (sp.ACE) (set 8)", + "sp_hidehh", "Hi De Hi (Ace) (sp.ACE) (set 9)", + "sp_hidehi", "Hi De Hi (Ace) (sp.ACE) (set 10)", + "sp_hidehj", "Hi De Hi (Ace) (sp.ACE) (set 11)", + "sp_hidehk", "Hi De Hi (Ace) (sp.ACE) (set 12)", + "sp_hidehl", "Hi De Hi (Ace) (sp.ACE) (set 13)", + "sp_hidehm", "Hi De Hi (Ace) (sp.ACE) (set 14)", + "sp_hidehn", "Hi De Hi (Ace) (sp.ACE) (set 15)", + "sp_hideho", "Hi De Hi (Ace) (sp.ACE) (set 16)", + "sp_hidehp", "Hi De Hi (Ace) (sp.ACE) (set 17)", + "sp_hifly", "Hi Flyer (Ace) (sp.ACE) (set 1)", + "sp_hiflya", "Hi Flyer (Ace) (sp.ACE) (set 2)", + "sp_hiflyb", "Hi Flyer (Ace) (sp.ACE) (set 3)", + "sp_hiflyc", "Hi Flyer (Ace) (sp.ACE) (set 4)", + "sp_hiflyd", "Hi Flyer (Ace) (sp.ACE) (set 5)", + "sp_hiflye", "Hi Flyer (Ace) (sp.ACE) (set 6)", + "sp_hiflyf", "Hi Flyer (Ace) (sp.ACE) (set 7)", + "sp_hiflyg", "Hi Flyer (Ace) (sp.ACE) (set 8)", + "sp_hiflyh", "Hi Flyer (Ace) (sp.ACE) (set 9)", + "sp_hiflyi", "Hi Flyer (Ace) (sp.ACE) (set 10)", + "sp_hiflyj", "Hi Flyer (Ace) (sp.ACE) (set 11)", + "sp_hiflyk", "Hi Flyer (Ace) (sp.ACE) (set 12)", + "sp_hiflyl", "Hi Flyer (Ace) (sp.ACE) (set 13)", + "sp_hiflym", "Hi Flyer (Ace) (sp.ACE) (set 14)", + "sp_hiflyn", "Hi Flyer (Ace) (sp.ACE) (set 15)", + "sp_hiflyo", "Hi Flyer (Ace) (sp.ACE) (set 16)", + "sp_hiflyp", "Hi Flyer (Ace) (sp.ACE) (set 17)", + "sp_holid", "Holiday Club (Ace) (sp.ACE) (set 1)", + "sp_holida", "Holiday Club (Ace) (sp.ACE) (set 2)", + "sp_juras", "Jurassic Trail (Ace) (sp.ACE)", + "sp_lotto", "Lotto (Spanish) (Ace) (sp.ACE)", + "sp_magmo", "Magic Money (Ace) (sp.ACE) (set 1)", + "sp_magmoa", "Magic Money (Ace) (sp.ACE) (set 2)", + "sp_magmob", "Magic Money (Ace) (sp.ACE) (set 3)", + "sp_magmoc", "Magic Money (Ace) (sp.ACE) (set 4)", + "sp_magmod", "Magic Money (Ace) (sp.ACE) (set 5)", + "sp_megmo", "Mega Money (Ace) (sp.ACE) (set 1)", + "sp_megmoa", "Mega Money (Ace) (sp.ACE) (set 2)", + "sp_megmob", "Mega Money (Ace) (sp.ACE) (set 3)", + "sp_megmoc", "Mega Money (Ace) (sp.ACE) (set 4)", + "sp_megmod", "Mega Money (Ace) (sp.ACE) (set 5)", + "sp_megmoe", "Mega Money (Ace) (sp.ACE) (set 6)", + "sp_megmof", "Mega Money (Ace) (sp.ACE) (set 7)", + "sp_megmog", "Mega Money (Ace) (sp.ACE) (set 8)", + "sp_monma", "Money Magic (Ace) (sp.ACE) (set 1)", + "sp_monmaa", "Money Magic (Ace) (sp.ACE) (set 2)", + "sp_monmab", "Money Magic (Ace) (sp.ACE) (set 3)", + "sp_monmac", "Money Magic (Ace) (sp.ACE) (set 4)", + "sp_monmad", "Money Magic (Ace) (sp.ACE) (set 5)", + "sp_monmo", "Money Mountain (Ace) (sp.ACE) (set 1)", + "sp_monmoa", "Money Mountain (Ace) (sp.ACE) (set 2)", + "sp_monmob", "Money Mountain (Ace) (sp.ACE) (set 3)", + "sp_monmoc", "Money Mountain (Ace) (sp.ACE) (set 4)", + "sp_monmod", "Money Mountain (Ace) (sp.ACE) (set 5)", + "sp_monmoe", "Money Mountain (Ace) (sp.ACE) (set 6)", + "sp_monmof", "Money Mountain (Ace) (sp.ACE) (set 7)", + "sp_monmog", "Money Mountain (Ace) (sp.ACE) (set 8)", + "sp_nudex", "Nudge Explosion (Ace) (sp.ACE) (set 1)", + "sp_nudexa", "Nudge Explosion (Ace) (sp.ACE) (set 2)", + "sp_onbox", "On The Box (Ace) (sp.ACE) (set 1)", + "sp_onboxa", "On The Box (Ace) (sp.ACE) (set 2)", + "sp_onboxb", "On The Box (Ace) (sp.ACE) (set 3)", + "sp_onboxc", "On The Box (Ace) (sp.ACE) (set 4)", + "sp_onboxd", "On The Box (Ace) (sp.ACE) (set 5)", + "sp_onboxe", "On The Box (Ace) (sp.ACE) (set 6)", + "sp_onboxf", "On The Box (Ace) (sp.ACE) (set 7)", + "sp_onboxg", "On The Box (Ace) (sp.ACE) (set 8)", + "sp_onboxh", "On The Box (Ace) (sp.ACE) (set 9)", + "sp_onboxi", "On The Box (Ace) (sp.ACE) (set 10)", + "sp_onboxj", "On The Box (Ace) (sp.ACE) (set 11)", + "sp_onboxk", "On The Box (Ace) (sp.ACE) (set 12)", + "sp_onboxl", "On The Box (Ace) (sp.ACE) (set 13)", + "sp_onboxm", "On The Box (Ace) (sp.ACE) (set 14)", + "sp_onboxn", "On The Box (Ace) (sp.ACE) (set 15)", + "sp_openb", "Open The Box (Ace) (sp.ACE) (set 1)", + "sp_openba", "Open The Box (Ace) (sp.ACE) (set 2)", + "sp_openbb", "Open The Box (Ace) (sp.ACE) (set 3)", + "sp_openbc", "Open The Box (Ace) (sp.ACE) (set 4)", + "sp_openbd", "Open The Box (Ace) (sp.ACE) (set 5)", + "sp_openbe", "Open The Box (Ace) (sp.ACE) (set 6)", + "sp_openbf", "Open The Box (Ace) (sp.ACE) (set 7)", + "sp_openbg", "Open The Box (Ace) (sp.ACE) (set 8)", + "sp_openbh", "Open The Box (Ace) (sp.ACE) (set 9)", + "sp_openbi", "Open The Box (Ace) (sp.ACE) (set 10)", + "sp_payrs", "Payrise (Ace) (sp.ACE) (set 1)", + "sp_payrsa", "Payrise (Ace) (sp.ACE) (set 2)", + "sp_payrsb", "Payrise (Ace) (sp.ACE) (set 3)", + "sp_payrsc", "Payrise (Ace) (sp.ACE) (set 4)", + "sp_payrsd", "Payrise (Ace) (sp.ACE) (set 5)", + "sp_payrse", "Payrise (Ace) (sp.ACE) (set 6)", + "sp_payrsf", "Payrise (Ace) (sp.ACE) (set 7)", + "sp_payrsg", "Payrise (Ace) (sp.ACE) (set 8)", + "sp_payrsh", "Payrise (Ace) (sp.ACE) (set 9)", + "sp_piste", "On The Piste (Ace) (sp.ACE) (set 1)", + "sp_pistea", "On The Piste (Ace) (sp.ACE) (set 2)", + "sp_pisteb", "On The Piste (Ace) (sp.ACE) (set 3)", + "sp_pistec", "On The Piste (Ace) (sp.ACE) (set 4)", + "sp_pisted", "On The Piste (Ace) (sp.ACE) (set 5)", + "sp_pistee", "On The Piste (Ace) (sp.ACE) (set 6)", + "sp_pistef", "On The Piste (Ace) (sp.ACE) (set 7)", + "sp_pisteg", "On The Piste (Ace) (sp.ACE) (set 8)", + "sp_pisteh", "On The Piste (Ace) (sp.ACE) (set 9)", + "sp_pistei", "On The Piste (Ace) (sp.ACE) (set 10)", + "sp_pistej", "On The Piste (Ace) (sp.ACE) (set 11)", + "sp_pistek", "On The Piste (Ace) (sp.ACE) (set 12)", + "sp_pistel", "On The Piste (Ace) (sp.ACE) (set 13)", + "sp_pistem", "On The Piste (Ace) (sp.ACE) (set 14)", + "sp_pisten", "On The Piste (Ace) (sp.ACE) (set 15)", + "sp_pisteo", "On The Piste (Ace) (sp.ACE) (set 16)", + "sp_pistep", "On The Piste (Ace) (sp.ACE) (set 17)", + "sp_playa", "Play It Again (Ace) (sp.ACE) (set 1)", + "sp_playaa", "Play It Again (Ace) (sp.ACE) (set 2)", + "sp_playab", "Play It Again (Ace) (sp.ACE) (set 3)", + "sp_playac", "Play It Again (Ace) (sp.ACE) (set 4)", + "sp_playad", "Play It Again (Ace) (sp.ACE) (set 5)", + "sp_playae", "Play It Again (Ace) (sp.ACE) (set 6)", + "sp_playaf", "Play It Again (Ace) (sp.ACE) (set 7)", + "sp_playag", "Play It Again (Ace) (sp.ACE) (set 8)", + "sp_playah", "Play It Again (Ace) (sp.ACE) (set 9)", + "sp_playai", "Play It Again (Ace) (sp.ACE) (set 10)", + "sp_pound", "Pound For Pound (Ace) (sp.ACE) (set 1)", + "sp_pounda", "Pound For Pound (Ace) (sp.ACE) (set 2)", + "sp_poundb", "Pound For Pound (Ace) (sp.ACE) (set 3)", + "sp_poundbwb", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 1)", + "sp_poundbwba", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 2)", + "sp_poundbwbb", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 3)", + "sp_poundbwbc", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 4)", + "sp_poundbwbd", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 5)", + "sp_poundbwbe", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 6)", + "sp_poundbwbf", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 7)", + "sp_poundbwbg", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 8)", + "sp_poundc", "Pound For Pound (Ace) (sp.ACE) (set 4)", + "sp_poundd", "Pound For Pound (Ace) (sp.ACE) (set 5)", + "sp_pounde", "Pound For Pound (Ace) (sp.ACE) (set 6)", + "sp_poundf", "Pound For Pound (Ace) (sp.ACE) (set 7)", + "sp_poundg", "Pound For Pound (Ace) (sp.ACE) (set 8)", + "sp_poundh", "Pound For Pound (Ace) (sp.ACE) (set 9)", + "sp_poundi", "Pound For Pound (Ace) (sp.ACE) (set 10)", + "sp_poundj", "Pound For Pound (Ace) (sp.ACE) (set 11)", + "sp_poundk", "Pound For Pound (Ace) (sp.ACE) (set 12)", + "sp_poundl", "Pound For Pound (Ace) (sp.ACE) (set 13)", + "sp_poundm", "Pound For Pound (Ace) (sp.ACE) (set 14)", + "sp_poundn", "Pound For Pound (Ace) (sp.ACE) (set 15)", + "sp_poundo", "Pound For Pound (Ace) (sp.ACE) (set 16)", + "sp_poundp", "Pound For Pound (Ace) (sp.ACE) (set 17)", + "sp_przna", "Prize National (Ace) (sp.ACE) (set 1)", + "sp_prznaa", "Prize National (Ace) (sp.ACE) (set 2)", + "sp_prznab", "Prize National (Ace) (sp.ACE) (set 3)", + "sp_prznac", "Prize National (Ace) (sp.ACE) (set 4)", + "sp_prznad", "Prize National (Ace) (sp.ACE) (set 5)", + "sp_prznae", "Prize National (Ace) (sp.ACE) (set 6)", + "sp_prznaf", "Prize National (Ace) (sp.ACE) (set 7)", + "sp_prznag", "Prize National (Ace) (sp.ACE) (set 8)", + "sp_road", "Road To Hell (Ace) (sp.ACE)", + "sp_roof", "Thru' The Roof (Ace) (sp.ACE) (set 1)", + "sp_roofa", "Thru' The Roof (Ace) (sp.ACE) (set 2)", + "sp_skylm", "Sky's The Limit Club, The (Ace) (sp.ACE) (set 1)", + "sp_skylma", "Sky's The Limit Club, The (Ace) (sp.ACE) (set 2)", + "sp_spell", "Spellbound (Ace) (sp.ACE) (set 1)", + "sp_spella", "Spellbound (Ace) (sp.ACE) (set 2)", + "sp_spellb", "Spellbound (Ace) (sp.ACE) (set 3)", + "sp_spellc", "Spellbound (Ace) (sp.ACE) (set 4)", + "sp_spelld", "Spellbound (Ace) (sp.ACE) (set 5)", + "sp_spelle", "Spellbound (Ace) (sp.ACE) (set 6)", + "sp_spellf", "Spellbound (Ace) (sp.ACE) (set 7)", + "sp_spellg", "Spellbound (Ace) (sp.ACE) (set 8)", + "sp_spelli", "Spellbound (Ace) (sp.ACE) (set 10)", + "sp_spellj", "Spellbound (Ace) (sp.ACE) (set 11)", + "sp_swop", "Swop Shop (Ace) (sp.ACE) (set 1)", + "sp_swopa", "Swop Shop (Ace) (sp.ACE) (set 2)", + "sp_swopb", "Swop Shop (Ace) (sp.ACE) (set 3)", + "sp_swopc", "Swop Shop (Ace) (sp.ACE) (set 4)", + "sp_swopd", "Swop Shop (Ace) (sp.ACE) (set 5)", + "sp_swope", "Swop Shop (Ace) (sp.ACE) (set 6)", + "sp_swopf", "Swop Shop (Ace) (sp.ACE) (set 7)", + "sp_swopg", "Swop Shop (Ace) (sp.ACE) (set 8)", + "sp_timem", "Time Machine (Ace) (sp.ACE) (set 1)", + "sp_timema", "Time Machine (Ace) (sp.ACE) (set 2)", + "sp_timemb", "Time Machine (Ace) (sp.ACE) (set 3)", + "sp_timemc", "Time Machine (Ace) (sp.ACE) (set 4)", + "sp_timemd", "Time Machine (Ace) (sp.ACE) (set 5)", + "sp_timeme", "Time Machine (Ace) (sp.ACE) (set 6)", + "sp_timemf", "Time Machine (Ace) (sp.ACE) (set 7)", + "sp_timemg", "Time Machine (Ace) (sp.ACE) (set 8)", + "sp_timemh", "Time Machine (Ace) (sp.ACE) (set 9)", + "sp_timemi", "Time Machine (Ace) (sp.ACE) (set 10)", + "sp_timemj", "Time Machine (Ace) (sp.ACE) (set 11)", + "sp_timemk", "Time Machine (Ace) (sp.ACE) (set 12)", + "sp_tkpik", "Take Your Pick (Ace) (sp.ACE) (set 1)", + "sp_tkpika", "Take Your Pick (Ace) (sp.ACE) (set 2)", + "sp_tkpikb", "Take Your Pick (Ace) (sp.ACE) (set 3)", + "sp_tkpikc", "Take Your Pick (Ace) (sp.ACE) (set 4)", + "sp_tkpikd", "Take Your Pick (Ace) (sp.ACE) (set 5)", + "sp_tkpike", "Take Your Pick (Ace) (sp.ACE) (set 6)", + "sp_tkpikf", "Take Your Pick (Ace) (sp.ACE) (set 7)", + "sp_tz", "Twilight Zone (Ace) (sp.ACE) (set 1)", + "sp_tza", "Twilight Zone (Ace) (sp.ACE) (set 2)", + "sp_tzb", "Twilight Zone (Ace) (sp.ACE) (set 3)", + "sp_tzbwb", "Twilight Zone (Ace/Bwb) (sp.ACE)", + "sp_tzc", "Twilight Zone (Ace) (sp.ACE) (set 4)", + "sp_tzd", "Twilight Zone (Ace) (sp.ACE) (set 5)", + "sp_tze", "Twilight Zone (Ace) (sp.ACE) (set 6)", + "sp_tzf", "Twilight Zone (Ace) (sp.ACE) (set 7)", + "sp_tzfe", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 1)", + "sp_tzfea", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 2)", + "sp_tzfeb", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 3)", + "sp_tzfec", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 4)", + "sp_tzfed", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 5)", + "sp_tzfee", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 6)", + "sp_tzfef", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 7)", + "sp_tzfeg", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 8)", + "sp_tzfeh", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 9)", + "sp_tzfei", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 10)", + "sp_tzfej", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 11)", + "sp_tzfek", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 12)", + "sp_tzfel", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 13)", + "sp_tzfem", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 14)", + "sp_tzfen", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 15)", + "sp_tzfeo", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 16)", + "sp_tzfep", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 17)", + "sp_tzfeq", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 18)", + "sp_tzfer", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 19)", + "sp_tzfes", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 20)", + "sp_tzfet", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 21)", + "sp_tzfeu", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 22)", + "sp_tzg", "Twilight Zone (Ace) (sp.ACE) (set 8)", + "sp_tzh", "Twilight Zone (Ace) (sp.ACE) (set 9)", + "sp_woolp", "Woolpack (Ace) (sp.ACE) (set 1)", + "sp_woolpa", "Woolpack (Ace) (sp.ACE) (set 2)", + "sp_woolpb", "Woolpack (Ace) (sp.ACE) (set 3)", + "sp_woolpc", "Woolpack (Ace) (sp.ACE) (set 4)", + "sp_woolpd", "Woolpack (Ace) (sp.ACE) (set 5)", + "sp_woolpe", "Woolpack (Ace) (sp.ACE) (set 6)", + "sp_woolpf", "Woolpack (Ace) (sp.ACE) (set 7)", + "sp_woolpg", "Woolpack (Ace) (sp.ACE) (set 8)", + "sp_woolph", "Woolpack (Ace) (sp.ACE) (set 9)", + "sp_woolpi", "Woolpack (Ace) (sp.ACE) (set 10)", + "sp_woolpj", "Woolpack (Ace) (sp.ACE) (set 11)", + "sp_woolpk", "Woolpack (Ace) (sp.ACE) (set 12)", + "sp_woolpl", "Woolpack (Ace) (sp.ACE) (set 13)", + "sp_woolpm", "Woolpack (Ace) (sp.ACE) (set 14)", + "sp_woolpn", "Woolpack (Ace) (sp.ACE) (set 15)", + "sp_woolpo", "Woolpack (Ace) (sp.ACE) (set 16)", + "sp_zigzg", "Zig Zag (Ace) (sp.ACE) (set 1)", + "sp_zigzga", "Zig Zag (Ace) (sp.ACE) (set 2)", + "sp_zigzgb", "Zig Zag (Ace) (sp.ACE) (set 3)", + "sp_zigzgc", "Zig Zag (Ace) (sp.ACE) (set 4)", + "sp_zigzgd", "Zig Zag (Ace) (sp.ACE) (set 5)", + "sp_zigzge", "Zig Zag (Ace) (sp.ACE) (set 6)", + "sp_zigzgf", "Zig Zag (Ace) (sp.ACE) (set 7)", + "sp_zigzgg", "Zig Zag (Ace) (sp.ACE) (set 8)", + "sp_zigzgh", "Zig Zag (Ace) (sp.ACE) (set 9)", + "sp_zigzgi", "Zig Zag (Ace) (sp.ACE) (set 10)", + "sp_zigzgj", "Zig Zag (Ace) (sp.ACE) (set 11)", + "sp_zigzgk", "Zig Zag (Ace) (sp.ACE) (set 12)", + "sp_zigzgl", "Zig Zag (Ace) (sp.ACE) (set 13)", + "sp_zigzgm", "Zig Zag (Ace) (sp.ACE) (set 14)", + "spacbat2", "Space Battle (bootleg set 2)", + "spacbatt", "Space Battle (bootleg set 1)", + "spacbeam", "Space Beam", + "spacduel", "Space Duel", + "spacea91", "Space Ace (DL2 Conversion) (US v1.3)", + "spacea91_13e", "Space Ace (DL2 Conversion) (Euro v1.3)", + "spaceace", "Space Ace (US Rev. A3)", + "spaceacea", "Space Ace (US Rev. A)", + "spaceacea2", "Space Ace (US Rev. A2)", + "spaceaceeuro", "Space Ace (European)", + "spaceat2", "Space Attack II (bootleg of Super Invaders)", + "spaceatt", "Space Attack (bootleg of Space Invaders)", + "spacebrd", "Space Bird (bootleg)", + "spacecho", "Space Echo (set 1)", + "spacecho2", "Space Echo (set 2)", + "spacecom", "Space Combat (bootleg of Space Invaders)", + "spacecr", "Space Cruiser", + "spacecty", "Space City", + "spacedem", "Space Demon", + "spacedx", "Space Invaders DX (US, v2.1)", + "spacedxj", "Space Invaders DX (Japan, v2.1)", + "spacedxo", "Space Invaders DX (Japan, v2.0)", + "spacefb", "Space Firebird (rev. 04-u)", + "spacefba", "Space Firebird (rev. 02-a)", + "spacefbb", "Space Firebird (bootleg)", + "spacefbe", "Space Firebird (rev. 03-e set 1)", + "spacefbe2", "Space Firebird (rev. 03-e set 2)", + "spacefbg", "Space Firebird (Gremlin)", + "spacefev", "Space Fever (New Ver.)", + "spacefevo", "Space Fever (Old Ver.)", + "spacefevo2", "Space Fever (Older Ver.)", + "spacefrt", "Space Fortress (CVS)", + "spaceftr", "Space Fortress (Zaccaria)", + "spaceg", "Space Guerrilla", + "spacegun", "Space Gun (World)", + "spacegunj", "Space Gun (Japan)", + "spacegunu", "Space Gun (US)", + "spacehaw", "Space Hawks", + "spaceint", "Space Intruder", + "spaceintj", "Space Intruder (Japan)", + "spaceinv", "Space Invaders", + "spacejam", "Space Jam", + "spacejmf", "Space Jam (France)", + "spacejmg", "Space Jam (Germany)", + "spacejmi", "Space Jam (Italy)", + "spacelnc", "Space Launcher", + "spacempr", "Space Empire (bootleg)", + "spaceod", "Space Odyssey (version 2)", + "spaceod2", "Space Odyssey (version 1)", + "spaceph", "Space Phantoms (bootleg of Ozma Wars)", + "spacepir", "Space Pirates v2.2", + "spaceplt", "Space Pilot", + "spacerng", "Space Ranger (bootleg of Space Invaders)", + "spaceshp", "Space Ship", + "spaceskr", "Space Seeker", + "spacetrk", "Space Trek (upright)", + "spacetrkc", "Space Trek (cocktail)", + "spacewar", "Space Wars", + "spacewin", "Scacco Matto / Space Win", + "spacewr3", "Space War Part 3", + "spacezap", "Space Zap", + "spacfury", "Space Fury (revision C)", + "spacfurya", "Space Fury (revision A)", + "spacfuryb", "Space Fury (revision B)", + "spacmiss", "Space Missile - Space Fighting Game", + "spacwalk", "Space Walk", + "spain82", "Spain '82", + "spang", "Super Pang (World 900914)", + "spangbl", "Super Pang (World 900914, bootleg)", + "spangj", "Super Pang (Japan 901023)", + "sparkman", "Spark Man (v2.0, set 1)", + "sparkmana", "Spark Man (v2.0, set 2)", + "sparkz", "Sparkz (prototype)", + "spartanx", "Spartan X (Japan)", + "spatter", "Spatter", + "spawn", "Spawn In the Demon's Hand (JPN, USA, EUR, ASI, AUS) (Rev B)", + "spbactn", "Super Pinball Action (US)", + "spbactnj", "Super Pinball Action (Japan)", + "spbactnp", "Super Pinball Action (prototype)", + "spcdrag", "Space Dragon (Moon Cresta bootleg, set 1)", + "spcdraga", "Space Dragon (Moon Cresta bootleg, set 2)", + "spceking", "Space King", + "spcenctr", "Space Encounters", + "spcewarl", "Space War (Leijac Corporation)", + "spcewars", "Space War (Sanritsu)", + "spcforc2", "Space Force (set 2)", + "spcforce", "Space Force (set 1)", + "spcfrcii", "Special Forces II", + "spcgambl", "Space Gambler", + "spcinv95", "Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5O 1995/06/14)", + "spcinv95u", "Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5A 1995/06/14)", + "spcinvdj", "Space Invaders DX (Ver 2.6J 1994/09/14) (F3 Version)", + "spcking2", "Space King 2", + "spclaser", "Space Laser", + "spclforc", "Special Forces", + "spclords", "Space Lords (rev C)", + "spclordsa", "Space Lords (rev A)", + "spclordsb", "Space Lords (rev B)", + "spclordsg", "Space Lords (rev A, German)", + "spcpostn", "Space Position (Japan)", + "spcrider", "Space Riders", + "spctbird", "Space Thunderbird", + "spdball", "Speed Ball - Contest at Neonworld (prototype)", + "spdcoin", "Speed Coin (prototype)", + "spdodgeb", "Super Dodge Ball (US)", + "speakesy", "Speakeasy", + "speakesy4p", "Speakeasy 4 Player", + "speakres", "Speak & Rescue", + "speakresb", "Speak & Rescue (bootleg)", + "spec2k", "Spectrum 2000 (Euro)", + "spec2kv", "Spectrum 2000 (vertical)", + "specforc", "Special Force", + "specfrce", "Special Forces Elite Training", + "spectar", "Spectar (revision 3)", + "spectar1", "Spectar (revision 1?)", + "spectra", "Spectra IV", + "spectrm", "Spectrum", + "spectrm4", "Spectrum (ver 4)", + "speedatk", "Speed Attack! (Japan)", + "speedbal", "Speed Ball", + "speeddrp", "Speed Drop (Ver. 1.06)", + "speeddrv", "Speed Driver", + "speedfrk", "Speed Freak", + "speedrcr", "Speed Racer", + "speedspn", "Speed Spin", + "speedup", "Speed Up (Version 1.20)", + "speglsht", "Super Eagle Shot", + "spellbnd", "Spellbound", + "spelunk2", "Spelunker II", + "spelunkr", "Spelunker", + "spelunkrj", "Spelunker (Japan)", + "spf2t", "Super Puzzle Fighter II Turbo (USA 960620)", + "spf2ta", "Super Puzzle Fighter II Turbo (Asia 960529)", + "spf2td", "Super Puzzle Fighter II Turbo (USA 960620 Phoenix Edition) (bootleg)", + "spf2th", "Super Puzzle Fighter II Turbo (Hispanic 960531)", + "spf2xj", "Super Puzzle Fighter II X (Japan 960531)", + "spf2xjd", "Super Puzzle Fighter II X (Japan 960531 Phoenix Edition) (bootleg)", + "spfghmk2", "Space Fighter Mark II (set 1)", + "spfghmk22", "Space Fighter Mark II (set 2)", + "spicaadv", "Spica Adventure (v2.03J)", + "spiceup", "Spice It Up (Konami Endeavour)", + "spidermn", "The Amazing Spider-Man", + "spiders", "Spiders (set 1)", + "spiders2", "Spiders (set 2)", + "spiders3", "Spiders (set 3)", + "spidman", "Spider-Man: The Videogame (World)", + "spidmanj", "Spider-Man: The Videogame (Japan)", + "spidmanu", "Spider-Man: The Videogame (US)", + "spielbud", "Spiel Bude (German)", + "spiero", "Super Pierrot (Japan)", + "spikeofe", "Spikeout Final Edition", + "spikeout", "Spikeout (Revision C)", + "spiker", "Spiker", + "spiker2", "Spiker (5/5/86)", + "spiker3", "Spiker (6/9/86)", + "spikes91", "1991 Spikes (Italian bootleg, set 1)", + "spikes91b", "1991 Spikes (Italian bootleg, set 2)", + "spinkick", "Hec's Spinkick", + "spinlbrk", "Spinal Breakers (World)", + "spinlbrkj", "Spinal Breakers (Japan)", + "spinlbrku", "Spinal Breakers (US)", + "spinmast", "Spin Master / Miracle Adventure", + "spinner", "Spinner", + "spirit", "Spirit", + "spitboss", "Super Pit Boss (9221-02A)", + "spk115it", "Super Poker (v115IT)", + "spk116it", "Super Poker (v116IT)", + "spkrbtl", "Spikers Battle (GDS-0005)", + "spkrform", "Super Poker (v100xD03) / Formosa", + "splash", "Splash! (Ver. 1.2 World)", + "splash10", "Splash! (Ver. 1.0 World)", + "splat", "Splat!", + "splatter", "Splatter House (World, new version (SH3))", + "splatter2", "Splatter House (World, old version (SH2))", + "splatterj", "Splatter House (Japan, SH1)", + "splitsec", "Split Second", + "splmastr", "Spell Master (Russia) (Atronic)", + "splndrbt", "Splendor Blast", + "spnchout", "Super Punch-Out!!", + "spnchoutj", "Super Punch-Out!! (Japan)", + "spooky", "Spooky Night 2nd Edition (Version 2.0.4)", + "spookyi", "Spooky (Italian speech)", + "spookyo", "Spooky Night (Version 1.0.1)", + "spookyp", "Spooky", + "spool3", "Super Pool III (English)", + "spool3i", "Super Pool III (I-Vics)", + "spool99", "Super Pool 99 (Version 0.36)", + "spool99a", "Super Pool 99 (Version 0.33)", + "spool99b", "Super Pool 99 (Version 0.31)", + "spool99c", "Super Pool 99 (Version 0.26)", + "spotty", "Spotty (Ver. 2.0.2)", + "sprbreak", "Spring Break", + "sprbreaks", "Spring Break (single ball game)", + "sprcros2", "Super Cross II (Japan, set 1)", + "sprcros2a", "Super Cross II (Japan, set 2)", + "sprglbpg", "Super Glob (Pac-Man hardware) (German bootleg)", + "sprglobp", "Super Glob (Pac-Man hardware)", + "springbd", "Springboard (bootleg of Circus)", + "springer", "Springer", + "sprint1", "Sprint 1", + "sprint2", "Sprint 2 (set 1)", + "sprint2a", "Sprint 2 (set 2)", + "sprint2h", "Sprint 2 (color kit, Italy)", + "sprint4", "Sprint 4 (set 1)", + "sprint4a", "Sprint 4 (set 2)", + "sprint8", "Sprint 8", + "sprint8a", "Sprint 8 (play tag & chase)", + "sprk_090", "South Park (0.90)", + "sprk_096", "South Park (0.96)", + "sprk_103", "South Park (1.03)", + "sprtauth", "Sports Authority", + "sprtjam", "Sports Jam (GDS-0003)", + "sprtmtch", "Sports Match", + "sprtshot", "Sports Shooting USA", + "spss4240", "S-Plus (SS4240) Coral Reef", + "spstn_l5", "Space Station (L-5)", + "spuzbobl", "Super Puzzle Bobble (V2.05O)", + "spuzboblj", "Super Puzzle Bobble (V2.04J)", + "spy", "S.P.Y. - Special Project Y (World ver. N)", + "spyhunt", "Spy Hunter", + "spyhunt2", "Spy Hunter II (rev 2)", + "spyhunt2a", "Spy Hunter II (rev 1)", + "spyhuntp", "Spy Hunter (Playtronic license)", + "spyhuntpr", "Spy Hunter (Spain, Recreativos Franco S.A. PCB)", + "spyhuntr", "Spy Hunter (Pinball)", + "spyu", "S.P.Y. - Special Project Y (US ver. M)", + "sqbert", "Faster, Harder, More Challenging Q*bert (prototype)", + "sqix", "Super Qix (World, Rev 2)", + "sqixb1", "Super Qix (bootleg set 1)", + "sqixb2", "Super Qix (bootleg set 2)", + "sqixr1", "Super Qix (World, Rev 1)", + "sqixu", "Super Qix (US)", + "squaitsa", "Squash (Itisa)", + "squash", "Squash (Ver. 1.0)", + "sraider", "Space Raider", + "srally2", "Sega Rally 2", + "srally2x", "Sega Rally 2 DX", + "srallyc", "Sega Rally Championship - TWIN (Revision C)", + "srallyca", "Sega Rally Championship - DX (Revision A)", + "srallycb", "Sega Rally Championship - TWIN (Revision B)", + "sranger", "Super Ranger (v2.0)", + "srangerb", "Super Ranger (older, bootleg)", + "srangern", "Super Ranger (older, NOVA license)", + "srangero", "Super Ranger (older)", + "srangerw", "Super Ranger (older, WDK license)", + "srdarwin", "Super Real Darwin (World)", + "srdarwinj", "Super Real Darwin (Japan)", + "srdmissn", "S.R.D. Mission", + "srmdb", "Sunset Riders (bootleg of Megadrive version)", + "srmp1", "Super Real Mahjong Part 1 (Japan)", + "srmp2", "Super Real Mahjong Part 2 (Japan)", + "srmp3", "Super Real Mahjong Part 3 (Japan)", + "srmp4", "Super Real Mahjong PIV (Japan)", + "srmp4o", "Super Real Mahjong PIV (Japan, older set)", + "srmp5", "Super Real Mahjong P5", + "srmp6", "Super Real Mahjong P6 (Japan)", + "srmp7", "Super Real Mahjong P7 (Japan)", + "srmvs", "Super Real Mahjong VS", + "srumbler", "The Speed Rumbler (set 1)", + "srumbler2", "The Speed Rumbler (set 2)", + "srumbler3", "The Speed Rumbler (set 3)", + "sryudens", "Mahjong Seiryu Densetsu (Japan, NM502)", + "ss2005", "Super Shanghai 2005 (GDL-0031)", + "ss2005a", "Super Shanghai 2005 (Rev A) (GDL-0031A)", + "ss_01", "Scared Stiff (D0.1R with sound rev.25)", + "ss_03", "Scared Stiff (0.3)", + "ss_12", "Scared Stiff (1.2)", + "ss_14", "Scared Stiff (1.4)", + "ss_15", "Scared Stiff (1.5)", + "ssanchan", "Sanrin San Chan (Japan)", + "sscandal", "Seishun Scandal (315-5132, Japan)", + "sscope", "Silent Scope (ver xxD, Ver 1.33)", + "sscope2", "Silent Scope 2", + "sscopea", "Silent Scope (ver xxA, Ver 1.00)", + "sscopeb", "Silent Scope (ver xxB, Ver 1.20)", + "sscopec", "Silent Scope (ver xxC, Ver 1.30)", + "sscopex", "Silent Scope EX (ver UAA)", + "ssf2", "Super Street Fighter II: The New Challengers (World 930911)", + "ssf2a", "Super Street Fighter II: The New Challengers (Asia 931005)", + "ssf2ar1", "Super Street Fighter II: The New Challengers (Asia 930914)", + "ssf2h", "Super Street Fighter II: The New Challengers (Hispanic 930911)", + "ssf2j", "Super Street Fighter II: The New Challengers (Japan 931005)", + "ssf2jr1", "Super Street Fighter II: The New Challengers (Japan 930911)", + "ssf2jr2", "Super Street Fighter II: The New Challengers (Japan 930910)", + "ssf2mdb", "Super Street Fighter II - The New Challengers (bootleg of Japanese MegaDrive version)", + "ssf2t", "Super Street Fighter II Turbo (World 940223)", + "ssf2ta", "Super Street Fighter II Turbo (Asia 940223)", + "ssf2tb", "Super Street Fighter II: The Tournament Battle (World 931119)", + "ssf2tbd", "Super Street Fighter II: The Tournament Battle (World 931119 Phoenix Edition) (bootleg)", + "ssf2tbh", "Super Street Fighter II: The Tournament Battle (Hispanic 931005)", + "ssf2tbj", "Super Street Fighter II: The Tournament Battle (Japan 930911)", + "ssf2tbr1", "Super Street Fighter II: The Tournament Battle (World 930911)", + "ssf2tu", "Super Street Fighter II Turbo (USA 940323)", + "ssf2tur1", "Super Street Fighter II Turbo (USA 940223)", + "ssf2u", "Super Street Fighter II: The New Challengers (USA 930911)", + "ssf2ud", "Super Street Fighter II: The New Challengers (USA 930911 Phoenix Edition) (bootleg)", + "ssf2xj", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", + "ssf2xjd", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", + "ssf2xjr", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", + "ssfindo", "See See Find Out", + "sshangha", "Super Shanghai Dragon's Eye (Japan)", + "sshanghab", "Super Shanghai Dragon's Eye (World, bootleg)", + "sshootep", "Sharpshooter", + "sshooter", "Sharpshooter (Rev 1.9)", + "sshooter11", "Sharpshooter (Rev 1.1)", + "sshooter12", "Sharpshooter (Rev 1.2)", + "sshooter17", "Sharpshooter (Rev 1.7)", + "sshootr2", "Sharp Shooter II", + "sshot", "Super Shot", + "sshtl_l7", "Space Shuttle (L-7)", + "sshtlzac", "Space Shuttle (Zaccaria)", + "sshuttle", "Space Shuttle (Taito)", + "sshuttle1", "Space Shuttle (Taito) (alternate set)", + "ssi", "Super Space Invaders '91 (World, Rev 1)", + "ssia", "Super Space Invaders '91 (World)", + "ssideki", "Super Sidekicks / Tokuten Ou", + "ssideki2", "Super Sidekicks 2 - The World Championship / Tokuten Ou 2 - real fight football (NGM-061)(NGH-061)", + "ssideki3", "Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - eikou e no michi", + "ssideki4", "The Ultimate 11 - The SNK Football Championship / Tokuten Ou - Honoo no Libero", + "ssingles", "Swinging Singles", + "ssipkr24", "SSI Poker (v2.4)", + "ssipkr30", "SSI Poker (v3.0)", + "ssipkr40", "SSI Poker (v4.0)", + "ssjkrpkr", "Southern Systems Joker Poker", + "sslam", "Super Slam (set 1)", + "sslama", "Super Slam (set 2)", + "ssmissin", "S.S. Mission", + "ssoldier", "Superior Soldiers (US)", + "ssozumo", "Syusse Oozumou (Japan)", + "sspac2k1", "Super Space 2001", + "sspacaho", "Space Attack / Head On", + "sspaceat", "Space Attack (upright set 1)", + "sspaceat2", "Space Attack (upright set 2)", + "sspaceat3", "Space Attack (upright set 3)", + "sspaceatc", "Space Attack (cocktail)", + "sspeedr", "Super Speed Race", + "sspiritj", "Scramble Spirits (Japan, Floppy DS3-5000-02-REV-A Based)", + "sspirits", "Scramble Spirits (World, Floppy Based)", + "sspirtfc", "Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c)", + "ssprint", "Super Sprint (rev 4)", + "ssprint1", "Super Sprint (rev 1)", + "ssprint3", "Super Sprint (rev 3)", + "ssprintf", "Super Sprint (French)", + "ssprintg", "Super Sprint (German, rev 2)", + "ssprintg1", "Super Sprint (German, rev 1)", + "ssprints", "Super Sprint (Spanish)", + "ssriders", "Sunset Riders (4 Players ver EAC)", + "ssriders2", "Sunset Riders 2 (bootleg 4 Players ver ADD)", + "ssridersabd", "Sunset Riders (2 Players ver ABD)", + "ssridersadd", "Sunset Riders (4 Players ver ADD)", + "ssridersb", "Sunset Riders (bootleg 4 Players ver ADD)", + "ssriderseaa", "Sunset Riders (4 Players ver EAA)", + "ssridersebc", "Sunset Riders (2 Players ver EBC)", + "ssridersebd", "Sunset Riders (2 Players ver EBD)", + "ssridersjac", "Sunset Riders (4 Players ver JAC)", + "ssridersjbd", "Sunset Riders (2 Players ver JBD)", + "ssridersuab", "Sunset Riders (4 Players ver UAB)", + "ssridersuac", "Sunset Riders (4 Players ver UAC)", + "ssridersubc", "Sunset Riders (2 Players ver UBC)", + "ssridersuda", "Sunset Riders (4 Players ver UDA)", + "ssrj", "Super Speed Race Junior (Japan)", + "sss", "Steep Slope Sliders (JUET 981110 V1.000)", + "sst", "Supersonic", + "sstar", "Super Star", + "sstar97", "Super Star '97 (version V153B)", + "sstarbtl", "Super Star Battle", + "sstarcrs", "Super Star Crest", + "sstingry", "Super Stingray (Japan)", + "sstrangr", "Space Stranger", + "sstrangr2", "Space Stranger 2", + "sstrike", "Super Strike Bowling", + "sstriker", "Sorcer Striker (set 1)", + "sstrikera", "Sorcer Striker (set 2)", + "sstrkfgt", "Sega Strike Fighter (Rev A)", + "ssvc_a26", "Secret Service (2.6)", + "ssvc_b26", "Secret Service (2.6 alternate sound)", + "st_game", "unknown pinball game", + "st_ohla", "Oh La La (Stella)", + "st_vulkn", "Vulkan (Stella)", + "stactics", "Space Tactics", + "stadhero", "Stadium Hero (Japan)", + "stadhr96", "Stadium Hero '96 (World, EAJ)", + "stadhr96j", "Stadium Hero '96 (Japan, EAD)", + "stagger1", "Stagger I (Japan)", + "stakwin", "Stakes Winner / Stakes Winner - GI kinzen seiha e no michi", + "stakwin2", "Stakes Winner 2", + "starblad", "Starblade (World)", + "starbladj", "Starblade (Japan)", + "starcas", "Star Castle (version 3)", + "starcas1", "Star Castle (older)", + "starcase", "Star Castle (Mottoeis)", + "starcasp", "Star Castle (prototype)", + "starcrus", "Star Cruiser", + "starfght", "Star Fighter", + "starfgmc", "Starfighter (Moon Cresta bootleg)", + "starfigh", "Star Fighter (v1)", + "starfir2", "Star Fire 2", + "starfire", "Star Fire (set 1)", + "starfirea", "Star Fire (set 2)", + "starfirp", "Star Fire", + "starforc", "Star Force", + "starforca", "Star Force (encrypted, set 2)", + "starforcb", "Star Force (encrypted, bootleg)", + "starforce", "Star Force (encrypted, set 1)", + "stargate", "Stargate", + "stargatp", "Stargate (Pinball)", + "stargatp1", "Stargate (rev.1)", + "stargatp2", "Stargate (rev.2)", + "stargatp3", "Stargate (rev.3)", + "stargatp4", "Stargate (rev.4)", + "starglad", "Star Gladiator Episode I: Final Crusade (USA 960627)", + "stargladj", "Star Gladiator Episode I: Final Crusade (Japan 960627)", + "stargld2", "Star Gladiator 2: Nightmare of Bilstein (Japan 980316)", + "stargod", "Star God", + "stargoda", "Star God (alternate sound)", + "stargrds", "Star Guards", + "stargzr", "Stargazer", + "starhawk", "Star Hawk", + "starhrcl", "Star Horse (client)", + "starhrct", "Star Horse (server)", + "starhrse", "Star Horse (big screens)", + "starhrsp", "Star Horse Progress (Rev A)", + "starjack", "Star Jacker (Sega)", + "starjacks", "Star Jacker (Stern Electronics)", + "starlstr", "Vs. Star Luster", + "starrace", "Star Race", + "starrkr", "Star Raker", + "stars", "Stars", + "starseek", "Doki Doki Idol Star Seeker (GDL-0005)", + "starshot", "Star Shooter", + "starshp1", "Starship 1", + "starshpp", "Starship 1 (prototype?)", + "starsldr", "Star Soldier: Vanishing Earth", + "starspnr", "Starspinner (Dutch/Nederlands)", + "starswep", "Star Sweep (Japan, STP1/VER.A)", + "startrek", "Star Trek", + "startrep", "Star Trek (Pinball)", + "startrgn", "Star Trigon (Japan, STT1 Ver.A)", + "startrip", "Star Trip", + "startrkd", "Star Trek (Defender bootleg)", + "startrp", "Starship Troopers", + "starw", "Star Wars (bootleg of Galaxy Wars, set 1)", + "starw1", "Star Wars (bootleg of Galaxy Wars, set 2)", + "starwarr", "Star Warrior", + "starwars", "Star Wars (rev 2)", + "starwars1", "Star Wars (rev 1)", + "starzan", "Super Tarzan (Italy, V100I)", + "statriv2", "Triv Two", + "statriv2v", "Triv Two (Vertical)", + "statriv4", "Triv Four", + "statusbj", "Status Black Jack (V1.0c)", + "stcc", "Sega Touring Car Championship", + "stcca", "Sega Touring Car Championship (Revision A)", + "stccb", "Sega Touring Car Championship (Revision B)", + "stdragon", "Saint Dragon (set 1)", + "stdragona", "Saint Dragon (set 2)", + "stealsee", "Steal See", + "steaser", "Strip Teaser (Italy, Ver. 1.22)", + "steeltal", "Steel Talons (rev 2)", + "steeltal1", "Steel Talons (rev 1)", + "steeltalg", "Steel Talons (German, rev 2)", + "steeltalp", "Steel Talons (prototype)", + "steelwkr", "Steel Worker", + "steeplec", "Steeplechase [TTL]", + "stellcas", "Stellar Castle (Elettronolo)", + "stellecu", "Stelle e Cubi (Italy)", + "step3", "Stepping 3 Superior", + "stepstag", "Stepping Stage Special", + "stera", "Steraranger (Moon Cresta bootleg)", + "stest", "Speed Test", + "stfight", "Street Fight (Germany)", + "stfighta", "Street Fight (bootleg?)", + "stg", "Strike Gunner S.T.G", + "stillcra", "Still Crazy", + "stinger", "Stinger", + "stinger2", "Stinger (prototype?)", + "stingray", "Stingray", + "stisub", "Treasure Bonus (Subsino, v1.6)", + "stk_sprs", "Strikes and Spares", + "stkclmns", "Stack Columns (World)", + "stkclmnsj", "Stack Columns (Japan)", + "stlforce", "Steel Force", + "stlwr_l2", "Stellar Wars (L-2)", + "stmblade", "Storm Blade (US)", + "stntcycl", "Stunt Cycle [TTL]", + "stocker", "Stocker (3/19/85)", + "stoffy", "Super Toffy", + "stoffyu", "Super Toffy (Unico license)", + "stompin", "Stompin' (4/4/86)", + "stoneage", "Stoneage (bootleg of Caveman Ninja)", + "stonebal", "Stone Ball (4 Players)", + "stonebal2", "Stone Ball (2 Players)", + "storming", "Storming Party / Riku Kai Kuu Saizensen", + "strahl", "Koutetsu Yousai Strahl (Japan set 1)", + "strahla", "Koutetsu Yousai Strahl (Japan set 2)", + "strapids", "Shooting the Rapids", + "stratab", "Strata Bowling (V3)", + "stratab1", "Strata Bowling (V1)", + "stratgys", "Strategy X (Stern Electronics)", + "stratgyx", "Strategy X", + "stratof", "Raiga - Strato Fighter (US)", + "stratvox", "Stratovox", + "stratvoxb", "Stratovox (bootleg)", + "strax_p7", "Star Trax (domestic prototype)", + "streakng", "Streaking (set 1)", + "streaknga", "Streaking (set 2)", + "streetg", "Street Games (Revision 4)", + "streetg2", "Street Games II (Revision 7C)", + "streetg2r5", "Street Games II (Revision 5)", + "streetgr3", "Street Games (Revision 3)", + "streetsm", "Street Smart (US version 2)", + "streetsm1", "Street Smart (US version 1)", + "streetsmj", "Street Smart (Japan version 1)", + "streetsmw", "Street Smart (World version 1)", + "stress", "Stress Busters (J 981020 V1.000)", + "strfbomb", "Strafe Bomb (bootleg of Scramble)", + "strhoop", "Street Hoop / Street Slam / Dunk Dream (DEM-004)(DEH-004)", + "strider", "Strider (USA, B-Board 89624B-2)", + "strider2", "Strider 2 (USA 991213)", + "strider2a", "Strider 2 (Asia 991213)", + "striderj", "Strider Hiryu (Japan)", + "striderjr", "Strider Hiryu (Japan Resale Ver.)", + "striderua", "Strider (USA, B-Board 89624B-3)", + "strik_l4", "Strike Master (L-4)", + "strike", "Strike", + "striker", "Striker", + "strikext", "Striker Xtreme (1.02)", + "striv", "Super Triv", + "strkfgtr", "Strike Fighter (World)", + "strkfgtrj", "Strike Fighter (Japan)", + "strkforc", "Strike Force (rev 1 02/25/91)", + "strknew", "Striker Xtreme (ARM7 Sound Board)", + "strkzone", "Strike Zone Baseball", + "strlink", "Strong Link (Russia) (Extrema)", + "strlt_l1", "Star Light (L-1)", + "strngsci", "Strange Science", + "strnskil", "Strength & Skill", + "strongx", "Strong X", + "strsphnx", "Star's Phoenix (Italian speech)", + "strtdriv", "Street Drivin' (prototype)", + "strtheat", "Street Heat", + "strvmstr", "Super Trivia Master", + "strxt_fr", "Striker Xtreme (France)", + "strxt_gr", "Striker Xtreme (Germany)", + "strxt_it", "Striker Xtreme (Italy)", + "strxt_sp", "Striker Xtreme (Spain)", + "strxt_uk", "Striker Xtreme (UK)", + "sttng_g7", "Star Trek: The Next Generation (LG-7)", + "sttng_l1", "Star Trek: The Next Generation (LX-1)", + "sttng_l2", "Star Trek: The Next Generation (LX-2)", + "sttng_l7", "Star Trek: The Next Generation (LX-7)", + "sttng_p5", "Star Trek: The Next Generation (P-5)", + "sttng_s7", "Star Trek: The Next Generation (LX-7) SP1", + "sttng_x7", "Star Trek: The Next Generation (LX-7 Special)", + "stunrun", "S.T.U.N. Runner (rev 6)", + "stunrun0", "S.T.U.N. Runner (rev 0)", + "stunrun2", "S.T.U.N. Runner (rev 2)", + "stunrun2e", "S.T.U.N. Runner (rev 2, Europe)", + "stunrun3", "S.T.U.N. Runner (rev 3)", + "stunrun3e", "S.T.U.N. Runner (rev 3, Europe)", + "stunrun4", "S.T.U.N. Runner (rev 4)", + "stunrun5", "S.T.U.N. Runner (rev 5)", + "stunrune", "S.T.U.N. Runner (rev 5, Europe)", + "stunrunj", "S.T.U.N. Runner (rev 7, Japan)", + "stunrunp", "S.T.U.N. Runner (upright prototype)", + "stuntair", "Stunt Air", + "stvbios", "ST-V Bios", + "stwr_102", "Star Wars (1.02)", + "stwr_103", "Star Wars (1.03)", + "stwr_a14", "Star Wars (Display Rev.1.04)", + "stwr_e12", "Star Wars (1.02 England)", + "stwr_g11", "Star Wars (1.01 Germany)", + "styphp", "Stunt Typhoon Plus", + "su2000", "SU2000", + "sub", "Submarine (Sigma)", + "subhunt", "Sub Hunter", + "submar", "Submarine (Midway)", + "subroc3d", "Subroc-3D", + "subs", "Subs", + "sucasino", "Super Casino", + "suchie3", "Idol Janshi Suchie-Pai 3 (JPN)", + "suchipi", "Idol Janshi Suchie-Pai Special (Japan)", + "suikoenb", "Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)", + "sukuinuf", "Quiz and Variety Suku Suku Inufuku 2 (IN2 Ver. A)", + "sultanw", "Sultan's Wish (Konami Endeavour)", + "sunaq", "SunA Quiz 6000 Academy (940620-6)", + "sundance", "Sundance", + "supbtime", "Super Burger Time (World, set 1)", + "supbtimea", "Super Burger Time (World, set 2)", + "supbtimej", "Super Burger Time (Japan)", + "supcrash", "Super Crash (bootleg of Head On)", + "supdrapo", "Super Draw Poker (set 1)", + "supdrapoa", "Super Draw Poker (set 2)", + "supdrapob", "Super Draw Poker (bootleg)", + "super21", "Super Twenty One", + "super9", "Super Nove (Playmark)", + "superabc", "Super ABC (Pac-Man multigame kit, Sep. 03 1999)", + "superabco", "Super ABC (Pac-Man multigame kit, Mar. 08 1999)", + "superbar", "Super Bar", + "superbik", "Superbike", + "superbon", "Agent Super Bond (Super Cobra conversion)", + "superbug", "Super Bug", + "superbwl", "Super Bowl (Version 16.03B)", + "superchs", "Super Chase - Criminal Termination (World)", + "superchsj", "Super Chase - Criminal Termination (Japan)", + "superchsp", "Super Chase - Criminal Termination (1992/10/26 20:24:29 CHASE 3 VER 1.1, prototype)", + "superchsu", "Super Chase - Criminal Termination (US)", + "supercrd", "Super Card (encrypted)", + "superdbl", "Super Double (French)", + "superdbz", "Super Dragon Ball Z (DB1 Ver. B)", + "superdix", "Super Dixieland (Bingo)", + "superdq", "Super Don Quix-ote (Long Scenes)", + "superdqa", "Super Don Quix-ote (Short Scenes, Alt)", + "superdqs", "Super Don Quix-ote (Short Scenes)", + "superg", "Super Galaxians (galaxiana hack)", + "supergm3", "Super Game III", + "supergx", "Super GX", + "superinv", "Super Invaders (bootleg set 1)", + "superman", "Superman (World)", + "supermanj", "Superman (Japan)", + "supermanu", "Superman (US)", + "supermap", "Superman (Pinball)", + "superpac", "Super Pac-Man", + "superpacm", "Super Pac-Man (Midway)", + "superspy", "The Super Spy (NGM-011)(NGH-011)", + "superten", "Super Ten V8.3", + "supertnk", "Super Tank", + "supertr2", "Super Triv II", + "supertr3", "Super Triv III", + "superwng", "Super Wing", + "superx", "Super-X (NTC)", + "superxm", "Super-X (Mitchell)", + "supjolly", "Super Jolly", + "suplup", "Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518)", + "supmodel", "Super Model", + "supnudg2", "Super Nudger II - P173 (Version 5.21)", + "suprball", "Super Ball (Version 1.3)", + "suprbowl", "Super Bowl", + "suprglob", "Super Glob", + "suprgolf", "Super Crowns Golf (Japan)", + "suprheli", "Super Heli (Super Cobra bootleg)", + "suprleag", "Super League (FD1094 317-0045)", + "suprloco", "Super Locomotive (Rev.A)", + "suprlocoo", "Super Locomotive", + "suprmatk", "Super Missile Attack (for rev 1)", + "suprmatkd", "Super Missile Attack (not encrypted)", + "suprmous", "Super Mouse", + "suprmrio", "Vs. Super Mario Bros. (set SM4-4 E)", + "suprmrioa", "Vs. Super Mario Bros. (set ?, harder)", + "suprmriobl", "Vs. Super Mario Bros. (bootleg with Z80, set 1)", + "suprmriobl2", "Vs. Super Mario Bros. (bootleg with Z80, set 2)", + "suprnova", "Super Nova", + "suprpick", "Super Picker", + "suprpokr", "Super Poker (Version 10.19S)", + "suprpokra", "Super Poker (Version 10.15S)", + "suprpokrb", "Super Poker (Version 10.10)", + "suprpool", "Super Pool (9743 rev.01)", + "suprridr", "Super Rider", + "suprslam", "From TV Animation Slam Dunk - Super Slams", + "suprstar", "Super Stars", + "suprtrio", "Super Trio", + "supxevs", "Vs. Super Xevious", + "suratk", "Surprise Attack (World ver. K)", + "suratka", "Surprise Attack (Asia ver. L)", + "suratkj", "Surprise Attack (Japan ver. M)", + "sureshop", "Sure Shot (Pinball)", + "sureshot", "Sure Shot", + "surfnsaf", "Surf'n Safari", + "surfplnt", "Surf Planet (Version 4.1)", + "surfplnt40", "Surf Planet (Version 4.0)", + "survarts", "Survival Arts (World)", + "survartsj", "Survival Arts (Japan)", + "survartsu", "Survival Arts (USA)", + "survival", "Survival", + "susume", "Susume! Taisen Puzzle-Dama (GV027 Japan 1.20)", + "sutapper", "Tapper (Suntory)", + "suzuk8h2", "Suzuka 8 Hours 2 (World, Rev B)", + "suzuk8h2j", "Suzuka 8 Hours 2 (Japan, Rev B)", + "suzuka8h", "Suzuka 8 Hours (World, Rev C)", + "suzuka8hj", "Suzuka 8 Hours (Japan, Rev B)", + "suzume", "Watashiha Suzumechan (Japan)", + "svc", "SNK vs. Capcom - SVC Chaos (NGM-2690)(NGH-2690)", + "svcboot", "SNK vs. Capcom - SVC Chaos (bootleg)", + "svcpcb", "SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1)", + "svcpcba", "SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 2)", + "svcplus", "SNK vs. Capcom - SVC Chaos Plus (bootleg set 1)", + "svcplusa", "SNK vs. Capcom - SVC Chaos Plus (bootleg set 2)", + "svcsplus", "SNK vs. Capcom - SVC Chaos Super Plus (bootleg)", + "svf", "Super Visual Football: European Sega Cup", + "svg", "S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201)", + "svgpcb", "S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05 S.V.G V100) (Japan, JAMMA PCB)", + "svolley", "Super Volleyball (Japan)", + "svolleybl", "Super Volleyball (bootleg)", + "svolleyk", "Super Volleyball (Korea)", + "svolleyu", "Super Volleyball (US)", + "svolly91", "Super Volley '91 (Japan)", + "svs", "Super Visual Soccer: Sega Cup (US)", + "swa", "Star Wars Arcade", + "swarm", "Swarm (bootleg?)", + "swat", "SWAT (315-5048)", + "swatpolc", "SWAT Police", + "swcourt", "Super World Court (World)", + "swcourtj", "Super World Court (Japan)", + "swe1pb", "Pinball 2000: Star Wars Episode 1", + "sweetgal", "Sweet Gal (Japan 850510 SWG 1-02)", + "sweetl", "Sweet Life (041220 World)", + "sweetl2", "Sweet Life 2 (071217 Russia)", + "sweetl2_2", "Sweet Life 2 (080320 World)", + "sweetl2_2a", "Sweet Life 2 (bootleg, 080320, banking address hack set 1)", + "sweetl2_2b", "Sweet Life 2 (bootleg, 080320, banking address hack set 2)", + "sweetl2_2c", "Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01)", + "sweetl2_2d", "Sweet Life 2 (bootleg, 080320, LOTTOGAME (I))", + "sweetl2_3", "Sweet Life 2 (090525 Lottery)", + "sweetl2_4", "Sweet Life 2 (090812 Entertainment)", + "sweetl_2", "Sweet Life (070412 Russia)", + "sweetla", "Sweet Life (bootleg, 041220, backdoor)", + "sweetlb", "Sweet Life (bootleg, 041220, banking address hack, changed version text)", + "swimmer", "Swimmer (set 1)", + "swimmera", "Swimmer (set 2)", + "swimmerb", "Swimmer (set 3)", + "swingin", "Swingin In The Green (Russia)", + "swisspkr", "Swiss Poker ('50 SG-.10', V2.5)", + "swrds_l2", "Swords of Fury (L-2)", + "sws", "Super World Stadium (Japan)", + "sws2000", "Super World Stadium 2000 (Japan, SS01/VER.A)", + "sws2001", "Super World Stadium 2001 (Japan, SS11/VER.A)", + "sws92", "Super World Stadium '92 (Japan)", + "sws92g", "Super World Stadium '92 Gekitouban (Japan)", + "sws93", "Super World Stadium '93 (Japan)", + "sws95", "Super World Stadium '95 (Japan)", + "sws96", "Super World Stadium '96 (Japan)", + "sws97", "Super World Stadium '97 (Japan)", + "sws98", "Super World Stadium '98 (Japan, SS81/VER.A)", + "sws99", "Super World Stadium '99 (Japan, SS91/VER.A3)", + "swthrt2v", "Sweet Hearts II (01J01986, Venezuela)", + "swtht2nz", "Sweet Hearts II (1VXFC5461, New Zealand)", + "swtril41", "Star Wars Trilogy (4.01)", + "swtril43", "Star Wars Trilogy (4.03)", + "swtrilgy", "Star Wars Trilogy (Revision A)", + "swtrilgya", "Star Wars Trilogy", + "sxevious", "Super Xevious", + "sxeviousj", "Super Xevious (Japan)", + "sxyreac2", "Pachinko Sexy Reaction 2 (Japan)", + "sxyreact", "Pachinko Sexy Reaction (Japan)", + "sys1test", "System 1 Test prom", + "sys246", "System 246 BIOS", + "sys256", "System 256 BIOS", + "sys573", "System 573 BIOS", + "syvalion", "Syvalion (Japan)", + "syvalionp", "Syvalion (World, prototype)", + "szaxxon", "Super Zaxxon (315-5013)", + "szone_l2", "Strike Zone (Shuffle) (L-2)", + "szone_l5", "Strike Zone (Shuffle) (L-5)", + "t2_l2", "Terminator 2: Judgment Day (L-2)", + "t2_l3", "Terminator 2: Judgment Day (L-3)", + "t2_l4", "Terminator 2: Judgment Day (L-4)", + "t2_l6", "Terminator 2: Judgment Day (L-6)", + "t2_l8", "Terminator 2: Judgment Day (L-8)", + "t2_p2f", "Terminator 2: Judgment Day (P-2F) Profanity", + "t3new", "Terminator 3: Rise of the Machines (ARM7 Sound Board)", + "tacscan", "Tac/Scan", + "tactcian", "Tactician (set 1)", + "tactcian2", "Tactician (set 2)", + "taf_h4", "The Addams Family (H-4)", + "taf_l1", "The Addams Family (L-1)", + "taf_l2", "The Addams Family (L-2)", + "taf_l3", "The Addams Family (L-3)", + "taf_l4", "The Addams Family (L-4)", + "taf_l5", "The Addams Family (L-5)", + "taf_l6", "The Addams Family (L-6)", + "taf_l7", "The Addams Family (Prototype L-5) (L-7)", + "taf_p2", "The Addams Family (Prototype) (P-2)", + "tafg_h3", "The Addams Family Special Collectors Edition (H-3)", + "tafg_la2", "The Addams Family Special Collectors Edition (LA-2)", + "tafg_la3", "The Addams Family Special Collectors Edition (LA-3)", + "tafg_lx3", "The Addams Family Special Collectors Edition Gold (LX-3)", + "tagteam", "Tag Team Wrestling", + "tagteamp", "Tag-Team Wrestling", + "tagteamp2", "Tag-Team Wrestling (rev.2)", + "taiko10", "Taiko No Tatsujin 10 (T101001-NA-A)", + "taiko9", "Taiko No Tatsujin 9 (TK91001-NA-A)", + "tail2nos", "Tail to Nose - Great Championship", + "tailg", "Tailgunner", + "taitest", "Taito Test Fixture", + "taitofx1", "Taito FX1", + "taitogn", "Taito GNET", + "taitotz", "Type Zero BIOS", + "taiwanmb", "Taiwan Mahjong [BET] (Japan 881208)", + "tajmah", "Tajmahal (Russia) (Atronic)", + "take5", "Take 5 [TTL]", + "takefive", "Take Five", + "takoron", "Noukone Puzzle Takoron (GDL-0042)", + "talbot", "Talbot", + "tangtang", "Tang Tang (ver. 0526, 26/05/2000)", + "tank", "Tank/Tank II [TTL]", + "tank8", "Tank 8 (set 1)", + "tank8a", "Tank 8 (set 2)", + "tank8b", "Tank 8 (set 3)", + "tank8c", "Tank 8 (set 4)", + "tank8d", "Tank 8 (set 5)", + "tankbatl", "Tank Battle (prototype rev. 4/21/92)", + "tankbatt", "Tank Battalion", + "tankbattb", "Tank Battalion (bootleg)", + "tankbust", "Tank Busters", + "tankfrce", "Tank Force (US, 2 Player)", + "tankfrce4", "Tank Force (US, 4 Player)", + "tankfrcej", "Tank Force (Japan)", + "tantr", "Puzzle & Action: Tant-R (Japan)", + "tantrbl", "Puzzle & Action: Tant-R (Japan) (bootleg set 1)", + "tantrbl2", "Puzzle & Action: Tant-R (Japan) (bootleg set 2)", + "tantrbl3", "Puzzle & Action: Tant-R (Japan) (bootleg set 3)", + "tantrkor", "Puzzle & Action: Tant-R (Korea)", + "taotaido", "Tao Taido (set 1)", + "taotaidoa", "Tao Taido (set 2)", + "tapatune", "Tap a Tune", + "tapper", "Tapper (Budweiser, set 1)", + "tappera", "Tapper (Budweiser, set 2)", + "targ", "Targ", + "targc", "Targ (cocktail?)", + "targeth", "Target Hits (ver 1.1)", + "targetha", "Target Hits (ver 1.0)", + "tarzan", "Tarzan (V109C)", + "tarzana", "Tarzan (V107)", + "tattack", "Time Attacker", + "tattass", "Tattoo Assassins (US prototype)", + "tattassa", "Tattoo Assassins (Asia prototype)", + "taurs_l1", "Taurus (Shuffle) (L-1)", + "taxi_l3", "Taxi (Marilyn) (L-3)", + "taxi_l4", "Taxi (Lola) (L-4)", + "taxi_lg1", "Taxi (Marilyn) (L-1) Germany", + "taxidriv", "Taxi Driver", + "tazmani2", "Tazz-Mania (set 2, alt hardware)", + "tazmania", "Tazz-Mania (set 1)", + "tazzmang", "Tazz-Mania (bootleg on Galaxian hardware)", + "tblkkuzu", "The Block Kuzushi (Japan)", + "tbowl", "Tecmo Bowl (World)", + "tbowlj", "Tecmo Bowl (Japan)", + "tbowlp", "Tecmo Bowl (World, prototype?)", + "tbyahhoo", "Twin Bee Yahhoo! (ver JAA)", + "tceptor", "Thunder Ceptor", + "tceptor2", "Thunder Ceptor II", + "tcl", "Taiwan Chess Legend", + "tcobra2", "Twin Cobra II (Ver 2.1O 1995/11/30)", + "tcobra2u", "Twin Cobra II (Ver 2.1A 1995/11/30)", + "tdawg_l1", "Top Dawg (Shuffle) (L-1)", + "tdfever", "TouchDown Fever (US)", + "tdfever2", "TouchDown Fever 2", + "tdfeverj", "TouchDown Fever (Japan)", + "tdoboon", "Taihou de Doboon", + "tdpgal", "Triple Draw Poker", + "tdragon", "Thunder Dragon (9th Jan. 1992)", + "tdragon1", "Thunder Dragon (4th Jun. 1991)", + "tdragon2", "Thunder Dragon 2 (9th Nov. 1993)", + "tdragon2a", "Thunder Dragon 2 (1st Oct. 1993)", + "tdragonb", "Thunder Dragon (bootleg)", + "tduno", "Touch de Uno! / Unou Nouryoku Check Machine", + "tduno2", "Touch de Uno! 2", + "te0144", "Puzzle Bobble (Italian Gambling Game)", + "teamqb", "John Elway's Team Quarterback (set 1)", + "teamqb2", "John Elway's Team Quarterback (set 2)", + "techbowl", "Technical Bowling (J 971212 V1.000)", + "techromn", "Tech Romancer (Euro 980914)", + "techromnu", "Tech Romancer (USA 980914)", + "tecmowcm", "Tecmo World Cup Millennium (Japan)", + "teddybb", "TeddyBoy Blues (315-5115, New Ver.)", + "teddybbo", "TeddyBoy Blues (315-5115, Old Ver.)", + "teddybbobl", "TeddyBoy Blues (Old Ver. bootleg)", + "teedoff", "Tee'd Off (Japan)", + "teedoffp", "Tee'd Off", + "teedoffp1", "Tee'd Off (rev.1)", + "teedoffp3", "Tee'd Off (rev.3)", + "teetert", "Teeter Torture (prototype)", + "tehkanwc", "Tehkan World Cup (set 1)", + "tehkanwcb", "Tehkan World Cup (set 2, bootleg?)", + "tehkanwcc", "Tehkan World Cup (set 3, bootleg)", + "tekipaki", "Teki Paki", + "tekken", "Tekken (World, TE4/VER.C)", + "tekken2", "Tekken 2 Ver.B (US, TES3/VER.D)", + "tekken2aa", "Tekken 2 (Asia, TES2/VER.A)", + "tekken2ab", "Tekken 2 Ver.B (Asia, TES2/VER.B)", + "tekken2jb", "Tekken 2 Ver.B (Japan, TES1/VER.B)", + "tekken2jc", "Tekken 2 Ver.B (Japan, TES1/VER.C)", + "tekken2ub", "Tekken 2 Ver.B (US, TES3/VER.B)", + "tekken3", "Tekken 3 (Japan, TET1/VER.E1)", + "tekken3aa", "Tekken 3 (Asia, TET2/VER.A)", + "tekken3ab", "Tekken 3 (Asia, TET2/VER.B)", + "tekken3ae", "Tekken 3 (Asia, TET2/VER.E1)", + "tekken3ja", "Tekken 3 (Japan, TET1/VER.A)", + "tekken3ua", "Tekken 3 (US, TET3/VER.A)", + "tekken3ud", "Tekken 3 (US, TET3/VER.D)", + "tekken4", "Tekken 4 (TEF3 Ver. C)", + "tekken4a", "Tekken 4 (TEF2 Ver. A)", + "tekken4b", "Tekken 4 (TEF1 Ver. A)", + "tekken4c", "Tekken 4 (TEF1 Ver. C)", + "tekken51", "Tekken 5.1 (TE51 Ver. B)", + "tekkenab", "Tekken (Asia, TE2/VER.B)", + "tekkenac", "Tekken (Asia, TE2/VER.C)", + "tekkenjb", "Tekken (Japan, TE1/VER.B)", + "tektagt", "Tekken Tag Tournament (US, TEG3/VER.C1)", + "tektagtac", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", + "tektagtac1", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", + "tektagtja", "Tekken Tag Tournament (Japan, TEG1/VER.A3)", + "tektagtjb", "Tekken Tag Tournament (Japan, TEG1/VER.B)", + "tektagtjc1", "Tekken Tag Tournament (Japan, TEG1/VER.C1)", + "tektagtub", "Tekken Tag Tournament (US, TEG3/VER.B)", + "teljan", "Tel Jan", + "telmahjn", "Telephone Mahjong (Japan 890111)", + "tempest", "Tempest (rev 3, Revised Hardware)", + "tempest1", "Tempest (rev 1)", + "tempest1r", "Tempest (rev 1, Revised Hardware)", + "tempest2", "Tempest (rev 2)", + "tempest3", "Tempest (rev 3)", + "temptube", "Tempest Tubes", + "tenballs", "Ten Balls (Ver 1.05)", + "tengai", "Tengai (World)", + "tengaij", "Sengoku Blade: Sengoku Ace Episode II / Tengai", + "tenkai", "Mahjong Tenkaigen", + "tenkai2b", "Mahjong Tenkaigen Part 2 (bootleg)", + "tenkaibb", "Mahjong Tenkaigen (bootleg b)", + "tenkaicb", "Mahjong Tenkaigen (bootleg c)", + "tenkaid", "Mahjong Tenkaigen (set 1)", + "tenkaie", "Mahjong Tenkaigen (set 2)", + "tenkomor", "Tenkomori Shooting (Asia, TKM2/VER.A1)", + "tenkomorja", "Tenkomori Shooting (Japan, TKM1/VER.A1)", + "tenpindx", "Ten Pin Deluxe", + "tenspot", "Ten Spot", + "tenthdeg", "Tenth Degree (prototype)", + "tenup", "Ten Up (compendium 17)", + "tenup3", "Ten Up (compendium 3)", + "terabrst", "Teraburst (1998/07/17 ver UEL)", + "terabrsta", "Teraburst (1998/02/25 ver AAA)", + "term2", "Terminator 2 - Judgment Day (rev LA4 08/03/92)", + "term2la1", "Terminator 2 - Judgment Day (rev LA1 11/01/91)", + "term2la2", "Terminator 2 - Judgment Day (rev LA2 12/09/91)", + "term2la3", "Terminator 2 - Judgment Day (rev LA3 03/27/92)", + "term3", "Terminator 3: Rise of the Machines (4.00)", + "term3_205", "Terminator 3: Rise of the Machines (2.05)", + "term3f", "Terminator 3: Rise of the Machines (4.00 France)", + "term3f_205", "Terminator 3: Rise of the Machines (2.05 France)", + "term3g", "Terminator 3: Rise of the Machines (4.00 Germany)", + "term3i", "Terminator 3: Rise of the Machines (4.00 Italy)", + "term3i_205", "Terminator 3: Rise of the Machines (2.05 Italy)", + "term3l", "Terminator 3: Rise of the Machines (4.00 Spain)", + "term3l_205", "Terminator 3: Rise of the Machines (2.05 Spain)", + "terracre", "Terra Cresta (YM3526 set 1)", + "terracrea", "Terra Cresta (YM3526 set 3)", + "terracren", "Terra Cresta (YM2203)", + "terracreo", "Terra Cresta (YM3526 set 2)", + "terraf", "Terra Force", + "terrafb", "Terra Force (Japan bootleg set 2)", + "terrafj", "Terra Force (Japan)", + "terrafjb", "Terra Force (Japan bootleg with additional Z80)", + "terrafu", "Terra Force (US)", + "tesorone", "Tesorone Dell'Isola (Italy, v2.41)", + "tesorone230", "Tesorone Dell'Isola (Italy, v2.30)", + "tesorone240", "Tesorone Dell'Isola (Italy, v2.40)", + "tetfight", "Tetris Fighters", + "tetkiwam", "Tetris Kiwamemichi (GDL-0020)", + "tetrbx", "Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006)", + "tetris", "Tetris (set 4, Japan, System 16A, FD1094 317-0093)", + "tetris1", "Tetris (set 1, Japan, System 16B, FD1094 317-0091)", + "tetris2", "Tetris (set 2, Japan, System 16B, FD1094 317-0092)", + "tetris3", "Tetris (set 3, Japan, System 16A, FD1094 317-0093a)", + "tetrisbl", "Tetris (bootleg)", + "tetriskr", "Tetris (bootleg of Mirrorsoft PC-XT Tetris version)", + "tetrisp", "Tetris Plus", + "tetrisp2", "Tetris Plus 2 (World)", + "tetrisp2j", "Tetris Plus 2 (Japan, V2.2)", + "tetrisp2ja", "Tetris Plus 2 (Japan, V2.1)", + "tetrisse", "Tetris (Japan, System E)", + "tetrist", "Tetris (Japan, Taito B-System, Nastar Conversion Kit)", + "tetrista", "Tetris (Japan, Taito B-System, Master of Weapon Conversion Kit)", + "tetristh", "Tetris (Japan, Taito H-System)", + "tetrsark", "Tetris (D.R. Korea)", + "tf95_12", "WPC 95 Test Fixture (1.2)", + "tfa_13", "WPC Test Fixture: Alphanumeric (1.3)", + "tfdmd_l3", "WPC Test Fixture: DMD (L-3)", + "tfight", "Title Fight", + "tfrceac", "Thunder Force AC", + "tfrceacb", "Thunder Force AC (bootleg)", + "tfrceacj", "Thunder Force AC (Japan)", + "tfs_12", "WPC Test Fixture: Security (1.2)", + "tftc_104", "Tales From the Crypt (1.04 Spain)", + "tftc_200", "Tales From the Crypt (2.00)", + "tftc_300", "Tales From the Crypt (3.00)", + "tftc_302", "Tales From the Crypt (3.02 Dutch)", + "tftc_303", "Tales From the Crypt (3.03)", + "tfupdate", "Triforce DIMM Updater (GDT-0011)", + "tgm2", "Tetris the Absolute The Grand Master 2", + "tgm2p", "Tetris the Absolute The Grand Master 2 Plus", + "tgmj", "Tetris The Grand Master (Japan 980710)", + "tgtball", "Target Ball (Nude)", + "tgtballa", "Target Ball", + "tgtpanic", "Target Panic", + "thaiprin", "Thai Princess (30127721, Malaysia)", + "tharrier", "Task Force Harrier", + "tharrieru", "Task Force Harrier (US?)", + "thayers", "Thayer's Quest (set 1)", + "thayersa", "Thayer's Quest (set 2)", + "thedeep", "The Deep (Japan)", + "thedrink", "The Drink", + "theend", "The End", + "theendb", "The End (bootleg?)", + "theends", "The End (Stern Electronics)", + "thegames", "The Games", + "theglad", "The Gladiator / Road of the Sword / Shen Jian (M68k label V101) (ARM label V107, ROM 06/06/03 SHEN JIAN V107)", + "theglad100", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN)", + "theglad101", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN)", + "thegladpcb", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB)", + "theglob", "The Glob", + "theglob2", "The Glob (earlier)", + "theglob3", "The Glob (set 3)", + "theglobp", "The Glob (Pac-Man hardware)", + "thegrid", "The Grid (version 1.2)", + "thegrida", "The Grid (version 1.1)", + "thehand", "The Hand", + "thehustl", "The Hustler (Japan, program code M)", + "thehustlj", "The Hustler (Japan, program code J)", + "themj", "The Mah-jong (Japan)", + "thenanpa", "The Nanpa (Japan)", + "thepit", "The Pit", + "thepitj", "The Pit (Japan)", + "thepitm", "The Pit (bootleg on Moon Quasar hardware)", + "thepitu1", "The Pit (US set 1)", + "thepitu2", "The Pit (US set 2)", + "theroes", "Thunder Heroes", + "thetogyu", "The Togyu (315-5065, Japan)", + "thief", "Thief", + "thndblst", "Thunder Blaster (Japan)", + "thndbolt", "Thunderbolt", + "thndrbld", "Thunder Blade (upright, FD1094 317-0056)", + "thndrbld1", "Thunder Blade (deluxe/standing, unprotected)", + "thndrx2", "Thunder Cross II (World)", + "thndrx2a", "Thunder Cross II (Asia)", + "thndrx2j", "Thunder Cross II (Japan)", + "thndzone", "Thunder Zone (World, Rev 1)", + "thndzone4", "Thunder Zone (World 4 Players)", + "thndzonea", "Thunder Zone (World)", + "thndzonej", "Thunder Zone (Japan)", + "thoop", "Thunder Hoop (Ver. 1)", + "thoop2", "TH Strikes Back", + "thrild2", "Thrill Drive 2 (ver EBB)", + "thrild2a", "Thrill Drive 2 (ver AAA)", + "thrild2c", "Thrill Drive 2 (ver EAA)", + "thrilld", "Thrill Drive (JAE)", + "thrilldae", "Thrill Drive (EAA)", + "thrilldb", "Thrill Drive (JAB)", + "thund_p1", "Thunderball (P-1)", + "thunderh", "Operation Thunder Hurricane (ver EAA)", + "thunderhu", "Operation Thunder Hurricane (ver UAA)", + "thunderj", "ThunderJaws (rev 3)", + "thunderja", "ThunderJaws (rev 2)", + "thunderl", "Thunder & Lightning", + "thunderlbl", "Thunder & Lightning (bootleg with Tetris sound)", + "thunderx", "Thunder Cross (set 1)", + "thunderxa", "Thunder Cross (set 2)", + "thunderxb", "Thunder Cross (set 3)", + "thunderxj", "Thunder Cross (Japan)", + "thundfox", "Thunder Fox (World)", + "thundfoxj", "Thunder Fox (Japan)", + "thundfoxu", "Thunder Fox (US)", + "thunt", "Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)", + "thuntk", "Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)", + "tickee", "Tickee Tickats", + "tictac", "Tic Tac Trivia (6221-23, U5-0C Horizontal)", + "tictacv", "Tic Tac Trivia (6221-22, U5-0 Vertical)", + "tigerh", "Tiger Heli (US)", + "tigerhb1", "Tiger Heli (bootleg set 1)", + "tigerhb2", "Tiger Heli (bootleg set 2)", + "tigerhb3", "Tiger Heli (bootleg set 3)", + "tigerhj", "Tiger Heli (Japan)", + "tigeroad", "Tiger Road (US)", + "tigeroadb", "Tiger Road (US bootleg)", + "tigerrag", "Tiger Rag", + "tighook", "Tiger Hook (Version 2.1E Dual)", + "tighookc1", "Tiger Hook (Version 2.1R, set 1)", + "tighookc2", "Tiger Hook (Version 2.0LT, set 1)", + "tighookd1", "Tiger Hook (Version 2.1R, set 2)", + "tighookd2", "Tiger Hook (Version 2.0LT, set 2)", + "tighooko", "Tiger Hook (Version 1.7XT)", + "tighooko2", "Tiger Hook (Version 1.7)", + "tighookv1", "Tiger Hook (Version 2.1R Dual)", + "tighookv2", "Tiger Hook (Version 2.0LT Dual)", + "timber", "Timber", + "time2000", "Time 2000", + "timecris", "Time Crisis (Rev. TS2 Ver.B)", + "timecrisa", "Time Crisis (Rev. TS2 Ver.A)", + "timecrs2", "Time Crisis II (TSS3 Ver. B)", + "timecrs2v2b", "Time Crisis II (TSS2 Ver. B)", + "timecrs2v4a", "Time Crisis II (TSS4 Ver. A)", + "timecrs3", "Time Crisis 3 (TST1)", + "timecrs3e", "Time Crisis 3 (TST2 Ver. A)", + "timefgtr", "Time Fighter (Time Pilot conversion on Galaxian hardware)", + "timekill", "Time Killers (v1.32)", + "timekill121", "Time Killers (v1.21)", + "timekill131", "Time Killers (v1.31)", + "timelimt", "Time Limit", + "timeline", "Time Line", + "timeplt", "Time Pilot", + "timeplta", "Time Pilot (Atari)", + "timepltc", "Time Pilot (Centuri)", + "timescan", "Time Scanner (set 2, System 16B)", + "timescan1", "Time Scanner (set 1, System 16A, FD1089B 317-0024)", + "timesold", "Time Soldiers (US Rev 3)", + "timesold1", "Time Soldiers (US Rev 1)", + "timetrv", "Time Traveler", + "timetunl", "Time Tunnel", + "tinklpit", "Tinkle Pit (Japan)", + "tinstar", "The Tin Star (set 1)", + "tinstar2", "The Tin Star (set 2)", + "tinv2650", "The Invaders", + "tiptop", "Tip Top (3 board stack)", + "tisland", "Treasure Island", + "tisub", "Treasure Island (Subsino, set 1)", + "tisuba", "Treasure Island (Subsino, set 2)", + "titan", "Titan", + "titan1", "Titan (alternate set)", + "titanic", "Titanic (Coin dropper)", + "titlef", "Title Fight (World)", + "titlefj", "Title Fight (Japan)", + "titlefu", "Title Fight (US)", + "tjsb", "Mahjong Tian Jiang Shen Bing (V137C)", + "tjumpman", "Tobikose! Jumpman", + "tkdensho", "Toukidenshou - Angel Eyes (VER. 960614)", + "tkdenshoa", "Toukidenshou - Angel Eyes (VER. 960427)", + "tkmmpzdm", "Tokimeki Memorial Taisen Puzzle-dama (ver JAB)", + "tknight", "Tecmo Knight", + "tkoboxng", "Vs. T.K.O. Boxing", + "tm", "Touchmaster (v3.00 Euro)", + "tm2k", "Touchmaster 2000 Plus (v4.63 Standard)", + "tm2ka", "Touchmaster 2000 (v4.02 Standard)", + "tm2kb", "Touchmaster 2000 (v4.00 Standard)", + "tm3k", "Touchmaster 3000 (v5.02 Standard)", + "tm3ka", "Touchmaster 3000 (v5.01 Standard)", + "tm4k", "Touchmaster 4000 (v6.03 Standard)", + "tm4ka", "Touchmaster 4000 (v6.02 Standard)", + "tm4kb", "Touchmaster 4000 (v6.01 Standard)", + "tm4kca", "Touchmaster 4000 (v6.02 California)", + "tm4kmn", "Touchmaster 4000 (v6.01 Minnesota)", + "tm4knj", "Touchmaster 4000 (v6.03 New Jersey)", + "tm5k", "Touchmaster 5000 (v7.10 Standard)", + "tm5ka", "Touchmaster 5000 (v7.01 Standard)", + "tm5kca", "Touchmaster 5000 (v7.10 California)", + "tm5kmn", "Touchmaster 5000 (v7.10 Minnesota)", + "tm7k", "Touchmaster 7000 (v8.04 Standard)", + "tm7ka", "Touchmaster 7000 (v8.00 Standard)", + "tm7keval", "Touchmaster 7000 (v8.1X Evaluation)", + "tm7kmn", "Touchmaster 7000 (v8.04 Minnesota)", + "tm7kmna", "Touchmaster 7000 (v8.00 Minnesota)", + "tm7knj", "Touchmaster 7000 (v8.05 New Jersey)", + "tm8k", "Touchmaster 8000 (v9.04 Standard)", + "tm8k902", "Touchmaster 8000 (v9.02 Standard)", + "tmac_a18", "Time Machine (1.8)", + "tmac_a24", "Time Machine (2.4)", + "tmachzac", "Time Machine (Zaccaria)", + "tmachzacf", "Time Machine (Zaccaria, French speech)", + "tmachzacg", "Time Machine (Zaccaria, German speech)", + "tmdo", "Touchmaster (v2.2-01 Standard)", + "tmek", "T-MEK (v5.1, The Warlords)", + "tmek20", "T-MEK (v2.0, prototype)", + "tmek44", "T-MEK (v4.4)", + "tmek45", "T-MEK (v4.5)", + "tmek51p", "T-MEK (v5.1, prototype)", + "tmfnt_l5", "Time Fantasy (L-5)", + "tmht", "Teenage Mutant Hero Turtles (UK 4 Players, set 1)", + "tmht22pe", "Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA)", + "tmht2p", "Teenage Mutant Hero Turtles (UK 2 Players, set 1)", + "tmht2pa", "Teenage Mutant Hero Turtles (UK 2 Players, set 2)", + "tmhta", "Teenage Mutant Hero Turtles (UK 4 Players, set 2)", + "tmmjprd", "Tokimeki Mahjong Paradise - Dear My Love", + "tmnt", "Teenage Mutant Ninja Turtles (World 4 Players)", + "tmnt2", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", + "tmnt22pu", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA)", + "tmnt2a", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", + "tmnt2pj", "Teenage Mutant Ninja Turtles (Japan 2 Players)", + "tmnt2po", "Teenage Mutant Ninja Turtles (Oceania 2 Players)", + "tmnt_103", "Teenage Mutant Ninja Turtles (1.03)", + "tmnt_104", "Teenage Mutant Ninja Turtles (1.04)", + "tmntj", "Teenage Mutant Ninja Turtles (Japan 4 Players)", + "tmntu", "Teenage Mutant Ninja Turtles (US 4 Players, set 1)", + "tmntua", "Teenage Mutant Ninja Turtles (US 4 Players, set 2)", + "tmosh", "Tokimeki Memorial Oshiete Your Heart (GQ673 JAA)", + "tmoshs", "Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA)", + "tmoshsp", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB)", + "tmoshspa", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAA)", + "tmpdoki", "Tokimeki Mahjong Paradise - Doki Doki Hen", + "tmspoker", "unknown TMS9980 Poker Game", + "tmwrp_l2", "Time Warp (L-2)", + "tmwrp_t2", "Time Warp (T-2)", + "tndrcade", "Thundercade / Twin Formation", + "tndrcadej", "Tokusyu Butai U.A.G. (Japan)", + "tnextspc", "The Next Space (set 1)", + "tnextspc2", "The Next Space (set 2)", + "tnextspcj", "The Next Space (Japan)", + "tnk3", "T.N.K III (US)", + "tnk3j", "T.A.N.K (Japan)", + "tnzs", "The NewZealand Story (World, new version) (newer PCB)", + "tnzsj", "The NewZealand Story (Japan, new version) (newer PCB)", + "tnzsjo", "The NewZealand Story (Japan, old version) (older PCB)", + "tnzso", "The NewZealand Story (World, old version) (older PCB)", + "tnzsop", "The NewZealand Story (World, prototype?) (older PCB)", + "todruaga", "The Tower of Druaga (New Ver.)", + "todruagao", "The Tower of Druaga (Old Ver.)", + "todruagas", "The Tower of Druaga (Sidam)", + "toffy", "Toffy", + "togenkyo", "Tougenkyou (Japan 890418)", + "toggle", "Toggle (prototype)", + "toki", "Toki (World, set 1)", + "tokia", "Toki (World, set 2)", + "tokib", "Toki (Datsu bootleg)", + "tokimbsj", "Tokimeki Bishoujo [BET] (Japan)", + "tokio", "Tokio / Scramble Formation (newer)", + "tokiob", "Tokio / Scramble Formation (bootleg)", + "tokioo", "Tokio / Scramble Formation (older)", + "tokiou", "Tokio / Scramble Formation (US)", + "tokisens", "Toki no Senshi - Chrono Soldier", + "tokiu", "Toki (US, set 1)", + "tokiua", "Toki (US, set 2)", + "tokkae", "Taisen Tokkae-dama (ver JAA)", + "tokyocop", "Tokyo Cop (Italy)", + "tokyogal", "Tokyo Gal Zukan (Japan)", + "tokyowar", "Tokyo Wars (Rev. TW2 Ver.A)", + "tom_06", "Theatre Of Magic (0.6a)", + "tom_10f", "Theatre Of Magic (1.0 French)", + "tom_12", "Theatre Of Magic (1.2X)", + "tom_13", "Theatre Of Magic (1.3X)", + "tom_14h", "Theatre Of Magic (1.4H)", + "tomahawk", "Tomahawk 777 (rev 5)", + "tomahawk1", "Tomahawk 777 (rev 1)", + "tomcat", "TomCat (prototype)", + "tomcatsw", "TomCat (Star Wars hardware, prototype)", + "tomy_400", "The Who's Tommy Pinball Wizard (4.00)", + "tomy_h30", "The Who's Tommy Pinball Wizard (3.00, The Netherlands)", + "tondemo", "Tondemo Crisis (Japan)", + "tonton", "Waku Waku Doubutsu Land TonTon (Japan)", + "tontonb", "Tonton [BET] (Japan set 1)", + "tonypok", "Poker Master (Tony-Poker V3.A, hack?)", + "toobin", "Toobin' (rev 3)", + "toobin1", "Toobin' (rev 1)", + "toobin2", "Toobin' (rev 2)", + "toobin2e", "Toobin' (Europe, rev 2)", + "toobine", "Toobin' (Europe, rev 3)", + "toobing", "Toobin' (German, rev 3)", + "top21", "Top XXI (Version 1.2)", + "topaz_l1", "Topaz (Shuffle) (L-1)", + "topbladv", "Top Blade V", + "topgame", "Top Game Laser L10 (Bingo)", + "topgamet", "Top Game Turbo (Bingo)", + "topgear", "Top Gear (4VXFC969, New Zealand)", + "topgun", "Vs. Top Gun", + "topgunbl", "Top Gunner (bootleg, Rotary Joystick)", + "topgunnr", "Top Gunner (Exidy)", + "topgunr", "Top Gunner (US, 8-way Joystick)", + "tophuntr", "Top Hunter - Roddy & Cathy (NGM-046)", + "tophuntrh", "Top Hunter - Roddy & Cathy (NGH-046)", + "topland", "Top Landing (World)", + "toppin", "Top Pin", + "toppyrap", "Toppy & Rappy", + "topracer", "Top Racer (with MB8841 + MB8842, 1984)", + "topracera", "Top Racer (with MB8841 + MB8842, 1983)", + "topracern", "Top Racer (no MB8841 + MB8842)", + "toprollr", "Top Roller", + "topsecex", "Top Secret (Exidy) (version 1.0)", + "topsecrt", "Top Secret (Japan, old revision)", + "topshoot", "Top Shooter", + "topskatr", "Top Skater (Export, Revision A)", + "topskatrj", "Top Skater (Japan)", + "topskatru", "Top Skater (USA, Revision A)", + "topspeed", "Top Speed (World)", + "topspeedu", "Top Speed (US)", + "toramich", "Tora e no Michi (Japan)", + "toratora", "Tora Tora (prototype?)", + "torch", "Torch", + "toride2g", "Toride II Adauchi Gaiden", + "toride2gg", "Toride II Adauchi Gaiden (German)", + "toride2gk", "Toride II Bok Su Oi Jeon Adauchi Gaiden (Korea)", + "toride2j", "Toride II (Japan)", + "tornado1", "Tornado (set 1, Defender bootleg)", + "tornado2", "Tornado (set 2, Defender bootleg)", + "tornbase", "Tornado Baseball / Ball Park", + "torp_e21", "Torpedo Alley (2.1, Europe)", + "tortufam", "Tortuga Family (Italian)", + "torus", "Torus", + "toryumon", "Toryumon", + "totan_04", "Tales Of The Arabian Nights (0.4)", + "totan_12", "Tales Of The Arabian Nights (1.2)", + "totan_13", "Tales Of The Arabian Nights (1.3)", + "totan_14", "Tales Of The Arabian Nights (1.4)", + "totcarn", "Total Carnage (rev LA1 03/10/92)", + "totcarnp", "Total Carnage (prototype, rev 1.0 01/25/92)", + "totd", "The Typing of the Dead (JPN, USA, EXP, KOR, AUS) (Rev A)", + "totem", "Totem", + "totlvica", "Total Vice (ver AAB)", + "totlvice", "Total Vice (ver UAC)", + "totlvicj", "Total Vice (ver JAD)", + "totmejan", "Tottemo E Jong", + "touchdn", "Touchdown", + "toucheme", "Touche Me", + "touchgo", "Touch & Go (World)", + "touchgoe", "Touch & Go (earlier revision)", + "touchgon", "Touch & Go (Non North America)", + "toukon3", "Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A)", + "toukon4", "Shin Nihon Pro Wrestling Toukon Retsuden 4 Arcade Edition (TRF1 Ver. A)", + "tour4000", "Tour 4000", + "tour4010", "Tour 4010", + "toursol", "Tournament Solitaire (V1.06, 08/03/95)", + "toursol1", "Tournament Solitaire (V1.04, 06/22/95)", + "tourtab2", "Tournament Table (set 2)", + "tourtabl", "Tournament Table (set 1)", + "tourvis", "Tourvision PCE bootleg", + "touryuu", "Touryuumon (V1.1)?", + "toutrun", "Turbo Out Run (Out Run upgrade, FD1094 317-0118)", + "toutrun1", "Turbo Out Run (deluxe cockpit, FD1094 317-0109)", + "toutrun2", "Turbo Out Run (cockpit, FD1094 317-0106)", + "toutrun3", "Turbo Out Run (cockpit, FD1094 317-0107)", + "toutrunj", "Turbo Out Run (Japan, Out Run upgrade, FD1094 317-0117)", + "toyfight", "Toy Fighter", + "toyland", "Toy Land Adventure", + "toypop", "Toypop", + "tp2m32", "Tetris Plus 2 (MegaSystem 32 Version)", + "tp84", "Time Pilot '84 (set 1)", + "tp84a", "Time Pilot '84 (set 2)", + "tp84b", "Time Pilot '84 (set 3)", + "tpgolf", "Top Player's Golf (NGM-003)(NGH-003)", + "tpoker2", "Turbo Poker 2", + "tps", "TPS", + "tqst", "Treasure Quest", + "trackfld", "Track & Field", + "trackfldc", "Track & Field (Centuri)", + "trackfldnz", "Track & Field (NZ bootleg?)", + "trailblz", "Trail Blazer", + "trailer", "Trailer", + "trally", "Thrash Rally (ALM-003)(ALH-003)", + "tranqgun", "Tranquilizer Gun", + "transfrm", "Transformer", + "travrusa", "Traverse USA / Zippy Race", + "travrusab", "Traverse USA (bootleg)", + "trbwtchs", "Trouble Witches AC (v1.00J)", + "trckydoc", "Tricky Doc (set 1)", + "trckydoca", "Tricky Doc (set 2)", + "treahunt", "Treasure Hunt", + "trebltop", "Treble Top (39-360-070)", + "trek_110", "Star Trek 25th Anniversary (1.10)", + "trek_11a", "Star Trek 25th Anniversary (1.10 Alpha Display)", + "trek_120", "Star Trek 25th Anniversary (1.20)", + "trek_200", "Star Trek 25th Anniversary (2.00)", + "trek_201", "Star Trek 25th Anniversary (2.01)", + "trgheart", "Trigger Heart Exelica (Rev A) (GDL-0036A)", + "tricktrp", "Trick Trap (World?)", + "trident", "Trident", + "triforce", "Triforce Bios", + "trigon", "Trigon (Japan)", + "triothep", "Trio The Punch - Never Forget Me... (World)", + "triothepj", "Trio The Punch - Never Forget Me... (Japan)", + "tripdraw", "Tripple Draw (V3.1 s)", + "tripjok", "Triple Joker (Bingo)", + "triplay", "Triple Play", + "triplep", "Triple Punch (set 1)", + "triplepa", "Triple Punch (set 2)", + "triplew1", "Mahjong Triple Wars (Japan)", + "triplew2", "Mahjong Triple Wars 2 (Japan)", + "triplfun", "Triple Fun", + "triplhnt", "Triple Hunt", + "tripool", "Tri-Pool (Casino Tech)", + "tripoola", "Tri-Pool (Costal Games)", + "trisport", "Tri-Sports", + "trivia12", "Trivial Pursuit (Think Tank - Genus Edition) (12/14/84)", + "triviabb", "Trivial Pursuit (Baby Boomer Edition) (3/20/85)", + "triviaes", "Trivial Pursuit (Spanish)", + "triviag1", "Trivial Pursuit (Think Tank - Genus Edition) (set 1)", + "triviag2", "Trivial Pursuit (Genus II Edition)", + "trivialp", "Trivial Pursuit (New Edition) (prod. 1D)", + "trivialpd", "Trivial Pursuit (New Edition) (prod. 1D) (Protocol)", + "trivialpo", "Trivial Pursuit", + "triviasp", "Trivial Pursuit (All Star Sports Edition)", + "triviayp", "Trivial Pursuit (Young Players Edition)", + "trivquiz", "Triv Quiz", + "trizeal", "Trizeal (GDL-0026)", + "trizn_l1", "Tri Zone (L-1)", + "trizn_t1", "Tri Zone (T-1)", + "troangel", "Tropical Angel", + "trog", "Trog (rev LA5 03/29/91)", + "trog3", "Trog (rev LA3 02/14/91)", + "trog4", "Trog (rev LA4 03/11/91)", + "trogpa4", "Trog (prototype, rev 4.00 07/27/90)", + "trogpa6", "Trog (prototype, rev PA6-PAC 09/09/90)", + "trojan", "Trojan (US set 1)", + "trojana", "Trojan (US set 2)", + "trojanb", "Trojan (bootleg)", + "trojanj", "Tatakai no Banka (Japan)", + "trojanr", "Trojan (Romstar)", + "tron", "Tron (8/9)", + "tron2", "Tron (6/25)", + "tron3", "Tron (6/17)", + "tron4", "Tron (6/15)", + "trophyh", "Trophy Hunting - Bear & Moose V1.0", + "trstar", "Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version)", + "trstar2k", "Triple Star 2000", + "trstarj", "Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version)", + "trstaro", "Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version)", + "trstaroj", "Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version)", + "truckk", "Truck Kyosokyoku (Japan, TKK2/VER.A)", + "trucksp2", "Truck Stop (P-2)", + "trucksp3", "Truck Stop (P-3)", + "truco", "Truco-Tron", + "trucocl", "Truco Clemente", + "truxton", "Truxton / Tatsujin", + "truxton2", "Truxton II / Tatsujin Oh", + "trvchlng", "Trivia Challenge", + "trvgns", "Trivia Genius", + "trvhang", "Trivia Hangup (question set 1)", + "trvhanga", "Trivia Hangup (question set 2)", + "trvmadns", "Trivia Madness - Series A Question set", + "trvmadnsa", "Trivia Madness - Series B Question set", + "trvmstr", "Trivia Master (set 1)", + "trvmstra", "Trivia Master (set 2)", + "trvmstrb", "Trivia Master (set 3)", + "trvmstrc", "Trivia Master (set 4)", + "trvquest", "Trivia Quest", + "trvwz2", "Trivia ? Whiz (6221-05, Edition 2)", + "trvwz2a", "Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia)", + "trvwz3h", "Trivia ? Whiz (6221-05, Edition 3)", + "trvwz3ha", "Trivia ? Whiz (6221-05, Edition 3 Sex trivia III)", + "trvwz3v", "Trivia ? Whiz (6221-04, Edition 3 Vertical)", + "trvwz4", "Trivia ? Whiz (6221-13, U5-0B Edition 4)", + "trvwz4a", "Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia)", + "trvwzh", "Trivia ? Whiz (6221-00)", + "trvwzha", "Trivia ? Whiz (6221-00, with Sex trivia)", + "trvwzhb", "Trivia ? Whiz (6221-00, Alt Gen trivia)", + "trvwzv", "Trivia ? Whiz (6221-02, Vertical)", + "tryout", "Pro Baseball Skill Tryout (Japan)", + "ts2", "Battle Arena Toshinden 2 (USA 951124)", + "ts2a", "Battle Arena Toshinden 2 (USA 951124) Older", + "ts2j", "Battle Arena Toshinden 2 (Japan 951124)", + "ts_la2", "The Shadow (LA-2)", + "ts_la4", "The Shadow (LA-4)", + "ts_lf6", "The Shadow (LF-6) French", + "ts_lh6", "The Shadow (LH-6)", + "ts_lm6", "The Shadow (LM-6) Mild", + "ts_lx4", "The Shadow (LX-4)", + "ts_lx5", "The Shadow (LX-5)", + "ts_pa1", "The Shadow (PA-1)", + "tsamurai", "Samurai Nihon-Ichi (set 1)", + "tsamurai2", "Samurai Nihon-Ichi (set 2)", + "tsamuraih", "Samurai Nihon-Ichi (bootleg, harder)", + "tsarevna", "Tsarevna (v1.29)", + "tsarevnaa", "Tsarevna (v1.31)", + "tsclass", "Trap Shoot Classic (v1.0 21-mar-1997)", + "tshingen", "Shingen Samurai-Fighter (Japan, English)", + "tshingena", "Takeda Shingen (Japan, Japanese)", + "tshoot", "Turkey Shoot", + "tsptr_l3", "Transporter the Rescue (L-3)", + "tst_galx", "Galaxian Test ROM", + "tst_invd", "Space Invaders Test ROM", + "tstrike", "Thunder Strike (set 1)", + "tstrikea", "Thunder Strike (set 2, older)", + "tstrk_l1", "Triple Strike (Shuffle) (L-1)", + "tsurugi", "Tsurugi (ver EAB)", + "tsurugij", "Tsurugi (ver JAC)", + "tt_game", "unknown Toptronic pinball game", + "ttblock", "T. T. Block [TTL]", + "ttchamp", "Table Tennis Champions (set 1)", + "ttchampa", "Table Tennis Champions (set 2)", + "ttfitter", "T.T. Fitter (Japan)", + "ttmahjng", "T.T Mahjong", + "tts_l1", "Tic-Tac-Strike (Shuffle) (L-1)", + "tts_l2", "Tic-Tac-Strike (Shuffle) (L-2)", + "ttt_10", "Ticket Tac Toe (1.0)", + "tturf", "Tough Turf (set 2, Japan, 8751 317-0104)", + "tturfbl", "Tough Turf (Datsu bootleg)", + "tturfu", "Tough Turf (set 1, US, 8751 317-0099)", + "tubeit", "Tube-It", + "tubep", "Tube Panic", + "tubepb", "Tube Panic (bootleg)", + "tugboat", "Tugboat", + "tumbleb", "Tumble Pop (bootleg)", + "tumbleb2", "Tumble Pop (bootleg with PIC)", + "tumblep", "Tumble Pop (World)", + "tumblepba", "Tumble Pop (Playmark bootleg)", + "tumblepj", "Tumble Pop (Japan)", + "tunhunt", "Tunnel Hunt", + "tunhuntc", "Tunnel Hunt (Centuri)", + "turbo", "Turbo", + "turboa", "Turbo (encrypted set 1)", + "turbob", "Turbo (encrypted set 2)", + "turbofrc", "Turbo Force (old revision)", + "turbosub", "Turbo Sub (prototype rev. TSCA)", + "turbosub6", "Turbo Sub (prototype rev. TSC6)", + "turbosub7", "Turbo Sub (prototype rev. TSC7)", + "turbotag", "Turbo Tag (prototype)", + "turfmast", "Neo Turf Masters / Big Tournament Golf", + "turkhunt", "Turkey Hunting USA V1.0", + "turpin", "Turpin", + "turpins", "Turpin (bootleg on Scramble hardware)", + "turrett", "Turret Tower", + "turtles", "Turtles", + "turtship", "Turtle Ship (North America)", + "turtshipj", "Turtle Ship (Japan)", + "turtshipk", "Turtle Ship (Korea)", + "tutankhm", "Tutankham", + "tutankhms", "Tutankham (Stern Electronics)", + "tutstomb", "Tut's Tomb", + "tv21", "T.V. 21", + "tv21_3", "T.V. 21 III", + "tvablast", "Aero Blasters (Tourvision PCE bootleg)", + "tvcolumn", "Columns (Tourvision PCE bootleg)", + "tvdunexp", "Dungeon Explorer (Tourvision PCE bootleg)", + "tvflaptw", "Final Lap Twin (Tourvision PCE bootleg)", + "tvfsoc90", "Formation Soccer - Human Cup '90 (Tourvision PCE bootleg)", + "tvgomola", "Gomola Speed (Tourvision PCE bootleg)", + "tvjchan", "Jackie Chan (Tourvision PCE bootleg)", + "tvlegaxe", "Makyo Densetsu - The Legenary Axe (Tourvision PCE bootleg)", + "tvpcgen2", "PC Genjin 2 - Pithecanthropus Computerurus (Tourvision PCE bootleg)", + "tvpoker", "T.V. Poker", + "tvpow11", "Power Eleven (Tourvision PCE bootleg)", + "tvpwlg4", "Power League IV (Tourvision PCE bootleg)", + "tvrs2", "Rastan Saga II (Tourvision PCE bootleg)", + "tvsci", "Special Criminal Investigation (Tourvision PCE bootleg)", + "tvsssold", "Super Star Soldier (Tourvision PCE bootleg)", + "tvsvball", "Super Volley ball (Tourvision PCE bootleg)", + "tvthbld", "Thunder Blade (Tourvision PCE bootleg)", + "tvusapb", "USA Pro Basketball (Tourvision PCE bootleg)", + "tvvolfd", "Volfied (Tourvision PCE bootleg)", + "twcup98", "Tecmo World Cup '98 (JUET 980410 V1.000)", + "twinactn", "Twin Action", + "twinadv", "Twin Adventure (World)", + "twinadvk", "Twin Adventure (Korea)", + "twinbee", "TwinBee (ROM version)", + "twinbrat", "Twin Brats (set 1)", + "twinbrata", "Twin Brats (set 2)", + "twincobr", "Twin Cobra (World)", + "twincobru", "Twin Cobra (US)", + "twineag2", "Twin Eagle II - The Rescue Mission", + "twineagl", "Twin Eagle - Revenge Joe's Brother", + "twinfalc", "Twin Falcons", + "twinhawk", "Twin Hawk (World)", + "twinhawku", "Twin Hawk (US)", + "twinkle", "Twinkle", + "twinqix", "Twin Qix (Ver 1.0A 1995/01/17) (Prototype)", + "twins", "Twins (set 1)", + "twinsa", "Twins (set 2)", + "twinspri", "Twinkle Star Sprites", + "twinsqua", "Twin Squash", + "twocrude", "Two Crude (US)", + "twotiger", "Two Tigers (dedicated)", + "twotigerc", "Two Tigers (Tron conversion)", + "twrldc94", "Tecmo World Cup '94 (set 1)", + "twrldc94a", "Tecmo World Cup '94 (set 2)", + "twrshaft", "Tower & Shaft", + "tws96", "Tecmo World Soccer '96", + "twst_300", "Twister (3.00)", + "twst_404", "Twister (4.04)", + "twst_405", "Twister (4.05)", + "tx1", "TX-1 (World)", + "tx1jb", "TX-1 (Japan rev. B)", + "tx1jc", "TX-1 (Japan rev. C)", + "txsector", "TX-Sector", + "tylz", "Tylz (prototype)", + "typhoon", "Typhoon", + "tz_92", "Twilight Zone (9.2)", + "tz_94ch", "Twilight Zone (9.4CH)", + "tz_94h", "Twilight Zone (9.4H)", + "tz_h7", "Twilight Zone (H-7)", + "tz_h8", "Twilight Zone (H-8)", + "tz_ifpa", "Twilight Zone (IFPA rules)", + "tz_l1", "Twilight Zone (L-1)", + "tz_l2", "Twilight Zone (L-2)", + "tz_l3", "Twilight Zone (L-3)", + "tz_l4", "Twilight Zone (L-4)", + "tz_p3", "Twilight Zone (P-3)", + "tz_p4", "Twilight Zone (P-4)", + "tz_pa1", "Twilight Zone (PA-1)", + "uballoon", "Ultra Balloon", + "uboat65", "U-boat 65", + "uccops", "Undercover Cops (World)", + "uccopsar", "Undercover Cops - Alpha Renewal Version", + "uccopsj", "Undercover Cops (Japan)", + "uccopsu", "Undercover Cops (US)", + "uchuuai", "Mahjong Uchuu yori Ai wo komete (Japan)", + "ucytokyu", "Uchuu Tokkyuu Medalian", + "uecology", "Ultimate Ecology (Japan 931203)", + "ufo_x", "UFO-X", + "ufosensi", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", + "ufosensib", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", + "ultennis", "Ultimate Tennis", + "ultennisj", "Ultimate Tennis (v 1.4, Japan)", + "ultrainv", "Ultra Invaders", + "ultraman", "Ultraman (Japan)", + "ultramhm", "Ultra Maru-hi Mahjong (Japan)", + "ultratnk", "Ultra Tank", + "ultrax", "Ultra X Weapons / Ultra Keibitai", + "ultrchmp", "Se Gye Hweng Dan Ultra Champion (Korea)", + "ultrchmph", "Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan)", + "umanclub", "Ultraman Club - Tatakae! Ultraman Kyoudai!!", + "umipoker", "Umi de Poker / Marine Paradise (Japan)", + "umk3", "Ultimate Mortal Kombat 3 (rev 1.2)", + "umk3r10", "Ultimate Mortal Kombat 3 (rev 1.0)", + "umk3r11", "Ultimate Mortal Kombat 3 (rev 1.1)", + "unclepoo", "Uncle Poo", + "undefeat", "Under Defeat (GDL-0035)", + "undoukai", "The Undoukai (Japan)", + "undrfire", "Under Fire (World)", + "undrfirej", "Under Fire (Japan)", + "undrfireu", "Under Fire (US)", + "uniwars", "UniWar S", + "unkch1", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1)", + "unkch2", "Super Cherry Gold (bootleg of Super Cherry Master)", + "unkch3", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2)", + "unkch4", "Grand Cherry Master (bootleg of Super Cherry Master)", + "unkh8gam", "unknown H8 Italian Gambling game", + "unkhorse", "unknown Japanese horse gambling game", + "unkpacg", "unknown Pac-Man gambling game", + "unsquad", "U.N. Squadron (USA)", + "untoucha", "Untouchable (Japan)", + "uopoko", "Puzzle Uo Poko (International)", + "uopokoj", "Puzzle Uo Poko (Japan)", + "upndown", "Up'n Down (315-5030)", + "upndownu", "Up'n Down (not encrypted)", + "upscope", "Up Scope", + "upyoural", "Up Your Alley", + "urashima", "Otogizoushi Urashima Mahjong (Japan)", + "usafootb", "U.S.A. Football", + "usagi", "Usagi (V2.02J)", + "usagiol", "Usagi Online (v2.04J)", + "usagiym", "Usagi - Yamashiro Mahjong Hen (GDL-0022)", + "usclssic", "U.S. Classic", + "usg182", "Games V18.2", + "usg185", "Games V18.5", + "usg187c", "Games V18.7C", + "usg32", "Super Duper Casino (California V3.2)", + "usg82", "Super Ten V8.2", + "usg83x", "Super Ten V8.3X", + "usgames", "Games V25.4X", + "usvsthem", "Us vs. Them", + "utoukond", "Ultra Toukon Densetsu (Japan)", + "v4addlad", "Adders and Ladders (v2.1) (MPU4 Video)", + "v4addlad20", "Adders and Ladders (v2.0) (MPU4 Video)", + "v4barqs2", "Barquest 2 (v0.3) (MPU4 Video)", + "v4barqst", "Barquest (v2.6d) (MPU4 Video)", + "v4big40", "Big 40 Poker (Bwb) (MPU4 Video)", + "v4bigfrt", "Big Fruits (v2.0?) (MPU4 Video)", + "v4bios", "MPU4 Video Firmware", + "v4blox", "Blox (v2.0) (MPU4 Video)", + "v4bloxd", "Blox (v2.0, Datapak) (MPU4 Video)", + "v4bubbnk", "Bubbly Bonk (v4.0?) (MPU4 Video)", + "v4bulblx", "Bullion Blox (Bwb) (MPU4 Video)", + "v4cmaze", "The Crystal Maze (v1.3) (MPU4 Video)", + "v4cmaze2", "The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video)", + "v4cmaze2a", "The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video)", + "v4cmaze2b", "The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video)", + "v4cmaze2c", "The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video)", + "v4cmaze2d", "The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video)", + "v4cmaze3", "The Crystal Maze Team Challenge (v0.9) (MPU4 Video)", + "v4cmaze3a", "The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video)", + "v4cmaze3b", "The Crystal Maze Team Challenge (v0.8) (MPU4 Video)", + "v4cmaze3c", "The Crystal Maze Team Challenge (v?.?) (MPU4 Video)", + "v4cmaze3d", "The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video)", + "v4cmazea", "The Crystal Maze (v0.1, AMLD) (MPU4 Video)", + "v4cmazeb", "The Crystal Maze (v1.2) (MPU4 Video)", + "v4cmazec", "The Crystal Maze (v1.3 alt) (MPU4 Video)", + "v4cmazed", "The Crystal Maze (v1.1) (MPU4 Video)", + "v4cmazedat", "The Crystal Maze (v1.3, Datapak) (MPU4 Video)", + "v4cshinf", "Cash Inferno (Bwb) (MPU4 Video)", + "v4cybcas", "Cyber Casino (Nova) (MPU4 Video)", + "v4dbltak", "Double Take (Bwb) (MPU4 Video)", + "v4dealem", "Deal 'Em (MPU4 Conversion Kit, v7.0)", + "v4eyedwn", "Eyes Down (v1.3) (MPU4 Video)", + "v4eyedwnd", "Eyes Down (v1.3, Datapak) (MPU4 Video)", + "v4frfact", "Fruit Factory (Bwb) (MPU4 Video)", + "v4gldrsh", "Gold Rush (Bwb) (MPU4 Video)", + "v4mate", "The Mating Game (v0.4) (MPU4 Video)", + "v4mated", "The Mating Game (v0.4, Datapak) (MPU4 Video)", + "v4mazbel", "Mazooma Belle (v2.5) (MPU4 Video)", + "v4mazbla", "Mazooma Belle (v1.5) (MPU4 Video)", + "v4mdice", "Miami Dice (Bwb) (MPU4 Video)", + "v4megbuk", "Megabucks Poker (Bwb) (MPU4 Video)", + "v4miami", "Miami Dice (Nova) (MPU4 Video)", + "v4missis", "Mississippi Lady (Nova) (MPU4 Video)", + "v4monte", "Monte Carlo Or Bust (Bwb) (MPU4 Video)", + "v4opt3", "Option 3 (v1.0) (MPU4 Video)", + "v4opt3d", "Option 3 (v1.0) (Datapak) (MPU4 Video)", + "v4ovrmn3", "Over Moon Pt3 (Bwb) (MPU4 Video)", + "v4picdil", "Piccadilly Nights (Nova) (MPU4 Video)", + "v4psi", "Prize Space Invaders (v1.1) (MPU4 Video)", + "v4psia", "Prize Space Invaders (v1.2) (MPU4 Video)", + "v4psib", "Prize Space Invaders (v2.0?) (MPU4 Video)", + "v4pztet", "Prize Tetris (Bwb) (MPU4 Video, set 1)", + "v4pzteta", "Prize Tetris (Bwb) (MPU4 Video, set 2)", + "v4quidgr", "Ten Quid Grid (v1.2) (MPU4 Video)", + "v4quidgr2", "Ten Quid Grid (v2.4) (MPU4 Video)", + "v4quidgr2d", "Ten Quid Grid (v2.4, Datapak) (MPU4 Video)", + "v4quidgrd", "Ten Quid Grid (v1.2, Datapak) (MPU4 Video)", + "v4redhtp", "Red Hot Poker (20p/10GBP Cash, release 3) (MPU4 Video)", + "v4rencas", "Reno Casino (Bwb) (MPU4 Video)", + "v4reno", "Reno Reels (20p/10GBP Cash, release A) (MPU4 Video)", + "v4rhmaz", "Red Hot Mazooma Belle (Bwb) (MPU4 Video)", + "v4shpwnd", "Shop Window (v2.0) (MPU4 Video)", + "v4sixx", "6-X (Bwb) (MPU4 Video)", + "v4sklcsh", "Skill Cash (v1.1) (MPU4 Video)", + "v4skltrk", "Skill Trek (v1.1) (MPU4 Video, set 1)", + "v4skltrka", "Skill Trek (v1.1) (MPU4 Video, set 2)", + "v4strike", "Strike it Lucky (v0.5) (MPU4 Video)", + "v4strike2", "Strike it Lucky (v0.53) (MPU4 Video)", + "v4strike2d", "Strike it Lucky (v0.53, Datapak) (MPU4 Video)", + "v4striked", "Strike it Lucky (v0.5, Datapak) (MPU4 Video)", + "v4sunbst", "Sunburst (Bwb) (MPU4 Video)", + "v4tetrs", "BwB Tetris v 2.2 (MPU4 Video)", + "v4time", "Time Machine (v2.0) (MPU4 Video)", + "v4timebn", "Time Bandit (Bwb) (MPU4 Video)", + "v4turnov", "Turnover (v2.3) (MPU4 Video)", + "v4vgpok", "Vegas Poker (prototype, release 2) (MPU4 Video)", + "v4wize", "Wize Move (v1.3d) (MPU4 Video)", + "v4wizea", "Wize Move (v1.2) (MPU4 Video)", + "valkyrie", "Valkyrie No Densetsu (Japan)", + "valtric", "Valtric", + "vamphalf", "Vamf x1/2 (Europe)", + "vamphalfk", "Vamp x1/2 (Korea)", + "vampj", "Vampire: The Night Warriors (Japan 940705)", + "vampja", "Vampire: The Night Warriors (Japan 940705 alt)", + "vampjr1", "Vampire: The Night Warriors (Japan 940630)", + "vandyke", "Vandyke (Japan)", + "vandykeb", "Vandyke (bootleg with PIC16c57)", + "vandykejal", "Vandyke (Jaleco, set 1)", + "vandykejal2", "Vandyke (Jaleco, set 2)", + "vangrd2", "Vanguard II", + "vanguard", "Vanguard (SNK)", + "vanguardc", "Vanguard (Centuri)", + "vanguardj", "Vanguard (Japan)", + "vanilla", "Mahjong Vanilla Syndrome (Japan)", + "vanvan", "Van-Van Car", + "vanvanb", "Van-Van Car (Karateco set 2)", + "vanvank", "Van-Van Car (Karateco set 1)", + "vaportra", "Vapor Trail - Hyper Offence Formation (World revision 1)", + "vaportra3", "Vapor Trail - Hyper Offence Formation (World revision 3?)", + "vaportrau", "Vapor Trail - Hyper Offence Formation (US)", + "vaportrx", "Vapor TRX", + "vaportrxp", "Vapor TRX (prototype)", + "varth", "Varth: Operation Thunderstorm (World 920714)", + "varthj", "Varth: Operation Thunderstorm (Japan 920714)", + "varthr1", "Varth: Operation Thunderstorm (World 920612)", + "varthu", "Varth: Operation Thunderstorm (USA 920612)", + "vasara", "Vasara", + "vasara2", "Vasara 2 (set 1)", + "vasara2a", "Vasara 2 (set 2)", + "vastar", "Vastar (set 1)", + "vastar2", "Vastar (set 2)", + "vastar3", "Vastar (set 3)", + "vastar4", "Vastar (set 4)", + "vathlete", "Virtua Athletics / Virtua Athlete (GDS-0019)", + "vautour", "Vautour (bootleg of Phoenix) (8085A CPU)", + "vautourz", "Vautour (bootleg of Phoenix) (Z80 CPU)", + "vball", "U.S. Championship V'ball (US)", + "vball2pj", "U.S. Championship V'ball (Japan)", + "vball2pjb", "U.S. Championship V'ball (bootleg of Japan set)", + "vballb", "U.S. Championship V'ball (bootleg of US set)", + "vblokbrk", "VS Block Breaker (Asia)", + "vbowl", "Virtua Bowling (World, V101XCM)", + "vbowlj", "Virtua Bowling (Japan, V100JCM)", + "vcarn", "Video Carnival 1999 / Super Royal Card (Version 0.11)", + "vcircle", "Vicious Circle (prototype)", + "vcombat", "Virtual Combat", + "vcop", "Virtua Cop (Revision B)", + "vcop2", "Virtua Cop 2", + "vcop3", "Virtua Cop 3 (Rev A) (GDX-0003A)", + "vcopa", "Virtua Cop (Revision A)", + "vector", "Vector", + "vega", "Vega", + "vegas", "Vegas", + "vegasfst", "Royal Vegas Joker Card (fast deal)", + "vegasfte", "Royal Vegas Joker Card (fast deal, English gfx)", + "vegasgp", "Vegas (Game Plan)", + "vegasmil", "Royal Vegas Joker Card (fast deal, Mile)", + "vegasslw", "Royal Vegas Joker Card (slow deal)", + "vegast", "Vegas (Taito)", + "vendetta", "Vendetta (World 4 Players ver. T)", + "vendetta2p", "Vendetta (World 2 Players ver. W)", + "vendetta2pd", "Vendetta (Asia 2 Players ver. D)", + "vendetta2pu", "Vendetta (Asia 2 Players ver. U)", + "vendettaj", "Crime Fighters 2 (Japan 2 Players ver. P)", + "vendettar", "Vendetta (World 4 Players ver. R)", + "venture", "Venture (version 5 set 1)", + "venture2", "Venture (version 5 set 2)", + "venture4", "Venture (version 4)", + "venus", "Venus (bootleg of Gyruss)", + "version4", "Version 4 (Version 4.3R CGA)", + "version4d2", "Version 4 (Version 4.3E CGA)", + "version4d3", "Version 4 (Version 4.3LT CGA)", + "version4o", "Version 4 (Version 4.2R CGA)", + "version4v", "Version 4 (Version 4.3R Dual)", + "version4v2", "Version 4 (Version 4.3E Dual)", + "version4v3", "Version 4 (Version 4.3LT Dual)", + "vf", "Virtua Fighter", + "vf2", "Virtua Fighter 2 (Version 2.1)", + "vf2a", "Virtua Fighter 2 (Revision A)", + "vf2b", "Virtua Fighter 2 (Revision B)", + "vf2o", "Virtua Fighter 2", + "vf3", "Virtua Fighter 3 (Revision C)", + "vf3a", "Virtua Fighter 3 (Revision A)", + "vf3tb", "Virtua Fighter 3 Team Battle", + "vf4", "Virtua Fighter 4 (GDS-0012)", + "vf4b", "Virtua Fighter 4 (Rev B) (GDS-0012B)", + "vf4c", "Virtua Fighter 4 (Rev C) (GDS-0012C)", + "vf4cart", "Virtua Fighter 4 (Cartridge)", + "vf4evo", "Virtua Fighter 4 Evolution (Rev B) (GDS-0024B)", + "vf4evoa", "Virtua Fighter 4 Evolution (Rev A) (GDS-0024A)", + "vf4evoct", "Virtua Fighter 4 Evolution (Cartridge)", + "vf4tuned", "Virtua Fighter 4 Final Tuned (Rev F) (GDS-0036F)", + "vf4tuneda", "Virtua Fighter 4 Final Tuned (Rev A) (GDS-0036A)", + "vf4tunedd", "Virtua Fighter 4 Final Tuned (Rev D) (GDS-0036D)", + "vfive", "V-Five (Japan)", + "vfkids", "Virtua Fighter Kids (JUET 960319 V0.000)", + "vformula", "Virtua Formula", + "vfremix", "Virtua Fighter Remix (JUETBKAL 950428 V1.000)", + "vfurlong", "Net Select Keiba Victory Furlong", + "vgoalsca", "V Goal Soccer (set 2)", + "vgoalsoc", "V Goal Soccer (set 1)", + "vhunt2", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970929)", + "vhunt2d", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg)", + "vhunt2r1", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913)", + "vhuntj", "Vampire Hunter: Darkstalkers' Revenge (Japan 950316)", + "vhuntjr1", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307)", + "vhuntjr1s", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version)", + "vhuntjr2", "Vampire Hunter: Darkstalkers' Revenge (Japan 950302)", + "victlapw", "Ace Driver: Victory Lap (Rev. ADV2)", + "victnine", "Victorious Nine", + "victor21", "Victor 21", + "victor5", "G.E.A.", + "victor6", "Victor 6 (v2.3N)", + "victor6a", "Victor 6 (v2.3)", + "victor6b", "Victor 6 (v1.2)", + "victorba", "Victor Banana", + "victory", "Victory", + "victoryp", "Victory (Pinball)", + "victroad", "Victory Road", + "videocba", "Video Cordoba", + "videodad", "Video Dado", + "videomat", "Videomat (Polish bootleg)", + "videopin", "Video Pinball", + "videopkr", "Video Poker", + "videtrna", "Videotron Poker (normal controls)", + "videtron", "Videotron Poker (cards selector, set 1)", + "videtron2", "Videotron Poker (cards selector, set 2)", + "vidvince", "Video Vince and the Game Factory (prototype)", + "viewpoin", "Viewpoint", + "vigilant", "Vigilante (World, set 1)", + "vigilant1", "Vigilante (World, set 2)", + "vigilantj", "Vigilante (Japan)", + "vigilantu", "Vigilante (US)", + "vigilantu2", "Vigilante (US) - Rev. G", + "viking", "Viking", + "vikingt", "Viking Treasure", + "vimana", "Vimana (World, set 1)", + "vimanaj", "Vimana (Japan)", + "vimanan", "Vimana (World, set 2)", + "vindctr2", "Vindicators Part II (rev 3)", + "vindctr2r1", "Vindicators Part II (rev 1)", + "vindctr2r2", "Vindicators Part II (rev 2)", + "vindictr", "Vindicators (rev 5)", + "vindictr1", "Vindicators (rev 1)", + "vindictr2", "Vindicators (rev 2)", + "vindictr4", "Vindicators (rev 4)", + "vindictre", "Vindicators (Europe, rev 5)", + "vindictre3", "Vindicators (Europe, rev 3)", + "vindictre4", "Vindicators (Europe, rev 4)", + "vindictrg", "Vindicators (German, rev 1)", + "viofight", "Violence Fight (World)", + "viofightj", "Violence Fight (Japan)", + "viofightu", "Violence Fight (US)", + "viostorm", "Violent Storm (ver EAC)", + "viostorma", "Violent Storm (ver AAC)", + "viostormab", "Violent Storm (ver AAB)", + "viostormeb", "Violent Storm (ver EAB)", + "viostormj", "Violent Storm (ver JAC)", + "viostormu", "Violent Storm (ver UAC)", + "viostormub", "Violent Storm (ver UAB)", + "vipclub", "Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310)", + "viper", "Viper", + "viperp", "Viper (Pinball)", + "viprp1", "Viper Phase 1 (New Version, World)", + "viprp1hk", "Viper Phase 1 (Hong Kong)", + "viprp1j", "Viper Phase 1 (New Version, Japan)", + "viprp1k", "Viper Phase 1 (New Version, Korea)", + "viprp1oj", "Viper Phase 1 (Japan)", + "viprp1ot", "Viper Phase 1 (Germany)", + "viprp1s", "Viper Phase 1 (New Version, Switzerland)", + "viprp1u", "Viper Phase 1 (New Version, US set 1)", + "viprp1ua", "Viper Phase 1 (New Version, US set 2)", + "viprsega", "Viper Night Drivin'", + "virnba", "Virtua NBA (JPN, USA, EXP, KOR, AUS)", + "virnbao", "Virtua NBA (JPN, USA, EXP, KOR, AUS) (original)", + "virnbap", "Virtua NBA (prototype)", + "vitaminc", "Mahjong Vitamin C (Japan)", + "vivdolls", "Vivid Dolls", + "vlcno_1a", "Volcano (Sound Only, alternate version)", + "vlcno_1b", "Volcano (Sound Only)", + "vlcno_ax", "Volcano", + "vliner", "V-Liner (set 1)", + "vlinero", "V-Liner (set 2)", + "vmahjong", "Virtual Mahjong (J 961214 V1.000)", + "vmetal", "Varia Metal", + "vmetaln", "Varia Metal (New Ways Trading Co.)", + "voleybal", "Voley Ball", + "volfied", "Volfied (World, revision 1)", + "volfiedj", "Volfied (Japan, revision 1)", + "volfiedjo", "Volfied (Japan)", + "volfiedo", "Volfied (World)", + "volfiedu", "Volfied (US, revision 1)", + "volfieduo", "Volfied (US)", + "vollyrmt", "Volly (Ramtek) [TTL]", + "voltan", "Voltan Escapes Cosmic Doom", + "von", "Cyber Troopers Virtual-On (USA, Revision B)", + "von2", "Virtual On 2: Oratorio Tangram (Revision B)", + "von254g", "Virtual On 2: Oratorio Tangram (ver 5.4g)", + "vonj", "Cyber Troopers Virtual-On (Japan, Revision B)", + "vonot", "Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition", + "vortex", "Vortex", + "vortexp", "Vortex (Pinball)", + "voyager", "Star Trek: Voyager", + "vpoker", "Videotronics Poker", + "vpool", "Video Pool (bootleg on Moon Cresta hardware)", + "vr", "Virtua Racing", + "vrkon_l1", "Varkon (L-1)", + "vrnwrld", "Verne's World", + "vroulet", "Vegas Roulette", + "vs10yard", "Vs 10-Yard Fight (World, 11/05/84)", + "vs10yardj", "Vs 10-Yard Fight (Japan)", + "vs10yardu", "Vs 10-Yard Fight (US, Taito license)", + "vs2", "Virtua Striker 2 (Step 2.0)", + "vs2002ex", "Virtua Striker 2002 (GDT-0002)", + "vs2002j", "Virtua Striker 2002 (GDT-0001)", + "vs215", "Virtua Striker 2 (Step 1.5)", + "vs215o", "Virtua Striker 2 (Step 1.5, older)", + "vs298", "Virtua Striker 2 '98 (Step 2.0)", + "vs29815", "Virtua Striker 2 '98 (Step 1.5)", + "vs299", "Virtua Striker 2 '99", + "vs299a", "Virtua Striker 2 '99 (Revision A)", + "vs299b", "Virtua Striker 2 '99 (Revision B)", + "vs2_2k", "Virtua Striker 2 Ver. 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", + "vs2v991", "Virtua Striker 2 '99.1 (Revision B)", + "vs4", "Virtua Striker 4 (Export) (GDT-0015)", + "vs42006", "Virtua Striker 4 Ver.2006 (Japan) (Rev D) (GDT-0020D)", + "vs4j", "Virtua Striker 4 (Japan) (Rev E) (GDT-0013E)", + "vsav", "Vampire Savior: The Lord of Vampire (Euro 970519)", + "vsav2", "Vampire Savior 2: The Lord of Vampire (Japan 970913)", + "vsav2d", "Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg)", + "vsava", "Vampire Savior: The Lord of Vampire (Asia 970519)", + "vsavd", "Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg)", + "vsavh", "Vampire Savior: The Lord of Vampire (Hispanic 970519)", + "vsavj", "Vampire Savior: The Lord of Vampire (Japan 970519)", + "vsavu", "Vampire Savior: The Lord of Vampire (USA 970519)", + "vsbball", "Vs. BaseBall (US, set BA E-1)", + "vsbballj", "Vs. BaseBall (Japan, set BA A-3)", + "vsbballja", "Vs. BaseBall (Japan, set BA A-2)", + "vsbballjb", "Vs. BaseBall (Japan, set BA A-1)", + "vsfdf", "Vs. Freedom Force", + "vsgongf", "VS Gong Fight", + "vsgradus", "Vs. Gradius (US, set GR E)", + "vsgshoe", "Vs. Gumshoe (set GM5)", + "vshoot", "J-League Soccer V-Shoot (Japan)", + "vsmahjng", "Vs. Mahjong (Japan)", + "vsnetscr", "Versus Net Soccer (ver EAD)", + "vsnetscra", "Versus Net Soccer (ver AAA)", + "vsnetscreb", "Versus Net Soccer (ver EAB)", + "vsnetscrj", "Versus Net Soccer (ver JAB)", + "vsnetscru", "Versus Net Soccer (ver UAB)", + "vspinbal", "Vs. Pinball (US, set PN4 E-1)", + "vspinbalj", "Vs. Pinball (Japan, set PN3 B)", + "vspsx", "Video System PSX", + "vsskykid", "Vs. Super SkyKid", + "vsslalom", "Vs. Slalom", + "vssoccer", "Vs. Soccer (set SC4-2 A)", + "vssoccera", "Vs. Soccer (set SC4-3 ?)", + "vstennis", "Vs. Tennis (Japan/USA, set TE A-3)", + "vstennisa", "Vs. Tennis (Japan/USA, set 2)", + "vstennisb", "Vs. Tennis (Japan/USA, set 3)", + "vstetris", "Vs. Tetris", + "vstrik3", "Virtua Striker 3 Ver. 2002 (GDS-0006)", + "vstrik3c", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev C)", + "vstrik3cb", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev B)", + "vstriker", "Virtua Striker (Revision A)", + "vstrikero", "Virtua Striker", + "vtenis2c", "Virtua Tennis 2 / Power Smash 2 (JPN) (USA, EXP, KOR, AUS) (Cart, Rev A)", + "vtennis", "Virtua Tennis (USA, EXP, KOR, AUS) / Power Smash (JPN)", + "vtennis2", "Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A)", + "vtennisg", "Virtua Tennis / Power Smash (GDS-0011)", + "vulcan", "Vulcan Venture (New)", + "vulcana", "Vulcan Venture (Old)", + "vulcanb", "Vulcan Venture (Oldest)", + "vulgus", "Vulgus (set 1)", + "vulgusa", "Vulgus (set 2)", + "vulgusj", "Vulgus (Japan?)", + "wackadoo", "Wack-A-Doodle-Doo (Redemption)", + "wacko", "Wacko", + "wakuwak7", "Waku Waku 7", + "wallc", "Wall Crash (set 1)", + "wallca", "Wall Crash (set 2)", + "wallst", "Wall Street", + "wanganmd", "Wangan Midnight (WMN1 Ver. A)", + "wangmd2b", "Wangan Midnight Maximum Tune 2 (Japan) (Rev A) (GDX-0016A)", + "wangmid", "Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B)", + "wangmid2", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0015)", + "wanted", "Wanted", + "warcadia", "Waga Seishun no Arcadia", + "wardner", "Wardner (World)", + "wardnerj", "Wardner no Mori (Japan)", + "warfa", "War: The Final Assault", + "wargods", "War Gods (HD 10/09/1996 - Dual Resolution)", + "wargodsa", "War Gods (HD 08/15/1996)", + "wargodsb", "War Gods (HD 12/11/1995)", + "warlords", "Warlords", + "warofbug", "War of the Bugs or Monsterous Manouvers in a Mushroom Maze", + "warofbugg", "War of the Bugs or Monsterous Manouvers in a Mushroom Maze (German)", + "warofbugu", "War of the Bugs or Monsterous Manouvers in a Mushroom Maze (US)", + "warpsped", "Warp Speed (prototype)", + "warpwarp", "Warp & Warp", + "warpwarpr", "Warp Warp (Rock-Ola set 1)", + "warpwarpr2", "Warp Warp (Rock-Ola set 2)", + "warrior", "Warrior", + "warriorb", "Warrior Blade - Rastan Saga Episode III (Japan)", + "warzard", "Warzard (Japan 961121)", + "warzardr1", "Warzard (Japan 961023)", + "waterski", "Water Ski", + "waterwld", "Waterworld (rev.3)", + "waterwld2", "Waterworld (rev.2)", + "watrball", "Water Balls", + "waverunr", "Wave Runner (Japan, Revision A)", + "waveshrk", "Wave Shark (UAB, USA v1.04)", + "wb3", "Wonder Boy III - Monster Lair (set 6, World, System 16B, 8751 317-0098)", + "wb31", "Wonder Boy III - Monster Lair (set 1, Japan, System 16A, FD1094 317-0084)", + "wb32", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B, FD1094 317-0085)", + "wb33", "Wonder Boy III - Monster Lair (set 3, World, System 16B, FD1094 317-0089)", + "wb34", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B, FD1094 317-0087)", + "wb35", "Wonder Boy III - Monster Lair (set 5, Japan, System 16A, FD1089A 317-0086)", + "wb3bbl", "Wonder Boy III - Monster Lair (bootleg)", + "wbbc97", "Beach Festival World Championship 1997", + "wbdeluxe", "Wonder Boy Deluxe", + "wbeachvl", "World Beach Volley (set 1)", + "wbeachvl2", "World Beach Volley (set 2)", + "wbeachvl3", "World Beach Volley (set 3)", + "wbml", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", + "wbmlb", "Wonder Boy in Monster Land (English bootleg set 1)", + "wbmlbg", "Wonder Boy in Monster Land (English bootleg set 2)", + "wbmlbge", "Wonder Boy in Monster Land (English bootleg set 3)", + "wbmljb", "Wonder Boy in Monster Land (Japan bootleg)", + "wbmljo", "Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043)", + "wbmlvc", "Wonder Boy in Monster Land (English, Virtual Console)", + "wboy", "Wonder Boy (set 1, 315-5177)", + "wboy2", "Wonder Boy (set 2, 315-5178)", + "wboy2u", "Wonder Boy (set 2, not encrypted)", + "wboy3", "Wonder Boy (set 3, 315-5135)", + "wboy4", "Wonder Boy (315-5162, 4-D Warriors Conversion)", + "wboy5", "Wonder Boy (set 5, bootleg)", + "wboyo", "Wonder Boy (set 1, 315-5135)", + "wboysys2", "Wonder Boy (system 2)", + "wboyu", "Wonder Boy (prototype?)", + "wboyub", "Wonder Boy (US bootleg)", + "wc90", "Tecmo World Cup '90 (World)", + "wc90a", "Tecmo World Cup '90 (Euro set 1)", + "wc90b", "Tecmo World Cup '90 (Euro set 2)", + "wc90b1", "Euro League (Italian hack of Tecmo World Cup '90)", + "wc90b2", "Worldcup '90", + "wc90t", "Tecmo World Cup '90 (trackball set 1)", + "wcat3", "Wild Cat 3", + "wcatcher", "Mahjong Wakuwaku Catcher (Japan)", + "wcbowl", "World Class Bowling (v1.66)", + "wcbowl11", "World Class Bowling (v1.1)", + "wcbowl12", "World Class Bowling (v1.2)", + "wcbowl13", "World Class Bowling (v1.3)", + "wcbowl13j", "World Class Bowling (v1.3J, Japan)", + "wcbowl14", "World Class Bowling (v1.4)", + "wcbowl140", "World Class Bowling Tournament (v1.40)", + "wcbowl15", "World Class Bowling (v1.5)", + "wcbowl16", "World Class Bowling (v1.6)", + "wcbowl161", "World Class Bowling (v1.61)", + "wcbowl165", "World Class Bowling (v1.65)", + "wcbowldx", "World Class Bowling Deluxe (v2.00)", + "wcherry", "Win Cherry (ver 0.16 - 19990219)", + "wcombat", "World Combat (ver UAA?)", + "wcombatj", "World Combat (ver JAA)", + "wcombatk", "World Combat (ver KBC)", + "wcs_l2", "World Cup Soccer (Lx-2)", + "wcs_p2", "World Cup Soccer (Pa-2)", + "wcs_p3", "World Cup Soccer (Px-3)", + "wcsoccer", "World Challenge Soccer (rev.1)", + "wcsoccerd2", "World Challenge Soccer (disp.rev.2)", + "wcup90", "World Cup 90", + "wcvol95", "World Cup Volley '95 (Japan v1.0)", + "wd_03r", "Who Dunnit (0.3 R)", + "wd_048r", "Who Dunnit (0.48 R)", + "wd_10f", "Who Dunnit (1.0 French)", + "wd_10g", "Who Dunnit (1.0 Germany)", + "wd_10r", "Who Dunnit (1.0 R)", + "wd_11", "Who Dunnit (1.1)", + "wd_12", "Who Dunnit (1.2)", + "wd_12g", "Who Dunnit (1.2 Germany)", + "wdun", "Who Dunnit (Russia)", + "wecleman", "WEC Le Mans 24 (set 1)", + "wecleman2", "WEC Le Mans 24 (set 2)", + "weddingr", "Wedding Rhapsody (GX624 JAA)", + "welltris", "Welltris (World?, 2 players)", + "welltrisj", "Welltris (Japan, 2 players)", + "westgun2", "Western Gun Part II", + "weststry", "West Story (bootleg of Blood Bros.)", + "westvent", "Western Venture (Ver. AA.02.D)", + "wexpress", "Western Express (Japan, rev 4)", + "wexpressb1", "Western Express (bootleg set 1)", + "wexpressb2", "Western Express (bootleg set 2)", + "wexpressb3", "Western Express (bootleg set 3)", + "wfortune", "Wheel Of Fortune (set 1)", + "wfortunea", "Wheel Of Fortune (set 2)", + "wg3dh", "Wayne Gretzky's 3D Hockey", + "wgp", "World Grand Prix (US)", + "wgp2", "World Grand Prix 2 (Japan)", + "wgpj", "World Grand Prix (Japan)", + "wgpjoy", "World Grand Prix (joystick version) (Japan, set 1)", + "wgpjoya", "World Grand Prix (joystick version) (Japan, set 2)", + "wh1", "World Heroes (ALM-005)", + "wh1h", "World Heroes (ALH-005)", + "wh1ha", "World Heroes (set 3)", + "wh2", "World Heroes 2 (ALM-006)(ALH-006)", + "wh2j", "World Heroes 2 Jet (ADM-007)(ADH-007)", + "whalecsh", "Whales of Cash (20155711, Malaysia)", + "wheelfir", "Wheels & Fire", + "wheelrun", "Wheels Runner", + "wheregld", "Where's the Gold (20177111, Malaysia)", + "whirl_l2", "Whirlwind (L-2)", + "whirl_l3", "Whirlwind (L-3)", + "whirl_lg3", "Whirlwind (LG-3)", + "whiterus", "White Russia (Konami Endeavour)", + "whizz", "Whizz", + "whodunit", "Who Dunit (version 9.0)", + "whodunit8", "Who Dunit (version 8.0)", + "whoopee", "Pipi & Bibis / Whoopee!! (Teki Paki hardware)", + "whp", "World Heroes Perfect", + "wiggie", "Wiggie Waggie", + "wildfang", "Wild Fang / Tecmo Knight", + "wildfangs", "Wild Fang", + "wildfyre", "Wildfyre", + "wildone", "Wild One (4VXEC5357, New Zealand)", + "wildpkr", "Wild Poker (ver. D 1.01)", + "wildplt", "Wild Pilot", + "wildways", "Wild Ways (10130111, Malaysia)", + "willow", "Willow (USA)", + "willowj", "Willow (Japan)", + "willowo", "Willow (USA Old Ver.)", + "wilytowr", "Wily Tower", + "winbid", "Winning Bid (Russia)", + "winbingo", "Win Win Bingo (set 1)", + "winbingoa", "Win Win Bingo (set 2)", + "windheat", "Winding Heat (EAA, Euro v2.11)", + "windheata", "Winding Heat (AAA, Asia v2.11)", + "windheatj", "Winding Heat (JAA, Japan v2.11)", + "windheatu", "Winding Heat (UBC, USA v2.22)", + "wingwar", "Wing War (World)", + "wingwarj", "Wing War (Japan)", + "wingwaru", "Wing War (US)", + "wink", "Wink (set 1)", + "winka", "Wink (set 2)", + "winner81", "Winners Circle (81, 28*28 PCB)", + "winner81b", "Winners Circle (81, 18*22 PCB)", + "winner82", "Winners Circle (82)", + "winrun", "Winning Run", + "winrun91", "Winning Run '91 (Japan)", + "winrungp", "Winning Run Suzuka Grand Prix (Japan)", + "winspike", "Winning Spike (ver EAA)", + "winspikej", "Winning Spike (ver JAA)", + "wintbob", "The Winter Bobble (bootleg of Snow Bros.)", + "winterht", "Winter Heat (JUET 971012 V1.000)", + "wipeormt", "Wipeout (Ramtek) [TTL]", + "wipeout", "Wipeout (rev.2)", + "wiping", "Wiping", + "wiseguy", "Wise Guy", + "witch", "Witch", + "witchb", "Witch (With ranking)", + "witchcda", "Witch Card (Spanish, witch game, set 1)", + "witchcdb", "Witch Card (Spanish, witch game, set 2)", + "witchcdc", "Witch Card (English, no witch game)", + "witchcdd", "Witch Card (German, WC3050, set 1 )", + "witchcde", "Witch Card (Video Klein CPU box, set 2)", + "witchcdf", "Witch Card (English, witch game, lamps)", + "witchcdg", "Witch Card (Falcon, enhanced sound)", + "witchcdh", "Witch Card (German, WC3050, set 2 )", + "witchcdi", "Witch Card (German, WC3050, 27-4-94)", + "witchcdk", "Witch Game (Video Klein, set 2)", + "witchcrd", "Witch Card (Video Klein CPU box, set 1)", + "witchgme", "Witch Game (Video Klein, set 1)", + "witchjol", "Jolli Witch (Export, 6T/12T ver 1.57D)", + "witchryl", "Witch Royal (Export version 2.1)", + "witchs", "Witch (Sega License)", + "wits", "Wit's (Japan)", + "wivernwg", "Wivern Wings", + "wiz", "Wiz", + "wizard", "Wizard (Ver 1.0)", + "wizdfire", "Wizard Fire (Over Sea v2.1)", + "wizdfireu", "Wizard Fire (US v1.1)", + "wizt", "Wiz (Taito, set 1)", + "wizta", "Wiz (Taito, set 2)", + "wizwarz", "Wiz Warz (prototype)", + "wizzquiz", "Wizz Quiz (Konami version)", + "wizzquiza", "Wizz Quiz (version 4)", + "wjammers", "Windjammers / Flying Power Disc", + "wlcc", "Wan Li Chang Cheng (China, V638C)", + "wldarrow", "Wild Arrow (color, Standard V4.8)", + "wldcourt", "World Court (Japan)", + "wldcp_l1", "World Cup Soccer (L-1)", + "wldkicks", "World Kicks (WK2 Ver. A)", + "wldkicksa", "World Kicks (WK3 Ver. A)", + "wldkicksb", "World Kicks PCB (WKC1 Ver. A)", + "wldrider", "Wild Riders (JPN, USA, EXP, KOR, AUS)", + "wldstrek", "Wild Streak (Russia)", + "wldwitch", "Wild Witch (Export, 6T/12T ver 1.84A)", + "wldwitcha", "Wild Witch (Export, 6T/12T ver 1.57-SP)", + "wldwitchb", "Wild Witch (Export, 6T/12T ver 1.57-TE)", + "wldwitchc", "Wild Witch (Export, 6T/12T ver 1.62A)", + "wldwitchd", "Wild Witch (Export, 6T/12T ver 1.62B)", + "wldwitche", "Wild Witch (Export, 6T/12T ver 1.62A-F)", + "wldwitchf", "Wild Witch (Export, 6T/12T ver 1.62A alt)", + "wldwitchg", "Wild Witch (Export, 6T/12T ver 1.62B alt)", + "wldwitchh", "Wild Witch (Export, 6T/12T ver 1.65A)", + "wldwitchi", "Wild Witch (Export, 6T/12T ver 1.65A-S)", + "wldwitchj", "Wild Witch (Export, 6T/12T ver 1.65A-S alt)", + "wldwitchk", "Wild Witch (Export, 6T/12T ver 1.65A-N)", + "wldwitchl", "Wild Witch (Export, 6T/12T ver 1.70A beta)", + "wldwitchm", "Wild Witch (Export, 6T/12T ver 1.70A)", + "wldwitchn", "Wild Witch (Export, 6T/12T ver 1.70A alt)", + "wldwitcho", "Wild Witch (Export, 6T/12T ver 1.74A-SP-BELG)", + "wldwitchp", "Wild Witch (Export, 6T/12T ver 1.74A)", + "wldwitchq", "Wild Witch (Export, 6T/12T ver 1.74A alt)", + "wldwitchr", "Wild Witch (Export, 6B/12B ver 1.75A-E English)", + "wldwitchs", "Wild Witch (Export, 6T/12T ver 1.76A)", + "wldwitcht", "Wild Witch (Export, 6T/12T ver 1.77A)", + "wldwitchu", "Wild Witch (Export, 6T/12T ver 1.79A)", + "wldwitchv", "Wild Witch (Export, 6T/12T ver 1.83A)", + "wlstar", "Wonder League Star - Sok-Magicball Fighting (Korea)", + "wmatch", "Water Match (315-5064)", + "wmg", "Williams Multigame", + "wms", "WMS SetUp/Clear Chips (set 1)", + "wmsa", "WMS SetUp/Clear Chips (set 2)", + "wmsb", "WMS SetUp/Clear Chips (set 3)", + "wmsboom", "Boom (Russia)", + "wmstopb", "Top Banana (Russia)", + "wndrmomo", "Wonder Momo", + "wndrplnt", "Wonder Planet (Japan)", + "wof", "Warriors of Fate (World 921031)", + "wofa", "Sangokushi II (Asia 921005)", + "wofhfh", "Huo Feng Huang (Chinese bootleg of Sangokushi II)", + "wofj", "Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031)", + "wofr1", "Warriors of Fate (World 921002)", + "wofu", "Warriors of Fate (USA 921031)", + "wolffang", "Wolf Fang -Kuhga 2001- (Japan)", + "wolfman", "Wolf Man", + "wolfpack", "Wolf Pack (prototype)", + "wonder3", "Wonder 3 (Japan 910520)", + "wondl96", "Wonder League '96 (Korea)", + "wondstck", "Wonder Stick", + "woodpeca", "Woodpecker (set 2)", + "woodpeck", "Woodpecker (set 1)", + "worlddef", "World Defender", + "worldwar", "World Wars (World?)", + "wotw", "War of the Worlds", + "wotwc", "War of the Worlds (color)", + "wow", "Wizard of Wor", + "wowg", "Wizard of Wor (with German Language ROM)", + "wownfant", "WOW New Fantasia", + "wpksoc", "World PK Soccer", + "wpksocv2", "World PK Soccer V2 (ver 1.1)", + "wrally", "World Rally (set 1)", + "wrally2", "World Rally 2: Twin Racing", + "wrallya", "World Rally (set 2)", + "wrallyb", "World Rally (US, 930217)", + "wrecking", "Vs. Wrecking Crew", + "wrestwar", "Wrestle War (set 3, World, 8751 317-0103)", + "wrestwar1", "Wrestle War (set 1, Japan, FD1094 317-0090)", + "wrestwar2", "Wrestle War (set 2, World, FD1094 317-0102)", + "wrldtour", "Al's Garage Band Goes On A World Tour", + "wrldtour2", "Al's Garage Band Goes On A World Tour R02b", + "wrlok_l3", "Warlok (L-3)", + "wrofaero", "War of Aero - Project MEIOU", + "wrungp", "Wave Runner GP", + "ws", "World Stadium (Japan)", + "ws89", "World Stadium '89 (Japan)", + "ws90", "World Stadium '90 (Japan)", + "wsbbgd", "Super Major League / World Series Baseball (GDS-0010)", + "wschamp", "Wing Shooting Championship V2.00", + "wschampa", "Wing Shooting Championship V1.01", + "wschampb", "Wing Shooting Championship V1.00", + "wseries", "World Series: The Season", + "wsf", "World Soccer Finals", + "wsjr", "Who Shot Johnny Rock? v1.6", + "wsjr15", "Who Shot Johnny Rock? v1.5", + "wsports", "Winter Sports", + "wstrike", "Witch Strike (Export, 6T/12T ver 1.01A)", + "wstrikea", "Witch Strike (Export, 6T/12T ver 1.01B)", + "wswe", "World Soccer Winning Eleven Arcade Game Style", + "wswe2k3", "World Soccer Winning Eleven Arcade Game 2003", + "wtchjack", "Witch Jack (Export, 6T/12T ver 0.87-89)", + "wtchjacka", "Witch Jackpot (Export, 6T/12T ver 0.25)", + "wtchjackb", "Witch Jack (Export, 6T/12T ver 0.40)", + "wtchjackc", "Witch Jack (Export, 6T/12T ver 0.40T)", + "wtchjackd", "Witch Jack (Export, 6T/12T ver 0.62)", + "wtchjacke", "Witch Jack (Export, 6T/12T ver 0.64)", + "wtchjackf", "Witch Jack (Export, 6T/12T ver 0.65)", + "wtchjackg", "Witch Jack (Export, 6T/12T ver 0.70S)", + "wtchjackh", "Witch Jack (Export, 6T/12T ver 0.70P)", + "wtchjacki", "Witch Jack (Export, 6T/12T ver 0.87)", + "wtchjackj", "Witch Jack (Export, 6T/12T ver 0.87-88)", + "wtennis", "World Tennis", + "wtiger", "White Tiger Classic (0200954V, NSW/ACT)", + "wtigernz", "White Tiger (3VXFC5342, New Zealand)", + "wtrnymph", "Water-Nymph (Ver. 1.4)", + "wupndown", "Witch Up & Down (Export, 6T/12T ver 1.02)", + "wupndowna", "Witch Up & Down (Export, 6T/12T ver 0.99, set 1)", + "wupndownb", "Witch Up & Down (Export, 6T/12T ver 0.99, set 2)", + "wupndownc", "Witch Up & Down (Export, 6T/12T ver 0.99, set 3)", + "wupndownd", "Witch Up & Down (Export, 6T/12T ver 0.99T)", + "ww3", "WW III", + "ww_l2", "White Water (L-2)", + "ww_l3", "White Water (L-3)", + "ww_l4", "White Water (L-4)", + "ww_l5", "White Water (L-5)", + "ww_lh5", "White Water (LH-5)", + "ww_lh6", "White Water (LH-6)", + "ww_p1", "White Water (P-8 P-1 sound)", + "ww_p8", "White Water (P-8 P-2 sound)", + "wwallyj", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", + "wwallyja", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", + "wwestern", "Wild Western (set 1)", + "wwestern1", "Wild Western (set 2)", + "wwfmania", "WWF: Wrestlemania (rev 1.30 08/10/95)", + "wwfmaniab", "WWF: Wrestlemania (rev 1.20 08/02/95)", + "wwfmaniac", "WWF: Wrestlemania (rev 1.1 07/11/95)", + "wwfr_103", "WWF Royal Rumble (1.03)", + "wwfr_106", "WWF Royal Rumble (1.06)", + "wwfroyal", "WWF Royal Rumble (JPN, USA, EXP, KOR, AUS)", + "wwfsstar", "WWF Superstars (Europe)", + "wwfsstarb", "WWF Superstars (bootleg)", + "wwfsstarj", "WWF Superstars (Japan)", + "wwfsstaru", "WWF Superstars (US, Newer)", + "wwfsstarua", "WWF Superstars (US)", + "wwfwfest", "WWF WrestleFest (US set 1)", + "wwfwfesta", "WWF WrestleFest (US Tecmo)", + "wwfwfestb", "WWF WrestleFest (US bootleg)", + "wwfwfestj", "WWF WrestleFest (Japan)", + "wwfwfestk", "WWF WrestleFest (Korea)", + "wwjgtin", "Wai Wai Jockey Gate-In!", + "wyvernwg", "Wyvern Wings (set 1)", + "wyvernwga", "Wyvern Wings (set 2)", + "x2222", "X2222 (final debug?)", + "x2222o", "X2222 (5-level prototype)", + "x5jokers", "X Five Jokers (Version 1.12)", + "xday2", "X-Day 2 (Japan)", + "xenon", "Xenon", + "xenonf", "Xenon (French)", + "xenophob", "Xenophobe", + "xevi3dg", "Xevious 3D/G (Japan, XV31/VER.A)", + "xevios", "Xevios", + "xevious", "Xevious (Namco)", + "xeviousa", "Xevious (Atari, harder)", + "xeviousb", "Xevious (Atari)", + "xeviousc", "Xevious (Atari, Namco PCB)", + "xexex", "Xexex (ver EAA)", + "xexexa", "Xexex (ver AAA)", + "xexexj", "Xexex (ver JAA)", + "xfiles", "X-Files", + "xfiles2", "X-Files (2.04)", + "xfilesp", "X-Files (3.03)", + "xforce", "X Force", + "xiistag", "XII Stag (V2.01J)", + "xmcota", "X-Men: Children of the Atom (Euro 950331)", + "xmcotaa", "X-Men: Children of the Atom (Asia 950105)", + "xmcotaar1", "X-Men: Children of the Atom (Asia 941217)", + "xmcotah", "X-Men: Children of the Atom (Hispanic 950331)", + "xmcotahr1", "X-Men: Children of the Atom (Hispanic 950105)", + "xmcotaj", "X-Men: Children of the Atom (Japan 950105)", + "xmcotaj1", "X-Men: Children of the Atom (Japan 941222)", + "xmcotaj2", "X-Men: Children of the Atom (Japan 941219)", + "xmcotaj3", "X-Men: Children of the Atom (Japan 941217)", + "xmcotajr", "X-Men: Children of the Atom (Japan 941208 rent version)", + "xmcotar1", "X-Men: Children of the Atom (Euro 950105)", + "xmcotar1d", "X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg)", + "xmcotau", "X-Men: Children of the Atom (USA 950105)", + "xmen", "X-Men (4 Players ver UBB)", + "xmen2pa", "X-Men (2 Players ver AAA)", + "xmen2pe", "X-Men (2 Players ver EAA)", + "xmen2pj", "X-Men (2 Players ver JAA)", + "xmen6p", "X-Men (6 Players ver ECB)", + "xmen6pu", "X-Men (6 Players ver UCB)", + "xmena", "X-Men (4 Players ver AEA)", + "xmenaa", "X-Men (4 Players ver ADA)", + "xmene", "X-Men (4 Players ver EBA)", + "xmenj", "X-Men (4 Players ver JBA)", + "xmultipl", "X Multiply (World, M81)", + "xmultiplm72", "X Multiply (Japan, M72)", + "xmvsf", "X-Men Vs. Street Fighter (Euro 961004)", + "xmvsfa", "X-Men Vs. Street Fighter (Asia 961023)", + "xmvsfar1", "X-Men Vs. Street Fighter (Asia 961004)", + "xmvsfar2", "X-Men Vs. Street Fighter (Asia 960919)", + "xmvsfar3", "X-Men Vs. Street Fighter (Asia 960910)", + "xmvsfb", "X-Men Vs. Street Fighter (Brazil 961023)", + "xmvsfh", "X-Men Vs. Street Fighter (Hispanic 961004)", + "xmvsfj", "X-Men Vs. Street Fighter (Japan 961004)", + "xmvsfjr1", "X-Men Vs. Street Fighter (Japan 960910)", + "xmvsfjr2", "X-Men Vs. Street Fighter (Japan 960909)", + "xmvsfr1", "X-Men Vs. Street Fighter (Euro 960910)", + "xmvsfu", "X-Men Vs. Street Fighter (USA 961023)", + "xmvsfu1d", "X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg)", + "xmvsfur1", "X-Men Vs. Street Fighter (USA 961004)", + "xorworld", "Xor World (prototype)", + "xplan", "X-Plan (Ver. 1.01)", + "xrally", "Xtreme Rally / Off Beat Racer!", + "xsandos", "X's & O's", + "xsedae", "X Se Dae Quiz (Korea)", + "xsleena", "Xain'd Sleena (World)", + "xsleenab", "Xain'd Sleena (bootleg)", + "xsleenaj", "Xain'd Sleena (Japan)", + "xtheball", "X the Ball", + "xtom3d", "X Tom 3D", + "xtrain", "X-Train (Ver. 1.3)", + "xtrial", "Xtrial Racing (ver JAB)", + "xtrmhnt2", "Extreme Hunting 2", + "xtrmhunt", "Extreme Hunting", + "xxmissio", "XX Mission", + "xybots", "Xybots (rev 2)", + "xybots0", "Xybots (rev 0)", + "xybots1", "Xybots (rev 1)", + "xybotsf", "Xybots (French, rev 3)", + "xybotsg", "Xybots (German, rev 3)", + "xymg", "Xing Yun Man Guan (China, V651C)", + "xyonix", "Xyonix", + "yachtmn", "Yachtsman", + "yamagchi", "Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun", + "yamato", "Yamato (US)", + "yamato2", "Yamato (World?)", + "yamyam", "Yam! Yam!?", + "yanchamr", "Kaiketsu Yanchamaru (Japan)", + "yankeedo", "Yankee DO!", + "yarunara", "Mahjong Yarunara (Japan)", + "yellowcbb", "Yellow Cab (bootleg)", + "yellowcbj", "Yellow Cab (Japan)", + "yesnoj", "Yes/No Sinri Tokimeki Chart", + "yiear", "Yie Ar Kung-Fu (program code I)", + "yiear2", "Yie Ar Kung-Fu (program code G)", + "yieartf", "Yie Ar Kung-Fu (GX361 conversion)", + "yosakdon", "Yosaku To Donbei (set 1)", + "yosakdona", "Yosaku To Donbei (set 2)", + "yosimotm", "Mahjong Yoshimoto Gekijou [BET] (Japan)", + "yosimoto", "Mahjong Yoshimoto Gekijou (Japan)", + "youjyudn", "Youjyuden (Japan)", + "youkaidk1", "Yokai Douchuuki (Japan, old version (YD1))", + "youkaidk2", "Yokai Douchuuki (Japan, new version (YD2, Rev B))", + "youma", "Youma Ninpou Chou (Japan)", + "youma2", "Youma Ninpou Chou (Japan, alt)", + "youmab", "Youma Ninpou Chou (Game Electronics bootleg, set 1)", + "youmab2", "Youma Ninpou Chou (Game Electronics bootleg, set 2)", + "yujan", "Yu-Jan", + "yuka", "Yu-Ka", + "yukiwo", "Yukiwo (World, prototype)", + "yukon", "Yukon (version 2.0)", + "yukon1", "Yukon (version 1.0)", + "yukongld", "Yukon Gold (Russia)", + "yumefuda", "Yumefuda [BET]", + "yuyugogo", "Yuuyu no Quiz de GO!GO! (Japan)", + "yuyuhaku", "The Battle of Yu Yu Hakusho: Shitou! Ankoku Bujutsukai!", + "zankor", "Zankor (Italian speech)", + "zaryavos", "Zarya Vostoka", + "zarza", "Zarza", + "zarza1", "Zarza (alternate set)", + "zarzon", "Zarzon", + "zaviga", "Zaviga", + "zavigaj", "Zaviga (Japan)", + "zaxxon", "Zaxxon (set 1)", + "zaxxon2", "Zaxxon (set 2)", + "zaxxon3", "Zaxxon (set 3)", + "zaxxonb", "Jackson", + "zaxxonj", "Zaxxon (Japan)", + "zedblade", "Zed Blade / Operation Ragnarok", + "zekepeak", "Zeke's Peak", + "zektor", "Zektor (revision B)", + "zephy", "Zephy", + "zero", "Zero (set 1, Defender bootleg)", + "zero2", "Zero (set 2, Defender bootleg)", + "zerogu2", "Zero Gunner 2", + "zerogun", "Zero Gunner (Export, Model 2B)", + "zeroguna", "Zero Gunner (Export, Model 2A)", + "zerogunaj", "Zero Gunner (Japan, Model 2A)", + "zerogunj", "Zero Gunner (Japan, Model 2B)", + "zerohour", "Zero Hour (set 1)", + "zerohoura", "Zero Hour (set 2)", + "zeropnt", "Zero Point (set 1)", + "zeropnt2", "Zero Point 2", + "zeropnta", "Zero Point (set 2)", + "zeropntj", "Zero Point (Japan)", + "zeroteam", "Zero Team USA (set 1, US, Fabtek license)", + "zeroteama", "Zero Team (set 2, Japan? (earlier?))", + "zeroteamb", "Zero Team (set 3, Japan? (later batteryless))", + "zeroteamc", "Zero Team (set 4, Taiwan, Liang Hwa license)", + "zeroteamd", "Zero Team (set 5, Korea, Dream Soft license)", + "zeroteams", "Zero Team Selection", + "zeroteamsr", "Zero Team Suicide Revival Kit", + "zerotime", "Zero Time", + "zerotm2k", "Zero Team 2000", + "zerotrgt", "Zero Target (World, CW)", + "zerotrgta", "Zero Target (World, CT)", + "zerowing", "Zero Wing (2P set)", + "zerowing1", "Zero Wing (1P set)", + "zerowingw", "Zero Wing (2P set, Williams license)", + "zerozone", "Zero Zone", + "zgundm", "Mobile Suit Z-Gundam: A.E.U.G. vs Titans (ZGA1 Ver. A)", + "zgundmdx", "Mobile Suit Z-Gundam: A.E.U.G. vs Titans DX (ZDX1 Ver. A)", + "zigzag", "Zig Zag (Galaxian hardware, set 1)", + "zigzag2", "Zig Zag (Galaxian hardware, set 2)", + "zingzip", "Zing Zing Zip", + "zingzipbl", "Zing Zing Zip (bootleg)", + "zintrckb", "Zintrick / Oshidashi Zentrix (hack)", + "zipzap", "Zip & Zap", + "znpwfv", "Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)", + "zoar", "Zoar", + "zodiack", "Zodiack", + "zokumahj", "Zoku Mahjong Housoukyoku (Japan)", + "zokuoten", "Zoku Otenamihaiken (V2.03J)", + "zombraid", "Zombie Raid (9/28/95, US)", + "zombraidp", "Zombie Raid (9/28/95, US, prototype PCB)", + "zombraidpj", "Zombie Raid (9/28/95, Japan, prototype PCB)", + "zombrvn", "Zombie Revenge (JPN, USA, EXP, KOR, AUS)", + "zoo", "Zoo (Ver. ZO.02.D)", + "zookeep", "Zoo Keeper (set 1)", + "zookeep2", "Zoo Keeper (set 2)", + "zookeep3", "Zoo Keeper (set 3)", + "zoom909", "Zoom 909", + "zooo", "Zooo (V2.01J)", + "zortonbr", "Zorton Brothers (Los Justicieros)", + "zunkyou", "Zunzunkyou No Yabou (Japan)", + "zunou", "Touch De Zunou (Rev A)", + "zupapa", "Zupapa!", + "zwackery", "Zwackery", + "zzblock", "Zun Zun Block [TTL]", + "zzyzzyxx", "Zzyzzyxx (set 1)", + "zzyzzyxx2", "Zzyzzyxx (set 2)", + "z80", "Z80", + "gfxdecode", "gfxdecode", + "palette", "palette", + "screen", "Video Screen", + "speaker", "Speaker", + "i8255", "8255 PPI", + "samples", "Samples", + "sega005_sound", "005 Custom", + "m6803", "M6803", + "irem_audio", "Irem Audio", + "ay8910", "AY-3-8910A", + "msm5205", "MSM5205", + "vr4300be_drc", "VR4300 (big) DRC", + "rsp_drc", "RSP DRC", + "dmadac", "DMA-driven DAC", + "n64_periphs", "N64 Periphal Chips", + "sh4", "SH-4 (little)", + "timer", "Timer", + "arm7", "ARM7", + "maple_dc", "MAPLE_DC", + "93c46_16", "Serial EEPROM 93C46 (64x16)", + "powervr2", "PowerVR 2", + "aica", "AICA", + "aicartc", "AICA RTC", + "mie", "MIE", + "mie_jvs", "MIE-JVS", + "sega_837_13551", "SEGA-837-13551", + "93c46_8", "Serial EEPROM 93C46 (128x8)", + "x76f100", "X76F100 Flash", + "naomi_m2_board", "NAOMI-M2-BOARD", + "m68000", "M68000", + "ym2151", "YM2151", + "okim6295", "OKI6295", + "netlist_sound", "Netlist sound device", + "netlist_analog_input", "netlist analog input", + "ym2203", "YM2203", + "qsound", "Q-Sound", + "dsp16", "DSP16", + "pxa255", "PXA255", + "93c66_16", "Serial EEPROM 93C66 (256x16)", + "cxd8530cq", "CXD8530CQ", + "psxirq", "PSX IRQ", + "psxdma", "PSX DMA", + "psxmdec", "PSX MDEC", + "psxrcnt", "PSX RCNT", + "psxsio0", "PSX SIO-0", + "znsec", "ZNSEC", + "zndip", "ZNDIP", + "psxsio1", "PSX SIO-1", + "ram", "RAM", + "cxd8561q", "CXD8561Q", + "spu", "SPU", + "at28c16", "AT28C16", + "ym2610", "YM2610", + "upd4990a", "uPD4990A", + "nvram", "NVRAM", + "z180", "Z180", + "namco", "Namco", + "dac", "DAC", + "amd_29lv200t", "AMD 29LV200T Flash", + "i8080", "8080", + "mb14241", "MB14241", + "ym2610b", "YM2610B", + "mc68hc11", "MC68HC11", + "m6809", "M6809", + "via6522", "6522 VIA", + "pia6821", "6821 PIA", + "c6545_1", "C6545-1 CRTC", + "mc146818", "MC146818", + "arm7_be", "ARM7 (big endian)", + "cdrom_image", "CD-ROM Image", + "nb1413m3", "Nichibutsu NB1413M3", + "kaneko_pandora", "Kaneko Pandora - PX79C480FP-3", + "upd7810", "uPD7810", + "ym2413", "YM2413", + "vsystem_spr", "vsystem_spr_device", + "i8088", "I8088", + "gotsndr2", "Gottlieb Sound rev. 2", + "m6502", "M6502", + "ay8913", "AY-3-8913A", + "sp0250", "SP0250", + "m68705", "M68705", + "buggychl_mcu", "BuggyChl MCU", + "msm5232", "MSM5232", + "v70", "V70", + "ymf271", "YMF271", + "sn76489a", "SN76489A", + "z80pio", "Z8420 PIO", + "isa8", "ISA8", + "isa8_slot", "ISA8_SLOT", + "4enlinea_cga", "ISA8_CGA_4ENLINEA", + "mc6845", "MC6845 CRTC", + "7474", "7474 TTL", + "galaxian_sound", "Galaxian Custom", + "discrete", "DISCRETE", + "tmp68301", "TMP68301", + "z80ctc", "Z80 CTC", + "ym3812", "YM3812", + "mc65c02", "M65C02", + "r4650be_drc", "IDT R4650 (big) DRC", + "h83002", "H8/3002", + "h8h_intc", "H8H INTC", + "h8_adc_3337", "H8 ADC 3337", + "h8_digital_port", "H8 digital port", + "h8_timer16", "H8 16-bits timer", + "h8h_16bits_timer_channel", "H8H 16-bits timer channel", + "h8_sci", "H8 Serial Communications Interface", + "namco_settings", "Namco settings device", + "rtc4543", "Epson R4543", + "devcb2_line_dispatch", "Line dispatcher (2 slots)", + "c352", "C352", + "ptm6840", "6840 PTM", + "t11", "T11", + "2804", "Parallel EEPROM 2804 (512x8)", + "tilemap", "Tilemap", + "atarimo", "Atari Motion Objects", + "atarscom", "Atari Sound Communications", + "pokey", "POKEY", + "tms5220c", "TMS5220C", + "decospr", "decospr_device", + "h46505", "H46505 CRTC", + "konami_cpu", "KONAMI", + "k052109", "Konami 052109", + "k051960", "Konami 051960", + "k051316", "Konami 051316", + "upd7759", "uPD7759", + "s2650", "S2650", + "s2636", "Signetics 2636", + "tms5100", "TMS5100", + "i8257", "DMA8257", + "latch8", "8 bit latch", + "mb8884", "MB8884", + "sn76496", "SN76496", + "pentium", "PENTIUM", + "pit8259", "8259 PIC", + "am9517a", "AM9517A", + "pit8254", "8254 PIT", + "kbdc8042", "Keyboard Controller 8042", + "at_keyb", "AT Keyboard", + "pci_bus_legacy", "PCI Bus Legacy", + "vga", "VGA", + "tms34010", "TMS34010", + "tms32026", "TMS32026", + "tlc34076", "TLC34076", + "r3041", "R3041", + "jaguargpu", "Jaguar GPU", + "jaguardsp", "Jaguar DSP", + "vt83c461", "VIA VT83C461", + "ata_slot", "ATA Connector", + "cojag_hdd", "cojag HDD", + "harddisk_image", "Harddisk", + "mediagx", "MEDIAGX", + "ide_controller", "IDE Controller (32 bit)", + "hdd", "IDE Hard Disk", + "ramdac", "ramdac", + "cdrom", "ATAPI CDROM", + "ppc403gcx", "PowerPC 403GCX", + "ymz280b", "YMZ280B", + "i80186", "I80186", + "leland_80186_sound", "Leland 80186 DAC", + "decocpu3", "Data East Pinball CPU Board Type 3", + "m6808", "M6808", + "decobsmt", "Data East/Sega/Stern BSMT2000 Sound Board", + "bsmt2000", "BSMT2000", + "tms32015", "TMS32015", + "decodmd2", "Data East Pinball Dot Matrix Display Type 2", + "m6809e", "M6809E", + "m6800", "M6800", + "h83048", "H8/3048", + "fd1094", "FD1094", + "sega_315_5248", "Sega 315-5248 Multiplier", + "sega_315_5249", "Sega 315-5249 Divider", + "sega_315_5250", "Sega 315-5250 Compare/Timer", + "sega_xboard_sprite", "Sega X-Board Sprites", + "segaic16_video", "Sega 16-bit Video", + "segaic16_road", "Sega 16-bit Road Generator", + "segapcm", "Sega PCM", + "sega_315_5195", "Sega 315-5195 Memory Mapper", + "sega_16bit_sprite", "Sega System 16B Sprites", + "n7751", "N7751", + "i8243", "I8243", + "sega_sys16a_sprite", "Sega System 16A Sprites", + "m68020", "M68020", + "tms32025", "TMS32025", + "m37702", "M37702", + "2864", "Parallel EEPROM 2864 (8192x8)", + "arm920t", "ARM920T", + "serflash", "SERFLASH", + "nmk004", "NMK004", + "h6280", "H6280", + "deco_bac06", "decbac06_device", + "deco_mxc06", "decmxc06_device", + "pic16c57", "PIC16C57", + "tmsprom", "TMSPROM", + "tms5110a", "TMS5110A", + "mc68307", "MC68307", + "mc68681", "MC68681", + "mc68681_channel", "DUART 68681 channel", + "bfm_bda", "BFM BDA VFD controller", + "mc68340", "MC68340", + "mcf5206e", "MCF5206E", + "mcf5206e_peripheral", "MCF5206E Peripheral", + "m68ec020", "M68EC020", + "m37710", "M37710", + "arm", "ARM", + "aakart", "AAKART", + "vsystem_spr2", "vsystem_spr2_device", + "vector_device", "VECTOR", + "dvg", "DVG", + "fd1089a", "FD1089A", + "sn76494", "SN76494", + "wpc", "Williams WPC ASIC", + "adsp2105", "ADSP-2105", + "tc0220ioc", "Taito TC0220IOC", + "tc0080vco", "Taito TC0080VCO", + "tc0140syt", "Taito TC0140SYT", + "v33", "V33", + "v35", "V35", + "iremga20", "Irem GA20", + "hd63705", "HD63705", + "c140", "C140", + "v30", "V30", + "m72_audio", "M72 Custom", + "naomi_rom_board", "NAOMI-ROM-BOARD", + "tms32010", "TMS32010", + "seibu_sound", "Seibu Sound System", + "k007232", "K007232", + "msm6242", "msm6242", + "taito_en", "Taito Ensoniq Sound System", + "mb87078", "Fujitsu MB87078", + "es5505", "ES5505", + "buffered_spriteram", "Buffered Sprite RAM", + "k007121", "Konami 007121", + "k051649", "K051649", + "sega315_5313", "Sega 315-5313 (Genesis VDP)", + "ym2612", "YM2612", + "segapsg", "SEGA VDP PSG", + "hc55516", "HC-55516", + "ldp1450", "Sony LDP-1450", + "amiga_paula", "Amiga Paula", + "legacy_mos8520", "LEGACY_MOS8520", + "amiga_fdc", "Amiga FDC", + "m6802", "M6802", + "v60", "V60", + "ym3438", "YM3438", + "rf5c68", "RF5C68", + "ymf278b", "YMF278B", + "huc6260", "HuC6260 VCE", + "huc6270", "HuC6270 VDC", + "c6280", "HuC6280", + "sn76477", "SN76477", + "address_map_bank", "Address Map Bank", + "hd63701", "HD63701", + "fd1089b", "FD1089B", + "gaelco_gae1", "Gaelco GAE1", + "m6504", "M6504", + "ym3526", "YM3526", + "avg_mhavoc", "AVG_MHAVOC", + "cdp1802", "CDP1802", + "cdp1852", "CDP1852", + "cdp1869", "RCA CDP1869", + "i8751", "I8751", + "ay8912", "AY-3-8912A", + "i8086", "I8086", + "r6545_1", "R6545-1 CRTC", + "sn76489", "SN76489", + "ticket_dispenser", "Ticket Dispenser", + "gamtor_vga", "GAMTOR_VGA", + "ttl74123", "TTL 74123", + "okim9810", "OKI9810", + "macronix_29l001mc", "Macronix 29L001MC Flash", + "aw_rom_board", "AW-ROM-BOARD", + "dcctrl", "DC_CONTROLLER", + "netlist_cpu", "Netlist cpu device", + "fixfreq", "FIXFREQ", + "e132xn", "E1-32XN", + "v20", "V20", + "m65sc02", "M65SC02", + "tc0100scn", "Taito TC0100SCN", + "tc0150rod", "Taito TC0150ROD", + "tc0110pcr", "Taito TC0110PCR", + "filter_volume", "Volume Filter", + "cxd8661r", "CXD8661R", + "cxd8654q", "CXD8654Q", + "mb8841", "MB8841", + "tms9118", "TMS9118 VDP", + "speaker_sound", "Filtered 1-bit DAC", + "seta001", "seta001_device", + "x1_010", "X1-010", + "atari2804", "Atari EEPROM Interface (2804)", + "tmp90841", "TMP90841", + "nmk112", "NMK 112", + "wmscvsd", "Williams CVSD Sound Board", + "gotsndr1", "Gottlieb Sound rev. 1", + "riot6532", "6532 RIOT", + "ym2149", "YM2149", + "tms34061", "TMS34061 VSC", + "ccpu", "Cinematronics CPU", + "n2a03", "N2A03", + "nesapu", "N2A03 APU", + "vlm5030", "VLM5030", + "tc0180vcu", "Taito TC0180VCU", + "naomi_m4_board", "NAOMI-M4-BOARD", + "pps4", "PPS4", + "atari_vg_earom", "ATARI VG EAROM", + "er5911_8", "Serial EEPROM ER5911 (128x8)", + "k056832", "Konami 056832", + "k05324x", "Konami 053244 & 053245", + "k053251", "Konami 053251", + "k053260", "K053260", + "sh2_drc", "SH-2 DRC", + "scudsp", "SCUDSP", + "scsp", "SCSP", + "cdda", "CD/DA", + "i8035", "I8035", + "sega_speech_sound", "Sega Speech Sound Board", + "sega315_5124", "Sega 315-5124", + "ldv1000", "Pioneer LD-V1000", + "pc090oj", "Taito PC090OJ", + "ymf262", "YMF262", + "93c56_16", "Serial EEPROM 93C56 (128x16)", + "wsf_80186_sound", "WSF 80186 DAC", + "m68010", "M68010", + "ataxx_80186_sound", "Ataxx 80186 DAC", + "trackfld_audio", "Track And Field Audio", + "hyprolyb_adpcm", "Hyper Olympics Audio", + "i8039", "I8039", + "mos656x_attack_ufo", "MOS656X", + "ppc603", "PowerPC 603", + "naomi_gdrom_board", "NAOMI-GDROM-BOARD", + "i8085a", "8085A", + "tms36xx", "TMS36XX", + "phoenix_sound", "Phoenix Custom", + "roc10937", "Rockwell 10937 VFD controller and compatible", + "acia6850", "6850 ACIA", + "clock", "Clock", + "i8031", "I8031", + "tms9928a", "TMS9928A VDP", + "deco16ic", "Data East IC 55 / 56 / 74 / 141", + "microtouch_serial", "Microtouch Serial Touchscreen", + "h63484", "H63484", + "atari2816", "Atari EEPROM Interface (2816)", + "2816", "Parallel EEPROM 2816 (2048x8)", + "cclimber_audio", "cclimber Sound Board", + "kaneko_view2_tilemap", "kaneko_view2_tilemap_device", + "kaneko16_sprite", "kaneko16_sprite_device", + "ppu2c04", "2C04 PPU", + "gaelco_cg1v", "Gaelco CG1V", + "ppc603e", "PowerPC 603e", + "scsibus", "SCSI bus", + "lsi53c810", "53C810 SCSI", + "k573cassslotserial", "KONAMI 573 CASSETTE SLOT (SERIAL)", + "mb89371", "MB89371", + "ata_interface", "ATA Interface", + "cr589", "Matsushita CR589", + "k573cassslot", "KONAMI 573 CASSETTE SLOT", + "k573cassx", "KONAMI 573 CASSETTE X", + "x76f041", "X76F041 Flash", + "fujitsu_29f016a", "Fujitsu 29F016A Flash", + "pccard", "PCCARD SLOT", + "m48t58", "M48T58", + "adc0834", "ADC0834", + "upd4701", "NEC uPD4701 Encoder", + "i386", "I386", + "ds2404", "DS2404", + "intel_e28f008sa", "Intel E28F008SA Flash", + "fifo7200", "IDT7200 FIFO", + "tmp95c063", "TMP95C063", + "atarivad", "Atari VAD", + "atjsa3", "Atari JSA III Sound Board", + "decocpu3b", "Data East Pinball CPU Board Type 3B", + "decodmd3", "Data East Pinball Dot Matrix Display Type 3", + "adsp2181", "ADSP-2181", + "gp9001vdp", "GP9001_VDP", + "v25", "V25", + "upd7807", "uPD7807", + "namco51", "Namco 51xx", + "mb8843", "MB8843", + "namco06xx", "Namco 06xx", + "hd6309", "HD6309", + "k007342", "Konami 007342", + "k007420", "Konami 007420", + "93c66_8", "Serial EEPROM 93C66 (512x8)", + "arm9", "ARM9", + "s3c2410", "Samsung S3C2410", + "qs1000", "QS1000", + "i8052", "I8052", + "i2cmem", "I2CMEM", + "s11c_bg", "Williams System 11C background music", + "asap", "ASAP", + "beezer_sound", "beezer SFX", + "i960kb", "i960kb", + "segas24_tile", "S24TILE", + "y8950", "Y8950", + "ttl74181", "TTL 74181", + "s14001a", "S14001A", + "exidy_sfx", "Exidy SFX", + "v9938", "V9938", + "r65c02", "R65C02", + "hd61830", "HD61830 LCDC", + "timeplt_audio", "Time Pilot Audio", + "filter_rc", "RC Filter", + "tiamc1_sound", "TIA-MC1 Custom", + "saa1099", "SAA1099", + "r5000le_drc", "R5000 (little) DRC", + "bus_master_ide_controller", "Bus Master IDE Controller", + "voodoo_1", "3dfx Voodoo Graphics", + "adsp2115", "ADSP-2115", + "k054338", "Konami 054338", + "k055555", "Konami 055555", + "h83044", "H8/3044", + "i486", "I486", + "k051733", "Konami 051733", + "midsg", "Midway Sounds Good Sound Board", + "seibu_crtc", "Seibu CRT Controller", + "es5506", "ES5506", + "kaneko_toybox", "kaneko_toybox_device", + "kaneko_hit", "kaneko_hit_device", + "atjsa1", "Atari JSA I Sound Board", + "k054000", "Konami 054000", + "k053936", "Konami 053936", + "k054539", "K054539", + "rtc65271", "RTC65271", + "pc16552d", "National Semiconductor PC16552D", + "ns16550", "National Semiconductor NS16550", + "scsicd", "SCSICD", + "am53cf96", "53CF96 SCSI", + "rf5c400", "RF5C400", + "decoc10707", "DECO C10707", + "segas24_sprite", "S24SPRITE", + "segas24_mixer", "S24MIXER", + "warpwarp_sound", "Warp Warp Custom", + "cirrus_vga", "Cirrus Logic VGA", + "ns16450", "National Semiconductor NS16450", + "decocomn", "Data East Common Video Functions", + "deco104", "DECO104PROT", + "deco16", "DECO16", + "deco222", "DECO 222", + "e116t", "E1-16T", + "wpcsnd", "Williams WPC Sound", + "namco50", "Namco 50xx", + "mb8842", "MB8842", + "namco52", "Namco 52xx", + "namco54", "Namco 54xx", + "mb8844", "MB8844", + "am29000", "AMD Am29000", + "i8051", "I8051", + "mc68901", "Motorola MC68901", + "micro3d_sound", "Microprose Custom", + "h83008", "H8/3008", + "h8_adc_3006", "H8 ADC 3006", + "mpc8240", "PowerPC MPC8240", + "voodoo_3", "3dfx Voodoo 3", + "avg_bzone", "AVG_BZONE", + "mathbox", "MATHBOX", + "kaneko_calc3", "kaneko_calc3_device", + "okim6376", "OKI6376", + "deco_karnovsprites", "karnovsprites_device", + "tms9128", "TMS9128 VDP", + "cxd8530bq", "CXD8530BQ", + "cxd8514q", "CXD8514Q", + "sharp_lh28f400", "Sharp LH28F400 Flash", + "decocpu7", "DECO CPU-7", + "ppc602", "PowerPC 602", + "decodmd1", "Data East Pinball Dot Matrix Display Type 1", + "tms34020", "TMS34020", + "m6801", "M6801", + "k005289", "K005289", + "i8279", "8279 KDC", + "k053252", "Konami 053252", + "k053247", "Konami 053246 & 053247", + "buggyboy_sound", "Buggy Boy Custom", + "ppc403ga", "PowerPC 403GA", + "ppc604", "PowerPC 604", + "k001604", "Konami 001604", + "cobra_jvs_host", "COBRA_JVS_HOST", + "cobra_jvs", "COBRA_JVS", + "alpha8301", "ALPHA-8301", + "avg", "AVG", + "seibu_adpcm", "Seibu ADPCM", + "i8041", "I8041", + "decocass_tape", "DECO Cassette Tape", + "trident_vga", "Trident VGA", + "smc91c94", "SMC91C94", + "tc0280grd", "Taito TC0280GRD & TC0430GRW", + "tc0360pri", "Taito TC0360PRI", + "e132n", "E1-32N", + "i8032", "I8032", + "deco146", "DECO146PROT", + "i80c32", "I80C32", + "vr4310le_drc", "VR4310 (little) DRC", + "voodoo_banshee", "3dfx Voodoo Banshee", + "74148", "TTL 74148", + "74153", "TTL 74153", + "rm7000le_drc", "RM7000 (little) DRC", + "m48t37", "M48T37", + "hd6303y", "HD6303Y", + "exidy440_sound", "Exidy 440 CVSD", + "tc0480scp", "Taito TC0480SCP", + "x2212", "X2212 NVRAM", + "akiko", "CBM AKIKO", + "microtouch", "Microtouch Touchscreen", + "scc68070", "SCC68070", + "mcd212", "MCD212", + "cdi68070", "CDI68070", + "cdicdic", "CDICDIC", + "cdislave", "CDISLAVE", + "m48t08", "MK48T08", + "alpha8201", "ALPHA-8201", + "pentium3", "Pentium III", + "ataflash", "ATA Flash PCCARD", + "mb3773", "MB3773", + "intel_te28f160", "Intel TE28F160 Flash", + "intel_e28f400b", "Intel E28F400B Flash", + "taito_zoom", "Taito Zoom Sound System", + "mn1020012a", "MN1020012A", + "zsg2", "ZSG-2", + "ide_baseboard", "IDE Baseboard", + "tc8830f", "TC8830F", + "cxd8606bq", "CXD8606BQ", + "cxd8561cq", "CXD8561CQ", + "i8742", "I8742", + "pr8210", "Pioneer PR-8210", + "i8049", "I8049", + "wiping_sound", "Wiping Custom", + "naomi_m1_board", "NAOMI-M1-BOARD", + "h83337", "H8/3337", + "h8_intc", "H8 INTC", + "h8_8bits_timer_channel", "H8 8-bits timer channel", + "h8_16bits_timer_channel", "H8 16-bits timer channel", + "h83007", "H8/3007", + "sh1_drc", "SH-1 DRC", + "tms9980a", "TMS9980A", + "wd33c93", "33C93 SCSI", + "cps3_custom", "CPS3 Custom", + "midssio", "Midway SSIO Sound Board", + "gms30c2132", "GMS30C2132", + "h83334", "H8/3334", + "tms32032", "TMS32032", + "adsp2104", "ADSP-2104", + "m48t35", "M48T35", + "tms32031", "TMS32031", + "tms57002", "TMS57002", + "scsihd", "SCSIHD", + "cxd8538q", "CXD8538Q", + "k056800", "Konami 056800 MIRAC", + "se3208", "SE3208", + "vr0video", "VRender0 Video", + "ds1302", "DS1302", + "vrender0", "VRender0", + "cem3394", "CEM3394", + "tms9927", "TMS9927 VTC", + "cquestrot", "Cube Quest Rotate CPU", + "cquestlin", "Cube Quest Line CPU", + "cquestsnd", "Cube Quest Sound CPU", + "simutrek", "Simutrek Modified PR-8210", + "i8748", "I8748", + "st0016", "ST0016", + "seibu_cop_legacy", "Seibu COP Legacy", + "atjsa2", "Atari JSA II Sound Board", + "sknsspr", "sknsspr_device", + "k055673", "Konami 055673", + "keycus_c431", "KEYCUS C431", + "m68040", "M68040", + "tms32051", "TMS32051", + "tc0640fio", "Taito TC0640FIO", + "93c56_8", "Serial EEPROM 93C56 (256x8)", + "pc080sn", "Taito PC080SN", + "toshiba_t5182", "T5182", + "ppc603r", "PowerPC 603R", + "mb86233", "MB86233", + "segam1audio", "Sega Model 1 Sound Board", + "multipcm", "Sega/Yamaha 315-5560", + "tc0510nio", "Taito TC0510NIO", + "v3021", "v3021", + "ics2115", "ICS2115", + "rtc9701", "rtc9701", + "ymz770", "Yamaha YMZ770", + "epic12", "epic12_device", + "sh3be", "SH-3 (big)", + "linearflash16mb", "Linear Flash PCCARD (16MB)", + "k573mcr", "Konami Memory Card Reader", + "k573cassyi", "KONAMI 573 CASSETTE YI", + "ds2401", "DS2401", + "linearflash32mb", "Linear Flash PCCARD (32MB)", + "k573dio", "Konami 573 digital I/O board", + "mas3507d", "MAS3507D", + "k573casszi", "KONAMI 573 CASSETTE ZI", + "zs01", "ZS01", + "k573cassxi", "KONAMI 573 CASSETTE XI", + "m68301", "M68301", + "midtcs", "Midway Turbo Chip Squeak Sound Board", + "5a22", "5A22", + "spc700", "SPC700", + "snes_sound", "SNES Custom DSP (SPC700)", + "beep", "Beep", + "tc0091lvc", "TC0091LVC", + "namco53", "Namco 53xx", + "58xx", "Namco 58xx", + "56xx", "Namco 56xx", + "i80c51", "I80C51", + "z80dma", "Z8410 DMA", + "pr7820", "Pioneer PR-7820", + "z80sio", "Z80 SIO", + "22vp932", "Phillips 22VP932", + "adsp21062", "ADSP21062", + "ds1204", "DS1204", + "midsnt", "Midway Squawk 'n' Talk Sound Board", + "tms5200", "TMS5200", + "cop402", "COP402", + "pic16c55", "PIC16C55", + "igs_025_022", "IGS025", + "igs022", "IGS022", + "upd96050", "uPD96050", + "k573msu", "Konami Multi Session Unit", + "adc0838", "ADC0838", + "keycus_c410", "KEYCUS C410", + "astrocade", "Astrocade", + "i8251", "I8251", + "sega_sharrier_sprite", "Sega Space Harrier Sprites", + "avg_starwars", "AVG_STARWARS", + "tms5220", "TMS5220", + "i80188", "I80188", + "snk6502_sound", "snk6502 Custom", + "venture_sound", "Exidy SFX+PSG", + "nscsi_bus", "NSCSI Bus", + "nscsi_connector", "NSCSI device connector abstraction", + "scsi_harddisk", "SCSI HARDDISK", + "ncr537xx", "53C7xx SCSI", + "pit8253", "8253 PIT", + "filetto_cga", "ISA8_CGA_FILETTO", + "tetriskr_cga", "ISA8_CGA_TETRISKR", + "namco_c45_road", "Namco C45 Road", + "e132t", "E1-32T", + "tms9995", "TMS9995", + "22vp931", "Phillips 22VP931", + "i4004", "Intel I4004", + "hd6845", "HD6845 CRTC", + "flower_sound", "Flower Custom Sound", + "e132xt", "E1-32XT", + "toaplan_scu", "toaplan_scu_device", + "nsc8105", "NSC8105", + "i8741", "I8741", + "funcube_touchscrene", "Funcube Touchscreen", + "namco62", "Namco 62xx", + "93c76_8", "Serial EEPROM 93C76 (1024x8)", + "kaneko_grap2", "kaneko_grap2_device", + "upd7756", "uPD7756", + "voodoo_2", "3dfx Voodoo 2", + "taito8741_4pack", "Taito 8741 MCU 4 pack", + "msm6585", "MSM6585", + "st0020", "st0020_device", + "geebee_sound", "Gee Bee Custom", + "namco_63701x", "Namco 63701X", + "sega_yboard_sprite", "Sega Y-Board Sprites", + "huc6202", "HuC6202 VPC", + "i8155", "8155 RIOT", + "bfm_bd1", "BFM BD1 VFD controller", + "bfm_adder2", "BFM ADDER2", + "gomoku_sound", "Gomoku Custom", + "k033906", "Konami 033906", + "k037122", "Konami 0371222", + "adc12138", "ADC12138", + "mb_vcu", "Mazer Blazer custom VCU", + "gridlee_sound", "Gridlee Custom", + "ym2608", "YM2608", + "m48t02", "M48T02", + "k573npu", "Konami Network PCB Unit", + "adc1038", "ADC1038", + "k056230", "Konami 056230", + "atari_rle", "Atari RLE Motion Objects", + "asic65", "ASIC65", + "ins8050", "INS 8050 SC/MP", + "sega_hangon_sprite", "Sega Hang On Sprites", + "adsp2100", "ADSP-2100", + "adsp2101", "ADSP-2101", + "dsp32c", "DSP32C", + "i8080a", "8080A", + "k573cassy", "KONAMI 573 CASSETTE Y", + "h8s2394", "H8S/2394", + "h8s_intc", "H8S INTC", + "h8_adc_2357", "H8 ADC 2357", + "h8s_16bits_timer_channel", "H8S 16-bits timer channel", + "segausbrom", "Sega Universal Sound Board with ROM", + "tms9902", "TMS9902 ACC", + "ppu2c05_01", "2C05_01 PPU", + "janshi_vdp", "JANSHIVDP", + "wmsadpcm", "Williams ADPCM Sound Board", + "josvolly8741_4pack", "joshi Vollyball 8741 MCU 4 pack", + "v810", "V810", + "midi_kbd", "Generic MIDI Keyboard", + "r4600le_drc", "R4600 (little) DRC", + "hd63484", "HD63484 CRTC", + "renegade_adpcm", "Renegade Custom ADPCM", + "tms3615", "TMS3615", + "er2055", "ER2055", + "pentium4", "Pentium 4", + "indervd", "Inder / Dinamic TMS Video", + "cop420", "COP420", + "decocpu1", "Data East Pinball CPU Board Type 1", + "snkwave", "SNK Wave", + "r5000be_drc", "R5000 (big) DRC", + "tmp91640", "TMP91640", + "saa5050", "SAA5050", + "m58715", "M58715", + "indersb", "Inder 4xDAC Sound Board", + "sega315_5246", "Sega 315-5246", + "cartslot_image", "Cartslot", + "software_list", "Software list", + "k053250", "K053250", + "ppu2c05_02", "2C05_02 PPU", + "gms30c2116", "GMS30C2116", + "mjkjidai_adpcm", "Custom ADPCM", + "decocpu2", "Data East Pinball CPU Board Type 2", + "atjsa3s", "Atari JSA IIIs Sound Board", + "es5503", "Ensoniq ES5503", + "u8106", "U8106", + "mc3417", "MC3417", + "keycus_c443", "KEYCUS C443", + "wmsnarc", "Williams NARC Sound Board", + "naughtyb_sound", "Naughty Boy Custom", + "ygv608", "YGV608", + "m50458", "m50458", + "s3520cf", "s3520cf", + "rp5h01", "RP5H01", + "m6m80011ap", "M6M80011AP EEPROM", + "igs028", "IGS028", + "upd4992", "uPD4992", + "sega_outrun_sprite", "Sega Out Run Sprites", + "er5911_16", "Serial EEPROM ER5911 (64x16)", + "y2404", "Y2404", + "59xx", "Namco 59xx", + "e116xt", "E1-16XT", + "bootleg_sys16a_sprite", "Bootleg System 16A Sprites", + "es8712", "ES8712", + "ppu2c03b", "2C03B PPU", + "segausb", "Sega Universal Sound Board", + "pleiads_sound", "Pleiads Custom", + "dsp56156", "DSP56156", + "linearflash64mb", "Linear Flash PCCARD (64MB)", + "keycus_c432", "KEYCUS C432", + "z8002", "Z8002", + "polepos_sound", "Pole Position Custom", + "netlist_analog_output", "netlist analog output", + "popflame_sound", "Pop Flamer Custom", + "keycus_c411", "KEYCUS C411", + "decocpu6", "DECO CPU-6", + "mb90082", "mb90082", + "puzzlet_io", "Puzzlet Coin/Start I/O", + "pentium2", "Pentium II", + "avg_quantum", "AVG_QUANTUM", + "i5000snd", "I5000", + "m58819", "M58819", + "m58817", "M58817", + "gaelco_serial", "gaelco_serial", + "at89c4051", "AT89C4051", + "redbaron_custom", "Red Baron Custom", + "redline_80186_sound", "Redline Racer 80186 DAC", + "sp0256", "SP0256", + "s3_vga", "S3 Graphics VGA", + "ibm8514a", "IBM8514A", + "bfm_dm01", "Bellfruit Dotmatrix 01", + "digitalker", "Digitalker", + "dsbz80", "Sega Z80-based Digital Sound Board", + "dm9368", "DM9368", + "m3745x", "Mitsubishi M37450", + "i860xr", "i860XR", + "i80c31", "I80C31", + "m68ec030", "M68EC030", + "keycus_c409", "KEYCUS C409", + "r3051", "R3051", + "gms30c2232", "GMS30C2232", + "midcsd", "Midway Chip Squeak Deluxe Sound Board", + "nile", "NiLe", + "keycus_c442", "KEYCUS C442", + "cxd8530aq", "CXD8530AQ", + "keycus_c406", "KEYCUS C406", + "avg_tempest", "AVG_TEMPEST", + "cop421", "COP421", + "avg_tomcat", "AVG_TOMCAT", + "ppu2c05_04", "2C05_04 PPU", + "tia_ntsc_video", "TIA Video (NTSC)", + "tia_sound", "TIA", + "esrip", "ESRIP", + "turrett_hdd", "Turrett Tower HDD", + "ttsnd", "Turret Tower Sound", + "tx1_sound", "TX-1 Custom", + "scn2674_device", "scn2674_device", + "ins8154", "INS8154", + "victory_sound", "Exidy SFX+PSG+Speech", + "ppu2c05_03", "2C05_03 PPU", + "r4700le_drc", "R4700 (little) DRC", + "ds5002fp", "DS5002FP", + "keycus_c430", "KEYCUS C430", + NULL +}; diff --git a/src/PlatformId.cpp b/src/PlatformId.cpp index 2f7b4ac9b..34c18da6b 100644 --- a/src/PlatformId.cpp +++ b/src/PlatformId.cpp @@ -1,6 +1,8 @@ #include "PlatformId.h" #include +extern const char* mameNameToRealName[]; + namespace PlatformIds { const char* PlatformNames[PLATFORM_COUNT + 1] = { @@ -75,4 +77,17 @@ namespace PlatformIds { return PlatformNames[id]; } + + const char* getCleanMameName(const char* from) + { + const char** mameNames = mameNameToRealName; + + while(*mameNames != NULL && strcmp(from, *mameNames) != 0) + mameNames += 2; + + if(*mameNames) + return *(mameNames + 1); + + return from; + } } diff --git a/src/PlatformId.h b/src/PlatformId.h index 4c5e1d845..1b888021e 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -61,4 +61,6 @@ namespace PlatformIds PlatformId getPlatformId(const char* str); const char* getPlatformName(PlatformId id); + + const char* getCleanMameName(const char* from); } diff --git a/src/XMLReader.cpp b/src/XMLReader.cpp index 0aeef8f23..51de84893 100644 --- a/src/XMLReader.cpp +++ b/src/XMLReader.cpp @@ -186,7 +186,7 @@ void addGameDataNode(pugi::xml_node& parent, const FileData* game, SystemData* s if(newGame.children().begin() == newGame.child("name") //first element is name && ++newGame.children().begin() == newGame.children().end() //theres only one element - && newGame.child("name").text().get() == getCleanFileName(game->getPath())) //the name is the default + && newGame.child("name").text().get() == game->getCleanName()) //the name is the default { //if the only info is the default name, don't bother with this node parent.remove_child(newGame); @@ -206,7 +206,7 @@ void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* t if(newNode.children().begin() == newNode.child("name") //first element is name && ++newNode.children().begin() == newNode.children().end() //theres only one element - && newNode.child("name").text().get() == getCleanFileName(file->getPath())) //the name is the default + && newNode.child("name").text().get() == file->getCleanName()) //the name is the default { //if the only info is the default name, don't bother with this node //delete it and ultimately do nothing diff --git a/src/components/ScraperSearchComponent.cpp b/src/components/ScraperSearchComponent.cpp index 4fed43c8f..0fcbc7ad9 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/src/components/ScraperSearchComponent.cpp @@ -452,7 +452,7 @@ void ScraperSearchComponent::openInputScreen(ScraperSearchParams& params) stop(); mWindow->pushGui(new GuiTextEditPopup(mWindow, "SEARCH FOR", // initial value is last search if there was one, otherwise the clean path name - params.nameOverride.empty() ? getCleanFileName(params.game->getPath()) : params.nameOverride, + params.nameOverride.empty() ? params.game->getCleanName() : params.nameOverride, searchForFunc, false, "SEARCH")); } diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 88a5526c6..1c8a6d325 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -64,7 +64,7 @@ std::unique_ptr GamesDBScraper::getResultsAsync(const Scrap std::string cleanName = params.nameOverride; if(cleanName.empty()) - cleanName = getCleanFileName(params.game->getPath()); + cleanName = params.game->getCleanName(); path += "name=" + HttpReq::urlEncode(cleanName); diff --git a/src/scrapers/Scraper.cpp b/src/scrapers/Scraper.cpp index 85a6d7f15..c60a16e4d 100644 --- a/src/scrapers/Scraper.cpp +++ b/src/scrapers/Scraper.cpp @@ -174,7 +174,7 @@ bool resizeImage(const std::string& path, int maxWidth, int maxHeight) std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url) { const std::string subdirectory = params.system->getName(); - const std::string name = getCleanFileName(params.game->getPath()) + "-" + suffix; + const std::string name = params.game->getPath().stem().generic_string() + "-" + suffix; std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; diff --git a/src/scrapers/TheArchiveScraper.cpp b/src/scrapers/TheArchiveScraper.cpp index 0cfbe4891..9302ea528 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/src/scrapers/TheArchiveScraper.cpp @@ -12,7 +12,7 @@ std::unique_ptr TheArchiveScraper::getResultsAsync(const Sc std::string cleanName = params.nameOverride; if(cleanName.empty()) - cleanName = getCleanFileName(params.game->getPath()); + cleanName = params.game->getCleanName(); path += HttpReq::urlEncode(cleanName); //platform TODO, should use some params.system get method From 327367b6bdc495eef7b2a42d2ac5832602ec6841 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 28 May 2014 11:31:58 -0500 Subject: [PATCH 328/386] Renamed "dim" to "screensaver". Added "screensaver behavior" option, which can be "dim" or "black". --- src/Settings.cpp | 3 ++- src/guis/GuiMenu.cpp | 20 +++++++++++++++----- src/main.cpp | 6 ++++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Settings.cpp b/src/Settings.cpp index c82cf72df..96053a431 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -41,7 +41,7 @@ void Settings::setDefaults() mBoolMap["DebugGrid"] = false; mBoolMap["DebugText"] = false; - mIntMap["DimTime"] = 120*1000; + mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; @@ -49,6 +49,7 @@ void Settings::setDefaults() mStringMap["TransitionStyle"] = "fade"; mStringMap["ThemeSet"] = ""; + mStringMap["ScreenSaverBehavior"] = "dim"; mScraper = std::shared_ptr(new GamesDBScraper()); } diff --git a/src/guis/GuiMenu.cpp b/src/guis/GuiMenu.cpp index df56a96cb..ce1597788 100644 --- a/src/guis/GuiMenu.cpp +++ b/src/guis/GuiMenu.cpp @@ -93,11 +93,21 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN [this] { auto s = new GuiSettings(mWindow, "UI SETTINGS"); - // dim time - auto dim_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); - dim_time->setValue((float)(Settings::getInstance()->getInt("DimTime") / (1000 * 60))); - s->addWithLabel("DIM SCREEN AFTER", dim_time); - s->addSaveFunc([dim_time] { Settings::getInstance()->setInt("DimTime", (int)round(dim_time->getValue()) * (1000 * 60)); }); + // screensaver time + auto screensaver_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); + screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / (1000 * 60))); + s->addWithLabel("SCREENSAVER AFTER", screensaver_time); + s->addSaveFunc([screensaver_time] { Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); }); + + // screensaver behavior + auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); + std::vector screensavers; + screensavers.push_back("dim"); + screensavers.push_back("black"); + for(auto it = screensavers.begin(); it != screensavers.end(); it++) + screensaver_behavior->add(*it, *it, Settings::getInstance()->getString("ScreenSaverBehavior") == *it); + s->addWithLabel("SCREENSAVER BEHAVIOR", screensaver_behavior); + s->addSaveFunc([screensaver_behavior] { Settings::getInstance()->setString("ScreenSaverBehavior", screensaver_behavior->getSelected()); }); // framerate auto framerate = std::make_shared(mWindow); diff --git a/src/main.cpp b/src/main.cpp index ccd4bfc8f..9edcce994 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -259,12 +259,14 @@ int main(int argc, char* argv[]) //sleeping entails setting a flag to start skipping frames //and initially drawing a black semi-transparent rect to dim the screen timeSinceLastEvent += deltaTime; - if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("DimTime") && Settings::getInstance()->getInt("DimTime") != 0 && window.getAllowSleep()) + if(timeSinceLastEvent >= (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime") && Settings::getInstance()->getInt("ScreenSaverTime") != 0 && window.getAllowSleep()) { sleeping = true; timeSinceLastEvent = 0; Renderer::setMatrix(Eigen::Affine3f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000A0); + + unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); } Renderer::swapBuffers(); From 23b826c4d392fb7dfe942a2ab4ff352240732b67 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 28 May 2014 14:20:28 -0500 Subject: [PATCH 329/386] Adjusted platform names. --- src/PlatformId.cpp | 104 +++++++++++++++++--------------- src/PlatformId.h | 102 ++++++++++++++++--------------- src/scrapers/GamesDBScraper.cpp | 3 + 3 files changed, 112 insertions(+), 97 deletions(-) diff --git a/src/PlatformId.cpp b/src/PlatformId.cpp index 34c18da6b..d3e22b5b3 100644 --- a/src/PlatformId.cpp +++ b/src/PlatformId.cpp @@ -6,57 +6,63 @@ extern const char* mameNameToRealName[]; namespace PlatformIds { const char* PlatformNames[PLATFORM_COUNT + 1] = { - "unknown", // = 0, + "unknown", // nothing set - "3do", // = 1, - "amiga", // = 2, - "arcade", // = 3, - "atari2600", // = 4, - "atari5200", // = 5, - "atari7800", // = 6, - "atariJaguar", // = 7, - "atariJaguarCD", // = 8, - "atariXE", // = 9, - "colecovision", // = 10, - "commodore64", // = 11, - "intellivision", // = 12, - "mac", // = 13, - "xbox", // = 14, - "xbox360", // = 15, - "neogeo", // = 16, - "ngp", // = 17, - "ngpc", // = 18, - "n3ds", // = 19, - "n64", // = 20, - "nds", // = 21, - "nes", // = 22, - "gb", // = 23, - "gba", // = 24, - "gbc", // = 25, - "gamecube", // = 26, - "wii", // = 27, - "wiiu", // = 28, - "pc", // = 29, - "sega32x", // = 30, - "segacd", // = 31, - "dreamcast", // = 32, - "gamegear", // = 33, - "genesis", // = 34, - "mastersystem", // = 35, - "megadrive", // = 36, - "saturn", // = 37, - "psx", // = 38, - "ps2", // = 39, - "ps3", // = 40, - "ps4", // = 41, - "psvita", // = 42, - "psp", // = 43, - "snes", // = 44, - "pcengine", // = 45, - "zxspectrum", // = 46, + "3do", + "amiga", + "arcade", + "apple2", + "atari800", + "atari2600", + "atari5200", + "atari7800", + "atarilynx", + "atarist", + "atarijaguar", + "atarijaguarcd", + "atarixe", + "colecovision", + "c64", // commodore 64 + "intellivision", + "mac", + "xbox", + "xbox360", + "neogeo", + "ngp", // neo geo pocket + "ngpc", // neo geo pocket color + "n3ds", // nintendo 3DS + "n64", // nintendo 64 + "nds", // nintendo DS + "nes", // nintendo entertainment system + "gb", // game boy + "gba", // game boy advance + "gbc", // game boy color + "gc", // gamecube + "wii", + "wiiu", + "pc", + "sega32x", + "segacd", + "dreamcast", + "gamegear", + "genesis", // sega genesis + "mastersystem", // sega master system + "megadrive", // sega megadrive + "saturn", // sega saturn + "psx", + "ps2", + "ps3", + "ps4", + "psvita", + "psp", // playstation portable + "snes", // super nintendo entertainment system + "pcengine", // turbografx-16/pcengine + "wonderswan", + "wonderswancolor", + "zxspectrum", - "ignore", // = 47 // do not allow scraping for this system - "invalid" // = 48 + "ignore", // do not allow scraping for this system + "invalid" }; PlatformId getPlatformId(const char* str) diff --git a/src/PlatformId.h b/src/PlatformId.h index 1b888021e..662de65dc 100644 --- a/src/PlatformId.h +++ b/src/PlatformId.h @@ -8,55 +8,61 @@ namespace PlatformIds { PLATFORM_UNKNOWN = 0, - THREEDO = 1, //name can't start with a constant - AMIGA = 2, - ARCADE = 3, - ATARI_2600 = 4, - ATARI_5200 = 5, - ATARI_7800 = 6, - ATARI_JAGUAR = 7, - ATARI_JAGUAR_CD = 8, - ATARI_XE = 9, - COLECOVISION = 10, - COMMODORE_64 = 11, - INTELLIVISION = 12, - MAC_OS = 13, - XBOX = 14, - XBOX_360 = 15, - NEOGEO = 16, - NEOGEO_POCKET = 17, - NEOGEO_POCKET_COLOR = 18, - NINTENDO_3DS = 19, - NINTENDO_64 = 20, - NINTENDO_DS = 21, - NINTENDO_ENTERTAINMENT_SYSTEM = 22, - GAME_BOY = 23, - GAME_BOY_ADVANCE = 24, - GAME_BOY_COLOR = 25, - NINTENDO_GAMECUBE = 26, - NINTENDO_WII = 27, - NINTENDO_WII_U = 28, - PC = 29, - SEGA_32X = 30, - SEGA_CD = 31, - SEGA_DREAMCAST = 32, - SEGA_GAME_GEAR = 33, - SEGA_GENESIS = 34, - SEGA_MASTER_SYSTEM = 35, - SEGA_MEGA_DRIVE = 36, - SEGA_SATURN = 37, - PLAYSTATION = 38, - PLAYSTATION_2 = 39, - PLAYSTATION_3 = 40, - PLAYSTATION_4 = 41, - PLAYSTATION_VITA = 42, - PLAYSTATION_PORTABLE = 43, - SUPER_NINTENDO = 44, - TURBOGRAFX_16 = 45, - ZX_SPECTRUM = 46, + THREEDO, // name can't start with a constant + AMIGA, + APPLE_II, + ARCADE, + ATARI_800, + ATARI_2600, + ATARI_5200, + ATARI_7800, + ATARI_LYNX, + ATARI_ST, // Atari ST/STE/Falcon + ATARI_JAGUAR, + ATARI_JAGUAR_CD, + ATARI_XE, + COLECOVISION, + COMMODORE_64, + INTELLIVISION, + MAC_OS, + XBOX, + XBOX_360, + NEOGEO, + NEOGEO_POCKET, + NEOGEO_POCKET_COLOR, + NINTENDO_3DS, + NINTENDO_64, + NINTENDO_DS, + NINTENDO_ENTERTAINMENT_SYSTEM, + GAME_BOY, + GAME_BOY_ADVANCE, + GAME_BOY_COLOR, + NINTENDO_GAMECUBE, + NINTENDO_WII, + NINTENDO_WII_U, + PC, + SEGA_32X, + SEGA_CD, + SEGA_DREAMCAST, + SEGA_GAME_GEAR, + SEGA_GENESIS, + SEGA_MASTER_SYSTEM, + SEGA_MEGA_DRIVE, + SEGA_SATURN, + PLAYSTATION, + PLAYSTATION_2, + PLAYSTATION_3, + PLAYSTATION_4, + PLAYSTATION_VITA, + PLAYSTATION_PORTABLE, + SUPER_NINTENDO, + TURBOGRAFX_16, // (also PC Engine) + WONDERSWAN, + WONDERSWAN_COLOR, + ZX_SPECTRUM, - PLATFORM_IGNORE = 47, // do not allow scraping for this system - PLATFORM_COUNT = 48 + PLATFORM_IGNORE, // do not allow scraping for this system + PLATFORM_COUNT }; PlatformId getPlatformId(const char* str); diff --git a/src/scrapers/GamesDBScraper.cpp b/src/scrapers/GamesDBScraper.cpp index 1c8a6d325..d0630119e 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/src/scrapers/GamesDBScraper.cpp @@ -19,6 +19,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (ATARI_7800, "Atari 7800") (ATARI_JAGUAR, "Atari Jaguar") (ATARI_JAGUAR_CD, "Atari Jaguar CD") + (ATARI_LYNX, "Atari Lynx") (ATARI_XE, "Atari XE") (COLECOVISION, "Colecovision") (COMMODORE_64, "Commodore 64") @@ -55,6 +56,8 @@ const std::map gamesdb_platformid_map = boost::assign:: (PLAYSTATION_PORTABLE, "Sony PSP") (SUPER_NINTENDO, "Super Nintendo (SNES)") (TURBOGRAFX_16, "TurboGrafx 16") + (WONDERSWAN, "WonderSwan") + (WONDERSWAN_COLOR, "WonderSwan Color") (ZX_SPECTRUM, "Sinclair ZX Spectrum"); From 2d9fbfaf6fb8a047806e440534a278a91afc4a7e Mon Sep 17 00:00:00 2001 From: Aloshi Date: Wed, 28 May 2014 16:43:23 -0500 Subject: [PATCH 330/386] New icon + splash screen. Fixed window icon being upside down. --- CMakeLists.txt | 4 +- data/ResourceUtil.cpp | 36 +- data/Resources.h | 12 +- data/converted/ES_logo_16_png.cpp | 103 -- data/converted/ES_logo_32_png.cpp | 228 --- data/converted/splash_svg.cpp | 1797 ++++++++++++++++++++++++ data/converted/window_icon_256_png.cpp | 494 +++++++ data/es_icon.ico | Bin 0 -> 279029 bytes data/logo/ES_logo.icns | Bin 284710 -> 0 bytes data/logo/ES_logo.ico | Bin 51907 -> 0 bytes data/logo/ES_logo.svg | 134 -- data/logo/ES_logo_1024.png | Bin 75827 -> 0 bytes data/logo/ES_logo_128.png | Bin 9029 -> 0 bytes data/logo/ES_logo_16.png | Bin 954 -> 0 bytes data/logo/ES_logo_24.png | Bin 1437 -> 0 bytes data/logo/ES_logo_256.png | Bin 17784 -> 0 bytes data/logo/ES_logo_32.png | Bin 2205 -> 0 bytes data/logo/ES_logo_48.png | Bin 3505 -> 0 bytes data/logo/ES_logo_512.png | Bin 36558 -> 0 bytes data/logo/ES_logo_64.png | Bin 4736 -> 0 bytes data/resources/ES_logo_16.png | Bin 954 -> 0 bytes data/resources/ES_logo_32.png | Bin 2205 -> 0 bytes data/resources/splash.svg | 175 +++ data/resources/window_icon_256.png | Bin 0 -> 4870 bytes src/EmulationStation.rc | 4 +- src/ImageIO.cpp | 15 + src/ImageIO.h | 1 + src/Renderer_init_sdlgl.cpp | 4 +- src/Window.cpp | 15 +- src/resources/SVGResource.cpp | 14 +- 30 files changed, 2526 insertions(+), 510 deletions(-) delete mode 100644 data/converted/ES_logo_16_png.cpp delete mode 100644 data/converted/ES_logo_32_png.cpp create mode 100644 data/converted/splash_svg.cpp create mode 100644 data/converted/window_icon_256_png.cpp create mode 100644 data/es_icon.ico delete mode 100644 data/logo/ES_logo.icns delete mode 100644 data/logo/ES_logo.ico delete mode 100644 data/logo/ES_logo.svg delete mode 100644 data/logo/ES_logo_1024.png delete mode 100644 data/logo/ES_logo_128.png delete mode 100644 data/logo/ES_logo_16.png delete mode 100644 data/logo/ES_logo_24.png delete mode 100644 data/logo/ES_logo_256.png delete mode 100644 data/logo/ES_logo_32.png delete mode 100644 data/logo/ES_logo_48.png delete mode 100644 data/logo/ES_logo_512.png delete mode 100644 data/logo/ES_logo_64.png delete mode 100644 data/resources/ES_logo_16.png delete mode 100644 data/resources/ES_logo_32.png create mode 100644 data/resources/splash.svg create mode 100644 data/resources/window_icon_256.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 38242e77c..98ebd288c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -311,8 +311,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/ResourceUtil.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_16_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/ES_logo_32_png.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/splash_svg.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/window_icon_256_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_filled_png.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textinput_ninepatch_png.cpp diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 27584f48d..910ac2cb8 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -13,8 +13,6 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/button_filled.png", button_filled_png_size, button_filled_png_data}, {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, - {":/ES_logo_16.png", ES_logo_16_png_size, ES_logo_16_png_data}, - {":/ES_logo_32.png", ES_logo_32_png_size, ES_logo_32_png_data}, {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, {":/frame.png", frame_png_size, frame_png_data}, @@ -25,10 +23,12 @@ const Res2hEntry res2hFiles[res2hNrOfFiles] = { {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, + {":/splash.svg", splash_svg_size, splash_svg_data}, {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, + {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, @@ -56,22 +56,22 @@ res2hMapType::value_type mapTemp[] = { std::make_pair(":/button_filled.png", res2hFiles[6]), std::make_pair(":/checkbox_checked.svg", res2hFiles[7]), std::make_pair(":/checkbox_unchecked.svg", res2hFiles[8]), - std::make_pair(":/ES_logo_16.png", res2hFiles[9]), - std::make_pair(":/ES_logo_32.png", res2hFiles[10]), - std::make_pair(":/fav_add.svg", res2hFiles[11]), - std::make_pair(":/fav_remove.svg", res2hFiles[12]), - std::make_pair(":/frame.png", res2hFiles[13]), - std::make_pair(":/off.svg", res2hFiles[14]), - std::make_pair(":/on.svg", res2hFiles[15]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[16]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[17]), - std::make_pair(":/option_arrow.svg", res2hFiles[18]), - std::make_pair(":/scroll_gradient.png", res2hFiles[19]), - std::make_pair(":/slider_knob.svg", res2hFiles[20]), - std::make_pair(":/star_filled.svg", res2hFiles[21]), - std::make_pair(":/star_unfilled.svg", res2hFiles[22]), - std::make_pair(":/textinput_ninepatch.png", res2hFiles[23]), - std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[24]), + std::make_pair(":/fav_add.svg", res2hFiles[9]), + std::make_pair(":/fav_remove.svg", res2hFiles[10]), + std::make_pair(":/frame.png", res2hFiles[11]), + std::make_pair(":/off.svg", res2hFiles[12]), + std::make_pair(":/on.svg", res2hFiles[13]), + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[14]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[15]), + std::make_pair(":/option_arrow.svg", res2hFiles[16]), + std::make_pair(":/scroll_gradient.png", res2hFiles[17]), + std::make_pair(":/slider_knob.svg", res2hFiles[18]), + std::make_pair(":/splash.svg", res2hFiles[19]), + std::make_pair(":/star_filled.svg", res2hFiles[20]), + std::make_pair(":/star_unfilled.svg", res2hFiles[21]), + std::make_pair(":/textinput_ninepatch.png", res2hFiles[22]), + std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[23]), + std::make_pair(":/window_icon_256.png", res2hFiles[24]), std::make_pair(":/help/button_a.svg", res2hFiles[25]), std::make_pair(":/help/button_b.svg", res2hFiles[26]), std::make_pair(":/help/button_l.svg", res2hFiles[27]), diff --git a/data/Resources.h b/data/Resources.h index 9d649621c..376ed4658 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -32,12 +32,6 @@ extern const unsigned char checkbox_checked_svg_data[]; extern const size_t checkbox_unchecked_svg_size; extern const unsigned char checkbox_unchecked_svg_data[]; -extern const size_t ES_logo_16_png_size; -extern const unsigned char ES_logo_16_png_data[]; - -extern const size_t ES_logo_32_png_size; -extern const unsigned char ES_logo_32_png_data[]; - extern const size_t fav_add_svg_size; extern const unsigned char fav_add_svg_data[]; @@ -68,6 +62,9 @@ extern const unsigned char scroll_gradient_png_data[]; extern const size_t slider_knob_svg_size; extern const unsigned char slider_knob_svg_data[]; +extern const size_t splash_svg_size; +extern const unsigned char splash_svg_data[]; + extern const size_t star_filled_svg_size; extern const unsigned char star_filled_svg_data[]; @@ -80,6 +77,9 @@ extern const unsigned char textinput_ninepatch_png_data[]; extern const size_t textinput_ninepatch_active_png_size; extern const unsigned char textinput_ninepatch_active_png_data[]; +extern const size_t window_icon_256_png_size; +extern const unsigned char window_icon_256_png_data[]; + extern const size_t help_button_a_svg_size; extern const unsigned char help_button_a_svg_data[]; diff --git a/data/converted/ES_logo_16_png.cpp b/data/converted/ES_logo_16_png.cpp deleted file mode 100644 index dd233e2b8..000000000 --- a/data/converted/ES_logo_16_png.cpp +++ /dev/null @@ -1,103 +0,0 @@ -//this file was auto-generated from "ES_logo_16.png" by res2h - -#include "../Resources.h" - -const size_t ES_logo_16_png_size = 954; -const unsigned char ES_logo_16_png_data[954] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x10, - 0x00,0x00,0x00,0x10,0x08,0x06,0x00,0x00,0x00,0x1f, - 0xf3,0xff,0x61,0x00,0x00,0x00,0x04,0x73,0x42,0x49, - 0x54,0x08,0x08,0x08,0x08,0x7c,0x08,0x64,0x88,0x00, - 0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0xc0,0x01,0x30,0x77,0xdf,0x5e, - 0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74,0x53,0x6f, - 0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x77,0x77,0x77, - 0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x2e, - 0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x00,0x00,0x03, - 0x37,0x49,0x44,0x41,0x54,0x38,0x8d,0x75,0x93,0x5d, - 0x68,0x9b,0x75,0x14,0xc6,0x9f,0xf3,0xcf,0x67,0xb3, - 0xb6,0xf2,0xe6,0xa3,0x1b,0xef,0x3a,0xa9,0x59,0x43, - 0xda,0x24,0x14,0xd2,0x37,0xe8,0xfc,0xa0,0x6e,0xdd, - 0x86,0x48,0xb7,0xc9,0x36,0x64,0xe2,0xc0,0x0e,0xa3, - 0xa0,0x5d,0xd7,0x8b,0x3a,0xe8,0xc5,0xae,0xd4,0x5d, - 0x88,0x17,0xbb,0x08,0xf3,0xca,0x4d,0xe8,0x6e,0x62, - 0xaf,0xf4,0xca,0x0f,0xba,0x6a,0x19,0x8c,0x81,0xeb, - 0x9a,0x20,0xcb,0xd6,0x60,0xa1,0x29,0x34,0x25,0xf6, - 0x6d,0xdf,0xb4,0x91,0x9a,0xbc,0x69,0xde,0xff,0xf1, - 0xc2,0xb5,0x9b,0x50,0x1f,0x38,0x70,0x2e,0xce,0x81, - 0xe7,0x70,0x7e,0x0f,0x31,0x33,0x76,0x53,0xb2,0x7d, - 0x64,0xa2,0xbb,0x1a,0x8f,0x03,0xc0,0xe3,0xa6,0x4c, - 0xe6,0xe6,0x52,0xea,0xdc,0x6e,0x73,0xf6,0xed,0x26, - 0x91,0x48,0x38,0x74,0x3d,0x96,0xb2,0xdb,0x97,0xaf, - 0x85,0x64,0xeb,0xd1,0x23,0xb5,0x37,0xa2,0xa7,0x8d, - 0x0b,0x21,0x00,0xb0,0x7c,0x8d,0xfa,0xc9,0x17,0x4e, - 0x7e,0x64,0x8a,0x47,0x53,0x6a,0xa3,0x31,0xfa,0x30, - 0x10,0x18,0x99,0x99,0x99,0xd9,0x02,0x00,0x30,0x33, - 0x34,0x4d,0x73,0xa8,0xea,0xd8,0xa4,0x10,0x15,0x56, - 0x94,0x74,0x51,0x75,0x16,0xb2,0xf3,0x90,0x9c,0xb5, - 0xad,0x73,0xd6,0xb6,0xce,0xf3,0x90,0x9c,0x73,0x9e, - 0xcd,0xa6,0x15,0xa5,0x58,0x11,0x82,0xc7,0x54,0x75, - 0x52,0xd3,0x34,0x07,0x33,0xff,0xeb,0x40,0xd7,0x63, - 0xa9,0x52,0xe9,0xca,0x31,0x29,0x9b,0x51,0x2e,0xbf, - 0xad,0x92,0x77,0xbc,0xfe,0xe9,0x9e,0x07,0xb7,0xca, - 0x36,0x7d,0x16,0x00,0x7c,0x96,0xbf,0xb7,0x6f,0x73, - 0xba,0x6f,0xd0,0x28,0xab,0x02,0xc0,0x95,0x52,0xe9, - 0x58,0xc9,0x6e,0x4f,0x01,0xf8,0x18,0xcc,0x8c,0x60, - 0xf0,0x78,0x48,0x51,0xd2,0x45,0xa0,0xc1,0xaa,0x7a, - 0xf9,0x7e,0x67,0x67,0xff,0x41,0x66,0xc6,0xb3,0xd5, - 0xdf,0xd9,0x79,0xf0,0xb2,0xaa,0xde,0x6f,0x00,0x9c, - 0x56,0x94,0xe2,0xf1,0x60,0x30,0xc4,0xcc,0x10,0x00, - 0xc0,0xb1,0xd6,0xc3,0x9b,0x47,0x5e,0xd6,0xbd,0xbe, - 0xf1,0x42,0x6b,0xeb,0xdd,0xf7,0x85,0x58,0x72,0x84, - 0xc3,0xe1,0xae,0x58,0x2c,0xb6,0x0f,0x00,0x22,0x91, - 0x48,0xe8,0x4f,0x97,0xcb,0xf5,0x9b,0xdb,0xfd,0xee, - 0xb8,0xd7,0x5b,0xe8,0x61,0xe8,0xa6,0xdf,0xdf,0x0f, - 0x00,0xb4,0xff,0xd2,0xa5,0x89,0x6a,0x4f,0x4f,0xd4, - 0x48,0x26,0xa3,0x07,0x2e,0x0e,0xdf,0xf2,0xfc,0x32, - 0xb5,0x48,0x44,0x9f,0x00,0xa8,0x02,0xc8,0x01,0xc8, - 0x03,0x38,0x01,0x80,0x88,0xe8,0xea,0xfe,0x7d,0xea, - 0x8b,0xaf,0xbd,0x72,0xf8,0xbd,0xc7,0xf9,0x47,0xb9, - 0x35,0x43,0xcf,0x89,0x6a,0x3c,0x1e,0x37,0x92,0xc9, - 0xa8,0xad,0x52,0x81,0x6d,0x55,0x9f,0x15,0x42,0x88, - 0x27,0xcb,0xbf,0x12,0xd1,0x0f,0x00,0xc2,0x00,0x74, - 0x22,0xfa,0x5e,0x4a,0xf9,0x5d,0xad,0x66,0xce,0xd6, - 0xeb,0x75,0x74,0x87,0x23,0xd1,0x80,0xaf,0x2d,0xbe, - 0xf3,0xc6,0x67,0x45,0x44,0x0d,0x66,0x2e,0x49,0x29, - 0x8b,0x42,0x88,0xab,0x00,0x4e,0x4b,0x29,0x4f,0x10, - 0x51,0x03,0xc0,0xfc,0x7f,0x38,0x68,0xca,0x64,0x32, - 0x5e,0xcb,0xaa,0x1b,0xc9,0x64,0xd4,0x0a,0xf8,0x7b, - 0xa5,0x94,0x8b,0x44,0xd4,0x02,0xe0,0x1d,0x22,0x3a, - 0xc4,0xcc,0x2e,0x00,0x3e,0x22,0x22,0x66,0xce,0xb8, - 0xdd,0xae,0xd7,0x9d,0x4e,0x27,0xb6,0x4f,0x20,0x66, - 0x46,0xf0,0xdc,0x5b,0x1f,0x16,0xbf,0x34,0x2f,0x36, - 0x4f,0xad,0x3c,0xd7,0x76,0xa3,0x71,0x4a,0xae,0x99, - 0x5b,0x4f,0x9c,0x54,0x4c,0xd3,0x34,0x3c,0x1e,0x4f, - 0x37,0x11,0x2d,0xee,0x75,0x9b,0xca,0xf9,0x2e,0xe3, - 0xf6,0xa1,0x03,0xbc,0x31,0x74,0x27,0xfc,0xd5,0xf4, - 0xdd,0x7b,0x5f,0x0b,0x00,0xa0,0xf2,0x1f,0xd3,0x7b, - 0xee,0xad,0x04,0x8c,0x41,0x57,0x47,0xe5,0x55,0xfa, - 0x46,0xb6,0x3b,0xb7,0xf2,0xf9,0xfc,0xdc,0xdc,0xdc, - 0xdc,0xf2,0xc2,0xc2,0x42,0x2d,0x97,0xcb,0x65,0xf6, - 0xba,0x4d,0xa5,0xb7,0xed,0xef,0x6f,0x07,0xa3,0x46, - 0xc7,0xef,0x25,0x04,0x9c,0xd6,0xca,0xf4,0x0e,0xca, - 0x0d,0xd5,0x36,0xba,0x31,0xe0,0x54,0x21,0x80,0xe5, - 0x2f,0x3c,0x09,0xdf,0x78,0xed,0xf6,0xd0,0xd0,0xf3, - 0x77,0x56,0x57,0x6d,0xb3,0x00,0x10,0xf0,0x5b,0xbd, - 0xe7,0xbb,0x36,0xfb,0x06,0xa3,0x46,0x87,0x20,0x60, - 0x20,0xb8,0xa1,0xfe,0x54,0x68,0x19,0xdd,0x01,0x49, - 0xd3,0x34,0x87,0x3a,0xd6,0x33,0x29,0x2a,0x2f,0xb1, - 0x92,0x8e,0x17,0xcf,0x2c,0x84,0xb2,0xd2,0x02,0xaf, - 0x97,0x6d,0xbc,0x5e,0xb6,0xb1,0xb4,0xc0,0x85,0xcf, - 0x9d,0xd9,0xf4,0x05,0xa5,0x58,0xf9,0x4c,0xf0,0xd8, - 0xc0,0x53,0x94,0x69,0x3b,0x8d,0x89,0x44,0xc2,0xa1, - 0xc7,0xcc,0x94,0x7d,0xd9,0xba,0x16,0x69,0x36,0x8f, - 0x9e,0x7a,0x73,0x63,0xf8,0x83,0xe4,0x5a,0x14,0x00, - 0x6e,0xdc,0xf4,0xe5,0x7e,0xfe,0xb1,0xe5,0x7a,0x65, - 0x59,0x4c,0xa9,0x4d,0x8d,0xd1,0x87,0x7f,0x3d,0x0d, - 0x13,0xfd,0x5f,0x9c,0x47,0x86,0xdb,0x27,0xe2,0x5a, - 0x35,0x0e,0x00,0x99,0x07,0x4d,0x99,0xd4,0xf5,0xa5, - 0x5d,0xe3,0xfc,0x0f,0x8e,0x59,0x81,0x6e,0x31,0xc1, - 0x05,0xe7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/ES_logo_32_png.cpp b/data/converted/ES_logo_32_png.cpp deleted file mode 100644 index a61ae0180..000000000 --- a/data/converted/ES_logo_32_png.cpp +++ /dev/null @@ -1,228 +0,0 @@ -//this file was auto-generated from "ES_logo_32.png" by res2h - -#include "../Resources.h" - -const size_t ES_logo_32_png_size = 2205; -const unsigned char ES_logo_32_png_data[2205] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x20, - 0x00,0x00,0x00,0x20,0x08,0x06,0x00,0x00,0x00,0x73, - 0x7a,0x7a,0xf4,0x00,0x00,0x00,0x04,0x73,0x42,0x49, - 0x54,0x08,0x08,0x08,0x08,0x7c,0x08,0x64,0x88,0x00, - 0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x01, - 0x80,0x00,0x00,0x01,0x80,0x01,0x68,0xe3,0xfb,0xb4, - 0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74,0x53,0x6f, - 0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x77,0x77,0x77, - 0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x2e, - 0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x00,0x00,0x08, - 0x1a,0x49,0x44,0x41,0x54,0x58,0x85,0x95,0x57,0x59, - 0x6c,0x54,0xe7,0x15,0xfe,0xfe,0xbb,0xcc,0x9d,0xc5, - 0xcb,0x60,0x9c,0xc1,0xf6,0xd4,0x0d,0xc3,0x5c,0x8f, - 0xb9,0x37,0x21,0xe0,0xf1,0x40,0x6a,0x82,0x0d,0x08, - 0xca,0xf2,0xc0,0x43,0xd5,0x56,0x95,0x9a,0x87,0x8a, - 0x96,0x2e,0xaa,0xe4,0xd0,0xa8,0x08,0x48,0x2a,0x11, - 0xc3,0x03,0x9b,0x50,0x5b,0x12,0xa5,0x45,0x4e,0x52, - 0x54,0x81,0xd4,0x87,0x06,0xb5,0x52,0xd5,0x84,0xa4, - 0x05,0x11,0xda,0x82,0xc0,0xc6,0x66,0x69,0x66,0xc0, - 0xc6,0x9a,0x20,0xef,0xc3,0xe0,0xb1,0xc7,0x9e,0xf5, - 0x2e,0xa7,0x0f,0x5e,0x34,0x8b,0x07,0xca,0x91,0xce, - 0xc3,0x3d,0xf7,0xfc,0xe7,0x3b,0xff,0x39,0xdf,0x7f, - 0xff,0x73,0x19,0x11,0xe1,0x79,0xa4,0xa5,0xa1,0x75, - 0x17,0x07,0xee,0x04,0x07,0x56,0x26,0x98,0xa2,0x08, - 0x00,0x3a,0xa7,0x69,0x26,0x68,0xc6,0x84,0x79,0xe0, - 0x7a,0xff,0xbf,0xfe,0xf6,0x3c,0xf1,0x84,0xe7,0x42, - 0x07,0x20,0x90,0xb0,0xe5,0xe7,0xe3,0x87,0x94,0x75, - 0x33,0x9b,0xf2,0xec,0x37,0xcb,0xae,0xe0,0x77,0xcb, - 0x8e,0x6c,0x01,0xf0,0x5c,0x09,0x70,0xa5,0x5e,0x04, - 0x02,0x01,0x51,0x55,0xd5,0xb6,0x42,0xbb,0x01,0xdd, - 0xca,0x53,0x71,0xde,0x3c,0x09,0x30,0xa0,0x5b,0x0b, - 0xed,0xaa,0xaa,0xb6,0x05,0x02,0x01,0xb1,0x14,0x0e, - 0x5b,0xac,0x05,0xb2,0x2c,0xbb,0x38,0xae,0xf6,0x73, - 0x4d,0xab,0xf5,0x88,0xe2,0xf0,0x7b,0x15,0x15,0x99, - 0xa3,0x89,0x29,0xdb,0xfe,0xa5,0xe0,0x76,0x2f,0xcf, - 0xf8,0xec,0x6f,0x8e,0x1c,0xaf,0x76,0x1a,0x55,0x79, - 0x6b,0x26,0xf9,0x09,0xfc,0xa6,0xee,0x60,0xf4,0x2b, - 0xa9,0x2f,0x49,0x88,0x9c,0xcd,0x54,0x3a,0x4e,0x4a, - 0xf1,0xf8,0xdb,0x6e,0x4d,0x6b,0x1f,0x15,0x84,0xf0, - 0x28,0xd1,0xb6,0x87,0x0f,0x1f,0x46,0x8a,0xc0,0x88, - 0x28,0x4f,0x1b,0x1b,0x1b,0x5f,0x91,0xe5,0xb6,0x21, - 0xbb,0xbd,0xcb,0x00,0x74,0x72,0xbb,0xdb,0x63,0xb2, - 0xdc,0x1a,0x71,0x3a,0xcf,0xa5,0x7f,0xcf,0x52,0xa1, - 0x87,0x30,0xe9,0x69,0x1a,0x62,0x23,0xa1,0x73,0x4e, - 0x67,0xba,0x55,0x96,0x23,0xed,0x6e,0x77,0x4c,0x07, - 0xe8,0x96,0xcd,0x66,0x6c,0x94,0xe5,0xc1,0xc6,0xc6, - 0xc6,0x57,0x0a,0xf1,0xf2,0x1e,0xbc,0x5e,0xaf,0x4b, - 0x96,0x5b,0x87,0x45,0xf1,0x11,0x01,0x66,0x8e,0x1a, - 0x04,0x98,0xb4,0x02,0xe6,0x8d,0x79,0xa0,0x3b,0xfc, - 0x14,0x5d,0xb0,0x5f,0xa7,0x0b,0xf6,0xeb,0x74,0x87, - 0x9f,0x5a,0x48,0xe0,0x09,0x0e,0xdc,0x30,0x01,0x32, - 0x00,0x32,0x73,0x74,0x48,0x14,0x69,0xa3,0x2c,0x0f, - 0x7a,0xbd,0x5e,0x57,0x2e,0xe6,0x42,0x0b,0x02,0x81, - 0x80,0x18,0x8f,0xdb,0xba,0x86,0x87,0x7f,0xbd,0x2a, - 0x99,0x0c,0x2c,0xca,0x0d,0x9b,0xad,0x47,0xdf,0xb5, - 0xb4,0x73,0x62,0xc8,0x1a,0x12,0x75,0xa6,0x27,0x44, - 0x12,0x7b,0x01,0x40,0x63,0x5a,0x93,0x40,0x82,0x63, - 0x45,0xba,0x51,0xdb,0xfb,0xe4,0xcf,0x55,0xcd,0xa9, - 0xa9,0x45,0xc9,0xdd,0x6b,0xb3,0x99,0x7b,0xdd,0xee, - 0x7b,0xa9,0xca,0xca,0xb5,0xdd,0xdd,0xdd,0x1a,0x90, - 0x73,0x0a,0x12,0x89,0xc4,0x5a,0x4d,0x5b,0xe1,0x49, - 0x26,0xfd,0x45,0xe0,0x8c,0x65,0xe0,0x72,0x9d,0x4a, - 0x56,0x54,0x5c,0x1c,0xbc,0xcd,0x1e,0xef,0xc9,0x66, - 0xb3,0xdd,0xe1,0x70,0x38,0x9d,0xeb,0xe3,0xf1,0x78, - 0xac,0x51,0xfb,0x78,0xe0,0x17,0x36,0xd7,0x87,0x3b, - 0xe2,0xd6,0xfa,0x7d,0x91,0x88,0x5d,0x2a,0xe0,0xd7, - 0xea,0x54,0x8a,0xab,0xd3,0x75,0xcf,0xdd,0x44,0x62, - 0x2d,0x80,0x6b,0x45,0x1c,0x90,0xe5,0x0d,0x1d,0x6e, - 0x77,0x7b,0x2c,0xb7,0xfc,0x92,0xf4,0x80,0xbc,0xde, - 0xad,0x31,0x9f,0xaf,0xe5,0x30,0x00,0xbe,0xb0,0x87, - 0x45,0x3d,0x05,0xf8,0x16,0x9f,0xef,0xf0,0x56,0xaf, - 0x37,0xf6,0x40,0x92,0xf2,0xda,0xd0,0xee,0x76,0xc7, - 0x36,0xc8,0x72,0x47,0x49,0x0e,0x34,0x37,0x37,0xdb, - 0x65,0xb9,0x6d,0x7c,0xbe,0xe7,0x8c,0xa5,0xc8,0xeb, - 0xdd,0x1a,0x53,0x14,0xc5,0xff,0x2c,0xe0,0x42,0x55, - 0x14,0xc5,0xbf,0xd5,0xeb,0x8d,0xa5,0x18,0xa3,0x79, - 0x4e,0xb4,0xc9,0xf2,0x78,0x73,0x73,0xb3,0x3d,0xd7, - 0x2f,0xaf,0xdc,0x53,0x09,0xdb,0xfe,0x68,0xf4,0xc7, - 0x95,0x00,0x03,0x00,0xb8,0x5c,0xa7,0x92,0x3c,0x9f, - 0x78,0x37,0x18,0x0c,0xf6,0x2c,0xd6,0xd3,0xa7,0x49, - 0x30,0x18,0xec,0x49,0xf0,0xfc,0xbb,0xa7,0x5c,0xae, - 0x24,0x30,0x1b,0xf1,0x67,0xd1,0x68,0xa5,0x34,0x3d, - 0xbd,0x3f,0xd7,0x2f,0x9f,0x2c,0x2e,0x6e,0xf7,0xd4, - 0xe5,0xef,0x84,0x71,0x1a,0x71,0xdb,0x99,0x1e,0x7f, - 0x45,0xc5,0xc5,0xc1,0xbe,0xbe,0xeb,0x47,0x54,0x55, - 0x7d,0x19,0x80,0x5c,0x08,0x22,0x49,0xd2,0x95,0xde, - 0xde,0xde,0x49,0x00,0xf0,0xf9,0x7c,0x0a,0xcf,0xf3, - 0x5b,0x89,0x28,0xc9,0x71,0x5c,0xbf,0x28,0x8a,0xb7, - 0xee,0xf6,0xf5,0x1d,0xe1,0x1a,0x1a,0xbe,0xb7,0x33, - 0x1e,0xf7,0xd6,0xdb,0x1d,0x3d,0xd9,0xcd,0xdb,0x2b, - 0x52,0x03,0xa1,0x1f,0x02,0xe8,0x58,0x48,0xa0,0xa1, - 0xb5,0x75,0x17,0x09,0xc2,0x16,0xe8,0xba,0x35,0xbb, - 0x72,0xa5,0x9d,0x6a,0xa4,0xaf,0xe3,0x18,0xb0,0xf4, - 0x49,0x67,0x84,0x5d,0x7d,0xbc,0x87,0x88,0x0c,0x45, - 0x51,0xfe,0x02,0xa0,0xa6,0x00,0x5f,0x48,0xa5,0x52, - 0xef,0x34,0x34,0x34,0x9c,0x11,0x04,0xe1,0x36,0xcf, - 0xf3,0x0e,0x22,0xaa,0x66,0x8c,0x31,0x22,0x8a,0x67, - 0xb3,0xd9,0x5e,0x22,0xda,0xdc,0xd8,0xd8,0xb8,0xe7, - 0xad,0xc0,0xda,0x0b,0xaf,0xb5,0x7d,0x73,0x1d,0x00, - 0x38,0xa3,0xa3,0x51,0xbf,0xdf,0x7f,0x86,0x31,0x96, - 0x82,0x8e,0xcb,0x02,0x38,0xee,0xc4,0xf8,0xa1,0x43, - 0x0a,0x09,0x02,0xd2,0xaa,0xba,0x10,0xdd,0xfa,0x20, - 0x24,0x66,0xb3,0xd9,0xee,0xb9,0x47,0x1e,0x40,0x19, - 0x80,0x09,0x00,0xfa,0x7c,0x01,0x00,0x44,0x45,0x51, - 0xfc,0x11,0x11,0xd5,0x12,0x51,0x9a,0x31,0x36,0x06, - 0xc0,0x04,0x60,0x03,0x50,0x0e,0x00,0xd9,0x6c,0xb6, - 0x3b,0x3a,0x3d,0xbd,0xf0,0x29,0x7e,0x35,0xd0,0x52, - 0x1d,0x9b,0x9c,0xf8,0x29,0x99,0x84,0xae,0xde,0x1b, - 0xdb,0x05,0x00,0x8e,0x99,0x4d,0x9b,0xf2,0xb6,0xc6, - 0x4f,0x4f,0x83,0xe9,0x7a,0xa2,0xf0,0xa8,0x01,0x30, - 0x19,0x63,0xfb,0x00,0x68,0xa6,0x69,0xea,0xb5,0xb5, - 0xb5,0x7f,0x1d,0x1b,0x1b,0xfb,0x07,0x00,0x2b,0x63, - 0x2c,0x41,0x44,0xbf,0x05,0xf0,0x99,0x28,0x8a,0x31, - 0x22,0x92,0x00,0x20,0x1c,0x0e,0xa7,0xd7,0xac,0x5e, - 0x93,0xc8,0x6a,0xd9,0x25,0x16,0xd1,0x02,0xab,0x64, - 0x45,0xed,0xb2,0x3a,0x00,0x00,0xeb,0x65,0x65,0x9c, - 0x69,0xb1,0x14,0x5d,0x14,0x52,0x30,0x08,0x12,0x67, - 0x3f,0x32,0x05,0xe2,0x24,0xa2,0x4e,0x22,0x3a,0xcb, - 0x18,0xfb,0xc3,0xd8,0xd8,0xd8,0x6b,0x00,0xfe,0x08, - 0x20,0x09,0x60,0x29,0x80,0x63,0x8c,0xb1,0x4b,0xba, - 0xae,0xff,0x53,0xd7,0xf5,0x05,0xce,0x70,0x3c,0xd7, - 0x1b,0x9b,0x9c,0x28,0x0a,0xc6,0x71,0x9c,0x58,0xf2, - 0x36,0x2c,0x21,0xd3,0x00,0x12,0x73,0xca,0x88,0x28, - 0x56,0x53,0x53,0x73,0x9e,0x88,0x0e,0x03,0x18,0x61, - 0x8c,0x4d,0xcc,0x25,0xe2,0x63,0x8c,0x7d,0xc4,0x18, - 0x63,0xcf,0x0a,0x28,0x70,0xd9,0xac,0x56,0x68,0xcc, - 0xa8,0x2a,0x98,0xa6,0x35,0x2d,0xe2,0x6f,0xa4,0xd3, - 0xe9,0xfa,0xdc,0xd6,0xa8,0xaa,0xfa,0x2d,0x00,0xf7, - 0x1d,0x0e,0xc7,0xf2,0xe9,0xe9,0xe9,0x35,0x1c,0xc7, - 0x9d,0x07,0xe0,0x03,0x60,0x91,0x65,0x79,0x05,0x80, - 0x01,0xd3,0x30,0x9b,0x96,0x38,0xab,0x8a,0x82,0x99, - 0xa6,0xa9,0x09,0x00,0x12,0x65,0x57,0xae,0x60,0x9e, - 0x84,0x46,0x55,0x15,0x8c,0xf2,0x72,0x90,0x20,0x38, - 0x3c,0x1e,0x8f,0x35,0x17,0x8c,0x31,0x26,0x58,0xad, - 0xd6,0x41,0x45,0x51,0x40,0x44,0x02,0xc7,0x71,0x9d, - 0x44,0xd4,0xca,0x18,0x7b,0x39,0x91,0x48,0xcc,0xf0, - 0x3c,0xaf,0x13,0x91,0x7d,0xce,0x3d,0xdd,0xdf,0xdf, - 0x3f,0xe0,0xf1,0x78,0xac,0x4b,0x9c,0x4b,0x1c,0x16, - 0xd1,0x32,0x6b,0xcc,0xa4,0x11,0x9b,0x9c,0x00,0x99, - 0x04,0x02,0xcd,0x08,0x30,0xcd,0x03,0xcb,0x8e,0x1c, - 0x99,0x3f,0x86,0xdf,0x1e,0xec,0xec,0xac,0x06,0x80, - 0xb4,0xe2,0xd5,0xec,0xe3,0xe3,0x01,0x00,0xff,0x06, - 0x60,0x00,0x48,0x10,0x91,0x08,0x60,0x9e,0x33,0x1c, - 0x11,0xbd,0x00,0xa0,0x1f,0x80,0x97,0x88,0x9c,0x98, - 0x65,0x7f,0x0c,0x40,0x04,0xc0,0x09,0x00,0xb0,0x58, - 0x2c,0x81,0xea,0x25,0xe5,0x0b,0x55,0xbe,0xd1,0x7d, - 0x3d,0x3a,0x19,0x8b,0x7d,0xcc,0x78,0x96,0x66,0x06, - 0xbb,0x9c,0x37,0x90,0x34,0x6c,0xdc,0xf8,0x68,0xe0, - 0xb3,0x8e,0x24,0x49,0x9d,0x71,0x5b,0xcf,0x80,0xff, - 0x6b,0x7b,0x67,0x06,0xfa,0xff,0x13,0x7a,0x49,0x51, - 0x14,0x05,0x8b,0x7c,0x88,0x00,0xdc,0x08,0x06,0x83, - 0xa3,0x2b,0x57,0xae,0xf4,0x70,0x1c,0xf7,0x2a,0x80, - 0x5a,0xd3,0x34,0x6f,0x1b,0x86,0x71,0xad,0xbf,0xbf, - 0x3f,0xc3,0x18,0xe3,0x5f,0x5b,0xd3,0xf0,0xe5,0xe9, - 0xcd,0x43,0xde,0xfa,0x6a,0x47,0xcf,0xa7,0xc9,0xed, - 0x15,0xa7,0x3f,0x09,0xd9,0x7b,0x7a,0x6e,0xbd,0xb8, - 0xc0,0x81,0xfc,0xa6,0x4c,0x9c,0xad,0xfc,0xf8,0x97, - 0x07,0x27,0x5f,0x97,0xa4,0x94,0x9f,0x47,0x7c,0x87, - 0xa5,0xde,0x67,0xaa,0x87,0x82,0xd7,0xbe,0x7c,0x07, - 0xc0,0x7f,0x17,0x49,0x00,0x00,0x70,0xff,0xfe,0xfd, - 0x30,0x80,0x70,0xa1,0xbd,0x65,0xb5,0xef,0xd0,0x8e, - 0xe5,0x53,0xf5,0x7e,0x57,0x4a,0x00,0x52,0xeb,0xf8, - 0xa1,0xbf,0x67,0x6c,0xe4,0x3a,0x9e,0xeb,0x93,0x77, - 0x0a,0x2a,0x53,0xd2,0xc9,0xea,0x0f,0x32,0x53,0x98, - 0x2b,0x4a,0x64,0x9f,0xd5,0x6e,0x38,0xf0,0x86,0xaa, - 0xaa,0xfe,0x52,0xe0,0xa5,0x44,0x55,0x55,0xbf,0x43, - 0x34,0xde,0xd8,0x17,0x88,0xd8,0x01,0x80,0x00,0x7c, - 0x70,0xaf,0x7a,0x2a,0xc3,0x97,0x9f,0x2c,0x99,0xc0, - 0x94,0x2d,0xb5,0x3f,0xb5,0x9a,0xb7,0xcc,0xdd,0x45, - 0x20,0x89,0x61,0xe8,0x7d,0x87,0x33,0xeb,0x66,0x97, - 0x1a,0xd7,0xbf,0x74,0x98,0x31,0xc6,0x3f,0x0b,0x98, - 0x31,0xc6,0xaf,0x5f,0xd3,0x78,0xd8,0xed,0xc8,0x5e, - 0x7a,0x7f,0xcb,0x90,0x53,0xe2,0x67,0x77,0xc3,0x00, - 0xac,0xae,0x4e,0x59,0x6c,0x34,0x95,0x77,0x19,0x2d, - 0x70,0x40,0x51,0x94,0xf5,0xe9,0x55,0xfc,0xa7,0x5f, - 0xfd,0xa9,0xbc,0xa2,0x70,0x56,0x66,0x19,0x82,0xeb, - 0x54,0x3a,0x59,0x71,0x31,0x3b,0xc8,0x1e,0x1b,0x25, - 0x07,0x12,0x8b,0xc5,0x12,0x78,0xc1,0x4e,0x1f,0xee, - 0x58,0x1e,0xaf,0xdf,0x17,0x88,0xd8,0xe7,0xc1,0xe7, - 0xc5,0x24,0xe0,0xfb,0x9f,0x2c,0x8f,0xdf,0x8d,0x5a, - 0x77,0x86,0x42,0xa1,0x6b,0x40,0x0e,0x07,0x1c,0x0e, - 0x47,0x97,0x31,0x9a,0x0a,0xdb,0x7b,0xf4,0x55,0xc9, - 0x80,0x90,0x97,0x02,0x49,0x0c,0xe3,0xbf,0xb2,0xd9, - 0xd3,0x3b,0x05,0xef,0x77,0x3b,0xc7,0x2f,0x3c,0x08, - 0x59,0xc5,0xf5,0x2d,0xbe,0x84,0x68,0xa1,0xd9,0x91, - 0x2c,0xcb,0x9a,0xea,0xeb,0x05,0x87,0xd2,0x90,0xd4, - 0x7e,0x52,0xf9,0xa4,0x6a,0xb6,0xe7,0xc5,0x72,0xe7, - 0xb1,0xcd,0x1c,0x49,0x08,0x61,0x87,0xc3,0xd1,0x55, - 0x54,0x01,0x60,0x76,0x1c,0x67,0x75,0x96,0xde,0x47, - 0xe7,0xcb,0xeb,0xb4,0xfa,0x9c,0x1c,0x68,0xb6,0x86, - 0x07,0xcc,0xe1,0x9b,0xc7,0xd8,0xe0,0x3a,0x00,0x98, - 0x9e,0xe6,0x11,0x0c,0x4a,0x00,0x00,0x55,0xcd,0xa0, - 0xbc,0xdc,0x98,0xf5,0xfd,0x08,0x37,0xf1,0x04,0xeb, - 0xe6,0x96,0x2c,0xc8,0xc8,0x8c,0x88,0xd7,0x2f,0xbe, - 0x38,0x34,0x34,0x49,0xcd,0x79,0xe3,0xf9,0xa2,0x63, - 0x79,0x9b,0x32,0x64,0xef,0x0a,0x18,0xd0,0xbf,0x41, - 0xee,0xf6,0x55,0x31,0xb9,0x55,0x89,0x38,0xcf,0x35, - 0xa5,0x47,0x92,0x62,0xc8,0x34,0x40,0x4f,0xd3,0xd4, - 0x3d,0x16,0x3a,0xf7,0x03,0x67,0xba,0xb5,0x49,0x8e, - 0xb4,0x6f,0x73,0xc7,0xf4,0xa3,0xa0,0x5b,0x6f,0xda, - 0x8c,0x8d,0xcd,0x8b,0x8f,0xe5,0xa5,0x7f,0x4c,0x6a, - 0xa5,0xcf,0xb5,0x5a,0xe6,0x11,0x87,0xcd,0xf7,0x2a, - 0x32,0xf6,0xa3,0x09,0x5b,0x6a,0xbf,0x8b,0xcb,0xee, - 0xf6,0xf9,0x32,0xf6,0xe3,0xc7,0x46,0xaa,0xab,0xaa, - 0x8c,0xbc,0x35,0x13,0x13,0x3c,0x0e,0xbe,0x55,0x17, - 0xed,0xeb,0x93,0x92,0xe6,0x0c,0xce,0xa6,0x58,0xe5, - 0x49,0xc9,0x88,0xbf,0xed,0x2e,0xd3,0xda,0x47,0x13, - 0x42,0x78,0x34,0xfe,0x7f,0xfe,0x98,0xe4,0xcc,0x87, - 0xa2,0xa2,0x28,0x6d,0x85,0xf6,0x0d,0x1b,0xbc,0x67, - 0xae,0x7e,0xe1,0x28,0xda,0xf9,0xd5,0x2f,0x1c,0xb4, - 0x61,0x83,0xf7,0xcc,0x22,0xb3,0x61,0x5b,0x73,0x73, - 0xb3,0x58,0x0a,0xa7,0xe4,0xcf,0xe9,0xdc,0xdc,0x7e, - 0xb5,0xd0,0x2e,0x08,0x48,0xeb,0x46,0xf1,0x25,0xa7, - 0x1b,0x0c,0x82,0x80,0xc2,0xf9,0x01,0xc1,0x60,0xb0, - 0x28,0x46,0x5e,0xbc,0xa7,0xbd,0x5c,0x4c,0x74,0x9d, - 0x5d,0xea,0xe8,0xa8,0xd9,0xc6,0x18,0xca,0x44,0xd1, - 0x14,0x01,0x40,0xd3,0x38,0x8d,0x08,0x33,0xa6,0x89, - 0x4b,0xcf,0x1b,0xef,0x7f,0x25,0x1d,0xc4,0x52,0xa8, - 0x9f,0x66,0x66,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; diff --git a/data/converted/splash_svg.cpp b/data/converted/splash_svg.cpp new file mode 100644 index 000000000..2e9bb8c86 --- /dev/null +++ b/data/converted/splash_svg.cpp @@ -0,0 +1,1797 @@ +//this file was auto-generated from "splash.svg" by res2h + +#include "../Resources.h" + +const size_t splash_svg_size = 17892; +const unsigned char splash_svg_data[17892] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, + 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, + 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, + 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, + 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, + 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, + 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, + 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, + 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, + 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, + 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, + 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, + 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, + 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, + 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x32,0x38,0x30,0x70,0x78,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x37,0x32, + 0x30,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42, + 0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x31,0x32, + 0x38,0x30,0x20,0x37,0x32,0x30,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x31,0x32,0x38,0x30,0x20, + 0x37,0x32,0x30,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, + 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, + 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67, + 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x6f,0x6c,0x79,0x67, + 0x6f,0x6e,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x70,0x6f, + 0x69,0x6e,0x74,0x73,0x3d,0x22,0x34,0x33,0x31,0x2e, + 0x31,0x37,0x37,0x2c,0x34,0x34,0x31,0x2e,0x39,0x36, + 0x37,0x20,0x34,0x33,0x31,0x2e,0x31,0x37,0x37,0x2c, + 0x34,0x34,0x31,0x2e,0x39,0x36,0x37,0x20,0x34,0x33, + 0x31,0x2e,0x31,0x37,0x37,0x2c,0x34,0x34,0x31,0x2e, + 0x39,0x36,0x37,0x20,0x09,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30, + 0x30,0x31,0x32,0x22,0x20,0x70,0x6f,0x69,0x6e,0x74, + 0x73,0x3d,0x22,0x34,0x33,0x31,0x2e,0x31,0x37,0x37, + 0x2c,0x33,0x35,0x39,0x2e,0x30,0x38,0x36,0x20,0x34, + 0x33,0x31,0x2e,0x31,0x37,0x37,0x2c,0x33,0x35,0x39, + 0x2e,0x30,0x38,0x36,0x20,0x34,0x33,0x31,0x2e,0x31, + 0x37,0x37,0x2c,0x33,0x35,0x39,0x2e,0x30,0x38,0x36, + 0x20,0x09,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x6f,0x6c,0x79,0x67,0x6f,0x6e,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32, + 0x22,0x20,0x70,0x6f,0x69,0x6e,0x74,0x73,0x3d,0x22, + 0x34,0x33,0x31,0x2e,0x31,0x37,0x37,0x2c,0x32,0x37, + 0x36,0x2e,0x31,0x37,0x36,0x20,0x34,0x33,0x31,0x2e, + 0x31,0x37,0x37,0x2c,0x32,0x37,0x36,0x2e,0x31,0x37, + 0x36,0x20,0x34,0x33,0x31,0x2e,0x31,0x37,0x37,0x2c, + 0x32,0x37,0x36,0x2e,0x31,0x37,0x36,0x20,0x09,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x6f,0x6c,0x79, + 0x67,0x6f,0x6e,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x70, + 0x6f,0x69,0x6e,0x74,0x73,0x3d,0x22,0x34,0x33,0x31, + 0x2e,0x31,0x37,0x37,0x2c,0x33,0x31,0x37,0x2e,0x36, + 0x32,0x34,0x20,0x34,0x33,0x31,0x2e,0x31,0x37,0x37, + 0x2c,0x33,0x31,0x37,0x2e,0x36,0x32,0x34,0x20,0x34, + 0x33,0x31,0x2e,0x31,0x37,0x37,0x2c,0x33,0x31,0x37, + 0x2e,0x36,0x32,0x34,0x20,0x09,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39, + 0x30,0x30,0x31,0x32,0x22,0x20,0x70,0x6f,0x69,0x6e, + 0x74,0x73,0x3d,0x22,0x34,0x33,0x31,0x2e,0x31,0x37, + 0x37,0x2c,0x34,0x38,0x33,0x2e,0x34,0x31,0x35,0x20, + 0x34,0x33,0x31,0x2e,0x31,0x37,0x37,0x2c,0x34,0x38, + 0x33,0x2e,0x34,0x31,0x35,0x20,0x34,0x33,0x31,0x2e, + 0x31,0x37,0x37,0x2c,0x34,0x38,0x33,0x2e,0x34,0x31, + 0x35,0x20,0x09,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31, + 0x32,0x22,0x20,0x70,0x6f,0x69,0x6e,0x74,0x73,0x3d, + 0x22,0x34,0x33,0x31,0x2e,0x31,0x37,0x37,0x2c,0x34, + 0x30,0x30,0x2e,0x35,0x31,0x31,0x20,0x34,0x33,0x31, + 0x2e,0x31,0x37,0x37,0x2c,0x34,0x30,0x30,0x2e,0x35, + 0x31,0x31,0x20,0x34,0x33,0x31,0x2e,0x31,0x37,0x37, + 0x2c,0x34,0x30,0x30,0x2e,0x35,0x31,0x31,0x20,0x09, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x6f,0x6c, + 0x79,0x67,0x6f,0x6e,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20, + 0x70,0x6f,0x69,0x6e,0x74,0x73,0x3d,0x22,0x34,0x33, + 0x31,0x2e,0x31,0x37,0x37,0x2c,0x32,0x33,0x34,0x2e, + 0x37,0x31,0x32,0x20,0x34,0x33,0x31,0x2e,0x31,0x37, + 0x37,0x2c,0x32,0x33,0x34,0x2e,0x37,0x31,0x32,0x20, + 0x34,0x33,0x31,0x2e,0x31,0x37,0x37,0x2c,0x32,0x33, + 0x34,0x2e,0x37,0x31,0x32,0x20,0x09,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x30,0x30,0x34,0x45, + 0x37,0x33,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33, + 0x31,0x2e,0x31,0x37,0x37,0x2c,0x32,0x34,0x35,0x2e, + 0x38,0x32,0x31,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31, + 0x2d,0x34,0x2e,0x39,0x39,0x39,0x2d,0x31,0x31,0x2e, + 0x31,0x30,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x36, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x48,0x36,0x39, + 0x2e,0x32,0x31,0x31,0x63,0x2d,0x36,0x2e,0x31,0x31, + 0x32,0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34,0x33, + 0x2c,0x33,0x2e,0x35,0x33,0x34,0x2d,0x31,0x38,0x2e, + 0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x0d, + 0x0a,0x09,0x09,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34, + 0x35,0x2c,0x32,0x35,0x2e,0x37,0x34,0x35,0x63,0x2d, + 0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33,0x32, + 0x31,0x2d,0x37,0x2e,0x38,0x35,0x34,0x2c,0x31,0x32, + 0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x34, + 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x76,0x32,0x32, + 0x36,0x2e,0x34,0x36,0x38,0x63,0x30,0x2c,0x36,0x2e, + 0x31,0x31,0x32,0x2c,0x34,0x2e,0x39,0x39,0x39,0x2c, + 0x31,0x31,0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31, + 0x30,0x36,0x2c,0x31,0x31,0x2e,0x31,0x31,0x68,0x33, + 0x35,0x30,0x2e,0x38,0x36,0x0d,0x0a,0x09,0x09,0x63, + 0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2c,0x31,0x34, + 0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x33,0x36, + 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e, + 0x38,0x35,0x34,0x6c,0x32,0x35,0x2e,0x37,0x34,0x31, + 0x2d,0x32,0x35,0x2e,0x37,0x33,0x37,0x63,0x34,0x2e, + 0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x31,0x37,0x2c, + 0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x32,0x2e,0x38, + 0x35,0x32,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31, + 0x38,0x2e,0x39,0x36,0x34,0x4c,0x34,0x33,0x31,0x2e, + 0x31,0x37,0x37,0x2c,0x32,0x34,0x35,0x2e,0x38,0x32, + 0x31,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x2e,0x32,0x22,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x39,0x35,0x2e,0x37,0x31,0x32,0x2c,0x35,0x32,0x34, + 0x2e,0x38,0x35,0x35,0x63,0x36,0x2e,0x31,0x31,0x32, + 0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31,0x32,0x32,0x2d, + 0x30,0x2e,0x30,0x31,0x32,0x2c,0x31,0x31,0x2e,0x31, + 0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x33,0x63,0x30, + 0x2e,0x30,0x31,0x35,0x2d,0x30,0x2e,0x30,0x31,0x35, + 0x2c,0x33,0x2e,0x35,0x35,0x39,0x2d,0x33,0x2e,0x35, + 0x36,0x33,0x2c,0x37,0x2e,0x38,0x38,0x2d,0x37,0x2e, + 0x38,0x38,0x6c,0x36,0x37,0x2e,0x31,0x34,0x33,0x2d, + 0x36,0x37,0x2e,0x31,0x33,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d,0x34,0x2e, + 0x33,0x31,0x36,0x2c,0x37,0x2e,0x38,0x35,0x33,0x2d, + 0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e,0x38, + 0x35,0x33,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x76, + 0x2d,0x31,0x39,0x2e,0x32,0x33,0x35,0x63,0x30,0x2d, + 0x36,0x2e,0x31,0x31,0x32,0x2d,0x33,0x2e,0x35,0x33, + 0x32,0x2d,0x31,0x34,0x2e,0x36,0x34,0x36,0x2d,0x37, + 0x2e,0x38,0x35,0x33,0x2d,0x31,0x38,0x2e,0x39,0x36, + 0x33,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x33,0x2d,0x32, + 0x35,0x2e,0x37,0x33,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33,0x31, + 0x38,0x2d,0x31,0x32,0x2e,0x38,0x35,0x35,0x2d,0x37, + 0x2e,0x38,0x35,0x33,0x2d,0x31,0x38,0x2e,0x39,0x36, + 0x33,0x2d,0x37,0x2e,0x38,0x35,0x31,0x68,0x2d,0x31, + 0x39,0x2e,0x32,0x34,0x37,0x63,0x2d,0x36,0x2e,0x31, + 0x31,0x32,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2d,0x31, + 0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x31, + 0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30, + 0x30,0x31,0x73,0x33,0x2e,0x35,0x33,0x32,0x2d,0x33, + 0x2e,0x35,0x33,0x34,0x2c,0x37,0x2e,0x38,0x35,0x33, + 0x2d,0x37,0x2e,0x38,0x35,0x35,0x6c,0x36,0x37,0x2e, + 0x31,0x39,0x37,0x2d,0x36,0x37,0x2e,0x31,0x39,0x33, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x34,0x2e,0x33,0x32, + 0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x32,0x2e, + 0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2d, + 0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e,0x38,0x35, + 0x35,0x48,0x32,0x37,0x36,0x2e,0x34,0x38,0x63,0x2d, + 0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x34, + 0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34, + 0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x35,0x4c,0x32,0x34,0x2e,0x37,0x39,0x2c, + 0x35,0x31,0x36,0x2e,0x37,0x33,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34, + 0x2e,0x33,0x31,0x37,0x2d,0x37,0x2e,0x39,0x31,0x35, + 0x2c,0x37,0x2e,0x39,0x31,0x34,0x2d,0x37,0x2e,0x39, + 0x39,0x31,0x2c,0x37,0x2e,0x39,0x38,0x37,0x63,0x2d, + 0x30,0x2e,0x30,0x37,0x33,0x2c,0x30,0x2e,0x30,0x37, + 0x36,0x2c,0x34,0x2e,0x38,0x36,0x34,0x2c,0x30,0x2e, + 0x31,0x33,0x38,0x2c,0x31,0x30,0x2e,0x39,0x37,0x33, + 0x2c,0x30,0x2e,0x31,0x33,0x38,0x48,0x32,0x39,0x35, + 0x2e,0x37,0x31,0x32,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x37,0x36,0x2e,0x34,0x37,0x33, + 0x2c,0x34,0x30,0x30,0x2e,0x35,0x31,0x39,0x63,0x2d, + 0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2d,0x31,0x34, + 0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x33,0x36, + 0x2d,0x31,0x38,0x2e,0x39,0x36,0x2d,0x37,0x2e,0x38, + 0x35,0x37,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x31,0x2d, + 0x32,0x35,0x2e,0x37,0x31,0x38,0x63,0x2d,0x34,0x2e, + 0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d, + 0x37,0x2e,0x38,0x35,0x37,0x2d,0x31,0x32,0x2e,0x38, + 0x35,0x35,0x2d,0x37,0x2e,0x38,0x36,0x35,0x2d,0x31, + 0x38,0x2e,0x39,0x36,0x36,0x0d,0x0a,0x09,0x09,0x6c, + 0x2d,0x30,0x2e,0x30,0x31,0x32,0x2d,0x31,0x39,0x2e, + 0x32,0x34,0x36,0x63,0x2d,0x30,0x2e,0x30,0x30,0x38, + 0x2d,0x36,0x2e,0x31,0x31,0x2c,0x33,0x2e,0x35,0x32, + 0x35,0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x37, + 0x2e,0x38,0x34,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36, + 0x34,0x6c,0x32,0x35,0x2e,0x37,0x34,0x31,0x2d,0x32, + 0x35,0x2e,0x37,0x33,0x37,0x63,0x34,0x2e,0x33,0x32, + 0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32, + 0x2e,0x38,0x35,0x32,0x2d,0x37,0x2e,0x38,0x35,0x35, + 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e, + 0x38,0x35,0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x33, + 0x39,0x0d,0x0a,0x09,0x09,0x63,0x36,0x2e,0x31,0x30, + 0x38,0x2c,0x30,0x2c,0x37,0x2e,0x35,0x37,0x34,0x2c, + 0x33,0x2e,0x35,0x33,0x34,0x2c,0x33,0x2e,0x32,0x35, + 0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x6c,0x2d,0x32, + 0x35,0x2e,0x37,0x34,0x31,0x2c,0x32,0x35,0x2e,0x37, + 0x33,0x37,0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c, + 0x34,0x2e,0x33,0x32,0x31,0x2d,0x31,0x32,0x2e,0x38, + 0x35,0x32,0x2c,0x37,0x2e,0x38,0x35,0x35,0x2d,0x31, + 0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35, + 0x35,0x68,0x2d,0x36,0x30,0x2e,0x36,0x38,0x37,0x0d, + 0x0a,0x09,0x09,0x63,0x2d,0x36,0x2e,0x31,0x31,0x32, + 0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x34, + 0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x31, + 0x2c,0x31,0x31,0x2e,0x31,0x30,0x38,0x76,0x31,0x39, + 0x2e,0x32,0x34,0x36,0x63,0x30,0x2c,0x36,0x2e,0x31, + 0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31,0x31, + 0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30, + 0x36,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x6c,0x36, + 0x30,0x2e,0x37,0x30,0x32,0x2d,0x30,0x2e,0x30,0x30, + 0x37,0x63,0x36,0x2e,0x31,0x30,0x38,0x2d,0x30,0x2e, + 0x30,0x30,0x32,0x2c,0x31,0x34,0x2e,0x36,0x34,0x33, + 0x2c,0x33,0x2e,0x35,0x33,0x33,0x2c,0x31,0x38,0x2e, + 0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x31,0x0d, + 0x0a,0x09,0x09,0x6c,0x32,0x35,0x2e,0x37,0x33,0x2c, + 0x32,0x35,0x2e,0x37,0x33,0x63,0x34,0x2e,0x33,0x32, + 0x31,0x2c,0x34,0x2e,0x33,0x31,0x36,0x2c,0x37,0x2e, + 0x38,0x35,0x33,0x2c,0x31,0x32,0x2e,0x38,0x35,0x31, + 0x2c,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31,0x38,0x2e, + 0x39,0x36,0x33,0x76,0x31,0x39,0x2e,0x32,0x33,0x35, + 0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x31,0x2d,0x33, + 0x2e,0x35,0x33,0x32,0x2c,0x31,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31,0x38, + 0x2e,0x39,0x36,0x33,0x6c,0x2d,0x32,0x35,0x2e,0x37, + 0x34,0x31,0x2c,0x32,0x35,0x2e,0x37,0x34,0x31,0x0d, + 0x0a,0x09,0x09,0x63,0x2d,0x34,0x2e,0x33,0x32,0x31, + 0x2c,0x34,0x2e,0x33,0x31,0x37,0x2d,0x31,0x32,0x2e, + 0x38,0x35,0x32,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d, + 0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38, + 0x35,0x34,0x68,0x2d,0x36,0x30,0x2e,0x36,0x38,0x37, + 0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d, + 0x31,0x34,0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35, + 0x33,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2d, + 0x37,0x2e,0x38,0x35,0x34,0x6c,0x2d,0x32,0x35,0x2e, + 0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31, + 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x34,0x2e,0x33,0x32, + 0x31,0x2d,0x34,0x2e,0x33,0x31,0x36,0x2d,0x32,0x2e, + 0x38,0x35,0x39,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c, + 0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e,0x38,0x35, + 0x33,0x68,0x31,0x30,0x32,0x2e,0x31,0x33,0x39,0x63, + 0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2c,0x31,0x31, + 0x2e,0x31,0x31,0x2d,0x34,0x2e,0x39,0x39,0x39,0x2c, + 0x31,0x31,0x2e,0x31,0x31,0x2d,0x31,0x31,0x2e,0x31, + 0x31,0x76,0x2d,0x31,0x39,0x2e,0x32,0x33,0x35,0x63, + 0x30,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d, + 0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30, + 0x33,0x2d,0x31,0x31,0x2e,0x31,0x31,0x0d,0x0a,0x09, + 0x09,0x63,0x30,0x2e,0x30,0x30,0x34,0x2c,0x30,0x2d, + 0x34,0x2e,0x39,0x39,0x34,0x2c,0x30,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x32,0x2c,0x30,0x4c,0x32,0x37,0x36, + 0x2e,0x34,0x37,0x33,0x2c,0x34,0x30,0x30,0x2e,0x35, + 0x31,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, + 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, + 0x22,0x30,0x2e,0x32,0x22,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x36,0x2e,0x36,0x35,0x37,0x2c,0x33,0x37,0x30, + 0x2e,0x37,0x34,0x38,0x63,0x30,0x2d,0x36,0x2e,0x31, + 0x31,0x31,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x32,0x33, + 0x38,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x33,0x39,0x33, + 0x73,0x33,0x2e,0x35,0x33,0x32,0x2d,0x33,0x2e,0x38, + 0x31,0x38,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x38, + 0x2e,0x31,0x33,0x38,0x6c,0x36,0x37,0x2e,0x31,0x38, + 0x35,0x2d,0x36,0x37,0x2e,0x31,0x38,0x36,0x63,0x34, + 0x2e,0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x32,0x31, + 0x2c,0x31,0x32,0x2e,0x38,0x35,0x35,0x2d,0x37,0x2e, + 0x38,0x35,0x35,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33, + 0x2d,0x37,0x2e,0x38,0x35,0x35,0x0d,0x0a,0x09,0x09, + 0x09,0x68,0x31,0x30,0x32,0x2e,0x31,0x35,0x63,0x36, + 0x2e,0x31,0x30,0x38,0x2c,0x30,0x2c,0x37,0x2e,0x35, + 0x37,0x34,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c,0x33, + 0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35, + 0x6c,0x2d,0x36,0x37,0x2e,0x31,0x39,0x37,0x2c,0x36, + 0x37,0x2e,0x31,0x38,0x32,0x63,0x2d,0x34,0x2e,0x33, + 0x32,0x31,0x2c,0x34,0x2e,0x33,0x32,0x31,0x2d,0x37, + 0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35, + 0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38, + 0x35,0x35,0x73,0x34,0x2e,0x39,0x39,0x38,0x2c,0x30, + 0x2e,0x30,0x30,0x32,0x2c,0x31,0x31,0x2e,0x31,0x31, + 0x2c,0x30,0x2e,0x30,0x30,0x36,0x0d,0x0a,0x09,0x09, + 0x09,0x6c,0x31,0x39,0x2e,0x32,0x32,0x38,0x2c,0x30, + 0x2e,0x30,0x30,0x37,0x63,0x36,0x2e,0x31,0x30,0x38, + 0x2c,0x30,0x2e,0x30,0x30,0x34,0x2c,0x31,0x30,0x2e, + 0x37,0x35,0x2c,0x34,0x2e,0x39,0x39,0x33,0x2c,0x31, + 0x30,0x2e,0x33,0x31,0x38,0x2c,0x31,0x31,0x2e,0x30, + 0x38,0x36,0x6c,0x2d,0x31,0x2e,0x31,0x31,0x34,0x2c, + 0x31,0x35,0x2e,0x35,0x39,0x32,0x63,0x2d,0x30,0x2e, + 0x34,0x33,0x33,0x2c,0x36,0x2e,0x30,0x39,0x32,0x2d, + 0x31,0x2e,0x37,0x30,0x37,0x2c,0x31,0x31,0x2e,0x39, + 0x39,0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x31, + 0x33,0x2e,0x31,0x32,0x33,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x31,0x2e,0x31,0x32,0x35,0x2c,0x31,0x2e, + 0x31,0x32,0x35,0x2d,0x35,0x2e,0x35,0x37,0x36,0x2c, + 0x35,0x2e,0x35,0x38,0x2d,0x39,0x2e,0x38,0x39,0x36, + 0x2c,0x39,0x2e,0x38,0x39,0x36,0x6c,0x2d,0x32,0x35, + 0x2e,0x32,0x30,0x32,0x2c,0x32,0x35,0x2e,0x32,0x30, + 0x32,0x63,0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e, + 0x33,0x31,0x36,0x2d,0x37,0x2e,0x38,0x38,0x34,0x2c, + 0x37,0x2e,0x38,0x38,0x34,0x2d,0x37,0x2e,0x39,0x32, + 0x32,0x2c,0x37,0x2e,0x39,0x31,0x38,0x63,0x2d,0x30, + 0x2e,0x30,0x33,0x34,0x2c,0x30,0x2e,0x30,0x33,0x34, + 0x2c,0x34,0x2e,0x39,0x33,0x33,0x2c,0x30,0x2e,0x30, + 0x36,0x35,0x2c,0x31,0x31,0x2e,0x30,0x34,0x31,0x2c, + 0x30,0x2e,0x30,0x36,0x32,0x0d,0x0a,0x09,0x09,0x09, + 0x68,0x31,0x37,0x2e,0x39,0x38,0x63,0x36,0x2e,0x31, + 0x30,0x38,0x2d,0x30,0x2e,0x30,0x30,0x34,0x2c,0x31, + 0x34,0x2e,0x37,0x38,0x34,0x2c,0x33,0x2e,0x33,0x37, + 0x39,0x2c,0x31,0x39,0x2e,0x32,0x38,0x31,0x2c,0x37, + 0x2e,0x35,0x31,0x37,0x6c,0x32,0x36,0x2e,0x38,0x33, + 0x36,0x2c,0x32,0x34,0x2e,0x36,0x39,0x36,0x63,0x34, + 0x2e,0x34,0x39,0x37,0x2c,0x34,0x2e,0x31,0x33,0x37, + 0x2c,0x38,0x2e,0x30,0x37,0x31,0x2c,0x37,0x2e,0x36, + 0x32,0x33,0x2c,0x37,0x2e,0x39,0x34,0x39,0x2c,0x37, + 0x2e,0x37,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, + 0x30,0x2e,0x31,0x32,0x36,0x2c,0x30,0x2e,0x31,0x32, + 0x36,0x2d,0x33,0x2e,0x37,0x36,0x36,0x2c,0x33,0x2e, + 0x37,0x36,0x32,0x2d,0x38,0x2e,0x30,0x38,0x37,0x2c, + 0x38,0x2e,0x30,0x38,0x33,0x6c,0x2d,0x32,0x37,0x2e, + 0x30,0x31,0x32,0x2c,0x32,0x36,0x2e,0x39,0x39,0x36, + 0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e, + 0x33,0x32,0x31,0x2d,0x31,0x32,0x2e,0x38,0x35,0x35, + 0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38,0x2e, + 0x39,0x36,0x37,0x2c,0x37,0x2e,0x38,0x35,0x34,0x48, + 0x32,0x37,0x2e,0x37,0x37,0x31,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x36,0x2d,0x34,0x2e, + 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x36, + 0x2d,0x31,0x31,0x2e,0x31,0x31,0x4c,0x31,0x36,0x2e, + 0x36,0x35,0x37,0x2c,0x33,0x37,0x30,0x2e,0x37,0x34, + 0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x31,0x30,0x2e,0x36,0x35,0x39,0x2c,0x34,0x34, + 0x31,0x2e,0x39,0x36,0x37,0x63,0x2d,0x36,0x2e,0x31, + 0x30,0x38,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31,0x30, + 0x36,0x2d,0x34,0x2e,0x39,0x39,0x39,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31,0x31, + 0x76,0x2d,0x31,0x39,0x2e,0x32,0x33,0x35,0x63,0x30, + 0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x34,0x2e,0x39, + 0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x31, + 0x31,0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31, + 0x31,0x68,0x36,0x30,0x2e,0x36,0x39,0x0d,0x0a,0x09, + 0x09,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2c, + 0x31,0x31,0x2e,0x31,0x30,0x36,0x2d,0x34,0x2e,0x39, + 0x39,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x2d, + 0x31,0x31,0x2e,0x31,0x31,0x76,0x2d,0x31,0x39,0x2e, + 0x32,0x30,0x34,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31, + 0x32,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31, + 0x2e,0x31,0x31,0x2d,0x31,0x31,0x2e,0x31,0x30,0x36, + 0x2d,0x31,0x31,0x2e,0x31,0x31,0x68,0x2d,0x36,0x30, + 0x2e,0x36,0x39,0x63,0x2d,0x36,0x2e,0x31,0x30,0x38, + 0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31,0x30,0x36,0x2d, + 0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31, + 0x30,0x36,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x76, + 0x2d,0x31,0x39,0x2e,0x32,0x34,0x36,0x0d,0x0a,0x09, + 0x09,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x2c,0x34, + 0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30, + 0x38,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x2d,0x31, + 0x31,0x2e,0x31,0x30,0x38,0x68,0x36,0x30,0x2e,0x36, + 0x39,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2c, + 0x31,0x34,0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35, + 0x33,0x34,0x2c,0x31,0x38,0x2e,0x39,0x36,0x34,0x2d, + 0x37,0x2e,0x38,0x35,0x34,0x6c,0x32,0x35,0x2e,0x37, + 0x34,0x39,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31,0x63, + 0x34,0x2e,0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x31, + 0x39,0x2c,0x32,0x2e,0x38,0x35,0x35,0x2d,0x37,0x2e, + 0x38,0x35,0x33,0x2d,0x33,0x2e,0x32,0x35,0x33,0x2d, + 0x37,0x2e,0x38,0x35,0x33,0x0d,0x0a,0x09,0x09,0x68, + 0x2d,0x31,0x30,0x32,0x2e,0x31,0x35,0x63,0x2d,0x36, + 0x2e,0x31,0x30,0x38,0x2c,0x30,0x2d,0x31,0x34,0x2e, + 0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2d, + 0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38, + 0x35,0x35,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x33,0x38, + 0x2c,0x32,0x35,0x2e,0x37,0x33,0x37,0x63,0x2d,0x34, + 0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32,0x31,0x2d, + 0x37,0x2e,0x38,0x35,0x37,0x2c,0x31,0x32,0x2e,0x38, + 0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x37,0x2c,0x31, + 0x38,0x2e,0x39,0x36,0x34,0x76,0x31,0x30,0x32,0x2e, + 0x31,0x32,0x35,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2c, + 0x36,0x2e,0x31,0x31,0x31,0x2c,0x33,0x2e,0x35,0x33, + 0x37,0x2c,0x31,0x34,0x2e,0x36,0x34,0x36,0x2c,0x37, + 0x2e,0x38,0x35,0x37,0x2c,0x31,0x38,0x2e,0x39,0x36, + 0x33,0x6c,0x32,0x35,0x2e,0x37,0x33,0x38,0x2c,0x32, + 0x35,0x2e,0x37,0x34,0x31,0x63,0x34,0x2e,0x33,0x32, + 0x31,0x2c,0x34,0x2e,0x33,0x31,0x37,0x2c,0x31,0x32, + 0x2e,0x38,0x35,0x35,0x2c,0x37,0x2e,0x38,0x35,0x34, + 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x34,0x68,0x31,0x30,0x32,0x2e,0x31,0x34, + 0x32,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2c, + 0x37,0x2e,0x35,0x37,0x34,0x2d,0x33,0x2e,0x35,0x33, + 0x36,0x2c,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e, + 0x38,0x35,0x37,0x0d,0x0a,0x09,0x09,0x6c,0x2d,0x32, + 0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37, + 0x34,0x34,0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d, + 0x34,0x2e,0x33,0x32,0x31,0x2d,0x31,0x32,0x2e,0x38, + 0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x37,0x2d,0x31, + 0x38,0x2e,0x39,0x36,0x34,0x2d,0x37,0x2e,0x38,0x35, + 0x37,0x4c,0x31,0x31,0x30,0x2e,0x36,0x35,0x39,0x2c, + 0x34,0x34,0x31,0x2e,0x39,0x36,0x37,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x35,0x35,0x38,0x2e,0x32,0x35,0x33,0x2c,0x33, + 0x32,0x36,0x2e,0x34,0x33,0x32,0x63,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e, + 0x38,0x35,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34,0x33, + 0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32,0x2e, + 0x38,0x33,0x36,0x2d,0x36,0x2e,0x31,0x34,0x36,0x2c, + 0x35,0x2e,0x30,0x36,0x2d,0x39,0x2e,0x39,0x34,0x37, + 0x2c,0x36,0x2e,0x36,0x38,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e, + 0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68, + 0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x34,0x2e, + 0x32,0x38,0x33,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32, + 0x34,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x2d,0x33,0x2e,0x38,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2d,0x33,0x2e, + 0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x33,0x2d, + 0x36,0x2e,0x36,0x38,0x32,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e, + 0x38,0x32,0x38,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d, + 0x36,0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38, + 0x32,0x2d,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31, + 0x2e,0x36,0x32,0x36,0x2d,0x33,0x2e,0x37,0x39,0x36, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38, + 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31, + 0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x34,0x37,0x2e, + 0x38,0x35,0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x38, + 0x32,0x2c,0x30,0x2e,0x38,0x30,0x38,0x2d,0x38,0x2e, + 0x33,0x32,0x34,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d, + 0x31,0x32,0x2e,0x31,0x32,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x31,0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e,0x38, + 0x30,0x31,0x2c,0x33,0x2e,0x38,0x34,0x36,0x2d,0x37, + 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32, + 0x2d,0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38, + 0x32,0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36, + 0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e,0x30,0x35,0x36, + 0x2c,0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36, + 0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68, + 0x38,0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38, + 0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c, + 0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36, + 0x32,0x36,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2c,0x33, + 0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34,0x37,0x2c, + 0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x33, + 0x32,0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e, + 0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36, + 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34,0x37, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x36,0x32, + 0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e, + 0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, + 0x32,0x76,0x32,0x34,0x2e,0x39,0x36,0x34,0x68,0x2d, + 0x35,0x38,0x2e,0x31,0x31,0x35,0x76,0x32,0x33,0x2e, + 0x36,0x31,0x38,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35, + 0x36,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2c,0x34,0x2e, + 0x39,0x35,0x36,0x2c,0x31,0x2e,0x34,0x35,0x31,0x2c, + 0x37,0x2e,0x32,0x30,0x32,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x39,0x36,0x34,0x2c,0x32,0x2e,0x32, + 0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c,0x34, + 0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x34, + 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36, + 0x36,0x31,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33, + 0x2e,0x36,0x30,0x39,0x2c,0x32,0x2e,0x39,0x37,0x2c, + 0x35,0x2e,0x38,0x35,0x36,0x2c,0x33,0x2e,0x39,0x33, + 0x38,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e, + 0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x32,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e, + 0x34,0x39,0x36,0x0d,0x0a,0x09,0x09,0x09,0x63,0x32, + 0x2e,0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39, + 0x35,0x32,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37, + 0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x34,0x37, + 0x63,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39, + 0x36,0x38,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2d,0x32, + 0x2e,0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x32, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x31,0x2e,0x36, + 0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, + 0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c, + 0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35, + 0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x31,0x2d,0x34,0x2e,0x36,0x34,0x36, + 0x2c,0x31,0x2e,0x34,0x35,0x31,0x2d,0x37,0x2e,0x32, + 0x30,0x32,0x76,0x2d,0x37,0x2e,0x30,0x34,0x32,0x6c, + 0x31,0x32,0x2e,0x37,0x34,0x2c,0x32,0x2e,0x30,0x37, + 0x76,0x34,0x2e,0x32,0x34,0x38,0x43,0x35,0x36,0x30, + 0x2e,0x36,0x38,0x37,0x2c,0x33,0x31,0x38,0x2e,0x35, + 0x39,0x34,0x2c,0x35,0x35,0x39,0x2e,0x38,0x37,0x35, + 0x2c,0x33,0x32,0x32,0x2e,0x36,0x33,0x35,0x2c,0x35, + 0x35,0x38,0x2e,0x32,0x35,0x33,0x2c,0x33,0x32,0x36, + 0x2e,0x34,0x33,0x32,0x7a,0x0d,0x0a,0x09,0x09,0x09, + 0x20,0x4d,0x35,0x34,0x37,0x2e,0x39,0x34,0x37,0x2c, + 0x32,0x36,0x35,0x2e,0x37,0x32,0x36,0x63,0x30,0x2d, + 0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38, + 0x36,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e, + 0x34,0x35,0x31,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63, + 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e,0x32, + 0x34,0x33,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2d,0x34, + 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, + 0x2d,0x35,0x2e,0x38,0x35,0x32,0x73,0x2d,0x33,0x2e, + 0x36,0x30,0x39,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35, + 0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32, + 0x34,0x37,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34, + 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d, + 0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35, + 0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x32, + 0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39, + 0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37, + 0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e,0x39, + 0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x36, + 0x2c,0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31, + 0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x2c, + 0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33, + 0x34,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37, + 0x2e,0x31,0x39,0x39,0x76,0x31,0x35,0x2e,0x37,0x34, + 0x35,0x68,0x34,0x35,0x2e,0x33,0x37,0x35,0x56,0x32, + 0x36,0x35,0x2e,0x37,0x32,0x36,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x64,0x3d,0x22,0x4d,0x36,0x39,0x38,0x2e,0x31,0x35, + 0x34,0x2c,0x33,0x34,0x33,0x2e,0x34,0x32,0x76,0x2d, + 0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30,0x2d,0x32, + 0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32, + 0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34, + 0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33, + 0x2d,0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31, + 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35, + 0x2e,0x38,0x35,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x31,0x2e,0x36, + 0x35,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2d,0x32, + 0x2e,0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2d, + 0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32, + 0x34,0x37,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34, + 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d, + 0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35, + 0x68,0x2d,0x36,0x2e,0x33,0x31,0x38,0x63,0x2d,0x32, + 0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39, + 0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37, + 0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34, + 0x33,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e, + 0x32,0x31,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, + 0x2e,0x39,0x30,0x32,0x2c,0x33,0x2e,0x39,0x33,0x38, + 0x63,0x2d,0x31,0x2e,0x36,0x39,0x35,0x2c,0x31,0x2e, + 0x36,0x35,0x37,0x2d,0x33,0x2e,0x30,0x32,0x33,0x2c, + 0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x39, + 0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x31,0x2e,0x34,0x34,0x36,0x2c,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x34,0x36,0x2c,0x37, + 0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39, + 0x35,0x68,0x2d,0x31,0x32,0x2e,0x36,0x34,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x76,0x2d,0x37,0x37,0x2e,0x36, + 0x39,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, + 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39, + 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, + 0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32, + 0x39,0x36,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, + 0x2e,0x39,0x38,0x38,0x2d,0x35,0x2e,0x38,0x35,0x32, + 0x63,0x2d,0x31,0x2e,0x36,0x39,0x31,0x2d,0x31,0x2e, + 0x36,0x35,0x37,0x2d,0x33,0x2e,0x36,0x35,0x38,0x2d, + 0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x39,0x30,0x35, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30, + 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x32, + 0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39, + 0x39,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x36,0x2e, + 0x33,0x31,0x38,0x63,0x2d,0x32,0x2e,0x35,0x35,0x37, + 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30, + 0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39,0x39, + 0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e,0x32, + 0x34,0x37,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d,0x34, + 0x2e,0x31,0x39,0x35,0x2c,0x32,0x2e,0x32,0x38,0x31, + 0x2d,0x35,0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e,0x39, + 0x33,0x38,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31, + 0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x35,0x37, + 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30, + 0x39,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, + 0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34, + 0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76,0x37, + 0x37,0x2e,0x36,0x39,0x35,0x68,0x2d,0x31,0x32,0x2e, + 0x37,0x34,0x31,0x56,0x32,0x33,0x37,0x2e,0x33,0x34, + 0x34,0x68,0x34,0x2e,0x32,0x34,0x34,0x6c,0x36,0x2e, + 0x39,0x34,0x33,0x2c,0x31,0x30,0x2e,0x37,0x37,0x33, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x39,0x2d, + 0x33,0x2e,0x39,0x33,0x38,0x2c,0x36,0x2e,0x35,0x34, + 0x2d,0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x30,0x2e, + 0x39,0x33,0x2d,0x39,0x2e,0x33,0x37,0x36,0x63,0x34, + 0x2e,0x33,0x38,0x32,0x2d,0x32,0x2e,0x33,0x31,0x32, + 0x2c,0x39,0x2e,0x31,0x36,0x36,0x2d,0x33,0x2e,0x34, + 0x37,0x31,0x2c,0x31,0x34,0x2e,0x33,0x34,0x34,0x2d, + 0x33,0x2e,0x34,0x37,0x31,0x68,0x31,0x2e,0x30,0x33, + 0x37,0x63,0x36,0x2e,0x30,0x30,0x39,0x2c,0x30,0x2c, + 0x31,0x31,0x2e,0x34,0x32,0x38,0x2c,0x31,0x2e,0x34, + 0x38,0x35,0x2c,0x31,0x36,0x2e,0x32,0x36,0x36,0x2c, + 0x34,0x2e,0x34,0x35,0x35,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x34,0x2e,0x38,0x33,0x33,0x2c,0x32,0x2e,0x39, + 0x37,0x2c,0x38,0x2e,0x35,0x36,0x31,0x2c,0x36,0x2e, + 0x39,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31,0x38,0x36, + 0x2c,0x31,0x31,0x2e,0x38,0x31,0x31,0x63,0x31,0x2e, + 0x33,0x31,0x33,0x2d,0x32,0x2e,0x34,0x31,0x39,0x2c, + 0x32,0x2e,0x39,0x33,0x36,0x2d,0x34,0x2e,0x36,0x32, + 0x37,0x2c,0x34,0x2e,0x38,0x36,0x39,0x2d,0x36,0x2e, + 0x36,0x32,0x39,0x63,0x31,0x2e,0x39,0x33,0x33,0x2d, + 0x32,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x30,0x37, + 0x35,0x2d,0x33,0x2e,0x37,0x31,0x32,0x2c,0x36,0x2e, + 0x34,0x32,0x32,0x2d,0x35,0x2e,0x31,0x32,0x38,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x33,0x35,0x2d, + 0x31,0x2e,0x34,0x31,0x36,0x2c,0x34,0x2e,0x39,0x30, + 0x36,0x2d,0x32,0x2e,0x35,0x32,0x32,0x2c,0x37,0x2e, + 0x36,0x36,0x39,0x2d,0x33,0x2e,0x33,0x31,0x38,0x63, + 0x32,0x2e,0x37,0x36,0x2d,0x30,0x2e,0x37,0x39,0x32, + 0x2c,0x35,0x2e,0x36,0x32,0x36,0x2d,0x31,0x2e,0x31, + 0x39,0x2c,0x38,0x2e,0x35,0x39,0x36,0x2d,0x31,0x2e, + 0x31,0x39,0x68,0x31,0x2e,0x30,0x33,0x37,0x63,0x34, + 0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x33, + 0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x33,0x2e,0x37,0x39, + 0x36,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e, + 0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39, + 0x2e,0x39,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32, + 0x63,0x32,0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38, + 0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36, + 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, + 0x2c,0x39,0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36, + 0x31,0x38,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x48, + 0x36,0x39,0x38,0x2e,0x31,0x35,0x34,0x7a,0x22,0x0d, + 0x0a,0x09,0x09,0x09,0x2f,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x38,0x30,0x32,0x2e,0x39,0x39,0x31,0x2c,0x33,0x34, + 0x33,0x2e,0x34,0x32,0x6c,0x2d,0x37,0x2e,0x30,0x34, + 0x36,0x2d,0x31,0x30,0x2e,0x37,0x37,0x33,0x63,0x2d, + 0x32,0x2e,0x39,0x30,0x31,0x2c,0x33,0x2e,0x39,0x33, + 0x38,0x2d,0x36,0x2e,0x35,0x32,0x35,0x2c,0x37,0x2e, + 0x30,0x36,0x31,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37, + 0x2c,0x39,0x2e,0x33,0x37,0x36,0x63,0x2d,0x34,0x2e, + 0x33,0x34,0x38,0x2c,0x32,0x2e,0x33,0x31,0x32,0x2d, + 0x39,0x2e,0x31,0x31,0x36,0x2c,0x33,0x2e,0x34,0x36, + 0x37,0x2d,0x31,0x34,0x2e,0x32,0x39,0x34,0x2c,0x33, + 0x2e,0x34,0x36,0x37,0x68,0x2d,0x33,0x2e,0x32,0x31, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x34,0x2e, + 0x32,0x38,0x37,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32, + 0x34,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x2d,0x33,0x2e,0x38,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2d,0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e, + 0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d, + 0x36,0x2e,0x36,0x38,0x32,0x63,0x2d,0x32,0x2e,0x38, + 0x33,0x32,0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35, + 0x2e,0x30,0x36,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d, + 0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34, + 0x33,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d, + 0x32,0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38,0x33, + 0x38,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x76,0x2d,0x37,0x36,0x2e,0x39, + 0x36,0x37,0x68,0x31,0x32,0x2e,0x37,0x34,0x34,0x76, + 0x37,0x37,0x2e,0x36,0x39,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x32, + 0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e,0x34, + 0x34,0x36,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x39,0x2c, + 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38, + 0x31,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e, + 0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, + 0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x35, + 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2c,0x32,0x2e, + 0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33, + 0x2e,0x39,0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32, + 0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36, + 0x34,0x36,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37, + 0x2e,0x32,0x30,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37, + 0x68,0x38,0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x32,0x2e,0x35,0x34,0x39,0x2c,0x30,0x2c, + 0x34,0x2e,0x39,0x35,0x32,0x2d,0x30,0x2e,0x34,0x38, + 0x32,0x2c,0x37,0x2e,0x31,0x39,0x34,0x2d,0x31,0x2e, + 0x34,0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x33,0x2d, + 0x30,0x2e,0x39,0x36,0x38,0x2c,0x34,0x2e,0x31,0x39, + 0x38,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2c,0x35,0x2e, + 0x38,0x35,0x35,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, + 0x31,0x2e,0x36,0x35,0x37,0x2d,0x31,0x2e,0x36,0x35, + 0x37,0x2c,0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36, + 0x30,0x39,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2d,0x35, + 0x2e,0x38,0x35,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, + 0x36,0x2c,0x31,0x2e,0x34,0x35,0x34,0x2d,0x34,0x2e, + 0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x34,0x2d, + 0x37,0x2e,0x32,0x30,0x32,0x76,0x2d,0x37,0x37,0x2e, + 0x36,0x39,0x31,0x68,0x31,0x32,0x2e,0x37,0x33,0x37, + 0x56,0x33,0x34,0x33,0x2e,0x34,0x32,0x48,0x38,0x30, + 0x32,0x2e,0x39,0x39,0x31,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x38,0x33,0x36,0x2e,0x39,0x36,0x37, + 0x2c,0x33,0x34,0x33,0x2e,0x34,0x32,0x56,0x31,0x39, + 0x34,0x2e,0x38,0x37,0x68,0x31,0x32,0x2e,0x37,0x34, + 0x76,0x31,0x34,0x38,0x2e,0x35,0x35,0x48,0x38,0x33, + 0x36,0x2e,0x39,0x36,0x37,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x39,0x34,0x36,0x2e,0x30,0x35,0x32, + 0x2c,0x33,0x34,0x33,0x2e,0x34,0x32,0x6c,0x2d,0x37, + 0x2e,0x30,0x34,0x36,0x2d,0x31,0x30,0x2e,0x35,0x36, + 0x37,0x63,0x2d,0x32,0x2e,0x39,0x2c,0x33,0x2e,0x38, + 0x2d,0x36,0x2e,0x35,0x32,0x35,0x2c,0x36,0x2e,0x38, + 0x35,0x34,0x2d,0x31,0x30,0x2e,0x38,0x38,0x31,0x2c, + 0x39,0x2e,0x31,0x37,0x63,0x2d,0x34,0x2e,0x33,0x34, + 0x38,0x2c,0x32,0x2e,0x33,0x31,0x32,0x2d,0x39,0x2e, + 0x31,0x31,0x36,0x2c,0x33,0x2e,0x34,0x36,0x37,0x2d, + 0x31,0x34,0x2e,0x32,0x39,0x2c,0x33,0x2e,0x34,0x36, + 0x37,0x68,0x2d,0x33,0x2e,0x32,0x31,0x35,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x34,0x2e,0x32,0x38,0x32, + 0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x2d,0x30,0x2e, + 0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e, + 0x38,0x30,0x35,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, + 0x37,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x38,0x34, + 0x36,0x2d,0x39,0x2e,0x39,0x34,0x37,0x2d,0x36,0x2e, + 0x36,0x38,0x32,0x63,0x2d,0x32,0x2e,0x38,0x33,0x36, + 0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e,0x30, + 0x36,0x33,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34,0x33, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36, + 0x32,0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, + 0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38,0x33,0x38, + 0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e, + 0x31,0x32,0x31,0x76,0x2d,0x31,0x2e,0x30,0x33,0x37, + 0x63,0x30,0x2d,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30, + 0x2e,0x38,0x30,0x38,0x2d,0x38,0x2e,0x33,0x32,0x2c, + 0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x31,0x63,0x31,0x2e,0x36,0x31,0x38,0x2d,0x33, + 0x2e,0x37,0x39,0x36,0x2c,0x33,0x2e,0x38,0x34,0x36, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x2c,0x36,0x2e,0x36, + 0x38,0x32,0x2d,0x39,0x2e,0x39,0x34,0x33,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x32,0x2e,0x38,0x32,0x38,0x2d, + 0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e,0x31,0x34, + 0x33,0x2d,0x35,0x2e,0x30,0x36,0x2c,0x39,0x2e,0x39, + 0x34,0x37,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x33, + 0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x32,0x33, + 0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x2d, + 0x32,0x2e,0x34,0x33,0x34,0x68,0x32,0x36,0x2e,0x39, + 0x33,0x36,0x76,0x2d,0x31,0x36,0x2e,0x33,0x36,0x39, + 0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30, + 0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39,0x35,0x32, + 0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39, + 0x39,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, + 0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31,0x39, + 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33, + 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36, + 0x30,0x39,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, + 0x31,0x2e,0x34,0x35,0x68,0x2d,0x37,0x2e,0x34,0x35, + 0x39,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x32,0x2e, + 0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35, + 0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e, + 0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d, + 0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e,0x39,0x36, + 0x39,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x32,0x2e, + 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x36,0x2c, + 0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31,0x2e,0x36, + 0x35,0x33,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32, + 0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d, + 0x33,0x2e,0x39,0x33,0x34,0x2c,0x35,0x2e,0x38,0x35, + 0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d, + 0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e, + 0x31,0x39,0x39,0x76,0x33,0x2e,0x38,0x33,0x35,0x6c, + 0x2d,0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30, + 0x37,0x35,0x76,0x2d,0x31,0x2e,0x30,0x33,0x33,0x63, + 0x30,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2e, + 0x38,0x31,0x32,0x2d,0x38,0x2e,0x33,0x32,0x34,0x2c, + 0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x36, + 0x32,0x32,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c,0x33, + 0x2e,0x38,0x35,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2c, + 0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34, + 0x37,0x63,0x32,0x2e,0x38,0x32,0x38,0x2d,0x32,0x2e, + 0x38,0x33,0x33,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2d, + 0x35,0x2e,0x30,0x35,0x36,0x2c,0x39,0x2e,0x39,0x34, + 0x33,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x33,0x2e, + 0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c, + 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, + 0x34,0x2c,0x31,0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e, + 0x34,0x33,0x34,0x68,0x37,0x2e,0x34,0x35,0x39,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x34,0x2e,0x32,0x37,0x39, + 0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e, + 0x38,0x31,0x35,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33,0x2e,0x38, + 0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31, + 0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e, + 0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32, + 0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x32, + 0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31, + 0x34,0x36,0x2c,0x36,0x2e,0x36,0x37,0x39,0x2c,0x39, + 0x2e,0x39,0x34,0x37,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37,0x39, + 0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e, + 0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c, + 0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e,0x39, + 0x36,0x38,0x48,0x39,0x34,0x36,0x2e,0x30,0x35,0x32, + 0x7a,0x20,0x4d,0x39,0x33,0x37,0x2e,0x35,0x35,0x36, + 0x2c,0x32,0x39,0x32,0x2e,0x30,0x33,0x37,0x68,0x2d, + 0x32,0x36,0x2e,0x39,0x33,0x36,0x63,0x2d,0x32,0x2e, + 0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35, + 0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35,0x31,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34, + 0x36,0x2c,0x30,0x2e,0x39,0x36,0x38,0x2d,0x34,0x2e, + 0x31,0x39,0x34,0x2c,0x32,0x2e,0x32,0x39,0x36,0x2d, + 0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39,0x38, + 0x38,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31, + 0x2e,0x36,0x39,0x35,0x2d,0x32,0x2e,0x39,0x37,0x2c, + 0x33,0x2e,0x36,0x36,0x33,0x2d,0x33,0x2e,0x39,0x33, + 0x38,0x2c,0x35,0x2e,0x39,0x30,0x35,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37, + 0x2e,0x32,0x30,0x33,0x76,0x34,0x2e,0x34,0x35,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x32,0x2e, + 0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2c, + 0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x31,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x30,0x2e, + 0x39,0x36,0x38,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c, + 0x32,0x2e,0x32,0x37,0x36,0x2c,0x34,0x2e,0x31,0x39, + 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x35,0x37,0x2c, + 0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36,0x30, + 0x35,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38, + 0x35,0x32,0x2c,0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c, + 0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34, + 0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e, + 0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68, + 0x38,0x2e,0x34,0x39,0x36,0x63,0x32,0x2e,0x35,0x35, + 0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x32,0x2d, + 0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, + 0x32,0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c, + 0x34,0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e,0x32,0x38, + 0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e, + 0x39,0x33,0x38,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31, + 0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37, + 0x2c,0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30, + 0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x38,0x2d, + 0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34, + 0x35,0x2d,0x37,0x2e,0x32,0x30,0x32,0x56,0x32,0x39, + 0x32,0x2e,0x30,0x33,0x37,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x30,0x31,0x34,0x2e,0x34,0x32, + 0x2c,0x33,0x34,0x33,0x2e,0x34,0x32,0x63,0x2d,0x33, + 0x2e,0x38,0x36,0x35,0x2c,0x30,0x2d,0x37,0x2e,0x35, + 0x30,0x39,0x2d,0x30,0x2e,0x37,0x32,0x34,0x2d,0x31, + 0x30,0x2e,0x39,0x33,0x31,0x2d,0x32,0x2e,0x31,0x37, + 0x34,0x63,0x2d,0x33,0x2e,0x34,0x31,0x38,0x2d,0x31, + 0x2e,0x34,0x35,0x31,0x2d,0x36,0x2e,0x33,0x38,0x38, + 0x2d,0x33,0x2e,0x34,0x35,0x36,0x2d,0x38,0x2e,0x39, + 0x30,0x39,0x2d,0x36,0x2e,0x30,0x30,0x39,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x31,0x39, + 0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35, + 0x32,0x34,0x2d,0x35,0x2e,0x35,0x32,0x36,0x2d,0x36, + 0x2e,0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x31,0x63, + 0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e,0x33, + 0x38,0x33,0x2d,0x32,0x2e,0x32,0x32,0x34,0x2d,0x37, + 0x2e,0x30,0x30,0x37,0x2d,0x32,0x2e,0x32,0x32,0x34, + 0x2d,0x31,0x30,0x2e,0x38,0x37,0x36,0x56,0x32,0x34, + 0x39,0x2e,0x34,0x36,0x68,0x2d,0x31,0x39,0x2e,0x30, + 0x36,0x33,0x76,0x2d,0x31,0x32,0x2e,0x31,0x31,0x37, + 0x68,0x31,0x39,0x2e,0x30,0x36,0x33,0x76,0x2d,0x32, + 0x35,0x2e,0x34,0x38,0x35,0x6c,0x31,0x32,0x2e,0x37, + 0x34,0x2d,0x32,0x2e,0x30,0x37,0x0d,0x0a,0x09,0x09, + 0x09,0x76,0x32,0x37,0x2e,0x35,0x35,0x35,0x68,0x32, + 0x36,0x2e,0x39,0x33,0x36,0x76,0x31,0x32,0x2e,0x31, + 0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x36, + 0x76,0x36,0x36,0x2e,0x36,0x31,0x31,0x63,0x30,0x2c, + 0x32,0x2e,0x31,0x34,0x33,0x2c,0x30,0x2e,0x33,0x39, + 0x38,0x2c,0x34,0x2e,0x31,0x32,0x39,0x2c,0x31,0x2e, + 0x31,0x39,0x34,0x2c,0x35,0x2e,0x39,0x35,0x35,0x63, + 0x30,0x2e,0x37,0x38,0x38,0x2c,0x31,0x2e,0x38,0x33, + 0x33,0x2c,0x31,0x2e,0x38,0x37,0x39,0x2c,0x33,0x2e, + 0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36,0x31,0x2c, + 0x34,0x2e,0x38,0x31,0x38,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x31,0x2e,0x33,0x38,0x32,0x2c,0x31,0x2e,0x33, + 0x38,0x31,0x2c,0x33,0x2e,0x30,0x30,0x34,0x2c,0x32, + 0x2e,0x34,0x37,0x32,0x2c,0x34,0x2e,0x38,0x36,0x38, + 0x2c,0x33,0x2e,0x32,0x36,0x34,0x63,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x30,0x2e,0x37,0x39,0x32,0x2c,0x33, + 0x2e,0x38,0x36,0x35,0x2c,0x31,0x2e,0x31,0x39,0x2c, + 0x36,0x2e,0x30,0x30,0x39,0x2c,0x31,0x2e,0x31,0x39, + 0x68,0x31,0x31,0x2e,0x36,0x30,0x34,0x76,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x48,0x31,0x30,0x31,0x34,0x2e, + 0x34,0x32,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x30,0x35,0x32,0x2e,0x36,0x34,0x35,0x2c,0x32, + 0x31,0x31,0x2e,0x38,0x35,0x39,0x56,0x31,0x39,0x34, + 0x2e,0x38,0x37,0x68,0x31,0x34,0x2e,0x38,0x31,0x35, + 0x76,0x31,0x36,0x2e,0x39,0x38,0x39,0x48,0x31,0x30, + 0x35,0x32,0x2e,0x36,0x34,0x35,0x7a,0x20,0x4d,0x31, + 0x30,0x35,0x33,0x2e,0x36,0x38,0x32,0x2c,0x33,0x34, + 0x33,0x2e,0x34,0x32,0x56,0x32,0x33,0x37,0x2e,0x33, + 0x34,0x34,0x68,0x31,0x32,0x2e,0x37,0x34,0x31,0x56, + 0x33,0x34,0x33,0x2e,0x34,0x32,0x48,0x31,0x30,0x35, + 0x33,0x2e,0x36,0x38,0x32,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x31,0x36,0x34,0x2e,0x35,0x37, + 0x38,0x2c,0x33,0x32,0x36,0x2e,0x34,0x33,0x32,0x63, + 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x38, + 0x2d,0x33,0x2e,0x38,0x35,0x31,0x2c,0x37,0x2e,0x31, + 0x31,0x35,0x2d,0x36,0x2e,0x36,0x37,0x39,0x2c,0x39, + 0x2e,0x39,0x34,0x33,0x63,0x2d,0x32,0x2e,0x38,0x33, + 0x36,0x2c,0x32,0x2e,0x38,0x33,0x36,0x2d,0x36,0x2e, + 0x31,0x35,0x2c,0x35,0x2e,0x30,0x36,0x2d,0x39,0x2e, + 0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x33,0x2e,0x37,0x39,0x37, + 0x2c,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x38, + 0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31, + 0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33, + 0x34,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d, + 0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38,0x2e, + 0x33,0x32,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31, + 0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34,0x33, + 0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35,0x2d,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31,0x39, + 0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e,0x39, + 0x34,0x37,0x2d,0x36,0x2e,0x36,0x38,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x38,0x33,0x36, + 0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e,0x30, + 0x36,0x33,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34,0x33, + 0x63,0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e, + 0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d, + 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, + 0x35,0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d, + 0x34,0x37,0x2e,0x38,0x35,0x38,0x63,0x30,0x2d,0x34, + 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x30,0x38, + 0x2d,0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34, + 0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x31,0x2e,0x36,0x31,0x39,0x2d, + 0x33,0x2e,0x38,0x30,0x31,0x2c,0x33,0x2e,0x38,0x34, + 0x36,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e, + 0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34,0x37,0x63, + 0x32,0x2e,0x38,0x32,0x38,0x2d,0x32,0x2e,0x38,0x33, + 0x33,0x2c,0x36,0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e, + 0x30,0x35,0x36,0x2c,0x39,0x2e,0x39,0x34,0x37,0x2d, + 0x36,0x2e,0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39, + 0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e, + 0x38,0x33,0x34,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c, + 0x31,0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34, + 0x33,0x34,0x68,0x38,0x2e,0x34,0x39,0x36,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x34,0x2e,0x32,0x37,0x39,0x2c, + 0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38, + 0x31,0x35,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x63,0x33,0x2e,0x38,0x2c, + 0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31,0x31, + 0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39, + 0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e, + 0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c, + 0x35,0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31,0x34, + 0x36,0x2c,0x36,0x2e,0x36,0x37,0x39,0x2c,0x39,0x2e, + 0x39,0x34,0x37,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31, + 0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37,0x39,0x36, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38, + 0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x76,0x34,0x37,0x2e,0x38,0x35, + 0x38,0x43,0x31,0x31,0x36,0x37,0x2e,0x30,0x31,0x31, + 0x2c,0x33,0x31,0x38,0x2e,0x35,0x39,0x34,0x2c,0x31, + 0x31,0x36,0x36,0x2e,0x32,0x2c,0x33,0x32,0x32,0x2e, + 0x36,0x33,0x35,0x2c,0x31,0x31,0x36,0x34,0x2e,0x35, + 0x37,0x38,0x2c,0x33,0x32,0x36,0x2e,0x34,0x33,0x32, + 0x7a,0x20,0x4d,0x31,0x31,0x35,0x34,0x2e,0x32,0x37, + 0x31,0x2c,0x32,0x36,0x35,0x2e,0x37,0x32,0x36,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x32,0x2e,0x35, + 0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34, + 0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d, + 0x37,0x2e,0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39, + 0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32, + 0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38, + 0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d, + 0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36,0x30, + 0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x38, + 0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36, + 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d, + 0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x32,0x2e,0x35, + 0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36, + 0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31, + 0x39,0x38,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32, + 0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e,0x39,0x36,0x39, + 0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x32,0x2e,0x32, + 0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33, + 0x2e,0x39,0x33,0x38,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36, + 0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33, + 0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38, + 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d, + 0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36, + 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x76,0x34,0x39,0x2e,0x33,0x30,0x39,0x63,0x30, + 0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34, + 0x38,0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x38, + 0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32, + 0x37,0x37,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2c,0x33, + 0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32, + 0x63,0x31,0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e,0x36, + 0x35,0x37,0x2c,0x33,0x2e,0x36,0x30,0x34,0x2c,0x32, + 0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x32,0x2c, + 0x33,0x2e,0x39,0x33,0x38,0x63,0x32,0x2e,0x32,0x34, + 0x32,0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e, + 0x36,0x34,0x32,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c, + 0x37,0x2e,0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x34, + 0x37,0x68,0x38,0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x32,0x2e,0x35,0x35,0x33,0x2c,0x30, + 0x2c,0x34,0x2e,0x39,0x35,0x33,0x2d,0x30,0x2e,0x34, + 0x38,0x32,0x2c,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31, + 0x2e,0x34,0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x33, + 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x34,0x2e,0x31, + 0x39,0x38,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2c,0x35, + 0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38, + 0x63,0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36, + 0x35,0x37,0x2c,0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e, + 0x36,0x30,0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d, + 0x35,0x2e,0x38,0x35,0x32,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e,0x32, + 0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d,0x34,0x2e, + 0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d,0x37, + 0x2e,0x32,0x30,0x32,0x56,0x32,0x36,0x35,0x2e,0x37, + 0x32,0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x32,0x35,0x30,0x2e,0x36,0x31,0x32,0x2c,0x33, + 0x34,0x33,0x2e,0x34,0x32,0x76,0x2d,0x37,0x37,0x2e, + 0x36,0x39,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35, + 0x33,0x2d,0x30,0x2e,0x34,0x38,0x36,0x2d,0x34,0x2e, + 0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d, + 0x37,0x2e,0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39, + 0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32, + 0x2e,0x32,0x38,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d, + 0x33,0x2e,0x39,0x33,0x34,0x2d,0x35,0x2e,0x38,0x35, + 0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e, + 0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, + 0x33,0x2e,0x36,0x31,0x33,0x2d,0x32,0x2e,0x39,0x37, + 0x2d,0x35,0x2e,0x38,0x35,0x36,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d, + 0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31, + 0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x38, + 0x2e,0x34,0x39,0x32,0x63,0x2d,0x32,0x2e,0x35,0x35, + 0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30, + 0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32,0x30,0x33, + 0x2c,0x31,0x2e,0x34,0x35,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31, + 0x2e,0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x35,0x37, + 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30, + 0x39,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, + 0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34, + 0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76,0x37, + 0x37,0x2e,0x36,0x39,0x35,0x68,0x2d,0x31,0x32,0x2e, + 0x37,0x34,0x0d,0x0a,0x09,0x09,0x09,0x56,0x32,0x33, + 0x37,0x2e,0x33,0x34,0x34,0x68,0x34,0x2e,0x32,0x34, + 0x38,0x6c,0x36,0x2e,0x39,0x33,0x38,0x2c,0x31,0x30, + 0x2e,0x37,0x37,0x33,0x63,0x32,0x2e,0x39,0x30,0x31, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x36,0x2e,0x35, + 0x34,0x31,0x2d,0x37,0x2e,0x30,0x36,0x31,0x2c,0x31, + 0x30,0x2e,0x39,0x33,0x31,0x2d,0x39,0x2e,0x33,0x37, + 0x36,0x63,0x34,0x2e,0x33,0x38,0x32,0x2d,0x32,0x2e, + 0x33,0x31,0x32,0x2c,0x39,0x2e,0x31,0x36,0x36,0x2d, + 0x33,0x2e,0x34,0x37,0x31,0x2c,0x31,0x34,0x2e,0x33, + 0x34,0x38,0x2d,0x33,0x2e,0x34,0x37,0x31,0x68,0x33, + 0x2e,0x32,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2c,0x38,0x2e, + 0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36, + 0x32,0x36,0x2c,0x37,0x2e,0x31,0x31,0x31,0x2c,0x33, + 0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34,0x33,0x2c, + 0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x33, + 0x32,0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e, + 0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36, + 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34,0x37, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x36,0x32, + 0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e, + 0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c, + 0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31, + 0x32,0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x48,0x31, + 0x32,0x35,0x30,0x2e,0x36,0x31,0x32,0x7a,0x22,0x2f, + 0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x64,0x3d,0x22,0x4d,0x35,0x36,0x32,0x2e,0x37, + 0x35,0x37,0x2c,0x34,0x39,0x36,0x2e,0x31,0x32,0x38, + 0x63,0x30,0x2c,0x34,0x2e,0x32,0x37,0x38,0x2d,0x30, + 0x2e,0x38,0x36,0x35,0x2c,0x38,0x2e,0x31,0x39,0x38, + 0x2d,0x32,0x2e,0x35,0x38,0x37,0x2c,0x31,0x31,0x2e, + 0x37,0x35,0x37,0x63,0x2d,0x31,0x2e,0x37,0x33,0x2c, + 0x33,0x2e,0x35,0x36,0x2d,0x34,0x2e,0x30,0x37,0x36, + 0x2c,0x36,0x2e,0x36,0x31,0x33,0x2d,0x37,0x2e,0x30, + 0x34,0x36,0x2c,0x39,0x2e,0x31,0x37,0x73,0x2d,0x36, + 0x2e,0x34,0x30,0x36,0x2c,0x34,0x2e,0x35,0x33,0x39, + 0x2d,0x31,0x30,0x2e,0x33,0x30,0x37,0x2c,0x35,0x2e, + 0x39,0x35,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, + 0x33,0x2e,0x39,0x30,0x33,0x2c,0x31,0x2e,0x34,0x31, + 0x36,0x2d,0x37,0x2e,0x39,0x39,0x35,0x2c,0x32,0x2e, + 0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37,0x37,0x2c, + 0x32,0x2e,0x31,0x32,0x68,0x2d,0x38,0x2e,0x34,0x39, + 0x32,0x63,0x2d,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30, + 0x2d,0x38,0x2e,0x33,0x37,0x37,0x2d,0x30,0x2e,0x38, + 0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37,0x37,0x2d, + 0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x39, + 0x30,0x34,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37, + 0x2e,0x33,0x32,0x31,0x2d,0x33,0x2e,0x38,0x34,0x33, + 0x2d,0x31,0x30,0x2e,0x32,0x35,0x37,0x2d,0x36,0x2e, + 0x36,0x38,0x33,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, + 0x32,0x2e,0x39,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32, + 0x34,0x2d,0x35,0x2e,0x32,0x38,0x31,0x2d,0x36,0x2e, + 0x31,0x33,0x39,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d, + 0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x37, + 0x36,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e, + 0x36,0x34,0x31,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x32,0x2e,0x36,0x34,0x31,0x2d,0x31,0x32,0x2e,0x31, + 0x31,0x36,0x76,0x2d,0x34,0x2e,0x32,0x34,0x38,0x6c, + 0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37, + 0x34,0x76,0x37,0x2e,0x30,0x34,0x32,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x37, + 0x2c,0x30,0x2e,0x35,0x33,0x32,0x2c,0x34,0x2e,0x39, + 0x36,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2c,0x37,0x2e, + 0x32,0x30,0x32,0x63,0x31,0x2e,0x30,0x37,0x31,0x2c, + 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x35,0x30, + 0x33,0x2c,0x34,0x2e,0x31,0x39,0x34,0x2c,0x34,0x2e, + 0x33,0x30,0x31,0x2c,0x35,0x2e,0x38,0x35,0x35,0x63, + 0x31,0x2e,0x37,0x39,0x35,0x2c,0x31,0x2e,0x36,0x35, + 0x33,0x2c,0x33,0x2e,0x38,0x36,0x36,0x2c,0x32,0x2e, + 0x39,0x37,0x2c,0x36,0x2e,0x32,0x31,0x36,0x2c,0x33, + 0x2e,0x39,0x33,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x32,0x2e,0x33,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x34,0x2e,0x37,0x39,0x39,0x2c,0x31,0x2e, + 0x34,0x34,0x37,0x2c,0x37,0x2e,0x33,0x35,0x35,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, + 0x32,0x63,0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2c, + 0x35,0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x37,0x2e,0x33,0x35,0x36,0x2d,0x31,0x2e, + 0x31,0x33,0x34,0x63,0x32,0x2e,0x33,0x34,0x36,0x2d, + 0x30,0x2e,0x37,0x36,0x35,0x2c,0x34,0x2e,0x34,0x33, + 0x36,0x2d,0x31,0x2e,0x38,0x35,0x32,0x2c,0x36,0x2e, + 0x32,0x36,0x39,0x2d,0x33,0x2e,0x32,0x36,0x38,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x38,0x32,0x39, + 0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x33,0x2e,0x32, + 0x38,0x2d,0x33,0x2e,0x31,0x32,0x33,0x2c,0x34,0x2e, + 0x33,0x35,0x31,0x2d,0x35,0x2e,0x31,0x32,0x39,0x63, + 0x31,0x2e,0x30,0x36,0x38,0x2d,0x31,0x2e,0x39,0x39, + 0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d,0x34,0x2e, + 0x32,0x37,0x38,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d, + 0x36,0x2e,0x38,0x33,0x35,0x63,0x30,0x2d,0x33,0x2e, + 0x37,0x39,0x37,0x2d,0x30,0x2e,0x38,0x32,0x37,0x2d, + 0x36,0x2e,0x39,0x30,0x34,0x2d,0x32,0x2e,0x34,0x38, + 0x38,0x2d,0x39,0x2e,0x33,0x32,0x33,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, + 0x32,0x2e,0x34,0x31,0x39,0x2d,0x33,0x2e,0x38,0x35, + 0x2d,0x34,0x2e,0x34,0x33,0x39,0x2d,0x36,0x2e,0x35, + 0x37,0x35,0x2d,0x36,0x2e,0x30,0x36,0x32,0x63,0x2d, + 0x32,0x2e,0x37,0x32,0x39,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2d,0x35,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e, + 0x39,0x36,0x33,0x2d,0x39,0x2e,0x33,0x32,0x33,0x2d, + 0x34,0x2e,0x30,0x33,0x34,0x63,0x2d,0x33,0x2e,0x34, + 0x39,0x2d,0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e, + 0x30,0x36,0x35,0x2d,0x32,0x2e,0x31,0x34,0x34,0x2d, + 0x31,0x30,0x2e,0x37,0x32,0x34,0x2d,0x33,0x2e,0x32, + 0x31,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x33, + 0x2e,0x36,0x36,0x33,0x2d,0x31,0x2e,0x30,0x37,0x31, + 0x2d,0x37,0x2e,0x32,0x33,0x37,0x2d,0x32,0x2e,0x32, + 0x39,0x36,0x2d,0x31,0x30,0x2e,0x37,0x32,0x34,0x2d, + 0x33,0x2e,0x36,0x37,0x34,0x63,0x2d,0x33,0x2e,0x34, + 0x38,0x36,0x2d,0x31,0x2e,0x33,0x38,0x36,0x2d,0x36, + 0x2e,0x35,0x39,0x34,0x2d,0x33,0x2e,0x32,0x2d,0x39, + 0x2e,0x33,0x32,0x33,0x2d,0x35,0x2e,0x34,0x34,0x32, + 0x63,0x2d,0x32,0x2e,0x37,0x32,0x39,0x2d,0x32,0x2e, + 0x32,0x34,0x32,0x2d,0x34,0x2e,0x39,0x31,0x38,0x2d, + 0x35,0x2e,0x30,0x36,0x2d,0x36,0x2e,0x35,0x37,0x35, + 0x2d,0x38,0x2e,0x34,0x34,0x32,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d,0x33, + 0x2e,0x33,0x38,0x34,0x2d,0x32,0x2e,0x34,0x38,0x38, + 0x2d,0x37,0x2e,0x35,0x39,0x33,0x2d,0x32,0x2e,0x34, + 0x38,0x38,0x2d,0x31,0x32,0x2e,0x36,0x33,0x38,0x63, + 0x30,0x2d,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30,0x2e, + 0x38,0x32,0x37,0x2d,0x38,0x2e,0x31,0x39,0x37,0x2c, + 0x32,0x2e,0x34,0x38,0x38,0x2d,0x31,0x31,0x2e,0x37, + 0x35,0x37,0x63,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33, + 0x2e,0x35,0x36,0x2c,0x33,0x2e,0x39,0x2d,0x36,0x2e, + 0x36,0x31,0x33,0x2c,0x36,0x2e,0x37,0x33,0x32,0x2d, + 0x39,0x2e,0x31,0x37,0x0d,0x0a,0x09,0x09,0x09,0x73, + 0x36,0x2e,0x31,0x32,0x37,0x2d,0x34,0x2e,0x35,0x33, + 0x39,0x2c,0x39,0x2e,0x38,0x39,0x33,0x2d,0x35,0x2e, + 0x39,0x35,0x35,0x63,0x33,0x2e,0x37,0x36,0x32,0x2d, + 0x31,0x2e,0x34,0x31,0x36,0x2c,0x37,0x2e,0x37,0x38, + 0x35,0x2d,0x32,0x2e,0x31,0x32,0x38,0x2c,0x31,0x32, + 0x2e,0x30,0x36,0x37,0x2d,0x32,0x2e,0x31,0x32,0x38, + 0x68,0x37,0x2e,0x34,0x35,0x39,0x63,0x34,0x2e,0x32, + 0x38,0x33,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x34, + 0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x31,0x2c,0x32,0x2e,0x34,0x33,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x33,0x2e,0x37,0x39,0x36, + 0x2c,0x31,0x2e,0x36,0x33,0x2c,0x37,0x2e,0x31,0x31, + 0x35,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39, + 0x34,0x37,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32, + 0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x33, + 0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31, + 0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32,0x2c,0x39, + 0x2e,0x39,0x35,0x31,0x63,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31, + 0x36,0x76,0x30,0x2e,0x34,0x31,0x34,0x0d,0x0a,0x09, + 0x09,0x09,0x6c,0x2d,0x31,0x32,0x2e,0x37,0x34,0x34, + 0x2c,0x32,0x2e,0x30,0x37,0x34,0x76,0x2d,0x33,0x2e, + 0x32,0x31,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x34, + 0x39,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e, + 0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d, + 0x37,0x2e,0x31,0x39,0x35,0x73,0x2d,0x32,0x2e,0x32, + 0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, + 0x2e,0x39,0x33,0x34,0x2d,0x35,0x2e,0x38,0x35,0x35, + 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x31,0x2e, + 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2d, + 0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x35, + 0x2d,0x33,0x2e,0x39,0x33,0x35,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30, + 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x33, + 0x2d,0x31,0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x31, + 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x34,0x68,0x2d, + 0x37,0x2e,0x34,0x35,0x39,0x63,0x2d,0x32,0x2e,0x35, + 0x35,0x33,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36, + 0x2c,0x30,0x2e,0x33,0x38,0x33,0x2d,0x37,0x2e,0x31, + 0x39,0x39,0x2c,0x31,0x2e,0x31,0x34,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x37,0x36, + 0x36,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x31,0x2e, + 0x38,0x35,0x33,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c, + 0x33,0x2e,0x32,0x36,0x31,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e, + 0x34,0x32,0x34,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33, + 0x2e,0x31,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, + 0x35,0x2e,0x31,0x32,0x38,0x63,0x2d,0x30,0x2e,0x39, + 0x36,0x39,0x2c,0x32,0x2e,0x30,0x30,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x32,0x38,0x37, + 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x36,0x2e,0x38, + 0x34,0x33,0x63,0x30,0x2c,0x33,0x2e,0x36,0x35,0x39, + 0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c,0x36,0x2e,0x36, + 0x34,0x35,0x2c,0x32,0x2e,0x34,0x38,0x38,0x2c,0x38, + 0x2e,0x39,0x35,0x36,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e,0x33,0x31, + 0x39,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x34,0x2e,0x32, + 0x37,0x31,0x2c,0x36,0x2e,0x35,0x37,0x39,0x2c,0x35, + 0x2e,0x38,0x35,0x35,0x63,0x32,0x2e,0x37,0x32,0x35, + 0x2c,0x31,0x2e,0x35,0x39,0x32,0x2c,0x35,0x2e,0x38, + 0x33,0x33,0x2c,0x32,0x2e,0x39,0x31,0x36,0x2c,0x39, + 0x2e,0x33,0x32,0x33,0x2c,0x33,0x2e,0x39,0x38,0x37, + 0x63,0x33,0x2e,0x34,0x38,0x37,0x2c,0x31,0x2e,0x30, + 0x37,0x32,0x2c,0x37,0x2e,0x30,0x34,0x32,0x2c,0x32, + 0x2e,0x31,0x37,0x34,0x2c,0x31,0x30,0x2e,0x36,0x37, + 0x2c,0x33,0x2e,0x33,0x31,0x34,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x33,0x2e,0x36,0x32,0x35,0x2c,0x31,0x2e, + 0x31,0x34,0x31,0x2c,0x37,0x2e,0x31,0x38,0x2c,0x32, + 0x2e,0x34,0x33,0x35,0x2c,0x31,0x30,0x2e,0x36,0x37, + 0x2c,0x33,0x2e,0x38,0x38,0x39,0x63,0x33,0x2e,0x34, + 0x38,0x36,0x2c,0x31,0x2e,0x34,0x34,0x36,0x2c,0x36, + 0x2e,0x35,0x39,0x34,0x2c,0x33,0x2e,0x33,0x31,0x34, + 0x2c,0x39,0x2e,0x33,0x32,0x33,0x2c,0x35,0x2e,0x35, + 0x38,0x38,0x63,0x32,0x2e,0x37,0x32,0x39,0x2c,0x32, + 0x2e,0x32,0x38,0x2c,0x34,0x2e,0x39,0x32,0x32,0x2c, + 0x35,0x2e,0x31,0x32,0x38,0x2c,0x36,0x2e,0x35,0x37, + 0x39,0x2c,0x38,0x2e,0x35,0x35,0x0d,0x0a,0x09,0x09, + 0x09,0x43,0x35,0x36,0x31,0x2e,0x39,0x33,0x31,0x2c, + 0x34,0x38,0x36,0x2e,0x38,0x35,0x39,0x2c,0x35,0x36, + 0x32,0x2e,0x37,0x35,0x37,0x2c,0x34,0x39,0x31,0x2e, + 0x30,0x38,0x34,0x2c,0x35,0x36,0x32,0x2e,0x37,0x35, + 0x37,0x2c,0x34,0x39,0x36,0x2e,0x31,0x32,0x38,0x7a, + 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x36,0x32,0x35, + 0x2e,0x38,0x34,0x34,0x2c,0x35,0x32,0x33,0x2e,0x30, + 0x36,0x34,0x63,0x2d,0x33,0x2e,0x38,0x36,0x35,0x2c, + 0x30,0x2d,0x37,0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e, + 0x37,0x32,0x38,0x2d,0x31,0x30,0x2e,0x39,0x32,0x36, + 0x2d,0x32,0x2e,0x31,0x37,0x34,0x63,0x2d,0x33,0x2e, + 0x34,0x32,0x31,0x2d,0x31,0x2e,0x34,0x35,0x34,0x2d, + 0x36,0x2e,0x33,0x39,0x32,0x2d,0x33,0x2e,0x34,0x36, + 0x2d,0x38,0x2e,0x39,0x31,0x2d,0x36,0x2e,0x30,0x30, + 0x39,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x32,0x2e, + 0x35,0x32,0x32,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d, + 0x34,0x2e,0x35,0x32,0x33,0x2d,0x35,0x2e,0x35,0x32, + 0x36,0x2d,0x36,0x2e,0x30,0x30,0x38,0x2d,0x38,0x2e, + 0x39,0x30,0x39,0x63,0x2d,0x31,0x2e,0x34,0x38,0x35, + 0x2d,0x33,0x2e,0x33,0x38,0x34,0x2d,0x32,0x2e,0x32, + 0x32,0x38,0x2d,0x37,0x2e,0x30,0x31,0x32,0x2d,0x32, + 0x2e,0x32,0x32,0x38,0x2d,0x31,0x30,0x2e,0x38,0x37, + 0x37,0x56,0x34,0x32,0x39,0x2e,0x31,0x68,0x2d,0x31, + 0x39,0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32,0x2e, + 0x31,0x31,0x37,0x68,0x31,0x39,0x2e,0x30,0x35,0x39, + 0x76,0x2d,0x32,0x35,0x2e,0x34,0x38,0x6c,0x31,0x32, + 0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x34,0x0d, + 0x0a,0x09,0x09,0x09,0x76,0x32,0x37,0x2e,0x35,0x35, + 0x35,0x68,0x32,0x36,0x2e,0x39,0x33,0x36,0x56,0x34, + 0x32,0x39,0x2e,0x31,0x68,0x2d,0x32,0x36,0x2e,0x39, + 0x33,0x36,0x76,0x36,0x36,0x2e,0x36,0x31,0x35,0x63, + 0x30,0x2c,0x32,0x2e,0x31,0x34,0x33,0x2c,0x30,0x2e, + 0x33,0x39,0x38,0x2c,0x34,0x2e,0x31,0x32,0x35,0x2c, + 0x31,0x2e,0x31,0x39,0x34,0x2c,0x35,0x2e,0x39,0x35, + 0x35,0x63,0x30,0x2e,0x37,0x39,0x32,0x2c,0x31,0x2e, + 0x38,0x32,0x39,0x2c,0x31,0x2e,0x38,0x37,0x39,0x2c, + 0x33,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36, + 0x31,0x2c,0x34,0x2e,0x38,0x31,0x34,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x31,0x2e,0x33,0x38,0x31,0x2c,0x31, + 0x2e,0x33,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34, + 0x2c,0x32,0x2e,0x34,0x37,0x32,0x2c,0x34,0x2e,0x38, + 0x36,0x38,0x2c,0x33,0x2e,0x32,0x36,0x39,0x63,0x31, + 0x2e,0x38,0x36,0x38,0x2c,0x30,0x2e,0x37,0x38,0x38, + 0x2c,0x33,0x2e,0x38,0x36,0x39,0x2c,0x31,0x2e,0x31, + 0x38,0x37,0x2c,0x36,0x2e,0x30,0x30,0x38,0x2c,0x31, + 0x2e,0x31,0x38,0x37,0x68,0x31,0x31,0x2e,0x36,0x30, + 0x34,0x76,0x31,0x32,0x2e,0x31,0x32,0x34,0x48,0x36, + 0x32,0x35,0x2e,0x38,0x34,0x34,0x7a,0x22,0x2f,0x3e, + 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x64,0x3d,0x22,0x4d,0x37,0x32,0x37,0x2e,0x34,0x36, + 0x39,0x2c,0x35,0x32,0x33,0x2e,0x30,0x36,0x34,0x6c, + 0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d,0x31,0x30,0x2e, + 0x35,0x37,0x63,0x2d,0x32,0x2e,0x39,0x2c,0x33,0x2e, + 0x38,0x30,0x34,0x2d,0x36,0x2e,0x35,0x32,0x38,0x2c, + 0x36,0x2e,0x38,0x35,0x37,0x2d,0x31,0x30,0x2e,0x38, + 0x37,0x36,0x2c,0x39,0x2e,0x31,0x36,0x39,0x63,0x2d, + 0x34,0x2e,0x33,0x35,0x32,0x2c,0x32,0x2e,0x33,0x31, + 0x33,0x2d,0x39,0x2e,0x31,0x31,0x36,0x2c,0x33,0x2e, + 0x34,0x36,0x38,0x2d,0x31,0x34,0x2e,0x32,0x39,0x39, + 0x2c,0x33,0x2e,0x34,0x36,0x38,0x68,0x2d,0x33,0x2e, + 0x32,0x30,0x37,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, + 0x34,0x2e,0x32,0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e, + 0x33,0x32,0x38,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d, + 0x31,0x32,0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e,0x34, + 0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2d, + 0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31, + 0x34,0x2d,0x33,0x2e,0x38,0x34,0x33,0x2d,0x39,0x2e, + 0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x63, + 0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38, + 0x32,0x34,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36, + 0x2e,0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x2d,0x39,0x2e,0x39,0x34,0x33,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33, + 0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35, + 0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34, + 0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x76, + 0x2d,0x31,0x2e,0x30,0x34,0x31,0x63,0x30,0x2d,0x34, + 0x2e,0x32,0x37,0x38,0x2c,0x30,0x2e,0x38,0x30,0x38, + 0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33, + 0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x63,0x31, + 0x2e,0x36,0x31,0x38,0x2d,0x33,0x2e,0x37,0x39,0x37, + 0x2c,0x33,0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31, + 0x31,0x31,0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39, + 0x2e,0x39,0x34,0x33,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x32,0x2e,0x38,0x32,0x39,0x2d,0x32,0x2e,0x38,0x33, + 0x32,0x2c,0x36,0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e, + 0x30,0x36,0x2c,0x39,0x2e,0x39,0x34,0x33,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x36, + 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c,0x37,0x2e,0x38, + 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e,0x34,0x33, + 0x35,0x68,0x32,0x36,0x2e,0x39,0x33,0x32,0x76,0x2d, + 0x31,0x36,0x2e,0x33,0x37,0x32,0x63,0x30,0x2d,0x32, + 0x2e,0x35,0x34,0x39,0x2d,0x30,0x2e,0x34,0x38,0x36, + 0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31,0x2e,0x34, + 0x35,0x2d,0x37,0x2e,0x31,0x39,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2d, + 0x32,0x2e,0x32,0x34,0x32,0x2d,0x32,0x2e,0x32,0x38, + 0x31,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e, + 0x39,0x33,0x35,0x2d,0x35,0x2e,0x38,0x35,0x35,0x63, + 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36, + 0x35,0x33,0x2d,0x33,0x2e,0x36,0x31,0x33,0x2d,0x32, + 0x2e,0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2d, + 0x33,0x2e,0x39,0x33,0x35,0x63,0x2d,0x32,0x2e,0x32, + 0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34, + 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x34, + 0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, + 0x35,0x34,0x68,0x2d,0x37,0x2e,0x34,0x35,0x39,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x35, + 0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, + 0x30,0x2e,0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32, + 0x2c,0x31,0x2e,0x34,0x35,0x34,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x33,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2d, + 0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e,0x32,0x38, + 0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e, + 0x39,0x33,0x35,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37, + 0x2c,0x31,0x2e,0x36,0x36,0x31,0x2d,0x32,0x2e,0x39, + 0x37,0x2c,0x33,0x2e,0x36,0x31,0x33,0x2d,0x33,0x2e, + 0x39,0x33,0x35,0x2c,0x35,0x2e,0x38,0x35,0x35,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36, + 0x39,0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76, + 0x33,0x2e,0x38,0x33,0x34,0x6c,0x2d,0x31,0x32,0x2e, + 0x37,0x34,0x35,0x2d,0x32,0x2e,0x30,0x37,0x34,0x76, + 0x2d,0x31,0x2e,0x30,0x33,0x33,0x63,0x30,0x2d,0x34, + 0x2e,0x32,0x37,0x38,0x2c,0x30,0x2e,0x38,0x31,0x32, + 0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33, + 0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x33,0x2d, + 0x33,0x2e,0x38,0x30,0x35,0x2c,0x33,0x2e,0x38,0x35, + 0x2d,0x37,0x2e,0x31,0x31,0x38,0x2c,0x36,0x2e,0x36, + 0x38,0x33,0x2d,0x39,0x2e,0x39,0x35,0x31,0x63,0x32, + 0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x33,0x32, + 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30, + 0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x36, + 0x2d,0x31,0x2e,0x36,0x31,0x35,0x2c,0x37,0x2e,0x38, + 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x35, + 0x68,0x37,0x2e,0x34,0x35,0x39,0x0d,0x0a,0x09,0x09, + 0x09,0x63,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c, + 0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x39, + 0x2c,0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e, + 0x34,0x33,0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c, + 0x31,0x2e,0x36,0x33,0x2c,0x37,0x2e,0x31,0x31,0x2c, + 0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34,0x32, + 0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38, + 0x33,0x32,0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c,0x35, + 0x2e,0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, + 0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x35, + 0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x36, + 0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, + 0x31,0x31,0x36,0x76,0x37,0x36,0x2e,0x39,0x37,0x32, + 0x48,0x37,0x32,0x37,0x2e,0x34,0x36,0x39,0x7a,0x20, + 0x4d,0x37,0x31,0x38,0x2e,0x39,0x37,0x37,0x2c,0x34, + 0x37,0x31,0x2e,0x36,0x38,0x68,0x2d,0x32,0x36,0x2e, + 0x39,0x33,0x32,0x63,0x2d,0x32,0x2e,0x35,0x36,0x31, + 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30,0x2e, + 0x34,0x38,0x32,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e, + 0x39,0x37,0x32,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, + 0x32,0x2e,0x32,0x39,0x36,0x2d,0x35,0x2e,0x38,0x35, + 0x35,0x2c,0x33,0x2e,0x39,0x38,0x38,0x63,0x2d,0x31, + 0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x39,0x39, + 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x36, + 0x36,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e, + 0x39,0x30,0x38,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, + 0x2c,0x32,0x2e,0x32,0x34,0x33,0x2d,0x31,0x2e,0x34, + 0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x33,0x76,0x34, + 0x2e,0x34,0x34,0x37,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2c,0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e, + 0x34,0x38,0x31,0x2c,0x34,0x2e,0x39,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63, + 0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34, + 0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c,0x34,0x2e, + 0x31,0x39,0x34,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2c, + 0x35,0x2e,0x38,0x35,0x35,0x63,0x31,0x2e,0x36,0x36, + 0x31,0x2c,0x31,0x2e,0x36,0x35,0x33,0x2c,0x33,0x2e, + 0x36,0x30,0x38,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35, + 0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x35, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x32,0x34, + 0x32,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x34,0x2e, + 0x36,0x34,0x32,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c, + 0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x34, + 0x37,0x68,0x38,0x2e,0x34,0x39,0x32,0x63,0x32,0x2e, + 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, + 0x37,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, + 0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x73, + 0x34,0x2e,0x31,0x39,0x34,0x2d,0x32,0x2e,0x32,0x38, + 0x31,0x2c,0x35,0x2e,0x38,0x35,0x35,0x2d,0x33,0x2e, + 0x39,0x33,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31, + 0x2e,0x36,0x35,0x33,0x2d,0x31,0x2e,0x36,0x36,0x31, + 0x2c,0x32,0x2e,0x39,0x36,0x36,0x2d,0x33,0x2e,0x36, + 0x31,0x32,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2d,0x35, + 0x2e,0x38,0x35,0x35,0x63,0x30,0x2e,0x39,0x36,0x34, + 0x2d,0x32,0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34, + 0x35,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, + 0x34,0x35,0x2d,0x37,0x2e,0x32,0x30,0x32,0x56,0x34, + 0x37,0x31,0x2e,0x36,0x38,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x37,0x39,0x35,0x2e,0x38,0x34,0x31, + 0x2c,0x35,0x32,0x33,0x2e,0x30,0x36,0x34,0x63,0x2d, + 0x33,0x2e,0x38,0x36,0x39,0x2c,0x30,0x2d,0x37,0x2e, + 0x35,0x31,0x33,0x2d,0x30,0x2e,0x37,0x32,0x38,0x2d, + 0x31,0x30,0x2e,0x39,0x32,0x37,0x2d,0x32,0x2e,0x31, + 0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x32,0x31,0x2d, + 0x31,0x2e,0x34,0x35,0x34,0x2d,0x36,0x2e,0x33,0x39, + 0x31,0x2d,0x33,0x2e,0x34,0x36,0x2d,0x38,0x2e,0x39, + 0x30,0x39,0x2d,0x36,0x2e,0x30,0x30,0x39,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32,0x36, + 0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35, + 0x32,0x33,0x2d,0x35,0x2e,0x35,0x32,0x36,0x2d,0x36, + 0x2e,0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x30,0x39, + 0x63,0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e, + 0x33,0x38,0x34,0x2d,0x32,0x2e,0x32,0x32,0x38,0x2d, + 0x37,0x2e,0x30,0x31,0x32,0x2d,0x32,0x2e,0x32,0x32, + 0x38,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37,0x56,0x34, + 0x32,0x39,0x2e,0x31,0x48,0x37,0x34,0x38,0x2e,0x37, + 0x31,0x76,0x2d,0x31,0x32,0x2e,0x31,0x31,0x37,0x68, + 0x31,0x39,0x2e,0x30,0x35,0x39,0x76,0x2d,0x32,0x35, + 0x2e,0x34,0x38,0x6c,0x31,0x32,0x2e,0x37,0x34,0x31, + 0x2d,0x32,0x2e,0x30,0x37,0x34,0x0d,0x0a,0x09,0x09, + 0x09,0x76,0x32,0x37,0x2e,0x35,0x35,0x35,0x68,0x32, + 0x36,0x2e,0x39,0x33,0x31,0x56,0x34,0x32,0x39,0x2e, + 0x31,0x48,0x37,0x38,0x30,0x2e,0x35,0x31,0x76,0x36, + 0x36,0x2e,0x36,0x31,0x35,0x63,0x30,0x2c,0x32,0x2e, + 0x31,0x34,0x33,0x2c,0x30,0x2e,0x33,0x39,0x34,0x2c, + 0x34,0x2e,0x31,0x32,0x35,0x2c,0x31,0x2e,0x31,0x38, + 0x39,0x2c,0x35,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e, + 0x37,0x39,0x36,0x2c,0x31,0x2e,0x38,0x32,0x39,0x2c, + 0x31,0x2e,0x38,0x38,0x33,0x2c,0x33,0x2e,0x34,0x33, + 0x37,0x2c,0x33,0x2e,0x32,0x36,0x35,0x2c,0x34,0x2e, + 0x38,0x31,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31, + 0x2e,0x33,0x38,0x32,0x2c,0x31,0x2e,0x33,0x38,0x35, + 0x2c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x32,0x2e,0x34, + 0x37,0x32,0x2c,0x34,0x2e,0x38,0x36,0x38,0x2c,0x33, + 0x2e,0x32,0x36,0x39,0x63,0x31,0x2e,0x38,0x36,0x34, + 0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e,0x38, + 0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x37,0x2c,0x36, + 0x2e,0x30,0x30,0x39,0x2c,0x31,0x2e,0x31,0x38,0x37, + 0x68,0x31,0x31,0x2e,0x36,0x76,0x31,0x32,0x2e,0x31, + 0x32,0x34,0x48,0x37,0x39,0x35,0x2e,0x38,0x34,0x31, + 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x38,0x33, + 0x34,0x2e,0x30,0x36,0x37,0x2c,0x33,0x39,0x31,0x2e, + 0x35,0x30,0x32,0x76,0x2d,0x31,0x36,0x2e,0x39,0x38, + 0x38,0x68,0x31,0x34,0x2e,0x38,0x31,0x34,0x76,0x31, + 0x36,0x2e,0x39,0x38,0x38,0x48,0x38,0x33,0x34,0x2e, + 0x30,0x36,0x37,0x7a,0x20,0x4d,0x38,0x33,0x35,0x2e, + 0x31,0x30,0x34,0x2c,0x35,0x32,0x33,0x2e,0x30,0x36, + 0x34,0x56,0x34,0x31,0x36,0x2e,0x39,0x38,0x33,0x68, + 0x31,0x32,0x2e,0x37,0x34,0x76,0x31,0x30,0x36,0x2e, + 0x30,0x38,0x31,0x48,0x38,0x33,0x35,0x2e,0x31,0x30, + 0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x39, + 0x34,0x35,0x2e,0x39,0x39,0x39,0x2c,0x35,0x30,0x36, + 0x2e,0x30,0x37,0x31,0x63,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2c,0x33,0x2e,0x38,0x30,0x35,0x2d,0x33,0x2e, + 0x38,0x35,0x2c,0x37,0x2e,0x31,0x31,0x39,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34,0x33, + 0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32,0x2e, + 0x38,0x34,0x2d,0x36,0x2e,0x31,0x34,0x36,0x2c,0x35, + 0x2e,0x30,0x36,0x2d,0x39,0x2e,0x39,0x34,0x33,0x2c, + 0x36,0x2e,0x36,0x38,0x33,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c,0x31,0x2e, + 0x36,0x32,0x32,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68,0x2d,0x38, + 0x2e,0x34,0x39,0x33,0x63,0x2d,0x34,0x2e,0x32,0x38, + 0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x37,0x2d, + 0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d, + 0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2d,0x37,0x2e,0x31,0x31,0x2d,0x33,0x2e,0x38, + 0x34,0x33,0x2d,0x39,0x2e,0x39,0x34,0x32,0x2d,0x36, + 0x2e,0x36,0x38,0x33,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x32,0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38, + 0x32,0x34,0x2d,0x35,0x2e,0x30,0x36,0x2d,0x36,0x2e, + 0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d, + 0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36, + 0x32,0x33,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, + 0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38,0x33,0x38, + 0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e, + 0x31,0x31,0x36,0x76,0x2d,0x34,0x37,0x2e,0x38,0x36, + 0x32,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37,0x38,0x2c, + 0x30,0x2e,0x38,0x31,0x32,0x2d,0x38,0x2e,0x33,0x32, + 0x2c,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e, + 0x31,0x31,0x36,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x38,0x30,0x35, + 0x2c,0x33,0x2e,0x38,0x35,0x31,0x2d,0x37,0x2e,0x31, + 0x31,0x38,0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39, + 0x2e,0x39,0x35,0x31,0x63,0x32,0x2e,0x38,0x33,0x32, + 0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e,0x31, + 0x34,0x36,0x2d,0x35,0x2e,0x30,0x35,0x32,0x2c,0x39, + 0x2e,0x39,0x34,0x32,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x63,0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e,0x36, + 0x31,0x35,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32, + 0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32, + 0x34,0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x38,0x2e, + 0x34,0x39,0x33,0x0d,0x0a,0x09,0x09,0x09,0x63,0x34, + 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2c,0x38,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34,0x33,0x35, + 0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36, + 0x33,0x2c,0x37,0x2e,0x31,0x31,0x31,0x2c,0x33,0x2e, + 0x38,0x35,0x2c,0x39,0x2e,0x39,0x34,0x33,0x2c,0x36, + 0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x33,0x32, + 0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c,0x35,0x2e,0x30, + 0x35,0x39,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36, + 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x35,0x31, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x36,0x32, + 0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e, + 0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, + 0x31,0x36,0x76,0x34,0x37,0x2e,0x38,0x36,0x32,0x43, + 0x39,0x34,0x38,0x2e,0x34,0x33,0x32,0x2c,0x34,0x39, + 0x38,0x2e,0x32,0x33,0x33,0x2c,0x39,0x34,0x37,0x2e, + 0x36,0x32,0x32,0x2c,0x35,0x30,0x32,0x2e,0x32,0x37, + 0x35,0x2c,0x39,0x34,0x35,0x2e,0x39,0x39,0x39,0x2c, + 0x35,0x30,0x36,0x2e,0x30,0x37,0x31,0x7a,0x20,0x4d, + 0x39,0x33,0x35,0x2e,0x36,0x39,0x32,0x2c,0x34,0x34, + 0x35,0x2e,0x33,0x36,0x36,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30, + 0x2e,0x34,0x38,0x35,0x2d,0x34,0x2e,0x39,0x35,0x33, + 0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39, + 0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32, + 0x2e,0x32,0x34,0x32,0x2d,0x32,0x2e,0x32,0x38,0x31, + 0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39, + 0x33,0x35,0x2d,0x35,0x2e,0x38,0x35,0x35,0x63,0x2d, + 0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35, + 0x33,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d,0x32,0x2e, + 0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2d,0x33, + 0x2e,0x39,0x33,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x31,0x39,0x38, + 0x2d,0x31,0x2e,0x34,0x35,0x34,0x68,0x2d,0x38,0x2e, + 0x34,0x39,0x33,0x63,0x2d,0x32,0x2e,0x35,0x35,0x37, + 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30,0x2e, + 0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c,0x31, + 0x2e,0x34,0x35,0x34,0x63,0x2d,0x32,0x2e,0x32,0x34, + 0x33,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2d,0x34,0x2e, + 0x31,0x39,0x34,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d, + 0x35,0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33, + 0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x36,0x31,0x2d, + 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31,0x33, + 0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e,0x38, + 0x35,0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c, + 0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34,0x35, + 0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, + 0x35,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76,0x34,0x39, + 0x2e,0x33,0x30,0x39,0x63,0x30,0x2c,0x32,0x2e,0x35, + 0x35,0x37,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2c,0x34, + 0x2e,0x39,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2c,0x37, + 0x2e,0x32,0x30,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34, + 0x33,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2c,0x34,0x2e, + 0x31,0x39,0x34,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2c, + 0x35,0x2e,0x38,0x35,0x35,0x63,0x31,0x2e,0x36,0x36, + 0x31,0x2c,0x31,0x2e,0x36,0x35,0x33,0x2c,0x33,0x2e, + 0x36,0x31,0x32,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35, + 0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x35, + 0x63,0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31, + 0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x32,0x30,0x32, + 0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34, + 0x39,0x33,0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e, + 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, + 0x36,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, + 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, + 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x34,0x2e,0x31,0x39,0x34,0x2d,0x32,0x2e, + 0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x35,0x2d, + 0x33,0x2e,0x39,0x33,0x35,0x63,0x31,0x2e,0x36,0x35, + 0x33,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e, + 0x39,0x36,0x37,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c, + 0x33,0x2e,0x39,0x33,0x35,0x2d,0x35,0x2e,0x38,0x35, + 0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2c,0x31, + 0x2e,0x34,0x35,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c, + 0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x32,0x30,0x32, + 0x56,0x34,0x34,0x35,0x2e,0x33,0x36,0x36,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30,0x33,0x32, + 0x2e,0x30,0x33,0x33,0x2c,0x35,0x32,0x33,0x2e,0x30, + 0x36,0x34,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x38, + 0x63,0x30,0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30, + 0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39,0x35,0x33, + 0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39, + 0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32, + 0x2e,0x32,0x34,0x32,0x2d,0x32,0x2e,0x32,0x37,0x37, + 0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x35,0x0d,0x0a, + 0x09,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33, + 0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e,0x36, + 0x30,0x39,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x35,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x31,0x39,0x39, + 0x2d,0x31,0x2e,0x34,0x35,0x34,0x68,0x2d,0x38,0x2e, + 0x34,0x39,0x36,0x63,0x2d,0x32,0x2e,0x35,0x35,0x37, + 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30, + 0x2e,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2c, + 0x31,0x2e,0x34,0x35,0x34,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e, + 0x39,0x36,0x35,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x32,0x2c,0x33,0x2e,0x39,0x33,0x35,0x63,0x2d,0x31, + 0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x36,0x31, + 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31, + 0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e, + 0x38,0x35,0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, + 0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34, + 0x35,0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e,0x31,0x39,0x35, + 0x76,0x37,0x37,0x2e,0x36,0x39,0x38,0x68,0x2d,0x31, + 0x32,0x2e,0x37,0x34,0x0d,0x0a,0x09,0x09,0x09,0x56, + 0x34,0x31,0x36,0x2e,0x39,0x38,0x33,0x68,0x34,0x2e, + 0x32,0x34,0x34,0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c, + 0x31,0x30,0x2e,0x37,0x37,0x37,0x63,0x32,0x2e,0x39, + 0x30,0x31,0x2d,0x33,0x2e,0x39,0x34,0x31,0x2c,0x36, + 0x2e,0x35,0x34,0x35,0x2d,0x37,0x2e,0x30,0x36,0x34, + 0x2c,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d,0x39,0x2e, + 0x33,0x37,0x36,0x73,0x39,0x2e,0x31,0x37,0x2d,0x33, + 0x2e,0x34,0x37,0x36,0x2c,0x31,0x34,0x2e,0x33,0x34, + 0x34,0x2d,0x33,0x2e,0x34,0x37,0x36,0x68,0x33,0x2e, + 0x32,0x31,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x34, + 0x2e,0x32,0x37,0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33, + 0x32,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x35, + 0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x33,0x2c, + 0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35, + 0x2c,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36,0x38, + 0x32,0x63,0x32,0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e, + 0x38,0x33,0x33,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c, + 0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x37, + 0x39,0x2c,0x39,0x2e,0x39,0x35,0x31,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33, + 0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x76, + 0x37,0x36,0x2e,0x39,0x37,0x32,0x48,0x31,0x30,0x33, + 0x32,0x2e,0x30,0x33,0x33,0x7a,0x22,0x2f,0x3e,0x0d, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0d,0x0a +}; diff --git a/data/converted/window_icon_256_png.cpp b/data/converted/window_icon_256_png.cpp new file mode 100644 index 000000000..e88c4c9f7 --- /dev/null +++ b/data/converted/window_icon_256_png.cpp @@ -0,0 +1,494 @@ +//this file was auto-generated from "window_icon_256.png" by res2h + +#include "../Resources.h" + +const size_t window_icon_256_png_size = 4870; +const unsigned char window_icon_256_png_data[4870] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, + 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x00, + 0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x00,0x00,0x5c, + 0x72,0xa8,0x66,0x00,0x00,0x00,0x19,0x74,0x45,0x58, + 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00, + 0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6d,0x61,0x67, + 0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c, + 0x00,0x00,0x12,0xa8,0x49,0x44,0x41,0x54,0x78,0xda, + 0xec,0x9d,0x09,0x78,0x14,0x55,0xba,0x40,0xff,0xce, + 0x46,0x20,0x04,0xc3,0x16,0xf6,0x00,0x51,0x10,0xd9, + 0x41,0x04,0x05,0x64,0x95,0xcd,0x05,0x14,0x14,0x45, + 0x19,0xc5,0xe1,0x9b,0x0c,0x38,0xe8,0x73,0x26,0xcf, + 0x65,0x06,0x1e,0x22,0x2e,0xe3,0x8c,0xa2,0x8c,0x0f, + 0x41,0xd4,0x11,0x44,0x05,0x9e,0x28,0xca,0x22,0x82, + 0x02,0x61,0x49,0xd8,0x44,0x96,0x04,0x10,0x88,0x42, + 0x08,0x61,0x09,0x04,0xb2,0xef,0x49,0x67,0xaa,0x9a, + 0x38,0x83,0x79,0x0a,0xdd,0xd0,0x75,0xbb,0xab,0xea, + 0x1c,0xbf,0x8a,0x22,0xdf,0x97,0x9b,0x5a,0xce,0xe9, + 0xaa,0x4e,0x72,0xaf,0xa3,0xa2,0xa2,0x42,0x00,0xc0, + 0x9e,0x38,0x08,0x00,0x00,0x01,0x00,0x00,0x02,0x00, + 0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00, + 0x20,0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00, + 0x01,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08, + 0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00, + 0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00, + 0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00, + 0x20,0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00, + 0x01,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08, + 0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00, + 0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00, + 0x00,0x04,0x00,0x00,0x08,0x00,0x80,0xed,0x03,0xa0, + 0x74,0xb4,0xe1,0xb1,0x4d,0xb5,0x8f,0x77,0x68,0xdb, + 0x40,0x6d,0xeb,0xac,0x6d,0x51,0xda,0x56,0x8d,0xd3, + 0x00,0x60,0x28,0x4e,0x6d,0x4b,0xd5,0xb6,0x35,0xda, + 0x36,0x43,0x96,0xcf,0x48,0x56,0x17,0x80,0xe1,0xb1, + 0xfa,0x18,0x77,0x6a,0xdb,0x13,0x95,0xe2,0x3b,0x38, + 0x1f,0x00,0x3e,0xa3,0x5c,0xdb,0x9e,0xd6,0x22,0xf0, + 0xba,0xf1,0x01,0x18,0x1e,0x3b,0xc8,0x55,0x1c,0x91, + 0x0e,0x1c,0x77,0x00,0xbf,0x22,0x56,0x8f,0x80,0xc3, + 0x20,0xf1,0xc3,0xb5,0x8f,0x6f,0x6a,0xdb,0x38,0x8e, + 0x33,0x80,0xdf,0xde,0x09,0xb4,0x75,0x18,0x20,0x7f, + 0x13,0xed,0xe3,0x97,0xda,0xd6,0x89,0x63,0x0c,0xe0, + 0xd7,0xcc,0x75,0x78,0x59,0x7e,0xfd,0x4d,0xbe,0x0d, + 0xda,0x76,0x2d,0xc7,0x16,0xc0,0xef,0x49,0x71,0x20, + 0x3f,0x80,0x6d,0x71,0x3a,0x90,0x1f,0xc0,0xbe,0x38, + 0x90,0x1f,0x80,0x00,0x20,0x3f,0x00,0x01,0x40,0x7e, + 0x00,0x02,0x80,0xfc,0x00,0x04,0x00,0xf9,0x01,0x08, + 0x00,0xf2,0x03,0xd8,0x3e,0x00,0xc8,0x0f,0x60,0xd3, + 0x00,0x20,0x3f,0x80,0x4d,0x03,0x80,0xfc,0x00,0x36, + 0x0d,0x00,0xf2,0x03,0xd8,0x34,0x00,0xc8,0x0f,0x60, + 0xd3,0x00,0x20,0x3f,0x80,0x4d,0x03,0x80,0xfc,0x00, + 0x36,0x0d,0xc0,0xf0,0xd8,0x5a,0xda,0xc7,0x04,0x6d, + 0x6b,0xcf,0xa1,0x01,0xb0,0x3e,0x01,0x55,0xfe,0x3c, + 0x0b,0xf9,0x01,0xec,0x78,0x07,0x30,0x3c,0x76,0x88, + 0xf6,0x71,0x35,0x87,0x04,0xc0,0x6e,0x01,0x18,0x1e, + 0xab,0xdf,0x09,0x24,0x6a,0x5b,0x3b,0x0e,0x09,0x80, + 0x7d,0x08,0xfa,0xe9,0xf5,0xdf,0x6a,0xf2,0x07,0x38, + 0x1c,0xd2,0xa6,0x49,0x3d,0x69,0x17,0xd5,0x50,0xea, + 0xd7,0x0a,0x93,0x90,0xa0,0x40,0xdb,0x9e,0xe4,0xb2, + 0x72,0xa7,0x9c,0xcc,0xcc,0x91,0xf5,0x49,0x47,0x24, + 0x2b,0xbf,0xd0,0xe7,0x5f,0x4f,0xa4,0x76,0x3e,0x3a, + 0xb5,0x68,0x24,0xcd,0x23,0x23,0xa4,0x66,0xa8,0xbd, + 0xd7,0x85,0xd1,0xcf,0xc7,0xb7,0x3f,0xa4,0xc9,0xfe, + 0xe3,0x67,0x7c,0x1a,0x80,0x27,0xac,0x70,0x30,0x83, + 0x03,0x03,0x65,0x68,0xa7,0x68,0x19,0xd3,0xa7,0x8b, + 0x0c,0xe9,0xd6,0x4e,0xea,0x84,0x87,0x91,0xf8,0x8b, + 0xc8,0xd1,0x2e,0xb6,0x51,0x7f,0x9d,0x27,0x6b,0xb5, + 0x10,0xa8,0xe6,0xfa,0x46,0x75,0xe4,0x91,0x7e,0x5d, + 0xe5,0xce,0xee,0xed,0xa5,0x43,0x74,0x53,0x4e,0x46, + 0x15,0xde,0x5d,0xb5,0x59,0x62,0xe6,0x2e,0xf3,0xc1, + 0x23,0xc0,0xf0,0xd8,0x66,0xda,0xbf,0x8f,0x89,0x89, + 0x57,0xec,0xa9,0x1e,0x1c,0x24,0x13,0x07,0xdf,0x24, + 0x7f,0xbc,0xa7,0xbf,0x34,0xad,0x5f,0x87,0xab,0xe9, + 0x12,0x2c,0xd9,0xbc,0x4b,0x46,0xbf,0xb6,0x50,0xd9, + 0x78,0x7d,0xda,0x44,0xc9,0xe4,0xfb,0x06,0xca,0xe0, + 0x6e,0x3c,0x5d,0x5e,0x8e,0x3a,0x0f,0x4e,0x91,0xcc, + 0xfc,0x22,0xe5,0x77,0x00,0x77,0x9a,0x59,0xfe,0x7b, + 0x6e,0x6a,0x23,0x33,0x63,0xee,0x91,0xa8,0xc8,0xba, + 0x5c,0x41,0x6e,0x70,0x28,0x4d,0xcd,0xad,0x66,0x93, + 0x3a,0xe1,0xf2,0xd6,0xef,0x46,0xc8,0x88,0x9e,0x9d, + 0x39,0xe8,0x6e,0x70,0xfa,0x7c,0xb6,0x64,0x17,0x14, + 0xfb,0xe4,0x11,0x60,0x80,0x19,0x0f,0x98,0xfe,0x4c, + 0x3f,0xfb,0x77,0x77,0xc9,0xf8,0xa1,0xbd,0xb9,0x7a, + 0xdc,0xe4,0xe4,0xb9,0x2c,0x99,0xb9,0x72,0x8b,0xe1, + 0xe3,0xdc,0xd5,0xb5,0x95,0x2c,0x88,0xfd,0x8d,0x44, + 0xd4,0xac,0xc1,0x41,0x77,0x93,0x67,0xde,0x5f,0x2e, + 0x4e,0x1f,0xac,0xd4,0xad,0x07,0xa0,0x8b,0xd9,0x0e, + 0x56,0x8d,0x90,0x60,0x59,0xfe,0xe7,0x87,0x65,0x60, + 0xd7,0x1b,0xb8,0x72,0x3c,0x78,0xfe,0xbf,0x73,0xfa, + 0xbb,0x72,0x2e,0xaf,0xc0,0xd0,0x71,0x62,0x06,0xde, + 0x28,0x73,0x26,0x3d,0x20,0x01,0x01,0xac,0x01,0xeb, + 0x2e,0x2f,0x2f,0xfa,0x4a,0x16,0x6c,0xde,0xeb,0x93, + 0xb1,0xf5,0x00,0x34,0x33,0x9b,0xfc,0x2b,0x27,0x3f, + 0x22,0xfd,0x3b,0xb7,0xe1,0xca,0xf1,0x40,0xfe,0xc1, + 0x53,0xe7,0xc8,0xee,0x94,0x74,0x43,0xc7,0x99,0x38, + 0xa8,0x9b,0xcc,0xd6,0xe4,0x07,0xf7,0xf9,0xdb,0x27, + 0x6b,0x64,0xf2,0xe2,0x75,0x3e,0x1b,0x5f,0xff,0xfe, + 0x7f,0x08,0xf2,0x5b,0x5f,0xfe,0xed,0x3f,0x9c,0x44, + 0x7e,0x3f,0x94,0xff,0xd9,0x8f,0xbf,0xf1,0xe9,0xd7, + 0x10,0x80,0xfc,0xc8,0x8f,0xfc,0xf6,0x94,0xdf,0x34, + 0x01,0x40,0x7e,0xe4,0x47,0x7e,0x9b,0x06,0x00,0xf9, + 0x91,0x1f,0xf9,0x6d,0x1a,0x00,0xe4,0x47,0x7e,0xe4, + 0xb7,0x69,0x00,0x90,0x1f,0xf9,0x91,0xdf,0xa6,0x01, + 0x40,0x7e,0xe4,0x47,0x7e,0x9b,0x06,0x00,0xf9,0x91, + 0x1f,0xf9,0x6d,0x1a,0x00,0xe4,0x47,0x7e,0xe4,0x57, + 0x4b,0x10,0xf2,0x9b,0x97,0x8c,0xec,0x5c,0xb9,0x6d, + 0xca,0x1c,0xd9,0x9b,0x7a,0x06,0xf9,0x91,0xdf,0xbc, + 0x01,0x40,0xfe,0x2b,0x93,0x7f,0xc0,0xe4,0xd9,0x92, + 0x74,0xfc,0x2c,0xf2,0x23,0xbf,0x79,0x1f,0x01,0x90, + 0x1f,0xf9,0x91,0xdf,0xa6,0x01,0x40,0x7e,0xe4,0x47, + 0x7e,0x9b,0x06,0x00,0xf9,0x91,0x1f,0xf9,0x6d,0xfa, + 0x1e,0x40,0x48,0x60,0x00,0xf2,0x7b,0x88,0x3e,0x63, + 0xcc,0xe0,0xa9,0x6f,0x1b,0x2e,0xff,0xa3,0xfd,0x3a, + 0x23,0xbf,0x87,0x3c,0xb7,0x60,0x85,0x4c,0xff,0x6c, + 0xa3,0x29,0xbf,0x76,0xf5,0x01,0xa8,0xa8,0x90,0xb9, + 0xbf,0x1f,0x81,0xfc,0x1e,0x10,0x9f,0x74,0x58,0x1e, + 0x9c,0xb1,0x50,0x8e,0x67,0xe6,0x19,0x3a,0xce,0xad, + 0xad,0x9b,0xc8,0xdc,0xc7,0xc7,0x70,0xc0,0xdd,0x24, + 0x3b,0xbf,0x40,0x26,0xbc,0xb9,0x50,0x16,0x6f,0x3b, + 0x68,0xda,0x7d,0x08,0x52,0x2d,0xff,0xc8,0xae,0xd1, + 0x32,0x6e,0x48,0x2f,0xae,0x1e,0x37,0x38,0x97,0x93, + 0x27,0xcf,0xcd,0xfb,0x5c,0xde,0x5e,0xb7,0x5b,0xca, + 0x1d,0xc6,0x3e,0xad,0xd5,0x0c,0x74,0xba,0xa6,0xf1, + 0x0a,0xb6,0xf1,0xf4,0xe9,0x9e,0xb0,0x70,0xed,0x16, + 0x79,0x66,0xde,0x0a,0x49,0xcb,0x2b,0x35,0xf5,0x7e, + 0x04,0xa9,0x94,0xbf,0x7a,0x59,0x81,0xcc,0x7c,0x8c, + 0xdb,0xcb,0xcb,0x71,0x2c,0x3d,0x43,0xde,0xfa,0x7c, + 0xad,0xcc,0x5d,0xb1,0x41,0x72,0x1c,0xa1,0x22,0x81, + 0x06,0x9f,0xa6,0x92,0x42,0x79,0xf6,0xc1,0xc1,0xd2, + 0xa2,0x61,0x3d,0x0e,0xfe,0x25,0x28,0x2e,0x2d,0x93, + 0x25,0x71,0xdb,0xe5,0xd5,0xc5,0x5f,0x4a,0xe2,0x89, + 0xf3,0x22,0xa1,0x35,0x4d,0xbf,0x4f,0x41,0xaa,0xe4, + 0x97,0xfc,0x2c,0x99,0x38,0x72,0xa0,0x34,0x63,0xf6, + 0xde,0xff,0x47,0x59,0x79,0xb9,0xec,0x3f,0x7a,0x42, + 0xd6,0xef,0x3a,0x20,0xcb,0x13,0x76,0xc9,0xa6,0xc4, + 0x83,0xe2,0xd4,0x27,0x6a,0x0e,0xab,0xad,0x44,0xfe, + 0x7a,0xc1,0x15,0x12,0x7b,0xff,0xed,0x9c,0x88,0x5f, + 0xe0,0x44,0x46,0xa6,0x6c,0xdd,0x97,0x2c,0xab,0xb6, + 0xed,0x95,0xcf,0x37,0xef,0x94,0x2c,0x7d,0x4e,0xc5, + 0xd0,0x30,0x4b,0xc8,0xaf,0x26,0x00,0x95,0xf2,0x07, + 0x4b,0xb9,0xfc,0x71,0xf4,0x50,0xa5,0x3b,0xb7,0x7a, + 0x47,0xa2,0x7c,0xbe,0x69,0xa7,0x1c,0x4c,0x3d,0xe5, + 0xfa,0x91,0x59,0x7f,0xa3,0x42,0xfb,0x27,0x33,0x37, + 0x5f,0x4e,0x9d,0xcb,0x92,0xd2,0xb2,0xf2,0xff,0xfc, + 0x45,0x40,0x80,0x32,0xf9,0xa5,0x20,0x47,0x26,0x3d, + 0x3a,0x52,0x42,0x43,0x82,0x95,0xed,0x77,0x6a,0xfa, + 0x39,0xf9,0xf0,0xeb,0x78,0x49,0x48,0x4a,0x96,0xf4, + 0xcc,0x6c,0x71,0x3a,0x2b,0xfc,0xee,0xdc,0x14,0x14, + 0x17,0xcb,0xd9,0xac,0x5c,0xd7,0xf9,0xf9,0x19,0x16, + 0x92,0xdf,0xf8,0x00,0x54,0xca,0x2f,0x65,0x25,0x32, + 0xa4,0x67,0x17,0x65,0x8b,0x76,0xe8,0xd5,0x1e,0xf3, + 0xfc,0x5b,0xb2,0x39,0xf1,0x90,0xf9,0xce,0x88,0x62, + 0xf9,0xf5,0xd9,0x7b,0xc7,0xdf,0xd1,0x57,0xd9,0xee, + 0xbd,0xf0,0xc1,0x17,0xf2,0xd2,0x87,0xcb,0x5c,0xb7, + 0xd3,0xa6,0xc3,0x62,0xf2,0x1b,0x1b,0x00,0x97,0xfc, + 0x99,0x9a,0xfc,0x17,0xde,0x24,0x79,0xf0,0xb6,0x5b, + 0x94,0xec,0xd0,0x49,0x4d,0xfe,0x9b,0x27,0x4c,0x93, + 0xb4,0xb3,0xe7,0x91,0xff,0x32,0xf2,0xeb,0xf4,0xee, + 0x70,0xbd,0xb2,0x30,0x4f,0x98,0x31,0x4f,0xe6,0x2e, + 0x5f,0x6f,0x4e,0x53,0x2c,0x28,0xbf,0xeb,0x92,0x53, + 0x21,0xbf,0xfe,0x2a,0x33,0xf8,0xa6,0x0e,0x4a,0x76, + 0x68,0xec,0x8b,0x6f,0x23,0xbf,0x9b,0xf2,0xeb,0x0c, + 0xed,0xde,0x51,0xc9,0xee,0x2d,0x5e,0xb7,0x0d,0xf9, + 0x6d,0x11,0x80,0x2a,0xf2,0xeb,0xb4,0x6a,0xda,0x50, + 0xea,0xd6,0x32,0xfe,0x00,0x6e,0xdc,0x73,0x50,0xe2, + 0x76,0x1f,0x40,0x7e,0x37,0xe5,0xd7,0xb9,0xa5,0xfd, + 0x75,0x4a,0x76,0x71,0xda,0xfc,0xa5,0xc8,0x6f,0xf9, + 0x00,0xfc,0x82,0xfc,0x3a,0xed,0x5a,0x34,0x51,0xb2, + 0x33,0xfa,0xbb,0xb4,0xc8,0xef,0xbe,0xfc,0x3a,0x6d, + 0x9b,0x1b,0x7f,0x6e,0x0e,0xa4,0x9c,0x90,0x43,0xa9, + 0xa7,0x90,0xdf,0xd2,0x01,0xf8,0x15,0xf9,0x75,0xea, + 0x47,0xd4,0x52,0xb2,0x33,0x87,0x8f,0x9f,0x46,0x7e, + 0x0f,0xe4,0xbf,0x70,0x6e,0xc2,0x0d,0xdf,0xcd,0xe4, + 0xb4,0x74,0xe4,0xb7,0x74,0x00,0x2e,0x21,0xbf,0x4e, + 0xf5,0x6a,0x6a,0x16,0x1f,0x2a,0x2c,0x2e,0x41,0x7e, + 0x0f,0xe4,0xd7,0x71,0x38,0x8c,0x5f,0xc3,0x2f,0x2b, + 0x2f,0x1f,0xf9,0x2d,0x1b,0x80,0xcb,0xc8,0x0f,0xfe, + 0x2b,0x3f,0xd8,0x5b,0xfe,0xab,0x0f,0x00,0xf2,0x23, + 0x3f,0xf2,0xdb,0x34,0x00,0xc8,0x8f,0xfc,0xc8,0x6f, + 0xd3,0x00,0x20,0x3f,0xf2,0x23,0xbf,0x4d,0x03,0x80, + 0xfc,0xc8,0x8f,0xfc,0x36,0x0d,0x00,0xf2,0x23,0x3f, + 0xf2,0x5b,0x8a,0x20,0xe4,0x47,0x7e,0x5b,0x52,0x5d, + 0x13,0xbf,0x5a,0x18,0x97,0x28,0xf2,0x23,0x3f,0xf2, + 0x13,0x00,0xe4,0x47,0x7e,0xe4,0x27,0x00,0xc8,0x8f, + 0xfc,0xc8,0x4f,0x00,0x90,0x1f,0xf9,0x91,0xdf,0xc6, + 0x01,0x30,0xa9,0xfc,0x61,0xd5,0xab,0x21,0xbf,0x87, + 0xfc,0x6c,0x2a,0x32,0x83,0xa8,0x77,0x4d,0x38,0xf2, + 0x9b,0x26,0x00,0x26,0x7e,0xe5,0x6f,0xdf,0xb2,0x29, + 0xf2,0x7b,0x88,0x3e,0x27,0x9f,0xd1,0xdc,0xd0,0xbc, + 0x31,0xf2,0x9b,0x22,0x00,0x26,0xbf,0xed,0x1f,0xdd, + 0xbf,0x07,0xf2,0x7b,0x48,0xd2,0x91,0xe3,0x86,0x1f, + 0xa2,0xe8,0xc6,0x91,0xd2,0xed,0xfa,0x96,0xc8,0xef, + 0xd7,0x01,0xb0,0xc0,0x33,0x7f,0xd7,0xd6,0x2d,0xe4, + 0xde,0x7e,0xdd,0x91,0xdf,0x03,0xf4,0x99,0x79,0x55, + 0xf0,0x72,0xcc,0x68,0x25,0xbf,0x7a,0x8c,0xfc,0x57, + 0x12,0x80,0x7f,0xcf,0xde,0x6b,0xfe,0x37,0xfc,0xde, + 0x7b,0x7a,0xbc,0x74,0x88,0x6e,0x86,0xfc,0x6e,0xb2, + 0x6a,0xdb,0x1e,0x25,0xe7,0x65,0x50,0xb7,0xf6,0x32, + 0xfd,0xb7,0xa3,0x90,0xdf,0x2f,0x03,0x50,0x39,0x75, + 0xb7,0x15,0xb8,0x26,0xac,0x86,0xc4,0xcf,0xfa,0x1f, + 0x79,0x68,0x50,0x4f,0xe3,0x5e,0x71,0x2c,0xf4,0x6e, + 0xff,0xee,0xe4,0x63,0xf2,0xfd,0xb1,0x93,0x4a,0xce, + 0xcd,0x94,0x87,0x47,0xc8,0xfc,0x3f,0xc7,0x18,0xfb, + 0xa6,0x20,0xf2,0x7b,0x84,0x43,0x06,0x8e,0xaf,0x90, + 0xd2,0x62,0x43,0x07,0x79,0xf2,0xbe,0xa1,0xf2,0xc6, + 0xa4,0x87,0x94,0xef,0x9c,0x7e,0x61,0x2f,0xdd,0xf4, + 0xad,0x6b,0x61,0x90,0xbc,0xc2,0x22,0xef,0x7d,0xe2, + 0xe0,0x50,0x2d,0x02,0x57,0xbf,0x86,0x5e,0x59,0xb9, + 0x53,0xd2,0xb3,0xf3,0x64,0xdf,0xf1,0xb3,0x52,0x58, + 0x75,0x9e,0x7c,0x85,0xdf,0xea,0xfb,0xaf,0x7b,0x87, + 0xc8,0xcc,0xc7,0xc7,0x2a,0x3b,0x2f,0xfa,0x22,0x2d, + 0xcb,0x12,0x76,0x69,0x8f,0x1f,0x87,0xe5,0x4c,0x66, + 0x8e,0x6b,0x81,0x14,0xef,0x84,0x59,0x0b,0x72,0xb0, + 0x77,0xbe,0x13,0x54,0x50,0x52,0x2a,0x67,0x73,0xf2, + 0xe5,0xfb,0x13,0x19,0x52,0x54,0x5a,0x6e,0xe1,0x00, + 0xf4,0x19,0x6b,0xf8,0xb2,0x2c,0xbe,0x0a,0x80,0x59, + 0xc8,0x2f,0x2a,0x96,0xc5,0x1b,0xbe,0x95,0xa9,0x8b, + 0xd7,0xca,0x49,0x7d,0x05,0xe0,0xe2,0x02,0x91,0xc2, + 0x5c,0x65,0xe3,0xd7,0xac,0x1e,0x2a,0x29,0x9f,0xbc, + 0xa1,0x64,0xe6,0x66,0xb3,0x51,0xee,0x74,0x6a,0x77, + 0x49,0xa9,0xf2,0xd5,0xce,0xfd,0xb2,0x28,0x21,0x51, + 0x0b,0xc2,0x39,0x4b,0xed,0x5f,0xa0,0x34,0xef,0x38, + 0xcd,0xe8,0x41,0x6e,0x6e,0x77,0x9d,0xb2,0xf9,0xe7, + 0xcd,0x48,0x48,0x50,0x90,0x74,0xbd,0x2e,0x4a,0x1e, + 0xee,0x77,0xa3,0x24,0xec,0x3d,0x20,0xc7,0x8f,0xa7, + 0x29,0x1d,0xbf,0xa4,0xac,0x4c,0x8a,0xb4,0x57,0xbc, + 0x61,0x3d,0x3a,0x71,0x32,0xaa,0xde,0x54,0x68,0x8f, + 0x91,0x8d,0xeb,0x45,0x48,0xdf,0x8e,0xad,0xe5,0x0f, + 0x77,0xdc,0x2a,0x83,0x3a,0xb4,0x94,0x8c,0xec,0x5c, + 0x39,0x7c,0xfa,0xbc,0x35,0xf6,0x8f,0x53,0xec,0x3f, + 0xe8,0x33,0xf4,0xae,0x98,0xfe,0x98,0xb4,0x6c,0xa4, + 0x7e,0x95,0xde,0x39,0xcb,0xd6,0xb9,0xde,0x0f,0x80, + 0x4b,0xd3,0xab,0x7d,0x2b,0x59,0x36,0x35,0x46,0xe2, + 0x5f,0xfa,0xbd,0x74,0x6d,0xd1,0x80,0x00,0x80,0x77, + 0xa9,0x53,0x2b,0x5c,0x5e,0x9d,0x70,0xbf,0xf2,0x71, + 0xf5,0x9f,0x08,0x1c,0xfb,0xe2,0x1c,0xc9,0x2d,0x28, + 0xe2,0x24,0xb8,0x41,0x4f,0xed,0xae,0x76,0xfb,0xeb, + 0x7f,0x92,0x67,0xef,0xee,0xad,0xf6,0xdb,0x9b,0x04, + 0xc0,0xfa,0x8c,0xec,0xdb,0x43,0x22,0x6b,0xd7,0x52, + 0x3e,0xae,0xbe,0x80,0xc7,0x7d,0xcf,0xbd,0xa9,0xe4, + 0xc7,0x83,0xad,0x40,0x50,0x60,0xa0,0xfc,0xf5,0xd1, + 0xbb,0xe5,0xfd,0xc7,0xee,0x91,0xc0,0x80,0x00,0x02, + 0x00,0xde,0x41,0x7f,0x45,0xe9,0xdd,0xa1,0xb5,0x4f, + 0xc6,0x5e,0xb3,0x23,0x49,0xee,0x9d,0x4a,0x04,0x3c, + 0x61,0xdc,0xe0,0x9e,0xb2,0xe0,0xf1,0x51,0xa6,0x8c, + 0x00,0x01,0xf0,0x53,0x1a,0xd5,0x8d,0xf0,0xd9,0xd8, + 0xcb,0x13,0x76,0x11,0x01,0x0f,0x79,0x70,0x40,0x0f, + 0x53,0x46,0x80,0x00,0xf8,0x29,0xc1,0x41,0x41,0x3e, + 0x1d,0x9f,0x08,0xd8,0x23,0x02,0x04,0x00,0x88,0x80, + 0x8d,0x23,0x40,0x00,0x80,0x08,0xd8,0x38,0x02,0x04, + 0x00,0x88,0x80,0x8d,0x23,0x40,0x00,0x80,0x08,0xd8, + 0x38,0x02,0x04,0x00,0x88,0x80,0x8d,0x23,0x40,0x00, + 0x80,0x08,0xd8,0x38,0x02,0x04,0x00,0x88,0x80,0x8d, + 0x23,0x40,0x00,0x80,0x08,0xd8,0x38,0x02,0x04,0x00, + 0x88,0x80,0x8d,0x23,0x40,0x00,0x80,0x08,0xd8,0x38, + 0x02,0x04,0xc0,0x4f,0x29,0x2d,0x2b,0x23,0x02,0x44, + 0x80,0x00,0xd8,0x95,0xd3,0xe7,0xb3,0x4d,0xf5,0xf5, + 0x12,0x01,0x73,0x46,0x80,0x00,0xf8,0x21,0x15,0x15, + 0x15,0x12,0x9f,0x78,0xd8,0x94,0x8f,0x03,0x77,0x4f, + 0x7e,0x43,0x0a,0x8a,0x4a,0x38,0x89,0x1e,0x44,0x60, + 0xfe,0xa4,0x91,0x3e,0x9b,0x54,0x84,0x00,0xf8,0x21, + 0x5f,0xc4,0x7f,0xa7,0x64,0xc9,0x2e,0x23,0x58,0xb5, + 0x6d,0xaf,0xf4,0x79,0xe2,0x45,0x39,0x72,0xf2,0x0c, + 0x27,0xd2,0x4d,0xc6,0x0e,0xbc,0x59,0xa6,0x8f,0xee, + 0x4f,0x00,0x40,0x24,0x2b,0x2f,0x5f,0x9e,0x9a,0xbd, + 0xc8,0xd4,0xfb,0xf0,0xdd,0xa1,0xa3,0xd2,0xe9,0xb7, + 0x93,0xe5,0x1f,0x9f,0xae,0xe1,0x91,0xc0,0x4d,0xfe, + 0xf2,0xc0,0x30,0xe9,0xd3,0x26,0x8a,0x00,0xd8,0x99, + 0xf3,0x39,0xb9,0x72,0xd7,0xb3,0xaf,0xcb,0x8f,0x16, + 0x78,0xf5,0xd4,0xd7,0x61,0x78,0xf2,0x7f,0x3f,0x92, + 0xb6,0x0f,0x3f,0x23,0xef,0xac,0x88,0x93,0xc2,0x62, + 0x1e,0x0b,0x2e,0x29,0x62,0x80,0x43,0xde,0x9a,0x30, + 0x4a,0x82,0x02,0xd5,0x2a,0xc9,0xb4,0xe0,0x7e,0x40, + 0x51,0x49,0x89,0x7c,0xfc,0xd5,0x06,0x19,0x3d,0xf5, + 0x4d,0xd9,0x77,0xec,0x94,0xb5,0xa2,0x96,0x9b,0x2f, + 0x2b,0xb7,0xec,0x96,0x59,0x4b,0xd7,0x6a,0x8f,0x05, + 0x67,0xf5,0x95,0x28,0xa4,0x49,0xbd,0xda,0x12,0x12, + 0x1c,0xc4,0x89,0xaf,0x82,0x3e,0x0f,0x64,0xca,0xc9, + 0x74,0xd9,0x93,0x72,0x5a,0xd9,0x98,0x96,0x3e,0x0b, + 0xc9,0x69,0xa7,0x65,0xe9,0xa6,0x9d,0x72,0xf8,0xf8, + 0x69,0xed,0x42,0xcc,0xf3,0xce,0x27,0xd5,0x97,0x50, + 0x2b,0xf5,0xce,0xab,0x99,0xbe,0x22,0xce,0x99,0xf3, + 0x59,0x92,0x98,0x9c,0x22,0xf9,0x15,0xda,0xa9,0x08, + 0x0a,0xb1,0xec,0xb9,0xc8,0xce,0x2f,0x90,0x77,0x57, + 0xc6,0xb9,0x36,0xfd,0xd5,0x2e,0xba,0x51,0xa4,0x34, + 0x6f,0x58,0x4f,0xc2,0x6b,0x84,0x9a,0x6a,0x3f,0xf4, + 0x25,0xe8,0x5f,0x18,0x7f,0xaf,0x61,0x9f,0xff,0xe9, + 0x51,0x03,0x65,0xfe,0xc6,0xbd,0xae,0x37,0x82,0x09, + 0xc0,0x55,0xdc,0x7e,0x4e,0x9a,0xb9,0x40,0x3e,0xfc, + 0x3a,0x5e,0x9c,0x4e,0x2f,0x1e,0xc8,0xd2,0x42,0x91, + 0xe2,0x42,0xef,0x7f,0xc1,0xa1,0x35,0x2d,0x2d,0x7f, + 0x55,0xf4,0x73,0xf2,0xc3,0x89,0x74,0xd7,0x66,0x36, + 0xb2,0x72,0x0b,0x0c,0xfd,0xfc,0x6d,0xa2,0x1a,0x49, + 0x9f,0x36,0xcd,0x64,0xe3,0xf7,0xa9,0xbc,0x07,0x70, + 0x25,0xe8,0xeb,0xce,0xf5,0x9e,0xf4,0x82,0x7c,0xb0, + 0x7a,0x33,0xf2,0x83,0x29,0x79,0xa8,0x4f,0x17,0x75, + 0xef,0x3d,0x58,0xed,0xe0,0xc5,0xbc,0xf6,0xbe,0xec, + 0xfd,0xc1,0xcb,0xf5,0x44,0x7e,0x50,0xc8,0xb0,0x9b, + 0xda,0x11,0x80,0x2b,0x61,0xd7,0xe1,0x14,0xf9,0x24, + 0x6e,0x3b,0xf2,0x83,0xa9,0x69,0x5a,0xbf,0x8e,0xb4, + 0xa8,0x5f,0x9b,0x00,0x78,0xca,0x92,0x0d,0x3b,0xbc, + 0xfb,0xe6,0x09,0xf2,0x83,0x8f,0x68,0x1f,0xd5,0x80, + 0x00,0x78,0xca,0xbe,0xa3,0x69,0xc8,0x0f,0x96,0xa0, + 0x61,0xed,0x9a,0x04,0xc0,0x53,0xf2,0xbc,0xb5,0xb0, + 0x25,0xf2,0x83,0x8f,0xa9,0x19,0x5a,0x8d,0x00,0xf8, + 0x04,0xe4,0x07,0x1b,0x41,0x00,0x90,0x1f,0x08,0x00, + 0x20,0x3f,0x10,0x00,0xe4,0x47,0x7e,0x20,0x00,0xc8, + 0x8f,0xfc,0x40,0x00,0x90,0x1f,0xf9,0x81,0x00,0x20, + 0x3f,0xf2,0x03,0x01,0x40,0x7e,0xe4,0x07,0x02,0x80, + 0xfc,0xc8,0x0f,0x04,0x00,0xf9,0x91,0x1f,0x08,0x00, + 0xf2,0x23,0x3f,0x10,0x80,0xcb,0xa0,0x6a,0x42,0xc8, + 0xd0,0x90,0x60,0xe4,0x07,0xdf,0x5c,0x63,0x5e,0xa6, + 0xa0,0xb8,0xd4,0x3a,0x01,0xc8,0xc8,0xce,0x55,0xb2, + 0x33,0xad,0x9a,0x36,0x44,0x7e,0x30,0x94,0xd6,0xcd, + 0x1a,0x2a,0x19,0x27,0x23,0x37,0xdf,0x3a,0x01,0xf0, + 0xea,0xaf,0xe9,0x5e,0x82,0x7b,0xfa,0xdc,0x88,0xfc, + 0x60,0x28,0x77,0xdf,0x7a,0xa3,0x92,0x71,0xf6,0xa7, + 0x9e,0xb1,0x4e,0x00,0xf4,0xd9,0x79,0xcf,0xe7,0xe4, + 0x19,0x3e,0x4e,0xff,0x2e,0x6d,0xa5,0x6f,0xe7,0x36, + 0xc8,0x0f,0x86,0xa0,0x5f,0x5b,0xfa,0x35,0x66,0x34, + 0xe7,0x34,0x57,0x92,0x4f,0x65,0x58,0x27,0x00,0xfa, + 0xe4,0x9c,0x6b,0xbe,0x4d,0x52,0xb2,0x43,0x1f,0x4e, + 0x9e,0x20,0x8d,0xaf,0xa9,0x8e,0xfc,0xe0,0x55,0x1a, + 0xd7,0xab,0x2d,0x1f,0x4d,0x99,0xa8,0x64,0xac,0xaf, + 0xbf,0x3b,0x20,0x4e,0x45,0xd3,0x82,0x2b,0xfb,0x2e, + 0xc0,0xe2,0x75,0xdb,0x94,0x8c,0xd3,0x2c,0xb2,0xae, + 0x6c,0x7d,0xe7,0x25,0xe9,0xd9,0xe9,0x06,0xe4,0x07, + 0xaf,0xd0,0xab,0x43,0x6b,0xd9,0x3a,0xfb,0x39,0xd7, + 0x5c,0x7d,0x2a,0x58,0xb4,0x69,0xb7,0xb2,0x7d,0x73, + 0x48,0x9f,0xb1,0x4a,0x52,0x13,0x1c,0x14,0x28,0x29, + 0xff,0xf7,0x86,0xab,0xa4,0xaa,0xf8,0x2a,0x61,0xa7, + 0x7c,0xb6,0x3e,0x41,0x0e,0x1c,0x49,0xbd,0xba,0xef, + 0x44,0x04,0x55,0xd3,0x36,0x6f,0x2c,0xa1,0xa0,0xf5, + 0xd6,0xb5,0x0a,0xec,0x85,0x95,0x60,0x9d,0x15,0x4e, + 0xc9,0xcc,0x2d,0x90,0xd3,0xe7,0xb3,0xfc,0x6a,0x0d, + 0xbd,0xb0,0xd0,0x6a,0xae,0xf3,0x14,0xa6,0x68,0x56, + 0x1a,0x7f,0xa4,0x7a,0xb5,0x60,0x69,0xdb,0xa2,0x89, + 0xdc,0xdb,0xaf,0xbb,0xd2,0x55,0xad,0x4e,0x64,0x64, + 0x4a,0xcb,0x98,0x57,0xa4,0xb4,0xbc,0xdc,0x5a,0x01, + 0xd0,0x79,0x6a,0xcc,0x1d,0xf2,0xf7,0x09,0x0f,0xf0, + 0x92,0x52,0x05,0x5d,0xfe,0xa4,0x23,0xc7,0x25,0x6e, + 0xf7,0x01,0x59,0x9e,0xb0,0x5b,0x36,0x27,0x1e,0x52, + 0xb6,0x32,0x4c,0xd5,0xbb,0xa7,0x77,0x9f,0x1a,0x2f, + 0x83,0xba,0xb5,0x77,0xad,0xde,0x03,0xea,0x79,0xea, + 0xbd,0xa5,0xf2,0xda,0x8a,0x2d,0xd6,0xbb,0x03,0xb8, + 0x50,0xd5,0x10,0x49,0x5e,0xf8,0x9a,0x6b,0x6d,0x38, + 0xf8,0x75,0x52,0x4e,0x67,0xc8,0xac,0xa5,0xdf,0xc8, + 0xdc,0xe5,0xeb,0x5d,0xab,0x1c,0xa9,0x62,0xde,0xb3, + 0x31,0x32,0x6e,0xd8,0xad,0x9c,0x00,0x1f,0xa1,0xbf, + 0xfa,0xb7,0x9a,0xf0,0x37,0x29,0x2c,0x2d,0x53,0x36, + 0xa6,0xd2,0x9f,0x04,0xd4,0x6f,0xc3,0xf5,0x15,0x63, + 0xe1,0xd2,0xb4,0x68,0x58,0x4f,0x5e,0x7b,0x6c,0x8c, + 0x1c,0x59,0xfc,0xba,0x4c,0x1c,0x31,0x50,0xd9,0xab, + 0x71,0x49,0x59,0x19,0x07,0xdf,0x87,0x3c,0xf9,0xce, + 0x52,0xa5,0xf2,0x2b,0x0f,0x80,0xce,0xa7,0x1b,0x76, + 0xc8,0x82,0x35,0xf1,0x9c,0x6d,0x37,0xa8,0x1f,0x11, + 0x2e,0xb3,0xff,0x34,0x4e,0xe2,0x66,0xfe,0x45,0xc9, + 0x1b,0x50,0xfa,0x5d,0x87,0x3f,0xbd,0x17,0x61,0x27, + 0x16,0x7c,0xb3,0x55,0x3e,0xdd,0xfe,0xbd,0xf2,0x71, + 0x7d,0xf2,0xbb,0x00,0x31,0xaf,0xfe,0x53,0xe2,0x93, + 0x0e,0x73,0xd6,0xdd,0xa4,0x4f,0xa7,0x36,0xb2,0xfd, + 0xed,0x69,0xd2,0x21,0xba,0x99,0xa1,0xe3,0xe8,0xef, + 0x43,0x4c,0x98,0x31,0x8f,0x03,0xae,0x98,0xf8,0x7d, + 0xc9,0x12,0x33,0x77,0x99,0x4f,0xc6,0x0e,0x94,0xe6, + 0x1d,0xa7,0xa9,0x1e,0xb4,0xdc,0xe9,0x94,0xa5,0x1b, + 0x77,0xca,0x80,0xae,0x6d,0xa5,0x89,0xa2,0x6f,0xad, + 0x98,0x9d,0xf0,0x1a,0xd5,0xe5,0xbe,0xfe,0xdd,0x65, + 0xf5,0xf6,0x44,0x39,0x93,0x99,0x63,0xd8,0x38,0xbb, + 0x93,0x8f,0xb9,0x3e,0xff,0x1d,0xb7,0x74,0xe6,0xa0, + 0x2b,0x60,0xc7,0xc1,0xa3,0x32,0x6c,0xfa,0xfb,0x92, + 0xaf,0xe8,0x67,0xff,0xfd,0x22,0x00,0x3a,0xc5,0xa5, + 0xa5,0xb2,0x24,0x6e,0x07,0x11,0xf0,0x80,0x1a,0xa1, + 0xd5,0x94,0x44,0x60,0xe7,0xa1,0xa3,0x44,0x40,0x91, + 0xfc,0x83,0xa7,0xbd,0x27,0xd9,0x85,0xc5,0x3e,0xfb, + 0x1a,0x7c,0x16,0x00,0x22,0x40,0x04,0x90,0xdf,0xb7, + 0xf2,0xfb,0x3c,0x00,0x44,0x80,0x08,0x20,0xbf,0xd8, + 0x3b,0x00,0x44,0x80,0x08,0x20,0xbf,0xcd,0x03,0x40, + 0x04,0x88,0x80,0x1d,0xd8,0x7a,0xe0,0x47,0x19,0xfa, + 0xfc,0x3f,0xfd,0x46,0x7e,0xbf,0x0a,0x00,0x11,0x20, + 0x02,0x56,0x26,0x6e,0xcf,0x41,0x19,0x3a,0x7d,0x9e, + 0xe4,0x29,0x9a,0x1d,0xcb,0x94,0x01,0xb8,0x38,0x02, + 0x3d,0xda,0xb4,0x94,0x96,0x8d,0x23,0xb9,0x72,0x88, + 0x80,0x25,0xe4,0xbf,0xf3,0xa5,0x0f,0xa4,0xa0,0xa4, + 0xd4,0xef,0xbe,0x36,0xbf,0x0b,0x80,0x2b,0x02,0xf9, + 0xd9,0xb2,0x64,0x75,0x9c,0xeb,0x57,0x7a,0x5b,0x36, + 0x6e,0xc0,0x15,0x44,0x04,0x90,0xdf,0x36,0x01,0x28, + 0x29,0xd0,0xb6,0x22,0xd7,0x8f,0xa4,0x2e,0x59,0x1b, + 0x4f,0x04,0x88,0x00,0xf2,0xdb,0x26,0x00,0x95,0xf2, + 0xff,0x04,0x11,0x20,0x02,0xc8,0x6f,0x97,0x00,0x54, + 0x91,0x9f,0x08,0x10,0x01,0xe4,0xb7,0x4b,0x00,0x7e, + 0x45,0x7e,0x22,0x40,0x04,0x90,0xdf,0xea,0x01,0xb8, + 0x8c,0xfc,0x44,0x80,0x08,0x20,0xbf,0x55,0x03,0xe0, + 0xa6,0xfc,0x44,0x80,0x08,0x20,0xbf,0x21,0x14,0xfb, + 0x2e,0x00,0x1e,0xca,0x4f,0x04,0xcc,0x11,0x81,0xf4, + 0xcc,0x6c,0xb9,0xbd,0x47,0x67,0x71,0x38,0x1c,0xc8, + 0xef,0xff,0x1c,0xf5,0x4d,0x00,0xae,0x50,0xfe,0x8b, + 0x23,0xb0,0x68,0xcd,0x46,0x89,0x6a,0x18,0x29,0x9d, + 0x5b,0x47,0x63,0xb8,0x9b,0x11,0xb8,0xab,0x57,0x17, + 0x99,0xff,0xd5,0x66,0x29,0x32,0xf0,0x42,0xd5,0x23, + 0x90,0x78,0x24,0x55,0x86,0xf5,0xe8,0xa8,0x6c,0x1d, + 0x3d,0x5f,0xf2,0xc1,0xd7,0x5b,0xe4,0xfe,0x19,0x8b, + 0xa4,0xc8,0x9c,0x33,0x29,0xc5,0xa9,0x0f,0xc0,0x55, + 0xca,0xff,0x13,0xfa,0xa4,0x22,0x5f,0x6c,0xd8,0xea, + 0x9a,0xf2,0xbb,0x67,0xa7,0xb6,0x52,0x2b,0xac,0x06, + 0x96,0x5f,0x86,0x5a,0x61,0xd5,0x5d,0xf2,0x6f,0xd8, + 0x63,0xec,0xd4,0x53,0x07,0x53,0x4f,0xc9,0xc2,0xb5, + 0x5b,0xa5,0x55,0x93,0x06,0xd2,0xba,0x59,0x23,0x4b, + 0x1e,0x4b,0x7d,0x02,0xcf,0xf1,0xaf,0xce,0x97,0x97, + 0x97,0x25,0x48,0x79,0x85,0x69,0x77,0x63,0x96,0xda, + 0x00,0x78,0x49,0xfe,0x8b,0xd1,0x03,0xf0,0xf6,0x67, + 0xab,0x24,0x27,0xbf,0x40,0xda,0x5f,0xdb,0xdc,0x35, + 0x73,0x0e,0xfc,0x3a,0x67,0xb3,0x72,0x65,0xc9,0x86, + 0x1d,0x86,0x8f,0x93,0x9d,0x5f,0x28,0x8b,0xd6,0x6d, + 0x75,0x4d,0xfd,0xa6,0xcf,0x02,0x1d,0x6d,0x91,0x1f, + 0xeb,0x3e,0x75,0x2e,0x4b,0x5e,0x5c,0xf0,0x85,0xfc, + 0xe6,0x95,0xf7,0x65,0x6f,0x7a,0x6e,0xe5,0x3a,0x0f, + 0xa6,0x44,0xcf,0xd6,0x63,0xea,0xa6,0x05,0x37,0x40, + 0xfe,0xaa,0x84,0x04,0x07,0xc9,0xed,0xbd,0x6e,0x92, + 0x87,0x86,0xf5,0x93,0xdb,0x7a,0x74,0x91,0x88,0xf0, + 0x30,0x8c,0xbf,0x88,0xdc,0x82,0x42,0x19,0x35,0xe5, + 0x1f,0xf2,0xcd,0x77,0xfb,0x95,0x8f,0xad,0x2f,0xb2, + 0xf1,0xf0,0x90,0xde,0x32,0xbc,0x57,0x57,0xb9,0xa1, + 0x79,0x63,0x53,0x1d,0xb7,0xac,0xbc,0x02,0x59,0xbb, + 0x73,0x9f,0x7c,0xbc,0x76,0x8b,0xac,0xda,0xb6,0x57, + 0x4a,0x2a,0x02,0x44,0xc2,0x22,0xcc,0x2c,0xbf,0xeb, + 0xf6,0x5f,0x96,0xcf,0x18,0xa0,0x26,0x00,0x0a,0xe4, + 0xaf,0x4a,0x60,0x40,0x80,0xb4,0x8d,0x8e,0x92,0x76, + 0xd7,0x46,0x49,0x64,0xed,0x08,0x5b,0x2f,0x74,0xa1, + 0xaf,0x31,0x92,0x76,0x26,0x43,0x36,0xec,0x3b,0x22, + 0xe7,0xf2,0x7d,0xff,0xab,0xa8,0x8d,0xea,0x46,0x48, + 0xe7,0xeb,0x9a,0x4b,0x54,0x83,0xba,0xae,0xb5,0x22, + 0xfc,0x11,0xa7,0xf6,0x88,0x79,0x26,0x2b,0x47,0xf6, + 0x1f,0x3d,0x21,0x07,0x52,0x4e,0xb8,0x1e,0x39,0x5d, + 0xe8,0xcb,0xc3,0x99,0x5f,0x7e,0x9d,0x51,0x5a,0x00, + 0x96,0x1a,0x1f,0x00,0x1f,0xc8,0x0f,0xbf,0x00,0x6b, + 0x1b,0x5e,0x3d,0xd6,0x91,0x5f,0xbf,0x05,0xec,0xa8, + 0x05,0xc0,0x19,0x80,0xfc,0xc8,0x0f,0xb6,0x92,0x5f, + 0xe7,0xbf,0x75,0xf9,0xf5,0xff,0x08,0x40,0x7e,0xe4, + 0x07,0x5b,0xc9,0xff,0x91,0x26,0xff,0xea,0x9f,0xfe, + 0x10,0x80,0xfc,0xc8,0x0f,0xb6,0x91,0x7f,0x9f,0xb6, + 0xfd,0xe1,0xe2,0xff,0x11,0x80,0xfc,0xc8,0x0f,0xb6, + 0x90,0xff,0x47,0x6d,0x1b,0xa6,0xbd,0xfa,0xe7,0x18, + 0x17,0x00,0xe4,0x47,0x7e,0xe4,0xf7,0x57,0xf9,0xfb, + 0x69,0xf2,0xa7,0x55,0xfd,0x8b,0x00,0xe4,0x47,0x7e, + 0xb0,0xa7,0xfc,0xde,0x0b,0x00,0xf2,0x23,0x3f,0xf2, + 0x9b,0x4e,0x7e,0xef,0x04,0x00,0xf9,0x91,0x1f,0xf9, + 0x4d,0x29,0xff,0xd5,0x07,0x00,0xf9,0x91,0x1f,0xf9, + 0x4d,0x2b,0xff,0xd5,0x05,0x00,0xf9,0x91,0x1f,0xf9, + 0x4d,0x2d,0xff,0x95,0x07,0x00,0xf9,0x91,0x1f,0xf9, + 0x4d,0x2f,0xff,0x95,0x05,0x00,0xf9,0x91,0x1f,0xf9, + 0x2d,0x21,0xbf,0xe7,0x01,0x40,0x7e,0xe4,0x47,0x7e, + 0xcb,0xc8,0xef,0x59,0x00,0x90,0x1f,0xf9,0x91,0xdf, + 0x52,0xf2,0xbb,0x1f,0x00,0xe4,0x47,0x7e,0xe4,0xb7, + 0x9c,0xfc,0xee,0x05,0x00,0xf9,0x91,0x1f,0xf9,0x2d, + 0x29,0xff,0xe5,0x03,0x80,0xfc,0xc8,0x8f,0xfc,0x96, + 0x95,0xff,0x42,0x00,0x1c,0xe2,0x44,0x7e,0xe4,0x47, + 0x7e,0xfb,0xc9,0x5f,0x79,0x07,0xe0,0x48,0x47,0x7e, + 0xe4,0x47,0x7e,0xfb,0xc9,0x5f,0x79,0x07,0xe0,0x58, + 0x8f,0xfc,0xc8,0x8f,0xfc,0x7e,0xcf,0x5e,0x6d,0xeb, + 0xeb,0x4d,0xf9,0x2b,0x03,0x10,0xf8,0xca,0xbf,0x1f, + 0x03,0x90,0x1f,0xf9,0x91,0xdf,0x1f,0x99,0xaf,0x6d, + 0xb7,0x6a,0xf2,0x9f,0xf0,0xf6,0x27,0xbe,0x70,0x74, + 0xfa,0x3d,0x32,0x55,0x8a,0x72,0x9f,0x47,0x7e,0xe4, + 0x47,0x7e,0xbf,0x22,0x49,0xdb,0x62,0x35,0xf1,0xbf, + 0x31,0x6a,0x80,0xff,0x1c,0xa1,0xee,0x23,0xfe,0x2e, + 0xe5,0xa5,0xb1,0x52,0x21,0x01,0x5c,0x41,0xc8,0x8f, + 0xfc,0x3e,0x43,0x9f,0xa6,0x7f,0x9d,0xb6,0xbd,0xa9, + 0x6d,0x2b,0x35,0xf9,0x0d,0x9d,0xb6,0xff,0xe7,0x47, + 0xa9,0xc7,0xc8,0x1b,0xc5,0x59,0x36,0x45,0xdb,0x7a, + 0x69,0x5f,0x46,0x5d,0x11,0x62,0x80,0xfc,0xc8,0x6f, + 0x30,0xfa,0x4a,0x2d,0xa9,0xda,0xb6,0xa7,0x52,0xfc, + 0x2f,0xbd,0xfd,0x9c,0x7f,0xc9,0x00,0x54,0x54,0x54, + 0x70,0xe1,0x00,0xd8,0x14,0x02,0x00,0x40,0x00,0x00, + 0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00, + 0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x20, + 0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01, + 0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08,0x00, + 0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00,0x00, + 0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00, + 0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x20, + 0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01, + 0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08,0x00, + 0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00,0x00, + 0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x40, + 0x00,0x08,0x00,0x80,0x7d,0xf9,0x97,0x00,0x03,0x00, + 0x21,0xc5,0x64,0xe3,0xe4,0x8c,0x4c,0xec,0x00,0x00, + 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; diff --git a/data/es_icon.ico b/data/es_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..aec6b6aa7e97c6abe513456e17330772adb1ad09 GIT binary patch literal 279029 zcmeHQ2VB%h7hgoh^Ug!>)U%^^XFc0l&x&2KV)qmT8%3m801E=26$>_+iUKN%px6~G z2r7yd6-DeK*bo7+q9XI<0pYSC*-dt{Y<8LXF-$U<%)Ix1|IAJ%QzQ}{$qy26I+FU5 zC%;G}zQpm7BL(LJek>z#{8b`xcP}_^Qb9)&Rj-VsM~}kuUJ}XkM!J&Ltqaa~H$#(rZo81}+{nwb^3)$H z{8`px(Hs9J6)*mND7IX+Y8{V^uh(?khv~;hPl&vHe&?s@-syeIW|Zqwu35!jnl37% z)8LRt^B)#iRrsIee?9J83fS~b=T+b74RqUDzPS1Ybx(ZPb<5RGU!pe|ovl*<6CnU! zx93pJ`A44qn)2tP2G;9>?KY$|Tspg^Byg6|W#1#cMr_#N)n;{V_ou(k*pTV{;my6b zwkG;9_S6523VIgo{AbhHxNLpjBjXZgZ}`Q-;BA+a!P`#kb3XXV_OAK+;W;-qJofrf z_GRq~cP-1*?d4M0ZEvv8hGjF?{LkIBQRV6>&vR1$4EMPm@czfLr)v27rJDVbRxAE5 z^NKBNXY1aX_J^yxPW@s&=ACYjT=%|u?m0TEewJkGRN;@z$-~* zL-U(DHM(yL2p(m$^`G`V-X1o4`{WjJDWxr;#j=6pZbaK&5UZYv{SF<3)b(kG3mV7EI2W3Q!@wOFW*zGN3@eAD7|`yWYv`$P24F^A7MwCUZuSG&D7i|S=2nf6}bH0s=|CXMpC z_Kk1z=yS-u@tXpya}Msexnmq%>qc+q$9Ijk{+be5x2#GT?HsR0t+Y?@xE?hAu5;|hkj)1x?f95C(m6fz@uPpzjymMd z*;aATU%BsoNgmTS;6UsC9=i-3{rc&rU$Gq4qHed*L7{`(-hP>x`TAzR*^RsI`s$eO zkYJN`{@+Wpjz4m(>7HrPWcP&74I={USzZlF|9B>6 z`P7KnwJ+YEKP9i@=96~I&DLbByM1;>cB`#9e^q*OXU+9G`Y8tQ-s#=<^+~^#y1Mqm zk+#^EUoE zanREE5uOX}1FFw>XmdXs#i@o=E)$+GD3s0;x z(>ilWT-E7MBZhsBJ>_Hg>ij*k^Z`abp$5y(UCjAo&!F}ntpg@byu9sU*Qn^ZJ1tzJ z`t?0lfp{YQLJtjY)vZmR@XZ$--nH7kJ#74sBRiypmvb9AKHj?N_I+svUgvh_Ja2v@ zvdZGyi=4B*H%@Hd{=Q@D{(B-a$IN;?W?|s5u`TZf?=HVA*5KFIcb4eczwDK}Xv--V z+q;{#O{?u}m3^W`vnEY_e&4?6ch@Q9lV{{^3%mLLkL5MLCi~hCy_J#`VP*g6?`q{@ z>dwqdyL~Y{cXG&@t<8)_J6=QRe~;|Owms>gIj%Qf( zu6N_+DVIm>oDQwo(sf9#pNH9ouTH1q4@|1(-)=%%ud)7zz3ZEyvx4fO5Lgn7o=uh5CC?`kyt*Q8ONufOD#-S_D9*rpGh zesyb+>KE+a#nk3v?=4*|t7Pkam*n=!-EjNh=)Dc}EePadvw9Mz+jeH{zm~bTPR5n) z{c?MDlc3*;yiB44h&1SFDx|U8H{{551B(mmO;Yq<>qHL7-B7ir-PLQ$FE?wp;>qHi zhLvb1YiC&)2R{vXW)rRftw+AF0ZItI;&%OTKYfpCA{`JT( zxnIiX9@FP9YY_6<^Y1?@eF=$+b?c=2cCB+(d(<&E@7-A|$Dvj|bB`XGk?PcY-<9Nm zt?iyCeXioxxj36HBKCbH@ zzDw}z`R3=Qx4Rhr&@6m!!lmCsK0SLDdMd1uhhET=CV@|U&ztF*SC4;JvBkLeJ0?y% zFrxqaK|i5RZjUZjn6@x)UxTcNGdi?y>33|})O7zAC)*jeAF^Q9&~k~XKMudr(re+u zb^e_v+T8ti-GBJTbKB}AT}aQ?N&3q%&aQ5Em%BGo$Br4h=hUHrE22)!`n#peh)IV- z=M7%?F)LwAbX02fN|_JG&s%!_zFY1bhpydQ&P=v4F&u9;Y~J{A|C(-okM(``CJ<ss5yq0ZD}_0#m!$$E{?C&{#BzPH9M`-aUW%zayu*J zddH7ba;%^9bo~CY&k)ndEq-N>eu!KCOX7ahuDa&aLRPJGOd6E+Dy!$)#KXaRO|B37 zHn?s*x8Vk^TelyoII+4(yFMp}WUY-Fwx;qFuV=PrbbHL3wzK;;3(tP1a|4{}b*^r* zW6Yb|2?ock?{D|H+;#qlLq-Sxu2i-9>*TX$K}L(`U+%nlPsYD-mAY6Mn=M`aN8Hg@ z-&)*v%ZVKNo8R1*t-|+thn;$#c(p~u&@C;E$M^HyVz>NRg&*(R41d);vHzfvA8sa8 zy_eCUVLO}czC)%|HEn!$)Y=^*)BlO;{M9w^`}bB4I}VtACv)9{3=7G=XK62ULT7)x z6p{XX*1YUKV|oKQ+(zC;9ouKV54y$zHbR zr&EdWsmrD(M(XG$hc310u;8UFEU zV@=60pSkH5e2Hs&YFCMu3GLcH`)A(y z_~e?B{dsL4t%{6z@-bFF@We~s^h%xL_r3Y`Oj}9K{%g|b3}115ZQBD2^gd?YS(Eeh z*Y78f-ipbr>*Bg)WZ#CD|MC5;t8VhF<405C<`6$fAzl|kzl>fVtG|DGy<0s3ht{&Z zc<}Uh>j;zbQ7s}T8I~J&VET>*aVu;d8rSabVj6YwSYy|@eFNidk52mf*Gij*H`b+I zL$3al)?VA?y5px!n~nQ>9LoE;Z*yF`)^E-%^g7YkY~Rqt%&Twy`ewA`50hDQQ>#~W zx@6%s=f%(iEh7efIlr^B>xue7ncIG=R%PD{f?CsVoJ=UY{o-3=N2_XkzUe)*dSx0u z>)pG=`B(kJ!v22o{>*{ei${%4vU>g7Umwh-7_@mawb7@v(Ae(Xbo0Ez!%p-|+qB&0 zkZr_BmxNh+B+uvad+IuK$`nfgMuk6eC zjvn>;IQruK*TNr&X3ndO5Q8x<7CE=e%rVf%f1_q}-b?dEKQmTlU(p402G;q@m^PnJR{A>mR=sm;)BW6jZ2ck} zC4T+z-Q?r=*GWgWcDS~2Z~PA}T;^~2aP?d*|91Yr+8y}VrENQl7r#W;>C&gg$-y1I z1`$b!owd9vsD(@lpoez(fSX^U;m<#T?I9^m}&p{JLf z`?Ur7&1PP1-l@{pN65W~#3*ccSi)KFYpdP$UiVp2yG@x1pXyF6`_oFdi_fBWAJ}`= z-eB>Q^6pj4%X&PC&i=NLs1y6S=S<7cF)v#~CnX|B(z?uQ_iDkJU4vqq9xg-t=+=_- zbFWgtqUnRr&9W2kHT(P3ql1GxNnZ9#-oK~g>s_CInEvS04}qOl_b`ridzo&q=g6UE z$=#2+*CyncQ{DRMyQ&{E?@tW(H@jw8`HvpCzBS!1j|e?vGCHyS_{dq^{)nkiIeHp2 z{9Y2pO0p+RleF{*%$Kd1?%P%=mLQYxxiMyx^3&tEMiE!*b3?{A*B^5{zY`+XkWZ)7~TMgQb|-5<4o>F?O= z^V7z!eHZHa_-+c1ooM>g$+ZE73v)B{=eM>#efip#p#z&<(2uEh!ELDLm7V+V%(#(x zbq1kA&yU+*8-Hndd)3NO^QQUSnejPe!mx~M-FMCVtK;q=ZxW|J*#56^z!joF>FH{- z=JB`w9?wR3xVpAldCZfV}+&e`_<3thML zvfT7y|NS6G>u*()BDejr=vmTyo!=LB1ZWs|9;<;dggF&p@ zwgbk??XqSst~aDk(1ZDoW52&@veIzaOzTbk27k2=&$ae@8kc#a*_gHZ8GD{CoWGlB zSMBO-U#{WK@yDlybf55Lv9ImJZ381rSBBZY$Z6QL?9eFvfB^@!dh-0Uy7IZ1jw&W*bwN%?HJ zz++TMK-FI^AFrP``^A701oWLA=dJ4Pef0a1@y>qDw&<>S5@`0pcEsGRZHIlcb&A)^ z9yH=aaGdv+4{JWz?*4Fd_O-*EKLu`kyF29Bm5vq9w{kfjF=$(r5mq_ZTk18h9X%nT znNgO}_^@Yx2A;M>*RPLwD7?(<$1XPUI~kE${ydB^?_PRpyNtgExlGOy#_I&MpY zXBa)Wz6^D=kB-;l+uu`^{%u>Nw`H6A)P4^vk3*zU-=Tf>^)g@7gg7R8*d$g&uNHKJ zVTTdG2w(&-0vG{|07d{KfDyn5U<5D%7y*m`MgSv#5x@vw1TX>^0gM1f03(1AzzARj zFaj6>i~vReBY+XW2w(&-0vG{|07d{KfDyn5U<5D%7y*m`MgSv#5x@vw1TX>^0gM1f z03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07d{KfDyn5s1Jee%_Lp}{+6T;Y$N$j zcvPDF;InlOChpN@55#>h^-j?vc3B`OOFWuoCB+;dbzp`{4 zL~wiLKN2*d6!2OEoF<>CuLKVR2wzuOUYqrhI76K@g0P`1JD0X=P-lpJE%=CnvST{MPC7GJqs z!<@#P76GSWTweZIQ!bp9mqwMG9@4%n8f{ovqddr5QsX_$dX_~N11pz^hq9<#5ZM@} z0BCnmQ$rneeD8Y3{KXg< zwSPUDGfYQaT!wPfgyJwgA9VW3q6LZ*4t(>OwP{?yO zPGc_1o@Wd7vL+8#WNH>1_;>!}PGE+a9to7V4U|+6rt}n&18C++{m2NlpvJS+;yImrGY0L*1Na zURDPF4JuL)pnexC~#$2XynLJiCr2BjA_)SadI#o^31USWIw8|AY2B#U<@gC1qc9F{x?b3v8HrRDsv8FVKv=l zXQt(kmEXS37QxtgW$<9SckzsF==swmO@~P^`C}sk1Z{UPVXjCV*j~u7=I5irk@Gae z{CQSf_XZf+PJ+gFBle1*cv-qk>Qg~#p3=k~x`OjpR{5HC4d!(%u`@(h&V&obXW)#h z$!~&jS}06m4v6T-o>4;YhU zn7G!>)O48Bvil1admm@^SXJ~f{;g;Iu1>rFg-8SINbIS7q4YollxV!^{>2iRIVs`TvGKj zDIeyvcsR|Sv9eRj<0;qcBuA79OPbFhE9SH~I4zr{+^=%wtGsl|@R+<;9el=|#(ZYt zHpxk4LUr*Ob6WkJ=3WEKPRYbgMdFm#+5cmtaDXh&k~qB0ehIJWB(Lo zF{a-y#`#v-!e=Vh7o+!ziqm4;KZS~yBF8Wv*4@0WU~LWP@8H`$WlFD&dpj&jWlb6KKr-OUwaS?RR3{j3f?V=gPsWn4dttA55@R*uV< z&*I@T=Cbl!#(WkBpD~w(;WFm4IQWeFwmGs^K!`Gdq{z z%GTA>1?ThDRTi=f)xfJ?K7Uln*dlpt3#RMzxfjkCAxA9Nnt% zRL*+y0wr8LieQe^LX+yE;W7D)SP5V=Rq*)|Q9mxR?T)4y{j5+OIjyfSZ8V`cZ9TM_ zp!>^Qirym%d`KRNDOA>GLh~8s6OnbAGNG6_y=~nL!RltQ;Ugw4ld>qoX(9Ox^^P(e zrr#?TPTz<-DhQu1$Ltj)J|vIC6e`MTA^8mZfzdgs?70{?otgez5I&0;A2D&6ltmFv z3(05t{wd0GnY>@!oEC)4L?*C)1F4gcp-}jcJQ7pLm(xP>Sx6hv^AgHteDMJ}gmQp2 zT`!@|g~CTnTqb4VV>36wCG>y+f;zROCOrboRX(FG6w3$47G?C9j;v*(5ld{ONnWpktNSn#R zM^pJMBt9gM#1yjGOq2O6q|Mmy(PTagiI14LOv=J!Gfn5SkTzq&N7MN%Bt9gM#1ztP zCggtfitL{PcnjfG*_S6&|Ff#Tr*OefD15}kWl|P8r?WHD1TmSS`=@ZR2bVNL*^G|Q z+l-fj;IquWry$QR7c7|42!#*HBQb?ko87z=A&9-Mp53ojdw~swvKbX0p~fR=6Fy?% zGARpbv+e6_1>rMfqRjp&Om&JPaYA!iNPKqr%+{J`p5&33Lg2K`u-^n7uYT>^0R+FT zFb*ExH%r2s^(rUD6CpW0eOPtj@p0&-75IpW%cLy8=`+Uy1goRfmC^g`H~D*$z?ga1 zt3*gnYr}jiRpCSONKE0}@!B`v^X#!eIXgt8gN2iMaws)iE1ggGr6ZlUl|MLnx*p12;8T@PV=WaFbO|5R~5wwY|3VSHrc zqY6$cnCwZ*D*f4IUT_TS5>Cj zwcbLj_F*8uGz58!6NJ+{*GyxzMB< z3iX+x@%TJXzJt~~3XhM3a0KrH6yYAehj-gfaDHPONZX*0&vgl0K4EO6vB7v~9v;AF zaD?qFvHdj9e%NNxHY;Fr!G8i94~&mAJ{S+p!h_0ZIL4gTEc@Z-P1;^`K4VTx1z^|Ln!aXUysUFv5J%94ut<8FN~5?1-Pa0$a)BGv+krv?e_(T=eEEzyjX5o1PJdT~&zRGg(<0^cZAJN9$Y~hE zgvaF##rzftzipJ^b0Mc;tSOA27R{Uhkzk9*I+yHozL&7OuCjb4?)V94A-rH*COM5mi~vReBY+XW2w(&-0vG{|07d{KfDyn5U<5D% z7y*m`MgSv#5x@vw1TX>^0gM1f03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07d{K zfDyn5U<5D%7y*m`MgSv#5x@vw1TX>^0gM1f03(1AzzARjFaj6>i~vReBY+XW2w(&- z0vG{|07gI>0mSIuN*JRNjxWFk;~+E+G19cmKQkow#^m%_;`LbKby?zdSmGsY@ovoW zNDNux^;zQeSmJeA;&oW!C2a8yOt2AgZ1JsG(pTmg&ypNRV+1e)7y*m`MgSv#5l{dD zcb0qD;$v9SC$q%AWr@#WiO*$;&tr*4Z1L{Q7f=jKd@@Tsivoy60mPyJVo?CGD1aCR zt&HCv^Iwqgd!o?qi3R!5|Fh%Vgm_%s;gQjSzxr^59Yz2nfDyn5U<5D%7y*m`MgSv# z5x@vw1TX>^0gM1f03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07d{KfDyn5Xcq!? zx;K+}8MTpQ3~VDon&Jnwl_28|5;Uf>1etUfw>LGEAiF^lG<&E@{5vAw3xuCT_^N!V zY1TvHJiMdk*qw==gWE~a*e<1-10=UT5FBtJd|9qMFfo+8gy%=oIRLyE)d_Qeusv`g zg7D?JaDZBOVh*UDKPvt$AnO4L4{_lD)&961P`&*DV=-}nZhy>y(!~KL`(qB29uBbC zA9J8|a6p#*wS@y>?;}uWdqAH3F$YSf9+=oeg6vh-N5uMGz{UQU16s#{{lvSWF7yv@ zwLj*7)^Wgzul<$fz@Tlfs1-AN%1%$w8_ zoj$x7y~}#764`S;e?XU__n=iy14^Pj;6U1xZ^(rMlZG@vH?N#l2~NsnnwOWC|Ge_i zd79DB=v?GB1oxJdyAyvJEt=eb+IAEA_$(g`=xO2mE7SKlh?_p919$F2hJiN)P451Rgdz+3tY+49ycQU^$x=s0>GjTxMY@ho0mQdzYC?8dFfUmuo z(o;DgX4?mQ&*c5wtK0S@VN}HdCVMIp2OJQy?L#-s)mYoBk^_p^n(3Z-=HmUm*9P0G ziUUlx|AD==S7u zj%}}Ah6up{KK7=jbr@40Wu`w@F8~as=Y9W<__p)SdzVKK65|+h6Ms}@`ZJ=Bs6P2V z&pV{rl+SU}jWePH=g#$Lv~XHGUhRC)dEJ8HqSJ+sK=*E*;ca)K??3+@J~k)QuADP~ zk9b9Cq3`tZy&EXuY7DEtbu9+T^S6mK;1lCxP+Zh*w8wt|g5M%iKE9#V;9t<`Lz{^F zPNSsjF>3QqAKXy5f7y580EIZf7b{4A?c9MPn{qu!d7OwWM>b{cFQ)b*i+#L~BA9W# z$H}xQdiErdE38H7;$!!hi2cob>!Gh-J{OhCoGHJp`to*dMubwQbo2h-pvg{AnN;3xlGrn%QRU?(#f2my$zG9)X z5kW=v2ObTR@!gQliPFjez>Kf+nP;dG_QxEMKbA}(`_J#8G4{tCkj;V8V1LX3b`F#l z`}5_1*ys6!K0^4?WPi+o;+)YY`(HT|&gq%p^Io9s^?)Mw_q1;<%Jv_8r<&ZaBIW>( z-v+++&mYq~PG6Mvhxgd?CxVe#uX30J967+({*Ufle`=m{&6=y^cfif6Bl`3qn_848 zj=}apD<&vxdu_8nv`rLwwq@O;&9=w(m)-u=cH3k7v)jKk*dE)T+5V-)_SpW#?O&Q~ zkL@pQ|I%iAZL_~J?|)*oJ-lct+P4SxmFH!>`!HQorvF!!FU>Df9w^-ZGjnVM^gcU7 zmEtLs_verA(3WMR<=Rl5jb&YDvazf*($Z2>vmD`=H6J`>)nepI&qV|tH zzMUwiEU#zOvY-6lFH#Q(72&{%a4+8Ghi`M1gR1b-WlC>;x={5}^|8ZX?i^6W{`uoS zh;L`|>K3N!s^-AUlzY7G4|BAbWR({udJYh45X;j+5&K_`*(*0+S>>vd1G(S6^0I&W z%O^_dB6beI+M}{;p@{uqEQ_o>xm;5f2Y4BuNDOmyxyUOkjV5zIUG@h&Rlxyu*dKJ! zR1T=q{)%#7l8pBPb=hB2IiPO)3(Wy_+FuhnAO`yj$pLlSU(+}s7W)HkR{ie>B#9+~{Ku%?mo#AYhPO;HZ)+2X=m7pMbP z%%Tq|9d0luV(+F|yl`_K`2%_=()C}@MQlZm#=5-p z5z5B$@>w$NPf>CJNVz{?E-%dHkJU$ylf=39_r<84qUFF+%SNJI`yX?lWZIFiKNWoA z7o)=*z#PCFz#LG711S%0h_OmTVr~y;({I5-lWORhn)m)=BOvAg8#1!v`PKuafCI1( zG_Q9hF6r~@0Tu0$EZf5JuZH@};H58cK&-z7ai?~mIm2{#=|i*MS=zZWc}d;7h}f6r zPJEPngOqRz=!f=nXd@-7JPcrt!TIBX3h&RMN)?0GPT{2sO;-onxiWb%-V5u~T#nw2 zU~h9VIM`cZy<;avS><7|+`1V$b7Z5+_J3CdpPlQbDWprGu9b;UCBFf5Eawa>gBDGy zgJ7LXb@`Punxh5depUvrqI+FUs-ji4E!CzAVCZIAtw8Q2;WXp zH>QR5*CpiGuWngz`6bUUus=8g`|^Z8gl$mrHc%(#1=cV4k2z4fY!AGn+8>TF2TB(Q z==R4P!1l)+C_Nltdj82c{9B;?JRoh&7Ge%)HwW14PK__*z%e3Js;>#(FFO2EsCJfh zOxUh0;av#-0oze@c2xAaw2@_VrfY=ls}g<=;V%&W9pM!%8{els>{1E4@wPn^A8;H- z03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07d{KfDyn5U<5D%7y*m`MgSv#5x@vw z1TX>^0gM1f03(1AzzC=Z0Y%muD9!gsTS=cbe@>Tnu0uO7Hs8)oIzNda?c9KNu1`DH zqn+#0&UNIR(=Ovvi~vTUG$Y_nQ=WbvL%W_#JAX?%&!L^?($4c}=fx^acj*KuhITGp zpiXK2ZBj({CIp;42=7jK9Z7xSKXw=ai~vReBY+XW2w(&-0vG{_WKdhl`hjgE-w2O{ z_C(%jL`Mml&`sEVHEjm)nwtu9S$7crcP4ui`wV^^PRJ;g`16O9DgtB-S}}n$59H|&*VnoVr+dchXK41nf2u@x5;#5>$kX3n4nA1Va3Xzmq|Tm+J^^ZT{O9#p!ze_F|y+J1uf>RKeQ9>CB(|gj@Pv? zUprRaiT7Vtx!CG|UWFGXjyV>@S`O9zp!>r+!tGVfWlub6`P5?}^^ZO(Uw?JzUQ+g# zr@y*%FDd=^2C_f@ll%UF9wuH?&*+s`k!7#;c;F5fva%TYB3Z2ChRi>@>MoDT*Rm8A}Yy&UA0qe={v(I4=Tg~62G|2+#* zN>fg_=nv(n3IloX|8$!(opZr}qO#Os=;nEH?N64e3JiAou=oFXxsBm0n>-AjC*P6M zn>>Md8{-#Eow2!h#2&z0`s|V)Tt^4DFGlmmR%WcTcX`{f6@k8g z&qZ%uJ(XJy^sU~wcntZt4Pz`r(cg%TZiDmR^;iYuaRGkkmQ4Gzn0$`Ly6F0O;rf50 z5BVs&Z?Ke%TbGX&tPeah{TU+$P9w^r8yA%O?n5<2%wa!4F@Wz$(C!h!VGIxw83r&W zM2hol=l)AZ%KRq6haXU9G3{3i&jRfIEtEU9Yl%GFU~H7UG)33pTS}O(4LWyh6M}wa zMSb*v^~hy>m7;v^gg%Ih#5jL^L! z;W4Sippgs(t_0KT;|jrmtZkD*G;mEfoY^wl3Ce0fp_a;$)+>OjgbCOg>6=Tea! zsPfCwVbb9GXvV*-IeWW*TO#w`dW_>FrVp!*7EEr<>Sv9sk2vbEgf4%+4wU&HR->As zhj-%@YK|>+=p`jT%)N>~f0$EV$@k;Ya_eUDzD;E?$q#WbZh!ii7AQL_ol|-AL_0P} zkJGXqS`DQ>zC}+a^Zec0bh%>}+2o&RuDI;GH_es89me6Z%^{Gf0C7>C4ovdTnb0Wz zK6!aFT@R(n4s#5Y9Xk#>EU|3F$R#HEpWM4vOtcrN52fZn+#=>gkRIko#GVX69<%yN z;SPB(vgv{n<4-e=ccsp8pdP0^e^{*iVPkTv8SZpvc>^zTK%72WZOqdN24pdF$J?l6~R z$C}B-_(JE9Sx;#lnB)i9PVV=SdggX|JD@!q|MOn+`=H6ar1JtyZeKlB#0ByI)+Gq` zo+*`I7$vV=8!VB#d0n}(gDx;H1ja(k!k=D$l4&jbNk31shDeI(0Aq!z4#pUo_9#2;aJu@3n6siD?jLB#b5_g2R`ycUdrk) z*Q|K^4aS;7n~I7%{n)C%wEclgpaXra3plqL{EN)Il-1!0(N?89Xwy>Lxb)+=Qz2;m zyuMN#1|7~GE52R>tcyXvpL%{R_8{82Vxq!hrC~gKb{6~E8+6^M=k&R$^T+;-9w#X_ z_w{1bP6XrVxjx6#bTDTQ-g^{r#dXj}@cyBQQoTWC@ZJ>&WQPUKjQP2lR_B}#Stiq%@VOG zri_!_N0lERV+1e)7y*m`cLWOBNfHU)Fu#OSIQq-I5Zai+Fu5?~iyxUD#%a|jd=J9o zaasfj*ohJWVtmDGu46)Ae}K`Q{_7K@_tg}g6XRB3jTWN4N%xsVoHZ2)xQFi;4=ysm zxD(rf#mXn;aU^9RW#%ixn9lNXkRyXR$Uv4)#bK6tCv^MzIhkvP-#P>E(kAt~R~Umz+-p)fmfvxW3fBU{=4Xj}P(TTV0FF zzi?`olwG*2F$Cp{YhIuxZ0t;-1-;R7$WO( zN8@tD_X^o{KL~jKcpzhcKUIHH4#->HZvgf8WbUYnoMecN3@G;9q_F&SvTQP3GrJRd zaO)hgmQgaRf1aF(=8yR)A6t;&?2(P=^@~TW=^?K`kFip=C@kNcEVraXC?6bA?wpb? z8_Fvvz2HA_ZcTV-A4*}Q!t+#W`S=(kpbi9zDsajHAqVupz}!2Scc-*>C-R6PJf(=D zL+GcdL3o%`hWjZ95Jc*T_tOvZ-qWG2F4bls+91?(hJE;+67_5T9&?b6%R4YJFGea) zYW{G{P)7b9Ze%*LjCq#5(6PN68TX^wxNJ&(8Ss7u`+AUV%KUc$;yri0bFp{H$7KEx z%G&?u4Y8k(!&cL1D21LnLm_4b373!O7ya>lR+0R$&NHm-yxr5hNN%$I zLatd%=1<}e@>16vg?9#sBOP^JVR`QpPzLO+1`gJ*1TK(xP|JY#C*U7A;3=5~LV0DZ zbL^hK&L`XpT&DInC0;v4tQYx5zU~)JY=p3NXoC{h<@{1 zSEc(c-e$f=^UPbKfYp|SS)?8Gaggu&aR1g-7WoObuCYV5#N0<`v(`oXrNN$Y)H#gX z*B7jp9O`9}F9X~UvVl9YYXw^2Y>bx7Hbz!Ms~6S7jwX$Z`f;Fs1{dsUTI~M(3x)pz z2w5O+=#PdyWT=ih&JV`UlI26cCG;`*xf`R|V+zWL{+-8nuja>lEi^_x3;Ggubr}-B ze0u~Dn1Tb{Kv$Qk1O{XD(R5;;=iJ7Ke&7-{Pp-%0 zavsD}svbvFK}5Y#;Q2^E-UIcFIpJdnug&!gp&oV^0gM1f03(1AzzARjFaj6>i~vRe zBY+XW2w(&-0vG{|07d{KAVLH>Hk9<}-&%5y>041r#|?suunAsACn$cD|ya2^ak3*Fe(bB?ioYpp3VrV#??E1BorykZJ?K{^k|w z@x4On$CeMQNeXL9%ab?I)0!;{!Qx@Ova&Xirw7w@ut90Zo;0GeHekY6UL35&LLb*o z%A=}KOuVP-sEiHdVNJizWgQ&4e9E4S8GBMUMQuRGSJt__xqhT9LWY`vJ*n?QqMgOI z1`Dm-Q}i1x3vcQ*vz}#9(v34@Q6&<>+{U?P&E@{q`Ykan5qY>2a_{CDfLDImy;_v{sqPb48WS)B{}Hft_p7 z%!wTt_sO##Pt2b(C;X)1eqP~zcs9m0jUqgg%Bf+aki&a)BTpE2h1I zNX}D3x-LxT%j|n{Di`)h8cD2MDC^rItZSgI@4HO8@r?r=xj2~jOvRb)m`nKqp2g?t zG08x#GPrWN zm%9ECiLbnnNp^aiI{2>){+fb4*oKZZ)44kE-@ZXH{%aEU+J?WTVJ~L{r{j&DRa~W2ef% zb{x8S9tn-i5cVwz_MRzIE?9?>O)lSs1JM5_)e{VN(k8I(D6EyqrXR#}#UFSpDiw%{_jBR}X%Dg4fGhscH%RKhCFE)YSZ|gsKUusdufbaEZ1=Opi^&G6!XI>3)&?ZT zvO-1h2ie4816AU$tPN!0PF_lqavE*XJ0Q&ENB=L=-J71nl5p(?ah1 zXwXWNk`ya{ucQ3|^W@5XH$|6#=Uc~L5P>?=R4B%jtup{HlXzPVjIvI zBHTHC4y4~f)KM3GAli|hvpULs=J9hN9PjBlefp5CZ8m`Q66JD=Ee$*euogl|IlS? z{|eAA_>XO%Ui|TMpnm+Z4NBGq)cS{djO(J3u>%!z`Y~aHT7-u+>~XtDH5go^V@^LO zu!r{p*vkR-bWp0Vg18^s@jncJ*MHLS#^)FTi~vReBY+XW2w(&-0vG{|07d{KfDyn5 zU<5D%7y*m`MnGE-;4+>_Y-uRiBg(NG<=BvNY(P2IryT21j&&)=I+SC4h!Ic;0`8Pt eV<^YTl;gLQ;~dIyF6B6na!h>~#P-ax$@71_pc!uf literal 0 HcmV?d00001 diff --git a/data/logo/ES_logo.icns b/data/logo/ES_logo.icns deleted file mode 100644 index 640868ba3de80a5ced9d0530d066c7af8650feeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284710 zcmeEvcU)6T)Bh%Pk*=U9h!V(2LhsT<#NHJzw+`aaL^^`G~A?!D~UncdkkJ3HUmJ-KscELei%Cz{S#VrzpC zxqyx2{8z8`k3p)ohP?*Hm6pa0>+fgFL=;I3_vN0OXi#fqd8_5~bFbw~P z>binCiFl`BR2q$n;qL-weJai@sEKMsXLx2k?jsUJ5eUNDp)+UPxVeIM;O!j4{q~Jp zj<=IZ^kdj2E_c&d=tm5ao1dLMpN*iK-L$p4@w;iH163IHG8A@G5y{CRMJ=+vu$u-( zMh4n2I))MBo zfq5=4>r-)NG`>8mx2Y-KP1`BUoe}E4vnj-r1>-(AcA6tXe&4xGSL^u8VkKWYWylJ$f2j0z~?Cc<-n|OcmZu<2fi;u!EK{ugzIX+5b z`Q0R{p9|H)P~hDZNEdcPx2D)rfURyvUoS~cfpwGQ*mZA zVxYA-znc_oEhmI%)=m~?&`rU3nmIZ-S&0p|t%aktiD)|T*)*f|5>6L%6Q4vjTH-W6 z2qBU(BA(qPCA;}4gcQf@?ZRI`MUBcr9M}OM8 z?Be}2{a_xigm{0S?9)HBG8up8^MAbk;LTfqoL^9%zOuEpaaqw!X?d;N)4IK_`$KfI zrN49L;fq)~F&-&7IlFpzxH>y+L?qW8tWwer*Ca%;rLhpH_ilLI-5XLg+c>0bY+__$ zi@8j>!zxw2GsVT()_I((aV%1zQaYe+6wS1lQl;WtxA{$X`%t41*_fgbg;aZ$mfqjD z?|y0NXKpi-OMczQI0}(%O**iVipqFr2NxFyXP?__F8QvjEr`L4qL4gE&&1S-h2)J) zUD$OjF1cwu7KKQZZcId0GB)KPa&NC^OfG4@D;p`=QeZNTY4J#r=2gdScDH3C1&Ss@ zdZw$9LT@&gyTcjJAt4nL#HOiP!8n5Pus|+%K5VgOB4vuPu>nHeO%WTDr&2JC%EYvg zX@4fOueFU0rK74GLKGt)%28o8vM?27WX)tQpA~2g_DfC^v-rFtk4u5)K-U*dZT*l>AU%y_>;v#`YM2l4DZ46hbPM|`uLWOe=_{8EW ze+qDSB@`}Bpq#FkSX|O2S3)^KVLi^l>p72&NXgZ`kC#^;ch`6nkC+rvuU+SFKyiAdcjk~3gT0`0>!8WU=?sUAX_ zrjXfsu|_j8v%ak*}i8f_IG9unYh?at!L zRri+GXp2x*ILX=zsMp=aH98QoZH3w58ch&dYLnDxyf#g1Q9D{|w4g2gP6V1F361Ux zov^gA0F8F9F+4%Vqb5wQo6!!|}7i$J4!;Tjxbs2)k$w#|Fle z>^t#uG6mLoNZm*13t2vl|Kf!+t^yUS{sXW`XZ~DbWvQVo27MHq~M^{0<9NnwfLIA zwOSxcuzoO+R`Xj{2dnL^m{#LmLCq|#BECGi+-1-`fpQCbPb}yF4WV*N4VjpBi;c0k zcDKxiNV`RI)}r0S^orYS6O~R=Y(&}(iXmaI-PvqUu-783lCalocKDpxZECk=1dC0w z5vp;Ey$*tGJ7KoCb`ylQv>UHYv!xxawcDEC7QS{*Yo*LA!+`rD#ica&n{-+ASPU65X8XM7F2XLA!+`kK1cTl#{%pB~75*!kNN#n{LN; zQn77ix^Ug5IYc=r!v5G|>2S5C**TfhtQEveBCghS2F;e<%76;hTHM%zstQc;Mxk|% zNAn1;OkUuX5v~dv{-pBVyUHiS`ESzyT?c*`JnN(>3Sg%YO6Swl@wB@F{$IhPTT~t0 zfm!j9PyblK>=0dDq${K%i`UJ(uT}NMd@_$$TwnE-*Zj&tSo#g0a8pPZBwq1rP$+8V z6B<8!d3E^kt1llK`R~m|L>ru|`L8ukU5VZ*yFRVq=Tw6y4-fMz{`!>#z5)M{WASsC z{MQa2a5DIAEsqV(@Sy`ggIUkx)v#KKc!~ug>Y4n!isGA%Pvy);;SX#pwD~jKRpp*G z-Yl*J`tWt>Ff1Qj(eoeh)P<_Q{Lsw(b{@Hc(2wa!!=K=7<9$&^FL|FoeE8I6;tKl_$d^QN7 z!vx`-82!tqPd_Z=L*GHw(O6i&So^+y{P;Eg+V{7WpLnlC z?Q7}ZPk3sxw|=PQefcnt-@mjZT-U_Mrz`3?aZz6-M2t@bfBb$ozQ3KH_UHF^`tdvc zLb~niC;FX!BlMf~0nn)Z^~E12)b{%1Gss%sb7teHM59j$_>!?2jw*qq3qCLl5u zQv-uc(uT!#Aih-L1($n0s}Y=s6Xw)7@E9<)SfplGT6%j=dUSO9p4+9RRk1*1n8qTq z8MQM9sVPJa$1sM41p~uI#J%Bg$%z)!7(_BPh((Iz&ZZ2E#$X{u1`RW}NctYbB{$Es z1fP=HofM7aRZOT<1_#MAsAj$IM03fFK~~^)GJqI`pVE1w+Utn_$V%+}_^-R8260 zS}2$*WOt@gA)9KJ1l%X-3}`eypbGM)0B5MtIMP5`42+7wpaSlpTD&XY#I(dwBL!np zkscGtYf~AB%E3s88iUCjA%@vxCR24d%mPNis3s;9@OkBpFoYPf7|E0xi^&5#!8VaJ3iRm@^--q{Ba z&gQMP08A~6rOWECkDq$H_S0fcwLkw&W>WqmjBN;3s zn3@jSBv^22n7}4NOi5lyQEM4}3mAO~W61DkhARvc8AE3#SK++{e`{-P3>gvZRpAzd zF=SkZ-7v|F*cs{LnH=(b8g2~DeIWaLZ!_31>6TFtQ0RlBFB;=IWZz*ByDn`pa0k-} zV`z~DJM&(_E*$_t1|J3}Echz(8euQr%P=E$b~?>JiX#_0fC1`8whC&D=E~pc4PFc3 z5zs9cMMH36070AC9K%)oo@8MmT0drt@lmlHQa_w*W|_$0s=XI8hN%%84tYEs)SHYk zPH?y#o0~se%HOy#|I&x%=G<5gc^2Iiw}s{>Kq(uuu5-Bw%?htMoM4|==)^2KtbY|M zBeA)0o(03_(&}cFC4Fd&0kIsY61RpHGlQ(aXQ8{WpTsn)K4H7i=~M<|KtH-EZVfH1 z1YVkZOtZimGGTJ~#;{pr4EZTAhHLW9Ja}*>Z;i+pS}_<_LSral9dTnQVLPSGD{c(M z8qi{n1;$X+bdez!H-^G4Uxp1}fP^u`M~Vz1wT7!uOF|O%kZ~fGtHu-GZBk&|1y)gN zYBIoS^CTW;)c z&Ej0(@@>;B`U7=VduDMGFf44_Eb__innk{d-`J*N> ziz#qqA!!!z@mJuFKa1Gpp3HK@4=}*vZ*3O&vq_jmx;uoNtZ0N;6et7XBbq_BBMpZa zeAO|;i2c_Nvh6U!EE0;=0pEYYVYg;Ek!=KKQJ|QxR2Y~!+er@c39Hzm%iuWB%wwG7 z?Z9j08%41t0HjzaMMo*Rgxmg$Qal}1Z3bpO#@|+rLqP=)QSJp50WCv$oNBk z{lbziP+EQR#X4dAbr&bALsplPLVc-v9X|c~Rn|p6y|GRZgu@Fp*EOc=cPabz>ytyP z0zM7E_Ul7K-AiHR{J$^j8b17jf(VqbN_kftb~=YN8y8gc=csEBi%^ z8cvy9$E&zj)3g8~|K9bS z{=+jx<7#W0cwC5VDkH@zTwR(k3>q|0DYmJ;p5OXpgscQ(!Q){)MXLrPvB^Xa>gwy8 zV)uzyy!iaYXnfHLs^f9%Zx?=V=4l}0C1TolTa<+E5cTs-z`7=0?T$`}+}9f#-BHAJ z`?WCn6Y_C>qW&{z1T>+R`-;V%B~U*8^IFu*QUO1a{{hK=<>INjrW`pSl=8VD)GWpS z3r6VITZCM1HxY}d9)?+rU#dO4l`sWvz=K?~Up0Y{E0Anyk92=El$Dhgk?XlhpxCTh z2--{ZS86>=XzDL9U$XU~as1G_2CziUHBGBv znThEG-Z5!?Td0T>`-Z0;+!z8!E<$~qjPv5pAL;YUhL)xJC+npS^ilZy?Rxyn_5Qc^ zeW=GO%*A87qT`tB&Q6z^LTR9S2Tbx^(Kmj?Cn!z#*1VKw@E} zbI+4XNzc!*h&Ob9eJQ&C_vu@3CnyPO6P8bc_aks#y%xXBK-3upX*PBc#bEL9FM71T zl=Q?Rnt0g{SB7HXUlf&GiX!;wy}(TFs!U3CwYgO8W|B8O8qZ>33T|+MamY3b+X37pBSi=UD^fTZ z*?9E5t)=8Ui9-O1xxa*qH07hCusoc{fDG|*MGDkrtVz$=kGk4+u+Zas2 zcEH5BF{jz3=w&*H4q;*Gz(z74Wgx|#rKQjIhq|xF6x~DjKZE;g8PErR7M6;0^dxVB zFk|9e`!r0>e(si@YNb}!9Umx%(B#L4R z6f%j%vS6x7&UaF{q!+II`hd0pku>2XV=Jf*$$Z}iF6pJ4pm`KUI5F2_W7~03TvHN| z+y%X&D6T~$IRiGf6Q>1!U&|$x0gV_FiXzO1La!)nFAOwkNabqKkv=SJ6W(KExp*iC zw0$^jP<1?))ab>6X@U+Y#v^19g&n{tGaBQ#sE`FMh9EG76bJ2y!VcjR7Zb-N)wwhI zMYMpR83k(w2z#MK9t+!ymoO&5iIoamZaanxHNOMe@~bbCXadp%l7a~fJAsp&-*UKU z4+{oOPzrTpVW;rc%!e|K{h36UkOl`Kl_(&9oI)sZkcFi|3DgVZ8?vx7c!4QUplJw` zPtb+}9a&fbPAG_lDPP7U)B(u>p(md}8rI0>%2#AEm%|l3xZ!{yLm+CfuxL0H+5pE` zPF02n&~qk$wN)QaRR;JA}u>;sJ6z^Dm~Jw=RE4vmC) zuwazn9ErLfuh9V*eSlFN7-3{_(HmjZ)?vtOEl#%p`gEXoOhSmn645un5LzYR-Hb?L zqM5(|=PXE}g&_qdJ07Qp0DUgdm4Ob^!WRJZO9c*yiU3Cta0CN~B5 z{=l%LH3P1B#5fD75&}S*=^y~kqs0VBG!X{YgNiFW!6Iy>L^mPk<3XdX<12=+pJD@r z&kexxpj#y(5=MusMpRlnpHDdEQnQGk&yr|Xpqf;C=AlaAJW6VYS)37q zyPNpoE7S_Q2^xiW1PTZ>L|W_MC{_VKKLrf|W@2p#^-e;8jZ4K>Lj=AWV6^eY+^J=C2{{RYu)0WN7_k0YuT%*xe5EcGE@$yI&*#Ed zk;J-Zwz3~-c>RL)EHEF0scN*MK_X zx+rGeS{YA9GMLVeu&iN(;a@6^N++ZidXwXp^vvj4f<4-fS7$UM5~fYNM=&j%MK{R9f$?F9e&eaYF0;xY|Ro zSGTc`3-)-K`#<6F$aWhDho=p11NUs&@>1IOZDjjHgr_9ahr+!pnQj-+Ji=E~J09u? zI_VgCqE6te5xpWjy+|&%@p`o9dQ8qU`g&s~-_64Zgzy)?!m;X;v}MzW+JnDnKXm%C zv?n=yUoiuB9CXv*3z!71Qf&s{jCU&&~C=;_PH*)1FvnEIYl)XY|lbFm! z$$V(DpTIy+pJnZOE~?=JqJvN!0hX#EubK~*j=)MFKoyb4f;1Dmg-?;-9fxm!nJPMYc+ zJ18qEDtG9puGvZ72yX2Vtx;MJfkFX%l!LU~-={@TQczw3N)makpd@)cIB;-OgX2mO zlV79>}6#zk`yN*v0*n07OpgS4f@KQ2xU@rwgg*Z(H4(x@`0Zd_Q7>EpD+ftE* z0`Bz>a{JIymAmkclZUK5^?ecLgXWz=EhJT;lBR7ak&ng1%8)(!KtG zP=134HQ<(!g5wfaIC2%>!Q5!B+&88gjI=Z&q>yyHqr=ez91-IF?YmemI^Gr}92Xmo z77HNZ1OUAN523-5kZ=Ge961XhVHV)rM(7|8U&SHe3aDqC(1)x9iPwc-j|Gma01^fQ z(?TI6#IHJ_XdxF2f)El8194*nkgz1W8r1^k_mlw%ZQ{bwvglAWA54c8m~Qk$3KIsc z3nwt)sC8VF);=a23#?86dKLpK;CLK2$;N~Ofw4a@CIjPiNk&Ob=njmdfpI4=4iz!V z#Dw8!5-=VHMtd2U&>Sk73iJZ#W33Rdu}}*pT%Ht;{DI*HFjTZKh%n(opa%l|5zuc7 z=@OW57H|XsM;UM&YvE|Ygnqz)gGLDk5hfH;B?L%dLZJYOCQ4#LVJjuNDS-)v{S+Ih z)|gN@R+57*3ls9kTxu4jF`;lCB{icROeoY4X|0oi2?cuBN`oaqA)&?q3h~uY)3O?b zAWi@Z@%6AAUk_mUaD z4hjVZBtc}3P7qc`3KdT08zTZ0=7OQAgNP!oW35r4yiIg$m}UYO=0J@Fg4o_%xH%U)iEr;oLz;jx zMGy|`!vP9d!!&%iIS7P8LHuwrhl2v}EfNfH|3)Cdq!1Cufp`g6^-a)U5y-5#n_W zU(F${un}zg?qv`RuAU(X4SPkc<&eUFMz{;^FTss&j1h#C$HXS_X@ryE_7Y;xd(8!r zX!?u|K!bQV;hea>fSC0iXF&wpYEcS@v>a%JyYnCwMrytw?mcj2DhEMuo}es+NPXcH zL9D#b;&cugB5|CHG&h5TX7C*@l67eYV5R&%5R@+#kJ(Lt^(9^vk~?gUf7|YapjC?U=1+~{V7$EjlIF!eFJ z8I^!+XcYkv^sq*6`!t)oY8mDeORqcv$9G$snB9nfP|8aJmIorCWA2%Ocd1TMMy z1$>#grI}P42Uk3!Lt+yMGL92Tam^gALb(U#mRldi-PVk9qc{pNem0oh3YcW5l|YIi z4RGF425X7jXJ-QwXL}9THe>x^qDeMkG0=k{0-t-vPdLSS=^l-dJ@+)`HOsA!4X}sZ z)h3J$4oSH_N@<)`AtSmvcBX&7zk}LozU}2Rs4M<;fdqogf+$WQKrTR(#IlXs-V*SEAkF}Y0RaZZO*|>2IY%m9#D*{i zfIK0b^l!+754J>BrIE{xf|EfJqU4*T6M}fvaW!#7*<#3AK}reRCjluX?4<;xl(4Z9 zkW$hzOF~LXi!KQ%C3XTyOewj6NMcIKjYkqwdf=ytq76#|Q@#+}?jz$gi8WMD~0V8pSa7({Ay zzQ{)4wzZ8VnMrIk8yF;j8ViZA1QTP%sM2PVEAeuE`peUZlg7E89Q)!$%A!OCwBO9~7~3zpm| z8%qj|5g$v!6^!Qd6P)O6z)3MPN1QVH!sl4k>pYlF2rvz(UR$72%9i3Gzx#o`*-rQu z$i%%6Jme>^&^WFnEf^T<1ZT;7qR_Gv0Y*lg69O1QTr&}E1u*Pla}v3(%yvr-Llgp^%vXO$xmuA{1|v;Y6~956_9)T0)PCIBBHWZ*n5p z(6b=)E)44vjbk`&a+0%`ItswMgv>TMDRu|nRO%3ch(TLqI3YRsmR;r%1c4$g)0_}3 zq4n7X;fz|RIw93lEyo?!3GmI0gJU$P-EMFzl~)ra;*`-c&Pm>Zj?t|_VRd&(I>E%< zJd0R-!oZECTQgyL$lIlkVThv|Ge=PPx$&stOGCq#ibprj>}LDe zx7-E)pH%thWgO1D6JGt7{QIuJ^UrJfA9Kq8kd!L^Rw4gCuJ(@$YKjYNo!0#0YW~NJ z|0loopo_i#-}wKJ_3BRx{x9mEQ@pcutNvF0K$g99C4Z7bj)af9{9AKc#fhn#R5H%0 zHNQWX*Az)^o%;vx-7es@OE$nEUi8(KlxRUlX}p7Y*c+a%8{AzOlB^Rcf0c+HK0dZ<>7-L-;Y4YmaiS9>-ojk18IU-P6K=o+2(WmcRHYOs?D-E z;SUDjUb_{XYJU}wcC=fX$N$B^c6okdq;|Ax2NK$?8i?h;WBBbFfooE2KEr=kJMY2o zINBe6ymZ^9xSPP{w$r!4IB_3dl^r1v}|yAn{qcOnzbJul1dz%Sq;R zS}*)+TUbc?Z?g=y5^9w`b*6huRT<{ zH^18TfitBGAhf$Y)(8EeAhRUp3IK6ng5I;=}?z|16|f;K?kDyAMO!9UPGjR{n3usW`#iL*`m>P z_xSkDt}Xs}!SFW}3V$L70{Qqua`2G#nDD8@e^p$3R%V{Pb9PU9?2;k6VubaAN?#WW z!IMny11}+Fu*&Y^Yqwh9Zrl*m(fZF!p_~rOK1TZj@SunE>-x7kmQ~sk^l+zcJVif z^jT5)cICGizM{S@u@%+vlhj1z(OHR##b34`6@QaRw>Tc+@~060D+}U39>i&1OaI}A z`r?M^w@7VC$#6piqK;mYkSYEG->nHAarxpLIXHc%cn+lB@13S6EGYad+}K*N!s{jR z=1Y z(Z9c4f7Rba&+|z_`S9DZUTM<%FnnLif7)4pe`|k4V=Am$^p|WiXG@t_?|D3-|AgAH zKYwd~rRDc_Y%%+!zPVz@508XxYsdcn$NP^zkN0e$SgY(>hCn30o&D!;_g_8u=}F;3 zoMjxq<<(@0aH406{N2L-x3mBLC;mq>F5sX*Ud8F;ATO7(iDK3$LLk3A|KmUMzj%No zgz{UuElQ0N$Zya8`j7lio=3a#g-HLrs6|o<_5aBKZeRXALHFDBztI_~Hi7FhgiR+S>nk?aI#*h;Ijfm3sn@ybuk>3FQj^{uY1Y@ibNIq{(Jb4Lr5$dCz38B{!rRluJB#BO-RLG$W~6W9-9`!FK0JqZq%m3 zH!p3E3mU-?R*3(Vj=!`x*5Z7S{$Gke0qAez`Trk(gS#0OZ3u_#MBxOA{{DZ6KPI*< z|6j*nQKqQlqC^V}Y`fiUQe-$D?ZuzbzmC5X|KD*@*ZGP6&GUzUe*W^W&!5mgK7aei z=a2vR{PiE7KmX(N_kVoZyskeW7{}z6`vF%{dpIpD?@&2>>$8gvEnYhA9 zq(4Z!wej-4jeNNN+(VY#mCF0a_s%m;`TVW?|E6rbuK$xSW8Q^X zGUosP#{a)N0{>e7r@n8J@e$EUl zu#Zptp*%i#%=}v(mVGHLjv@yclDfml=zq8?0ch2m9#jr<168@D}Qo?yq z#~H!%7W2dYPc(sZ25%&9G$M{A1)KyM{-0Lw@=7F<=pWt~gnuJOLJIQoh{W?jIvyT_ z28|N`hqn&lO+=6P0mE3NBINZ&ok-Hmz(5vM1`K4G400_Da?%XRWh+K$8Akt*>$f}G z>6?kY{jde!;+$uhk38o;e`oiFSEA8WyHTsh_la4QHo{o`f|hdkg1}umcN~WNTvJ2! zdA;Ga-filW5h;FqX*yjxKQ3D_QS(mus_`$1r%nqGookZw=uB5xBMbWB%}N7q8c18LyA!H1d`fIwq%+>x{w{Y^zP|UNkgH zLoUT|Hs{!_&k2iyHZ4zDGHRoLlXBULX<93{Mp>xqUGb`T^5$-{>Z}dkD-F*@o%x(w z8GLXycaIk~bVk<1Z5MV}p^>4DdSOYQmF9l7T_2J&V_8R6qt}DIw7a{+HtNy?H`Y5| zFDy`ucz3^U8?w1rveO_lx5(PA+F|H0vnkm0RsPsXO7ZmJola{wK6w-t zvfAR@9aIYm;EJI1^Ul&kmZykK)L&ZC{Qg~1=>Uir`I(=}%EBDzChYAz4$8Wr|X=hS=p z!;ZQQo{@zG>VuO3!@_wov-p<(iMXu)HY7cMQ zX*8#_pYH*&~qpo@T<0opP zG!MJ6yBBE{P$MVIlDoE$+H=0v8iOOW+@(cpwi(aa71>k$;}bj5q-Ccf-qe;_`45{k zb+YyiZFGI&h8Gi!)|AR`(_2`iM4nPUXxrAFd;N4>tj4U~Yj>sM+^HZ>+aZ0kHWw;5 zPg#VSGArULYl@vG&wf3qWcv)=8T8YQ-+#=ooK#ZtGV}WC+(=)4!w;c$&X%WVP253_ zqV)V^m3+^n_xG8qnAh{N4Ksh47Tz>-ToSw9C2CXJ0ot0n>_^`RZ<;^&uzzu`d%C7e zw|D0%D%lMxsS$^!*Q}fHv*6p=+@s4!e_bB;O8rRP6Q$Hj`MSghy`!huM|gi2v2stL zxkYkbhDNvOH!nVFlb@>`n)~v3a(;BU{@P;?zLfn~((7BTVa~IT$3psQ-w!A(eX4WO zzOnz$c|%V5^;ge7>=}G_-Sj5~`VAefkXv33h*pF+REetYgUaW{^i(QW*^ z^OGlM$Be!C<5}78Ak)G%o}K$CE&eq;PWehQ+xmlz3&}mGB1AsYY82Mt;*U$$igSIM zuKJ&uQh4rOPQ=C@5!u@&7m- z#(~$}wz2Np)Ggau+%4x`=F5&2wCrJ`TkrC#r12GFZ!hwgd2w<{;?l&4+21ep{?Sb%Sv56b(+@?vTZgO%4F6eoW%Gbb zhu)@*Nin-I$||ty$;8I)Q`Idt9;tnsyTe7}5-)OGvw~5=ZITBg`^2zmlV+O+_SL8u zQasCNYP6>|ckK6un#ce>=i|5Uj>_8j`l^oB!OX8+js!7ceqo))BpsY(WEisS(}V3F zw3438AF$bR5l_Qv+`O4}k1OTlmoC`a*~{PU$Iw1nLyJcF-U;*_eSQ6x>>im8tF%Tw zUcA2~=~x--?NvD^$DVU;?vS%Pg?=QCu|JVn?_UvnevY+LwO+0D=9iamPP;Mq)3P|r zrBMS@^slma(_`$5&uhA#>iwF!D&>lk&xk<|(<&}_d1h7XCCn|pTX^nrPDD&PP^%Y5sX zQ|#?KLm$=bu?uk-lOg}3_q2Wk0*r4Tbi2J|U-Xs$-Awb+=$gd_>Phv{<0DQeMJ^t< zzWL43)hAzfcQ-M7QP(B-!|7$Y4A$Ko-j*)r2j^pGRFZZcM zzb)EyzW21yJpGThvk&!kQ+TfDm!vww(t6Fs{Bdh~xbKXWJJ81^a>BKoC0Bg+9=T`tR`c+zU(7D~ z?@dy+hfF_nz=yK5=g|mx?Y*iUykLcXZ**`TClov z@o0_IhA{bat5c&@>mOc8$y}esuK7X_Jb(M~GVO{Ew@q|ZY)3A0x>Ve=LsH_%__ITz z3(q+DrbR5$KcKSe(B56+mu7`pJWGGZI<IQ7>S%y&>f0ZR znCbk;uSa)1+&6OIHQya4US9bb|DJI$;`^xKs>|KGJgWW4a=Uc>+IS=H_eDL%XWl}_ zhfZ2w-#pl|A=!6~%dy0nIz#hz=_fcF?HN&+(0Jg*0e1B5sl2`&PBmWK6m%%(d$Q5m zVV#ySYdB`z20kwtG|qY626e5k2c`uV^)Y1_#pHEvcM{zbl5-Xxtjc5^d;Y}Q zZ??i{EnQ=+&JV&qTsh-8$9PKev4?6mIx2^_Mf;?#(SP#H{lxs;ja@bl?b5@J`|xJL zLD#@pC%b;}qaPWzF#qbO6vaH#K0$#Lvu@+Vy07rvu$HH49!FQwIn_mDTF3!Lf}hv^ z#j%FPS5*7z7>C#%soKj6;e1?JqjPL}gl71+!yO!yD|Q^xU;6!S@94Gl!802S{0wJ> z6&*G$i?sHkK3V6xW#q7BL&sQm%sO22y86euD}4;&Qq&$7`<7@PSq#*}_&l|ok=48@G!Uara z_YObB$E7C|mM)(<(Y?saJf%eYT5(aJ$sCQ&v7HwNbYARJKB?9=YC;9(zI6MjjX56O zKZe}Z&eJJayCI}}>#F6s!QFz7gik$m{e_k%>Ek`E8{Zm(y2Yl|zTVR`*tKu|skdis z4<%G(#M$4(ZSmrCTP^H2~E6gwpTqYY6n(|YULe!;O_v__`JG#EX%XWrQ_`{;9mKO4H=%J&FZDj%yK zY1pY(#H#mqR+QvZ|*{+Z7F6_ddl^RXJ~VrS~1u znSE%H@35M~PeT<>nH{)w_@j3G^eB|xZkIn-&EuKs#Ls~Ww_GuM3cpx9{sxpzsjQ=7;@xb!J)v8 zztj$`Sd1u93g^d6uzfo@LV3&V(5Y0rz4G^7yfzxrJLl%~85+e|bKiDcd#qpcmVk4) z^_fR670bWx#@)eSJr$T4uamY%?#zzr(J=bz zr!EVpjkMH}H|(cga7O>l8& z6>Hrza*mzh9dKn@=Evkd)21#Dxv_tf*3eT=y>Bo!mvu_!^jF;4DYwCP?0c*9p{L#Y zIqP*x>vpGd*=6Pi414h9hFXwn@1xb_hhs-&y7#}n=z`0bo3m*>*+0G*s9YL`HEl^6 zIPBVT+r+g+D%VW?uX~t1A}#*TRZ1N0(Ddx9o4Lh|BxdzeM?H0)@42Dby7BcISmhPkwzK{3 zhZe8?VU+y-(V<(eC2>pc&Ufvz()4O9N52tstk(x7kJ_W{l~yz)eb3##KRT}XHqESK(z7!a-X0p7_m6(DoPV&( z36_U-Pc@zD>^FOL8*`3r8ga~L;nC%V$yOg~*L>+| z(^}))9Ip&_^{-`jZ=a>5_9_Z5So8DgU~KZvRSmYg=Xg79AG9~XlI2Bzyw~>F=gXT` zgcc+H(CpakeJ=tsyUZW;LhIf40=da$r@EA?k`ABd+%I~+@7RH8Rm^Jy} z>4l(LiFVoMZ&5FHxXmN0C`Wuc~)8wru z6VxbkhUfGwG`e|rXVSLwNqUs}mkD7z+!{vT|JhgLy9YBD3tqT(L7wmnMOS<*-{dvB# z>0DN1Wyfu!GB%$JTaA{Q?om#0bNlgSh?>XV6%SL^MyB_D&U5n~w!3QAj)FZ`A{QKd zwD1Y?b{U(xzNzl3+2w>>q5Yyw|kWW5l~HXL`Ki)N!oCEc{f%b{=y6 zxNYU-t34*Xe)6I+)Zfm!^1v0e;>jTH#*_0#@y5m-H}%o%UOOsO|H*i|*3J&2?Ydgo zt}fpmn7JZ$%w9P;Ip5plf+kNPH0p0noi{E-Px)MORc{>dlqy=6qF-Ll%o3o9M( z{?Nbw)+@AuZ_L7OH-A;5_#ZT!_Vw$x`938lW+{I^`2Bm>f`MtTmTzh9`tkORLiJ;F zYAnh-TxFl%*=NM&JF{=Dur5E{-Q}3`Rnsiel#9>1u5$8x(c3NMa<@fE0h)7E8YZO; z@%DeScMf&?O55}vznF7xt7;5Zuo|y^s;t}2ReP3dyI@sjKK`pR^G)OqJ(}40<=FF+ z_I3&PE1Y-z_?UCj%$^aM-S``?lxI zP4E3H>#|3rPd~HkQL0PT=b6X*O{^LI;=Duc_*zy{rQV3Ley(rbe!L4T@(xuDb$m0- z?&2sn4f)Dr(W^Hdx5_B=oxR{}4=1g)x;{bkI=nLIblgC0+m#oiE_Dk1{8;z?)hpGy zjsd6C@9w{H@2dNltDi2P?cJyRQB70&V$v?d?s|Kajy=6R)$?`U=;_Xr_w5?j(Q^hV zZ)4&4ZKvu(!h1ya-*Uy};hxfnIoSu+jHM82? zq_$sYvzc0#bXS|Mr+nAZP1vN>**W+AdHwisw1rk)v}1to?M-=Q_8+28hV4J-G}6`D zxOV-0mx}G7mE+EaJ;v1b@&uY4}5MziP)KI^%gfh7vj=JAHvZ=IT(x>KMwTmb} zO*zW1pIw=&6q&f`@OVn}!cGwf>-vY=e4<4y*#GWxNK8_3WBOVLH4l~sruCuVWo`V& zDSZcOu}0^!9R|I4GNE5>z_^_2Bp3OdiA`7Qo)vXEVqdm+(WCpf)HkE9Wk$W<-x+IM zeq!QOrq<@mRql6|U)VGLZruK+FF_fXPC9il(hnz--Y>XtXf$)*s^K=vO}TGPy!1kg zsvNg<3ZX*?we0vdE4gty0|yRWGqlG6wTMsew~(@*e$DHAc7$@a@8lydZ&w{prp)SI zK;CIMHs#00z!F`b!&nC3>C^Dzip?Q{Az~T>zwyjFKrEf zUvk^-{-`kxGo7*N&oyoh8-42Yl?^_33m(hgi0;%#dK;s#IPlJd)!ueq{Req_*qqS~ z%b$PamjC2+VIjwq2hL^9IXR;I=ajSoJ+kxYJK__k+uO&p44Jh3WkFLawXNBd$&_c2 zjAPd8Y(Ff}kJEC@$Tk`hZuiag*pg$1Ke{G<8A|VW>S1_#?&RMi> z%C@_X3qE~xvh;emX6odPiK{gVmp-IVP49beMGx1t6&H&P6`y8fk9!Uq5^d1my})-h zZyLRK_78)7Q$q(W)3$khJYbW`s=3+QQiCF9jmS4YaJuT%K#$lfTbCJb2%0>6*!JWT z#|_48$_?;~QV3e&nqPF{+)0h8olWz#l~g{BolN#VQ+~i>@&Kz%lY>j5EDs%6UOC=A z>i&?JMGenV-(rEe_Ji-PO365#F>A%Slun#(PG01wO%`95R1juA*aA*H_UEreBwQKk0SqF2f*amz5tCm7m%>Wo(81x9q3k0d;Rj<_usN zc0R(|??uW&A=iC^bb}P_-J=%0cH4XTdjjWj!-~px?;>v;-)y?!D&9@x1 z-W&KmslVLWaMb|w^@C@`jJDkPJa5%OqendVx#wpLQt5gjYpb5z%~^{yy1aZh`;lL6 zvc(IYPUykDwo7Zu=QV%XaVc5DtbgCxl*uK1O%A`*@r=59#Cx35vlHKpkIuPssG`UF zB|3ACZu5P&R&J7hu+Q_JX8K#^lAX0K7j~UKvKU)veQtvtL?kQ^(mFZ@W*E*}P-HMcBcPH5CAvHdp3uRLYU%j5bNruNja)3a1sG`HjA<*e?=(`I(JPFWdt z+ZRo^n^zjsvGb2v(q-u&l6vH@Qheym9|gz1ng5hFm$?l<|ReD65DFk zu3zG&xSWVAd3sT^sdmKNGTmFx?tUFus=u@2(Qm4XJ9>34{yg#RvT>7_RN5tw$-J4!LC0w~plKrCf5EdQ_{EZxwIc57OFO?uTw_{TLF_=~zzfXCD={ z3A_4*gc_+uonG;xyxV9Gw9taltH$clx*k8y7SD6qN#D5d(Eh5~rbCic=RSSCAbwBH z>Io;;M&I!se5yb>G)`?u#qE^_MlW~C8y(P8*20G>`;u*HPaf~O;^ga-m1LL5dC_WD-XzprSf=Sj8+z;3{pDr{`?5Y4 zPwie}HZgL_x#hd6=UB*)5f*KC{96HY2*-xJvXQJI=$H_#iV5C_&xVtnJE1F@o-Jt%+M)|SO<@e zHE-NDIbmP!H1Ziu`Ix}Gar6;~?+32cKKON5YX0#8%U6#tQx*)qI&bRLfnUv3jLU+Y~Q&KvEx%WFL@6m!=|2cvt^0rq(?3vn-iYL9QT6N=Y(ShDi^O!PG#;lqMW=yDZWM1DN9d%B9?L9&127U z_G$c_w#}>?C$zV9(&?pHi18%3eP$gDVPOU;)2Pqnovw{ro>f3AWPqMjC*E}WE$$j5 z;8Gv6*8dh`aOmIC5FoaVM+qWKv9Q;-iZBOkIaX)aVCGolar_&DBCZKfGFYd7ACK}T znsb7Hqm_;!>#-#yjQ>nkEf_tckUknvzLx7tXIT_%n#e#W;_au#*mkEjVUYfFryAtr zJ?c8)sSoKye+O*#W6%c=)$mPmhNKtVfE3lOfCcN4im9UqH+Wbq@O7B&Bb*m(fO3pp zsJ(7^1UB`R`Ez;zpG$$92*tEK&clmN6!q=jhJDYL(}B-uQoTDnsPfwi#*{z@>?Kp$bjm-nJ9wg16Ra@79T2sTw>C2z${W?LHJLM#g z$bAJBkoDdqn9rK?+eoz1W{`hVI500yn+rN#SC*6c9dsO-NNi>c+LUYam?egt4WiZx`Kl zPTRy#WYrf*sE)Lanh(6Y6nz7Rjs$S#MsFn%re>8112c?6jj5AfHL9^ z#Xv~JI08p6g?8zrrD3@wSXI?gtsK^$uc8aJ(EhX@rbbNmT?zWf!Im;zw3=CTKV_3% zcz_6BC!D*kdTc&Ed)@3$@!OIu37kIyS+ZIo(<_gXf)rA7k0S!c04QNZ2I)oGn+(t? zug|}xDfjf{KQ5X8j(Q>5wrj- z4@m`ZPhtSqWf;lXRv>wC8>`a7m@cW3@}lOyQoj?S5Q)zqiDauoWw3zh%SPH!Y)!It zK4-~K>z<<2MB4nGO}iW%IosFM;njp@R^b(vR%lA}a)|kw`ABhi9G4Swx$$X1UCU$) z2H#h!T3D+P85_f@o;Z-omlGxNWzlhp!|WH5=wU9~QkU}g?SD6J zXK%;3hddlp)^YWFWlh&mO$H{Usu;022~z;bd{-fbGquZ`lEo*%P^)r_ zuI{mQ7CLmn=_!O96gh{d87qb?JEdDbaH6WTQi%^q0Mc}jMuvmk@6QT5;^cCoD#69Y-TZrIiCo&=p)pBRieQrTYsRnG5G zanVe=E~iZmI7vs2YJXB^A!-|D3}Ny+afpNCDK$V>R2BO3^JX0g^p7Xiow}WE$~+0t z;;Xs5yN6Hn$HCay+Q?Q}_XNs8Z1neDji!Z}n|8N!whDJYMzwu&9PrTM1UM`U4Yfx6 zVdA289;V(s7hP!O0fgTs#I~_+tm_3dq{`5lZDOyUI(dS0Q{g&G6*fvuoXI_QLG@O@ zdB3RPmtI$`g*58HG>%PpRH5r#0UIjWxc?;S<7#Zf z3kz4Q$tK<7?)bY{T^dMEF-_Wm3YT6U8$o-#KwRI672!Toe-_mY^WU{ud5J-QI8?u6 z7TVba0Of)*t=T5V(>EDe7ms9@?iewU-{)=-1q|sw{kB!L!VA(?thQ&8;{_0?`~AJC zCXC22@ZZWj+JT=2d`DZ}=-fpZKEXF4Vzc`tx#^>ZYIr+F2uLhJo(1X)aQirSE@Pbl z-Ana1;vuqASqqY#04KK^_bZZ~i*zy}Y)@rI-sMaFA3=nfYP;fp z$-5duGJ{Fn<Aw{D3K&%@O!ejccC z_DCA6@|1tvx0$>nFy;cAd+!bI zwA^Y_#X3~hs||W2|5ylE%G}9+3r31k(JU7g7DmBN-DMA)ziRujd{GxXn>+r|K6p*W%a&hwCA zQ507CSy5OhS?Z2x|)aCq)bINo!&%WvV@WqQz z-ks{6IQEgCjr$h1=$7E9Y<;(|d_KTZq14m>$NvGb6ghcL?xUUV?;nFc3LS_(D^mu^ z9OlRr%mdTF`7A?NDI^M8T=fDimyqtB+nUa0y;%V8AeyO-^i z6dP6+((on$mupkMa2~{unOBsnMBMvqUQ1Qrbfo#i2{839#BqX3N5iRj$P(?4SDrQ43_Lr5%fa~9zoOdsYe`h>&NASji|fQiv~snU75H}utw4Uvq1Z^a&p3XzWeE0bCiW|rF)$m0uILDW zzhU6@T^ScqWeuTQx|{YVxUKrbFX$ul@;D&O5OQvena2bSZV6PV@TL{_1Z$W1U-iZe zD*KWEzrgWvgsm!PK$K<{w2Jt~F+{(Xrt-C^5ytcD%U{Z35e{vZJuI95Te zVXnY3Z5(_+5yAj0sNz~A`p;V8hwdCW5gN8}UAS?1`suvt94zvNRxg+F(~SUDW)G*( zs_Mz#a0b?(oRB%xy_Dzh>hef^?d<0KNK4m)9QGCpz3juBqx+&DOXu=8;8a+jh9 znFF1NkR~|+hJur+{V=zG&62>)Nc!i``nQB!cCS~W!eZ2XA+SbNwU33hPdhe%8S0gk zu3e+c2|xCB15_#qR928TnqSR6j_vg(Rs1^p68T;%!F2{ihk*r`nCoS9+pTNHHKgFU>XvF!`h+SgbFOKO5ID?QEOf7}5F_ zP(^nrw->ouf98Xigd^v~xkcPvkkqFsnko3Z?;GRCv;A>D=aEj3XslVK^UePz?W2Lx zlxARxLhj@4tn&sd8C#D9PU$dY9BqTg-Y+zD)Tfb-Gd-2yhTVe!LPBgOAKs>5+@MNv zJBjZ+t6vM%_|hP3!*p7tRs--nRyf4&+M)_4uw)~7ZxC4Nxt&$byNQDw^6Efb`N+z@ zR#5<@spx#y56v>ZPbt|3*Ec`)0snSA8z`7C^t3I#b;|OU>6k;MMEzPFKb!L&tul|+8|#FO zDBcbcfb$qEl%DH>BUz&hW1jCXljJ}jsO=tQqo6qMk z5uLbq+ZX#9gn{wGP}{i8m*nT}z(7nRbVb|#(w8-6b>A9vs$daqIy1s)1A`| z)60Z9*s&cMeX&6;{{or8OCkjH7qgx@Qz`{Gt?`V708%;7-aN%nyG#F9((U=u>W4Kh zB}(N}LD*ly@5b#>8Xt0lOFm@!avroXX&E2YKuPRgV2u4^l|=lQnC!U<ial~j) z#%W%n?0QqFgMmdicF0JbS7^;EObqF**r94bjTpUh_^ErSYP zJ0As`USy{ndP2|O%UICL)Ypd~V!(=>Zr{f&L?59MwMVZZ?-{-ZK;g~f@})`ub}CG) ziBgOF8{rH=voDpJ(KbEUtk&jKfd3%+=NKTw*}7QD8Y~**hdLd!{k10vl^q~9_5cpDP)Lp#X5d}DdL9k7?2ikVBuOSTifzNKi#dtZvS|AgaI18 z9dp5Xm}5@IYx#!z+Dq|2(PTKA&%k!ag(4y+Wi9zvQP)40Filn3%W;TpHvM{cJLXPj zh7>%{vlBEY<^ca)I3Y@LD+^E^Db0uR?wuL^W|Sm*rwf~RilJl@4G?LThP{?$$fcfL z{8yT$d8$5*QwW1o0;J&r@>W^KgP<9i;W1v+h^za|91Yv=oPWK3Vjo%OAqr5nY*h?iDp5c z@yPy&*BJEFjnQUdDb95gf{?M?vb>-b@o$I`KtW9JoAi?Js5K5uVq74Rz4&sge4A+a zVVN!p7-`>o8;!HxF>f6f9M+qTAo`H^PnHb(d+sVKuBXWwABpn3kV8gEB6%Bhk!e9C zygpog??fOk-4=P3lFwITV!M{TQm;jYk2?oE3E?lrP7oLBS>S zpYi7Cf&>o0Y3NWEr5H_h0Oap8QIz}+CCQE3*Euf*_qkUNWd!f-i;qVM;JW27mDlQj z1_~WEO*74Kn^B{0@(tP)W7zSnfQO2crmJ(3xAP-b$nBMIWJrEdmYd*{PS)U5YYE*Z zsrxfXbv5m?l;_LJqPCcSCk&D{X(ZS~0A2;IKPxo^C;r)7yf&=Pfexe|B`F35vB$x@ z@BU@?S=`r=ly9b026cY)1-ZRXs)~zW!VHa(Itw;4T%2dw{&lbeNcPYf0!`f%3`xP+ zX?E~{WbN3$1vCSa`Yu0^TT=A5VR?+s_#htc$=cj z_g`IW8Md}9*R15wTvzH~T3N{Dued~tZOr8oh5#cg3Zq1*FxzB5`xH5oFlF^p%`xfa z2r5`4PeO6~F08jHt-PRR2L^+v)`rJIF=sg{mspwm<9uIV;dxezhMKp!NB9nu&SEBf zaP)+QU9?Svonf1f)lr`s7a`jLi#JK)`$R4$EaQ4IkBXm)yrO8CZW}+#R}f(W02Ix) zU<`noY&k0IT72j0w%lOm!aS9bjRs*v>XoqB*RZo2^%Y6^Dr!CK`RluYyOXvZ_m=8? ztCqQ&WZv=rMcMZX*90J9(XzyX(tY>4da}sSU4TG)kA+x19RWiCI?$YSrBPh&ERjoI z?}5}h-?*Gz;qJhT6i;KKE8fi*17rjA%gq>8%NHeViC3#8O$nV-eH#<1FY`(N1Tcy>&ph#qWP~S5wg9gWuY?!7xdQnDOm{pT zQ-6g~C_`{oyAeZ9T@E|g^6Io2JbB@t<@dEu>FDMJHQ$aH(JdBk6q05eQnYv=COMV&#%Ojtq%)ns-FWJayb1w?kJ@pUhAgPgPgEGf6v9CiFKUY#pKWj5j8luy zj2duF!$$vTkikFXc`>EGU17O~ad+uz$*duoA+2r~>}g3= zVax+dju}$`Pf+w#gm?%#1W~{ez)RDHF?+tOyuUcRHckP|+*4r+Mrf2E3=%ry&sua( z>MB?#)7e&#X;jQS*KGIuYT(fC>KX(Sx5XD{Jww>AZxkC*$Qq1x;C0p6`R47VQVH%# zfZeg_REf;f5qnzRq8`6Q`E7(|RWAt)AHH4Mcw;CMUv)6E?gGKXvlorO@2ZmadER5G z7+=Y|xj}k@$LqfapA^RjGe44{-DCYAO=o@tWIG zXymKbGab%P?=*hE)!!%0Zcsfj_-s)8)1G+MQbQcOwbSsCGZihC7o~=8ErWY2(0~zdH(LWri2@hWvl+(QyyJldVWAOR3@BLO7ljf$aQ;EVThy2Ysf)P zcaag~X3=h_r#xX_&*C%)Hia-kg<$ZkFC{*`Ipk)FwNg2UMM5hZ;WbD@EN=|tQ#9_C z#PqE>m4!nyj6?x!cEf+acdvZqG38d1H)^I>PQXAVHwX$=3v2V`r(y0^-q(LZ$`ya? zSh=85&59G2WwyD>D{iCQdOUhwA<3GVM&!Qqh?@9VIuP4>hDTX;<~pOggccdeJprgfFV4Li}y? z!N&3MIdTiJr$$?JuuKPb7VdupYT;Ekxg?7s#k&0EC?(MT#P#W!KETZ*gJb)t6Zi)s zmD56Db?HYuSE@^JU#1Ca%S$C!-R9!y?w6VZ=6yWYE?{bPfkjsmL8W{>p(}xuKX3gA zvL?Iu?okA5ci{%8EqRTy9`hqTEBe0IIOYkEGb_b0FKJ}a-O+#;|N zt1x9Nlo^L1jV(1*D5}375GJJsDPDWx$^BjgIk({-F;@?wKwv;rT zBTeBH>ckj9s~+Sc_SybPviw4O$FxnBv5LRTa>wuCsd*K*vEIKLprsB1_AJD{1^RMb zp-N;=TU2Myw73WP{=IlDoWe2S7KQ+*FdGKvq<1Ife_ zEx`12*H!ZTCACyj7>3;w(NNE0g$+uBl0Q>fs8cQy3H$v|qsf5t3$?`yePQ%$X2RSh zOIEikWY)_LjV00MW|r0*>JVHp>Gz~pS*y_VVmH-k5ojtWeDen2(;$c$NbLU>ND=hW zzOzmFO@%gfw%SsoAkF=J=Ph|Np+t235b!HN_@LM!7nXEoDe-*#coJ$QYa{hJtSPPp zRc~l1l#Hb*^hje}coT-;lmm=-_7Gj^+vIRSx0|G=FA1BO0wq4@k2$63lpU?xKn{h9 z0)Ja30<_mo-n1mH`1Qj9@qx2&9}iwfk}*za-WbVkaszWG>ia9qi1bbLG@rYH5e2*b z8V%aRN2|5=HSZ3ohU+8gfW4e2)8nc`JXd4Taxu8O+iuWzSFixT*BSZJZ!{EyYTZ|#+`&BU9yetSY z7{olKpMETB1*b8j*Frxg`uA6M`KD~*3#%`-c$0GRyOM+$8Qa!-pmhvy#1Oe3adnc; zct_kAfZ@8CLF5Vw^Tlb(&C*+tI6}0NWdQ^8tP(Lf?4?%0&^Vgr{N zXDL1lo1W^%+|!HoPn4$NIyfW)1+j<72f(RX0aHholR z@Ux+K_z7_m!)HILn1=43TvR^qbtB{F@Jz*=(?9DWjwj#}1yx#B5>dAcCG5nlekp&B z+V9c`p_Q971AleTN+yqXT60h7)pRMH$JKF=9C-Gg^)r?Yyjiqi*&B)ap^)}YjkP_O z86XW=7@5><=SN=YX!-He&sEHWU0=XfJu^8rEZ^%jbEw;t?9b`LX)X9k67AKhFdy54 zo~#*om_bmTRKlx*I_^|)m87L8uHk3TJ=O$7^pYPp7Mg~5yM!VmuBdE!iK!TCMHLXD zFG2rJri1y?zD(Yu=!1WiDs!tJjA?`+YhbJl4o+~BFpd$x>}YEk8`=#QSK855Cliv$ zq%$$0ql`612WM-M)*HFyaKeFxBP#A&s%ANDL1pOJ`m25d`<%8#?=NONq){mnH@#4Y zZY3b%L>8t&M?Gs0#2_TxjoXu~*bRn_i@}~iVz#R~^Oh40W@=-v`-Ll>69K*}4xuow zpovs5Gl3{%%>bnWJ4+bwFkWB$9OSg&QxA3^L5_ne;yxGl;Hd@<;vVyQSHtC0GA+(- zwqiA3`5pJJWSC3M=&PdQsKSwQ0CAfvInc10@SS^+1Rb^rE7+v8ic&6&FKXw5q3J5B zb>srPJYZ#INHgea78sCkWIPZXD1E^=6(INBu2J-eiKKX1H?IcMmbA0`3TOo1*_%mC zc!?aSZHpqcs5YJFZchn~3~_T-2j;4Hob~Zs{{R+mYFuuXJ7HsfLcE4hqO@f0i~Qk# z61qfCM09Jk*xz7ISQqSm$Nv*g$lRRI$c-fivDSIEb4S#_pHSKx!!?+1bC=)u^J4?I z`r7#ecGq31-dla;-n&{@p{r|A$#w`PZno{Uxu~c8@|brn(ZOVdB!|Y3isSs5)s@pD z!A|>Bz$~Cbk$m)=cfqtP6I`8FqPtr}#j@@_$gSQjrEI_%-nN)uFMP9Yi3rao{PQr1Tw7?(Y?Q4~~A~;!f zkiA@Fcu=(#0M>p-A@f)IqCTnz{2N--tdiSIUqNq(&3KacFwu}eXMdeD@;fqcMgYgF z{Xr7WFkr963lZF=P|Fm1?TpLdJelH;sP&OkY=|EySDx9G zyEVP~{;TJ&Kdg<)R*JzO(FX2@obqb>P7#g9rZjS1{Wr&XLMMl~q2CsC@;{Wmz4vuX zsG)!`TlVs;s!iBH1dyRSm<}>fFr1gTy61nbB&lmp-5ZfE?ItACJnss4+N^uvWG(%3 z@3gY5@>LDsN7%Qr>q43XVcHxYc;Eyi`{}UinNw`z(`51qU-P^0?kKo%psc80ovVpu zm0(vn5B*z1l6`V*DY7@a^pX}X^w--e%{OW?@Jvke)PQk~T*fKntMtTh+E7dO0F)*$ ztvuj;qps@d=(5%K{Os-qqCdKTu)d)8W=W>mhC-_3Ytw&BWWx|LYC34fON44GtN$6$ zVg+jM{Qd$~L%8lYOM2zV>cE1968;f=+A1A-Z!Tk4>U(UsSJ|4Up#@lyUQg995j?xi z1hBLDYgftPbyfmNOXm) zd{93|xc+PT$XJEx;>^dcXD^${+OH&}2*+Ve1vSuWQnC4=-92z?eZ#AOx)7mO13YC@ z*74eky1t{6M=MA{&}Rj&1F`~~YT)%1bE#Ih-e5) zo2aMZYWF4*OyJ2OLgA~V%_ce*3{k^F&s}09 zyAK@?*!o3Na)Lj;;Ulvk0|!c3SQ=sYdfUh~=RBJ$c|6&}*}09iy_wjc(g0t@igY&r z56X>`)zOXUA$H6ME;g>cHX`sogu$Y-i(1n55Fi<;in$(kOQ5D+Lnhj)O9F9D|12?< z1~}0n=TR!~DPJhV$!-laMs{EXL(x18OQq!SP+)9x|J6kf5 z@LevK$eMi28b8nYKab|Ia+llm$4&@>ToxvH7PdS-WrLYKp*0syK`_tNhF$je(Zs4z zQ5@SYX$6)oQ@xomf^U;T>&u?+R}in+leTh%qa3!Y4P}-{BRnX}y9LKjU(gKvUKLu1oJKk#YBE`a5g5eQ)>H{UyI(v5>7gWk);4l0PLPM0Zk7>kQS2KS zWH#UA`dI#O($p()l|zh3OkZ*so_Qo^ETAM6okcy&6wi>I@U4y<{B#a&)4v2uN_%cp zN0OV>%4>shmz*bl2~C_btrN(*K_v@*$WSsJEnvX`y z0t{8uzVW-%Vn>HySVPxtJ@^viL>J-5!?zkwu*}Iy$PV~DJa5016Ba(HCvXBK>Q3v9 zY-#fpIGGvlMX}ue(6gd7!J+e(ntcfVy#1_~*-u0$MJHqWdlx=HV?12S7w<$p<}ODc zx{=U$6>e-;ie6+Xqcw z&8Upuoe=4_&o|JJbLw;>35Rc?<_l%Vbt74x@oqt2QIpo2ED_S#ayQp*qw$q2P5RD_ z3HXenhr?aGyM_2WwMiHJzH+GNms}M4qV}Exfs}FAipI=Rh=3+6+4jtu*D9UfE5!En zx}N&PW0&F>A1LR)K}=u=A4NT|j=`*WVh}jkU*Zc;=irT$s>S0$Q8G9{*54^!culK}Jc(IC)|^k1RcJ z^$+iTGs5-X=5;Kd78+}$g+VA?C9~T_teZIZ|@h95LYipw@1`QZOkd7-eniw z;frW}w`K_P98VGEtIY1uTCFyR&y>sV!zt41PKzt*bu~5||6|(4$CziFCKNvSL0XR( z15N(v#>d(w|90q+LRzvQyxL&(SUyEy@1JLuI?tIYhX6T{L*q+AC9p06vzbwNlJ#QgDlU`bi_~Dgm@+EJt0N!xdpdM1<-y!vN+ak} z@NCN@>j@0~N1R;>bh9fVSxVkYaX2_F&%Jd!!Dos z$gm1qhcv@~`_E(KSO!JjZT^-q=nlP7apV3MMrzntc9H6uk&~0V`n@nn<9(EY^2f8A zwZ?p>3pBbCfQNwG2UJCEgto>!bFI_r5N{-&6*s%A@@{a3apEmIw zuy=AL;#UX}y!E;@xkdZj6G|)@$lozZBkPDKWkZPpuaFKVyQfGO^LO%yWr(TEp2!y% z5p)%K%Lxn!l=AN+L2RkD*~DmQl0*gMuSM>}UK!C`sk^-yuljOco;!W0dnH7N|4S1j zY|ZccsLwEl4n4Pr^ce3pN2}Tzx@Vz=fJNj>5nx6 zi4d#s=`Rh+q~5k5zI1O{b0}6Ya)}nYuR9j@H@IzS;_E)%Fuh4$T2c3svs^s)FOvu} zYm9>lg>}sZ3aRWsQjkoXS0vDSyZP zJ?;H3^Gih)p{#oHA!$!;qDR8p=$uhn$0qWjf0a*&Y}Bhbn8I!^^>vlzL}iU0yt<32 z#1`-LXg6y*1haTh(^Qy%J_193uvF3QY#Gk6-p8Ezn*DSik2Om}FU2t6PNx|2TWyOC zNYhl;Al=m~O$6z{CF+%vAz%fs+$rjqyA9Z#kKcdk+dj>9-+Ba(FiO>)%HP4t=?WQF z=|3nI$(`f}_UbnC0NTft%8VhTK8U~v_zLjwLGVbvuX%Gy8i)7sC`}fGG$T6Vz`;kV zg{!IYKWX#$T@bqO_(pL2ET;b~`B6PJ$;^r|0fj>?iiDn=`O4iR=E{rlKM+>)<_@y7 z^8iS(d@*r5$>ZVLcC-Ykoz#7U1PPFZP>9cuG7on%X=2%{tGFzcz8g;!+@D{NK@{RQ zlQVX|CHt!B0ZYv%qA9vpOnIs2sxuOeKBpF%eWK5<;@t_sepZk-Jcs*5@vFi7RpyBe zeJHv8u#mvrL`)S3)Y8BxDmb{RfK=6yF7lY>LUOQ@W)+$iw`Q<#*jAA(gvT^KuVzq= z2{MQD4PHTnJ9U*c&+HR3?F)qLwakaK!Pdi4#4>MOpXjmTg{warG@3`J*Umx;Npp9H z>ztVNw=p#&z}$suPSG&csGBZvC%X2*U}0g1D+cgtZ-HH?JlHlE3VVA;XNqt0u4BxA z(rGVPXZMn@S@uyGUGvz-X#XTKTM6s0F}tvLI9L9Wqkg$MsfAn_MvK2zBnParJV?P` zgSCtPL5pZ+$8sD+Rmu1sLkA7<20R(YyNkqjcYS*k^UxzRfbQdF-=tVvF0-I(n{g(> zuexTDy&lc?1?puQ;%N}<$z&thw<155&_(C5tSQMJNE~)m3k88gOLMR&=RlfBK#{}% zl#u38y`!JpP%;=Tq%S@r?j12V269*%R0F{~Hvht(CJkSLZeN+mR^u zA8A$`c^K5U$e1_SVbE?OeSlYmZLN>pe7FtIzJ2dmm#P7ne~`rUQl}xoyY8YJE3d{e zhf#Ky7d2#yj`MnZX3)Y={)a6#^@hIacI**vDmtVsUGKk&>U`TQ6j@|y#fRz$5^=GW25 z9^#}1nt^k=?O(*$RQBzu7LgcI33NIh^l0K~DrAfLMQ9{a!i8$Rv96p^b~^iJPW_iQ zZw=;I$MzvxBY%^68aEcllaF6d531HxYlP{2QqM;ejG8xahb^=wH;jNH9w_vL(|aT1LM%V z=$5d+-&eJe#NVzOI6bUd-@&6Q<9*(iX2h8vk8=TXD@zNkClfy{c|)eGt-fx-qH`YqB`a+_4?& zc3%=BUwMh|5J{U^n$Zf*&Z%|yk7-b3uv03wYPi75{fKBM7jnUG=4e3>kogSBxrhLK z)KX9Sk9-zSE!$B^0{P!q zGm!&2r5I z{Kzj!VuoDcLWA@~#f}~EXHO&fOY7flb6n*Dp%d~=ph_ih@N7t-9!cELnT=HQ{g1`R z@@rAGJOGYJ^POzK2j$ke($6TJgeM`S07Zur*E_v*-imZ%6wFLztKjGQnK+>5#2+10 z9C&s|zM1!k7Jz91?VT0NNGIAGq|~ZDTFI5lwwH)C@bP5S>};q~PKW%X(Of3>doKI8 ziO1wrxN;h@*8o}SP*R@mpLBwlNBE5EZpiW(jI70ga?M>^Xcd;e6Gl<&!Bk|qq15-v z<=pBBlSrIip}=z-!c{uA?|tnimeh!-Lmo`#E$^x{yMGboL<47zd+~opw~|woObD$T z2-!bZ`lLFD|7AFMu_~rlt$}%oxrq;Kh86la96Kz@f6h~St+w}^h1RM6fLgVwMW>Yj zcYL%i!N*hb$kL>`X97D<50x-8Rq4dq2aaw=(mn`$0SFYjaEufV5z4BrdqiJfvs`+! zuo`&H&?6SSEsQ+$i40}9Jx=u9!HAxgwCnHRZ%-UKe{**# zINydm&lPj>#e{Dd83gm1vjWefs>PwsVzpR7XkgxyB!o*|5T@TmU(BZ|T$j@lL4yg8 zE16K+VCHQ{-%B@fg*{f>#E`;D&M`v=`=$jk#5EdOHstV1{5Ghu?RxGOjA4jOUw_9ClHHUhm{xnz!1Tb<_!uNEV1 znJnhWDd)+XA(C*{2)OT;vyssEA?&Vx0j$ItJBr!ntsAMYnuzVo9%Q=xs>tt6f^W&0 z;w9e=edGepBjx@VCYU>y)9-G5hu#+-Z|4C`oZBh0hnl(c(3P8RK|VnAl>@#>)NO`m zu^hyOl{of@FxJ@G7x2Z^Mp%Mc^00+PPUon1?mdTIi}0ZV(#KC8?jg5#CBwYA396qlff*ko*$lJ35UK6R0Ty9IfLML zxqXoUj3C@%o){zoaO>?4tg}|Smlkgu58I2EgSM(q3#xWq_Ol* z7>{%5%*Ko6c5lON-gikqC)$go9}z%7ipG0*dY)z3D~i@=s1|{f-rINUfH>elchv+| zFMUG7;LouS?!Zj+{Ofd_)x6yf)Jb`8t(X__`PAD|3Pke*de7tHdwAo=5NU1fED4ui zim1-eZ;7B*Fy~g8Xw^`lei9zqz%C_acyU9|MOkHGQ$`^`gw;?%KN}qmrN(S<^>7Wv zdiOuEV;cxuz!Kq-g#A1h*TmR-6|CnY6>it2Ch&Xy<7WF06~7Hc+#cJkiZpr4oDG<| ztbrd+0S7~6z2_PQ0!)pOxWVqNXm6V+>OSP;+%Lg$=?r%hT9fZT%TGfRphM-~V5Lnq z+}IEgRd&w*InDbJF(t`U%Qm!o4^S&W#&B__$WRz`0{<@x%M z$KmOK@CwZ+Dmj#c{i=P0(8mPSm=qBkgt8Cad;8g!S?k8152fxQuy1;YIWy&VAw*!7 z@`7tEe@5o}+k6F0K)xtiXO=pw_+w|H^M zo#xYZDckxuJa}bW24BbGcLdy?9$ayMY=_O5!h+LZ(-nIcf zmBw@FZQBtAF9W~4Mf*GDm5xv@aS!{8mVvPYQLctXpbU@L2SfHus+*Ay3aOO)Ovcmd zDlNXs4bkJS$ZzIUfPCA&+~?JjhwNo>SgpCH#m~z!IYQoCKw39Uq{*~GWmR#qFkm^x zALj(xN8xfna^(~~)H?kGnq7uVR}E*W6y>CaI7?@ddaautBe}oW+5IZibPO}VN8m-x zm`+q~nVJr7hFZ?J&-zdQ0hAi4m8h+x2>Ojosd0;ZGkbl-T!mMA-3f~JV#uaaS_2!f zKPJD}EFg(E(<}QV2AjV`2W^!ZC!MKq@kNFpnXh8EE$}I2y`fK%f|riJlWc3go`ptg zA4J^ek2Q;n4b1zSXOBFv7hRY5f`(W1Ap5}v5a^b@+ zh}iz*DX!4_tf_$d&q&(l@@=^Z4;^(Sda&?z#X%-@_DDt@yXxf`fbvkE7T7%f6yW-@ zQU$C%M&|RhZR>%=_^z;6uIx3{N!s^Y>}%>j#YJ}%2r7{lM;f@Pf@AUBQiZ28y}39& z-!_~1CB}DyR27rdAfO(WH20XbI(-5r3Qkq6FobHTh2M?CZi&Zg;)$Kl45DTUPPO-bjMKm{?NGjC2 z82o8gCRoh+|5GsNT~?vpR>X`HTtO`(f~{E?J)x0pTnF}4*Gt0na z3h4`Mk7jqwh#Qk~k8c%=okmTBP^z#zb8DMHLgly8<5*dV=QdE#%G=VNndGWb^)QpE zzEL(Q)c~7pLpn3-MH2OX0cCWrW6aZrTUX}<2s->24uTQkh57NZoc zHCC1`%HqvXOn=g7ek>>i$S8is>P4*})}a25aC>~rCRvz(uKH#LuSSmiB8@<8>*zfs zr}Dfy)z!X~jp~~Fm=tlz06;*$zlKl*@8^{{v+KJXP1RqPPwNNPaZ|oGQpx8_@gq)& zm8=;*4yyE(Bx>vz!T;kKc&Z_g4+Ty6rZp72D9=Hf)xL(ee%N#zE>y39_3lL8apSh9|*RgZ69o;O``Tf?v`1zCts# za>?YZn+@s!3ymQ|dHKhTs+55174+lJeifr=%A>ZHNs3Xz9+&&ti5cgH8)Q_ zl+F^(g`Pod2K8=nw>IS_a^eZok=n_GP>PKr!J}_kyD~Ff6udH2gbw9y#lnOIe?CSE zh}?_`mwRhm?o!X?oBl?|g7DQwxzwwf;4^t_<){m>Hm6W}B+tu0>ghiYWOJ#5T_1wz zHv483OY901Qk1^Yx?7+=L@4MVYH7?=370r69Zt)&(Lh=B|7Ur&Vhso!YYlhMB}Z%? zh>^_v^BWfY#AQ7!#bj2J#|PXt0P8o1jab|p_J|T|c-?9s>eyUUY{_oe4&ngjEB zggMdUU#t8oZwbKH>|!x{Ra`2xx_^aZeslcMjl5N1h95L2UGa*2{WTs)jiCT!@aNz!i56680{ za+5ojSm{Q!#F`#O0iIuO+13T^Q~ijWou1Vvb?Q_`LzUQ|`C2AOmK- zYg#w9k_Y z9JY@Sf_2>&COP3H%hrU&_%d7DHBAji3TSaf_^r^dT;8QfAgtB7*&yd%IEc1oU`Bd|lyK24L{C~P> zt(ufSk`sg5%RzE1Wts_+AJ-dG-d|POygsmaj;hvUugw!cTk;ND%Z@&|rW*q04$+PB zJ--CmtMnqxHU~>bf|#WFZI^ahkWAcO-*E+0H|!)3VJO9Kvox4jLVPkj9koYJ@a%u> zQDFJ0FPw#^Ay*XtAHo>#KDA8R+2@i*^8ThunjvPSEa|_K24BPXyftzD0o@}^Ba5W0 zxG{Yxl(HL^*Inca)JP}fKLf(jQFqBqVA%QW!(_2VZSA$j1;5@a#meX#`+5t;SlA zZ3LedsTIiR;$8Wx6C)r@ zAp~O^D@x>3_We!X^ae=?chTbJJ~_e6NDyqLtH=rwicfqcLh!Sg7_tdvYDS!wAM4;Gd!LA%~VjXku;B>wkq_K)K0pS%anFzR0(Px+m`(rL(+_! zQr-0DTn^wAlZ`WQrd4;H8Eqa4l7U(3iIwIkNYXb>wGsMH*>ipcD8Qsc0bm8SE+`Kf zKMgIIH!KYRgw9hSY3W;>nnAhlM&p;T(SdP~bhYN2`)q--&=0W;IN>rc~B%9+p ztoLJ!{Mt66O3qtRu4L-d3MbHTzi$-)ajrGuVp*PHQ(>h%`Lyut^vl)Ym$q$ z4t+6x&WxftPxX;vK(#N?XC|>MI5UiV`p>m7-!URVDQXnBmh}Rn^715D!PckpOvG#rnt0G?>PAV`|rv0BQlU(2AzYnLoT_MJDIzVpausYNGUCBflo{m*ypZ@}3m` z2&vS(ADuRIeZZBajMQKaJLk=AQJ)jbeDL zT`;gYsQiU2ixV7~p&C^?*F0RjyID%62bjD-lN_JdHPr)l$f#m4% zzbrYml6H{e>?A%%fohh`=>IGZ`u4(TM!xFp!Fhg8>`DIw&unXQ^NN=VGmdc=rD^@d z&{3FRD#ArL=W^~;h$#y004rw3?|+`1B~`@-OhwMQBOtU#2%>zEj$WBBnHAJ~6WVaA z0k^Ha_l){BuDnGlfBpe@*~r9j|P^-`wyI6vd|^n?3)-~GKO{@%6m`+7R~CkUwu)cz)f@{kh;@J%ik6D+}&-52Dfu$w8IPnF+caU#3L8N;{~ zLmZUwxnQC3zC*RlUk?NEE^b(yA%QQ=jbrZoIm4+JoQIW_Sx4bcfQ>yQ0Pf@mvXUPU zR(w4#%Bk62oGe3R`b({e9_*$HN2ZD`m}MTrLPp5AO%-%Lpt4u!E7-o0%R|IsiK3}8 zexf~2+%|^2tcGsKChxBu6(<7sd}>Oy2sQt63Z|w{MoX;bHb-FLrO*t^r&#d32b+X5 z0+xc+4?HvL6;S(Og;(_eHFL!X?YCB~hHERfi(j zn5#7RXT)z>1-!{}Il3-OL<S@Hnprs?ZrV#g3YdQGsb^7*et=wN~lM-B#_{%a*DzuxF#U`CAVH-3a*pNit(7Kj zF_yx$50dc0=TYnAu!$#9@Or?H#0XZ|!Ki0c0Y`p<{U{w%xHVXA<{uD)G3^t~a|U%; z@nk>R`>1wa?t%EY+=CU*pT`Saq=#Z6v1-*F)A%yo)L8iMo?@N+ph%4UtuB-4&ZS6# z`BTdi3C*WM8TbAzL>a`75dU@zO6V#{?4AhD(TSu<5)VUL!Ji=MKzyQ66P`nwkuXJn z4I17H-U{P~T3tp1ei-{+THIXF&t>OY(xcw*ql(B7MWh?Jtxk~Pp0GzTYV+74s2R9q zn#1(n?35Gk&`**iL(&jqw*FY z7Mv~hQBW%5t||=kv(z)hvebySFHY(UkNf&}$Nh;>b_*8KBoF$)v2bh?RPC;9>ES*9 zh&e5<@{f~-frtnZ&?iR8fmIl^wf6w9rewGAH}f?16o zW@S4@_@g(HO`Z!~(;{;XaGQ9QYjLa99G6XQowf{o)dw3gPcVNwuq6@N>`7Dl5^a-S z0ANwGAB; z!UCi(89)tH58k`zNeDB>>DXP_TA&qS)jx#u@Ie@oOy*RH06R!#kZ-5kRwX z^6rpOvPl!8b*P3V>`}OQQoIAKIxG=AIFy8rns$oOM%uDNH)`HF*5{|06LmHS!Pc_A z2Hk$9r`zXHBmwu`e_{!n{|k`loo~g7DqxZm9K5#C#a@a1(x0dW94>p{nkvruK~9#V z-P(W(FB$NfnYL11tw5OcWYya zsU;1~mxKBSB@KCGa;P?v7BBNJdZ;w;E-k8ess^tMGJ_`56wL4q?p$xA5OOgo0IMOX z?g8{L-}GR(sC8pjAy^!vJ5WogX!xbcBSoepURv4-?RoA#Ku)I!S~h;D!6|0-I_ zc)WCld-on8!sOy1ra7ShDXf3w!>C1+`$01^d@88#Qur?rIWCa7##SWGqtOM=VQ1i1 zCtxL$MBwqTQhQ{o3mtUXHgivf2O7l_PV@kJHE&D7ZQrF&Wl`lx#~l>$GQETCc(Owf zTzdz33$nxv_#i?9P`1GI*=^m0fn&wy)5}j6tarW`P+5L;Ir`>k2wu?2TP;hUOHwx8 znY{3^{mhF9xa!Pl)Y{Vg2@XeATRzt6M8#-cCFlk2M?O%#I~sZw4$LSCSGrc#C~f`s z*PC7(A^GCTC#qT)s=jRd_{Ay0I&Q$dVG(LlS#vlTR+D>D|3`B+IwfvbX|0GCqxnj0 z6A^l?gMbGhou*W^XMccKM}i;_OY`=8)IG?0D}mYAT=Q~$UN8}-suHHcvXDTcP+$O_ zlUV}sgArYSQnQ0Lcw~^L1+

!=uE52kB-0dC<`Jcj*n*c(QnTjuv6q0EHIYCH0^|W`E_>SNZ~e{EExkT7DoJpoWv7f z9a--1KB;EUL5^T4ifV>P+siCdE6sRrn9^TXI zvej>(Q^%YYpDFHWA#Yl;!PpfFn-ZhCz&SPn@=@o&IQyhrf93gpZsLgcx8me7p`j(G zDK3x?B^csmLW=z0Mv!QLi^)0rhF)o_wXGO5804aBajUNJ`Zc(jfi6mX{^A%K9BDZZ zr>}Z|K-->lmhLOzDU|lxH#mfiKckxW^2mC8d5$+s5gG`o_Do|_0aOo7TAjzePYPuwRj>nIKtxDLiKOl9IHr~Ps^q@B z*2^s_;jJ3>?eW{Jk7n)0*kd5ld<@iB1KgM8jJ8`@M#tZ|-B7kTrh3^AQnd-Uc&4D< zgoc(DiQMoD3^O8#Otpda*lYU2H9m0}StYjTlypt!M8;1uC0yle*SL|vb`)T|Lh?J@ zVw#1m`pjyjz1^9r7OKkGP;;G+0oD40)vlahZ*_r)XPERl4;7}+HK+;3vNCxQgwA+ zZ(FA&*D7a)9m=VIJjFP`T+t5lMoCTD^`s%oc4FO{Apno^-K>1%Oe1V7~miN)=VG^-fkd4KLhjGXLl^I z753*7P;AY$dVw1B6N`%CF9PKdSD7FPxX_FFIZy6AMXNl!S-C?PDHT8+Rn4hIFF>}EZafai#92OFr<1tS%W;RlXQm_dLEj3i;vW; zNX37>2P)Qy*?>@KYEAnhj!8is(Q%}pnRpXLqw()@^o9g8OPjn$wuAH8SC1U-HgveLk5~q zsayK`hDw$3SHL)dzujGXe41|{4&=$J`78q>C(V#Vcu}|YbsQ6PUjypyTNpfdS^`fz zKgkcttX+#ES68Tf)QE6iQ2lg@Ah{vEf7|iH&F7iJ?nP*WCIdvblfAz!@G>Ue8a;9n zQbf`-`v4>4A$@KAJd(da>J8Nr2}uT{q+?Ge*%~UBR&;e}?ig(Oa}l=6zmz7`;ktq2 z0BylH%hn3pD?ZF|@@wHsw2LVQf8GK`C5%D_Q=5A3ZVQZ^K+wP(Hc&kS0Bk?n=omhg zT30!_C**R^WKD?Pg2jVV+_H)TOpdv1lqAWwT7?YQptE{}=CfjX=g+a=P^=!o+QNY= z9+G>hI~y+^A5^YHM{(FU%@|4)p0rLt=Sy>dlHNm~u{{^@Ba|?QVo$vs%7Ht<-Ul-3 zQ7D9+*6&^3Td>kPT+7uE}xuV?Y+oh$@l5(M(}|cAZkVixr4{Qwq?VN6#PA(l?s8H!|7=(azUjR|iLa z?ty*Yfv?XKeW#Nc8&Wry3<=oZ{Jbs)O<3Otg>WdPp{TzuxY-`&jCYjumWn9lqC+pE z2S~+)xBRI35Z{aD>d%g3nt)xtHWIkGI{bw);4509sfpMW2w7?6a!@zB#2?@}o2g2v zaizY+rhLLUnzrWpI0-UjAmFzt4J|B^kz%avWZoteP?0*LDl5yTc`xkt1Jt-Styff3 zT&nZ$dJb?U!_npl_oH^*t^`ub@J3ybX9?3gCWvX+McIE!S@#?y027rj?s@j!eGubU z++VkvAa~z3Rd=-h)R}-8R024keLZ;un$09G)Q%1jV7mo;_;x@DI=Z|rsfE&k*NpCh zngKkrnIomKE-E$l(!IK@LAx6%@e>Qhf|0M;p$fbZCm5JPByFM%X4Ay{BlQunaz3*r zR+dm&6r@WZcAPj+p7ib`Yz#h=;HG;n?YZ~5uW)6GdWD>=n>E7yP(q-wdB1zCt16}5v9DBK>_Hw`P#IY?R`it>v@2hZ z+z)m6f$Ck}kPWWhZUjw3qa{B)bnHW+|XrFYu`WE(&1laaRAWL%7&dmo$&68%(zRL3%8Yqr!FN;V;pK#C^dlr@z= z(k5;-69F!q zwsh_7=lU`KTm6T{Z(8>n;+Pn)r8I@9xY*Gxf`}3UnH61&vmNwSY zNfI;^>zn~PoZ#TZCY!YyvT z_cRCU8PrH$OTsX4)B4yD!`?~Yy3-hj4)z(cP_E}?WKB=*fM?PY-v0TI7%7{%{8b$o zS8YMTnKl!s-p}T)|8%I;v&Wv(_e#%?lNMv)v1<5vY#$R~IwY~B*k`3j%y}uJ%6t_F zg9^>^cx<88m4C`5N~O{g6b&dJhf4Z?D|G2p?ESx*`c4ED?-QaeUl7#yT}$pbt5p<4 zJ4+6JISD>&H3>*Wb1ld_IC3U&*4!NgR@Z0~iV(5>9J;l$!0r$pbh-O(j7zCVSX|31 zQ4ShkBW*L=)5>pn>)9;ypSAb9pcOP5+#M*!=KOs^1N{!!nbTeICChsr=D$^4 zkxbzvYlX-F7hxXnTC>s6YvnGaK1o3|3)gt;u2CnDcP?At{KqLo;1#u}&IWz!vkN6l znVfKYYPj|j<%K)Y0I~1dVgs{>%>5^5C9vOfyo*|nU z#RI9;R}=SEU&?mBF9h&yX*>9Roi_!3D|YAd;?{TUpm(M@U# zq=lhE6~@g>862_%h3iZZ{}jxJpA)qrlXc6U)2ScMtT{(GMfAg-n4ijFxOK!YE@5n6mBEg?QmF`!+} z?HkG5Q}SR%IUi97V&Yv0w@$J`%!?UdbJ-Db{HVVUL2WdE_{Vt$n-<(?1FT0z$Z%{i zZoEl{Bt6bbQ8=$#$#&>L{P_B;&)V{AV>PYkAAs`h6fdkdY^u*B^Q5k1&RKf-zxf&^&jUey*d{W_R{E!bIF@0JpQ@t5p<$mzlM+R;OYA* za~CwUT-{ZoTBR}-#sOHS zPf|HaUXJ&g^s_Gzz8=Q%-9h^J*-|_Z|5JFSR{_kjL==H9U(~vPx^ocz7FbOf$&N5) zI)_(i&yShbI5Y)wMo-IyfLUAl3h|Xx{$c+M_g_BFAWcgPKmO|%UA#-j@S-eb%g34Nyw&fsUQJ(P4LTZslX$&Lyp2WBk%zVAUDGMM^`E8`@md z5#u|(42fbk*ce($ohetUNC2>-Ntg0d^gRI#=Ff&%S|foaUc=>@)4ut&KXV*f-2bqMkk6VU@cYelS?E$A*vp0l+R8h@; zTbRE(6RtJan-MK;ca$SZ7-LR9XffOr(s6QcYehdoC@O_!eL{eRgr&~aX)p!bI30C} zn|TRPj>0R@Fyyx(E}Qorg2$rhN@;DO1TeVV%LQX!#VC{4pgP54#EOew%?C%szL!vZ z3fvO|r-tf1FKRG-Ip3xSiC0%Ble^ejk82^4-ZBc9U$`!Qk{JnSY)dvUvj(`4$Qp}yO|^}h4hLgt9BuoqB|b9VaH+>aP!#iXi;t_pkb7?+V&?7Vbu zii$`q;hFzRbvl-|hihG6cMm35rrTQPwSYO5kXvho!&8A$7wAKXw51E4#O_&H%0Ng( z{!WVbo%Tv-Em}5`Wo7O1tjPwmPe!{Dj(^!|W)j18fgTQ6L2B{e?{L;pQ~tB=jjX^9 zFx|KJ%Q>+TryKj?VA{)3r;(6yeLD=2^DlSXg&=zQYP-Ey!dWL@!(tV`MmdSO6>ROw zYUvV7akju4-RsJvaLbuHnHI=&Uw*8*sSss@Yx6>(q%3w5dXI04az~%9gsicv?3O|d z@`5b$3PCcM;E_DxtvoO84I~o(Mr@MxkiDfB1omd;=J-vYgn(?bHDp#3P9)p?bPybm zDREpPrN9J{uVKfiLYr_zNa=|5gj3zM<1|@ACs4)VYx)`qT%7+t-QV}VxDFd zu4PWv6=!rZNTA5sRATVf0w!T&7G8Vk)bU}Im>O83ikp>pueLRs1W1r2?n{DF8-?oP zT`6z}byxNi_?yEU?IJF$m$;et0)Zjt%UrJDa7OdCBucDsVHT(&_o9zq&zZrLken%` zr1iTxCV~8AcA8nDH*=qv9qdJGkXA|zm6ph2|5vLnJWw2e7%m+_zY2)}%l~R`yM1D6 z@1A~3&%K}Vq5ugiwnoCMojW0@%8#HqW@-2Sg&P2Br!VRP5r&JBK{2O@+xE&Cw8}Og zz&B6;KM6SZAWrd4G?7;d=(%#Q*8ao47k6X=f1;Jf6&-G9EHSIrhPo0p^fR9 ztLUg*`dD|-a>xAkz>VJorfMU|1%zDzAm`%2wR;>%RcXu9BOOs43e=60Qk55WPTMQ$qZTp2oWH_o<>`QV(DT^AVH*u|aI&#s4-4u!-ypMv2o3cIfq0 zuVrsyzj12~aGb?q)d#Qg`xPLs2J)}))P!HwezM8Y!}T6Fmy#{~BBLYAqKS&;;9GT` zlTfak-}*+ERfZ330aq*wFg-O*X~9@;!W^TGFoHe<;saD8X*1p!MNBf20^u)q|5pKo zpOwB09-~d;oR9fHh{it-@E<5hznr#Wxpe$EZi|pVwRw#pcd<&EmCe(;!nl8ExIL;EXj4hUEhIb1a~ z)APEONo2DbINXySrl6!L^w!yX0k|RgbbvhU-TO8|3)FWLLl%sFZXji)vQ;CmtqiWV zmx5@!U>~UV>QME3lF=qKJ@)@i0v!bb6S1>!-UkRXi-f{F6+VhvQ_rq+65Lr*n2nRa z6G*LyPyNzGJf}M}Gv6%WyhBpvlpolGY+VeR8K)G<{0}J&@w7)R3P@z;K=l4YwB4p zX0$JohF7@1rY$4^*Z&9c;L?l zttPN?s!xeY3z<3NT~9Y1pk&G2K-<1*tUMA0D*hV4mC2k9;&Yk-S}0m?nx35z#f(hR zbl9?OH`@3%LNF+b1E#`Jm_dX~`F@CnoEnC8KoocAFVPy$1-qdP0Y-mqPF@ke9mb5$ z#OIKr&_RX@TOFNKDsAnTMgJmU!OWH$;IpI=^?I_ON!odG2sld;TB~^q)P(m}|FH z7Li4ow{Cdl>5Wp_%P}B9SD7a7`s@+n#72uaa4OVwNbaM3h>=Xq{2z)kfW5E8WIaC> zpb3?1FU89Q+5DxZNAL~rie&}LNg!n;h^X|}_#iJtObum|MsY?<>`t_T2 zO6Hiw3?_I1vm-FJ%3|#qICn|^dFJ4mEKrhL8Z3dUB2xP4%Ye#!S82a9xBQ)^1p`zU z*vUcJ6PJ5MRh0Dt+@9W!y;9a8phg+l4KY!>;DZS%(fo%m8g29)%y1QE>0-(L zzhryMrIOUf=HLFZWvomqaF@y->fYQd^de5lk&TE=Mk*6OAU<6w_aRSbN|^6KqO<~U zw_-T4)Szw)_EeZ8hR>jq^1`aU(y}ibcfHq*_`q$RP5r^9?LU3Q2-h3evcCrCO(aI95UkR=F^1VqT%qdkCdyql(#wn4tw0} zwH4}X8^w8>M>V^Bp7f27mWie8F`B59a^>AaKNf1{*F3cVBBWixQI_qEAlx!HyW5MN zZ$_Pmz-{o_F?l>zX7$=e46wdvv^z|-3=66>RSfjvBwh%MRT-+_LIdA@#~hxzU$uCQ z6-(KJKh8`W{cYUmV)IORaVEg2%(nigKY~~V6VyD34SG9vujI1eNr8BRdyBke_^Y1 zaQVkf_L?JZWAftXCjeI^Jc``dE^zE&wM=HCZ<>|ImyWUvql@@Wi#KSQ9KM!Q3KBd_ zp7(o5`W;%n^;7XKb4XCS*5>HmTLQ_pq02^U^nt9}qU>GLSg&pyO!u)O{tB1A*WQCGZ?3kXiO+c=Q z@6IPc0>g*rpj$&)vBh=Gb#Jj@=*g{<77fL* zvYs|f^j5XWyr0@9;E$G9zB}(%(Ht=-->Y!W+f`TKov;TH;z(vtpQ`eN#%?N}X|8pq zM1ynebI5w9?=SKv?P4im%F^0TR8SpZe$rRgV{np{Rwy_%=WFY5%CE<1E!B0BqnwvZ^Gw27DX@vv}bOr(8x2cbVB>*EzbqAqVRDPI{e3BmWsTQHH8Vca=ARi0w-jo3VM;D z0hLh@;!$*Cd4b()FKDJOYnz;7s8>uayVU{P9P?qi5tS;^z=k zXO~iMgct8c33n*KWj0iH(R4<#h8S?knJT}7%kne&Qml0AO__wp0<_^U z-KQ8DmrN3uDyoqbB#`yPhHU3zVmhoSEGCmgDAm;oNs>G`67S=0=^z^z9c? zc4*|JxN<`iRH>+QZ3048SHjRCA_}Kj+h~=FEdiGOYo9v+eLrp*&ZRQ>)Jl2td1Axi zTQnN}QcVdwWWNnMX^w!*@H-fat$)U?1(KQ428m5};imcK4gTu|w$L=N4 z9A5m)M->Bp3tK)iqA=)QJx;m%xkbZ-)@Z@WYZ0fg%v2Gw0WHqv?iu&x#I{08x<^Sq z+ttz7V+@gsciYNQ4Iw&aI?08>T4+`~0UeM0-ims;G^dpVUiKSojU{*oXN{sX$l`VN zB!SPy4*EhA4+7=0vunv9nOW7$(oH9+H#Ds!ST_XJ>?Pqj{i7}LIg$Gg4fu2`0QGWH z{m2oJF)9Sht)d-w)$Sq@NLCxA_}Vj)=xv&q!E}A$1N%E9=72q@TXm_juTjbLzo;ZC zBDM>pBtty^9i__O0rjhWQfDdafNc1?4VWqv>~h7%Y*FsU_o2dvX)my3Hd+NE&C0eR%%|2ZOv{nXI9?%#j{fr9lz2}y+>?2BO_re$yB*6y-zOM_FW4F6g^z+}+8<_S#UA@o|33%Y3r*JuXD zEq(T=a6TCZ#g}X(b%<}#pwM#du0CtEQsXnDi`Vy`8P`(x`N+Peya~gFZki8b;Zp-P zWMsjI**|%^7DFz{xx2shR-5FdA?&=gx}=m$zkqFZ#JZcIB0A(4#gR+$fjI7$Qch5$ zws&JCO*x4B@%T*e^4&|0Ihb^);rJRKivvZJLl`Bwv*rqCmfQJO$0ZIa~#i-XlpnZH7_APD@@}D8%d)KvaUqVzq!cG^Gvi^kq1tR#4?_8)VK0gA+^X-)zP;3N4rd}Y} z`~G_S+@D97_F)^`@xdF~1|^$^6@oK05|_`YtL*4i=yeWE{5KXTxCgU`nevBOSVrz+ z#ZVB>n4#u?^8-aT(i(GNlaEGK17m?SN>i9hlY$3W7MATmyrE4L;_y`d*vq)|)F`uc z^6XJN-#eFBpzyL8U!b7n1Pg5@ru)*<^SRR!#W($)>qet~h!>k*j{CVWUnMfr>f0rf z<^E$xw@0*RBMw^DZg2R3zKB|h!&NANCk-@vx4rfdo4T1)GzJK|cp4Zu!XJxrol&vG zL+}I~l*Vyx&G{kSH-vI**L&>#8tra_rG+G>uTbDz0eK1e^c&#PrJGQ3s}gYI`Ukmy zvybOyW5q|Emsa1>1b#W*4~i_|bT4Fi|6@jbh(8ghR7?@@WS1WriO$KE6hHGWhSoOz0M2h2q-`A(H_ZI^Qt@cBOeu=%DX+cvUVvBzh|yk z8XkTgt{|A*SD&}DyjK{MlR9@T3n$kIH&Ig*)ZH(POM~+#+hqPQ=vh8qK!~eEh{Ben zpQwZnalL`g`VK)PL@v>iyMl{*-`-+GyKmya%i48x!pkvaB_r71DtrNQKhx z6cee?c4Am{?MX&6sCo6_?MxSl&B%G~NA^Niylpyaq#TS=E5?n9G3@W4qBE>wWHMeR zfAxC25M8QT-Xx;1NCB?zGox!A{yex8^bjj%cwBDhJy`U+Hb|>mx7g3pf^rpS!KaN&| zAuQa_BeMByF*o?*xh}y5L^Bx)X0M zwj&yb`Ux%Wd}HvqmCgMTOEgJmBzPZNpR5JAlethyUl@Uri5%d*m)?v{*`ETb=; zICtQ*sKL;|g)?Xy56Ba++o-cDt`(BVKH$!L<$C@``K`EP+3^KI9sdNkDHd0e&c7!7B*7e+2Kg zosB7W0d6zzS~juK$1uNGhH>LbIbiQ2RLB zQ*4n?u896|VHSl^tpMnA65^*_9dCum@{XRbaR4M|uXRoNLHyn9Y8;lFPG#tTY}WP0 za@zcnBB`CH^~TW`gkz^^R{=$O*j6!zisH(=F~&8s+Uk_sxN^Jz z^ZIosZu?40=W0I(9iL;C@qrf88i>Ng0DJd_IVxMxIJS1*Y0)^Mk+iz0FW>@(#`=ed z+)o$k0dIm0^%dGZDd|M_Np!lp@EP`h627v7AwsA%13H(|se5a+fw4wc*m_t&m8wi{*8oDSe-crJiwabAZ zG{?8xi*J8TWk+?1uz_3KtJw^mH<4rxJD++BZ7%26^ZPb?hWxv3%=ilD!;YV;GVlD6i(?ou6+ zve5bbL45b7hXGj7uq^QotWm_U5iP>kH#Ua?O1+23eV~cksELCX1IB)unMFc=kyalT1j=~str>MQEVIVdm@4fwuZ9H#PkKIx(fhK&k5`??slx{JNG2*=WEqotnz$xf1 z(8ZO=sV-T-E`M&2Zbf)$cF=NW=V_Nd!U7oU!PMKOFBQ5J)g0~!roSCWGP|a~tE-no z{s1BwJqRBD@|RRDK2taXSF(lG+*CVnLx67l4vOMj-6~BN;Z;&=Ke{s;eP#wm6B^cOzC>SOq&|yAvWU#ef-5q_+QUa! z@dN*WFMAtqLr*Q|C_72i+`|ApAbBN4{2y?2mJG%XM>Vv@EB{b70rwubl?q;n>zFzm z7%W(Ll&E=H%3dK4X06 z)u$!HljJcx2IQ~|4F^39pKYEdeB!r!A;JiD!zta(?C-}3%Pb{c_Gdno{Iz);_oWbe z9scLZCqGGfE=aaHV5&(sJ@@2*v<9VSrT3T?V^lI(sKus1O7|-lTEt#HZy_`#IaQ?*w zsdKIV9GZgt`Nayi*eqt8SE`)oM*ZXR!Ty{$-TJ86hcaJ!d3CQ}pMqh$LUq4d7x(YO3`9gNg$ZKx1r4=oPm zQ6*KtW`R;|(5XdU-(|*{yHN`Jk@B9ewWfVg4L9;V88nq%^mM&rkS4*m?%TF)+qUiQ zw{1+@?&)dU*0kQXHEr9rZFAZ_^WU-0zBkUfw<4=@WyUWuGV(*!hgIu&NSh-b=&4Dp zi2Ou*nWgVq)cV$KXH0Z`%1(8}o}^u(|CtboUHx;pR;M~sy_GxvIhZ+_;Hx4{fV;sA zblPc7{@`_WNBH3)oANfVJg_+Ssxtd$vW(o5B11-YBvX#zck~t}S)?KFH zqPeP7rh__%+GrtXypYD?)N#ZBW1)umNMC4@;mWgh30>2iIbjQcFc3qJHdz^)_}l-R z%tl`0tPU^zVc>}#UC3wjvkPHL>!q_UASYULpoUF=Ih0xWjW9T}2ZUqBAq?)*4c=+% zw>c;9rQ0eXl>-xzNC@U+->z*|9MMOa*G<1^C1U;*Q$2{*%PABUsH*}dU@3qR1)thc zV838_*YgdrO#(g83-4 z0Trq+2_fhktN(}rSns1)4V2@aYX9JW&VtTaHYCWXT#;L{)P0ICor87NxEYdNp}B+B z2XI)9WFd|FGFXAfIHZg~3&P+;7j~x71w1SyS{T8=Yv2$o%`_1>j~fACH@Hb~=2s=S z#yl{EEYz&E7E~6~Qdf^j|q)K%gC%#)f@h3~t)kDk6XJlY&QDZIRJ+opixgDh*$_&0M+Cp?tvc zzH6)12}3JeikU`zOK7UT9ryQw>J7|EXnQb8fLxp#_Q3gt>xrbFr&;{jQbGAavewyt zriR%08?(L36&+oGQh$KP`YUB$&BwN>cjaAi5BCkU$n9bvhw>Zz#ijr->1eP98`!%* z&^L!6lb1W+hmv@}Its8N8GvxpcBM&?50)Zso%1(?Trgu*g=91siz2uxrVGgjy=O@+ zbR<%?+GT=hVD9!Z1&z{y>M+?h@~OhNiM#E4%sz&tqFc&;CYaoZ@Oo-<{T;H5lbAY= zQ$)UrRN-k&i;&7;64_5JbW=DSfHyN7R{^!x zEKdS3@=tAt-mw8IEq~9&p&S9jcdcn4j8*)W8jNv5=1jmFWmD#MU zFK=r*xnxJokTfNw3}N*bhXm>syJ-X&b}%}Jl4l4VxdyC+$`!%d_}4b- zfdE!CB+7~-v;PRfi z0r;_Ynn?ex>k0S24ATl`D^U1?%L0`viO*iax2srf)ZWzp$++R@B(XqAZz^Wf9dPJw zdVe3hqVQXFaj{=0qt6`AJ`))OY!7>q?E!s*(B3U(hV=Yn|HrF>f z`Ugv&8!DT}sZ>a2(EZ4L>mJ}I(vE8&c`YTg@X!C5z03l0a0r5KzOr|2kly5WFcL7#;%xP{v`BJx{mt||?Zsb4OMqlwe_?es;Dn5R9;7Pmq*Ov9HW ztzOY$DN!QSk>{2^l<&i2an8-W&h;02zG|c=Mn#P^ImDs!H0(?Z)qXyzz>~>+5IPVy z2*c=ZUe_Lqkw3%h*{f>ocg1xS%3n9r|7D8Adr}9_xgl3kejHGb;IK2i$LoPvEDhlm zvQZ+`5{$h_W@gxhQaIiL8E75ECEmjQWX}5QMsMzyw^jlaE?u9SW1n0-h4^#hEK$#$ z-V8tB(}Yw}Uh@q{5ITZ!QD(`4cp~vuIrfU^e;d>kHDuiFot5iGMzB2ZjD20X8RLXT z7S}jf&`a2QK9S;QU!!w{aHF!vHd>t6B(qc=t#oJj5vvU-bbVJ zN4kKRfy9}J!~dia4d^3OZPY!oPNesi@#la?RJ4i*YF+PAV<^J}BYT;61}k)&34wBb>d=%sf5DiA<{%(_0L0C(c^83sJk?z-xld z*<{I_sH!cEFJv$`7pxxb&%LGTur$uoL;UiADVJtr#SFV;PX9F2bWMVo-utM06>hp& zCkR)H#M2;6r?~;2QNNX;oJHqDT`1wWCM8uay_yBTZ?Y@_sMBIb02(j{3q*dGPFkM4 z3KRCk>o=iY)>4E+PJiU2-njP|gyX?`M0dMBx4)jRppuO=~i&w(pY{H#kXA22;eUiF%_{pNAl^mDUpQ~)bG6` z529KT&nLiXH${&lCj6?l{%1M@65CLY{USN}Vld>zEYTNwhhvvPtf!)h$UOOQ%G@XMXVQ(ndx!pH$TZWFa?zgN$+6g<*)Bo+SPo5f^GpaD2StCrd=^<5%QDT z5}Ke-E&zr|z7=IdWXqYeIY<=fua z?EkNhk-mT6=ekn;#?T>lU{l}fDG3QM7Ytb<0r?M%B9cpFq)=$x;zHVu4bWQgaSg0y zx=SGPFZZK1?g3E_2dt7LE0@gg8)UD|IuoyNpL5mCXUEuX8M6Ejf4_ejS?F8Vqj3kA z>3K@2&)6{h%7f;$5apH08yZg#OTOsFN6tlqd+ks zik9LWq8EM@iDTD>oiu{Ms8jWP@wFiW4@9$BEF0OrD|pZ zqV~tPWICL%W6%>-&UzFii=FkbY|o@Nl4d&5bx8t?!}|0pV)j6HEm3oHgZLnsPSe@d zI>_`}>|sl+#EAd}0igqF0#)A}f9jot;>8H=YBb^qzn=P=($0ut+YVf8W^NW9Aqq8`jBG8- zu!XR@I}iN5Y?^QDpiDie*txj0T*|va$X#5siH9DV^B}6s&PPY#Mq|al4?FEYe>u+t zAQ1TvM`E}>_9TMkd*6NxL{3V;2L%Z?g$IOVbyr4+tZG>85^y5=YzLykxd)fff zN7LdfO7###+UCYD2Wc#NoRH2iuq%6v9dR%0R!G^_sk^$DY(t)o@Ht)V-_0wP?woW* zyYM>!(D>&(HOOV!b-*n6eD=r!zJZhDf@bC|pBuv$JBJcCxH;XB*Wn{4d4=Icp%aVH z{%ijL6gFf%V94(pvwW1v{5}WRRPGVew918qX>uvgs4|AQ5$a>njKAE9+fUfxw>`}Q zB1Y`h-04rS^gqGYharirk~d&zB9{&usd0gbBU3tbgxtH+@Z;LrsR@uApcX8w2Q_yO z`M2=qSfeKp>4SL#263OYxSsd$RSpO7XUu+2HT^yQH}w7Dj&sVzF*lyO7`y_WF!5>X zAS?Xn1os`v)yoeQN2y7anCbKJW|gfn+cS+S)bIgtKR{vwv6ieH)m^8MHqT3O5J{@M z@=GIlH#@5_w&%Owd%uozS=+_e)&N^Y*7}lmr%VXX0*3&t30*0Ydj>rCGOc~!axzQI z`2TNyl2GKMl(aZOU}M2|@@}Ft-dHB@2RjjoVIXVoA&_~Rh~%|5>bJec3K{fjVpPV# znh71>7#LF%)z0hj)Dd^T{*0U~SikquoVKW>5McrOh0kxQZiBEkvk0k!0@>ZZ>4lM2 z?5n=_FIlm3k>n%~jBjSt-!K^3xa{7x_BAA5*4-4W{NPcbC#B|a^T*3OtWl{6)PjK$ zYUYl*qqnp;f10UydMn5JH0{x4FJ*OgV4#L~Nbu>x_7$LiT0V5I=KW0}o?-9(@ylt0 z9<0$L(z-Wx^{bNR2#C~C_}<7Q3C79yYHxLRyvq3#_qD{3SdZ;9C08}cd_YA62zm(TG;#8qD^>IVpFI`rRTRcX)ZH&OM zdaqy;Jzi2;8XsZ6pAXiF>Fmw{KZos<)k%rM{Ixs*D2-2EKc;;@IH+90wV=JoY z@*Bj9NA)9&09Vu{TxJU@0qIr2i5hkPP_spxA|E9F-BEUS`{zhdD-w@oBy#cyObC_c z4)1t)Ch9D=Wl4a8;eFcd*7aCMm%`$j;)-3WNx6rM#=ojM>mvRr5qg#c-zrA*I8{%u zTW(TjRA1=}h?%OltQoY1VIw58BlbHt^zE0t1?C8!_g6QScT#ie;mK zuDE~&TOro#z@lP&@q?$yTyGn5SNxYzhT1v2k?9z!mCxLxLjGNA$1k-ngGi#dWXkDR zF&X;X&Vz3Xft#c)70^7I`1K=@Db3HA;U6q=#QsjHqqsXiq zk(^XMt`2iV{)@v4fo|7S=c-jn5i2E!HYZ$u=7l9Gvzoe$itNYX!l=@ys<;}(FpZl& zKOhgc8nS_(4}2L`mg8VV5ImN+r*%vSn3xl9y18zzHH`UF%3{+gAe=8>0oGfo4yjd} zZi*feYoC*Xy)$I<2js?kHzQ=4mf@hsju11W!0loB>!~4knEU0B~HFy9@z;zSL4~S8Px@5~nPiX=PNx2Sw0K(~}FF zYnX~duU@vuxYOhhYKG1*+UIWF0K;9`*%J<{m>IOp`<+q|=v=}2T}tTLfo zK(~5=!>+4)A#t?={?WY2Me2(@bMpyNH)oU=W zc&%o+lEgDXQyOJ>6kMObeR7tfM4k_b5}f5~@TRs*RymZ}wq3niz;d*dTG~3iXjQzY z!wWq&`Y~YG_8GxW zO0-kgL)xyKj+f9aq>8{w_G=Y2!VojKU=!9A?#6lp9o*gI3R6&&FJIi1cNB8)BbWD5 zVgdQZG{SfQH}Z#4ABt2_L8M4=LGSQA(##97Wq5=cd&KzAOAw@%Y_CAJ#T&haI;7CtyKVd#c;+wNgp#up1|pT&zH_I`2FBhOiZFQ*xqW}v}BVG z+K)2P!C_9eiV_jbu^5dATV1-9YdpoMw!^Lo=x!J0&{hOkTug}(0VMMr+@QP@EEomo z$vgm8{MT5?TYVawME+P4f2+m*YemC2RM~2yER1`eNc-8`~?{*goVd zhU4T~{wQT)TlRTYfuSP@dtDYzXgwUl%Jxj9W~3wjrNk zeS)_vP1J}07{=Hrnc|cj=@3#Ib+G6fXldLx%slX6gZgsKueD{2iI=~9h~HL?59HtX zx!0d=#}x)j3C#+1b_lwmz3ih{i-Xw!QBg^WQnE6>>KgC%X7y%4l2FLYI#H$5a$%zp z{-%~eRzkqn@!ooHIm)&{-99Z!>g=oDK@}f7Q&mlRdMA;#kwjxnpW6-mj=|=62T?wD zl0-rRcrY`j29o%pL#=yVcn182=!;{-nYlxTg`$aaUt@gZur;MgK7Q1}gRu`JYSR#2 zg$`2;>(r5Y_xbqaV7M;v_?F)|`HnwaPCp2A8N8R4RJ1gRKrvzIiiDSi*r1&ic#tq3 z`Rf7KIVtBy(nc+}DN0iNG7_xi&ZF&P)P*GW8VrcmPDALCj6$GJ-urAvZz$m4LU#fW z3N%|#!kz%7_7VH~&BbTkq_q5l3`S1DuPphdtu#--2MI3RBsY|p6>}^ym|=?E3MuYK z(^B=WU|2Hg-}|;b19RNQ+%mka+ZA2L+6a<|zli3;%u`@pO_E;eNZR2?MHdZe(`Qng zH?`3oCvJGFM6_HSxxy)k=c*tLW0 z+*K8uMghy)cR{eC7}RLrc+;!aBI#;Y$?u+dqbSJV#`l|$vVt=YifR_e=mDmpLS4j2 zlr7QffA7KS+2GDX^wL`h&sFSToq8+7C}~i8&S;vK^Lc!I0~@}k2XYl}T+L(B(~FWO z*a@Pen_P89;WKSzH8G4>=MI?3=&(Oo6d+KN;mfBd!zGYW5uJl}_VHB2x zJoulw9U%a+sve@0$ujjF)>K{7;Khq;RS^5S6fO>tRJ(-Gn*j*?1}@b3UUI^Sfz3+{ zWLxeyEz>cf8GO%xqzQpS8EGHaCxWR$=8j4-DTrR1H;{oc1LhFqEtx(v>@Oo5il^x( zUrs>%!)@kkv7TXx-Bx!07jUhJ`7{;mo%nKDM@xh*z%LD+zM@(p5UC`FE;nmj`j( zA-p6YcQZd7xzr}mC|UmI{_|nId9yQMIBDzZ2sWa}_%ES`IcQ==y|?~&&m(naH1?ET zm6Nz_u=*sJOs1wpPYNwl#rfhNJQ`Ci8ht&aUI+g|)eGClXhAbzQD&(@?L7t|*&7V2 zdq;@N&bG6!K_a$J$WDSO^wLiV6N6x^a}Q(cP=c6-Xy#RZ?_2go>$oD(NJDP%8V+DMgd-mn+3JhgEDtvf?Qgwp17YC zNfH+BO~6~vXTQU&heIXTY%gFlq%Ocd z&d#s+u)Y{!&=|fuQ>+8q6C6Qwv@X_Ud^M4nD@Iie(A~d9W~ZJvo**nN9zkaY7H3rL za@POYrqrSWNL%HJ@}$U4O~=O6l|H+94xCLfy1*K&vbt+Bp1&SXsKU4Q=++X#VGAHs z(B|99^cVpEab7-Vezkk%r*A~5dpG(sR4yj3f8?KhgISF;=hDo$09cp9b?b`lUaGWj zM6rCvMe>TV4>k%i240mBV+&aCei{WtJ?=M*AnoJ@yBWcR3NX8pl`cbJQPAGhqQCVF z8)(%fjrlWuVvm!BC444MxJ}X_!=Yi06ggP;l$!j1u*^M}7$<8=;}8Rp9{fz+GU_sk z=mj?ZTBbbuxzr~FHTU33$Y2}Y5w|gs{UH%zB^7W@biYsZ3E=*M-9JXLOyHk(@+=gw zyuXrm3LG$}46PHguh$Hled~-pEdC+RUf6H?^K*QnR&Rq%LH>r$(RLcTKoaVsMqsr~ zJwLuI6`K-c{(c~d4#7_SdGv~;`~?z*LuT{Fe}Uh^eoWX$0Xu3{;RD22bzX7DqN&u9 zY0Gy^GsFl5j+5W@^KW4#rL=O09RDU}Psqgos2StH!ZA+%l~0n?V^&ndroO02`9cABAv-R#k1l(#Tw z5h$+1)=mX3!JK@`MF@Wx=vKW80-mEJ11*jqcvDfdwfxzKul=7>+ffNJ3fRhe^N(~X zY95a1T$_2-pbVwa^!$Bmn!Q;ajGkc;&VK=<83I!9m{cz6{8(*ewDTjH(9RFRxcJbV z3hmeIh>ZXba@}K`=@i!V;>tiyM3s7 zMb5j%FT)=P9Ywf1#F;r<3s0C6qBVSG*X(ugJi2wNcz-Vo;`E1xdRdYs^*qZmn%6LR zV4NrR3fsF>^$Ja38iy9@GU@dMDeV*C>Qyc1wXWY@1{8KK)3&%~gJAIf+kV6-5b2_u z-amxJF}ptJ@MA*+Qp*3*n>upa_qHI&L=TkANw`*I$*i#+I9$xFhMa4%9G}1<1C+y` z{SEcOoMi*+nB6|Q)r%L{B@X#v(?!x%37Z6MriDylgIo`1#eHan!v*{NW6IV*% z5uCPrC;w6BHDaV0qW^D6hb6FsKcEY9{qycU$}xNPBZ{)-Em~pe_IFJG1lAXKoS#_a z$FtRLw#j=|sbE@IgI}@D zxqMD%z7_Px4S>oiVb-CcGTik>l+Xv#(IcdcH|Ga@8-ge#C2^!XgAe zg@#P!nW-*F6K^#K<3b{mX2-FSUq>$5CB?TMQ_S%@rx}9`j(+LbKPSV{9hw?D$vTdZ znv7$ceJ%Qtpt4xLC`GR(^W$jcjN`+@k|%5}>Ctw8DewDym>Kk?YXQ*mM_eTx)+h3A z@W)Q3xMHal5-{K;%cGql0i-C?vX#M%)SW=;cJ3S7mpGxh#qMth&Z(E?Ydlzz4+r(m zlK{1=bVp5Q_p50RETvs|%r?~s#Zg7#5UY)!#Xc9;JlZYB$tgAhvq8C8lZpgfM2{KF zX?$l)Av{KJc0Ra1J;d^p7t(R2f7n!SlcWo7Ipajgsh)=rplWdL)ch0rn4JZIKO9x+ z*T7s2VZBEt&aTwfTfwF_aBLm~x9L59Y;AWLy(l>p$GFmw&}Z4f90@0v`YX*i=pkG0 zwm(A&Lxhw zDTRep8Yyusx`(*6nx6(nYvubIueyc{IRk0YUL29}=>vkO-|qgK^0VQz>^yqY zV9Tx0udArd{POB#LFE!SUj>n(9;m?WW`~l?Sj7N#rLUbNLg|^GqkxxUkVSJ7(>MXK zo!F%|%zo}~4@3a43FCe-@7eQ$GrjCzY!zk~}P-9*-hm>-< z?Xh2ja`c<@!mik2)#2yxoqPvgx{UMT@uF6lRc5&yNCBNpOy1ZC*{4lUbRBf$>$sii6$sao4Uvc6$}ZbO>SP#MbmMRU>4 zW=^50%JCq9X2nZfl42c%%tA1fz;vjz#y36lm1mk{vxn4V<+kdB*uzy^SG*_C8VD7 z-#87-e-28Go+Ucf;SED>GoNM8Htp0~*-BaPsQ5qdkjo7|L?wX4m zwWCv7E711aXy~BKkB7~^uNO!lDoOYmHe00KQs-p4Jzm2_lFT7GlZ&;A9kZY&Y|_pr zR-Tfcl(|0@Ue5H|7Uvup{z|B>N`fN?<6rw1(8i|!`M(5D2}s5}G&H)>@C=Wj34i@)G)65JJW`K(t5uDu^=Fuyz!4yprTH@62w#PWu~BAP1;<{PuuNnNfA9DxW3hQ9-`>Wz&_kz;viFqpk01M-p)$n>x0X zjHH!FVxUYO49~0&DJ1@spDsovWe0WWe(~AFc)<8xrUu%c44$9wBFjJG#rO|$Y_f|iI__w zfh73Ce0v)Qeb>5RpT>9mHgJ)geh|JGZGY{yn>wanJq#$NZS;uYZ#-Et)C*7c!^*6qb z`eUqo-{m_!+RzoI@Dh*8^)fh%`rkFfY8Xd}b+Jx$A3T;~y@Tlt4Xx@!jCj=fb&9!t z68dAs#5tV=%qoX!6amew841uU*cIK>l-Mp(H*z3E8bnwA!-i&*)v;vCw%qhj?0nTH zAq8)`vmWfj6l9~kb+!9ze9eHKXh-sJwm+y~MiHDQg9webUNEJ1FFI4}g}>_?#Imge zkr5-9=|H&`URz>cs;I}7@+6#ZhZ&dQehZ|1Smm*=Lh77PD~lDcB$$BGT)e;tXu46e zhs4dHT1y)vzra2Yajm)H%AgFH0Gp%QNw=EQ$!krXsc|=+#c}O^ZdT$FA5uX{oE;4}8(o;2+Ow49A89Vgb zBllwL&fSOv9H~+~6Wm`NbpDc={RdBxJPUE^&Xx}&rL zB>hyfeRD^glLgWmK2Hkb6if6i%XP2b-b@YFbA0(yk8ZcS_RaVrw-x(JkzlYZS)WjL z>|@{kP}gO3!Pye~MOH~warzw^G@vfan83jd8ix1vp(FiRf0-FAKqZN^y$$TVB+EDc zNyzfNL3d|3hP!jWFIC8vbWbO^(6KQGUN|%blf9k)WH$0Lvk%&a2!|ZJ+QnKNkAVaq z&3SpnsR7uW>`-bO!SQeF+(+N&fUX=!wrU~NH&}v#dEIXD!fp}lChLT2m9vqumMjT^ zkYw%nhB}awFtDjtj@M^iYS>vqRFr+pX}zLoodAemy^fsy)z9I5Rfr{ zM&h)D8ptlJt2MF~Q(m#|zG(baP&*N%&_AI;T2|8T5>au4XoJlcKI@+_A{IYEj{Xbt zHapikgC+*0H4!Qgf~59`XUzHf05Yb1yNl2`B;|{*2*s`V2<~q_SCi72{VZ!nbY)2N%aSBW zcs(qWjnDZVF%R>#3y>&B&^OJuB@_+g_v0w80{O^}tge>XW=C8S>yNQ3Kk{md%wKt( z>^YiJSztm~bn$1u6s~20Ew8XpcNAg3Y)JU&JFVvaB-t_NmaM0a^%;j-i7m#Wj`Mr&1I3-o+r5%!0XQ+=Op^=N zsj}5(C=Np()p@B@=#2pLKTDKy+QSN`?h`34fX=7kl==NG6*ABJo21=3Y!))w<4s?@^fr zJ3S|Ki+C{loAn*@=?XQg1&KKj${amKRIZixRW3bXt&ln~TytWaI{z(bHaBH<*dig? zu<&ATbO=q{Nj0z0NX8D~^*}np7tJyTfVMA%x%vWhLHysmyWAVJsj%Xf^4zZsiVME_ zSMh`wN&oBcQVAVn5eG}OF&0q5<`xz>=G*QJ-%)R|_ z_++_lYyqZQ)`Y>r-LEJ#_)plH0dPEl=QzQ|Z^KB47WGR-{|aTwU08JuzSK42x*AH5 z*a-vnK1#&Bx$49Xta-g^r!c5AR$xFgPV<%vwfQSNaB6{L!5-pk7}l{Liv^mcbtjbS z%dhUqvU7MM>!@2uH1HE*&d@c}lX@%=n+;_>i_!GHHxt@*=SY(HwvzBWpxsH3!+?@7 zz!k8#(|iM3CXAhyLc;JnXjbG;O-X>AELJWs2`5e-(>(ipJmK%?eW^p%waXBXLXs&Q zcsFV8m606pFDTD^=u5AvU`4mJC-Qq=0*SZ)$iT_$)SlX*JiJ!^v^tdZS$zZMqE1Tx zq2-KvxahPm`WBvEMYM=t?U)eY_$!Eg-KkjZn%B|EIfU)5KMf%Z+c?N%&rZiF`|GFe zCIObPj)>h-)hBM$U=>S#zW5DS-+}QNM zFW-*u)e_aB)i?0Eu^RYN8sGokN_^|&tUXd|o_kdzpSwzg#oYM^{0v{~$>6SyA@lhH zVd_G}@)n`^m3io7RhYH%1T0XQS)Xg7|0Q+!1F6X!M7wluU?gBl8EyqxesYAVz$My( zgBEkHBQqesK!u83dPsNq60wl6z-H=@IEZvgbhACQ80%UO)2x$6-r2QbUA{LZl&y%~8eR(HFtN-a~eKf*Ifech-GQu2x zgNM(w!@)oQjg49^)5C&jF0-<1)|*Z0yGptlzdidnJOfa+jQT4F#Km}=#Q=v}>6i|I z#CDkk-u3r3lOP?08uoAD1S!h6XMc4MO?GHKi{%$J`iNX2L>Nr84(h7`+H1P^ z>vb-qQ1Cs{sc?{~W`Kw9t&rA*&cmYN-CC}?4_yu6!>}YKQ1T9%Rf>V13ZjG$XIHQ~ zO?3+-1h0%a>>*{rcx5+TpQe=8^`D8G3&Y7?>>0(jcFac;fR|J-)Y-dFr#P0O31Jb@ z6T&0Li{1Eid4p3`3^D)VmP*oO)0N8MmCLl>%yp3;DlqaUiDz&*A;mNkN;9ax*pYBp zn>@WuqJkwack84>!2#$#oC(b&J05APfJJj3BT})NUz;{3Zfy>g#ts8ZOc5h?`+!i8 zj7S@8at0Yo`6;8Hhi)RdBU~fpiDPQx*rV61F6Fx7JuqGdG989nRyO`YsSc4Z_6StK z#KIT&Q!R*Q?5V7qt;crPBGMZS}O$O{jutWaIyUUe7SD5LH0 zdBNQ#W{F6gpg{ZR_Npq@tSrDz{b61I`hNL@>e85`MT&bMyY;R1gDuAgQyv;;C4)B; zwslDs$!BiSsE0J8uroRBj_=KZ;jSnQ1vKlM z?pWxze4OZo5vMW{eUYB5FL_0d)l4leHi_0$H}Q=554JKHzQD8wG3j-KZwkUfesWWa zk9&g@dt$E*^9rM2G_J<8{2^Q@TrUDT9nU>CRWOY+HU~9uFrtNla_KdO_$R zs&S#-+KnSg@gKfwt_(CMx~5u9%;Q8q^gMlNKbRuzy@Y%3p&6RcE)dQ5IC*p|zFTx# z9+gn#iDuG1vA0nZA_tq>{6(N}5_%vFbq>&>m`QKMF)%1lj{IovWX-x1{}{VZNO9bU z>E|E2By0aybV&1d@n?Wv_|glrhJc3t4+DZ=>S*WkpSgdlx%?wdzm>lMAZ-7c_;2z* z;eTEK#~1<{6!d@Ew<-w2KL`{A5&{AQ^jjYUT|`7iM&DUj0GP?zHn6}N%T10N%K<&0YlpjMYG*!!nSfcWh2@JyERS zC@fY7y#nmUdnf)0JLh)bSgJ!-3<%M5i*=s3N@wyl4UG>S@==X*kKcC8PT61ztK9K$_P7VQS;3vX!bjsA92So0OY@pA_UusfNYkX~S$QZ>r(1sNi@uVqCuSd7YM;uJT{>uBB7Hkv&Z+bV(a^+@75nw^t1 zRLlM4t7Kk6^2Aj6wTt-q;<7|TFvq^KzsIYIIZ6hcXy9&5rk9Mu0YbyKIfDwqC#!OX z^D7D27KR1D@-i1?cBXHdS>qJ##$H)?V@#q3r*@Iu9n-=v-o9BL_)l|AkHZZAv~EK) z@@551Q|vl2o#(}9P-C`R!=7AAv@+08>QEB}d-8qJ8wuUgO7n|$H<3(7?#E}5)ZhK^ z!R#t0A-oQ-XI{cDRuO~=N(H(4qqMb{(6Z3pguL6_9p5ihB}E%$osC~FOT2CNl;Hbj z#>+H%WkYv$p{(t^9I>x+y#&515A^(U7JYm}6kfT{5PKdny6FCGI7&G3T?9Jw8`YCgyCQ8y*f$afX~y(fRG*8+>;+RHCR9(daC#I+YAd0a%bYk=t~ ztKMb`=S4F>M$X9ExTYJ*1t=mQjJu>mkm3a1faUJ^MS`HLUv(X-&MVJNWJ7IYaZ2#K z%@z{GCG-DQfi8*38Tq?x=yr+(P8yXTd`e@eqg!q!r&n>L6-GloRO3 zR`(cP+f&MU@5VqTE1$BCCr~sGZr$_7pEZ*Pe)b`b`?VP=dZBmb%s z5Xz`mWakr^D%q}D=@gW>hEzi(gL|69xd~AsX%Pr$V~FrLysojKXe_8f14A-@1msCF z3KTg!6s#Ds5nx~&^|J+wKQ}Ra!#N^Y^4=gwKH9cVMK&qeMIFS5!I9#&(T9NDRQx>M zNfW+fhi%YQea1lAe17kR1^*+$4M|u$W~h{~<}Jk_))myr3r1r+2ppTWQ&9mkn(3a+ z_01yoEdoqPBJ4mPlxUQD7Gs1PE=I^Ifp?VA5-@g&7maps2U4}nKwzvSo64*l+kdkn znaoU>>_spEDRp7)H%PXCGb7S?P3|ON?p{Wcy0gD2MD#qDa9<`pE@+dUY~HEVR>~~L zr@oqG_%3AQh*B;Lb$P`U!d)ZAGHlcr%Mzm>)e7e$hE3#}nb7;uzl;VIDkxk2sn|DG znwoZ&1~yCtSD7zF-W6J7w1BN0>|Y7hKD3KE3F#a&CnS~`Kr&T$Ro!psX_I83iHZz5C`l&&nl&hB`fsq#_q)Yz7s zDf~tll~qbsPuJNrsr}od3R^^Y0!TbsL=*Go=5ljXVSUDoo5=UU9ecR3ZmO(fSG0cj zrcLUgWl*^3;BSNu4NRQ z^_suQ=nTI6d$O(05e~bTt<>s-23*r#D|GT^i)`h#R-Ua+S%n0K+yL|h0Aq9&%>eTa zeGt9q0$N%a5XT&zLm*CEoFZ#o3-F%Y)`zbeeXJ4c7fZm8`$9yU)quuc)0BsFK%-3l z1pXiuP=N-Pb}c8hyP7@vK}RZp-+8wa^u;f)sSZ;?yE#G*(k!iLGY*b;XKMnL2~KLZ zIaEyiXS#=SeG7?w^K5#9=bhAOOVUDu_TToUv0~MvG@4&hAKU1ESXS;1+e*o}0v5!# z2n0mIN3>#XNAL1G`w%pjs{{u{y&?|NrMvp6r=7jCV(?Okns4zn`6TMEWLVw!4AJBn zxrr*m3ws-5YV-B*Zf!qQDYU(e`LqJzei=&Wg3tj7IRF(&( zMpLb3B&Y76qRSkd!53tK7BFST;{itk5)z0jP)88UAX@~t2hAYb!=|m7pQ-7&JtZz4 zok=~zcOG&$F^Ydjo9*=))oOs6l?Z_7Y>7{j*H>QLO;*RZ=(r+w3O#yT0oEa|!mYK_ zv{+fyW&hAFB71~EiXvy34ze~jv40019j$ z`z&~qFt5pW^FWf8{%H zK*e2Z{x1McK(fD(fW0j}DOdf{p|90)bE~fRMlZ?_zz}VlVD~*p!Gm8{ISF|%+Y%8m z9g7e<&)i06C@AdmfoUUv>2jY9N~BTEJ#*Vzf>}D-=)e#&pJ{rBn0)^j@u(xx>J+}V ztDnjAG)||Zw_n6m&Y&-AM?yh|hsF-^$!se?tGE9fM=?jswfivRwn(Bboh^J<(vc6( z(DfFDrzT3RJ%YL2=N{<$2@hdyEKDE*OBex+ylL(IN|kz2w3loo=qRVc<)gz9AfEsmLen8y?E2>+T69E`TUxB@~~k z#iirf?u*M_*TkAV)v&7KtkR*IxJoT;XF}>2QC1+eUQz7jVL2E% z<{^R*58!Dxh%|;=GH`S>IateaA>2bykziua)wEJA9n;RGRL5szVN>*-hNlGC<&>iUk26O7Mq#YKABOyja+8gqr3n>%a6R60B)to z*m;ThkWnMXRi$kYZQNwzH|^9OA^7XSB!xQ?ZAgW|%MwGRqaVyY!3#2dr9qwnauW(9 z3mCab3;@EN14uo#%`0<**d_I;HA{};I0UO38w1eN?oJi^$vSfzZ>aSBfPraNZge*O z)~a9SB1S?hCA#^TFtrI@Ni>(<%9C&J zhdtP3PLIkbE*EP!%P6c}C5=jYM8PF7+!I$to`vMLkNKeAMG5NupN7|9>v8Hn9%5}{ zTk(~*lv@QFeGWdCz~fdR43R80H11*F@5QJZ7l7GIp6pWr@vBI5Mdk_JVsDwu%By;K ztMm}?vq+3XALhz?vKJN$*g!gNs9ms0{w07Oj^QWRlybXLA4R73)-PFV?#S1%)aA<}eBv|=ri2$k# z)FyP>*uty?{ILF-^}y=gmgW<6i%IRcu=F1`@lDo2avRoEI<1ZNwg|65BvX@S&J7J* zpjNrefUek%Dw61P5`k||Pdgkah2smWQP|DL)3X~X5y7AcA*!*SH^%<0Ux%G83bk)g{@xP(3lhvt<_GNA;Xv0K1O*l#815U53#wzn z>m3Cy65>YBOK54B!BCW7Z~J6k*81R*#ilVUdRs`7-r-dqt{*-<2*6EGuZpr)1}JCx z6NPbSw=4B+pjf_AOC^}Zccz0wU@x=LKhMLWsrU4UABRW4n0L6b+VC_>m7KJmQ~7o? zQ~x(pS?u7uE^JZBmE_4qqNbjBoTIrz?tM8#NTN1gc0thVIrdfr2$3C(YRhblK*a~x zadZ!k5f~M^;Jq8iZ8+gOWc8lHi4n)mcSoZ2MlS@+aG3Ix7AQ3Qv37YM6fBtpV$#_R z(W;WZnL)_XoL&0FqtXHAFL$=Y5lG5}hn35kX4>MzCi+aW70F+BYzG_8bi@K&Lam8K zEYL^N7@5vR6~_pLWwk7$r8K%SR?>WwYE)vUhnZjGCz$*x71&Y%=Cm7yBKS_RRlRH2 zGU}CoSx*Il&39-Xb1b?X2)%>hDF*qnAItXOKMzR%fM5O~0s;(wSKz`2zLb%-8(vlV zp2mm>1TbqHpyU9aH_zqwWC4p@)SR~0OMJjS%=0FLhhOKAc1JoJx%;YA3`vDd<%@(p}KBI%l+Zk(MuUM9kWBZs|euWN(LmSj6WJ zB%qK;3GSfsW|5#38q#*Q@S)Nxb!Kdvc3P20sJ7W(;bmP>*#QcIQ4fA1ce5>i2g(Ku zt<<51EL4ZQDamKwY5vp4qF*t8XO;g7n1$H(CRB&mvc3)UaTdnm7M0b1-hc;UZgX%p zFHVlvhRI8JjJ+iPEGI0Fq;695=5@^EaHv86Pe9k}ec4{>Kb!-W#2?wJSwGYp=S3O7 z{ozmC9VwdBhHc3BV6&qjo-+8VWv4v_PdC&=joD@6LxvD!;FFQTIll$Eb3S+Z0i2;H zZjsB-9S$}=m*r3|Ou`JfIql&`qg8F3C8pfpkI44LkKVdBXRHjY}U_5G$!Vg6gz+PV7Y_JTQ^fUr#M5!N7El>&l)%{bd ztcu9nvp}=w=JUHBbXiFSqjDtIc?)0%68#iQw%Kv5FWLjiR)pg;jBX(G0L%uURTMbF z6^a8Qh*C7UsA!1Hrp|rwd^-8V-5XbcN0d2^>EID%FLP86$sjg>uAT}9%+0}nNOwa_ z^FI1dx=ZI)GL%C5?1#@ctjjp%wX=r4>(n5H>Fw}e(y-9{RqdgGg=S-bm++bF9rf+A z4F%c2pC50j0FCuI!g!1|ii10FLp^3F8R?Nc3Rk-PeKK)`Sd2C^vA9cqb+Gc|kuCJhvPS55~8Cjv4#$XS=t$ZC69`0L)e)=T{8McJ7JB2G(u5@>* zuPLDxQ9jbN?jWotNz@ zY9DFfewE1e)E!M#fG7+Be#9GdoPAW!O`_?EY*wCq#?_Sj_(O**(3T$Trq^cNu=-~U zDmGflN_LU7b)^=lNkv-RpY2%_lToa6= zvuK7wxp?c`Z>&w71*}UOD%A@m*7!KseV#m8I(T#8y>c*}3w_yHN#Di>*39u;M+pFV&NmdZ;$j*EPI=?!Ar~~y*(1ev!JddcEpe&w! zz}k}U4vh$1YMuW`rhn6{>kaiDf(Q3T76LeaeUu0|s|awq@9C&oOfpk-a+e zH>hFM;3X3C^z)!8LM}HP+UvXmF(svU0? z=+^{}c({0@vs7Yft4YaSzOZPo^3ySSN5>Bo_hx&PE(RcFm)K0eWbnf%j2)rWuQBXI zeV~FCZl%-}E@zaKepj?dyb-4<^SA;}3BRb)S|Ua)xIh08mqyL(f*=H$+uH2;aA7Fn3;=Pp$(ywdfKPR_ zU%y$*a}d>rHB-t zVk?ao?PQ1XV64_7(8xe4kWmWy5OIPZ{o}!w!%PRMJ7aR&Tep)cc9djMMXh1Sc)A6s z@bS8wt=6DlljSiJm-GcncSwjX4i&C?N%qZB4#LJ1yd@o;fS`NEm-#oyxtGfvL)hp8 z7brJIVi5(J2$q4%q)0z z80!*DIz*79>2?$^e)6*;+vx!NYjs;%$uj;sZCQhLsBc^@m?uxFH;2H-{#M^ZmY64A!$LI%q0 ziL7M7cgSzg6kqeVpQjXPX^`~z%Zv$Wx=SdXXNNXE7i(@^PZ6gX7^qoD)x&&8!gWKz zwJ1t&I{|+Afyt_0B;)bNQC_C4x*zWxsv{_GRQ+s?t!33z@(qQHNisY6nH3T}R=P$Ga(* ze+iNT2xk`+VT8awDQPML%w!c$nuVoguuT!B7pCk5NKUM;hA-6+HSnriVoPijJyDI;wgz zYEo3e!yg)59SIVXoGdjKk$M}L8&B=RH}RHrvW_^qfLl-Pc!eNE0d3Y8RW52J*fqu1 zsc2fYNV=y{tVpa?u4Qsc0r1F|m!v-5O9QH~tkrF;?%#Y06cj*ObFgK|zR)>VOZvD- zHazAGSS<$8nW(##QyAmdmdNzr@;xS1QRxQ1J0I{aozw?LzyqM`M4Aid(Xww16P`6`9^ zS!Lcva#aY3urb8rWt6P6G0hCe>ZiqiIF23>(;m>aFW{ElEd+L<@X;y)`vjE4kyg;^ zYNIL|fnbWJx!w(%Eu80wFFA$rC0}sA(U0d8a^7l>8W)?p2{gm1*WWoaz=eNb2`!du zKi6mO%$leDb4V&;iogREwd>2$l!88frmo|fFynQ^Vv4X~YC%fD-k-zc=rZ|# z*7(B}9)3nGkxA>jt`{GrQ{RL&U2s|AXLj%HaxF6R+eaeKoMN9VMm^x2zG1J@Cww(z=Sbd^D3n9>YY^q{HQrIhwRt@xlP-)c@kLCjOj z4ujPH9y@|kTIR?ektY*@=?^@2-`U^>{hRmph7AR#gG?m2J3lXX7y+k6Eu%>xLW#VZ z1SeR_s$OdKrX{!U7TkjG8Uk;El37mleRCLv_3n4B$R)%f%|SykL>(J`e#Nan0j_fQ zDXF&ek%{CppBFoD#MZKBCayP`F$Cuf;>}8L()I1eMKPG`48{Aqd`^##dO$-kXR{&1 z$|JQUV3>t0n&1v~!>04v3a@7GEJ6BI-q1i368P}hEUo<+-n&(1cRYzf?U4KM0f*;( z+G|5!@q{ESwgdqJaViv)?hQKS8QW0OC}J(LWycwX&SEFzxti6brs7MV!)F@0og&+$ zdZza0GG=H%fCw<6xnpV1# zJm!z6oDmw~N0o&hWb9-F4N6b6t0B~<9RZbw7#@2r(i0ghcBc+JH6AN80A!RB*y#|CZQ^^jOi&Sdmepr=8f(8D z3qgRwX+Y~uC;B*O;iCa>GF7G$hGhh)55IVJrxH3<=2+nsoVOokkFq8a+iI-6PM6fs z{g5OOWR7njt&EA9+0{U46E-C@3<^RRnwv0sIC!lYvwGZxmFdgyE3{Iy$gwMgDbzEmLa7jFw z>OfUi(3CF2%chwaMLwi3hccdn11(~tdD{{Db{ zsuJ=w#%DI=BnZ3b!Ne`mZD!Vx9zM8a{mCU1Sz&_EhO}R;zNDlA5f64M3Cwfvp3ms{;TM{3ppnJXYvo@}I@V?H#Grq)M8Dj+LXl_pxR(rTf$p!8 zT)oqCsG_Cv?PlG8Fn9^eB;T?sh$)ubv0hGkjjO5B#&*RKfpyzZtTU9Jv8NFB^C0=d z4hQugmT5L$1Gy>-9I$QHqJA)jUPG;9v2e8r;&liI(Q<@ur2T}Rl#-fWT9=!CHLa_0 zC|{``UMS}2$OAWi_uF|#7X+TT1!^svCT#{w#{D5A>DbW z3hQLD5u(H4_RC(DF@%8x5reCbVoFxqlvE)vbX#G|@ZX*A)bQ`*d)PP`d*zDIF+z@- z24DswL!J9Pf_A%S;qSD2XtmBd2-Flk#W*A>>_e<|)x{hIQX+(uRVw3+Xm}Mnxw8oS|q9D}|eu_fCyiprewq$sYWWPt@9O+~lYj)6G6m zs=;YqM43C;7u9dDZ&eHd?^9r>@em~!5HI>UnF+azU5DRN>+XaUOF}iOZq#8ftJgq= zt9K-{54GKs4Y`*#k~96{-oJ5hTD}>g6U%dM9%t|bydCnOB09?=KGJFg^U`7&etThH z`_z2js78z?*OB#~qnZQjI#zqCyUEtMWWE*!zJO-i-@NT)#AMM)VP)rU7P^0y6d5~# z6QQV2lp9fi`FH$=QXXRs4o1qHbET48kwjeH>~!+$g%7u9a>HG(Z`8ax$XDRAhNJ; zhOJU|#IXm*MQYN1uBHBh5Nr@4(qSBlHc}Bm{;#(V#h6k2j>XOGHe)-+8ukrxH zZT}mx6K>EuyrnM2P5Ew({s^{VuVXeKMvfN#ak|gH3qQ}prV01-=RYo$0FJUa#E`Tr zjCVULc7;N4W`nRf-lB+z&z%&TqdtzbD1qalzIX$WG+g@_^T%mYVgVAk)xJSNU?}r@ zU&vUA>u4%=a*`-{V%c-;gLjh!>4L4cVYcF9r$SBoAVsmzn&R5hPPiXgc@c0XcR9G? zOVE+8jWZX-d(UI)Y+1c{ufXXUH_P_s)3NzK@>v$KpeQgnwoq&5j^)*ShufB(P->$@qrIROWvq2N@j8|^&7Bpa!<#GN; zaV~^6_MJ8819xO3fh`tz->|WY!}8`ERjjs45G4M>#wr>LAknKiLgs%EPE4Z}?a#Fq z-Cr($41{!oNOb^j{i@?hOQTp9+!cn z(P`p66D8SSjxWZMN&wQhl)N#D52x?WUJ0tAnsg>Bp;=kQ~{_#66lR*!a z_VKsB2r2MM#sOrPqJ;-Ru6hgCdC#T4zEt)F{mivg&kPRBX-x5dsm`57VQSpAfcjX7 zXrsAXYre$VTo7Y5G;%=_qqODXr}>8IuhaC_!20AbM>4|RP5x}t1ey!;#*4QJtAxm1 ztK~Q*!NIdt6fM1)$U+zE4}uQ4pF1pSYVDZZB{yzoZ^v`L20SMWD!%&;mYC=L6pHyX zIwk?2zGQD&B#4Up;vOb#s*lQr46dkvRDJp*5^ilcE%?vRP6-6U#{XA2(LknnrKs&? zA%&+I=0_E^8BSh`EXNoxyxC^5ath8)hDHX-HZl0}`kMGnV4zNMDB847LyiL^u{$(h z6n`T}Of65fuxTrT+h<5Ebd%fw&33-KjK2?BfEJ9vr-iCog%W4%eyK zvzf7{mmNrDolk@Egu56wThA2}bA&C7 zUrogC9z`t^iLoAkzXzPZOyRR6fx}l9FNl>nEJHc2QCL&oPAyb|t%MXp`nkl{;*_3=f|2}R>^5n(nuwyJ?k2-R+hca+ zbS<$pd`<^9B!#R}Yl~;YzK16*qDJo+OMtHBP;^je$J6-Si6hUvy89-wh!RqYj%1_H z&Y|@huU2%07vc}TLWE4zVCjfqAeZgR-ZXCb_Cq>=ke*^E!N9Nu6}!}yD6bgGD~BGM zIx(1+k_v^P;!9%OApDq10S^Hx%x>z`VZ5S3k!}t5W6tj>c;CXlIpq^le}{(U_RXq= z7>dyeu&q~_HFW*SPsMsol#IWKPfw&QN*oI^(JXKOBA%%#JWeD9;GUd3*473AGX@Fg2J409CKB1$6y%F)hjKr7aTFtR=bwF7lq& zniC23X(EWQRy9Pr1b%<4YGJQrrAKQ1h>&UvA|r~cwcYmBTrQfy$t~2w8dXW`-H(OVg`Aojd0dX<+c=7HmnV; zIP_xVDQhDW8Q+Ho&6FU92V4oT;pzxFk3jzfI%u9*yR4RtLihJVE`&xrVUA{figT$o zxHz_lMkO|0sO3+%$izhsE3@tSqr=QH-XO4(XnZz~=&sm2Qv1*ux{l+OU3B-b3;02) z$!8?;)#Sl8R;D0OIGw%oOF|f?$uT6+EYd;(5KTv?;c!-u?kZ=UtXe?4rE|&F0tfMYCq+vpO-IINco3K{|Pu&&Sh&d_Zt>b(y8(`lwj*Ayw1|<9a{HjI?hm{HEy_m z1Eshs+6Y#OL$?EfO8b3df^C^m*HioGKf3J)y-p@XQZPXP*J?y^X}a)`%#l>R6QJ~Y zkzo)8Zo_{A;@*t!%)JQASVhSs9SNY;n#5hh}v zI@s+LWnKbVGJL7SE~s38WG`BXeR^I-r3EbKRe3ts6odHgAY!`w%ZdIOu0OI@4S^{x?`1DDX4K1Zj z#fJ1!`mV*~6SSgMICaCT(d~>&v(fvjeYSZ|xe{CEoKe1TSP=tyrR!C~kYabNeb|B|bEBveP2%ixi^VcC*OJ+g%SHouWBm9;)7}2 z*cx=4I=7WNIKUFd$D=sC?T!UW+=g=V#odP{X#*7Ak$v~s1Lw}FC+v+P*_~ZDZtP-v z!qyj3ReoWvfU-s#yab75li!J>E&F^OnO0PcS%0|XYL%=a$&Fmk~KRq;>P>?i0HpD>Ici zb%m9;0{eILG!+YlsUCwN4HCzSkRsvff>`5bN;9NGYRzUF0Hx65wE;K-puFi#i!Vy| z4a2ENU*{Jx;3rg55vqYGLl?raF!2Tcts3*kF^fX95xzy^A zW5#nTlPL(uNvgBHfSK#0C|99}Weo1-PW`pDs!p37&?k+reBJNn`2}9r&Y`!0jV5x#lS;jqSa8dv2mC;g7$Y3y{io6cJ`{OmL|As< zX6@vfI%*x>?djZDF#S@sJBtJ(4F45YP7@&~@`B_`#-UwJN4bBwk&6D6f-U^Rd9wMl zUp*w*Vbg!N8U~(Lu70L(8fb)1`ZvPVoqs2UV<)gk3B+wdU&l zGj%zN!<>~%Pz(4`X|He>Qg-hiZXuL8q**d|4O#L8Ld&`GaNg$09u>!?)EifV-@(Va z{(`h!$=|y}j2k$M%>+_a@ByJTiy+jiL7IqM0O>ms@HX1jO>^QlbVK3!wWzbr_}`sK z1~{gm;N=zvhHaL6^vb*=}H_m^5SAFF!5Jaw%u{Ez;fS%9^ z!d`{j{)UBnF>%8&n;}tD9Wa$l5O!GlQC@$iNxgO+Br5NV0P2Lwn0aK8Y3Iu4XH6_^ zXy-M*S0lR}Luba?X3h!hBV{;ZPjB|Q$mGD%oyg-rK0OKKdUlSBtxza)G#8DlP+i4q zQYJX%x_dAWwL(^4AoD@SYbl}qG;_(rc*2=qQH0Mbb_ZcjN_nKqw<`T7;ns>>%&`35 zPFA@e{j!U;Uu_Z9({7PSsgJ>qbQTYcTCscN8mamzB7t_ral4xyI81|`%yukkg28`o zt6CYcumLRgRJpDywW@U#6wC2^w*DxGQLPy)8n4GV>>hIxbH{0J^~n1U>Q5L8&nCPV z)Dqb>5*~1*u=pdn-ReG94RIHb#dwT53l>AUV!O}eYpw_v$_(5KOxQnipt5kDA=tz< zRb+pK`n(gZB+na6;-b5ih-({SseRknD^`#620#}aZOyN`CYJ_vs*;*!HYN_4U1nE1 zGXG7ohSI6vkxM}YaO8YWK-Jk+i>EM#>NXW%y$J{~8XZLO(2nkmVs~`*7u+n>VTuZ| znTby9w{-v5;>Rh(fbqZP*XmY8PmefKohU#PIzq)#ZV0~BNjAVish^Os94(S{3~U3#h(KG^%z;+=)f!{zw6aII+x@QtSoRPM4ct6OJD{xO6nj*DaN&)Pn0Xkf+F^_qq! zJWs`lbdX}KQy@|%oMRvKFug3WQnk-gq-v9n#_))-Sj_&c(b^Yp=BT>khaDLgzH-U_ zgrd)sHbch<#oXC~V@zRj?q9di7<7`9GHGcK^=|=eFN%4y|0eUN1s}r*=Kc~=gH7Xd z#4WpG1_6WeLFP|f&gg~LF62>ML5ok@S)DA(DkZ*m!K>3GME*~d6UHs zS1+j0uWDe2mpEahg)WkzAagKVuvfWc02IY4Axoe`L3vyf)Z=@(3lDBeC;{i#D~(h# zkd6K5tsGOhvRZrQdfcNH#K%CQ5g$2VG-lVPtwWwr6`{zM-s{0hZhRGCEZ*`sBi}9X zx~W3l0M+N`9?_cCx5DiA(#fT=qg{k_6#IrOv=b1%q5xYZ3P|sju~Le3KKdXi;nguN z1Vv6-em=s)J*t*)XrZ~oU=_}fi*~qWNzPKr0Wg-wUjjv_L<8FG`>7nd>X?VV2| zDV$62=&7Q9t(a*goM)?hM#*-;EvV2A-J&IuFI28OLB*_M5_~i`*>oO>#EgPJeoHnO znB%PUc|>zgs)H6kmRX+qOl<+FlpDB!-}VT-tV;&F8s5^Z3hAlZ)(v4*p9J+v$G98O z40Jm_FG8@l>JmxRHr+>P54y({F9ImOWqJAjFYwSt*3EqLN!f1=;qCGJ@8$CwQ^aKYN32`aAVqg1B+QBNT}eX)Zpax88eKL4LbZl_YP`B)-3HXc5R=Mp$yp>clh&e)t>b`V~#JfvmsA$b#4UK4&jR$%n< zN+~S6K+8_Ip&n^t0BBsKO;hL_AfUFMRga*~aw-@>6=XAT3fTk7bLKF3Xy;z~XKoFn2F8&h4Mlb~M7mM10|hMN8lE`y;o&jXwUI5WnF!t!VTm5GEM)LB z+>Ku)YrJK>5L>nu=HNKG!$M8>`%t$#C6A?Me-4fiy)C#BT+Hiar*Im13!0w7?Ew(HKCuul9L3O#N+Dq~x0ZEz-GO zDtnmEB|nBhI+-zzLc-u4XDQeA2OvI#W1*stg}~>aV2hf@Dd!=}hm~$${h?FolI!7d zz{bX-#SOhkZWZIiniAgfy|mj>GLXG@Yb2X~KWoAr?crIh>fc3GhBI$L^{_)MJVO}4 z!$y)i+!IQ-%!qCt8;?hPfzaT@JsoF=T!@Rv$uAP1!lvy6cU&*{GOLgTdT}@pV=+xnjo2UOt286b;=7bx31qsftKrR-xM9k}wst?{Ds+X|r+zTkCh&O@-# z&fEYaczk??Qh-FS`G!jiz4j>xEAo`cKl`M;RC4-NYYWv-;R06vcu^#o_6SWaqAon0 zc&iR;D2l9{MMv-NZCo;l>ZM;Dir9-h#k4!K+&o(e^AaZ|EXEngZIz)EqEczfC9`V;+`kxzp%kV-VYJT( zy$aP^UvXaMixQ0gBY$3YmHi3>#hP99MWX8%Gt#mRc|;HF-DdE9MsWg$`$a6z4NtBqfK)A;zthz!)P?N90E zu53m<;x#kNG>pPdV_!2xBuh(4<->9P%az(`e%l@;hd)%EK!;*Z`();eNG{mocO^`28Zx(QSPyieQm$B?5iMU2h#IbZ|_xZo#dHYf8|F zBYlpc7@JdS+n-qv`(~Li-Tx3R;AhgxM~_xmALY(Qx$2HbeLu8^^q)=+fQ+3C7I6(43A*Gz*yS8&=-HbSm5kCG*eVeeNCfG<5+W#q`n&JwotX}i1cBzPNJc$^F!EU7 zk*qN(%ulKZbvkk3Fs#~dVf zMOUfgN7TyhgGeu)*q;e%7o=0OqM3BG|6`YU@5$1C=!>bz#fHC2?e{>oLC?sz-Gzz& z14Z!Ywzg!d*#1>sIt9)^eGts?_7;2WBN^OzrFvrHih#Y!J+4knX8NP=^yZ88!L*zq zg-_8zEj6Z#$6Y?u$Zs9(50eE4(1zQLev^`^+hGkQ2+76=cmWd-f^0p&N=>g)G|2%9$0_XNswvVkVa@oNYvXXGuB>3mP0=jNWAbM2%pLD;<82psW*c51X5g?6 z)Dgv{WZb7TvoX7=i=z@Iuv~Wdx-AtvZ$6=mO9+5xVq*rh@Ec%sKdX)av5o^<`BZmr zj7RXOY-(`oDm}<>c*R@|UmiH~n+&2zMY{WR(HPEN&Mq@wFfaVGAi(9LVqD5`C!J2J z$5sU$mA9V-@h#;DRq-EzV`W<Eo7(5tUit|Qb4LEv2@cCm~^GK7wd zHGm48r};CjqU6rk1_)DthM@r=tLk>8JJv?6@yxPNoEZ3Hch_awFMXs`e4BQBUutjl zv?4fjkKs`esIf4b7aM5$_wok{k_^JuN3PR_rbDACY7cOVP% z!+2FF0aiQ8vS&IJ)H84d-^x4}syI}AJfo6Q%$gCfC4?87synqLARwnv#3(wgSM}MAV81NARMWn!1VfrHR;c(D^Lt&_VV@Nk6>xz#`xI@el0ZAZXGC(i9f&`D~JT^xJ8 z-`T(Uw5jujGOw;VAB+MD4IVV<>vV(bgZ1+idOGcUA0ADvbnr#u~i}$JRXD=CyeIZ+?I2 zywC7&i>YW7tYUjrJtNr&G@X&6t6YbDFA*tewyV+oQGMd)yU7H5FhZP5-S4zz*DotT76N^+v8G{ zl0co@!&fI7y}V8q83&xpB6n=pFWl$r-E2tc;M0twJH?eiqChU> zB#4AMa)df({+lEZnbT|DDg@)7)iTp5B`!_?bCooNuK1%5UfQQ?)%yH8W4Vs4PZ!=2 zB$D|>niXp`Ly-O5kV>N;nPeJmu6Or+z(Y2!6!8u?1)MYBR_K$S+UmEtqGMe+umTm@ z_dUxoPUF%HI=h+HLEJDMDeX9xCpIjHLu5s-`{xweTQq}ezYC{cHtBlqfOkUgc(9#S z{9?76j4-Ao$Qex&{D$5WX1RBu_l^kLt$_obI;oTP+4o~KdUnb9?*hw}=veHCZYWGZ zuFrdhSEV5T8ECrguYKrI{zn_C#8|^jz;?_rSTg$vaz_&b+rBu)kqbNIQm8;-#~m;y zK1$uIfJ}oa@{H%LmsKnPLj?O5Zu0YO)1{YI7NFr=PpYj`+t-ZFdpwO8wSkJcnt+Tt z=74ue@G!bC&lc8%t{6^MeZg+KnjRI?OZfrtwZ0AlK`tEfh>$_J!_1x}X^RWU&}{~^ zfr_16gy}DkDmPBZHeQd77+UMaP=vyp)@A1;cML+W)0f%we z&P{u10=5@o4ZyRGBv=h%@f_J*=hSR&o#K_pMA$RfD9pYl!A>eEx*VeP48uLTaSf_jBCs<(>g`mPulCx~di~Vh&Fs))tz8gDlXt z$@2ep2YUduvy1>2pB{O8uJ~5A7HfH@D69>gg;u&ke5Lo&@;LO+SD`b1zj5$;P2d)a zoaz)2s>Um~j82ryx6@T0?ke5C*{8t3DP0UNFdqv$V zP0?gc%Y!A;SC^O%st>(|Hhx&kJJbrjw;o@By0`p^`+Cgr$>SGB|xvhnK9bsPcAD%i$ATcn&ad}naAz6bPw3|`G z&QVd&{DzRtK&tLki-hc!Kh|8=lhZg0l7V;ER# zdZtKNZYW%(>_tr5sEz_hBm?d3^G|z_f5s_gt#pD0Co5xuqm_bafG_7 z0Y~93e~3zsF>Qb0az3+a==@O}98Jp z@Z^2&&=&7plEFss6@O2ta@x^I!h32P=H?DX-xf|Fpj91%0^Fxjd-w?Ha)u};CvFLK zD#%V3X0%4N7R6^EW(iBiWvhSmM~_#e ztnMsy5d*CMM91{LNy@ZzL1HU*G7myUVKiP2mj?~&5X%mtTZ?Dl0w0TuxBD&z2MMg( z{}UEjn>YU;{ye`Wjd**+eUnGexQszP^>t1?;@X29U#Y2uc1D|eDBp33;|Mr%kTHF6 zF?vtl_Soo*9!g&?Df;ZyHy2d$RvOgGH!(Gzrn_*}Q(_-FC}(aEqv(Z% zJ8$GWSf7jhnHef|5U&UEUIrNuB}B_YxqwpWchsZlJ*@p=QpVbS_c6zmXXgg#7UKP1&O+)t#DA-E@ zuZ(U3PPiCtlp>7mm5INA9ZqM#akbVJ_)Ai*)>^_i7KY^PZ|-tkP+Aqz_4ML4#>x?J z7mZ>b5-DuWlxnM{EC`Rs2_u@%c-G8W0)>657V<}|rx&167ya#?PP04nx;mER{?h*? z?YBp$8(Sbe^7g?1+TyRKa9Ap22SuCRE7Gxja`v5x$20+!^-@U+5aT*T&s}A71o$65 zD$gUWS4fw8Vfd<)posuatZ17gXdxVBx6j$T=7|$`okYd*QuE9a`N|vNscz@mK3gJV zzD# zV%|punOe^4@XuNexwO